@accelint/design-toolkit 5.1.0 → 6.0.0
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/catalog-info.yaml +44 -0
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/accordion/index.js.map +1 -1
- package/dist/components/accordion/styles.d.ts +3 -3
- package/dist/components/accordion/styles.js +1 -1
- package/dist/components/accordion/styles.js.map +1 -1
- package/dist/components/action-bar/index.d.ts +11 -0
- package/dist/components/action-bar/index.js.map +1 -1
- package/dist/components/breadcrumbs/index.d.ts +27 -0
- package/dist/components/breadcrumbs/index.js +4 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/breadcrumbs/styles.d.ts +48 -0
- package/dist/components/breadcrumbs/styles.js +2 -0
- package/dist/components/breadcrumbs/styles.js.map +1 -0
- package/dist/components/breadcrumbs/types.d.ts +20 -0
- package/dist/components/breadcrumbs/types.js +2 -0
- package/dist/components/breadcrumbs/types.js.map +1 -0
- package/dist/components/button/index.d.ts +2 -2
- package/dist/components/button/index.js +1 -1
- package/dist/components/button/index.js.map +1 -1
- package/dist/components/button/styles.d.ts +15 -15
- package/dist/components/button/styles.js +1 -1
- package/dist/components/button/styles.js.map +1 -1
- package/dist/components/button/types.d.ts +7 -5
- package/dist/components/clock/index.d.ts +39 -0
- package/dist/components/clock/index.js +4 -0
- package/dist/components/clock/index.js.map +1 -0
- package/dist/components/clock/types.d.ts +7 -0
- package/dist/components/clock/types.js +2 -0
- package/dist/components/clock/types.js.map +1 -0
- package/dist/components/color-picker/styles.d.ts +3 -3
- package/dist/components/combobox-field/index.d.ts +11 -0
- package/dist/components/combobox-field/index.js.map +1 -1
- package/dist/components/combobox-field/styles.js +1 -1
- package/dist/components/combobox-field/styles.js.map +1 -1
- package/dist/components/dialog/index.js +1 -1
- package/dist/components/dialog/index.js.map +1 -1
- package/dist/components/divider/index.d.ts +32 -0
- package/dist/components/divider/index.js +4 -0
- package/dist/components/divider/index.js.map +1 -0
- package/dist/components/divider/styles.d.ts +5 -0
- package/dist/components/divider/styles.js +2 -0
- package/dist/components/divider/styles.js.map +1 -0
- package/dist/components/divider/types.d.ts +11 -0
- package/dist/components/divider/types.js +2 -0
- package/dist/components/divider/types.js.map +1 -0
- package/dist/components/drawer/index.d.ts +48 -3
- package/dist/components/drawer/index.js +1 -1
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/styles.js +1 -1
- package/dist/components/drawer/styles.js.map +1 -1
- package/dist/components/drawer/types.d.ts +13 -7
- package/dist/components/input/styles.js +1 -1
- package/dist/components/input/styles.js.map +1 -1
- package/dist/components/lines/index.d.ts +9 -0
- package/dist/components/lines/index.js.map +1 -1
- package/dist/components/link/index.d.ts +9 -0
- package/dist/components/link/index.js.map +1 -1
- package/dist/components/link/styles.js +1 -1
- package/dist/components/link/styles.js.map +1 -1
- package/dist/components/menu/styles.js +1 -1
- package/dist/components/menu/styles.js.map +1 -1
- package/dist/components/notice/events.d.ts +10 -0
- package/dist/components/notice/events.js +2 -0
- package/dist/components/notice/events.js.map +1 -0
- package/dist/components/notice/index.d.ts +20 -0
- package/dist/components/notice/index.js +4 -0
- package/dist/components/notice/index.js.map +1 -0
- package/dist/components/notice/styles.d.ts +60 -0
- package/dist/components/notice/styles.js +2 -0
- package/dist/components/notice/styles.js.map +1 -0
- package/dist/components/notice/types.d.ts +75 -0
- package/dist/components/notice/types.js +2 -0
- package/dist/components/notice/types.js.map +1 -0
- package/dist/components/query-builder/index.js +1 -1
- package/dist/components/query-builder/index.js.map +1 -1
- package/dist/components/search-field/styles.js +1 -1
- package/dist/components/search-field/styles.js.map +1 -1
- package/dist/components/select-field/types.d.ts +0 -1
- package/dist/components/sidenav/index.d.ts +57 -6
- package/dist/components/sidenav/index.js +1 -1
- package/dist/components/sidenav/index.js.map +1 -1
- package/dist/components/sidenav/styles.js +1 -1
- package/dist/components/sidenav/styles.js.map +1 -1
- package/dist/components/slider/index.js +1 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/styles.js +1 -1
- package/dist/components/slider/styles.js.map +1 -1
- package/dist/components/table/context.d.ts +11 -0
- package/dist/components/table/context.js +2 -0
- package/dist/components/table/context.js.map +1 -0
- package/dist/components/table/index.d.ts +36 -0
- package/dist/components/table/index.js +4 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/styles.d.ts +134 -0
- package/dist/components/table/styles.js +2 -0
- package/dist/components/table/styles.js.map +1 -0
- package/dist/components/table/table-body.d.ts +12 -0
- package/dist/components/table/table-body.js +2 -0
- package/dist/components/table/table-body.js.map +1 -0
- package/dist/components/table/table-cell.d.ts +12 -0
- package/dist/components/table/table-cell.js +2 -0
- package/dist/components/table/table-cell.js.map +1 -0
- package/dist/components/table/table-header-cell.d.ts +12 -0
- package/dist/components/table/table-header-cell.js +2 -0
- package/dist/components/table/table-header-cell.js.map +1 -0
- package/dist/components/table/table-header.d.ts +12 -0
- package/dist/components/table/table-header.js +2 -0
- package/dist/components/table/table-header.js.map +1 -0
- package/dist/components/table/table-row.d.ts +12 -0
- package/dist/components/table/table-row.js +2 -0
- package/dist/components/table/table-row.js.map +1 -0
- package/dist/components/table/types.d.ts +185 -0
- package/dist/components/table/types.js +2 -0
- package/dist/components/table/types.js.map +1 -0
- package/dist/components/tabs/styles.js +1 -1
- package/dist/components/tabs/styles.js.map +1 -1
- package/dist/components/time-field/index.d.ts +19 -0
- package/dist/components/time-field/index.js +4 -0
- package/dist/components/time-field/index.js.map +1 -0
- package/dist/components/time-field/styles.d.ts +69 -0
- package/dist/components/time-field/styles.js +2 -0
- package/dist/components/time-field/styles.js.map +1 -0
- package/dist/components/time-field/types.d.ts +23 -0
- package/dist/components/time-field/types.js +2 -0
- package/dist/components/time-field/types.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +23 -34
- package/dist/components/tooltip/index.js +1 -1
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/components/tooltip/types.d.ts +5 -6
- package/dist/components/tree/index.d.ts +22 -1
- package/dist/components/tree/index.js +1 -1
- package/dist/components/tree/index.js.map +1 -1
- package/dist/components/tree/styles.js +1 -1
- package/dist/components/tree/styles.js.map +1 -1
- package/dist/components/view-stack/index.d.ts +42 -2
- package/dist/components/view-stack/index.js +1 -1
- package/dist/components/view-stack/index.js.map +1 -1
- package/dist/foundation/token-data.js +1 -1
- package/dist/foundation/token-data.js.map +1 -1
- package/dist/index.css +5 -3
- package/dist/index.d.ts +32 -6
- package/dist/index.js +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/providers/portal.d.ts +9 -0
- package/dist/providers/portal.js +2 -0
- package/dist/providers/portal.js.map +1 -0
- package/dist/providers/theme-provider.d.ts +6 -6
- package/dist/providers/theme-provider.js +1 -1
- package/dist/providers/theme-provider.js.map +1 -1
- package/dist/styles.css +3355 -974
- package/dist/tokens/themes.css +56 -24
- package/dist/tokens/tokens.css +8 -8
- package/dist/tokens/tokens.d.ts +18 -0
- package/dist/tokens/tokens.js +1 -1
- package/dist/tokens/tokens.js.map +1 -1
- package/dist/tokens/types.d.ts +9 -0
- package/dist/variants/variants.css +3 -0
- package/package.json +39 -17
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {jsx}from'react/jsx-runtime';import'client-only';import {
|
|
3
|
+
import {jsx,jsxs,Fragment}from'react/jsx-runtime';import'client-only';import {useFocusable}from'@react-aria/interactions';import {useIsSSR}from'@react-aria/ssr';import {useObjectRef,mergeRefs,mergeProps}from'@react-aria/utils';import {createContext,Children,version,cloneElement}from'react';import {Tooltip,composeRenderProps,useContextProps,TooltipTrigger}from'react-aria-components';import {containsExactChildren}from'./../../lib/react.js';import {PortalProvider}from'./../../providers/portal.js';import {TooltipStyles}from'./styles.js';const S=createContext(null);function h({children:t,ref:e,...r}){e=useObjectRef(e);const{focusableProps:i}=useFocusable(r,e),[o,s]=Children.toArray(t),a=Number.parseInt(version,10)<19?o.ref:o.props.ref;return jsxs(Fragment,{children:[cloneElement(o,{...mergeProps(i,o.props),ref:mergeRefs(a,e)}),s]})}function p({ref:t,...e}){[e,t]=useContextProps(e,t??null,S);const{children:r,delay:i=250,...o}=e;return containsExactChildren({children:r,componentName:p.displayName,restrictions:[[n,{min:1,max:1}]]}),jsx(TooltipTrigger,{...o,delay:i,children:jsx(h,{ref:t,children:r})})}p.displayName="Tooltip.Trigger";function n({children:t,parentRef:e,className:r,offset:i=5,placement:o="bottom",...s}){const m=useIsSSR()?null:document.createElement("div");return m?.setAttribute("class","absolute"),jsx(PortalProvider,{parentRef:e,inject:m,children:jsx(Tooltip,{...s,className:composeRenderProps(r,c=>TooltipStyles({className:c})),offset:i,placement:o,children:t})})}n.displayName="Tooltip",n.Trigger=p;export{n as Tooltip,S as TooltipContext};//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/tooltip/index.tsx"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../src/components/tooltip/index.tsx"],"names":["children","ref","d","focusableProps","useFocusable","u","childRef","b","trigger","R","jsxs","cloneElement","mergeProps","y","mergeRefs","g","tooltip","TooltipTrigger","props","delay","C","jsx","AriaTooltipTrigger","l","E","TooltipFocusable","parentRef","className","placement","overlayContainer","useIsSSR","T","F","AriaTooltip","TooltipStyles","v","N","offset","Tooltip"],"mappings":"qjBA+CEA,EACA,SAEF,CAAA,CAA6D,CAC3DC,QAEA,CAAA,CAAA,CAAA,GAAQ,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAC,YAAA,CAAAC,CAAe,CAAA,CAAIC,KAAuB,CAAA,cACd,CAAA,CAAA,CAAQJ,CAAQK,YAAA,CAK9CC,CAAAA,CAEJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAAC,QAAA,CAAA,OAAkB,CAAA,CAAE,EAAI,CAAA,CAAA,MAAa,CAAMC,QAAc,CAAAC,OAAA,CAAA,EAElE,CAAA,CAAA,EAAA,CAAA,CACEC,CAAAA,GAAA,CACG,CAAA,CAAA,KAAA,CAAA,GAAAC,CAAaH,OACTI,IAAWT,SAAgBK,CAAAA,CAAQ,QAEtC,CAAA,CAAAK,YAAKC,CAAAA,CAAUR,CAAAA,CAAUL,GAC1Bc,UAAA,CACAC,CAAAA,CAAAA,CACH,CAEJ,KAqCA,CAAA,CAAA,GAASC,CAAAA,SAAe,CAAE,CAAA,CAAA,CAAA,CAAAhB,EAAK,CAAA,CAAA,CAAGiB,CAAM,CAAA,CAAwB,SAC/BA,CAAAA,CAAOjB,CAAAA,GAAO,CAAA,CAAA,CAAA,GAAoB,CAEjE,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,wBAAAD,IAAU,CAAA,CAAA,CAAAmB,CAAAA,KAAa,CAAA,QAE/B,CAAA,CAAA,CAAA,KAAsB,CACpB,CAAA,CAAA,GAAA,CAAA,GAAAnB,CAAAA,CACA,CAAA,CAAA,CAAA,OAAAoB,qBAAA,CAAA,CAAA,QAA8B,CAAA,CAAA,CAAA,2BACE,CAAG,YAInCC,CAACC,CAAAA,CAAA,CAAoB,KAAS,CAAA,CAAA,CAAA,GAAOH,CAAAA,CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAAI,GAAA,CAAAC,cAAAH,CAAAA,CAACI,GAAiB,CAAA,CAAA,KAAW,CAAA,CAAA,CAAA,QAAS,CACxCF,GAEJ,CACAN,CAAAA,CAAe,CAAA,GAAA,CAAA,CAAA,CAAA,QAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,6BAI3B,CAAA,SAAAS,CAAAA,CACA,CAAA,QAAA,CAAAC,CAAAA,CACA,SAAS,CAAA,CACT,CAAA,SAAAC,CAAAA,CAAY,CAAA,MAAA,CAAA,CACZ,CAAA,CAAA,CAAGV,SAGH,CAAMW,CAAAA,CADQC,QACmB,CAAO,GAAA,CAAA,CAAA,CAAA,CAAA,MAAS,CAAA,CAAAC,QAAA,EAAA,CAAA,IAAc,SAC/D,CAAA,aAAkB,CAAA,KAAA,CAAa,CAAA,OAAS,CAAA,EAAA,aAErC,OAAe,CAAA,UAAsB,CAAA,CAAQF,GAAAA,CAC5CG,cAAA,CAAA,CAAA,SAACC,CAAA,CACE,CAAA,MACD,CAAA,CAAA,CAAA,QAA8BN,CAAYA,GAAAA,CAAAA,OACxCO,CAAAA,CAAc,GAAE,CAAA,CAAA,SAClB,CAAAC,kBACA,CAAA,CAAA,CAAA,CAAA,EAAAC,aAAQC,CAAAA,CACR,SAAA,CAAWT,EAEV,CAAA,CAAA,CAAA,MAAA5B,CAAAA,CACH,CAAA,SAIE,CAAA,CAAA,CAAA,QAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEtBsC,EAAQ,WAAUrB,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,OAAAA,CAAAA,CAAAA","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'use client';\n\nimport 'client-only';\nimport {\n type FocusableProviderProps,\n useFocusable,\n} from '@react-aria/interactions';\nimport { useIsSSR } from '@react-aria/ssr';\nimport { mergeProps, mergeRefs, useObjectRef } from '@react-aria/utils';\nimport {\n Children,\n cloneElement,\n createContext,\n type DOMAttributes,\n type ReactElement,\n type ReactNode,\n type RefAttributes,\n version,\n} from 'react';\nimport {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n type ContextValue,\n composeRenderProps,\n useContextProps,\n} from 'react-aria-components';\nimport { containsExactChildren } from '@/lib/react';\nimport { PortalProvider } from '@/providers/portal';\nimport { TooltipStyles } from './styles';\nimport type { FocusableElement } from '@react-types/shared';\nimport type { TooltipProps, TooltipTriggerProps } from './types';\n\nexport const TooltipContext =\n createContext<ContextValue<TooltipTriggerProps, HTMLDivElement>>(null);\n\nfunction TooltipFocusable({\n children,\n ref,\n ...props\n}: FocusableProviderProps & RefAttributes<FocusableElement>) {\n ref = useObjectRef(ref);\n\n const { focusableProps } = useFocusable(props, ref);\n const [trigger, tooltip] = Children.toArray(children) as [\n ReactElement<DOMAttributes<FocusableElement>, string>,\n ReactNode,\n ];\n\n const childRef =\n //@ts-expect-error\n Number.parseInt(version, 10) < 19 ? trigger.ref : trigger.props.ref;\n\n return (\n <>\n {cloneElement(trigger, {\n ...mergeProps(focusableProps, trigger.props),\n //@ts-expect-error\n ref: mergeRefs(childRef, ref),\n })}\n {tooltip}\n </>\n );\n}\n/**\n * Tooltip - A contextual popup component for providing additional information\n *\n * Displays helpful information when users hover over or focus on an element.\n * Provides accessible tooltip functionality with proper positioning, keyboard\n * navigation, and screen reader support for enhanced user experience.\n *\n * @example\n * // Basic tooltip\n * <Tooltip.Trigger>\n * <Button>Hover me</Button>\n * <Tooltip>\n * This is helpful information\n * </Tooltip>\n * </Tooltip.Trigger>\n *\n * @example\n * // Tooltip with custom positioning\n * <Tooltip.Trigger>\n * <Button>Hover for info</Button>\n * <Tooltip placement=\"top\" offset={10}>\n * Positioned above with custom offset\n * </Tooltip>\n * </Tooltip.Trigger>\n *\n * @example\n * // Icon with tooltip\n * <Tooltip.Trigger>\n * <Button variant=\"icon\">\n * <Icon><Info /></Icon>\n * </Button>\n * <Tooltip>\n * Additional context for this action\n * </Tooltip>\n * </Tooltip.Trigger>\n */\nfunction TooltipTrigger({ ref, ...props }: TooltipTriggerProps) {\n [props, ref] = useContextProps(props, ref ?? null, TooltipContext);\n\n const { children, delay = 250, ...rest } = props;\n\n containsExactChildren({\n children,\n componentName: TooltipTrigger.displayName,\n restrictions: [[Tooltip, { min: 1, max: 1 }]],\n });\n\n return (\n <AriaTooltipTrigger {...rest} delay={delay}>\n <TooltipFocusable ref={ref}>{children}</TooltipFocusable>\n </AriaTooltipTrigger>\n );\n}\nTooltipTrigger.displayName = 'Tooltip.Trigger';\n\nexport function Tooltip({\n children,\n parentRef,\n className,\n offset = 5,\n placement = 'bottom',\n ...props\n}: TooltipProps) {\n const isSSR = useIsSSR();\n const overlayContainer = isSSR ? null : document.createElement('div');\n overlayContainer?.setAttribute('class', 'absolute');\n return (\n <PortalProvider parentRef={parentRef} inject={overlayContainer}>\n <AriaTooltip\n {...props}\n className={composeRenderProps(className, (className) =>\n TooltipStyles({ className }),\n )}\n offset={offset}\n placement={placement}\n >\n {children}\n </AriaTooltip>\n </PortalProvider>\n );\n}\nTooltip.displayName = 'Tooltip';\n\nTooltip.Trigger = TooltipTrigger;\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { ComponentPropsWithRef
|
|
2
|
-
import {
|
|
1
|
+
import { ComponentPropsWithRef } from 'react';
|
|
2
|
+
import { TooltipProps as TooltipProps$1, TooltipTriggerComponentProps } from 'react-aria-components';
|
|
3
3
|
|
|
4
|
-
type
|
|
4
|
+
type TooltipTriggerProps = Omit<ComponentPropsWithRef<'div'>, 'className'> & TooltipTriggerComponentProps;
|
|
5
|
+
type TooltipProps = TooltipProps$1 & {
|
|
5
6
|
parentRef?: React.RefObject<HTMLElement | null>;
|
|
6
7
|
};
|
|
7
|
-
type TooltipProps = Omit<ComponentPropsWithRef<'div'>, 'className'> & TooltipTriggerComponentProps;
|
|
8
|
-
type TooltipTriggerProps = ComponentProps<typeof Focusable>;
|
|
9
8
|
|
|
10
|
-
export type {
|
|
9
|
+
export type { TooltipProps, TooltipTriggerProps };
|
|
@@ -10,6 +10,27 @@ import '../../hooks/use-tree/types.js';
|
|
|
10
10
|
import './styles.js';
|
|
11
11
|
|
|
12
12
|
declare const TreeContext: react.Context<TreeContextValue>;
|
|
13
|
+
/**
|
|
14
|
+
* Tree - Hierarchical tree view with optional drag-and-drop and visibility
|
|
15
|
+
*
|
|
16
|
+
* Renders a selectable tree with support for nested items, drag-and-drop,
|
|
17
|
+
* selection modes, and visibility controls. Use Tree.Item to define nodes.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* <Tree items={items} expandedKeys={expandedKeys}>
|
|
21
|
+
* {(node) => <Node key={node.key} node={node} />}
|
|
22
|
+
* </Tree>
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* <Tree>
|
|
26
|
+
* <Tree.Item id='one' textValue='one'>
|
|
27
|
+
* <Tree.Item.Content>One</Tree.Item.Content>
|
|
28
|
+
* <Tree.Item id='two' textValue='two'>
|
|
29
|
+
* <Tree.Item.Content>Two</Tree.Item.Content>
|
|
30
|
+
* </Tree.Item>
|
|
31
|
+
* </Tree.Item>
|
|
32
|
+
* </Tree>
|
|
33
|
+
*/
|
|
13
34
|
declare function Tree<T>({ children, className, disabledKeys: disabledKeysProp, dragAndDropConfig, expandedKeys: expandedKeysProp, items, selectedKeys: selectedKeysProp, showRuleLines, showVisibility, selectionMode, variant, visibleKeys: visibleKeysProp, onVisibilityChange, onSelectionChange, ...rest }: TreeProps<T>): react_jsx_runtime.JSX.Element;
|
|
14
35
|
declare namespace Tree {
|
|
15
36
|
var displayName: string;
|
|
@@ -48,4 +69,4 @@ declare namespace ItemActions {
|
|
|
48
69
|
var displayName: string;
|
|
49
70
|
}
|
|
50
71
|
|
|
51
|
-
export { Tree, TreeContext,
|
|
72
|
+
export { Tree, TreeContext, TreeItemContext };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {jsx,jsxs}from'react/jsx-runtime';import
|
|
3
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {Show,Hide,ChevronDown,ChevronUp,DragVert}from'@accelint/icons';import {Cache}from'./../../hooks/use-tree/actions/cache.js';import'client-only';import {createContext,memo,useContext,useMemo}from'react';import {TreeItemContent,TreeItem,composeRenderProps,Text,useDragAndDrop,Tree,DropIndicator}from'react-aria-components';import {Button}from'../button/index.js';import {Checkbox}from'../checkbox/index.js';import {Icon}from'../icon/index.js';import {Lines}from'../lines/index.js';import {TreeStyles,TreeStylesDefaults}from'./styles.js';const {tree:pe,item:ue,content:ye,display:fe,icon:be,label:ve,actions:Te,spacing:E,description:he,drag:Ie,expansion:Ce,visibility:ge}=TreeStyles(),x=createContext({visibilityComputedKeys:new Set,showRuleLines:true,showVisibility:false,variant:TreeStylesDefaults.variant,isStatic:true,onVisibilityChange:()=>{}}),xe=t=>jsx(DropIndicator,{target:t,className:"border border-highlight-hover"}),we=memo(function({level:o,isLastOfSet:s}){const{showRuleLines:m,variant:r}=useContext(x);return Array.from({length:o}).map((i,n)=>{const a=n===o-1?"branch":"vert",d=s&&n>0?"last":a;return jsx(Lines,{variant:d,size:r==="crammed"?"medium":"large",isVisible:m,className:E({variant:r})},n)})});function H({children:t,className:o,disabledKeys:s,dragAndDropConfig:m,expandedKeys:r,items:i,selectedKeys:n,showRuleLines:a=true,showVisibility:d=true,selectionMode:l="multiple",variant:w=TreeStylesDefaults.variant,visibleKeys:y,onVisibilityChange:K,onSelectionChange:N,...D}){if(i&&(s||r||n||y))throw new Error("Tree should only be controlled with state from either `items` or keys props, not both");if(!!i!=(typeof t=="function"))throw new Error("Tree `items` and node iterator `children` must be used together");const{dragAndDropHooks:V}=useDragAndDrop({renderDropIndicator:xe,getAllowedDropOperations:()=>["move"],getDropOperation:()=>"move",...m}),f=useMemo(()=>i?new Cache([...i]):null,[i]),c=useMemo(()=>f?.getAllNodes(),[f]),{disabledKeys:S,expandedKeys:T,selectedKeys:h,visibleKeys:A,visibilityComputedKeys:I}=useMemo(()=>{const p={disabledKeys:c?new Set:s,expandedKeys:c?new Set:r,selectedKeys:c?new Set:n,visibleKeys:c?new Set:y,visibilityComputedKeys:new Set};return c?c.reduce((b,{key:C,isDisabled:G,isExpanded:J,isSelected:Q,isVisible:X,isVisibleComputed:Y})=>(G&&b.disabledKeys?.add(C),J&&b.expandedKeys?.add(C),Q&&b.selectedKeys?.add(C),X&&b.visibleKeys?.add(C),Y&&b.visibilityComputedKeys.add(C),b),p):p},[c,s,r,n,y]),F=h?p=>{p!=="all"&&N?.(p);}:void 0;return jsx(x.Provider,{value:{disabledKeys:S,expandedKeys:T,selectedKeys:h,showRuleLines:a,showVisibility:d,variant:w,visibleKeys:A,visibilityComputedKeys:I,isStatic:typeof t!="function",onVisibilityChange:K??(()=>{})},children:jsx(Tree,{...D,className:composeRenderProps(o,p=>pe({className:p,variant:w})),disabledKeys:S,dragAndDropHooks:V,expandedKeys:T,items:i,selectedKeys:h,onSelectionChange:F,selectionMode:l,children:t})})}H.displayName="Tree";const z=createContext({isVisible:true,isViewable:true,ancestors:[]});function u({className:t,id:o,...s}){const{visibilityComputedKeys:m,visibleKeys:r,isStatic:i}=useContext(x),{ancestors:n}=useContext(z),a=m?.has(o)||i&&n.every(l=>r?.has(l)),d=r?.has(o);return jsx(z.Provider,{value:{isVisible:d,isViewable:a,ancestors:[...n,o]},children:jsx(TreeItem,{...s,id:o,className:composeRenderProps(t,l=>ue({className:l})),"data-viewable":a||null,"data-visible":d||null})})}u.displayName="Tree.Item";function M({children:t}){const{showVisibility:o,variant:s,visibleKeys:m,onVisibilityChange:r}=useContext(x),{isVisible:i,isViewable:n}=useContext(z),a=s==="cozy"?"medium":"small";return jsx(TreeItemContent,{children:d=>{const{id:l,allowsDragging:w,hasChildItems:y,level:K,selectionBehavior:N,selectionMode:D,state:V,isDisabled:f,isExpanded:c,isSelected:S}=d,T=!(V.collection.getItem(l)?.nextKey||y),h=N==="toggle"&&D!=="none",A=()=>{const I=new Set(m);m?.has(l)?I.delete(l):I.add(l),r?.(I);};return jsx(Icon.Provider,{size:a,children:jsxs("div",{className:ye({variant:s}),"data-last-of-set":T,children:[o&&jsx(Button,{variant:"icon",color:"mono-bold",size:a,onPress:A,isDisabled:f,className:ge(),children:jsx(Icon,{children:i?jsx(Show,{}):jsx(Hide,{})})}),K>1&&jsx(we,{level:K,isLastOfSet:T}),y?jsx(Button,{slot:"chevron",variant:"icon",size:a,className:Ce(),children:jsx(Icon,{children:c?jsx(ChevronDown,{}):jsx(ChevronUp,{})})}):jsx("div",{className:E({variant:s})}),jsx("div",{className:fe({variant:s}),children:typeof t=="function"?t({...d,variant:s,isVisible:i,isViewable:n,defaultChildren:null}):t}),h&&jsx(Checkbox,{slot:"selection",isSelected:S,isDisabled:f}),w&&jsx(Button,{slot:"drag",variant:"icon",size:a,isDisabled:f,className:Ie({}),children:jsx(Icon,{children:jsx(DragVert,{})})})]})})}})}M.displayName="Tree.Item.Content";function W({children:t,className:o}){return jsx(Text,{className:ve({className:o}),children:t})}W.displayName="Tree.Item.Label";function U({children:t,className:o}){const{variant:s}=useContext(x);return s!=="crammed"?jsx(Text,{"data-slot":"description",className:he({className:o,variant:s}),children:t}):null}U.displayName="Tree.Item.Description";function _({children:t,className:o}){return jsx(Icon,{className:be({className:o}),children:t})}_.displayName="Tree.Item.PrefixIcon";function q({children:t,className:o}){return jsx("div",{className:Te({className:o}),children:t})}q.displayName="Tree.Icon.Actions",H.Item=u,u.Content=M,u.Label=W,u.Description=U,u.PrefixIcon=_,u.Actions=q;export{H as Tree,x as TreeContext,z as TreeItemContext};//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/tree/index.tsx"],"names":["label","description","drag","expansion","TreeStyles","me","B","target","jsx","e","re","TreeLines","se","showRuleLines","variant","TreeContext","_","i","type","level","Lines","ce","spacing","Tree","children","className","disabledKeysProp","selectionMode","onVisibilityChange","k","onSelectionChange","items","defaultRenderDropIndicator","ae","nodes","P","le","disabledKeys","visibilityComputedKeys","acc","selectedKeysProp","visibleKeysProp","isExpanded","isSelected","isDisabled","key","isVisible","isVisibleComputed","expandedKeysProp","handleSelectionChange","selectedKeys","AriaTree","oe","O","expandedKeys","TreeItem","visibleKeys","isStatic","isViewable","ancestors","v","id","TreeItemContext","rest","item","ie","useContext","renderProps","allowsDragging","ne","state","isLastOfSet","hasChildItems","keys","size","jsxs","g","Ke","Button","handlePress","L","visibility","Hide","te","ee","ChevronUp","$","display","shouldShowSelection","j","ItemLabel","R","ItemDescription","ItemIcon","actions","ItemContent","ItemActions"],"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'use client';\n\nimport 'client-only';\nimport { ChevronDown, ChevronUp, DragVert, Hide, Show } from '@accelint/icons';\nimport {\n createContext,\n memo,\n type PropsWithChildren,\n useContext,\n useMemo,\n} from 'react';\nimport {\n Tree as AriaTree,\n TreeItem as AriaTreeItem,\n TreeItemContent as AriaTreeItemContent,\n composeRenderProps,\n DropIndicator,\n type DropTarget,\n Text,\n type TextProps,\n useDragAndDrop,\n} from 'react-aria-components';\nimport { Cache } from '@/hooks/use-tree/actions/cache';\nimport { Button } from '../button';\nimport { Checkbox } from '../checkbox';\nimport { Icon } from '../icon';\nimport { Lines } from '../lines';\nimport { TreeStyles, TreeStylesDefaults } from './styles';\nimport type { Key, Selection } from '@react-types/shared';\nimport type { IconProps } from '../icon/types';\nimport type {\n TreeContextValue,\n TreeItemContentProps,\n TreeItemContextValue,\n TreeItemProps,\n TreeProps,\n} from './types';\n\nconst {\n tree,\n item,\n content,\n display,\n icon,\n label,\n actions,\n spacing,\n description,\n drag,\n expansion,\n visibility,\n} = TreeStyles();\n\nexport const TreeContext = createContext<TreeContextValue>({\n visibilityComputedKeys: new Set(),\n showRuleLines: true,\n showVisibility: false,\n variant: TreeStylesDefaults.variant,\n isStatic: true,\n onVisibilityChange: () => undefined,\n});\n\nconst defaultRenderDropIndicator = (target: DropTarget) => (\n <DropIndicator target={target} className='border border-highlight-hover' />\n);\n\nconst TreeLines = memo(function TreeLines({\n level,\n isLastOfSet,\n}: {\n level: number;\n isLastOfSet: boolean;\n}) {\n const { showRuleLines, variant } = useContext(TreeContext);\n\n return Array.from({ length: level }).map((_, i) => {\n const type = i === level - 1 ? 'branch' : 'vert';\n const line = isLastOfSet && i > 0 ? 'last' : type;\n const size = variant === 'crammed' ? 'medium' : 'large';\n\n return (\n <Lines\n // biome-ignore lint/suspicious/noArrayIndexKey: index should be the key, only count matters\n key={i}\n variant={line}\n size={size}\n isVisible={showRuleLines}\n className={spacing({ variant })}\n />\n );\n });\n});\n\nexport function Tree<T>({\n children,\n className,\n disabledKeys: disabledKeysProp,\n dragAndDropConfig,\n expandedKeys: expandedKeysProp,\n items,\n selectedKeys: selectedKeysProp,\n showRuleLines = true,\n showVisibility = true,\n selectionMode = 'multiple',\n variant = TreeStylesDefaults.variant,\n visibleKeys: visibleKeysProp,\n onVisibilityChange,\n onSelectionChange,\n ...rest\n}: TreeProps<T>) {\n /**\n * A static collection is hard-coded. Dynamic is data-driven from an external source.\n * https://react-spectrum.adobe.com/react-aria/Tree.html#content\n *\n * Controlled state should only be used on a static tree.\n */\n if (\n items &&\n (disabledKeysProp ||\n expandedKeysProp ||\n selectedKeysProp ||\n visibleKeysProp)\n ) {\n throw new Error(\n 'Tree should only be controlled with state from either `items` or keys props, not both',\n );\n }\n\n /**\n * A static tree won't support the node iterator pattern.\n */\n if (!!items !== (typeof children === 'function')) {\n throw new Error(\n 'Tree `items` and node iterator `children` must be used together',\n );\n }\n\n const { dragAndDropHooks } = useDragAndDrop({\n renderDropIndicator: defaultRenderDropIndicator,\n getAllowedDropOperations: () => ['move'],\n getDropOperation: () => 'move',\n ...dragAndDropConfig,\n });\n const cache = useMemo(() => (items ? new Cache([...items]) : null), [items]);\n const nodes = useMemo(() => cache?.getAllNodes(), [cache]);\n const {\n disabledKeys,\n expandedKeys,\n selectedKeys,\n visibleKeys,\n visibilityComputedKeys,\n } = useMemo(() => {\n const acc = {\n disabledKeys: nodes ? new Set<Key>() : disabledKeysProp,\n expandedKeys: nodes ? new Set<Key>() : expandedKeysProp,\n selectedKeys: nodes ? new Set<Key>() : selectedKeysProp,\n visibleKeys: nodes ? new Set<Key>() : visibleKeysProp,\n visibilityComputedKeys: new Set<Key>(),\n };\n\n if (!nodes) {\n return acc;\n }\n\n return nodes.reduce(\n (\n acc,\n {\n key,\n isDisabled,\n isExpanded,\n isSelected,\n isVisible,\n isVisibleComputed,\n },\n ) => {\n if (isDisabled) {\n acc.disabledKeys?.add(key);\n }\n if (isExpanded) {\n acc.expandedKeys?.add(key);\n }\n if (isSelected) {\n acc.selectedKeys?.add(key);\n }\n if (isVisible) {\n acc.visibleKeys?.add(key);\n }\n if (isVisibleComputed) {\n acc.visibilityComputedKeys.add(key);\n }\n return acc;\n },\n acc,\n );\n }, [\n nodes,\n disabledKeysProp,\n expandedKeysProp,\n selectedKeysProp,\n visibleKeysProp,\n ]);\n\n const handleSelectionChange = selectedKeys\n ? (selection: Selection) => {\n if (selection !== 'all') {\n onSelectionChange?.(selection);\n }\n }\n : undefined;\n\n return (\n <TreeContext.Provider\n value={{\n disabledKeys,\n expandedKeys,\n selectedKeys,\n showRuleLines,\n showVisibility,\n variant,\n visibleKeys,\n visibilityComputedKeys,\n isStatic: typeof children !== 'function',\n onVisibilityChange: onVisibilityChange ?? (() => undefined), // TODO: improve\n }}\n >\n <AriaTree\n {...rest}\n className={composeRenderProps(className, (className) =>\n tree({ className, variant }),\n )}\n disabledKeys={disabledKeys}\n dragAndDropHooks={dragAndDropHooks}\n expandedKeys={expandedKeys}\n items={items}\n selectedKeys={selectedKeys}\n onSelectionChange={handleSelectionChange}\n selectionMode={selectionMode}\n >\n {children}\n </AriaTree>\n </TreeContext.Provider>\n );\n}\nTree.displayName = 'Tree';\n\nexport const TreeItemContext = createContext<TreeItemContextValue>({\n isVisible: true,\n isViewable: true,\n ancestors: [],\n});\n\nexport function TreeItem({ className, id, ...rest }: TreeItemProps) {\n const { visibilityComputedKeys, visibleKeys, isStatic } =\n useContext(TreeContext);\n const { ancestors } = useContext(TreeItemContext);\n const isViewable =\n visibilityComputedKeys?.has(id) ||\n (isStatic && ancestors.every((key) => visibleKeys?.has(key)));\n const isVisible = visibleKeys?.has(id);\n\n return (\n <TreeItemContext.Provider\n value={{\n isVisible,\n isViewable,\n ancestors: [...ancestors, id],\n }}\n >\n <AriaTreeItem\n {...rest}\n id={id}\n className={composeRenderProps(className, (className) =>\n item({ className }),\n )}\n data-viewable={isViewable || null}\n data-visible={isVisible || null}\n />\n </TreeItemContext.Provider>\n );\n}\nTreeItem.displayName = 'Tree.Item';\n\nfunction ItemContent({ children }: TreeItemContentProps) {\n const { showVisibility, variant, visibleKeys, onVisibilityChange } =\n useContext(TreeContext);\n const { isVisible, isViewable } = useContext(TreeItemContext);\n const size = variant === 'cozy' ? 'medium' : 'small';\n\n return (\n <AriaTreeItemContent>\n {(renderProps) => {\n const {\n id,\n allowsDragging,\n hasChildItems,\n level,\n selectionBehavior,\n selectionMode,\n state,\n isDisabled,\n isExpanded,\n isSelected,\n } = renderProps;\n\n const isLastOfSet = !(\n state.collection.getItem(id)?.nextKey || hasChildItems\n );\n const shouldShowSelection =\n selectionBehavior === 'toggle' && selectionMode !== 'none';\n\n const handlePress = () => {\n const keys = new Set<Key>(visibleKeys);\n visibleKeys?.has(id) ? keys.delete(id) : keys.add(id);\n onVisibilityChange?.(keys);\n };\n\n return (\n <Icon.Provider size={size}>\n <div\n className={content({ variant })}\n data-last-of-set={isLastOfSet}\n >\n {showVisibility && (\n <Button\n variant='icon'\n color='info'\n size={size}\n onPress={handlePress}\n isDisabled={isDisabled}\n className={visibility()}\n >\n <Icon>{isVisible ? <Show /> : <Hide />}</Icon>\n </Button>\n )}\n {level > 1 && (\n <TreeLines level={level} isLastOfSet={isLastOfSet} />\n )}\n {hasChildItems ? (\n <Button\n slot='chevron'\n variant='icon'\n size={size}\n className={expansion()}\n >\n <Icon>{isExpanded ? <ChevronDown /> : <ChevronUp />}</Icon>\n </Button>\n ) : (\n <div className={spacing({ variant })} />\n )}\n <div className={display({ variant })}>\n {typeof children === 'function'\n ? children({\n ...renderProps,\n variant,\n isVisible,\n isViewable: isViewable,\n defaultChildren: null,\n })\n : children}\n </div>\n {shouldShowSelection && (\n <Checkbox\n slot='selection'\n isSelected={isSelected}\n isDisabled={isDisabled}\n />\n )}\n {allowsDragging && (\n <Button\n slot='drag'\n variant='icon'\n size={size}\n isDisabled={isDisabled}\n className={drag({})}\n >\n <Icon>\n <DragVert />\n </Icon>\n </Button>\n )}\n </div>\n </Icon.Provider>\n );\n }}\n </AriaTreeItemContent>\n );\n}\nItemContent.displayName = 'Tree.Item.Content';\n\nfunction ItemLabel({ children, className }: TextProps) {\n return <Text className={label({ className })}>{children}</Text>;\n}\nItemLabel.displayName = 'Tree.Item.Label';\n\nfunction ItemDescription({ children, className }: TextProps) {\n const { variant } = useContext(TreeContext);\n\n return variant !== 'crammed' ? (\n <Text\n data-slot='description'\n className={description({ className, variant })}\n >\n {children}\n </Text>\n ) : null;\n}\nItemDescription.displayName = 'Tree.Item.Description';\n\nfunction ItemIcon({ children, className }: IconProps) {\n return <Icon className={icon({ className })}>{children}</Icon>;\n}\nItemIcon.displayName = 'Tree.Item.PrefixIcon';\n\nfunction ItemActions({\n children,\n className,\n}: PropsWithChildren & { className?: string }) {\n return <div className={actions({ className })}>{children}</div>;\n}\nItemActions.displayName = 'Tree.Icon.Actions';\n\nTree.Item = TreeItem;\nTreeItem.Content = ItemContent;\nTreeItem.Label = ItemLabel;\nTreeItem.Description = ItemDescription;\nTreeItem.PrefixIcon = ItemIcon;\nTreeItem.Actions = ItemActions;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/tree/index.tsx"],"names":["label","description","drag","expansion","TreeStyles","me","B","target","jsx","e","ae","TreeLines","se","showRuleLines","variant","TreeContext","_","i","type","level","Lines","ce","spacing","Tree","children","className","disabledKeysProp","selectionMode","onVisibilityChange","k","onSelectionChange","items","defaultRenderDropIndicator","le","nodes","P","oe","disabledKeys","visibilityComputedKeys","acc","selectedKeysProp","visibleKeysProp","isExpanded","isSelected","isDisabled","key","isVisible","isVisibleComputed","expandedKeysProp","handleSelectionChange","selectedKeys","AriaTree","ie","O","expandedKeys","TreeItem","visibleKeys","isStatic","isViewable","ancestors","v","id","TreeItemContext","rest","item","ne","useContext","renderProps","allowsDragging","re","state","isLastOfSet","hasChildItems","keys","size","jsxs","g","Ke","Button","handlePress","L","visibility","Hide","te","ee","ChevronUp","$","display","shouldShowSelection","j","ItemLabel","R","ItemDescription","ItemIcon","actions","ItemContent","ItemActions"],"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'use client';\n\nimport { ChevronDown, ChevronUp, DragVert, Hide, Show } from '@accelint/icons';\nimport { Cache } from '@/hooks/use-tree/actions/cache';\nimport type { Key, Selection } from '@react-types/shared';\nimport 'client-only';\nimport {\n createContext,\n memo,\n type PropsWithChildren,\n useContext,\n useMemo,\n} from 'react';\nimport {\n Tree as AriaTree,\n TreeItem as AriaTreeItem,\n TreeItemContent as AriaTreeItemContent,\n composeRenderProps,\n DropIndicator,\n type DropTarget,\n Text,\n type TextProps,\n useDragAndDrop,\n} from 'react-aria-components';\nimport { Button } from '../button';\nimport { Checkbox } from '../checkbox';\nimport { Icon } from '../icon';\nimport { Lines } from '../lines';\nimport { TreeStyles, TreeStylesDefaults } from './styles';\nimport type { IconProps } from '../icon/types';\nimport type {\n TreeContextValue,\n TreeItemContentProps,\n TreeItemContextValue,\n TreeItemProps,\n TreeProps,\n} from './types';\n\nconst {\n tree,\n item,\n content,\n display,\n icon,\n label,\n actions,\n spacing,\n description,\n drag,\n expansion,\n visibility,\n} = TreeStyles();\n\nexport const TreeContext = createContext<TreeContextValue>({\n visibilityComputedKeys: new Set(),\n showRuleLines: true,\n showVisibility: false,\n variant: TreeStylesDefaults.variant,\n isStatic: true,\n onVisibilityChange: () => undefined,\n});\n\nconst defaultRenderDropIndicator = (target: DropTarget) => (\n <DropIndicator target={target} className='border border-highlight-hover' />\n);\n\nconst TreeLines = memo(function TreeLines({\n level,\n isLastOfSet,\n}: {\n level: number;\n isLastOfSet: boolean;\n}) {\n const { showRuleLines, variant } = useContext(TreeContext);\n\n return Array.from({ length: level }).map((_, i) => {\n const type = i === level - 1 ? 'branch' : 'vert';\n const line = isLastOfSet && i > 0 ? 'last' : type;\n const size = variant === 'crammed' ? 'medium' : 'large';\n\n return (\n <Lines\n // biome-ignore lint/suspicious/noArrayIndexKey: index should be the key, only count matters\n key={i}\n variant={line}\n size={size}\n isVisible={showRuleLines}\n className={spacing({ variant })}\n />\n );\n });\n});\n\n/**\n * Tree - Hierarchical tree view with optional drag-and-drop and visibility\n *\n * Renders a selectable tree with support for nested items, drag-and-drop,\n * selection modes, and visibility controls. Use Tree.Item to define nodes.\n *\n * @example\n * <Tree items={items} expandedKeys={expandedKeys}>\n * {(node) => <Node key={node.key} node={node} />}\n * </Tree>\n *\n * @example\n * <Tree>\n * <Tree.Item id='one' textValue='one'>\n * <Tree.Item.Content>One</Tree.Item.Content>\n * <Tree.Item id='two' textValue='two'>\n * <Tree.Item.Content>Two</Tree.Item.Content>\n * </Tree.Item>\n * </Tree.Item>\n * </Tree>\n */\nexport function Tree<T>({\n children,\n className,\n disabledKeys: disabledKeysProp,\n dragAndDropConfig,\n expandedKeys: expandedKeysProp,\n items,\n selectedKeys: selectedKeysProp,\n showRuleLines = true,\n showVisibility = true,\n selectionMode = 'multiple',\n variant = TreeStylesDefaults.variant,\n visibleKeys: visibleKeysProp,\n onVisibilityChange,\n onSelectionChange,\n ...rest\n}: TreeProps<T>) {\n /**\n * A static collection is hard-coded. Dynamic is data-driven from an external source.\n * https://react-spectrum.adobe.com/react-aria/Tree.html#content\n *\n * Controlled state should only be used on a static tree.\n */\n if (\n items &&\n (disabledKeysProp ||\n expandedKeysProp ||\n selectedKeysProp ||\n visibleKeysProp)\n ) {\n throw new Error(\n 'Tree should only be controlled with state from either `items` or keys props, not both',\n );\n }\n\n /**\n * A static tree won't support the node iterator pattern.\n */\n if (!!items !== (typeof children === 'function')) {\n throw new Error(\n 'Tree `items` and node iterator `children` must be used together',\n );\n }\n\n const { dragAndDropHooks } = useDragAndDrop({\n renderDropIndicator: defaultRenderDropIndicator,\n getAllowedDropOperations: () => ['move'],\n getDropOperation: () => 'move',\n ...dragAndDropConfig,\n });\n const cache = useMemo(() => (items ? new Cache([...items]) : null), [items]);\n const nodes = useMemo(() => cache?.getAllNodes(), [cache]);\n const {\n disabledKeys,\n expandedKeys,\n selectedKeys,\n visibleKeys,\n visibilityComputedKeys,\n } = useMemo(() => {\n const acc = {\n disabledKeys: nodes ? new Set<Key>() : disabledKeysProp,\n expandedKeys: nodes ? new Set<Key>() : expandedKeysProp,\n selectedKeys: nodes ? new Set<Key>() : selectedKeysProp,\n visibleKeys: nodes ? new Set<Key>() : visibleKeysProp,\n visibilityComputedKeys: new Set<Key>(),\n };\n\n if (!nodes) {\n return acc;\n }\n\n return nodes.reduce(\n (\n acc,\n {\n key,\n isDisabled,\n isExpanded,\n isSelected,\n isVisible,\n isVisibleComputed,\n },\n ) => {\n if (isDisabled) {\n acc.disabledKeys?.add(key);\n }\n if (isExpanded) {\n acc.expandedKeys?.add(key);\n }\n if (isSelected) {\n acc.selectedKeys?.add(key);\n }\n if (isVisible) {\n acc.visibleKeys?.add(key);\n }\n if (isVisibleComputed) {\n acc.visibilityComputedKeys.add(key);\n }\n return acc;\n },\n acc,\n );\n }, [\n nodes,\n disabledKeysProp,\n expandedKeysProp,\n selectedKeysProp,\n visibleKeysProp,\n ]);\n\n const handleSelectionChange = selectedKeys\n ? (selection: Selection) => {\n if (selection !== 'all') {\n onSelectionChange?.(selection);\n }\n }\n : undefined;\n\n return (\n <TreeContext.Provider\n value={{\n disabledKeys,\n expandedKeys,\n selectedKeys,\n showRuleLines,\n showVisibility,\n variant,\n visibleKeys,\n visibilityComputedKeys,\n isStatic: typeof children !== 'function',\n onVisibilityChange: onVisibilityChange ?? (() => undefined), // TODO: improve\n }}\n >\n <AriaTree\n {...rest}\n className={composeRenderProps(className, (className) =>\n tree({ className, variant }),\n )}\n disabledKeys={disabledKeys}\n dragAndDropHooks={dragAndDropHooks}\n expandedKeys={expandedKeys}\n items={items}\n selectedKeys={selectedKeys}\n onSelectionChange={handleSelectionChange}\n selectionMode={selectionMode}\n >\n {children}\n </AriaTree>\n </TreeContext.Provider>\n );\n}\nTree.displayName = 'Tree';\n\nexport const TreeItemContext = createContext<TreeItemContextValue>({\n isVisible: true,\n isViewable: true,\n ancestors: [],\n});\n\nfunction TreeItem({ className, id, ...rest }: TreeItemProps) {\n const { visibilityComputedKeys, visibleKeys, isStatic } =\n useContext(TreeContext);\n const { ancestors } = useContext(TreeItemContext);\n const isViewable =\n visibilityComputedKeys?.has(id) ||\n (isStatic && ancestors.every((key) => visibleKeys?.has(key)));\n const isVisible = visibleKeys?.has(id);\n\n return (\n <TreeItemContext.Provider\n value={{\n isVisible,\n isViewable,\n ancestors: [...ancestors, id],\n }}\n >\n <AriaTreeItem\n {...rest}\n id={id}\n className={composeRenderProps(className, (className) =>\n item({ className }),\n )}\n data-viewable={isViewable || null}\n data-visible={isVisible || null}\n />\n </TreeItemContext.Provider>\n );\n}\nTreeItem.displayName = 'Tree.Item';\n\nfunction ItemContent({ children }: TreeItemContentProps) {\n const { showVisibility, variant, visibleKeys, onVisibilityChange } =\n useContext(TreeContext);\n const { isVisible, isViewable } = useContext(TreeItemContext);\n const size = variant === 'cozy' ? 'medium' : 'small';\n\n return (\n <AriaTreeItemContent>\n {(renderProps) => {\n const {\n id,\n allowsDragging,\n hasChildItems,\n level,\n selectionBehavior,\n selectionMode,\n state,\n isDisabled,\n isExpanded,\n isSelected,\n } = renderProps;\n\n const isLastOfSet = !(\n state.collection.getItem(id)?.nextKey || hasChildItems\n );\n const shouldShowSelection =\n selectionBehavior === 'toggle' && selectionMode !== 'none';\n\n const handlePress = () => {\n const keys = new Set<Key>(visibleKeys);\n visibleKeys?.has(id) ? keys.delete(id) : keys.add(id);\n onVisibilityChange?.(keys);\n };\n\n return (\n <Icon.Provider size={size}>\n <div\n className={content({ variant })}\n data-last-of-set={isLastOfSet}\n >\n {showVisibility && (\n <Button\n variant='icon'\n color='mono-bold'\n size={size}\n onPress={handlePress}\n isDisabled={isDisabled}\n className={visibility()}\n >\n <Icon>{isVisible ? <Show /> : <Hide />}</Icon>\n </Button>\n )}\n {level > 1 && (\n <TreeLines level={level} isLastOfSet={isLastOfSet} />\n )}\n {hasChildItems ? (\n <Button\n slot='chevron'\n variant='icon'\n size={size}\n className={expansion()}\n >\n <Icon>{isExpanded ? <ChevronDown /> : <ChevronUp />}</Icon>\n </Button>\n ) : (\n <div className={spacing({ variant })} />\n )}\n <div className={display({ variant })}>\n {typeof children === 'function'\n ? children({\n ...renderProps,\n variant,\n isVisible,\n isViewable: isViewable,\n defaultChildren: null,\n })\n : children}\n </div>\n {shouldShowSelection && (\n <Checkbox\n slot='selection'\n isSelected={isSelected}\n isDisabled={isDisabled}\n />\n )}\n {allowsDragging && (\n <Button\n slot='drag'\n variant='icon'\n size={size}\n isDisabled={isDisabled}\n className={drag({})}\n >\n <Icon>\n <DragVert />\n </Icon>\n </Button>\n )}\n </div>\n </Icon.Provider>\n );\n }}\n </AriaTreeItemContent>\n );\n}\nItemContent.displayName = 'Tree.Item.Content';\n\nfunction ItemLabel({ children, className }: TextProps) {\n return <Text className={label({ className })}>{children}</Text>;\n}\nItemLabel.displayName = 'Tree.Item.Label';\n\nfunction ItemDescription({ children, className }: TextProps) {\n const { variant } = useContext(TreeContext);\n\n return variant !== 'crammed' ? (\n <Text\n data-slot='description'\n className={description({ className, variant })}\n >\n {children}\n </Text>\n ) : null;\n}\nItemDescription.displayName = 'Tree.Item.Description';\n\nfunction ItemIcon({ children, className }: IconProps) {\n return <Icon className={icon({ className })}>{children}</Icon>;\n}\nItemIcon.displayName = 'Tree.Item.PrefixIcon';\n\nfunction ItemActions({\n children,\n className,\n}: PropsWithChildren & { className?: string }) {\n return <div className={actions({ className })}>{children}</div>;\n}\nItemActions.displayName = 'Tree.Icon.Actions';\n\nTree.Item = TreeItem;\nTreeItem.Content = ItemContent;\nTreeItem.Label = ItemLabel;\nTreeItem.Description = ItemDescription;\nTreeItem.PrefixIcon = ItemIcon;\nTreeItem.Actions = ItemActions;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {tv}from'./../../lib/utils.js';const t={variant:"cozy"},a=tv({slots:{tree:"overflow-auto outline-hidden",item:["not-visible:fg-primary-muted not-viewable:fg-primary-muted fg-primary-bold px-s","group/tree-item
|
|
1
|
+
import {tv}from'./../../lib/utils.js';const t={variant:"cozy"},a=tv({slots:{tree:"overflow-auto outline-hidden",item:["not-visible:fg-primary-muted not-viewable:fg-primary-muted fg-primary-bold px-s","group/tree-item\xB7rounded-medium\xB7pressed:bg-interactive-muted-pressed\xB7hover:bg-interactive-muted-hover\xB7focus-visible:bg-interactive-muted-hover","drop-target:border drop-target:bg-accent-primary-muted/20 drop-target:outline-accent-primary-bold","disabled:cursor-not-allowed disabled:border-none disabled:hover:bg-transparent disabled:data-[drop-target=true]:bg-transparent"],content:["flex items-center justify-items-start px-xs","overflow-x group w-full outline-hidden"],display:'grid flex-1 grid-cols-[auto_auto_1fr_auto] items-center [grid-template-areas:"icon_label_space_action"_"icon_description_space_action"]',icon:"[grid-area:icon]",label:"not-has-[+[data-slot=description]]:row-span-full [grid-area:label]",description:"fg-primary-muted text-body-s [grid-area:description]",actions:"flex shrink-0 items-center [grid-area:action]",spacing:"",visibility:["group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted","group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold","fg-primary-bold"],expansion:["group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted","group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold","fg-primary-bold"],drag:["group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted","group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold","fg-primary-bold"]},variants:{variant:{cozy:{content:"min-h-[48px] text-header-m",display:"gap-x-s px-xs",label:"gap-xs",actions:"gap-x-xs",spacing:"min-h-[46px] w-[28px]",item:"min-h-s"},compact:{content:"min-h-[36px] gap-xs text-header-s",display:"gap-x-s px-xxs",label:"gap-xs",actions:"gap-x-xxs",spacing:"min-h-[38px] w-[20px]",item:"min-h-l"},crammed:{content:"gap-xs text-header-s",display:"gap-x-xs px-xxs",label:"gap-xs",actions:"gap-x-xxs",spacing:"min-h-xl w-[20px]",item:"min-h-s"}}},defaultVariants:t});export{a as TreeStyles,t as TreeStylesDefaults};//# sourceMappingURL=styles.js.map
|
|
2
2
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/tree/styles.ts"],"names":["TreeStyles","tv","e"],"mappings":"sCAeE,MAAA,CAAS,CAAA,CAAA,OAGEA,CAAaC,SACjB,CACLC,EAAA,CAAA,CAAA,KAAM,CAAA,CAAA,IAAA,CAAA,8BAEJ,CAAA,IAAA,CAAA,CAAA,iFACA,CAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/tree/styles.ts"],"names":["TreeStyles","tv","e"],"mappings":"sCAeE,MAAA,CAAS,CAAA,CAAA,OAGEA,CAAaC,SACjB,CACLC,EAAA,CAAA,CAAA,KAAM,CAAA,CAAA,IAAA,CAAA,8BAEJ,CAAA,IAAA,CAAA,CAAA,iFACA,CAAA,2JACA,CAAA,mGACA,CAAA,gIAEO,CACP,CAAA,OAAA,CAAA,CAAA,6CACA,CAAA,wCAGA,CAAA,CAAA,OAAA,CAAA,yIACI,CAAA,IAAA,CAAA,kBACC,CAAA,KAAA,CAAA,gFACM,CAAA,sDACJ,CAAA,OAAA,CAAA,+CACA,CAAA,OACT,CAAA,EAAA,CAAA,UACE,CAAA,CAAA,sEACA,CAAA,uFACA,CAAA,iBAEF,CAAA,CAAW,SACT,CAAA,CAAA,sEACA,CAAA,uFACA,CAAA,iBAGA,CAAA,CAAA,IAAA,CAAA,CAAA,sEACA,CAAA,yGAIJ,CAAA,CAAU,CACR,QAAS,CACP,QACE,CAAA,CAAA,IAAS,CAAA,CAAA,OAAA,CAAA,4BACA,CAAA,OAAA,CAAA,qBAET,CAAA,QAAS,CAAA,OAAA,CAAA,UACA,CAAA,OAAA,CAAA,uBACH,CAAA,IACR,CAAA,SACS,CACP,CAAA,OAAS,CAAA,CAAA,OAAA,CAAA,mCACA,CAAA,OAAA,CAAA,sBAET,CAAA,QAAS,CAAA,OAAA,CAAA,WACA,CAAA,OAAA,CAAA,uBACH,CAAA,IACR,UACS,CACP,CAAA,OAAS,CAAA,CAAA,OAAA,CAAA,sBACA,CAAA,OAAA,CAAA,iBACF,CAAA,KACP,CAAA,QAAS,CAAA,OAAA,CAAA,WACA,CAAA,OAAA,CAAA,mBACH,CAAA,IACR,CACF,SAEF,CAAA,CAAA,CAAA,CAAA,eACD,CAAA,CAAA,CAAA","file":"styles.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 { tv } from '@/lib/utils';\n\nexport const TreeStylesDefaults = {\n variant: 'cozy',\n} as const;\n\nexport const TreeStyles = tv({\n slots: {\n tree: 'overflow-auto outline-hidden',\n item: [\n 'not-visible:fg-primary-muted not-viewable:fg-primary-muted fg-primary-bold px-s',\n 'group/tree-item·rounded-medium·pressed:bg-interactive-muted-pressed·hover:bg-interactive-muted-hover·focus-visible:bg-interactive-muted-hover',\n 'drop-target:border drop-target:bg-accent-primary-muted/20 drop-target:outline-accent-primary-bold',\n 'disabled:cursor-not-allowed disabled:border-none disabled:hover:bg-transparent disabled:data-[drop-target=true]:bg-transparent',\n ],\n content: [\n 'flex items-center justify-items-start px-xs',\n 'overflow-x group w-full outline-hidden',\n ],\n display:\n 'grid flex-1 grid-cols-[auto_auto_1fr_auto] items-center [grid-template-areas:\"icon_label_space_action\"_\"icon_description_space_action\"]',\n icon: '[grid-area:icon]',\n label: 'not-has-[+[data-slot=description]]:row-span-full [grid-area:label]',\n description: 'fg-primary-muted text-body-s [grid-area:description]',\n actions: 'flex shrink-0 items-center [grid-area:action]',\n spacing: '',\n visibility: [\n 'group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted',\n 'group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold',\n 'fg-primary-bold',\n ],\n expansion: [\n 'group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted',\n 'group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold',\n 'fg-primary-bold',\n ],\n drag: [\n 'group-not-visible/tree-item:enabled:color-mono-bold:fg-primary-muted',\n 'group-not-viewable/tree-item:enabled:color-mono-bold:fg-primary-muted fg-primary-bold',\n 'fg-primary-bold',\n ],\n },\n variants: {\n variant: {\n cozy: {\n content: 'min-h-[48px] text-header-m',\n display: 'gap-x-s px-xs',\n label: 'gap-xs',\n actions: 'gap-x-xs',\n spacing: 'min-h-[46px] w-[28px]',\n item: 'min-h-s',\n },\n compact: {\n content: 'min-h-[36px] gap-xs text-header-s',\n display: 'gap-x-s px-xxs',\n label: 'gap-xs',\n actions: 'gap-x-xxs',\n spacing: 'min-h-[38px] w-[20px]',\n item: 'min-h-l',\n },\n crammed: {\n content: 'gap-xs text-header-s',\n display: 'gap-x-xs px-xxs',\n label: 'gap-xs',\n actions: 'gap-x-xxs',\n spacing: 'min-h-xl w-[20px]',\n item: 'min-h-s',\n },\n },\n },\n defaultVariants: TreeStylesDefaults,\n});\n"]}
|
|
@@ -13,14 +13,54 @@ declare const ViewStackEventHandlers: {
|
|
|
13
13
|
readonly push: (view: UniqueId) => void;
|
|
14
14
|
readonly reset: (stack: UniqueId) => void;
|
|
15
15
|
};
|
|
16
|
+
declare function useViewStackEmit(): {
|
|
17
|
+
readonly back: (stack: UniqueId) => void;
|
|
18
|
+
readonly clear: (stack: UniqueId) => void;
|
|
19
|
+
readonly push: (view: UniqueId) => void;
|
|
20
|
+
readonly reset: (stack: UniqueId) => void;
|
|
21
|
+
};
|
|
16
22
|
declare function ViewStackTrigger({ children, for: types }: ViewStackTriggerProps): react_jsx_runtime.JSX.Element;
|
|
17
23
|
declare namespace ViewStackTrigger {
|
|
18
24
|
var displayName: string;
|
|
19
25
|
}
|
|
20
|
-
declare function ViewStackView({ id, children }: ViewStackViewProps):
|
|
26
|
+
declare function ViewStackView({ id, children }: ViewStackViewProps): react_jsx_runtime.JSX.Element | null;
|
|
21
27
|
declare namespace ViewStackView {
|
|
22
28
|
var displayName: string;
|
|
23
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* ViewStack - Stack-based view manager for pushing/popping views
|
|
32
|
+
*
|
|
33
|
+
* Manages a stack of views that can be pushed, popped, or reset programmatically
|
|
34
|
+
* and is intended for building nested or stacked UIs such as Drawer views.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const ids = {
|
|
38
|
+
* stack: uuid(),
|
|
39
|
+
* a: uuid(),
|
|
40
|
+
* b: uuid(),
|
|
41
|
+
* };
|
|
42
|
+
*
|
|
43
|
+
* <ViewStack id={ids.stack} defaultView={ids.a}>
|
|
44
|
+
* <ViewStack.View id={ids.a}>
|
|
45
|
+
* <ViewStack.Trigger for={ids.b}>
|
|
46
|
+
* <Button>
|
|
47
|
+
* Push View B
|
|
48
|
+
* </Button>
|
|
49
|
+
* </ViewStack.Trigger>
|
|
50
|
+
* <h1>View A</h1>
|
|
51
|
+
* </ViewStack.View>
|
|
52
|
+
* <ViewStack.View id={ids.b}>
|
|
53
|
+
* <ViewStack.Trigger for='back'>
|
|
54
|
+
* <Button variant='icon'>
|
|
55
|
+
* <Icon>
|
|
56
|
+
* <ChevronLeft />
|
|
57
|
+
* </Icon>
|
|
58
|
+
* </Button>
|
|
59
|
+
* </ViewStack.Trigger>
|
|
60
|
+
* <h1>View B</h1>
|
|
61
|
+
* </ViewStack.View>
|
|
62
|
+
* </ViewStack>
|
|
63
|
+
*/
|
|
24
64
|
declare function ViewStack({ id, children, defaultView, onChange, }: ViewStackProps): react_jsx_runtime.JSX.Element;
|
|
25
65
|
declare namespace ViewStack {
|
|
26
66
|
var displayName: string;
|
|
@@ -28,4 +68,4 @@ declare namespace ViewStack {
|
|
|
28
68
|
var Trigger: typeof ViewStackTrigger;
|
|
29
69
|
}
|
|
30
70
|
|
|
31
|
-
export { ViewStack, ViewStackContext, ViewStackEventHandlers };
|
|
71
|
+
export { ViewStack, ViewStackContext, ViewStackEventHandlers, useViewStackEmit };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {jsx}from'react/jsx-runtime';import'client-only';import {Broadcast}from'@accelint/bus';import {isUUID}from'@accelint/core';import {createContext,useRef,useState,useCallback,useEffect,
|
|
3
|
+
import {jsx}from'react/jsx-runtime';import'client-only';import {Broadcast}from'@accelint/bus';import {useEmit,useOn}from'@accelint/bus/react';import {isUUID}from'@accelint/core';import {createContext,useRef,useState,useCallback,useContext,useEffect,Fragment}from'react';import {Pressable}from'react-aria-components';import {ViewStackEventTypes}from'./events.js';const S=Broadcast.getInstance(),m=createContext({parent:null,stack:[],view:null,register:()=>{},unregister:()=>{}}),G={back:e=>S.emit(ViewStackEventTypes.back,{stack:e}),clear:e=>S.emit(ViewStackEventTypes.clear,{stack:e}),push:e=>S.emit(ViewStackEventTypes.push,{view:e}),reset:e=>S.emit(ViewStackEventTypes.reset,{stack:e})};function C(){const e=useEmit(ViewStackEventTypes.back),c=useEmit(ViewStackEventTypes.clear),r=useEmit(ViewStackEventTypes.push),i=useEmit(ViewStackEventTypes.reset);return {back:t=>e({stack:t}),clear:t=>c({stack:t}),push:t=>r({view:t}),reset:t=>i({stack:t})}}function f({children:e,for:c}){const{parent:r}=useContext(m),i=C();function t(){for(const s of Array.isArray(c)?c:[c]){let[o,k]=isUUID(s)?["push",s]:s.split(":");k??=r,k&&i[o](k);}}return jsx(Pressable,{onPress:t,children:e})}f.displayName="ViewStack.Trigger";function I({id:e,children:c}){const{parent:r,view:i,register:t,unregister:s}=useContext(m);if(!r)throw new Error("ViewStack.View must be implemented within a ViewStack");if(!isUUID(e))throw new Error("ViewStack.View's id must be a UniqueId");return useEffect(()=>(t(e),()=>s(e)),[t,s,e]),i===e?jsx(Fragment,{children:c},e):null}I.displayName="ViewStack.View";function v({id:e,children:c,defaultView:r,onChange:i}){if(!isUUID(e))throw new Error("ViewStack's id must be a UniqueId");const t=useRef(new Set),[s,o]=useState(r?[r]:[]),k=s.at(-1)??null,U=useCallback(n=>{if(e===n?.payload?.stack){const u=s.slice(0,-1);!u.length&&r&&u.push(r),o(u),i?.(u.at(-1)??null);}},[e,r,i,s]),h=useCallback(n=>{e===n?.payload?.stack&&(o([]),i?.(null));},[e,i]),q=useCallback(n=>{t.current.has(n?.payload?.view)&&(o(u=>[...u,n?.payload?.view]),i?.(n?.payload?.view));},[i]),P=useCallback(n=>{e===n?.payload?.stack&&(o(r?[r]:[]),i?.(r??null));},[e,r,i]);return useOn(ViewStackEventTypes.back,U),useOn(ViewStackEventTypes.clear,h),useOn(ViewStackEventTypes.push,q),useOn(ViewStackEventTypes.reset,P),jsx(m.Provider,{value:{parent:e,stack:s,view:k,register:n=>t.current.add(n),unregister:n=>t.current.delete(n)},children:c})}v.displayName="ViewStack",v.View=I,v.Trigger=f;export{v as ViewStack,m as ViewStackContext,G as ViewStackEventHandlers,C as useViewStackEmit};//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/view-stack/index.tsx"],"names":["Broadcast","h","ViewStackContext","createContext","q","ViewStackEventHandlers","bus","o","types","useContext","d","type","event","isUUID","l","id","parent","I","x","ViewStackTrigger","E","register","unregister","view","b","stack","setStack","useState","defaultView","g","useCallback","data","next","onChange","handleClear","handlePush","views","prev","handleReset","ViewStackEventTypes","off","listeners","handleBack","jsx","ViewStack"],"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'use client';\n\nimport 'client-only';\nimport { Broadcast } from '@accelint/bus';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackContextValue,\n ViewStackEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n ViewStackTriggerProps,\n ViewStackViewProps,\n} from './types';\n\nconst bus = Broadcast.getInstance<ViewStackEvent>();\n\nexport const ViewStackContext = createContext<ViewStackContextValue>({\n parent: null,\n stack: [],\n view: null,\n register: () => undefined,\n unregister: () => undefined,\n});\n\nexport const ViewStackEventHandlers = {\n back: (stack: UniqueId) => bus.emit(ViewStackEventTypes.back, { stack }),\n clear: (stack: UniqueId) => bus.emit(ViewStackEventTypes.clear, { stack }),\n push: (view: UniqueId) => bus.emit(ViewStackEventTypes.push, { view }),\n reset: (stack: UniqueId) => bus.emit(ViewStackEventTypes.reset, { stack }),\n} as const;\n\nfunction ViewStackTrigger({ children, for: types }: ViewStackTriggerProps) {\n const { parent } = useContext(ViewStackContext);\n\n function handlePress() {\n for (const type of Array.isArray(types) ? types : [types]) {\n let [event, id] = (isUUID(type) ? ['push', type] : type.split(':')) as [\n 'back' | 'clear' | 'reset' | 'push',\n UniqueId | undefined | null,\n ];\n\n id ??= parent;\n\n if (!id) {\n continue;\n }\n\n ViewStackEventHandlers[event](id);\n }\n }\n\n return <Pressable onPress={handlePress}>{children}</Pressable>;\n}\nViewStackTrigger.displayName = 'ViewStack.Trigger';\n\nfunction ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStack.View must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStack.View's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? children : null;\n}\nViewStackView.displayName = 'ViewStack.View';\n\nexport function ViewStack({\n id,\n children,\n defaultView,\n onChange,\n}: ViewStackProps) {\n if (!isUUID(id)) {\n throw new Error(`ViewStack's id must be a UniqueId`);\n }\n\n const views = useRef(new Set<UniqueId>());\n const [stack, setStack] = useState<UniqueId[]>(\n defaultView ? [defaultView] : [],\n );\n const view = stack.at(-1) ?? null;\n\n const handleBack = useCallback(\n (data: ViewStackBackEvent) => {\n if (id === data?.payload?.stack) {\n const next = stack.slice(0, -1);\n\n if (!next.length && defaultView) {\n next.push(defaultView);\n }\n\n setStack(next);\n onChange?.(next.at(-1) ?? null);\n }\n },\n [id, defaultView, onChange, stack],\n );\n\n const handleClear = useCallback(\n (data: ViewStackClearEvent) => {\n if (id === data?.payload?.stack) {\n setStack([]);\n onChange?.(null);\n }\n },\n [id, onChange],\n );\n\n const handlePush = useCallback(\n (data: ViewStackPushEvent) => {\n if (views.current.has(data?.payload?.view)) {\n setStack((prev) => [...prev, data?.payload?.view]);\n onChange?.(data?.payload?.view);\n }\n },\n [onChange],\n );\n\n const handleReset = useCallback(\n (data: ViewStackResetEvent) => {\n if (id === data?.payload?.stack) {\n setStack(defaultView ? [defaultView] : []);\n onChange?.(defaultView ?? null);\n }\n },\n [id, defaultView, onChange],\n );\n\n useEffect(() => {\n const listeners = [\n bus.on(ViewStackEventTypes.back, handleBack),\n bus.on(ViewStackEventTypes.clear, handleClear),\n bus.on(ViewStackEventTypes.push, handlePush),\n bus.on(ViewStackEventTypes.reset, handleReset),\n ];\n\n return () => {\n for (const off of listeners) {\n off();\n }\n };\n }, [handleBack, handleClear, handlePush, handleReset]);\n\n return (\n <ViewStackContext.Provider\n value={{\n parent: id,\n stack,\n view,\n register: (view: UniqueId) => views.current.add(view),\n unregister: (view: UniqueId) => views.current.delete(view),\n }}\n >\n {children}\n </ViewStackContext.Provider>\n );\n}\nViewStack.displayName = 'ViewStack';\nViewStack.View = ViewStackView;\nViewStack.Trigger = ViewStackTrigger;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/view-stack/index.tsx"],"names":["Broadcast","y","ViewStackContext","createContext","b","ViewStackEventHandlers","bus","a","ViewStackEventTypes","w","useEmit","emitBack","emitClear","emitPush","emitReset","types","useContext","E","viewStackEmit","useViewStackEmit","type","event","isUUID","V","id","parent","d","R","ViewStackTrigger","x","unregister","register","view","Fragment","g","T","stack","setStack","useState","defaultView","B","useCallback","data","next","onChange","handleClear","handlePush","views","prev","handleReset","l","useOn","jsx","ViewStack"],"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'use client';\n\nimport 'client-only';\nimport { Broadcast } from '@accelint/bus';\nimport { useEmit, useOn } from '@accelint/bus/react';\nimport { isUUID, type UniqueId } from '@accelint/core';\nimport {\n createContext,\n Fragment,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { Pressable } from 'react-aria-components';\nimport { ViewStackEventTypes } from './events';\nimport type {\n ViewStackBackEvent,\n ViewStackClearEvent,\n ViewStackContextValue,\n ViewStackEvent,\n ViewStackProps,\n ViewStackPushEvent,\n ViewStackResetEvent,\n ViewStackTriggerProps,\n ViewStackViewProps,\n} from './types';\n\nconst bus = Broadcast.getInstance<ViewStackEvent>();\n\nexport const ViewStackContext = createContext<ViewStackContextValue>({\n parent: null,\n stack: [],\n view: null,\n register: () => undefined,\n unregister: () => undefined,\n});\n\nexport const ViewStackEventHandlers = {\n back: (stack: UniqueId) => bus.emit(ViewStackEventTypes.back, { stack }),\n clear: (stack: UniqueId) => bus.emit(ViewStackEventTypes.clear, { stack }),\n push: (view: UniqueId) => bus.emit(ViewStackEventTypes.push, { view }),\n reset: (stack: UniqueId) => bus.emit(ViewStackEventTypes.reset, { stack }),\n} as const;\n\nexport function useViewStackEmit() {\n const emitBack = useEmit<ViewStackEvent>(ViewStackEventTypes.back);\n const emitClear = useEmit<ViewStackEvent>(ViewStackEventTypes.clear);\n const emitPush = useEmit<ViewStackEvent>(ViewStackEventTypes.push);\n const emitReset = useEmit<ViewStackEvent>(ViewStackEventTypes.reset);\n\n return {\n back: (stack: UniqueId) => emitBack({ stack }),\n clear: (stack: UniqueId) => emitClear({ stack }),\n push: (view: UniqueId) => emitPush({ view }),\n reset: (stack: UniqueId) => emitReset({ stack }),\n } as const;\n}\n\nfunction ViewStackTrigger({ children, for: types }: ViewStackTriggerProps) {\n const { parent } = useContext(ViewStackContext);\n const viewStackEmit = useViewStackEmit();\n\n function handlePress() {\n for (const type of Array.isArray(types) ? types : [types]) {\n let [event, id] = (isUUID(type) ? ['push', type] : type.split(':')) as [\n 'back' | 'clear' | 'reset' | 'push',\n UniqueId | undefined | null,\n ];\n\n id ??= parent;\n\n if (!id) {\n continue;\n }\n\n viewStackEmit[event](id);\n }\n }\n\n return <Pressable onPress={handlePress}>{children}</Pressable>;\n}\nViewStackTrigger.displayName = 'ViewStack.Trigger';\n\nfunction ViewStackView({ id, children }: ViewStackViewProps) {\n const { parent, view, register, unregister } = useContext(ViewStackContext);\n\n if (!parent) {\n throw new Error('ViewStack.View must be implemented within a ViewStack');\n }\n\n if (!isUUID(id)) {\n throw new Error(`ViewStack.View's id must be a UniqueId`);\n }\n\n useEffect(() => {\n register(id);\n\n return () => unregister(id);\n }, [register, unregister, id]);\n\n return view === id ? <Fragment key={id}>{children}</Fragment> : null;\n}\nViewStackView.displayName = 'ViewStack.View';\n\n/**\n * ViewStack - Stack-based view manager for pushing/popping views\n *\n * Manages a stack of views that can be pushed, popped, or reset programmatically\n * and is intended for building nested or stacked UIs such as Drawer views.\n *\n * @example\n * const ids = {\n * stack: uuid(),\n * a: uuid(),\n * b: uuid(),\n * };\n *\n * <ViewStack id={ids.stack} defaultView={ids.a}>\n * <ViewStack.View id={ids.a}>\n * <ViewStack.Trigger for={ids.b}>\n * <Button>\n * Push View B\n * </Button>\n * </ViewStack.Trigger>\n * <h1>View A</h1>\n * </ViewStack.View>\n * <ViewStack.View id={ids.b}>\n * <ViewStack.Trigger for='back'>\n * <Button variant='icon'>\n * <Icon>\n * <ChevronLeft />\n * </Icon>\n * </Button>\n * </ViewStack.Trigger>\n * <h1>View B</h1>\n * </ViewStack.View>\n * </ViewStack>\n */\nexport function ViewStack({\n id,\n children,\n defaultView,\n onChange,\n}: ViewStackProps) {\n if (!isUUID(id)) {\n throw new Error(`ViewStack's id must be a UniqueId`);\n }\n\n const views = useRef(new Set<UniqueId>());\n const [stack, setStack] = useState<UniqueId[]>(\n defaultView ? [defaultView] : [],\n );\n const view = stack.at(-1) ?? null;\n\n const handleBack = useCallback(\n (data: ViewStackBackEvent) => {\n if (id === data?.payload?.stack) {\n const next = stack.slice(0, -1);\n\n if (!next.length && defaultView) {\n next.push(defaultView);\n }\n\n setStack(next);\n onChange?.(next.at(-1) ?? null);\n }\n },\n [id, defaultView, onChange, stack],\n );\n\n const handleClear = useCallback(\n (data: ViewStackClearEvent) => {\n if (id === data?.payload?.stack) {\n setStack([]);\n onChange?.(null);\n }\n },\n [id, onChange],\n );\n\n const handlePush = useCallback(\n (data: ViewStackPushEvent) => {\n if (views.current.has(data?.payload?.view)) {\n setStack((prev) => [...prev, data?.payload?.view]);\n onChange?.(data?.payload?.view);\n }\n },\n [onChange],\n );\n\n const handleReset = useCallback(\n (data: ViewStackResetEvent) => {\n if (id === data?.payload?.stack) {\n setStack(defaultView ? [defaultView] : []);\n onChange?.(defaultView ?? null);\n }\n },\n [id, defaultView, onChange],\n );\n useOn(ViewStackEventTypes.back, handleBack);\n useOn(ViewStackEventTypes.clear, handleClear);\n useOn(ViewStackEventTypes.push, handlePush);\n useOn(ViewStackEventTypes.reset, handleReset);\n\n return (\n <ViewStackContext.Provider\n value={{\n parent: id,\n stack,\n view,\n register: (view: UniqueId) => views.current.add(view),\n unregister: (view: UniqueId) => views.current.delete(view),\n }}\n >\n {children}\n </ViewStackContext.Provider>\n );\n}\nViewStack.displayName = 'ViewStack';\nViewStack.View = ViewStackView;\nViewStack.Trigger = ViewStackTrigger;\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e={bg:{base:["bg-surface-default","bg-surface-raised","bg-surface-overlay","bg-surface-muted","bg-interactive-bold","bg-interactive-bold-hover","bg-interactive-bold-pressed","bg-interactive-muted","bg-interactive-muted-hover","bg-interactive-muted-pressed","bg-interactive-disabled","bg-accent-primary-bold","bg-accent-primary-hover","bg-accent-primary-pressed","bg-accent-primary-muted"],utility:["bg-info-bold","bg-info-hover","bg-info-pressed","bg-info-muted","bg-advisory-bold","bg-advisory-hover","bg-advisory-pressed","bg-advisory-muted","bg-normal-bold","bg-normal-hover","bg-normal-pressed","bg-normal-muted","bg-serious-bold","bg-serious-hover","bg-serious-pressed","bg-serious-muted","bg-critical-bold","bg-critical-hover","bg-critical-pressed","bg-critical-muted"]},fg:{base:["fg-primary-bold","fg-primary-muted","fg-inverse-bold","fg-inverse-muted","fg-disabled"],utility:["fg-accent-primary-bold","fg-accent-primary-hover","fg-accent-primary-pressed","fg-info-bold","fg-info-hover","fg-info-pressed","fg-advisory-bold","fg-advisory-hover","fg-advisory-pressed","fg-normal-bold","fg-normal-hover","fg-normal-pressed","fg-serious-bold","fg-serious-hover","fg-serious-pressed","fg-critical-bold","fg-critical-hover","fg-critical-pressed"],a11y:["fg-a11y-on-accent","fg-a11y-on-utility"]},outline:{base:["outline-static","outline-interactive","outline-interactive-hover","outline-interactive-pressed","outline-interactive-disabled","outline-accent-primary-bold","outline-accent-primary-hover","outline-accent-primary-pressed"],utility:["outline-info-bold","outline-info-hover","outline-info-pressed","outline-advisory-bold","outline-advisory-hover","outline-advisory-pressed","outline-normal-bold","outline-normal-hover","outline-normal-pressed","outline-serious-bold","outline-serious-hover","outline-serious-pressed","outline-critical-bold","outline-critical-hover","outline-critical-pressed"]}};export{e as tokens};//# sourceMappingURL=token-data.js.map
|
|
1
|
+
const e={bg:{base:["bg-surface-default","bg-surface-raised","bg-surface-overlay","bg-surface-muted","bg-interactive-bold","bg-interactive-bold-hover","bg-interactive-bold-pressed","bg-interactive-muted","bg-interactive-muted-hover","bg-interactive-muted-pressed","bg-interactive-disabled","bg-accent-primary-bold","bg-accent-primary-hover","bg-accent-primary-pressed","bg-accent-primary-muted"],utility:["bg-info-bold","bg-info-hover","bg-info-pressed","bg-info-muted","bg-advisory-bold","bg-advisory-hover","bg-advisory-pressed","bg-advisory-muted","bg-normal-bold","bg-normal-hover","bg-normal-pressed","bg-normal-muted","bg-serious-bold","bg-serious-hover","bg-serious-pressed","bg-serious-muted","bg-critical-bold","bg-critical-hover","bg-critical-pressed","bg-critical-muted"]},fg:{base:["fg-primary-bold","fg-primary-muted","fg-inverse-bold","fg-inverse-muted","fg-disabled","fg-pressed","fg-hover"],utility:["fg-accent-primary-bold","fg-accent-primary-hover","fg-accent-primary-pressed","fg-info-bold","fg-info-hover","fg-info-pressed","fg-advisory-bold","fg-advisory-hover","fg-advisory-pressed","fg-normal-bold","fg-normal-hover","fg-normal-pressed","fg-serious-bold","fg-serious-hover","fg-serious-pressed","fg-critical-bold","fg-critical-hover","fg-critical-pressed"],a11y:["fg-a11y-on-accent","fg-a11y-on-utility"]},outline:{base:["outline-static","outline-interactive","outline-interactive-hover","outline-interactive-pressed","outline-interactive-disabled","outline-accent-primary-bold","outline-accent-primary-hover","outline-accent-primary-pressed"],utility:["outline-info-bold","outline-info-hover","outline-info-pressed","outline-advisory-bold","outline-advisory-hover","outline-advisory-pressed","outline-normal-bold","outline-normal-hover","outline-normal-pressed","outline-mono-bold","outline-mono-bold-hover","outline-mono-bold-pressed","outline-serious-bold","outline-serious-hover","outline-serious-pressed","outline-critical-bold","outline-critical-hover","outline-critical-pressed"]}};export{e as tokens};//# sourceMappingURL=token-data.js.map
|
|
2
2
|
//# sourceMappingURL=token-data.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/foundation/token-data.ts"],"names":["tokens"],"mappings":"AAgBO,MAAMA,CAAAA,CAAS,CACpB,EAAA,CAAI,CACF,IAAA,CAAM,CACJ,oBAAA,CACA,mBAAA,CACA,oBAAA,CACA,kBAAA,CACA,qBAAA,CACA,2BAAA,CACA,
|
|
1
|
+
{"version":3,"sources":["../../src/foundation/token-data.ts"],"names":["tokens"],"mappings":"AAgBO,MAAMA,CAAAA,CAAS,CACpB,EAAA,CAAI,CACF,IAAA,CAAM,CACJ,oBAAA,CACA,mBAAA,CACA,oBAAA,CACA,kBAAA,CACA,qBAAA,CACA,2BAAA,CACA,6BAAA,CACA,uBACA,4BAAA,CACA,8BAAA,CACA,yBAAA,CACA,wBAAA,CACA,yBAAA,CACA,2BAAA,CACA,yBACF,CAAA,CACA,OAAA,CAAS,CACP,cAAA,CACA,eAAA,CACA,iBAAA,CACA,eAAA,CACA,mBACA,mBAAA,CACA,qBAAA,CACA,mBAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CACA,iBAAA,CACA,iBAAA,CACA,kBAAA,CACA,oBAAA,CACA,kBAAA,CACA,kBAAA,CACA,mBAAA,CACA,qBAAA,CACA,mBACF,CACF,CAAA,CACA,EAAA,CAAI,CACF,IAAA,CAAM,CACJ,iBAAA,CACA,kBAAA,CACA,iBAAA,CACA,kBAAA,CACA,aAAA,CACA,YAAA,CACA,UACF,CAAA,CACA,OAAA,CAAS,CACP,wBAAA,CACA,yBAAA,CACA,2BAAA,CACA,cAAA,CACA,eAAA,CACA,iBAAA,CACA,kBAAA,CACA,mBAAA,CACA,qBAAA,CACA,gBAAA,CACA,iBAAA,CACA,mBAAA,CACA,iBAAA,CACA,kBAAA,CACA,oBAAA,CACA,kBAAA,CACA,mBAAA,CACA,qBACF,CAAA,CACA,IAAA,CAAM,CAAC,mBAAA,CAAqB,oBAAoB,CAClD,CAAA,CACA,OAAA,CAAS,CACP,IAAA,CAAM,CACJ,gBAAA,CACA,sBACA,2BAAA,CACA,6BAAA,CACA,8BAAA,CACA,6BAAA,CACA,8BAAA,CACA,gCACF,CAAA,CACA,OAAA,CAAS,CACP,mBAAA,CACA,oBAAA,CACA,sBAAA,CACA,uBAAA,CACA,wBAAA,CACA,0BAAA,CACA,qBAAA,CACA,sBAAA,CACA,wBAAA,CACA,mBAAA,CACA,yBAAA,CACA,2BAAA,CACA,sBAAA,CACA,uBAAA,CACA,yBAAA,CACA,uBAAA,CACA,wBAAA,CACA,0BACF,CACF,CACF","file":"token-data.js","sourcesContent":["// __private-exports\n/*\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\n// These tokens drive the storybook stories.\n// future: generate these\n\nexport const tokens = {\n bg: {\n base: [\n 'bg-surface-default',\n 'bg-surface-raised',\n 'bg-surface-overlay',\n 'bg-surface-muted',\n 'bg-interactive-bold',\n 'bg-interactive-bold-hover',\n 'bg-interactive-bold-pressed',\n 'bg-interactive-muted',\n 'bg-interactive-muted-hover',\n 'bg-interactive-muted-pressed',\n 'bg-interactive-disabled',\n 'bg-accent-primary-bold',\n 'bg-accent-primary-hover',\n 'bg-accent-primary-pressed',\n 'bg-accent-primary-muted',\n ],\n utility: [\n 'bg-info-bold',\n 'bg-info-hover',\n 'bg-info-pressed',\n 'bg-info-muted',\n 'bg-advisory-bold',\n 'bg-advisory-hover',\n 'bg-advisory-pressed',\n 'bg-advisory-muted',\n 'bg-normal-bold',\n 'bg-normal-hover',\n 'bg-normal-pressed',\n 'bg-normal-muted',\n 'bg-serious-bold',\n 'bg-serious-hover',\n 'bg-serious-pressed',\n 'bg-serious-muted',\n 'bg-critical-bold',\n 'bg-critical-hover',\n 'bg-critical-pressed',\n 'bg-critical-muted',\n ],\n },\n fg: {\n base: [\n 'fg-primary-bold',\n 'fg-primary-muted',\n 'fg-inverse-bold',\n 'fg-inverse-muted',\n 'fg-disabled',\n 'fg-pressed',\n 'fg-hover',\n ],\n utility: [\n 'fg-accent-primary-bold',\n 'fg-accent-primary-hover',\n 'fg-accent-primary-pressed',\n 'fg-info-bold',\n 'fg-info-hover',\n 'fg-info-pressed',\n 'fg-advisory-bold',\n 'fg-advisory-hover',\n 'fg-advisory-pressed',\n 'fg-normal-bold',\n 'fg-normal-hover',\n 'fg-normal-pressed',\n 'fg-serious-bold',\n 'fg-serious-hover',\n 'fg-serious-pressed',\n 'fg-critical-bold',\n 'fg-critical-hover',\n 'fg-critical-pressed',\n ],\n a11y: ['fg-a11y-on-accent', 'fg-a11y-on-utility'],\n },\n outline: {\n base: [\n 'outline-static',\n 'outline-interactive',\n 'outline-interactive-hover',\n 'outline-interactive-pressed',\n 'outline-interactive-disabled',\n 'outline-accent-primary-bold',\n 'outline-accent-primary-hover',\n 'outline-accent-primary-pressed',\n ],\n utility: [\n 'outline-info-bold',\n 'outline-info-hover',\n 'outline-info-pressed',\n 'outline-advisory-bold',\n 'outline-advisory-hover',\n 'outline-advisory-pressed',\n 'outline-normal-bold',\n 'outline-normal-hover',\n 'outline-normal-pressed',\n 'outline-mono-bold',\n 'outline-mono-bold-hover',\n 'outline-mono-bold-pressed',\n 'outline-serious-bold',\n 'outline-serious-hover',\n 'outline-serious-pressed',\n 'outline-critical-bold',\n 'outline-critical-hover',\n 'outline-critical-pressed',\n ],\n },\n};\n"]}
|
package/dist/index.css
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
/* @import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..700;1,100..700&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap'); */
|
|
14
|
-
@import '@fontsource/roboto-flex';
|
|
15
|
-
@import '@fontsource/roboto-mono';
|
|
14
|
+
@import '@fontsource-variable/roboto-flex';
|
|
15
|
+
@import '@fontsource-variable/roboto-mono';
|
|
16
16
|
@import 'tailwindcss';
|
|
17
17
|
|
|
18
18
|
/* Import generated themes.css */
|
|
@@ -164,7 +164,9 @@
|
|
|
164
164
|
--icon-color: --value(--color- *);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
html {
|
|
168
|
+
@apply bg-surface-default;
|
|
169
|
+
@apply fg-primary-bold;
|
|
168
170
|
@apply font-primary;
|
|
169
171
|
}
|
|
170
172
|
|