@stanfordspezi/spezi-web-design-system
Version:
Stanford Biodesign Digital Health Spezi Web Design System
175 lines (174 loc) • 5.09 kB
JavaScript
function d(e, t) {
const n = {};
for (let o = 0; o < e.length; o++) {
const i = e[o], f = t(i, o, e);
n[f] = i;
}
return n;
}
function w(e) {
return [...new Set(e)];
}
function S() {
}
function m(e) {
return Object.getOwnPropertySymbols(e).filter((t) => Object.prototype.propertyIsEnumerable.call(e, t));
}
function A(e) {
return e == null ? e === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(e);
}
const I = "[object RegExp]", B = "[object String]", U = "[object Number]", N = "[object Boolean]", O = "[object Arguments]", P = "[object Symbol]", x = "[object Date]", z = "[object Map]", E = "[object Set]", L = "[object Array]", D = "[object Function]", F = "[object ArrayBuffer]", b = "[object Object]", K = "[object Error]", R = "[object DataView]", C = "[object Uint8Array]", M = "[object Uint8ClampedArray]", W = "[object Uint16Array]", q = "[object Uint32Array]", v = "[object BigUint64Array]", Z = "[object Int8Array]", G = "[object Int16Array]", H = "[object Int32Array]", J = "[object BigInt64Array]", Q = "[object Float32Array]", X = "[object Float64Array]";
function T(e) {
if (!e || typeof e != "object")
return !1;
const t = Object.getPrototypeOf(e);
return t === null || t === Object.prototype || Object.getPrototypeOf(t) === null ? Object.prototype.toString.call(e) === "[object Object]" : !1;
}
function Y(e, t) {
return e === t || Number.isNaN(e) && Number.isNaN(t);
}
function _(e, t, n) {
return g(e, t, void 0, void 0, void 0, void 0, n);
}
function g(e, t, n, o, i, f, a) {
const y = a(e, t, n, o, i, f);
if (y !== void 0)
return y;
if (typeof e == typeof t)
switch (typeof e) {
case "bigint":
case "string":
case "boolean":
case "symbol":
case "undefined":
return e === t;
case "number":
return e === t || Object.is(e, t);
case "function":
return e === t;
case "object":
return j(e, t, f, a);
}
return j(e, t, f, a);
}
function j(e, t, n, o) {
if (Object.is(e, t))
return !0;
let i = A(e), f = A(t);
if (i === O && (i = b), f === O && (f = b), i !== f)
return !1;
switch (i) {
case B:
return e.toString() === t.toString();
case U: {
const r = e.valueOf(), u = t.valueOf();
return Y(r, u);
}
case N:
case x:
case P:
return Object.is(e.valueOf(), t.valueOf());
case I:
return e.source === t.source && e.flags === t.flags;
case D:
return e === t;
}
n = n ?? /* @__PURE__ */ new Map();
const a = n.get(e), y = n.get(t);
if (a != null && y != null)
return a === t;
n.set(e, t), n.set(t, e);
try {
switch (i) {
case z: {
if (e.size !== t.size)
return !1;
for (const [r, u] of e.entries())
if (!t.has(r) || !g(u, t.get(r), r, e, t, n, o))
return !1;
return !0;
}
case E: {
if (e.size !== t.size)
return !1;
const r = Array.from(e.values()), u = Array.from(t.values());
for (let l = 0; l < r.length; l++) {
const s = r[l], c = u.findIndex((p) => g(s, p, void 0, e, t, n, o));
if (c === -1)
return !1;
u.splice(c, 1);
}
return !0;
}
case L:
case C:
case M:
case W:
case q:
case v:
case Z:
case G:
case H:
case J:
case Q:
case X: {
if (typeof Buffer < "u" && Buffer.isBuffer(e) !== Buffer.isBuffer(t) || e.length !== t.length)
return !1;
for (let r = 0; r < e.length; r++)
if (!g(e[r], t[r], r, e, t, n, o))
return !1;
return !0;
}
case F:
return e.byteLength !== t.byteLength ? !1 : j(new Uint8Array(e), new Uint8Array(t), n, o);
case R:
return e.byteLength !== t.byteLength || e.byteOffset !== t.byteOffset ? !1 : j(new Uint8Array(e), new Uint8Array(t), n, o);
case K:
return e.name === t.name && e.message === t.message;
case b: {
if (!(j(e.constructor, t.constructor, n, o) || T(e) && T(t)))
return !1;
const u = [...Object.keys(e), ...m(e)], l = [...Object.keys(t), ...m(t)];
if (u.length !== l.length)
return !1;
for (let s = 0; s < u.length; s++) {
const c = u[s], p = e[c];
if (!Object.hasOwn(t, c))
return !1;
const h = t[c];
if (!g(p, h, c, e, t, n, o))
return !1;
}
return !0;
}
default:
return !1;
}
} finally {
n.delete(e), n.delete(t);
}
}
function $(e, t) {
return _(e, t, S);
}
const V = ({
oldItems: e,
newItems: t,
getId: n,
onDelete: o,
onCreate: i,
onUpdate: f,
isEqual: a = $
}) => {
const y = d(e, n), r = d(t, n);
w([
...Object.keys(y),
...Object.keys(r)
]).forEach((l) => {
const s = y[l], c = r[l];
!c && s ? o(n(s), s) : c && !s ? i(n(c), c) : s && c && !a(s, c) && f(n(c), c, s);
});
};
export {
V as syncData
};