@pathscale/ui 1.1.34 → 1.1.35

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 (249) hide show
  1. package/dist/components/button/Button.css +10 -1
  2. package/dist/components/button/Button.d.ts +2 -0
  3. package/dist/components/button/Button.js +31 -6
  4. package/dist/components/button-group/ButtonGroup.css +117 -0
  5. package/dist/components/button-group/ButtonGroup.d.ts +23 -0
  6. package/dist/components/button-group/ButtonGroup.js +91 -0
  7. package/dist/components/button-group/context.d.ts +8 -0
  8. package/dist/components/button-group/context.js +3 -0
  9. package/dist/components/button-group/index.d.ts +1 -0
  10. package/dist/components/button-group/index.js +6 -0
  11. package/dist/components/card/Card.css +110 -0
  12. package/dist/components/card/Card.d.ts +26 -26
  13. package/dist/components/card/Card.js +131 -70
  14. package/dist/components/card/index.d.ts +1 -1
  15. package/dist/components/card/index.js +6 -1
  16. package/dist/components/checkbox/Checkbox.js +18 -4
  17. package/dist/components/checkbox-group/CheckboxGroup.css +10 -0
  18. package/dist/components/checkbox-group/CheckboxGroup.d.ts +18 -0
  19. package/dist/components/checkbox-group/CheckboxGroup.js +97 -0
  20. package/dist/components/checkbox-group/context.d.ts +11 -0
  21. package/dist/components/checkbox-group/context.js +3 -0
  22. package/dist/components/checkbox-group/index.d.ts +4 -0
  23. package/dist/components/checkbox-group/index.js +4 -0
  24. package/dist/components/chip/Chip.css +11 -9
  25. package/dist/components/chip/Chip.d.ts +2 -2
  26. package/dist/components/chip/Chip.js +38 -30
  27. package/dist/components/close-button/CloseButton.css +81 -0
  28. package/dist/components/close-button/CloseButton.d.ts +14 -0
  29. package/dist/components/close-button/CloseButton.js +76 -0
  30. package/dist/components/close-button/index.d.ts +1 -0
  31. package/dist/components/close-button/index.js +3 -0
  32. package/dist/components/combo-box/ComboBox.css +344 -0
  33. package/dist/components/combo-box/ComboBox.d.ts +86 -0
  34. package/dist/components/combo-box/ComboBox.js +708 -0
  35. package/dist/components/combo-box/index.d.ts +1 -0
  36. package/dist/components/combo-box/index.js +10 -0
  37. package/dist/components/date-field/DateField.css +215 -0
  38. package/dist/components/date-field/DateField.d.ts +64 -0
  39. package/dist/components/date-field/DateField.js +341 -0
  40. package/dist/components/date-field/index.d.ts +1 -0
  41. package/dist/components/date-field/index.js +11 -0
  42. package/dist/components/description/Description.css +10 -0
  43. package/dist/components/description/Description.d.ts +11 -0
  44. package/dist/components/{form/Label.js → description/Description.js} +23 -14
  45. package/dist/components/description/index.d.ts +1 -0
  46. package/dist/components/description/index.js +5 -0
  47. package/dist/components/drawer/Drawer.css +15 -0
  48. package/dist/components/drawer/Drawer.d.ts +2 -0
  49. package/dist/components/drawer/Drawer.js +24 -16
  50. package/dist/components/error-message/ErrorMessage.css +20 -0
  51. package/dist/components/error-message/ErrorMessage.d.ts +11 -0
  52. package/dist/components/error-message/ErrorMessage.js +40 -0
  53. package/dist/components/error-message/index.d.ts +1 -0
  54. package/dist/components/error-message/index.js +5 -0
  55. package/dist/components/field-error/FieldError.css +27 -0
  56. package/dist/components/field-error/FieldError.d.ts +21 -0
  57. package/dist/components/field-error/FieldError.js +69 -0
  58. package/dist/components/field-error/index.d.ts +1 -0
  59. package/dist/components/field-error/index.js +5 -0
  60. package/dist/components/fieldset/Fieldset.css +30 -0
  61. package/dist/components/fieldset/Fieldset.d.ts +22 -9
  62. package/dist/components/fieldset/Fieldset.js +88 -44
  63. package/dist/components/fieldset/index.d.ts +1 -2
  64. package/dist/components/fieldset/index.js +7 -2
  65. package/dist/components/form/Form.css +5 -0
  66. package/dist/components/form/Form.d.ts +10 -16
  67. package/dist/components/form/Form.js +33 -16
  68. package/dist/components/form/index.d.ts +1 -4
  69. package/dist/components/form/index.js +3 -4
  70. package/dist/components/header/Header.css +13 -0
  71. package/dist/components/header/Header.d.ts +9 -0
  72. package/dist/components/{menu/MenuDetails.js → header/Header.js} +17 -20
  73. package/dist/components/header/index.d.ts +1 -0
  74. package/dist/components/header/index.js +5 -0
  75. package/dist/components/immersive-landing/components/FirefoxPWABanner.js +62 -68
  76. package/dist/components/immersive-landing/components/PWAInstallPrompt.js +58 -64
  77. package/dist/components/input/Input.css +3 -2
  78. package/dist/components/input/Input.d.ts +2 -2
  79. package/dist/components/input/Input.js +7 -7
  80. package/dist/components/input-group/InputGroup.css +172 -0
  81. package/dist/components/input-group/InputGroup.d.ts +44 -0
  82. package/dist/components/input-group/InputGroup.js +227 -0
  83. package/dist/components/input-group/index.d.ts +1 -0
  84. package/dist/components/input-group/index.js +9 -0
  85. package/dist/components/input-otp/InputOTP.css +170 -0
  86. package/dist/components/input-otp/InputOTP.d.ts +46 -0
  87. package/dist/components/input-otp/InputOTP.js +385 -0
  88. package/dist/components/input-otp/index.d.ts +1 -0
  89. package/dist/components/input-otp/index.js +11 -0
  90. package/dist/components/label/Label.css +30 -0
  91. package/dist/components/label/Label.d.ts +17 -0
  92. package/dist/components/label/Label.js +64 -0
  93. package/dist/components/label/index.d.ts +1 -0
  94. package/dist/components/label/index.js +5 -0
  95. package/dist/components/list-box/ListBox.css +148 -0
  96. package/dist/components/list-box/ListBox.d.ts +23 -0
  97. package/dist/components/list-box/ListBox.js +224 -0
  98. package/dist/components/list-box/ListBoxItem.d.ts +28 -0
  99. package/dist/components/list-box/ListBoxItem.js +231 -0
  100. package/dist/components/list-box/ListBoxSection.d.ts +11 -0
  101. package/dist/components/list-box/ListBoxSection.js +48 -0
  102. package/dist/components/list-box/context.d.ts +27 -0
  103. package/dist/components/list-box/context.js +3 -0
  104. package/dist/components/list-box/index.d.ts +17 -0
  105. package/dist/components/list-box/index.js +17 -0
  106. package/dist/components/menu/Menu.css +199 -0
  107. package/dist/components/menu/Menu.d.ts +32 -20
  108. package/dist/components/menu/Menu.js +213 -39
  109. package/dist/components/menu/MenuItem.d.ts +35 -5
  110. package/dist/components/menu/MenuItem.js +270 -19
  111. package/dist/components/menu/MenuSection.d.ts +11 -0
  112. package/dist/components/menu/MenuSection.js +48 -0
  113. package/dist/components/menu/context.d.ts +26 -0
  114. package/dist/components/menu/context.js +3 -0
  115. package/dist/components/menu/index.d.ts +4 -3
  116. package/dist/components/menu/index.js +11 -2
  117. package/dist/components/number-field/NumberField.css +198 -0
  118. package/dist/components/number-field/NumberField.d.ts +48 -0
  119. package/dist/components/number-field/NumberField.js +350 -0
  120. package/dist/components/number-field/index.d.ts +1 -0
  121. package/dist/components/number-field/index.js +9 -0
  122. package/dist/components/search-field/SearchField.css +183 -0
  123. package/dist/components/search-field/SearchField.d.ts +53 -0
  124. package/dist/components/search-field/SearchField.js +303 -0
  125. package/dist/components/search-field/index.d.ts +1 -0
  126. package/dist/components/search-field/index.js +9 -0
  127. package/dist/components/select/Select.css +16 -10
  128. package/dist/components/select/Select.d.ts +10 -2
  129. package/dist/components/select/Select.js +119 -33
  130. package/dist/components/separator/Separator.css +35 -0
  131. package/dist/components/separator/Separator.d.ts +12 -0
  132. package/dist/components/separator/Separator.js +57 -0
  133. package/dist/components/separator/index.d.ts +1 -0
  134. package/dist/components/separator/index.js +4 -0
  135. package/dist/components/sidenav/Sidenav.js +2 -2
  136. package/dist/components/surface/Surface.css +37 -0
  137. package/dist/components/surface/Surface.d.ts +12 -0
  138. package/dist/components/surface/Surface.js +41 -0
  139. package/dist/components/surface/index.d.ts +1 -0
  140. package/dist/components/surface/index.js +4 -0
  141. package/dist/components/table/hooks/index.d.ts +1 -9
  142. package/dist/components/table/hooks/index.js +1 -18
  143. package/dist/components/tag/Tag.css +121 -0
  144. package/dist/components/tag/Tag.d.ts +33 -0
  145. package/dist/components/tag/Tag.js +241 -0
  146. package/dist/components/tag/index.d.ts +1 -0
  147. package/dist/components/tag/index.js +6 -0
  148. package/dist/components/tag-group/TagGroup.css +22 -0
  149. package/dist/components/tag-group/TagGroup.d.ts +32 -0
  150. package/dist/components/tag-group/TagGroup.js +177 -0
  151. package/dist/components/tag-group/context.d.ts +15 -0
  152. package/dist/components/tag-group/context.js +3 -0
  153. package/dist/components/tag-group/index.d.ts +2 -0
  154. package/dist/components/tag-group/index.js +6 -0
  155. package/dist/components/text/Text.css +66 -0
  156. package/dist/components/text/Text.d.ts +17 -0
  157. package/dist/components/text/Text.js +46 -0
  158. package/dist/components/text/index.d.ts +1 -0
  159. package/dist/components/text/index.js +5 -0
  160. package/dist/components/text-area/TextArea.css +95 -0
  161. package/dist/components/text-area/TextArea.d.ts +19 -0
  162. package/dist/components/text-area/TextArea.js +64 -0
  163. package/dist/components/text-area/index.d.ts +1 -0
  164. package/dist/components/text-area/index.js +5 -0
  165. package/dist/components/text-field/TextField.css +33 -0
  166. package/dist/components/text-field/TextField.d.ts +34 -0
  167. package/dist/components/text-field/TextField.js +85 -0
  168. package/dist/components/text-field/index.d.ts +1 -0
  169. package/dist/components/text-field/index.js +7 -0
  170. package/dist/components/textarea/Textarea.d.ts +8 -13
  171. package/dist/components/textarea/Textarea.js +14 -45
  172. package/dist/components/textarea/index.d.ts +2 -1
  173. package/dist/components/textarea/index.js +4 -1
  174. package/dist/components/time-field/TimeField.css +215 -0
  175. package/dist/components/time-field/TimeField.d.ts +64 -0
  176. package/dist/components/time-field/TimeField.js +341 -0
  177. package/dist/components/time-field/index.d.ts +1 -0
  178. package/dist/components/time-field/index.js +11 -0
  179. package/dist/components/utils.d.ts +2 -2
  180. package/dist/components/utils.js +3 -17
  181. package/dist/hooks/form/index.d.ts +5 -0
  182. package/dist/hooks/form/index.js +12 -0
  183. package/dist/hooks/form/useField.d.ts +11 -0
  184. package/dist/hooks/form/useField.js +20 -0
  185. package/dist/hooks/form/useFieldError.d.ts +3 -0
  186. package/dist/hooks/form/useFieldError.js +3 -0
  187. package/dist/hooks/form/useFieldMeta.d.ts +20 -0
  188. package/dist/hooks/form/useFieldMeta.js +49 -0
  189. package/dist/hooks/form/useFieldProps.d.ts +10 -0
  190. package/dist/hooks/form/useFieldProps.js +51 -0
  191. package/dist/hooks/form/useForm.d.ts +27 -0
  192. package/dist/hooks/form/useForm.js +54 -0
  193. package/dist/hooks/form/utils.d.ts +4 -0
  194. package/dist/hooks/form/utils.js +30 -0
  195. package/dist/hooks/layout/index.d.ts +1 -0
  196. package/dist/hooks/layout/index.js +3 -0
  197. package/dist/hooks/layout/useDesktop.d.ts +1 -0
  198. package/dist/hooks/layout/useDesktop.js +17 -0
  199. package/dist/hooks/table/index.d.ts +9 -0
  200. package/dist/hooks/table/index.js +18 -0
  201. package/dist/index.d.ts +59 -7
  202. package/dist/index.js +140 -15
  203. package/dist/styles/icons/generated-icons.css +1 -1
  204. package/package.json +1 -1
  205. package/dist/components/card/CardActions.d.ts +0 -4
  206. package/dist/components/card/CardActions.js +0 -15
  207. package/dist/components/card/CardBody.d.ts +0 -4
  208. package/dist/components/card/CardBody.js +0 -15
  209. package/dist/components/card/CardImage.d.ts +0 -3
  210. package/dist/components/card/CardImage.js +0 -10
  211. package/dist/components/card/CardTitle.d.ts +0 -6
  212. package/dist/components/card/CardTitle.js +0 -13
  213. package/dist/components/card/card.css +0 -171
  214. package/dist/components/form/FormBase.d.ts +0 -8
  215. package/dist/components/form/FormBase.js +0 -74
  216. package/dist/components/form/FormDropdown.d.ts +0 -25
  217. package/dist/components/form/FormDropdown.js +0 -139
  218. package/dist/components/form/FormField.d.ts +0 -14
  219. package/dist/components/form/FormField.js +0 -78
  220. package/dist/components/form/Label.d.ts +0 -7
  221. package/dist/components/form/NumberField.d.ts +0 -20
  222. package/dist/components/form/NumberField.js +0 -109
  223. package/dist/components/form/PasswordField.d.ts +0 -16
  224. package/dist/components/form/PasswordField.js +0 -113
  225. package/dist/components/form/ValidatedForm.d.ts +0 -26
  226. package/dist/components/form/ValidatedForm.js +0 -55
  227. package/dist/components/menu/MenuDetails.d.ts +0 -8
  228. package/dist/components/menu/MenuDropdown.d.ts +0 -12
  229. package/dist/components/menu/MenuDropdown.js +0 -48
  230. package/dist/components/menu/MenuTitle.d.ts +0 -8
  231. package/dist/components/menu/MenuTitle.js +0 -22
  232. package/dist/components/menu/menu.css +0 -364
  233. package/dist/components/textarea/textarea.css +0 -191
  234. /package/dist/{components/table/hooks → hooks/table}/helpers.d.ts +0 -0
  235. /package/dist/{components/table/hooks → hooks/table}/helpers.js +0 -0
  236. /package/dist/{components/table/hooks → hooks/table}/useAnchoredOverlayPosition.d.ts +0 -0
  237. /package/dist/{components/table/hooks → hooks/table}/useAnchoredOverlayPosition.js +0 -0
  238. /package/dist/{components/table/hooks → hooks/table}/useTableExpansion.d.ts +0 -0
  239. /package/dist/{components/table/hooks → hooks/table}/useTableExpansion.js +0 -0
  240. /package/dist/{components/table/hooks → hooks/table}/useTableFiltering.d.ts +0 -0
  241. /package/dist/{components/table/hooks → hooks/table}/useTableFiltering.js +0 -0
  242. /package/dist/{components/table/hooks → hooks/table}/useTableModel.d.ts +0 -0
  243. /package/dist/{components/table/hooks → hooks/table}/useTableModel.js +0 -0
  244. /package/dist/{components/table/hooks → hooks/table}/useTablePagination.d.ts +0 -0
  245. /package/dist/{components/table/hooks → hooks/table}/useTablePagination.js +0 -0
  246. /package/dist/{components/table/hooks → hooks/table}/useTableSelection.d.ts +0 -0
  247. /package/dist/{components/table/hooks → hooks/table}/useTableSelection.js +0 -0
  248. /package/dist/{components/table/hooks → hooks/table}/useTableSorting.d.ts +0 -0
  249. /package/dist/{components/table/hooks → hooks/table}/useTableSorting.js +0 -0
