@ponchia/ui 0.6.9 → 0.6.11

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 (145) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/README.md +38 -25
  3. package/annotations/index.d.ts +15 -15
  4. package/annotations/index.d.ts.map +1 -1
  5. package/annotations/index.js +52 -34
  6. package/behaviors/carousel.d.ts +7 -3
  7. package/behaviors/carousel.d.ts.map +1 -1
  8. package/behaviors/carousel.js +157 -27
  9. package/behaviors/combobox.d.ts +1 -1
  10. package/behaviors/combobox.d.ts.map +1 -1
  11. package/behaviors/combobox.js +46 -23
  12. package/behaviors/command.d.ts +1 -1
  13. package/behaviors/command.d.ts.map +1 -1
  14. package/behaviors/command.js +63 -23
  15. package/behaviors/connectors.d.ts.map +1 -1
  16. package/behaviors/connectors.js +126 -19
  17. package/behaviors/crosshair.d.ts.map +1 -1
  18. package/behaviors/crosshair.js +71 -8
  19. package/behaviors/dialog.d.ts.map +1 -1
  20. package/behaviors/dialog.js +20 -3
  21. package/behaviors/disclosure.d.ts.map +1 -1
  22. package/behaviors/disclosure.js +35 -6
  23. package/behaviors/dismissible.js +1 -1
  24. package/behaviors/forms.d.ts +23 -2
  25. package/behaviors/forms.d.ts.map +1 -1
  26. package/behaviors/forms.js +97 -9
  27. package/behaviors/glyph.d.ts.map +1 -1
  28. package/behaviors/glyph.js +56 -5
  29. package/behaviors/internal.d.ts.map +1 -1
  30. package/behaviors/internal.js +52 -5
  31. package/behaviors/menu.d.ts.map +1 -1
  32. package/behaviors/menu.js +2 -1
  33. package/behaviors/modal.d.ts.map +1 -1
  34. package/behaviors/modal.js +25 -9
  35. package/behaviors/popover.d.ts.map +1 -1
  36. package/behaviors/popover.js +8 -6
  37. package/behaviors/sources.d.ts.map +1 -1
  38. package/behaviors/sources.js +24 -3
  39. package/behaviors/splitter.d.ts.map +1 -1
  40. package/behaviors/splitter.js +27 -6
  41. package/behaviors/table.d.ts.map +1 -1
  42. package/behaviors/table.js +44 -7
  43. package/behaviors/tabs.d.ts.map +1 -1
  44. package/behaviors/tabs.js +51 -14
  45. package/behaviors/theme.d.ts.map +1 -1
  46. package/behaviors/theme.js +64 -4
  47. package/behaviors/toast.d.ts +6 -1
  48. package/behaviors/toast.d.ts.map +1 -1
  49. package/behaviors/toast.js +48 -12
  50. package/classes/classes.json +57 -2
  51. package/classes/index.d.ts +13 -2
  52. package/classes/index.js +88 -40
  53. package/connectors/index.d.ts +4 -4
  54. package/connectors/index.d.ts.map +1 -1
  55. package/connectors/index.js +14 -12
  56. package/css/annotations.css +1 -0
  57. package/css/app.css +7 -0
  58. package/css/base.css +3 -0
  59. package/css/bullet.css +41 -7
  60. package/css/code.css +14 -0
  61. package/css/command.css +10 -0
  62. package/css/dataviz.css +27 -0
  63. package/css/diff.css +2 -0
  64. package/css/disclosure.css +8 -0
  65. package/css/dots.css +1 -1
  66. package/css/feedback.css +9 -0
  67. package/css/interval.css +20 -2
  68. package/css/legend.css +10 -9
  69. package/css/marks.css +1 -0
  70. package/css/motion.css +2 -0
  71. package/css/overlay.css +14 -2
  72. package/css/primitives.css +1 -1
  73. package/css/report.css +3 -0
  74. package/css/sources.css +4 -4
  75. package/css/spotlight.css +6 -0
  76. package/css/table.css +19 -0
  77. package/css/term.css +4 -1
  78. package/css/tokens.css +8 -13
  79. package/css/workbench.css +128 -0
  80. package/dist/bronto.css +1 -1
  81. package/dist/css/analytical.css +1 -1
  82. package/dist/css/app.css +1 -1
  83. package/dist/css/bullet.css +1 -1
  84. package/dist/css/code.css +1 -1
  85. package/dist/css/command.css +1 -1
  86. package/dist/css/dataviz.css +1 -1
  87. package/dist/css/diff.css +1 -1
  88. package/dist/css/disclosure.css +1 -1
  89. package/dist/css/dots.css +1 -1
  90. package/dist/css/feedback.css +1 -1
  91. package/dist/css/interval.css +1 -1
  92. package/dist/css/legend.css +1 -1
  93. package/dist/css/marks.css +1 -1
  94. package/dist/css/overlay.css +1 -1
  95. package/dist/css/primitives.css +1 -1
  96. package/dist/css/report-kit.css +1 -1
  97. package/dist/css/sources.css +1 -1
  98. package/dist/css/spotlight.css +1 -1
  99. package/dist/css/table.css +1 -1
  100. package/dist/css/term.css +1 -1
  101. package/dist/css/tokens.css +1 -1
  102. package/dist/css/workbench.css +1 -1
  103. package/docs/annotations.md +27 -0
  104. package/docs/architecture.md +5 -3
  105. package/docs/bullet.md +6 -1
  106. package/docs/clamp.md +5 -0
  107. package/docs/command.md +3 -2
  108. package/docs/contrast.md +3 -3
  109. package/docs/crosshair.md +6 -0
  110. package/docs/dots.md +10 -3
  111. package/docs/figure.md +7 -0
  112. package/docs/glyphs.md +14 -2
  113. package/docs/highlights.md +9 -0
  114. package/docs/interval.md +6 -0
  115. package/docs/mermaid.md +5 -3
  116. package/docs/package-contract.md +24 -1
  117. package/docs/reference.md +21 -1
  118. package/docs/reporting.md +8 -8
  119. package/docs/selection.md +9 -0
  120. package/docs/sources.md +5 -0
  121. package/docs/state.md +6 -0
  122. package/docs/textref.md +18 -13
  123. package/docs/theming.md +18 -8
  124. package/docs/toc.md +6 -0
  125. package/docs/tree.md +9 -2
  126. package/docs/usage.md +2 -2
  127. package/docs/vega.md +5 -3
  128. package/docs/workbench.md +56 -9
  129. package/glyphs/glyphs.js +62 -8
  130. package/index.d.ts +1 -0
  131. package/llms.txt +18 -14
  132. package/package.json +98 -6
  133. package/qwik/index.d.ts +4 -3
  134. package/qwik/index.d.ts.map +1 -1
  135. package/qwik/index.js +7 -5
  136. package/react/index.d.ts +4 -3
  137. package/react/index.d.ts.map +1 -1
  138. package/react/index.js +3 -2
  139. package/solid/index.d.ts +7 -5
  140. package/solid/index.d.ts.map +1 -1
  141. package/solid/index.js +11 -7
  142. package/tokens/vega.d.ts +1 -1
  143. package/tokens/vega.js +3 -2
  144. package/vue/index.d.ts.map +1 -1
  145. package/vue/index.js +37 -3
