motionary 6.8.0 → 7.0.0

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 (174) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +2 -2
  3. package/README_ja.md +2 -2
  4. package/README_zh.md +2 -2
  5. package/bin/usa-codemod-7.mjs +91 -0
  6. package/dist/chunks/{gpu-CsP2ZB3x.js → gpu-Bkw605Ds.js} +183 -5
  7. package/dist/chunks/gpu-Bkw605Ds.js.map +1 -0
  8. package/dist/chunks/{gpu-BBRLgEzM.cjs → gpu-Dx0H875w.cjs} +187 -4
  9. package/dist/chunks/gpu-Dx0H875w.cjs.map +1 -0
  10. package/dist/chunks/{index-tags-wv0R_vkO.cjs → index-tags-BTMwrfgV.cjs} +3 -3
  11. package/dist/chunks/index-tags-BTMwrfgV.cjs.map +1 -0
  12. package/dist/chunks/{index-tags-DucKMQr_.js → index-tags-C04JP8g4.js} +3 -3
  13. package/dist/chunks/index-tags-C04JP8g4.js.map +1 -0
  14. package/dist/chunks/player-C-TwEEy6.js +516 -0
  15. package/dist/chunks/player-C-TwEEy6.js.map +1 -0
  16. package/dist/chunks/player-PS6_FzNw.cjs +525 -0
  17. package/dist/chunks/player-PS6_FzNw.cjs.map +1 -0
  18. package/dist/components/a11y.cjs +1 -1
  19. package/dist/components/a11y.d.cts +2 -2
  20. package/dist/components/a11y.d.ts +2 -2
  21. package/dist/components/a11y.js +1 -1
  22. package/dist/components/angular.cjs +2 -2
  23. package/dist/components/angular.cjs.map +1 -1
  24. package/dist/components/angular.d.cts +5 -36
  25. package/dist/components/angular.d.ts +5 -36
  26. package/dist/components/angular.js +2 -2
  27. package/dist/components/angular.js.map +1 -1
  28. package/dist/components/effects.cjs +13 -522
  29. package/dist/components/effects.cjs.map +1 -1
  30. package/dist/components/effects.js +5 -513
  31. package/dist/components/effects.js.map +1 -1
  32. package/dist/components/fx-3d.cjs +2 -2
  33. package/dist/components/fx-3d.cjs.map +1 -1
  34. package/dist/components/fx-3d.d.cts +2 -2
  35. package/dist/components/fx-3d.d.ts +2 -2
  36. package/dist/components/fx-3d.js +2 -2
  37. package/dist/components/fx-3d.js.map +1 -1
  38. package/dist/components/fx-focus.cjs +125 -0
  39. package/dist/components/fx-focus.cjs.map +1 -0
  40. package/dist/components/fx-focus.d.cts +65 -0
  41. package/dist/components/fx-focus.d.ts +65 -0
  42. package/dist/components/fx-focus.js +122 -0
  43. package/dist/components/fx-focus.js.map +1 -0
  44. package/dist/components/fx-gpu.cjs +2 -2
  45. package/dist/components/fx-gpu.d.cts +2 -2
  46. package/dist/components/fx-gpu.d.ts +2 -2
  47. package/dist/components/fx-gpu.js +1 -1
  48. package/dist/components/fx-light.cjs +2 -2
  49. package/dist/components/fx-light.cjs.map +1 -1
  50. package/dist/components/fx-light.d.cts +2 -2
  51. package/dist/components/fx-light.d.ts +2 -2
  52. package/dist/components/fx-light.js +2 -2
  53. package/dist/components/fx-light.js.map +1 -1
  54. package/dist/components/fx-morph.cjs +2 -2
  55. package/dist/components/fx-morph.cjs.map +1 -1
  56. package/dist/components/fx-morph.d.cts +2 -2
  57. package/dist/components/fx-morph.d.ts +2 -2
  58. package/dist/components/fx-morph.js +2 -2
  59. package/dist/components/fx-morph.js.map +1 -1
  60. package/dist/components/fx-physics.cjs +2 -2
  61. package/dist/components/fx-physics.cjs.map +1 -1
  62. package/dist/components/fx-physics.d.cts +2 -2
  63. package/dist/components/fx-physics.d.ts +2 -2
  64. package/dist/components/fx-physics.js +2 -2
  65. package/dist/components/fx-physics.js.map +1 -1
  66. package/dist/components/fx-text.cjs +2 -2
  67. package/dist/components/fx-text.cjs.map +1 -1
  68. package/dist/components/fx-text.d.cts +2 -2
  69. package/dist/components/fx-text.d.ts +2 -2
  70. package/dist/components/fx-text.js +2 -2
  71. package/dist/components/fx-text.js.map +1 -1
  72. package/dist/components/fx-transitions.cjs +2 -2
  73. package/dist/components/fx-transitions.cjs.map +1 -1
  74. package/dist/components/fx-transitions.d.cts +2 -2
  75. package/dist/components/fx-transitions.d.ts +2 -2
  76. package/dist/components/fx-transitions.js +2 -2
  77. package/dist/components/fx-transitions.js.map +1 -1
  78. package/dist/components/fx-weather.cjs +2 -2
  79. package/dist/components/fx-weather.cjs.map +1 -1
  80. package/dist/components/fx-weather.d.cts +2 -2
  81. package/dist/components/fx-weather.d.ts +2 -2
  82. package/dist/components/fx-weather.js +2 -2
  83. package/dist/components/fx-weather.js.map +1 -1
  84. package/dist/components/fx2.cjs +37 -22
  85. package/dist/components/fx2.cjs.map +1 -1
  86. package/dist/components/fx2.d.cts +135 -14
  87. package/dist/components/fx2.d.ts +135 -14
  88. package/dist/components/fx2.js +25 -21
  89. package/dist/components/fx2.js.map +1 -1
  90. package/dist/components/interaction.cjs +11 -94
  91. package/dist/components/interaction.cjs.map +1 -1
  92. package/dist/components/interaction.css +0 -1
  93. package/dist/components/interaction.d.cts +3 -21
  94. package/dist/components/interaction.d.ts +3 -21
  95. package/dist/components/interaction.js +12 -94
  96. package/dist/components/interaction.js.map +1 -1
  97. package/dist/components/jsx.d.cts +2 -2
  98. package/dist/components/jsx.d.ts +2 -2
  99. package/dist/components/lazy.cjs +1 -1
  100. package/dist/components/lazy.d.cts +2 -2
  101. package/dist/components/lazy.d.ts +2 -2
  102. package/dist/components/lazy.js +1 -1
  103. package/dist/components/lite.cjs +115 -256
  104. package/dist/components/lite.cjs.map +1 -1
  105. package/dist/components/lite.js +116 -255
  106. package/dist/components/lite.js.map +1 -1
  107. package/dist/components/marketplace.cjs +82 -0
  108. package/dist/components/marketplace.cjs.map +1 -0
  109. package/dist/components/marketplace.d.cts +108 -0
  110. package/dist/components/marketplace.d.ts +108 -0
  111. package/dist/components/marketplace.js +77 -0
  112. package/dist/components/marketplace.js.map +1 -0
  113. package/dist/components/perf.cjs +1 -1
  114. package/dist/components/perf.d.cts +2 -2
  115. package/dist/components/perf.d.ts +2 -2
  116. package/dist/components/perf.js +1 -1
  117. package/dist/components/react.cjs +2 -2
  118. package/dist/components/react.cjs.map +1 -1
  119. package/dist/components/react.js +2 -2
  120. package/dist/components/react.js.map +1 -1
  121. package/dist/components/solid.cjs +2 -2
  122. package/dist/components/solid.cjs.map +1 -1
  123. package/dist/components/solid.d.cts +4 -35
  124. package/dist/components/solid.d.ts +4 -35
  125. package/dist/components/solid.js +2 -2
  126. package/dist/components/solid.js.map +1 -1
  127. package/dist/components/svelte.cjs +2 -2
  128. package/dist/components/svelte.cjs.map +1 -1
  129. package/dist/components/svelte.d.cts +5 -36
  130. package/dist/components/svelte.d.ts +5 -36
  131. package/dist/components/svelte.js +2 -2
  132. package/dist/components/svelte.js.map +1 -1
  133. package/dist/components/ui.cjs +16 -74
  134. package/dist/components/ui.cjs.map +1 -1
  135. package/dist/components/ui.css +0 -1
  136. package/dist/components/ui.d.cts +3 -18
  137. package/dist/components/ui.d.ts +3 -18
  138. package/dist/components/ui.js +17 -74
  139. package/dist/components/ui.js.map +1 -1
  140. package/dist/components/vue.cjs +2 -2
  141. package/dist/components/vue.cjs.map +1 -1
  142. package/dist/components/vue.d.cts +5 -36
  143. package/dist/components/vue.d.ts +5 -36
  144. package/dist/components/vue.js +2 -2
  145. package/dist/components/vue.js.map +1 -1
  146. package/dist/components/widgets.cjs +622 -53
  147. package/dist/components/widgets.cjs.map +1 -1
  148. package/dist/components/widgets.d.cts +106 -2
  149. package/dist/components/widgets.d.ts +106 -2
  150. package/dist/components/widgets.js +615 -54
  151. package/dist/components/widgets.js.map +1 -1
  152. package/dist/components.cjs +1 -3
  153. package/dist/components.cjs.map +1 -1
  154. package/dist/components.css +0 -2
  155. package/dist/components.d.cts +6 -39
  156. package/dist/components.d.ts +6 -39
  157. package/dist/components.js +3 -3
  158. package/dist/components.umd.js +2 -2
  159. package/dist/components.umd.js.map +1 -1
  160. package/dist/widgets.umd.js +1 -1
  161. package/dist/widgets.umd.js.map +1 -1
  162. package/docs/ROADMAP.md +12 -12
  163. package/docs/accessibility.md +2 -2
  164. package/docs/components.md +41 -2
  165. package/docs/deprecations.md +4 -0
  166. package/docs/frameworks-ssr.md +4 -4
  167. package/docs/hybrid-apps.md +2 -2
  168. package/docs/upgrading-7.md +43 -0
  169. package/docs/windows-apps.md +1 -1
  170. package/package.json +133 -2
  171. package/dist/chunks/gpu-BBRLgEzM.cjs.map +0 -1
  172. package/dist/chunks/gpu-CsP2ZB3x.js.map +0 -1
  173. package/dist/chunks/index-tags-DucKMQr_.js.map +0 -1
  174. package/dist/chunks/index-tags-wv0R_vkO.cjs.map +0 -1
