@pathscale/ui 1.1.33 → 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 (260) hide show
  1. package/dist/components/badge/Badge.css +5 -5
  2. package/dist/components/badge/Badge.d.ts +1 -1
  3. package/dist/components/badge/Badge.js +1 -2
  4. package/dist/components/button/Button.css +10 -1
  5. package/dist/components/button/Button.d.ts +2 -0
  6. package/dist/components/button/Button.js +31 -6
  7. package/dist/components/button-group/ButtonGroup.css +117 -0
  8. package/dist/components/button-group/ButtonGroup.d.ts +23 -0
  9. package/dist/components/button-group/ButtonGroup.js +91 -0
  10. package/dist/components/button-group/context.d.ts +8 -0
  11. package/dist/components/button-group/context.js +3 -0
  12. package/dist/components/button-group/index.d.ts +1 -0
  13. package/dist/components/button-group/index.js +6 -0
  14. package/dist/components/card/Card.css +110 -0
  15. package/dist/components/card/Card.d.ts +26 -26
  16. package/dist/components/card/Card.js +131 -70
  17. package/dist/components/card/index.d.ts +1 -1
  18. package/dist/components/card/index.js +6 -1
  19. package/dist/components/checkbox/Checkbox.js +18 -4
  20. package/dist/components/checkbox-group/CheckboxGroup.css +10 -0
  21. package/dist/components/checkbox-group/CheckboxGroup.d.ts +18 -0
  22. package/dist/components/checkbox-group/CheckboxGroup.js +97 -0
  23. package/dist/components/checkbox-group/context.d.ts +11 -0
  24. package/dist/components/checkbox-group/context.js +3 -0
  25. package/dist/components/checkbox-group/index.d.ts +4 -0
  26. package/dist/components/checkbox-group/index.js +4 -0
  27. package/dist/components/chip/Chip.css +197 -0
  28. package/dist/components/chip/Chip.d.ts +25 -0
  29. package/dist/components/chip/Chip.js +142 -0
  30. package/dist/components/chip/index.d.ts +8 -0
  31. package/dist/components/chip/index.js +9 -0
  32. package/dist/components/close-button/CloseButton.css +81 -0
  33. package/dist/components/close-button/CloseButton.d.ts +14 -0
  34. package/dist/components/close-button/CloseButton.js +76 -0
  35. package/dist/components/close-button/index.d.ts +1 -0
  36. package/dist/components/close-button/index.js +3 -0
  37. package/dist/components/combo-box/ComboBox.css +344 -0
  38. package/dist/components/combo-box/ComboBox.d.ts +86 -0
  39. package/dist/components/combo-box/ComboBox.js +708 -0
  40. package/dist/components/combo-box/index.d.ts +1 -0
  41. package/dist/components/combo-box/index.js +10 -0
  42. package/dist/components/date-field/DateField.css +215 -0
  43. package/dist/components/date-field/DateField.d.ts +64 -0
  44. package/dist/components/date-field/DateField.js +341 -0
  45. package/dist/components/date-field/index.d.ts +1 -0
  46. package/dist/components/date-field/index.js +11 -0
  47. package/dist/components/description/Description.css +10 -0
  48. package/dist/components/description/Description.d.ts +11 -0
  49. package/dist/components/{form/Label.js → description/Description.js} +23 -14
  50. package/dist/components/description/index.d.ts +1 -0
  51. package/dist/components/description/index.js +5 -0
  52. package/dist/components/drawer/Drawer.css +15 -0
  53. package/dist/components/drawer/Drawer.d.ts +2 -0
  54. package/dist/components/drawer/Drawer.js +24 -16
  55. package/dist/components/error-message/ErrorMessage.css +20 -0
  56. package/dist/components/error-message/ErrorMessage.d.ts +11 -0
  57. package/dist/components/error-message/ErrorMessage.js +40 -0
  58. package/dist/components/error-message/index.d.ts +1 -0
  59. package/dist/components/error-message/index.js +5 -0
  60. package/dist/components/field-error/FieldError.css +27 -0
  61. package/dist/components/field-error/FieldError.d.ts +21 -0
  62. package/dist/components/field-error/FieldError.js +69 -0
  63. package/dist/components/field-error/index.d.ts +1 -0
  64. package/dist/components/field-error/index.js +5 -0
  65. package/dist/components/fieldset/Fieldset.css +30 -0
  66. package/dist/components/fieldset/Fieldset.d.ts +22 -9
  67. package/dist/components/fieldset/Fieldset.js +88 -44
  68. package/dist/components/fieldset/index.d.ts +1 -2
  69. package/dist/components/fieldset/index.js +7 -2
  70. package/dist/components/form/Form.css +5 -0
  71. package/dist/components/form/Form.d.ts +10 -16
  72. package/dist/components/form/Form.js +33 -16
  73. package/dist/components/form/index.d.ts +1 -4
  74. package/dist/components/form/index.js +3 -4
  75. package/dist/components/header/Header.css +13 -0
  76. package/dist/components/header/Header.d.ts +9 -0
  77. package/dist/components/{menu/MenuDetails.js → header/Header.js} +17 -20
  78. package/dist/components/header/index.d.ts +1 -0
  79. package/dist/components/header/index.js +5 -0
  80. package/dist/components/immersive-landing/components/FirefoxPWABanner.js +62 -68
  81. package/dist/components/immersive-landing/components/PWAInstallPrompt.js +58 -64
  82. package/dist/components/input/Input.css +3 -2
  83. package/dist/components/input/Input.d.ts +2 -2
  84. package/dist/components/input/Input.js +7 -7
  85. package/dist/components/input-group/InputGroup.css +172 -0
  86. package/dist/components/input-group/InputGroup.d.ts +44 -0
  87. package/dist/components/input-group/InputGroup.js +227 -0
  88. package/dist/components/input-group/index.d.ts +1 -0
  89. package/dist/components/input-group/index.js +9 -0
  90. package/dist/components/input-otp/InputOTP.css +170 -0
  91. package/dist/components/input-otp/InputOTP.d.ts +46 -0
  92. package/dist/components/input-otp/InputOTP.js +385 -0
  93. package/dist/components/input-otp/index.d.ts +1 -0
  94. package/dist/components/input-otp/index.js +11 -0
  95. package/dist/components/label/Label.css +30 -0
  96. package/dist/components/label/Label.d.ts +17 -0
  97. package/dist/components/label/Label.js +64 -0
  98. package/dist/components/label/index.d.ts +1 -0
  99. package/dist/components/label/index.js +5 -0
  100. package/dist/components/list-box/ListBox.css +148 -0
  101. package/dist/components/list-box/ListBox.d.ts +23 -0
  102. package/dist/components/list-box/ListBox.js +224 -0
  103. package/dist/components/list-box/ListBoxItem.d.ts +28 -0
  104. package/dist/components/list-box/ListBoxItem.js +231 -0
  105. package/dist/components/list-box/ListBoxSection.d.ts +11 -0
  106. package/dist/components/list-box/ListBoxSection.js +48 -0
  107. package/dist/components/list-box/context.d.ts +27 -0
  108. package/dist/components/list-box/context.js +3 -0
  109. package/dist/components/list-box/index.d.ts +17 -0
  110. package/dist/components/list-box/index.js +17 -0
  111. package/dist/components/menu/Menu.css +199 -0
  112. package/dist/components/menu/Menu.d.ts +32 -20
  113. package/dist/components/menu/Menu.js +213 -39
  114. package/dist/components/menu/MenuItem.d.ts +35 -5
  115. package/dist/components/menu/MenuItem.js +270 -19
  116. package/dist/components/menu/MenuSection.d.ts +11 -0
  117. package/dist/components/menu/MenuSection.js +48 -0
  118. package/dist/components/menu/context.d.ts +26 -0
  119. package/dist/components/menu/context.js +3 -0
  120. package/dist/components/menu/index.d.ts +4 -3
  121. package/dist/components/menu/index.js +11 -2
  122. package/dist/components/number-field/NumberField.css +198 -0
  123. package/dist/components/number-field/NumberField.d.ts +48 -0
  124. package/dist/components/number-field/NumberField.js +350 -0
  125. package/dist/components/number-field/index.d.ts +1 -0
  126. package/dist/components/number-field/index.js +9 -0
  127. package/dist/components/search-field/SearchField.css +183 -0
  128. package/dist/components/search-field/SearchField.d.ts +53 -0
  129. package/dist/components/search-field/SearchField.js +303 -0
  130. package/dist/components/search-field/index.d.ts +1 -0
  131. package/dist/components/search-field/index.js +9 -0
  132. package/dist/components/select/Select.css +16 -10
  133. package/dist/components/select/Select.d.ts +10 -2
  134. package/dist/components/select/Select.js +119 -33
  135. package/dist/components/separator/Separator.css +35 -0
  136. package/dist/components/separator/Separator.d.ts +12 -0
  137. package/dist/components/separator/Separator.js +57 -0
  138. package/dist/components/separator/index.d.ts +1 -0
  139. package/dist/components/separator/index.js +4 -0
  140. package/dist/components/sidenav/Sidenav.js +2 -2
  141. package/dist/components/surface/Surface.css +37 -0
  142. package/dist/components/surface/Surface.d.ts +12 -0
  143. package/dist/components/surface/Surface.js +41 -0
  144. package/dist/components/surface/index.d.ts +1 -0
  145. package/dist/components/surface/index.js +4 -0
  146. package/dist/components/table/hooks/index.d.ts +1 -9
  147. package/dist/components/table/hooks/index.js +1 -18
  148. package/dist/components/tag/Tag.css +121 -0
  149. package/dist/components/tag/Tag.d.ts +33 -0
  150. package/dist/components/tag/Tag.js +241 -0
  151. package/dist/components/tag/index.d.ts +1 -0
  152. package/dist/components/tag/index.js +6 -0
  153. package/dist/components/tag-group/TagGroup.css +22 -0
  154. package/dist/components/tag-group/TagGroup.d.ts +32 -0
  155. package/dist/components/tag-group/TagGroup.js +177 -0
  156. package/dist/components/tag-group/context.d.ts +15 -0
  157. package/dist/components/tag-group/context.js +3 -0
  158. package/dist/components/tag-group/index.d.ts +2 -0
  159. package/dist/components/tag-group/index.js +6 -0
  160. package/dist/components/text/Text.css +66 -0
  161. package/dist/components/text/Text.d.ts +17 -0
  162. package/dist/components/text/Text.js +46 -0
  163. package/dist/components/text/index.d.ts +1 -0
  164. package/dist/components/text/index.js +5 -0
  165. package/dist/components/text-area/TextArea.css +95 -0
  166. package/dist/components/text-area/TextArea.d.ts +19 -0
  167. package/dist/components/text-area/TextArea.js +64 -0
  168. package/dist/components/text-area/index.d.ts +1 -0
  169. package/dist/components/text-area/index.js +5 -0
  170. package/dist/components/text-field/TextField.css +33 -0
  171. package/dist/components/text-field/TextField.d.ts +34 -0
  172. package/dist/components/text-field/TextField.js +85 -0
  173. package/dist/components/text-field/index.d.ts +1 -0
  174. package/dist/components/text-field/index.js +7 -0
  175. package/dist/components/textarea/Textarea.d.ts +8 -13
  176. package/dist/components/textarea/Textarea.js +14 -45
  177. package/dist/components/textarea/index.d.ts +2 -1
  178. package/dist/components/textarea/index.js +4 -1
  179. package/dist/components/time-field/TimeField.css +215 -0
  180. package/dist/components/time-field/TimeField.d.ts +64 -0
  181. package/dist/components/time-field/TimeField.js +341 -0
  182. package/dist/components/time-field/index.d.ts +1 -0
  183. package/dist/components/time-field/index.js +11 -0
  184. package/dist/components/utils.d.ts +2 -2
  185. package/dist/components/utils.js +3 -17
  186. package/dist/hooks/form/index.d.ts +5 -0
  187. package/dist/hooks/form/index.js +12 -0
  188. package/dist/hooks/form/useField.d.ts +11 -0
  189. package/dist/hooks/form/useField.js +20 -0
  190. package/dist/hooks/form/useFieldError.d.ts +3 -0
  191. package/dist/hooks/form/useFieldError.js +3 -0
  192. package/dist/hooks/form/useFieldMeta.d.ts +20 -0
  193. package/dist/hooks/form/useFieldMeta.js +49 -0
  194. package/dist/hooks/form/useFieldProps.d.ts +10 -0
  195. package/dist/hooks/form/useFieldProps.js +51 -0
  196. package/dist/hooks/form/useForm.d.ts +27 -0
  197. package/dist/hooks/form/useForm.js +54 -0
  198. package/dist/hooks/form/utils.d.ts +4 -0
  199. package/dist/hooks/form/utils.js +30 -0
  200. package/dist/hooks/layout/index.d.ts +1 -0
  201. package/dist/hooks/layout/index.js +3 -0
  202. package/dist/hooks/layout/useDesktop.d.ts +1 -0
  203. package/dist/hooks/layout/useDesktop.js +17 -0
  204. package/dist/hooks/table/index.d.ts +9 -0
  205. package/dist/hooks/table/index.js +18 -0
  206. package/dist/index.d.ts +63 -7
  207. package/dist/index.js +145 -15
  208. package/dist/primitives/streaming/index.d.ts +2 -0
  209. package/dist/primitives/streaming/index.js +5 -0
  210. package/dist/primitives/streaming/useStreamingBuffer.d.ts +15 -0
  211. package/dist/primitives/streaming/useStreamingBuffer.js +115 -0
  212. package/dist/primitives/streaming/useStreamingSubscription.d.ts +27 -0
  213. package/dist/primitives/streaming/useStreamingSubscription.js +115 -0
  214. package/dist/styles/icons/generated-icons.css +1 -1
  215. package/package.json +1 -1
  216. package/dist/components/card/CardActions.d.ts +0 -4
  217. package/dist/components/card/CardActions.js +0 -15
  218. package/dist/components/card/CardBody.d.ts +0 -4
  219. package/dist/components/card/CardBody.js +0 -15
  220. package/dist/components/card/CardImage.d.ts +0 -3
  221. package/dist/components/card/CardImage.js +0 -10
  222. package/dist/components/card/CardTitle.d.ts +0 -6
  223. package/dist/components/card/CardTitle.js +0 -13
  224. package/dist/components/card/card.css +0 -171
  225. package/dist/components/form/FormBase.d.ts +0 -8
  226. package/dist/components/form/FormBase.js +0 -74
  227. package/dist/components/form/FormDropdown.d.ts +0 -25
  228. package/dist/components/form/FormDropdown.js +0 -139
  229. package/dist/components/form/FormField.d.ts +0 -14
  230. package/dist/components/form/FormField.js +0 -78
  231. package/dist/components/form/Label.d.ts +0 -7
  232. package/dist/components/form/NumberField.d.ts +0 -20
  233. package/dist/components/form/NumberField.js +0 -109
  234. package/dist/components/form/PasswordField.d.ts +0 -16
  235. package/dist/components/form/PasswordField.js +0 -113
  236. package/dist/components/form/ValidatedForm.d.ts +0 -26
  237. package/dist/components/form/ValidatedForm.js +0 -55
  238. package/dist/components/menu/MenuDetails.d.ts +0 -8
  239. package/dist/components/menu/MenuDropdown.d.ts +0 -12
  240. package/dist/components/menu/MenuDropdown.js +0 -48
  241. package/dist/components/menu/MenuTitle.d.ts +0 -8
  242. package/dist/components/menu/MenuTitle.js +0 -22
  243. package/dist/components/menu/menu.css +0 -364
  244. package/dist/components/textarea/textarea.css +0 -191
  245. /package/dist/{components/table/hooks → hooks/table}/helpers.d.ts +0 -0
  246. /package/dist/{components/table/hooks → hooks/table}/helpers.js +0 -0
  247. /package/dist/{components/table/hooks → hooks/table}/useAnchoredOverlayPosition.d.ts +0 -0
  248. /package/dist/{components/table/hooks → hooks/table}/useAnchoredOverlayPosition.js +0 -0
  249. /package/dist/{components/table/hooks → hooks/table}/useTableExpansion.d.ts +0 -0
  250. /package/dist/{components/table/hooks → hooks/table}/useTableExpansion.js +0 -0
  251. /package/dist/{components/table/hooks → hooks/table}/useTableFiltering.d.ts +0 -0
  252. /package/dist/{components/table/hooks → hooks/table}/useTableFiltering.js +0 -0
  253. /package/dist/{components/table/hooks → hooks/table}/useTableModel.d.ts +0 -0
  254. /package/dist/{components/table/hooks → hooks/table}/useTableModel.js +0 -0
  255. /package/dist/{components/table/hooks → hooks/table}/useTablePagination.d.ts +0 -0
  256. /package/dist/{components/table/hooks → hooks/table}/useTablePagination.js +0 -0
  257. /package/dist/{components/table/hooks → hooks/table}/useTableSelection.d.ts +0 -0
  258. /package/dist/{components/table/hooks → hooks/table}/useTableSelection.js +0 -0
  259. /package/dist/{components/table/hooks → hooks/table}/useTableSorting.d.ts +0 -0
  260. /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, };