@moldable-ai/ui 0.2.29 → 0.2.31

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 (181) hide show
  1. package/dist/catalog/component-catalog.d.ts +9 -2
  2. package/dist/catalog/component-catalog.d.ts.map +1 -1
  3. package/dist/catalog/component-catalog.js +11 -7
  4. package/dist/catalog/core-control-stories.d.ts.map +1 -1
  5. package/dist/catalog/core-control-stories.js +1 -1
  6. package/dist/catalog/core-foundation-stories.d.ts.map +1 -1
  7. package/dist/catalog/core-foundation-stories.js +5 -5
  8. package/dist/components/ui/app-frame.d.ts +20 -1
  9. package/dist/components/ui/app-frame.d.ts.map +1 -1
  10. package/dist/components/ui/app-frame.js +37 -7
  11. package/dist/components/ui/badge.d.ts +1 -1
  12. package/dist/components/ui/badge.js +1 -1
  13. package/dist/components/ui/button.d.ts +5 -3
  14. package/dist/components/ui/button.d.ts.map +1 -1
  15. package/dist/components/ui/button.js +39 -11
  16. package/dist/components/ui/card.d.ts +12 -2
  17. package/dist/components/ui/card.d.ts.map +1 -1
  18. package/dist/components/ui/card.js +3 -2
  19. package/dist/components/ui/checkbox.d.ts +4 -1
  20. package/dist/components/ui/checkbox.d.ts.map +1 -1
  21. package/dist/components/ui/checkbox.js +4 -4
  22. package/dist/components/ui/context-menu.js +6 -6
  23. package/dist/components/ui/dropdown-menu.js +6 -6
  24. package/dist/components/ui/icon-button.d.ts +1 -1
  25. package/dist/components/ui/icon-button.d.ts.map +1 -1
  26. package/dist/components/ui/icon-button.js +1 -0
  27. package/dist/components/ui/input.d.ts +6 -2
  28. package/dist/components/ui/input.d.ts.map +1 -1
  29. package/dist/components/ui/input.js +2 -2
  30. package/dist/components/ui/material.d.ts +8 -3
  31. package/dist/components/ui/material.d.ts.map +1 -1
  32. package/dist/components/ui/material.js +2 -2
  33. package/dist/components/ui/search-field.d.ts +3 -1
  34. package/dist/components/ui/search-field.d.ts.map +1 -1
  35. package/dist/components/ui/search-field.js +16 -6
  36. package/dist/components/ui/segmented-control.d.ts +3 -1
  37. package/dist/components/ui/segmented-control.d.ts.map +1 -1
  38. package/dist/components/ui/segmented-control.js +23 -17
  39. package/dist/components/ui/select.js +2 -2
  40. package/dist/components/ui/sidebar.d.ts +5 -3
  41. package/dist/components/ui/sidebar.d.ts.map +1 -1
  42. package/dist/components/ui/sidebar.js +53 -15
  43. package/dist/components/ui/status.d.ts +1 -1
  44. package/dist/components/ui/status.js +1 -1
  45. package/dist/components/ui/switch.d.ts +3 -1
  46. package/dist/components/ui/switch.d.ts.map +1 -1
  47. package/dist/components/ui/switch.js +3 -2
  48. package/dist/components/ui/toolbar-controls.d.ts +3 -1
  49. package/dist/components/ui/toolbar-controls.d.ts.map +1 -1
  50. package/dist/components/ui/toolbar-controls.js +14 -7
  51. package/dist/components/ui/toolbar.d.ts +5 -4
  52. package/dist/components/ui/toolbar.d.ts.map +1 -1
  53. package/dist/components/ui/toolbar.js +3 -3
  54. package/dist/index.d.ts +2 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -1
  57. package/dist/lib/frame-lifecycle.d.ts +1 -0
  58. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  59. package/dist/lib/frame-lifecycle.js +7 -0
  60. package/dist/lib/theme.d.ts +39 -5
  61. package/dist/lib/theme.d.ts.map +1 -1
  62. package/dist/lib/theme.js +105 -17
  63. package/dist/tokens/contracts.d.ts +79 -0
  64. package/dist/tokens/contracts.d.ts.map +1 -0
  65. package/dist/tokens/contracts.js +57 -0
  66. package/dist/tokens/index.d.ts +2 -0
  67. package/dist/tokens/index.d.ts.map +1 -0
  68. package/dist/tokens/index.js +1 -0
  69. package/docs/README.md +2 -0
  70. package/docs/adaptive-materials.md +14 -9
  71. package/docs/design-tokens.md +10 -6
  72. package/docs/foundations.md +3 -3
  73. package/docs/macos-design-audit.md +144 -0
  74. package/docs/native-integration.md +4 -4
  75. package/docs/platform-architecture.md +189 -0
  76. package/docs/standalone-app-windows.md +37 -0
  77. package/docs/visual-regression.md +6 -8
  78. package/package.json +13 -1
  79. package/src/components/ui/accordion.md +46 -0
  80. package/src/components/ui/alert.md +12 -4
  81. package/src/components/ui/app-frame.md +8 -5
  82. package/src/components/ui/aspect-ratio.md +37 -0
  83. package/src/components/ui/avatar.md +48 -0
  84. package/src/components/ui/breadcrumb.md +52 -0
  85. package/src/components/ui/button-group.md +43 -0
  86. package/src/components/ui/button.md +20 -4
  87. package/src/components/ui/calendar.md +42 -0
  88. package/src/components/ui/card.md +43 -0
  89. package/src/components/ui/carousel.md +47 -0
  90. package/src/components/ui/chart.md +52 -0
  91. package/src/components/ui/checkbox.md +36 -0
  92. package/src/components/ui/collapsible.md +2 -3
  93. package/src/components/ui/color-well.md +14 -4
  94. package/src/components/ui/combobox.md +3 -3
  95. package/src/components/ui/confirm-dialog.md +5 -4
  96. package/src/components/ui/context-menu.md +3 -2
  97. package/src/components/ui/date-field.md +6 -1
  98. package/src/components/ui/date-picker.md +6 -3
  99. package/src/components/ui/dialog.md +14 -12
  100. package/src/components/ui/drawer.md +58 -0
  101. package/src/components/ui/error-boundary-view.md +1 -1
  102. package/src/components/ui/field.md +2 -1
  103. package/src/components/ui/form.md +71 -0
  104. package/src/components/ui/grid.md +4 -3
  105. package/src/components/ui/icon-button.md +4 -1
  106. package/src/components/ui/input-group.md +49 -0
  107. package/src/components/ui/input-otp.md +56 -0
  108. package/src/components/ui/input.md +40 -0
  109. package/src/components/ui/inspector.md +47 -7
  110. package/src/components/ui/item.md +5 -3
  111. package/src/components/ui/kbd.md +30 -0
  112. package/src/components/ui/label.md +29 -0
  113. package/src/components/ui/list.md +2 -2
  114. package/src/components/ui/material.md +25 -12
  115. package/src/components/ui/menu-items.md +60 -0
  116. package/src/components/ui/menubar.md +58 -0
  117. package/src/components/ui/message-scroller-primitive.md +70 -0
  118. package/src/components/ui/message-scroller.md +86 -0
  119. package/src/components/ui/navigation-button-group.md +4 -3
  120. package/src/components/ui/navigation-menu.md +52 -0
  121. package/src/components/ui/number-input.md +8 -0
  122. package/src/components/ui/pagination.md +51 -0
  123. package/src/components/ui/panel.md +6 -0
  124. package/src/components/ui/popover.md +10 -7
  125. package/src/components/ui/progress.md +31 -0
  126. package/src/components/ui/radio-group.md +36 -0
  127. package/src/components/ui/resizable.md +2 -1
  128. package/src/components/ui/scroll-area.md +3 -1
  129. package/src/components/ui/search-field.md +6 -1
  130. package/src/components/ui/segmented-control.md +6 -1
  131. package/src/components/ui/separator.md +35 -0
  132. package/src/components/ui/sidebar.md +20 -3
  133. package/src/components/ui/skeleton.md +36 -0
  134. package/src/components/ui/slider.md +58 -0
  135. package/src/components/ui/spinner.md +41 -0
  136. package/src/components/ui/split-view.md +8 -4
  137. package/src/components/ui/switch.md +44 -0
  138. package/src/components/ui/table.md +7 -7
  139. package/src/components/ui/tabs.md +3 -1
  140. package/src/components/ui/textarea.md +41 -0
  141. package/src/components/ui/toggle-group.md +2 -2
  142. package/src/components/ui/toggle.md +9 -9
  143. package/src/components/ui/toolbar-controls.md +17 -9
  144. package/src/components/ui/toolbar.md +6 -6
  145. package/src/styles/index.css +171 -117
  146. package/src/tokens/contracts.ts +131 -0
  147. package/src/tokens/index.css +6 -0
  148. package/src/tokens/index.ts +23 -0
  149. package/src/tokens/macos-26/README.md +37 -0
  150. package/src/tokens/macos-26/aliases.css +53 -0
  151. package/src/tokens/macos-26/compatibility.css +7 -0
  152. package/src/tokens/macos-26/index.css +3 -0
  153. package/src/tokens/macos-26/source/provenance.generated.json +28 -0
  154. package/src/tokens/macos-26/source/sidebar.generated.css +29 -0
  155. package/src/tokens/macos-26/source.css +7 -0
  156. package/src/tokens/macos-26/web-adaptations.json +25 -0
  157. package/src/tokens/macos-26/web-adaptations.md +15 -0
  158. package/src/tokens/macos-27/accessibility.css +11 -0
  159. package/src/tokens/macos-27/aliases.css +304 -0
  160. package/src/tokens/macos-27/compatibility.css +212 -0
  161. package/src/tokens/macos-27/index.css +15 -0
  162. package/src/tokens/macos-27/recipes.css +23 -0
  163. package/src/tokens/macos-27/source/chrome.generated.css +338 -0
  164. package/src/tokens/macos-27/source/colors.generated.css +140 -0
  165. package/src/tokens/macos-27/source/context.generated.css +18 -0
  166. package/src/tokens/macos-27/source/controls.generated.css +764 -0
  167. package/src/tokens/macos-27/source/effects.generated.css +68 -0
  168. package/src/tokens/macos-27/source/kit.generated.css +50 -0
  169. package/src/tokens/macos-27/source/overlays-status.generated.css +931 -0
  170. package/src/tokens/macos-27/source/paint-styles.generated.css +81 -0
  171. package/src/tokens/macos-27/source/provenance.generated.json +62 -0
  172. package/src/tokens/macos-27/source/sizes.generated.css +385 -0
  173. package/src/tokens/macos-27/source/source.generated.json +554 -0
  174. package/src/tokens/macos-27/source/text-styles.generated.css +116 -0
  175. package/src/tokens/macos-27/source.css +17 -0
  176. package/src/tokens/macos-27/web-adaptations.css +98 -0
  177. package/src/tokens/macos-27/web-adaptations.json +163 -0
  178. package/src/tokens/macos-27/web-adaptations.md +117 -0
  179. package/src/tokens/moldable/brand.css +48 -0
  180. package/src/tokens/moldable/index.css +1 -0
  181. package/src/tokens/platform-contract.test.ts +290 -0
