tembro 3.1.5 → 3.1.7
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 +7 -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 +49 -36
- 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 +44 -43
- 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 +13 -9
- package/packages/cli/dist/index.cjs +127 -127
- package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +31 -6
- 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 -10
- 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/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">
|
|
@@ -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 ? (
|
|
@@ -247,7 +252,6 @@ function Select({
|
|
|
247
252
|
<span className="flex min-w-0 flex-1 flex-col">
|
|
248
253
|
<span className="flex min-w-0 items-center gap-2">
|
|
249
254
|
<span className="truncate">{option.label}</span>
|
|
250
|
-
{selected ? <CheckIcon className="ml-auto size-3.5 text-primary" /> : null}
|
|
251
255
|
</span>
|
|
252
256
|
{option.description ? (
|
|
253
257
|
<span className="truncate text-xs text-muted-foreground">{option.description}</span>
|
|
@@ -297,6 +301,7 @@ function SelectTrigger({
|
|
|
297
301
|
data-size={size}
|
|
298
302
|
className={cn(
|
|
299
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%)]",
|
|
300
305
|
className
|
|
301
306
|
)}
|
|
302
307
|
{...props}
|
|
@@ -337,7 +342,7 @@ function SelectContent({
|
|
|
337
342
|
data-slot="select-content"
|
|
338
343
|
data-align-trigger={alignItemWithTrigger}
|
|
339
344
|
className={cn(
|
|
340
|
-
"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",
|
|
341
346
|
className
|
|
342
347
|
)}
|
|
343
348
|
{...props}
|
|
@@ -361,12 +366,12 @@ function SelectLabel({ className, ...props }: SelectLabelProps) {
|
|
|
361
366
|
)
|
|
362
367
|
}
|
|
363
368
|
|
|
364
|
-
function SelectItem({ className, children, ...props }: SelectItemProps) {
|
|
369
|
+
function SelectItem({ className, children, showIndicator = true, ...props }: SelectItemProps) {
|
|
365
370
|
return (
|
|
366
371
|
<SelectPrimitive.Item
|
|
367
372
|
data-slot="select-item"
|
|
368
373
|
className={cn(
|
|
369
|
-
"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",
|
|
370
375
|
className
|
|
371
376
|
)}
|
|
372
377
|
{...props}
|
|
@@ -374,11 +379,13 @@ function SelectItem({ className, children, ...props }: SelectItemProps) {
|
|
|
374
379
|
<SelectPrimitive.ItemText className="flex flex-1 shrink-0 gap-2 whitespace-nowrap">
|
|
375
380
|
{children}
|
|
376
381
|
</SelectPrimitive.ItemText>
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
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}
|
|
382
389
|
</SelectPrimitive.Item>
|
|
383
390
|
)
|
|
384
391
|
}
|