@xeonr/platform-ui 1.6.2 → 1.7.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.
Files changed (55) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +11 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/kit/Anchored.d.ts.map +1 -1
  6. package/dist/kit/Anchored.js +4 -1
  7. package/dist/kit/Anchored.js.map +1 -1
  8. package/dist/kit/Badge.d.ts +23 -0
  9. package/dist/kit/Badge.d.ts.map +1 -1
  10. package/dist/kit/Badge.js +53 -0
  11. package/dist/kit/Badge.js.map +1 -1
  12. package/dist/kit/Button.d.ts +13 -0
  13. package/dist/kit/Button.d.ts.map +1 -1
  14. package/dist/kit/Button.js +7 -3
  15. package/dist/kit/Button.js.map +1 -1
  16. package/dist/kit/Checkbox.d.ts +34 -0
  17. package/dist/kit/Checkbox.d.ts.map +1 -0
  18. package/dist/kit/Checkbox.js +52 -0
  19. package/dist/kit/Checkbox.js.map +1 -0
  20. package/dist/kit/Color.d.ts +8 -1
  21. package/dist/kit/Color.d.ts.map +1 -1
  22. package/dist/kit/Color.js +14 -5
  23. package/dist/kit/Color.js.map +1 -1
  24. package/dist/kit/Controls.d.ts +2 -33
  25. package/dist/kit/Controls.d.ts.map +1 -1
  26. package/dist/kit/Controls.js +3 -44
  27. package/dist/kit/Controls.js.map +1 -1
  28. package/dist/kit/DataGrid.d.ts +42 -2
  29. package/dist/kit/DataGrid.d.ts.map +1 -1
  30. package/dist/kit/DataGrid.js +98 -7
  31. package/dist/kit/DataGrid.js.map +1 -1
  32. package/dist/kit/Form.d.ts +7 -1
  33. package/dist/kit/Form.d.ts.map +1 -1
  34. package/dist/kit/Form.js +7 -4
  35. package/dist/kit/Form.js.map +1 -1
  36. package/dist/kit/LogView.d.ts.map +1 -1
  37. package/dist/kit/LogView.js +45 -6
  38. package/dist/kit/LogView.js.map +1 -1
  39. package/dist/kit/Menu.d.ts +13 -2
  40. package/dist/kit/Menu.d.ts.map +1 -1
  41. package/dist/kit/Menu.js +32 -6
  42. package/dist/kit/Menu.js.map +1 -1
  43. package/dist/kit/Spectrum.d.ts +40 -0
  44. package/dist/kit/Spectrum.d.ts.map +1 -0
  45. package/dist/kit/Spectrum.js +235 -0
  46. package/dist/kit/Spectrum.js.map +1 -0
  47. package/dist/kit/SplitButton.d.ts +43 -0
  48. package/dist/kit/SplitButton.d.ts.map +1 -0
  49. package/dist/kit/SplitButton.js +34 -0
  50. package/dist/kit/SplitButton.js.map +1 -0
  51. package/dist/theme/ThemeProvider.d.ts +21 -2
  52. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  53. package/dist/theme/ThemeProvider.js +21 -5
  54. package/dist/theme/ThemeProvider.js.map +1 -1
  55. package/package.json +2 -2
