@accelint/design-system 0.11.0 → 0.11.2
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/dist/components/aria/index.d.ts +4 -4
- package/dist/components/aria/index.js.map +1 -1
- package/dist/components/button/index.d.ts +3 -3
- package/dist/components/button/index.js +6 -1
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/date-field/index.js.map +1 -1
- package/dist/components/date-input/index.js.map +1 -1
- package/dist/components/dialog/index.d.ts +1 -1
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/element/index.js.map +1 -1
- package/dist/components/group/index.js.map +1 -1
- package/dist/components/icon/index.d.ts +1 -1
- package/dist/components/input/index.js.map +1 -1
- package/dist/components/menu/index.js.map +1 -1
- package/dist/components/merge-provider/index.js.map +1 -1
- package/dist/components/options/index.js.map +1 -1
- package/dist/components/picker/index.js.map +1 -1
- package/dist/components/query-builder/group.js.map +1 -1
- package/dist/components/query-builder/index.js.map +1 -1
- package/dist/components/query-builder/rule.js.map +1 -1
- package/dist/components/query-builder/utils.js.map +1 -1
- package/dist/components/query-builder/value-editor.js.map +1 -1
- package/dist/components/query-builder/value-selector.js +3 -1
- package/dist/components/query-builder/value-selector.js.map +1 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/switch/index.js.map +1 -1
- package/dist/components/text-field/index.d.ts +80 -8
- package/dist/components/textarea/index.js.map +1 -1
- package/dist/components/time-field/index.js.map +1 -1
- package/dist/components/tree/index.js.map +1 -1
- package/dist/components/tree/utils.js.map +1 -1
- package/dist/hooks/use-collection-render/index.js.map +1 -1
- package/dist/hooks/use-slot/index.js.map +1 -1
- package/dist/hooks/use-theme/index.js.map +1 -1
- package/dist/hooks/use-tree/index.js.map +1 -1
- package/dist/hooks/use-tree/utils.js.map +1 -1
- package/dist/hooks/use-update-effect/index.js.map +1 -1
- package/dist/ladle/actions.js.map +1 -1
- package/dist/test/setup.js +7 -7
- package/dist/test/setup.js.map +1 -1
- package/dist/utils/css/index.js.map +1 -1
- package/dist/utils/props/index.js.map +1 -1
- package/package.json +13 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/tree/utils.ts"],"names":[],"mappings":";;;AAsBO,SAAS,yBAAA,CACd,EAAA,EACA,iBAAA,EACA,MAAA,EACA,OAAA,EACoB;AACpB,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA,EAAU,CAAC,IAAA,KACT,CAAC,GAAG,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,KAAQ;AACrB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAG,CAAA,EAAG,KAAA;AAE1B,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,OAAO,EAAC;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/tree/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { isTextDropItem } from '@react-aria/dnd';\nimport type {\n DropItem,\n DropOperation,\n Key,\n TextDropItem,\n} from '@react-types/shared';\nimport type { DragAndDropOptions } from 'react-aria-components';\nimport type { TreeNode, UseTreeResult } from '../../types/use-tree';\n\nexport function createDragAndDropHandlers<T>(\n id: Key,\n acceptedDragTypes: string[],\n lookup: Record<Key, TreeNode<T>>,\n actions: UseTreeResult<T>['actions'],\n): DragAndDropOptions {\n return {\n acceptedDragTypes,\n getDropOperation,\n getItems: (keys: Set<Key>) =>\n [...keys].map((key) => {\n const node = lookup[key]?.value;\n\n if (!node) {\n return {};\n }\n\n const payload = JSON.stringify(node);\n\n return [\n 'all',\n 'type' in node ? node.type : undefined,\n ...('types' in node ? (node.types ?? []) : []),\n ].reduce<Record<string, string>>((acc, type) => {\n if (!type) return acc;\n\n acc[`tree-${type}`] = payload;\n\n return acc;\n }, {});\n }),\n onDragEnd: () => actions.revertIsExpanded(),\n onDragStart: ({ keys }) => actions.toggleIsExpanded(keys, false, true),\n onInsert: ({ items, target }) => {\n // Wrap async return function where void expected, fuck SQ\n (async () => {\n const processedItems = await processDroppedItems(\n items,\n acceptedDragTypes,\n );\n\n actions.remove(...processedItems.map((item) => item.id));\n\n if (target.dropPosition === 'before') {\n actions.insertBefore(target.key, ...processedItems);\n } else if (target.dropPosition === 'after') {\n actions.insertAfter(target.key, ...processedItems);\n }\n })();\n },\n onReorder({ keys, target }) {\n const values = Array.from(keys).flatMap((key) => {\n const value = lookup[key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n });\n\n actions.remove(...keys);\n\n if (target.dropPosition === 'before') {\n actions.insertBefore(target.key, ...values);\n } else if (target.dropPosition === 'after') {\n actions.insertAfter(target.key, ...values);\n }\n },\n onRootDrop: ({ items }) => {\n // See above, thanks SQ for ensuring high quality code\n (async () => {\n const processedItems = await processDroppedItems(\n items,\n acceptedDragTypes,\n );\n\n actions.remove(...processedItems.map((item) => item.id));\n\n actions.append(id, ...processedItems);\n })();\n },\n };\n}\n\nexport function getDropOperation(): DropOperation {\n return 'move';\n}\n\nexport async function processDroppedItems(\n items: DropItem[],\n acceptedDragTypes: string[],\n) {\n return await Promise.all(\n items\n .filter(isTextDropItem)\n .map((item) => processDroppedItem(item, acceptedDragTypes)),\n );\n}\n\nexport async function processDroppedItem(\n item: TextDropItem,\n acceptedDragTypes: string[],\n) {\n const payload = await getDroppedItemPayload(item, acceptedDragTypes);\n\n return payload\n ? JSON.parse(payload)\n : Promise.reject(new Error('No supported type payload'));\n}\n\nexport async function getDroppedItemPayload(\n item: TextDropItem,\n acceptedDragTypes: string[],\n) {\n return await Promise.any(\n acceptedDragTypes.map(\n async (type) =>\n (await item.getText(type)) ??\n Promise.reject(new Error('Unsupported type')),\n ),\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-collection-render/index.tsx"],"names":[],"mappings":";;;;AAqBO,SAAS,mBAAA,CACd,UAAA,EACA,MAAA,EACA,mBAAA,EACA;AACA,EAAA,OAAO,iBAAA,CAAkB;AAAA;AAAA,IAEvB,OAAO,MAAA,GAAS,UAAA,CAAW,WAAA,CAAa,MAAA,CAAO,GAAG,CAAA,GAAI,UAAA;AAAA,IACtD,YAAA,EAAc,CAAC,mBAAmB,CAAA;AAAA,IAClC,SAAS,IAAA,EAAM;AAEb,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAQ,IAAI,CAAA;AAElC,MAAA,IAAI,CAAC,mBAAA,IAAuB,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAChD,QAAA,OAAO,QAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-collection-render/index.tsx"],"names":[],"mappings":";;;;AAqBO,SAAS,mBAAA,CACd,UAAA,EACA,MAAA,EACA,mBAAA,EACA;AACA,EAAA,OAAO,iBAAA,CAAkB;AAAA;AAAA,IAEvB,OAAO,MAAA,GAAS,UAAA,CAAW,WAAA,CAAa,MAAA,CAAO,GAAG,CAAA,GAAI,UAAA;AAAA,IACtD,YAAA,EAAc,CAAC,mBAAmB,CAAA;AAAA,IAClC,SAAS,IAAA,EAAM;AAEb,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAQ,IAAI,CAAA;AAElC,MAAA,IAAI,CAAC,mBAAA,IAAuB,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAChD,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,EAAE,KAAI,GAAI,IAAA;AAChB,MAAA,MAAM,QAAA,GAAW,UAAA,CAAW,WAAA,CAAY,GAAG,CAAA;AAE3C,MAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,mBAAA,CAAoB,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,YAAA,EAAc,UAAU,CAAA;AAAA,QACjE,QAAA;AAAA,QAAA,CACC,QAAA,IAAY,IAAA,IACZ,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,EAAG,IAAA,KAAS,MAAA,KACvC,mBAAA,CAAoB,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,YAAA,EAAc,SAAS;AAAA,OAAA,EACpE,CAAA;AAAA,IAEJ;AAAA,GACD,CAAA;AACH","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useCachedChildren } from '@react-aria/collections';\nimport type { Collection, ItemDropTarget, Node } from '@react-types/shared';\nimport type { ReactNode } from 'react';\n\n/**\n * Copied from RAC, unexported hook: https://github.com/adobe/react-spectrum/blob/main/packages/react-aria-components/src/Collection.tsx#L148\n *\n * Hook serves as the basis of the root and branch renderers for Collections: https://github.com/adobe/react-spectrum/blob/main/packages/react-aria-components/src/Collection.tsx#L139\n */\nexport function useCollectionRender(\n collection: Collection<Node<unknown>>,\n parent: Node<unknown> | null,\n renderDropIndicator?: (target: ItemDropTarget) => ReactNode,\n) {\n return useCachedChildren({\n // biome-ignore lint/style/noNonNullAssertion: intentional\n items: parent ? collection.getChildren!(parent.key) : collection,\n dependencies: [renderDropIndicator],\n children(node) {\n // biome-ignore lint/style/noNonNullAssertion: intentional\n const rendered = node.render!(node);\n\n if (!renderDropIndicator || node.type !== 'item') {\n return rendered;\n }\n\n const { key } = node;\n const keyAfter = collection.getKeyAfter(key);\n\n return (\n <>\n {renderDropIndicator({ type: 'item', key, dropPosition: 'before' })}\n {rendered}\n {(keyAfter == null ||\n collection.getItem(keyAfter)?.type !== 'item') &&\n renderDropIndicator({ type: 'item', key, dropPosition: 'after' })}\n </>\n );\n },\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-slot/index.ts"],"names":[],"mappings":";;;AA+BO,SAAS,OAAA,GAA2C;AAEzD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAI3B,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAC,EAAA,KAA2B;AAClD,IAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,IAAA,UAAA,CAAW,CAAC,CAAC,EAAE,CAAA;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-slot/index.ts"],"names":[],"mappings":";;;AA+BO,SAAS,OAAA,GAA2C;AAEzD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,OAAO,KAAK,CAAA;AAI3B,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,CAAC,EAAA,KAA2B;AAClD,IAAA,MAAA,CAAO,OAAA,GAAU,IAAA;AACjB,IAAA,UAAA,CAAW,CAAC,CAAC,EAAE,CAAA;AAAA,EACjB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,CAAC,KAAK,OAAO,CAAA;AACtB","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n type RefCallback,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\n/**\n * Detects whether a slot has been utilized\n *\n * Example:\n * Parent component implements RAC Provider, with a slotted context\n * Child component implements slot prop matching provided slot in context\n * Parent is able to see that the slot has been fulfilled\n *\n * Copied from RAC: https://github.com/adobe/react-spectrum/blob/main/packages/react-aria-components/src/utils.tsx#L213\n * Due to not being exported, but quite handy\n */\nexport function useSlot(): [RefCallback<Element>, boolean] {\n // Assume we do have the slot in the initial render.\n const [hasSlot, setHasSlot] = useState(true);\n const hasRun = useRef(false);\n\n // A callback ref which will run when the slotted element mounts.\n // This should happen before the useLayoutEffect below.\n const ref = useCallback((el: HTMLElement | null) => {\n hasRun.current = true;\n setHasSlot(!!el);\n }, []);\n\n // If the callback hasn't been called, then reset to false.\n useLayoutEffect(() => {\n if (!hasRun.current) {\n setHasSlot(false);\n }\n }, []);\n\n return [ref, hasSlot];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-theme/index.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-theme/index.tsx"],"names":[],"mappings":";;;;;;;;;AA+BA,IAAM,eAA6B,EAAC;AACpC,IAAM,YAAA,GAAe,cAA4B,YAAY,CAAA;AAC7D,IAAM,eAAA,GAAkB,cAA0C,IAAI,CAAA;AAyB/D,SAAS,SACd,QAAA,EAGA;AACA,EAAA,MAAM,KAAA,GAAQ,WAAW,YAAY,CAAA;AACrC,EAAA,MAAM,GAAA,GAAM,WAAW,eAAe,CAAA;AAEtC,EAAA,OAAO,OAAA;AAAA,IACL,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,GAAI,CAAC,CAAC,QAAA,IAAY,CAAC,CAAC,GAAA,GAChB;AAAA,QACE,QAAA,EAAU,eAAA,CAAgB,QAAA,EAAU,GAAG;AAAA,UAEzC;AAAC,KACP,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,QAAA,EAAU,GAAG;AAAA,GACvB;AACF;AAEA,SAAS,qBAAA,CACP,UAAA,EACA,OAAA,EACA,YAAA,EACA;AACA,EAAA,OAAO,UAAA,KAAe,CAAC,OAAA,IAAW,YAAA,CAAA;AACpC;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,SAAA,EAAW,aAAA;AAAA,EACX,OAAA;AAAA,EACA,KAAA,EAAO,SAAA;AAAA,EACP,OAAO,SAAA,GAAY,YAAA;AAAA,EACnB;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAqC,IAAI,CAAA;AAC/D,EAAA,MAAM,SAAS,QAAA,EAAS;AAExB,EAAA,MAAM,SAAA,GAAY,OAAA;AAAA,IAChB,MACE,IAAA;AAAA,MACE,IAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,SAAA,CAAU,SAAA;AAAA,MACV,qBAAA;AAAA,QACE,MAAM,MAAA,EAAQ,OAAA;AAAA,QACd,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,qBAAA;AAAA,QACE,MAAM,MAAA,EAAQ,QAAA;AAAA,QACd,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,qBAAA,CAAsB,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,iBAAiB,CAAA;AAAA,MACjE,qBAAA,CAAsB,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAAA,MACxD,qBAAA,CAAsB,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,aAAa,CAAA;AAAA,MAC1D,qBAAA,CAAsB,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAAA,MACxD,qBAAA,CAAsB,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,YAAY,CAAA;AAAA,MACxD,qBAAA,CAAsB,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,iBAAiB,CAAA;AAAA,MAClE,qBAAA,CAAsB,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,aAAa;AAAA,KAC5D;AAAA,IACF;AAAA,MACE,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,CAAO,SAAA;AAAA,MACP,SAAA,CAAU,SAAA;AAAA,MACV,MAAM,MAAA,EAAQ,OAAA;AAAA,MACd,MAAM,MAAA,EAAQ,QAAA;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,KAAA;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,KAAA;AAAA,MACN,IAAA,EAAM,KAAA;AAAA,MACN,IAAA,EAAM,UAAA;AAAA,MACN,IAAA,EAAM;AAAA;AACR,GACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,GAAI,OAAA,GAAU,MAAA,CAAO,KAAA,GAAQ,EAAC;AAAA,MAC9B,GAAG,SAAA,CAAU,KAAA;AAAA,MACb,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,MAAA,CAAO,KAAA,EAAO,SAAA,CAAU,OAAO,SAAS;AAAA,GACpD;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,GAAI,UAAU,MAAA,GAAS,SAAA;AAAA,MACvB,SAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,WAAW,KAAK;AAAA,GAC/C;AAEA,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,IAAI,OAAA,EAAS;AACf,MAAA,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,OAAO,CAAC,CAAA;AAAA,IAC7C;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,KAAK,CAAC,CAAA;AAErB,EAAA,MAAM,EAAE,QAAA,EAAU,eAAA,EAAgB,GAAI,YAAA;AACtC,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAY,GAAI,eAAA;AAElC,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAsB,OACnC,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,KAAA,EACtB,8BAAC,WAAA,EAAA,EAAY,KAAA,EAAO,GAAA,EAAM,QAAA,EAAS,GACrC,CAAA,EACF,CAAA;AAEJ","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useLayoutEffect } from '@react-aria/utils';\nimport { clsx } from 'clsx';\nimport { createContext, useContext, useMemo, useRef, useState } from 'react';\nimport {\n defaultElevations,\n defaultFocus,\n defaultGenericColors,\n defaultRadius,\n defaultSemanticColors,\n defaultSizes,\n defaultSpace,\n defaultTypography,\n defaultZIndex,\n} from '../../styles/theme.css';\nimport type { Contract } from '../../types/vanilla-extract';\nimport { computeContract } from '../../utils/css';\nimport type { ThemeContext, ThemeProviderProps } from './types';\nimport { root } from './use-theme.css';\n\nconst defaultTheme: ThemeContext = {};\nconst themeContext = createContext<ThemeContext>(defaultTheme);\nconst themeCssContext = createContext<CSSStyleDeclaration | null>(null);\n\n/**\n * Computes CSS values into DeckGL compatible formats using the optionally provided contract\n *\n * This function allows for the reuse of CSS contract tokens within React context for non-CSS\n * use cases. This ensures synchronized theming across the entire rendering stack\n *\n * @example\n * ```\n * import { genericColorVars, useTheme, type RGBA } from '@accelint/design-system';\n *\n * const theme = useTheme({\n * colors: {\n * generic: genericColorVars,\n * },\n * });\n *\n * new ArrowPathLayer({\n * id: 'layer-id',\n * // ...\n * getColor: theme.contract?.colors.generic.neutral.v01 as RGBA,\n * }),\n * ```\n */\nexport function useTheme<T extends Contract>(\n contract?: T,\n): ThemeContext & {\n contract?: ReturnType<typeof computeContract<T>>;\n} {\n const theme = useContext(themeContext);\n const css = useContext(themeCssContext);\n\n return useMemo(\n () => ({\n ...theme,\n ...(!!contract && !!css\n ? {\n contract: computeContract(contract, css),\n }\n : {}),\n }),\n [theme, contract, css],\n );\n}\n\nfunction localInheritOrDefault(\n localClass?: string,\n inherit?: boolean,\n defaultClass?: string,\n) {\n return localClass ?? (!inherit && defaultClass);\n}\n\nexport function ThemeProvider({\n children,\n className: classNameProp,\n inherit,\n style: styleProp,\n theme: themeProp = defaultTheme,\n vars,\n}: ThemeProviderProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [css, setCss] = useState<CSSStyleDeclaration | null>(null);\n const parent = useTheme();\n\n const className = useMemo(\n () =>\n clsx(\n root,\n classNameProp,\n inherit && parent.className,\n themeProp.className,\n localInheritOrDefault(\n vars?.colors?.generic,\n inherit,\n defaultGenericColors,\n ),\n localInheritOrDefault(\n vars?.colors?.semantic,\n inherit,\n defaultSemanticColors,\n ),\n localInheritOrDefault(vars?.elevation, inherit, defaultElevations),\n localInheritOrDefault(vars?.focus, inherit, defaultFocus),\n localInheritOrDefault(vars?.radius, inherit, defaultRadius),\n localInheritOrDefault(vars?.sizes, inherit, defaultSizes),\n localInheritOrDefault(vars?.space, inherit, defaultSpace),\n localInheritOrDefault(vars?.typography, inherit, defaultTypography),\n localInheritOrDefault(vars?.zIndex, inherit, defaultZIndex),\n ),\n [\n classNameProp,\n inherit,\n parent.className,\n themeProp.className,\n vars?.colors?.generic,\n vars?.colors?.semantic,\n vars?.elevation,\n vars?.focus,\n vars?.radius,\n vars?.sizes,\n vars?.space,\n vars?.typography,\n vars?.zIndex,\n ],\n );\n\n const style = useMemo(\n () => ({\n ...(inherit ? parent.style : {}),\n ...themeProp.style,\n ...styleProp,\n }),\n [inherit, parent.style, themeProp.style, styleProp],\n );\n\n const theme = useMemo(\n () => ({\n ...(inherit ? parent : themeProp),\n className,\n style,\n }),\n [inherit, parent, themeProp, className, style],\n );\n\n useLayoutEffect(() => {\n if (ref.current) {\n setCss(window.getComputedStyle(ref.current));\n }\n }, [className, style]);\n\n const { Provider: ClassesProvider } = themeContext;\n const { Provider: CssProvider } = themeCssContext;\n\n return (\n <div ref={ref} className={className} style={style}>\n <ClassesProvider value={theme}>\n <CssProvider value={css}>{children}</CssProvider>\n </ClassesProvider>\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-tree/index.ts"],"names":["lookup","tree","getItem","update","value"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useTreeData } from '@react-stately/data';\nimport type { Key } from '@react-types/shared';\nimport isEqual from 'lodash/isEqual';\nimport { useCallback, useId, useMemo, useRef } from 'react';\nimport type {\n TreeActions,\n TreeNode,\n TreeNodes,\n UseTreeOptions,\n UseTreeResult,\n} from '../../types/use-tree';\nimport { useUpdateEffect } from '../use-update-effect';\nimport { getChildren, getKey, mapTree, toggleVisibility } from './utils';\n\nexport function useTree<T>({\n allowsExpansion = true,\n allowsVisibility = false,\n nodes,\n selectionMode = 'none',\n onSelectionChange,\n onUpdate,\n}: UseTreeOptions<T>): UseTreeResult<T> {\n const rootKey = useId();\n\n const list = useTreeData({\n initialItems: nodes,\n getChildren,\n getKey,\n });\n\n useUpdateEffect(() => {\n if (selectionMode === 'none' && list.selectedKeys.size) {\n list.setSelectedKeys(new Set());\n }\n }, [selectionMode, list.selectedKeys.size]);\n\n /**\n * useTreeData doesn't update the state of TreeNode.value when updates\n * are made to children.\n *\n * Given the structure:\n * Foo\n * - Bar\n * - Cat\n *\n * There will be TreeNodes for each item, with a value that represents\n * the original node passed in. If an update occurs to one of the child\n * nodes (Bar, Cat), then Foo node's value is NOT updated to reflect that\n * change. This means that each node is the source of truth only for itself\n * and not any of its children.\n *\n * To provide a completely accurate tree, we need to override the getItem\n * and update methods, as well as replace the list.items with a tree that\n * is completely accurate at all times. This requires storing (depth first)\n * each node in a lookup, so that parent node's values can be updated to\n * reflect the current state of their children.\n */\n const { lookup, tree, getItem, update } = useMemo(() => {\n const lookup: Record<Key, TreeNode<T>> = {};\n\n let tree = mapTree(\n {\n key: rootKey,\n children: list.items,\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n node = lookup[node.key] = getItem(node.key);\n\n return node;\n },\n );\n\n if (allowsVisibility) {\n tree = mapTree(\n {\n key: rootKey,\n children: toggleVisibility(tree.children),\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n lookup[node.key] = node;\n\n return node;\n },\n );\n }\n\n function getItem(key: Key): TreeNode<T> {\n let node = lookup[key];\n\n if (node) {\n return node;\n }\n\n node = list.getItem(key) as TreeNode<T>;\n\n if (!node) {\n throw new Error(`Key of ${key} does not exist in tree`);\n }\n\n if ('nodes' in node.value) {\n return {\n ...node,\n value: {\n ...node.value,\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n },\n };\n }\n\n return node;\n }\n\n function update(key: Key, patch: Partial<TreeNodes<T>>) {\n const node = getItem(key);\n\n let value: TreeNode<T>['value'];\n\n if ('nodes' in node.value) {\n value = {\n ...node.value,\n ...patch,\n // Disallow a parent update to change child values\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n };\n } else {\n value = {\n ...node.value,\n ...patch,\n };\n }\n\n /**\n * We must immediately update the state of the lookup due to the\n * possibility of a queue of state changes and we can't allow for\n * a parent to update and wipe out a previous child update\n */\n lookup[key] = {\n ...node,\n value,\n };\n\n list.update(key, value);\n }\n\n return { lookup, tree, getItem, update };\n }, [rootKey, list, allowsVisibility]);\n\n const treeRef = useRef(tree);\n\n /**\n * Because tree is a computed value and there are so many methods\n * that update list.items, it's far simpler to fire the onUpdate\n * during the render cycle. However, this means that onUpdate can\n * only be used for side effect purposes and should not trigger\n * state updates\n */\n useUpdateEffect(() => {\n if (isEqual(treeRef.current, tree)) {\n return;\n }\n\n treeRef.current = tree;\n\n onUpdate?.(tree.children.map(({ value }) => value));\n }, [tree]);\n\n const previousExpansionValuesRef = useRef<\n {\n key: Key;\n patch: { isExpanded?: boolean };\n }[]\n >([]);\n\n const revertIsExpanded = useCallback(() => {\n if (!previousExpansionValuesRef.current.length) {\n return;\n }\n\n for (const { key, patch } of previousExpansionValuesRef.current) {\n update(key, patch);\n }\n\n previousExpansionValuesRef.current = [];\n }, [update]);\n\n const toggleIsExpanded = useCallback<TreeActions<T>['toggleIsExpanded']>(\n (selection = 'all', isExpanded = undefined, isRevertable = false) => {\n if (!(allowsExpansion || isRevertable)) {\n return;\n }\n\n if (!isRevertable) {\n previousExpansionValuesRef.current = [];\n }\n\n function toggle({ key, value }: TreeNode<T>) {\n if (key === rootKey || !('nodes' in value)) {\n return;\n }\n\n if (isRevertable) {\n previousExpansionValuesRef.current.push({\n key,\n patch: { isExpanded: value.isExpanded },\n });\n }\n\n update(key, { isExpanded: isExpanded ?? !value.isExpanded });\n }\n\n if (selection === 'all') {\n return mapTree(tree, toggle);\n }\n\n mapTree(tree, (node) => {\n if (!selection.has(node.key)) {\n return;\n }\n\n toggle(node);\n });\n },\n [allowsExpansion, tree, rootKey, update],\n );\n\n const toggleIsSelected = useCallback<TreeActions<T>['toggleIsSelected']>(\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: refactor\n (selection = 'all', isSelected = undefined) => {\n if (\n selectionMode === 'none' ||\n (selectionMode === 'single' &&\n (selection === 'all' || selection.size > 1))\n ) {\n return;\n }\n\n const all = Object.values(lookup);\n\n let keys =\n selection === 'all' ? new Set(all.map(({ key }) => key)) : selection;\n\n if (isSelected != null) {\n keys = isSelected ? keys : new Set();\n\n list.setSelectedKeys(keys);\n\n return onSelectionChange?.(\n (selection === 'all' || keys.size === all.length) && isSelected\n ? 'all'\n : keys,\n );\n }\n\n keys = new Set([\n ...(selectionMode === 'multiple'\n ? [...list.selectedKeys].filter(\n (key) => !(selection as Set<Key>).has(key),\n )\n : []),\n ...[...keys].filter((key) => !list.selectedKeys.has(key)),\n ]);\n\n list.setSelectedKeys(keys);\n\n onSelectionChange?.(\n selection === 'all' && keys.size === all.length ? 'all' : keys,\n );\n },\n [selectionMode, lookup, list, onSelectionChange],\n );\n\n const toggleIsViewable = useCallback<TreeActions<T>['toggleIsViewable']>(\n (selection = 'all', isViewable = undefined) => {\n if (!allowsVisibility) {\n return;\n }\n\n if (selection === 'all') {\n return mapTree(tree, ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, {\n isViewable: isViewable ?? !value.isViewable,\n });\n }\n });\n }\n\n mapTree(\n {\n key: rootKey,\n children: Array.from(selection).reduce(\n (acc, key) => toggleVisibility(acc, key, isViewable),\n tree.children,\n ),\n } as TreeNode<T>,\n ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, { isViewable: value.isViewable });\n }\n },\n );\n },\n [allowsVisibility, tree, rootKey, update],\n );\n\n return useMemo(() => {\n const { items: _, selectedKeys, ...rest } = list;\n\n return {\n actions: {\n ...rest,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n },\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectedKeys,\n selectionMode,\n tree,\n };\n }, [\n list,\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectionMode,\n tree,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n ]);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-tree/index.ts"],"names":["lookup","tree","getItem","update","value"],"mappings":"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","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useTreeData } from '@react-stately/data';\nimport type { Key } from '@react-types/shared';\nimport isEqual from 'lodash/isEqual';\nimport { useCallback, useId, useMemo, useRef } from 'react';\nimport type {\n TreeActions,\n TreeNode,\n TreeNodes,\n UseTreeOptions,\n UseTreeResult,\n} from '../../types/use-tree';\nimport { useUpdateEffect } from '../use-update-effect';\nimport { getChildren, getKey, mapTree, toggleVisibility } from './utils';\n\nexport function useTree<T>({\n allowsExpansion = true,\n allowsVisibility = false,\n nodes,\n selectionMode = 'none',\n onSelectionChange,\n onUpdate,\n}: UseTreeOptions<T>): UseTreeResult<T> {\n const rootKey = useId();\n\n const list = useTreeData({\n initialItems: nodes,\n getChildren,\n getKey,\n });\n\n useUpdateEffect(() => {\n if (selectionMode === 'none' && list.selectedKeys.size) {\n list.setSelectedKeys(new Set());\n }\n }, [selectionMode, list.selectedKeys.size]);\n\n /**\n * useTreeData doesn't update the state of TreeNode.value when updates\n * are made to children.\n *\n * Given the structure:\n * Foo\n * - Bar\n * - Cat\n *\n * There will be TreeNodes for each item, with a value that represents\n * the original node passed in. If an update occurs to one of the child\n * nodes (Bar, Cat), then Foo node's value is NOT updated to reflect that\n * change. This means that each node is the source of truth only for itself\n * and not any of its children.\n *\n * To provide a completely accurate tree, we need to override the getItem\n * and update methods, as well as replace the list.items with a tree that\n * is completely accurate at all times. This requires storing (depth first)\n * each node in a lookup, so that parent node's values can be updated to\n * reflect the current state of their children.\n */\n const { lookup, tree, getItem, update } = useMemo(() => {\n const lookup: Record<Key, TreeNode<T>> = {};\n\n let tree = mapTree(\n {\n key: rootKey,\n children: list.items,\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n node = lookup[node.key] = getItem(node.key);\n\n return node;\n },\n );\n\n if (allowsVisibility) {\n tree = mapTree(\n {\n key: rootKey,\n children: toggleVisibility(tree.children),\n } as TreeNode<T>,\n (node) => {\n if (node.key === rootKey) {\n return;\n }\n\n lookup[node.key] = node;\n\n return node;\n },\n );\n }\n\n function getItem(key: Key): TreeNode<T> {\n let node = lookup[key];\n\n if (node) {\n return node;\n }\n\n node = list.getItem(key) as TreeNode<T>;\n\n if (!node) {\n throw new Error(`Key of ${key} does not exist in tree`);\n }\n\n if ('nodes' in node.value) {\n return {\n ...node,\n value: {\n ...node.value,\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n },\n };\n }\n\n return node;\n }\n\n function update(key: Key, patch: Partial<TreeNodes<T>>) {\n const node = getItem(key);\n\n let value: TreeNode<T>['value'];\n\n if ('nodes' in node.value) {\n value = {\n ...node.value,\n ...patch,\n // Disallow a parent update to change child values\n nodes: node.children.flatMap((child) => {\n const value = lookup[child.key]?.value;\n\n if (value) {\n return [value];\n }\n\n return [];\n }),\n };\n } else {\n value = {\n ...node.value,\n ...patch,\n };\n }\n\n /**\n * We must immediately update the state of the lookup due to the\n * possibility of a queue of state changes and we can't allow for\n * a parent to update and wipe out a previous child update\n */\n lookup[key] = {\n ...node,\n value,\n };\n\n list.update(key, value);\n }\n\n return { lookup, tree, getItem, update };\n }, [rootKey, list, allowsVisibility]);\n\n const treeRef = useRef(tree);\n\n /**\n * Because tree is a computed value and there are so many methods\n * that update list.items, it's far simpler to fire the onUpdate\n * during the render cycle. However, this means that onUpdate can\n * only be used for side effect purposes and should not trigger\n * state updates\n */\n useUpdateEffect(() => {\n if (isEqual(treeRef.current, tree)) {\n return;\n }\n\n treeRef.current = tree;\n\n onUpdate?.(tree.children.map(({ value }) => value));\n }, [tree]);\n\n const previousExpansionValuesRef = useRef<\n {\n key: Key;\n patch: { isExpanded?: boolean };\n }[]\n >([]);\n\n const revertIsExpanded = useCallback(() => {\n if (!previousExpansionValuesRef.current.length) {\n return;\n }\n\n for (const { key, patch } of previousExpansionValuesRef.current) {\n update(key, patch);\n }\n\n previousExpansionValuesRef.current = [];\n }, [update]);\n\n const toggleIsExpanded = useCallback<TreeActions<T>['toggleIsExpanded']>(\n (selection = 'all', isExpanded = undefined, isRevertable = false) => {\n if (!(allowsExpansion || isRevertable)) {\n return;\n }\n\n if (!isRevertable) {\n previousExpansionValuesRef.current = [];\n }\n\n function toggle({ key, value }: TreeNode<T>) {\n if (key === rootKey || !('nodes' in value)) {\n return;\n }\n\n if (isRevertable) {\n previousExpansionValuesRef.current.push({\n key,\n patch: { isExpanded: value.isExpanded },\n });\n }\n\n update(key, { isExpanded: isExpanded ?? !value.isExpanded });\n }\n\n if (selection === 'all') {\n return mapTree(tree, toggle);\n }\n\n mapTree(tree, (node) => {\n if (!selection.has(node.key)) {\n return;\n }\n\n toggle(node);\n });\n },\n [allowsExpansion, tree, rootKey, update],\n );\n\n const toggleIsSelected = useCallback<TreeActions<T>['toggleIsSelected']>(\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: refactor\n (selection = 'all', isSelected = undefined) => {\n if (\n selectionMode === 'none' ||\n (selectionMode === 'single' &&\n (selection === 'all' || selection.size > 1))\n ) {\n return;\n }\n\n const all = Object.values(lookup);\n\n let keys =\n selection === 'all' ? new Set(all.map(({ key }) => key)) : selection;\n\n if (isSelected != null) {\n keys = isSelected ? keys : new Set();\n\n list.setSelectedKeys(keys);\n\n return onSelectionChange?.(\n (selection === 'all' || keys.size === all.length) && isSelected\n ? 'all'\n : keys,\n );\n }\n\n keys = new Set([\n ...(selectionMode === 'multiple'\n ? [...list.selectedKeys].filter(\n (key) => !(selection as Set<Key>).has(key),\n )\n : []),\n ...[...keys].filter((key) => !list.selectedKeys.has(key)),\n ]);\n\n list.setSelectedKeys(keys);\n\n onSelectionChange?.(\n selection === 'all' && keys.size === all.length ? 'all' : keys,\n );\n },\n [selectionMode, lookup, list, onSelectionChange],\n );\n\n const toggleIsViewable = useCallback<TreeActions<T>['toggleIsViewable']>(\n (selection = 'all', isViewable = undefined) => {\n if (!allowsVisibility) {\n return;\n }\n\n if (selection === 'all') {\n return mapTree(tree, ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, {\n isViewable: isViewable ?? !value.isViewable,\n });\n }\n });\n }\n\n mapTree(\n {\n key: rootKey,\n children: Array.from(selection).reduce(\n (acc, key) => toggleVisibility(acc, key, isViewable),\n tree.children,\n ),\n } as TreeNode<T>,\n ({ key, value }) => {\n if (key === rootKey) {\n return;\n }\n\n if (!value.isReadOnly) {\n update(key, { isViewable: value.isViewable });\n }\n },\n );\n },\n [allowsVisibility, tree, rootKey, update],\n );\n\n return useMemo(() => {\n const { items: _, selectedKeys, ...rest } = list;\n\n return {\n actions: {\n ...rest,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n },\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectedKeys,\n selectionMode,\n tree,\n };\n }, [\n list,\n allowsExpansion,\n allowsVisibility,\n lookup,\n selectionMode,\n tree,\n getItem,\n revertIsExpanded,\n toggleIsExpanded,\n toggleIsSelected,\n toggleIsViewable,\n update,\n ]);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-tree/utils.ts"],"names":[],"mappings":";;;AAeO,SAAS,YAAe,IAAA,EAAoB;AACjD,EAAA,OAAO,OAAA,IAAW,IAAA,GAAO,IAAA,CAAK,KAAA,GAAQ,EAAC;AACzC;AAEO,SAAS,OAAU,IAAA,EAAoB;AAC5C,EAAA,OAAO,IAAA,CAAK,EAAA;AACd;AAEO,SAAS,OAAA,CACd,MAEA,QAAA,EACa;AACb,EAAA,IAAI,OAAA,GAAU,KAAA;AAEd,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,KAAU;AAC5C,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAEtC,IAAA,IAAI,WAAW,KAAA,EAAO;AACpB,MAAA,OAAA,GAAU,IAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-tree/utils.ts"],"names":[],"mappings":"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","file":"utils.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type { Key } from '@react-types/shared';\nimport type { TreeNode, TreeNodes } from '../../types/use-tree';\n\nexport function getChildren<T>(node: TreeNodes<T>) {\n return 'nodes' in node ? node.nodes : [];\n}\n\nexport function getKey<T>(node: TreeNodes<T>) {\n return node.id;\n}\n\nexport function mapTree<T>(\n node: TreeNode<T>,\n // biome-ignore lint/suspicious/noConfusingVoidType: void is being used in a return type here. seems like a biome issue\n callback: (node: TreeNode<T>) => void | TreeNode<T> | undefined,\n): TreeNode<T> {\n let changed = false;\n\n const children = node.children.map((child) => {\n const update = mapTree(child, callback);\n\n if (update !== child) {\n changed = true;\n }\n\n return update;\n });\n\n if (changed) {\n node = {\n ...node,\n children,\n };\n }\n\n return callback(node) ?? node;\n}\n\ntype VisibilityUpdateContext = {\n forceIsViewable: boolean;\n parent: {\n isViewable: boolean;\n isVisible: boolean;\n };\n toggle: Key[];\n};\n\nexport function toggleVisibility<T>(\n nodes: TreeNode<T>[],\n target: Key = '',\n isViewable?: boolean,\n): TreeNode<T>[] {\n const toggle: Key[] = [];\n\n let result = toggleVisibilityInternal(nodes, target, isViewable, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n\n // biome-ignore lint/suspicious/noAssignInExpressions: intentional\n while ((target = toggle.shift() ?? '')) {\n result = toggleVisibilityInternal(result, target, undefined, {\n forceIsViewable: false,\n parent: { isViewable: true, isVisible: true },\n toggle,\n });\n }\n\n return result;\n}\n\nfunction toggleVisibilityInternal<T>(\n nodes: TreeNode<T>[],\n target: Key,\n state: boolean | undefined,\n { forceIsViewable, parent, toggle }: VisibilityUpdateContext,\n): TreeNode<T>[] {\n return nodes.map((node) => {\n const isViewable =\n forceIsViewable ||\n (target === node.key\n ? (state ?? !node.value.isViewable)\n : node.value.isViewable);\n\n const isVisible = parent.isVisible && isViewable;\n const willUpdateIsViewable = node.value.isViewable !== isViewable;\n\n // Toggle on parent if child of inactive parent is toggled on\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n isViewable &&\n !parent.isVisible\n ) {\n toggle.push(node.parentKey);\n }\n\n // Toggle off parent if last active child is toggled off\n if (\n node.parentKey &&\n willUpdateIsViewable &&\n !isViewable &&\n parent.isVisible &&\n areSiblingsUnviewable(nodes, node)\n ) {\n toggle.push(node.parentKey);\n }\n\n return {\n ...node,\n children: toggleVisibilityInternal(node.children, target, state, {\n // Toggle all children on if all are inactive and parent is toggled on\n forceIsViewable:\n forceIsViewable ||\n (willUpdateIsViewable &&\n !!isViewable &&\n areUnviewable(node.children)),\n parent: {\n isViewable: !!isViewable,\n isVisible: !!isVisible,\n },\n toggle,\n }),\n value: {\n ...node.value,\n isViewable,\n isVisible,\n },\n };\n });\n}\n\nfunction areUnviewable<T>(nodes: TreeNode<T>[]): boolean {\n return nodes.every(\n ({ children, value }) =>\n !value.isViewable && (!children.length || areUnviewable<T>(children)),\n );\n}\n\nfunction areSiblingsUnviewable<T>(nodes: TreeNode<T>[], node: TreeNode<T>) {\n return areUnviewable(nodes.filter((n) => n !== node));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/use-update-effect/index.ts"],"names":[],"mappings":";;;AAcA,SAAS,eAAA,GAA2B;AAClC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAE3B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAElB,IAAA,OAAO,IAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/use-update-effect/index.ts"],"names":[],"mappings":";;;AAcA,SAAS,eAAA,GAA2B;AAClC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAI,CAAA;AAE3B,EAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,IAAA,OAAA,CAAQ,OAAA,GAAU,KAAA;AAElB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,OAAA,CAAQ,OAAA;AACjB;AAEO,SAAS,eAAA,CAAgB,QAAoB,IAAA,EAAW;AAC7D,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAO,MAAA,EAAO;AAAA,IAChB;AAAA,EACF,GAAG,IAAI,CAAA;AACT","file":"index.js","sourcesContent":["/*\n * Copyright 2025 Hypergiant Galactic Systems Inc. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport { useEffect, useRef } from 'react';\n\nfunction useIsFirstMount(): boolean {\n const isFirst = useRef(true);\n\n if (isFirst.current) {\n isFirst.current = false;\n\n return true;\n }\n\n return isFirst.current;\n}\n\nexport function useUpdateEffect(effect: () => void, deps: any) {\n const isFirstMount = useIsFirstMount();\n\n useEffect(() => {\n if (!isFirstMount) {\n return effect();\n }\n }, deps);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/.pnpm/@ladle+react@4.1.2_@swc+helpers@0.5.17_@types+node@
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/@ladle+react@4.1.2_@swc+helpers@0.5.17_@types+node@24.2.0_@types+react@19.1.9_acorn@8.1_6ff39e1e721d442b059118618a41a0c4/node_modules/@ladle/react/lib/app/exports.ts","../../src/ladle/actions.ts"],"names":[],"mappings":";;;;;;AA+CO,IAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AACtC,EAAA,MAAM,WAAY,MAAA,CACf,aAAA;AACH,EAAA,OAAO,CAAC,KAAA,GAAa,MAAA,KACnB,QAAA,CAAS;AAAA,IACP,MAAM,UAAA,CAAW,YAAA;AAAA,IACjB,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,IACrB,KAAA,EAAO;AAAA,GACR,CAAA;AACL,CAAA;;;ACtDO,SAAS,WAAc,IAAA,EAA+B;AAC3D,EAAA,OAAO,IAAA,CAAK,MAAA,CAAmB,CAAC,GAAA,EAAK,GAAA,KAAQ;AAC3C,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA,CAAO,GAAa,CAAA;AAE/B,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACP","file":"actions.js","sourcesContent":["import type * as React from \"react\";\nimport { useLadleContext } from \"./src/context\";\nimport {\n StoryDecorator,\n ActionType,\n GlobalState,\n ThemeState,\n ModeState,\n GlobalAction,\n Config,\n KnownMeta,\n MetaJson as BaseMetaJson,\n MetaJsonStory as BaseMetaJsonStory,\n} from \"../shared/types\";\n\nimport * as msw from \"msw\";\nexport { msw };\n\nexport type { UserConfig } from \"../shared/types\";\nexport { useMDXComponents } from \"@mdx-js/react\";\nexport const Story = (props: any) => props.children;\nexport const Meta = (props: any) => props.children;\nexport const Description = (props: any) => props.children;\n\ntype ReactNodeWithoutObject =\n | React.ReactElement\n | string\n | number\n | boolean\n | null\n | undefined;\n\nexport { useLadleContext, ActionType, ThemeState, ModeState };\nexport type { StoryDecorator };\n\n// deprecated, linkTo is just easier to use\nexport const useLink = () => {\n const { dispatch } = useLadleContext();\n return (value: string) => dispatch({ type: ActionType.UpdateStory, value });\n};\n\nexport const linkTo = (value: string) => {\n const dispatch = (window as any)\n .ladleDispatch as React.Dispatch<GlobalAction>;\n return () => dispatch({ type: ActionType.UpdateStory, value });\n};\n\nexport const action = (name: string) => {\n const dispatch = (window as any)\n .ladleDispatch as React.Dispatch<GlobalAction>;\n return (event: any = undefined) =>\n dispatch({\n type: ActionType.UpdateAction,\n value: { name, event },\n clear: false,\n });\n};\n\nexport type GlobalProvider = React.FC<{\n globalState: GlobalState;\n dispatch: React.Dispatch<GlobalAction>;\n config: Config;\n children: ReactNodeWithoutObject;\n storyMeta?: Meta;\n}>;\n\nexport type SourceHeader = React.FC<{\n path: string;\n locStart: number;\n locEnd: number;\n}>;\n\nexport interface StoryDefault<P = {}> {\n args?: Args<P>;\n argTypes?: ArgTypes<P>;\n decorators?: StoryDecorator<P>[];\n meta?: Meta;\n title?: string;\n msw?: msw.RequestHandler[];\n parameters?: { [key: string]: any };\n}\n\nexport interface Story<P = {}> extends React.FC<P> {\n args?: Args<P>;\n argTypes?: ArgTypes<P>;\n decorators?: StoryDecorator<P>[];\n meta?: Meta;\n storyName?: string;\n msw?: msw.RequestHandler[];\n parameters?: { [key: string]: any };\n}\n\nexport type Args<\n P = {\n [key: string]: any;\n },\n> = Partial<P>;\n\nexport type ControlType =\n | \"select\"\n | \"multi-select\"\n | \"radio\"\n | \"inline-radio\"\n | \"check\"\n | \"inline-check\"\n | \"background\"\n | \"color\"\n | \"date\"\n | \"number\"\n | \"text\"\n | \"boolean\"\n | \"range\";\n\nexport interface ArgType<K = any> {\n control?: {\n name?: string;\n labels?: { [key: string]: string };\n type: ControlType;\n min?: number;\n max?: number;\n step?: number;\n [key: string]: any;\n };\n mapping?: { [key: string | number]: any };\n options?: K[] | unknown;\n defaultValue?: K;\n description?: string;\n name?: string;\n action?: string;\n [key: string]: any;\n}\n\nexport type ArgTypes<\n P = {\n [key: string]: any;\n },\n> = {\n [key in keyof P]?: ArgType<P[key]>;\n};\n\nexport interface Meta extends KnownMeta {\n [key: string]: any;\n}\n\nexport type MetaJson = BaseMetaJson<Meta>;\nexport type MetaJsonStory = BaseMetaJsonStory<Meta>;\n","import { action } from '@ladle/react';\n\nexport function actions<T>(...keys: (keyof T)[]): Partial<T> {\n return keys.reduce<Partial<T>>((acc, key) => {\n acc[key] = action(key as string) as T[keyof T];\n\n return acc;\n }, {});\n}\n"]}
|
package/dist/test/setup.js
CHANGED
|
@@ -3879,7 +3879,7 @@ typeof document !== "undefined" && document.body ? getQueriesForElement(document
|
|
|
3879
3879
|
return helpers;
|
|
3880
3880
|
}, initialValue);
|
|
3881
3881
|
|
|
3882
|
-
// ../../node_modules/.pnpm/@testing-library+react@16.3.0_@testing-library+dom@10.4.0_@types+react-dom@19.1.
|
|
3882
|
+
// ../../node_modules/.pnpm/@testing-library+react@16.3.0_@testing-library+dom@10.4.0_@types+react-dom@19.1.7_@type_006cfc0e867fe4fbd2eb85bf6bc961ee/node_modules/@testing-library/react/dist/@testing-library/react.esm.js
|
|
3883
3883
|
var reactAct = typeof React.act === "function" ? React.act : DeprecatedReactTestUtils.act;
|
|
3884
3884
|
function getGlobalThis() {
|
|
3885
3885
|
if (typeof globalThis !== "undefined") {
|
|
@@ -4025,7 +4025,7 @@ if (typeof process === "undefined" || !process.env?.RTL_SKIP_AUTO_CLEANUP) {
|
|
|
4025
4025
|
}
|
|
4026
4026
|
}
|
|
4027
4027
|
|
|
4028
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4028
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/utils.Ck2hJTRs.js
|
|
4029
4029
|
function getWorkerState() {
|
|
4030
4030
|
const workerState = globalThis.__vitest_worker__;
|
|
4031
4031
|
if (!workerState) {
|
|
@@ -4039,7 +4039,7 @@ function getCurrentEnvironment() {
|
|
|
4039
4039
|
return state?.environment.name;
|
|
4040
4040
|
}
|
|
4041
4041
|
|
|
4042
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4042
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/index.CxRxs566.js
|
|
4043
4043
|
function getRunMode() {
|
|
4044
4044
|
return getWorkerState().config.mode;
|
|
4045
4045
|
}
|
|
@@ -4047,7 +4047,7 @@ function isRunningInBenchmark() {
|
|
|
4047
4047
|
return getRunMode() === "benchmark";
|
|
4048
4048
|
}
|
|
4049
4049
|
|
|
4050
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4050
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/benchmark.C8CRJYG4.js
|
|
4051
4051
|
var benchFns = /* @__PURE__ */ new WeakMap();
|
|
4052
4052
|
var benchOptsMap = /* @__PURE__ */ new WeakMap();
|
|
4053
4053
|
var bench = createBenchmark(function(name, fn2 = noop, options = {}) {
|
|
@@ -4076,7 +4076,7 @@ function formatName(name) {
|
|
|
4076
4076
|
return typeof name === "string" ? name : name instanceof Function ? name.name || "<anonymous>" : String(name);
|
|
4077
4077
|
}
|
|
4078
4078
|
|
|
4079
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4079
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/run-once.Sxe67Wng.js
|
|
4080
4080
|
var filesCount = /* @__PURE__ */ new Map();
|
|
4081
4081
|
var cache = /* @__PURE__ */ new Map();
|
|
4082
4082
|
function runOnce(fn2, key) {
|
|
@@ -4099,7 +4099,7 @@ function isFirstRun() {
|
|
|
4099
4099
|
return firstRun;
|
|
4100
4100
|
}
|
|
4101
4101
|
|
|
4102
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4102
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
|
|
4103
4103
|
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
4104
4104
|
function getDefaultExportFromCjs(x) {
|
|
4105
4105
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
@@ -4111,7 +4111,7 @@ function isChildProcess() {
|
|
|
4111
4111
|
return typeof process !== "undefined" && !!process.send;
|
|
4112
4112
|
}
|
|
4113
4113
|
|
|
4114
|
-
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@
|
|
4114
|
+
// ../../node_modules/.pnpm/vitest@2.1.3_@types+node@24.2.0_jsdom@25.0.1_lightningcss@1.30.1_msw@2.10.4_@types+node_bd31f00d24f7de9d4c3dd1b1abef4a27/node_modules/vitest/dist/chunks/date.W2xKR2qe.js
|
|
4115
4115
|
var RealDate = Date;
|
|
4116
4116
|
var now = null;
|
|
4117
4117
|
var MockDate = class _MockDate extends RealDate {
|