doom-design-system 0.5.0 → 0.6.0

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/Accordion/Accordion.module.css +121 -124
  2. package/dist/components/ActionRow/ActionRow.module.css +25 -24
  3. package/dist/components/Alert/Alert.module.css +74 -76
  4. package/dist/components/Avatar/Avatar.module.css +66 -66
  5. package/dist/components/Badge/Badge.module.css +50 -48
  6. package/dist/components/Breadcrumbs/Breadcrumbs.module.css +32 -33
  7. package/dist/components/Button/Button.d.ts +2 -2
  8. package/dist/components/Button/Button.js +1 -1
  9. package/dist/components/Button/Button.module.css +150 -152
  10. package/dist/components/Card/Card.module.css +37 -39
  11. package/dist/components/Chart/Chart.module.css +213 -245
  12. package/dist/components/Chart/behaviors/DraggablePuck.d.ts +36 -0
  13. package/dist/components/Chart/behaviors/DraggablePuck.js +94 -0
  14. package/dist/components/Chart/behaviors/Markers.js +6 -4
  15. package/dist/components/Chart/behaviors/SelectionUpdate.js +2 -4
  16. package/dist/components/Chart/behaviors/index.d.ts +1 -1
  17. package/dist/components/Chart/behaviors/index.js +1 -1
  18. package/dist/components/Chart/engine/CoordinateSystem.d.ts +59 -0
  19. package/dist/components/Chart/engine/CoordinateSystem.js +126 -0
  20. package/dist/components/Chart/engine/Engine.d.ts +102 -0
  21. package/dist/components/Chart/engine/Engine.js +226 -0
  22. package/dist/components/Chart/engine/Scheduler.d.ts +59 -0
  23. package/dist/components/Chart/engine/Scheduler.js +139 -0
  24. package/dist/components/Chart/engine/SpatialMap.d.ts +114 -0
  25. package/dist/components/Chart/engine/SpatialMap.js +270 -0
  26. package/dist/components/Chart/engine/index.d.ts +13 -0
  27. package/dist/components/Chart/engine/index.js +9 -0
  28. package/dist/components/Chart/engine/types.d.ts +137 -0
  29. package/dist/components/Chart/engine/types.js +47 -0
  30. package/dist/components/Chart/hooks/useEngine.d.ts +43 -0
  31. package/dist/components/Chart/hooks/useEngine.js +128 -0
  32. package/dist/components/Chart/sensors/DataHoverSensor/DataHoverSensor.d.ts +17 -19
  33. package/dist/components/Chart/sensors/DataHoverSensor/DataHoverSensor.js +38 -51
  34. package/dist/components/Chart/sensors/DragSensor/DragSensor.d.ts +38 -0
  35. package/dist/components/Chart/sensors/DragSensor/DragSensor.js +105 -0
  36. package/dist/components/Chart/sensors/DragSensor/index.d.ts +2 -0
  37. package/dist/components/Chart/sensors/DragSensor/index.js +1 -0
  38. package/dist/components/Chart/sensors/{KeyboardSensor.d.ts → KeyboardSensor/KeyboardSensor.d.ts} +1 -1
  39. package/dist/components/Chart/sensors/KeyboardSensor/KeyboardSensor.js +86 -0
  40. package/dist/components/Chart/sensors/KeyboardSensor/index.d.ts +1 -0
  41. package/dist/components/Chart/sensors/KeyboardSensor/index.js +1 -0
  42. package/dist/components/Chart/sensors/{SelectionSensor.d.ts → SelectionSensor/SelectionSensor.d.ts} +2 -2
  43. package/dist/components/Chart/sensors/SelectionSensor/SelectionSensor.js +39 -0
  44. package/dist/components/Chart/sensors/SelectionSensor/index.d.ts +1 -0
  45. package/dist/components/Chart/sensors/SelectionSensor/index.js +1 -0
  46. package/dist/components/Chart/sensors/SensorManager/SensorManager.js +36 -41
  47. package/dist/components/Chart/sensors/index.d.ts +1 -0
  48. package/dist/components/Chart/sensors/index.js +3 -2
  49. package/dist/components/Chart/sensors/utils/search.d.ts +1 -1
  50. package/dist/components/Chart/sensors/utils/search.js +25 -4
  51. package/dist/components/Chart/state/store/chart.store.js +18 -0
  52. package/dist/components/Chart/state/store/slices/series.slice.d.ts +1 -0
  53. package/dist/components/Chart/state/store/slices/series.slice.js +3 -2
  54. package/dist/components/Chart/subcomponents/Axis/Axis.module.css +32 -33
  55. package/dist/components/Chart/subcomponents/BarSeries/BarSeries.js +6 -1
  56. package/dist/components/Chart/subcomponents/BarSeries/BarSeries.module.css +11 -9
  57. package/dist/components/Chart/subcomponents/Cursor/Cursor.js +8 -1
  58. package/dist/components/Chart/subcomponents/Cursor/Cursor.module.css +14 -13
  59. package/dist/components/Chart/subcomponents/CustomSeries/CustomSeries.js +4 -0
  60. package/dist/components/Chart/subcomponents/CustomSeries/CustomSeries.module.css +5 -3
  61. package/dist/components/Chart/subcomponents/Footer/Footer.module.css +5 -3
  62. package/dist/components/Chart/subcomponents/Grid/Grid.module.css +12 -11
  63. package/dist/components/Chart/subcomponents/Header/Header.module.css +8 -7
  64. package/dist/components/Chart/subcomponents/InteractionLayer/InteractionLayer.d.ts +4 -4
  65. package/dist/components/Chart/subcomponents/InteractionLayer/InteractionLayer.js +39 -76
  66. package/dist/components/Chart/subcomponents/Legend/Legend.module.css +30 -32
  67. package/dist/components/Chart/subcomponents/LineSeries/LineSeries.js +9 -3
  68. package/dist/components/Chart/subcomponents/LineSeries/LineSeries.module.css +21 -21
  69. package/dist/components/Chart/subcomponents/Root/Root.js +113 -7
  70. package/dist/components/Chart/subcomponents/Root/Root.module.css +70 -82
  71. package/dist/components/Chart/subcomponents/ScatterSeries/ScatterSeries.js +6 -1
  72. package/dist/components/Chart/subcomponents/ScatterSeries/ScatterSeries.module.css +7 -5
  73. package/dist/components/Chart/subcomponents/Series/Series.module.css +118 -128
  74. package/dist/components/Chart/subcomponents/SeriesPoint/SeriesPoint.module.css +10 -8
  75. package/dist/components/Chart/subcomponents/Tooltip/Tooltip.js +2 -3
  76. package/dist/components/Chart/subcomponents/Tooltip/Tooltip.module.css +52 -67
  77. package/dist/components/Chart/types/context.d.ts +9 -0
  78. package/dist/components/Chart/types/events.d.ts +5 -7
  79. package/dist/components/Chart/types/interaction.d.ts +24 -2
  80. package/dist/components/Chart/types/interaction.js +1 -0
  81. package/dist/components/Checkbox/Checkbox.module.css +57 -59
  82. package/dist/components/Chip/Chip.module.css +105 -115
  83. package/dist/components/Combobox/Combobox.d.ts +2 -1
  84. package/dist/components/Combobox/Combobox.js +2 -2
  85. package/dist/components/Combobox/Combobox.module.css +233 -210
  86. package/dist/components/CopyButton/CopyButton.module.css +84 -90
  87. package/dist/components/Drawer/Drawer.module.css +126 -145
  88. package/dist/components/Dropdown/Dropdown.d.ts +3 -1
  89. package/dist/components/Dropdown/Dropdown.js +3 -3
  90. package/dist/components/Dropdown/Dropdown.module.css +52 -32
  91. package/dist/components/FileUpload/FileUpload.js +24 -0
  92. package/dist/components/FileUpload/FileUpload.module.css +295 -313
  93. package/dist/components/Form/Form.module.css +35 -39
  94. package/dist/components/Image/Image.module.css +53 -54
  95. package/dist/components/Input/Input.d.ts +4 -2
  96. package/dist/components/Input/Input.js +2 -2
  97. package/dist/components/Input/Input.module.css +135 -119
  98. package/dist/components/Label/Label.module.css +17 -15
  99. package/dist/components/Layout/Layout.module.css +95 -111
  100. package/dist/components/Link/Link.module.css +67 -65
  101. package/dist/components/Modal/Modal.module.css +112 -132
  102. package/dist/components/Page/Page.module.css +21 -21
  103. package/dist/components/Pagination/Pagination.module.css +56 -56
  104. package/dist/components/Popover/Popover.module.css +17 -16
  105. package/dist/components/ProgressBar/ProgressBar.module.css +36 -37
  106. package/dist/components/RadioGroup/RadioGroup.module.css +74 -77
  107. package/dist/components/Select/Select.d.ts +2 -1
  108. package/dist/components/Select/Select.js +2 -2
  109. package/dist/components/Select/Select.module.css +133 -98
  110. package/dist/components/Sheet/Sheet.module.css +134 -154
  111. package/dist/components/Sidebar/Sidebar.module.css +72 -74
  112. package/dist/components/Sidebar/subcomponents/Footer/Footer.module.css +7 -5
  113. package/dist/components/Sidebar/subcomponents/Group/Group.module.css +80 -85
  114. package/dist/components/Sidebar/subcomponents/Header/Header.module.css +12 -10
  115. package/dist/components/Sidebar/subcomponents/Item/Item.module.css +54 -55
  116. package/dist/components/Sidebar/subcomponents/MobileOverlay/MobileOverlay.module.css +38 -38
  117. package/dist/components/Sidebar/subcomponents/MobileTrigger/MobileTrigger.module.css +5 -3
  118. package/dist/components/Sidebar/subcomponents/Nav/Nav.module.css +13 -11
  119. package/dist/components/Sidebar/subcomponents/Rail/Rail.module.css +62 -63
  120. package/dist/components/Sidebar/subcomponents/Section/Section.module.css +86 -91
  121. package/dist/components/Skeleton/Skeleton.module.css +28 -26
  122. package/dist/components/Slat/Slat.module.css +93 -94
  123. package/dist/components/Slider/Slider.module.css +116 -121
  124. package/dist/components/Spinner/Spinner.module.css +28 -27
  125. package/dist/components/SplitButton/SplitButton.d.ts +3 -1
  126. package/dist/components/SplitButton/SplitButton.js +2 -2
  127. package/dist/components/SplitButton/SplitButton.module.css +104 -87
  128. package/dist/components/Switch/Switch.module.css +64 -63
  129. package/dist/components/Table/FilterBuilder/FilterBuilder.module.css +36 -36
  130. package/dist/components/Table/FilterBuilder/FilterConditionRow.js +1 -1
  131. package/dist/components/Table/FilterBuilder/FilterConditionRow.module.css +21 -22
  132. package/dist/components/Table/FilterBuilder/FilterGroup.js +4 -4
  133. package/dist/components/Table/FilterBuilder/FilterGroup.module.css +355 -389
  134. package/dist/components/Table/FilterBuilder/FilterSheet.module.css +68 -71
  135. package/dist/components/Table/Table.d.ts +4 -2
  136. package/dist/components/Table/Table.js +50 -13
  137. package/dist/components/Table/Table.module.css +210 -188
  138. package/dist/components/Table/TableHeaderFilter.js +1 -1
  139. package/dist/components/Table/TableHeaderFilter.module.css +51 -57
  140. package/dist/components/Tabs/Tabs.module.css +79 -80
  141. package/dist/components/Text/Text.module.css +108 -131
  142. package/dist/components/Textarea/Textarea.d.ts +3 -1
  143. package/dist/components/Textarea/Textarea.js +2 -2
  144. package/dist/components/Textarea/Textarea.module.css +114 -94
  145. package/dist/components/Toast/Toast.module.css +82 -82
  146. package/dist/components/Tooltip/Tooltip.module.css +17 -16
  147. package/dist/styles/globals.css +1677 -1691
  148. package/dist/styles/palettes.d.ts +0 -5
  149. package/dist/styles/palettes.js +0 -8
  150. package/dist/styles/themes/definitions.d.ts +0 -8
  151. package/dist/styles/themes/definitions.js +117 -5
  152. package/dist/styles/types.d.ts +2 -0
  153. package/dist/styles/types.js +1 -0
  154. package/dist/tsconfig.build.tsbuildinfo +1 -1
  155. package/package.json +4 -4
  156. package/.agent/skills/doom/a2ui/a2ui-examples.md +0 -289
  157. package/.agent/skills/doom/a2ui/a2ui-principles.md +0 -49
  158. package/.agent/skills/doom/a2ui/a2ui-protocol.md +0 -191
  159. package/.agent/skills/doom/components/a2ui.md +0 -46
  160. package/.agent/skills/doom/components/accordion.md +0 -44
  161. package/.agent/skills/doom/components/actionrow.md +0 -33
  162. package/.agent/skills/doom/components/alert.md +0 -35
  163. package/.agent/skills/doom/components/avatar.md +0 -36
  164. package/.agent/skills/doom/components/badge.md +0 -29
  165. package/.agent/skills/doom/components/breadcrumbs.md +0 -33
  166. package/.agent/skills/doom/components/button.md +0 -43
  167. package/.agent/skills/doom/components/card.md +0 -41
  168. package/.agent/skills/doom/components/chart.md +0 -106
  169. package/.agent/skills/doom/components/checkbox.md +0 -38
  170. package/.agent/skills/doom/components/chip.md +0 -35
  171. package/.agent/skills/doom/components/combobox.md +0 -50
  172. package/.agent/skills/doom/components/copybutton.md +0 -41
  173. package/.agent/skills/doom/components/drawer.md +0 -69
  174. package/.agent/skills/doom/components/dropdown.md +0 -33
  175. package/.agent/skills/doom/components/fileupload.md +0 -49
  176. package/.agent/skills/doom/components/form.md +0 -55
  177. package/.agent/skills/doom/components/icon.md +0 -47
  178. package/.agent/skills/doom/components/image.md +0 -48
  179. package/.agent/skills/doom/components/input.md +0 -54
  180. package/.agent/skills/doom/components/label.md +0 -32
  181. package/.agent/skills/doom/components/layout.md +0 -92
  182. package/.agent/skills/doom/components/link.md +0 -39
  183. package/.agent/skills/doom/components/modal.md +0 -71
  184. package/.agent/skills/doom/components/page.md +0 -41
  185. package/.agent/skills/doom/components/pagination.md +0 -32
  186. package/.agent/skills/doom/components/popover.md +0 -45
  187. package/.agent/skills/doom/components/progressbar.md +0 -37
  188. package/.agent/skills/doom/components/radiogroup.md +0 -45
  189. package/.agent/skills/doom/components/select.md +0 -43
  190. package/.agent/skills/doom/components/sheet.md +0 -71
  191. package/.agent/skills/doom/components/sidebar.md +0 -92
  192. package/.agent/skills/doom/components/skeleton.md +0 -35
  193. package/.agent/skills/doom/components/slat.md +0 -46
  194. package/.agent/skills/doom/components/slider.md +0 -51
  195. package/.agent/skills/doom/components/spinner.md +0 -34
  196. package/.agent/skills/doom/components/splitbutton.md +0 -35
  197. package/.agent/skills/doom/components/switch.md +0 -40
  198. package/.agent/skills/doom/components/table.md +0 -82
  199. package/.agent/skills/doom/components/tabs.md +0 -65
  200. package/.agent/skills/doom/components/text.md +0 -42
  201. package/.agent/skills/doom/components/textarea.md +0 -46
  202. package/.agent/skills/doom/components/toast.md +0 -59
  203. package/.agent/skills/doom/components/tooltip.md +0 -35
  204. package/.agent/skills/doom/index.md +0 -167
  205. package/.agent/skills/doom/styles/aesthetic.md +0 -151
  206. package/.agent/skills/doom/styles/css-variables.md +0 -80
  207. package/.agent/skills/doom/styles/mixins.md +0 -97
  208. package/.agent/skills/doom/styles/tokens.md +0 -129
  209. package/.agent/skills/doom/styles/utilities.md +0 -84
  210. package/dist/components/Chart/sensors/KeyboardSensor.js +0 -82
  211. package/dist/components/Chart/sensors/SelectionSensor.js +0 -41
