@animus-ui/system 0.1.20 → 0.1.22

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 (123) hide show
  1. package/dist/appearance/controller.d.ts +35 -0
  2. package/dist/appearance/controller.d.ts.map +1 -0
  3. package/dist/appearance/controller.js +69 -0
  4. package/dist/appearance/index.d.ts +2 -7
  5. package/dist/appearance/react.d.ts +10 -0
  6. package/dist/appearance/react.d.ts.map +1 -0
  7. package/dist/appearance/react.js +12 -0
  8. package/dist/appearance/svelte.d.ts +12 -0
  9. package/dist/appearance/svelte.d.ts.map +1 -0
  10. package/dist/appearance/svelte.js +14 -0
  11. package/dist/bootstrap/index.d.ts +24 -1
  12. package/dist/bootstrap/index.d.ts.map +1 -1
  13. package/dist/bootstrap/index.js +10 -2
  14. package/dist/class-resolver.d.ts +2 -6
  15. package/dist/class-resolver.js +1 -1
  16. package/dist/component-stJhG_A-.d.ts +659 -0
  17. package/dist/component-stJhG_A-.d.ts.map +1 -0
  18. package/dist/compose-BQi7TDtL.d.ts +15 -0
  19. package/dist/compose-BQi7TDtL.d.ts.map +1 -0
  20. package/dist/compose.d.ts +2 -12
  21. package/dist/composeWithContext.d.ts +9 -7
  22. package/dist/composeWithContext.d.ts.map +1 -1
  23. package/dist/createClassResolver-Do1nmvkf.d.ts +71 -0
  24. package/dist/createClassResolver-Do1nmvkf.d.ts.map +1 -0
  25. package/dist/{createClassResolver-DPLExqGy.js → createClassResolver-DtHjTYa7.js} +106 -79
  26. package/dist/createComposedFamily-BbA_d0QH.js +195 -0
  27. package/dist/createComposedFamily-BkrvSsfl.d.ts +40 -0
  28. package/dist/createComposedFamily-BkrvSsfl.d.ts.map +1 -0
  29. package/dist/groups/index.d.ts +702 -699
  30. package/dist/groups/index.d.ts.map +1 -1
  31. package/dist/index-BjJkQo64.d.ts +10 -0
  32. package/dist/index-BjJkQo64.d.ts.map +1 -0
  33. package/dist/index-C1AAiaiJ.d.ts +663 -0
  34. package/dist/index-C1AAiaiJ.d.ts.map +1 -0
  35. package/dist/index.d.ts +6 -26
  36. package/dist/index.js +141 -41
  37. package/dist/runtime-entry.d.ts +3 -5
  38. package/dist/runtime-entry.js +3 -3
  39. package/package.json +15 -3
  40. package/dist/Animus.d.ts +0 -81
  41. package/dist/Animus.d.ts.map +0 -1
  42. package/dist/AnimusExtended.d.ts +0 -82
  43. package/dist/AnimusExtended.d.ts.map +0 -1
  44. package/dist/SystemBuilder.d.ts +0 -305
  45. package/dist/SystemBuilder.d.ts.map +0 -1
  46. package/dist/appearance/index.d.ts.map +0 -1
  47. package/dist/asset.d.ts +0 -16
  48. package/dist/asset.d.ts.map +0 -1
  49. package/dist/bootstrap/createAppearanceBootstrap.d.ts +0 -14
  50. package/dist/bootstrap/createAppearanceBootstrap.d.ts.map +0 -1
  51. package/dist/class-resolver.d.ts.map +0 -1
  52. package/dist/compose.d.ts.map +0 -1
  53. package/dist/conditions.d.ts +0 -94
  54. package/dist/conditions.d.ts.map +0 -1
  55. package/dist/createComposedFamily-C6CLAsMx.js +0 -128
  56. package/dist/declarations.d.ts +0 -38
  57. package/dist/declarations.d.ts.map +0 -1
  58. package/dist/index.d.ts.map +0 -1
  59. package/dist/keyframes.d.ts +0 -24
  60. package/dist/keyframes.d.ts.map +0 -1
  61. package/dist/runtime/assert-root-slot.d.ts +0 -6
  62. package/dist/runtime/assert-root-slot.d.ts.map +0 -1
  63. package/dist/runtime/createClassResolver.d.ts +0 -11
  64. package/dist/runtime/createClassResolver.d.ts.map +0 -1
  65. package/dist/runtime/createComposedFamily.d.ts +0 -11
  66. package/dist/runtime/createComposedFamily.d.ts.map +0 -1
  67. package/dist/runtime/index.d.ts +0 -14
  68. package/dist/runtime/index.d.ts.map +0 -1
  69. package/dist/runtime/is-dev.d.ts +0 -6
  70. package/dist/runtime/is-dev.d.ts.map +0 -1
  71. package/dist/runtime/resolveClasses.d.ts +0 -83
  72. package/dist/runtime/resolveClasses.d.ts.map +0 -1
  73. package/dist/runtime/witness.d.ts +0 -10
  74. package/dist/runtime/witness.d.ts.map +0 -1
  75. package/dist/runtime-entry.d.ts.map +0 -1
  76. package/dist/scales/createScale.d.ts +0 -7
  77. package/dist/scales/createScale.d.ts.map +0 -1
  78. package/dist/selectors.d.ts +0 -27
  79. package/dist/selectors.d.ts.map +0 -1
  80. package/dist/theme/createTheme.d.ts +0 -170
  81. package/dist/theme/createTheme.d.ts.map +0 -1
  82. package/dist/theme/flattenScale.d.ts +0 -15
  83. package/dist/theme/flattenScale.d.ts.map +0 -1
  84. package/dist/theme/index.d.ts +0 -5
  85. package/dist/theme/index.d.ts.map +0 -1
  86. package/dist/theme/property-records.d.ts +0 -79
  87. package/dist/theme/property-records.d.ts.map +0 -1
  88. package/dist/theme/resolveReferences.d.ts +0 -27
  89. package/dist/theme/resolveReferences.d.ts.map +0 -1
  90. package/dist/theme/serializeTokens.d.ts +0 -5
  91. package/dist/theme/serializeTokens.d.ts.map +0 -1
  92. package/dist/theme/types.d.ts +0 -20
  93. package/dist/theme/types.d.ts.map +0 -1
  94. package/dist/theme/utils.d.ts +0 -11
  95. package/dist/theme/utils.d.ts.map +0 -1
  96. package/dist/transforms/border.d.ts +0 -3
  97. package/dist/transforms/border.d.ts.map +0 -1
  98. package/dist/transforms/createTransform.d.ts +0 -24
  99. package/dist/transforms/createTransform.d.ts.map +0 -1
  100. package/dist/transforms/grid.d.ts +0 -5
  101. package/dist/transforms/grid.d.ts.map +0 -1
  102. package/dist/transforms/index.d.ts +0 -5
  103. package/dist/transforms/index.d.ts.map +0 -1
  104. package/dist/transforms/size.d.ts +0 -5
  105. package/dist/transforms/size.d.ts.map +0 -1
  106. package/dist/types/component.d.ts +0 -100
  107. package/dist/types/component.d.ts.map +0 -1
  108. package/dist/types/config.d.ts +0 -149
  109. package/dist/types/config.d.ts.map +0 -1
  110. package/dist/types/properties.d.ts +0 -17
  111. package/dist/types/properties.d.ts.map +0 -1
  112. package/dist/types/props.d.ts +0 -19
  113. package/dist/types/props.d.ts.map +0 -1
  114. package/dist/types/scales.d.ts +0 -3
  115. package/dist/types/scales.d.ts.map +0 -1
  116. package/dist/types/shared.d.ts +0 -4
  117. package/dist/types/shared.d.ts.map +0 -1
  118. package/dist/types/theme.d.ts +0 -111
  119. package/dist/types/theme.d.ts.map +0 -1
  120. package/dist/types/utils.d.ts +0 -5
  121. package/dist/types/utils.d.ts.map +0 -1
  122. package/dist/utils/deepMerge.d.ts +0 -2
  123. package/dist/utils/deepMerge.d.ts.map +0 -1
