@gunkin/uiify 0.0.15-alpha → 0.0.17-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 (112) hide show
  1. package/README.md +59 -1
  2. package/agents/components.md +1 -0
  3. package/agents/index.md +7 -1
  4. package/agents/reference/components/table-of-contents.md +185 -0
  5. package/dist/components/index.d.ts +1 -0
  6. package/dist/components/index.d.ts.map +1 -1
  7. package/dist/components/index.js +1 -0
  8. package/dist/components/index.js.map +1 -1
  9. package/dist/components/table-of-contents/TableOfContents.d.ts +22 -0
  10. package/dist/components/table-of-contents/TableOfContents.d.ts.map +1 -0
  11. package/dist/components/table-of-contents/TableOfContents.js +142 -0
  12. package/dist/components/table-of-contents/TableOfContents.js.map +1 -0
  13. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts +18 -0
  14. package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts.map +1 -0
  15. package/dist/components/table-of-contents/client/TableOfContentsClient.js +140 -0
  16. package/dist/components/table-of-contents/client/TableOfContentsClient.js.map +1 -0
  17. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts +7 -0
  18. package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts.map +1 -0
  19. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js +48 -0
  20. package/dist/components/table-of-contents/client/TableOfContentsClientParts.js.map +1 -0
  21. package/dist/components/table-of-contents/client/index.d.ts +5 -0
  22. package/dist/components/table-of-contents/client/index.d.ts.map +1 -0
  23. package/dist/components/table-of-contents/client/index.js +23 -0
  24. package/dist/components/table-of-contents/client/index.js.map +1 -0
  25. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts +3 -0
  26. package/dist/components/table-of-contents/client/table-of-contents-context.d.ts.map +1 -0
  27. package/dist/components/table-of-contents/client/table-of-contents-context.js +7 -0
  28. package/dist/components/table-of-contents/client/table-of-contents-context.js.map +1 -0
  29. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts +3 -0
  30. package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts.map +1 -0
  31. package/dist/components/table-of-contents/client/table-of-contents-interactions.js +144 -0
  32. package/dist/components/table-of-contents/client/table-of-contents-interactions.js.map +1 -0
  33. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts +3 -0
  34. package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts.map +1 -0
  35. package/dist/components/table-of-contents/client/table-of-contents-pointer.js +94 -0
  36. package/dist/components/table-of-contents/client/table-of-contents-pointer.js.map +1 -0
  37. package/dist/components/table-of-contents/client.d.ts +1 -0
  38. package/dist/components/table-of-contents/client.js +1 -0
  39. package/dist/components/table-of-contents/index.d.ts +3 -0
  40. package/dist/components/table-of-contents/index.d.ts.map +1 -0
  41. package/dist/components/table-of-contents/index.js +21 -0
  42. package/dist/components/table-of-contents/index.js.map +1 -0
  43. package/dist/components/table-of-contents/scrollspy-selection.d.ts +4 -0
  44. package/dist/components/table-of-contents/scrollspy-selection.d.ts.map +1 -0
  45. package/dist/components/table-of-contents/scrollspy-selection.js +31 -0
  46. package/dist/components/table-of-contents/scrollspy-selection.js.map +1 -0
  47. package/dist/components/table-of-contents/scrollspy.d.ts +4 -0
  48. package/dist/components/table-of-contents/scrollspy.d.ts.map +1 -0
  49. package/dist/components/table-of-contents/scrollspy.js +178 -0
  50. package/dist/components/table-of-contents/scrollspy.js.map +1 -0
  51. package/dist/components/table-of-contents/types.d.ts +123 -0
  52. package/dist/components/table-of-contents/types.d.ts.map +1 -0
  53. package/dist/components/table-of-contents/types.js +1 -0
  54. package/dist/components/table-of-contents/types.js.map +1 -0
  55. package/dist/components/table-of-contents.d.ts +1 -0
  56. package/dist/components/table-of-contents.js +1 -0
  57. package/dist/styles/index.css +1 -1
  58. package/package.json +3 -2
  59. package/skills/uiify/SKILL.md +145 -0
  60. package/skills/uiify/references/compositions/card-rhythm.md +16 -0
  61. package/skills/uiify/references/compositions/destructive-confirmation.md +17 -0
  62. package/skills/uiify/references/compositions/form-grouping.md +16 -0
  63. package/skills/uiify/references/compositions/hero-actions.md +16 -0
  64. package/skills/uiify/references/compositions/page-frame.md +16 -0
  65. package/skills/uiify/references/compositions/pricing-actions.md +15 -0
  66. package/skills/uiify/references/compositions/save-feedback.md +15 -0
  67. package/skills/uiify/references/compositions/table-controls.md +16 -0
  68. package/skills/uiify/references/elements/alert-modal.md +15 -0
  69. package/skills/uiify/references/elements/avatar.md +18 -0
  70. package/skills/uiify/references/elements/badge.md +18 -0
  71. package/skills/uiify/references/elements/bar-chart.md +29 -0
  72. package/skills/uiify/references/elements/button.md +14 -0
  73. package/skills/uiify/references/elements/card.md +14 -0
  74. package/skills/uiify/references/elements/code-block.md +21 -0
  75. package/skills/uiify/references/elements/command-palette.md +22 -0
  76. package/skills/uiify/references/elements/cookie-banner.md +23 -0
  77. package/skills/uiify/references/elements/date-picker.md +19 -0
  78. package/skills/uiify/references/elements/divider.md +18 -0
  79. package/skills/uiify/references/elements/empty-state.md +22 -0
  80. package/skills/uiify/references/elements/feature-grid.md +14 -0
  81. package/skills/uiify/references/elements/field.md +14 -0
  82. package/skills/uiify/references/elements/footer.md +14 -0
  83. package/skills/uiify/references/elements/form.md +14 -0
  84. package/skills/uiify/references/elements/header.md +14 -0
  85. package/skills/uiify/references/elements/hero.md +14 -0
  86. package/skills/uiify/references/elements/image-gallery.md +20 -0
  87. package/skills/uiify/references/elements/inline-alert.md +18 -0
  88. package/skills/uiify/references/elements/input.md +14 -0
  89. package/skills/uiify/references/elements/logo-wall.md +20 -0
  90. package/skills/uiify/references/elements/pagination.md +14 -0
  91. package/skills/uiify/references/elements/password-input.md +19 -0
  92. package/skills/uiify/references/elements/pricing-table.md +13 -0
  93. package/skills/uiify/references/elements/progress-bar.md +19 -0
  94. package/skills/uiify/references/elements/search-input.md +14 -0
  95. package/skills/uiify/references/elements/select.md +14 -0
  96. package/skills/uiify/references/elements/sidebar.md +20 -0
  97. package/skills/uiify/references/elements/stats-bar.md +21 -0
  98. package/skills/uiify/references/elements/stepper.md +20 -0
  99. package/skills/uiify/references/elements/switch.md +14 -0
  100. package/skills/uiify/references/elements/table.md +14 -0
  101. package/skills/uiify/references/elements/testimonial.md +21 -0
  102. package/skills/uiify/references/elements/textarea.md +14 -0
  103. package/skills/uiify/references/elements/timeline.md +20 -0
  104. package/skills/uiify/references/elements/toast.md +13 -0
  105. package/skills/uiify/references/laws/accessibility.md +11 -0
  106. package/skills/uiify/references/laws/error-prevention.md +12 -0
  107. package/skills/uiify/references/laws/feedback.md +9 -0
  108. package/skills/uiify/references/laws/proximity.md +10 -0
  109. package/skills/uiify/references/laws/readability.md +9 -0
  110. package/skills/uiify/references/laws/von-restorff.md +9 -0
  111. package/skills/uiify/scripts/lint.mjs +56 -0
  112. package/skills/uiify/scripts/static.mjs +95 -0