@@ -1,146 +1,127 @@
1
- .overlay {
2
- position: fixed;
3
- inset: 0;
4
- background-color: rgba(0, 0, 0, var(--overlay-opacity));
5
- backdrop-filter: blur(var(--blur-standard));
6
- opacity: 0;
7
- visibility: hidden;
8
- transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;
9
- pointer-events: none;
10
- z-index: var(--z-overlay);
11
- }
12
- .overlay.isOpen {
13
- opacity: 1;
14
- visibility: visible;
15
- pointer-events: auto;
16
- }
17
-
18
- .panel {
19
- position: fixed;
20
- background-color: var(--card-bg);
21
- z-index: var(--z-drawer);
22
- display: flex;
23
- flex-direction: column;
24
- transition: transform var(--duration-normal) var(--ease-in-out), visibility var(--duration-normal) var(--ease-in-out);
25
- top: 0;
26
- bottom: 0;
27
- width: 100%;
28
- max-width: var(--drawer-width);
29
- visibility: hidden;
30
- border: var(--border-width) solid var(--card-border);
31
- }
32
- .panel.left {
33
- left: 0;
34
- /* Remove border on the edge touching the screen */
35
- border-left: 0;
36
- /* Standard directional shadow for left-anchored panel */
37
- /* Bottom-Right shadow for left-anchored elements */
38
- box-shadow: var(--spacing-2) var(--spacing-2) 0 0 var(--shadow-base);
39
- border-top-right-radius: var(--radius);
40
- border-bottom-right-radius: var(--radius);
41
- transform: translateX(calc(-100% - 20px));
42
- }
43
- .panel.right {
44
- right: 0;
45
- /* Remove border on the edge touching the screen */
46
- border-right: 0;
47
- /* Standard directional shadow for right-anchored panel */
48
- /* Bottom-Left shadow for right-anchored elements */
49
- box-shadow: calc(-1 * var(--spacing-2)) var(--spacing-2) 0 0 var(--shadow-base);
50
- border-top-left-radius: var(--radius);
51
- border-bottom-left-radius: var(--radius);
52
- transform: translateX(calc(100% + 20px));
53
- }
54
- .panel.isOpen {
55
- visibility: visible;
56
- transform: translateX(0);
57
- }
58
- .panel.solid {
59
- /* ROOT CONTEXT (The Field) */
60
- background-color: var(--solid-bg);
61
- color: var(--solid-fg);
62
- /* Root Variables */
63
- --background: var(--solid-bg);
64
- --foreground: var(--solid-fg);
65
- --muted-foreground: color-mix(in srgb, var(--solid-fg) 70%, transparent);
66
- /*
67
- * Standardized Brand Surface Logic
68
- * Decouples Modals (Surface) from Buttons (Action)
69
- */
70
- --surface-brand: var(--solid-bg);
71
- --surface-brand-foreground: var(--solid-fg);
72
- /* SEMANTICS (True Semantic Colors) */
73
- --success: var(--solid-success);
74
- --success-foreground: var(--solid-fg);
75
- --error: var(--solid-error);
76
- --error-foreground: var(--solid-fg);
77
- --warning: var(--solid-warning);
78
- --warning-foreground: var(--solid-fg);
79
- /* SURFACE COLORS */
80
- --on-surface: var(--solid-bg);
81
- --on-surface-muted: var(--solid-bg);
82
- /* COMPONENT TOKENS */
83
- --card-bg: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
84
- --card-border: var(--solid-fg);
85
- --card-foreground: var(--solid-fg);
86
- /* POPOVER TOKENS */
87
- --popover: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
88
- --popover-foreground: var(--solid-bg);
89
- /* INPUT TOKENS */
90
- --input: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
91
- --border-strong: var(--solid-fg);
92
- /* BUTTON TOKENS */
93
- --primary: var(--solid-fg);
94
- --primary-foreground: var(--solid-bg);
95
- /* SECONDARY TOKENS */
96
- --secondary: color-mix(in srgb, var(--solid-bg) 90%, transparent);
97
- --secondary-foreground: var(--solid-fg);
98
- /* MUTED TOKENS */
99
- --muted: color-mix(in srgb, var(--solid-fg) 20%, transparent);
100
- }
101
- .panel.solid .header {
102
- background-color: transparent !important;
103
- color: var(--solid-fg);
104
- }
105
- .panel.solid .content,
106
- .panel.solid .footer {
107
- background-color: transparent !important;
108
- }
109
-
110
- .header {
111
- padding: var(--spacing-6);
112
- background-color: var(--primary);
113
- color: var(--primary-foreground);
114
- border-bottom: var(--border-width) solid var(--border-strong);
115
- display: flex;
116
- justify-content: space-between;
117
- align-items: center;
118
- flex-shrink: 0;
119
- }
120
-
121
- .title {
122
- margin: 0;
123
- font-family: var(--font-heading);
124
- font-size: var(--text-xl);
125
- font-weight: 800;
126
- min-height: var(--header-height);
127
- text-transform: uppercase;
128
- letter-spacing: 0.05em;
129
- }
130
-
131
- .content {
132
- flex: 1;
133
- padding: var(--spacing-6);
134
- overflow-y: auto;
135
- background-color: var(--card-bg);
136
- }
137
-
138
- .footer {
139
- padding: var(--spacing-6);
140
- border-top: var(--border-width) solid var(--border-strong);
141
- display: flex;
142
- justify-content: flex-end;
143
- gap: var(--spacing-4);
144
- background-color: var(--card-bg);
145
- flex-shrink: 0;
1
+ @layer doom.components {
2
+ .overlay {
3
+ position: fixed;
4
+ inset: 0;
5
+ background-color: rgba(0, 0, 0, var(--overlay-opacity));
6
+ backdrop-filter: blur(var(--blur-standard));
7
+ opacity: 0;
8
+ visibility: hidden;
9
+ transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;
10
+ pointer-events: none;
11
+ z-index: var(--z-overlay);
12
+ }
13
+ .overlay.isOpen {
14
+ opacity: 1;
15
+ visibility: visible;
16
+ pointer-events: auto;
17
+ }
18
+ .panel {
19
+ position: fixed;
20
+ background-color: var(--card-bg);
21
+ z-index: var(--z-drawer);
22
+ display: flex;
23
+ flex-direction: column;
24
+ transition: transform var(--duration-normal) var(--ease-in-out), visibility var(--duration-normal) var(--ease-in-out);
25
+ top: 0;
26
+ bottom: 0;
27
+ width: 100%;
28
+ max-width: var(--drawer-width);
29
+ visibility: hidden;
30
+ border: var(--surface-border-width) solid var(--card-border);
31
+ }
32
+ .panel.left {
33
+ left: 0;
34
+ /* Remove border on the edge touching the screen */
35
+ border-left: 0;
36
+ /* Standard directional shadow for left-anchored panel */
37
+ box-shadow: var(--space-2) var(--space-2) 0 0 var(--shadow-base);
38
+ border-top-right-radius: var(--surface-radius);
39
+ border-bottom-right-radius: var(--surface-radius);
40
+ transform: translateX(calc(-100% - 20px));
41
+ }
42
+ .panel.right {
43
+ right: 0;
44
+ /* Remove border on the edge touching the screen */
45
+ border-right: 0;
46
+ /* Standard directional shadow for right-anchored panel */
47
+ box-shadow: calc(-1 * var(--space-2)) var(--space-2) 0 0 var(--shadow-base);
48
+ border-top-left-radius: var(--surface-radius);
49
+ border-bottom-left-radius: var(--surface-radius);
50
+ transform: translateX(calc(100% + 20px));
51
+ }
52
+ .panel.isOpen {
53
+ visibility: visible;
54
+ transform: translateX(0);
55
+ }
56
+ .panel.solid {
57
+ background-color: var(--solid-bg);
58
+ color: var(--solid-fg);
59
+ --background: var(--solid-bg);
60
+ --foreground: var(--solid-fg);
61
+ --muted-foreground: color-mix(in srgb, var(--solid-fg) 70%, transparent);
62
+ --surface-brand: var(--solid-bg);
63
+ --surface-brand-foreground: var(--solid-fg);
64
+ --success: var(--solid-success);
65
+ --success-foreground: var(--solid-fg);
66
+ --error: var(--solid-error);
67
+ --error-foreground: var(--solid-fg);
68
+ --warning: var(--solid-warning);
69
+ --warning-foreground: var(--solid-fg);
70
+ --on-surface: var(--solid-bg);
71
+ --on-surface-muted: var(--solid-bg);
72
+ --card-bg: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
73
+ --card-border: var(--solid-fg);
74
+ --card-foreground: var(--solid-fg);
75
+ --popover: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
76
+ --popover-foreground: var(--solid-bg);
77
+ --input: color-mix(in srgb, var(--solid-fg) 95%, var(--solid-bg) 5%);
78
+ --border-strong: var(--solid-fg);
79
+ --primary: var(--solid-fg);
80
+ --primary-foreground: var(--solid-bg);
81
+ --secondary: color-mix(in srgb, var(--solid-bg) 90%, transparent);
82
+ --secondary-foreground: var(--solid-fg);
83
+ --muted: color-mix(in srgb, var(--solid-fg) 20%, transparent);
84
+ }
85
+ .panel.solid .header {
86
+ background-color: transparent !important;
87
+ color: var(--solid-fg);
88
+ }
89
+ .panel.solid .content,
90
+ .panel.solid .footer {
91
+ background-color: transparent !important;
92
+ }
93
+ .header {
94
+ padding: var(--surface-padding);
95
+ background-color: var(--primary);
96
+ color: var(--primary-foreground);
97
+ border-bottom: var(--surface-border-width) solid var(--border-strong);
98
+ display: flex;
99
+ justify-content: space-between;
100
+ align-items: center;
101
+ flex-shrink: 0;
102
+ }
103
+ .title {
104
+ margin: 0;
105
+ font-family: var(--font-heading);
106
+ font-size: var(--text-xl);
107
+ font-weight: 800;
108
+ min-height: var(--header-height);
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.05em;
111
+ }
112
+ .content {
113
+ flex: 1;
114
+ padding: var(--surface-padding);
115
+ overflow-y: auto;
116
+ background-color: var(--card-bg);
117
+ }
118
+ .footer {
119
+ padding: var(--surface-padding);
120
+ border-top: var(--surface-border-width) solid var(--border-strong);
121
+ display: flex;
122
+ justify-content: flex-end;
123
+ gap: var(--space-3);
124
+ background-color: var(--card-bg);
125
+ flex-shrink: 0;
126
+ }
146
127
  }
@@ -1,3 +1,4 @@
1
+ import type { ControlSize } from "../../styles/types";
1
2
  interface DropdownItemType {
2
3
  label: string;
3
4
  onClick: () => void;
@@ -6,7 +7,8 @@ interface DropdownProps {
6
7
  triggerLabel: string;
7
8
  items: DropdownItemType[];
8
9
  variant?: "primary" | "secondary";
10
+ size?: ControlSize;
9
11
  className?: string;
10
12
  }
11
- export declare function Dropdown({ triggerLabel, items, variant, className, }: DropdownProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function Dropdown({ triggerLabel, items, variant, size, className, }: DropdownProps): import("react/jsx-runtime").JSX.Element;
12
14
  export {};
@@ -5,10 +5,10 @@ import { useState } from "react";
5
5
  import { Button } from "../Button/Button.js";
6
6
  import { Popover } from "../Popover/Popover.js";
7
7
  import styles from "./Dropdown.module.css";
8
- export function Dropdown({ triggerLabel, items, variant = "primary", className, }) {
8
+ export function Dropdown({ triggerLabel, items, variant = "primary", size = "md", className, }) {
9
9
  const [isOpen, setIsOpen] = useState(false);
10
- return (_jsx(Popover, { content: _jsx("div", { className: styles.menu, children: items.map((item, index) => (_jsx("button", { className: styles.item, onClick: () => {
10
+ return (_jsx(Popover, { content: _jsx("div", { className: clsx(styles.menu, size !== "md" && styles[size]), children: items.map((item, index) => (_jsx("button", { className: styles.item, onClick: () => {
11
11
  item.onClick();
12
12
  setIsOpen(false);
13
- }, children: item.label }, index))) }), isOpen: isOpen, placement: "bottom-start", trigger: _jsxs(Button, { "aria-expanded": isOpen, className: clsx(styles.trigger, className), variant: variant, onClick: () => setIsOpen(!isOpen), children: [triggerLabel, " ", _jsx("span", { style: { marginLeft: "0.5rem", fontSize: "0.8em" }, children: "\u25BC" })] }), onClose: () => setIsOpen(false) }));
13
+ }, children: item.label }, index))) }), isOpen: isOpen, placement: "bottom-start", trigger: _jsxs(Button, { "aria-expanded": isOpen, className: clsx(styles.trigger, className), size: size, variant: variant, onClick: () => setIsOpen(!isOpen), children: [triggerLabel, " ", _jsx("span", { style: { marginLeft: "0.5rem", fontSize: "0.8em" }, children: "\u25BC" })] }), onClose: () => setIsOpen(false) }));
14
14
  }
@@ -1,33 +1,53 @@
1
- .menu {
2
- background: var(--card-bg);
3
- border: var(--border-width) solid var(--primary);
4
- border-radius: var(--radius);
5
- box-shadow: var(--shadow-hover);
6
- min-width: var(--spacing-56);
7
- overflow: hidden;
8
- display: flex;
9
- flex-direction: column;
10
- gap: var(--spacing-1);
11
- padding: var(--spacing-1);
12
- }
13
-
14
- .item {
15
- text-align: left;
16
- padding: var(--spacing-3) var(--spacing-4);
17
- background: transparent;
18
- border: none;
19
- color: var(--foreground);
20
- cursor: pointer;
21
- border-radius: calc(var(--radius) - 2px);
22
- font-size: var(--text-base);
23
- transition: background-color 0.2s;
24
- }
25
- .item:hover {
26
- background-color: color-mix(in srgb, var(--primary), transparent 85%);
27
- color: var(--primary);
28
- }
29
-
30
- .trigger[aria-expanded=true] {
31
- transform: translate(-2px, -2px);
32
- box-shadow: var(--shadow-hover);
1
+ @layer doom.components {
2
+ .menu {
3
+ background: var(--card-bg);
4
+ border: var(--surface-border-width) solid var(--primary);
5
+ border-radius: var(--control-radius);
6
+ box-shadow: var(--shadow-lg);
7
+ min-width: 20ch;
8
+ overflow: hidden;
9
+ display: flex;
10
+ flex-direction: column;
11
+ gap: var(--space-1);
12
+ padding: var(--space-1);
13
+ }
14
+ .item {
15
+ text-align: left;
16
+ padding: var(--control-padding-y) var(--control-padding-x);
17
+ background: transparent;
18
+ border: none;
19
+ color: var(--foreground);
20
+ cursor: pointer;
21
+ border-radius: calc(var(--control-radius) - var(--surface-border-width));
22
+ font-size: var(--control-font-size);
23
+ transition: background-color var(--duration-fast) var(--ease-in-out);
24
+ }
25
+ .item:hover {
26
+ background-color: color-mix(in srgb, var(--primary), transparent 85%);
27
+ color: var(--primary);
28
+ }
29
+ .trigger[aria-expanded=true] {
30
+ transform: translate(calc(-1 * var(--space-0\.5)), calc(-1 * var(--space-0\.5)));
31
+ box-shadow: var(--shadow-lg);
32
+ border-color: var(--card-border);
33
+ }
34
+ /* Sizes */
35
+ .sm {
36
+ --control-height: var(--size-7);
37
+ --control-padding-x: var(--space-2);
38
+ --control-padding-y: var(--space-1);
39
+ --control-font-size: var(--text-xs);
40
+ --control-icon-size: var(--size-4);
41
+ --control-gap: var(--space-1);
42
+ --control-radius: var(--radius-sm);
43
+ }
44
+ .lg {
45
+ --control-height: var(--size-10);
46
+ --control-padding-x: var(--space-4);
47
+ --control-padding-y: var(--space-2);
48
+ --control-font-size: var(--text-base);
49
+ --control-icon-size: var(--size-5);
50
+ --control-gap: var(--space-2);
51
+ --control-radius: var(--radius-md);
52
+ }
33
53
  }
@@ -91,6 +91,26 @@ export const FileUpload = ({ label, helperText, accept, maxSize, multiple = fals
91
91
  setPreviews((prev) => (Object.assign(Object.assign({}, prev), { [file.name]: url })));
92
92
  }
93
93
  }, [showPreview]);
94
+ const isFileAccepted = (file) => {
95
+ if (!accept)
96
+ return true;
97
+ const acceptedTypes = accept.split(",").map((t) => t.trim().toLowerCase());
98
+ const fileName = file.name.toLowerCase();
99
+ const mimeType = file.type.toLowerCase();
100
+ return acceptedTypes.some((type) => {
101
+ // Extension match: ".pdf", ".doc"
102
+ if (type.startsWith(".")) {
103
+ return fileName.endsWith(type);
104
+ }
105
+ // Wildcard MIME: "image/*", "video/*"
106
+ if (type.endsWith("/*")) {
107
+ const category = type.slice(0, -2);
108
+ return mimeType.startsWith(category + "/");
109
+ }
110
+ // Exact MIME: "application/pdf"
111
+ return mimeType === type;
112
+ });
113
+ };
94
114
  const validateFiles = (fileList) => {
95
115
  if (!fileList) {
96
116
  return [];
@@ -98,6 +118,10 @@ export const FileUpload = ({ label, helperText, accept, maxSize, multiple = fals
98
118
  const validFiles = [];
99
119
  setUploadError("");
100
120
  Array.from(fileList).forEach((file) => {
121
+ if (!isFileAccepted(file)) {
122
+ setUploadError(`File "${file.name}" is not an accepted file type`);
123
+ return;
124
+ }
101
125
  if (maxSize && file.size > maxSize) {
102
126
  setUploadError(`File "${file.name}" exceeds maximum size of ${formatFileSize(maxSize)}`);
103
127
  return;