@flikk/ui 1.0.0-beta.25 → 1.0.0-beta.27

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 (211) hide show
  1. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
  2. package/dist/components/ai/PromptInput/PromptInput.js +4 -0
  3. package/dist/components/ai/PromptInput/VoiceRecorder.js +4 -0
  4. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +1 -1
  5. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +1 -1
  6. package/dist/components/charts/BarChart/BarChart.js +2 -2
  7. package/dist/components/charts/StackedBarChart/StackedBarChart.js +1 -1
  8. package/dist/components/charts/shared/BarRenderer/BarRenderer.js +2 -2
  9. package/dist/components/core/Breadcrumbs/Breadcrumbs.theme.js +1 -1
  10. package/dist/components/core/Button/Button.js +1 -1
  11. package/dist/components/core/Button/Button.theme.js +5 -5
  12. package/dist/components/core/Calendar/Calendar.theme.js +1 -1
  13. package/dist/components/core/Calendar/CalendarMini/CalendarMini.theme.js +1 -1
  14. package/dist/components/core/CommandPalette/CommandItem.js +4 -5
  15. package/dist/components/core/CommandPalette/CommandPalette.js +1 -1
  16. package/dist/components/core/CommandPalette/CommandPalette.theme.js +11 -13
  17. package/dist/components/core/CommandPalette/CommandPalette.types.d.ts +0 -2
  18. package/dist/components/core/ContextMenu/ContextMenu.theme.js +13 -14
  19. package/dist/components/core/DotSeparator/DotSeparator.d.ts +3 -0
  20. package/dist/components/core/DotSeparator/DotSeparator.js +19 -0
  21. package/dist/components/core/DotSeparator/DotSeparator.theme.d.ts +2 -0
  22. package/dist/components/core/DotSeparator/DotSeparator.theme.js +10 -0
  23. package/dist/components/core/DotSeparator/DotSeparator.types.d.ts +25 -0
  24. package/dist/components/core/DotSeparator/index.d.ts +3 -0
  25. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  26. package/dist/components/core/Dropdown/Dropdown.theme.js +4 -5
  27. package/dist/components/core/Dropdown/DropdownItem.js +1 -1
  28. package/dist/components/core/Dropdown/DropdownMenu.js +1 -1
  29. package/dist/components/core/Empty/Empty.js +1 -1
  30. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.d.ts +14 -0
  31. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.js +28 -0
  32. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.d.ts +6 -0
  33. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.theme.js +8 -0
  34. package/dist/components/core/ImagePlaceholder/ImagePlaceholder.types.d.ts +32 -0
  35. package/dist/components/core/ImagePlaceholder/index.d.ts +2 -0
  36. package/dist/components/core/MenuItem/MenuItem.js +5 -2
  37. package/dist/components/core/MenuItem/MenuItem.theme.d.ts +6 -0
  38. package/dist/components/core/MenuItem/MenuItem.theme.js +19 -16
  39. package/dist/components/core/MenuItem/MenuItem.types.d.ts +2 -0
  40. package/dist/components/core/Message/Message.theme.js +1 -1
  41. package/dist/components/core/Modal/Modal.theme.js +1 -1
  42. package/dist/components/core/NavItem/NavItem.d.ts +1 -1
  43. package/dist/components/core/NavItem/NavItem.js +187 -68
  44. package/dist/components/core/NavItem/NavItem.theme.js +31 -12
  45. package/dist/components/core/NavItem/NavItem.types.d.ts +17 -39
  46. package/dist/components/core/Pagination/Pagination.theme.js +3 -3
  47. package/dist/components/core/Popover/Popover.theme.js +1 -1
  48. package/dist/components/core/Popover/Popover.types.d.ts +6 -2
  49. package/dist/components/core/Popover/PopoverBody.js +10 -3
  50. package/dist/components/core/Progress/Progress.theme.js +1 -1
  51. package/dist/components/core/ScrollArea/ScrollArea.js +2 -2
  52. package/dist/components/core/ScrollArea/ScrollArea.theme.js +1 -1
  53. package/dist/components/core/Segmented/Segmented.js +8 -6
  54. package/dist/components/core/Segmented/Segmented.theme.js +3 -3
  55. package/dist/components/core/Sidebar/Sidebar.d.ts +3 -1
  56. package/dist/components/core/Sidebar/Sidebar.js +53 -16
  57. package/dist/components/core/Sidebar/Sidebar.theme.js +5 -7
  58. package/dist/components/core/Sidebar/Sidebar.types.d.ts +125 -8
  59. package/dist/components/core/Sidebar/SidebarCard.d.ts +25 -0
  60. package/dist/components/core/Sidebar/SidebarCard.js +68 -0
  61. package/dist/components/core/Sidebar/SidebarCard.theme.d.ts +8 -0
  62. package/dist/components/core/Sidebar/SidebarCard.theme.js +18 -0
  63. package/dist/components/core/Sidebar/SidebarContent.js +10 -6
  64. package/dist/components/core/Sidebar/SidebarContext.d.ts +17 -16
  65. package/dist/components/core/Sidebar/SidebarContext.js +43 -20
  66. package/dist/components/core/Sidebar/SidebarFooter.js +4 -6
  67. package/dist/components/core/Sidebar/SidebarHeader.js +12 -9
  68. package/dist/components/core/Sidebar/SidebarLogo.js +39 -8
  69. package/dist/components/core/Sidebar/SidebarNav.js +4 -3
  70. package/dist/components/core/Sidebar/SidebarNavGroup.js +4 -7
  71. package/dist/components/core/Sidebar/SidebarSearch.d.ts +22 -0
  72. package/dist/components/core/Sidebar/SidebarSearch.js +135 -0
  73. package/dist/components/core/Sidebar/SidebarToggle.js +6 -1
  74. package/dist/components/core/Sidebar/SidebarUserProfile.js +33 -17
  75. package/dist/components/core/Sidebar/index.d.ts +4 -3
  76. package/dist/components/core/Skeleton/Skeleton.theme.js +1 -1
  77. package/dist/components/core/Spinner/Spinner.theme.js +1 -1
  78. package/dist/components/core/Tabs/Tabs.js +6 -1
  79. package/dist/components/core/Tabs/Tabs.types.d.ts +2 -0
  80. package/dist/components/core/Tabs/TabsBody.js +5 -3
  81. package/dist/components/core/Tag/Tag.js +29 -5
  82. package/dist/components/core/Tag/Tag.theme.js +14 -9
  83. package/dist/components/core/Tag/Tag.types.d.ts +7 -0
  84. package/dist/components/core/Tooltip/Tooltip.js +1 -1
  85. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -2
  86. package/dist/components/core/index.d.ts +2 -0
  87. package/dist/components/core/index.js +6 -2
  88. package/dist/components/data-display/GanttChart/GanttChart.d.ts +1 -1
  89. package/dist/components/data-display/GanttChart/GanttChart.js +31 -4
  90. package/dist/components/data-display/GanttChart/GanttChart.theme.js +19 -17
  91. package/dist/components/data-display/GanttChart/GanttChart.types.d.ts +19 -0
  92. package/dist/components/data-display/GanttChart/GanttChart.utils.js +1 -1
  93. package/dist/components/data-display/GanttChart/GanttChartPanel.d.ts +1 -1
  94. package/dist/components/data-display/GanttChart/GanttChartPanel.js +3 -3
  95. package/dist/components/data-display/GanttChart/GanttDependencyArrows.js +7 -4
  96. package/dist/components/data-display/GanttChart/GanttMilestone.js +5 -5
  97. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +1 -1
  98. package/dist/components/data-display/GanttChart/GanttTablePanel.js +1 -1
  99. package/dist/components/data-display/GanttChart/GanttTableTaskRow.js +2 -2
  100. package/dist/components/data-display/GanttChart/GanttTaskBar.js +37 -16
  101. package/dist/components/data-display/GanttChart/GanttTimelineGrid.js +2 -1
  102. package/dist/components/data-display/GanttChart/GanttTimelineHeader.js +35 -11
  103. package/dist/components/data-display/GanttChart/GanttToolbar.js +2 -2
  104. package/dist/components/data-display/GanttChart/hooks/useGanttDrag.js +3 -2
  105. package/dist/components/data-display/GanttChart/index.d.ts +1 -1
  106. package/dist/components/data-display/KPI/KPI.js +13 -3
  107. package/dist/components/data-display/KPI/KPI.theme.js +3 -3
  108. package/dist/components/data-display/Metric/Metric.theme.js +3 -3
  109. package/dist/components/data-display/Table/Table.js +4 -3
  110. package/dist/components/data-display/Table/Table.theme.js +14 -6
  111. package/dist/components/data-display/Table/Table.types.d.ts +15 -0
  112. package/dist/components/data-display/Table/TableColumnManager.js +1 -1
  113. package/dist/components/data-display/Table/index.d.ts +2 -2
  114. package/dist/components/effects/Aurora/Aurora.d.ts +6 -17
  115. package/dist/components/effects/Aurora/Aurora.js +310 -105
  116. package/dist/components/effects/Aurora/Aurora.types.d.ts +6 -0
  117. package/dist/components/effects/InteractiveCharacters/InteractiveCharacters.js +3 -3
  118. package/dist/components/effects/InteractiveCharacters/characters/BlobCharacter.js +13 -4
  119. package/dist/components/effects/InteractiveCharacters/characters/SmallCharacter.js +13 -4
  120. package/dist/components/effects/InteractiveCharacters/characters/TallCharacter.js +14 -4
  121. package/dist/components/effects/MorphingText/MorphingText.js +40 -7
  122. package/dist/components/effects/StripePattern/StripePattern.d.ts +18 -0
  123. package/dist/components/effects/StripePattern/StripePattern.js +54 -0
  124. package/dist/components/effects/StripePattern/StripePattern.types.d.ts +53 -0
  125. package/dist/components/effects/StripePattern/index.d.ts +2 -0
  126. package/dist/components/effects/index.d.ts +2 -0
  127. package/dist/components/effects/index.js +1 -0
  128. package/dist/components/forms/Checkbox/Checkbox.theme.js +1 -1
  129. package/dist/components/forms/Combobox/Combobox.js +1 -1
  130. package/dist/components/forms/Combobox/Combobox.theme.js +2 -4
  131. package/dist/components/forms/CronInput/CronInput.js +1 -1
  132. package/dist/components/forms/CronInput/CronInput.theme.js +22 -31
  133. package/dist/components/forms/DatePicker/DatePicker.theme.js +11 -18
  134. package/dist/components/forms/DatePicker/DatePickerTrigger.js +1 -1
  135. package/dist/components/forms/DateRangePicker/DateRangePicker.theme.js +7 -14
  136. package/dist/components/forms/DateRangePicker/DateRangePickerTrigger.js +1 -1
  137. package/dist/components/forms/FileUpload/FileUpload.animations.d.ts +29 -0
  138. package/dist/components/forms/FileUpload/FileUpload.animations.js +19 -0
  139. package/dist/components/forms/FileUpload/FileUpload.js +88 -49
  140. package/dist/components/forms/FileUpload/FileUpload.theme.d.ts +2 -10
  141. package/dist/components/forms/FileUpload/FileUpload.theme.js +16 -30
  142. package/dist/components/forms/FileUpload/FileUpload.types.d.ts +26 -10
  143. package/dist/components/forms/FileUpload/FileUploadProgress.js +27 -20
  144. package/dist/components/forms/FileUpload/FileUploadProgress.theme.js +2 -2
  145. package/dist/components/forms/Input/Input.theme.js +16 -15
  146. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  147. package/dist/components/forms/Mention/Mention.js +152 -57
  148. package/dist/components/forms/Mention/Mention.theme.js +16 -23
  149. package/dist/components/forms/Mention/Mention.types.d.ts +12 -12
  150. package/dist/components/forms/Mention/Mention.utils.js +32 -4
  151. package/dist/components/forms/Radio/Radio.theme.js +1 -1
  152. package/dist/components/forms/RichTextEditor/RichTextEditor.d.ts +18 -0
  153. package/dist/components/forms/RichTextEditor/RichTextEditor.js +1231 -236
  154. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.d.ts +53 -1
  155. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +99 -25
  156. package/dist/components/forms/RichTextEditor/RichTextEditor.types.d.ts +42 -3
  157. package/dist/components/forms/RichTextEditor/index.d.ts +2 -2
  158. package/dist/components/forms/Select/Select.js +2 -2
  159. package/dist/components/forms/Select/Select.theme.js +3 -3
  160. package/dist/components/forms/Slider/Slider.theme.js +1 -1
  161. package/dist/components/forms/Switch/Switch.theme.js +1 -1
  162. package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
  163. package/dist/components/forms/TimePicker/TimePickerContent.js +4 -0
  164. package/dist/components/forms/TimePicker/TimePickerTrigger.js +1 -1
  165. package/dist/components/forms/forms.theme.js +24 -19
  166. package/dist/components/forms/index.js +4 -0
  167. package/dist/components/layout/AppShell/AppShell.d.ts +10 -0
  168. package/dist/components/layout/AppShell/AppShell.js +84 -0
  169. package/dist/components/layout/AppShell/AppShell.theme.d.ts +3 -0
  170. package/dist/components/layout/AppShell/AppShell.theme.js +42 -0
  171. package/dist/components/layout/AppShell/AppShell.types.d.ts +127 -0
  172. package/dist/components/layout/AppShell/AppShellContext.d.ts +14 -0
  173. package/dist/components/layout/AppShell/AppShellContext.js +19 -0
  174. package/dist/components/layout/AppShell/AppShellFooter.d.ts +3 -0
  175. package/dist/components/layout/AppShell/AppShellFooter.js +12 -0
  176. package/dist/components/layout/AppShell/AppShellHeader.d.ts +3 -0
  177. package/dist/components/layout/AppShell/AppShellHeader.js +12 -0
  178. package/dist/components/layout/AppShell/AppShellMain.d.ts +3 -0
  179. package/dist/components/layout/AppShell/AppShellMain.js +19 -0
  180. package/dist/components/layout/AppShell/AppShellRightPanel.d.ts +3 -0
  181. package/dist/components/layout/AppShell/AppShellRightPanel.js +16 -0
  182. package/dist/components/layout/AppShell/AppShellSidebar.d.ts +3 -0
  183. package/dist/components/layout/AppShell/AppShellSidebar.js +16 -0
  184. package/dist/components/layout/AppShell/AppShellTopbar.d.ts +3 -0
  185. package/dist/components/layout/AppShell/AppShellTopbar.js +12 -0
  186. package/dist/components/layout/AppShell/index.d.ts +3 -0
  187. package/dist/components/layout/FormLayout/FormLayout.js +9 -4
  188. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +3 -3
  189. package/dist/components/layout/FormLayout/FormLayoutSection.js +6 -1
  190. package/dist/components/layout/PageLayout/PageLayout.d.ts +2 -2
  191. package/dist/components/layout/PageLayout/PageLayout.js +23 -5
  192. package/dist/components/layout/PageLayout/PageLayout.theme.d.ts +2 -1
  193. package/dist/components/layout/PageLayout/PageLayout.theme.js +35 -6
  194. package/dist/components/layout/PageLayout/PageLayout.types.d.ts +45 -0
  195. package/dist/components/layout/PageLayout/PageLayoutContent.js +6 -4
  196. package/dist/components/layout/PageLayout/PageLayoutHeader.js +3 -3
  197. package/dist/components/layout/PageLayout/PageLayoutSidebar.js +5 -3
  198. package/dist/components/layout/PageLayout/index.d.ts +1 -1
  199. package/dist/components/layout/index.d.ts +1 -0
  200. package/dist/components/layout/index.js +2 -0
  201. package/dist/hooks/useSelectPortal.d.ts +10 -2
  202. package/dist/hooks/useSelectPortal.js +45 -24
  203. package/dist/index.js +8 -2
  204. package/dist/registry.json +10021 -0
  205. package/dist/styles.css +1 -1
  206. package/dist/utils/dateUtils.js +11 -1
  207. package/package.json +4 -2
  208. package/src/global.scss +29 -8
  209. package/src/styles/theme.css +174 -100
  210. package/dist/components/core/Sidebar/SidebarSubmenu.d.ts +0 -7
  211. package/dist/components/core/Sidebar/SidebarSubmenu.js +0 -12
