tembro 3.1.6 → 3.1.8
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/CHANGELOG.md +1 -1
- package/README.md +241 -91
- package/dist/components/ui/dialog/index.d.ts +3 -1
- package/dist/components/ui/select/index.d.ts +6 -3
- package/dist/showcase/package-meta.d.ts +3 -3
- package/dist/showcase/premium/wizard/index.cjs +1 -0
- package/dist/showcase/premium/wizard/index.d.ts +2 -0
- package/dist/showcase/premium/wizard/index.js +1 -0
- package/dist/showcase/premium/wizard/mock.cjs +1 -0
- package/dist/showcase/premium/wizard/mock.d.ts +2 -0
- package/dist/showcase/premium/wizard/mock.js +1 -0
- package/dist/showcase/premium/wizard/showcase.cjs +1 -0
- package/dist/showcase/premium/wizard/showcase.d.ts +2 -0
- package/dist/showcase/premium/wizard/showcase.js +1 -0
- package/dist/showcase/search-utils.d.ts +1 -1
- package/dist/showcase/site-data.d.ts +6 -6
- package/dist/src/components/layout/app-sidebar.cjs +1 -1
- package/dist/src/components/layout/app-sidebar.js +59 -41
- package/dist/src/components/theme-provider.cjs +1 -1
- package/dist/src/components/theme-provider.js +1 -1
- package/dist/src/components/ui/dialog/index.cjs +1 -1
- package/dist/src/components/ui/dialog/index.js +14 -7
- package/dist/src/components/ui/select/index.cjs +1 -1
- package/dist/src/components/ui/select/index.js +30 -29
- package/dist/src/index.cjs +1 -1
- package/dist/src/index.js +101 -101
- package/dist/src/showcase/component-api-schema.cjs +1 -1
- package/dist/src/showcase/component-api-schema.js +868 -9
- package/dist/src/showcase/demo-snippets/forms/index.cjs +1 -1
- package/dist/src/showcase/demo-snippets/forms/index.js +1 -1
- package/dist/src/showcase/fallback.cjs +4 -4
- package/dist/src/showcase/fallback.js +354 -181
- package/dist/src/showcase/index.cjs +1 -1
- package/dist/src/showcase/index.js +2 -2
- package/dist/src/showcase/package-meta.cjs +1 -1
- package/dist/src/showcase/package-meta.js +1 -1
- package/dist/src/showcase/premium/app-sidebar/mock.cjs +3 -2
- package/dist/src/showcase/premium/app-sidebar/mock.js +1 -1
- package/dist/src/showcase/premium/app-sidebar/showcase.cjs +1 -1
- package/dist/src/showcase/premium/app-sidebar/showcase.js +1 -1
- package/dist/src/showcase/premium/async-select/showcase.cjs +1 -1
- package/dist/src/showcase/premium/async-select/showcase.js +118 -74
- package/dist/src/showcase/premium/avatar/showcase.cjs +1 -1
- package/dist/src/showcase/premium/avatar/showcase.js +5 -5
- package/dist/src/showcase/premium/dialog/mock.cjs +6 -1
- package/dist/src/showcase/premium/dialog/mock.js +1 -1
- package/dist/src/showcase/premium/dialog/showcase.cjs +1 -1
- package/dist/src/showcase/premium/dialog/showcase.js +101 -39
- package/dist/src/showcase/premium/form-wrapper/mock.cjs +2 -2
- package/dist/src/showcase/premium/form-wrapper/mock.js +2 -2
- package/dist/src/showcase/premium/form-wrapper/showcase.cjs +1 -1
- package/dist/src/showcase/premium/form-wrapper/showcase.js +1 -1
- package/dist/src/showcase/premium/index.cjs +1 -1
- package/dist/src/showcase/premium/index.js +9 -3
- package/dist/src/showcase/premium/input/showcase.cjs +1 -1
- package/dist/src/showcase/premium/input/showcase.js +1 -1
- package/dist/src/showcase/premium/json-input/showcase.cjs +1 -1
- package/dist/src/showcase/premium/json-input/showcase.js +1 -1
- package/dist/src/showcase/premium/select/showcase.cjs +1 -1
- package/dist/src/showcase/premium/select/showcase.js +53 -0
- package/dist/src/showcase/premium/table/mock.cjs +1 -1
- package/dist/src/showcase/premium/table/mock.js +1 -1
- package/dist/src/showcase/premium/types.cjs +1 -1
- package/dist/src/showcase/premium/types.js +1 -1
- package/dist/src/showcase/premium/wizard/index.cjs +1 -0
- package/dist/src/showcase/premium/wizard/index.js +3 -0
- package/dist/src/showcase/premium/wizard/mock.cjs +25 -0
- package/dist/src/showcase/premium/wizard/mock.js +32 -0
- package/dist/src/showcase/premium/wizard/showcase.cjs +1 -0
- package/dist/src/showcase/premium/wizard/showcase.js +130 -0
- package/dist/src/showcase/preview-registry.cjs +1 -1
- package/dist/src/showcase/preview-registry.js +6 -6
- package/dist/src/showcase/registry-quality.cjs +1 -1
- package/dist/src/showcase/registry-quality.js +5 -0
- package/dist/src/showcase/registry-specific.cjs +1 -1
- package/dist/src/showcase/registry-specific.js +2 -2
- package/dist/src/showcase/render-registry-preview.cjs +1 -1
- package/dist/src/showcase/render-registry-preview.js +2 -2
- package/dist/src/showcase/site-data.cjs +1 -1
- package/dist/src/showcase/site-data.js +198 -44
- package/dist/src/showcase/tembro-registry.json.cjs +1 -1
- package/dist/src/showcase/tembro-registry.json.js +1 -1
- package/dist/src/showcase/types.cjs +1 -1
- package/dist/src/showcase/types.js +1 -1
- package/package.json +7 -3
- package/packages/cli/dist/index.cjs +127 -127
- package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +50 -20
- package/packages/cli/vendor/src/components/theme-provider.tsx +1 -1
- package/packages/cli/vendor/src/components/ui/dialog/index.tsx +15 -3
- package/packages/cli/vendor/src/components/ui/select/index.tsx +17 -9
- package/packages/cli/vendor/src/showcase/component-api-schema.ts +269 -39
- package/packages/cli/vendor/src/showcase/demo-snippets/forms/index.ts +1 -1
- package/packages/cli/vendor/src/showcase/fallback.tsx +202 -39
- package/packages/cli/vendor/src/showcase/index.ts +6 -6
- package/packages/cli/vendor/src/showcase/package-meta.ts +3 -3
- package/packages/cli/vendor/src/showcase/premium/app-sidebar/mock.ts +3 -2
- package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +50 -4
- package/packages/cli/vendor/src/showcase/premium/avatar/showcase.tsx +5 -5
- package/packages/cli/vendor/src/showcase/premium/dialog/mock.ts +6 -1
- package/packages/cli/vendor/src/showcase/premium/dialog/showcase.tsx +53 -1
- package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +2 -2
- package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/index.ts +5 -3
- package/packages/cli/vendor/src/showcase/premium/input/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/json-input/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +38 -0
- package/packages/cli/vendor/src/showcase/premium/table/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/wizard/index.ts +2 -0
- package/packages/cli/vendor/src/showcase/premium/wizard/mock.ts +41 -0
- package/packages/cli/vendor/src/showcase/premium/wizard/showcase.tsx +88 -0
- package/packages/cli/vendor/src/showcase/preview-registry.tsx +6 -6
- package/packages/cli/vendor/src/showcase/registry-quality.ts +5 -0
- package/packages/cli/vendor/src/showcase/registry-specific.tsx +2 -2
- package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +2 -2
- package/packages/cli/vendor/src/showcase/site-data.tsx +89 -32
- package/packages/cli/vendor/src/showcase/tembro-registry.json +1 -1
- package/packages/cli/vendor/src/showcase/types.ts +1 -1
- package/packages/cli/vendor/templates/showcase/src/App.tsx +107 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/data/registry.ts +273 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/layout/HeroSection.tsx +41 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/layout/WorkbenchSidebar.tsx +82 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/CalendarSection.tsx +35 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/CategorySection.tsx +48 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/ComponentDetailSection.tsx +68 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/CoreUiSection.tsx +100 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/DataTableSection.tsx +45 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/FormsSection.tsx +26 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/InventorySection.tsx +38 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/KanbanSection.tsx +42 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/OverlaySection.tsx +62 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/PatternsSection.tsx +36 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/VerificationSection.tsx +42 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/sections/WizardSection.tsx +44 -0
- package/packages/cli/vendor/templates/showcase/src/showcase/shared/SectionTitle.tsx +13 -0
- package/registry.json +1 -1
|
@@ -95,6 +95,31 @@ function getSidebarInteractiveClassName({
|
|
|
95
95
|
disabled && "hover:border-transparent hover:bg-transparent hover:text-[color:color-mix(in_oklch,var(--sidebar-foreground),transparent_6%)]"
|
|
96
96
|
)
|
|
97
97
|
}
|
|
98
|
+
|
|
99
|
+
function getSidebarItemLayoutClassName({
|
|
100
|
+
collapsed,
|
|
101
|
+
depth,
|
|
102
|
+
itemSize,
|
|
103
|
+
activeIndicator,
|
|
104
|
+
}: {
|
|
105
|
+
collapsed: boolean
|
|
106
|
+
depth: number
|
|
107
|
+
itemSize: NonNullable<AppSidebarProps["itemSize"]>
|
|
108
|
+
activeIndicator: NonNullable<AppSidebarProps["activeIndicator"]>
|
|
109
|
+
}) {
|
|
110
|
+
return cn(
|
|
111
|
+
"relative w-full rounded-[min(var(--radius-xl),14px)] py-2",
|
|
112
|
+
itemSize === "sm" && "min-h-8 text-xs",
|
|
113
|
+
itemSize === "md" && "min-h-9 text-sm",
|
|
114
|
+
itemSize === "lg" && "min-h-11 text-sm",
|
|
115
|
+
collapsed ? "justify-center px-2" : "px-2.5",
|
|
116
|
+
!collapsed && depth > 0 && "pl-3",
|
|
117
|
+
activeIndicator === "bar" &&
|
|
118
|
+
"data-[active=true]:pl-4 before:pointer-events-none before:absolute before:left-1.5 before:top-1/2 before:hidden before:h-5 before:w-1 before:-translate-y-1/2 before:rounded-full before:bg-[color:var(--sidebar-primary)] data-[active=true]:before:block",
|
|
119
|
+
activeIndicator === "pill" && "rounded-full",
|
|
120
|
+
activeIndicator === "none" && "data-[active=true]:shadow-none"
|
|
121
|
+
)
|
|
122
|
+
}
|
|
98
123
|
|
|
99
124
|
function hasVisibleSidebarChildren(item: AppSidebarNavItem) {
|
|
100
125
|
return item.items?.some((child) => !child.hidden) ?? false
|
|
@@ -138,11 +163,11 @@ function SidebarLeafItem({
|
|
|
138
163
|
"data-size": itemSize,
|
|
139
164
|
"data-active-indicator": activeIndicator,
|
|
140
165
|
className: cn(
|
|
141
|
-
"flex items-center gap-2 border border-transparent
|
|
166
|
+
"flex items-center gap-2 border border-transparent font-medium outline-none transition-[background-color,border-color,color,box-shadow] data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
|
|
142
167
|
getSidebarInteractiveClassName({ active: item.active, disabled: item.disabled }),
|
|
143
|
-
collapsed
|
|
168
|
+
getSidebarItemLayoutClassName({ collapsed, depth, itemSize, activeIndicator })
|
|
144
169
|
),
|
|
145
|
-
}
|
|
170
|
+
}
|
|
146
171
|
|
|
147
172
|
const content = (
|
|
148
173
|
<>
|
|
@@ -312,11 +337,11 @@ function SidebarTree({
|
|
|
312
337
|
data-active={active || undefined}
|
|
313
338
|
data-active-indicator={activeIndicator}
|
|
314
339
|
className={cn(
|
|
315
|
-
"flex list-none items-center gap-2 border border-transparent
|
|
340
|
+
"flex list-none items-center gap-2 border border-transparent font-medium outline-none transition-[background-color,border-color,color,box-shadow]",
|
|
316
341
|
getSidebarInteractiveClassName({ active }),
|
|
317
|
-
collapsed
|
|
342
|
+
getSidebarItemLayoutClassName({ collapsed, depth, itemSize, activeIndicator })
|
|
318
343
|
)}
|
|
319
|
-
>
|
|
344
|
+
>
|
|
320
345
|
{item.icon ? (
|
|
321
346
|
collapsed ? (
|
|
322
347
|
<Tooltip content={item.tooltip ?? item.label} side="right">
|
|
@@ -535,7 +560,7 @@ function SidebarSurface({
|
|
|
535
560
|
type="button"
|
|
536
561
|
aria-label={mobileCloseLabel}
|
|
537
562
|
data-slot="app-sidebar-mobile-close"
|
|
538
|
-
className="inline-flex size-9 shrink-0 items-center justify-center rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] text-[color:var(--aui-page-foreground)] transition hover:bg-[color:var(--aui-control-bg)]"
|
|
563
|
+
className="inline-flex size-9 shrink-0 items-center justify-center rounded-xl border border-[color:var(--aui-divider,var(--border))] bg-[color:var(--aui-page-bg-alt,var(--muted))] text-[color:var(--aui-page-foreground,var(--foreground))] transition hover:bg-[color:var(--aui-control-bg,var(--muted))]"
|
|
539
564
|
onClick={onRequestClose}
|
|
540
565
|
>
|
|
541
566
|
<XIcon className="size-4" />
|
|
@@ -756,12 +781,12 @@ function Sidebar({
|
|
|
756
781
|
data-slot="app-sidebar-mobile-trigger"
|
|
757
782
|
data-state={mobileOpen ? "open" : "closed"}
|
|
758
783
|
className={cn(
|
|
759
|
-
"inline-flex min-h-10 items-center gap-2 rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] px-3 text-sm font-medium text-[color:var(--aui-page-foreground)] shadow-sm transition hover:bg-[color:var(--aui-page-bg-alt)]",
|
|
784
|
+
"inline-flex min-h-10 items-center gap-2 rounded-xl border border-[color:var(--aui-divider,var(--border))] bg-[color:var(--aui-page-bg,var(--background))] px-3 text-sm font-medium text-[color:var(--aui-page-foreground,var(--foreground))] shadow-sm transition hover:bg-[color:var(--aui-page-bg-alt,var(--muted))]",
|
|
760
785
|
mobileToggleClassName
|
|
761
786
|
)}
|
|
762
787
|
onClick={() => setMobileOpen(!mobileOpen)}
|
|
763
788
|
>
|
|
764
|
-
<span className="inline-flex size-8 items-center justify-center rounded-lg bg-[color:var(--aui-page-bg-alt)]">
|
|
789
|
+
<span className="inline-flex size-8 items-center justify-center rounded-lg bg-[color:var(--aui-page-bg-alt,var(--muted))]">
|
|
765
790
|
{mobileToggleIcon ?? <MenuIcon className="size-4" />}
|
|
766
791
|
</span>
|
|
767
792
|
<span>{mobileOpen ? mobileCloseLabel : mobileToggleLabel}</span>
|
|
@@ -783,11 +808,15 @@ function Sidebar({
|
|
|
783
808
|
data-state={mobileOpen ? "open" : "closed"}
|
|
784
809
|
className={cn(
|
|
785
810
|
"fixed inset-0 z-40 bg-black/45 transition-opacity duration-200",
|
|
786
|
-
mobileOpen ? "opacity-100" : "pointer-events-none opacity-0",
|
|
787
|
-
mobileOverlayClassName
|
|
788
|
-
)}
|
|
789
|
-
|
|
790
|
-
|
|
811
|
+
mobileOpen ? "opacity-100" : "pointer-events-none opacity-0",
|
|
812
|
+
mobileOverlayClassName
|
|
813
|
+
)}
|
|
814
|
+
style={{
|
|
815
|
+
opacity: mobileOpen ? 1 : 0,
|
|
816
|
+
pointerEvents: mobileOpen ? "auto" : "none",
|
|
817
|
+
}}
|
|
818
|
+
onClick={() => setMobileOpen(false)}
|
|
819
|
+
/>
|
|
791
820
|
<SidebarSurface
|
|
792
821
|
{...baseProps}
|
|
793
822
|
mobile
|
|
@@ -800,16 +829,17 @@ function Sidebar({
|
|
|
800
829
|
aria-modal="true"
|
|
801
830
|
aria-label={typeof mobileTitle === "string" ? mobileTitle : "Navigation"}
|
|
802
831
|
className={cn(
|
|
803
|
-
"fixed inset-y-0 left-0 z-50 max-w-[22rem] border-r border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] shadow-2xl transition-transform duration-200 ease-out",
|
|
832
|
+
"fixed inset-y-0 left-0 z-50 max-w-[22rem] border-r border-[color:var(--aui-divider,var(--border))] bg-[color:var(--aui-page-bg,var(--background))] shadow-2xl transition-transform duration-200 ease-out",
|
|
804
833
|
mobileOpen ? "translate-x-0" : "-translate-x-full",
|
|
805
834
|
mobilePanelClassName,
|
|
806
835
|
className
|
|
807
836
|
)}
|
|
808
|
-
style={{
|
|
809
|
-
width: mobileWidth,
|
|
810
|
-
minWidth: mobileWidth,
|
|
811
|
-
|
|
812
|
-
|
|
837
|
+
style={{
|
|
838
|
+
width: mobileWidth,
|
|
839
|
+
minWidth: mobileWidth,
|
|
840
|
+
translate: mobileOpen ? "0 0" : "-100% 0",
|
|
841
|
+
}}
|
|
842
|
+
/>
|
|
813
843
|
</div>
|
|
814
844
|
</>
|
|
815
845
|
)
|
|
@@ -16,6 +16,7 @@ export type DialogPopupProps = DialogPrimitive.Popup.Props & {
|
|
|
16
16
|
surface?: "default" | "plain"
|
|
17
17
|
}
|
|
18
18
|
export type DialogHeaderProps = React.ComponentProps<"div">
|
|
19
|
+
export type DialogBodyProps = React.ComponentProps<"div">
|
|
19
20
|
export type DialogFooterProps = React.ComponentProps<"div"> & {
|
|
20
21
|
showCloseButton?: boolean
|
|
21
22
|
}
|
|
@@ -72,7 +73,7 @@ function DialogContent({
|
|
|
72
73
|
role="dialog"
|
|
73
74
|
aria-modal="true"
|
|
74
75
|
className={cn(
|
|
75
|
-
"fixed top-1/2 left-1/2 z-50 grid max-h-[min(92vh,calc(100dvh-2rem))] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-5 overflow-
|
|
76
|
+
"fixed top-1/2 left-1/2 z-50 grid max-h-[min(92vh,calc(100dvh-2rem))] w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 grid-rows-[auto_minmax(0,1fr)_auto] gap-5 overflow-hidden overscroll-contain duration-100 outline-none data-[surface=plain]:overflow-visible data-[size=xs]:sm:max-w-sm data-[size=sm]:sm:max-w-md data-[size=md]:sm:max-w-lg data-[size=lg]:sm:max-w-2xl data-[size=xl]:sm:max-w-4xl data-[size=full]:h-[min(92vh,56rem)] data-[size=full]:max-w-[min(96vw,84rem)] data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
76
77
|
className
|
|
77
78
|
)}
|
|
78
79
|
{...props}
|
|
@@ -102,7 +103,17 @@ function DialogHeader({ className, ...props }: DialogHeaderProps) {
|
|
|
102
103
|
return (
|
|
103
104
|
<div
|
|
104
105
|
data-slot="dialog-header"
|
|
105
|
-
className={cn("
|
|
106
|
+
className={cn("min-w-0 shrink-0 pr-10", className)}
|
|
107
|
+
{...props}
|
|
108
|
+
/>
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function DialogBody({ className, ...props }: DialogBodyProps) {
|
|
113
|
+
return (
|
|
114
|
+
<div
|
|
115
|
+
data-slot="dialog-body"
|
|
116
|
+
className={cn("min-h-0 overflow-y-auto overscroll-contain", className)}
|
|
106
117
|
{...props}
|
|
107
118
|
/>
|
|
108
119
|
)
|
|
@@ -118,7 +129,7 @@ function DialogFooter({
|
|
|
118
129
|
<div
|
|
119
130
|
data-slot="dialog-footer"
|
|
120
131
|
className={cn(
|
|
121
|
-
"flex flex-
|
|
132
|
+
"flex shrink-0 flex-wrap items-center justify-end gap-2 [&_[data-slot=button]]:inline-flex [&_[data-slot=button]]:flex-row [&_[data-slot=button]]:items-center [&_[data-slot=button]]:justify-center [&_[data-slot=button]]:gap-2",
|
|
122
133
|
className
|
|
123
134
|
)}
|
|
124
135
|
{...props}
|
|
@@ -158,6 +169,7 @@ function DialogDescription({
|
|
|
158
169
|
|
|
159
170
|
export {
|
|
160
171
|
Dialog,
|
|
172
|
+
DialogBody,
|
|
161
173
|
DialogClose,
|
|
162
174
|
DialogContent,
|
|
163
175
|
DialogDescription,
|
|
@@ -16,7 +16,9 @@ export type SelectContentProps = SelectPrimitive.Popup.Props &
|
|
|
16
16
|
"align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
|
|
17
17
|
>
|
|
18
18
|
export type SelectLabelProps = SelectPrimitive.GroupLabel.Props
|
|
19
|
-
export type SelectItemProps = SelectPrimitive.Item.Props
|
|
19
|
+
export type SelectItemProps = SelectPrimitive.Item.Props & {
|
|
20
|
+
showIndicator?: boolean
|
|
21
|
+
}
|
|
20
22
|
export type SelectSeparatorProps = SelectPrimitive.Separator.Props
|
|
21
23
|
export type SelectScrollUpButtonProps = React.ComponentProps<typeof SelectPrimitive.ScrollUpArrow>
|
|
22
24
|
export type SelectScrollDownButtonProps = React.ComponentProps<typeof SelectPrimitive.ScrollDownArrow>
|
|
@@ -57,6 +59,7 @@ export type SelectProps = Omit<SelectRootProps, "value" | "defaultValue" | "onVa
|
|
|
57
59
|
itemClassName?: string
|
|
58
60
|
searchClassName?: string
|
|
59
61
|
renderOption?: (option: SelectOption, state: { selected: boolean }) => React.ReactNode
|
|
62
|
+
showSelectedIndicator?: boolean
|
|
60
63
|
invalid?: boolean
|
|
61
64
|
onSearchChange?: (value: string) => void
|
|
62
65
|
}
|
|
@@ -98,6 +101,7 @@ function Select({
|
|
|
98
101
|
itemClassName,
|
|
99
102
|
searchClassName,
|
|
100
103
|
renderOption,
|
|
104
|
+
showSelectedIndicator = true,
|
|
101
105
|
invalid,
|
|
102
106
|
children,
|
|
103
107
|
onOpenChange,
|
|
@@ -239,6 +243,7 @@ function Select({
|
|
|
239
243
|
key={option.value}
|
|
240
244
|
value={option.value}
|
|
241
245
|
disabled={option.disabled}
|
|
246
|
+
showIndicator={showSelectedIndicator}
|
|
242
247
|
className={cn("rounded-[var(--radius-md)]", itemClassName)}
|
|
243
248
|
>
|
|
244
249
|
{renderOption ? (
|
|
@@ -296,6 +301,7 @@ function SelectTrigger({
|
|
|
296
301
|
data-size={size}
|
|
297
302
|
className={cn(
|
|
298
303
|
"flex w-full min-w-0 items-center justify-between gap-2 whitespace-nowrap outline-none select-none disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
304
|
+
"rounded-[var(--radius-lg)] border border-[color:var(--aui-input-border,var(--border))] bg-[color:var(--aui-input-bg,var(--background))] px-3 text-[color:var(--aui-input-fg,var(--foreground))] shadow-sm transition-[border-color,box-shadow,background-color] hover:border-[color:var(--aui-input-border-hover,var(--border))] focus-visible:border-[color:var(--aui-ring,var(--ring))] focus-visible:shadow-[0_0_0_3px_color-mix(in_oklch,var(--aui-ring,var(--ring)),transparent_82%)] disabled:opacity-60 data-[size=sm]:h-9 data-[size=default]:min-h-10 data-[size=lg]:min-h-11 data-[size=lg]:px-4 aria-[invalid=true]:border-[color:var(--aui-danger,var(--destructive))] aria-[invalid=true]:shadow-[0_0_0_3px_color-mix(in_oklch,var(--aui-danger,var(--destructive)),transparent_84%)]",
|
|
299
305
|
className
|
|
300
306
|
)}
|
|
301
307
|
{...props}
|
|
@@ -336,7 +342,7 @@ function SelectContent({
|
|
|
336
342
|
data-slot="select-content"
|
|
337
343
|
data-align-trigger={alignItemWithTrigger}
|
|
338
344
|
className={cn(
|
|
339
|
-
"relative isolate max-h-(--available-height) w-(--anchor-width) min-w-52 origin-(--transform-origin) overflow-x-hidden overflow-y-auto",
|
|
345
|
+
"relative isolate max-h-(--available-height) w-(--anchor-width) min-w-52 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-[var(--radius-xl)] border border-[color:var(--aui-surface-border,var(--border))] bg-[color:var(--aui-popover-bg,var(--popover))] p-1 text-[color:var(--aui-popover-fg,var(--popover-foreground))] shadow-xl",
|
|
340
346
|
className
|
|
341
347
|
)}
|
|
342
348
|
{...props}
|
|
@@ -360,12 +366,12 @@ function SelectLabel({ className, ...props }: SelectLabelProps) {
|
|
|
360
366
|
)
|
|
361
367
|
}
|
|
362
368
|
|
|
363
|
-
function SelectItem({ className, children, ...props }: SelectItemProps) {
|
|
369
|
+
function SelectItem({ className, children, showIndicator = true, ...props }: SelectItemProps) {
|
|
364
370
|
return (
|
|
365
371
|
<SelectPrimitive.Item
|
|
366
372
|
data-slot="select-item"
|
|
367
373
|
className={cn(
|
|
368
|
-
"relative flex w-full cursor-default items-center gap-2 outline-hidden select-none data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
374
|
+
"relative flex w-full cursor-default items-center gap-2 px-2.5 py-2 pr-8 text-sm outline-hidden select-none data-disabled:pointer-events-none data-highlighted:bg-[color:var(--aui-control-bg,var(--muted))] data-highlighted:text-[color:var(--aui-control-fg,var(--foreground))] data-selected:bg-[color:var(--aui-control-bg,var(--muted))] data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
369
375
|
className
|
|
370
376
|
)}
|
|
371
377
|
{...props}
|
|
@@ -373,11 +379,13 @@ function SelectItem({ className, children, ...props }: SelectItemProps) {
|
|
|
373
379
|
<SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
|
|
374
380
|
{children}
|
|
375
381
|
</SelectPrimitive.ItemText>
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
382
|
+
{showIndicator ? (
|
|
383
|
+
<SelectPrimitive.ItemIndicator
|
|
384
|
+
render={<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />}
|
|
385
|
+
>
|
|
386
|
+
<CheckIcon className="pointer-events-none size-4" />
|
|
387
|
+
</SelectPrimitive.ItemIndicator>
|
|
388
|
+
) : null}
|
|
381
389
|
</SelectPrimitive.Item>
|
|
382
390
|
)
|
|
383
391
|
}
|