@cascivo/react 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/dist/badge/badge.js +1 -1
- package/dist/context-menu/context-menu.js +42 -38
- package/dist/index.d.ts +235 -141
- package/dist/infinite-scroll/infinite-scroll.css +1 -0
- package/dist/infinite-scroll/infinite-scroll.js +49 -0
- package/dist/infinite-scroll/infinite-scroll.module.js +8 -0
- package/dist/large-title-header/large-title-header.css +1 -0
- package/dist/large-title-header/large-title-header.js +38 -0
- package/dist/large-title-header/large-title-header.module.js +13 -0
- package/dist/link/link.css +1 -1
- package/dist/link/link.module.js +1 -1
- package/dist/menu/menu.js +47 -43
- package/dist/node/badge/badge.js +1 -1
- package/dist/node/context-menu/context-menu.js +42 -38
- package/dist/node/infinite-scroll/infinite-scroll.js +49 -0
- package/dist/node/infinite-scroll/infinite-scroll.module.js +7 -0
- package/dist/node/large-title-header/large-title-header.js +38 -0
- package/dist/node/large-title-header/large-title-header.module.js +12 -0
- package/dist/node/link/link.module.js +1 -1
- package/dist/node/menu/menu.js +47 -43
- package/dist/node/react/src/index.js +27 -23
- package/dist/node/reorder-list/reorder-list.js +143 -0
- package/dist/node/reorder-list/reorder-list.module.js +11 -0
- package/dist/node/skip-nav/skip-nav.js +1 -0
- package/dist/node/tabs/tabs.js +38 -38
- package/dist/node/tag/tag.module.js +2 -2
- package/dist/node/virtual-list/virtual-list.js +40 -0
- package/dist/node/virtual-list/virtual-list.module.js +7 -0
- package/dist/node/wheel-picker/wheel-picker.js +84 -0
- package/dist/node/wheel-picker/wheel-picker.module.js +8 -0
- package/dist/react/src/index.js +27 -23
- package/dist/reorder-list/reorder-list.css +1 -0
- package/dist/reorder-list/reorder-list.js +143 -0
- package/dist/reorder-list/reorder-list.module.js +12 -0
- package/dist/skip-nav/skip-nav.js +1 -0
- package/dist/styles.css +41 -4
- package/dist/tabs/tabs.js +38 -38
- package/dist/tag/tag.css +1 -1
- package/dist/tag/tag.module.js +2 -2
- package/dist/virtual-list/virtual-list.css +1 -0
- package/dist/virtual-list/virtual-list.js +40 -0
- package/dist/virtual-list/virtual-list.module.js +8 -0
- package/dist/wheel-picker/wheel-picker.css +1 -0
- package/dist/wheel-picker/wheel-picker.js +84 -0
- package/dist/wheel-picker/wheel-picker.module.js +9 -0
- package/package.json +4 -4
- package/readme.body.md +6 -1
- package/dist/node/react/src/theme.js +0 -78
- package/dist/node/storage/src/drivers.js +0 -34
- package/dist/node/storage/src/persisted-signal.js +0 -41
- package/dist/react/src/theme.js +0 -78
- package/dist/storage/src/drivers.js +0 -34
- package/dist/storage/src/persisted-signal.js +0 -41
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascivo/react",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Prebuilt cascivo design system components — use without copying source. @cascivo/themes installs with it; pair with @cascivo/charts (data-viz) and @cascivo/icons. Docs offline: npx @cascivo/docs",
|
|
6
6
|
"keywords": [
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"provenance": true
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@cascivo/core": "^0.16.
|
|
49
|
-
"@cascivo/i18n": "^0.16.
|
|
50
|
-
"@cascivo/themes": "^0.4.
|
|
48
|
+
"@cascivo/core": "^0.16.1",
|
|
49
|
+
"@cascivo/i18n": "^0.16.1",
|
|
50
|
+
"@cascivo/themes": "^0.4.11"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@testing-library/jest-dom": "^6.9.1",
|
package/readme.body.md
CHANGED
|
@@ -231,7 +231,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
231
231
|
|
|
232
232
|
## Component index
|
|
233
233
|
|
|
234
|
-
|
|
234
|
+
197 components, exported from `@cascivo/react`. Full props, examples, and live demos at [cascivo.com/docs](https://cascivo.com/docs).
|
|
235
235
|
|
|
236
236
|
### Inputs
|
|
237
237
|
|
|
@@ -264,6 +264,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
264
264
|
- **Radio** — Single choice from a set, grouped with RadioGroup
|
|
265
265
|
- **RadioCard** — Selectable card backed by a native radio input. Use RadioCardGroup for single-select groups.
|
|
266
266
|
- **RatingGroup** — Star rating input with accessible radio group pattern
|
|
267
|
+
- **ReorderList** — List whose rows can be reordered by pointer drag or entirely by keyboard
|
|
267
268
|
- **Search** — Search input with debounced search callback and clear button
|
|
268
269
|
- **SegmentedControl** — Mutually exclusive toggle group
|
|
269
270
|
- **Select** — Native select menu styled to match the design system
|
|
@@ -275,6 +276,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
275
276
|
- **TimePicker** — Native time input wrapper with label, hint, error, and size variants
|
|
276
277
|
- **Toggle** — On/off switch built as an accessible button
|
|
277
278
|
- **ToggleGroup** — A set of toggle buttons for single or multiple selection
|
|
279
|
+
- **WheelPicker** — iOS-style drum picker — a column of options that scrolls and snaps to a selection
|
|
278
280
|
|
|
279
281
|
### Display
|
|
280
282
|
|
|
@@ -335,6 +337,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
335
337
|
- **TreeView** — Hierarchical, expandable tree of nodes with keyboard navigation and selection
|
|
336
338
|
- **User** — Identity composite: an avatar with a name, description, and optional action slot
|
|
337
339
|
- **UsersTablePage** — Full users management page with table, search, and invite action.
|
|
340
|
+
- **VirtualList** — Renders only the rows inside the viewport, so list length costs no extra DOM
|
|
338
341
|
- **VisuallyHidden** — Hides content visually while keeping it available to screen readers
|
|
339
342
|
|
|
340
343
|
### Overlay
|
|
@@ -363,6 +366,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
363
366
|
- **Dock** — Fixed bottom navigation bar for mobile app shells with up to 5 items
|
|
364
367
|
- **Header** — App top bar with brand, primary navigation links, and an actions slot
|
|
365
368
|
- **HeaderPanel** — Non-modal panel anchored below the shell header at the inline-end edge — hosts notifications, app switcher, user settings
|
|
369
|
+
- **LargeTitleHeader** — Scrolling region whose large title collapses into a compact sticky bar as it scrolls
|
|
366
370
|
- **Link** — Styled anchor for navigation, standalone or inline within prose
|
|
367
371
|
- **Menubar** — Horizontal application menu bar with keyboard-navigable dropdown menus
|
|
368
372
|
- **MenuButton** — A button that opens an anchored action menu of one-shot commands
|
|
@@ -409,6 +413,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
409
413
|
|
|
410
414
|
### Feedback
|
|
411
415
|
|
|
416
|
+
- **InfiniteScroll** — Loads the next page when the end of a list scrolls into view
|
|
412
417
|
- **InlineLoading** — Compact inline status indicator that pairs a label with a loading, success, or error state
|
|
413
418
|
- **Notification** — Inline, actionable notification banner that surfaces a titled message with an optional recovery action
|
|
414
419
|
- **Progress** — Horizontal bar showing the completion progress of a tracked operation
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { persistedSignal as e } from "../../storage/src/persisted-signal.js";
|
|
4
|
-
import { useRef as t } from "react";
|
|
5
|
-
import { useSignalEffect as n, useSignals as r } from "@cascivo/core";
|
|
6
|
-
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
|
-
//#region src/theme.tsx
|
|
8
|
-
var s = "cascivo-theme", c = "data-theme";
|
|
9
|
-
function l() {
|
|
10
|
-
return globalThis.process?.env?.NODE_ENV !== "production";
|
|
11
|
-
}
|
|
12
|
-
var u = /* @__PURE__ */ new Set();
|
|
13
|
-
function d(e, t) {
|
|
14
|
-
l() && (e === null || typeof document > "u" || typeof requestAnimationFrame != "function" || u.has(t) || requestAnimationFrame(() => {
|
|
15
|
-
u.has(t) || getComputedStyle(e).getPropertyValue("--cascivo-color-accent").trim() === "" && (u.add(t), console.warn(`cascivo ThemeProvider: data-theme=${JSON.stringify(t)} was set, but no cascivo theme CSS defines it — every --cascivo-color-* token is unresolved, so components render grayscale. Import '@cascivo/themes/all.css' once in your entry (or '@cascivo/react/styles.css', which bundles the light and dark themes). Using a custom theme? Ensure its stylesheet is loaded and defines [data-theme=${JSON.stringify(t)}]. Docs: https://cascivo.com/docs/theming.md — offline: npx -y @cascivo/docs guide theming`));
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
var f = null, p = {
|
|
19
|
-
storageKey: s,
|
|
20
|
-
defaultTheme: "light",
|
|
21
|
-
explicit: !1
|
|
22
|
-
};
|
|
23
|
-
function m(e) {
|
|
24
|
-
return typeof window > "u" || typeof window.matchMedia != "function" ? e : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : e;
|
|
25
|
-
}
|
|
26
|
-
function h() {
|
|
27
|
-
return p.explicit ? p.defaultTheme : m(p.defaultTheme);
|
|
28
|
-
}
|
|
29
|
-
function g() {
|
|
30
|
-
return f ??= e(p.storageKey, h()), f;
|
|
31
|
-
}
|
|
32
|
-
var _ = !1, v = !1;
|
|
33
|
-
function y(e) {
|
|
34
|
-
!l() || v || typeof requestAnimationFrame == "function" && requestAnimationFrame(() => {
|
|
35
|
-
_ || v || (v = !0, console.warn(`cascivo setTheme(${JSON.stringify(e)}): no <ThemeProvider> is mounted, so the theme signal updated but the ${c} attribute was never written — nothing on the page will restyle. Wrap your app in <ThemeProvider> (it is SSR-safe and persists the choice), or call applyTheme() to write the attribute directly if you are theming outside React. Docs: https://cascivo.com/docs/theming.md — offline: npx -y @cascivo/docs guide theming`));
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function b(e) {
|
|
39
|
-
g().value = e, y(e);
|
|
40
|
-
}
|
|
41
|
-
function x(e, t) {
|
|
42
|
-
g().value = e;
|
|
43
|
-
let n = t ?? (typeof document < "u" ? document.documentElement : null);
|
|
44
|
-
n !== null && (n.setAttribute(c, e), d(n, e));
|
|
45
|
-
}
|
|
46
|
-
function S() {
|
|
47
|
-
return r(), [g().value, b];
|
|
48
|
-
}
|
|
49
|
-
function C() {
|
|
50
|
-
return g();
|
|
51
|
-
}
|
|
52
|
-
function w(e) {
|
|
53
|
-
return JSON.stringify(e).replace(/</g, "\\u003c");
|
|
54
|
-
}
|
|
55
|
-
function T({ defaultTheme: e, value: r, storageKey: l = s, attribute: u = c, target: m, onChange: h, nonce: v, children: y }) {
|
|
56
|
-
let b = t(!1);
|
|
57
|
-
b.current || (b.current = !0, (f === null || p.storageKey !== l) && (p = {
|
|
58
|
-
storageKey: l,
|
|
59
|
-
defaultTheme: e ?? "light",
|
|
60
|
-
explicit: e !== void 0
|
|
61
|
-
}, f = null));
|
|
62
|
-
let x = g();
|
|
63
|
-
r !== void 0 && (x.value = r);
|
|
64
|
-
let S = t(h);
|
|
65
|
-
return S.current = h, n(() => {
|
|
66
|
-
let e = x.value, t = m ? m.current : typeof document < "u" ? document.documentElement : null;
|
|
67
|
-
_ = !0, t?.setAttribute(u, e), d(t, e), S.current?.(e);
|
|
68
|
-
}), r !== void 0 && !m ? /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("script", {
|
|
69
|
-
nonce: v,
|
|
70
|
-
dangerouslySetInnerHTML: { __html: `document.documentElement.setAttribute(${w(u)},${w(r)})` }
|
|
71
|
-
}), y] }) : /* @__PURE__ */ a(i, { children: y });
|
|
72
|
-
}
|
|
73
|
-
function E(e = {}) {
|
|
74
|
-
let t = JSON.stringify(e.storageKey ?? s), n = JSON.stringify(e.attribute ?? c), r = JSON.stringify(e.defaultTheme ?? "light"), i = e.defaultTheme === void 0 ? "if(typeof matchMedia==='function'){if(matchMedia('(prefers-color-scheme: dark)').matches)v='dark';else if(matchMedia('(prefers-color-scheme: light)').matches)v='light';}" : "";
|
|
75
|
-
return `(function(){try{var v=${r};` + i + `var raw=localStorage.getItem(${t});if(raw){v=raw;try{var e=JSON.parse(raw);if(e&&typeof e==='object'&&'value'in e)v=e.value;}catch(_){}}document.documentElement.setAttribute(${n},v);}catch(_){}})();`;
|
|
76
|
-
}
|
|
77
|
-
//#endregion
|
|
78
|
-
export { T as ThemeProvider, x as applyTheme, b as setTheme, E as themePreloadScript, C as themeSignal, S as useTheme };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
//#region ../storage/src/drivers.ts
|
|
2
|
-
function e() {
|
|
3
|
-
let e = /* @__PURE__ */ new Map();
|
|
4
|
-
return {
|
|
5
|
-
get: (t) => e.get(t) ?? null,
|
|
6
|
-
set: (t, n) => {
|
|
7
|
-
e.set(t, n);
|
|
8
|
-
},
|
|
9
|
-
remove: (t) => {
|
|
10
|
-
e.delete(t);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function t() {
|
|
15
|
-
return typeof window > "u" ? e() : {
|
|
16
|
-
get: (e) => window.localStorage.getItem(e),
|
|
17
|
-
set: (e, t) => {
|
|
18
|
-
try {
|
|
19
|
-
window.localStorage.setItem(e, t);
|
|
20
|
-
} catch {}
|
|
21
|
-
},
|
|
22
|
-
remove: (e) => {
|
|
23
|
-
window.localStorage.removeItem(e);
|
|
24
|
-
},
|
|
25
|
-
subscribe(e, t) {
|
|
26
|
-
let n = (n) => {
|
|
27
|
-
n.storageArea === window.localStorage && n.key === e && t(n.newValue);
|
|
28
|
-
};
|
|
29
|
-
return window.addEventListener("storage", n), () => window.removeEventListener("storage", n);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { t as localStorageDriver };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { localStorageDriver as e } from "./drivers.js";
|
|
2
|
-
import { effect as t, signal as n } from "@cascivo/core";
|
|
3
|
-
//#region ../storage/src/persisted-signal.ts
|
|
4
|
-
function r(r, i, a = {}) {
|
|
5
|
-
let o = a.driver ?? e(), s = a.version ?? 1, c = n(i), l = n(!1), u = !1;
|
|
6
|
-
function d(e) {
|
|
7
|
-
if (e !== null) try {
|
|
8
|
-
let t = JSON.parse(e);
|
|
9
|
-
if (typeof t != "object" || !t || typeof t.v != "number") return;
|
|
10
|
-
if (t.v !== s) {
|
|
11
|
-
if (!a.migrate) return;
|
|
12
|
-
let e = a.migrate(t.value, t.v);
|
|
13
|
-
return o.set(r, JSON.stringify({
|
|
14
|
-
v: s,
|
|
15
|
-
value: e
|
|
16
|
-
})), e;
|
|
17
|
-
}
|
|
18
|
-
return t.value;
|
|
19
|
-
} catch {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function f(e) {
|
|
24
|
-
let t = d(e);
|
|
25
|
-
t !== void 0 && (u = !0, c.value = t, u = !1);
|
|
26
|
-
}
|
|
27
|
-
let p = o.get(r);
|
|
28
|
-
p instanceof Promise ? p.then((e) => {
|
|
29
|
-
f(e), l.value = !0;
|
|
30
|
-
}) : (f(p), l.value = !0), t(() => {
|
|
31
|
-
let e = c.value;
|
|
32
|
-
!l.value || u || o.set(r, JSON.stringify({
|
|
33
|
-
v: s,
|
|
34
|
-
value: e
|
|
35
|
-
}));
|
|
36
|
-
}), o.subscribe?.(r, f);
|
|
37
|
-
let m = c;
|
|
38
|
-
return m.ready = l, m;
|
|
39
|
-
}
|
|
40
|
-
//#endregion
|
|
41
|
-
export { r as persistedSignal };
|
package/dist/react/src/theme.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { persistedSignal as e } from "../../storage/src/persisted-signal.js";
|
|
4
|
-
import { useRef as t } from "react";
|
|
5
|
-
import { useSignalEffect as n, useSignals as r } from "@cascivo/core";
|
|
6
|
-
import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
7
|
-
//#region src/theme.tsx
|
|
8
|
-
var s = "cascivo-theme", c = "data-theme";
|
|
9
|
-
function l() {
|
|
10
|
-
return globalThis.process?.env?.NODE_ENV !== "production";
|
|
11
|
-
}
|
|
12
|
-
var u = /* @__PURE__ */ new Set();
|
|
13
|
-
function d(e, t) {
|
|
14
|
-
l() && (e === null || typeof document > "u" || typeof requestAnimationFrame != "function" || u.has(t) || requestAnimationFrame(() => {
|
|
15
|
-
u.has(t) || getComputedStyle(e).getPropertyValue("--cascivo-color-accent").trim() === "" && (u.add(t), console.warn(`cascivo ThemeProvider: data-theme=${JSON.stringify(t)} was set, but no cascivo theme CSS defines it — every --cascivo-color-* token is unresolved, so components render grayscale. Import '@cascivo/themes/all.css' once in your entry (or '@cascivo/react/styles.css', which bundles the light and dark themes). Using a custom theme? Ensure its stylesheet is loaded and defines [data-theme=${JSON.stringify(t)}]. Docs: https://cascivo.com/docs/theming.md — offline: npx -y @cascivo/docs guide theming`));
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
var f = null, p = {
|
|
19
|
-
storageKey: s,
|
|
20
|
-
defaultTheme: "light",
|
|
21
|
-
explicit: !1
|
|
22
|
-
};
|
|
23
|
-
function m(e) {
|
|
24
|
-
return typeof window > "u" || typeof window.matchMedia != "function" ? e : window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : e;
|
|
25
|
-
}
|
|
26
|
-
function h() {
|
|
27
|
-
return p.explicit ? p.defaultTheme : m(p.defaultTheme);
|
|
28
|
-
}
|
|
29
|
-
function g() {
|
|
30
|
-
return f ??= e(p.storageKey, h()), f;
|
|
31
|
-
}
|
|
32
|
-
var _ = !1, v = !1;
|
|
33
|
-
function y(e) {
|
|
34
|
-
!l() || v || typeof requestAnimationFrame == "function" && requestAnimationFrame(() => {
|
|
35
|
-
_ || v || (v = !0, console.warn(`cascivo setTheme(${JSON.stringify(e)}): no <ThemeProvider> is mounted, so the theme signal updated but the ${c} attribute was never written — nothing on the page will restyle. Wrap your app in <ThemeProvider> (it is SSR-safe and persists the choice), or call applyTheme() to write the attribute directly if you are theming outside React. Docs: https://cascivo.com/docs/theming.md — offline: npx -y @cascivo/docs guide theming`));
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function b(e) {
|
|
39
|
-
g().value = e, y(e);
|
|
40
|
-
}
|
|
41
|
-
function x(e, t) {
|
|
42
|
-
g().value = e;
|
|
43
|
-
let n = t ?? (typeof document < "u" ? document.documentElement : null);
|
|
44
|
-
n !== null && (n.setAttribute(c, e), d(n, e));
|
|
45
|
-
}
|
|
46
|
-
function S() {
|
|
47
|
-
return r(), [g().value, b];
|
|
48
|
-
}
|
|
49
|
-
function C() {
|
|
50
|
-
return g();
|
|
51
|
-
}
|
|
52
|
-
function w(e) {
|
|
53
|
-
return JSON.stringify(e).replace(/</g, "\\u003c");
|
|
54
|
-
}
|
|
55
|
-
function T({ defaultTheme: e, value: r, storageKey: l = s, attribute: u = c, target: m, onChange: h, nonce: v, children: y }) {
|
|
56
|
-
let b = t(!1);
|
|
57
|
-
b.current || (b.current = !0, (f === null || p.storageKey !== l) && (p = {
|
|
58
|
-
storageKey: l,
|
|
59
|
-
defaultTheme: e ?? "light",
|
|
60
|
-
explicit: e !== void 0
|
|
61
|
-
}, f = null));
|
|
62
|
-
let x = g();
|
|
63
|
-
r !== void 0 && (x.value = r);
|
|
64
|
-
let S = t(h);
|
|
65
|
-
return S.current = h, n(() => {
|
|
66
|
-
let e = x.value, t = m ? m.current : typeof document < "u" ? document.documentElement : null;
|
|
67
|
-
_ = !0, t?.setAttribute(u, e), d(t, e), S.current?.(e);
|
|
68
|
-
}), r !== void 0 && !m ? /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("script", {
|
|
69
|
-
nonce: v,
|
|
70
|
-
dangerouslySetInnerHTML: { __html: `document.documentElement.setAttribute(${w(u)},${w(r)})` }
|
|
71
|
-
}), y] }) : /* @__PURE__ */ a(i, { children: y });
|
|
72
|
-
}
|
|
73
|
-
function E(e = {}) {
|
|
74
|
-
let t = JSON.stringify(e.storageKey ?? s), n = JSON.stringify(e.attribute ?? c), r = JSON.stringify(e.defaultTheme ?? "light"), i = e.defaultTheme === void 0 ? "if(typeof matchMedia==='function'){if(matchMedia('(prefers-color-scheme: dark)').matches)v='dark';else if(matchMedia('(prefers-color-scheme: light)').matches)v='light';}" : "";
|
|
75
|
-
return `(function(){try{var v=${r};` + i + `var raw=localStorage.getItem(${t});if(raw){v=raw;try{var e=JSON.parse(raw);if(e&&typeof e==='object'&&'value'in e)v=e.value;}catch(_){}}document.documentElement.setAttribute(${n},v);}catch(_){}})();`;
|
|
76
|
-
}
|
|
77
|
-
//#endregion
|
|
78
|
-
export { T as ThemeProvider, x as applyTheme, b as setTheme, E as themePreloadScript, C as themeSignal, S as useTheme };
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
//#region ../storage/src/drivers.ts
|
|
2
|
-
function e() {
|
|
3
|
-
let e = /* @__PURE__ */ new Map();
|
|
4
|
-
return {
|
|
5
|
-
get: (t) => e.get(t) ?? null,
|
|
6
|
-
set: (t, n) => {
|
|
7
|
-
e.set(t, n);
|
|
8
|
-
},
|
|
9
|
-
remove: (t) => {
|
|
10
|
-
e.delete(t);
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
function t() {
|
|
15
|
-
return typeof window > "u" ? e() : {
|
|
16
|
-
get: (e) => window.localStorage.getItem(e),
|
|
17
|
-
set: (e, t) => {
|
|
18
|
-
try {
|
|
19
|
-
window.localStorage.setItem(e, t);
|
|
20
|
-
} catch {}
|
|
21
|
-
},
|
|
22
|
-
remove: (e) => {
|
|
23
|
-
window.localStorage.removeItem(e);
|
|
24
|
-
},
|
|
25
|
-
subscribe(e, t) {
|
|
26
|
-
let n = (n) => {
|
|
27
|
-
n.storageArea === window.localStorage && n.key === e && t(n.newValue);
|
|
28
|
-
};
|
|
29
|
-
return window.addEventListener("storage", n), () => window.removeEventListener("storage", n);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
//#endregion
|
|
34
|
-
export { t as localStorageDriver };
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { localStorageDriver as e } from "./drivers.js";
|
|
2
|
-
import { effect as t, signal as n } from "@cascivo/core";
|
|
3
|
-
//#region ../storage/src/persisted-signal.ts
|
|
4
|
-
function r(r, i, a = {}) {
|
|
5
|
-
let o = a.driver ?? e(), s = a.version ?? 1, c = n(i), l = n(!1), u = !1;
|
|
6
|
-
function d(e) {
|
|
7
|
-
if (e !== null) try {
|
|
8
|
-
let t = JSON.parse(e);
|
|
9
|
-
if (typeof t != "object" || !t || typeof t.v != "number") return;
|
|
10
|
-
if (t.v !== s) {
|
|
11
|
-
if (!a.migrate) return;
|
|
12
|
-
let e = a.migrate(t.value, t.v);
|
|
13
|
-
return o.set(r, JSON.stringify({
|
|
14
|
-
v: s,
|
|
15
|
-
value: e
|
|
16
|
-
})), e;
|
|
17
|
-
}
|
|
18
|
-
return t.value;
|
|
19
|
-
} catch {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function f(e) {
|
|
24
|
-
let t = d(e);
|
|
25
|
-
t !== void 0 && (u = !0, c.value = t, u = !1);
|
|
26
|
-
}
|
|
27
|
-
let p = o.get(r);
|
|
28
|
-
p instanceof Promise ? p.then((e) => {
|
|
29
|
-
f(e), l.value = !0;
|
|
30
|
-
}) : (f(p), l.value = !0), t(() => {
|
|
31
|
-
let e = c.value;
|
|
32
|
-
!l.value || u || o.set(r, JSON.stringify({
|
|
33
|
-
v: s,
|
|
34
|
-
value: e
|
|
35
|
-
}));
|
|
36
|
-
}), o.subscribe?.(r, f);
|
|
37
|
-
let m = c;
|
|
38
|
-
return m.ready = l, m;
|
|
39
|
-
}
|
|
40
|
-
//#endregion
|
|
41
|
-
export { r as persistedSignal };
|