@nuee/registry 0.3.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.
Files changed (63) hide show
  1. package/LICENSE +201 -0
  2. package/dist/index.d.ts +23 -0
  3. package/dist/index.js +43 -0
  4. package/dist/items/accordion.json +20 -0
  5. package/dist/items/alert-dialog.json +17 -0
  6. package/dist/items/aspect-ratio.json +14 -0
  7. package/dist/items/attachment.json +16 -0
  8. package/dist/items/avatar.json +15 -0
  9. package/dist/items/badge.json +14 -0
  10. package/dist/items/banner.json +14 -0
  11. package/dist/items/breadcrumb.json +19 -0
  12. package/dist/items/bubble.json +14 -0
  13. package/dist/items/button-group.json +16 -0
  14. package/dist/items/button.json +15 -0
  15. package/dist/items/card.json +14 -0
  16. package/dist/items/checkbox.json +20 -0
  17. package/dist/items/collapsible.json +20 -0
  18. package/dist/items/combobox.json +20 -0
  19. package/dist/items/content-row.json +14 -0
  20. package/dist/items/context-menu.json +16 -0
  21. package/dist/items/dialog.json +20 -0
  22. package/dist/items/drawer.json +19 -0
  23. package/dist/items/dropdown-menu.json +20 -0
  24. package/dist/items/empty.json +14 -0
  25. package/dist/items/field.json +15 -0
  26. package/dist/items/hover-card.json +15 -0
  27. package/dist/items/input-group.json +18 -0
  28. package/dist/items/input-otp.json +15 -0
  29. package/dist/items/input.json +15 -0
  30. package/dist/items/kbd.json +14 -0
  31. package/dist/items/label.json +14 -0
  32. package/dist/items/link.json +20 -0
  33. package/dist/items/marker.json +14 -0
  34. package/dist/items/menubar.json +17 -0
  35. package/dist/items/message-scroller.json +21 -0
  36. package/dist/items/message.json +14 -0
  37. package/dist/items/native-select.json +19 -0
  38. package/dist/items/navigation-menu.json +20 -0
  39. package/dist/items/pagination.json +19 -0
  40. package/dist/items/popover.json +15 -0
  41. package/dist/items/progress.json +15 -0
  42. package/dist/items/radio-group.json +15 -0
  43. package/dist/items/scroll-area.json +15 -0
  44. package/dist/items/select.json +20 -0
  45. package/dist/items/separator.json +15 -0
  46. package/dist/items/skeleton.json +14 -0
  47. package/dist/items/slider.json +15 -0
  48. package/dist/items/spinner.json +14 -0
  49. package/dist/items/switch.json +15 -0
  50. package/dist/items/table.json +14 -0
  51. package/dist/items/tabs.json +15 -0
  52. package/dist/items/textarea.json +14 -0
  53. package/dist/items/toast.json +24 -0
  54. package/dist/items/toggle-group.json +17 -0
  55. package/dist/items/toggle.json +15 -0
  56. package/dist/items/tooltip.json +15 -0
  57. package/dist/items/typography.json +14 -0
  58. package/dist/items.d.ts +272 -0
  59. package/dist/items.js +272 -0
  60. package/dist/tokens/color-palette.stylex.ts +190 -0
  61. package/dist/tokens/semantic.stylex.ts +112 -0
  62. package/dist/tokens/themes.stylex.ts +102 -0
  63. package/package.json +28 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "collapsible",