@@ -0,0 +1,199 @@
1
+ @layer components {
2
+ .menu {
3
+ position: relative;
4
+ display: flex;
5
+ width: 100%;
6
+ flex-direction: column;
7
+ gap: 0.25rem;
8
+ overflow: clip;
9
+ padding: 0.25rem;
10
+ }
11
+
12
+ .menu [data-slot="separator"] {
13
+ margin-inline-start: 3%;
14
+ width: 94%;
15
+ }
16
+
17
+ .menu-item {
18
+ position: relative;
19
+ display: flex;
20
+ min-height: 2.25rem;
21
+ width: 100%;
22
+ align-items: center;
23
+ justify-content: flex-start;
24
+ gap: 0.75rem;
25
+ border-radius: 1rem;
26
+ padding-inline: 0.5rem;
27
+ padding-block: 0.375rem;
28
+ outline: none;
29
+ user-select: none;
30
+ -webkit-tap-highlight-color: transparent;
31
+ transition:
32
+ transform 250ms var(--ease-out-quart),
33
+ box-shadow 150ms var(--ease-out);
34
+ cursor: var(--cursor-interactive);
35
+ }
36
+
37
+ @media (prefers-reduced-motion: reduce) {
38
+ .menu-item {
39
+ transition: none;
40
+ }
41
+ }
42
+
43
+ .menu-item [data-slot="label"] {
44
+ pointer-events: none;
45
+ width: fit-content;
46
+ user-select: none;
47
+ }
48
+
49
+ .menu-item [data-slot="description"] {
50
+ pointer-events: none;
51
+ text-wrap: wrap;
52
+ user-select: none;
53
+ }
54
+
55
+ .menu-item [data-slot="submenu-indicator"] svg {
56
+ width: 0.875rem;
57
+ height: 0.875rem;
58
+ }
59
+
60
+ .menu-item:has(.menu-item__indicator) {
61
+ padding-inline-start: 1.75rem;
62
+ }
63
+
64
+ .menu-item[data-has-submenu="true"]:has(.menu-item__indicator) {
65
+ padding-inline-end: 1.75rem;
66
+ padding-inline-start: 0.5rem;
67
+ }
68
+
69
+ .menu-item:focus-visible:not(:focus),
70
+ .menu-item[data-focus-visible="true"] {
71
+ outline: 2px solid var(--color-accent);
72
+ outline-offset: 2px;
73
+ }
74
+
75
+ .menu-item:active,
76
+ .menu-item[data-pressed="true"] {
77
+ transform: scale(0.98);
78
+ }
79
+
80
+ @media (hover: hover) {
81
+ .menu-item:hover,
82
+ .menu-item[data-hovered="true"] {
83
+ background-color: var(--color-default);
84
+ }
85
+ }
86
+
87
+ .menu-item[aria-checked="true"] [data-slot="menu-item-indicator--checkmark"],
88
+ .menu-item[aria-selected="true"] [data-slot="menu-item-indicator--checkmark"],
89
+ .menu-item[data-selected="true"] [data-slot="menu-item-indicator--checkmark"] {
90
+ transition: stroke-dashoffset 100ms linear;
91
+ }
92
+
93
+ @media (prefers-reduced-motion: reduce) {
94
+ .menu-item[aria-checked="true"] [data-slot="menu-item-indicator--checkmark"],
95
+ .menu-item[aria-selected="true"] [data-slot="menu-item-indicator--checkmark"],
96
+ .menu-item[data-selected="true"] [data-slot="menu-item-indicator--checkmark"] {
97
+ transition: none;
98
+ }
99
+ }
100
+
101
+ .menu-item[aria-checked="true"] [data-slot="menu-item-indicator--dot"],
102
+ .menu-item[aria-selected="true"] [data-slot="menu-item-indicator--dot"],
103
+ .menu-item[data-selected="true"] [data-slot="menu-item-indicator--dot"] {
104
+ transform: scale(1);
105
+ opacity: 1;
106
+ }
107
+
108
+ .menu-item[data-disabled="true"],
109
+ .menu-item[aria-disabled="true"] {
110
+ opacity: 0.5;
111
+ cursor: not-allowed;
112
+ }
113
+
114
+ .menu-item__indicator {
115
+ position: absolute;
116
+ inset-inline-start: 0.5rem;
117
+ top: 50%;
118
+ display: flex;
119
+ width: 1rem;
120
+ height: 1rem;
121
+ flex-shrink: 0;
122
+ transform: translateY(-50%);
123
+ align-items: center;
124
+ justify-content: center;
125
+ color: var(--color-muted, color-mix(in oklab, var(--color-base-content) 55%, transparent));
126
+ transition: all 250ms ease;
127
+ }
128
+
129
+ @media (prefers-reduced-motion: reduce) {
130
+ .menu-item__indicator {
131
+ transition: none;
132
+ }
133
+ }
134
+
135
+ .menu-item[data-has-submenu="true"] .menu-item__indicator {
136
+ inset-inline-end: 0.5rem;
137
+ inset-inline-start: auto;
138
+ }
139
+
140
+ .menu-item__indicator [data-slot="menu-item-indicator--checkmark"] {
141
+ width: 0.625rem;
142
+ height: 0.625rem;
143
+ }
144
+
145
+ .menu-item[data-selection-mode="multiple"] .menu-item__indicator [data-slot="menu-item-indicator--checkmark"] {
146
+ transition: all 300ms ease;
147
+ }
148
+
149
+ @media (prefers-reduced-motion: reduce) {
150
+ .menu-item[data-selection-mode="multiple"] .menu-item__indicator [data-slot="menu-item-indicator--checkmark"] {
151
+ transition: none;
152
+ }
153
+ }
154
+
155
+ .menu-item__indicator [data-slot="menu-item-indicator--dot"] {
156
+ width: 0.5rem;
157
+ height: 0.5rem;
158
+ transform: scale(0.7);
159
+ opacity: 0;
160
+ }
161
+
162
+ .menu-item[data-selection-mode="multiple"] .menu-item__indicator [data-slot="menu-item-indicator--dot"] {
163
+ transition: all 250ms ease;
164
+ }
165
+
166
+ @media (prefers-reduced-motion: reduce) {
167
+ .menu-item[data-selection-mode="multiple"] .menu-item__indicator [data-slot="menu-item-indicator--dot"] {
168
+ transition: none;
169
+ }
170
+ }
171
+
172
+ .menu-item__indicator--submenu {
173
+ color: var(--color-muted, color-mix(in oklab, var(--color-base-content) 55%, transparent));
174
+ }
175
+
176
+ .menu-item__indicator--submenu svg {
177
+ width: 0.75rem;
178
+ height: 0.75rem;
179
+ }
180
+
181
+ .menu-item--danger .menu-item__indicator {
182
+ color: var(--color-danger);
183
+ }
184
+
185
+ .menu-item--danger [data-slot="label"] {
186
+ color: var(--color-danger);
187
+ }
188
+
189
+ .menu-section {
190
+ display: flex;
191
+ flex-direction: column;
192
+ align-items: flex-start;
193
+ gap: 0;
194
+ }
195
+
196
+ .menu-section__title {
197
+ width: 100%;
198
+ }
199
+ }
@@ -1,22 +1,34 @@
1
- import "./menu.css";
2
- import { type JSX } from "solid-js";
3
- import type { IComponentBaseProps, ComponentSize } from "../types";
4
- import type { MenuTitleProps } from "./MenuTitle";
5
- import type { MenuItemProps } from "./MenuItem";
6
- import type { MenuDropdownProps } from "./MenuDropdown";
7
- import type { MenuDetailsProps } from "./MenuDetails";
8
- export type { MenuTitleProps, MenuItemProps, MenuDropdownProps, MenuDetailsProps, };
9
- export type MenuProps = JSX.HTMLAttributes<HTMLUListElement> & IComponentBaseProps & {
10
- vertical?: boolean;
11
- horizontal?: boolean;
12
- responsive?: boolean;
13
- size?: ComponentSize;
1
+ import "./Menu.css";
2
+ import { type Component, type JSX } from "solid-js";
3
+ import type { IComponentBaseProps } from "../types";
4
+ import { type MenuSelectionMode } from "./context";
5
+ import MenuItem, { MenuItemIndicator, MenuItemRoot } from "./MenuItem";
6
+ import MenuSection, { MenuSectionRoot } from "./MenuSection";
7
+ export type MenuRootProps<T = unknown> = Omit<JSX.HTMLAttributes<HTMLDivElement>, "children" | "onChange"> & IComponentBaseProps & {
8
+ children?: JSX.Element | ((item: T) => JSX.Element);
9
+ items?: readonly T[];
10
+ renderEmptyState?: () => JSX.Element;
11
+ selectionMode?: MenuSelectionMode;
12
+ selectedKeys?: Iterable<string | number>;
13
+ defaultSelectedKeys?: Iterable<string | number>;
14
+ disabledKeys?: Iterable<string | number>;
15
+ disallowEmptySelection?: boolean;
16
+ onSelectionChange?: (keys: Set<string>) => void;
17
+ onAction?: (key: string) => void;
18
+ isDisabled?: boolean;
19
+ disabled?: boolean;
14
20
  };
15
- declare const _default: ((props: MenuProps) => JSX.Element) & {
16
- Title: import("solid-js").Component<MenuTitleProps>;
17
- Item: import("solid-js").Component<MenuItemProps>;
18
- Dropdown: import("solid-js").Component<MenuDropdownProps>;
19
- Details: import("solid-js").Component<MenuDetailsProps>;
20
- Menu: (props: MenuProps) => JSX.Element;
21
+ declare const MenuRoot: Component<MenuRootProps>;
22
+ declare const Menu: Component<MenuRootProps<unknown>> & {
23
+ Root: Component<MenuRootProps<unknown>>;
24
+ Item: import("solid-js").ParentComponent<import("./MenuItem").MenuItemRootProps> & {
25
+ Root: import("solid-js").ParentComponent<import("./MenuItem").MenuItemRootProps>;
26
+ Indicator: Component<import("./MenuItem").MenuItemIndicatorProps>;
27
+ SubmenuIndicator: Component<import("./MenuItem").MenuItemSubmenuIndicatorProps>;
28
+ };
29
+ ItemIndicator: Component<import("./MenuItem").MenuItemIndicatorProps>;
30
+ Section: Component<import("./MenuSection").MenuSectionRootProps>;
21
31
  };
22
- export default _default;
32
+ export default Menu;
33
+ export { Menu, MenuRoot, MenuItem, MenuItemRoot, MenuItemIndicator, MenuSection, MenuSectionRoot };
34
+ export type { MenuRootProps as MenuProps, MenuSelectionMode };
@@ -1,51 +1,225 @@
1
1
  import * as __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__ from "solid-js/web";
2
- import "./menu.css";
2
+ import "./Menu.css";
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__ from "solid-js";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__ from "tailwind-merge";
5
- import * as __WEBPACK_EXTERNAL_MODULE_clsx__ from "clsx";
6
- import * as __WEBPACK_EXTERNAL_MODULE__MenuTitle_js_3c427b91__ from "./MenuTitle.js";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__context_js_80e2871f__ from "./context.js";
7
6
  import * as __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__ from "./MenuItem.js";
8
- import * as __WEBPACK_EXTERNAL_MODULE__MenuDropdown_js_63ede5ac__ from "./MenuDropdown.js";
9
- import * as __WEBPACK_EXTERNAL_MODULE__MenuDetails_js_c50ded87__ from "./MenuDetails.js";
10
- var _tmpl$ = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<ul role=menu>");
11
- const Menu = (props)=>{
7
+ import * as __WEBPACK_EXTERNAL_MODULE__MenuSection_js_5f9fc1a1__ from "./MenuSection.js";
8
+ var _tmpl$ = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<div>");
9
+ const normalizeKeys = (keys)=>{
10
+ if (!keys) return new Set();
11
+ return new Set(Array.from(keys, (key)=>String(key)));
12
+ };
13
+ const sortItemsByDomOrder = (items)=>[
14
+ ...items
15
+ ].sort((a, b)=>{
16
+ if (a.ref === b.ref) return 0;
17
+ const relation = a.ref.compareDocumentPosition(b.ref);
18
+ if (relation & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
19
+ if (relation & Node.DOCUMENT_POSITION_PRECEDING) return 1;
20
+ return 0;
21
+ });
22
+ const invokeEventHandler = (handler, event)=>{
23
+ if ("function" == typeof handler) return void handler(event);
24
+ if (Array.isArray(handler) && "function" == typeof handler[0]) handler[0](handler[1], event);
25
+ };
26
+ const MenuRoot = (props)=>{
12
27
  const [local, others] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.splitProps)(props, [
13
- "responsive",
14
- "horizontal",
15
- "vertical",
16
- "size",
28
+ "children",
17
29
  "class",
18
30
  "className",
19
- "dataTheme"
31
+ "dataTheme",
32
+ "style",
33
+ "items",
34
+ "renderEmptyState",
35
+ "selectionMode",
36
+ "selectedKeys",
37
+ "defaultSelectedKeys",
38
+ "disabledKeys",
39
+ "disallowEmptySelection",
40
+ "onSelectionChange",
41
+ "onAction",
42
+ "isDisabled",
43
+ "disabled",
44
+ "role",
45
+ "onKeyDown"
20
46
  ]);
21
- const classes = ()=>(0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)("menu", local.class, local.className, (0, __WEBPACK_EXTERNAL_MODULE_clsx__.clsx)({
22
- "menu-responsive": local.responsive,
23
- "menu-xl": "xl" === local.size,
24
- "menu-lg": "lg" === local.size,
25
- "menu-md": "md" === local.size,
26
- "menu-sm": "sm" === local.size,
27
- "menu-xs": "xs" === local.size,
28
- "menu-vertical": local.vertical,
29
- "menu-horizontal": local.horizontal
30
- }));
31
- return (()=>{
32
- var _el$ = _tmpl$();
33
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)({
34
- get ["data-theme"] () {
35
- return local.dataTheme;
36
- },
37
- get ["class"] () {
38
- return classes();
47
+ const [internalSelectedKeys, setInternalSelectedKeys] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)(normalizeKeys(local.defaultSelectedKeys));
48
+ const [focusedKey, setFocusedKey] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)();
49
+ const [registeredItems, setRegisteredItems] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)([]);
50
+ const selectionMode = ()=>local.selectionMode ?? "none";
51
+ const isControlled = ()=>void 0 !== local.selectedKeys;
52
+ const isDisabled = ()=>Boolean(local.isDisabled) || Boolean(local.disabled);
53
+ const selectedKeys = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createMemo)(()=>isControlled() ? normalizeKeys(local.selectedKeys) : internalSelectedKeys());
54
+ const disabledKeys = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createMemo)(()=>normalizeKeys(local.disabledKeys));
55
+ const getEnabledItems = ()=>registeredItems().filter((item)=>!item.disabled && !disabledKeys().has(item.key) && !isDisabled());
56
+ const focusItem = (item)=>{
57
+ if (!item) return;
58
+ setFocusedKey(item.key);
59
+ item.ref.focus();
60
+ };
61
+ const focusBoundary = (target)=>{
62
+ const enabledItems = getEnabledItems();
63
+ if (!enabledItems.length) return;
64
+ if ("selected" === target) {
65
+ const selectedItem = enabledItems.find((item)=>selectedKeys().has(item.key));
66
+ focusItem(selectedItem ?? enabledItems[0]);
67
+ return;
68
+ }
69
+ focusItem("first" === target ? enabledItems[0] : enabledItems[enabledItems.length - 1]);
70
+ };
71
+ const focusNext = (direction)=>{
72
+ const enabledItems = getEnabledItems();
73
+ if (!enabledItems.length) return;
74
+ const activeElement = document.activeElement;
75
+ let currentIndex = enabledItems.findIndex((item)=>item.ref === activeElement);
76
+ if (currentIndex < 0 && focusedKey()) currentIndex = enabledItems.findIndex((item)=>item.key === focusedKey());
77
+ if (currentIndex < 0) return void focusBoundary(1 === direction ? "first" : "last");
78
+ const nextIndex = (currentIndex + direction + enabledItems.length) % enabledItems.length;
79
+ focusItem(enabledItems[nextIndex]);
80
+ };
81
+ const updateSelection = (nextKeys)=>{
82
+ if (!isControlled()) setInternalSelectedKeys(nextKeys);
83
+ local.onSelectionChange?.(nextKeys);
84
+ };
85
+ const activateKey = (key, event)=>{
86
+ if (event.defaultPrevented || isDisabled()) return;
87
+ if (disabledKeys().has(key)) return;
88
+ if ("none" === selectionMode()) return void local.onAction?.(key);
89
+ const current = selectedKeys();
90
+ if ("single" === selectionMode()) {
91
+ if (!(1 === current.size && current.has(key))) updateSelection(new Set([
92
+ key
93
+ ]));
94
+ local.onAction?.(key);
95
+ return;
96
+ }
97
+ const next = new Set(current);
98
+ if (next.has(key)) {
99
+ if (local.disallowEmptySelection && 1 === next.size) return void local.onAction?.(key);
100
+ next.delete(key);
101
+ } else next.add(key);
102
+ updateSelection(next);
103
+ local.onAction?.(key);
104
+ };
105
+ const registerItem = (item)=>{
106
+ setRegisteredItems((current)=>sortItemsByDomOrder([
107
+ ...current.filter((entry)=>entry.key !== item.key),
108
+ item
109
+ ]));
110
+ };
111
+ const unregisterItem = (key)=>{
112
+ setRegisteredItems((current)=>current.filter((item)=>item.key !== key));
113
+ if (focusedKey() === key) setFocusedKey(void 0);
114
+ };
115
+ const isItemDisabled = (key, localDisabled)=>Boolean(localDisabled) || disabledKeys().has(key) || isDisabled();
116
+ const getItemTabIndex = (key, localDisabled)=>{
117
+ if (isItemDisabled(key, localDisabled)) return -1;
118
+ if (focusedKey() === key) return 0;
119
+ if (!focusedKey()) {
120
+ const enabledItems = getEnabledItems();
121
+ if (!enabledItems.length) return -1;
122
+ return enabledItems[0]?.key === key ? 0 : -1;
123
+ }
124
+ return -1;
125
+ };
126
+ const handleKeyDown = (event)=>{
127
+ invokeEventHandler(local.onKeyDown, event);
128
+ if (event.defaultPrevented) return;
129
+ if (event.target !== event.currentTarget) return;
130
+ if ("ArrowDown" === event.key || "ArrowRight" === event.key) {
131
+ event.preventDefault();
132
+ focusNext(1);
133
+ }
134
+ if ("ArrowUp" === event.key || "ArrowLeft" === event.key) {
135
+ event.preventDefault();
136
+ focusNext(-1);
137
+ }
138
+ if ("Home" === event.key) {
139
+ event.preventDefault();
140
+ focusBoundary("first");
141
+ }
142
+ if ("End" === event.key) {
143
+ event.preventDefault();
144
+ focusBoundary("last");
145
+ }
146
+ };
147
+ const renderChildren = ()=>{
148
+ const isItemRenderer = "function" == typeof local.children && local.children.length > 0;
149
+ const resolvedStaticChildren = "function" == typeof local.children ? isItemRenderer ? null : local.children() : local.children ?? null;
150
+ if (local.items) {
151
+ if (0 === local.items.length) return local.renderEmptyState?.() ?? null;
152
+ if (isItemRenderer) {
153
+ const renderItem = local.children;
154
+ return (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.For, {
155
+ get each () {
156
+ return local.items;
157
+ },
158
+ children: (item)=>renderItem(item)
159
+ });
39
160
  }
40
- }, others), false, false);
41
- return _el$;
42
- })();
161
+ }
162
+ return resolvedStaticChildren;
163
+ };
164
+ return (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE__context_js_80e2871f__.MenuContext.Provider, {
165
+ value: {
166
+ selectionMode,
167
+ selectedKeys,
168
+ disabledKeys,
169
+ isDisabled,
170
+ focusedKey,
171
+ isSelected: (key)=>selectedKeys().has(key),
172
+ isItemDisabled,
173
+ getItemTabIndex,
174
+ registerItem,
175
+ unregisterItem,
176
+ activateKey,
177
+ setFocusedKey,
178
+ focusNext,
179
+ focusBoundary
180
+ },
181
+ get children () {
182
+ var _el$ = _tmpl$();
183
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(others, {
184
+ get role () {
185
+ return local.role ?? "menu";
186
+ },
187
+ get ["aria-disabled"] () {
188
+ return isDisabled() ? "true" : void 0;
189
+ },
190
+ "data-slot": "menu",
191
+ get ["data-theme"] () {
192
+ return local.dataTheme;
193
+ },
194
+ get ["data-selection-mode"] () {
195
+ return selectionMode();
196
+ },
197
+ get ["data-disabled"] () {
198
+ return isDisabled() ? "true" : "false";
199
+ },
200
+ get ["class"] () {
201
+ return (0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)("menu", local.class, local.className);
202
+ },
203
+ get style () {
204
+ return local.style;
205
+ },
206
+ onKeyDown: handleKeyDown
207
+ }), false, true);
208
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$, renderChildren);
209
+ return _el$;
210
+ }
211
+ });
43
212
  };