package/llms.txt CHANGED
@@ -3,8 +3,8 @@
3
3
  > CSS-first, framework-agnostic UI framework. Zero runtime dependencies.
4
4
  > One `@layer bronto` cascade, a typed class vocabulary, design tokens as
5
5
  > data, and optional SSR-safe vanilla behaviors. Token-driven restraint:
6
- > monochrome by default, one rationed accent, dot-matrix display type, with
7
- > opt-in colorways + a colourblind-safe data-viz palette layered on top.
6
+ > neutral by default, one core accent for UI emphasis, dot-matrix display type,
7
+ > plus separate governed tiers for status, display colorways, and data-viz.
8
8
  >
9
9
  > This file orients an LLM/agent. The authoritative, always-correct API
10
10
  > is the TypeScript declarations shipped in this package (paths below):
@@ -29,9 +29,10 @@ explicit JS subpaths below.
29
29
  JS subpaths are ESM-only. In CommonJS, use dynamic `import()`.
30
30
 
31
31
  Everything lands in `@layer bronto`. Consumer styles in no layer (or a
32
- later layer) always win over framework styles regardless of selector
33
- specificity — this is the intended override mechanism; do not fight it
34
- with `!important`.
32
+ later layer) win ordinary framework styles regardless of selector specificity —
33
+ this is the intended override mechanism. Do not fight normal component styling
34
+ with `!important`; the framework reserves `!important` for print and
35
+ reduced-motion safeguards.
35
36
 
36
37
  Loading a stylesheet — read before copying a `<link>` below. The opt-in
37
38
  leaves are written as `@ponchia/ui/css/<leaf>.css` for brevity. That
@@ -44,7 +45,7 @@ the path changes from source `css/` to built `dist/css/`:
44
45
  <!-- installed locally -->
45
46
  <link rel="stylesheet" href="./node_modules/@ponchia/ui/dist/css/<leaf>.css" />
46
47
  <!-- or from a CDN; pin the version (pre-1.0, breaking changes ship in the minor) -->
47
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.9/dist/css/<leaf>.css" />
48
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ponchia/ui@0.6.11/dist/css/<leaf>.css" />
48
49
  ```
49
50
 
50
51
  The flattened default bundle is `dist/bronto.css` (bundler shorthand
@@ -466,9 +467,10 @@ It NEVER parses or tokenizes — the host (or Shiki, via the shipped
466
467
  `shiki/nothing.json` token theme) supplies the coloured spans; Bronto owns only
467
468
  the chrome. `ui-code` (+`__head` filename bar, `__body` the `<pre>`); wrap each
468
469
  line in `ui-code__line` to opt into the `ui-code--numbered` gutter (CSS
469
- counters) and the `ui-code__line--add`/`--del`/`--hl` line states (forced-colors
470
- + print safe via an inline-start border). Long lines wrap. `ui.code({ numbered })`
471
- / `ui.codeLine({ change })`. Details: `docs/code.md`.
470
+ counters) and the `ui-code__line--add`/`--remove`/`--hl` line states
471
+ (forced-colors + print safe via an inline-start border). Long lines wrap.
472
+ `ui.code({ numbered })` / `ui.codeLine({ change: 'add'|'remove'|'hl' })`.
473
+ Details: `docs/code.md`.
472
474
 
473
475
  Optional inline datawords — opt-in, CSS only, never in the default bundle. A
474
476
  word-sized microchart (trend-in-a-sentence) for reports and dense tables, the
@@ -606,12 +608,12 @@ default bundle:
606
608
  <link rel="stylesheet" href="@ponchia/ui/css/workbench.css" />
607
609
  ```