@@ -0,0 +1,43 @@
1
+ import type { MouseEvent, ReactNode } from "react";
2
+ import { type AppButtonProps } from "./Button.tsx";
3
+ import { type IconName } from "./Icon.tsx";
4
+ import type { AnchoredAlign, AnchoredSide } from "./Anchored.tsx";
5
+ export interface SplitButtonProps {
6
+ /** the primary action's label */
7
+ children: ReactNode;
8
+ /** the primary action */
9
+ onClick?: ((e: MouseEvent<HTMLElement>) => void) | undefined;
10
+ /** the primary action is a link instead (an anchor; `download` saves it) */
11
+ href?: string | undefined;
12
+ download?: boolean | string | undefined;
13
+ target?: string | undefined;
14
+ rel?: string | undefined;
15
+ /** MenuItem, MenuLabel and MenuDivider: the action's variants */
16
+ menu: ReactNode;
17
+ /** the menu trigger's accessible name (default "More options") */
18
+ menuLabel?: string | undefined;
19
+ variant?: AppButtonProps["variant"];
20
+ size?: AppButtonProps["size"];
21
+ icon?: IconName | (string & {}) | undefined;
22
+ loading?: boolean | undefined;
23
+ /** both halves off */
24
+ disabled?: boolean | undefined;
25
+ /** only the menu off — the primary action still works */
26
+ menuDisabled?: boolean | undefined;
27
+ /** the menu's alignment against the group (default "right") */
28
+ align?: AnchoredAlign | undefined;
29
+ side?: AnchoredSide | undefined;
30
+ width?: number | undefined;
31
+ onOpenChange?: ((open: boolean) => void) | undefined;
32
+ fullWidth?: boolean | undefined;
33
+ title?: string | undefined;
34
+ }
35
+ /**
36
+ * SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
37
+ * alternatives. Reach for it when one choice is the obvious one and the
38
+ * others are its variants (a format, a scope); when no option is the default,
39
+ * use a plain `Menu` behind an `AppButton`, and when the options are peers
40
+ * shown all the time, `Segmented`.
41
+ */
42
+ export declare function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel, variant, size, icon, loading, disabled, menuDisabled, align, side, width, onOpenChange, fullWidth, title, }: SplitButtonProps): import("react").JSX.Element;
43
+ //# sourceMappingURL=SplitButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitButton.d.ts","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAqBlE,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,yBAAyB;IACzB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC7D,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,iEAAiE;IACjE,IAAI,EAAE,SAAS,CAAC;IAChB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,+DAA+D;IAC/D,KAAK,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACrD,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAA0B,EAChF,OAAiB,EAAE,IAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAe,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC7D,EAAE,gBAAgB,+BA8BlB"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styled from "styled-components";
3
+ import { AppButton } from "./Button.js";
4
+ import { Icon } from "./Icon.js";
5
+ import { Menu } from "./Menu.js";
6
+ // SplitButton: one action, and the menu of its variants beside it — "Export
7
+ // PNG ▾ → PNG / BMP". Added for upl.im's gta-viewer (1.7, UPL-242), which had
8
+ // composed it from an AppButton and a Menu with a narrow trigger.
9
+ const Group = styled.span `
10
+ display: ${(p) => (p.$full ? "flex" : "inline-flex")};
11
+ align-items: stretch;
12
+ > :first-child { flex: 1 1 auto; border-top-right-radius: 0; border-bottom-right-radius: 0; }
13
+ /* the menu's trigger: square on the joined side, and a seam in the
14
+ button's own ink so it reads on every variant */
15
+ > :last-child button {
16
+ border-top-left-radius: 0;
17
+ border-bottom-left-radius: 0;
18
+ margin-left: -1px;
19
+ padding: 0 8px;
20
+ border-left-color: color-mix(in srgb, currentColor 28%, transparent);
21
+ }
22
+ `;
23
+ /**
24
+ * SplitButton: a primary action with a ▾ beside it that opens a `Menu` of
25
+ * alternatives. Reach for it when one choice is the obvious one and the
26
+ * others are its variants (a format, a scope); when no option is the default,
27
+ * use a plain `Menu` behind an `AppButton`, and when the options are peers
28
+ * shown all the time, `Segmented`.
29
+ */
30
+ export function SplitButton({ children, onClick, href, download, target, rel, menu, menuLabel = "More options", variant = "ghost", size = "sm", icon, loading, disabled, menuDisabled, align = "right", side, width, onOpenChange, fullWidth, title, }) {
31
+ const menuOff = !!(disabled || menuDisabled || loading);
32
+ return (_jsxs(Group, { "$full": fullWidth, children: [href ? (_jsx(AppButton, { as: "a", href: href, download: download, target: target, rel: rel, variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })) : (_jsx(AppButton, { variant: variant, size: size, icon: icon, loading: loading, disabled: disabled, title: title, onClick: onClick, children: children })), _jsx(Menu, { align: align, side: side, width: width, label: menuLabel, disabled: menuOff, onOpenChange: onOpenChange, trigger: (open) => (_jsx(AppButton, { variant: variant, size: size, disabled: menuOff, "aria-label": menuLabel, "aria-haspopup": "menu", "aria-expanded": open, children: _jsx(Icon, { name: open ? "chevron-up" : "chevron-down" }) })), children: menu })] }));
33
+ }
34
+ //# sourceMappingURL=SplitButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitButton.js","sourceRoot":"","sources":["../../src/kit/SplitButton.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAuB,MAAM,aAAc,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAiB,MAAM,WAAY,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAY,CAAC;AAGlC,4EAA4E;AAC5E,8EAA8E;AAC9E,kEAAkE;AAElE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAiC;aAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;;;;;;;;;;;;CAYrD,CAAC;AAiCF;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAG,cAAc,EAChF,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EACrE,KAAK,GAAG,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAC3C;IACjB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,YAAY,IAAI,OAAO,CAAC,CAAC;IACxD,OAAO,CACL,MAAC,KAAK,aAAQ,SAAS,aACpB,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,SAAS,IAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACvL,QAAQ,GACC,CACb,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,YACtH,QAAQ,GACC,CACb,EACD,KAAC,IAAI,IACH,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CACjB,KAAC,SAAS,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,gBAAc,SAAS,mBAAgB,MAAM,mBAAgB,IAAI,YACzH,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,GAAI,GAC1C,CACb,YAEA,IAAI,GACA,IACD,CACT,CAAC;AACJ,CAAC"}
@@ -28,8 +28,27 @@ export interface AppThemeProviderProps {
28
28
  * explicit localStorage choice on this host still wins.
29
29
  */
30
30
  initialPref?: ThemePref | undefined;
31
- /** Called on every change, for a host that mirrors the preference into a cookie. */
31
+ /**
32
+ * Called when the person changes the preference (`setPref`, `cycle`), for a
33
+ * host that mirrors it into a cookie — or, with `pref`, for the host that
34
+ * owns it. Never called because the `pref` prop changed.
35
+ */
32
36
  onPrefChange?: ((pref: ThemePref) => void) | undefined;
37
+ /**
38
+ * Controlled mode (1.7): the preference is the host's, not the provider's.
39
+ * For a surface that is TOLD its theme — a renderer in a sandboxed iframe
40
+ * following its host's `uplim:theme`, a thumbnail page captured light then
41
+ * dark, an embed whose parent page owns the toggle.
42
+ *
43
+ * While `pref` is given the provider touches no storage at all: it neither
44
+ * reads its key on mount (so a stale stored value cannot win a frame) nor
45
+ * writes it, ignores other tabs' changes, and does not remember the brand
46
+ * either (`brand` and `setBrand` still apply, in memory). Every render uses
47
+ * the prop, from the first one. `setPref`/`cycle` call `onPrefChange` and
48
+ * change nothing themselves; the host decides and passes the new `pref` back.
49
+ * Pass `"system"` to follow the device's scheme under the host's control.
50
+ */
51
+ pref?: ThemePref | undefined;
33
52
  /** false when the host inlines `globalCss()` itself (SSR without a styled sheet). */
34
53
  globalStyle?: boolean | undefined;
35
54
  /**
@@ -42,7 +61,7 @@ export interface AppThemeProviderProps {
42
61
  */
43
62
  brand?: string | null | undefined;
44
63
  }