44
- const menu_Menu = Object.assign(Menu, {
45
- Title: __WEBPACK_EXTERNAL_MODULE__MenuTitle_js_3c427b91__["default"],
213
+ const Menu = Object.assign(MenuRoot, {
214
+ Root: MenuRoot,
46
215
  Item: __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__["default"],
47
- Dropdown: __WEBPACK_EXTERNAL_MODULE__MenuDropdown_js_63ede5ac__["default"],
48
- Details: __WEBPACK_EXTERNAL_MODULE__MenuDetails_js_c50ded87__["default"],
49
- Menu: Menu
216
+ ItemIndicator: __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__.MenuItemIndicator,
217
+ Section: __WEBPACK_EXTERNAL_MODULE__MenuSection_js_5f9fc1a1__["default"]
50
218
  });
51
- export { menu_Menu as default };
219
+ const menu_Menu = Menu;
220
+ var __webpack_exports__MenuItem = __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__["default"];
221
+ var __webpack_exports__MenuItemIndicator = __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__.MenuItemIndicator;
222
+ var __webpack_exports__MenuItemRoot = __WEBPACK_EXTERNAL_MODULE__MenuItem_js_0945051f__.MenuItemRoot;
223
+ var __webpack_exports__MenuSection = __WEBPACK_EXTERNAL_MODULE__MenuSection_js_5f9fc1a1__["default"];
224
+ var __webpack_exports__MenuSectionRoot = __WEBPACK_EXTERNAL_MODULE__MenuSection_js_5f9fc1a1__.MenuSectionRoot;
225
+ export { Menu, MenuRoot, menu_Menu as default, __webpack_exports__MenuItem as MenuItem, __webpack_exports__MenuItemIndicator as MenuItemIndicator, __webpack_exports__MenuItemRoot as MenuItemRoot, __webpack_exports__MenuSection as MenuSection, __webpack_exports__MenuSectionRoot as MenuSectionRoot };
@@ -1,9 +1,39 @@
1
- import { type JSX, type Component } from "solid-js";
1
+ import { type Component, type JSX, type ParentComponent } from "solid-js";
2
2
  import type { IComponentBaseProps } from "../types";
3
- export type MenuItemProps = JSX.LiHTMLAttributes<HTMLLIElement> & IComponentBaseProps & {
4
- focus?: boolean;
5
- active?: boolean;
3
+ import { type MenuItemVariant, type MenuSelectionMode } from "./context";
4
+ type MenuItemRenderProps = {
5
+ isSelected: boolean;
6
+ isFocused: boolean;
7
+ isDisabled: boolean;
8
+ hasSubmenu: boolean;
9
+ selectionMode: MenuSelectionMode;
10
+ };
11
+ export type MenuItemRootProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, "children"> & IComponentBaseProps & {
12
+ id?: string | number;
13
+ textValue?: string;
14
+ variant?: MenuItemVariant;
15
+ isDisabled?: boolean;
6
16
  disabled?: boolean;
17
+ hasSubmenu?: boolean;
18
+ onAction?: (key: string) => void;
19
+ children?: JSX.Element | ((props: MenuItemRenderProps) => JSX.Element);
20
+ };
21
+ export type MenuItemIndicatorType = "checkmark" | "dot";
22
+ export type MenuItemIndicatorProps = Omit<JSX.HTMLAttributes<HTMLSpanElement>, "children"> & IComponentBaseProps & {
23
+ type?: MenuItemIndicatorType;
24
+ children?: JSX.Element | ((props: MenuItemRenderProps) => JSX.Element);
25
+ };
26
+ export type MenuItemSubmenuIndicatorProps = Omit<JSX.HTMLAttributes<HTMLSpanElement>, "children"> & IComponentBaseProps & {
27
+ children?: JSX.Element;
28
+ };
29
+ declare const MenuItemRoot: ParentComponent<MenuItemRootProps>;
30
+ declare const MenuItemIndicator: Component<MenuItemIndicatorProps>;
31
+ declare const MenuItemSubmenuIndicator: Component<MenuItemSubmenuIndicatorProps>;
32
+ declare const MenuItem: ParentComponent<MenuItemRootProps> & {
33
+ Root: ParentComponent<MenuItemRootProps>;
34
+ Indicator: Component<MenuItemIndicatorProps>;
35
+ SubmenuIndicator: Component<MenuItemSubmenuIndicatorProps>;
7
36
  };
8
- declare const MenuItem: Component<MenuItemProps>;
9
37
  export default MenuItem;
38
+ export { MenuItem, MenuItemRoot, MenuItemIndicator, MenuItemSubmenuIndicator };
39
+ export type { MenuItemRootProps as MenuItemProps, MenuItemRenderProps, MenuSelectionMode, MenuItemVariant, };