608
610
 
609
- `ui-inspector` (+`__header`/`__body`) is a selected-object detail panel;
611
+ `ui-inspector` (+`__head`/`__body`) is a selected-object detail panel;
610
612
  `ui-property` (+`__label`/`__value`) is a denser key/value row for it;
611
613
  `ui-selectionbar` (+`__count`/`__actions`) is a raised action bar for the current
612
614
  selection (pair with `ui-sel` states on the items). Layout/affordances only —
613
- resizable split panes and drag handles are deferred. Class-only. Details:
614
- `docs/workbench.md`.
615
+ `ui-splitter` (+`--vertical`/`--horizontal`, `__pane`/`__handle`) ships with
616
+ optional `initSplitter()` for ARIA resize sync. Details: `docs/workbench.md`.
615
617
 
616
618
  Optional command palette — opt-in CSS shell (`css/command.css`) + `initCommand`
617
619
  behavior. Filter + keyboard-navigate a DOM-authored command list:
@@ -815,8 +817,10 @@ Read these from `node_modules/@ponchia/ui/` — no network needed:
815
817
  `dist/bronto.css` carries the report/chart/legend/annotation layers — it
816
818
  does not. Link each opt-in leaf from `dist/css/` via a real URL
817
819
  (`./node_modules/…` or a pinned CDN). See the loading note above.
818
- - Override framework styles by writing your own rules outside
819
- `@layer bronto` not with higher specificity or `!important`.
820
+ - Override ordinary framework styles by writing your own rules outside
821
+ `@layer bronto`, not with higher specificity. Reserve `!important` for the
822
+ same kind of media-boundary safeguards the framework uses in print and
823
+ reduced-motion rules.
820
824
  - Color is tiered (ADR-0001): neutral canvas · one rationed accent · locked
821
825
  status · display expression · opt-in data-viz. Theme via the documented
822
826
  tokens — re-point `--accent` (or a `data-bronto-skin` colorway), use status
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ponchia/ui",
3
- "version": "0.6.9",
3
+ "version": "0.6.11",
4
4
  "type": "module",
5
5
  "description": "CSS-first identity and UI layer for services, tools, sites, and reports — works in HTML, every framework, and PDF, no component runtime. Shared app shell, forms, tables, workflow chrome, plus opt-in analytical/report primitives. Monochrome with one rationed accent. Zero runtime dependencies.",
6
6
  "keywords": [
@@ -45,6 +45,7 @@
45
45
  "css",
46
46
  "dist",
47
47
  "tailwind.css",
48
+ "index.d.ts",
48
49
  "fonts",
49
50
  "tokens",
50
51
  "classes",
@@ -119,6 +120,8 @@
119
120
  "check:format": "prettier --check .",
120
121
  "size:report": "node scripts/size-report.mjs",
121
122
  "report:pdf": "node scripts/render-pdf.mjs",
123
+ "audit:selectors": "node scripts/audit-selectors.mjs",
124
+ "audit:behavior-exports": "node scripts/audit-behavior-exports.mjs",
122
125
  "release:prep": "node scripts/release-prep.mjs",
123
126
  "emit:theme": "node scripts/emit-theme.mjs",
124
127
  "emit:theme:check": "node scripts/emit-theme.mjs --check",
@@ -203,20 +206,20 @@
203
206
  "prepublishOnly": "npm run build:artifacts && npm run check"
204
207
  },
205
208
  "devDependencies": {
206
- "@arethetypeswrong/cli": "^0.18.3",
209
+ "@arethetypeswrong/cli": "^0.18.4",
207
210
  "@axe-core/playwright": "^4.11.3",
208
211
  "@builder.io/qwik": "^1.20.0",
209
212
  "@playwright/test": "1.60.0",
210
213
  "github-actionlint": "^1.7.12",
211
214
  "jsdom": "^29.1.1",
212
- "knip": "^6.16.1",
213
- "pdfjs-dist": "^6.0.227",
214
- "prettier": "^3.8.4",
215
+ "knip": "^6.23.0",
216
+ "pdfjs-dist": "^6.1.200",
217
+ "prettier": "^3.9.1",
215
218
  "publint": "^0.3.21",
216
219
  "react": "^19.2.7",
217
220
  "react-dom": "^19.2.7",
218
221
  "solid-js": "^1.9.13",
219
- "stylelint": "^17.13.0",
222
+ "stylelint": "^17.14.0",
220
223
  "stylelint-config-standard": "^40.0.0",
221
224
  "stylelint-use-logical": "^2.1.3",
222
225
  "typescript": "^6.0.3",
@@ -241,6 +244,7 @@
241
244
  },
242
245
  "exports": {
243
246
  ".": {
247
+ "types": "./index.d.ts",
244
248
  "style": "./dist/bronto.css",
245
249
  "default": "./dist/bronto.css"
246
250
  },
@@ -407,6 +411,94 @@
407
411
  "types": "./behaviors/index.d.ts",
408
412
  "default": "./behaviors/index.js"
409
413
  },