@@ -75,22 +75,22 @@ function DropdownMenuTrigger({ onClick, onKeyDown, onPointerDown, ...props }) {
75
75
  }, ...props }));
76
76
  }
77
77
  function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
78
- return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground shadow-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-(--radix-dropdown-menu-content-available-height) origin-(--radix-dropdown-menu-content-transform-origin) rounded-overlay z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden border p-1', className), ...props }) }));
78
+ return (_jsx(DropdownMenuPrimitive.Portal, { children: _jsx(DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: cn('bg-popover text-popover-foreground shadow-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-(--radix-dropdown-menu-content-available-height) origin-(--radix-dropdown-menu-content-transform-origin) rounded-overlay z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden border px-1 py-[var(--m-ui-menu-padding-block)]', className), ...props }) }));
79
79
  }
80
80
  function DropdownMenuGroup({ ...props }) {
81
81
  return (_jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props }));
82
82
  }
83
83
  function DropdownMenuItem({ className, inset, variant = 'default', ...props }) {
84
- return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden rounded-control text-ui-body relative flex cursor-default select-none items-center gap-2 px-2 py-1.5 data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props }));
84
+ return (_jsx(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden text-ui-body relative flex cursor-default select-none items-center gap-2 rounded-[var(--m-ui-menu-item-radius)] px-2 py-1.5 data-[disabled]:pointer-events-none data-[inset]:pl-8 data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props }));
85
85
  }
86
86
  function DropdownMenuCheckboxItem({ className, children, checked, variant = 'default', ...props }) {
87
- return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive outline-hidden rounded-control text-ui-body relative flex cursor-default select-none items-center gap-2 py-1.5 pl-8 pr-2 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), checked: checked, ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), children] }));
87
+ return (_jsxs(DropdownMenuPrimitive.CheckboxItem, { "data-slot": "dropdown-menu-checkbox-item", "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive outline-hidden text-ui-body relative flex cursor-default select-none items-center gap-2 rounded-[var(--m-ui-menu-item-radius)] py-1.5 pl-8 pr-2 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), checked: checked, ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), children] }));
88
88
  }
89
89
  function DropdownMenuRadioGroup({ ...props }) {
90
90
  return (_jsx(DropdownMenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props }));
91
91
  }
92
92
  function DropdownMenuRadioItem({ className, children, variant = 'default', ...props }) {
93
- return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive outline-hidden rounded-control text-ui-body relative flex cursor-default select-none items-center gap-2 py-1.5 pl-8 pr-2 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "size-2 fill-current" }) }) }), children] }));
93
+ return (_jsxs(DropdownMenuPrimitive.RadioItem, { "data-slot": "dropdown-menu-radio-item", "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive outline-hidden text-ui-body relative flex cursor-default select-none items-center gap-2 rounded-[var(--m-ui-menu-item-radius)] py-1.5 pl-8 pr-2 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [_jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: _jsx(DropdownMenuPrimitive.ItemIndicator, { children: _jsx(CircleIcon, { className: "size-2 fill-current" }) }) }), children] }));
94
94
  }
95
95
  function DropdownMenuLabel({ className, inset, ...props }) {
96
96
  return (_jsx(DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn('text-ui-body px-2 py-1.5 font-medium data-[inset]:pl-8', className), ...props }));
@@ -105,10 +105,10 @@ function DropdownMenuSub({ ...props }) {
105
105
  return _jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
106
106
  }
107
107
  function DropdownMenuSubTrigger({ className, inset, children, variant = 'default', ...props }) {
108
- return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden rounded-control text-ui-body flex cursor-default select-none items-center gap-2 px-2 py-1.5 data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "ml-auto size-4" })] }));
108
+ return (_jsxs(DropdownMenuPrimitive.SubTrigger, { "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, "data-variant": variant, className: cn("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden text-ui-body flex cursor-default select-none items-center gap-2 rounded-[var(--m-ui-menu-item-radius)] px-2 py-1.5 data-[inset]:pl-8 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [children, _jsx(ChevronRightIcon, { className: "ml-auto size-4" })] }));
109
109
  }
