@gunkin/uiify 0.0.14-alpha → 0.0.16-alpha

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 (165) hide show
  1. package/README.md +46 -1
  2. package/agents/components.md +80 -0
  3. package/agents/index.md +179 -0
  4. package/agents/reference/components/accordion.md +35 -0
  5. package/agents/reference/components/alert-modal.md +63 -0
  6. package/agents/reference/components/breadcrumb.md +72 -0
  7. package/agents/reference/components/button.md +40 -0
  8. package/agents/reference/components/candle-chart.md +107 -0
  9. package/agents/reference/components/carousel.md +274 -0
  10. package/agents/reference/components/checkbox.md +32 -0
  11. package/agents/reference/components/collapsible.md +26 -0
  12. package/agents/reference/components/color-picker.md +33 -0
  13. package/agents/reference/components/combobox.md +193 -0
  14. package/agents/reference/components/context-menu.md +129 -0
  15. package/agents/reference/components/drawer.md +215 -0
  16. package/agents/reference/components/dropdown-menu.md +178 -0
  17. package/agents/reference/components/field.md +76 -0
  18. package/agents/reference/components/file-upload.md +131 -0
  19. package/agents/reference/components/form.md +28 -0
  20. package/agents/reference/components/header.md +44 -0
  21. package/agents/reference/components/hover-card.md +54 -0
  22. package/agents/reference/components/input.md +29 -0
  23. package/agents/reference/components/line-chart.md +104 -0
  24. package/agents/reference/components/modal.md +106 -0
  25. package/agents/reference/components/number-field.md +60 -0
  26. package/agents/reference/components/otp-input.md +68 -0
  27. package/agents/reference/components/pagination.md +112 -0
  28. package/agents/reference/components/popup.md +111 -0
  29. package/agents/reference/components/radio-group.md +37 -0
  30. package/agents/reference/components/rating.md +43 -0
  31. package/agents/reference/components/segmented-control.md +51 -0
  32. package/agents/reference/components/select.md +60 -0
  33. package/agents/reference/components/skeleton.md +29 -0
  34. package/agents/reference/components/slider.md +71 -0
  35. package/agents/reference/components/spinner.md +34 -0
  36. package/agents/reference/components/switch.md +27 -0
  37. package/agents/reference/components/table-of-contents.md +185 -0
  38. package/agents/reference/components/table.md +189 -0
  39. package/agents/reference/components/tabs.md +42 -0
  40. package/agents/reference/components/tags-input.md +123 -0
  41. package/agents/reference/components/textarea.md +31 -0
  42. package/agents/reference/components/toast.md +151 -0
  43. package/agents/reference/components/toggle-group.md +50 -0
  44. package/agents/reference/components/toggle.md +26 -0
  45. package/agents/reference/components/toolbar.md +69 -0
  46. package/agents/reference/components/tooltip.md +76 -0
  47. package/agents/reference/components/virtual-scroll.md +97 -0
  48. package/agents/reference/elements/choice.md +55 -0
  49. package/agents/reference/elements/details.md +45 -0
  50. package/agents/reference/elements/dialog.md +43 -0
  51. package/agents/reference/elements/invoker.md +28 -0
  52. package/agents/reference/elements/popover.md +53 -0
  53. package/dist/components/alert-modal/AlertModalParts.js +1 -1
  54. package/dist/components/alert-modal/AlertModalParts.js.map +1 -1
  55. package/dist/components/button/Button.d.ts.map +1 -1
  56. package/dist/components/button/Button.js +5 -3
  57. package/dist/components/button/Button.js.map +1 -1
  58. package/dist/components/button/index.d.ts +1 -1
  59. package/dist/components/button/index.d.ts.map +1 -1
  60. package/dist/components/button/index.js.map +1 -1
  61. package/dist/components/button/types.d.ts +5 -4
  62. package/dist/components/button/types.d.ts.map +1 -1
  63. package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
  64. package/dist/components/carousel/CarouselMarkup.js +8 -0
  65. package/dist/components/carousel/CarouselMarkup.js.map +1 -1
  66. package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
  67. package/dist/components/dropdown-menu/DropdownMenu.js +0 -2
  68. package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
  69. package/dist/components/dropdown-menu/types.d.ts +0 -1
  70. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  71. package/dist/components/index.d.ts +1 -0
  72. package/dist/components/index.d.ts.map +1 -1
  73. package/dist/components/index.js +1 -0
  74. package/dist/components/index.js.map +1 -1
  75. package/dist/components/internal/choice-family/ChoiceGroup.d.ts.map +1 -1
  76. package/dist/components/internal/choice-family/ChoiceGroup.js +2 -3
  77. package/dist/components/internal/choice-family/ChoiceGroup.js.map +1 -1
  78. package/dist/components/internal/choice-family/types.d.ts +2 -2
  79. package/dist/components/internal/choice-family/types.d.ts.map +1 -1
  80. package/dist/components/pagination/Pagination.d.ts.map +1 -1
  81. package/dist/components/pagination/Pagination.js +11 -0
  82. package/dist/components/pagination/Pagination.js.map +1 -1
  83. package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
  84. package/dist/components/pagination/PaginationShell.js +26 -1
  85. package/dist/components/pagination/PaginationShell.js.map +1 -1
  86. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -1
  87. package/dist/components/segmented-control/SegmentedControl.js +1 -0
  88. package/dist/components/segmented-control/SegmentedControl.js.map +1 -1
  89. package/dist/components/segmented-control/client/SegmentedControlClient.d.ts.map +1 -1
  90. package/dist/components/segmented-control/client/SegmentedControlClient.js +1 -0
  91. package/dist/components/segmented-control/client/SegmentedControlClient.js.map +1 -1
  92. package/dist/components/table-of-contents/TableOfContents.d.ts +22 -0
  93. package/dist/components/table-of-contents/TableOfContents.d.ts.map +1 -0
  94. package/dist/components/table-of-contents/TableOfContents.js +142 -0
  95. package/dist/components/table-of-contents/TableOfContents.js.map +1 -0
  96. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts +18 -0
  97. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts.map +1 -0
  98. package/dist/components/table-of-contents/client/TableOfContentsClient.js +140 -0
  99. package/dist/components/table-of-contents/client/TableOfContentsClient.js.map +1 -0
  100. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts +7 -0
  101. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts.map +1 -0
  102. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js +48 -0
  103. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js.map +1 -0
  104. package/dist/components/table-of-contents/client/index.d.ts +5 -0
  105. package/dist/components/table-of-contents/client/index.d.ts.map +1 -0
  106. package/dist/components/table-of-contents/client/index.js +23 -0
  107. package/dist/components/table-of-contents/client/index.js.map +1 -0
  108. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts +3 -0
  109. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts.map +1 -0
  110. package/dist/components/table-of-contents/client/table-of-contents-context.js +7 -0
  111. package/dist/components/table-of-contents/client/table-of-contents-context.js.map +1 -0
  112. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts +3 -0
  113. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts.map +1 -0
  114. package/dist/components/table-of-contents/client/table-of-contents-interactions.js +144 -0
  115. package/dist/components/table-of-contents/client/table-of-contents-interactions.js.map +1 -0
  116. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts +3 -0
  117. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts.map +1 -0
  118. package/dist/components/table-of-contents/client/table-of-contents-pointer.js +94 -0
  119. package/dist/components/table-of-contents/client/table-of-contents-pointer.js.map +1 -0
  120. package/dist/components/table-of-contents/client.d.ts +1 -0
  121. package/dist/components/table-of-contents/client.js +1 -0
  122. package/dist/components/table-of-contents/index.d.ts +3 -0
  123. package/dist/components/table-of-contents/index.d.ts.map +1 -0
  124. package/dist/components/table-of-contents/index.js +21 -0
  125. package/dist/components/table-of-contents/index.js.map +1 -0
  126. package/dist/components/table-of-contents/scrollspy-selection.d.ts +4 -0
  127. package/dist/components/table-of-contents/scrollspy-selection.d.ts.map +1 -0
  128. package/dist/components/table-of-contents/scrollspy-selection.js +31 -0
  129. package/dist/components/table-of-contents/scrollspy-selection.js.map +1 -0
  130. package/dist/components/table-of-contents/scrollspy.d.ts +4 -0
  131. package/dist/components/table-of-contents/scrollspy.d.ts.map +1 -0
  132. package/dist/components/table-of-contents/scrollspy.js +178 -0
  133. package/dist/components/table-of-contents/scrollspy.js.map +1 -0
  134. package/dist/components/table-of-contents/types.d.ts +123 -0
  135. package/dist/components/table-of-contents/types.d.ts.map +1 -0
  136. package/dist/components/table-of-contents/types.js +1 -0
  137. package/dist/components/table-of-contents/types.js.map +1 -0
  138. package/dist/components/table-of-contents.d.ts +1 -0
  139. package/dist/components/table-of-contents.js +1 -0
  140. package/dist/components/toggle/Toggle.d.ts.map +1 -1
  141. package/dist/components/toggle/Toggle.js +12 -1
  142. package/dist/components/toggle/Toggle.js.map +1 -1
  143. package/dist/components/toggle-group/ToggleGroup.d.ts +1 -1
  144. package/dist/components/toggle-group/ToggleGroup.d.ts.map +1 -1
  145. package/dist/components/toggle-group/ToggleGroup.js +6 -1
  146. package/dist/components/toggle-group/ToggleGroup.js.map +1 -1
  147. package/dist/components/toggle-group/client/ToggleGroupClient.d.ts +1 -1
  148. package/dist/components/toggle-group/client/ToggleGroupClient.d.ts.map +1 -1
  149. package/dist/components/toggle-group/client/ToggleGroupClient.js +19 -6
  150. package/dist/components/toggle-group/client/ToggleGroupClient.js.map +1 -1
  151. package/dist/components/toggle-group/types.d.ts +3 -3
  152. package/dist/components/toggle-group/types.d.ts.map +1 -1
  153. package/dist/components/toolbar/ToolbarShell.d.ts.map +1 -1
  154. package/dist/components/toolbar/ToolbarShell.js +5 -2
  155. package/dist/components/toolbar/ToolbarShell.js.map +1 -1
  156. package/dist/components/toolbar/types.d.ts +2 -1
  157. package/dist/components/toolbar/types.d.ts.map +1 -1
  158. package/dist/core/render-native-invoker.d.ts +1 -1
  159. package/dist/core/render-native-invoker.d.ts.map +1 -1
  160. package/dist/core/render-native-invoker.js.map +1 -1
  161. package/dist/styles/index.css +1 -1
  162. package/package.json +4 -2
  163. package/skills/uiify/SKILL.md +167 -0
  164. package/skills/uiify/scripts/lint.mjs +56 -0
  165. package/skills/uiify/scripts/static.mjs +95 -0
