UNPKG

@ark-ui/solid

Version:

A collection of unstyled, accessible UI components for Solid, utilizing state machines for seamless interaction.

238 lines (223 loc) 8.63 kB
import { tree_view_exports, useTreeView, useTreeViewContext } from "./HWHAUHQ5.jsx"; import { createTreeCollection } from "./EFII6TXL.jsx"; import { createSplitProps } from "./6WEDGJKQ.jsx"; import { createContext } from "./UZJJWJQM.jsx"; import { __export } from "./7IUG3E2V.jsx"; // src/components/json-tree-view/json-tree-view-root.tsx import { getRootNode, nodeToString, nodeToValue } from "@zag-js/json-tree-utils"; import { createMemo, splitProps } from "solid-js"; // src/components/json-tree-view/get-branch-value.ts function getBranchValues(tree, depth) { let values = []; tree.visit({ onEnter: (node, indexPath) => { if (indexPath.length === 0) return; if (tree.isBranchNode(node) && indexPath.length <= depth) { values.push(tree.getNodeValue(node)); } } }); return values; } // src/components/json-tree-view/json-tree-view-props-context.ts var [JsonTreeViewPropsProvider, useJsonTreeViewPropsContext] = createContext({ hookName: "useJsonTreeViewPropsContext", providerName: "<JsonTreeViewPropsProvider />" }); // src/components/json-tree-view/json-tree-view-root.tsx var splitJsonTreeViewProps = createSplitProps(); var JsonTreeViewRoot = (props) => { const [jsonTreeProps, localProps] = splitJsonTreeViewProps(props, [ "maxPreviewItems", "collapseStringsAfterLength", "quotesOnKeys", "groupArraysAfterLength", "showNonenumerable" ]); const [jsonProps, restProps] = splitProps(localProps, ["data", "defaultExpandedDepth"]); const collection = createMemo(() => { return createTreeCollection({ nodeToValue, nodeToString, rootNode: getRootNode(jsonProps.data) }); }); const defaultExpandedValue = createMemo(() => { return jsonProps.defaultExpandedDepth != null ? getBranchValues(collection(), jsonProps.defaultExpandedDepth) : void 0; }); return <JsonTreeViewPropsProvider value={jsonTreeProps}> <tree_view_exports.Root data-scope="json-tree-view" collection={collection()} defaultExpandedValue={defaultExpandedValue()} {...restProps} > {props.children} </tree_view_exports.Root> </JsonTreeViewPropsProvider>; }; // src/components/json-tree-view/json-tree-view-root-provider.tsx var JsonTreeViewRootProvider = (props) => { return <tree_view_exports.RootProvider data-scope="json-tree-view" {...props} />; }; // src/components/json-tree-view/json-tree-view-tree.tsx import { Index as Index2 } from "solid-js"; // src/components/json-tree-view/json-tree-view-node.tsx import { getAccessibleDescription, jsonNodeToElement, keyPathToKey as keyPathToKey2 } from "@zag-js/json-tree-utils"; import { createMemo as createMemo3 } from "solid-js"; import { Index, Show } from "solid-js/web"; // src/components/json-tree-view/json-tree-view-key-node.tsx import { keyPathToKey } from "@zag-js/json-tree-utils"; import { createMemo as createMemo2 } from "solid-js"; var JsonTreeViewKeyNode = (props) => { const key = createMemo2(() => keyPathToKey(props.node.keyPath)); return <> <span data-kind="key" data-non-enumerable={props.node.isNonEnumerable ? "" : void 0}> {props.showQuotes ? `"${key()}"` : key()} </span> <span data-kind="colon">: </span> </>; }; // src/components/json-tree-view/json-tree-view-value-node.tsx import { For } from "solid-js"; import { Dynamic } from "solid-js/web"; var JsonTreeViewValueNode = (props) => { if (props.node.type === "text") { return <>{props.renderValue?.(props.node) ?? props.node.value}</>; } return <Dynamic component={props.node.tagName} data-root={props.node.properties.root ? "" : void 0} data-type={props.node.properties.nodeType} data-kind={props.node.properties.kind} > <For each={props.node.children}> {(child) => <JsonTreeViewValueNode node={child} renderValue={props.renderValue} />} </For> </Dynamic>; }; // src/components/json-tree-view/json-tree-view-node.tsx var scopeProps = { "data-scope": "json-tree-view" }; function JsonTreeViewNode(props) { const tree = useTreeViewContext(); const nodeState = createMemo3(() => tree().getNodeState({ node: props.node, indexPath: props.indexPath })); const options = useJsonTreeViewPropsContext(); const key = createMemo3(() => keyPathToKey2(props.node.keyPath, { excludeRoot: true })); const valueNode = createMemo3(() => jsonNodeToElement(props.node, options)); const nodeProps = createMemo3(() => { const desc = getAccessibleDescription(props.node); const line = props.indexPath.reduce((acc, curr) => acc + curr, 1); const lineLength = props.indexPath.length - 1; return { ...scopeProps, "aria-label": desc, "data-line": line, style: { ["--line-length"]: lineLength } }; }); return <tree_view_exports.NodeProvider node={props.node} indexPath={props.indexPath}> <Show when={nodeState().isBranch} fallback={<tree_view_exports.Item {...nodeProps()}> <tree_view_exports.ItemText {...scopeProps}> <Show when={key()}> <JsonTreeViewKeyNode node={props.node} showQuotes={options.quotesOnKeys} /> </Show> <JsonTreeViewValueNode node={valueNode()} renderValue={props.renderValue} /> </tree_view_exports.ItemText> </tree_view_exports.Item>} > <tree_view_exports.Branch {...scopeProps}> <tree_view_exports.BranchControl {...nodeProps()}> <Show when={props.arrow}> <tree_view_exports.BranchIndicator {...scopeProps}>{props.arrow}</tree_view_exports.BranchIndicator> </Show> <tree_view_exports.BranchText {...scopeProps}> <Show when={key()}> <JsonTreeViewKeyNode node={props.node} showQuotes={options.quotesOnKeys} /> </Show> <JsonTreeViewValueNode node={valueNode()} renderValue={props.renderValue} /> </tree_view_exports.BranchText> </tree_view_exports.BranchControl> <tree_view_exports.BranchContent {...scopeProps}> <Show when={typeof props.indentGuide === "boolean"} fallback={props.indentGuide}> <tree_view_exports.BranchIndentGuide /> </Show> <Index each={props.node.children}> {(child, index) => <JsonTreeViewNode {...props} node={child()} indexPath={[...props.indexPath, index]} />} </Index> </tree_view_exports.BranchContent> </tree_view_exports.Branch> </Show> </tree_view_exports.NodeProvider>; } // src/components/json-tree-view/json-tree-view-tree.tsx var splitTreeNodeProps = createSplitProps(); var JsonTreeViewTree = (props) => { const [nodeProps, treeProps] = splitTreeNodeProps(props, ["arrow", "indentGuide", "renderValue"]); const tree = useTreeViewContext(); const children = () => tree().collection.getNodeChildren(tree().collection.rootNode); return <tree_view_exports.Tree data-scope="json-tree-view" {...treeProps}> <Index2 each={children()}> {(child, index) => <JsonTreeViewNode node={child()} indexPath={[index]} {...nodeProps} />} </Index2> </tree_view_exports.Tree>; }; // src/components/json-tree-view/use-json-tree-view.ts import { getRootNode as getRootNode2, nodeToString as nodeToString2, nodeToValue as nodeToValue2 } from "@zag-js/json-tree-utils"; import { createMemo as createMemo4, splitProps as splitProps2 } from "solid-js"; import { untrack } from "solid-js/web"; var useJsonTreeView = (props) => { const [jsonProps, restProps] = splitProps2(props, ["data", "defaultExpandedDepth"]); const collection = createMemo4(() => { return createTreeCollection({ nodeToValue: nodeToValue2, nodeToString: nodeToString2, rootNode: getRootNode2(jsonProps.data) }); }); const defaultExpandedValue = createMemo4(() => { return jsonProps.defaultExpandedDepth != null ? getBranchValues(collection(), jsonProps.defaultExpandedDepth) : void 0; }); const machineProps = createMemo4(() => { return { defaultExpandedValue: untrack(defaultExpandedValue), ...restProps, collection: collection(), typeahead: false }; }); return useTreeView(machineProps); }; // src/components/json-tree-view/json-tree-view.tsx var json_tree_view_exports = {}; __export(json_tree_view_exports, { Root: () => JsonTreeViewRoot, RootProvider: () => JsonTreeViewRootProvider, Tree: () => JsonTreeViewTree }); export { JsonTreeViewRoot, JsonTreeViewRootProvider, JsonTreeViewTree, useJsonTreeView, json_tree_view_exports };