3
+ "primaryExport": "Collapsible",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { Icon } from \"./Icon\";\nimport {\n colorVars,\n motionVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space2,\n minWidth: 0,\n width: \"100%\",\n },\n trigger: {\n alignItems: \"center\",\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderColor: \"transparent\",\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n color: colorVars.fgPrimary,\n cursor: \"pointer\",\n display: \"flex\",\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n flexShrink: 0,\n height: sizeVars.controlSm,\n justifyContent: \"center\",\n outline: \"none\",\n padding: 0,\n width: sizeVars.controlSm,\n \":hover\": { backgroundColor: colorVars.interactionHover },\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.focusRing,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n \":disabled\": { cursor: \"not-allowed\" },\n },\n triggerDisabled: {\n backgroundColor: colorVars.interactionDisabled,\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n \":hover\": { backgroundColor: colorVars.interactionDisabled },\n },\n panel: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n height: \"var(--collapsible-panel-height)\",\n lineHeight: typographyVars.lineHeightNormal,\n minWidth: 0,\n opacity: 1,\n overflow: \"hidden\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"height, opacity\",\n transitionTimingFunction: motionVars.easingStandard,\n width: \"100%\",\n \"@media (prefers-reduced-motion: reduce)\": { transitionDuration: \"0.01ms\" },\n },\n panelTransitioning: { height: 0, opacity: 0 },\n panelContent: { display: \"flex\", flexDirection: \"column\", gap: spacingVars.space2 },\n icon: {\n alignItems: \"center\",\n display: \"inline-flex\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"transform\",\n },\n});\n\nexport function Collapsible({\n className,\n style,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.Root>) {\n const stylexProps = stylex.props(styles.root);\n return (\n <CollapsiblePrimitive.Root\n {...props}\n className={(state) =>\n [stylexProps.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n\nexport function CollapsibleTrigger({\n children,\n className,\n style,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.Trigger>) {\n return (\n <CollapsiblePrimitive.Trigger\n {...props}\n className={(state) => {\n const sx = stylex.props(styles.trigger, state.disabled && styles.triggerDisabled);\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(styles.trigger, state.disabled && styles.triggerDisabled);\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n {children}\n <span aria-hidden=\"true\" {...stylex.props(styles.icon)}>\n <Icon name=\"caretUpDown\" />\n </span>\n </CollapsiblePrimitive.Trigger>\n );\n}\n\nexport function CollapsibleContent({\n children,\n className,\n style,\n ...props\n}: ComponentProps<typeof CollapsiblePrimitive.Panel>) {\n return (\n <CollapsiblePrimitive.Panel\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.panel,\n state.transitionStatus === \"starting\" && styles.panelTransitioning,\n state.transitionStatus === \"ending\" && styles.panelTransitioning,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.panel,\n state.transitionStatus === \"starting\" && styles.panelTransitioning,\n state.transitionStatus === \"ending\" && styles.panelTransitioning,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n <div {...stylex.props(styles.panelContent)}>{children}</div>\n </CollapsiblePrimitive.Panel>\n );\n}\n",
11
+ "path": "collapsible.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@phosphor-icons/react",
17
+ "@stylexjs/stylex"
18
+ ],
19
+ "registryDependencies": []
20
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "combobox",
3
+ "primaryExport": "Combobox",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import { Combobox as ComboboxPrimitive } from \"@base-ui/react/combobox\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport { Icon } from \"./Icon\";\nimport {\n colorVars,\n motionVars,\n radiusVars,\n shadowVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n inputGroup: {\n alignItems: \"center\",\n backgroundColor: colorVars.bgSurface,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n display: \"flex\",\n height: sizeVars.controlMd,\n width: \"14rem\",\n paddingInlineStart: spacingVars.space3,\n \":focus-within\": {\n borderColor: colorVars.strokeFocus,\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n },\n searchIcon: { color: colorVars.fgSecondary, flexShrink: 0 },\n input: {\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderStyle: \"none\",\n borderWidth: 0,\n boxShadow: \"none\",\n color: colorVars.fgPrimary,\n flex: 1,\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n height: \"100%\",\n minWidth: 0,\n outline: \"none\",\n paddingInline: spacingVars.space2,\n \"::placeholder\": { color: colorVars.fgTertiary },\n },\n inputDisabled: { color: colorVars.fgDisabled, cursor: \"not-allowed\" },\n trigger: {\n alignItems: \"center\",\n alignSelf: \"stretch\",\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderStyle: \"none\",\n borderWidth: 0,\n boxShadow: \"none\",\n color: colorVars.fgSecondary,\n cursor: \"pointer\",\n display: \"inline-flex\",\n justifyContent: \"center\",\n outline: \"none\",\n width: sizeVars.controlMd,\n },\n triggerDisabled: {\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n \":hover\": { backgroundColor: \"transparent\" },\n },\n positioner: { zIndex: 60 },\n popup: {\n backgroundColor: colorVars.bgRaised,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n boxShadow: shadowVars.floating,\n color: colorVars.fgPrimary,\n maxHeight: \"min(20rem, var(--available-height))\",\n minWidth: \"var(--anchor-width)\",\n outline: \"none\",\n overflow: \"hidden\",\n padding: spacingVars.space1,\n transform: \"scale(1)\",\n transformOrigin: \"var(--transform-origin)\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: motionVars.easingEnter,\n \"@media (prefers-reduced-motion: reduce)\": {\n transform: \"none\",\n transitionDuration: \"0.01ms\",\n },\n },\n popupTransitioning: { opacity: 0, transform: \"scale(0.98)\" },\n popupEnding: {\n transitionDuration: motionVars.durationFast,\n transitionTimingFunction: motionVars.easingExit,\n },\n list: { overflowY: \"auto\", overscrollBehavior: \"contain\" },\n item: {\n alignItems: \"center\",\n borderRadius: radiusVars.sm,\n cursor: \"default\",\n display: \"flex\",\n fontSize: typographyVars.fontSizeSm,\n gap: spacingVars.space2,\n minHeight: sizeVars.controlSm,\n outline: \"none\",\n paddingInlineEnd: spacingVars.space3,\n paddingInlineStart: spacingVars.space8,\n position: \"relative\",\n userSelect: \"none\",\n },\n itemHighlighted: { backgroundColor: colorVars.interactionHover },\n itemDisabled: {\n backgroundColor: \"transparent\",\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n },\n indicator: {\n alignItems: \"center\",\n display: \"inline-flex\",\n insetInlineStart: spacingVars.space2,\n justifyContent: \"center\",\n position: \"absolute\",\n },\n empty: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n padding: spacingVars.space4,\n textAlign: \"center\",\n \":empty\": { padding: 0 },\n },\n label: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeXs,\n fontWeight: typographyVars.fontWeightMedium,\n paddingBlock: spacingVars.space2,\n paddingInline: spacingVars.space2,\n },\n separator: {\n backgroundColor: colorVars.strokeDefault,\n height: sizeVars.stroke,\n marginBlock: spacingVars.space1,\n marginInline: -spacingVars.space1,\n },\n});\n\nexport const Combobox = ComboboxPrimitive.Root;\nexport const ComboboxCollection = ComboboxPrimitive.Collection;\nexport const ComboboxGroup = ComboboxPrimitive.Group;\n\nexport function ComboboxInput({\n className,\n style,\n ...props\n}: ComponentProps<typeof ComboboxPrimitive.Input>) {\n return (\n <ComboboxPrimitive.InputGroup {...stylex.props(styles.inputGroup)}>\n <Icon aria-hidden=\"true\" name=\"search\" {...stylex.props(styles.searchIcon)} />\n <ComboboxPrimitive.Input\n {...props}\n className={(state) => {\n const sx = stylex.props(styles.input, state.disabled && styles.inputDisabled);\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(styles.input, state.disabled && styles.inputDisabled);\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n />\n <ComboboxPrimitive.Trigger\n aria-label=\"Open options\"\n className={(state) =>\n stylex.props(styles.trigger, state.disabled && styles.triggerDisabled).className ?? \"\"\n }\n style={(state) =>\n stylex.props(styles.trigger, state.disabled && styles.triggerDisabled).style\n }\n >\n <Icon aria-hidden=\"true\" name=\"chevronDown\" />\n </ComboboxPrimitive.Trigger>\n </ComboboxPrimitive.InputGroup>\n );\n}\n\ntype ComboboxContentProps = ComponentProps<typeof ComboboxPrimitive.Popup> &\n Pick<ComponentProps<typeof ComboboxPrimitive.Positioner>, \"align\" | \"side\" | \"sideOffset\"> & {\n children: ReactNode;\n };\n\nexport function ComboboxContent({\n align = \"start\",\n children,\n className,\n side = \"bottom\",\n sideOffset = 4,\n style,\n ...props\n}: ComboboxContentProps) {\n return (\n <ComboboxPrimitive.Portal>\n <ComboboxPrimitive.Positioner\n align={align}\n side={side}\n sideOffset={sideOffset}\n {...stylex.props(styles.positioner)}\n >\n <ComboboxPrimitive.Popup\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.popup,\n state.transitionStatus === \"starting\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupEnding,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.popup,\n state.transitionStatus === \"starting\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupEnding,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n <ComboboxPrimitive.List {...stylex.props(styles.list)}>{children}</ComboboxPrimitive.List>\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n );\n}\n\nexport function ComboboxItem({\n children,\n className,\n style,\n ...props\n}: ComponentProps<typeof ComboboxPrimitive.Item>) {\n return (\n <ComboboxPrimitive.Item\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n <ComboboxPrimitive.ItemIndicator {...stylex.props(styles.indicator)}>\n <Icon aria-hidden=\"true\" name=\"check\" />\n </ComboboxPrimitive.ItemIndicator>\n {children}\n </ComboboxPrimitive.Item>\n );\n}\n\nexport function ComboboxEmpty(props: ComponentProps<typeof ComboboxPrimitive.Empty>) {\n return <ComboboxPrimitive.Empty {...props} {...stylex.props(styles.empty)} />;\n}\n\nexport function ComboboxLabel(props: ComponentProps<typeof ComboboxPrimitive.GroupLabel>) {\n return <ComboboxPrimitive.GroupLabel {...props} {...stylex.props(styles.label)} />;\n}\n\nexport function ComboboxSeparator(props: ComponentProps<typeof ComboboxPrimitive.Separator>) {\n return <ComboboxPrimitive.Separator {...props} {...stylex.props(styles.separator)} />;\n}\n",
11
+ "path": "combobox.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@phosphor-icons/react",
17
+ "@stylexjs/stylex"
18
+ ],
19
+ "registryDependencies": []
20
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "content-row",
3
+ "primaryExport": "ContentRow",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport {\n colorVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n borderColor: \"transparent\",\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n color: colorVars.fgPrimary,\n display: \"flex\",\n minWidth: 0,\n width: \"100%\",\n },\n variantDefault: { backgroundColor: \"transparent\" },\n muted: { backgroundColor: colorVars.bgSubtle },\n outline: { backgroundColor: colorVars.bgSurface, borderColor: colorVars.strokeDefault },\n xs: { gap: spacingVars.space2, minHeight: sizeVars.controlSm, padding: spacingVars.space2 },\n sm: { gap: spacingVars.space3, minHeight: sizeVars.touchTarget, padding: spacingVars.space3 },\n sizeDefault: { gap: spacingVars.space3, minHeight: \"4rem\", padding: spacingVars.space4 },\n group: { display: \"flex\", flexDirection: \"column\", gap: spacingVars.space2, width: \"100%\" },\n media: {\n alignItems: \"center\",\n display: \"flex\",\n flexShrink: 0,\n justifyContent: \"center\",\n overflow: \"hidden\",\n },\n mediaicon: {\n backgroundColor: colorVars.bgSubtle,\n borderRadius: radiusVars.sm,\n color: colorVars.fgSecondary,\n height: sizeVars.controlMd,\n width: sizeVars.controlMd,\n },\n mediaavatar: { borderRadius: radiusVars.full },\n mediaimage: {\n borderRadius: radiusVars.sm,\n height: sizeVars.touchTarget,\n width: sizeVars.touchTarget,\n },\n content: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n gap: spacingVars.space1,\n minWidth: 0,\n },\n title: {\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n lineHeight: typographyVars.lineHeightTight,\n },\n description: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n margin: 0,\n },\n actions: { alignItems: \"center\", display: \"flex\", flexShrink: 0, gap: spacingVars.space2 },\n});\n\nexport type ContentRowSize = \"default\" | \"sm\" | \"xs\";\nexport type ContentRowVariant = \"default\" | \"muted\" | \"outline\";\n\nexport type ContentRowProps = ComponentProps<\"div\"> & {\n size?: ContentRowSize;\n variant?: ContentRowVariant;\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function ContentRow({\n className,\n size = \"default\",\n style,\n variant = \"default\",\n xstyle,\n ...props\n}: ContentRowProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(\n stylex.props(\n styles.root,\n size === \"default\" ? styles.sizeDefault : styles[size],\n variant === \"default\" ? styles.variantDefault : styles[variant],\n xstyle,\n ),\n className,\n style,\n )}\n />\n );\n}\n\nexport function ContentRowGroup({ className, style, ...props }: ComponentProps<\"div\">) {\n return <div {...props} {...getNativeStyleProps(stylex.props(styles.group), className, style)} />;\n}\n\nexport type ContentRowMediaProps = ComponentProps<\"div\"> & {\n variant?: \"avatar\" | \"icon\" | \"image\";\n};\n\nexport function ContentRowMedia({\n className,\n style,\n variant = \"icon\",\n ...props\n}: ContentRowMediaProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(\n stylex.props(styles.media, styles[`media${variant}`]),\n className,\n style,\n )}\n />\n );\n}\n\nexport function ContentRowContent({ className, style, ...props }: ComponentProps<\"div\">) {\n return (\n <div {...props} {...getNativeStyleProps(stylex.props(styles.content), className, style)} />\n );\n}\n\nexport function ContentRowTitle({ className, style, ...props }: ComponentProps<\"div\">) {\n return <div {...props} {...getNativeStyleProps(stylex.props(styles.title), className, style)} />;\n}\n\nexport function ContentRowDescription({ className, style, ...props }: ComponentProps<\"p\">) {\n return (\n <p {...props} {...getNativeStyleProps(stylex.props(styles.description), className, style)} />\n );\n}\n\nexport function ContentRowActions({ className, style, ...props }: ComponentProps<\"div\">) {\n return (\n <div {...props} {...getNativeStyleProps(stylex.props(styles.actions), className, style)} />\n );\n}\n",
7
+ "path": "content-row.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "context-menu",
3
+ "primaryExport": "ContextMenu",
4
+ "files": [
5
+ {
6
+ "content": "import { ContextMenu as ContextMenuPrimitive } from \"@base-ui/react/context-menu\";\n\nexport {\n DropdownMenuCheckboxItem as ContextMenuCheckboxItem,\n DropdownMenuContent as ContextMenuContent,\n DropdownMenuGroup as ContextMenuGroup,\n DropdownMenuItem as ContextMenuItem,\n DropdownMenuLabel as ContextMenuLabel,\n DropdownMenuRadioGroup as ContextMenuRadioGroup,\n DropdownMenuRadioItem as ContextMenuRadioItem,\n DropdownMenuSeparator as ContextMenuSeparator,\n DropdownMenuShortcut as ContextMenuShortcut,\n DropdownMenuSub as ContextMenuSub,\n DropdownMenuSubContent as ContextMenuSubContent,\n DropdownMenuSubTrigger as ContextMenuSubTrigger,\n} from \"./dropdown-menu\";\n\nexport const ContextMenu = ContextMenuPrimitive.Root;\nexport const ContextMenuTrigger = ContextMenuPrimitive.Trigger;\n",
7
+ "path": "context-menu.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react"
12
+ ],
13
+ "registryDependencies": [
14
+ "dropdown-menu"
15
+ ]
16
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "dialog",
3
+ "primaryExport": "Dialog",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import { Dialog as DialogPrimitive } from \"@base-ui/react/dialog\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport { Icon } from \"./Icon\";\nimport { getNativeStyleProps } from \"./stylex-props\";\nimport {\n colorVars,\n motionVars,\n radiusVars,\n shadowVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n backdrop: {\n backdropFilter: \"blur(4px)\",\n backgroundColor: \"oklch(0% 0 0 / 40%)\",\n inset: 0,\n position: \"fixed\",\n transitionDuration: motionVars.durationSlow,\n transitionProperty: \"opacity\",\n transitionTimingFunction: motionVars.easingEnter,\n zIndex: 50,\n \":is([data-starting-style])\": { opacity: 0 },\n \":is([data-ending-style])\": {\n opacity: 0,\n transitionDuration: motionVars.durationNormal,\n transitionTimingFunction: motionVars.easingExit,\n },\n },\n viewport: {\n alignItems: \"center\",\n display: \"flex\",\n inset: 0,\n justifyContent: \"center\",\n padding: spacingVars.space4,\n position: \"fixed\",\n zIndex: 51,\n },\n popup: {\n backgroundColor: colorVars.bgRaised,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n boxShadow: shadowVars.overlay,\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space4,\n maxHeight: \"calc(100dvh - 2rem)\",\n maxWidth: \"32rem\",\n outline: \"none\",\n overflow: \"auto\",\n padding: spacingVars.space6,\n position: \"relative\",\n transitionDuration: motionVars.durationSlow,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: motionVars.easingEnter,\n width: \"100%\",\n \":is([data-starting-style], [data-ending-style])\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n },\n \":is([data-ending-style])\": {\n transitionDuration: motionVars.durationNormal,\n transitionTimingFunction: motionVars.easingExit,\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: motionVars.durationNormal,\n \":is([data-starting-style], [data-ending-style])\": { transform: \"scale(0.99)\" },\n },\n },\n close: {\n alignItems: \"center\",\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderStyle: \"none\",\n borderWidth: 0,\n borderRadius: radiusVars.sm,\n color: colorVars.fgSecondary,\n cursor: \"pointer\",\n display: \"inline-flex\",\n height: sizeVars.touchTarget,\n justifyContent: \"center\",\n outline: \"none\",\n position: \"absolute\",\n right: spacingVars.space3,\n top: spacingVars.space3,\n width: sizeVars.touchTarget,\n \":hover\": { backgroundColor: colorVars.interactionHover, color: colorVars.fgPrimary },\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space2,\n paddingInlineEnd: spacingVars.space8,\n },\n footer: {\n alignItems: \"center\",\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: spacingVars.space2,\n justifyContent: \"flex-end\",\n },\n title: {\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeLg,\n fontWeight: typographyVars.fontWeightSemibold,\n lineHeight: typographyVars.lineHeightTight,\n margin: 0,\n },\n description: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n margin: 0,\n },\n});\n\nexport const Dialog = DialogPrimitive.Root;\nexport const DialogTrigger = DialogPrimitive.Trigger;\nexport const DialogClose = DialogPrimitive.Close;\n\ntype DialogContentProps = ComponentProps<typeof DialogPrimitive.Popup> & {\n children: ReactNode;\n /** Accessible name for the optional close button. @default \"Close\" */\n closeLabel?: string;\n showCloseButton?: boolean;\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function DialogContent({\n children,\n className,\n closeLabel = \"Close\",\n showCloseButton = true,\n style,\n xstyle,\n ...props\n}: DialogContentProps) {\n const stylexProps = stylex.props(styles.popup, xstyle);\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Backdrop {...stylex.props(styles.backdrop)} />\n <DialogPrimitive.Viewport {...stylex.props(styles.viewport)}>\n <DialogPrimitive.Popup\n {...props}\n className={(state) => {\n const customClassName = typeof className === \"function\" ? className(state) : className;\n return [stylexProps.className, customClassName].filter(Boolean).join(\" \");\n }}\n style={(state) => {\n return {\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n };\n }}\n >\n {children}\n {showCloseButton ? (\n <DialogPrimitive.Close aria-label={closeLabel} {...stylex.props(styles.close)}>\n <Icon aria-hidden=\"true\" name=\"close\" />\n </DialogPrimitive.Close>\n ) : null}\n </DialogPrimitive.Popup>\n </DialogPrimitive.Viewport>\n </DialogPrimitive.Portal>\n );\n}\n\nexport function DialogHeader({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & { xstyle?: stylex.StyleXStyles }) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.header, xstyle), className, style)}\n />\n );\n}\n\nexport function DialogFooter({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & { xstyle?: stylex.StyleXStyles }) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.footer, xstyle), className, style)}\n />\n );\n}\n\nexport function DialogTitle({\n className,\n style,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Title>) {\n const stylexProps = stylex.props(styles.title);\n return (\n <DialogPrimitive.Title\n {...props}\n className={(state) =>\n [stylexProps.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n\nexport function DialogDescription({\n className,\n style,\n ...props\n}: ComponentProps<typeof DialogPrimitive.Description>) {\n const stylexProps = stylex.props(styles.description);\n return (\n <DialogPrimitive.Description\n {...props}\n className={(state) =>\n [stylexProps.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n",
11
+ "path": "dialog.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@phosphor-icons/react",
17
+ "@stylexjs/stylex"
18
+ ],
19
+ "registryDependencies": []
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "drawer",
3
+ "primaryExport": "Drawer",
4
+ "files": [
5
+ {
6
+ "content": "import { Drawer as DrawerPrimitive } from \"@base-ui/react/drawer\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport { createContext, useContext } from \"react\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\nimport {\n colorVars,\n motionVars,\n radiusVars,\n shadowVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n overlay: {\n backdropFilter: \"blur(4px)\",\n backgroundColor: \"oklch(0% 0 0 / 40%)\",\n inset: 0,\n position: \"fixed\",\n transitionDuration: motionVars.durationSlow,\n transitionProperty: \"opacity\",\n transitionTimingFunction: motionVars.easingEnter,\n zIndex: 50,\n \":is([data-starting-style])\": { opacity: 0 },\n \":is([data-ending-style])\": {\n opacity: 0,\n transitionDuration: motionVars.durationNormal,\n transitionTimingFunction: motionVars.easingExit,\n },\n },\n overlayTransparent: { backdropFilter: \"none\", backgroundColor: \"transparent\" },\n viewport: { inset: 0, position: \"fixed\", zIndex: 51 },\n popup: {\n backgroundColor: colorVars.bgRaised,\n borderColor: colorVars.strokeDefault,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n boxShadow: shadowVars.overlay,\n color: colorVars.fgPrimary,\n display: \"flex\",\n flexDirection: \"column\",\n minHeight: 0,\n outline: \"none\",\n overflow: \"hidden\",\n position: \"fixed\",\n transitionDuration: motionVars.durationSlow,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: motionVars.easingEnter,\n willChange: \"transform\",\n \":is([data-ending-style])\": {\n transitionDuration: motionVars.durationNormal,\n transitionTimingFunction: motionVars.easingExit,\n },\n \"@media (prefers-reduced-motion: reduce)\": { transitionDuration: motionVars.durationNormal },\n },\n verticalPopup: {\n left: 0,\n marginInline: \"auto\",\n maxHeight: \"calc(100dvh - 6rem)\",\n right: 0,\n width: \"100%\",\n },\n downPopup: {\n borderRadius: \"1rem 1rem 0 0\",\n bottom: 0,\n minHeight: \"50dvh\",\n transform:\n \"translate3d(var(--drawer-swipe-movement-x, 0px), calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px)), 0)\",\n \":is([data-starting-style], [data-ending-style])\": {\n opacity: 0,\n transform: \"translate3d(0, 100%, 0)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n \":is([data-starting-style], [data-ending-style])\": {\n transform: \"translate3d(0, 24%, 0)\",\n },\n },\n },\n upPopup: {\n borderRadius: \"0 0 1rem 1rem\",\n minHeight: \"50dvh\",\n top: 0,\n transform:\n \"translate3d(var(--drawer-swipe-movement-x, 0px), calc(var(--drawer-snap-point-offset, 0px) + var(--drawer-swipe-movement-y, 0px)), 0)\",\n \":is([data-starting-style], [data-ending-style])\": {\n opacity: 0,\n transform: \"translate3d(0, -100%, 0)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n \":is([data-starting-style], [data-ending-style])\": {\n transform: \"translate3d(0, -24%, 0)\",\n },\n },\n },\n horizontalPopup: {\n bottom: 0,\n maxWidth: \"24rem\",\n top: 0,\n width: \"75vw\",\n },\n leftPopup: {\n borderRadius: \"0 1rem 1rem 0\",\n left: 0,\n transform:\n \"translate3d(var(--drawer-swipe-movement-x, 0px), var(--drawer-swipe-movement-y, 0px), 0)\",\n \":is([data-starting-style], [data-ending-style])\": {\n opacity: 0,\n transform: \"translate3d(-100%, 0, 0)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n \":is([data-starting-style], [data-ending-style])\": {\n transform: \"translate3d(-24%, 0, 0)\",\n },\n },\n },\n rightPopup: {\n borderRadius: \"1rem 0 0 1rem\",\n right: 0,\n transform:\n \"translate3d(var(--drawer-swipe-movement-x, 0px), var(--drawer-swipe-movement-y, 0px), 0)\",\n \":is([data-starting-style], [data-ending-style])\": {\n opacity: 0,\n transform: \"translate3d(100%, 0, 0)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n \":is([data-starting-style], [data-ending-style])\": {\n transform: \"translate3d(24%, 0, 0)\",\n },\n },\n },\n content: { display: \"flex\", flex: 1, flexDirection: \"column\", minHeight: 0 },\n swipeHandle: {\n alignSelf: \"center\",\n backgroundColor: colorVars.strokeDefault,\n borderRadius: radiusVars.full,\n flexShrink: 0,\n height: \"0.25rem\",\n marginBlock: spacingVars.space2,\n width: \"2.5rem\",\n },\n horizontalSwipeHandle: {\n height: \"2.5rem\",\n marginBlock: 0,\n position: \"absolute\",\n top: \"50%\",\n transform: \"translateY(-50%)\",\n width: \"0.25rem\",\n },\n upSwipeHandle: {\n bottom: spacingVars.space2,\n left: 0,\n marginBlock: 0,\n marginInline: \"auto\",\n position: \"absolute\",\n right: 0,\n },\n leftSwipeHandle: { right: spacingVars.space2 },\n rightSwipeHandle: { left: spacingVars.space2 },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space2,\n paddingBlock: spacingVars.space6,\n paddingBlockEnd: spacingVars.space2,\n paddingInline: spacingVars.space6,\n },\n footer: {\n alignItems: \"center\",\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: spacingVars.space2,\n justifyContent: \"flex-start\",\n paddingBlock: spacingVars.space6,\n paddingBlockStart: spacingVars.space2,\n paddingInline: spacingVars.space6,\n },\n sideFooter: {\n \"@media (max-width: 40rem)\": { justifyContent: \"center\" },\n },\n title: {\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeLg,\n fontWeight: typographyVars.fontWeightSemibold,\n lineHeight: typographyVars.lineHeightTight,\n margin: 0,\n },\n description: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n margin: 0,\n },\n});\n\ntype DrawerContextValue = {\n overlay: DrawerOverlayMode;\n showSwipeHandle: boolean;\n swipeDirection: DrawerSwipeDirection;\n};\n\nexport type DrawerOverlayMode = \"visible\" | \"transparent\" | \"none\";\nexport type DrawerSwipeDirection = \"down\" | \"up\" | \"left\" | \"right\";\n\nconst DrawerContext = createContext<DrawerContextValue>({\n overlay: \"visible\",\n showSwipeHandle: false,\n swipeDirection: \"down\",\n});\n\nexport type DrawerProps = Omit<ComponentProps<typeof DrawerPrimitive.Root>, \"swipeDirection\"> & {\n /** Controls the backdrop behind the Drawer. */\n overlay?: DrawerOverlayMode;\n showSwipeHandle?: boolean;\n swipeDirection?: DrawerSwipeDirection;\n};\n\nexport function Drawer({\n overlay = \"visible\",\n showSwipeHandle = false,\n swipeDirection = \"down\",\n ...props\n}: DrawerProps) {\n return (\n <DrawerContext.Provider value={{ overlay, showSwipeHandle, swipeDirection }}>\n <DrawerPrimitive.Root {...props} swipeDirection={swipeDirection} />\n </DrawerContext.Provider>\n );\n}\n\nexport const DrawerTrigger = DrawerPrimitive.Trigger;\nexport const DrawerClose = DrawerPrimitive.Close;\nexport const DrawerPortal = DrawerPrimitive.Portal;\n\ntype DrawerOverlayProps = ComponentProps<typeof DrawerPrimitive.Backdrop> & {\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function DrawerOverlay({ className, style, xstyle, ...props }: DrawerOverlayProps) {\n return (\n <DrawerPrimitive.Backdrop\n {...props}\n data-slot=\"drawer-overlay\"\n className={(state) => {\n const stylexProps = stylex.props(styles.overlay, xstyle);\n return [\n stylexProps.className,\n typeof className === \"function\" ? className(state) : className,\n ]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const stylexProps = stylex.props(styles.overlay, xstyle);\n return {\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n };\n }}\n />\n );\n}\n\ntype DrawerSwipeHandleProps = ComponentProps<\"div\"> & { xstyle?: stylex.StyleXStyles };\n\nexport function DrawerSwipeHandle({ className, style, xstyle, ...props }: DrawerSwipeHandleProps) {\n const { swipeDirection } = useContext(DrawerContext);\n const isHorizontal = swipeDirection === \"left\" || swipeDirection === \"right\";\n return (\n <div\n aria-hidden=\"true\"\n data-slot=\"drawer-swipe-handle\"\n {...props}\n {...getNativeStyleProps(\n stylex.props(\n styles.swipeHandle,\n isHorizontal && styles.horizontalSwipeHandle,\n swipeDirection === \"up\" && styles.upSwipeHandle,\n swipeDirection === \"left\" && styles.leftSwipeHandle,\n swipeDirection === \"right\" && styles.rightSwipeHandle,\n xstyle,\n ),\n className,\n style,\n )}\n />\n );\n}\n\ntype DrawerContentProps = ComponentProps<typeof DrawerPrimitive.Popup> & {\n xstyle?: stylex.StyleXStyles;\n};\n\nfunction getDrawerPopupStylexProps(\n swipeDirection: DrawerSwipeDirection,\n xstyle?: stylex.StyleXStyles,\n) {\n if (swipeDirection === \"right\") {\n return stylex.props(styles.popup, styles.horizontalPopup, styles.rightPopup, xstyle);\n }\n if (swipeDirection === \"left\") {\n return stylex.props(styles.popup, styles.horizontalPopup, styles.leftPopup, xstyle);\n }\n if (swipeDirection === \"up\") {\n return stylex.props(styles.popup, styles.verticalPopup, styles.upPopup, xstyle);\n }\n\n return stylex.props(styles.popup, styles.verticalPopup, styles.downPopup, xstyle);\n}\n\nexport function DrawerContent({\n children,\n className,\n style,\n xstyle,\n ...props\n}: DrawerContentProps) {\n const { overlay, showSwipeHandle, swipeDirection } = useContext(DrawerContext);\n\n return (\n <DrawerPortal>\n {overlay === \"none\" ? null : (\n <DrawerOverlay xstyle={overlay === \"transparent\" ? styles.overlayTransparent : undefined} />\n )}\n <DrawerPrimitive.Viewport {...stylex.props(styles.viewport)}>\n <DrawerPrimitive.Popup\n {...props}\n data-slot=\"drawer-popup\"\n className={(state) => {\n const stylexProps = getDrawerPopupStylexProps(swipeDirection, xstyle);\n return [\n stylexProps.className,\n typeof className === \"function\" ? className(state) : className,\n ]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const stylexProps = getDrawerPopupStylexProps(swipeDirection, xstyle);\n return {\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n };\n }}\n >\n {showSwipeHandle ? <DrawerSwipeHandle /> : null}\n <DrawerPrimitive.Content {...stylex.props(styles.content)}>\n {children}\n </DrawerPrimitive.Content>\n </DrawerPrimitive.Popup>\n </DrawerPrimitive.Viewport>\n </DrawerPortal>\n );\n}\n\nexport function DrawerHeader({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & { xstyle?: stylex.StyleXStyles }) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.header, xstyle), className, style)}\n />\n );\n}\n\nexport function DrawerFooter({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & { xstyle?: stylex.StyleXStyles }) {\n const { swipeDirection } = useContext(DrawerContext);\n const isSideDrawer = swipeDirection === \"left\" || swipeDirection === \"right\";\n\n return (\n <div\n {...props}\n {...getNativeStyleProps(\n stylex.props(styles.footer, isSideDrawer && styles.sideFooter, xstyle),\n className,\n style,\n )}\n />\n );\n}\n\nexport function DrawerTitle({\n className,\n style,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Title>) {\n const stylexProps = stylex.props(styles.title);\n return (\n <DrawerPrimitive.Title\n {...props}\n className={(state) =>\n [stylexProps.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n\nexport function DrawerDescription({\n className,\n style,\n ...props\n}: ComponentProps<typeof DrawerPrimitive.Description>) {\n const stylexProps = stylex.props(styles.description);\n return (\n <DrawerPrimitive.Description\n {...props}\n className={(state) =>\n [stylexProps.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...stylexProps.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n",
7
+ "path": "drawer.tsx"
8
+ },
9
+ {
10
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nexport function getNativeStyleProps(\n stylexProps: ReturnType<typeof stylex.props>,\n className?: string,\n style?: ComponentProps<\"div\">[\"style\"],\n): Pick<ComponentProps<\"div\">, \"className\" | \"style\"> {\n return {\n className: [stylexProps.className, className].filter(Boolean).join(\" \"),\n style: { ...stylexProps.style, ...style },\n };\n}\n",
11
+ "path": "stylex-props.ts"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@stylexjs/stylex"
17
+ ],
18
+ "registryDependencies": []
19
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "dropdown-menu",
3
+ "primaryExport": "DropdownMenu",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport { Icon } from \"./Icon\";\nimport {\n colorVars,\n motionVars,\n radiusVars,\n shadowVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n positioner: { zIndex: 60 },\n popup: {\n backgroundColor: colorVars.bgRaised,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n boxShadow: shadowVars.floating,\n color: colorVars.fgPrimary,\n minWidth: \"12rem\",\n outline: \"none\",\n padding: spacingVars.space1,\n transform: \"scale(1)\",\n transformOrigin: \"var(--transform-origin)\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: motionVars.easingEnter,\n \"@media (prefers-reduced-motion: reduce)\": {\n transform: \"none\",\n transitionDuration: \"0.01ms\",\n },\n },\n popupTransitioning: { opacity: 0, transform: \"scale(0.98)\" },\n popupEnding: {\n transitionDuration: motionVars.durationFast,\n transitionTimingFunction: motionVars.easingExit,\n },\n item: {\n alignItems: \"center\",\n borderRadius: radiusVars.sm,\n color: colorVars.fgPrimary,\n cursor: \"default\",\n display: \"flex\",\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n gap: spacingVars.space2,\n minHeight: sizeVars.controlSm,\n outline: \"none\",\n paddingInline: spacingVars.space2,\n position: \"relative\",\n userSelect: \"none\",\n \":disabled\": { cursor: \"not-allowed\" },\n },\n itemHighlighted: { backgroundColor: colorVars.interactionHover },\n itemDisabled: {\n backgroundColor: \"transparent\",\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n },\n inset: { paddingInlineStart: spacingVars.space8 },\n destructive: { color: colorVars.fgFeedbackError },\n choiceItem: { paddingInlineStart: spacingVars.space8 },\n indicator: {\n alignItems: \"center\",\n display: \"inline-flex\",\n insetInlineStart: spacingVars.space2,\n justifyContent: \"center\",\n position: \"absolute\",\n },\n radioDot: {\n backgroundColor: \"currentColor\",\n borderRadius: radiusVars.full,\n height: spacingVars.space2,\n width: spacingVars.space2,\n },\n label: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeXs,\n fontWeight: typographyVars.fontWeightMedium,\n paddingBlock: spacingVars.space2,\n paddingInline: spacingVars.space2,\n },\n separator: {\n backgroundColor: colorVars.strokeDefault,\n height: sizeVars.stroke,\n marginBlock: spacingVars.space1,\n },\n shortcut: {\n color: colorVars.fgTertiary,\n fontSize: typographyVars.fontSizeXs,\n marginInlineStart: \"auto\",\n },\n subIcon: { marginInlineStart: \"auto\" },\n});\n\nexport const DropdownMenu = MenuPrimitive.Root;\nexport const DropdownMenuTrigger = MenuPrimitive.Trigger;\nexport const DropdownMenuGroup = MenuPrimitive.Group;\nexport const DropdownMenuRadioGroup = MenuPrimitive.RadioGroup;\nexport const DropdownMenuSub = MenuPrimitive.SubmenuRoot;\n\ntype DropdownMenuContentProps = ComponentProps<typeof MenuPrimitive.Popup> &\n Pick<\n ComponentProps<typeof MenuPrimitive.Positioner>,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\"\n >;\n\nexport function DropdownMenuContent({\n align = \"start\",\n alignOffset,\n className,\n side = \"bottom\",\n sideOffset = 4,\n style,\n ...props\n}: DropdownMenuContentProps) {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...stylex.props(styles.positioner)}\n >\n <MenuPrimitive.Popup\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.popup,\n state.transitionStatus === \"starting\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupEnding,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.popup,\n state.transitionStatus === \"starting\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupTransitioning,\n state.transitionStatus === \"ending\" && styles.popupEnding,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n />\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n}\n\ntype DropdownMenuItemProps = ComponentProps<typeof MenuPrimitive.Item> & {\n destructive?: boolean;\n inset?: boolean;\n};\n\nexport function DropdownMenuItem({\n className,\n destructive = false,\n inset = false,\n style,\n ...props\n}: DropdownMenuItemProps) {\n return (\n <MenuPrimitive.Item\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n inset && styles.inset,\n destructive && styles.destructive,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n inset && styles.inset,\n destructive && styles.destructive,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n />\n );\n}\n\nexport function DropdownMenuCheckboxItem({\n children,\n className,\n style,\n ...props\n}: ComponentProps<typeof MenuPrimitive.CheckboxItem>) {\n return (\n <MenuPrimitive.CheckboxItem\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.item,\n styles.choiceItem,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.item,\n styles.choiceItem,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n <MenuPrimitive.CheckboxItemIndicator {...stylex.props(styles.indicator)}>\n <Icon aria-hidden=\"true\" name=\"check\" />\n </MenuPrimitive.CheckboxItemIndicator>\n {children}\n </MenuPrimitive.CheckboxItem>\n );\n}\n\nexport function DropdownMenuRadioItem({\n children,\n className,\n style,\n ...props\n}: ComponentProps<typeof MenuPrimitive.RadioItem>) {\n return (\n <MenuPrimitive.RadioItem\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.item,\n styles.choiceItem,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.item,\n styles.choiceItem,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n <MenuPrimitive.RadioItemIndicator {...stylex.props(styles.indicator)}>\n <span {...stylex.props(styles.radioDot)} />\n </MenuPrimitive.RadioItemIndicator>\n {children}\n </MenuPrimitive.RadioItem>\n );\n}\n\nexport function DropdownMenuLabel({\n className,\n inset = false,\n style,\n ...props\n}: ComponentProps<typeof MenuPrimitive.GroupLabel> & { inset?: boolean }) {\n const sx = stylex.props(styles.label, inset && styles.inset);\n return (\n <MenuPrimitive.GroupLabel\n {...props}\n className={(state) =>\n [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({ ...sx.style, ...(typeof style === \"function\" ? style(state) : style) })}\n />\n );\n}\n\nexport function DropdownMenuSeparator(props: ComponentProps<typeof MenuPrimitive.Separator>) {\n return <MenuPrimitive.Separator {...props} {...stylex.props(styles.separator)} />;\n}\n\nexport function DropdownMenuShortcut({\n children,\n ...props\n}: ComponentProps<\"span\"> & { children: ReactNode }) {\n return (\n <span {...props} {...stylex.props(styles.shortcut)}>\n {children}\n </span>\n );\n}\n\nexport function DropdownMenuSubTrigger({\n children,\n className,\n inset = false,\n style,\n ...props\n}: ComponentProps<typeof MenuPrimitive.SubmenuTrigger> & { inset?: boolean }) {\n return (\n <MenuPrimitive.SubmenuTrigger\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n inset && styles.inset,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.item,\n state.highlighted && styles.itemHighlighted,\n state.disabled && styles.itemDisabled,\n inset && styles.inset,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n >\n {children}\n <Icon aria-hidden=\"true\" name=\"chevronRight\" {...stylex.props(styles.subIcon)} />\n </MenuPrimitive.SubmenuTrigger>\n );\n}\n\nexport const DropdownMenuSubContent = DropdownMenuContent;\n",
11
+ "path": "dropdown-menu.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@phosphor-icons/react",
17
+ "@stylexjs/stylex"
18
+ ],
19
+ "registryDependencies": []
20
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "empty",
3
+ "primaryExport": "Empty",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport {\n colorVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"dashed\",\n borderWidth: sizeVars.stroke,\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space6,\n justifyContent: \"center\",\n minWidth: 0,\n padding: spacingVars.space8,\n textAlign: \"center\",\n },\n header: {\n alignItems: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space2,\n maxWidth: sizeVars.contentSm,\n },\n media: {\n alignItems: \"center\",\n backgroundColor: colorVars.bgSubtle,\n borderRadius: radiusVars.sm,\n color: colorVars.fgSecondary,\n display: \"flex\",\n height: sizeVars.touchTarget,\n justifyContent: \"center\",\n width: sizeVars.touchTarget,\n },\n title: {\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeLg,\n fontWeight: typographyVars.fontWeightMedium,\n lineHeight: typographyVars.lineHeightTight,\n margin: 0,\n },\n description: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n margin: 0,\n },\n content: {\n alignItems: \"center\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space4,\n maxWidth: sizeVars.contentSm,\n width: \"100%\",\n },\n});\n\ntype StyleProps = { xstyle?: stylex.StyleXStyles };\n\nexport function Empty({ className, style, xstyle, ...props }: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div {...props} {...getNativeStyleProps(stylex.props(styles.root, xstyle), className, style)} />\n );\n}\n\nexport function EmptyHeader({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.header, xstyle), className, style)}\n />\n );\n}\n\nexport function EmptyMedia({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n aria-hidden=\"true\"\n {...getNativeStyleProps(stylex.props(styles.media, xstyle), className, style)}\n />\n );\n}\n\nexport function EmptyTitle({\n children,\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"h3\"> & StyleProps) {\n return (\n <h3 {...props} {...getNativeStyleProps(stylex.props(styles.title, xstyle), className, style)}>\n {children}\n </h3>\n );\n}\n\nexport function EmptyDescription({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"p\"> & StyleProps) {\n return (\n <p\n {...props}\n {...getNativeStyleProps(stylex.props(styles.description, xstyle), className, style)}\n />\n );\n}\n\nexport function EmptyContent({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.content, xstyle), className, style)}\n />\n );\n}\n",
7
+ "path": "empty.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "field",
3
+ "primaryExport": "Field",
4
+ "files": [
5
+ {
6
+ "content": "import { Field as FieldPrimitive } from \"@base-ui/react/field\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport { colorVars, spacingVars, typographyVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: { display: \"flex\", gap: spacingVars.space2, width: \"100%\" },\n vertical: { flexDirection: \"column\" },\n horizontal: { alignItems: \"center\", flexDirection: \"row\", gap: spacingVars.space4 },\n label: {\n color: colorVars.fgPrimary,\n cursor: \"default\",\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n lineHeight: typographyVars.lineHeightNormal,\n },\n description: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n margin: 0,\n },\n error: {\n color: colorVars.fgFeedbackError,\n fontSize: typographyVars.fontSizeSm,\n lineHeight: typographyVars.lineHeightNormal,\n },\n set: {\n borderStyle: \"none\",\n borderWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space6,\n margin: 0,\n minWidth: 0,\n padding: 0,\n },\n legend: {\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeMd,\n fontWeight: typographyVars.fontWeightMedium,\n marginBottom: spacingVars.space3,\n padding: 0,\n },\n group: { display: \"flex\", flexDirection: \"column\", gap: spacingVars.space6, width: \"100%\" },\n content: {\n display: \"flex\",\n flex: 1,\n flexDirection: \"column\",\n gap: spacingVars.space1,\n minWidth: 0,\n },\n title: {\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n lineHeight: typographyVars.lineHeightNormal,\n },\n});\n\ntype StyleProps = { xstyle?: stylex.StyleXStyles };\ntype FieldOrientation = \"horizontal\" | \"vertical\";\n\nfunction mergeClassName<State>(\n generatedClassName: string | undefined,\n className: string | ((state: State) => string | undefined) | undefined,\n) {\n if (typeof className === \"function\") {\n return (state: State) => [generatedClassName, className(state)].filter(Boolean).join(\" \");\n }\n\n return [generatedClassName, className].filter(Boolean).join(\" \");\n}\n\nexport type FieldProps = ComponentProps<typeof FieldPrimitive.Root> &\n StyleProps & { orientation?: FieldOrientation };\n\nexport function Field({\n className,\n orientation = \"vertical\",\n style,\n xstyle,\n ...props\n}: FieldProps) {\n const stylexProps = stylex.props(styles.root, styles[orientation], xstyle);\n\n return (\n <FieldPrimitive.Root\n {...props}\n data-orientation={orientation}\n className={mergeClassName(stylexProps.className, className)}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function FieldLabel({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<typeof FieldPrimitive.Label> & StyleProps) {\n const stylexProps = stylex.props(styles.label, xstyle);\n return (\n <FieldPrimitive.Label\n {...props}\n className={mergeClassName(stylexProps.className, className)}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function FieldDescription({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<typeof FieldPrimitive.Description> & StyleProps) {\n const stylexProps = stylex.props(styles.description, xstyle);\n return (\n <FieldPrimitive.Description\n {...props}\n className={mergeClassName(stylexProps.className, className)}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function FieldError({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<typeof FieldPrimitive.Error> & StyleProps) {\n const stylexProps = stylex.props(styles.error, xstyle);\n return (\n <FieldPrimitive.Error\n {...props}\n className={mergeClassName(stylexProps.className, className)}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function FieldSet({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"fieldset\"> & StyleProps) {\n return (\n <fieldset\n {...props}\n {...getNativeStyleProps(stylex.props(styles.set, xstyle), className, style)}\n />\n );\n}\n\nexport function FieldLegend({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"legend\"> & StyleProps) {\n return (\n <legend\n {...props}\n {...getNativeStyleProps(stylex.props(styles.legend, xstyle), className, style)}\n />\n );\n}\n\nexport function FieldGroup({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.group, xstyle), className, style)}\n />\n );\n}\n\nexport function FieldContent({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.content, xstyle), className, style)}\n />\n );\n}\n\nexport function FieldTitle({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(stylex.props(styles.title, xstyle), className, style)}\n />\n );\n}\n",
7
+ "path": "field.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react",
12
+ "@stylexjs/stylex"
13
+ ],
14
+ "registryDependencies": []
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "hover-card",
3
+ "primaryExport": "HoverCard",
4
+ "files": [
5
+ {
6
+ "content": "import { PreviewCard } from \"@base-ui/react/preview-card\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport {\n colorVars,\n motionVars,\n radiusVars,\n shadowVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n popup: {\n backgroundColor: colorVars.bgRaised,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n boxShadow: shadowVars.floating,\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeSm,\n maxWidth: \"20rem\",\n outline: \"none\",\n padding: spacingVars.space4,\n transform: \"translateY(0) scale(1)\",\n transformOrigin: \"var(--transform-origin)\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"opacity, transform\",\n transitionTimingFunction: motionVars.easingEnter,\n zIndex: 60,\n \"@media (prefers-reduced-motion: reduce)\": { transform: \"none\", transitionDuration: \"0.01ms\" },\n },\n transitioning: { opacity: 0, transform: \"translateY(0.25rem) scale(0.98)\" },\n});\n\nexport const HoverCard = PreviewCard.Root;\nexport const HoverCardTrigger = PreviewCard.Trigger;\n\nexport type HoverCardContentProps = ComponentProps<typeof PreviewCard.Popup> & {\n align?: ComponentProps<typeof PreviewCard.Positioner>[\"align\"];\n side?: ComponentProps<typeof PreviewCard.Positioner>[\"side\"];\n sideOffset?: number;\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function HoverCardContent({\n align = \"center\",\n className,\n side = \"bottom\",\n sideOffset = 6,\n style,\n xstyle,\n ...props\n}: HoverCardContentProps) {\n const base = stylex.props(styles.popup, xstyle);\n return (\n <PreviewCard.Portal>\n <PreviewCard.Positioner align={align} side={side} sideOffset={sideOffset}>\n <PreviewCard.Popup\n {...props}\n className={(state) => {\n const motion = stylex.props(\n state.transitionStatus === \"starting\" && styles.transitioning,\n state.transitionStatus === \"ending\" && styles.transitioning,\n );\n const custom = typeof className === \"function\" ? className(state) : className;\n return [base.className, motion.className, custom].filter(Boolean).join(\" \");\n }}\n style={(state) => {\n const motion = stylex.props(\n state.transitionStatus === \"starting\" && styles.transitioning,\n state.transitionStatus === \"ending\" && styles.transitioning,\n );\n return {\n ...base.style,\n ...motion.style,\n ...(typeof style === \"function\" ? style(state) : style),\n };\n }}\n />\n </PreviewCard.Positioner>\n </PreviewCard.Portal>\n );\n}\n",
7
+ "path": "hover-card.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react",
12
+ "@stylexjs/stylex"
13
+ ],
14
+ "registryDependencies": []
15
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "input-group",
3
+ "primaryExport": "InputGroup",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps, MouseEvent } from \"react\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { Input, type InputProps } from \"./input\";\nimport { Textarea, type TextareaProps } from \"./textarea\";\nimport {\n colorVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n backgroundColor: colorVars.bgSurface,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n display: \"flex\",\n flexWrap: \"wrap\",\n minHeight: sizeVars.controlMd,\n minWidth: 0,\n width: \"100%\",\n \":focus-within\": {\n borderColor: colorVars.strokeFocus,\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n },\n invalid: { borderColor: colorVars.strokeFeedbackError },\n addon: {\n alignItems: \"center\",\n color: colorVars.fgSecondary,\n cursor: \"text\",\n display: \"flex\",\n flexShrink: 0,\n fontSize: typographyVars.fontSizeSm,\n gap: spacingVars.space2,\n minHeight: sizeVars.controlMd,\n },\n \"inline-start\": { order: -1, paddingInlineStart: spacingVars.space3 },\n \"inline-end\": { order: 1, paddingInlineEnd: spacingVars.space3 },\n \"block-start\": {\n alignSelf: \"stretch\",\n justifyContent: \"flex-start\",\n order: -1,\n paddingInline: spacingVars.space3,\n width: \"100%\",\n },\n \"block-end\": {\n alignSelf: \"stretch\",\n justifyContent: \"flex-start\",\n order: 1,\n paddingInline: spacingVars.space3,\n width: \"100%\",\n },\n control: {\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderColor: \"transparent\",\n borderStyle: \"none\",\n borderWidth: 0,\n borderRadius: radiusVars.sm,\n boxShadow: \"none\",\n flex: 1,\n minWidth: 0,\n outline: \"none\",\n \":hover\": { borderColor: \"transparent\" },\n \":focus-visible\": {\n borderColor: \"transparent\",\n outlineColor: \"transparent\",\n outlineOffset: 0,\n outlineStyle: \"none\",\n outlineWidth: 0,\n },\n },\n textarea: { minHeight: \"5rem\" },\n button: { flexShrink: 0, margin: spacingVars.space1 },\n text: {\n alignItems: \"center\",\n color: colorVars.fgSecondary,\n display: \"inline-flex\",\n fontSize: typographyVars.fontSizeSm,\n gap: spacingVars.space2,\n },\n});\n\ntype StyleProps = { xstyle?: stylex.StyleXStyles };\ntype AddonAlignment = \"block-end\" | \"block-start\" | \"inline-end\" | \"inline-start\";\n\nexport type InputGroupProps = ComponentProps<\"div\"> & StyleProps & { invalid?: boolean };\n\nexport function InputGroup({\n className,\n invalid = false,\n style,\n xstyle,\n ...props\n}: InputGroupProps) {\n const stylexProps = stylex.props(styles.root, invalid && styles.invalid, xstyle);\n return (\n <div\n {...props}\n data-invalid={invalid || undefined}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function InputGroupAddon({\n align = \"inline-start\",\n className,\n onClick,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"div\"> & StyleProps & { align?: AddonAlignment }) {\n const stylexProps = stylex.props(styles.addon, styles[align], xstyle);\n const handleClick = (event: MouseEvent<HTMLDivElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || (event.target as HTMLElement).closest(\"button\")) return;\n event.currentTarget.parentElement?.querySelector<HTMLElement>(\"input, textarea\")?.focus();\n };\n\n return (\n <div\n {...props}\n role=\"presentation\"\n data-align={align}\n onClick={handleClick}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function InputGroupInput({ xstyle, ...props }: InputProps) {\n return <Input {...props} xstyle={[styles.control, xstyle]} />;\n}\n\nexport function InputGroupTextarea({ xstyle, ...props }: TextareaProps) {\n return <Textarea {...props} xstyle={[styles.control, styles.textarea, xstyle]} />;\n}\n\nexport function InputGroupButton({\n size = \"sm\",\n variant = \"ghost\",\n xstyle,\n ...props\n}: ButtonProps) {\n return <Button {...props} size={size} variant={variant} xstyle={[styles.button, xstyle]} />;\n}\n\nexport function InputGroupText({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"span\"> & StyleProps) {\n const stylexProps = stylex.props(styles.text, xstyle);\n return (\n <span\n {...props}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n",
7
+ "path": "input-group.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": [
14
+ "button",
15
+ "input",
16
+ "textarea"
17
+ ]
18
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "input-otp",
3
+ "primaryExport": "InputOTP",
4
+ "files": [
5
+ {
6
+ "content": "import { OTPField } from \"@base-ui/react/otp-field\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport {\n colorVars,\n motionVars,\n opacityVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: { alignItems: \"center\", display: \"flex\", gap: spacingVars.space2 },\n group: { display: \"flex\" },\n slot: {\n appearance: \"none\",\n backgroundColor: colorVars.bgSurface,\n borderColor: colorVars.strokeDefault,\n borderRadius: 0,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n color: colorVars.fgPrimary,\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n height: sizeVars.controlLg,\n marginInlineStart: -1,\n outline: \"none\",\n textAlign: \"center\",\n transitionDuration: motionVars.durationFast,\n transitionProperty: \"background-color, border-color, box-shadow, opacity\",\n width: sizeVars.controlLg,\n \":first-child\": {\n borderBottomLeftRadius: radiusVars.sm,\n borderTopLeftRadius: radiusVars.sm,\n marginInlineStart: 0,\n },\n \":last-child\": { borderBottomRightRadius: radiusVars.sm, borderTopRightRadius: radiusVars.sm },\n \":hover:not(:disabled)\": { borderColor: colorVars.strokeStrong },\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n zIndex: 1,\n },\n \":disabled\": { cursor: \"not-allowed\", opacity: opacityVars.disabled },\n },\n separator: { color: colorVars.fgTertiary, paddingInline: spacingVars.space1 },\n});\n\nexport type InputOTPProps = ComponentProps<typeof OTPField.Root> & {\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function InputOTP({ className, style, xstyle, ...props }: InputOTPProps) {\n const resolved = stylex.props(styles.root, xstyle);\n return (\n <OTPField.Root\n {...props}\n className={(state) =>\n [resolved.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...resolved.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n\nexport function InputOTPGroup({ className, style, ...props }: ComponentProps<\"div\">) {\n return <div {...props} {...getNativeStyleProps(stylex.props(styles.group), className, style)} />;\n}\n\nexport function InputOTPSlot({\n className,\n style,\n ...props\n}: ComponentProps<typeof OTPField.Input>) {\n const resolved = stylex.props(styles.slot);\n return (\n <OTPField.Input\n {...props}\n className={(state) =>\n [resolved.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \")\n }\n style={(state) => ({\n ...resolved.style,\n ...(typeof style === \"function\" ? style(state) : style),\n })}\n />\n );\n}\n\nexport function InputOTPSeparator({ className, style, ...props }: ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden=\"true\"\n {...props}\n {...getNativeStyleProps(stylex.props(styles.separator), className, style)}\n >\n {props.children ?? \"–\"}\n </span>\n );\n}\n",
7
+ "path": "input-otp.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react",
12
+ "@stylexjs/stylex"
13
+ ],
14
+ "registryDependencies": []
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "input",
3
+ "primaryExport": "Input",
4
+ "files": [
5
+ {
6
+ "content": "import { Input as InputPrimitive } from \"@base-ui/react/input\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport {\n colorVars,\n motionVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n appearance: \"none\",\n backgroundColor: colorVars.bgSurface,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n color: colorVars.fgPrimary,\n fontSize: typographyVars.fontSizeSm,\n height: sizeVars.controlMd,\n lineHeight: typographyVars.lineHeightNormal,\n minWidth: 0,\n outline: \"none\",\n paddingInline: spacingVars.space3,\n transitionDuration: motionVars.durationFast,\n transitionProperty: \"border-color, opacity\",\n transitionTimingFunction: motionVars.easingStandard,\n width: \"100%\",\n \"::placeholder\": {\n color: colorVars.fgTertiary,\n },\n \":hover\": {\n borderColor: colorVars.strokeStrong,\n },\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n \":disabled\": {\n backgroundColor: colorVars.bgSubtle,\n borderColor: colorVars.strokeDefault,\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n \":hover\": { borderColor: colorVars.strokeDefault },\n },\n \":user-invalid\": {\n borderColor: colorVars.strokeFeedbackError,\n },\n },\n invalid: {\n borderColor: colorVars.strokeFeedbackError,\n },\n});\n\nexport type InputProps = ComponentProps<typeof InputPrimitive> & {\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function Input({\n \"aria-invalid\": ariaInvalid,\n className,\n style,\n xstyle,\n ...props\n}: InputProps) {\n const isInvalid = ariaInvalid === true || ariaInvalid === \"true\";\n const stylexProps = stylex.props(styles.root, isInvalid && styles.invalid, xstyle);\n const mergedClassName = [stylexProps.className, className].filter(Boolean).join(\" \");\n\n return (\n <InputPrimitive\n {...props}\n aria-invalid={ariaInvalid}\n className={mergedClassName}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n",
7
+ "path": "input.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react",
12
+ "@stylexjs/stylex"
13
+ ],
14
+ "registryDependencies": []
15
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "kbd",
3
+ "primaryExport": "Kbd",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport {\n colorVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n backgroundColor: colorVars.bgSubtle,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n color: colorVars.fgSecondary,\n display: \"inline-flex\",\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n justifyContent: \"center\",\n minHeight: \"1.25rem\",\n minWidth: \"1.25rem\",\n paddingInline: spacingVars.space1,\n userSelect: \"none\",\n },\n group: { alignItems: \"center\", display: \"inline-flex\", gap: spacingVars.space1 },\n});\n\ntype StyleProps = { xstyle?: stylex.StyleXStyles };\n\nexport function Kbd({ className, style, xstyle, ...props }: ComponentProps<\"kbd\"> & StyleProps) {\n const stylexProps = stylex.props(styles.root, xstyle);\n return (\n <kbd\n {...props}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n\nexport function KbdGroup({\n className,\n style,\n xstyle,\n ...props\n}: ComponentProps<\"span\"> & StyleProps) {\n const stylexProps = stylex.props(styles.group, xstyle);\n return (\n <span\n {...props}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n",
7
+ "path": "kbd.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "label",
3
+ "primaryExport": "Label",
4
+ "files": [
5
+ {
6
+ "content": "/* oxlint-disable jsx-a11y/label-has-associated-control -- The caller provides htmlFor or nests the control. */\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { colorVars, spacingVars, typographyVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n color: colorVars.fgPrimary,\n cursor: \"pointer\",\n display: \"inline-flex\",\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n gap: spacingVars.space2,\n lineHeight: typographyVars.lineHeightTight,\n userSelect: \"none\",\n },\n});\n\nexport type LabelProps = ComponentProps<\"label\"> & { xstyle?: stylex.StyleXStyles };\n\nexport function Label({ className, style, xstyle, ...props }: LabelProps) {\n const stylexProps = stylex.props(styles.root, xstyle);\n return (\n <label\n {...props}\n className={[stylexProps.className, className].filter(Boolean).join(\" \")}\n style={{ ...stylexProps.style, ...style }}\n />\n );\n}\n",
7
+ "path": "label.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "link",
3
+ "primaryExport": "Link",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import { useRender } from \"@base-ui/react/use-render\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport { forwardRef, type ComponentProps } from \"react\";\n\nimport { Icon } from \"./Icon\";\nimport { colorVars, motionVars, sizeVars, typographyVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n borderRadius: \"0.125rem\",\n display: \"inline-flex\",\n fontFamily: typographyVars.fontFamily,\n gap: \"0.1875em\",\n outline: \"none\",\n transitionDuration: motionVars.durationFast,\n transitionProperty: \"color, opacity, text-decoration-color\",\n transitionTimingFunction: motionVars.easingStandard,\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n },\n inline: {\n color: colorVars.fgAction,\n textDecorationLine: \"underline\",\n textDecorationThickness: sizeVars.stroke,\n textUnderlineOffset: \"0.15em\",\n \":hover\": { opacity: 0.72 },\n },\n current: {\n color: \"currentColor\",\n textDecorationLine: \"underline\",\n textDecorationThickness: sizeVars.stroke,\n textUnderlineOffset: \"0.15em\",\n \":hover\": { opacity: 0.72 },\n },\n plain: {\n color: colorVars.fgAction,\n textDecorationLine: \"none\",\n \":hover\": { opacity: 0.72 },\n },\n});\n\nexport type LinkVariant = \"current\" | \"inline\" | \"plain\";\n\nexport type LinkProps = useRender.ComponentProps<\"a\"> & {\n variant?: LinkVariant;\n xstyle?: stylex.StyleXStyles;\n};\n\nconst LinkBase = forwardRef<HTMLAnchorElement, LinkProps>(function Link(\n { className, render, style, variant = \"inline\", xstyle, ...props },\n ref,\n) {\n const stylexProps = stylex.props(styles.root, styles[variant], xstyle);\n\n return useRender({\n defaultTagName: \"a\",\n props: {\n ...props,\n className: [stylexProps.className, className].filter(Boolean).join(\" \"),\n style: { ...stylexProps.style, ...style },\n },\n ref,\n render,\n });\n});\n\nfunction ExternalIcon(props: Omit<ComponentProps<typeof Icon>, \"name\">) {\n return <Icon aria-hidden=\"true\" name=\"externalLink\" size=\"1em\" {...props} />;\n}\n\nexport const Link = Object.assign(LinkBase, { ExternalIcon });\n",
11
+ "path": "link.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@base-ui/react",
16
+ "@phosphor-icons/react",
17
+ "@stylexjs/stylex"
18
+ ],
19
+ "registryDependencies": []
20
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "marker",
3
+ "primaryExport": "Marker",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport { colorVars, spacingVars, typographyVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n color: colorVars.fgSecondary,\n display: \"inline-flex\",\n fontSize: typographyVars.fontSizeXs,\n fontWeight: typographyVars.fontWeightMedium,\n gap: spacingVars.space2,\n lineHeight: typographyVars.lineHeightNormal,\n minWidth: 0,\n },\n variantDefault: {},\n border: {\n borderBottomColor: colorVars.strokeDefault,\n borderBottomStyle: \"solid\",\n borderBottomWidth: 1,\n paddingBottom: spacingVars.space2,\n },\n separator: {\n display: \"flex\",\n width: \"100%\",\n \"::before\": {\n backgroundColor: colorVars.strokeDefault,\n content: \"\",\n flex: 1,\n height: 1,\n },\n \"::after\": {\n backgroundColor: colorVars.strokeDefault,\n content: \"\",\n flex: 1,\n height: 1,\n },\n },\n icon: { alignItems: \"center\", display: \"inline-flex\", flexShrink: 0 },\n content: { overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" },\n});\n\nexport type MarkerProps = ComponentProps<\"div\"> & {\n variant?: \"border\" | \"default\" | \"separator\";\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function Marker({ className, style, variant = \"default\", xstyle, ...props }: MarkerProps) {\n return (\n <div\n {...props}\n {...getNativeStyleProps(\n stylex.props(\n styles.root,\n variant === \"default\" ? styles.variantDefault : styles[variant],\n xstyle,\n ),\n className,\n style,\n )}\n />\n );\n}\n\nexport function MarkerIcon({ className, style, ...props }: ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden=\"true\"\n {...props}\n {...getNativeStyleProps(stylex.props(styles.icon), className, style)}\n />\n );\n}\n\nexport function MarkerContent({ className, style, ...props }: ComponentProps<\"span\">) {\n return (\n <span {...props} {...getNativeStyleProps(stylex.props(styles.content), className, style)} />\n );\n}\n",
7
+ "path": "marker.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "menubar",
3
+ "primaryExport": "Menubar",
4
+ "files": [
5
+ {
6
+ "content": "import { Menu as MenuPrimitive } from \"@base-ui/react/menu\";\nimport { Menubar as MenubarPrimitive } from \"@base-ui/react/menubar\";\nimport * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport {\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n} from \"./dropdown-menu\";\nimport {\n colorVars,\n radiusVars,\n sizeVars,\n spacingVars,\n typographyVars,\n} from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: {\n alignItems: \"center\",\n backgroundColor: colorVars.bgSurface,\n borderColor: colorVars.strokeDefault,\n borderRadius: radiusVars.sm,\n borderStyle: \"solid\",\n borderWidth: sizeVars.stroke,\n display: \"flex\",\n gap: spacingVars.space1,\n minHeight: sizeVars.controlMd,\n padding: spacingVars.space1,\n },\n trigger: {\n appearance: \"none\",\n backgroundColor: \"transparent\",\n borderStyle: \"none\",\n borderWidth: 0,\n borderRadius: radiusVars.sm,\n color: colorVars.fgPrimary,\n cursor: \"pointer\",\n fontFamily: typographyVars.fontFamily,\n fontSize: typographyVars.fontSizeSm,\n fontWeight: typographyVars.fontWeightMedium,\n height: sizeVars.controlSm,\n outline: \"none\",\n paddingInline: spacingVars.space3,\n \":hover\": { backgroundColor: colorVars.interactionHover },\n \":focus-visible\": {\n outlineColor: colorVars.strokeFocus,\n outlineOffset: sizeVars.stroke,\n outlineStyle: \"solid\",\n outlineWidth: sizeVars.focusRing,\n },\n },\n triggerOpen: { backgroundColor: colorVars.bgSurfacePressed },\n triggerDisabled: {\n backgroundColor: \"transparent\",\n color: colorVars.fgDisabled,\n cursor: \"not-allowed\",\n \":hover\": { backgroundColor: \"transparent\" },\n },\n});\n\nexport function Menubar(props: ComponentProps<typeof MenubarPrimitive>) {\n return <MenubarPrimitive {...props} {...stylex.props(styles.root)} />;\n}\n\nexport const MenubarMenu = MenuPrimitive.Root;\n\nexport function MenubarTrigger({\n className,\n style,\n ...props\n}: ComponentProps<typeof MenuPrimitive.Trigger>) {\n return (\n <MenuPrimitive.Trigger\n {...props}\n className={(state) => {\n const sx = stylex.props(\n styles.trigger,\n state.open && styles.triggerOpen,\n state.disabled && styles.triggerDisabled,\n );\n return [sx.className, typeof className === \"function\" ? className(state) : className]\n .filter(Boolean)\n .join(\" \");\n }}\n style={(state) => {\n const sx = stylex.props(\n styles.trigger,\n state.open && styles.triggerOpen,\n state.disabled && styles.triggerDisabled,\n );\n return { ...sx.style, ...(typeof style === \"function\" ? style(state) : style) };\n }}\n />\n );\n}\n\nexport const MenubarContent = DropdownMenuContent;\nexport const MenubarItem = DropdownMenuItem;\nexport const MenubarCheckboxItem = DropdownMenuCheckboxItem;\nexport const MenubarRadioItem = DropdownMenuRadioItem;\nexport const MenubarGroup = DropdownMenuGroup;\nexport const MenubarRadioGroup = DropdownMenuRadioGroup;\nexport const MenubarLabel = DropdownMenuLabel;\nexport const MenubarSeparator = DropdownMenuSeparator;\nexport const MenubarShortcut = DropdownMenuShortcut;\nexport const MenubarSub = DropdownMenuSub;\nexport const MenubarSubTrigger = DropdownMenuSubTrigger;\nexport const MenubarSubContent = DropdownMenuSubContent;\n",
7
+ "path": "menubar.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@base-ui/react",
12
+ "@stylexjs/stylex"
13
+ ],
14
+ "registryDependencies": [
15
+ "dropdown-menu"
16
+ ]
17
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "message-scroller",
3
+ "primaryExport": "MessageScroller",
4
+ "files": [
5
+ {
6
+ "content": "import type { Icon as PhosphorIcon, IconProps as PhosphorIconProps } from \"@phosphor-icons/react\";\nimport {\n ArrowDownIcon,\n ArrowSquareOutIcon,\n ArrowsDownUpIcon,\n ArrowUpIcon,\n CalendarIcon,\n CaretDoubleLeftIcon,\n CaretDoubleRightIcon,\n CaretDownIcon,\n CaretLeftIcon,\n CaretRightIcon,\n CaretUpIcon,\n CaretUpDownIcon,\n CheckCircleIcon,\n CheckIcon,\n ChecksIcon,\n ClockIcon,\n ColumnsIcon,\n CopyIcon,\n DotsThreeIcon,\n EyeSlashIcon,\n FileIcon,\n FolderIcon,\n FunnelIcon,\n GitBranchIcon,\n InfoIcon,\n ListIcon,\n MagnifyingGlassIcon,\n MicrophoneIcon,\n PaperclipIcon,\n DownloadSimpleIcon,\n StopIcon,\n WarningIcon,\n WrenchIcon,\n XCircleIcon,\n XIcon,\n} from \"@phosphor-icons/react\";\n\nexport const iconRegistry = {\n close: XIcon,\n chevronDown: CaretDownIcon,\n chevronLeft: CaretLeftIcon,\n chevronRight: CaretRightIcon,\n chevronUp: CaretUpIcon,\n chevronsLeft: CaretDoubleLeftIcon,\n chevronsRight: CaretDoubleRightIcon,\n caretUpDown: CaretUpDownIcon,\n check: CheckIcon,\n success: CheckCircleIcon,\n error: XCircleIcon,\n warning: WarningIcon,\n info: InfoIcon,\n calendar: CalendarIcon,\n clock: ClockIcon,\n externalLink: ArrowSquareOutIcon,\n menu: ListIcon,\n moreHorizontal: DotsThreeIcon,\n search: MagnifyingGlassIcon,\n arrowUp: ArrowUpIcon,\n arrowDown: ArrowDownIcon,\n arrowsUpDown: ArrowsDownUpIcon,\n funnel: FunnelIcon,\n eyeSlash: EyeSlashIcon,\n viewColumns: ColumnsIcon,\n copy: CopyIcon,\n checkDouble: ChecksIcon,\n wrench: WrenchIcon,\n stop: StopIcon,\n microphone: MicrophoneIcon,\n folder: FolderIcon,\n file: FileIcon,\n paperclip: PaperclipIcon,\n download: DownloadSimpleIcon,\n branch: GitBranchIcon,\n} satisfies Record<string, PhosphorIcon>;\n\nexport type IconName = keyof typeof iconRegistry;\n\nexport type IconProps = PhosphorIconProps & {\n name: IconName;\n};\n\nexport function Icon({ name, weight = \"regular\", ...props }: IconProps) {\n const IconComponent = iconRegistry[name];\n\n return <IconComponent {...props} weight={weight} />;\n}\n",
7
+ "path": "Icon.tsx"
8
+ },
9
+ {
10
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport { type ComponentProps, type ReactNode, useEffect, useRef, useState } from \"react\";\n\nimport { Button } from \"./button\";\nimport { Icon } from \"./Icon\";\nimport { colorVars, motionVars, radiusVars, spacingVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: { minHeight: 0, overflow: \"hidden\", position: \"relative\" },\n viewport: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: spacingVars.space4,\n height: \"100%\",\n overflowY: \"auto\",\n overscrollBehavior: \"contain\",\n scrollBehavior: \"smooth\",\n scrollbarColor: `${colorVars.strokeStrong} transparent`,\n \"@media (prefers-reduced-motion: reduce)\": { scrollBehavior: \"auto\" },\n },\n action: {\n borderRadius: radiusVars.full,\n bottom: spacingVars.space3,\n left: \"50%\",\n minWidth: \"2rem\",\n opacity: 1,\n position: \"absolute\",\n transform: \"translateX(-50%)\",\n transitionDuration: motionVars.durationNormal,\n transitionProperty: \"opacity, transform\",\n },\n});\n\nexport type MessageScrollerProps = ComponentProps<\"div\"> & {\n children: ReactNode;\n /** Keeps the latest message in view when new messages are added. @default true */\n followOutput?: boolean;\n scrollLabel?: string;\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function MessageScroller({\n children,\n className,\n followOutput = true,\n scrollLabel = \"Scroll to latest message\",\n style,\n xstyle,\n ...props\n}: MessageScrollerProps) {\n const viewportRef = useRef<HTMLDivElement>(null);\n const [isAtEnd, setIsAtEnd] = useState(true);\n\n useEffect(() => {\n if (followOutput && isAtEnd)\n viewportRef.current?.scrollTo({ top: viewportRef.current.scrollHeight });\n }, [children, followOutput, isAtEnd]);\n\n const resolved = stylex.props(styles.root, xstyle);\n return (\n <div\n {...props}\n className={[resolved.className, className].filter(Boolean).join(\" \")}\n style={{ ...resolved.style, ...style }}\n >\n <div\n ref={viewportRef}\n {...stylex.props(styles.viewport)}\n onScroll={(event) => {\n const target = event.currentTarget;\n setIsAtEnd(target.scrollHeight - target.scrollTop - target.clientHeight < 4);\n }}\n >\n {children}\n </div>\n {!isAtEnd ? (\n <Button\n aria-label={scrollLabel}\n size=\"sm\"\n variant=\"secondary\"\n xstyle={styles.action}\n onClick={() =>\n viewportRef.current?.scrollTo({\n behavior: \"smooth\",\n top: viewportRef.current.scrollHeight,\n })\n }\n >\n <Icon name=\"arrowDown\" />\n </Button>\n ) : null}\n </div>\n );\n}\n",
11
+ "path": "message-scroller.tsx"
12
+ }
13
+ ],
14
+ "dependencies": [
15
+ "@phosphor-icons/react",
16
+ "@stylexjs/stylex"
17
+ ],
18
+ "registryDependencies": [
19
+ "button"
20
+ ]
21
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "message",
3
+ "primaryExport": "Message",
4
+ "files": [
5
+ {
6
+ "content": "import * as stylex from \"@stylexjs/stylex\";\nimport type { ComponentProps } from \"react\";\n\nimport { getNativeStyleProps } from \"./stylex-props\";\n\nimport { colorVars, spacingVars, typographyVars } from \"@nuee/tokens/semantic.stylex\";\n\nconst styles = stylex.create({\n root: { display: \"flex\", flexDirection: \"column\", gap: spacingVars.space2, width: \"100%\" },\n incoming: { alignItems: \"flex-start\" },\n outgoing: { alignItems: \"flex-end\" },\n header: {\n color: colorVars.fgSecondary,\n fontSize: typographyVars.fontSizeXs,\n fontWeight: typographyVars.fontWeightMedium,\n },\n content: { display: \"flex\", flexDirection: \"column\", gap: spacingVars.space2, width: \"100%\" },\n footer: { color: colorVars.fgTertiary, fontSize: typographyVars.fontSizeXs },\n});\n\nexport type MessageProps = ComponentProps<\"article\"> & {\n side?: \"incoming\" | \"outgoing\";\n xstyle?: stylex.StyleXStyles;\n};\n\nexport function Message({ className, side = \"incoming\", style, xstyle, ...props }: MessageProps) {\n return (\n <article\n {...props}\n data-side={side}\n {...getNativeStyleProps(stylex.props(styles.root, styles[side], xstyle), className, style)}\n />\n );\n}\n\nexport function MessageHeader({ className, style, ...props }: ComponentProps<\"header\">) {\n return (\n <header {...props} {...getNativeStyleProps(stylex.props(styles.header), className, style)} />\n );\n}\n\nexport function MessageContent({ className, style, ...props }: ComponentProps<\"div\">) {\n return (\n <div {...props} {...getNativeStyleProps(stylex.props(styles.content), className, style)} />\n );\n}\n\nexport function MessageFooter({ className, style, ...props }: ComponentProps<\"footer\">) {\n return (\n <footer {...props} {...getNativeStyleProps(stylex.props(styles.footer), className, style)} />\n );\n}\n",
7
+ "path": "message.tsx"
8
+ }
9
+ ],
10
+ "dependencies": [
11
+ "@stylexjs/stylex"
12
+ ],
13
+ "registryDependencies": []
14
+ }