@gunkin/uiify 0.0.15-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 (61) hide show
  1. package/README.md +34 -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 +167 -0
  60. package/skills/uiify/scripts/lint.mjs +56 -0
  61. package/skills/uiify/scripts/static.mjs +95 -0
@@ -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
@@ -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"}