@@ -0,0 +1,144 @@
1
+ import { resolveTableOfContentsId } from "../scrollspy-selection.js";
2
+ function attachTableOfContentsInteractions({
3
+ root,
4
+ getOpen,
5
+ requestOpen,
6
+ controlled,
7
+ openOnHover,
8
+ openDelay,
9
+ closeDelay
10
+ }) {
11
+ const doc = root.ownerDocument, view = doc.defaultView;
12
+ const part = (name) => [...root.querySelectorAll(`[data-part="${name}"]`)].find(
13
+ (node) => node.closest("[data-uiify-table-of-contents]") === root
14
+ ) ?? null;
15
+ const panel = () => part("content");
16
+ const trigger = () => part("trigger");
17
+ const within = (node) => node instanceof view.Node && (panel()?.contains(node) || trigger()?.contains(node));
18
+ let timer = 0, toggleTimer = 0, pinned = false, transient = false, suppressed = false, returnFocus = false, navigating = false, destroyed = false;
19
+ const clear = () => {
20
+ view.clearTimeout(timer);
21
+ timer = 0;
22
+ };
23
+ const focused = () => panel()?.contains(doc.activeElement);
24
+ const enter = (event) => {
25
+ const pointer = event;
26
+ if (pointer.pointerType !== "mouse" || !within(pointer.target) || within(pointer.relatedTarget))
27
+ return;
28
+ clear();
29
+ if (!openOnHover || suppressed || getOpen()) return;
30
+ timer = view.setTimeout(() => {
31
+ timer = 0;
32
+ transient = true;
33
+ requestOpen(true);
34
+ }, openDelay);
35
+ };
36
+ const leave = (event) => {
37
+ if (within(event.relatedTarget)) return;
38
+ suppressed = false;
39
+ clear();
40
+ if (transient && !pinned && !focused())
41
+ timer = view.setTimeout(() => {
42
+ timer = 0;
43
+ transient = false;
44
+ requestOpen(false);
45
+ }, closeDelay);
46
+ };
47
+ const focus = () => clear();
48
+ const blur = (event) => {
49
+ if (!root.contains(event.relatedTarget) && transient && !pinned) {
50
+ clear();
51
+ timer = view.setTimeout(() => requestOpen(false), closeDelay);
52
+ }
53
+ };
54
+ const before = (event) => {
55
+ if (event.target !== panel()) return;
56
+ const next = event.newState === "open";
57
+ if (!next) {
58
+ returnFocus = !navigating && (focused() ?? false);
59
+ navigating = false;
60
+ clear();
61
+ transient = false;
62
+ pinned = false;
63
+ suppressed = true;
64
+ }
65
+ if (next !== getOpen()) {
66
+ requestOpen(next);
67
+ if (controlled && event.cancelable) event.preventDefault();
68
+ }
69
+ view.clearTimeout(toggleTimer);
70
+ toggleTimer = view.setTimeout(() => {
71
+ const surface = panel();
72
+ if (destroyed || !surface?.isConnected) return;
73
+ const actual = surface.matches(":popover-open");
74
+ if (controlled && actual !== getOpen()) {
75
+ if (getOpen()) surface.showPopover();
76
+ else surface.hidePopover();
77
+ } else if (!actual && returnFocus) {
78
+ returnFocus = false;
79
+ trigger()?.focus({ preventScroll: true });
80
+ }
81
+ }, 0);
82
+ };
83
+ root.addEventListener("pointerover", enter);
84
+ root.addEventListener("pointerout", leave);
85
+ root.addEventListener("focusin", focus);
86
+ root.addEventListener("focusout", blur);
87
+ root.addEventListener("beforetoggle", before, true);
88
+ return {
89
+ click(event) {
90
+ if (event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey)
91
+ return;
92
+ const element = event.target.closest(
93
+ '[data-part="trigger"], [data-part="link"]'
94
+ );
95
+ if (!element || element.closest("[data-uiify-table-of-contents]") !== root) return;
96
+ if (element === trigger()) {
97
+ event.preventDefault();
98
+ clear();
99
+ const rail = event.target.closest('[data-part="rail"]');
100
+ const indicator = event.target.closest('[data-part="indicator"]') ?? rail?.querySelector('[data-part="indicator"][data-highlighted]');
101
+ const id = indicator?.getAttribute("data-uiify-toc-value");
102
+ if (rail && id && event.detail > 0 && event.pointerType !== "touch") {
103
+ const link = [...root.querySelectorAll('[data-part="link"]')].find(
104
+ (node) => node.closest("[data-uiify-table-of-contents]") === root && node.getAttribute("data-uiify-toc-value") === id
105
+ );
106
+ if (link) {
107
+ link.click();
108
+ return;
109
+ }
110
+ }
111
+ if (transient && getOpen()) {
112
+ transient = false;
113
+ pinned = true;
114
+ } else {
115
+ pinned = !getOpen();
116
+ transient = false;
117
+ suppressed = !pinned;
118
+ requestOpen(pinned);
119
+ }
120
+ } else if (!element.hasAttribute("download") && (!element.getAttribute("target") || element.getAttribute("target") === "_self") && resolveTableOfContentsId(element.getAttribute("href") ?? "", doc.URL) !== null) {
121
+ clear();
122
+ navigating = true;
123
+ pinned = false;
124
+ transient = false;
125
+ suppressed = true;
126
+ requestOpen(false);
127
+ }
128
+ },
129
+ destroy() {
130
+ destroyed = true;
131
+ clear();
132
+ view.clearTimeout(toggleTimer);
133
+ root.removeEventListener("pointerover", enter);
134
+ root.removeEventListener("pointerout", leave);
135
+ root.removeEventListener("focusin", focus);
136
+ root.removeEventListener("focusout", blur);
137
+ root.removeEventListener("beforetoggle", before, true);
138
+ }
139
+ };
140
+ }
141
+ export {
142
+ attachTableOfContentsInteractions
143
+ };
144
+ //# sourceMappingURL=table-of-contents-interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/table-of-contents-interactions.ts"],"sourcesContent":["import { resolveTableOfContentsId } from \"../scrollspy-selection.js\";\nimport type { TableOfContentsInteractionOptions, TableOfContentsInteractions } from \"../types.js\";\n\nexport function attachTableOfContentsInteractions({\n root,\n getOpen,\n requestOpen,\n controlled,\n openOnHover,\n openDelay,\n closeDelay,\n}: TableOfContentsInteractionOptions): TableOfContentsInteractions {\n const doc = root.ownerDocument,\n view = doc.defaultView!;\n const part = (name: string) =>\n [...root.querySelectorAll<HTMLElement>(`[data-part=\"${name}\"]`)].find(\n (node) => node.closest(\"[data-uiify-table-of-contents]\") === root,\n ) ?? null;\n const panel = () => part(\"content\");\n const trigger = () => part(\"trigger\");\n const within = (node: EventTarget | null) =>\n node instanceof view.Node && (panel()?.contains(node) || trigger()?.contains(node));\n let timer = 0,\n toggleTimer = 0,\n pinned = false,\n transient = false,\n suppressed = false,\n returnFocus = false,\n navigating = false,\n destroyed = false;\n const clear = () => {\n view.clearTimeout(timer);\n timer = 0;\n };\n const focused = () => panel()?.contains(doc.activeElement);\n const enter = (event: Event) => {\n const pointer = event as PointerEvent;\n if (pointer.pointerType !== \"mouse\" || !within(pointer.target) || within(pointer.relatedTarget))\n return;\n clear();\n if (!openOnHover || suppressed || getOpen()) return;\n timer = view.setTimeout(() => {\n timer = 0;\n transient = true;\n requestOpen(true);\n }, openDelay);\n };\n const leave = (event: Event) => {\n if (within((event as PointerEvent).relatedTarget)) return;\n suppressed = false;\n clear();\n if (transient && !pinned && !focused())\n timer = view.setTimeout(() => {\n timer = 0;\n transient = false;\n requestOpen(false);\n }, closeDelay);\n };\n const focus = () => clear();\n const blur = (event: Event) => {\n if (\n !root.contains((event as FocusEvent).relatedTarget as Node | null) &&\n transient &&\n !pinned\n ) {\n clear();\n timer = view.setTimeout(() => requestOpen(false), closeDelay);\n }\n };\n const before = (event: Event) => {\n if (event.target !== panel()) return;\n const next = (event as ToggleEvent).newState === \"open\";\n if (!next) {\n returnFocus = !navigating && (focused() ?? false);\n navigating = false;\n clear();\n transient = false;\n pinned = false;\n suppressed = true;\n }\n if (next !== getOpen()) {\n requestOpen(next);\n if (controlled && event.cancelable) event.preventDefault();\n }\n view.clearTimeout(toggleTimer);\n toggleTimer = view.setTimeout(() => {\n const surface = panel();\n if (destroyed || !surface?.isConnected) return;\n const actual = surface.matches(\":popover-open\");\n if (controlled && actual !== getOpen()) {\n if (getOpen()) surface.showPopover();\n else surface.hidePopover();\n } else if (!actual && returnFocus) {\n returnFocus = false;\n trigger()?.focus({ preventScroll: true });\n }\n }, 0);\n };\n root.addEventListener(\"pointerover\", enter);\n root.addEventListener(\"pointerout\", leave);\n root.addEventListener(\"focusin\", focus);\n root.addEventListener(\"focusout\", blur);\n root.addEventListener(\"beforetoggle\", before, true);\n return {\n click(event) {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey ||\n event.altKey\n )\n return;\n const element = (event.target as Element).closest(\n '[data-part=\"trigger\"], [data-part=\"link\"]',\n );\n if (!element || element.closest(\"[data-uiify-table-of-contents]\") !== root) return;\n if (element === trigger()) {\n event.preventDefault();\n clear();\n const rail = (event.target as Element).closest('[data-part=\"rail\"]');\n const indicator =\n (event.target as Element).closest('[data-part=\"indicator\"]') ??\n rail?.querySelector('[data-part=\"indicator\"][data-highlighted]');\n const id = indicator?.getAttribute(\"data-uiify-toc-value\");\n if (rail && id && event.detail > 0 && (event as PointerEvent).pointerType !== \"touch\") {\n const link = [...root.querySelectorAll<HTMLAnchorElement>('[data-part=\"link\"]')].find(\n (node) =>\n node.closest(\"[data-uiify-table-of-contents]\") === root &&\n node.getAttribute(\"data-uiify-toc-value\") === id,\n );\n if (link) {\n link.click();\n return;\n }\n }\n if (transient && getOpen()) {\n transient = false;\n pinned = true;\n } else {\n pinned = !getOpen();\n transient = false;\n suppressed = !pinned;\n requestOpen(pinned);\n }\n } else if (\n !element.hasAttribute(\"download\") &&\n (!element.getAttribute(\"target\") || element.getAttribute(\"target\") === \"_self\") &&\n resolveTableOfContentsId(element.getAttribute(\"href\") ?? \"\", doc.URL) !== null\n ) {\n clear();\n navigating = true;\n pinned = false;\n transient = false;\n suppressed = true;\n requestOpen(false);\n }\n },\n destroy() {\n destroyed = true;\n clear();\n view.clearTimeout(toggleTimer);\n root.removeEventListener(\"pointerover\", enter);\n root.removeEventListener(\"pointerout\", leave);\n root.removeEventListener(\"focusin\", focus);\n root.removeEventListener(\"focusout\", blur);\n root.removeEventListener(\"beforetoggle\", before, true);\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { TableOfContentsPointerOptions } from "../types.js";
2
+ export declare function attachTableOfContentsPointer({ root }: TableOfContentsPointerOptions): () => void;
3
+ //# sourceMappingURL=table-of-contents-pointer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents-pointer.d.ts","sourceRoot":"","sources":["../../../../src/components/table-of-contents/client/table-of-contents-pointer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEjE,wBAAgB,4BAA4B,CAAC,EAAE,IAAI,EAAE,EAAE,6BAA6B,GAAG,MAAM,IAAI,CA+FhG"}
@@ -0,0 +1,94 @@
1
+ function attachTableOfContentsPointer({ root }) {
2
+ const view = root.ownerDocument.defaultView;
3
+ const rail = root.querySelector('[data-part="rail"]');
4
+ if (!rail) return () => {
5
+ };
6
+ let nodes = [], centers = /* @__PURE__ */ new Map(), frame = 0, y = null;
7
+ const select = (id) => {
8
+ for (const node of root.querySelectorAll("[data-uiify-toc-value]"))
9
+ if (node.closest("[data-uiify-table-of-contents]") === root)
10
+ node.toggleAttribute(
11
+ "data-highlighted",
12
+ id !== null && node.getAttribute("data-uiify-toc-value") === id
13
+ );
14
+ };
15
+ const measure = () => {
16
+ observer.disconnect();
17
+ centers.clear();
18
+ nodes = [...rail.querySelectorAll('[data-part="indicator"]')];
19
+ nodes.forEach((node, index) => {
20
+ node.style.setProperty("--uiify-toc-index", String(index));
21
+ observer.observe(node);
22
+ });
23
+ };
24
+ const observer = new view.IntersectionObserver((entries) => {
25
+ for (const entry of entries)
26
+ centers.set(entry.target, entry.boundingClientRect.top + entry.boundingClientRect.height / 2);
27
+ });
28
+ const resize = new view.ResizeObserver(measure);
29
+ resize.observe(rail);
30
+ const mutations = new view.MutationObserver(measure);
31
+ mutations.observe(rail, { childList: true, subtree: true });
32
+ const reset = () => {
33
+ y = null;
34
+ rail.style.removeProperty("--uiify-toc-pointer");
35
+ select(null);
36
+ };
37
+ const move = (event) => {
38
+ if (event.pointerType !== "mouse") return;
39
+ y = event.clientY;
40
+ if (frame) return;
41
+ frame = view.requestAnimationFrame(() => {
42
+ frame = 0;
43
+ if (y === null || centers.size !== nodes.length || !nodes.length) return;
44
+ let index = 0;
45
+ for (let i = 1; i < nodes.length; i++) {
46
+ const previous = centers.get(nodes[i - 1]), next = centers.get(nodes[i]);
47
+ index = i - 1 + (y - previous) / (next - previous || 1);
48
+ if (y <= next) break;
49
+ }
50
+ rail.style.setProperty("--uiify-toc-pointer", String(index));
51
+ const nearest = nodes[Math.max(0, Math.min(nodes.length - 1, Math.round(index)))];
52
+ select(nearest?.getAttribute("data-uiify-toc-value") ?? null);
53
+ });
54
+ };
55
+ const highlight = (event) => {
56
+ const target = event.type.endsWith("out") ? event.relatedTarget : event.target;
57
+ const link = target instanceof view.Element ? target.closest('[data-part="link"]') : null;
58
+ const id = link?.closest("[data-uiify-table-of-contents]") === root ? link.getAttribute("data-uiify-toc-value") : null;
59
+ select(id);
60
+ };
61
+ rail.addEventListener("pointermove", move);
62
+ rail.addEventListener("pointerleave", reset);
63
+ root.addEventListener("pointerover", highlight);
64
+ root.addEventListener("focusin", highlight);
65
+ root.addEventListener("pointerout", highlight);
66
+ root.addEventListener("focusout", highlight);
67
+ const scroll = () => {
68
+ if (!frame)
69
+ frame = view.requestAnimationFrame(() => {
70
+ frame = 0;
71
+ measure();
72
+ });
73
+ };
74
+ view.addEventListener("scroll", scroll, true);
75
+ measure();
76
+ return () => {
77
+ observer.disconnect();
78
+ resize.disconnect();
79
+ mutations.disconnect();
80
+ if (frame) view.cancelAnimationFrame(frame);
81
+ rail.removeEventListener("pointermove", move);
82
+ rail.removeEventListener("pointerleave", reset);
83
+ root.removeEventListener("pointerover", highlight);
84
+ root.removeEventListener("focusin", highlight);
85
+ root.removeEventListener("pointerout", highlight);
86
+ root.removeEventListener("focusout", highlight);
87
+ view.removeEventListener("scroll", scroll, true);
88
+ reset();
89
+ };
90
+ }
91
+ export {
92
+ attachTableOfContentsPointer
93
+ };
94
+ //# sourceMappingURL=table-of-contents-pointer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/table-of-contents-pointer.ts"],"sourcesContent":["import type { TableOfContentsPointerOptions } from \"../types.js\";\n\nexport function attachTableOfContentsPointer({ root }: TableOfContentsPointerOptions): () => void {\n const view = root.ownerDocument.defaultView!;\n const rail = root.querySelector<HTMLElement>('[data-part=\"rail\"]');\n if (!rail) return () => {};\n let nodes: HTMLElement[] = [],\n centers = new Map<Element, number>(),\n frame = 0,\n y: number | null = null;\n const select = (id: string | null) => {\n for (const node of root.querySelectorAll(\"[data-uiify-toc-value]\"))\n if (node.closest(\"[data-uiify-table-of-contents]\") === root)\n node.toggleAttribute(\n \"data-highlighted\",\n id !== null && node.getAttribute(\"data-uiify-toc-value\") === id,\n );\n };\n const measure = () => {\n observer.disconnect();\n centers.clear();\n nodes = [...rail.querySelectorAll<HTMLElement>('[data-part=\"indicator\"]')];\n nodes.forEach((node, index) => {\n node.style.setProperty(\"--uiify-toc-index\", String(index));\n observer.observe(node);\n });\n };\n const observer = new view.IntersectionObserver((entries) => {\n for (const entry of entries)\n centers.set(entry.target, entry.boundingClientRect.top + entry.boundingClientRect.height / 2);\n });\n const resize = new view.ResizeObserver(measure);\n resize.observe(rail);\n const mutations = new view.MutationObserver(measure);\n mutations.observe(rail, { childList: true, subtree: true });\n const reset = () => {\n y = null;\n rail.style.removeProperty(\"--uiify-toc-pointer\");\n select(null);\n };\n const move = (event: PointerEvent) => {\n if (event.pointerType !== \"mouse\") return;\n y = event.clientY;\n if (frame) return;\n frame = view.requestAnimationFrame(() => {\n frame = 0;\n if (y === null || centers.size !== nodes.length || !nodes.length) return;\n let index = 0;\n for (let i = 1; i < nodes.length; i++) {\n const previous = centers.get(nodes[i - 1]!)!,\n next = centers.get(nodes[i]!)!;\n index = i - 1 + (y - previous) / (next - previous || 1);\n if (y <= next) break;\n }\n rail.style.setProperty(\"--uiify-toc-pointer\", String(index));\n const nearest = nodes[Math.max(0, Math.min(nodes.length - 1, Math.round(index)))];\n select(nearest?.getAttribute(\"data-uiify-toc-value\") ?? null);\n });\n };\n const highlight = (event: Event) => {\n const target = event.type.endsWith(\"out\") ? (event as FocusEvent).relatedTarget : event.target;\n const link = target instanceof view.Element ? target.closest('[data-part=\"link\"]') : null;\n const id =\n link?.closest(\"[data-uiify-table-of-contents]\") === root\n ? link.getAttribute(\"data-uiify-toc-value\")\n : null;\n select(id);\n };\n rail.addEventListener(\"pointermove\", move);\n rail.addEventListener(\"pointerleave\", reset);\n root.addEventListener(\"pointerover\", highlight);\n root.addEventListener(\"focusin\", highlight);\n root.addEventListener(\"pointerout\", highlight);\n root.addEventListener(\"focusout\", highlight);\n const scroll = () => {\n if (!frame)\n frame = view.requestAnimationFrame(() => {\n frame = 0;\n measure();\n });\n };\n view.addEventListener(\"scroll\", scroll, true);\n measure();\n return () => {\n observer.disconnect();\n resize.disconnect();\n mutations.disconnect();\n if (frame) view.cancelAnimationFrame(frame);\n rail.removeEventListener(\"pointermove\", move);\n rail.removeEventListener(\"pointerleave\", reset);\n root.removeEventListener(\"pointerover\", highlight);\n root.removeEventListener(\"focusin\", highlight);\n root.removeEventListener(\"pointerout\", highlight);\n root.removeEventListener(\"focusout\", highlight);\n view.removeEventListener(\"scroll\", scroll, true);\n reset();\n };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ export * from "./client/index.js";
@@ -0,0 +1 @@
1
+ export * from "./client/index.js";
@@ -0,0 +1,3 @@
1
+ export { TableOfContents, TableOfContentsRoot, TableOfContentsTrigger, TableOfContentsRail, TableOfContentsIndicator, TableOfContentsContent, TableOfContentsList, TableOfContentsLink, } from "./TableOfContents.js";
2
+ export type { TableOfContentsLevel, TableOfContentsRootOwnProps, TableOfContentsRootProps, TableOfContentsTriggerOwnProps, TableOfContentsTriggerProps, TableOfContentsRailOwnProps, TableOfContentsRailProps, TableOfContentsIndicatorOwnProps, TableOfContentsIndicatorProps, TableOfContentsContentOwnProps, TableOfContentsContentProps, TableOfContentsListOwnProps, TableOfContentsListProps, TableOfContentsLinkOwnProps, TableOfContentsLinkProps, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/table-of-contents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,gCAAgC,EAChC,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,21 @@
1
+ import {
2
+ TableOfContents,
3
+ TableOfContentsRoot,
4
+ TableOfContentsTrigger,
5
+ TableOfContentsRail,
6
+ TableOfContentsIndicator,
7
+ TableOfContentsContent,
8
+ TableOfContentsList,
9
+ TableOfContentsLink
10
+ } from "./TableOfContents.js";
11
+ export {
12
+ TableOfContents,
13
+ TableOfContentsContent,
14
+ TableOfContentsIndicator,
15
+ TableOfContentsLink,
16
+ TableOfContentsList,
17
+ TableOfContentsRail,
18
+ TableOfContentsRoot,
19
+ TableOfContentsTrigger
20
+ };
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/table-of-contents/index.ts"],"sourcesContent":["export {\n TableOfContents,\n TableOfContentsRoot,\n TableOfContentsTrigger,\n TableOfContentsRail,\n TableOfContentsIndicator,\n TableOfContentsContent,\n TableOfContentsList,\n TableOfContentsLink,\n} from \"./TableOfContents.js\";\nexport type {\n TableOfContentsLevel,\n TableOfContentsRootOwnProps,\n TableOfContentsRootProps,\n TableOfContentsTriggerOwnProps,\n TableOfContentsTriggerProps,\n TableOfContentsRailOwnProps,\n TableOfContentsRailProps,\n TableOfContentsIndicatorOwnProps,\n TableOfContentsIndicatorProps,\n TableOfContentsContentOwnProps,\n TableOfContentsContentProps,\n TableOfContentsListOwnProps,\n TableOfContentsListProps,\n TableOfContentsLinkOwnProps,\n TableOfContentsLinkProps,\n} from \"./types.js\";\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { TableOfContentsScrollSnapshot } from "./types.js";
2
+ export declare function resolveTableOfContentsId(href: string, documentUrl: string): string | null;
3
+ export declare function getTableOfContentsValue({ targets, viewportStart, viewportEnd, offset, contentEnd, }: TableOfContentsScrollSnapshot): string | null;
4
+ //# sourceMappingURL=scrollspy-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollspy-selection.d.ts","sourceRoot":"","sources":["../../../src/components/table-of-contents/scrollspy-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAezF;AAED,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,aAAa,EACb,WAAW,EACX,MAAM,EACN,UAAU,GACX,EAAE,6BAA6B,GAAG,MAAM,GAAG,IAAI,CAQ/C"}
@@ -0,0 +1,31 @@
1
+ function resolveTableOfContentsId(href, documentUrl) {
2
+ try {
3
+ const base = new URL(documentUrl);
4
+ const link = new URL(href, base);
5
+ if (link.origin !== base.origin || link.pathname !== base.pathname || link.search !== base.search || link.hash.length < 2)
6
+ return null;
7
+ return decodeURIComponent(link.hash.slice(1));
8
+ } catch {
9
+ return null;
10
+ }
11
+ }
12
+ function getTableOfContentsValue({
13
+ targets,
14
+ viewportStart,
15
+ viewportEnd,
16
+ offset,
17
+ contentEnd
18
+ }) {
19
+ const visible = targets.filter((target) => target.visible);
20
+ if (contentEnd !== null && viewportStart > 0 && contentEnd <= viewportEnd + 1)
21
+ return visible.at(-1)?.value ?? null;
22
+ let active = visible[0]?.value ?? null;
23
+ for (const target of visible)
24
+ if (target.start <= viewportStart + offset + 1) active = target.value;
25
+ return active;
26
+ }
27
+ export {
28
+ getTableOfContentsValue,
29
+ resolveTableOfContentsId
30
+ };
31
+ //# sourceMappingURL=scrollspy-selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/table-of-contents/scrollspy-selection.ts"],"sourcesContent":["import type { TableOfContentsScrollSnapshot } from \"./types.js\";\n\nexport function resolveTableOfContentsId(href: string, documentUrl: string): string | null {\n try {\n const base = new URL(documentUrl);\n const link = new URL(href, base);\n if (\n link.origin !== base.origin ||\n link.pathname !== base.pathname ||\n link.search !== base.search ||\n link.hash.length < 2\n )\n return null;\n return decodeURIComponent(link.hash.slice(1));\n } catch {\n return null;\n }\n}\n\nexport function getTableOfContentsValue({\n targets,\n viewportStart,\n viewportEnd,\n offset,\n contentEnd,\n}: TableOfContentsScrollSnapshot): string | null {\n const visible = targets.filter((target) => target.visible);\n if (contentEnd !== null && viewportStart > 0 && contentEnd <= viewportEnd + 1)\n return visible.at(-1)?.value ?? null;\n let active = visible[0]?.value ?? null;\n for (const target of visible)\n if (target.start <= viewportStart + offset + 1) active = target.value;\n return active;\n}\n"],"mappings":"AAEO,SAAS,yBAAyB,MAAc,aAAoC;AACzF,MAAI;AACF,UAAM,OAAO,IAAI,IAAI,WAAW;AAChC,UAAM,OAAO,IAAI,IAAI,MAAM,IAAI;AAC/B,QACE,KAAK,WAAW,KAAK,UACrB,KAAK,aAAa,KAAK,YACvB,KAAK,WAAW,KAAK,UACrB,KAAK,KAAK,SAAS;AAEnB,aAAO;AACT,WAAO,mBAAmB,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,EAC9C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiD;AAC/C,QAAM,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,OAAO;AACzD,MAAI,eAAe,QAAQ,gBAAgB,KAAK,cAAc,cAAc;AAC1E,WAAO,QAAQ,GAAG,EAAE,GAAG,SAAS;AAClC,MAAI,SAAS,QAAQ,CAAC,GAAG,SAAS;AAClC,aAAW,UAAU;AACnB,QAAI,OAAO,SAAS,gBAAgB,SAAS,EAAG,UAAS,OAAO;AAClE,SAAO;AACT;","names":[]}
@@ -0,0 +1,4 @@
1
+ import type { TableOfContentsObserver, TableOfContentsObserverOptions } from "./types.js";
2
+ export { getTableOfContentsValue, resolveTableOfContentsId } from "./scrollspy-selection.js";
3
+ export declare function observeTableOfContents({ root, scrollTarget, contentTarget, offset, onValueChange, }: TableOfContentsObserverOptions): TableOfContentsObserver;
4
+ //# sourceMappingURL=scrollspy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollspy.d.ts","sourceRoot":"","sources":["../../../src/components/table-of-contents/scrollspy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,8BAA8B,EAE/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,MAAM,EACN,aAAa,GACd,EAAE,8BAA8B,GAAG,uBAAuB,CAyK1D"}
@@ -0,0 +1,178 @@
1
+ import { getTableOfContentsValue, resolveTableOfContentsId } from "./scrollspy-selection.js";
2
+ import { getTableOfContentsValue as getTableOfContentsValue2, resolveTableOfContentsId as resolveTableOfContentsId2 } from "./scrollspy-selection.js";
3
+ function observeTableOfContents({
4
+ root,
5
+ scrollTarget,
6
+ contentTarget,
7
+ offset,
8
+ onValueChange
9
+ }) {
10
+ const doc = root.ownerDocument;
11
+ const view = doc.defaultView;
12
+ let scrollNode = null;
13
+ let content = null;
14
+ let host = null;
15
+ let observer = null;
16
+ let nodes = [];
17
+ let positions = /* @__PURE__ */ new Map();
18
+ let contentEnd = null;
19
+ let viewportSize = 0;
20
+ let frame = 0;
21
+ let generation = 0;
22
+ let destroyed = false;
23
+ let last;
24
+ const resized = /* @__PURE__ */ new Set();
25
+ const emit = (value) => {
26
+ if (last !== value) {
27
+ last = value;
28
+ onValueChange(value);
29
+ }
30
+ };
31
+ const position = () => {
32
+ return scrollNode ? scrollNode.scrollTop : view.scrollY;
33
+ };
34
+ const update = () => {
35
+ if (positions.size !== nodes.length || !viewportSize) return;
36
+ const start = position();
37
+ emit(
38
+ getTableOfContentsValue({
39
+ targets: nodes.flatMap((node) => {
40
+ const target = positions.get(node);
41
+ return target ? [target] : [];
42
+ }),
43
+ viewportStart: start,
44
+ viewportEnd: start + viewportSize,
45
+ offset,
46
+ contentEnd
47
+ })
48
+ );
49
+ };
50
+ const scroll = () => {
51
+ if (!frame)
52
+ frame = view.requestAnimationFrame(() => {
53
+ frame = 0;
54
+ update();
55
+ });
56
+ };
57
+ const schedule = () => {
58
+ if (frame) view.cancelAnimationFrame(frame);
59
+ frame = view.requestAnimationFrame(() => {
60
+ frame = 0;
61
+ refresh();
62
+ });
63
+ };
64
+ const resize = new view.ResizeObserver(schedule);
65
+ const mutations = new view.MutationObserver((changes) => {
66
+ if (changes.some((change) => !root.contains(change.target))) schedule();
67
+ });
68
+ const links = new view.MutationObserver(schedule);
69
+ links.observe(root, {
70
+ subtree: true,
71
+ childList: true,
72
+ attributes: true,
73
+ attributeFilter: ["href"]
74
+ });
75
+ function refresh() {
76
+ if (destroyed) return;
77
+ generation++;
78
+ observer?.disconnect();
79
+ mutations.disconnect();
80
+ scrollNode = scrollTarget === void 0 ? null : doc.getElementById(scrollTarget);
81
+ content = contentTarget === void 0 ? doc.documentElement : doc.getElementById(contentTarget);
82
+ const nextHost = scrollTarget !== void 0 && !scrollNode ? null : scrollNode ?? view;
83
+ if (host !== nextHost) {
84
+ host?.removeEventListener("scroll", scroll);
85
+ host = nextHost;
86
+ host?.addEventListener("scroll", scroll, { passive: true });
87
+ }
88
+ if (!host || !content) {
89
+ emit(null);
90
+ mutations.observe(doc.documentElement, { subtree: true, childList: true });
91
+ return;
92
+ }
93
+ const values = /* @__PURE__ */ new Map();
94
+ for (const link of root.querySelectorAll('[data-part="link"][href]')) {
95
+ if (link.closest("[data-uiify-table-of-contents]") !== root) continue;
96
+ const value = resolveTableOfContentsId(link.getAttribute("href"), doc.URL);
97
+ const node = value === null ? null : doc.getElementById(value);
98
+ if (node && content.contains(node)) values.set(node, value);
99
+ }
100
+ nodes = [...values.keys()].sort((a, b) => a.compareDocumentPosition(b) & 2 ? 1 : -1);
101
+ positions = /* @__PURE__ */ new Map();
102
+ contentEnd = null;
103
+ viewportSize = 0;
104
+ if (!nodes.length) emit(null);
105
+ const current = generation;
106
+ observer = new view.IntersectionObserver(
107
+ (entries) => {
108
+ if (destroyed || generation !== current) return;
109
+ const start = position();
110
+ for (const entry of entries) {
111
+ const rect = entry.boundingClientRect;
112
+ const origin = entry.rootBounds?.top ?? 0;
113
+ viewportSize = entry.rootBounds?.height ?? viewportSize;
114
+ if (entry.target === content) contentEnd = rect.bottom + start - origin;
115
+ const value = values.get(entry.target);
116
+ if (value !== void 0)
117
+ positions.set(entry.target, {
118
+ value,
119
+ start: rect.top + start - origin,
120
+ visible: rect.width > 0 && rect.height > 0
121
+ });
122
+ }
123
+ update();
124
+ },
125
+ { root: scrollNode, threshold: [0, 1] }
126
+ );
127
+ const observed = /* @__PURE__ */ new Set([content, ...nodes, ...scrollNode ? [scrollNode] : []]);
128
+ for (const node of resized)
129
+ if (!observed.has(node)) {
130
+ resize.unobserve(node);
131
+ resized.delete(node);
132
+ }
133
+ for (const node of observed) {
134
+ if (node !== scrollNode) observer.observe(node);
135
+ if (!resized.has(node)) {
136
+ resize.observe(node);
137
+ resized.add(node);
138
+ }
139
+ }
140
+ const boundaries = contentTarget !== void 0 ? [content] : new Set(
141
+ nodes.map((node) => {
142
+ const parent = node.closest("article, main") ?? node.parentElement;
143
+ return parent && parent !== doc.body && parent !== doc.documentElement ? parent : node;
144
+ })
145
+ );
146
+ for (const boundary of boundaries)
147
+ mutations.observe(boundary, {
148
+ subtree: true,
149
+ childList: true,
150
+ attributes: true,
151
+ attributeFilter: ["id", "hidden", "open", "class", "style"]
152
+ });
153
+ }
154
+ view.addEventListener("resize", schedule);
155
+ view.addEventListener("hashchange", scroll);
156
+ refresh();
157
+ return {
158
+ refresh,
159
+ destroy() {
160
+ destroyed = true;
161
+ generation++;
162
+ observer?.disconnect();
163
+ resize.disconnect();
164
+ mutations.disconnect();
165
+ links.disconnect();
166
+ host?.removeEventListener("scroll", scroll);
167
+ view.removeEventListener("resize", schedule);
168
+ view.removeEventListener("hashchange", scroll);
169
+ if (frame) view.cancelAnimationFrame(frame);
170
+ }
171
+ };
172
+ }
173
+ export {
174
+ getTableOfContentsValue2 as getTableOfContentsValue,
175
+ observeTableOfContents,
176
+ resolveTableOfContentsId2 as resolveTableOfContentsId
177
+ };
178
+ //# sourceMappingURL=scrollspy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/table-of-contents/scrollspy.ts"],"sourcesContent":["import { getTableOfContentsValue, resolveTableOfContentsId } from \"./scrollspy-selection.js\";\nimport type {\n TableOfContentsObserver,\n TableOfContentsObserverOptions,\n TableOfContentsTargetSnapshot,\n} from \"./types.js\";\nexport { getTableOfContentsValue, resolveTableOfContentsId } from \"./scrollspy-selection.js\";\n\nexport function observeTableOfContents({\n root,\n scrollTarget,\n contentTarget,\n offset,\n onValueChange,\n}: TableOfContentsObserverOptions): TableOfContentsObserver {\n const doc = root.ownerDocument;\n const view = doc.defaultView!;\n let scrollNode: HTMLElement | null = null;\n let content: HTMLElement | null = null;\n let host: EventTarget | null = null;\n let observer: IntersectionObserver | null = null;\n let nodes: HTMLElement[] = [];\n let positions = new Map<Element, TableOfContentsTargetSnapshot>();\n let contentEnd: number | null = null;\n let viewportSize = 0;\n let frame = 0;\n let generation = 0;\n let destroyed = false;\n let last: string | null | undefined;\n const resized = new Set<Element>();\n const emit = (value: string | null) => {\n if (last !== value) {\n last = value;\n onValueChange(value);\n }\n };\n const position = () => {\n // banned-read-ok: A scroll offset is the required input, not a layout measurement; geometry comes from observers.\n return scrollNode ? scrollNode.scrollTop : view.scrollY;\n };\n const update = () => {\n if (positions.size !== nodes.length || !viewportSize) return;\n const start = position();\n emit(\n getTableOfContentsValue({\n targets: nodes.flatMap((node) => {\n const target = positions.get(node);\n return target ? [target] : [];\n }),\n viewportStart: start,\n viewportEnd: start + viewportSize,\n offset,\n contentEnd,\n }),\n );\n };\n const scroll = () => {\n if (!frame)\n frame = view.requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n const schedule = () => {\n if (frame) view.cancelAnimationFrame(frame);\n frame = view.requestAnimationFrame(() => {\n frame = 0;\n refresh();\n });\n };\n const resize = new view.ResizeObserver(schedule);\n const mutations = new view.MutationObserver((changes) => {\n if (changes.some((change) => !root.contains(change.target))) schedule();\n });\n const links = new view.MutationObserver(schedule);\n links.observe(root, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"href\"],\n });\n function refresh() {\n if (destroyed) return;\n generation++;\n observer?.disconnect();\n mutations.disconnect();\n scrollNode = scrollTarget === undefined ? null : doc.getElementById(scrollTarget);\n content = contentTarget === undefined ? doc.documentElement : doc.getElementById(contentTarget);\n const nextHost = scrollTarget !== undefined && !scrollNode ? null : (scrollNode ?? view);\n if (host !== nextHost) {\n host?.removeEventListener(\"scroll\", scroll);\n host = nextHost;\n host?.addEventListener(\"scroll\", scroll, { passive: true });\n }\n if (!host || !content) {\n emit(null);\n mutations.observe(doc.documentElement, { subtree: true, childList: true });\n return;\n }\n const values = new Map<HTMLElement, string>();\n for (const link of root.querySelectorAll('[data-part=\"link\"][href]')) {\n if (link.closest(\"[data-uiify-table-of-contents]\") !== root) continue;\n const value = resolveTableOfContentsId(link.getAttribute(\"href\")!, doc.URL);\n const node = value === null ? null : doc.getElementById(value);\n if (node && content.contains(node)) values.set(node, value!);\n }\n nodes = [...values.keys()].sort((a, b) => (a.compareDocumentPosition(b) & 2 ? 1 : -1));\n positions = new Map();\n contentEnd = null;\n viewportSize = 0;\n if (!nodes.length) emit(null);\n const current = generation;\n observer = new view.IntersectionObserver(\n (entries) => {\n if (destroyed || generation !== current) return;\n const start = position();\n for (const entry of entries) {\n const rect = entry.boundingClientRect;\n const origin = entry.rootBounds?.top ?? 0;\n viewportSize = entry.rootBounds?.height ?? viewportSize;\n if (entry.target === content) contentEnd = rect.bottom + start - origin;\n const value = values.get(entry.target as HTMLElement);\n if (value !== undefined)\n positions.set(entry.target, {\n value,\n start: rect.top + start - origin,\n visible: rect.width > 0 && rect.height > 0,\n });\n }\n update();\n },\n { root: scrollNode, threshold: [0, 1] },\n );\n const observed = new Set<Element>([content, ...nodes, ...(scrollNode ? [scrollNode] : [])]);\n for (const node of resized)\n if (!observed.has(node)) {\n resize.unobserve(node);\n resized.delete(node);\n }\n for (const node of observed) {\n if (node !== scrollNode) observer.observe(node);\n if (!resized.has(node)) {\n resize.observe(node);\n resized.add(node);\n }\n }\n const boundaries =\n contentTarget !== undefined\n ? [content]\n : new Set(\n nodes.map((node) => {\n const parent = node.closest(\"article, main\") ?? node.parentElement;\n return parent && parent !== doc.body && parent !== doc.documentElement\n ? parent\n : node;\n }),\n );\n for (const boundary of boundaries)\n mutations.observe(boundary, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"id\", \"hidden\", \"open\", \"class\", \"style\"],\n });\n }\n view.addEventListener(\"resize\", schedule);\n view.addEventListener(\"hashchange\", scroll);\n refresh();\n return {\n refresh,\n destroy() {\n destroyed = true;\n generation++;\n observer?.disconnect();\n resize.disconnect();\n mutations.disconnect();\n links.disconnect();\n host?.removeEventListener(\"scroll\", scroll);\n view.removeEventListener(\"resize\", schedule);\n view.removeEventListener(\"hashchange\", scroll);\n if (frame) view.cancelAnimationFrame(frame);\n },\n };\n}\n"],"mappings":"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","names":["getTableOfContentsValue","resolveTableOfContentsId"]}