@@ -0,0 +1,35 @@
1
+ import { t as AppearanceStorageOptions } from "../index-BjJkQo64.js";
2
+ //#region src/appearance/controller.d.ts
3
+ export interface ColorModeControllerOptions {
4
+ /** The modes the theme declares, such as `Object.keys(theme.manifest.modes)`. */
5
+ modes: readonly string[];
6
+ /** The setting before one is made: a declared mode or `system`, the
7
+ * default. A stored setting replaces it when storage is enabled. */
8
+ initial?: string;
9
+ /**
10
+ * Off unless given. When enabled, the initial setting is read from the
11
+ * appearance record as the bootstrap reads it, and each change is written
12
+ * through `persistColorMode`.
13
+ */
14
+ storage?: boolean | AppearanceStorageOptions;
15
+ }
16
+ export interface ColorModeController {
17
+ /** A declared mode, or `system`. */
18
+ get(): string;
19
+ /** The setting before storage is read: what a server renders. */
20
+ getDefault(): string;
21
+ /** Writes `data-color-mode` on the root by the bootstrap's rules: a
22
+ * declared mode as is, `system` by removing the attribute. */
23
+ set(mode: string): void;
24
+ /** Calls `listener` after each change; returns the unsubscriber. */
25
+ subscribe(listener: (mode: string) => void): () => void;
26
+ }
27
+ /**
28
+ * Holds the light/dark setting for one theme: any mode it declares, or
29
+ * `system`, which leaves the choice to the operating system's preference
30
+ * through CSS. It never queries the operating system, and writes nothing,
31
+ * neither the root attribute nor storage, until `set` is called.
32
+ */
33
+ export declare function createColorModeController(options: ColorModeControllerOptions): ColorModeController;
34
+ //#endregion
35
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","names":[],"sources":["../../src/appearance/controller.ts"],"mappings":";;iBAWiB;;EAEf;;;EAGA;;;;;;EAMA,oBAAoB;;iBAGL;;EAEf;;EAEA;;;EAGA,IAAI;;EAEJ,UAAU,WAAW;;;;;;;;wBAyDP,0BACd,SAAS,6BACR"}
@@ -0,0 +1,69 @@
1
+ import { SYSTEM_MODE, persistColorMode } from "./index.js";
2
+ //#region src/appearance/controller.ts
3
+ const DEFAULT_STORAGE_KEY = "animus:appearance";
4
+ const SHARED_LEGACY_KEY = "color-mode";
5
+ const MODE_ATTRIBUTE = "data-color-mode";
6
+ const RECORD_VERSION = 1;
7
+ /** The setting the bootstrap restores: the record's mode, or the shared
8
+ * legacy key when no record is stored. Null when nothing applies. */
9
+ function storedSetting(storageKey, modes) {
10
+ const storage = globalThis.localStorage;
11
+ const read = (key) => {
12
+ try {
13
+ return storage?.getItem(key) ?? null;
14
+ } catch {
15
+ return null;
16
+ }
17
+ };
18
+ const declared = (mode) => modes.some((name) => name === mode);
19
+ const raw = read(storageKey);
20
+ if (raw === null || raw === "") {
21
+ const legacy = read(SHARED_LEGACY_KEY);
22
+ return declared(legacy) ? legacy : null;
23
+ }
24
+ let record;
25
+ try {
26
+ record = JSON.parse(raw);
27
+ } catch {
28
+ return null;
29
+ }
30
+ return record?.v === RECORD_VERSION && declared(record.mode) ? record.mode : SYSTEM_MODE;
31
+ }
32
+ /**
33
+ * Holds the light/dark setting for one theme: any mode it declares, or
34
+ * `system`, which leaves the choice to the operating system's preference
35
+ * through CSS. It never queries the operating system, and writes nothing,
36
+ * neither the root attribute nor storage, until `set` is called.
37
+ */
38
+ function createColorModeController(options) {
39
+ const { modes, storage } = options;
40
+ const valid = (mode) => mode === "system" || modes.includes(mode);
41
+ const fallback = options.initial ?? "system";
42
+ if (!valid(fallback)) throw new Error(`colorMode: initial '${fallback}' is neither a declared mode nor '${SYSTEM_MODE}'.`);
43
+ const storageOptions = storage === void 0 || storage === false ? null : storage === true ? {} : storage;
44
+ if (storageOptions?.storageKey === "") throw new Error("colorMode: storageKey must be a non-empty string.");
45
+ let current = (storageOptions && storedSetting(storageOptions.storageKey ?? DEFAULT_STORAGE_KEY, modes)) ?? fallback;
46
+ const listeners = /* @__PURE__ */ new Set();
47
+ return {
48
+ get: () => current,
49
+ getDefault: () => fallback,
50
+ set(mode) {
51
+ if (!valid(mode)) throw new Error(`colorMode: '${mode}' is neither a declared mode nor '${SYSTEM_MODE}'.`);
52
+ const root = globalThis.document?.documentElement;
53
+ if (mode === "system") root?.removeAttribute(MODE_ATTRIBUTE);
54
+ else root?.setAttribute(MODE_ATTRIBUTE, mode);
55
+ if (storageOptions) persistColorMode(mode, storageOptions);
56
+ if (mode === current) return;
57
+ current = mode;
58
+ for (const listener of [...listeners]) listener(mode);
59
+ },
60
+ subscribe(listener) {
61
+ listeners.add(listener);
62
+ return () => {
63
+ listeners.delete(listener);
64
+ };
65
+ }
66
+ };
67
+ }
68
+ //#endregion
69
+ export { createColorModeController };
@@ -1,7 +1,2 @@
1
- export declare const SYSTEM_MODE = "system";
2
- export interface AppearanceStorageOptions {
3
- storageKey?: string;
4
- }
5
- export declare function persistColorMode(mode: string, options?: AppearanceStorageOptions): void;
6
- export declare function migrateLegacyModeKey(legacyKey: string, declaredModes: readonly string[], options?: AppearanceStorageOptions): string | null;
7
- //# sourceMappingURL=index.d.ts.map
1
+ import { i as persistColorMode, n as SYSTEM_MODE, r as migrateLegacyModeKey, t as AppearanceStorageOptions } from "../index-BjJkQo64.js";
2
+ export { AppearanceStorageOptions, SYSTEM_MODE, migrateLegacyModeKey, persistColorMode };
@@ -0,0 +1,10 @@
1
+ import { ColorModeController } from "./controller.js";
2
+ //#region src/appearance/react.d.ts
3
+ /**
4
+ * The controller's setting and its setter. A server render, and the first
5
+ * client render that hydrates it, read the default setting, so a stored
6
+ * setting arrives in the render after hydration.
7
+ */
8
+ export declare function useColorMode(controller: ColorModeController): [mode: string, setMode: (mode: string) => void];
9
+ //#endregion
10
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","names":[],"sources":["../../src/appearance/react.ts"],"mappings":";;;;;;;wBASgB,aACd,YAAY,uBACV,cAAc,UAAU"}
@@ -0,0 +1,12 @@
1
+ import { useSyncExternalStore } from "react";
2
+ //#region src/appearance/react.ts
3
+ /**
4
+ * The controller's setting and its setter. A server render, and the first
5
+ * client render that hydrates it, read the default setting, so a stored
6
+ * setting arrives in the render after hydration.
7
+ */
8
+ function useColorMode(controller) {
9
+ return [useSyncExternalStore(controller.subscribe, controller.get, controller.getDefault), controller.set];
10
+ }
11
+ //#endregion
12
+ export { useColorMode };
@@ -0,0 +1,12 @@
1
+ import { ColorModeController } from "./controller.js";
2
+ //#region src/appearance/svelte.d.ts
3
+ /** Svelte's writable store contract, restated so `svelte` is not imported. */
4
+ export interface ColorModeStore {
5
+ subscribe(run: (mode: string) => void): () => void;
6
+ set(mode: string): void;
7
+ }
8
+ /** The controller as a Svelte store: `$store` reads the setting, and
9
+ * `$store = 'dark'` sets it. */
10
+ export declare function colorModeStore(controller: ColorModeController): ColorModeStore;
11
+ //#endregion
12
+ //# sourceMappingURL=svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svelte.d.ts","names":[],"sources":["../../src/appearance/svelte.ts"],"mappings":";;;iBAGiB;EACf,UAAU,MAAM;EAChB,IAAI;;;;wBAKU,eACd,YAAY,sBACX"}
@@ -0,0 +1,14 @@
1
+ //#region src/appearance/svelte.ts
2
+ /** The controller as a Svelte store: `$store` reads the setting, and
3
+ * `$store = 'dark'` sets it. */
4
+ function colorModeStore(controller) {
5
+ return {
6
+ subscribe(run) {
7
+ run(controller.get());
8
+ return controller.subscribe(run);
9
+ },
10
+ set: controller.set
11
+ };
12
+ }
13
+ //#endregion
14
+ export { colorModeStore };
@@ -1,2 +1,25 @@
1
- export { type AppearanceBootstrapArtifact, type AppearanceBootstrapOptions, type AppearanceBootstrapTheme, createAppearanceBootstrap, } from './createAppearanceBootstrap.js';
1
+ //#region src/bootstrap/createAppearanceBootstrap.d.ts
2
+ interface AppearanceBootstrapTheme {
3
+ manifest: {
4
+ modes?: Record<string, unknown>;
5
+ };
6
+ }
7
+ interface AppearanceBootstrapOptions {
8
+ storageKey?: string;
9
+ /**
10
+ * Keys your application owns that hold a bare mode name from before the
11
+ * appearance record. Before paint, each is migrated as
12
+ * `migrateLegacyModeKey` migrates it, in order, so the first declared mode
13
+ * becomes the record when none exists. An undeclared value is removed,
14
+ * never applied. The shared `color-mode` key stays read-only.
15
+ */
16
+ legacyKeys?: readonly string[];
17
+ }
18
+ interface AppearanceBootstrapArtifact {
19
+ code: string;
20
+ cspHash: string;
21
+ }
22
+ export declare function createAppearanceBootstrap(theme: AppearanceBootstrapTheme, options?: AppearanceBootstrapOptions): AppearanceBootstrapArtifact;
23
+ //#endregion
24
+ export type { AppearanceBootstrapArtifact, AppearanceBootstrapOptions, AppearanceBootstrapTheme };
2
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bootstrap/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/bootstrap/createAppearanceBootstrap.ts"],"mappings":";UAYiB;EACf;IACE,QAAQ;;;UAIK;EACf;;;;;;;;EAQA;;UAGe;EACf;EACA;;wBA0Bc,0BACd,OAAO,0BACP,UAAS,6BACR"}
@@ -28,13 +28,21 @@ function inlineLiteral(value) {
28
28
  return out;
29
29
  }
