@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.
- package/README.md +34 -1
- package/agents/components.md +1 -0
- package/agents/index.md +7 -1
- package/agents/reference/components/table-of-contents.md +185 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/table-of-contents/TableOfContents.d.ts +22 -0
- package/dist/components/table-of-contents/TableOfContents.d.ts.map +1 -0
- package/dist/components/table-of-contents/TableOfContents.js +142 -0
- package/dist/components/table-of-contents/TableOfContents.js.map +1 -0
- package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts +18 -0
- package/dist/components/table-of-contents/client/TableOfContentsClient.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/TableOfContentsClient.js +140 -0
- package/dist/components/table-of-contents/client/TableOfContentsClient.js.map +1 -0
- package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts +7 -0
- package/dist/components/table-of-contents/client/TableOfContentsClientParts.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/TableOfContentsClientParts.js +48 -0
- package/dist/components/table-of-contents/client/TableOfContentsClientParts.js.map +1 -0
- package/dist/components/table-of-contents/client/index.d.ts +5 -0
- package/dist/components/table-of-contents/client/index.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/index.js +23 -0
- package/dist/components/table-of-contents/client/index.js.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-context.d.ts +3 -0
- package/dist/components/table-of-contents/client/table-of-contents-context.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-context.js +7 -0
- package/dist/components/table-of-contents/client/table-of-contents-context.js.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts +3 -0
- package/dist/components/table-of-contents/client/table-of-contents-interactions.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-interactions.js +144 -0
- package/dist/components/table-of-contents/client/table-of-contents-interactions.js.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts +3 -0
- package/dist/components/table-of-contents/client/table-of-contents-pointer.d.ts.map +1 -0
- package/dist/components/table-of-contents/client/table-of-contents-pointer.js +94 -0
- package/dist/components/table-of-contents/client/table-of-contents-pointer.js.map +1 -0
- package/dist/components/table-of-contents/client.d.ts +1 -0
- package/dist/components/table-of-contents/client.js +1 -0
- package/dist/components/table-of-contents/index.d.ts +3 -0
- package/dist/components/table-of-contents/index.d.ts.map +1 -0
- package/dist/components/table-of-contents/index.js +21 -0
- package/dist/components/table-of-contents/index.js.map +1 -0
- package/dist/components/table-of-contents/scrollspy-selection.d.ts +4 -0
- package/dist/components/table-of-contents/scrollspy-selection.d.ts.map +1 -0
- package/dist/components/table-of-contents/scrollspy-selection.js +31 -0
- package/dist/components/table-of-contents/scrollspy-selection.js.map +1 -0
- package/dist/components/table-of-contents/scrollspy.d.ts +4 -0
- package/dist/components/table-of-contents/scrollspy.d.ts.map +1 -0
- package/dist/components/table-of-contents/scrollspy.js +178 -0
- package/dist/components/table-of-contents/scrollspy.js.map +1 -0
- package/dist/components/table-of-contents/types.d.ts +123 -0
- package/dist/components/table-of-contents/types.d.ts.map +1 -0
- package/dist/components/table-of-contents/types.js +1 -0
- package/dist/components/table-of-contents/types.js.map +1 -0
- package/dist/components/table-of-contents.d.ts +1 -0
- package/dist/components/table-of-contents.js +1 -0
- package/dist/styles/index.css +1 -1
- package/package.json +3 -2
- package/skills/uiify/SKILL.md +167 -0
- package/skills/uiify/scripts/lint.mjs +56 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|