414
+ "./behaviors/carousel": {
415
+ "types": "./behaviors/carousel.d.ts",
416
+ "default": "./behaviors/carousel.js"
417
+ },
418
+ "./behaviors/combobox": {
419
+ "types": "./behaviors/combobox.d.ts",
420
+ "default": "./behaviors/combobox.js"
421
+ },
422
+ "./behaviors/command": {
423
+ "types": "./behaviors/command.d.ts",
424
+ "default": "./behaviors/command.js"
425
+ },
426
+ "./behaviors/connectors": {
427
+ "types": "./behaviors/connectors.d.ts",
428
+ "default": "./behaviors/connectors.js"
429
+ },
430
+ "./behaviors/crosshair": {
431
+ "types": "./behaviors/crosshair.d.ts",
432
+ "default": "./behaviors/crosshair.js"
433
+ },
434
+ "./behaviors/dialog": {
435
+ "types": "./behaviors/dialog.d.ts",
436
+ "default": "./behaviors/dialog.js"
437
+ },
438
+ "./behaviors/disclosure": {
439
+ "types": "./behaviors/disclosure.d.ts",
440
+ "default": "./behaviors/disclosure.js"
441
+ },
442
+ "./behaviors/dismissible": {
443
+ "types": "./behaviors/dismissible.d.ts",
444
+ "default": "./behaviors/dismissible.js"
445
+ },
446
+ "./behaviors/forms": {
447
+ "types": "./behaviors/forms.d.ts",
448
+ "default": "./behaviors/forms.js"
449
+ },
450
+ "./behaviors/glyph": {
451
+ "types": "./behaviors/glyph.d.ts",
452
+ "default": "./behaviors/glyph.js"
453
+ },
454
+ "./behaviors/inert": {
455
+ "types": "./behaviors/inert.d.ts",
456
+ "default": "./behaviors/inert.js"
457
+ },
458
+ "./behaviors/legend": {
459
+ "types": "./behaviors/legend.d.ts",
460
+ "default": "./behaviors/legend.js"
461
+ },
462
+ "./behaviors/menu": {
463
+ "types": "./behaviors/menu.d.ts",
464
+ "default": "./behaviors/menu.js"
465
+ },
466
+ "./behaviors/modal": {
467
+ "types": "./behaviors/modal.d.ts",
468
+ "default": "./behaviors/modal.js"
469
+ },
470
+ "./behaviors/popover": {
471
+ "types": "./behaviors/popover.d.ts",
472
+ "default": "./behaviors/popover.js"
473
+ },
474
+ "./behaviors/sources": {
475
+ "types": "./behaviors/sources.d.ts",
476
+ "default": "./behaviors/sources.js"
477
+ },
478
+ "./behaviors/splitter": {
479
+ "types": "./behaviors/splitter.d.ts",
480
+ "default": "./behaviors/splitter.js"
481
+ },
482
+ "./behaviors/spotlight": {
483
+ "types": "./behaviors/spotlight.d.ts",
484
+ "default": "./behaviors/spotlight.js"
485
+ },
486
+ "./behaviors/table": {
487
+ "types": "./behaviors/table.d.ts",
488
+ "default": "./behaviors/table.js"
489
+ },
490
+ "./behaviors/tabs": {
491
+ "types": "./behaviors/tabs.d.ts",
492
+ "default": "./behaviors/tabs.js"
493
+ },
494
+ "./behaviors/theme": {
495
+ "types": "./behaviors/theme.d.ts",
496
+ "default": "./behaviors/theme.js"
497
+ },
498
+ "./behaviors/toast": {
499
+ "types": "./behaviors/toast.d.ts",
500
+ "default": "./behaviors/toast.js"
501
+ },
410
502
  "./glyphs": {
411
503
  "types": "./glyphs/glyphs.d.ts",
412
504
  "default": "./glyphs/glyphs.js"
package/qwik/index.d.ts CHANGED
@@ -2,10 +2,11 @@
2
2
  * below — they inline a statically-imported behavior so the optimizer can
3
3
  * serialize the task. Passing a runtime function here is only safe when it
4
4
  * is itself optimizer-visible (a module import).
5
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
6
- * @param {BrontoBindingOptsResolver} [opts]
5
+ * @template {DelegateOpts} [T=DelegateOpts]
6
+ * @param {(opts?: T) => Cleanup | void} init
7
+ * @param {BrontoBindingOptsResolver<T>} [opts]
7
8
  * @returns {void} */
8
- export function useBrontoBehavior(init: (opts?: DelegateOpts) => Cleanup | void, opts?: BrontoBindingOptsResolver): void;
9
+ export function useBrontoBehavior<T extends DelegateOpts = import("../behaviors/internal.js").DelegateOpts>(init: (opts?: T) => Cleanup | void, opts?: BrontoBindingOptsResolver<T>): void;
9
10
  export function useThemeToggle(opts?: BrontoBindingOptsResolver<ThemeStorageOpts & DelegateOpts>): void;
10
11
  export function useDismissible(opts?: BrontoBindingOptsResolver): void;
11
12
  export function useDisabledGuard(opts?: BrontoBindingOptsResolver): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAkHA;;;;;;sBAMsB;AACtB,wCAHY,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,SACvC,yBAAyB,GACvB,IAAI,CAIjB;AAGM,sCADK,yBAAyB,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAmB,IAAI,CAGhC;AAEtD,sCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,wCADK,yBAAyB,GAAmB,IAAI,CAGG;AAExD,qCADK,yBAAyB,GAAmB,IAAI,CAGA;AAErD,+BADK,yBAAyB,GAAmB,IAAI,CAGN;AAE/C,yCADK,yBAAyB,GAAmB,IAAI,CAGI;AAEzD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,+BADK,yBAAyB,GAAmB,IAAI,CAGN;AAE/C,iCADK,yBAAyB,GAAmB,IAAI,CAGJ;AAEjD,gCADK,yBAAyB,GAAmB,IAAI,CAGL;AAEhD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,iCADK,yBAAyB,GAAmB,IAAI,CAGJ;AAEjD,qCADK,yBAAyB,GAAmB,IAAI,CAGA;AAErD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAInD,4BADO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACzB;;sBA1LtB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;gCAEzC,QAAQ,GACd,OAAO,GACP;IAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAChD;IAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAClD,CAAC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7C,IAAI,GACJ,SAAS;8BAIa,CAAC,SAAhB,YAAa,sDACd,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE;sCAI9B,CAAC,SAAhB,YAAa,sDACd,iBAAiB,CAAC,CAAC,CAAC,GAC1B,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,IAAI,GACJ,SAAS;iCA2BT,uBAAuB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAmHA;;;;;;;sBAOsB;AACtB,kCAJ8B,CAAC,SAAhB,YAAa,0DAChB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,SAC5B,yBAAyB,CAAC,CAAC,CAAC,GAC1B,IAAI,CAIjB;AAGM,sCADK,yBAAyB,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAmB,IAAI,CAGhC;AAEtD,sCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,wCADK,yBAAyB,GAAmB,IAAI,CAGG;AAExD,qCADK,yBAAyB,GAAmB,IAAI,CAGA;AAErD,+BADK,yBAAyB,GAAmB,IAAI,CAGN;AAE/C,yCADK,yBAAyB,GAAmB,IAAI,CAGI;AAEzD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,+BADK,yBAAyB,GAAmB,IAAI,CAGN;AAE/C,iCADK,yBAAyB,GAAmB,IAAI,CAGJ;AAEjD,gCADK,yBAAyB,GAAmB,IAAI,CAGL;AAEhD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAEnD,iCADK,yBAAyB,GAAmB,IAAI,CAGJ;AAEjD,qCADK,yBAAyB,GAAmB,IAAI,CAGA;AAErD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,oCADK,yBAAyB,GAAmB,IAAI,CAGD;AAEpD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,kCADK,yBAAyB,GAAmB,IAAI,CAGH;AAElD,mCADK,yBAAyB,GAAmB,IAAI,CAGF;AAInD,4BADO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACzB;;sBA5LtB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;gCAEzC,QAAQ,GACd,OAAO,GACP;IAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAChD;IAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAClD,CAAC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7C,IAAI,GACJ,SAAS;8BAIa,CAAC,SAAhB,YAAa,sDACd,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE;sCAI9B,CAAC,SAAhB,YAAa,sDACd,iBAAiB,CAAC,CAAC,CAAC,GAC1B,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,IAAI,GACJ,SAAS;iCA2BT,uBAAuB"}
package/qwik/index.js CHANGED
@@ -105,10 +105,11 @@ function resolveOpts(opts) {
105
105
 
106
106
  /** Run a delegated behavior on visible and register its cleanup on dispose.
107
107
  * `init` and `opts` are resolved inside the visible task, so a Qwik-signal
108
- * root is read after the element is assigned. Shared, non-QRL, so the
109
- * optimizer keeps the captured behavior import inside the task segment. */
108
+ * root is read after the element is assigned and tracked for later changes.
109
+ * Shared, non-QRL, so the optimizer keeps the captured behavior import inside
110
+ * the task segment. */
110
111
  function start(init, opts, ctx) {
111
- const cleanup = init(resolveOpts(opts));
112
+ const cleanup = init(ctx.track(() => resolveOpts(opts)));
112
113
  if (typeof cleanup === 'function') ctx.cleanup(cleanup);
113
114
  }
114
115
 
@@ -116,8 +117,9 @@ function start(init, opts, ctx) {
116
117
  * below — they inline a statically-imported behavior so the optimizer can
117
118
  * serialize the task. Passing a runtime function here is only safe when it
118
119
  * is itself optimizer-visible (a module import).
119
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
120
- * @param {BrontoBindingOptsResolver} [opts]
120
+ * @template {DelegateOpts} [T=DelegateOpts]
121
+ * @param {(opts?: T) => Cleanup | void} init
122
+ * @param {BrontoBindingOptsResolver<T>} [opts]
121
123
  * @returns {void} */
122
124
  export function useBrontoBehavior(init, opts) {
123
125
  // eslint-disable-next-line qwik/no-use-visible-task -- intentional delegated DOM glue + cleanup
package/react/index.d.ts CHANGED
@@ -1,10 +1,11 @@
1
1
  /** Run a delegated behavior for the component's lifetime (init on mount, its
2
2
  * returned cleanup on unmount). The behavior is run once; `opts` resolves
3
3
  * on mount so refs are usable for scoped roots.
4
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
5
- * @param {BrontoBindingOptsResolver} [opts]
4
+ * @template {DelegateOpts} [T=DelegateOpts]
5
+ * @param {(opts?: T) => Cleanup | void} init
6
+ * @param {BrontoBindingOptsResolver<T>} [opts]
6
7
  * @returns {void} */
7
- export function useBrontoBehavior(init: (opts?: DelegateOpts) => Cleanup | void, opts?: BrontoBindingOptsResolver): void;
8
+ export function useBrontoBehavior<T extends DelegateOpts = import("../behaviors/internal.js").DelegateOpts>(init: (opts?: T) => Cleanup | void, opts?: BrontoBindingOptsResolver<T>): void;
8
9
  export function useThemeToggle(opts?: BrontoBindingOptsResolver<ThemeStorageOpts & DelegateOpts>): void;
9
10
  export function useDismissible(opts?: BrontoBindingOptsResolver): void;
10
11
  export function useDisabledGuard(opts?: BrontoBindingOptsResolver): void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAgGA;;;;;sBAKsB;AACtB,wCAHY,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,SACvC,yBAAyB,GACvB,IAAI,CAGjB;AAGM,sCADK,yBAAyB,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAmB,IAAI,CACb;AAEzE,sCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,wCADK,yBAAyB,GAAmB,IAAI,CACwB;AAE7E,qCADK,yBAAyB,GAAmB,IAAI,CACkB;AAEvE,+BADK,yBAAyB,GAAmB,IAAI,CACM;AAE3D,yCADK,yBAAyB,GAAmB,IAAI,CAC0B;AAE/E,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,+BADK,yBAAyB,GAAmB,IAAI,CACM;AAE3D,iCADK,yBAAyB,GAAmB,IAAI,CACU;AAE/D,gCADK,yBAAyB,GAAmB,IAAI,CACQ;AAE7D,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,iCADK,yBAAyB,GAAmB,IAAI,CACU;AAE/D,qCADK,yBAAyB,GAAmB,IAAI,CACkB;AAEvE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAInE,4BADO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACzB;;sBAjItB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;gCAEzC,QAAQ,GACd,OAAO,GACP;IAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAClD,CAAC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7C,IAAI,GACJ,SAAS;8BAIa,CAAC,SAAhB,YAAa,sDACd,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE;sCAI9B,CAAC,SAAhB,YAAa,sDACd,iBAAiB,CAAC,CAAC,CAAC,GAC1B,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,IAAI,GACJ,SAAS;iCA2BT,uBAAuB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AAgGA;;;;;;sBAMsB;AACtB,kCAJ8B,CAAC,SAAhB,YAAa,0DAChB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,SAC5B,yBAAyB,CAAC,CAAC,CAAC,GAC1B,IAAI,CAGjB;AAGM,sCADK,yBAAyB,CAAC,gBAAgB,GAAG,YAAY,CAAC,GAAmB,IAAI,CACb;AAEzE,sCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,wCADK,yBAAyB,GAAmB,IAAI,CACwB;AAE7E,qCADK,yBAAyB,GAAmB,IAAI,CACkB;AAEvE,+BADK,yBAAyB,GAAmB,IAAI,CACM;AAE3D,yCADK,yBAAyB,GAAmB,IAAI,CAC0B;AAE/E,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,+BADK,yBAAyB,GAAmB,IAAI,CACM;AAE3D,iCADK,yBAAyB,GAAmB,IAAI,CACU;AAE/D,gCADK,yBAAyB,GAAmB,IAAI,CACQ;AAE7D,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAEnE,iCADK,yBAAyB,GAAmB,IAAI,CACU;AAE/D,qCADK,yBAAyB,GAAmB,IAAI,CACkB;AAEvE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,oCADK,yBAAyB,GAAmB,IAAI,CACgB;AAErE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,kCADK,yBAAyB,GAAmB,IAAI,CACY;AAEjE,mCADK,yBAAyB,GAAmB,IAAI,CACc;AAInE,4BADO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACzB;;sBAlItB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;gCAEzC,QAAQ,GACd,OAAO,GACP;IAAE,OAAO,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,GAClD,CAAC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,GAC7C,IAAI,GACJ,SAAS;8BAIa,CAAC,SAAhB,YAAa,sDACd,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE;sCAI9B,CAAC,SAAhB,YAAa,sDACd,iBAAiB,CAAC,CAAC,CAAC,GAC1B,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,GAC/C,IAAI,GACJ,SAAS;iCA2BT,uBAAuB"}
package/react/index.js CHANGED
@@ -97,8 +97,9 @@ function resolveOpts(opts) {
97
97
  /** Run a delegated behavior for the component's lifetime (init on mount, its
98
98
  * returned cleanup on unmount). The behavior is run once; `opts` resolves
99
99
  * on mount so refs are usable for scoped roots.
100
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
101
- * @param {BrontoBindingOptsResolver} [opts]
100
+ * @template {DelegateOpts} [T=DelegateOpts]
101
+ * @param {(opts?: T) => Cleanup | void} init
102
+ * @param {BrontoBindingOptsResolver<T>} [opts]
102
103
  * @returns {void} */
103
104
  export function useBrontoBehavior(init, opts) {
104
105
  useEffect(() => init(resolveOpts(opts)), []); // eslint-disable-line react-hooks/exhaustive-deps -- intentional delegated once on mount
package/solid/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
- /** Run a delegated behavior for the component's lifetime (init on mount, its
2
- * returned cleanup on dispose). Options resolve on mount, after refs exist.
3
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
4
- * @param {BrontoBindingOptsResolver} [opts]
1
+ /** Run a delegated behavior for the component's lifetime (init after mount, its
2
+ * returned cleanup before re-init/dispose). Options resolve after mount and
3
+ * re-resolve when tracked Solid signals change.
4
+ * @template {DelegateOpts} [T=DelegateOpts]
5
+ * @param {(opts?: T) => Cleanup | void} init
6
+ * @param {BrontoBindingOptsResolver<T>} [opts]
5
7
  * @returns {void}
6
8
  */
7
- export function useBrontoBehavior(init: (opts?: DelegateOpts) => Cleanup | void, opts?: BrontoBindingOptsResolver): void;
9
+ export function useBrontoBehavior<T extends DelegateOpts = import("../behaviors/internal.js").DelegateOpts>(init: (opts?: T) => Cleanup | void, opts?: BrontoBindingOptsResolver<T>): void;
8
10
  /** @type {(opts?: BrontoBindingOptsResolver<ThemeStorageOpts & DelegateOpts>) => void} */
9
11
  export const useThemeToggle: (opts?: BrontoBindingOptsResolver<ThemeStorageOpts & DelegateOpts>) => void;
10
12
  /** @type {(opts?: BrontoBindingOptsResolver) => void} */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"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"}
package/solid/index.js CHANGED
@@ -47,7 +47,7 @@
47
47
  * | null
48
48
  * | undefined} BrontoBindingOptsResolver
49
49
  */
50
- import { onMount, onCleanup } from 'solid-js';
50
+ import { createEffect, onCleanup, onMount } from 'solid-js';
51
51
  import {
52
52
  applyStoredTheme,
53
53
  initThemeToggle,
@@ -96,16 +96,20 @@ function resolveOpts(opts) {
96
96
  return { ...value, root: root || null };
97
97
  }
98
98
 
99
- /** Run a delegated behavior for the component's lifetime (init on mount, its
100
- * returned cleanup on dispose). Options resolve on mount, after refs exist.
101
- * @param {(opts?: DelegateOpts) => Cleanup | void} init
102
- * @param {BrontoBindingOptsResolver} [opts]
99
+ /** Run a delegated behavior for the component's lifetime (init after mount, its
100
+ * returned cleanup before re-init/dispose). Options resolve after mount and
101
+ * re-resolve when tracked Solid signals change.
102
+ * @template {DelegateOpts} [T=DelegateOpts]
103
+ * @param {(opts?: T) => Cleanup | void} init
104
+ * @param {BrontoBindingOptsResolver<T>} [opts]
103
105
  * @returns {void}
104
106
  */
105
107
  export function useBrontoBehavior(init, opts) {
106
108
  onMount(() => {
107
- const cleanup = init(resolveOpts(opts));
108
- if (typeof cleanup === 'function') onCleanup(cleanup);
109
+ createEffect(() => {
110
+ const cleanup = init(resolveOpts(opts));
111
+ if (typeof cleanup === 'function') onCleanup(cleanup);
112
+ });
109
113
  });
110
114
  }
111
115
 
package/tokens/vega.d.ts CHANGED
@@ -23,7 +23,7 @@ export declare const vega: { light: VegaConfig; dark: VegaConfig };
23
23
  * back to light. Spread into a spec's `config`, or pass to vega-embed. */
24
24
  export declare function brontoVegaConfig(theme?: 'light' | 'dark'): VegaConfig;
25
25
 
26
- /** The live accent hex (series 1 of `range.category`) for a theme — to spend the
26
+ /** The resolved accent hex (series 1 of `range.category`) for a theme — to spend the
27
27
  * accent on one emphasised mark without hard-coding the palette index. */
28
28
  export declare function brontoVegaAccent(theme?: 'light' | 'dark'): string;
29
29
 
package/tokens/vega.js CHANGED
@@ -137,10 +137,11 @@ export function brontoVegaConfig(theme = 'light') {
137
137
  return vega[theme === 'dark' ? 'dark' : 'light'];
138
138
  }
139
139
 
140
- /** The live accent hex for a theme — series 1 of `range.category`, the one
140
+ /** The resolved accent hex for a theme — series 1 of `range.category`, the one
141
141
  * chromatic mark. Use it to spend the accent on a single emphasised mark in
142
142
  * a multi-series chart (a Vega-Lite conditional to this colour) without
143
- * reverse-engineering the palette array index. Re-skins with `--accent`. */
143
+ * reverse-engineering the palette array index. Regenerate after changing
144
+ * `--accent`; already-rendered charts do not live-reskin. */
144
145
  export function brontoVegaAccent(theme = 'light') {
145
146
  return vega[theme === 'dark' ? 'dark' : 'light'].range.category[0];
146
147
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8FA;;;;;GAKG;AACH,4CAHW,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,GACrC,eAAe,CAgB3B;AAED,mCAAmC;AACnC,2BADW,oBAAoB,CACoC;AACnE,8BAA8B;AAC9B,2BADW,eAAe,CACyC;AACnE,8BAA8B;AAC9B,6BADW,eAAe,CAC6C;AACvE,8BAA8B;AAC9B,0BADW,eAAe,CACuC;AACjE,8BAA8B;AAC9B,oBADW,eAAe,CAC2B;AACrD,8BAA8B;AAC9B,8BADW,eAAe,CAC+C;AACzE,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,oBADW,eAAe,CAC2B;AACrD,8BAA8B;AAC9B,sBADW,eAAe,CAC+B;AACzD,8BAA8B;AAC9B,qBADW,eAAe,CAC6B;AACvD,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,sBADW,eAAe,CAC+B;AACzD,8BAA8B;AAC9B,0BADW,eAAe,CACuC;AACjE,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA4BH,8BAA8B;AAC9B,wBADW,eAAe,CASvB;;AAMI,4BADM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACxB;sBAlNtB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;kCAEzC,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS;kCAErC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE;uCAE3D,IAAI,CAAC,gBAAgB,GAAG,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE;qCAE9E;IAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;0CAErG;IAAE,KAAK,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;8BAE/G;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE;mCAE5K;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE;2BAEtL;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,oBAAoB,KAAK,OAAO,CAAA;CAAE;8BAE3F;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;CAAE;iCA0B9C,uBAAuB;sBAAvB,uBAAuB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA8HA;;;;;GAKG;AACH,4CAHW,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,GACrC,eAAe,CAkB3B;AAED,mCAAmC;AACnC,2BADW,oBAAoB,CACoC;AACnE,8BAA8B;AAC9B,2BADW,eAAe,CACyC;AACnE,8BAA8B;AAC9B,6BADW,eAAe,CAC6C;AACvE,8BAA8B;AAC9B,0BADW,eAAe,CACuC;AACjE,8BAA8B;AAC9B,oBADW,eAAe,CAC2B;AACrD,8BAA8B;AAC9B,8BADW,eAAe,CAC+C;AACzE,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,oBADW,eAAe,CAC2B;AACrD,8BAA8B;AAC9B,sBADW,eAAe,CAC+B;AACzD,8BAA8B;AAC9B,qBADW,eAAe,CAC6B;AACvD,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAC7D,8BAA8B;AAC9B,sBADW,eAAe,CAC+B;AACzD,8BAA8B;AAC9B,0BADW,eAAe,CACuC;AACjE,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,yBADW,eAAe,CACqC;AAC/D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,uBADW,eAAe,CACiC;AAC3D,8BAA8B;AAC9B,wBADW,eAAe,CACmC;AAE7D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AA4BH,8BAA8B;AAC9B,wBADW,eAAe,CASvB;;AAMI,4BADM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CACxB;sBApPtB,OAAO,uBAAuB,EAAE,OAAO;2BACvC,OAAO,uBAAuB,EAAE,YAAY;+BAC5C,OAAO,uBAAuB,EAAE,gBAAgB;wBAChD,OAAO,uBAAuB,EAAE,SAAS;kCAEzC,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS;kCAErC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE;uCAE3D,IAAI,CAAC,gBAAgB,GAAG,YAAY,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE;qCAE9E;IAAE,KAAK,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;0CAErG;IAAE,KAAK,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;8BAE/G;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE;mCAE5K;IAAE,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,2BAA2B,KAAK,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE;2BAEtL;IAAE,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,oBAAoB,KAAK,OAAO,CAAA;CAAE;8BAE3F;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;CAAE;iCA0B9C,uBAAuB;sBAAvB,uBAAuB"}
package/vue/index.js CHANGED
@@ -62,6 +62,7 @@ import {
62
62
  } from '../behaviors/index.js';
63
63
 
64
64
  const cleanups = new WeakMap();
65
+ const optionSignatures = new WeakMap();
65
66
 
66
67
  function cleanupMap(el) {
67
68
  let map = cleanups.get(el);
@@ -72,12 +73,37 @@ function cleanupMap(el) {
72
73
  return map;
73
74
  }
74
75
 
76
+ function optionSignatureMap(el) {
77
+ let map = optionSignatures.get(el);
78
+ if (!map) {
79
+ map = new Map();
80
+ optionSignatures.set(el, map);
81
+ }
82
+ return map;
83
+ }
84
+
85
+ function optionSignature(opts) {
86
+ return Object.entries(opts).sort(([a], [b]) => a.localeCompare(b));
87
+ }
88
+
89
+ function sameOptionSignature(a, b) {
90
+ if (a === b) return true;
91
+ if (!a || !b || a.length !== b.length) return false;
92
+ return a.every(([key, value], index) => {
93
+ const [otherKey, otherValue] = b[index];
94
+ return key === otherKey && Object.is(value, otherValue);
95
+ });
96
+ }
97
+
75
98
  function stop(el, key) {
76
99
  const map = cleanups.get(el);
77
100
  const cleanup = map?.get(key);
78
101
  if (typeof cleanup === 'function') cleanup();
79
102
  map?.delete(key);
80
103
  if (map?.size === 0) cleanups.delete(el);
104
+ const signatures = optionSignatures.get(el);
105
+ signatures?.delete(key);
106
+ if (signatures?.size === 0) optionSignatures.delete(el);
81
107
  }
82
108
 
83
109
  function resolveOpts(el, opts) {
@@ -87,9 +113,15 @@ function resolveOpts(el, opts) {
87
113
  }
88
114
 
89
115
  function start(el, key, init, opts) {
116
+ const resolved = resolveOpts(el, opts);
117
+ startResolved(el, key, init, resolved, optionSignature(resolved));
118
+ }
119
+
120
+ function startResolved(el, key, init, resolved, signature) {
90
121
  stop(el, key);
91
- const cleanup = init(resolveOpts(el, opts));
122
+ const cleanup = init(resolved);
92
123
  if (typeof cleanup === 'function') cleanupMap(el).set(key, cleanup);
124
+ optionSignatureMap(el).set(key, signature);
93
125
  }
94
126
 
95
127
  /**
@@ -105,8 +137,10 @@ export function createBrontoDirective(init) {
105
137
  start(el, key, init, binding?.value);
106
138
  },
107
139
  updated(el, binding) {
108
- if (binding?.value === binding?.oldValue) return;
109
- start(el, key, init, binding?.value);
140
+ const resolved = resolveOpts(el, binding?.value);
141
+ const signature = optionSignature(resolved);
142
+ if (sameOptionSignature(optionSignatures.get(el)?.get(key), signature)) return;
143
+ startResolved(el, key, init, resolved, signature);
110
144
  },
111
145
  beforeUnmount(el) {
112
146
  stop(el, key);