45
- export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, }: AppThemeProviderProps): import("react").JSX.Element;
64
+ export declare function AppThemeProvider({ children, storageKey, initialPref, onPrefChange, globalStyle, brand: initialBrand, pref: controlledPref, }: AppThemeProviderProps): import("react").JSX.Element;
46
65
  export declare function useTheme(): ThemeCtx;
47
66
  /** Null outside a provider — for a component that may render in either place. */
48
67
  export declare function useThemeMaybe(): ThemeCtx | null;
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiB9H,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAMpD,UAAU,QAAQ;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAkDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,oFAAoF;IACpF,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAgC,EAChC,WAAW,EACX,YAAY,EACZ,WAAkB,EAClB,KAAK,EAAE,YAAmB,GAC3B,EAAE,qBAAqB,+BAmGvB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C"}
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiG,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAoBtI,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAMpD,UAAU,QAAQ;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACxC;AAkDD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,qFAAqF;IACrF,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,UAAgC,EAChC,WAAW,EACX,YAAY,EACZ,WAAkB,EAClB,KAAK,EAAE,YAAmB,EAC1B,IAAI,EAAE,cAAc,GACrB,EAAE,qBAAqB,+BAiHvB;AAED,wBAAgB,QAAQ,IAAI,QAAQ,CAInC;AAED,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useState } from "react";
2
+ import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
3
3
  import { createGlobalStyle } from "styled-components";
4
4
  import { brandCss } from "./brand.js";
5
5
  import { cssVariables, globalCss } from "./tokens.js";
@@ -52,24 +52,33 @@ function storedBrand() {
52
52
  return null;
53
53
  }
54
54
  }