110
110
  function DropdownMenuSubContent({ className, ...props }) {
111
- return (_jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn('bg-popover text-popover-foreground shadow-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-(--radix-dropdown-menu-content-transform-origin) rounded-overlay z-50 min-w-[8rem] overflow-hidden border p-1', className), ...props }));
111
+ return (_jsx(DropdownMenuPrimitive.SubContent, { "data-slot": "dropdown-menu-sub-content", className: cn('bg-popover text-popover-foreground shadow-overlay data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-(--radix-dropdown-menu-content-transform-origin) rounded-overlay z-50 min-w-[8rem] overflow-hidden border px-1 py-[var(--m-ui-menu-padding-block)]', className), ...props }));
112
112
  }
113
113
  function DropdownMenuGeneratedItems({ items, onSelectItem, }) {
114
114
  return items.map((item) => {
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { Button } from './button.js';
3
- type IconButtonSize = 'xs' | 'sm' | 'default' | 'lg';
3
+ type IconButtonSize = 'xs' | 'sm' | 'default' | 'lg' | 'xl';
4
4
  interface IconButtonProps extends Omit<React.ComponentProps<typeof Button>, 'aria-label' | 'asChild' | 'size'> {
5
5
  /** Required accessible name for the icon-only control. */
6
6
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icon-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,KAAK,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;AASpD,UAAU,eACR,SAAQ,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,YAAY,GAAG,SAAS,GAAG,MAAM,CAClC;IACD,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B;AAED,iBAAS,UAAU,CAAC,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAe,EACf,KAAiB,EACjB,IAAgB,EAChB,OAAO,EACP,IAAe,EACf,GAAG,KAAK,EACT,EAAE,eAAe,2CAgBjB;AAED,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icon-button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,KAAK,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;AAU3D,UAAU,eACR,SAAQ,IAAI,CACV,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EACnC,YAAY,GAAG,SAAS,GAAG,MAAM,CAClC;IACD,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAC3B;AAED,iBAAS,UAAU,CAAC,EAClB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAe,EACf,KAAiB,EACjB,IAAgB,EAChB,OAAO,EACP,IAAe,EACf,GAAG,KAAK,EACT,EAAE,eAAe,2CAgBjB;AAED,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,CAAA"}
@@ -7,6 +7,7 @@ const buttonSizeByIconSize = {
7
7
  sm: 'icon-sm',
8
8
  default: 'icon',
9
9
  lg: 'icon-lg',
10
+ xl: 'icon-xl',
10
11
  };
11
12
  function IconButton({ children, className, disabled, label, loading = false, shape = 'rounded', size = 'default', tooltip, type = 'button', ...props }) {
12
13
  return (_jsx(Button, { "data-slot": "icon-button", "aria-label": label, title: tooltip === true ? label : tooltip || undefined, type: type, size: buttonSizeByIconSize[size], disabled: disabled, loading: loading, className: cn(shape === 'circle' && 'rounded-pill', className), ...props, children: children }));
@@ -1,4 +1,8 @@
1
1
  import * as React from 'react';
2
- declare function Input({ className, type, ...props }: React.ComponentProps<'input'>): import("react/jsx-runtime").JSX.Element;
3
- export { Input };
2
+ import type { ControlSize } from '../../tokens/contracts.js';
3
+ interface InputProps extends React.ComponentProps<'input'> {
4
+ controlSize?: ControlSize;
5
+ }
6
+ declare function Input({ className, controlSize, type, ...props }: InputProps): import("react/jsx-runtime").JSX.Element;
7
+ export { Input, type InputProps };
4
8
  //# sourceMappingURL=input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;IACxD,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAepE;AAED,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { cn } from '../../lib/utils.js';
4
- function Input({ className, type, ...props }) {
5
- return (_jsx("input", { type: type, "data-slot": "input", className: cn('file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input shadow-xs rounded-control text-16 file:text-ui-body md:text-ui-body h-control-md px-control-inline file:h-control-xs w-full min-w-0 border bg-transparent py-1 outline-none transition-[color,box-shadow] file:inline-flex file:border-0 file:bg-transparent file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50', 'focus-visible:border-ring focus-visible:ring-ring focus-visible:ring-1', 'aria-invalid:border-destructive', className), ...props }));
4
+ function Input({ className, controlSize, type, ...props }) {
5
+ return (_jsx("input", { type: type, "data-slot": "input", "data-control-size": controlSize, className: cn('file:text-foreground border-input shadow-xs text-ui-body file:text-ui-body file:h-control-xs h-[var(--m-ui-control-height)] w-full min-w-0 rounded-[var(--m-ui-control-radius)] border bg-transparent px-[var(--m-ui-field-inset-inline)] outline-none transition-[color,box-shadow] selection:bg-[var(--m-ui-color-accent)] selection:text-white file:inline-flex file:border-0 file:bg-transparent file:font-medium placeholder:text-[var(--m-ui-color-text-secondary)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:text-[var(--m-ui-color-text-tertiary)]', 'focus-visible:border-ring focus-visible:ring-ring focus-visible:ring-[3px]', 'aria-invalid:border-destructive', className), ...props }));
6
6
  }
7
7
  export { Input };
@@ -3,15 +3,20 @@ import { type VariantProps } from 'class-variance-authority';
3
3
  declare const materialVariants: (props?: ({
4
4
  shape?: "circle" | "rounded" | "capsule" | null | undefined;
5
5
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
- export type MaterialVariant = 'regular' | 'clear';
6
+ export type MaterialVariant = 'regular' | 'clear' | 'ultra-thick' | 'thick' | 'medium' | 'thin' | 'ultra-thin';
7
7
  export type MaterialShape = NonNullable<VariantProps<typeof materialVariants>['shape']>;
8
8
  export type MaterialElevation = 'none' | 'panel' | 'overlay';
9
9
  export interface MaterialProps extends React.ComponentPropsWithoutRef<'div'>, VariantProps<typeof materialVariants> {
10
10
  /**
11
- * `regular` is the default for toolbars and control chrome. Reserve `clear`
12
- * for compact controls floating above media or a richly colored canvas.
11
+ * `regular` aliases the medium standard material and `clear` aliases the
12
+ * ultra-thin material for backwards compatibility. Prefer a named standard
13
+ * material when the hierarchy is known.
13
14
  */
14
15
  variant?: MaterialVariant;
16
+ /**
17
+ * Material thickness controls translucency only. Add an elevation explicitly
18
+ * when the surface is a floating panel, overlay, or dialog.
19
+ */
15
20
  elevation?: MaterialElevation;
16
21
  interactive?: boolean;
17
22
  asChild?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../../src/components/ui/material.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,gBAAgB;;8EAWpB,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAA;AACjD,MAAM,MAAM,aAAa,GAAG,WAAW,CACrC,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAC/C,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAE5D,MAAM,WAAW,aACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,OAAO,gBAAgB,CAAC;IACvC;;;OAGG;IACH,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,iBAAS,QAAQ,CAAC,EAChB,OAAe,EACf,SAAS,EACT,SAAmB,EACnB,WAAmB,EACnB,KAAK,EACL,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,aAAa,2CAcf;AAED,QAAA,MAAM,oBAAoB;;;;CAIhB,CAAA;AAEV,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,aAAa,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,OAAO,oBAAoB,CAAA;CAC5C;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAYpB;AAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"material.d.ts","sourceRoot":"","sources":["../../../src/components/ui/material.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,gBAAgB;;8EAWpB,CAAA;AAEF,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,OAAO,GACP,aAAa,GACb,OAAO,GACP,QAAQ,GACR,MAAM,GACN,YAAY,CAAA;AAChB,MAAM,MAAM,aAAa,GAAG,WAAW,CACrC,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAC/C,CAAA;AACD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;AAE5D,MAAM,WAAW,aACf,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAC3C,YAAY,CAAC,OAAO,gBAAgB,CAAC;IACvC;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,iBAAiB,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,iBAAS,QAAQ,CAAC,EAChB,OAAe,EACf,SAAS,EACT,SAAkB,EAClB,WAAmB,EACnB,KAAK,EACL,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,aAAa,2CAcf;AAED,QAAA,MAAM,oBAAoB;;;;CAIhB,CAAA;AAEV,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,aAAa,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,OAAO,oBAAoB,CAAA;CAC5C;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAYpB;AAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAA"}
@@ -3,7 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cn } from '../../lib/utils.js';
5
5
  import { cva } from 'class-variance-authority';
6
- const materialVariants = cva('moldable-material border text-inherit', {
6
+ const materialVariants = cva('moldable-material text-inherit', {
7
7
  variants: {
8
8
  shape: {
9
9
  rounded: 'rounded-overlay',
@@ -15,7 +15,7 @@ const materialVariants = cva('moldable-material border text-inherit', {
15
15
  shape: 'rounded',
16
16
  },
17
17
  });
18
- function Material({ asChild = false, className, elevation = 'panel', interactive = false, shape, variant = 'regular', ...props }) {
18
+ function Material({ asChild = false, className, elevation = 'none', interactive = false, shape, variant = 'regular', ...props }) {
19
19
  const Comp = asChild ? Slot : 'div';
20
20
  return (_jsx(Comp, { "data-slot": asChild ? undefined : 'material', "data-material": variant, "data-material-elevation": elevation, "data-material-interactive": interactive || undefined, "data-material-shape": shape ?? 'rounded', className: cn(materialVariants({ shape }), className), ...props }));
21
21
  }
@@ -1,10 +1,12 @@
1
1
  import * as React from 'react';
2
+ import type { ControlSize } from '../../tokens/contracts.js';
2
3
  import { type VariantProps } from 'class-variance-authority';
3
4
  declare const searchFieldVariants: (props?: ({
4
5
  variant?: "default" | "filled" | null | undefined;
5
6
  density?: "compact" | "default" | "comfortable" | null | undefined;
6
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
8
  interface SearchFieldProps extends Omit<React.ComponentProps<'input'>, 'defaultValue' | 'size' | 'type' | 'value'>, VariantProps<typeof searchFieldVariants> {
9
+ controlSize?: ControlSize;
8
10
  value?: string;
9
11
  defaultValue?: string;
10
12
  onValueChange?: (value: string) => void;
@@ -14,6 +16,6 @@ interface SearchFieldProps extends Omit<React.ComponentProps<'input'>, 'defaultV
14
16
  loading?: boolean;
15
17
  inputClassName?: string;
16
18
  }
17
- declare function SearchField({ className, inputClassName, value, defaultValue, onChange, onValueChange, onClear, onKeyDown, clearable, clearLabel, loading, variant, density, disabled, readOnly, ref, ...props }: SearchFieldProps): import("react/jsx-runtime").JSX.Element;
19
+ declare function SearchField({ className, controlSize, inputClassName, value, defaultValue, onChange, onValueChange, onClear, onKeyDown, clearable, clearLabel, loading, variant, density, disabled, readOnly, ref, ...props }: SearchFieldProps): import("react/jsx-runtime").JSX.Element;
18
20
  export { SearchField, searchFieldVariants, type SearchFieldProps };
19
21
  //# sourceMappingURL=search-field.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-field.d.ts","sourceRoot":"","sources":["../../../src/components/ui/search-field.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,mBAAmB;;;8EAmBxB,CAAA;AAED,UAAU,gBACR,SAAQ,IAAI,CACR,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAC7B,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAC3C,EACD,YAAY,CAAC,OAAO,mBAAmB,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,cAAc,EACd,KAAK,EACL,YAAiB,EACjB,QAAQ,EACR,aAAa,EACb,OAAO,EACP,SAAS,EACT,SAAgB,EAChB,UAA2B,EAC3B,OAAe,EACf,OAAmB,EACnB,OAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAmGlB;AAED,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"search-field.d.ts","sourceRoot":"","sources":["../../../src/components/ui/search-field.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,mBAAmB;;;8EAmBxB,CAAA;AAED,UAAU,gBACR,SAAQ,IAAI,CACR,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAC7B,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAC3C,EACD,YAAY,CAAC,OAAO,mBAAmB,CAAC;IAC1C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,WAAW,EACX,cAAc,EACd,KAAK,EACL,YAAiB,EACjB,QAAQ,EACR,aAAa,EACb,OAAO,EACP,SAAS,EACT,SAAgB,EAChB,UAA2B,EAC3B,OAAe,EACf,OAAmB,EACnB,OAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,2CAmHlB;AAED,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,CAAA"}
@@ -12,9 +12,9 @@ const searchFieldVariants = cva('group/search-field border-input has-[:focus-vis
12
12
  filled: 'border-transparent bg-muted/70 shadow-none',
13
13
  },
14
14
  density: {
15
- compact: 'h-control-sm',
16
- default: 'h-control-md',
17
- comfortable: 'h-control-md',
15
+ compact: 'h-control-md',
16
+ default: 'h-control-lg',
17
+ comfortable: 'h-control-xl',
18
18
  },
19
19
  },
20
20
  defaultVariants: {
@@ -22,7 +22,13 @@ const searchFieldVariants = cva('group/search-field border-input has-[:focus-vis
22
22
  density: 'default',
23
23
  },
24
24
  });
25
- function SearchField({ className, inputClassName, value, defaultValue = '', onChange, onValueChange, onClear, onKeyDown, clearable = true, clearLabel = 'Clear search', loading = false, variant = 'default', density = 'default', disabled, readOnly, ref, ...props }) {
25
+ function SearchField({ className, controlSize, inputClassName, value, defaultValue = '', onChange, onValueChange, onClear, onKeyDown, clearable = true, clearLabel = 'Clear search', loading = false, variant = 'default', density = 'default', disabled, readOnly, ref, ...props }) {
26
+ const resolvedControlSize = controlSize ??
27
+ {
28
+ compact: 'medium',
29
+ default: 'large',
30
+ comfortable: 'xl',
31
+ }[density ?? 'default'];
26
32
  const controlled = value !== undefined;
27
33
  const [internalValue, setInternalValue] = React.useState(defaultValue);
28
34
  const inputRef = React.useRef(null);
@@ -46,8 +52,12 @@ function SearchField({ className, inputClassName, value, defaultValue = '', onCh
46
52
  onClear?.();
47
53
  inputRef.current?.focus();
48
54
  }, [commitValue, currentValue, onClear]);
49
- const iconSize = density === 'compact' ? 'size-3.5' : 'size-4';
50
- return (_jsxs("div", { "data-slot": "search-field", "data-density": density, "data-variant": variant, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, className: cn(searchFieldVariants({ variant, density }), disabled && 'cursor-not-allowed opacity-50', className), children: [_jsx("span", { "aria-hidden": "true", className: "text-muted-foreground pointer-events-none flex shrink-0 items-center pl-2.5", children: loading ? (_jsx(LoaderCircleIcon, { className: cn(iconSize, 'animate-spin') })) : (_jsx(SearchIcon, { className: iconSize })) }), _jsx("input", { ref: setRefs, "data-slot": "search-field-input", type: "search", value: currentValue, disabled: disabled, readOnly: readOnly, className: cn('placeholder:text-muted-foreground text-ui-body min-w-0 flex-1 appearance-none bg-transparent px-2 outline-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden', density === 'compact' && 'text-ui-caption', inputClassName), onChange: (event) => {
55
+ const iconSize = density === 'comfortable'
56
+ ? 'size-4.5'
57
+ : density === 'compact'
58
+ ? 'size-3.5'
59
+ : 'size-4';
60
+ return (_jsxs("div", { "data-slot": "search-field", "data-density": density, "data-control-size": resolvedControlSize, "data-variant": variant, "data-disabled": disabled || undefined, "data-readonly": readOnly || undefined, className: cn(searchFieldVariants({ variant, density }), 'h-[var(--m-ui-control-height)] rounded-[var(--m-ui-control-radius)]', disabled && 'cursor-not-allowed opacity-50', className), children: [_jsx("span", { "aria-hidden": "true", className: "text-muted-foreground pointer-events-none flex shrink-0 items-center pl-[var(--m-ui-field-inset-inline)]", children: loading ? (_jsx(LoaderCircleIcon, { className: cn(iconSize, 'animate-spin') })) : (_jsx(SearchIcon, { className: iconSize })) }), _jsx("input", { ref: setRefs, "data-slot": "search-field-input", type: "search", value: currentValue, disabled: disabled, readOnly: readOnly, className: cn('placeholder:text-muted-foreground text-ui-body min-w-0 flex-1 appearance-none bg-transparent px-2 outline-none [&::-webkit-search-cancel-button]:hidden [&::-webkit-search-decoration]:hidden', density === 'compact' && 'text-ui-body', inputClassName), onChange: (event) => {
51
61
  onChange?.(event);
52
62
  commitValue(event.currentTarget.value);
53
63
  }, onKeyDown: (event) => {
@@ -1,5 +1,6 @@
1
1
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
2
2
  import * as React from 'react';
3
+ import type { ControlSize } from '../../tokens/contracts.js';
3
4
  import { type VariantProps } from 'class-variance-authority';
4
5
  declare const segmentedControlVariants: (props?: ({
5
6
  variant?: "outline" | "muted" | null | undefined;
@@ -11,8 +12,9 @@ declare const segmentedControlItemVariants: (props?: ({
11
12
  fullWidth?: boolean | null | undefined;
12
13
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
14
  interface SegmentedControlProps extends React.ComponentProps<typeof RadioGroupPrimitive.Root>, VariantProps<typeof segmentedControlVariants> {
15
+ controlSize?: ControlSize;
14
16
  }
15
- declare function SegmentedControl({ className, variant, density, fullWidth, orientation, ...props }: SegmentedControlProps): import("react/jsx-runtime").JSX.Element;
17
+ declare function SegmentedControl({ className, controlSize, variant, density, fullWidth, orientation, ...props }: SegmentedControlProps): import("react/jsx-runtime").JSX.Element;
16
18
  interface SegmentedControlItemProps extends React.ComponentProps<typeof RadioGroupPrimitive.Item> {
17
19
  iconOnly?: boolean;
18
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"segmented-control.d.ts","sourceRoot":"","sources":["../../../src/components/ui/segmented-control.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,wBAAwB;;;;8EAwB7B,CAAA;AAED,QAAA,MAAM,4BAA4B;;;8EAsBjC,CAAA;AAaD,UAAU,qBACR,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,EAC3D,YAAY,CAAC,OAAO,wBAAwB,CAAC;CAAG;AAEpD,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,OAAiB,EACjB,OAAmB,EACnB,SAAiB,EACjB,WAA0B,EAC1B,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAoBvB;AAED,UAAU,yBACR,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,yBAAyB,2CAqB3B;AAED,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,GACzB,CAAA"}
1
+ {"version":3,"file":"segmented-control.d.ts","sourceRoot":"","sources":["../../../src/components/ui/segmented-control.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAEjE,QAAA,MAAM,wBAAwB;;;;8EAwB7B,CAAA;AAED,QAAA,MAAM,4BAA4B;;;8EAsBjC,CAAA;AAeD,UAAU,qBACR,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC,EAC3D,YAAY,CAAC,OAAO,wBAAwB,CAAC;IAC/C,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,WAAW,EACX,OAAiB,EACjB,OAAmB,EACnB,SAAiB,EACjB,WAA0B,EAC1B,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAmCvB;AAED,UAAU,yBACR,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,mBAAmB,CAAC,IAAI,CAAC;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,yBAAyB,2CAmB3B;AAED,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,GACzB,CAAA"}
@@ -4,16 +4,16 @@ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
4
4
  import * as React from 'react';
5
5
  import { cn } from '../../lib/utils.js';
6
6
  import { cva } from 'class-variance-authority';
7
- const segmentedControlVariants = cva('inline-flex w-fit items-center overflow-x-auto rounded-group p-0.5 text-muted-foreground', {
7
+ const segmentedControlVariants = cva('inline-flex h-[var(--m-ui-control-height)] w-fit items-center overflow-x-auto rounded-[var(--m-ui-control-radius)] bg-[var(--m-ui-color-fill-quinary)] p-0 text-[var(--m-ui-color-text-secondary)]', {
8
8
  variants: {
9
9
  variant: {
10
10
  muted: 'bg-muted/70',
11
11
  outline: 'border border-border/80 bg-background shadow-xs',
12
12
  },
13
13
  density: {
14
- compact: 'min-h-control-sm',
15
- default: 'min-h-control-md',
16
- comfortable: 'min-h-control-sm',
14
+ compact: '',
15
+ default: '',
16
+ comfortable: '',
17
17
  },
18
18
  fullWidth: {
19
19
  true: 'flex w-full',
@@ -26,12 +26,12 @@ const segmentedControlVariants = cva('inline-flex w-fit items-center overflow-x-
26
26
  fullWidth: false,
27
27
  },
28
28
  });
29
- const segmentedControlItemVariants = cva('relative inline-flex cursor-pointer select-none items-center justify-center whitespace-nowrap rounded-control font-medium outline-none transition-[background-color,color,box-shadow] hover:bg-control-hover hover:text-foreground active:bg-control-pressed active:text-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus-visible:z-10 focus-visible:ring-1 focus-visible:ring-ring data-[state=checked]:bg-background data-[state=checked]:text-foreground data-[state=checked]:shadow-xs data-[state=checked]:hover:bg-control-hover data-[state=checked]:active:bg-control-pressed [&_svg]:pointer-events-none [&_svg]:shrink-0', {
29
+ const segmentedControlItemVariants = cva('relative -ml-px inline-flex h-[var(--m-ui-control-height)] cursor-pointer select-none items-center justify-center whitespace-nowrap rounded-[var(--m-ui-control-radius)] px-[var(--m-ui-segment-margin)] font-medium outline-none transition-[background-color,color,box-shadow] first:ml-0 hover:bg-control-hover hover:text-foreground active:bg-control-pressed active:text-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus-visible:z-10 focus-visible:ring-[3px] focus-visible:ring-ring data-[state=checked]:bg-[var(--m-ui-color-accent)] data-[state=checked]:text-white data-[state=checked]:shadow-xs [&_svg]:pointer-events-none [&_svg]:shrink-0', {
30
30
  variants: {
31
31
  density: {
32
- compact: 'min-h-6 gap-1 px-2 text-ui-caption [&_svg:not([class*="size-"])]:size-3',
33
- default: 'min-h-7 gap-1.5 px-2.5 text-ui-body [&_svg:not([class*="size-"])]:size-3.5',
34
- comfortable: 'min-h-8 gap-1.5 px-3 text-ui-body [&_svg:not([class*="size-"])]:size-4',
32
+ compact: 'gap-1 text-[length:var(--m-ui-control-font-size)] leading-[var(--m-ui-control-line-height)] [&_svg:not([class*="size-"])]:size-3',
33
+ default: 'gap-1.5 text-[length:var(--m-ui-control-font-size)] leading-[var(--m-ui-control-line-height)] [&_svg:not([class*="size-"])]:size-3.5',
34
+ comfortable: 'gap-1.5 text-[length:var(--m-ui-control-font-size)] leading-[var(--m-ui-control-line-height)] [&_svg:not([class*="size-"])]:size-4',
35
35
  },
36
36
  fullWidth: {
37
37
  true: 'min-w-0 flex-1',
@@ -46,17 +46,23 @@ const segmentedControlItemVariants = cva('relative inline-flex cursor-pointer se
46
46
  const SegmentedControlContext = React.createContext({
47
47
  density: 'default',
48
48
  fullWidth: false,
49
+ controlSize: undefined,
49
50
  });
50
- function SegmentedControl({ className, variant = 'muted', density = 'default', fullWidth = false, orientation = 'horizontal', ...props }) {
51
- return (_jsx(SegmentedControlContext.Provider, { value: { density: density ?? 'default', fullWidth: Boolean(fullWidth) }, children: _jsx(RadioGroupPrimitive.Root, { "data-slot": "segmented-control", "data-variant": variant, "data-density": density, "data-full-width": fullWidth, orientation: orientation, className: cn(segmentedControlVariants({ variant, density, fullWidth }), orientation === 'vertical' && 'flex-col', className), ...props }) }));
51
+ function SegmentedControl({ className, controlSize, variant = 'muted', density = 'default', fullWidth = false, orientation = 'horizontal', ...props }) {
52
+ const resolvedControlSize = controlSize ??
53
+ {
54
+ compact: 'small',
55
+ default: 'medium',
56
+ comfortable: 'large',
57
+ }[density ?? 'default'];
58
+ return (_jsx(SegmentedControlContext.Provider, { value: {
59
+ controlSize: resolvedControlSize,
60
+ density: density ?? 'default',
61
+ fullWidth: Boolean(fullWidth),
62
+ }, children: _jsx(RadioGroupPrimitive.Root, { "data-slot": "segmented-control", "data-variant": variant, "data-density": density, "data-control-size": resolvedControlSize, "data-full-width": fullWidth, orientation: orientation, className: cn(segmentedControlVariants({ variant, density, fullWidth }), orientation === 'vertical' && 'flex-col', className), ...props }) }));
52
63
  }
53
64
  function SegmentedControlItem({ className, iconOnly = false, ...props }) {
54
- const { density, fullWidth } = React.useContext(SegmentedControlContext);
55
- return (_jsx(RadioGroupPrimitive.Item, { "data-slot": "segmented-control-item", "data-density": density, "data-icon-only": iconOnly, className: cn(segmentedControlItemVariants({ density, fullWidth }), iconOnly &&
56
- {
57
- compact: 'size-6 p-0',
58
- default: 'size-7 p-0',
59
- comfortable: 'size-8 p-0',
60
- }[density], className), ...props }));
65
+ const { controlSize, density, fullWidth } = React.useContext(SegmentedControlContext);
66
+ return (_jsx(RadioGroupPrimitive.Item, { "data-slot": "segmented-control-item", "data-density": density, "data-control-size": controlSize, "data-icon-only": iconOnly, className: cn(segmentedControlItemVariants({ density, fullWidth }), iconOnly && 'size-[var(--m-ui-control-height)] p-0', className), ...props }));
61
67
  }
62
68
  export { SegmentedControl, SegmentedControlItem, segmentedControlItemVariants, segmentedControlVariants, };
@@ -17,14 +17,14 @@ function SelectTrigger({ className, size = 'default', children, ...props }) {
17
17
  }
18
18
  function SelectContent({ className, children, position = 'item-aligned', align = 'center', ...props }) {
19
19
  return (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { "data-slot": "select-content", className: cn('bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) rounded-overlay shadow-overlay relative z-50 min-w-[8rem] overflow-y-auto overflow-x-hidden border', position === 'popper' &&
20
- 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, align: align, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { role: "group", tabIndex: 0, className: cn('p-1', position === 'popper' &&
20
+ 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, align: align, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { role: "group", tabIndex: 0, className: cn('px-1 py-[var(--m-ui-menu-padding-block)]', position === 'popper' &&
21
21
  'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'), children: children }), _jsx(SelectScrollDownButton, {})] }) }));
22
22
  }
23
23
  function SelectLabel({ className, ...props }) {
24
24
  return (_jsx(SelectPrimitive.Label, { "data-slot": "select-label", className: cn('text-muted-foreground text-ui-caption px-2 py-1.5', className), ...props }));
25
25
  }
26
26
  function SelectItem({ className, children, ...props }) {
27
- return (_jsxs(SelectPrimitive.Item, { "data-slot": "select-item", className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 rounded-control text-ui-body relative flex w-full cursor-default select-none items-center gap-2 py-1.5 pl-2 pr-8 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [_jsx("span", { "data-slot": "select-item-indicator", className: "absolute right-2 flex size-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] }));
27
+ return (_jsxs(SelectPrimitive.Item, { "data-slot": "select-item", className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 text-ui-body relative flex w-full cursor-default select-none items-center gap-2 rounded-[var(--m-ui-menu-item-radius)] py-1.5 pl-2 pr-8 data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className), ...props, children: [_jsx("span", { "data-slot": "select-item-indicator", className: "absolute right-2 flex size-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(CheckIcon, { className: "size-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] }));
28
28
  }
29
29
  function SelectSeparator({ className, ...props }) {
30
30
  return (_jsx(SelectPrimitive.Separator, { "data-slot": "select-separator", className: cn('bg-border pointer-events-none -mx-1 my-1 h-px', className), ...props }));
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import type { UISidebarStyle } from '../../tokens/contracts.js';
2
3
  import { Button } from './button.js';
3
4
  import { Input } from './input.js';
4
5
  import { Separator } from './separator.js';
@@ -19,9 +20,10 @@ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: se
19
20
  open?: boolean;
20
21
  onOpenChange?: (open: boolean) => void;
21
22
  }): import("react/jsx-runtime").JSX.Element;
22
- declare function Sidebar({ side, variant, collapsible, className, children, ref, ...props }: React.ComponentProps<'div'> & {
23
+ declare function Sidebar({ side, variant, sidebarStyle, collapsible, className, children, ref, ...props }: React.ComponentProps<'div'> & {
23
24
  side?: 'left' | 'right';
24
25
  variant?: 'sidebar' | 'floating' | 'inset';
26
+ sidebarStyle?: UISidebarStyle;
25
27
  collapsible?: 'offcanvas' | 'icon' | 'none';
26
28
  }): import("react/jsx-runtime").JSX.Element;
27
29
  declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
@@ -33,7 +35,7 @@ declare function SidebarFooter({ className, ...props }: React.ComponentProps<'di
33
35
  declare function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
34
36
  declare function SidebarContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
35
37
  declare function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
36
- declare function SidebarGroupLabel({ className, asChild, ...props }: React.ComponentProps<'div'> & {
38
+ declare function SidebarGroupLabel({ className, asChild, style, ...props }: React.ComponentProps<'div'> & {
37
39
  asChild?: boolean;
38
40
  }): import("react/jsx-runtime").JSX.Element;
39
41
  declare function SidebarGroupAction({ className, asChild, ...props }: React.ComponentProps<'button'> & {
@@ -46,7 +48,7 @@ declare const sidebarMenuButtonVariants: (props?: ({
46
48
  variant?: "default" | "outline" | null | undefined;
47
49
  size?: "default" | "sm" | "lg" | null | undefined;
48
50
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
49
- declare function SidebarMenuButton({ asChild, isActive, variant, size, tooltip, className, ...props }: React.ComponentProps<'button'> & {
51
+ declare function SidebarMenuButton({ asChild, isActive, variant, size, tooltip, className, style, ...props }: React.ComponentProps<'button'> & {
50
52
  asChild?: boolean;
51
53
  isActive?: boolean;
52
54
  tooltip?: string | React.ComponentProps<typeof TooltipContent>;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { Slot } from '@radix-ui/react-slot';
4
4
  import { PanelLeftIcon } from 'lucide-react';
5
5
  import * as React from 'react';
6
6
  import { MOLDABLE_MATERIAL_REGION_MESSAGE_TYPE } from '../../lib/frame-lifecycle.js';
7
+ import { useOptionalTheme } from '../../lib/theme.js';
7
8
  import { cn } from '../../lib/utils.js';
8
9
  import { useIsMobile } from '../../hooks/use-mobile.js';
9
10
  import { useAppFrameRuntime } from './app-frame.js';
@@ -16,7 +17,7 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from './too
16
17
  import { cva } from 'class-variance-authority';
17
18
  const SIDEBAR_COOKIE_NAME = 'sidebar_state';
18
19
  const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
19
- const SIDEBAR_WIDTH = '16rem';
20
+ const SIDEBAR_WIDTH = 'var(--m-ui-sidebar-width, 16rem)';
20
21
  const SIDEBAR_WIDTH_MOBILE = '18rem';
21
22
  const SIDEBAR_WIDTH_ICON = '3rem';
22
23
  const SIDEBAR_KEYBOARD_SHORTCUT = 'b';
@@ -41,6 +42,7 @@ function useSidebarMaterialRegion({ enabled, forwardedRef, }) {
41
42
  }, [forwardedRef]);
42
43
  const canDeclare = enabled &&
43
44
  appFrame?.mode === 'window' &&
45
+ appFrame.sidebarMaterialEnabled === true &&
44
46
  appFrame.sidebarMaterialAvailable === true;
45
47
  React.useEffect(() => {
46
48
  const element = elementRef.current;
@@ -158,32 +160,49 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
158
160
  ...style,
159
161
  }, className: cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className), ...props, children: children }) }) }));
160
162
  }
161
- function Sidebar({ side = 'left', variant = 'sidebar', collapsible = 'offcanvas', className, children, ref, ...props }) {
163
+ function Sidebar({ side = 'left', variant = 'sidebar', sidebarStyle, collapsible = 'offcanvas', className, children, ref, ...props }) {
164
+ const theme = useOptionalTheme();
165
+ const resolvedSidebarStyle = sidebarStyle ?? theme?.sidebarStyle ?? 'edge-to-edge';
166
+ const resolvedVariant = resolvedSidebarStyle === 'floating'
167
+ ? 'floating'
168
+ : resolvedSidebarStyle === 'edge-to-edge'
169
+ ? 'sidebar'
170
+ : variant;
162
171
  const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
163
172
  const materialRegion = useSidebarMaterialRegion({
164
173
  enabled: !isMobile &&
165
174
  side === 'left' &&
166
- variant === 'sidebar' &&
175
+ resolvedVariant === 'sidebar' &&
167
176
  !(state === 'collapsed' && collapsible === 'offcanvas'),
168
177
  forwardedRef: ref,
169
178
  });
170
179
  if (collapsible === 'none') {
171
- return (_jsx("div", { ref: materialRegion.setElement, "data-slot": "sidebar", "data-material-region-id": materialRegion.regionId, "data-native-material": materialRegion.active ? 'sidebar' : undefined, className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'text-sidebar-foreground w-(--sidebar-width) flex flex-col self-stretch', className), ...props, children: children }));
180
+ return (_jsx("div", { ref: materialRegion.setElement, "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, "data-material-region-id": materialRegion.regionId, "data-native-material": materialRegion.active ? 'sidebar' : undefined, className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'text-sidebar-foreground w-(--sidebar-width) flex flex-col self-stretch', resolvedVariant === 'floating' &&
181
+ 'border-[length:var(--m-ui-sidebar-border-width,0px)] [border-color:var(--m-ui-sidebar-border-color,var(--sidebar-border))]', className), ...props, children: children }));
172
182
  }
173
183
  if (isMobile) {
174
- return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { "data-sidebar": "sidebar", "data-slot": "sidebar", "data-mobile": "true", className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", style: {
184
+ return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { "data-sidebar": "sidebar", "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, "data-mobile": "true", className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", style: {
175
185
  '--sidebar-width': SIDEBAR_WIDTH_MOBILE,
176
186
  }, side: side, children: [_jsxs(SheetHeader, { className: "sr-only", children: [_jsx(SheetTitle, { children: "Sidebar" }), _jsx(SheetDescription, { children: "Displays the mobile sidebar." })] }), _jsx("div", { className: "flex h-full w-full flex-col", children: children })] }) }));
177
187
  }
178
- return (_jsxs("div", { className: "text-sidebar-foreground group peer hidden md:block", "data-state": state, "data-collapsible": state === 'collapsed' ? collapsible : '', "data-variant": variant, "data-side": side, "data-slot": "sidebar", children: [_jsx("div", { "data-slot": "sidebar-gap", className: cn('w-(--sidebar-width) relative bg-transparent transition-[width] duration-200 ease-linear', 'group-data-[collapsible=offcanvas]:w-0', 'group-data-[side=right]:rotate-180', variant === 'floating' || variant === 'inset'
188
+ return (_jsxs("div", { className: "text-sidebar-foreground group peer hidden md:block", "data-state": state, "data-collapsible": state === 'collapsed' ? collapsible : '', "data-variant": resolvedVariant, "data-side": side, "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, children: [_jsx("div", { "data-slot": "sidebar-gap", className: cn('w-(--sidebar-width) relative bg-transparent transition-[width] duration-200 ease-linear', 'group-data-[collapsible=offcanvas]:w-0', 'group-data-[side=right]:rotate-180', resolvedVariant === 'floating' || resolvedVariant === 'inset'
179
189
  ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'
180
190
  : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)') }), _jsx("div", { ref: materialRegion.setElement, "data-slot": "sidebar-container", "data-material-region-id": materialRegion.regionId, "data-native-material": materialRegion.active ? 'sidebar' : undefined, className: cn('w-(--sidebar-width) fixed inset-y-0 z-10 hidden h-svh transition-[left,right,width] duration-200 ease-linear md:flex', side === 'left'
181
191
  ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'
182
192
  : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',
183
193
  // Adjust the padding for floating and inset variants.
184
- variant === 'floating' || variant === 'inset'
185
- ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
186
- : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l', className), ...props, children: _jsx("div", { "data-sidebar": "sidebar", "data-slot": "sidebar-inner", className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:rounded-container flex h-full w-full flex-col group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm'), children: children }) })] }));
194
+ resolvedVariant === 'floating' || resolvedVariant === 'inset'
195
+ ? 'p-[var(--m-ui-sidebar-window-inset,0.5rem)] group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
196
+ : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) [border-color:var(--m-ui-sidebar-divider-color,var(--sidebar-border))] group-data-[side=left]:border-r-[length:var(--m-ui-sidebar-divider-width,1px)] group-data-[side=right]:border-l-[length:var(--m-ui-sidebar-divider-width,1px)]', className), ...props, children: _jsx("div", { "data-sidebar": "sidebar", "data-slot": "sidebar-inner", className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'flex h-full w-full flex-col'), style: resolvedVariant === 'floating'
197
+ ? {
198
+ borderRadius: 'var(--m-ui-sidebar-shell-radius, var(--shape-container))',
199
+ borderStyle: 'solid',
200
+ borderWidth: 'var(--m-ui-sidebar-border-width, 0px)',
201
+ borderColor: 'var(--m-ui-sidebar-border-color, var(--sidebar-border))',
202
+ boxShadow: 'var(--m-ui-sidebar-shadow, var(--material-shadow-sidebar))',
203
+ backdropFilter: 'blur(var(--m-ui-sidebar-glass-effect-radius, 0px))',
204
+ }
205
+ : undefined, children: children }) })] }));
187
206
  }
188
207
  function SidebarTrigger({ className, onClick, ...props }) {
189
208
  const { toggleSidebar } = useSidebar();
@@ -217,9 +236,14 @@ function SidebarContent({ className, ...props }) {
217
236
  function SidebarGroup({ className, ...props }) {
218
237
  return (_jsx("div", { "data-slot": "sidebar-group", "data-sidebar": "group", className: cn('relative flex w-full min-w-0 flex-col p-2', className), ...props }));
219
238
  }
220
- function SidebarGroupLabel({ className, asChild = false, ...props }) {
239
+ function SidebarGroupLabel({ className, asChild = false, style, ...props }) {
221
240
  const Comp = asChild ? Slot : 'div';
222
- return (_jsx(Comp, { "data-slot": "sidebar-group-label", "data-sidebar": "group-label", className: cn('text-sidebar-foreground/70 ring-sidebar-ring outline-hidden rounded-control text-ui-caption flex h-8 shrink-0 items-center px-2 font-medium transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-1 [&>svg]:size-4 [&>svg]:shrink-0', 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0', className), ...props }));
241
+ return (_jsx(Comp, { "data-slot": "sidebar-group-label", "data-sidebar": "group-label", className: cn('text-sidebar-foreground/70 ring-sidebar-ring outline-hidden text-ui-caption flex shrink-0 items-center font-medium transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-1 [&>svg]:size-4 [&>svg]:shrink-0', 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0', className), style: {
242
+ minHeight: 'var(--m-ui-sidebar-section-height-medium, 2rem)',
243
+ paddingInline: 'var(--m-ui-sidebar-row-inset-inline, 0.5rem)',
244
+ borderRadius: 'var(--m-ui-sidebar-item-radius, var(--shape-control))',
245
+ ...style,
246
+ }, ...props }));
223
247
  }
224
248
  function SidebarGroupAction({ className, asChild = false, ...props }) {
225
249
  const Comp = asChild ? Slot : 'button';
@@ -236,7 +260,7 @@ function SidebarMenu({ className, ...props }) {
236
260
  function SidebarMenuItem({ className, ...props }) {
237
261
  return (_jsx("li", { "data-slot": "sidebar-menu-item", "data-sidebar": "menu-item", className: cn('group/menu-item relative', className), ...props }));
238
262
  }
239
- const sidebarMenuButtonVariants = cva('peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-control p-2 text-left text-ui-body outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-1 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', {
263
+ const sidebarMenuButtonVariants = cva('peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-control p-2 text-left text-ui-body outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-1 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[active=true]:[&>svg]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', {
240
264
  variants: {
241
265
  variant: {
242
266
  default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',
@@ -253,10 +277,24 @@ const sidebarMenuButtonVariants = cva('peer/menu-button flex w-full items-center
253
277
  size: 'default',
254
278
  },
255
279
  });
256
- function SidebarMenuButton({ asChild = false, isActive = false, variant = 'default', size = 'default', tooltip, className, ...props }) {
280
+ function SidebarMenuButton({ asChild = false, isActive = false, variant = 'default', size = 'default', tooltip, className, style, ...props }) {
257
281
  const Comp = asChild ? Slot : 'button';
258
282
  const { isMobile, state } = useSidebar();
259
- const button = (_jsx(Comp, { "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className), ...props }));
283
+ const heightToken = size === 'sm'
284
+ ? '--m-ui-sidebar-row-height-small'
285
+ : size === 'lg'
286
+ ? '--m-ui-sidebar-row-height-large'
287
+ : '--m-ui-sidebar-row-height-medium';
288
+ const button = (_jsx(Comp, { "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className), style: {
289
+ height: `var(${heightToken})`,
290
+ minHeight: `var(${heightToken})`,
291
+ paddingBlock: 0,
292
+ paddingInline: 'var(--m-ui-sidebar-row-inset-inline, 0.5rem)',
293
+ borderRadius: isActive
294
+ ? 'var(--m-ui-sidebar-selection-radius, var(--shape-control))'
295
+ : 'var(--m-ui-sidebar-item-radius, var(--shape-control))',
296
+ ...style,
297
+ }, ...props }));
260
298
  if (!tooltip) {
261
299
  return button;
262
300
  }
@@ -294,6 +332,6 @@ function SidebarMenuSubItem({ className, ...props }) {
294
332
  }
295
333
  function SidebarMenuSubButton({ asChild = false, size = 'md', isActive = false, className, ...props }) {
296
334
  const Comp = asChild ? Slot : 'a';
297
- return (_jsx(Comp, { "data-slot": "sidebar-menu-sub-button", "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn('text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground outline-hidden rounded-control flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden px-2 focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground', size === 'sm' && 'text-ui-caption', size === 'md' && 'text-ui-body', 'group-data-[collapsible=icon]:hidden', className), ...props }));
335
+ return (_jsx(Comp, { "data-slot": "sidebar-menu-sub-button", "data-sidebar": "menu-sub-button", "data-size": size, "data-active": isActive, className: cn('text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground outline-hidden rounded-control data-[active=true]:[&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden px-2 focus-visible:ring-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground', size === 'sm' && 'text-ui-caption', size === 'md' && 'text-ui-body', 'group-data-[collapsible=icon]:hidden', className), ...props }));
298
336
  }
299
337
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };