@dalexto/lexsys-registry 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dalexto/lexsys-registry",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Install metadata and templates for the Lexsys registry-first UI framework",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -19,7 +19,11 @@ import type {
19
19
  AuthFormProps,
20
20
  AuthFormSubmitProps,
21
21
  } from "./AuthForm.types"
22
- import { authFormFieldsClassName, authFormClasses } from "./AuthForm.variants"
22
+ import {
23
+ authFormClasses,
24
+ authFormContentClasses,
25
+ authFormFooterClasses,
26
+ } from "./AuthForm.variants"
23
27
  import { cn } from "@/lib/utils"
24
28
 
25
29
  const AuthForm = ({
@@ -59,7 +63,7 @@ const AuthFormContent = ({
59
63
  return (
60
64
  <CardContent
61
65
  ref={ref}
62
- className={cn(authFormFieldsClassName, className)}
66
+ className={cn(authFormContentClasses(), className)}
63
67
  {...props}
64
68
  />
65
69
  )
@@ -71,7 +75,7 @@ const AuthFormFooter = ({ ref, className, ...props }: AuthFormFooterProps) => {
71
75
  return (
72
76
  <CardFooter
73
77
  ref={ref}
74
- className={cn("flex-col gap-(--lex-space-3)", className)}
78
+ className={cn(authFormFooterClasses(), className)}
75
79
  {...props}
76
80
  />
77
81
  )
@@ -5,7 +5,13 @@
5
5
  */
6
6
 
7
7
  export const authFormClasses = (): string => {
8
- return "lex-auth-form w-full text-(--lex-color-text-primary)"
8
+ return "lex-auth-form w-full text-(--lex-auth-form-root-foreground)"
9
9
  }
10
10
 
11
- export const authFormFieldsClassName = "flex flex-col gap-(--lex-space-4)"
11
+ export const authFormContentClasses = (): string => {
12
+ return "flex flex-col gap-(--lex-auth-form-content-gap)"
13
+ }
14
+
15
+ export const authFormFooterClasses = (): string => {
16
+ return "flex-col gap-(--lex-auth-form-footer-gap)"
17
+ }
@@ -14,6 +14,7 @@ import {
14
14
  DialogViewport,
15
15
  } from "@/components/primitives/Dialog/Dialog"
16
16
  import {
17
+ Combobox,
17
18
  ComboboxInput,
18
19
  ComboboxInputGroup,
19
20
  } from "@/components/primitives/Combobox/Combobox"
@@ -116,14 +117,16 @@ const CommandPaletteInput = ({
116
117
  ...props
117
118
  }: CommandPaletteInputProps) => {
118
119
  return (
119
- <ComboboxInputGroup className={cn(commandPaletteInputClasses, className)}>
120
- <ComboboxInput
121
- ref={ref}
122
- autoFocus
123
- aria-label="Search commands"
124
- {...props}
125
- />
126
- </ComboboxInputGroup>
120
+ <Combobox>
121
+ <ComboboxInputGroup className={cn(commandPaletteInputClasses, className)}>
122
+ <ComboboxInput
123
+ ref={ref}
124
+ autoFocus
125
+ aria-label="Search commands"
126
+ {...props}
127
+ />
128
+ </ComboboxInputGroup>
129
+ </Combobox>
127
130
  )
128
131
  }
129
132
 
@@ -5,21 +5,21 @@
5
5
  */
6
6
 
7
7
  export const commandPaletteRootClasses =
8
- "lex-command-palette flex flex-col gap-(--lex-space-2)"
8
+ "lex-command-palette flex flex-col gap-(--lex-command-palette-root-gap)"
9
9
 
10
10
  export const commandPaletteInputClasses = "w-full"
11
11
 
12
12
  export const commandPaletteListClasses =
13
- "flex max-h-(--lex-size-command-palette-list-max-height,16rem) flex-col"
13
+ "flex max-h-(--lex-command-palette-list-max-height) flex-col"
14
14
 
15
15
  export const commandPaletteGroupLabelClasses =
16
- "px-(--lex-space-3) py-(--lex-space-1) text-(length:--lex-typography-label-xs-font-size) font-(--lex-typography-label-xs-font-weight) text-(--lex-color-text-secondary)"
16
+ "px-(--lex-command-palette-group-label-padding-x) py-(--lex-command-palette-group-label-padding-y) text-(length:--lex-typography-label-xs-font-size) font-(--lex-typography-label-xs-font-weight) text-(--lex-color-text-secondary)"
17
17
 
18
18
  export const commandPaletteItemClasses =
19
- "flex w-full flex-col items-start gap-(--lex-space-1) rounded-(--lex-radius-control) px-(--lex-space-3) py-(--lex-space-2) text-left text-(--lex-color-text-primary) outline-none transition-colors hover:bg-(--lex-action-secondary-hover) focus-visible:bg-(--lex-action-secondary-hover)"
19
+ "flex w-full flex-col items-start gap-(--lex-command-palette-item-gap) rounded-(--lex-command-palette-item-radius) px-(--lex-command-palette-item-padding-x) py-(--lex-command-palette-item-padding-y) text-left text-(--lex-command-palette-item-foreground) outline-none transition-colors hover:bg-(--lex-command-palette-item-hover-background) focus-visible:bg-(--lex-command-palette-item-hover-background)"
20
20
 
21
21
  export const commandPaletteItemDescriptionClasses =
22
- "text-(length:--lex-typography-body-xs-font-size) text-(--lex-color-text-secondary)"
22
+ "text-(length:--lex-typography-body-xs-font-size) text-(--lex-command-palette-item-description-foreground)"
23
23
 
24
24
  export const commandPaletteEmptyClasses =
25
- "px-(--lex-space-3) py-(--lex-space-4) text-(length:--lex-typography-body-sm-font-size) text-(--lex-color-text-secondary)"
25
+ "px-(--lex-command-palette-empty-padding-x) py-(--lex-command-palette-empty-padding-y) text-(length:--lex-typography-body-sm-font-size) text-(--lex-color-text-secondary)"
@@ -5,15 +5,16 @@
5
5
  */
6
6
 
7
7
  export const dataTableClasses = (): string => {
8
- return ["lex-data-table", "flex w-full flex-col gap-(--lex-space-4)"].join(
9
- " ",
10
- )
8
+ return [
9
+ "lex-data-table",
10
+ "flex w-full flex-col gap-(--lex-data-table-root-gap)",
11
+ ].join(" ")
11
12
  }
12
13
 
13
14
  export const dataTableFooterClasses = (): string => {
14
15
  return [
15
16
  "lex-data-table__footer",
16
- "flex flex-col gap-(--lex-space-3)",
17
+ "flex flex-col gap-(--lex-data-table-footer-gap)",
17
18
  "sm:flex-row sm:items-center sm:justify-between",
18
19
  ].join(" ")
19
20
  }
@@ -23,6 +23,7 @@ import type {
23
23
  } from "./FilterToolbar.types"
24
24
  import {
25
25
  filterToolbarClasses,
26
+ filterToolbarGroupClasses,
26
27
  filterToolbarSearchClasses,
27
28
  filterToolbarSelectTriggerClasses,
28
29
  } from "./FilterToolbar.variants"
@@ -51,7 +52,13 @@ const FilterToolbarGroup = ({
51
52
  className,
52
53
  ...props
53
54
  }: FilterToolbarGroupProps) => {
54
- return <ToolbarGroup ref={ref} className={className} {...props} />
55
+ return (
56
+ <ToolbarGroup
57
+ ref={ref}
58
+ className={cn(filterToolbarGroupClasses(), className)}
59
+ {...props}
60
+ />
61
+ )
55
62
  }
56
63
 
57
64
  FilterToolbarGroup.displayName = "FilterToolbarGroup"
@@ -7,11 +7,17 @@
7
7
  export const filterToolbarClasses = (): string => {
8
8
  return [
9
9
  "lex-filter-toolbar",
10
- "flex flex-wrap items-center gap-(--lex-space-2)",
11
- "rounded-(--lex-radius-control)",
12
- "border border-(--lex-border-default)",
13
- "bg-(--lex-color-background-subtle)",
14
- "p-(--lex-space-2)",
10
+ "flex flex-wrap items-center gap-(--lex-toolbar-root-gap)",
11
+ "rounded-(--lex-toolbar-radius)",
12
+ "border border-(--lex-toolbar-root-border-color)",
13
+ "bg-(--lex-toolbar-root-background)",
14
+ "p-(--lex-toolbar-root-padding)",
15
+ ].join(" ")
16
+ }
17
+
18
+ export const filterToolbarGroupClasses = (): string => {
19
+ return [
20
+ "lex-filter-toolbar__group flex flex-wrap items-center gap-(--lex-toolbar-group-gap)",
15
21
  ].join(" ")
16
22
  }
17
23
 
@@ -5,5 +5,5 @@
5
5
  */
6
6
 
7
7
  export const formFieldClasses = (): string => {
8
- return "lex-form-field flex flex-col gap-[var(--lex-space-2)]"
8
+ return "lex-form-field flex flex-col gap-(--lex-form-field-root-gap)"
9
9
  }
@@ -7,17 +7,18 @@
7
7
  export const pageHeaderClasses = (): string => {
8
8
  return [
9
9
  "lex-page-header",
10
- "flex flex-col gap-(--lex-space-4)",
11
- "border-b border-(--lex-border-default) pb-(--lex-space-4)",
10
+ "flex flex-col gap-(--lex-page-header-root-gap)",
11
+ "border-b border-(--lex-page-header-root-border-color)",
12
+ "pb-(--lex-page-header-root-padding-bottom)",
12
13
  ].join(" ")
13
14
  }
14
15
 
15
16
  export const pageHeaderTopClasses = (): string => {
16
- return "lex-page-header__top flex flex-col gap-(--lex-space-3)"
17
+ return "lex-page-header__top flex flex-col gap-(--lex-page-header-top-gap)"
17
18
  }
18
19
 
19
20
  export const pageHeaderHeadingClasses = (): string => {
20
- return "lex-page-header__heading flex flex-col gap-(--lex-space-1)"
21
+ return "lex-page-header__heading flex flex-col gap-(--lex-page-header-heading-gap)"
21
22
  }
22
23
 
23
24
  export const pageHeaderTitleClasses = (): string => {
@@ -40,7 +41,7 @@ export const pageHeaderDescriptionClasses = (): string => {
40
41
  }
41
42
 
42
43
  export const pageHeaderActionsClasses = (): string => {
43
- return "lex-page-header__actions flex flex-wrap items-center gap-(--lex-space-2)"
44
+ return "lex-page-header__actions flex flex-wrap items-center gap-(--lex-page-header-actions-gap)"
44
45
  }
45
46
 
46
47
  export const pageHeaderBreadcrumbClasses = (): string => {
@@ -60,9 +60,13 @@ import type {
60
60
  SidebarHeaderProps,
61
61
  SidebarGroupActionProps,
62
62
  SidebarItemActionProps,
63
+ SidebarItemAdornmentsProps,
64
+ SidebarItemTrailingProps,
63
65
  SidebarItemBadgeProps,
64
66
  SidebarItemButtonProps,
67
+ SidebarItemExpandTriggerProps,
65
68
  SidebarItemIconProps,
69
+ SidebarItemRowProps,
66
70
  SidebarItemLinkProps,
67
71
  SidebarItemProps,
68
72
  SidebarItemShortcutProps,
@@ -96,8 +100,12 @@ import {
96
100
  sidebarGroupClasses,
97
101
  sidebarItemActionClasses,
98
102
  sidebarItemBadgeClasses,
103
+ sidebarItemDisclosureRowClasses,
99
104
  sidebarItemIconClasses,
105
+ sidebarItemRowClasses,
106
+ sidebarItemTrailingClasses,
100
107
  sidebarItemShortcutClasses,
108
+ sidebarNavItemExpandTriggerClasses,
101
109
  sidebarItemBadgeCollapsedClasses,
102
110
  sidebarItemBadgeDotClasses,
103
111
  sidebarItemBadgeLabelClasses,
@@ -108,8 +116,10 @@ import {
108
116
  sidebarInputClasses,
109
117
  sidebarSeparatorClasses,
110
118
  sidebarMainClasses,
119
+ sidebarMobileBarClasses,
111
120
  sidebarMobileHeaderClasses,
112
121
  sidebarNavItemClasses,
122
+ sidebarNavItemDisclosureLeadClasses,
113
123
  sidebarNavListClasses,
114
124
  sidebarNavClasses,
115
125
  sidebarSubListClasses,
@@ -463,7 +473,7 @@ const Sidebar = ({
463
473
  swipeDirection={side === "right" ? "right" : "left"}
464
474
  >
465
475
  {mobileHeader.length > 0 ? (
466
- <div className="flex items-center gap-3 border-b border-[var(--lex-border-default)] bg-[var(--lex-color-background-base)] px-[var(--lex-space-4)] py-[var(--lex-space-3)] md:hidden">
476
+ <div className={cn(sidebarMobileBarClasses(), "md:hidden")}>
467
477
  {mobileHeader}
468
478
  </div>
469
479
  ) : null}
@@ -883,6 +893,7 @@ const SidebarItemLink = ({
883
893
  ref,
884
894
  active,
885
895
  disabled,
896
+ chrome = "default",
886
897
  className,
887
898
  children,
888
899
  onClick,
@@ -892,7 +903,9 @@ const SidebarItemLink = ({
892
903
  const inheritedDisabled = useSidebarItemDisabled()
893
904
  const isDisabled = resolveSidebarNavItemDisabled(disabled, inheritedDisabled)
894
905
  const linkClassName = cn(
895
- sidebarNavItemClasses(active, isDisabled),
906
+ chrome === "disclosureLead"
907
+ ? sidebarNavItemDisclosureLeadClasses(active, isDisabled)
908
+ : sidebarNavItemClasses(active, isDisabled),
896
909
  sidebarCollapsedItemClasses(),
897
910
  className,
898
911
  )
@@ -1077,6 +1090,92 @@ const SidebarItemIcon = ({
1077
1090
 
1078
1091
  SidebarItemIcon.displayName = "SidebarItemIcon"
1079
1092
 
1093
+ const SidebarItemRow = ({
1094
+ ref,
1095
+ variant = "default",
1096
+ className,
1097
+ children,
1098
+ ...props
1099
+ }: SidebarItemRowProps) => {
1100
+ return (
1101
+ <div
1102
+ ref={ref}
1103
+ className={cn(
1104
+ variant === "disclosure"
1105
+ ? sidebarItemDisclosureRowClasses()
1106
+ : sidebarItemRowClasses(),
1107
+ className,
1108
+ )}
1109
+ {...props}
1110
+ >
1111
+ {children}
1112
+ </div>
1113
+ )
1114
+ }
1115
+
1116
+ SidebarItemRow.displayName = "SidebarItemRow"
1117
+
1118
+ const SidebarItemTrailing = ({
1119
+ ref,
1120
+ className,
1121
+ children,
1122
+ ...props
1123
+ }: SidebarItemTrailingProps) => {
1124
+ return (
1125
+ <div
1126
+ ref={ref}
1127
+ className={cn(sidebarItemTrailingClasses(), className)}
1128
+ {...props}
1129
+ >
1130
+ {children}
1131
+ </div>
1132
+ )
1133
+ }
1134
+
1135
+ SidebarItemTrailing.displayName = "SidebarItemTrailing"
1136
+
1137
+ /** @deprecated Use `SidebarItemTrailing` inside the item shell. */
1138
+ const SidebarItemAdornments = ({
1139
+ ref,
1140
+ className,
1141
+ children,
1142
+ ...props
1143
+ }: SidebarItemAdornmentsProps) => {
1144
+ return (
1145
+ <SidebarItemTrailing ref={ref} className={className} {...props}>
1146
+ {children}
1147
+ </SidebarItemTrailing>
1148
+ )
1149
+ }
1150
+
1151
+ SidebarItemAdornments.displayName = "SidebarItemAdornments"
1152
+
1153
+ const SidebarItemExpandTrigger = ({
1154
+ ref,
1155
+ variant = "default",
1156
+ className,
1157
+ open = false,
1158
+ children,
1159
+ type = "button",
1160
+ ...props
1161
+ }: SidebarItemExpandTriggerProps) => {
1162
+ return (
1163
+ <button
1164
+ ref={ref}
1165
+ type={type}
1166
+ className={cn(
1167
+ sidebarNavItemExpandTriggerClasses(open, variant),
1168
+ className,
1169
+ )}
1170
+ {...props}
1171
+ >
1172
+ {children ?? <ChevronDown aria-hidden />}
1173
+ </button>
1174
+ )
1175
+ }
1176
+
1177
+ SidebarItemExpandTrigger.displayName = "SidebarItemExpandTrigger"
1178
+
1080
1179
  const SidebarItemAction = ({
1081
1180
  ref,
1082
1181
  showOnHover = true,
@@ -1270,6 +1369,10 @@ export {
1270
1369
  SidebarItemSkeleton,
1271
1370
  SidebarItemBadge,
1272
1371
  SidebarItemIcon,
1372
+ SidebarItemRow,
1373
+ SidebarItemTrailing,
1374
+ SidebarItemAdornments,
1375
+ SidebarItemExpandTrigger,
1273
1376
  SidebarItemAction,
1274
1377
  SidebarItemShortcut,
1275
1378
  SidebarGroupAction,
@@ -1285,3 +1388,13 @@ export {
1285
1388
  }
1286
1389
 
1287
1390
  export type { SidebarNavActiveOptions } from "./Sidebar.types.js"
1391
+ export {
1392
+ sidebarItemRowClasses,
1393
+ sidebarItemDisclosureRowClasses,
1394
+ sidebarItemTrailingClasses,
1395
+ sidebarItemAdornmentsClasses,
1396
+ sidebarMobileBarClasses,
1397
+ sidebarNavItemRowLeadClasses,
1398
+ sidebarNavItemDisclosureLeadClasses,
1399
+ sidebarNavItemExpandTriggerClasses,
1400
+ } from "./Sidebar.variants.js"
@@ -132,6 +132,11 @@ export interface SidebarItemLinkProps extends AnchorHTMLAttributes<HTMLAnchorEle
132
132
  ref?: Ref<HTMLAnchorElement>
133
133
  active?: boolean
134
134
  disabled?: boolean
135
+ /**
136
+ * Background chrome owner. `disclosureLead` defers hover/active fill to
137
+ * `SidebarItemRow variant="disclosure"`.
138
+ */
139
+ chrome?: "default" | "disclosureLead"
135
140
  className?: string
136
141
  children?: ReactNode
137
142
  }
@@ -192,6 +197,31 @@ export interface SidebarItemBadgeProps extends BadgeProps {
192
197
  dot?: boolean
193
198
  }
194
199
 
200
+ export interface SidebarItemRowProps extends HTMLAttributes<HTMLDivElement> {
201
+ ref?: Ref<HTMLDivElement>
202
+ /** `disclosure` paints one shared row shell for link lead + expand trigger. */
203
+ variant?: "default" | "disclosure"
204
+ className?: string
205
+ children?: ReactNode
206
+ }
207
+
208
+ export interface SidebarItemTrailingProps extends HTMLAttributes<HTMLDivElement> {
209
+ ref?: Ref<HTMLDivElement>
210
+ className?: string
211
+ children?: ReactNode
212
+ }
213
+
214
+ /** @deprecated Place `SidebarItemTrailing` inside `SidebarItemLink` / `SidebarItemButton`. */
215
+ export type SidebarItemAdornmentsProps = SidebarItemTrailingProps
216
+
217
+ export interface SidebarItemExpandTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
218
+ ref?: Ref<HTMLButtonElement>
219
+ /** `disclosure` suppresses per-cell hover fill — row shell owns chrome. */
220
+ variant?: "default" | "disclosure"
221
+ className?: string
222
+ open?: boolean
223
+ }
224
+
195
225
  export interface SidebarItemIconProps extends HTMLAttributes<HTMLSpanElement> {
196
226
  ref?: Ref<HTMLSpanElement>
197
227
  className?: string