@@ -191,5 +191,15 @@ function getDaysBetween(a, b) {
191
191
  const end = toDate(b);
192
192
  return Math.round((end.getTime() - start.getTime()) / 86400000) + 1;
193
193
  }
194
+ /**
195
+ * Get the ISO week number for a date.
196
+ */
197
+ function getWeekNumber(date) {
198
+ const d = new Date(date);
199
+ d.setHours(0, 0, 0, 0);
200
+ d.setDate(d.getDate() + 3 - ((d.getDay() + 6) % 7));
201
+ const yearStart = new Date(d.getFullYear(), 0, 1);
202
+ return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
203
+ }
194
204
 
195
- export { addDays, formatDateCustom, formatTimestamp, getDaysBetween, getLastMonth, getLastWeek, getThisMonth, getThisWeek, isSameDay, isWeekend, toDate };
205
+ export { addDays, formatDateCustom, formatTimestamp, getDaysBetween, getLastMonth, getLastWeek, getThisMonth, getThisWeek, getWeekNumber, isSameDay, isWeekend, toDate };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flikk/ui",
3
- "version": "1.0.0-beta.25",
3
+ "version": "1.0.0-beta.27",
4
4
  "description": "A modern React component library built with TypeScript, Tailwind CSS v4, and Framer Motion. Follows the shadcn philosophy with complete className override support.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -59,6 +59,7 @@
59
59
  "./tailwind.preset.cjs": "./tailwind.preset.cjs",
60
60
  "./shadcn-compat.css": "./dist/shadcn-compat.css",
61
61
  "./theme.css": "./dist/theme.css",
62
+ "./registry.json": "./dist/registry.json",
62
63
  "./bg/*": "./dist/bg/*"
63
64
  },
64
65
  "files": [
@@ -70,8 +71,9 @@
70
71
  ],
71
72
  "scripts": {
72
73
  "test": "echo \"Error: no test specified\" && exit 1",
73
- "build": "rollup -c && npm run build:css && npm run build:assets && npm run build:copy-css",
74
+ "build": "rollup -c && npm run build:css && npm run build:assets && npm run build:copy-css && npm run build:registry",
74
75
  "build:assets": "cp -r public/bg dist/bg",
76
+ "build:registry": "FLIKK_REGISTRY_OUT=dist/registry.json packages/mcp/node_modules/.bin/tsx packages/mcp/scripts/extract.ts",
75
77
  "build:copy-css": "cp src/shadcn-compat.css dist/shadcn-compat.css && cp src/theme-plugin.css dist/theme.css",
76
78
  "build:css": "tailwindcss -m -i ./src/tailwind-config.css -o ./dist/styles.css",
77
79
  "analyze": "ANALYZE=true rollup -c && open stats.html",
package/src/global.scss CHANGED
@@ -274,14 +274,9 @@
274
274
 
275
275
  /* Global overlay scrollbar styling */
276
276
  @layer base {
277
- :root {
278
- /* Scrollbar styling */
279
- --ui-scrollbar-size: 4px;
280
- --ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
281
- --ui-scrollbar-thumb-active: rgb(209 213 219);
282
- --ui-scrollbar-track-rest: transparent;
283
- --ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
284
- }
277
+ /* Scrollbar token defaults (light + .dark) live in styles/theme.css under
278
+ @layer theme so the dark override actually wins the cascade. See the note
279
+ there. The webkit/Firefox rules below just consume those vars. */
285
280
 
286
281
  * {
287
282
  /* Firefox - use thin scrollbar with custom colors */
@@ -897,6 +892,32 @@ body {
897
892
  input[type="number"] {
898
893
  -moz-appearance: textfield;
899
894
  }
895
+
896
+ /* Style the native search clear (×) button to match the Tag dismiss icon —
897
+ muted by default, darkens on hover. Webkit only (Chrome/Safari/Edge);
898
+ Firefox doesn't render this pseudo-element. */
899
+ input[type="search"]::-webkit-search-cancel-button {
900
+ -webkit-appearance: none;
901
+ appearance: none;
902
+ height: 0.875rem;
903
+ width: 0.875rem;
904
+ margin-left: 0.25rem;
905
+ background-color: var(--color-text-muted);
906
+ cursor: pointer;
907
+ transition: background-color 200ms ease;
908
+ -webkit-mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 18 18 6M6 6l12 12'/></svg>");
909
+ mask-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 18 18 6M6 6l12 12'/></svg>");
910
+ -webkit-mask-size: contain;
911
+ mask-size: contain;
912
+ -webkit-mask-repeat: no-repeat;
913
+ mask-repeat: no-repeat;
914
+ -webkit-mask-position: center;
915
+ mask-position: center;
916
+ }
917
+
918
+ input[type="search"]::-webkit-search-cancel-button:hover {
919
+ background-color: var(--color-text-primary);
920
+ }
900
921
  }
901
922
 
902
923
  /* Heatmap flicker animation */
@@ -88,12 +88,26 @@
88
88
  --color-text-inverse: var(--color-neutral-50);
89
89
 
90
90
  /* generic colors */
91
- --color-border: oklch(90% 0 0);
91
+ --color-border: oklch(93% 0 0);
92
92
  --color-border-secondary: oklch(87% 0 0);
93
+ /* Interaction border (hover/focus-adjacent) — darkens in light for a clear
94
+ edge, mirror of --color-surface-hover but on the border axis. */
95
+ --color-border-hover: oklch(80% 0 0);
96
+ /* Surface elevation ladder: surface-sunken < background (floor) < surface < surface-raised < surface-overlay.
97
+ In light mode raised surfaces are ~white (elevation via shadow + border); sunken is recessed below the floor. */
98
+ --color-surface-sunken: oklch(94% 0 0);
93
99
  --color-surface: oklch(100% 0 0);
100
+ --color-surface-raised: oklch(100% 0 0);
101
+ --color-surface-overlay: oklch(100% 0 0);
102
+ /* Interaction fill (the one tokenized state): translucent tint so it composites correctly
103
+ over ANY surface level — darkens in light, lightens in dark. For hover/active highlights. */
104
+ --color-surface-hover: oklch(0% 0 0 / 0.05);
94
105
  --color-chart-track: rgba(0, 0, 0, 0.06);
95
106
  --color-background: oklch(98.5% 0.002 247.839);
96
- --color-background-secondary: oklch(98.5% 0 0);
107
+ /* DEPRECATED (remove next major): alias of --color-surface. Use the surface ladder. */
108
+ --color-background-secondary: var(--color-surface);
109
+ /* DEPRECATED (remove next major): recessed/subtle fills. Migrate per-usage to --color-surface-sunken
110
+ (dark values below are inverted vs. a correct sunken token, so no blind alias). */
97
111
  --color-background-tertiary: oklch(90% 0.002 247.839);
98
112
  --color-background-quaternary: oklch(85% 0.002 247.839);
99
113
  --color-background-quinary: oklch(80% 0.002 247.839);
@@ -122,26 +136,37 @@
122
136
  --font-weight-extrabold: 800;
123
137
 
124
138
  /* Form element variables — fixed px so they don't scale with root font-size */
125
- --form-min-h-sm: 32px; /* h-8 in Tailwind */
126
- --form-min-h-md: 40px; /* h-10 in Tailwind */
127
- --form-min-h-lg: 48px; /* h-12 in Tailwind */
128
-
129
- --form-label-pb: 8px; /* pb-2 in Tailwind */
130
-
131
- --form-px-sm: 12px; /* px-3 in Tailwind */
132
- --form-px-md: 14px; /* px-3.5 in Tailwind */
133
- --form-px-lg: 16px; /* px-4 in Tailwind */
134
-
135
- --form-py-sm: 8px; /* py-1 in Tailwind */
136
- --form-py-md: 10px; /* py-2 in Tailwind */
137
- --form-py-lg: 12px; /* py-3 in Tailwind */
139
+ --form-min-h-sm: 32px;
140
+ /* h-8 in Tailwind */
141
+ --form-min-h-md: 40px;
142
+ /* h-10 in Tailwind */
143
+ --form-min-h-lg: 48px;
144
+ /* h-12 in Tailwind */
145
+
146
+ --form-label-pb: 8px;
147
+ /* pb-2 in Tailwind */
148
+
149
+ --form-px-sm: 12px;
150
+ /* px-3 in Tailwind */
151
+ --form-px-md: 14px;
152
+ /* px-3.5 in Tailwind */
153
+ --form-px-lg: 16px;
154
+ /* px-4 in Tailwind */
155
+
156
+ --form-py-sm: 8px;
157
+ /* py-1 in Tailwind */
158
+ --form-py-md: 10px;
159
+ /* py-2 in Tailwind */
160
+ --form-py-lg: 12px;
161
+ /* py-3 in Tailwind */
138
162
 
139
163
  /* ============================================
140
164
  BORDER RADIUS SYSTEM
141
165
  Change --radius-base to adjust the entire UI.
142
166
  Individual --*-radius variables can be overridden independently.
143
167
  ============================================ */
144
- --radius-base: 8px; /* Base radius token */
168
+ --radius-base: 8px;
169
+ /* Base radius token */
145
170
 
146
171
  /* Forms & Controls (1x base = 8px) */
147
172
  --form-radius: var(--radius-base);
@@ -208,14 +233,21 @@
208
233
  --segmented-min-h-lg: var(--form-min-h-lg);
209
234
 
210
235
  /* Segmented padding */
211
- --segmented-px-sm: var(--form-px-sm);
212
- --segmented-px-md: var(--form-px-md);
213
- --segmented-px-lg: var(--form-px-lg);
236
+ --segmented-px-sm: 8px;
237
+ --segmented-px-md: 10px;
238
+ --segmented-px-lg: 12px;
214
239
 
215
240
  --segmented-py-sm: var(--form-py-sm);
216
241
  --segmented-py-md: var(--form-py-md);
217
242
  --segmented-py-lg: var(--form-py-lg);
218
243
 
244
+ /* Segmented inner offset — drives wrapper padding AND inner radius so
245
+ the sliding background + items stay concentric with the outer shell.
246
+ border (1px) + padding (--segmented-padding) = total inset. */
247
+ --segmented-padding: 0.125rem;
248
+ /* 2px */
249
+ --segmented-inner-radius: calc(var(--segmented-radius) - var(--segmented-padding) - 1px);
250
+
219
251
  /* Segmented sliding background */
220
252
  --segmented-active-bg: #ffffff;
221
253
  --segmented-active-shadow:
@@ -227,39 +259,46 @@
227
259
  --glass-layer-inner-offset: 1.5px;
228
260
 
229
261
  /* Glass effect gradient variables */
230
- --glass-gradient-outer: linear-gradient(
231
- to bottom,
232
- rgba(250, 250, 250, 0.8) 0%,
233
- rgba(229, 229, 229, 0.8) 30%,
234
- rgba(242, 242, 242, 0.8) 70%,
235
- rgba(250, 250, 250, 0.8) 100%
236
- );
237
- --glass-gradient-inner: linear-gradient(
238
- to bottom,
239
- rgba(242, 242, 242, 0.8) 0%,
240
- rgba(250, 250, 250, 0.8) 100%
241
- );
262
+ --glass-gradient-outer: linear-gradient(to bottom,
263
+ rgba(250, 250, 250, 0.8) 0%,
264
+ rgba(229, 229, 229, 0.8) 30%,
265
+ rgba(242, 242, 242, 0.8) 70%,
266
+ rgba(250, 250, 250, 0.8) 100%);
267
+ --glass-gradient-inner: linear-gradient(to bottom,
268
+ rgba(242, 242, 242, 0.8) 0%,
269
+ rgba(250, 250, 250, 0.8) 100%);
242
270
 
243
271
  /* Chat message variables */
244
272
  --chat-bubble-border-sender: rgba(255, 255, 255, 0.4);
245
273
  --chat-bubble-border-receiver: rgba(255, 255, 255, 1);
246
274
 
247
275
  /* Avatar variables — fixed px */
248
- --avatar-size-xs: 24px; /* size-6 in Tailwind */
249
- --avatar-size-sm: 32px; /* size-8 in Tailwind */
250
- --avatar-size-md: 40px; /* size-10 in Tailwind */
251
- --avatar-size-lg: 48px; /* size-12 in Tailwind */
252
- --avatar-size-xl: 64px; /* size-16 in Tailwind */
276
+ --avatar-size-xs: 24px;
277
+ /* size-6 in Tailwind */
278
+ --avatar-size-sm: 32px;
279
+ /* size-8 in Tailwind */
280
+ --avatar-size-md: 40px;
281
+ /* size-10 in Tailwind */
282
+ --avatar-size-lg: 48px;
283
+ /* size-12 in Tailwind */
284
+ --avatar-size-xl: 64px;
285
+ /* size-16 in Tailwind */
253
286
 
254
287
  /* Avatar radius - now defined in radius system above */
255
288
 
256
289
  /* Carousel Variables */
257
- --carousel-container-width: 100%; /* Full width container */
258
- --carousel-slide-width: 66vw; /* Default slide width - can be overridden */
259
- --carousel-slide-height: 44rem; /* 384px = h-96 */
260
- --carousel-slide-gap: 16px; /* gap between slides */
261
- --carousel-controls-size: 48px; /* control button size */
262
- --carousel-controls-offset: 16px; /* distance from edge */
290
+ --carousel-container-width: 100%;
291
+ /* Full width container */
292
+ --carousel-slide-width: 66vw;
293
+ /* Default slide width - can be overridden */
294
+ --carousel-slide-height: 44rem;
295
+ /* 384px = h-96 */
296
+ --carousel-slide-gap: 16px;
297
+ /* gap between slides */
298
+ --carousel-controls-size: 48px;
299
+ /* control button size */
300
+ --carousel-controls-offset: 16px;
301
+ /* distance from edge */
263
302
 
264
303
  /* Popover variables - radius now defined in radius system above */
265
304
  --popover-shadow:
@@ -278,16 +317,20 @@
278
317
 
279
318
  /* NavItem variables */
280
319
  --nav-item-radius: var(--radius-base);
281
- --nav-item-min-h: 40px; /* h-10 in Tailwind */
320
+ --nav-item-min-h: 40px;
321
+ /* h-10 in Tailwind */
282
322
 
283
323
  /* NavItem padding — fixed px */
284
- --nav-item-px: 12px; /* px-3 in Tailwind */
285
- --nav-item-py: 10px; /* py-2.5 in Tailwind */
324
+ --nav-item-px: 12px;
325
+ /* px-3 in Tailwind */
326
+ --nav-item-py: 10px;
327
+ /* py-2.5 in Tailwind */
286
328
 
287
329
  /* Modal and Drawer */
288
330
  --overlay-bg: rgba(0, 0, 0, 0.65);
289
331
  --overlay-blur: 2px;
290
- --color-scale-background: oklch(0% 0 0); /* backdrop behind scaled content */
332
+ --color-scale-background: oklch(0% 0 0);
333
+ /* backdrop behind scaled content */
291
334
  /* Modal radius - now defined in radius system above */
292
335
 
293
336
  /* Shadow color presets for utility generation */
@@ -325,21 +368,17 @@
325
368
  inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.4),
326
369
  inset -1px -1px 2px rgba(255, 255, 255, 0.3), 0 1px 2px rgba(0, 0, 0, 0.06),
327
370
  0 2px 4px rgba(0, 0, 0, 0.04);
328
- --neu-raised-border: linear-gradient(
329
- 145deg,
330
- rgba(255, 255, 255, 0.7) 0%,
331
- rgba(255, 255, 255, 0.35) 30%,
332
- transparent 50%,
333
- rgba(0, 0, 0, 0.06) 100%
334
- );
335
- --neu-inset-border: linear-gradient(
336
- 180deg,
337
- rgba(0, 0, 0, 0.1) 0%,
338
- rgba(0, 0, 0, 0.04) 25%,
339
- rgba(255, 255, 255, 0.15) 50%,
340
- rgba(255, 255, 255, 0.35) 75%,
341
- rgba(255, 255, 255, 0.5) 100%
342
- );
371
+ --neu-raised-border: linear-gradient(145deg,
372
+ rgba(255, 255, 255, 0.7) 0%,
373
+ rgba(255, 255, 255, 0.35) 30%,
374
+ transparent 50%,
375
+ rgba(0, 0, 0, 0.06) 100%);
376
+ --neu-inset-border: linear-gradient(180deg,
377
+ rgba(0, 0, 0, 0.1) 0%,
378
+ rgba(0, 0, 0, 0.04) 25%,
379
+ rgba(255, 255, 255, 0.15) 50%,
380
+ rgba(255, 255, 255, 0.35) 75%,
381
+ rgba(255, 255, 255, 0.5) 100%);
343
382
  }
344
383
 
345
384
  /* ============================================
@@ -354,18 +393,48 @@
354
393
  Tailwind's generated theme styles.
355
394
  ============================================ */
356
395
  @layer theme {
396
+ /* Scrollbar - light mode defaults.
397
+ These MUST live in @layer theme (not @layer base) alongside the .dark
398
+ override below. The layer order is `theme, base, ...`, so values in
399
+ @layer base win over @layer theme — if these defaults sat in base, the
400
+ .dark override here would never apply and the scrollbar would render with
401
+ the light (bright) thumb in dark mode. Keeping both in @layer theme means
402
+ the .dark block (later source order, equal specificity) wins. */
403
+ :root {
404
+ /* Tell the UA which palette to paint native chrome (scrollbars, form
405
+ controls, etc.). Our custom `::-webkit-scrollbar` track/thumb are mostly
406
+ transparent, so without this the browser composites its *default light*
407
+ scrollbar underneath — in dark mode the visible (active) track then reads
408
+ as an opaque white bar showing through the faint dark tint. `.dark` flips
409
+ this to `dark` below so the UA scrollbar matches the surface. */
410
+ color-scheme: light;
411
+ --ui-scrollbar-size: 4px;
412
+ --ui-scrollbar-thumb-rest: rgba(209, 213, 219, 0.3);
413
+ --ui-scrollbar-thumb-active: rgb(209 213 219);
414
+ --ui-scrollbar-track-rest: transparent;
415
+ --ui-scrollbar-track-active: rgba(209, 213, 219, 0.1);
416
+ }
417
+
357
418
  .dark {
419
+ /* Paint native UA chrome (scrollbars, form controls) with the dark palette.
420
+ Pairs with `color-scheme: light` on :root — fixes the white native
421
+ scrollbar track that showed through our transparent custom track in dark
422
+ mode (Select, RichTextEditor dropdowns, any native-overflow surface). */
423
+ color-scheme: dark;
424
+
358
425
  /* Text colors - inverted for dark backgrounds */
359
426
 
427
+ /* Neutral text ramp (Linear's text reads essentially neutral off-white;
428
+ slate was too blue against the low-chroma surfaces). */
360
429
  --color-text-primary: var(--color-neutral-50);
361
430
  --color-text-secondary: var(--color-neutral-400);
362
431
  --color-text-placeholder: var(--color-neutral-600);
363
- --color-text-muted: var(--color-neutral-500);
432
+ --color-text-muted: var(--color-neutral-600);
364
433
  --color-text-disabled: var(--color-neutral-400);
365
434
  --color-text-inverse: var(--color-neutral-950);
366
435
 
367
436
  /* Base theme colors */
368
- --color-primary: var(--color-primary-600);
437
+ --color-primary: var(--color-primary-400);
369
438
  --color-success: var(--color-success-400);
370
439
  --color-warning: var(--color-warning-400);
371
440
  --color-danger: var(--color-danger-400);
@@ -379,39 +448,48 @@
379
448
  --color-secondary-contrast: var(--color-neutral-50);
380
449
 
381
450
  /* Background colors - dark equivalents */
382
- --color-surface: oklch(14.5% 0 0);
383
- --color-background: oklch(14.5% 0 0);
384
- --color-background-secondary: oklch(18% 0 0);
451
+ /* Surface elevation ladder: sunken sits below the floor; surface levels ascend so each reads as raised. */
452
+ /* Linear-mapped: near-black floor with a *faint* cool tint (chroma ~0.004,
453
+ far subtler than slate — closest to Linear's #08090a / #1c1d20 grays). */
454
+ --color-surface-sunken: oklch(11% 0.004 255);
455
+ --color-surface: oklch(17% 0.004 255);
456
+ --color-surface-raised: oklch(20% 0.004 255);
457
+ --color-surface-overlay: oklch(23% 0.005 255);
458
+ --color-surface-hover: oklch(100% 0 0 / 0.07);
459
+ --color-background: oklch(12.5% 0.004 255);
460
+ /* DEPRECATED (remove next major): alias of --color-surface. */
461
+ --color-background-secondary: var(--color-surface);
462
+ /* DEPRECATED (remove next major): migrate per-usage to --color-surface-sunken / surface ladder. */
385
463
  --color-background-tertiary: oklch(22% 0 0);
386
464
  --color-background-quaternary: oklch(26% 0 0);
387
465
  --color-background-quinary: oklch(30% 0 0);
388
466
  --color-background-disabled: var(--color-neutral-800);
389
467
 
390
468
  /* Scale backdrop */
391
- --color-scale-background: oklch(8% 0 0);
392
-
393
- /* Border - darker for dark mode */
394
- --color-border: oklch(30% 0 0 / 0.8);
395
- --color-border-secondary: oklch(35% 0 0 / 0.8);
469
+ --color-scale-background: oklch(8% 0.004 255);
470
+
471
+ /* Border - Linear-style subtle light hairline (a faint lift that catches
472
+ light on the dark surface, rather than a flat mid-gray line). */
473
+ --color-border: oklch(100% 0.01 255 / 0.05);
474
+ --color-border-secondary: oklch(100% 0.01 255 / 0.10);
475
+ /* Interaction border — lightens in dark (higher alpha) so an edge "lifts"
476
+ on hover, matching the --color-surface-hover lighten-in-dark behavior. */
477
+ --color-border-hover: oklch(100% 0.01 255 / 0.18);
396
478
  --color-chart-track: rgba(255, 255, 255, 0.05);
397
479
 
398
480
  /* Glass effect gradients - dark mode */
399
- --glass-gradient-outer: linear-gradient(
400
- 135deg,
401
- var(--color-background-tertiary) 0%,
402
- var(--color-background-secondary) 30%,
403
- var(--color-background) 70%,
404
- var(--color-background-tertiary) 100%
405
- );
406
- --glass-gradient-inner: linear-gradient(
407
- to bottom,
408
- var(--color-background-secondary) 0%,
409
- var(--color-background) 100%
410
- );
481
+ --glass-gradient-outer: linear-gradient(135deg,
482
+ var(--color-background-tertiary) 0%,
483
+ var(--color-background-secondary) 30%,
484
+ var(--color-background) 70%,
485
+ var(--color-background-tertiary) 100%);
486
+ --glass-gradient-inner: linear-gradient(to bottom,
487
+ var(--color-background-secondary) 0%,
488
+ var(--color-background) 100%);
411
489
 
412
490
  /* Scrollbar - dark mode */
413
491
  --ui-scrollbar-thumb-rest: rgba(75, 85, 99, 0.3);
414
- --ui-scrollbar-thumb-active: rgb(75 85 99);
492
+ --ui-scrollbar-thumb-active: rgb(75 85 99, 0.75);
415
493
  --ui-scrollbar-track-rest: transparent;
416
494
  --ui-scrollbar-track-active: rgba(55, 65, 81, 0.1);
417
495
 
@@ -444,20 +522,16 @@
444
522
  inset -0.5px -0.5px 1px rgba(255, 255, 255, 0.04),
445
523
  inset -1px -1px 2px rgba(255, 255, 255, 0.03),
446
524
  0 1px 2px rgba(0, 0, 0, 0.25), 0 2px 4px rgba(0, 0, 0, 0.2);
447
- --neu-raised-border: linear-gradient(
448
- 145deg,
449
- rgba(255, 255, 255, 0.2) 0%,
450
- rgba(255, 255, 255, 0.08) 30%,
451
- transparent 50%,
452
- rgba(0, 0, 0, 0.12) 100%
453
- );
454
- --neu-inset-border: linear-gradient(
455
- 180deg,
456
- rgba(0, 0, 0, 0.4) 0%,
457
- rgba(0, 0, 0, 0.15) 25%,
458
- rgba(255, 255, 255, 0.03) 50%,
459
- rgba(255, 255, 255, 0.08) 75%,
460
- rgba(255, 255, 255, 0.12) 100%
461
- );
525
+ --neu-raised-border: linear-gradient(145deg,
526
+ rgba(255, 255, 255, 0.2) 0%,
527
+ rgba(255, 255, 255, 0.08) 30%,
528
+ transparent 50%,
529
+ rgba(0, 0, 0, 0.12) 100%);
530
+ --neu-inset-border: linear-gradient(180deg,
531
+ rgba(0, 0, 0, 0.4) 0%,
532
+ rgba(0, 0, 0, 0.15) 25%,
533
+ rgba(255, 255, 255, 0.03) 50%,
534
+ rgba(255, 255, 255, 0.08) 75%,
535
+ rgba(255, 255, 255, 0.12) 100%);
462
536
  }
463
- }
537
+ }
@@ -1,7 +0,0 @@
1
- import React from "react";
2
- export interface SidebarSubmenuProps {
3
- children: React.ReactNode;
4
- isOpen: boolean;
5
- className?: string;
6
- }
7
- export declare const SidebarSubmenu: ({ children, isOpen, className, }: SidebarSubmenuProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,12 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { AnimatePresence, motion } from 'motion/react';
3
- import { cn } from '../../../utils/cn.js';
4
-
5
- const SidebarSubmenu = ({ children, isOpen, className, }) => {
6
- return (jsx(AnimatePresence, { initial: false, children: isOpen && (jsx(motion.div, { initial: "collapsed", animate: "open", exit: "collapsed", variants: {
7
- open: { opacity: 1, height: "auto" },
8
- collapsed: { opacity: 0, height: 0 },
9
- }, transition: { duration: 0.2, ease: "easeInOut" }, className: cn("overflow-hidden", className), children: children })) }));
10
- };
11
-
12
- export { SidebarSubmenu };