@@ -0,0 +1,82 @@
1
+ 'use strict';
2
+
3
+ var registry = require('../chunks/registry-DehBVRDV.cjs');
4
+ require('../chunks/base-BaQV-2ha.cjs');
5
+
6
+ const EFFECT_PACK_FORMAT = 'motionary/effect-pack';
7
+ const SEMVER = /^\d+\.\d+\.\d+(?:-[\w.]+)?$/;
8
+ const PKG = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
9
+ /** Build a manifest from an effect pack. */
10
+ function packManifest(name, packVersion, effects, extra = {}) {
11
+ return {
12
+ format: EFFECT_PACK_FORMAT,
13
+ version: 1,
14
+ name,
15
+ packVersion,
16
+ ...extra,
17
+ effects: effects.map((e) => ({ name: e.name, kind: e.kind, ...(e.description ? { description: e.description } : {}), ...(e.defaults ? { defaults: JSON.parse(JSON.stringify(e.defaults)) } : {}) })),
18
+ };
19
+ }
20
+ /** Check a manifest (and optionally the module's effects against it). */
21
+ function validateManifest(m, effects) {
22
+ const errors = [];
23
+ const x = m;
24
+ if (!x || typeof x !== 'object')
25
+ return { ok: false, errors: ['manifest must be an object'] };
26
+ if (x.format !== EFFECT_PACK_FORMAT)
27
+ errors.push(`format must be "${EFFECT_PACK_FORMAT}"`);
28
+ if (x.version !== 1)
29
+ errors.push('version must be 1');
30
+ if (!x.name || !PKG.test(x.name))
31
+ errors.push('name must be an npm package name');
32
+ if (!x.packVersion || !SEMVER.test(x.packVersion))
33
+ errors.push('packVersion must be semver (x.y.z)');
34
+ if (!Array.isArray(x.effects) || !x.effects.length)
35
+ errors.push('effects must be a non-empty array');
36
+ const seen = new Set();
37
+ for (const e of x.effects || []) {
38
+ if (!e || !/^[a-z][a-z0-9-]*$/.test(e.name || ''))
39
+ errors.push(`invalid effect name "${e?.name}"`);
40
+ else if (seen.has(e.name))
41
+ errors.push(`duplicate effect "${e.name}"`);
42
+ else
43
+ seen.add(e.name);
44
+ if (!e || !registry.EFFECT_KINDS.includes(e.kind))
45
+ errors.push(`effect "${e?.name}": unknown kind "${e?.kind}"`);
46
+ }
47
+ if (effects) {
48
+ const names = new Set(effects.map((e) => e.name));
49
+ for (const n of seen)
50
+ if (!names.has(n))
51
+ errors.push(`effect "${n}" is in the manifest but not exported`);
52
+ for (const n of names)
53
+ if (!seen.has(n))
54
+ errors.push(`effect "${n}" is exported but missing from the manifest`);
55
+ }
56
+ return { ok: !errors.length, errors };
57
+ }
58
+ /**
59
+ * Import an effect pack (a URL / specifier, or an already imported module
60
+ * with `effects` / `default` and `manifest`), validate and register it.
61
+ * Returns the registered effect names.
62
+ */
63
+ async function loadEffectPack(src, opts = {}) {
64
+ const mod = typeof src === 'string' ? await import(/* @vite-ignore */ src) : src;
65
+ const effects = mod.effects || mod.default || [];
66
+ const manifest = opts.manifest || mod.manifest;
67
+ const v = validateManifest(manifest, effects);
68
+ if (!v.ok)
69
+ throw new Error(`[motionary] invalid effect pack: ${v.errors.join('; ')}`);
70
+ const clash = effects.filter((e) => registry.hasEffect(e.name));
71
+ if (clash.length && !opts.override)
72
+ throw new Error(`[motionary] effect pack "${manifest.name}" would replace ${clash.map((e) => e.name).join(', ')} (pass { override: true })`);
73
+ for (const e of effects)
74
+ registry.registerEffect(e, { override: !!opts.override });
75
+ return effects.map((e) => e.name);
76
+ }
77
+
78
+ exports.EFFECT_PACK_FORMAT = EFFECT_PACK_FORMAT;
79
+ exports.loadEffectPack = loadEffectPack;
80
+ exports.packManifest = packManifest;
81
+ exports.validateManifest = validateManifest;
82
+ //# sourceMappingURL=marketplace.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.cjs","sources":["../../src/components/fx2/manifest.ts"],"sourcesContent":["/**\n * 6.9 — effect marketplace manifest (`motionary/components/marketplace`).\n *\n * A third-party effect pack is an ES module that exports its effects (an\n * `EffectDefinition[]` as `effects` or `default`) plus a JSON manifest:\n *\n * ```json\n * { \"format\": \"motionary/effect-pack\", \"version\": 1,\n * \"name\": \"@acme/motion-snow\", \"packVersion\": \"1.2.0\",\n * \"description\": \"Snow and frost effects\", \"license\": \"MIT\",\n * \"author\": \"Acme\", \"entry\": \"./dist/index.js\", \"requires\": \">=6.9\",\n * \"effects\": [{ \"name\": \"frost\", \"kind\": \"background\", \"description\": \"…\",\n * \"defaults\": { \"speed\": 1 } }] }\n * ```\n *\n * `packManifest()` writes one from your effects, `validateManifest()` checks\n * one (format, semver, unique kebab-case names, known kinds, effects match\n * the module), and `loadEffectPack()` imports a pack (URL or module),\n * validates it and registers its effects — refusing names that already\n * exist unless `override`.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { EFFECT_KINDS, registerEffect, hasEffect } from '../fx/registry';\n\nexport const EFFECT_PACK_FORMAT = 'motionary/effect-pack';\n\nexport interface EffectPackManifest {\n format: typeof EFFECT_PACK_FORMAT;\n version: 1;\n name: string;\n packVersion: string;\n description?: string;\n license?: string;\n author?: string;\n homepage?: string;\n entry?: string;\n requires?: string;\n keywords?: string[];\n effects: { name: string; kind: string; description?: string; defaults?: Record<string, unknown> }[];\n}\n\nconst SEMVER = /^\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?$/;\nconst PKG = /^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n/** Build a manifest from an effect pack. */\nexport function packManifest(name: string, packVersion: string, effects: EffectDefinition[], extra: Partial<Omit<EffectPackManifest, 'format' | 'version' | 'name' | 'packVersion' | 'effects'>> = {}): EffectPackManifest {\n return {\n format: EFFECT_PACK_FORMAT,\n version: 1,\n name,\n packVersion,\n ...extra,\n effects: effects.map((e) => ({ name: e.name, kind: e.kind, ...(e.description ? { description: e.description } : {}), ...(e.defaults ? { defaults: JSON.parse(JSON.stringify(e.defaults)) } : {}) })),\n };\n}\n\n/** Check a manifest (and optionally the module's effects against it). */\nexport function validateManifest(m: unknown, effects?: EffectDefinition[]): { ok: boolean; errors: string[] } {\n const errors: string[] = [];\n const x = m as Partial<EffectPackManifest> | null;\n if (!x || typeof x !== 'object') return { ok: false, errors: ['manifest must be an object'] };\n if (x.format !== EFFECT_PACK_FORMAT) errors.push(`format must be \"${EFFECT_PACK_FORMAT}\"`);\n if (x.version !== 1) errors.push('version must be 1');\n if (!x.name || !PKG.test(x.name)) errors.push('name must be an npm package name');\n if (!x.packVersion || !SEMVER.test(x.packVersion)) errors.push('packVersion must be semver (x.y.z)');\n if (!Array.isArray(x.effects) || !x.effects.length) errors.push('effects must be a non-empty array');\n const seen = new Set<string>();\n for (const e of x.effects || []) {\n if (!e || !/^[a-z][a-z0-9-]*$/.test(e.name || '')) errors.push(`invalid effect name \"${e?.name}\"`);\n else if (seen.has(e.name)) errors.push(`duplicate effect \"${e.name}\"`);\n else seen.add(e.name);\n if (!e || !(EFFECT_KINDS as readonly string[]).includes(e.kind)) errors.push(`effect \"${e?.name}\": unknown kind \"${e?.kind}\"`);\n }\n if (effects) {\n const names = new Set(effects.map((e) => e.name));\n for (const n of seen) if (!names.has(n)) errors.push(`effect \"${n}\" is in the manifest but not exported`);\n for (const n of names) if (!seen.has(n)) errors.push(`effect \"${n}\" is exported but missing from the manifest`);\n }\n return { ok: !errors.length, errors };\n}\n\n/**\n * Import an effect pack (a URL / specifier, or an already imported module\n * with `effects` / `default` and `manifest`), validate and register it.\n * Returns the registered effect names.\n */\nexport async function loadEffectPack(src: string | { effects?: EffectDefinition[]; default?: EffectDefinition[]; manifest?: EffectPackManifest }, opts: { manifest?: EffectPackManifest; override?: boolean } = {}): Promise<string[]> {\n const mod: any = typeof src === 'string' ? await import(/* @vite-ignore */ src) : src;\n const effects: EffectDefinition[] = mod.effects || mod.default || [];\n const manifest = opts.manifest || mod.manifest;\n const v = validateManifest(manifest, effects);\n if (!v.ok) throw new Error(`[motionary] invalid effect pack: ${v.errors.join('; ')}`);\n const clash = effects.filter((e) => hasEffect(e.name));\n if (clash.length && !opts.override) throw new Error(`[motionary] effect pack \"${manifest.name}\" would replace ${clash.map((e) => e.name).join(', ')} (pass { override: true })`);\n for (const e of effects) registerEffect(e, { override: !!opts.override });\n return effects.map((e) => e.name);\n}\n"],"names":["EFFECT_KINDS","hasEffect","registerEffect"],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';
2
+ type Cleanup = () => void;
3
+
4
+ /**
5
+ * 5.0 — unified plugin-style effect registration. Every effect (built-in or
6
+ * yours) is a plain object registered once and played the same way:
7
+ * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or
8
+ * `<usa-fx effect="name" trigger="click">`. Effects get a context that
9
+ * already applies reduced motion, motion sensitivity, intensity and the
10
+ * animation budget.
11
+ */
12
+
13
+ declare const EFFECT_KINDS: readonly ["enter", "exit", "attention", "click", "hover", "card", "loop", "page", "background", "text", "cursor", "scroll"];
14
+ type EffectKind = (typeof EFFECT_KINDS)[number];
15
+ interface EffectContext {
16
+ /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */
17
+ readonly reduced: boolean;
18
+ readonly sensitivity: MotionSensitivity;
19
+ /** The triggering event (pointer position for click effects), if any. */
20
+ readonly event?: Event;
21
+ /** `el.animate()` with the library's motion rules (may return `null`). */
22
+ animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;
23
+ /** Register teardown for long-running effects (loops, listeners). */
24
+ onCleanup(fn: Cleanup): void;
25
+ }
26
+ interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {
27
+ /** Unique, kebab-case. */
28
+ name: string;
29
+ kind: EffectKind;
30
+ /** One line for docs and the gallery. */
31
+ description?: string;
32
+ /** Option defaults (merged under the caller's options). */
33
+ defaults?: Partial<O>;
34
+ /**
35
+ * Under reduced motion: `'skip'` (do nothing — default for loop, background
36
+ * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the
37
+ * effect degrades itself — default for everything else).
38
+ */
39
+ reduced?: 'skip' | 'run';
40
+ /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */
41
+ run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;
42
+ }
43
+
44
+ /**
45
+ * 6.9 — effect marketplace manifest (`motionary/components/marketplace`).
46
+ *
47
+ * A third-party effect pack is an ES module that exports its effects (an
48
+ * `EffectDefinition[]` as `effects` or `default`) plus a JSON manifest:
49
+ *
50
+ * ```json
51
+ * { "format": "motionary/effect-pack", "version": 1,
52
+ * "name": "@acme/motion-snow", "packVersion": "1.2.0",
53
+ * "description": "Snow and frost effects", "license": "MIT",
54
+ * "author": "Acme", "entry": "./dist/index.js", "requires": ">=6.9",
55
+ * "effects": [{ "name": "frost", "kind": "background", "description": "…",
56
+ * "defaults": { "speed": 1 } }] }
57
+ * ```
58
+ *
59
+ * `packManifest()` writes one from your effects, `validateManifest()` checks
60
+ * one (format, semver, unique kebab-case names, known kinds, effects match
61
+ * the module), and `loadEffectPack()` imports a pack (URL or module),
62
+ * validates it and registers its effects — refusing names that already
63
+ * exist unless `override`.
64
+ */
65
+
66
+ declare const EFFECT_PACK_FORMAT = "motionary/effect-pack";
67
+ interface EffectPackManifest {
68
+ format: typeof EFFECT_PACK_FORMAT;
69
+ version: 1;
70
+ name: string;
71
+ packVersion: string;
72
+ description?: string;
73
+ license?: string;
74
+ author?: string;
75
+ homepage?: string;
76
+ entry?: string;
77
+ requires?: string;
78
+ keywords?: string[];
79
+ effects: {
80
+ name: string;
81
+ kind: string;
82
+ description?: string;
83
+ defaults?: Record<string, unknown>;
84
+ }[];
85
+ }
86
+ /** Build a manifest from an effect pack. */
87
+ declare function packManifest(name: string, packVersion: string, effects: EffectDefinition[], extra?: Partial<Omit<EffectPackManifest, 'format' | 'version' | 'name' | 'packVersion' | 'effects'>>): EffectPackManifest;
88
+ /** Check a manifest (and optionally the module's effects against it). */
89
+ declare function validateManifest(m: unknown, effects?: EffectDefinition[]): {
90
+ ok: boolean;
91
+ errors: string[];
92
+ };
93
+ /**
94
+ * Import an effect pack (a URL / specifier, or an already imported module
95
+ * with `effects` / `default` and `manifest`), validate and register it.
96
+ * Returns the registered effect names.
97
+ */
98
+ declare function loadEffectPack(src: string | {
99
+ effects?: EffectDefinition[];
100
+ default?: EffectDefinition[];
101
+ manifest?: EffectPackManifest;
102
+ }, opts?: {
103
+ manifest?: EffectPackManifest;
104
+ override?: boolean;
105
+ }): Promise<string[]>;
106
+
107
+ export { EFFECT_PACK_FORMAT, loadEffectPack, packManifest, validateManifest };
108
+ export type { EffectPackManifest };
@@ -0,0 +1,108 @@
1
+ type MotionSensitivity = 'full' | 'gentle' | 'minimal' | 'static';
2
+ type Cleanup = () => void;
3
+
4
+ /**
5
+ * 5.0 — unified plugin-style effect registration. Every effect (built-in or
6
+ * yours) is a plain object registered once and played the same way:
7
+ * `playEffect(el, name)`, `bindEffect(el, name, { trigger })` or
8
+ * `<usa-fx effect="name" trigger="click">`. Effects get a context that
9
+ * already applies reduced motion, motion sensitivity, intensity and the
10
+ * animation budget.
11
+ */
12
+
13
+ declare const EFFECT_KINDS: readonly ["enter", "exit", "attention", "click", "hover", "card", "loop", "page", "background", "text", "cursor", "scroll"];
14
+ type EffectKind = (typeof EFFECT_KINDS)[number];
15
+ interface EffectContext {
16
+ /** Reduced motion applies (OS setting, `minimal` / `static` sensitivity). */
17
+ readonly reduced: boolean;
18
+ readonly sensitivity: MotionSensitivity;
19
+ /** The triggering event (pointer position for click effects), if any. */
20
+ readonly event?: Event;
21
+ /** `el.animate()` with the library's motion rules (may return `null`). */
22
+ animate(el: Element, keyframes: Keyframe[], options: KeyframeAnimationOptions): Animation | null;
23
+ /** Register teardown for long-running effects (loops, listeners). */
24
+ onCleanup(fn: Cleanup): void;
25
+ }
26
+ interface EffectDefinition<O extends Record<string, unknown> = Record<string, any>> {
27
+ /** Unique, kebab-case. */
28
+ name: string;
29
+ kind: EffectKind;
30
+ /** One line for docs and the gallery. */
31
+ description?: string;
32
+ /** Option defaults (merged under the caller's options). */
33
+ defaults?: Partial<O>;
34
+ /**
35
+ * Under reduced motion: `'skip'` (do nothing — default for loop, background
36
+ * and cursor effects) or `'run'` (run with `ctx.reduced === true`, the
37
+ * effect degrades itself — default for everything else).
38
+ */
39
+ reduced?: 'skip' | 'run';
40
+ /** Play the effect. Return an Animation / Promise to be awaited, or a cleanup. */
41
+ run(el: HTMLElement, options: O, ctx: EffectContext): void | Cleanup | Animation | null | Promise<unknown>;
42
+ }
43
+
44
+ /**
45
+ * 6.9 — effect marketplace manifest (`motionary/components/marketplace`).
46
+ *
47
+ * A third-party effect pack is an ES module that exports its effects (an
48
+ * `EffectDefinition[]` as `effects` or `default`) plus a JSON manifest:
49
+ *
50
+ * ```json
51
+ * { "format": "motionary/effect-pack", "version": 1,
52
+ * "name": "@acme/motion-snow", "packVersion": "1.2.0",
53
+ * "description": "Snow and frost effects", "license": "MIT",
54
+ * "author": "Acme", "entry": "./dist/index.js", "requires": ">=6.9",
55
+ * "effects": [{ "name": "frost", "kind": "background", "description": "…",
56
+ * "defaults": { "speed": 1 } }] }
57
+ * ```
58
+ *
59
+ * `packManifest()` writes one from your effects, `validateManifest()` checks
60
+ * one (format, semver, unique kebab-case names, known kinds, effects match
61
+ * the module), and `loadEffectPack()` imports a pack (URL or module),
62
+ * validates it and registers its effects — refusing names that already
63
+ * exist unless `override`.
64
+ */
65
+
66
+ declare const EFFECT_PACK_FORMAT = "motionary/effect-pack";
67
+ interface EffectPackManifest {
68
+ format: typeof EFFECT_PACK_FORMAT;
69
+ version: 1;
70
+ name: string;
71
+ packVersion: string;
72
+ description?: string;
73
+ license?: string;
74
+ author?: string;
75
+ homepage?: string;
76
+ entry?: string;
77
+ requires?: string;
78
+ keywords?: string[];
79
+ effects: {
80
+ name: string;
81
+ kind: string;
82
+ description?: string;
83
+ defaults?: Record<string, unknown>;
84
+ }[];
85
+ }
86
+ /** Build a manifest from an effect pack. */
87
+ declare function packManifest(name: string, packVersion: string, effects: EffectDefinition[], extra?: Partial<Omit<EffectPackManifest, 'format' | 'version' | 'name' | 'packVersion' | 'effects'>>): EffectPackManifest;
88
+ /** Check a manifest (and optionally the module's effects against it). */
89
+ declare function validateManifest(m: unknown, effects?: EffectDefinition[]): {
90
+ ok: boolean;
91
+ errors: string[];
92
+ };
93
+ /**
94
+ * Import an effect pack (a URL / specifier, or an already imported module
95
+ * with `effects` / `default` and `manifest`), validate and register it.
96
+ * Returns the registered effect names.
97
+ */
98
+ declare function loadEffectPack(src: string | {
99
+ effects?: EffectDefinition[];
100
+ default?: EffectDefinition[];
101
+ manifest?: EffectPackManifest;
102
+ }, opts?: {
103
+ manifest?: EffectPackManifest;
104
+ override?: boolean;
105
+ }): Promise<string[]>;
106
+
107
+ export { EFFECT_PACK_FORMAT, loadEffectPack, packManifest, validateManifest };
108
+ export type { EffectPackManifest };
@@ -0,0 +1,77 @@
1
+ import { hasEffect, registerEffect, EFFECT_KINDS } from '../chunks/registry-D23neB4M.js';
2
+ import '../chunks/base-DchG4q_S.js';
3
+
4
+ const EFFECT_PACK_FORMAT = 'motionary/effect-pack';
5
+ const SEMVER = /^\d+\.\d+\.\d+(?:-[\w.]+)?$/;
6
+ const PKG = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
7
+ /** Build a manifest from an effect pack. */
8
+ function packManifest(name, packVersion, effects, extra = {}) {
9
+ return {
10
+ format: EFFECT_PACK_FORMAT,
11
+ version: 1,
12
+ name,
13
+ packVersion,
14
+ ...extra,
15
+ effects: effects.map((e) => ({ name: e.name, kind: e.kind, ...(e.description ? { description: e.description } : {}), ...(e.defaults ? { defaults: JSON.parse(JSON.stringify(e.defaults)) } : {}) })),
16
+ };
17
+ }
18
+ /** Check a manifest (and optionally the module's effects against it). */
19
+ function validateManifest(m, effects) {
20
+ const errors = [];
21
+ const x = m;
22
+ if (!x || typeof x !== 'object')
23
+ return { ok: false, errors: ['manifest must be an object'] };
24
+ if (x.format !== EFFECT_PACK_FORMAT)
25
+ errors.push(`format must be "${EFFECT_PACK_FORMAT}"`);
26
+ if (x.version !== 1)
27
+ errors.push('version must be 1');
28
+ if (!x.name || !PKG.test(x.name))
29
+ errors.push('name must be an npm package name');
30
+ if (!x.packVersion || !SEMVER.test(x.packVersion))
31
+ errors.push('packVersion must be semver (x.y.z)');
32
+ if (!Array.isArray(x.effects) || !x.effects.length)
33
+ errors.push('effects must be a non-empty array');
34
+ const seen = new Set();
35
+ for (const e of x.effects || []) {
36
+ if (!e || !/^[a-z][a-z0-9-]*$/.test(e.name || ''))
37
+ errors.push(`invalid effect name "${e?.name}"`);
38
+ else if (seen.has(e.name))
39
+ errors.push(`duplicate effect "${e.name}"`);
40
+ else
41
+ seen.add(e.name);
42
+ if (!e || !EFFECT_KINDS.includes(e.kind))
43
+ errors.push(`effect "${e?.name}": unknown kind "${e?.kind}"`);
44
+ }
45
+ if (effects) {
46
+ const names = new Set(effects.map((e) => e.name));
47
+ for (const n of seen)
48
+ if (!names.has(n))
49
+ errors.push(`effect "${n}" is in the manifest but not exported`);
50
+ for (const n of names)
51
+ if (!seen.has(n))
52
+ errors.push(`effect "${n}" is exported but missing from the manifest`);
53
+ }
54
+ return { ok: !errors.length, errors };
55
+ }
56
+ /**
57
+ * Import an effect pack (a URL / specifier, or an already imported module
58
+ * with `effects` / `default` and `manifest`), validate and register it.
59
+ * Returns the registered effect names.
60
+ */
61
+ async function loadEffectPack(src, opts = {}) {
62
+ const mod = typeof src === 'string' ? await import(/* @vite-ignore */ src) : src;
63
+ const effects = mod.effects || mod.default || [];
64
+ const manifest = opts.manifest || mod.manifest;
65
+ const v = validateManifest(manifest, effects);
66
+ if (!v.ok)
67
+ throw new Error(`[motionary] invalid effect pack: ${v.errors.join('; ')}`);
68
+ const clash = effects.filter((e) => hasEffect(e.name));
69
+ if (clash.length && !opts.override)
70
+ throw new Error(`[motionary] effect pack "${manifest.name}" would replace ${clash.map((e) => e.name).join(', ')} (pass { override: true })`);
71
+ for (const e of effects)
72
+ registerEffect(e, { override: !!opts.override });
73
+ return effects.map((e) => e.name);
74
+ }
75
+
76
+ export { EFFECT_PACK_FORMAT, loadEffectPack, packManifest, validateManifest };
77
+ //# sourceMappingURL=marketplace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace.js","sources":["../../src/components/fx2/manifest.ts"],"sourcesContent":["/**\n * 6.9 — effect marketplace manifest (`motionary/components/marketplace`).\n *\n * A third-party effect pack is an ES module that exports its effects (an\n * `EffectDefinition[]` as `effects` or `default`) plus a JSON manifest:\n *\n * ```json\n * { \"format\": \"motionary/effect-pack\", \"version\": 1,\n * \"name\": \"@acme/motion-snow\", \"packVersion\": \"1.2.0\",\n * \"description\": \"Snow and frost effects\", \"license\": \"MIT\",\n * \"author\": \"Acme\", \"entry\": \"./dist/index.js\", \"requires\": \">=6.9\",\n * \"effects\": [{ \"name\": \"frost\", \"kind\": \"background\", \"description\": \"…\",\n * \"defaults\": { \"speed\": 1 } }] }\n * ```\n *\n * `packManifest()` writes one from your effects, `validateManifest()` checks\n * one (format, semver, unique kebab-case names, known kinds, effects match\n * the module), and `loadEffectPack()` imports a pack (URL or module),\n * validates it and registers its effects — refusing names that already\n * exist unless `override`.\n */\nimport type { EffectDefinition } from '../fx/registry';\nimport { EFFECT_KINDS, registerEffect, hasEffect } from '../fx/registry';\n\nexport const EFFECT_PACK_FORMAT = 'motionary/effect-pack';\n\nexport interface EffectPackManifest {\n format: typeof EFFECT_PACK_FORMAT;\n version: 1;\n name: string;\n packVersion: string;\n description?: string;\n license?: string;\n author?: string;\n homepage?: string;\n entry?: string;\n requires?: string;\n keywords?: string[];\n effects: { name: string; kind: string; description?: string; defaults?: Record<string, unknown> }[];\n}\n\nconst SEMVER = /^\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?$/;\nconst PKG = /^(?:@[a-z0-9-~][a-z0-9-._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n/** Build a manifest from an effect pack. */\nexport function packManifest(name: string, packVersion: string, effects: EffectDefinition[], extra: Partial<Omit<EffectPackManifest, 'format' | 'version' | 'name' | 'packVersion' | 'effects'>> = {}): EffectPackManifest {\n return {\n format: EFFECT_PACK_FORMAT,\n version: 1,\n name,\n packVersion,\n ...extra,\n effects: effects.map((e) => ({ name: e.name, kind: e.kind, ...(e.description ? { description: e.description } : {}), ...(e.defaults ? { defaults: JSON.parse(JSON.stringify(e.defaults)) } : {}) })),\n };\n}\n\n/** Check a manifest (and optionally the module's effects against it). */\nexport function validateManifest(m: unknown, effects?: EffectDefinition[]): { ok: boolean; errors: string[] } {\n const errors: string[] = [];\n const x = m as Partial<EffectPackManifest> | null;\n if (!x || typeof x !== 'object') return { ok: false, errors: ['manifest must be an object'] };\n if (x.format !== EFFECT_PACK_FORMAT) errors.push(`format must be \"${EFFECT_PACK_FORMAT}\"`);\n if (x.version !== 1) errors.push('version must be 1');\n if (!x.name || !PKG.test(x.name)) errors.push('name must be an npm package name');\n if (!x.packVersion || !SEMVER.test(x.packVersion)) errors.push('packVersion must be semver (x.y.z)');\n if (!Array.isArray(x.effects) || !x.effects.length) errors.push('effects must be a non-empty array');\n const seen = new Set<string>();\n for (const e of x.effects || []) {\n if (!e || !/^[a-z][a-z0-9-]*$/.test(e.name || '')) errors.push(`invalid effect name \"${e?.name}\"`);\n else if (seen.has(e.name)) errors.push(`duplicate effect \"${e.name}\"`);\n else seen.add(e.name);\n if (!e || !(EFFECT_KINDS as readonly string[]).includes(e.kind)) errors.push(`effect \"${e?.name}\": unknown kind \"${e?.kind}\"`);\n }\n if (effects) {\n const names = new Set(effects.map((e) => e.name));\n for (const n of seen) if (!names.has(n)) errors.push(`effect \"${n}\" is in the manifest but not exported`);\n for (const n of names) if (!seen.has(n)) errors.push(`effect \"${n}\" is exported but missing from the manifest`);\n }\n return { ok: !errors.length, errors };\n}\n\n/**\n * Import an effect pack (a URL / specifier, or an already imported module\n * with `effects` / `default` and `manifest`), validate and register it.\n * Returns the registered effect names.\n */\nexport async function loadEffectPack(src: string | { effects?: EffectDefinition[]; default?: EffectDefinition[]; manifest?: EffectPackManifest }, opts: { manifest?: EffectPackManifest; override?: boolean } = {}): Promise<string[]> {\n const mod: any = typeof src === 'string' ? await import(/* @vite-ignore */ src) : src;\n const effects: EffectDefinition[] = mod.effects || mod.default || [];\n const manifest = opts.manifest || mod.manifest;\n const v = validateManifest(manifest, effects);\n if (!v.ok) throw new Error(`[motionary] invalid effect pack: ${v.errors.join('; ')}`);\n const clash = effects.filter((e) => hasEffect(e.name));\n if (clash.length && !opts.override) throw new Error(`[motionary] effect pack \"${manifest.name}\" would replace ${clash.map((e) => e.name).join(', ')} (pass { override: true })`);\n for (const e of effects) registerEffect(e, { override: !!opts.override });\n return effects.map((e) => e.name);\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var base = require('../chunks/base-BaQV-2ha.cjs');
4
- var indexTags = require('../chunks/index-tags-wv0R_vkO.cjs');
4
+ var indexTags = require('../chunks/index-tags-BTMwrfgV.cjs');
5
5
 
6
6
  /**
7
7
  * motionary/components/perf — performance toolkit (4.5).
@@ -19,14 +19,14 @@ declare const animationBudget: () => number;
19
19
  declare const COMPONENT_CATEGORIES: {
20
20
  readonly reveal: readonly ["usa-reveal", "usa-stagger", "usa-scroll-progress", "usa-scrolly"];
21
21
  readonly text: readonly ["usa-typewriter", "usa-split-text", "usa-scramble", "usa-counter", "usa-shimmer-text", "usa-text-rotate", "usa-wave-text", "usa-glitch", "usa-gradient-text", "usa-handwriting", "usa-scroll-highlight"];
22
- readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press", "usa-toggle"];
22
+ readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press"];
23
23
  readonly feedback: readonly ["usa-spinner", "usa-skeleton", "usa-progress", "usa-toaster", "usa-check"];
24
24
  readonly background: readonly ["usa-aurora", "usa-particles", "usa-grain", "usa-marquee", "usa-acrylic", "usa-grid-glow", "usa-blobs", "usa-water-ripple", "usa-dot-network"];
25
25
  readonly transitions: readonly ["usa-dialog", "usa-accordion", "usa-view-switch"];
26
26
  readonly physics: readonly ["usa-spring", "usa-draggable", "usa-overscroll"];
27
27
  readonly cards: readonly ["usa-card", "usa-card-stack", "usa-sticky-stack", "usa-carousel-3d"];
28
28
  readonly click: readonly ["usa-click", "usa-button", "usa-icon-morph", "usa-like", "usa-hold", "usa-double-tap", "usa-checkbox"];
29
- readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-tooltip", "usa-popover", "usa-badge", "usa-avatar-stack"];
29
+ readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-popover", "usa-badge", "usa-avatar-stack"];
30
30
  readonly page: readonly ["usa-cursor", "usa-fullpage", "usa-loading-bar", "usa-back-to-top", "usa-ambient", "usa-splash", "usa-auto-skeleton", "usa-motion-switch"];
31
31
  readonly timeline: readonly ["usa-timeline"];
32
32
  readonly gesture: readonly ["usa-swipeable", "usa-pinch-zoom"];
@@ -19,14 +19,14 @@ declare const animationBudget: () => number;
19
19
  declare const COMPONENT_CATEGORIES: {
20
20
  readonly reveal: readonly ["usa-reveal", "usa-stagger", "usa-scroll-progress", "usa-scrolly"];
21
21
  readonly text: readonly ["usa-typewriter", "usa-split-text", "usa-scramble", "usa-counter", "usa-shimmer-text", "usa-text-rotate", "usa-wave-text", "usa-glitch", "usa-gradient-text", "usa-handwriting", "usa-scroll-highlight"];
22
- readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press", "usa-toggle"];
22
+ readonly interaction: readonly ["usa-ripple", "usa-magnetic", "usa-tilt", "usa-spotlight", "usa-press"];
23
23
  readonly feedback: readonly ["usa-spinner", "usa-skeleton", "usa-progress", "usa-toaster", "usa-check"];
24
24
  readonly background: readonly ["usa-aurora", "usa-particles", "usa-grain", "usa-marquee", "usa-acrylic", "usa-grid-glow", "usa-blobs", "usa-water-ripple", "usa-dot-network"];
25
25
  readonly transitions: readonly ["usa-dialog", "usa-accordion", "usa-view-switch"];
26
26
  readonly physics: readonly ["usa-spring", "usa-draggable", "usa-overscroll"];
27
27
  readonly cards: readonly ["usa-card", "usa-card-stack", "usa-sticky-stack", "usa-carousel-3d"];
28
28
  readonly click: readonly ["usa-click", "usa-button", "usa-icon-morph", "usa-like", "usa-hold", "usa-double-tap", "usa-checkbox"];
29
- readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-tooltip", "usa-popover", "usa-badge", "usa-avatar-stack"];
29
+ readonly ui: readonly ["usa-tabs", "usa-drawer", "usa-bottom-sheet", "usa-pull-refresh", "usa-fab", "usa-navbar", "usa-slider", "usa-rating", "usa-popover", "usa-badge", "usa-avatar-stack"];
30
30
  readonly page: readonly ["usa-cursor", "usa-fullpage", "usa-loading-bar", "usa-back-to-top", "usa-ambient", "usa-splash", "usa-auto-skeleton", "usa-motion-switch"];
31
31
  readonly timeline: readonly ["usa-timeline"];
32
32
  readonly gesture: readonly ["usa-swipeable", "usa-pinch-zoom"];
@@ -1,6 +1,6 @@
1
1
  import { o as onFrame, t as setStyleLoader, f as animationBudget, h as getMotionIntensity, g as configureComponents, j as setAnimationBudget, b as activeAnimations } from '../chunks/base-DchG4q_S.js';
2
2
  export { s as schedulerStats } from '../chunks/base-DchG4q_S.js';
3
- import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-DucKMQr_.js';
3
+ import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-C04JP8g4.js';
4
4
 
5
5
  /**
6
6
  * motionary/components/perf — performance toolkit (4.5).
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var indexTags = require('../chunks/index-tags-wv0R_vkO.cjs');
3
+ var indexTags = require('../chunks/index-tags-BTMwrfgV.cjs');
4
4
 
5
5
  /**
6
6
  * motionary/components/react — React wrappers for every `<usa-*>`
@@ -14,7 +14,7 @@ var indexTags = require('../chunks/index-tags-wv0R_vkO.cjs');
14
14
  * import { createUsaComponents } from 'motionary/components/react';
15
15
  * import { defineComponents } from 'motionary/components';
16
16
  * defineComponents();
17
- * const { UsaButton, UsaToggle } = createUsaComponents(React);
17
+ * const { UsaButton, UsaSwitch } = createUsaComponents(React);
18
18
  * <UsaButton deform="squash" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>
19
19
  * ```
20
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"react.cjs","sources":["../../src/components/frameworks/react.ts"],"sourcesContent":["/**\n * motionary/components/react — React wrappers for every `<usa-*>`\n * element (v2.9). React 19 handles custom elements natively; for React 18\n * (and nicer DX in both) `createUsaComponents(React)` returns typed wrapper\n * components that set **properties** (`checked`, `value`, `state`, …),\n * forward `ref`, and map `onUsaChange`-style props to `usa:change` events.\n *\n * ```tsx\n * import * as React from 'react';\n * import { createUsaComponents } from 'motionary/components/react';\n * import { defineComponents } from 'motionary/components';\n * defineComponents();\n * const { UsaButton, UsaToggle } = createUsaComponents(React);\n * <UsaButton deform=\"squash\" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>\n * ```\n *\n * JSX types for the raw tags (`<usa-card effect=\"flip\">`) come from\n * `motionary/components/jsx` (see `UsaIntrinsicElements`).\n */\nimport { COMPONENT_CATEGORIES } from '../index-tags';\n\ntype AnyProps = Record<string, any>;\ninterface ReactLike {\n createElement: (type: any, props?: any, ...children: any[]) => any;\n forwardRef: (render: (props: any, ref: any) => any) => any;\n useRef: <T>(v: T) => { current: T };\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\n useLayoutEffect?: (fn: () => void | (() => void), deps?: unknown[]) => void;\n}\n\n/** `usa-auto-animate` → `UsaAutoAnimate` */\nexport const pascal = (tag: string): string => tag.replace(/(^|-)([a-z0-9])/g, (_, __, c) => c.toUpperCase());\n/** `onUsaChange` → `usa:change`, `onUsaDragEnd` → `usa:drag-end`; `onChange` → `change`. */\nexport function eventName(prop: string): string | null {\n const m = /^on([A-Z].*)$/.exec(prop);\n if (!m) return null;\n const kebab = m[1].replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n return kebab.startsWith('usa-') ? `usa:${kebab.slice(4)}` : kebab;\n}\n\n/** Props written as DOM properties (not attributes) when given non-string values. */\nconst PROPS = new Set(['checked', 'value', 'state', 'open', 'liked', 'count', 'loading', 'flipped', 'selected', 'index', 'indeterminate']);\n\n/** All `<usa-*>` tags shipped by the package. */\nexport const USA_TAGS: string[] = Object.values(COMPONENT_CATEGORIES).flat() as string[];\n\nexport function createUsaComponents(React: ReactLike): Record<string, any> {\n const useIso = React.useLayoutEffect || React.useEffect;\n const make = (tag: string) => {\n const C = React.forwardRef((props: AnyProps, ref: any) => {\n const inner = React.useRef<HTMLElement | null>(null);\n const attrs: AnyProps = {};\n const events: [string, any][] = [];\n const propsSet: [string, any][] = [];\n for (const [k, v] of Object.entries(props)) {\n if (k === 'children') continue;\n const ev = typeof v === 'function' ? eventName(k) : null;\n if (ev) events.push([ev, v]);\n else if (PROPS.has(k) && typeof v !== 'string') propsSet.push([k, v]);\n else if (k === 'className') attrs.class = v;\n else if (typeof v === 'boolean') {\n if (v) attrs[k] = '';\n } else attrs[k] = v;\n }\n useIso(() => {\n const el = inner.current as any;\n if (!el) return;\n for (const [k, v] of propsSet) el[k] = v;\n });\n useIso(() => {\n const el = inner.current;\n if (!el) return;\n events.forEach(([n, f]) => el.addEventListener(n, f));\n return () => events.forEach(([n, f]) => el.removeEventListener(n, f));\n });\n const setRef = (node: HTMLElement | null) => {\n inner.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n return React.createElement(tag, { ...attrs, ref: setRef }, props.children);\n });\n (C as any).displayName = pascal(tag);\n return C;\n };\n return Object.fromEntries(USA_TAGS.map((t) => [pascal(t), make(t)]));\n}\n"],"names":["COMPONENT_CATEGORIES"],"mappings":"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"}
1
+ {"version":3,"file":"react.cjs","sources":["../../src/components/frameworks/react.ts"],"sourcesContent":["/**\n * motionary/components/react — React wrappers for every `<usa-*>`\n * element (v2.9). React 19 handles custom elements natively; for React 18\n * (and nicer DX in both) `createUsaComponents(React)` returns typed wrapper\n * components that set **properties** (`checked`, `value`, `state`, …),\n * forward `ref`, and map `onUsaChange`-style props to `usa:change` events.\n *\n * ```tsx\n * import * as React from 'react';\n * import { createUsaComponents } from 'motionary/components/react';\n * import { defineComponents } from 'motionary/components';\n * defineComponents();\n * const { UsaButton, UsaSwitch } = createUsaComponents(React);\n * <UsaButton deform=\"squash\" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>\n * ```\n *\n * JSX types for the raw tags (`<usa-card effect=\"flip\">`) come from\n * `motionary/components/jsx` (see `UsaIntrinsicElements`).\n */\nimport { COMPONENT_CATEGORIES } from '../index-tags';\n\ntype AnyProps = Record<string, any>;\ninterface ReactLike {\n createElement: (type: any, props?: any, ...children: any[]) => any;\n forwardRef: (render: (props: any, ref: any) => any) => any;\n useRef: <T>(v: T) => { current: T };\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\n useLayoutEffect?: (fn: () => void | (() => void), deps?: unknown[]) => void;\n}\n\n/** `usa-auto-animate` → `UsaAutoAnimate` */\nexport const pascal = (tag: string): string => tag.replace(/(^|-)([a-z0-9])/g, (_, __, c) => c.toUpperCase());\n/** `onUsaChange` → `usa:change`, `onUsaDragEnd` → `usa:drag-end`; `onChange` → `change`. */\nexport function eventName(prop: string): string | null {\n const m = /^on([A-Z].*)$/.exec(prop);\n if (!m) return null;\n const kebab = m[1].replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n return kebab.startsWith('usa-') ? `usa:${kebab.slice(4)}` : kebab;\n}\n\n/** Props written as DOM properties (not attributes) when given non-string values. */\nconst PROPS = new Set(['checked', 'value', 'state', 'open', 'liked', 'count', 'loading', 'flipped', 'selected', 'index', 'indeterminate']);\n\n/** All `<usa-*>` tags shipped by the package. */\nexport const USA_TAGS: string[] = Object.values(COMPONENT_CATEGORIES).flat() as string[];\n\nexport function createUsaComponents(React: ReactLike): Record<string, any> {\n const useIso = React.useLayoutEffect || React.useEffect;\n const make = (tag: string) => {\n const C = React.forwardRef((props: AnyProps, ref: any) => {\n const inner = React.useRef<HTMLElement | null>(null);\n const attrs: AnyProps = {};\n const events: [string, any][] = [];\n const propsSet: [string, any][] = [];\n for (const [k, v] of Object.entries(props)) {\n if (k === 'children') continue;\n const ev = typeof v === 'function' ? eventName(k) : null;\n if (ev) events.push([ev, v]);\n else if (PROPS.has(k) && typeof v !== 'string') propsSet.push([k, v]);\n else if (k === 'className') attrs.class = v;\n else if (typeof v === 'boolean') {\n if (v) attrs[k] = '';\n } else attrs[k] = v;\n }\n useIso(() => {\n const el = inner.current as any;\n if (!el) return;\n for (const [k, v] of propsSet) el[k] = v;\n });\n useIso(() => {\n const el = inner.current;\n if (!el) return;\n events.forEach(([n, f]) => el.addEventListener(n, f));\n return () => events.forEach(([n, f]) => el.removeEventListener(n, f));\n });\n const setRef = (node: HTMLElement | null) => {\n inner.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n return React.createElement(tag, { ...attrs, ref: setRef }, props.children);\n });\n (C as any).displayName = pascal(tag);\n return C;\n };\n return Object.fromEntries(USA_TAGS.map((t) => [pascal(t), make(t)]));\n}\n"],"names":["COMPONENT_CATEGORIES"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-DucKMQr_.js';
1
+ import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-C04JP8g4.js';
2
2
 
3
3
  /**
4
4
  * motionary/components/react — React wrappers for every `<usa-*>`
@@ -12,7 +12,7 @@ import { C as COMPONENT_CATEGORIES } from '../chunks/index-tags-DucKMQr_.js';
12
12
  * import { createUsaComponents } from 'motionary/components/react';
13
13
  * import { defineComponents } from 'motionary/components';
14
14
  * defineComponents();
15
- * const { UsaButton, UsaToggle } = createUsaComponents(React);
15
+ * const { UsaButton, UsaSwitch } = createUsaComponents(React);
16
16
  * <UsaButton deform="squash" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>
17
17
  * ```
18
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../../src/components/frameworks/react.ts"],"sourcesContent":["/**\n * motionary/components/react — React wrappers for every `<usa-*>`\n * element (v2.9). React 19 handles custom elements natively; for React 18\n * (and nicer DX in both) `createUsaComponents(React)` returns typed wrapper\n * components that set **properties** (`checked`, `value`, `state`, …),\n * forward `ref`, and map `onUsaChange`-style props to `usa:change` events.\n *\n * ```tsx\n * import * as React from 'react';\n * import { createUsaComponents } from 'motionary/components/react';\n * import { defineComponents } from 'motionary/components';\n * defineComponents();\n * const { UsaButton, UsaToggle } = createUsaComponents(React);\n * <UsaButton deform=\"squash\" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>\n * ```\n *\n * JSX types for the raw tags (`<usa-card effect=\"flip\">`) come from\n * `motionary/components/jsx` (see `UsaIntrinsicElements`).\n */\nimport { COMPONENT_CATEGORIES } from '../index-tags';\n\ntype AnyProps = Record<string, any>;\ninterface ReactLike {\n createElement: (type: any, props?: any, ...children: any[]) => any;\n forwardRef: (render: (props: any, ref: any) => any) => any;\n useRef: <T>(v: T) => { current: T };\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\n useLayoutEffect?: (fn: () => void | (() => void), deps?: unknown[]) => void;\n}\n\n/** `usa-auto-animate` → `UsaAutoAnimate` */\nexport const pascal = (tag: string): string => tag.replace(/(^|-)([a-z0-9])/g, (_, __, c) => c.toUpperCase());\n/** `onUsaChange` → `usa:change`, `onUsaDragEnd` → `usa:drag-end`; `onChange` → `change`. */\nexport function eventName(prop: string): string | null {\n const m = /^on([A-Z].*)$/.exec(prop);\n if (!m) return null;\n const kebab = m[1].replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n return kebab.startsWith('usa-') ? `usa:${kebab.slice(4)}` : kebab;\n}\n\n/** Props written as DOM properties (not attributes) when given non-string values. */\nconst PROPS = new Set(['checked', 'value', 'state', 'open', 'liked', 'count', 'loading', 'flipped', 'selected', 'index', 'indeterminate']);\n\n/** All `<usa-*>` tags shipped by the package. */\nexport const USA_TAGS: string[] = Object.values(COMPONENT_CATEGORIES).flat() as string[];\n\nexport function createUsaComponents(React: ReactLike): Record<string, any> {\n const useIso = React.useLayoutEffect || React.useEffect;\n const make = (tag: string) => {\n const C = React.forwardRef((props: AnyProps, ref: any) => {\n const inner = React.useRef<HTMLElement | null>(null);\n const attrs: AnyProps = {};\n const events: [string, any][] = [];\n const propsSet: [string, any][] = [];\n for (const [k, v] of Object.entries(props)) {\n if (k === 'children') continue;\n const ev = typeof v === 'function' ? eventName(k) : null;\n if (ev) events.push([ev, v]);\n else if (PROPS.has(k) && typeof v !== 'string') propsSet.push([k, v]);\n else if (k === 'className') attrs.class = v;\n else if (typeof v === 'boolean') {\n if (v) attrs[k] = '';\n } else attrs[k] = v;\n }\n useIso(() => {\n const el = inner.current as any;\n if (!el) return;\n for (const [k, v] of propsSet) el[k] = v;\n });\n useIso(() => {\n const el = inner.current;\n if (!el) return;\n events.forEach(([n, f]) => el.addEventListener(n, f));\n return () => events.forEach(([n, f]) => el.removeEventListener(n, f));\n });\n const setRef = (node: HTMLElement | null) => {\n inner.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n return React.createElement(tag, { ...attrs, ref: setRef }, props.children);\n });\n (C as any).displayName = pascal(tag);\n return C;\n };\n return Object.fromEntries(USA_TAGS.map((t) => [pascal(t), make(t)]));\n}\n"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;;;;AAkBG;AAYH;AACO,MAAM,MAAM,GAAG,CAAC,GAAW,KAAa,GAAG,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;AAC5G;AACM,SAAU,SAAS,CAAC,IAAY,EAAA;IACpC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;AACnB,IAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;IACvE,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAA,IAAA,EAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK;AACnE;AAEA;AACA,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AAE1I;AACO,MAAM,QAAQ,GAAa,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI;AAEpE,SAAU,mBAAmB,CAAC,KAAgB,EAAA;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,SAAS;AACvD,IAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;QAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,KAAe,EAAE,GAAQ,KAAI;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAqB,IAAI,CAAC;YACpD,MAAM,KAAK,GAAa,EAAE;YAC1B,MAAM,MAAM,GAAoB,EAAE;YAClC,MAAM,QAAQ,GAAoB,EAAE;AACpC,YAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC1C,IAAI,CAAC,KAAK,UAAU;oBAAE;AACtB,gBAAA,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AACxD,gBAAA,IAAI,EAAE;oBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;qBACvB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChE,IAAI,CAAC,KAAK,WAAW;AAAE,oBAAA,KAAK,CAAC,KAAK,GAAG,CAAC;AACtC,qBAAA,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE;AAC/B,oBAAA,IAAI,CAAC;AAAE,wBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE;gBACtB;;AAAO,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACrB;YACA,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAc;AAC/B,gBAAA,IAAI,CAAC,EAAE;oBAAE;AACT,gBAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ;AAAE,oBAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,YAAA,CAAC,CAAC;YACF,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO;AACxB,gBAAA,IAAI,CAAC,EAAE;oBAAE;gBACT,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrD,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,YAAA,CAAC,CAAC;AACF,YAAA,MAAM,MAAM,GAAG,CAAC,IAAwB,KAAI;AAC1C,gBAAA,KAAK,CAAC,OAAO,GAAG,IAAI;gBACpB,IAAI,OAAO,GAAG,KAAK,UAAU;oBAAE,GAAG,CAAC,IAAI,CAAC;AACnC,qBAAA,IAAI,GAAG;AAAE,oBAAA,GAAG,CAAC,OAAO,GAAG,IAAI;AAClC,YAAA,CAAC;AACD,YAAA,OAAO,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC5E,QAAA,CAAC,CAAC;AACD,QAAA,CAAS,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC;AACpC,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE;;;;"}
1
+ {"version":3,"file":"react.js","sources":["../../src/components/frameworks/react.ts"],"sourcesContent":["/**\n * motionary/components/react — React wrappers for every `<usa-*>`\n * element (v2.9). React 19 handles custom elements natively; for React 18\n * (and nicer DX in both) `createUsaComponents(React)` returns typed wrapper\n * components that set **properties** (`checked`, `value`, `state`, …),\n * forward `ref`, and map `onUsaChange`-style props to `usa:change` events.\n *\n * ```tsx\n * import * as React from 'react';\n * import { createUsaComponents } from 'motionary/components/react';\n * import { defineComponents } from 'motionary/components';\n * defineComponents();\n * const { UsaButton, UsaSwitch } = createUsaComponents(React);\n * <UsaButton deform=\"squash\" onUsaSubmit={(e) => e.detail.done(true)}><button>Pay</button></UsaButton>\n * ```\n *\n * JSX types for the raw tags (`<usa-card effect=\"flip\">`) come from\n * `motionary/components/jsx` (see `UsaIntrinsicElements`).\n */\nimport { COMPONENT_CATEGORIES } from '../index-tags';\n\ntype AnyProps = Record<string, any>;\ninterface ReactLike {\n createElement: (type: any, props?: any, ...children: any[]) => any;\n forwardRef: (render: (props: any, ref: any) => any) => any;\n useRef: <T>(v: T) => { current: T };\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\n useLayoutEffect?: (fn: () => void | (() => void), deps?: unknown[]) => void;\n}\n\n/** `usa-auto-animate` → `UsaAutoAnimate` */\nexport const pascal = (tag: string): string => tag.replace(/(^|-)([a-z0-9])/g, (_, __, c) => c.toUpperCase());\n/** `onUsaChange` → `usa:change`, `onUsaDragEnd` → `usa:drag-end`; `onChange` → `change`. */\nexport function eventName(prop: string): string | null {\n const m = /^on([A-Z].*)$/.exec(prop);\n if (!m) return null;\n const kebab = m[1].replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n return kebab.startsWith('usa-') ? `usa:${kebab.slice(4)}` : kebab;\n}\n\n/** Props written as DOM properties (not attributes) when given non-string values. */\nconst PROPS = new Set(['checked', 'value', 'state', 'open', 'liked', 'count', 'loading', 'flipped', 'selected', 'index', 'indeterminate']);\n\n/** All `<usa-*>` tags shipped by the package. */\nexport const USA_TAGS: string[] = Object.values(COMPONENT_CATEGORIES).flat() as string[];\n\nexport function createUsaComponents(React: ReactLike): Record<string, any> {\n const useIso = React.useLayoutEffect || React.useEffect;\n const make = (tag: string) => {\n const C = React.forwardRef((props: AnyProps, ref: any) => {\n const inner = React.useRef<HTMLElement | null>(null);\n const attrs: AnyProps = {};\n const events: [string, any][] = [];\n const propsSet: [string, any][] = [];\n for (const [k, v] of Object.entries(props)) {\n if (k === 'children') continue;\n const ev = typeof v === 'function' ? eventName(k) : null;\n if (ev) events.push([ev, v]);\n else if (PROPS.has(k) && typeof v !== 'string') propsSet.push([k, v]);\n else if (k === 'className') attrs.class = v;\n else if (typeof v === 'boolean') {\n if (v) attrs[k] = '';\n } else attrs[k] = v;\n }\n useIso(() => {\n const el = inner.current as any;\n if (!el) return;\n for (const [k, v] of propsSet) el[k] = v;\n });\n useIso(() => {\n const el = inner.current;\n if (!el) return;\n events.forEach(([n, f]) => el.addEventListener(n, f));\n return () => events.forEach(([n, f]) => el.removeEventListener(n, f));\n });\n const setRef = (node: HTMLElement | null) => {\n inner.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n return React.createElement(tag, { ...attrs, ref: setRef }, props.children);\n });\n (C as any).displayName = pascal(tag);\n return C;\n };\n return Object.fromEntries(USA_TAGS.map((t) => [pascal(t), make(t)]));\n}\n"],"names":[],"mappings":"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"}
@@ -31,14 +31,14 @@ require('./packs.cjs');
31
31
  require('./fx.cjs');
32
32
  require('../chunks/registry-DehBVRDV.cjs');
33
33
  require('./a11y.cjs');
34
- require('../chunks/index-tags-wv0R_vkO.cjs');
34
+ require('../chunks/index-tags-BTMwrfgV.cjs');
35
35
  require('./perf.cjs');
36
36
  require('./bridge.cjs');
37
37
 
38
38
  /**
39
39
  * motionary/components/solid — Solid integration (v3.8).
40
40
  * Solid renders custom elements natively: set properties with `prop:` and
41
- * listen with `on:` (`<usa-toggle prop:checked={on()} on:usa:change={…}>`).
41
+ * listen with `on:` (`<usa-switch prop:checked={on()} on:usa:change={…}>`).
42
42
  * This entry adds `defineUsa()` (client only, SolidStart-safe), a `usa`
43
43
  * directive for `use:usa={{ props, on }}`, and JSX types.
44
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"solid.cjs","sources":["../../src/components/frameworks/solid.ts"],"sourcesContent":["/**\n * motionary/components/solid — Solid integration (v3.8).\n * Solid renders custom elements natively: set properties with `prop:` and\n * listen with `on:` (`<usa-toggle prop:checked={on()} on:usa:change={…}>`).\n * This entry adds `defineUsa()` (client only, SolidStart-safe), a `usa`\n * directive for `use:usa={{ props, on }}`, and JSX types.\n *\n * ```tsx\n * import { defineUsa, usa } from 'motionary/components/solid';\n * import type {} from 'motionary/components/solid'; // JSX types\n * onMount(() => defineUsa());\n * false && usa; // keep the directive import (Solid convention)\n * <usa-card use:usa={{ on: { flip: (e) => console.log(e.detail) } }} effect=\"flip\">…</usa-card>\n * ```\n */\nimport { createRenderEffect, onCleanup } from 'solid-js';\nimport { defineComponents, type ComponentCategory } from '../index';\nimport { bindUsa, type UsaBinding } from './bind';\nimport type { UsaIntrinsicElements } from './jsx';\n\nexport { bindUsa, usaEventName } from './bind';\nexport type { UsaBinding } from './bind';\n\n/**\n * Solid directive (`use:usa`). Solid calls it with the element and an\n * accessor; since 4.0.1 the binding is tracked with `createRenderEffect`, so\n * signals read inside `{{ props, on }}` update the element automatically and\n * the listeners are removed on cleanup. `refresh()` is kept for code that\n * calls the directive outside a reactive owner.\n */\nexport function usa(el: HTMLElement, accessor: () => UsaBinding | undefined): { refresh(): void; destroy(): void } {\n let b: ReturnType<typeof bindUsa> | null = null;\n const run = () => {\n const v = accessor() || {};\n if (b) b.update(v);\n else b = bindUsa(el, v);\n };\n createRenderEffect(run);\n if (!b) run();\n const destroy = () => b?.destroy();\n onCleanup(destroy);\n return { refresh: run, destroy };\n}\n\n/** Register the elements (all, or some categories) — call from `onMount` in SSR apps. */\nexport function defineUsa(categories?: ComponentCategory[]): void {\n if (typeof window !== 'undefined') defineComponents(categories);\n}\n\n/** JSX intrinsic elements for Solid (same attribute types as the React/Preact ones). */\nexport type SolidUsaIntrinsicElements = UsaIntrinsicElements;\n"],"names":["bindUsa","createRenderEffect","onCleanup","defineComponents"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AASH;;;;;;AAMG;AACG,SAAU,GAAG,CAAC,EAAe,EAAE,QAAsC,EAAA;IACzE,IAAI,CAAC,GAAsC,IAAI;IAC/C,MAAM,GAAG,GAAG,MAAK;AACf,QAAA,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;;AACb,YAAA,CAAC,GAAGA,YAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACzB,IAAA,CAAC;IACDC,0BAAkB,CAAC,GAAG,CAAC;AACvB,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,GAAG,EAAE;IACb,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE;IAClCC,iBAAS,CAAC,OAAO,CAAC;AAClB,IAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC;AAEA;AACM,SAAU,SAAS,CAAC,UAAgC,EAAA;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAEC,2BAAgB,CAAC,UAAU,CAAC;AACjE;;;;;;;"}
1
+ {"version":3,"file":"solid.cjs","sources":["../../src/components/frameworks/solid.ts"],"sourcesContent":["/**\n * motionary/components/solid — Solid integration (v3.8).\n * Solid renders custom elements natively: set properties with `prop:` and\n * listen with `on:` (`<usa-switch prop:checked={on()} on:usa:change={…}>`).\n * This entry adds `defineUsa()` (client only, SolidStart-safe), a `usa`\n * directive for `use:usa={{ props, on }}`, and JSX types.\n *\n * ```tsx\n * import { defineUsa, usa } from 'motionary/components/solid';\n * import type {} from 'motionary/components/solid'; // JSX types\n * onMount(() => defineUsa());\n * false && usa; // keep the directive import (Solid convention)\n * <usa-card use:usa={{ on: { flip: (e) => console.log(e.detail) } }} effect=\"flip\">…</usa-card>\n * ```\n */\nimport { createRenderEffect, onCleanup } from 'solid-js';\nimport { defineComponents, type ComponentCategory } from '../index';\nimport { bindUsa, type UsaBinding } from './bind';\nimport type { UsaIntrinsicElements } from './jsx';\n\nexport { bindUsa, usaEventName } from './bind';\nexport type { UsaBinding } from './bind';\n\n/**\n * Solid directive (`use:usa`). Solid calls it with the element and an\n * accessor; since 4.0.1 the binding is tracked with `createRenderEffect`, so\n * signals read inside `{{ props, on }}` update the element automatically and\n * the listeners are removed on cleanup. `refresh()` is kept for code that\n * calls the directive outside a reactive owner.\n */\nexport function usa(el: HTMLElement, accessor: () => UsaBinding | undefined): { refresh(): void; destroy(): void } {\n let b: ReturnType<typeof bindUsa> | null = null;\n const run = () => {\n const v = accessor() || {};\n if (b) b.update(v);\n else b = bindUsa(el, v);\n };\n createRenderEffect(run);\n if (!b) run();\n const destroy = () => b?.destroy();\n onCleanup(destroy);\n return { refresh: run, destroy };\n}\n\n/** Register the elements (all, or some categories) — call from `onMount` in SSR apps. */\nexport function defineUsa(categories?: ComponentCategory[]): void {\n if (typeof window !== 'undefined') defineComponents(categories);\n}\n\n/** JSX intrinsic elements for Solid (same attribute types as the React/Preact ones). */\nexport type SolidUsaIntrinsicElements = UsaIntrinsicElements;\n"],"names":["bindUsa","createRenderEffect","onCleanup","defineComponents"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AAcG;AASH;;;;;;AAMG;AACG,SAAU,GAAG,CAAC,EAAe,EAAE,QAAsC,EAAA;IACzE,IAAI,CAAC,GAAsC,IAAI;IAC/C,MAAM,GAAG,GAAG,MAAK;AACf,QAAA,MAAM,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;;AACb,YAAA,CAAC,GAAGA,YAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACzB,IAAA,CAAC;IACDC,0BAAkB,CAAC,GAAG,CAAC;AACvB,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,GAAG,EAAE;IACb,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE;IAClCC,iBAAS,CAAC,OAAO,CAAC;AAClB,IAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;AAClC;AAEA;AACM,SAAU,SAAS,CAAC,UAAgC,EAAA;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAEC,2BAAgB,CAAC,UAAU,CAAC;AACjE;;;;;;;"}