@ecopages/radiant-ui 0.1.0-beta.7 → 0.1.0-beta.8

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 (264) hide show
  1. package/README.md +1 -1
  2. package/dist/components/ui/alert/alert.css +88 -50
  3. package/dist/components/ui/alert/alert.d.ts +43 -5
  4. package/dist/components/ui/alert/alert.script.d.ts +51 -4
  5. package/dist/components/ui/alert/index.d.ts +2 -2
  6. package/dist/components/ui/alert/index.js +1 -1
  7. package/dist/components/ui/alert/index.js.map +4 -4
  8. package/dist/components/ui/autocomplete/autocomplete.css +4 -4
  9. package/dist/components/ui/autocomplete/autocomplete.d.ts +15 -5
  10. package/dist/components/ui/autocomplete/autocomplete.script.d.ts +9 -0
  11. package/dist/components/ui/autocomplete/index.js +1 -1
  12. package/dist/components/ui/autocomplete/index.js.map +4 -4
  13. package/dist/components/ui/avatar/avatar.d.ts +15 -1
  14. package/dist/components/ui/avatar/index.js +1 -1
  15. package/dist/components/ui/avatar/index.js.map +4 -4
  16. package/dist/components/ui/breadcrumb/breadcrumb.d.ts +32 -6
  17. package/dist/components/ui/breadcrumb/index.js +1 -1
  18. package/dist/components/ui/breadcrumb/index.js.map +4 -4
  19. package/dist/{styles/components → components/ui/button}/button.css +45 -31
  20. package/dist/components/ui/button/button.d.ts +21 -4
  21. package/dist/components/ui/button-group/button-group.d.ts +7 -1
  22. package/dist/components/ui/button-group/index.js +1 -1
  23. package/dist/components/ui/button-group/index.js.map +4 -4
  24. package/dist/components/ui/calendar/calendar.css +7 -7
  25. package/dist/components/ui/calendar/calendar.d.ts +3 -2
  26. package/dist/components/ui/calendar/calendar.script.d.ts +39 -1
  27. package/dist/components/ui/calendar/index.js +1 -1
  28. package/dist/components/ui/calendar/index.js.map +4 -4
  29. package/dist/components/ui/carousel/carousel.d.ts +32 -6
  30. package/dist/components/ui/carousel/carousel.script.d.ts +44 -0
  31. package/dist/components/ui/carousel/index.js +1 -1
  32. package/dist/components/ui/carousel/index.js.map +4 -4
  33. package/dist/components/ui/checkbox/checkbox.css +1 -1
  34. package/dist/components/ui/checkbox/checkbox.d.ts +3 -2
  35. package/dist/components/ui/checkbox/checkbox.script.d.ts +4 -0
  36. package/dist/components/ui/checkbox/index.js +1 -1
  37. package/dist/components/ui/checkbox/index.js.map +4 -4
  38. package/dist/components/ui/chip/chip.d.ts +8 -0
  39. package/dist/components/ui/chip/index.js +1 -1
  40. package/dist/components/ui/chip/index.js.map +4 -4
  41. package/dist/components/ui/chip-list/chip-list.d.ts +10 -2
  42. package/dist/components/ui/chip-list/index.js +1 -1
  43. package/dist/components/ui/chip-list/index.js.map +4 -4
  44. package/dist/components/ui/combobox/combobox.css +39 -1
  45. package/dist/components/ui/combobox/combobox.d.ts +15 -5
  46. package/dist/components/ui/combobox/combobox.script.d.ts +13 -1
  47. package/dist/components/ui/combobox/index.js +1 -1
  48. package/dist/components/ui/combobox/index.js.map +4 -4
  49. package/dist/components/ui/cycle-toggle/cycle-toggle.css +15 -0
  50. package/dist/components/ui/cycle-toggle/cycle-toggle.d.ts +29 -0
  51. package/dist/components/ui/cycle-toggle/cycle-toggle.script.d.ts +61 -0
  52. package/dist/components/ui/cycle-toggle/index.d.ts +5 -0
  53. package/dist/components/ui/cycle-toggle/index.js +2 -0
  54. package/dist/components/ui/cycle-toggle/index.js.map +7 -0
  55. package/dist/components/ui/cycle-toggle/theme-preference-icons.d.ts +12 -0
  56. package/dist/components/ui/date-field/date-field.css +37 -0
  57. package/dist/components/ui/date-field/date-field.d.ts +22 -3
  58. package/dist/components/ui/date-field/date-field.script.d.ts +29 -5
  59. package/dist/components/ui/date-field/index.d.ts +1 -1
  60. package/dist/components/ui/date-field/index.js +1 -1
  61. package/dist/components/ui/date-field/index.js.map +4 -4
  62. package/dist/components/ui/date-range-picker/date-range-picker.css +37 -0
  63. package/dist/components/ui/date-range-picker/date-range-picker.d.ts +37 -4
  64. package/dist/components/ui/date-range-picker/date-range-picker.script.d.ts +31 -5
  65. package/dist/components/ui/date-range-picker/index.d.ts +1 -1
  66. package/dist/components/ui/date-range-picker/index.js +1 -1
  67. package/dist/components/ui/date-range-picker/index.js.map +4 -4
  68. package/dist/components/ui/dialog/dialog.css +1 -1
  69. package/dist/components/ui/dialog/dialog.d.ts +30 -5
  70. package/dist/components/ui/dialog/dialog.script.d.ts +3 -0
  71. package/dist/components/ui/dialog/index.js +1 -1
  72. package/dist/components/ui/dialog/index.js.map +4 -4
  73. package/dist/components/ui/disclosure/disclosure-group.css +1 -1
  74. package/dist/components/ui/disclosure/disclosure-group.script.d.ts +6 -0
  75. package/dist/components/ui/disclosure/disclosure.d.ts +26 -7
  76. package/dist/components/ui/disclosure/disclosure.script.d.ts +5 -0
  77. package/dist/components/ui/disclosure/index.js +1 -1
  78. package/dist/components/ui/disclosure/index.js.map +4 -4
  79. package/dist/components/ui/feed/feed.d.ts +37 -7
  80. package/dist/components/ui/feed/index.js +1 -1
  81. package/dist/components/ui/feed/index.js.map +4 -4
  82. package/dist/components/ui/field/field-description.d.ts +5 -1
  83. package/dist/components/ui/field/field-error.d.ts +5 -0
  84. package/dist/components/ui/field/field.d.ts +8 -1
  85. package/dist/components/ui/field/field.script.d.ts +35 -0
  86. package/dist/components/ui/field/index.js +1 -1
  87. package/dist/components/ui/field/index.js.map +4 -4
  88. package/dist/components/ui/form/control-protocol.d.ts +6 -0
  89. package/dist/components/ui/form/form.d.ts +2 -1
  90. package/dist/components/ui/form/form.script.d.ts +16 -1
  91. package/dist/components/ui/form/index.d.ts +1 -1
  92. package/dist/components/ui/form/index.js +1 -1
  93. package/dist/components/ui/form/index.js.map +4 -4
  94. package/dist/components/ui/grid/grid.d.ts +12 -2
  95. package/dist/components/ui/grid/grid.script.d.ts +14 -0
  96. package/dist/components/ui/grid/index.js +1 -1
  97. package/dist/components/ui/grid/index.js.map +4 -4
  98. package/dist/components/ui/heading/heading.d.ts +26 -4
  99. package/dist/components/ui/heading/index.js +1 -1
  100. package/dist/components/ui/heading/index.js.map +4 -4
  101. package/dist/components/ui/headline/headline.d.ts +9 -1
  102. package/dist/components/ui/headline/index.js +1 -1
  103. package/dist/components/ui/headline/index.js.map +4 -4
  104. package/dist/components/ui/input/index.d.ts +1 -1
  105. package/dist/components/ui/input/index.js +1 -1
  106. package/dist/components/ui/input/index.js.map +4 -4
  107. package/dist/components/ui/input/input.css +2 -7
  108. package/dist/components/ui/input/input.d.ts +7 -2
  109. package/dist/components/ui/label/index.js +1 -1
  110. package/dist/components/ui/label/index.js.map +4 -4
  111. package/dist/components/ui/label/label.d.ts +8 -1
  112. package/dist/components/ui/listbox/index.js +1 -1
  113. package/dist/components/ui/listbox/index.js.map +4 -4
  114. package/dist/components/ui/listbox/listbox.css +2 -5
  115. package/dist/components/ui/listbox/listbox.d.ts +7 -3
  116. package/dist/components/ui/listbox/listbox.script.d.ts +14 -1
  117. package/dist/components/ui/menu-button/index.d.ts +1 -1
  118. package/dist/components/ui/menu-button/index.js +1 -1
  119. package/dist/components/ui/menu-button/index.js.map +4 -4
  120. package/dist/components/ui/menu-button/menu-button.css +2 -2
  121. package/dist/components/ui/menu-button/menu-button.d.ts +27 -5
  122. package/dist/components/ui/menu-button/menu-button.script.d.ts +8 -3
  123. package/dist/components/ui/menubar/index.js +1 -1
  124. package/dist/components/ui/menubar/index.js.map +4 -4
  125. package/dist/components/ui/menubar/menubar.css +4 -4
  126. package/dist/components/ui/menubar/menubar.d.ts +14 -2
  127. package/dist/components/ui/menubar/menubar.script.d.ts +10 -1
  128. package/dist/components/ui/meter/index.js +1 -1
  129. package/dist/components/ui/meter/index.js.map +4 -4
  130. package/dist/components/ui/meter/meter.css +1 -1
  131. package/dist/components/ui/meter/meter.d.ts +7 -2
  132. package/dist/components/ui/meter/meter.script.d.ts +21 -0
  133. package/dist/components/ui/navigation-menu/index.js +1 -1
  134. package/dist/components/ui/navigation-menu/index.js.map +4 -4
  135. package/dist/components/ui/navigation-menu/navigation-menu.css +2 -2
  136. package/dist/components/ui/navigation-menu/navigation-menu.d.ts +3 -2
  137. package/dist/components/ui/navigation-menu/navigation-menu.script.d.ts +4 -0
  138. package/dist/components/ui/number-field/index.d.ts +1 -1
  139. package/dist/components/ui/number-field/index.js +1 -1
  140. package/dist/components/ui/number-field/index.js.map +4 -4
  141. package/dist/components/ui/number-field/number-field.css +18 -3
  142. package/dist/components/ui/number-field/number-field.d.ts +36 -8
  143. package/dist/components/ui/number-field/number-field.script.d.ts +28 -1
  144. package/dist/components/ui/popover/index.js +1 -1
  145. package/dist/components/ui/popover/index.js.map +4 -4
  146. package/dist/components/ui/popover/popover.d.ts +5 -4
  147. package/dist/components/ui/popover/popover.script.d.ts +4 -0
  148. package/dist/components/ui/radio-group/index.d.ts +1 -1
  149. package/dist/components/ui/radio-group/index.js +1 -1
  150. package/dist/components/ui/radio-group/index.js.map +4 -4
  151. package/dist/components/ui/radio-group/radio-group.d.ts +29 -4
  152. package/dist/components/ui/radio-group/radio-group.script.d.ts +14 -9
  153. package/dist/components/ui/select/index.js +1 -1
  154. package/dist/components/ui/select/index.js.map +4 -4
  155. package/dist/components/ui/select/select.css +48 -6
  156. package/dist/components/ui/select/select.d.ts +29 -8
  157. package/dist/components/ui/select/select.script.d.ts +7 -0
  158. package/dist/components/ui/sidebar/index.js +1 -1
  159. package/dist/components/ui/sidebar/index.js.map +4 -4
  160. package/dist/components/ui/sidebar/sidebar-trigger.script.d.ts +4 -0
  161. package/dist/components/ui/sidebar/sidebar.css +41 -24
  162. package/dist/components/ui/sidebar/sidebar.d.ts +68 -14
  163. package/dist/components/ui/sidebar/sidebar.docs.css +5 -2
  164. package/dist/components/ui/sidebar/sidebar.script.d.ts +9 -0
  165. package/dist/components/ui/slider/index.js +1 -1
  166. package/dist/components/ui/slider/index.js.map +4 -4
  167. package/dist/components/ui/slider/slider.d.ts +2 -1
  168. package/dist/components/ui/slider/slider.script.d.ts +29 -1
  169. package/dist/components/ui/switch/index.js +1 -1
  170. package/dist/components/ui/switch/index.js.map +4 -4
  171. package/dist/components/ui/switch/switch.css +3 -3
  172. package/dist/components/ui/switch/switch.d.ts +11 -2
  173. package/dist/components/ui/switch/switch.script.d.ts +5 -0
  174. package/dist/components/ui/tabs/index.js +1 -1
  175. package/dist/components/ui/tabs/index.js.map +4 -4
  176. package/dist/components/ui/tabs/tabs.css +9 -10
  177. package/dist/components/ui/tabs/tabs.d.ts +30 -9
  178. package/dist/components/ui/tag-group/index.js +1 -1
  179. package/dist/components/ui/tag-group/index.js.map +4 -4
  180. package/dist/components/ui/tag-group/tag-group.css +2 -11
  181. package/dist/components/ui/tag-group/tag-group.d.ts +18 -5
  182. package/dist/components/ui/tag-group/tag-group.script.d.ts +9 -2
  183. package/dist/components/ui/textarea/index.d.ts +1 -1
  184. package/dist/components/ui/textarea/index.js +1 -1
  185. package/dist/components/ui/textarea/index.js.map +4 -4
  186. package/dist/components/ui/textarea/textarea.d.ts +7 -2
  187. package/dist/components/ui/toast/index.d.ts +1 -1
  188. package/dist/components/ui/toast/index.js +1 -1
  189. package/dist/components/ui/toast/index.js.map +4 -4
  190. package/dist/components/ui/toast/stack-layout.d.ts +18 -0
  191. package/dist/components/ui/toast/toast-context.d.ts +10 -0
  192. package/dist/components/ui/toast/toast.css +30 -9
  193. package/dist/components/ui/toast/toast.d.ts +12 -2
  194. package/dist/components/ui/toast/toast.script.d.ts +60 -4
  195. package/dist/components/ui/toast/toaster.script.d.ts +71 -2
  196. package/dist/components/ui/toc/index.js +1 -1
  197. package/dist/components/ui/toc/index.js.map +4 -4
  198. package/dist/components/ui/toc/toc.css +3 -0
  199. package/dist/components/ui/toc/toc.d.ts +2 -1
  200. package/dist/components/ui/toc/toc.script.d.ts +15 -0
  201. package/dist/components/ui/toolbar/index.js +1 -1
  202. package/dist/components/ui/toolbar/index.js.map +4 -4
  203. package/dist/components/ui/toolbar/toolbar.d.ts +3 -2
  204. package/dist/components/ui/toolbar/toolbar.script.d.ts +8 -0
  205. package/dist/components/ui/tooltip/index.js +1 -1
  206. package/dist/components/ui/tooltip/index.js.map +4 -4
  207. package/dist/components/ui/tooltip/tooltip.d.ts +3 -2
  208. package/dist/components/ui/tooltip/tooltip.script.d.ts +3 -0
  209. package/dist/components/ui/tree/index.js +1 -1
  210. package/dist/components/ui/tree/index.js.map +4 -4
  211. package/dist/components/ui/tree/tree.d.ts +12 -2
  212. package/dist/components/ui/tree/tree.script.d.ts +18 -1
  213. package/dist/components/ui/treegrid/index.js +1 -1
  214. package/dist/components/ui/treegrid/index.js.map +4 -4
  215. package/dist/components/ui/treegrid/treegrid.d.ts +15 -2
  216. package/dist/components/ui/treegrid/treegrid.script.d.ts +22 -1
  217. package/dist/components/ui/window-splitter/index.js +1 -1
  218. package/dist/components/ui/window-splitter/index.js.map +4 -4
  219. package/dist/components/ui/window-splitter/window-splitter.css +1 -1
  220. package/dist/components/ui/window-splitter/window-splitter.d.ts +3 -2
  221. package/dist/components/ui/window-splitter/window-splitter.script.d.ts +22 -0
  222. package/dist/index.d.ts +1 -0
  223. package/dist/index.js +1 -1
  224. package/dist/index.js.map +4 -4
  225. package/dist/lib/cycle-value.d.ts +8 -0
  226. package/dist/lib/intl-number/range.d.ts +8 -0
  227. package/dist/styles/radiant-ui-core.css +110 -341
  228. package/dist/styles/radiant-ui.css +413 -377
  229. package/dist/styles/styles.css +839 -2731
  230. package/dist/styles/tailwind.css +626 -530
  231. package/dist/styles/tokens/colors/aurora.css +2 -2
  232. package/dist/styles/tokens/colors/basalt.css +2 -1
  233. package/dist/styles/tokens/colors/glacier.css +2 -1
  234. package/dist/styles/tokens/presets/colors/aurora.css +42 -14
  235. package/dist/styles/tokens/presets/colors/basalt.css +28 -0
  236. package/dist/styles/tokens/presets/colors/ember.css +28 -0
  237. package/dist/styles/tokens/presets/colors/glacier.css +28 -0
  238. package/dist/styles/tokens/semantic.css +22 -2
  239. package/dist/styles/tokens/spacing/compact.css +12 -12
  240. package/package.json +21 -8
  241. package/dist/components/ui/dialog/dialog-registry.test.d.ts +0 -1
  242. package/dist/components/ui/field/field-ssr-hydration.test.d.ts +0 -1
  243. package/dist/components/ui/form/form-field.test.d.ts +0 -4
  244. package/dist/components/ui/form/form-store.test.d.ts +0 -1
  245. package/dist/components/ui/shared/collection-navigation.test.d.ts +0 -1
  246. package/dist/components/ui/shared/floating-position.test.d.ts +0 -1
  247. package/dist/components/ui/shared/listbox-popover-behavior.test.d.ts +0 -1
  248. package/dist/components/ui/shared/popover-controller.test.d.ts +0 -1
  249. package/dist/components/ui/shared/portal.test.d.ts +0 -1
  250. package/dist/components/ui/sidebar/sidebar.ssr.test.d.ts +0 -2
  251. package/dist/components/ui/sidebar/sidebar.test.d.ts +0 -1
  252. package/dist/components/ui/toast/toast.test.d.ts +0 -2
  253. package/dist/components/ui/toc/toc-helpers.test.d.ts +0 -1
  254. package/dist/components/ui/toc/toc.ssr.test.d.ts +0 -1
  255. package/dist/components/ui/toc/toc.test.d.ts +0 -1
  256. package/dist/lib/intl-date/parts.test.d.ts +0 -1
  257. package/dist/lib/intl-date/segments.test.d.ts +0 -1
  258. package/dist/lib/intl-date/selection.test.d.ts +0 -1
  259. package/dist/lib/mask/date-mask.test.d.ts +0 -1
  260. package/dist/lib/mask/input-mask.test.d.ts +0 -1
  261. package/dist/lib/radiant-view.d.ts +0 -43
  262. package/dist/lib/text-filter.test.d.ts +0 -1
  263. package/dist/styles/tokens/presets/radius.css +0 -45
  264. package/dist/styles/tokens/presets/spacing.css +0 -57