55
- export function AppThemeProvider({ children, storageKey = DEFAULT_STORAGE_KEY, initialPref, onPrefChange, globalStyle = true, brand: initialBrand = null, }) {
55
+ export function AppThemeProvider({ children, storageKey = DEFAULT_STORAGE_KEY, initialPref, onPrefChange, globalStyle = true, brand: initialBrand = null, pref: controlledPref, }) {
56
+ const controlled = controlledPref !== undefined;
57
+ // read inside effects and callbacks that must not re-run when it changes
58
+ const controlledRef = useRef(controlled);
59
+ useIsoLayoutEffect(() => { controlledRef.current = controlled; }, [controlled]);
56
60
  const STORAGE_KEY = storageKey;
57
61
  // The first render uses only what a server could know too: the props. The
58
62
  // remembered preference, the system scheme and the remembered brand are read
59
63
  // in a layout effect, which runs before the first paint, so a client-only
60
64
  // console still paints them on its first frame, and a server-rendered host
61
65
  // hydrates against matching markup instead of throwing it away (CON-64).
62
- const [pref, setPrefState] = useState(() => normalise(initialPref));
66
+ const [ownPref, setPrefState] = useState(() => normalise(initialPref));
67
+ const pref = controlled ? normalise(controlledPref) : ownPref;
63
68
  const [sys, setSys] = useState("dark");
64
69
  // An explicit prop beats the remembered value: a host that states its colour
65
70
  // is not guessing. Everything else starts from what the registry said here
66
71
  // last time, which is right on every visit after the first.
67
72
  const [brand, setBrandState] = useState(initialBrand);
68
73
  useIsoLayoutEffect(() => {
74
+ setSys(systemScheme());
75
+ // a controlled provider was told its theme and its brand: storage, which
76
+ // a sandboxed iframe may not even have, has nothing to add
77
+ if (controlledRef.current)
78
+ return;
69
79
  const p = storedPref(STORAGE_KEY);
70
80
  if (p)
71
81
  setPrefState(p);
72
- setSys(systemScheme());
73
82
  if (!initialBrand) {
74
83
  const b = storedBrand();
75
84
  if (b)
@@ -88,6 +97,8 @@ export function AppThemeProvider({ children, storageKey = DEFAULT_STORAGE_KEY, i
88
97
  }
89
98
  const setBrand = useCallback((hex) => {
90
99
  setBrandState(hex);
100
+ if (controlledRef.current)
101
+ return;
91
102
  try {
92
103
  if (hex && HEX_RE.test(hex))
93
104
  localStorage.setItem(BRAND_KEY, hex);
@@ -117,7 +128,7 @@ export function AppThemeProvider({ children, storageKey = DEFAULT_STORAGE_KEY, i
117
128
  // Cross-tab sync: another tab changing the preference updates us live.
118
129
  useEffect(() => {
119
130
  const on = (e) => {
120
- if (e.key !== STORAGE_KEY)
131
+ if (e.key !== STORAGE_KEY || controlledRef.current)
121
132
  return;
122
133
  setPrefState(normalise(e.newValue));
123
134
  };
@@ -125,6 +136,11 @@ export function AppThemeProvider({ children, storageKey = DEFAULT_STORAGE_KEY, i
125
136
  return () => window.removeEventListener("storage", on);
126
137
  }, [STORAGE_KEY]);
127
138
  const setPref = useCallback((p) => {
139
+ if (controlledRef.current) {
140
+ // the host owns it: say what the person asked for, and wait to be told
141
+ onPrefChange?.(p);
142
+ return;
143
+ }
128
144
  setPrefState(p);
129
145
  try {
130
146
  if (p === "system")
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/theme/ThemeProvider.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xeonr/platform-ui",
3
- "version": "1.6.2",
3
+ "version": "1.7.1",
4
4
  "description": "Xeonr Platform Suite design language: the --x-* token sheet, theme provider and kit shared by every Xeonr console.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -85,7 +85,7 @@
85
85
  "scripts": {
86
86
  "build": "tsc -p tsconfig.build.json",
87
87
  "typecheck": "tsc -p tsconfig.json --noEmit",
88
- "lint": "eslint . && node scripts/check-colour-literals.mjs src/kit/CodeEditor.tsx src/theme/theme.test.ts src/kit/kit.test.tsx",
88
+ "lint": "eslint . && node scripts/check-colour-literals.mjs src/kit/CodeEditor.tsx src/theme/theme.test.ts src/kit/kit.test.tsx src/kit/renderers.test.tsx",
89
89
  "test": "vitest run"
90
90
  }
91
91
  }