30
30
  function createAppearanceBootstrap(theme, options = {}) {
31
- const { storageKey = DEFAULT_STORAGE_KEY } = options;
31
+ const { storageKey = DEFAULT_STORAGE_KEY, legacyKeys = [] } = options;
32
32
  if (typeof storageKey !== "string" || storageKey === "") throw new Error("createAppearanceBootstrap: storageKey must be a non-empty string.");
33
+ for (const legacyKey of legacyKeys) {
34
+ if (typeof legacyKey !== "string" || legacyKey === "") throw new Error("createAppearanceBootstrap: each legacy key must be a non-empty string.");
35
+ if (legacyKey === LEGACY_STORAGE_KEY) throw new Error(`createAppearanceBootstrap: '${LEGACY_STORAGE_KEY}' is the contract's shared legacy key — the bootstrap reads it read-only and it may belong to another app on this origin. List only keys your application owns.`);
36
+ if (legacyKey === storageKey) throw new Error(`createAppearanceBootstrap: legacy key '${legacyKey}' is the record key itself — nothing to migrate.`);
37
+ }
33
38
  const modeNames = Object.keys(theme?.manifest?.modes ?? {}).sort();
34
39
  if (modeNames.length === 0) throw new Error("createAppearanceBootstrap: the theme declares no color modes — call addColorModes() before generating a bootstrap.");
35
40
  if (modeNames.includes(RESERVED_MODE_NAME)) throw new Error(`createAppearanceBootstrap: '${RESERVED_MODE_NAME}' is a reserved mode name — the OS preference is represented by the absence of the ${MODE_ATTRIBUTE} attribute, never by a declared mode.`);
36
41
  if (modeNames.some((name) => name.trim() === "")) throw new Error("createAppearanceBootstrap: a declared mode name is empty or whitespace-only — such a name matches no mode block and would suppress the system fallback.");
37
- const code = `(function(){try{var m=${`[${modeNames.map(inlineLiteral).join(",")}]`};var r=document.documentElement;var v=null;try{v=localStorage.getItem(${inlineLiteral(storageKey)});}catch(e){v=null;}var n=null;if(typeof v==="string"&&v!==""){var p;try{p=JSON.parse(v);}catch(e){return;}n=p&&typeof p==="object"&&p.v===${RECORD_VERSION}?p.mode:null;}else{try{n=localStorage.getItem(${inlineLiteral(LEGACY_STORAGE_KEY)});}catch(e){n=null;}}if(typeof n==="string"&&m.indexOf(n)!==-1){r.setAttribute(${inlineLiteral(MODE_ATTRIBUTE)},n);}else{r.removeAttribute(${inlineLiteral(MODE_ATTRIBUTE)});}}catch(e){}})();`;
42
+ const allowlist = `[${modeNames.map(inlineLiteral).join(",")}]`;
43
+ const record = inlineLiteral(storageKey);
44
+ const migration = legacyKeys.length === 0 ? "" : `var k=[${legacyKeys.map(inlineLiteral).join(",")}];for(var i=0;k.length>i;i++){try{var g=localStorage,w=g.getItem(${record}),a=1;if(w){try{var q=JSON.parse(w);a=!(q&&typeof q==="object"&&!Array.isArray(q));}catch(e){}}var l=a?g.getItem(k[i]):null;if(m.indexOf(l)!==-1)g.setItem(${record},JSON.stringify({v:${RECORD_VERSION},mode:l,theme:"default"}));g.removeItem(k[i]);}catch(e){}}`;
45
+ const code = `(function(){try{var m=${allowlist};` + migration + `var r=document.documentElement;var v=null;try{v=localStorage.getItem(${record});}catch(e){v=null;}var n=null;if(typeof v==="string"&&v!==""){var p;try{p=JSON.parse(v);}catch(e){return;}n=p&&typeof p==="object"&&p.v===${RECORD_VERSION}?p.mode:null;}else{try{n=localStorage.getItem(${inlineLiteral(LEGACY_STORAGE_KEY)});}catch(e){n=null;}}if(typeof n==="string"&&m.indexOf(n)!==-1){r.setAttribute(${inlineLiteral(MODE_ATTRIBUTE)},n);}else{r.removeAttribute(${inlineLiteral(MODE_ATTRIBUTE)});}}catch(e){}})();`;
38
46
  return {
39
47
  code,
40
48
  cspHash: `sha256-${createHash("sha256").update(code, "utf8").digest("base64")}`
@@ -1,6 +1,2 @@
1
- /**
2
- * Excludes the React component runtime so non-React consumers can bundle
3
- * class resolvers without installing React.
4
- */
5
- export { type ClassResolver, type ClassResolverAttributes, createClassResolver, } from './runtime/createClassResolver.js';
6
- //# sourceMappingURL=class-resolver.d.ts.map
1
+ import { n as ClassResolverAttributes, r as createClassResolver, t as ClassResolver } from "./createClassResolver-Do1nmvkf.js";
2
+ export { type ClassResolver, type ClassResolverAttributes, createClassResolver };
@@ -1,2 +1,2 @@
1
- import { t as createClassResolver } from "./createClassResolver-DPLExqGy.js";
1
+ import { t as createClassResolver } from "./createClassResolver-DtHjTYa7.js";
2
2
  export { createClassResolver };