@@ -1,5 +1,7 @@
1
1
  import { RadiantElement } from '@ecopages/radiant';
2
2
  import { type ToastId, type ToastPosition, type ToastVariant } from './toast-context';
3
+ /** Clears shared dismiss timers (test / Storybook resets). */
4
+ export declare function resetToastDeadlines(): void;
3
5
  export type RuiToastProps = {
4
6
  /** JSX list reconciliation key (not reflected to the DOM). */
5
7
  key?: string | number;
@@ -28,7 +30,48 @@ type RuiToastBindings = {
28
30
  * Prefer the imperative {@link toast} API with `<rui-toaster>`; this element is
29
31
  * rendered by the toaster and is not typically authored by hand.
30
32
  *
33
+ * The composed surface is `role="status"` (live region) with a per-variant
34
+ * border accent. `loading` toasts never auto-dismiss.
35
+ *
31
36
  * @element rui-toast
37
+ *
38
+ * @attr {string} toast-id - Toast id; used for deadline bookkeeping. Default: `''`.
39
+ * @attr {string} title - Heading text. Default: `''`.
40
+ * @attr {string} description - Supporting detail under the title. Default: `''`.
41
+ * @attr {('default'|'info'|'success'|'warning'|'error'|'loading')} variant -
42
+ * Status tone; drives the icon and border accent. Default: `default`.
43
+ * @attr {number} duration - Lifetime in ms before auto-dismiss. Default: `4000`.
44
+ * @attr {boolean} dismissible - Allow close button / swipe-to-dismiss. Default: `true`.
45
+ * @attr {boolean} close-button - Render the corner close control. Default: `false`.
46
+ * @attr {string} action-label - Text for the optional action button. Default: `''`.
47
+ * @attr {string} position - Placement; mirrors the toaster's position. Default: `bottom-end`.
48
+ * @attr {boolean} marked-delete - Marks the toast for animated exit. Default: `false`.
49
+ *
50
+ * @fires rui-toast-mounted - Bubbles after the toast mounts and paints (enter
51
+ * animation / timer start); the toaster uses it to resync stack layout.
52
+ *
53
+ * @remarks
54
+ * Styling lives on the composed surface — BEM classes authored here, not on a
55
+ * JSX view. Variants map to semantic status roles (`info`, `success`, `warning`,
56
+ * `error`) in `toast.css`.
57
+ *
58
+ * **Why a custom element?** The toast owns dismiss lifetime bookkeeping (pause
59
+ * on hover / hidden tab, swipe-to-dismiss), which needs DOM state — not a
60
+ * presentational view.
61
+ *
62
+ * @cssclass rui-toast - Toast surface (`role="status"`).
63
+ * @cssclass rui-toast--info - Info tone (blue accent).
64
+ * @cssclass rui-toast--success - Success tone (green accent).
65
+ * @cssclass rui-toast--warning - Warning tone (amber accent).
66
+ * @cssclass rui-toast--error - Error tone (red accent).
67
+ * @cssclass rui-toast--loading - Loading tone (neutral accent).
68
+ * @cssclass rui-toast__icon - Status icon wrapper.
69
+ * @cssclass rui-toast__loader - Spinner for `loading` toasts.
70
+ * @cssclass rui-toast__content - Title + description column.
71
+ * @cssclass rui-toast__title - Heading.
72
+ * @cssclass rui-toast__description - Supporting detail.
73
+ * @cssclass rui-toast__action - Optional action button.
74
+ * @cssclass rui-toast__close - Corner close control.
32
75
  */
33
76
  export declare class RuiToast extends RadiantElement<RuiToastBindings> {
34
77
  toastId: string;
@@ -56,7 +99,11 @@ export declare class RuiToast extends RadiantElement<RuiToastBindings> {
56
99
  private exitTimer;
57
100
  /**
58
101
  * Wire pointer listeners, then announce mount after paint so enter CSS can run.
59
- * On reconnect, re-announce without restarting the enter sequence.
102
+ *
103
+ * @remarks
104
+ * `mounted` stays true across disconnect so list remounts skip the enter
105
+ * animation (avoids an opacity flicker when siblings update). Timer state is
106
+ * still reset on disconnect and restarted on reconnect / first paint.
60
107
  */
61
108
  connectedCallback(): void;
62
109
  /**
@@ -68,15 +115,24 @@ export declare class RuiToast extends RadiantElement<RuiToastBindings> {
68
115
  onPositionUpdated(): void;
69
116
  /**
70
117
  * Hold or release auto-dismiss (toaster-controlled on stack hover).
71
- * Leaving hover resets lifetime to a full `duration` (does not resume leftover time).
72
- * A no-op `setPaused(false)` still starts the timer on first paint if it never ran.
118
+ *
119
+ * @remarks
120
+ * Pause freezes leftover ms so wall-clock time during hover does not consume
121
+ * the lifetime. Resume rebuilds the deadline from that remainder.
73
122
  */
74
123
  setPaused(paused: boolean): void;
75
124
  onDurationUpdated(): void;
76
125
  onMarkedDeleteUpdated(): void;
77
126
  private get resolvedId();
78
127
  private clearTimer;
79
- /** Start a fresh full-duration countdown (never resumes leftover time). */
128
+ /**
129
+ * Countdown to the toast's dismiss deadline.
130
+ *
131
+ * @remarks
132
+ * Deadlines live in a module map keyed by toast id so list remounts (sibling
133
+ * dismiss / re-render) resume leftover time instead of restarting `duration`.
134
+ * Hover pause stores remaining ms separately and rebuilds the deadline on resume.
135
+ */
80
136
  private startTimer;
81
137
  private beginRemove;
82
138
  private onPointerDown;
@@ -7,8 +7,9 @@ export type RuiToasterProps = {
7
7
  /** Default lifetime in ms. Default: `4000`. */
8
8
  duration?: number;
9
9
  /**
10
- * Max toasts shown in the stack at once (older ones wait in queue).
11
- * Default: `3`.
10
+ * Max toasts mounted in the stack at once (older ones wait in queue).
11
+ * Default: `3`. Collapsed UI peeks at most {@link TOAST_COLLAPSED_PEEK}
12
+ * of these; hover expands to show all mounted toasts.
12
13
  */
13
14
  visibleToasts?: number;
14
15
  /** Show a close button on every toast. */
@@ -23,6 +24,16 @@ export type RuiToasterProps = {
23
24
  gap?: number;
24
25
  /** Viewport inset in px. Default: `24`. */
25
26
  offset?: number;
27
+ /**
28
+ * CSS selector for a positioning root.
29
+ *
30
+ * @remarks
31
+ * Empty (default): `position: fixed` against the viewport.
32
+ * When set, the toaster prefers an ancestor matching the selector (via
33
+ * `closest`), otherwise `document.querySelector`, switches to
34
+ * `position: absolute`, and ensures the root is a positioning context.
35
+ */
36
+ container?: string;
26
37
  };
27
38
  type RuiToasterBindings = {
28
39
  position: ToastPosition;
@@ -31,7 +42,32 @@ type RuiToasterBindings = {
31
42
  /**
32
43
  * `<rui-toaster>` — fixed viewport that renders the toast stack.
33
44
  *
45
+ * Mount once at the app root, then drive it imperatively with {@link toast}.
46
+ * Owns the stacking layout (collapsed peek + hover expand), visibility pause,
47
+ * and per-position filtering of queued toasts.
48
+ *
34
49
  * @element rui-toaster
50
+ *
51
+ * @attr {string} position - Corner / edge placement. Default: `bottom-end`.
52
+ * @attr {number} duration - Default lifetime in ms. Default: `4000`.
53
+ * @attr {number} visible-toasts - Max toasts mounted at once; older wait in queue. Default: `3`.
54
+ * @attr {boolean} close-button - Show a close button on every toast. Default: `false`.
55
+ * @attr {boolean} expand - Always render the stack expanded. Default: `false`.
56
+ * @attr {number} gap - Gap between expanded toasts in px. Default: `14`.
57
+ * @attr {number} offset - Viewport inset in px. Default: `24`.
58
+ * @attr {string} container - CSS selector for a positioning root. Default: `''`.
59
+ *
60
+ * @fires rui-toast-show - Document-level event; the toaster listens and creates
61
+ * a toast from `{ title, description, variant, ... }`.
62
+ * @fires rui-toast-dismiss - Document-level event; the toaster dismisses the
63
+ * matching toast (`{ id? }`).
64
+ *
65
+ * @remarks
66
+ * `container` switches the host from `position: fixed` to absolute inside a
67
+ * matched root — used by docs canvas demos so toasts render inside the preview.
68
+ *
69
+ * @cssclass rui-toaster-region - Announcement region wrapper (`display: contents`).
70
+ * @cssclass rui-toaster - The `<ol>` stack list.
35
71
  */
36
72
  export declare class RuiToaster extends RadiantElement<RuiToasterBindings> {
37
73
  position: ToastPosition;
@@ -41,6 +77,7 @@ export declare class RuiToaster extends RadiantElement<RuiToasterBindings> {
41
77
  expand: boolean;
42
78
  gap: number;
43
79
  offset: number;
80
+ container: string;
44
81
  toasts: ToastRecord[];
45
82
  private expanded;
46
83
  private interacting;
@@ -49,6 +86,8 @@ export declare class RuiToaster extends RadiantElement<RuiToasterBindings> {
49
86
  private readonly heights;
50
87
  private readonly observers;
51
88
  private layoutFrame;
89
+ /** Prevents ResizeObserver re-entry while temporarily unclipping hosts to measure. */
90
+ private measuring;
52
91
  connectedCallback(): void;
53
92
  disconnectedCallback(): void;
54
93
  onConfigUpdated(): void;
@@ -57,7 +96,21 @@ export declare class RuiToaster extends RadiantElement<RuiToasterBindings> {
57
96
  onToastMounted(): void;
58
97
  private filteredToasts;
59
98
  private syncHostPosition;
99
+ /**
100
+ * Bind the toaster to a positioning root when `container` is set.
101
+ *
102
+ * @remarks
103
+ * Prefers an ancestor match so nested demos do not reparent. Only appends
104
+ * into a query-selected root when the toaster is not already inside it.
105
+ * Contained mode uses absolute positioning; default mode restores viewport fixed.
106
+ */
107
+ private syncContainer;
60
108
  private isStackExpanded;
109
+ /**
110
+ * @remarks
111
+ * Pause only while the pointer is interacting / hovering, or the tab is
112
+ * hidden. The `expand` prop is visual-only — it must not freeze lifetimes.
113
+ */
61
114
  private isPaused;
62
115
  private resetLayoutState;
63
116
  private syncPauseState;
@@ -66,8 +119,24 @@ export declare class RuiToaster extends RadiantElement<RuiToasterBindings> {
66
119
  * stack under the cursor can skip `pointerout`, leaving hold/expand stale.
67
120
  */
68
121
  private scheduleLayoutSync;
122
+ /**
123
+ * Natural content height for stack math.
124
+ *
125
+ * @remarks
126
+ * Uses the inner `.rui-toast` `offsetHeight` (layout size, transform-independent).
127
+ * Host height/overflow are temporarily cleared because collapsed behind toasts are
128
+ * clipped to the front height — leaving that in place can under-measure in some engines.
129
+ */
69
130
  private measureToast;
70
131
  private observeToasts;
132
+ /**
133
+ * @remarks
134
+ * Expanded offsets use each toast's natural height (Sonner formula):
135
+ * `sum(heights before) + index * gap`. Collapsed mode peeks at most
136
+ * {@link TOAST_COLLAPSED_PEEK} toasts with scale; overflow stays
137
+ * mounted but hidden until hover expands the stack.
138
+ * Heights are always remeasured — clipped collapsed hosts make caches stale.
139
+ */
71
140
  private patchStackLayout;
72
141
  private onPointerOver;
73
142
  private onPointerOut;
@@ -1,2 +1,2 @@
1
- import{jsx as j,jsxs as qt}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as Lt,bound as Ut,customElement as Nt,onUpdated as $t,prop as C,state as xt}from"@ecopages/radiant";import{isServer as At}from"@ecopages/radiant/is-server";function ot(i){return i.split(",").map(t=>t.trim()).filter(t=>t.length>0)}function st(i,t){try{return i.querySelector(t)}catch{return null}}function lt(i,t){try{return Array.from(i.querySelectorAll(t))}catch{return[]}}function Dt(i){return i.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]/g,"")}function at(i,t,e=n=>document.getElementById(n)!==null){if(i.id)return t.add(i.id),i.id;let n=Dt(i.textContent||"")||"section",s=n,d=2;for(;t.has(s)||e(s);)s=`${n}-${d}`,d+=1;return i.id=s,t.add(s),s}function ct(i,t){return i instanceof HTMLElement?i.getBoundingClientRect().top+t:t}function ut(i,t,e,n){if(t instanceof HTMLElement){let s=t.getBoundingClientRect(),d=i.getBoundingClientRect();t.scrollTo({top:t.scrollTop+(d.top-s.top)-e,behavior:n});return}window.scrollTo({top:window.scrollY+i.getBoundingClientRect().top-e,behavior:n})}var dt,ht,ft,gt,pt,mt,vt,_t,wt,bt,yt,St,Tt,Et,It,Rt;function Vt(i,t,e,n,s,d){var y,a,V,B,L,M,E,z=Symbol.metadata||Symbol.for("Symbol.metadata"),P=Object.defineProperty,Y=Object.create,W=[Y(null),Y(null)],X=t.length;function x(r,p,f){return function(o,l){p&&(l=o,o=i);for(var m=0;m<r.length;m++)l=r[m].apply(o,f?[l]:[]);return f?l:o}}function w(r,p,f,o){if(typeof r!="function"&&(o||r!==void 0))throw new TypeError(p+" must "+(f||"be")+" a function"+(o?"":" or undefined"));return r}function G(r,p,f,o,l,m,S,g,v,_,Q){function q(u){if(!Q(u))throw new TypeError("Attempted to access private element on non-instance")}var U=[].concat(p[0]),Z=p[3],N=!S,I=l===1,F=l===3,tt=l===4,A=l===2;function k(u,T,nt){return function(O,rt){return T&&(rt=O,O=r),nt&&nt(O),c[u].call(O,rt)}}if(!N){var c={},$=[],b=F?"get":tt||I?"set":"value";if(v?(_||I?c={get:Ct(function(){return Z(this)},o,"get"),set:function(u){p[4](this,u)}}:c[b]=Z,_||Ct(c[b],o,A?"":b)):_||(c=Object.getOwnPropertyDescriptor(r,o)),!_&&!v){if((a=W[+g][o])&&(a^l)!==7)throw Error("Decorating two elements with the same name ("+c[b].name+") is not supported yet");W[+g][o]=l<3?1:l}}for(var h=r,H=U.length-1;H>=0;H-=f?2:1){var et=w(U[H],"A decorator","be",!0),it=f?U[H-1]:void 0,K={},R={kind:["field","accessor","method","getter","setter","class"][l],name:o,metadata:y,addInitializer:function(u,T){if(u.v)throw new TypeError("attempted to call addInitializer after decoration was finished");w(T,"An initializer","be",!0),m.push(T)}.bind(null,K)};if(N)a=et.call(it,h,R),K.v=1,w(a,"class decorators","return")&&(h=a);else if(R.static=g,R.private=v,a=R.access={has:v?Q.bind():function(u){return o in u}},tt||(a.get=v?A?function(u){return q(u),c.value}:k("get",0,q):function(u){return u[o]}),A||F||(a.set=v?k("set",0,q):function(u,T){u[o]=T}),h=et.call(it,I?{get:c.get,set:c.set}:c[b],R),K.v=1,I){if(typeof h=="object"&&h)(a=w(h.get,"accessor.get"))&&(c.get=a),(a=w(h.set,"accessor.set"))&&(c.set=a),(a=w(h.init,"accessor.init"))&&$.unshift(a);else if(h!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else w(h,(_?"field":"method")+" decorators","return")&&(_?$.unshift(h):c[b]=h)}return l<2&&S.push(x($,g,1),x(m,g,0)),_||N||(v?I?S.splice(-1,0,k("get",g),k("set",g)):S.push(A?c[b]:w.call.bind(c[b])):P(r,o,c)),h}function J(r){return P(r,z,{configurable:!0,enumerable:!0,value:y})}return d!==void 0&&(y=d[z]),y=Y(y??null),L=[],M=function(r){r&&L.push(x(r))},E=function(r,p){for(var f=0;f<e.length;f++){var o=e[f],l=o[1],m=7&l;if((8&l)==r&&!m==p){var S=o[2],g=!!o[3],v=16&l;G(r?i:i.prototype,o,v,g?"#"+S:Bt(S),m,m<2?[]:r?B=B||[]:V=V||[],L,!!r,g,p,r&&g?function(_){return Yt(_)===i}:s)}}},E(8,0),E(0,0),E(8,1),E(0,1),M(V),M(B),a=L,X||J(i),{e:a,get c(){var r=[];return X&&[J(i=G(i,[t],n,i.name,5,r)),x(r,1)]}}}function Bt(i){var t=Mt(i,"string");return typeof t=="symbol"?t:t+""}function Mt(i,t){if(typeof i!="object"||!i)return i;var e=i[Symbol.toPrimitive];if(e!==void 0){var n=e.call(i,t||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(i)}function Ct(i,t,e){typeof t=="symbol"&&(t=(t=t.description)?"["+t+"]":"");try{Object.defineProperty(i,"name",{configurable:!0,value:e?e+" "+t:t})}catch{}return i}function Yt(i){if(Object(i)!==i)throw TypeError("right-hand side of 'in' should be an object, got "+(i!==null?typeof i:"null"));return i}var D,kt=class extends Lt{static{({e:[ft,gt,pt,mt,vt,_t,wt,bt,yt,St,Tt,Et,It,Rt,dt],c:[D,ht]}=Vt(this,[Nt("rui-toc")],[[C({type:String,defaultValue:""}),0,"target"],[C({type:String,attribute:"heading-selector",defaultValue:"h2,h3"}),0,"headingSelector"],[C({type:String,defaultValue:"On this page"}),0,"label"],[C({type:Number,attribute:"scroll-offset",defaultValue:120}),0,"scrollOffset"],[C({type:String,attribute:"navigation-events",defaultValue:""}),0,"navigationEvents"],[xt,0,"entries"],[xt,0,"activeId"],[$t(["target","headingSelector","scrollOffset","navigationEvents"]),2,"onScanSettingsUpdated"],[Ut,2,"onLinkClick"]],0,void 0,Lt))}target=(dt(this),ft(this,""));headingSelector=(gt(this),pt(this,"h2,h3"));label=(mt(this),vt(this,"On this page"));scrollOffset=(_t(this),wt(this,120));navigationEvents=(bt(this),yt(this,""));entries=(St(this),Tt(this,[]));activeId=(Et(this),It(this,null));headings=(Rt(this),[]);scrollRoot=null;scrollCleanup=null;navigationCleanups=[];pendingScrollTargetId=null;scrollRafPending=!1;scrollOffsetTolerance=4;connectedCallback(){super.connectedCallback(),this.rebuild(),this.attachNavigationListeners()}disconnectedCallback(){this.detachScrollListener(),this.detachNavigationListeners(),super.disconnectedCallback()}onScanSettingsUpdated(){this.detachNavigationListeners(),this.attachNavigationListeners(),this.rebuild()}rebuild(){this.detachScrollListener(),this.headings=[],this.entries=[],this.activeId=null,this.pendingScrollTargetId=null,this.scrollRoot=null;let t=this.resolveTarget();if(!t)return;let e=lt(t,this.headingSelector);if(e.length===0)return;let n=new Set,s=e.map(d=>({id:at(d,n),label:(d.textContent||"").trim(),depth:this.headingDepth(d)}));this.headings=e,this.entries=s,this.scrollRoot=this.resolveScrollRoot(t),this.attachScrollListener(),this.updateActiveHeading()}resolveTarget(){let t=this.target.trim();return t?st(document,t):this.parentElement}resolveScrollRoot(t){let e=t;for(;e&&e!==document.documentElement&&e!==document.body;){let n=getComputedStyle(e).overflowY;if(n==="auto"||n==="scroll"||n==="overlay")return e;e=e.parentElement}return window}headingDepth(t){let e=Number.parseInt(t.tagName.slice(1),10);return Number.isFinite(e)?e:2}attachNavigationListeners(){if(At||!this.isConnected)return;let t=()=>this.rebuild();for(let e of ot(this.navigationEvents))document.addEventListener(e,t),this.navigationCleanups.push(()=>document.removeEventListener(e,t))}detachNavigationListeners(){for(let t of this.navigationCleanups)t();this.navigationCleanups=[]}attachScrollListener(){if(At||!this.isConnected)return;let t=()=>{this.scrollRafPending||(this.scrollRafPending=!0,requestAnimationFrame(()=>{this.updateActiveHeading(),this.scrollRafPending=!1}))},e=this.scrollRoot??window;if(e===window){window.addEventListener("scroll",t,{passive:!0}),this.scrollCleanup=()=>window.removeEventListener("scroll",t);return}e.addEventListener("scroll",t,{passive:!0}),this.scrollCleanup=()=>e.removeEventListener("scroll",t)}detachScrollListener(){this.scrollCleanup?.(),this.scrollCleanup=null}isScrollAtBottom(){let t=this.scrollRoot??window;if(!(t instanceof HTMLElement)){let e=document.documentElement.scrollHeight,n=window.innerHeight;return e<=n+1?!1:window.scrollY+n>=e-10}return t.scrollHeight<=t.clientHeight+1?!1:t.scrollTop+t.clientHeight>=t.scrollHeight-10}activeLineY(){return ct(this.scrollRoot??window,this.scrollOffset+this.scrollOffsetTolerance)}updateActiveHeading(){if(this.headings.length===0)return;if(this.isScrollAtBottom()){this.pendingScrollTargetId=null;let n=this.headings[this.headings.length-1]?.id;n&&this.setActiveId(n);return}if(this.pendingScrollTargetId){let n=this.findHeadingById(this.pendingScrollTargetId);if(!n)this.pendingScrollTargetId=null;else if(this.hasPendingScrollReachedTarget(n))this.pendingScrollTargetId=null;else{this.setActiveId(this.pendingScrollTargetId);return}}let t=this.activeLineY(),e=null;for(let n of this.headings)if(n.getBoundingClientRect().top<=t)e=n.id;else break;this.setActiveId(e??this.headings[0].id)}setActiveId(t){this.activeId!==t&&(this.activeId=t)}findHeadingById(t){return this.headings.find(e=>e.id===t)??null}hasPendingScrollReachedTarget(t){return t.getBoundingClientRect().top<=this.activeLineY()}onLinkClick(t,e){let n=t;if(n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.button!==0)return;let s=this.findHeadingById(e);s&&(t.preventDefault(),this.pendingScrollTargetId=e,this.setActiveId(e),this.scrollToHeading(e,s))}scrollToHeading(t,e){let n=window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";window.history.replaceState(window.history.state,"",`${window.location.pathname}${window.location.search}#${t}`),ut(e,this.scrollRoot??window,this.scrollOffset,n)}render(){return this.entries.length===0?null:qt("nav",{class:"rui-toc","aria-label":this.label,children:[this.label?j("p",{class:"rui-toc__label",children:this.label}):null,j("ul",{class:"rui-toc__list",children:this.entries.map(t=>j("li",{class:t.depth>=3?"rui-toc__item rui-toc__item--depth-3":"rui-toc__item",children:j("a",{href:`#${t.id}`,class:t.id===this.activeId?"rui-toc__link rui-toc__link--active":"rui-toc__link","on:click":e=>this.onLinkClick(e,t.id),children:t.label})}))})]})}static{ht()}};import{jsx as Pt}from"@ecopages/jsx/jsx-runtime";var Kt=Symbol.for("@ecopages/storybook-radiant.viewElement"),Ht=Symbol.for("@ecopages/storybook-radiant.scriptModule"),Ot=Symbol.for("@ecopages/storybook-radiant.scriptExport");function zt(i,t){i[Kt]=t;let e=t[Ht];e&&(i[Ht]=e,i[Ot]=t[Ot]??t.name)}function jt(i,t,e){let n=s=>t(s);return zt(n,i),n}var Wt=jt(D,({target:i,headingSelector:t,label:e,scrollOffset:n,navigationEvents:s,...d})=>Pt("rui-toc",{...d,"prop:target":i,"prop:headingSelector":t,"prop:label":e,"prop:scrollOffset":n,"prop:navigationEvents":s}),{stylesheets:["./toc.css"]});export{Wt as RuiToc,D as RuiTocElement};
1
+ import{jsx as j,jsxs as Yt}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as Lt,bound as Dt,customElement as Nt,onUpdated as $t,prop as L,state as xt}from"@ecopages/radiant";import{isServer as Rt}from"@ecopages/radiant/is-server";function rt(i){return i.split(",").map(t=>t.trim()).filter(t=>t.length>0)}function ot(i,t){try{return i.querySelector(t)}catch{return null}}function st(i,t){try{return Array.from(i.querySelectorAll(t))}catch{return[]}}function kt(i){return i.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\w-]/g,"")}function lt(i,t,e=n=>document.getElementById(n)!==null){if(i.id)return t.add(i.id),i.id;let n=kt(i.textContent||"")||"section",s=n,d=2;for(;t.has(s)||e(s);)s=`${n}-${d}`,d+=1;return i.id=s,t.add(s),s}function at(i,t){return i instanceof HTMLElement?i.getBoundingClientRect().top+t:t}function ct(i,t,e,n){if(t instanceof HTMLElement){let s=t.getBoundingClientRect(),d=i.getBoundingClientRect();t.scrollTo({top:t.scrollTop+(d.top-s.top)-e,behavior:n});return}window.scrollTo({top:window.scrollY+i.getBoundingClientRect().top-e,behavior:n})}var ut,dt,ht,ft,gt,pt,vt,mt,bt,wt,St,_t,yt,Ct,It,Tt;function Ot(i,t,e,n,s,d){var _,a,B,q,x,Y,I,V=Symbol.metadata||Symbol.for("Symbol.metadata"),P=Object.defineProperty,D=Object.create,z=[D(null),D(null)],G=t.length;function R(r,p,f){return function(o,l){p&&(l=o,o=i);for(var v=0;v<r.length;v++)l=r[v].apply(o,f?[l]:[]);return f?l:o}}function w(r,p,f,o){if(typeof r!="function"&&(o||r!==void 0))throw new TypeError(p+" must "+(f||"be")+" a function"+(o?"":" or undefined"));return r}function J(r,p,f,o,l,v,y,g,m,b,W){function N(u){if(!W(u))throw new TypeError("Attempted to access private element on non-instance")}var $=[].concat(p[0]),X=p[3],K=!y,T=l===1,Z=l===3,F=l===4,H=l===2;function A(u,C,it){return function(O,nt){return C&&(nt=O,O=r),it&&it(O),c[u].call(O,nt)}}if(!K){var c={},M=[],S=Z?"get":F||T?"set":"value";if(m?(b||T?c={get:Et(function(){return X(this)},o,"get"),set:function(u){p[4](this,u)}}:c[S]=X,b||Et(c[S],o,H?"":S)):b||(c=Object.getOwnPropertyDescriptor(r,o)),!b&&!m){if((a=z[+g][o])&&(a^l)!==7)throw Error("Decorating two elements with the same name ("+c[S].name+") is not supported yet");z[+g][o]=l<3?1:l}}for(var h=r,k=$.length-1;k>=0;k-=f?2:1){var tt=w($[k],"A decorator","be",!0),et=f?$[k-1]:void 0,U={},E={kind:["field","accessor","method","getter","setter","class"][l],name:o,metadata:_,addInitializer:function(u,C){if(u.v)throw new TypeError("attempted to call addInitializer after decoration was finished");w(C,"An initializer","be",!0),v.push(C)}.bind(null,U)};if(K)a=tt.call(et,h,E),U.v=1,w(a,"class decorators","return")&&(h=a);else if(E.static=g,E.private=m,a=E.access={has:m?W.bind():function(u){return o in u}},F||(a.get=m?H?function(u){return N(u),c.value}:A("get",0,N):function(u){return u[o]}),H||Z||(a.set=m?A("set",0,N):function(u,C){u[o]=C}),h=tt.call(et,T?{get:c.get,set:c.set}:c[S],E),U.v=1,T){if(typeof h=="object"&&h)(a=w(h.get,"accessor.get"))&&(c.get=a),(a=w(h.set,"accessor.set"))&&(c.set=a),(a=w(h.init,"accessor.init"))&&M.unshift(a);else if(h!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else w(h,(b?"field":"method")+" decorators","return")&&(b?M.unshift(h):c[S]=h)}return l<2&&y.push(R(M,g,1),R(v,g,0)),b||K||(m?T?y.splice(-1,0,A("get",g),A("set",g)):y.push(H?c[S]:w.call.bind(c[S])):P(r,o,c)),h}function Q(r){return P(r,V,{configurable:!0,enumerable:!0,value:_})}return d!==void 0&&(_=d[V]),_=D(_??null),x=[],Y=function(r){r&&x.push(R(r))},I=function(r,p){for(var f=0;f<e.length;f++){var o=e[f],l=o[1],v=7&l;if((8&l)==r&&!v==p){var y=o[2],g=!!o[3],m=16&l;J(r?i:i.prototype,o,m,g?"#"+y:jt(y),v,v<2?[]:r?q=q||[]:B=B||[],x,!!r,g,p,r&&g?function(b){return qt(b)===i}:s)}}},I(8,0),I(0,0),I(8,1),I(0,1),Y(B),Y(q),a=x,G||Q(i),{e:a,get c(){var r=[];return G&&[Q(i=J(i,[t],n,i.name,5,r)),R(r,1)]}}}function jt(i){var t=Bt(i,"string");return typeof t=="symbol"?t:t+""}function Bt(i,t){if(typeof i!="object"||!i)return i;var e=i[Symbol.toPrimitive];if(e!==void 0){var n=e.call(i,t||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(i)}function Et(i,t,e){typeof t=="symbol"&&(t=(t=t.description)?"["+t+"]":"");try{Object.defineProperty(i,"name",{configurable:!0,value:e?e+" "+t:t})}catch{}return i}function qt(i){if(Object(i)!==i)throw TypeError("right-hand side of 'in' should be an object, got "+(i!==null?typeof i:"null"));return i}var At,Ht=class extends Lt{static{({e:[ht,ft,gt,pt,vt,mt,bt,wt,St,_t,yt,Ct,It,Tt,ut],c:[At,dt]}=Ot(this,[Nt("rui-toc")],[[L({type:String,attribute:"target",defaultValue:""}),0,"target"],[L({type:String,attribute:"heading-selector",defaultValue:"h2,h3"}),0,"headingSelector"],[L({type:String,defaultValue:"On this page"}),0,"label"],[L({type:Number,attribute:"scroll-offset",defaultValue:120}),0,"scrollOffset"],[L({type:String,attribute:"navigation-events",defaultValue:""}),0,"navigationEvents"],[xt,0,"entries"],[xt,0,"activeId"],[$t(["target","headingSelector","scrollOffset","navigationEvents"]),2,"onScanSettingsUpdated"],[Dt,2,"onLinkClick"]],0,void 0,Lt))}target=(ut(this),ht(this,""));headingSelector=(ft(this),gt(this,"h2,h3"));label=(pt(this),vt(this,"On this page"));scrollOffset=(mt(this),bt(this,120));navigationEvents=(wt(this),St(this,""));entries=(_t(this),yt(this,[]));activeId=(Ct(this),It(this,null));headings=(Tt(this),[]);scrollRoot=null;scrollCleanup=null;navigationCleanups=[];pendingScrollTargetId=null;scrollRafPending=!1;scrollOffsetTolerance=4;readConfiguredProp(t,e){return t.trim()||this.getAttribute(e)?.trim()||""}readConfiguredNumber(t,e,n){if(Number.isFinite(t)&&t!==0)return t;let s=Number(this.getAttribute(e));return Number.isFinite(s)?s:n}connectedCallback(){super.connectedCallback(),this.attachNavigationListeners(),queueMicrotask(()=>{this.isConnected&&this.rebuild()})}disconnectedCallback(){this.detachScrollListener(),this.detachNavigationListeners(),super.disconnectedCallback()}onScanSettingsUpdated(){this.detachNavigationListeners(),this.attachNavigationListeners(),this.rebuild()}rebuild(){this.detachScrollListener(),this.headings=[],this.entries=[],this.activeId=null,this.pendingScrollTargetId=null,this.scrollRoot=null;let t=this.resolveTarget();if(!t)return;let e=st(t,this.readConfiguredProp(this.headingSelector,"heading-selector")||"h2,h3");if(e.length===0)return;let n=new Set,s=e.map(d=>({id:lt(d,n),label:(d.textContent||"").trim(),depth:this.headingDepth(d)}));this.headings=e,this.entries=s,this.scrollRoot=this.resolveScrollRoot(t),this.attachScrollListener(),this.updateActiveHeading()}resolveTarget(){let t=this.readConfiguredProp(this.target,"target");return t?ot(document,t):this.parentElement}resolvedScrollOffset(){return this.readConfiguredNumber(this.scrollOffset,"scroll-offset",120)}resolveScrollRoot(t){let e=t;for(;e&&e!==document.documentElement&&e!==document.body;){let n=getComputedStyle(e).overflowY;if(n==="auto"||n==="scroll"||n==="overlay")return e;e=e.parentElement}return window}headingDepth(t){let e=Number.parseInt(t.tagName.slice(1),10);return Number.isFinite(e)?e:2}attachNavigationListeners(){if(Rt||!this.isConnected)return;let t=()=>this.rebuild();for(let e of rt(this.readConfiguredProp(this.navigationEvents,"navigation-events")))document.addEventListener(e,t),this.navigationCleanups.push(()=>document.removeEventListener(e,t))}detachNavigationListeners(){for(let t of this.navigationCleanups)t();this.navigationCleanups=[]}attachScrollListener(){if(Rt||!this.isConnected)return;let t=()=>{this.scrollRafPending||(this.scrollRafPending=!0,requestAnimationFrame(()=>{this.updateActiveHeading(),this.scrollRafPending=!1}))},e=this.scrollRoot??window;if(e===window){window.addEventListener("scroll",t,{passive:!0}),this.scrollCleanup=()=>window.removeEventListener("scroll",t);return}e.addEventListener("scroll",t,{passive:!0}),this.scrollCleanup=()=>e.removeEventListener("scroll",t)}detachScrollListener(){this.scrollCleanup?.(),this.scrollCleanup=null}isScrollAtBottom(){let t=this.scrollRoot??window;if(!(t instanceof HTMLElement)){let e=document.documentElement.scrollHeight,n=window.innerHeight;return e<=n+1?!1:window.scrollY+n>=e-10}return t.scrollHeight<=t.clientHeight+1?!1:t.scrollTop+t.clientHeight>=t.scrollHeight-10}activeLineY(){return at(this.scrollRoot??window,this.resolvedScrollOffset()+this.scrollOffsetTolerance)}updateActiveHeading(){if(this.headings.length===0)return;if(this.isScrollAtBottom()){this.pendingScrollTargetId=null;let n=this.headings[this.headings.length-1]?.id;n&&this.setActiveId(n);return}if(this.pendingScrollTargetId){let n=this.findHeadingById(this.pendingScrollTargetId);if(!n)this.pendingScrollTargetId=null;else if(this.hasPendingScrollReachedTarget(n))this.pendingScrollTargetId=null;else{this.setActiveId(this.pendingScrollTargetId);return}}let t=this.activeLineY(),e=null;for(let n of this.headings)if(n.getBoundingClientRect().top<=t)e=n.id;else break;this.setActiveId(e??this.headings[0].id)}setActiveId(t){this.activeId!==t&&(this.activeId=t)}findHeadingById(t){return this.headings.find(e=>e.id===t)??null}hasPendingScrollReachedTarget(t){return t.getBoundingClientRect().top<=this.activeLineY()}onLinkClick(t,e){let n=t;if(n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.button!==0)return;let s=this.findHeadingById(e);s&&(t.preventDefault(),this.pendingScrollTargetId=e,this.setActiveId(e),this.scrollToHeading(e,s))}scrollToHeading(t,e){let n=window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth";window.history.replaceState(window.history.state,"",`${window.location.pathname}${window.location.search}#${t}`),ct(e,this.scrollRoot??window,this.resolvedScrollOffset(),n)}render(){return this.entries.length===0?null:Yt("nav",{class:"rui-toc","aria-label":this.label,children:[this.label?j("p",{class:"rui-toc__label",children:this.label}):null,j("ul",{class:"rui-toc__list",children:this.entries.map(t=>j("li",{class:t.depth>=3?"rui-toc__item rui-toc__item--depth-3":"rui-toc__item",children:j("a",{href:`#${t.id}`,class:t.id===this.activeId?"rui-toc__link rui-toc__link--active":"rui-toc__link","on:click":e=>this.onLinkClick(e,t.id),children:t.label})}))})]})}static{dt()}};import{jsx as Kt}from"@ecopages/jsx/jsx-runtime";function Mt({target:i,headingSelector:t,label:e,scrollOffset:n,navigationEvents:s,...d}){return Kt("rui-toc",{...d,"prop:target":i,"prop:headingSelector":t,"prop:label":e,"prop:scrollOffset":n,"prop:navigationEvents":s})}export{Mt as RuiToc,At as RuiTocElement};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/components/ui/toc/toc.script.tsx", "../../../../src/lib/comma-separated.ts", "../../../../src/components/ui/toc/toc-helpers.ts", "../../../../src/components/ui/toc/toc.tsx", "../../../../src/lib/radiant-view.ts"],
4
- "sourcesContent": ["let _initProto, _initClass, _init_target, _init_extra_target, _init_headingSelector, _init_extra_headingSelector, _init_label, _init_extra_label, _init_scrollOffset, _init_extra_scrollOffset, _init_navigationEvents, _init_extra_navigationEvents, _init_entries, _init_extra_entries, _init_activeId, _init_extra_activeId;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { RadiantElement, bound, customElement, onUpdated, prop, state } from \"@ecopages/radiant\";\nimport { isServer } from \"@ecopages/radiant/is-server\";\nimport { parseCommaSeparated } from \"@/lib/comma-separated\";\nimport { ensureUniqueHeadingId, querySelectorAllSafe, querySelectorSafe, scrollHeadingIntoView, trackingLineY } from \"./toc-helpers\";\nlet _RuiToc;\nclass RuiToc extends RadiantElement {\n static {\n ({\n e: [_init_target, _init_extra_target, _init_headingSelector, _init_extra_headingSelector, _init_label, _init_extra_label, _init_scrollOffset, _init_extra_scrollOffset, _init_navigationEvents, _init_extra_navigationEvents, _init_entries, _init_extra_entries, _init_activeId, _init_extra_activeId, _initProto],\n c: [_RuiToc, _initClass]\n } = _applyDecs(this, [customElement(\"rui-toc\")], [[prop({\n type: String,\n defaultValue: \"\"\n }), 0, \"target\"], [prop({\n type: String,\n attribute: \"heading-selector\",\n defaultValue: \"h2,h3\"\n }), 0, \"headingSelector\"], [prop({\n type: String,\n defaultValue: \"On this page\"\n }), 0, \"label\"], [prop({\n type: Number,\n attribute: \"scroll-offset\",\n defaultValue: 120\n }), 0, \"scrollOffset\"], [prop({\n type: String,\n attribute: \"navigation-events\",\n defaultValue: \"\"\n }), 0, \"navigationEvents\"], [state, 0, \"entries\"], [state, 0, \"activeId\"], [onUpdated([\"target\", \"headingSelector\", \"scrollOffset\", \"navigationEvents\"]), 2, \"onScanSettingsUpdated\"], [bound, 2, \"onLinkClick\"]], 0, void 0, RadiantElement));\n }\n target = (_initProto(this), _init_target(this, \"\"));\n headingSelector = (_init_extra_target(this), _init_headingSelector(this, \"h2,h3\"));\n label = (_init_extra_headingSelector(this), _init_label(this, \"On this page\"));\n scrollOffset = (_init_extra_label(this), _init_scrollOffset(this, 120));\n navigationEvents = (_init_extra_scrollOffset(this), _init_navigationEvents(this, \"\"));\n entries = (_init_extra_navigationEvents(this), _init_entries(this, []));\n activeId = (_init_extra_entries(this), _init_activeId(this, null));\n headings = (_init_extra_activeId(this), []);\n scrollRoot = null;\n scrollCleanup = null;\n navigationCleanups = [];\n pendingScrollTargetId = null;\n scrollRafPending = false;\n scrollOffsetTolerance = 4;\n connectedCallback() {\n super.connectedCallback();\n this.rebuild();\n this.attachNavigationListeners();\n }\n disconnectedCallback() {\n this.detachScrollListener();\n this.detachNavigationListeners();\n super.disconnectedCallback();\n }\n onScanSettingsUpdated() {\n this.detachNavigationListeners();\n this.attachNavigationListeners();\n this.rebuild();\n }\n rebuild() {\n this.detachScrollListener();\n this.headings = [];\n this.entries = [];\n this.activeId = null;\n this.pendingScrollTargetId = null;\n this.scrollRoot = null;\n const root = this.resolveTarget();\n if (!root) {\n return;\n }\n const headings = querySelectorAllSafe(root, this.headingSelector);\n if (headings.length === 0) {\n return;\n }\n const usedIds = /* @__PURE__ */new Set();\n const entries = headings.map(heading => {\n const id = ensureUniqueHeadingId(heading, usedIds);\n return {\n id,\n label: (heading.textContent || \"\").trim(),\n depth: this.headingDepth(heading)\n };\n });\n this.headings = headings;\n this.entries = entries;\n this.scrollRoot = this.resolveScrollRoot(root);\n this.attachScrollListener();\n this.updateActiveHeading();\n }\n resolveTarget() {\n const selector = this.target.trim();\n if (selector) {\n return querySelectorSafe(document, selector);\n }\n return this.parentElement;\n }\n /**\n * Nearest ancestor (including the target) that scrolls vertically, else `window`.\n */\n resolveScrollRoot(from) {\n let node = from;\n while (node && node !== document.documentElement && node !== document.body) {\n const overflowY = getComputedStyle(node).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\" || overflowY === \"overlay\") {\n return node;\n }\n node = node.parentElement;\n }\n return window;\n }\n headingDepth(heading) {\n const level = Number.parseInt(heading.tagName.slice(1), 10);\n return Number.isFinite(level) ? level : 2;\n }\n attachNavigationListeners() {\n if (isServer || !this.isConnected) {\n return;\n }\n const handler = () => this.rebuild();\n for (const eventName of parseCommaSeparated(this.navigationEvents)) {\n document.addEventListener(eventName, handler);\n this.navigationCleanups.push(() => document.removeEventListener(eventName, handler));\n }\n }\n detachNavigationListeners() {\n for (const cleanup of this.navigationCleanups) {\n cleanup();\n }\n this.navigationCleanups = [];\n }\n attachScrollListener() {\n if (isServer || !this.isConnected) {\n return;\n }\n const onScroll = () => {\n if (this.scrollRafPending) {\n return;\n }\n this.scrollRafPending = true;\n requestAnimationFrame(() => {\n this.updateActiveHeading();\n this.scrollRafPending = false;\n });\n };\n const root = this.scrollRoot ?? window;\n if (root === window) {\n window.addEventListener(\"scroll\", onScroll, {\n passive: true\n });\n this.scrollCleanup = () => window.removeEventListener(\"scroll\", onScroll);\n return;\n }\n root.addEventListener(\"scroll\", onScroll, {\n passive: true\n });\n this.scrollCleanup = () => root.removeEventListener(\"scroll\", onScroll);\n }\n detachScrollListener() {\n this.scrollCleanup?.();\n this.scrollCleanup = null;\n }\n isScrollAtBottom() {\n const root = this.scrollRoot ?? window;\n if (!(root instanceof HTMLElement)) {\n const scrollHeight = document.documentElement.scrollHeight;\n const viewport = window.innerHeight;\n if (scrollHeight <= viewport + 1) {\n return false;\n }\n return window.scrollY + viewport >= scrollHeight - 10;\n }\n if (root.scrollHeight <= root.clientHeight + 1) {\n return false;\n }\n return root.scrollTop + root.clientHeight >= root.scrollHeight - 10;\n }\n activeLineY() {\n return trackingLineY(this.scrollRoot ?? window, this.scrollOffset + this.scrollOffsetTolerance);\n }\n updateActiveHeading() {\n if (this.headings.length === 0) {\n return;\n }\n if (this.isScrollAtBottom()) {\n this.pendingScrollTargetId = null;\n const lastId = this.headings[this.headings.length - 1]?.id;\n if (lastId) {\n this.setActiveId(lastId);\n }\n return;\n }\n if (this.pendingScrollTargetId) {\n const pendingHeading = this.findHeadingById(this.pendingScrollTargetId);\n if (!pendingHeading) {\n this.pendingScrollTargetId = null;\n } else if (!this.hasPendingScrollReachedTarget(pendingHeading)) {\n this.setActiveId(this.pendingScrollTargetId);\n return;\n } else {\n this.pendingScrollTargetId = null;\n }\n }\n const lineY = this.activeLineY();\n let activeId = null;\n for (const heading of this.headings) {\n if (heading.getBoundingClientRect().top <= lineY) {\n activeId = heading.id;\n } else {\n break;\n }\n }\n this.setActiveId(activeId ?? this.headings[0].id);\n }\n setActiveId(id) {\n if (this.activeId === id) {\n return;\n }\n this.activeId = id;\n }\n findHeadingById(id) {\n return this.headings.find(heading => heading.id === id) ?? null;\n }\n hasPendingScrollReachedTarget(heading) {\n return heading.getBoundingClientRect().top <= this.activeLineY();\n }\n onLinkClick(event, id) {\n const mouseEvent = event;\n if (mouseEvent.metaKey || mouseEvent.ctrlKey || mouseEvent.shiftKey || mouseEvent.altKey || mouseEvent.button !== 0) {\n return;\n }\n const heading = this.findHeadingById(id);\n if (!heading) {\n return;\n }\n event.preventDefault();\n this.pendingScrollTargetId = id;\n this.setActiveId(id);\n this.scrollToHeading(id, heading);\n }\n scrollToHeading(id, heading) {\n const behavior = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : \"smooth\";\n window.history.replaceState(window.history.state, \"\", `${window.location.pathname}${window.location.search}#${id}`);\n scrollHeadingIntoView(heading, this.scrollRoot ?? window, this.scrollOffset, behavior);\n }\n render() {\n if (this.entries.length === 0) {\n return null;\n }\n return /* @__PURE__ */jsxs(\"nav\", {\n class: \"rui-toc\",\n \"aria-label\": this.label,\n children: [this.label ? /* @__PURE__ */jsx(\"p\", {\n class: \"rui-toc__label\",\n children: this.label\n }) : null, /* @__PURE__ */jsx(\"ul\", {\n class: \"rui-toc__list\",\n children: this.entries.map(entry => /* @__PURE__ */jsx(\"li\", {\n class: entry.depth >= 3 ? \"rui-toc__item rui-toc__item--depth-3\" : \"rui-toc__item\",\n children: /* @__PURE__ */jsx(\"a\", {\n href: `#${entry.id}`,\n class: entry.id === this.activeId ? \"rui-toc__link rui-toc__link--active\" : \"rui-toc__link\",\n \"on:click\": event => this.onLinkClick(event, entry.id),\n children: entry.label\n })\n }))\n })]\n });\n }\n static {\n _initClass();\n }\n}\nexport { _RuiToc as RuiToc };", "export function parseCommaSeparated(value) {\n return value.split(\",\").map(name => name.trim()).filter(name => name.length > 0);\n}", "export function querySelectorSafe(root, selector) {\n try {\n return root.querySelector(selector);\n } catch {\n return null;\n }\n}\nexport function querySelectorAllSafe(root, selector) {\n try {\n return Array.from(root.querySelectorAll(selector));\n } catch {\n return [];\n }\n}\nexport function slugifyHeadingText(text) {\n return text.trim().toLowerCase().replace(/\\s+/g, \"-\").replace(/[^\\w-]/g, \"\");\n}\nexport function ensureUniqueHeadingId(heading, usedIds, isTaken = id => document.getElementById(id) !== null) {\n if (heading.id) {\n usedIds.add(heading.id);\n return heading.id;\n }\n const base = slugifyHeadingText(heading.textContent || \"\") || \"section\";\n let id = base;\n let suffix = 2;\n while (usedIds.has(id) || isTaken(id)) {\n id = `${base}-${suffix}`;\n suffix += 1;\n }\n heading.id = id;\n usedIds.add(id);\n return id;\n}\nexport function trackingLineY(scrollRoot, scrollOffset) {\n if (scrollRoot instanceof HTMLElement) {\n return scrollRoot.getBoundingClientRect().top + scrollOffset;\n }\n return scrollOffset;\n}\nexport function scrollHeadingIntoView(heading, scrollRoot, scrollOffset, behavior) {\n if (scrollRoot instanceof HTMLElement) {\n const rootRect = scrollRoot.getBoundingClientRect();\n const headingRect = heading.getBoundingClientRect();\n scrollRoot.scrollTo({\n top: scrollRoot.scrollTop + (headingRect.top - rootRect.top) - scrollOffset,\n behavior\n });\n return;\n }\n window.scrollTo({\n top: window.scrollY + heading.getBoundingClientRect().top - scrollOffset,\n behavior\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport { defineRadiantView } from \"@/lib/radiant-view\";\nimport { RuiToc as RuiTocElement } from \"./toc.script\";\nexport const RuiToc = defineRadiantView(RuiTocElement, ({\n target,\n headingSelector,\n label,\n scrollOffset,\n navigationEvents,\n ...props\n}) => /* @__PURE__ */jsx(\"rui-toc\", {\n ...props,\n \"prop:target\": target,\n \"prop:headingSelector\": headingSelector,\n \"prop:label\": label,\n \"prop:scrollOffset\": scrollOffset,\n \"prop:navigationEvents\": navigationEvents\n}), {\n stylesheets: [\"./toc.css\"]\n});", "const RADIANT_VIEW_ELEMENT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewElement\");\nconst RADIANT_SCRIPT_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptModule\");\nconst RADIANT_SCRIPT_EXPORT = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.scriptExport\");\nconst RADIANT_VIEW_MODULE = /* @__PURE__ */Symbol.for(\"@ecopages/storybook-radiant.viewModule\");\nfunction linkViewToElement(view, element) {\n view[RADIANT_VIEW_ELEMENT] = element;\n const ssrModule = element[RADIANT_SCRIPT_MODULE];\n if (ssrModule) {\n view[RADIANT_SCRIPT_MODULE] = ssrModule;\n view[RADIANT_SCRIPT_EXPORT] = element[RADIANT_SCRIPT_EXPORT] ?? element.name;\n }\n}\nexport function defineRadiantView(element, render, _options) {\n const view = args => render(args);\n linkViewToElement(view, element);\n return view;\n}\nexport function attachRadiantStylesheets(target, _stylesheets, moduleUrl) {\n const view = target;\n view[RADIANT_VIEW_MODULE] = moduleUrl;\n return target;\n}\nexport function syncRadiantViewMetadata(view) {\n const element = view[RADIANT_VIEW_ELEMENT];\n if (element) {\n linkViewToElement(view, element);\n }\n}"],
5
- "mappings": "AAMA,OAAS,OAAAA,EAAK,QAAAC,OAAY,4BAC1B,OAAS,kBAAAC,GAAgB,SAAAC,GAAO,iBAAAC,GAAe,aAAAC,GAAW,QAAAC,EAAM,SAAAC,OAAa,oBAC7E,OAAS,YAAAC,OAAgB,8BCRlB,SAASC,GAAoBC,EAAO,CACzC,OAAOA,EAAM,MAAM,GAAG,EAAE,IAAIC,GAAQA,EAAK,KAAK,CAAC,EAAE,OAAOA,GAAQA,EAAK,OAAS,CAAC,CACjF,CCFO,SAASC,GAAkBC,EAAMC,EAAU,CAChD,GAAI,CACF,OAAOD,EAAK,cAAcC,CAAQ,CACpC,MAAQ,CACN,OAAO,IACT,CACF,CACO,SAASC,GAAqBF,EAAMC,EAAU,CACnD,GAAI,CACF,OAAO,MAAM,KAAKD,EAAK,iBAAiBC,CAAQ,CAAC,CACnD,MAAQ,CACN,MAAO,CAAC,CACV,CACF,CACO,SAASE,GAAmBC,EAAM,CACvC,OAAOA,EAAK,KAAK,EAAE,YAAY,EAAE,QAAQ,OAAQ,GAAG,EAAE,QAAQ,UAAW,EAAE,CAC7E,CACO,SAASC,GAAsBC,EAASC,EAASC,EAAUC,GAAM,SAAS,eAAeA,CAAE,IAAM,KAAM,CAC5G,GAAIH,EAAQ,GACV,OAAAC,EAAQ,IAAID,EAAQ,EAAE,EACfA,EAAQ,GAEjB,IAAMI,EAAOP,GAAmBG,EAAQ,aAAe,EAAE,GAAK,UAC1DG,EAAKC,EACLC,EAAS,EACb,KAAOJ,EAAQ,IAAIE,CAAE,GAAKD,EAAQC,CAAE,GAClCA,EAAK,GAAGC,CAAI,IAAIC,CAAM,GACtBA,GAAU,EAEZ,OAAAL,EAAQ,GAAKG,EACbF,EAAQ,IAAIE,CAAE,EACPA,CACT,CACO,SAASG,GAAcC,EAAYC,EAAc,CACtD,OAAID,aAAsB,YACjBA,EAAW,sBAAsB,EAAE,IAAMC,EAE3CA,CACT,CACO,SAASC,GAAsBT,EAASO,EAAYC,EAAcE,EAAU,CACjF,GAAIH,aAAsB,YAAa,CACrC,IAAMI,EAAWJ,EAAW,sBAAsB,EAC5CK,EAAcZ,EAAQ,sBAAsB,EAClDO,EAAW,SAAS,CAClB,IAAKA,EAAW,WAAaK,EAAY,IAAMD,EAAS,KAAOH,EAC/D,SAAAE,CACF,CAAC,EACD,MACF,CACA,OAAO,SAAS,CACd,IAAK,OAAO,QAAUV,EAAQ,sBAAsB,EAAE,IAAMQ,EAC5D,SAAAE,CACF,CAAC,CACH,CFrDA,IAAIG,GAAYC,GAAYC,GAAcC,GAAoBC,GAAuBC,GAA6BC,GAAaC,GAAmBC,GAAoBC,GAA0BC,GAAwBC,GAA8BC,GAAeC,GAAqBC,GAAgBC,GAC1S,SAASC,GAAWC,EAAG,EAAGC,EAAGC,EAAGC,EAAGC,EAAG,CAAE,IAAIC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAGC,EAAI,OAAO,UAAY,OAAO,IAAI,iBAAiB,EAAGC,EAAI,OAAO,eAAgBC,EAAI,OAAO,OAAQC,EAAI,CAACD,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,EAAGE,EAAI,EAAE,OAAQ,SAASC,EAAEC,EAAGjB,EAAGC,EAAG,CAAE,OAAO,SAAU,EAAGE,EAAG,CAAEH,IAAMG,EAAI,EAAG,EAAIJ,GAAI,QAASK,EAAI,EAAGA,EAAIa,EAAE,OAAQb,IAAKD,EAAIc,EAAEb,CAAC,EAAE,MAAM,EAAGH,EAAI,CAACE,CAAC,EAAI,CAAC,CAAC,EAAG,OAAOF,EAAIE,EAAI,CAAG,CAAG,CAAE,SAASe,EAAEnB,EAAGkB,EAAGjB,EAAGC,EAAG,CAAE,GAAkB,OAAOF,GAArB,aAA2BE,GAAgBF,IAAX,QAAe,MAAM,IAAI,UAAUkB,EAAI,UAAYjB,GAAK,MAAQ,eAAiBC,EAAI,GAAK,gBAAgB,EAAG,OAAOF,CAAG,CAAE,SAASoB,EAASpB,EAAGkB,EAAGjB,EAAGC,EAAGC,EAAGC,EAAGG,EAAGC,EAAGC,EAAGC,EAAGC,EAAG,CAAE,SAASC,EAAEZ,EAAG,CAAE,GAAI,CAACW,EAAEX,CAAC,EAAG,MAAM,IAAI,UAAU,qDAAqD,CAAG,CAAE,IAAIc,EAAI,CAAC,EAAE,OAAOI,EAAE,CAAC,CAAC,EAAGF,EAAIE,EAAE,CAAC,EAAGG,EAAI,CAACd,EAAGe,EAAUnB,IAAN,EAASoB,EAAUpB,IAAN,EAASqB,GAAUrB,IAAN,EAASsB,EAAUtB,IAAN,EAAS,SAASuB,EAAER,EAAGjB,EAAGC,GAAG,CAAE,OAAO,SAAUC,EAAGC,GAAG,CAAE,OAAOH,IAAMG,GAAID,EAAGA,EAAIH,GAAIE,IAAKA,GAAEC,CAAC,EAAGwB,EAAET,CAAC,EAAE,KAAKf,EAAGC,EAAC,CAAG,CAAG,CAAE,GAAI,CAACiB,EAAG,CAAE,IAAIM,EAAI,CAAC,EAAGC,EAAI,CAAC,EAAGC,EAAIN,EAAI,MAAQC,IAAKF,EAAI,MAAQ,QAAS,GAAIb,GAAKC,GAAKY,EAAIK,EAAI,CAAE,IAAKG,GAAiB,UAAY,CAAE,OAAOd,EAAE,IAAI,CAAG,EAAGd,EAAG,KAAK,EAAG,IAAK,SAAUF,EAAG,CAAEkB,EAAE,CAAC,EAAE,KAAMlB,CAAC,CAAG,CAAE,EAAI2B,EAAEE,CAAC,EAAIb,EAAGN,GAAKoB,GAAiBH,EAAEE,CAAC,EAAG3B,EAAGuB,EAAI,GAAKI,CAAC,GAAKnB,IAAMiB,EAAI,OAAO,yBAAyB3B,EAAGE,CAAC,GAAI,CAACQ,GAAK,CAACD,EAAG,CAAE,IAAKH,EAAIS,EAAE,CAACP,CAAC,EAAEN,CAAC,KAAaI,EAAIH,KAAX,EAAe,MAAM,MAAM,+CAAiDwB,EAAEE,CAAC,EAAE,KAAO,wBAAwB,EAAGd,EAAE,CAACP,CAAC,EAAEN,CAAC,EAAIC,EAAI,EAAI,EAAIA,CAAG,CAAE,CAAE,QAAS4B,EAAI/B,EAAGgC,EAAIlB,EAAE,OAAS,EAAGkB,GAAK,EAAGA,GAAK/B,EAAI,EAAI,EAAG,CAAE,IAAIgC,GAAId,EAAEL,EAAEkB,CAAC,EAAG,cAAe,KAAM,EAAE,EAAGE,GAAIjC,EAAIa,EAAEkB,EAAI,CAAC,EAAI,OAAQG,EAAI,CAAC,EAAGC,EAAI,CAAE,KAAM,CAAC,QAAS,WAAY,SAAU,SAAU,SAAU,OAAO,EAAEjC,CAAC,EAAG,KAAMD,EAAG,SAAUG,EAAG,eAAgB,SAAUL,EAAGkB,EAAG,CAAE,GAAIlB,EAAE,EAAG,MAAM,IAAI,UAAU,gEAAgE,EAAGmB,EAAED,EAAG,iBAAkB,KAAM,EAAE,EAAGd,EAAE,KAAKc,CAAC,CAAG,EAAE,KAAK,KAAMiB,CAAC,CAAE,EAAG,GAAId,EAAGf,EAAI2B,GAAE,KAAKC,GAAGH,EAAGK,CAAC,EAAGD,EAAE,EAAI,EAAGhB,EAAEb,EAAG,mBAAoB,QAAQ,IAAMyB,EAAIzB,WAAY8B,EAAE,OAAS5B,EAAG4B,EAAE,QAAU3B,EAAGH,EAAI8B,EAAE,OAAS,CAAE,IAAK3B,EAAIE,EAAE,KAAK,EAAI,SAAUX,EAAG,CAAE,OAAOE,KAAKF,CAAG,CAAE,EAAGwB,KAAMlB,EAAE,IAAMG,EAAIgB,EAAI,SAAUzB,EAAG,CAAE,OAAOY,EAAEZ,CAAC,EAAG2B,EAAE,KAAO,EAAID,EAAE,MAAO,EAAGd,CAAC,EAAI,SAAUZ,EAAG,CAAE,OAAOA,EAAEE,CAAC,CAAG,GAAIuB,GAAKF,IAAMjB,EAAE,IAAMG,EAAIiB,EAAE,MAAO,EAAGd,CAAC,EAAI,SAAUZ,EAAGkB,EAAG,CAAElB,EAAEE,CAAC,EAAIgB,CAAG,GAAIa,EAAIE,GAAE,KAAKC,GAAGZ,EAAI,CAAE,IAAKK,EAAE,IAAK,IAAKA,EAAE,GAAI,EAAIA,EAAEE,CAAC,EAAGO,CAAC,EAAGD,EAAE,EAAI,EAAGb,GAAK,GAAgB,OAAOS,GAAnB,UAAwBA,GAAIzB,EAAIa,EAAEY,EAAE,IAAK,cAAc,KAAOJ,EAAE,IAAMrB,IAAKA,EAAIa,EAAEY,EAAE,IAAK,cAAc,KAAOJ,EAAE,IAAMrB,IAAKA,EAAIa,EAAEY,EAAE,KAAM,eAAe,IAAMH,EAAE,QAAQtB,CAAC,UAAsByB,IAAX,OAAc,MAAM,IAAI,UAAU,0FAA0F,OAAUZ,EAAEY,GAAIrB,EAAI,QAAU,UAAY,cAAe,QAAQ,IAAMA,EAAIkB,EAAE,QAAQG,CAAC,EAAIJ,EAAEE,CAAC,EAAIE,EAAI,CAAE,OAAO5B,EAAI,GAAKI,EAAE,KAAKU,EAAEW,EAAGpB,EAAG,CAAC,EAAGS,EAAEb,EAAGI,EAAG,CAAC,CAAC,EAAGE,GAAKW,IAAMZ,EAAIa,EAAIf,EAAE,OAAO,GAAI,EAAGmB,EAAE,MAAOlB,CAAC,EAAGkB,EAAE,MAAOlB,CAAC,CAAC,EAAID,EAAE,KAAKkB,EAAIE,EAAEE,CAAC,EAAIV,EAAE,KAAK,KAAKQ,EAAEE,CAAC,CAAC,CAAC,EAAIhB,EAAEb,EAAGE,EAAGyB,CAAC,GAAII,CAAG,CAAE,SAASV,EAAErB,EAAG,CAAE,OAAOa,EAAEb,EAAGY,EAAG,CAAE,aAAc,GAAI,WAAY,GAAI,MAAOP,CAAE,CAAC,CAAG,CAAE,OAAkBD,IAAX,SAAiBC,EAAID,EAAEQ,CAAC,GAAIP,EAAIS,EAAUT,GAAI,IAAQ,EAAGI,EAAI,CAAC,EAAGC,EAAI,SAAUV,EAAG,CAAEA,GAAKS,EAAE,KAAKQ,EAAEjB,CAAC,CAAC,CAAG,EAAGW,EAAI,SAAUO,EAAGhB,EAAG,CAAE,QAASE,EAAI,EAAGA,EAAIH,EAAE,OAAQG,IAAK,CAAE,IAAIC,EAAIJ,EAAEG,CAAC,EAAGE,EAAID,EAAE,CAAC,EAAGK,EAAI,EAAIJ,EAAG,IAAK,EAAIA,IAAMY,GAAK,CAACR,GAAKR,EAAG,CAAE,IAAIS,EAAIN,EAAE,CAAC,EAAGO,EAAI,CAAC,CAACP,EAAE,CAAC,EAAGQ,EAAI,GAAKP,EAAGc,EAASF,EAAIlB,EAAIA,EAAE,UAAWK,EAAGQ,EAAGD,EAAI,IAAMD,EAAI0B,GAAe1B,CAAC,EAAGD,EAAGA,EAAI,EAAI,CAAC,EAAIQ,EAAIV,EAAIA,GAAK,CAAC,EAAID,EAAIA,GAAK,CAAC,EAAGE,EAAG,CAAC,CAACS,EAAGN,EAAGV,EAAGgB,GAAKN,EAAI,SAAUM,EAAG,CAAE,OAAOoB,GAAYpB,CAAC,IAAMlB,CAAG,EAAIG,CAAC,CAAG,CAAE,CAAE,EAAGQ,EAAE,EAAG,CAAC,EAAGA,EAAE,EAAG,CAAC,EAAGA,EAAE,EAAG,CAAC,EAAGA,EAAE,EAAG,CAAC,EAAGD,EAAEH,CAAC,EAAGG,EAAEF,CAAC,EAAGF,EAAIG,EAAGO,GAAKK,EAAErB,CAAC,EAAG,CAAE,EAAGM,EAAG,IAAI,GAAI,CAAE,IAAIL,EAAI,CAAC,EAAG,OAAOe,GAAK,CAACK,EAAErB,EAAIoB,EAASpB,EAAG,CAAC,CAAC,EAAGE,EAAGF,EAAE,KAAM,EAAGC,CAAC,CAAC,EAAGgB,EAAEhB,EAAG,CAAC,CAAC,CAAG,CAAE,CAAG,CACn/G,SAASoC,GAAenB,EAAG,CAAE,IAAId,EAAImC,GAAarB,EAAG,QAAQ,EAAG,OAAmB,OAAOd,GAAnB,SAAuBA,EAAIA,EAAI,EAAI,CAC1G,SAASmC,GAAarB,EAAGhB,EAAG,CAAE,GAAgB,OAAOgB,GAAnB,UAAwB,CAACA,EAAG,OAAOA,EAAG,IAAI,EAAIA,EAAE,OAAO,WAAW,EAAG,GAAe,IAAX,OAAc,CAAE,IAAId,EAAI,EAAE,KAAKc,EAAGhB,GAAK,SAAS,EAAG,GAAgB,OAAOE,GAAnB,SAAsB,OAAOA,EAAG,MAAM,IAAI,UAAU,8CAA8C,CAAG,CAAE,OAAqBF,IAAb,SAAiB,OAAS,QAAQgB,CAAC,CAAG,CACvT,SAASY,GAAiB9B,EAAG,EAAGC,EAAG,CAAc,OAAO,GAAnB,WAAyB,GAAK,EAAI,EAAE,aAAe,IAAM,EAAI,IAAM,IAAK,GAAI,CAAE,OAAO,eAAeD,EAAG,OAAQ,CAAE,aAAc,GAAI,MAAOC,EAAIA,EAAI,IAAM,EAAI,CAAE,CAAC,CAAG,MAAY,CAAC,CAAE,OAAOD,CAAG,CAChO,SAASsC,GAAYtC,EAAG,CAAE,GAAI,OAAOA,CAAC,IAAMA,EAAG,MAAM,UAAU,qDAAgEA,IAAT,KAAa,OAAOA,EAAI,OAAO,EAAG,OAAOA,CAAG,CAMlK,IAAIwC,EACEC,GAAN,cAAqBC,EAAe,CAClC,MAAO,EACJ,CACC,EAAG,CAACzD,GAAcC,GAAoBC,GAAuBC,GAA6BC,GAAaC,GAAmBC,GAAoBC,GAA0BC,GAAwBC,GAA8BC,GAAeC,GAAqBC,GAAgBC,GAAsBf,EAAU,EAClT,EAAG,CAACyD,EAASxD,EAAU,CACzB,EAAIe,GAAW,KAAM,CAAC4C,GAAc,SAAS,CAAC,EAAG,CAAC,CAACC,EAAK,CACtD,KAAM,OACN,aAAc,EAChB,CAAC,EAAG,EAAG,QAAQ,EAAG,CAACA,EAAK,CACtB,KAAM,OACN,UAAW,mBACX,aAAc,OAChB,CAAC,EAAG,EAAG,iBAAiB,EAAG,CAACA,EAAK,CAC/B,KAAM,OACN,aAAc,cAChB,CAAC,EAAG,EAAG,OAAO,EAAG,CAACA,EAAK,CACrB,KAAM,OACN,UAAW,gBACX,aAAc,GAChB,CAAC,EAAG,EAAG,cAAc,EAAG,CAACA,EAAK,CAC5B,KAAM,OACN,UAAW,oBACX,aAAc,EAChB,CAAC,EAAG,EAAG,kBAAkB,EAAG,CAACC,GAAO,EAAG,SAAS,EAAG,CAACA,GAAO,EAAG,UAAU,EAAG,CAACC,GAAU,CAAC,SAAU,kBAAmB,eAAgB,kBAAkB,CAAC,EAAG,EAAG,uBAAuB,EAAG,CAACC,GAAO,EAAG,aAAa,CAAC,EAAG,EAAG,OAAQL,EAAc,EAC9O,CACA,QAAU3D,GAAW,IAAI,EAAGE,GAAa,KAAM,EAAE,GACjD,iBAAmBC,GAAmB,IAAI,EAAGC,GAAsB,KAAM,OAAO,GAChF,OAASC,GAA4B,IAAI,EAAGC,GAAY,KAAM,cAAc,GAC5E,cAAgBC,GAAkB,IAAI,EAAGC,GAAmB,KAAM,GAAG,GACrE,kBAAoBC,GAAyB,IAAI,EAAGC,GAAuB,KAAM,EAAE,GACnF,SAAWC,GAA6B,IAAI,EAAGC,GAAc,KAAM,CAAC,CAAC,GACrE,UAAYC,GAAoB,IAAI,EAAGC,GAAe,KAAM,IAAI,GAChE,UAAYC,GAAqB,IAAI,EAAG,CAAC,GACzC,WAAa,KACb,cAAgB,KAChB,mBAAqB,CAAC,EACtB,sBAAwB,KACxB,iBAAmB,GACnB,sBAAwB,EACxB,mBAAoB,CAClB,MAAM,kBAAkB,EACxB,KAAK,QAAQ,EACb,KAAK,0BAA0B,CACjC,CACA,sBAAuB,CACrB,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,MAAM,qBAAqB,CAC7B,CACA,uBAAwB,CACtB,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,QAAQ,CACf,CACA,SAAU,CACR,KAAK,qBAAqB,EAC1B,KAAK,SAAW,CAAC,EACjB,KAAK,QAAU,CAAC,EAChB,KAAK,SAAW,KAChB,KAAK,sBAAwB,KAC7B,KAAK,WAAa,KAClB,IAAMkD,EAAO,KAAK,cAAc,EAChC,GAAI,CAACA,EACH,OAEF,IAAMC,EAAWC,GAAqBF,EAAM,KAAK,eAAe,EAChE,GAAIC,EAAS,SAAW,EACtB,OAEF,IAAME,EAAyB,IAAI,IAC7BC,EAAUH,EAAS,IAAII,IAEpB,CACL,GAFSC,GAAsBD,EAASF,CAAO,EAG/C,OAAQE,EAAQ,aAAe,IAAI,KAAK,EACxC,MAAO,KAAK,aAAaA,CAAO,CAClC,EACD,EACD,KAAK,SAAWJ,EAChB,KAAK,QAAUG,EACf,KAAK,WAAa,KAAK,kBAAkBJ,CAAI,EAC7C,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,CAC3B,CACA,eAAgB,CACd,IAAMO,EAAW,KAAK,OAAO,KAAK,EAClC,OAAIA,EACKC,GAAkB,SAAUD,CAAQ,EAEtC,KAAK,aACd,CAIA,kBAAkBE,EAAM,CACtB,IAAIC,EAAOD,EACX,KAAOC,GAAQA,IAAS,SAAS,iBAAmBA,IAAS,SAAS,MAAM,CAC1E,IAAMC,EAAY,iBAAiBD,CAAI,EAAE,UACzC,GAAIC,IAAc,QAAUA,IAAc,UAAYA,IAAc,UAClE,OAAOD,EAETA,EAAOA,EAAK,aACd,CACA,OAAO,MACT,CACA,aAAaL,EAAS,CACpB,IAAMO,EAAQ,OAAO,SAASP,EAAQ,QAAQ,MAAM,CAAC,EAAG,EAAE,EAC1D,OAAO,OAAO,SAASO,CAAK,EAAIA,EAAQ,CAC1C,CACA,2BAA4B,CAC1B,GAAIC,IAAY,CAAC,KAAK,YACpB,OAEF,IAAMC,EAAU,IAAM,KAAK,QAAQ,EACnC,QAAWC,KAAaC,GAAoB,KAAK,gBAAgB,EAC/D,SAAS,iBAAiBD,EAAWD,CAAO,EAC5C,KAAK,mBAAmB,KAAK,IAAM,SAAS,oBAAoBC,EAAWD,CAAO,CAAC,CAEvF,CACA,2BAA4B,CAC1B,QAAWG,KAAW,KAAK,mBACzBA,EAAQ,EAEV,KAAK,mBAAqB,CAAC,CAC7B,CACA,sBAAuB,CACrB,GAAIJ,IAAY,CAAC,KAAK,YACpB,OAEF,IAAMK,EAAW,IAAM,CACjB,KAAK,mBAGT,KAAK,iBAAmB,GACxB,sBAAsB,IAAM,CAC1B,KAAK,oBAAoB,EACzB,KAAK,iBAAmB,EAC1B,CAAC,EACH,EACMlB,EAAO,KAAK,YAAc,OAChC,GAAIA,IAAS,OAAQ,CACnB,OAAO,iBAAiB,SAAUkB,EAAU,CAC1C,QAAS,EACX,CAAC,EACD,KAAK,cAAgB,IAAM,OAAO,oBAAoB,SAAUA,CAAQ,EACxE,MACF,CACAlB,EAAK,iBAAiB,SAAUkB,EAAU,CACxC,QAAS,EACX,CAAC,EACD,KAAK,cAAgB,IAAMlB,EAAK,oBAAoB,SAAUkB,CAAQ,CACxE,CACA,sBAAuB,CACrB,KAAK,gBAAgB,EACrB,KAAK,cAAgB,IACvB,CACA,kBAAmB,CACjB,IAAMlB,EAAO,KAAK,YAAc,OAChC,GAAI,EAAEA,aAAgB,aAAc,CAClC,IAAMmB,EAAe,SAAS,gBAAgB,aACxCC,EAAW,OAAO,YACxB,OAAID,GAAgBC,EAAW,EACtB,GAEF,OAAO,QAAUA,GAAYD,EAAe,EACrD,CACA,OAAInB,EAAK,cAAgBA,EAAK,aAAe,EACpC,GAEFA,EAAK,UAAYA,EAAK,cAAgBA,EAAK,aAAe,EACnE,CACA,aAAc,CACZ,OAAOqB,GAAc,KAAK,YAAc,OAAQ,KAAK,aAAe,KAAK,qBAAqB,CAChG,CACA,qBAAsB,CACpB,GAAI,KAAK,SAAS,SAAW,EAC3B,OAEF,GAAI,KAAK,iBAAiB,EAAG,CAC3B,KAAK,sBAAwB,KAC7B,IAAMC,EAAS,KAAK,SAAS,KAAK,SAAS,OAAS,CAAC,GAAG,GACpDA,GACF,KAAK,YAAYA,CAAM,EAEzB,MACF,CACA,GAAI,KAAK,sBAAuB,CAC9B,IAAMC,EAAiB,KAAK,gBAAgB,KAAK,qBAAqB,EACtE,GAAI,CAACA,EACH,KAAK,sBAAwB,aACnB,KAAK,8BAA8BA,CAAc,EAI3D,KAAK,sBAAwB,SAJiC,CAC9D,KAAK,YAAY,KAAK,qBAAqB,EAC3C,MACF,CAGF,CACA,IAAMC,EAAQ,KAAK,YAAY,EAC3BC,EAAW,KACf,QAAWpB,KAAW,KAAK,SACzB,GAAIA,EAAQ,sBAAsB,EAAE,KAAOmB,EACzCC,EAAWpB,EAAQ,OAEnB,OAGJ,KAAK,YAAYoB,GAAY,KAAK,SAAS,CAAC,EAAE,EAAE,CAClD,CACA,YAAYC,EAAI,CACV,KAAK,WAAaA,IAGtB,KAAK,SAAWA,EAClB,CACA,gBAAgBA,EAAI,CAClB,OAAO,KAAK,SAAS,KAAKrB,GAAWA,EAAQ,KAAOqB,CAAE,GAAK,IAC7D,CACA,8BAA8BrB,EAAS,CACrC,OAAOA,EAAQ,sBAAsB,EAAE,KAAO,KAAK,YAAY,CACjE,CACA,YAAYsB,EAAOD,EAAI,CACrB,IAAME,EAAaD,EACnB,GAAIC,EAAW,SAAWA,EAAW,SAAWA,EAAW,UAAYA,EAAW,QAAUA,EAAW,SAAW,EAChH,OAEF,IAAMvB,EAAU,KAAK,gBAAgBqB,CAAE,EAClCrB,IAGLsB,EAAM,eAAe,EACrB,KAAK,sBAAwBD,EAC7B,KAAK,YAAYA,CAAE,EACnB,KAAK,gBAAgBA,EAAIrB,CAAO,EAClC,CACA,gBAAgBqB,EAAIrB,EAAS,CAC3B,IAAMwB,EAAW,OAAO,WAAW,kCAAkC,EAAE,QAAU,OAAS,SAC1F,OAAO,QAAQ,aAAa,OAAO,QAAQ,MAAO,GAAI,GAAG,OAAO,SAAS,QAAQ,GAAG,OAAO,SAAS,MAAM,IAAIH,CAAE,EAAE,EAClHI,GAAsBzB,EAAS,KAAK,YAAc,OAAQ,KAAK,aAAcwB,CAAQ,CACvF,CACA,QAAS,CACP,OAAI,KAAK,QAAQ,SAAW,EACnB,KAEaE,GAAK,MAAO,CAChC,MAAO,UACP,aAAc,KAAK,MACnB,SAAU,CAAC,KAAK,MAAuBC,EAAI,IAAK,CAC9C,MAAO,iBACP,SAAU,KAAK,KACjB,CAAC,EAAI,KAAqBA,EAAI,KAAM,CAClC,MAAO,gBACP,SAAU,KAAK,QAAQ,IAAIC,GAAwBD,EAAI,KAAM,CAC3D,MAAOC,EAAM,OAAS,EAAI,uCAAyC,gBACnE,SAAyBD,EAAI,IAAK,CAChC,KAAM,IAAIC,EAAM,EAAE,GAClB,MAAOA,EAAM,KAAO,KAAK,SAAW,sCAAwC,gBAC5E,WAAYN,GAAS,KAAK,YAAYA,EAAOM,EAAM,EAAE,EACrD,SAAUA,EAAM,KAClB,CAAC,CACH,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,CAAC,CACH,CACA,MAAO,CACLjG,GAAW,CACb,CACF,EGtRA,OAAS,OAAAkG,OAAW,4BCApB,IAAMC,GAAsC,OAAO,IAAI,yCAAyC,EAC1FC,GAAuC,OAAO,IAAI,0CAA0C,EAC5FC,GAAuC,OAAO,IAAI,0CAA0C,EAElG,SAASC,GAAkBC,EAAMC,EAAS,CACxCD,EAAKE,EAAoB,EAAID,EAC7B,IAAME,EAAYF,EAAQG,EAAqB,EAC3CD,IACFH,EAAKI,EAAqB,EAAID,EAC9BH,EAAKK,EAAqB,EAAIJ,EAAQI,EAAqB,GAAKJ,EAAQ,KAE5E,CACO,SAASK,GAAkBL,EAASM,EAAQC,EAAU,CAC3D,IAAMR,EAAOS,GAAQF,EAAOE,CAAI,EAChC,OAAAV,GAAkBC,EAAMC,CAAO,EACxBD,CACT,CDbO,IAAMU,GAASC,GAAkBC,EAAe,CAAC,CACtD,OAAAC,EACA,gBAAAC,EACA,MAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,GAAGC,CACL,IAAqBC,GAAI,UAAW,CAClC,GAAGD,EACH,cAAeL,EACf,uBAAwBC,EACxB,aAAcC,EACd,oBAAqBC,EACrB,wBAAyBC,CAC3B,CAAC,EAAG,CACF,YAAa,CAAC,WAAW,CAC3B,CAAC",
6
- "names": ["jsx", "jsxs", "RadiantElement", "bound", "customElement", "onUpdated", "prop", "state", "isServer", "parseCommaSeparated", "value", "name", "querySelectorSafe", "root", "selector", "querySelectorAllSafe", "slugifyHeadingText", "text", "ensureUniqueHeadingId", "heading", "usedIds", "isTaken", "id", "base", "suffix", "trackingLineY", "scrollRoot", "scrollOffset", "scrollHeadingIntoView", "behavior", "rootRect", "headingRect", "_initProto", "_initClass", "_init_target", "_init_extra_target", "_init_headingSelector", "_init_extra_headingSelector", "_init_label", "_init_extra_label", "_init_scrollOffset", "_init_extra_scrollOffset", "_init_navigationEvents", "_init_extra_navigationEvents", "_init_entries", "_init_extra_entries", "_init_activeId", "_init_extra_activeId", "_applyDecs", "e", "n", "r", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "t", "b", "applyDec", "w", "D", "S", "j", "E", "I", "P", "k", "F", "_setFunctionName", "N", "O", "T", "z", "A", "H", "_toPropertyKey", "_checkInRHS", "_toPrimitive", "_RuiToc", "RuiToc", "RadiantElement", "customElement", "prop", "state", "onUpdated", "bound", "root", "headings", "querySelectorAllSafe", "usedIds", "entries", "heading", "ensureUniqueHeadingId", "selector", "querySelectorSafe", "from", "node", "overflowY", "level", "isServer", "handler", "eventName", "parseCommaSeparated", "cleanup", "onScroll", "scrollHeight", "viewport", "trackingLineY", "lastId", "pendingHeading", "lineY", "activeId", "id", "event", "mouseEvent", "behavior", "scrollHeadingIntoView", "jsxs", "jsx", "entry", "jsx", "RADIANT_VIEW_ELEMENT", "RADIANT_SCRIPT_MODULE", "RADIANT_SCRIPT_EXPORT", "linkViewToElement", "view", "element", "RADIANT_VIEW_ELEMENT", "ssrModule", "RADIANT_SCRIPT_MODULE", "RADIANT_SCRIPT_EXPORT", "defineRadiantView", "render", "_options", "args", "RuiToc", "defineRadiantView", "_RuiToc", "target", "headingSelector", "label", "scrollOffset", "navigationEvents", "props", "jsx"]
3
+ "sources": ["../../../../src/components/ui/toc/toc.script.tsx", "../../../../src/lib/comma-separated.ts", "../../../../src/components/ui/toc/toc-helpers.ts", "../../../../src/components/ui/toc/toc.tsx"],
4
+ "sourcesContent": ["let _initProto, _initClass, _init_target, _init_extra_target, _init_headingSelector, _init_extra_headingSelector, _init_label, _init_extra_label, _init_scrollOffset, _init_extra_scrollOffset, _init_navigationEvents, _init_extra_navigationEvents, _init_entries, _init_extra_entries, _init_activeId, _init_extra_activeId;\nfunction _applyDecs(e, t, n, r, o, i) { var a, c, u, s, f, l, p, d = Symbol.metadata || Symbol.for(\"Symbol.metadata\"), m = Object.defineProperty, h = Object.create, y = [h(null), h(null)], v = t.length; function g(t, n, r) { return function (o, i) { n && (i = o, o = e); for (var a = 0; a < t.length; a++) i = t[a].apply(o, r ? [i] : []); return r ? i : o; }; } function b(e, t, n, r) { if (\"function\" != typeof e && (r || void 0 !== e)) throw new TypeError(t + \" must \" + (n || \"be\") + \" a function\" + (r ? \"\" : \" or undefined\")); return e; } function applyDec(e, t, n, r, o, i, u, s, f, l, p) { function d(e) { if (!p(e)) throw new TypeError(\"Attempted to access private element on non-instance\"); } var h = [].concat(t[0]), v = t[3], w = !u, D = 1 === o, S = 3 === o, j = 4 === o, E = 2 === o; function I(t, n, r) { return function (o, i) { return n && (i = o, o = e), r && r(o), P[t].call(o, i); }; } if (!w) { var P = {}, k = [], F = S ? \"get\" : j || D ? \"set\" : \"value\"; if (f ? (l || D ? P = { get: _setFunctionName(function () { return v(this); }, r, \"get\"), set: function (e) { t[4](this, e); } } : P[F] = v, l || _setFunctionName(P[F], r, E ? \"\" : F)) : l || (P = Object.getOwnPropertyDescriptor(e, r)), !l && !f) { if ((c = y[+s][r]) && 7 !== (c ^ o)) throw Error(\"Decorating two elements with the same name (\" + P[F].name + \") is not supported yet\"); y[+s][r] = o < 3 ? 1 : o; } } for (var N = e, O = h.length - 1; O >= 0; O -= n ? 2 : 1) { var T = b(h[O], \"A decorator\", \"be\", !0), z = n ? h[O - 1] : void 0, A = {}, H = { kind: [\"field\", \"accessor\", \"method\", \"getter\", \"setter\", \"class\"][o], name: r, metadata: a, addInitializer: function (e, t) { if (e.v) throw new TypeError(\"attempted to call addInitializer after decoration was finished\"); b(t, \"An initializer\", \"be\", !0), i.push(t); }.bind(null, A) }; if (w) c = T.call(z, N, H), A.v = 1, b(c, \"class decorators\", \"return\") && (N = c);else if (H.static = s, H.private = f, c = H.access = { has: f ? p.bind() : function (e) { return r in e; } }, j || (c.get = f ? E ? function (e) { return d(e), P.value; } : I(\"get\", 0, d) : function (e) { return e[r]; }), E || S || (c.set = f ? I(\"set\", 0, d) : function (e, t) { e[r] = t; }), N = T.call(z, D ? { get: P.get, set: P.set } : P[F], H), A.v = 1, D) { if (\"object\" == typeof N && N) (c = b(N.get, \"accessor.get\")) && (P.get = c), (c = b(N.set, \"accessor.set\")) && (P.set = c), (c = b(N.init, \"accessor.init\")) && k.unshift(c);else if (void 0 !== N) throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or undefined\"); } else b(N, (l ? \"field\" : \"method\") + \" decorators\", \"return\") && (l ? k.unshift(N) : P[F] = N); } return o < 2 && u.push(g(k, s, 1), g(i, s, 0)), l || w || (f ? D ? u.splice(-1, 0, I(\"get\", s), I(\"set\", s)) : u.push(E ? P[F] : b.call.bind(P[F])) : m(e, r, P)), N; } function w(e) { return m(e, d, { configurable: !0, enumerable: !0, value: a }); } return void 0 !== i && (a = i[d]), a = h(null == a ? null : a), f = [], l = function (e) { e && f.push(g(e)); }, p = function (t, r) { for (var i = 0; i < n.length; i++) { var a = n[i], c = a[1], l = 7 & c; if ((8 & c) == t && !l == r) { var p = a[2], d = !!a[3], m = 16 & c; applyDec(t ? e : e.prototype, a, m, d ? \"#\" + p : _toPropertyKey(p), l, l < 2 ? [] : t ? s = s || [] : u = u || [], f, !!t, d, r, t && d ? function (t) { return _checkInRHS(t) === e; } : o); } } }, p(8, 0), p(0, 0), p(8, 1), p(0, 1), l(u), l(s), c = f, v || w(e), { e: c, get c() { var n = []; return v && [w(e = applyDec(e, [t], r, e.name, 5, n)), g(n, 1)]; } }; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _setFunctionName(e, t, n) { \"symbol\" == typeof t && (t = (t = t.description) ? \"[\" + t + \"]\" : \"\"); try { Object.defineProperty(e, \"name\", { configurable: !0, value: n ? n + \" \" + t : t }); } catch (e) {} return e; }\nfunction _checkInRHS(e) { if (Object(e) !== e) throw TypeError(\"right-hand side of 'in' should be an object, got \" + (null !== e ? typeof e : \"null\")); return e; }\nimport { jsx, jsxs } from \"@ecopages/jsx/jsx-runtime\";\nimport { RadiantElement, bound, customElement, onUpdated, prop, state } from \"@ecopages/radiant\";\nimport { isServer } from \"@ecopages/radiant/is-server\";\nimport { parseCommaSeparated } from \"@/lib/comma-separated\";\nimport { ensureUniqueHeadingId, querySelectorAllSafe, querySelectorSafe, scrollHeadingIntoView, trackingLineY } from \"./toc-helpers\";\nlet _RuiToc;\nclass RuiToc extends RadiantElement {\n static {\n ({\n e: [_init_target, _init_extra_target, _init_headingSelector, _init_extra_headingSelector, _init_label, _init_extra_label, _init_scrollOffset, _init_extra_scrollOffset, _init_navigationEvents, _init_extra_navigationEvents, _init_entries, _init_extra_entries, _init_activeId, _init_extra_activeId, _initProto],\n c: [_RuiToc, _initClass]\n } = _applyDecs(this, [customElement(\"rui-toc\")], [[prop({\n type: String,\n attribute: \"target\",\n defaultValue: \"\"\n }), 0, \"target\"], [prop({\n type: String,\n attribute: \"heading-selector\",\n defaultValue: \"h2,h3\"\n }), 0, \"headingSelector\"], [prop({\n type: String,\n defaultValue: \"On this page\"\n }), 0, \"label\"], [prop({\n type: Number,\n attribute: \"scroll-offset\",\n defaultValue: 120\n }), 0, \"scrollOffset\"], [prop({\n type: String,\n attribute: \"navigation-events\",\n defaultValue: \"\"\n }), 0, \"navigationEvents\"], [state, 0, \"entries\"], [state, 0, \"activeId\"], [onUpdated([\"target\", \"headingSelector\", \"scrollOffset\", \"navigationEvents\"]), 2, \"onScanSettingsUpdated\"], [bound, 2, \"onLinkClick\"]], 0, void 0, RadiantElement));\n }\n target = (_initProto(this), _init_target(this, \"\"));\n headingSelector = (_init_extra_target(this), _init_headingSelector(this, \"h2,h3\"));\n label = (_init_extra_headingSelector(this), _init_label(this, \"On this page\"));\n scrollOffset = (_init_extra_label(this), _init_scrollOffset(this, 120));\n navigationEvents = (_init_extra_scrollOffset(this), _init_navigationEvents(this, \"\"));\n entries = (_init_extra_navigationEvents(this), _init_entries(this, []));\n activeId = (_init_extra_entries(this), _init_activeId(this, null));\n headings = (_init_extra_activeId(this), []);\n scrollRoot = null;\n scrollCleanup = null;\n navigationCleanups = [];\n pendingScrollTargetId = null;\n scrollRafPending = false;\n scrollOffsetTolerance = 4;\n readConfiguredProp(propValue, attributeName) {\n return propValue.trim() || this.getAttribute(attributeName)?.trim() || \"\";\n }\n readConfiguredNumber(propValue, attributeName, fallback) {\n if (Number.isFinite(propValue) && propValue !== 0) {\n return propValue;\n }\n const fromAttribute = Number(this.getAttribute(attributeName));\n return Number.isFinite(fromAttribute) ? fromAttribute : fallback;\n }\n connectedCallback() {\n super.connectedCallback();\n this.attachNavigationListeners();\n queueMicrotask(() => {\n if (!this.isConnected) {\n return;\n }\n this.rebuild();\n });\n }\n disconnectedCallback() {\n this.detachScrollListener();\n this.detachNavigationListeners();\n super.disconnectedCallback();\n }\n onScanSettingsUpdated() {\n this.detachNavigationListeners();\n this.attachNavigationListeners();\n this.rebuild();\n }\n rebuild() {\n this.detachScrollListener();\n this.headings = [];\n this.entries = [];\n this.activeId = null;\n this.pendingScrollTargetId = null;\n this.scrollRoot = null;\n const root = this.resolveTarget();\n if (!root) {\n return;\n }\n const headings = querySelectorAllSafe(root, this.readConfiguredProp(this.headingSelector, \"heading-selector\") || \"h2,h3\");\n if (headings.length === 0) {\n return;\n }\n const usedIds = /* @__PURE__ */new Set();\n const entries = headings.map(heading => {\n const id = ensureUniqueHeadingId(heading, usedIds);\n return {\n id,\n label: (heading.textContent || \"\").trim(),\n depth: this.headingDepth(heading)\n };\n });\n this.headings = headings;\n this.entries = entries;\n this.scrollRoot = this.resolveScrollRoot(root);\n this.attachScrollListener();\n this.updateActiveHeading();\n }\n resolveTarget() {\n const selector = this.readConfiguredProp(this.target, \"target\");\n if (selector) {\n return querySelectorSafe(document, selector);\n }\n return this.parentElement;\n }\n resolvedScrollOffset() {\n return this.readConfiguredNumber(this.scrollOffset, \"scroll-offset\", 120);\n }\n /**\n * Nearest ancestor (including the target) that scrolls vertically, else `window`.\n */\n resolveScrollRoot(from) {\n let node = from;\n while (node && node !== document.documentElement && node !== document.body) {\n const overflowY = getComputedStyle(node).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\" || overflowY === \"overlay\") {\n return node;\n }\n node = node.parentElement;\n }\n return window;\n }\n headingDepth(heading) {\n const level = Number.parseInt(heading.tagName.slice(1), 10);\n return Number.isFinite(level) ? level : 2;\n }\n attachNavigationListeners() {\n if (isServer || !this.isConnected) {\n return;\n }\n const handler = () => this.rebuild();\n for (const eventName of parseCommaSeparated(this.readConfiguredProp(this.navigationEvents, \"navigation-events\"))) {\n document.addEventListener(eventName, handler);\n this.navigationCleanups.push(() => document.removeEventListener(eventName, handler));\n }\n }\n detachNavigationListeners() {\n for (const cleanup of this.navigationCleanups) {\n cleanup();\n }\n this.navigationCleanups = [];\n }\n attachScrollListener() {\n if (isServer || !this.isConnected) {\n return;\n }\n const onScroll = () => {\n if (this.scrollRafPending) {\n return;\n }\n this.scrollRafPending = true;\n requestAnimationFrame(() => {\n this.updateActiveHeading();\n this.scrollRafPending = false;\n });\n };\n const root = this.scrollRoot ?? window;\n if (root === window) {\n window.addEventListener(\"scroll\", onScroll, {\n passive: true\n });\n this.scrollCleanup = () => window.removeEventListener(\"scroll\", onScroll);\n return;\n }\n root.addEventListener(\"scroll\", onScroll, {\n passive: true\n });\n this.scrollCleanup = () => root.removeEventListener(\"scroll\", onScroll);\n }\n detachScrollListener() {\n this.scrollCleanup?.();\n this.scrollCleanup = null;\n }\n isScrollAtBottom() {\n const root = this.scrollRoot ?? window;\n if (!(root instanceof HTMLElement)) {\n const scrollHeight = document.documentElement.scrollHeight;\n const viewport = window.innerHeight;\n if (scrollHeight <= viewport + 1) {\n return false;\n }\n return window.scrollY + viewport >= scrollHeight - 10;\n }\n if (root.scrollHeight <= root.clientHeight + 1) {\n return false;\n }\n return root.scrollTop + root.clientHeight >= root.scrollHeight - 10;\n }\n activeLineY() {\n return trackingLineY(this.scrollRoot ?? window, this.resolvedScrollOffset() + this.scrollOffsetTolerance);\n }\n updateActiveHeading() {\n if (this.headings.length === 0) {\n return;\n }\n if (this.isScrollAtBottom()) {\n this.pendingScrollTargetId = null;\n const lastId = this.headings[this.headings.length - 1]?.id;\n if (lastId) {\n this.setActiveId(lastId);\n }\n return;\n }\n if (this.pendingScrollTargetId) {\n const pendingHeading = this.findHeadingById(this.pendingScrollTargetId);\n if (!pendingHeading) {\n this.pendingScrollTargetId = null;\n } else if (!this.hasPendingScrollReachedTarget(pendingHeading)) {\n this.setActiveId(this.pendingScrollTargetId);\n return;\n } else {\n this.pendingScrollTargetId = null;\n }\n }\n const lineY = this.activeLineY();\n let activeId = null;\n for (const heading of this.headings) {\n if (heading.getBoundingClientRect().top <= lineY) {\n activeId = heading.id;\n } else {\n break;\n }\n }\n this.setActiveId(activeId ?? this.headings[0].id);\n }\n setActiveId(id) {\n if (this.activeId === id) {\n return;\n }\n this.activeId = id;\n }\n findHeadingById(id) {\n return this.headings.find(heading => heading.id === id) ?? null;\n }\n hasPendingScrollReachedTarget(heading) {\n return heading.getBoundingClientRect().top <= this.activeLineY();\n }\n onLinkClick(event, id) {\n const mouseEvent = event;\n if (mouseEvent.metaKey || mouseEvent.ctrlKey || mouseEvent.shiftKey || mouseEvent.altKey || mouseEvent.button !== 0) {\n return;\n }\n const heading = this.findHeadingById(id);\n if (!heading) {\n return;\n }\n event.preventDefault();\n this.pendingScrollTargetId = id;\n this.setActiveId(id);\n this.scrollToHeading(id, heading);\n }\n scrollToHeading(id, heading) {\n const behavior = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : \"smooth\";\n window.history.replaceState(window.history.state, \"\", `${window.location.pathname}${window.location.search}#${id}`);\n scrollHeadingIntoView(heading, this.scrollRoot ?? window, this.resolvedScrollOffset(), behavior);\n }\n render() {\n if (this.entries.length === 0) {\n return null;\n }\n return /* @__PURE__ */jsxs(\"nav\", {\n class: \"rui-toc\",\n \"aria-label\": this.label,\n children: [this.label ? /* @__PURE__ */jsx(\"p\", {\n class: \"rui-toc__label\",\n children: this.label\n }) : null, /* @__PURE__ */jsx(\"ul\", {\n class: \"rui-toc__list\",\n children: this.entries.map(entry => /* @__PURE__ */jsx(\"li\", {\n class: entry.depth >= 3 ? \"rui-toc__item rui-toc__item--depth-3\" : \"rui-toc__item\",\n children: /* @__PURE__ */jsx(\"a\", {\n href: `#${entry.id}`,\n class: entry.id === this.activeId ? \"rui-toc__link rui-toc__link--active\" : \"rui-toc__link\",\n \"on:click\": event => this.onLinkClick(event, entry.id),\n children: entry.label\n })\n }))\n })]\n });\n }\n static {\n _initClass();\n }\n}\nexport { _RuiToc as RuiToc };", "export function parseCommaSeparated(value) {\n return value.split(\",\").map(name => name.trim()).filter(name => name.length > 0);\n}", "export function querySelectorSafe(root, selector) {\n try {\n return root.querySelector(selector);\n } catch {\n return null;\n }\n}\nexport function querySelectorAllSafe(root, selector) {\n try {\n return Array.from(root.querySelectorAll(selector));\n } catch {\n return [];\n }\n}\nexport function slugifyHeadingText(text) {\n return text.trim().toLowerCase().replace(/\\s+/g, \"-\").replace(/[^\\w-]/g, \"\");\n}\nexport function ensureUniqueHeadingId(heading, usedIds, isTaken = id => document.getElementById(id) !== null) {\n if (heading.id) {\n usedIds.add(heading.id);\n return heading.id;\n }\n const base = slugifyHeadingText(heading.textContent || \"\") || \"section\";\n let id = base;\n let suffix = 2;\n while (usedIds.has(id) || isTaken(id)) {\n id = `${base}-${suffix}`;\n suffix += 1;\n }\n heading.id = id;\n usedIds.add(id);\n return id;\n}\nexport function trackingLineY(scrollRoot, scrollOffset) {\n if (scrollRoot instanceof HTMLElement) {\n return scrollRoot.getBoundingClientRect().top + scrollOffset;\n }\n return scrollOffset;\n}\nexport function scrollHeadingIntoView(heading, scrollRoot, scrollOffset, behavior) {\n if (scrollRoot instanceof HTMLElement) {\n const rootRect = scrollRoot.getBoundingClientRect();\n const headingRect = heading.getBoundingClientRect();\n scrollRoot.scrollTo({\n top: scrollRoot.scrollTop + (headingRect.top - rootRect.top) - scrollOffset,\n behavior\n });\n return;\n }\n window.scrollTo({\n top: window.scrollY + heading.getBoundingClientRect().top - scrollOffset,\n behavior\n });\n}", "import { jsx } from \"@ecopages/jsx/jsx-runtime\";\nimport \"./toc.script\";\nexport function RuiToc({\n target,\n headingSelector,\n label,\n scrollOffset,\n navigationEvents,\n ...props\n}) {\n return /* @__PURE__ */jsx(\"rui-toc\", {\n ...props,\n \"prop:target\": target,\n \"prop:headingSelector\": headingSelector,\n \"prop:label\": label,\n \"prop:scrollOffset\": scrollOffset,\n \"prop:navigationEvents\": navigationEvents\n });\n}"],
5
+ "mappings": "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",
6
+ "names": ["jsx", "jsxs", "RadiantElement", "bound", "customElement", "onUpdated", "prop", "state", "isServer", "parseCommaSeparated", "value", "name", "querySelectorSafe", "root", "selector", "querySelectorAllSafe", "slugifyHeadingText", "text", "ensureUniqueHeadingId", "heading", "usedIds", "isTaken", "id", "base", "suffix", "trackingLineY", "scrollRoot", "scrollOffset", "scrollHeadingIntoView", "behavior", "rootRect", "headingRect", "_initProto", "_initClass", "_init_target", "_init_extra_target", "_init_headingSelector", "_init_extra_headingSelector", "_init_label", "_init_extra_label", "_init_scrollOffset", "_init_extra_scrollOffset", "_init_navigationEvents", "_init_extra_navigationEvents", "_init_entries", "_init_extra_entries", "_init_activeId", "_init_extra_activeId", "_applyDecs", "e", "n", "r", "o", "i", "a", "c", "u", "s", "f", "l", "p", "d", "m", "h", "y", "v", "g", "t", "b", "applyDec", "w", "D", "S", "j", "E", "I", "P", "k", "F", "_setFunctionName", "N", "O", "T", "z", "A", "H", "_toPropertyKey", "_checkInRHS", "_toPrimitive", "_RuiToc", "RuiToc", "RadiantElement", "customElement", "prop", "state", "onUpdated", "bound", "propValue", "attributeName", "fallback", "fromAttribute", "root", "headings", "querySelectorAllSafe", "usedIds", "entries", "heading", "ensureUniqueHeadingId", "selector", "querySelectorSafe", "from", "node", "overflowY", "level", "isServer", "handler", "eventName", "parseCommaSeparated", "cleanup", "onScroll", "scrollHeight", "viewport", "trackingLineY", "lastId", "pendingHeading", "lineY", "activeId", "id", "event", "mouseEvent", "behavior", "scrollHeadingIntoView", "jsxs", "jsx", "entry", "jsx", "RuiToc", "target", "headingSelector", "label", "scrollOffset", "navigationEvents", "props", "jsx"]
7
7
  }
@@ -34,6 +34,8 @@ rui-toc {
34
34
  }
35
35
  padding: 0px;
36
36
  padding-left: var(--spacing-3, var(--space-3));
37
+ --rui-docs-navigation-inset: var(--space-3);
38
+ padding-left: var(--rui-docs-navigation-inset);
37
39
  }
38
40
  .rui-toc__item + .rui-toc__item {
39
41
  margin-top: var(--spacing-2, var(--space-2));
@@ -72,6 +74,7 @@ rui-toc {
72
74
  border-top-right-radius: var(--radius-sm, var(--border-radius-sm));
73
75
  border-bottom-right-radius: var(--radius-sm, var(--border-radius-sm));
74
76
  background-color: var(--color-primary, var(--primary));
77
+ left: calc(-1 * (var(--rui-docs-navigation-inset) + 1px));
75
78
  }
76
79
  .rui-toc__item--depth-3 .rui-toc__link {
77
80
  margin-left: var(--spacing-3, var(--space-3));
@@ -1,4 +1,5 @@
1
1
  import type { JsxHtmlProps } from '@ecopages/jsx';
2
2
  import type { RuiTocProps } from './toc.script';
3
+ import './toc.script';
3
4
  export type RuiTocViewProps = JsxHtmlProps<RuiTocProps>;
4
- export declare const RuiToc: import("@/lib/radiant-view").RadiantViewComponent<RuiTocViewProps>;
5
+ export declare function RuiToc({ target, headingSelector, label, scrollOffset, navigationEvents, ...props }: RuiTocViewProps): import("@ecopages/jsx").JsxRenderable;
@@ -31,6 +31,18 @@ type RuiTocBindings = {
31
31
  * active-section tracking correctly.
32
32
  *
33
33
  * @element rui-toc
34
+ * @attr {string} target - CSS selector for the content root that contains headings. Default: the parent element.
35
+ * @attr {string} heading-selector - Selector for headings to include. Default: `h2,h3`.
36
+ * @attr {string} label - Visible label above the link list. Default: `On this page`.
37
+ * @attr {number} scroll-offset - Pixel offset from the viewport top when tracking the active section. Default: `120`.
38
+ * @attr {string} navigation-events - Extra document event names (comma-separated) that trigger a rebuild, e.g. `eco:page-load,eco:after-swap`.
39
+ * @cssclass rui-toc - Root `nav` landmark.
40
+ * @cssclass rui-toc__label - Section label above the list.
41
+ * @cssclass rui-toc__list - Link list.
42
+ * @cssclass rui-toc__item - List item.
43
+ * @cssclass rui-toc__item--depth-3 - Indented item for `h3` headings.
44
+ * @cssclass rui-toc__link - Heading jump link.
45
+ * @cssclass rui-toc__link--active - Link for the section currently in view.
34
46
  */
35
47
  export declare class RuiToc extends RadiantElement<RuiTocBindings> {
36
48
  target: string;
@@ -47,11 +59,14 @@ export declare class RuiToc extends RadiantElement<RuiTocBindings> {
47
59
  private pendingScrollTargetId;
48
60
  private scrollRafPending;
49
61
  private readonly scrollOffsetTolerance;
62
+ private readConfiguredProp;
63
+ private readConfiguredNumber;
50
64
  connectedCallback(): void;
51
65
  disconnectedCallback(): void;
52
66
  onScanSettingsUpdated(): void;
53
67
  private rebuild;
54
68
  private resolveTarget;
69
+ private resolvedScrollOffset;
55
70
  /**
56
71
  * Nearest ancestor (including the target) that scrolls vertically, else `window`.
57
72
  */
@@ -1,2 +1,2 @@
1
- import{jsx as pt}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as bt,customElement as St,onEvent as gt,prop as ht}from"@ecopages/radiant";var Tt="a[href], button, input, select, textarea, [tabindex]";function ot(t){return Array.from(t.querySelectorAll(Tt)).filter(e=>!e.hasAttribute("disabled"))}function F(t,e){t.forEach((r,s)=>{r.tabIndex=s===e?0:-1})}function wt(t,e){if(!t.length)return null;let r=Math.max(0,Math.min(t.length-1,e));return F(t,r),t[r]?.focus(),t[r]??null}function At(t,e){return t==="Home"?"first":t==="End"?"last":e==="horizontal"?t==="ArrowRight"?"next":t==="ArrowLeft"?"prev":null:t==="ArrowDown"?"next":t==="ArrowUp"?"prev":null}function it(t){let{items:e,current:r,key:s,orientation:v="horizontal",wrap:R=!0}=t;if(!e.length||!r)return{handled:!1};let c=e.indexOf(r);if(c<0)return{handled:!1};let i=At(s,v);if(!i)return{handled:!1};let b=c;i==="first"?b=0:i==="last"?b=e.length-1:i==="next"?b=R?(c+1)%e.length:Math.min(e.length-1,c+1):b=R?(c-1+e.length)%e.length:Math.max(0,c-1);let A=wt(e,b);return A?{handled:!0,index:b,item:A}:{handled:!1}}var at,st,lt,ut,ct,ft;function Et(t,e,r,s,v,R){var c,i,b,A,D,L,_,X=Symbol.metadata||Symbol.for("Symbol.metadata"),$=Object.defineProperty,q=Object.create,G=[q(null),q(null)],J=e.length;function C(n,g,d){return function(o,a){g&&(a=o,o=t);for(var h=0;h<n.length;h++)a=n[h].apply(o,d?[a]:[]);return d?a:o}}function x(n,g,d,o){if(typeof n!="function"&&(o||n!==void 0))throw new TypeError(g+" must "+(d||"be")+" a function"+(o?"":" or undefined"));return n}function Q(n,g,d,o,a,h,w,p,m,y,Z){function B(u){if(!Z(u))throw new TypeError("Attempted to access private element on non-instance")}var z=[].concat(g[0]),H=g[3],K=!w,I=a===1,P=a===3,N=a===4,j=a===2;function M(u,E,rt){return function(O,nt){return E&&(nt=O,O=n),rt&&rt(O),l[u].call(O,nt)}}if(!K){var l={},U=[],T=P?"get":N||I?"set":"value";if(m?(y||I?l={get:dt(function(){return H(this)},o,"get"),set:function(u){g[4](this,u)}}:l[T]=H,y||dt(l[T],o,j?"":T)):y||(l=Object.getOwnPropertyDescriptor(n,o)),!y&&!m){if((i=G[+p][o])&&(i^a)!==7)throw Error("Decorating two elements with the same name ("+l[T].name+") is not supported yet");G[+p][o]=a<3?1:a}}for(var f=n,k=z.length-1;k>=0;k-=d?2:1){var tt=x(z[k],"A decorator","be",!0),et=d?z[k-1]:void 0,W={},S={kind:["field","accessor","method","getter","setter","class"][a],name:o,metadata:c,addInitializer:function(u,E){if(u.v)throw new TypeError("attempted to call addInitializer after decoration was finished");x(E,"An initializer","be",!0),h.push(E)}.bind(null,W)};if(K)i=tt.call(et,f,S),W.v=1,x(i,"class decorators","return")&&(f=i);else if(S.static=p,S.private=m,i=S.access={has:m?Z.bind():function(u){return o in u}},N||(i.get=m?j?function(u){return B(u),l.value}:M("get",0,B):function(u){return u[o]}),j||P||(i.set=m?M("set",0,B):function(u,E){u[o]=E}),f=tt.call(et,I?{get:l.get,set:l.set}:l[T],S),W.v=1,I){if(typeof f=="object"&&f)(i=x(f.get,"accessor.get"))&&(l.get=i),(i=x(f.set,"accessor.set"))&&(l.set=i),(i=x(f.init,"accessor.init"))&&U.unshift(i);else if(f!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else x(f,(y?"field":"method")+" decorators","return")&&(y?U.unshift(f):l[T]=f)}return a<2&&w.push(C(U,p,1),C(h,p,0)),y||K||(m?I?w.splice(-1,0,M("get",p),M("set",p)):w.push(j?l[T]:x.call.bind(l[T])):$(n,o,l)),f}function Y(n){return $(n,X,{configurable:!0,enumerable:!0,value:c})}return R!==void 0&&(c=R[X]),c=q(c??null),D=[],L=function(n){n&&D.push(C(n))},_=function(n,g){for(var d=0;d<r.length;d++){var o=r[d],a=o[1],h=7&a;if((8&a)==n&&!h==g){var w=o[2],p=!!o[3],m=16&a;Q(n?t:t.prototype,o,m,p?"#"+w:Rt(w),h,h<2?[]:n?A=A||[]:b=b||[],D,!!n,p,g,n&&p?function(y){return It(y)===t}:v)}}},_(8,0),_(0,0),_(8,1),_(0,1),L(b),L(A),i=D,J||Y(t),{e:i,get c(){var n=[];return J&&[Y(t=Q(t,[e],s,t.name,5,n)),C(n,1)]}}}function Rt(t){var e=_t(t,"string");return typeof e=="symbol"?e:e+""}function _t(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var s=r.call(t,e||"default");if(typeof s!="object")return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function dt(t,e,r){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(t,"name",{configurable:!0,value:r?r+" "+e:e})}catch{}return t}function It(t){if(Object(t)!==t)throw TypeError("right-hand side of 'in' should be an object, got "+(t!==null?typeof t:"null"));return t}var V,mt=class extends bt{static{({e:[lt,ut,ct,ft,at],c:[V,st]}=Et(this,[St("rui-toolbar")],[[ht({type:String,defaultValue:""}),0,"label"],[ht({type:Boolean,reflect:!0,defaultValue:!1}),0,"exclusiveToggles"],[gt({type:"keydown",selector:"button, a[href], input, select, [tabindex]"}),2,"onKeydown"],[gt({type:"click",selector:"button[data-toggle][aria-pressed]",options:{capture:!0}}),2,"onToggleButtonClick"]],0,void 0,bt))}label=(at(this),lt(this));exclusiveToggles=(ut(this),ct(this));resolvedAriaLabel=(ft(this),this.$.label.map(e=>e||void 0));getItems(){return ot(this)}connectedCallback(){super.connectedCallback(),queueMicrotask(()=>F(this.getItems(),0))}onKeydown(e){let r=this.getItems(),s=e.target.closest("button, a[href], input, select, [tabindex]");it({items:r,current:s,key:e.key,orientation:"horizontal"}).handled&&e.preventDefault()}getToggleButtons(){return Array.from(this.querySelectorAll("button[data-toggle][aria-pressed]")).filter(e=>!e.disabled)}onToggleButtonClick(e){let r=e.target.closest("button[data-toggle][aria-pressed]");if(!r||r.disabled)return;e.stopImmediatePropagation();let s=r.getAttribute("aria-pressed")==="true";if(this.exclusiveToggles){for(let v of this.getToggleButtons())v.setAttribute("aria-pressed","false");s||r.setAttribute("aria-pressed","true");return}r.setAttribute("aria-pressed",String(!s))}render(){return pt("div",{class:"rui-toolbar",role:"toolbar","aria-label":this.resolvedAriaLabel,children:pt("slot",{})})}static{st()}};import{jsx as jt}from"@ecopages/jsx/jsx-runtime";var Dt=Symbol.for("@ecopages/storybook-radiant.viewElement"),yt=Symbol.for("@ecopages/storybook-radiant.scriptModule"),vt=Symbol.for("@ecopages/storybook-radiant.scriptExport");function Ct(t,e){t[Dt]=e;let r=e[yt];r&&(t[yt]=r,t[vt]=e[vt]??e.name)}function xt(t,e,r){let s=v=>e(v);return Ct(s,t),s}var Mt=xt(V,({children:t,...e})=>jt("rui-toolbar",{...e,children:t}),{stylesheets:["./toolbar.css"]});export{Mt as RuiToolbar,V as RuiToolbarElement};
1
+ import{jsx as dt}from"@ecopages/jsx/jsx-runtime";import{RadiantElement as pt,customElement as Et,onEvent as gt,prop as bt}from"@ecopages/radiant";var vt="a[href], button, input, select, textarea, [tabindex]";function nt(t){return Array.from(t.querySelectorAll(vt)).filter(e=>!e.hasAttribute("disabled"))}function F(t,e){t.forEach((r,u)=>{r.tabIndex=u===e?0:-1})}function yt(t,e){if(!t.length)return null;let r=Math.max(0,Math.min(t.length-1,e));return F(t,r),t[r]?.focus(),t[r]??null}function xt(t,e){return t==="Home"?"first":t==="End"?"last":e==="horizontal"?t==="ArrowRight"?"next":t==="ArrowLeft"?"prev":null:t==="ArrowDown"?"next":t==="ArrowUp"?"prev":null}function it(t){let{items:e,current:r,key:u,orientation:T="horizontal",wrap:E=!0}=t;if(!e.length||!r)return{handled:!1};let c=e.indexOf(r);if(c<0)return{handled:!1};let o=xt(u,T);if(!o)return{handled:!1};let g=c;o==="first"?g=0:o==="last"?g=e.length-1:o==="next"?g=E?(c+1)%e.length:Math.min(e.length-1,c+1):g=E?(c-1+e.length)%e.length:Math.max(0,c-1);let A=yt(e,g);return A?{handled:!0,index:g,item:A}:{handled:!1}}var ot,at,lt,st,ut,ct;function wt(t,e,r,u,T,E){var c,o,g,A,I,k,R,$=Symbol.metadata||Symbol.for("Symbol.metadata"),G=Object.defineProperty,z=Object.create,J=[z(null),z(null)],Q=e.length;function C(n,b,d){return function(i,a){b&&(a=i,i=t);for(var h=0;h<n.length;h++)a=n[h].apply(i,d?[a]:[]);return d?a:i}}function y(n,b,d,i){if(typeof n!="function"&&(i||n!==void 0))throw new TypeError(b+" must "+(d||"be")+" a function"+(i?"":" or undefined"));return n}function W(n,b,d,i,a,h,w,p,m,v,Y){function L(s){if(!Y(s))throw new TypeError("Attempted to access private element on non-instance")}var M=[].concat(b[0]),Z=b[3],K=!w,S=a===1,H=a===3,P=a===4,D=a===2;function q(s,_,et){return function(O,rt){return _&&(rt=O,O=n),et&&et(O),l[s].call(O,rt)}}if(!K){var l={},V=[],x=H?"get":P||S?"set":"value";if(m?(v||S?l={get:ft(function(){return Z(this)},i,"get"),set:function(s){b[4](this,s)}}:l[x]=Z,v||ft(l[x],i,D?"":x)):v||(l=Object.getOwnPropertyDescriptor(n,i)),!v&&!m){if((o=J[+p][i])&&(o^a)!==7)throw Error("Decorating two elements with the same name ("+l[x].name+") is not supported yet");J[+p][i]=a<3?1:a}}for(var f=n,B=M.length-1;B>=0;B-=d?2:1){var N=y(M[B],"A decorator","be",!0),tt=d?M[B-1]:void 0,U={},j={kind:["field","accessor","method","getter","setter","class"][a],name:i,metadata:c,addInitializer:function(s,_){if(s.v)throw new TypeError("attempted to call addInitializer after decoration was finished");y(_,"An initializer","be",!0),h.push(_)}.bind(null,U)};if(K)o=N.call(tt,f,j),U.v=1,y(o,"class decorators","return")&&(f=o);else if(j.static=p,j.private=m,o=j.access={has:m?Y.bind():function(s){return i in s}},P||(o.get=m?D?function(s){return L(s),l.value}:q("get",0,L):function(s){return s[i]}),D||H||(o.set=m?q("set",0,L):function(s,_){s[i]=_}),f=N.call(tt,S?{get:l.get,set:l.set}:l[x],j),U.v=1,S){if(typeof f=="object"&&f)(o=y(f.get,"accessor.get"))&&(l.get=o),(o=y(f.set,"accessor.set"))&&(l.set=o),(o=y(f.init,"accessor.init"))&&V.unshift(o);else if(f!==void 0)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else y(f,(v?"field":"method")+" decorators","return")&&(v?V.unshift(f):l[x]=f)}return a<2&&w.push(C(V,p,1),C(h,p,0)),v||K||(m?S?w.splice(-1,0,q("get",p),q("set",p)):w.push(D?l[x]:y.call.bind(l[x])):G(n,i,l)),f}function X(n){return G(n,$,{configurable:!0,enumerable:!0,value:c})}return E!==void 0&&(c=E[$]),c=z(c??null),I=[],k=function(n){n&&I.push(C(n))},R=function(n,b){for(var d=0;d<r.length;d++){var i=r[d],a=i[1],h=7&a;if((8&a)==n&&!h==b){var w=i[2],p=!!i[3],m=16&a;W(n?t:t.prototype,i,m,p?"#"+w:Tt(w),h,h<2?[]:n?A=A||[]:g=g||[],I,!!n,p,b,n&&p?function(v){return _t(v)===t}:T)}}},R(8,0),R(0,0),R(8,1),R(0,1),k(g),k(A),o=I,Q||X(t),{e:o,get c(){var n=[];return Q&&[X(t=W(t,[e],u,t.name,5,n)),C(n,1)]}}}function Tt(t){var e=At(t,"string");return typeof e=="symbol"?e:e+""}function At(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var u=r.call(t,e||"default");if(typeof u!="object")return u;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function ft(t,e,r){typeof e=="symbol"&&(e=(e=e.description)?"["+e+"]":"");try{Object.defineProperty(t,"name",{configurable:!0,value:r?r+" "+e:e})}catch{}return t}function _t(t){if(Object(t)!==t)throw TypeError("right-hand side of 'in' should be an object, got "+(t!==null?typeof t:"null"));return t}var mt,ht=class extends pt{static{({e:[lt,st,ut,ct,ot],c:[mt,at]}=wt(this,[Et("rui-toolbar")],[[bt({type:String,defaultValue:""}),0,"label"],[bt({type:Boolean,reflect:!0,defaultValue:!1}),0,"exclusiveToggles"],[gt({type:"keydown",selector:"button, a[href], input, select, [tabindex]"}),2,"onKeydown"],[gt({type:"click",selector:"button[data-toggle][aria-pressed]",options:{capture:!0}}),2,"onToggleButtonClick"]],0,void 0,pt))}label=(ot(this),lt(this));exclusiveToggles=(st(this),ut(this));resolvedAriaLabel=(ct(this),this.$.label.map(e=>e||void 0));getItems(){return nt(this)}connectedCallback(){super.connectedCallback(),queueMicrotask(()=>F(this.getItems(),0))}onKeydown(e){let r=this.getItems(),u=e.target.closest("button, a[href], input, select, [tabindex]");it({items:r,current:u,key:e.key,orientation:"horizontal"}).handled&&e.preventDefault()}getToggleButtons(){return Array.from(this.querySelectorAll("button[data-toggle][aria-pressed]")).filter(e=>!e.disabled)}onToggleButtonClick(e){let r=e.target.closest("button[data-toggle][aria-pressed]");if(!r||r.disabled)return;e.stopImmediatePropagation();let u=r.getAttribute("aria-pressed")==="true";if(this.exclusiveToggles){for(let T of this.getToggleButtons())T.setAttribute("aria-pressed","false");u||r.setAttribute("aria-pressed","true");return}r.setAttribute("aria-pressed",String(!u))}render(){return dt("div",{class:"rui-toolbar",role:"toolbar","aria-label":this.resolvedAriaLabel,children:dt("slot",{})})}static{at()}};import{jsx as Rt}from"@ecopages/jsx/jsx-runtime";function St({children:t,...e}){return Rt("rui-toolbar",{...e,children:t})}export{St as RuiToolbar,mt as RuiToolbarElement};
2
2
  //# sourceMappingURL=index.js.map