tembro 3.1.6 → 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.
Files changed (120) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +241 -91
  3. package/dist/components/ui/dialog/index.d.ts +3 -1
  4. package/dist/components/ui/select/index.d.ts +6 -3
  5. package/dist/showcase/package-meta.d.ts +3 -3
  6. package/dist/showcase/premium/wizard/index.cjs +1 -0
  7. package/dist/showcase/premium/wizard/index.d.ts +2 -0
  8. package/dist/showcase/premium/wizard/index.js +1 -0
  9. package/dist/showcase/premium/wizard/mock.cjs +1 -0
  10. package/dist/showcase/premium/wizard/mock.d.ts +2 -0
  11. package/dist/showcase/premium/wizard/mock.js +1 -0
  12. package/dist/showcase/premium/wizard/showcase.cjs +1 -0
  13. package/dist/showcase/premium/wizard/showcase.d.ts +2 -0
  14. package/dist/showcase/premium/wizard/showcase.js +1 -0
  15. package/dist/showcase/search-utils.d.ts +1 -1
  16. package/dist/showcase/site-data.d.ts +6 -6
  17. package/dist/src/components/layout/app-sidebar.cjs +1 -1
  18. package/dist/src/components/layout/app-sidebar.js +49 -36
  19. package/dist/src/components/theme-provider.cjs +1 -1
  20. package/dist/src/components/theme-provider.js +1 -1
  21. package/dist/src/components/ui/dialog/index.cjs +1 -1
  22. package/dist/src/components/ui/dialog/index.js +14 -7
  23. package/dist/src/components/ui/select/index.cjs +1 -1
  24. package/dist/src/components/ui/select/index.js +30 -29
  25. package/dist/src/index.cjs +1 -1
  26. package/dist/src/index.js +101 -101
  27. package/dist/src/showcase/component-api-schema.cjs +1 -1
  28. package/dist/src/showcase/component-api-schema.js +868 -9
  29. package/dist/src/showcase/demo-snippets/forms/index.cjs +1 -1
  30. package/dist/src/showcase/demo-snippets/forms/index.js +1 -1
  31. package/dist/src/showcase/fallback.cjs +4 -4
  32. package/dist/src/showcase/fallback.js +354 -181
  33. package/dist/src/showcase/index.cjs +1 -1
  34. package/dist/src/showcase/index.js +2 -2
  35. package/dist/src/showcase/package-meta.cjs +1 -1
  36. package/dist/src/showcase/package-meta.js +1 -1
  37. package/dist/src/showcase/premium/app-sidebar/mock.cjs +3 -2
  38. package/dist/src/showcase/premium/app-sidebar/mock.js +1 -1
  39. package/dist/src/showcase/premium/app-sidebar/showcase.cjs +1 -1
  40. package/dist/src/showcase/premium/app-sidebar/showcase.js +1 -1
  41. package/dist/src/showcase/premium/async-select/showcase.cjs +1 -1
  42. package/dist/src/showcase/premium/async-select/showcase.js +118 -74
  43. package/dist/src/showcase/premium/avatar/showcase.cjs +1 -1
  44. package/dist/src/showcase/premium/avatar/showcase.js +5 -5
  45. package/dist/src/showcase/premium/dialog/mock.cjs +6 -1
  46. package/dist/src/showcase/premium/dialog/mock.js +1 -1
  47. package/dist/src/showcase/premium/dialog/showcase.cjs +1 -1
  48. package/dist/src/showcase/premium/dialog/showcase.js +101 -39
  49. package/dist/src/showcase/premium/form-wrapper/mock.cjs +2 -2
  50. package/dist/src/showcase/premium/form-wrapper/mock.js +2 -2
  51. package/dist/src/showcase/premium/form-wrapper/showcase.cjs +1 -1
  52. package/dist/src/showcase/premium/form-wrapper/showcase.js +1 -1
  53. package/dist/src/showcase/premium/index.cjs +1 -1
  54. package/dist/src/showcase/premium/index.js +9 -3
  55. package/dist/src/showcase/premium/input/showcase.cjs +1 -1
  56. package/dist/src/showcase/premium/input/showcase.js +1 -1
  57. package/dist/src/showcase/premium/json-input/showcase.cjs +1 -1
  58. package/dist/src/showcase/premium/json-input/showcase.js +1 -1
  59. package/dist/src/showcase/premium/select/showcase.cjs +1 -1
  60. package/dist/src/showcase/premium/select/showcase.js +53 -0
  61. package/dist/src/showcase/premium/table/mock.cjs +1 -1
  62. package/dist/src/showcase/premium/table/mock.js +1 -1
  63. package/dist/src/showcase/premium/types.cjs +1 -1
  64. package/dist/src/showcase/premium/types.js +1 -1
  65. package/dist/src/showcase/premium/wizard/index.cjs +1 -0
  66. package/dist/src/showcase/premium/wizard/index.js +3 -0
  67. package/dist/src/showcase/premium/wizard/mock.cjs +25 -0
  68. package/dist/src/showcase/premium/wizard/mock.js +32 -0
  69. package/dist/src/showcase/premium/wizard/showcase.cjs +1 -0
  70. package/dist/src/showcase/premium/wizard/showcase.js +130 -0
  71. package/dist/src/showcase/preview-registry.cjs +1 -1
  72. package/dist/src/showcase/preview-registry.js +6 -6
  73. package/dist/src/showcase/registry-quality.cjs +1 -1
  74. package/dist/src/showcase/registry-quality.js +5 -0
  75. package/dist/src/showcase/registry-specific.cjs +1 -1
  76. package/dist/src/showcase/registry-specific.js +2 -2
  77. package/dist/src/showcase/render-registry-preview.cjs +1 -1
  78. package/dist/src/showcase/render-registry-preview.js +2 -2
  79. package/dist/src/showcase/site-data.cjs +1 -1
  80. package/dist/src/showcase/site-data.js +198 -44
  81. package/dist/src/showcase/tembro-registry.json.cjs +1 -1
  82. package/dist/src/showcase/tembro-registry.json.js +1 -1
  83. package/dist/src/showcase/types.cjs +1 -1
  84. package/dist/src/showcase/types.js +1 -1
  85. package/package.json +7 -3
  86. package/packages/cli/dist/index.cjs +127 -127
  87. package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +31 -6
  88. package/packages/cli/vendor/src/components/theme-provider.tsx +1 -1
  89. package/packages/cli/vendor/src/components/ui/dialog/index.tsx +15 -3
  90. package/packages/cli/vendor/src/components/ui/select/index.tsx +17 -9
  91. package/packages/cli/vendor/src/showcase/component-api-schema.ts +269 -39
  92. package/packages/cli/vendor/src/showcase/demo-snippets/forms/index.ts +1 -1
  93. package/packages/cli/vendor/src/showcase/fallback.tsx +202 -39
  94. package/packages/cli/vendor/src/showcase/index.ts +6 -6
  95. package/packages/cli/vendor/src/showcase/package-meta.ts +3 -3
  96. package/packages/cli/vendor/src/showcase/premium/app-sidebar/mock.ts +3 -2
  97. package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -1
  98. package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +50 -4
  99. package/packages/cli/vendor/src/showcase/premium/avatar/showcase.tsx +5 -5
  100. package/packages/cli/vendor/src/showcase/premium/dialog/mock.ts +6 -1
  101. package/packages/cli/vendor/src/showcase/premium/dialog/showcase.tsx +53 -1
  102. package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +2 -2
  103. package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +1 -1
  104. package/packages/cli/vendor/src/showcase/premium/index.ts +5 -3
  105. package/packages/cli/vendor/src/showcase/premium/input/showcase.tsx +1 -1
  106. package/packages/cli/vendor/src/showcase/premium/json-input/showcase.tsx +1 -1
  107. package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +38 -0
  108. package/packages/cli/vendor/src/showcase/premium/table/mock.ts +1 -1
  109. package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
  110. package/packages/cli/vendor/src/showcase/premium/wizard/index.ts +2 -0
  111. package/packages/cli/vendor/src/showcase/premium/wizard/mock.ts +41 -0
  112. package/packages/cli/vendor/src/showcase/premium/wizard/showcase.tsx +88 -0
  113. package/packages/cli/vendor/src/showcase/preview-registry.tsx +6 -6
  114. package/packages/cli/vendor/src/showcase/registry-quality.ts +5 -0
  115. package/packages/cli/vendor/src/showcase/registry-specific.tsx +2 -2
  116. package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +2 -2
  117. package/packages/cli/vendor/src/showcase/site-data.tsx +89 -32
  118. package/packages/cli/vendor/src/showcase/tembro-registry.json +1 -1
  119. package/packages/cli/vendor/src/showcase/types.ts +1 -1
  120. 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 text-sm font-medium outline-none transition-[background-color,border-color,color,box-shadow] data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
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 && "justify-center px-2"
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 text-sm font-medium outline-none transition-[background-color,border-color,color,box-shadow]",
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 ? "justify-center px-2" : "px-2.5"
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">
@@ -13,7 +13,7 @@ type ThemeContextValue = {
13
13
  toggleTheme: () => void
14
14
  }
15
15
 
16
- const THEME_STORAGE_KEY = "azamat-ui-theme"
16
+ const THEME_STORAGE_KEY = "tembro-theme"
17
17
 
18
18
  const ThemeContext = React.createContext<ThemeContextValue | null>(null)
19
19
 
@@ -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-y-auto 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-[size=full]:grid-rows-[auto_minmax(0,1fr)] 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
+ "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("flex flex-col", className)}
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-col-reverse gap-2 sm:flex-row sm:justify-end",
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
- <SelectPrimitive.ItemIndicator
377
- render={<span className="pointer-events-none absolute right-2 flex size-4 items-center justify-center" />}
378
- >
379
- <CheckIcon className="pointer-events-none" />
380
- </SelectPrimitive.ItemIndicator>
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
  }