@@ -0,0 +1,140 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { useControllableState } from "../../../hooks/use-controllable-state.js";
5
+ import { useEventCallback } from "../../../hooks/use-event-callback.js";
6
+ import { useMergedRefs } from "../../../hooks/use-merged-refs.js";
7
+ import { useIsomorphicLayoutEffect } from "../../../hooks/use-isomorphic-layout-effect.js";
8
+ import { useRenderElement } from "../../../core/render.js";
9
+ import {
10
+ TableOfContentsRail as NativeRail,
11
+ TableOfContentsList as NativeList
12
+ } from "../TableOfContents.js";
13
+ import { observeTableOfContents } from "../scrollspy.js";
14
+ import {
15
+ TableOfContentsClientTrigger,
16
+ TableOfContentsClientContent,
17
+ TableOfContentsClientLink,
18
+ TableOfContentsClientIndicator
19
+ } from "./TableOfContentsClientParts.js";
20
+ import { TableOfContentsContext } from "./table-of-contents-context.js";
21
+ import { attachTableOfContentsInteractions } from "./table-of-contents-interactions.js";
22
+ import { attachTableOfContentsPointer } from "./table-of-contents-pointer.js";
23
+ function TableOfContentsClientRoot(props) {
24
+ const {
25
+ as,
26
+ render,
27
+ ref,
28
+ children,
29
+ onClick,
30
+ scrollSpy = true,
31
+ scrollTarget,
32
+ contentTarget,
33
+ offset = 0,
34
+ value: controlledValue,
35
+ defaultValue = null,
36
+ onValueChange,
37
+ open: controlledOpen,
38
+ defaultOpen = false,
39
+ onOpenChange,
40
+ openOnHover = true,
41
+ openDelay = 100,
42
+ closeDelay = 200,
43
+ ...rest
44
+ } = props;
45
+ const rootRef = useRef(null), mergedRef = useMergedRefs(rootRef, ref);
46
+ const [value, setValue] = useControllableState({
47
+ value: controlledValue,
48
+ defaultValue,
49
+ onChange: onValueChange
50
+ });
51
+ const [open, setOpen] = useControllableState({
52
+ value: controlledOpen,
53
+ defaultValue: defaultOpen,
54
+ onChange: onOpenChange
55
+ });
56
+ const [documentUrl, setDocumentUrl] = useState();
57
+ const ready = documentUrl !== void 0;
58
+ const interactions = useRef(null);
59
+ const getOpen = useEventCallback(() => open);
60
+ const controlled = controlledOpen !== void 0;
61
+ useIsomorphicLayoutEffect(() => {
62
+ const root = rootRef.current, panel = root?.querySelector('[data-part="content"]');
63
+ if (!root) return;
64
+ setDocumentUrl(root.ownerDocument.URL);
65
+ if (!panel) return;
66
+ const actual = panel.matches(":popover-open");
67
+ if (!ready && controlledOpen === void 0 && actual && !open) {
68
+ setOpen(true);
69
+ return;
70
+ }
71
+ if (actual !== open) {
72
+ if (open) panel.showPopover();
73
+ else panel.hidePopover();
74
+ }
75
+ }, [open, children, controlledOpen, setOpen, ready]);
76
+ useEffect(() => {
77
+ const root = rootRef.current;
78
+ if (!root) return;
79
+ const controller = attachTableOfContentsInteractions({
80
+ root,
81
+ getOpen,
82
+ requestOpen: setOpen,
83
+ controlled,
84
+ openOnHover,
85
+ openDelay,
86
+ closeDelay
87
+ });
88
+ interactions.current = controller;
89
+ const clearPointer = attachTableOfContentsPointer({ root });
90
+ return () => {
91
+ controller.destroy();
92
+ interactions.current = null;
93
+ clearPointer();
94
+ };
95
+ }, [controlled, openOnHover, openDelay, closeDelay, getOpen, setOpen, as]);
96
+ useEffect(() => {
97
+ if (!scrollSpy || !rootRef.current) return;
98
+ const controller = observeTableOfContents({
99
+ root: rootRef.current,
100
+ scrollTarget,
101
+ contentTarget,
102
+ offset: Math.max(0, offset),
103
+ onValueChange: setValue
104
+ });
105
+ return () => controller.destroy();
106
+ }, [scrollSpy, scrollTarget, contentTarget, offset, setValue]);
107
+ const element = useRenderElement({
108
+ as,
109
+ render,
110
+ defaultTag: "nav",
111
+ props: {
112
+ ...rest,
113
+ children,
114
+ ref: mergedRef,
115
+ "data-uiify-table-of-contents": "",
116
+ "data-state": ready && open ? "open" : "closed",
117
+ onClick(event) {
118
+ onClick?.(event);
119
+ interactions.current?.click(event.nativeEvent);
120
+ }
121
+ },
122
+ state: { value, open: ready && open }
123
+ });
124
+ return /* @__PURE__ */ jsx(TableOfContentsContext, { value: { value, open: ready && open, documentUrl }, children: element });
125
+ }
126
+ const TableOfContents = {
127
+ Root: TableOfContentsClientRoot,
128
+ Trigger: TableOfContentsClientTrigger,
129
+ Rail: NativeRail,
130
+ Content: TableOfContentsClientContent,
131
+ List: NativeList,
132
+ Link: TableOfContentsClientLink,
133
+ Indicator: TableOfContentsClientIndicator
134
+ };
135
+ TableOfContentsClientRoot.displayName = "TableOfContentsClientRoot";
136
+ export {
137
+ TableOfContents,
138
+ TableOfContentsClientRoot
139
+ };
140
+ //# sourceMappingURL=TableOfContentsClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/TableOfContentsClient.tsx"],"sourcesContent":["\"use client\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ElementType, ReactElement, MouseEvent as ReactMouseEvent } from \"react\";\nimport { useControllableState } from \"../../../hooks/use-controllable-state.js\";\nimport { useEventCallback } from \"../../../hooks/use-event-callback.js\";\nimport { useMergedRefs } from \"../../../hooks/use-merged-refs.js\";\nimport { useIsomorphicLayoutEffect } from \"../../../hooks/use-isomorphic-layout-effect.js\";\nimport { useRenderElement } from \"../../../core/render.js\";\nimport {\n TableOfContentsRail as NativeRail,\n TableOfContentsList as NativeList,\n} from \"../TableOfContents.js\";\nimport { observeTableOfContents } from \"../scrollspy.js\";\nimport {\n TableOfContentsClientTrigger,\n TableOfContentsClientContent,\n TableOfContentsClientLink,\n TableOfContentsClientIndicator,\n} from \"./TableOfContentsClientParts.js\";\nimport { TableOfContentsContext } from \"./table-of-contents-context.js\";\nimport { attachTableOfContentsInteractions } from \"./table-of-contents-interactions.js\";\nimport { attachTableOfContentsPointer } from \"./table-of-contents-pointer.js\";\nimport type { TableOfContentsClientRootProps, TableOfContentsInteractions } from \"../types.js\";\n\nexport function TableOfContentsClientRoot<TAs extends ElementType = \"nav\">(\n props: TableOfContentsClientRootProps<TAs>,\n): ReactElement {\n const {\n as,\n render,\n ref,\n children,\n onClick,\n scrollSpy = true,\n scrollTarget,\n contentTarget,\n offset = 0,\n value: controlledValue,\n defaultValue = null,\n onValueChange,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n openOnHover = true,\n openDelay = 100,\n closeDelay = 200,\n ...rest\n } = props as TableOfContentsClientRootProps<\"nav\">;\n const rootRef = useRef<HTMLElement>(null),\n mergedRef = useMergedRefs(rootRef, ref);\n const [value, setValue] = useControllableState<string | null>({\n value: controlledValue,\n defaultValue,\n onChange: onValueChange,\n });\n const [open, setOpen] = useControllableState({\n value: controlledOpen,\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n });\n const [documentUrl, setDocumentUrl] = useState<string>();\n const ready = documentUrl !== undefined;\n const interactions = useRef<TableOfContentsInteractions | null>(null);\n const getOpen = useEventCallback(() => open);\n const controlled = controlledOpen !== undefined;\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current,\n panel = root?.querySelector<HTMLElement>('[data-part=\"content\"]');\n if (!root) return;\n setDocumentUrl(root.ownerDocument.URL);\n if (!panel) return;\n const actual = panel.matches(\":popover-open\");\n if (!ready && controlledOpen === undefined && actual && !open) {\n setOpen(true);\n return;\n }\n if (actual !== open) {\n if (open) panel.showPopover();\n else panel.hidePopover();\n }\n }, [open, children, controlledOpen, setOpen, ready]);\n useEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const controller = attachTableOfContentsInteractions({\n root,\n getOpen,\n requestOpen: setOpen,\n controlled,\n openOnHover,\n openDelay,\n closeDelay,\n });\n interactions.current = controller;\n const clearPointer = attachTableOfContentsPointer({ root });\n return () => {\n controller.destroy();\n interactions.current = null;\n clearPointer();\n };\n }, [controlled, openOnHover, openDelay, closeDelay, getOpen, setOpen, as]);\n useEffect(() => {\n if (!scrollSpy || !rootRef.current) return;\n const controller = observeTableOfContents({\n root: rootRef.current,\n scrollTarget,\n contentTarget,\n offset: Math.max(0, offset),\n onValueChange: setValue,\n });\n return () => controller.destroy();\n }, [scrollSpy, scrollTarget, contentTarget, offset, setValue]);\n const element = useRenderElement({\n as,\n render,\n defaultTag: \"nav\",\n props: {\n ...rest,\n children,\n ref: mergedRef,\n \"data-uiify-table-of-contents\": \"\",\n \"data-state\": ready && open ? \"open\" : \"closed\",\n onClick(event: ReactMouseEvent<HTMLElement>) {\n onClick?.(event);\n interactions.current?.click(event.nativeEvent);\n },\n },\n state: { value, open: ready && open },\n });\n return (\n <TableOfContentsContext value={{ value, open: ready && open, documentUrl }}>\n {element}\n </TableOfContentsContext>\n );\n}\nexport const TableOfContents = {\n Root: TableOfContentsClientRoot,\n Trigger: TableOfContentsClientTrigger,\n Rail: NativeRail,\n Content: TableOfContentsClientContent,\n List: NativeList,\n Link: TableOfContentsClientLink,\n Indicator: TableOfContentsClientIndicator,\n};\n\nTableOfContentsClientRoot.displayName = \"TableOfContentsClientRoot\";\n"],"mappings":"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","names":[]}
@@ -0,0 +1,7 @@
1
+ import type { ElementType, ReactElement } from "react";
2
+ import type { TableOfContentsTriggerProps, TableOfContentsContentProps, TableOfContentsIndicatorProps, TableOfContentsLinkProps } from "../types.js";
3
+ export declare function TableOfContentsClientTrigger<TAs extends ElementType = "button">(props: TableOfContentsTriggerProps<TAs>): ReactElement;
4
+ export declare function TableOfContentsClientContent<TAs extends ElementType = "div">(props: TableOfContentsContentProps<TAs>): ReactElement | null;
5
+ export declare function TableOfContentsClientLink<TAs extends ElementType = "a">(props: TableOfContentsLinkProps<TAs>): ReactElement | null;
6
+ export declare function TableOfContentsClientIndicator<TAs extends ElementType = "span">(props: TableOfContentsIndicatorProps<TAs>): ReactElement | null;
7
+ //# sourceMappingURL=TableOfContentsClientParts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableOfContentsClientParts.d.ts","sourceRoot":"","sources":["../../../../src/components/table-of-contents/client/TableOfContentsClientParts.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AASvD,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,aAAa,CAAC;AACrB,wBAAgB,4BAA4B,CAAC,GAAG,SAAS,WAAW,GAAG,QAAQ,EAC7E,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,GACtC,YAAY,CAMd;AACD,wBAAgB,4BAA4B,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC1E,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,GACtC,YAAY,GAAG,IAAI,CAMrB;AACD,wBAAgB,yBAAyB,CAAC,GAAG,SAAS,WAAW,GAAG,GAAG,EACrE,KAAK,EAAE,wBAAwB,CAAC,GAAG,CAAC,GACnC,YAAY,GAAG,IAAI,CAQrB;AACD,wBAAgB,8BAA8B,CAAC,GAAG,SAAS,WAAW,GAAG,MAAM,EAC7E,KAAK,EAAE,6BAA6B,CAAC,GAAG,CAAC,GACxC,YAAY,GAAG,IAAI,CAOrB"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { useContext } from "react";
3
+ import {
4
+ TableOfContentsTrigger as NativeTrigger,
5
+ TableOfContentsContent as NativeContent,
6
+ TableOfContentsLink as NativeLink,
7
+ TableOfContentsIndicator as NativeIndicator
8
+ } from "../TableOfContents.js";
9
+ import { resolveTableOfContentsId } from "../scrollspy-selection.js";
10
+ import { TableOfContentsContext } from "./table-of-contents-context.js";
11
+ function TableOfContentsClientTrigger(props) {
12
+ const context = useContext(TableOfContentsContext);
13
+ return NativeTrigger({
14
+ ...props,
15
+ ...context?.documentUrl !== void 0 ? { "aria-expanded": context.open } : {}
16
+ });
17
+ }
18
+ function TableOfContentsClientContent(props) {
19
+ const context = useContext(TableOfContentsContext);
20
+ return NativeContent({
21
+ ...props,
22
+ ...context ? { "data-state": context.open ? "open" : "closed" } : {}
23
+ });
24
+ }
25
+ function TableOfContentsClientLink(props) {
26
+ const context = useContext(TableOfContentsContext);
27
+ const id = resolveTableOfContentsId(props.href, context?.documentUrl ?? "https://uiify.invalid/");
28
+ return NativeLink({
29
+ ...props,
30
+ "data-uiify-toc-value": id ?? void 0,
31
+ ...context ? { selected: id !== null && context.value === id } : {}
32
+ });
33
+ }
34
+ function TableOfContentsClientIndicator(props) {
35
+ const context = useContext(TableOfContentsContext);
36
+ return NativeIndicator({
37
+ ...props,
38
+ "data-uiify-toc-value": props.value,
39
+ ...context ? { selected: context.value === props.value } : {}
40
+ });
41
+ }
42
+ export {
43
+ TableOfContentsClientContent,
44
+ TableOfContentsClientIndicator,
45
+ TableOfContentsClientLink,
46
+ TableOfContentsClientTrigger
47
+ };
48
+ //# sourceMappingURL=TableOfContentsClientParts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/TableOfContentsClientParts.tsx"],"sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport type { ElementType, ReactElement } from \"react\";\nimport {\n TableOfContentsTrigger as NativeTrigger,\n TableOfContentsContent as NativeContent,\n TableOfContentsLink as NativeLink,\n TableOfContentsIndicator as NativeIndicator,\n} from \"../TableOfContents.js\";\nimport { resolveTableOfContentsId } from \"../scrollspy-selection.js\";\nimport { TableOfContentsContext } from \"./table-of-contents-context.js\";\nimport type {\n TableOfContentsTriggerProps,\n TableOfContentsContentProps,\n TableOfContentsIndicatorProps,\n TableOfContentsLinkProps,\n} from \"../types.js\";\nexport function TableOfContentsClientTrigger<TAs extends ElementType = \"button\">(\n props: TableOfContentsTriggerProps<TAs>,\n): ReactElement {\n const context = useContext(TableOfContentsContext);\n return NativeTrigger({\n ...props,\n ...(context?.documentUrl !== undefined ? { \"aria-expanded\": context.open } : {}),\n });\n}\nexport function TableOfContentsClientContent<TAs extends ElementType = \"div\">(\n props: TableOfContentsContentProps<TAs>,\n): ReactElement | null {\n const context = useContext(TableOfContentsContext);\n return NativeContent({\n ...props,\n ...(context ? { \"data-state\": context.open ? \"open\" : \"closed\" } : {}),\n });\n}\nexport function TableOfContentsClientLink<TAs extends ElementType = \"a\">(\n props: TableOfContentsLinkProps<TAs>,\n): ReactElement | null {\n const context = useContext(TableOfContentsContext);\n const id = resolveTableOfContentsId(props.href, context?.documentUrl ?? \"https://uiify.invalid/\");\n return NativeLink({\n ...props,\n \"data-uiify-toc-value\": id ?? undefined,\n ...(context ? { selected: id !== null && context.value === id } : {}),\n } as TableOfContentsLinkProps<TAs>);\n}\nexport function TableOfContentsClientIndicator<TAs extends ElementType = \"span\">(\n props: TableOfContentsIndicatorProps<TAs>,\n): ReactElement | null {\n const context = useContext(TableOfContentsContext);\n return NativeIndicator({\n ...props,\n \"data-uiify-toc-value\": props.value,\n ...(context ? { selected: context.value === props.value } : {}),\n } as TableOfContentsIndicatorProps<\"span\">);\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAE3B;AAAA,EACE,0BAA0B;AAAA,EAC1B,0BAA0B;AAAA,EAC1B,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,OACvB;AACP,SAAS,gCAAgC;AACzC,SAAS,8BAA8B;AAOhC,SAAS,6BACd,OACc;AACd,QAAM,UAAU,WAAW,sBAAsB;AACjD,SAAO,cAAc;AAAA,IACnB,GAAG;AAAA,IACH,GAAI,SAAS,gBAAgB,SAAY,EAAE,iBAAiB,QAAQ,KAAK,IAAI,CAAC;AAAA,EAChF,CAAC;AACH;AACO,SAAS,6BACd,OACqB;AACrB,QAAM,UAAU,WAAW,sBAAsB;AACjD,SAAO,cAAc;AAAA,IACnB,GAAG;AAAA,IACH,GAAI,UAAU,EAAE,cAAc,QAAQ,OAAO,SAAS,SAAS,IAAI,CAAC;AAAA,EACtE,CAAC;AACH;AACO,SAAS,0BACd,OACqB;AACrB,QAAM,UAAU,WAAW,sBAAsB;AACjD,QAAM,KAAK,yBAAyB,MAAM,MAAM,SAAS,eAAe,wBAAwB;AAChG,SAAO,WAAW;AAAA,IAChB,GAAG;AAAA,IACH,wBAAwB,MAAM;AAAA,IAC9B,GAAI,UAAU,EAAE,UAAU,OAAO,QAAQ,QAAQ,UAAU,GAAG,IAAI,CAAC;AAAA,EACrE,CAAkC;AACpC;AACO,SAAS,+BACd,OACqB;AACrB,QAAM,UAAU,WAAW,sBAAsB;AACjD,SAAO,gBAAgB;AAAA,IACrB,GAAG;AAAA,IACH,wBAAwB,MAAM;AAAA,IAC9B,GAAI,UAAU,EAAE,UAAU,QAAQ,UAAU,MAAM,MAAM,IAAI,CAAC;AAAA,EAC/D,CAA0C;AAC5C;","names":[]}
@@ -0,0 +1,5 @@
1
+ export { TableOfContents, TableOfContentsClientRoot as TableOfContentsRoot, } from "./TableOfContentsClient.js";
2
+ export { TableOfContentsClientTrigger as TableOfContentsTrigger, TableOfContentsClientContent as TableOfContentsContent, TableOfContentsClientLink as TableOfContentsLink, TableOfContentsClientIndicator as TableOfContentsIndicator, } from "./TableOfContentsClientParts.js";
3
+ export { TableOfContentsRail, TableOfContentsList } from "../TableOfContents.js";
4
+ export type { TableOfContentsClientRootOwnProps, TableOfContentsClientRootProps, TableOfContentsLevel, TableOfContentsTriggerProps, TableOfContentsRailProps, TableOfContentsContentProps, TableOfContentsListProps, TableOfContentsLinkProps, TableOfContentsIndicatorProps, } from "../types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/table-of-contents/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,yBAAyB,IAAI,mBAAmB,GACjD,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,4BAA4B,IAAI,sBAAsB,EACtD,4BAA4B,IAAI,sBAAsB,EACtD,yBAAyB,IAAI,mBAAmB,EAChD,8BAA8B,IAAI,wBAAwB,GAC3D,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjF,YAAY,EACV,iCAAiC,EACjC,8BAA8B,EAC9B,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,GAC9B,MAAM,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import {
3
+ TableOfContents,
4
+ TableOfContentsClientRoot
5
+ } from "./TableOfContentsClient.js";
6
+ import {
7
+ TableOfContentsClientTrigger,
8
+ TableOfContentsClientContent,
9
+ TableOfContentsClientLink,
10
+ TableOfContentsClientIndicator
11
+ } from "./TableOfContentsClientParts.js";
12
+ import { TableOfContentsRail, TableOfContentsList } from "../TableOfContents.js";
13
+ export {
14
+ TableOfContents,
15
+ TableOfContentsClientContent as TableOfContentsContent,
16
+ TableOfContentsClientIndicator as TableOfContentsIndicator,
17
+ TableOfContentsClientLink as TableOfContentsLink,
18
+ TableOfContentsList,
19
+ TableOfContentsRail,
20
+ TableOfContentsClientRoot as TableOfContentsRoot,
21
+ TableOfContentsClientTrigger as TableOfContentsTrigger
22
+ };
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/index.ts"],"sourcesContent":["\"use client\";\nexport {\n TableOfContents,\n TableOfContentsClientRoot as TableOfContentsRoot,\n} from \"./TableOfContentsClient.js\";\nexport {\n TableOfContentsClientTrigger as TableOfContentsTrigger,\n TableOfContentsClientContent as TableOfContentsContent,\n TableOfContentsClientLink as TableOfContentsLink,\n TableOfContentsClientIndicator as TableOfContentsIndicator,\n} from \"./TableOfContentsClientParts.js\";\nexport { TableOfContentsRail, TableOfContentsList } from \"../TableOfContents.js\";\nexport type {\n TableOfContentsClientRootOwnProps,\n TableOfContentsClientRootProps,\n TableOfContentsLevel,\n TableOfContentsTriggerProps,\n TableOfContentsRailProps,\n TableOfContentsContentProps,\n TableOfContentsListProps,\n TableOfContentsLinkProps,\n TableOfContentsIndicatorProps,\n} from \"../types.js\";\n"],"mappings":";AACA;AAAA,EACE;AAAA,EAC6B;AAAA,OACxB;AACP;AAAA,EACkC;AAAA,EACA;AAAA,EACH;AAAA,EACK;AAAA,OAC7B;AACP,SAAS,qBAAqB,2BAA2B;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { TableOfContentsClientContextValue } from "../types.js";
2
+ export declare const TableOfContentsContext: import("react").Context<TableOfContentsClientContextValue | null>;
3
+ //# sourceMappingURL=table-of-contents-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents-context.d.ts","sourceRoot":"","sources":["../../../../src/components/table-of-contents/client/table-of-contents-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AACrE,eAAO,MAAM,sBAAsB,mEAAgE,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use client";
2
+ import { createContext } from "react";
3
+ const TableOfContentsContext = createContext(null);
4
+ export {
5
+ TableOfContentsContext
6
+ };
7
+ //# sourceMappingURL=table-of-contents-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/table-of-contents/client/table-of-contents-context.ts"],"sourcesContent":["\"use client\";\nimport { createContext } from \"react\";\nimport type { TableOfContentsClientContextValue } from \"../types.js\";\nexport const TableOfContentsContext = createContext<TableOfContentsClientContextValue | null>(null);\n"],"mappings":";AACA,SAAS,qBAAqB;AAEvB,MAAM,yBAAyB,cAAwD,IAAI;","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { TableOfContentsInteractionOptions, TableOfContentsInteractions } from "../types.js";
2
+ export declare function attachTableOfContentsInteractions({ root, getOpen, requestOpen, controlled, openOnHover, openDelay, closeDelay, }: TableOfContentsInteractionOptions): TableOfContentsInteractions;
3
+ //# sourceMappingURL=table-of-contents-interactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-of-contents-interactions.d.ts","sourceRoot":"","sources":["../../../../src/components/table-of-contents/client/table-of-contents-interactions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAElG,wBAAgB,iCAAiC,CAAC,EAChD,IAAI,EACJ,OAAO,EACP,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,UAAU,GACX,EAAE,iCAAiC,GAAG,2BAA2B,CA+JjE"}
@@ -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