@fpkit/acss 5.0.0 → 6.1.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 (172) hide show
  1. package/libs/{chunk-DIJBIOFE.js → chunk-2ZJV6KQ3.js} +3 -3
  2. package/libs/{chunk-LXODKKA3.cjs → chunk-3D6WUYSL.cjs} +4 -4
  3. package/libs/{chunk-2JCDEC32.js → chunk-3ENBUQIB.js} +3 -3
  4. package/libs/{chunk-NCGVF2QS.cjs → chunk-3RVZZZWX.cjs} +4 -4
  5. package/libs/{chunk-M7JLT62Q.js → chunk-4F6SI5V5.js} +2 -2
  6. package/libs/chunk-4KJP3L35.js +7 -0
  7. package/libs/chunk-4KJP3L35.js.map +1 -0
  8. package/libs/chunk-66C2J4IX.cjs +13 -0
  9. package/libs/chunk-66C2J4IX.cjs.map +1 -0
  10. package/libs/{chunk-3XJC4XUG.js → chunk-6ADHES7B.js} +2 -2
  11. package/libs/{chunk-AOFQDQVS.cjs → chunk-6WMLG4O5.cjs} +3 -3
  12. package/libs/{chunk-Q7OAQLUT.js → chunk-AQAI6COH.js} +2 -2
  13. package/libs/{chunk-6BUJZ4DJ.cjs → chunk-BVPUT2PP.cjs} +3 -3
  14. package/libs/{chunk-F64GE6RG.cjs → chunk-GVVCXXKI.cjs} +4 -4
  15. package/libs/{chunk-75YQDONV.cjs → chunk-H4JRUNKU.cjs} +6 -6
  16. package/libs/{chunk-G3TFKMWB.js → chunk-H6A2CUWA.js} +5 -5
  17. package/libs/{chunk-2GJHKWEK.cjs → chunk-LQPWXSCK.cjs} +3 -3
  18. package/libs/{chunk-IBUTNPTQ.js → chunk-M5ES7OWP.js} +2 -2
  19. package/libs/{chunk-AWZLSWDO.js → chunk-MAG46S3P.js} +2 -2
  20. package/libs/{chunk-KAR3HDXK.js → chunk-MJJKNHVH.js} +2 -2
  21. package/libs/{chunk-5CJPTDK3.cjs → chunk-OZM455LO.cjs} +3 -3
  22. package/libs/{chunk-NPWHQVYB.cjs → chunk-QU5AQQ4S.cjs} +3 -3
  23. package/libs/{chunk-U5VA34SU.js → chunk-RQSMWB3J.js} +2 -2
  24. package/libs/{chunk-5QSNJQVH.cjs → chunk-S7NIA6PI.cjs} +3 -3
  25. package/libs/{chunk-MBWI67UT.js → chunk-SPESKPUA.js} +2 -2
  26. package/libs/{chunk-PMWL5XZ4.js → chunk-SQ44OCJ2.js} +3 -3
  27. package/libs/{chunk-EKJYOCLY.cjs → chunk-VISQ434C.cjs} +3 -3
  28. package/libs/{chunk-AFINOD2L.cjs → chunk-VN2CVD4H.cjs} +3 -3
  29. package/libs/{chunk-M5JARVJD.cjs → chunk-WTWGTWVI.cjs} +3 -3
  30. package/libs/{chunk-TF3GQKOY.js → chunk-X2RDXWH5.js} +2 -2
  31. package/libs/components/breadcrumbs/breadcrumb.cjs +6 -6
  32. package/libs/components/breadcrumbs/breadcrumb.d.cts +1 -1
  33. package/libs/components/breadcrumbs/breadcrumb.d.ts +1 -1
  34. package/libs/components/breadcrumbs/breadcrumb.js +3 -3
  35. package/libs/components/button.cjs +4 -4
  36. package/libs/components/button.d.cts +1 -1
  37. package/libs/components/button.d.ts +1 -1
  38. package/libs/components/button.js +2 -2
  39. package/libs/components/card.cjs +7 -7
  40. package/libs/components/card.d.cts +1 -1
  41. package/libs/components/card.d.ts +1 -1
  42. package/libs/components/card.js +2 -2
  43. package/libs/components/dialog/dialog.cjs +7 -7
  44. package/libs/components/dialog/dialog.js +5 -5
  45. package/libs/components/form/checkbox.css +1 -1
  46. package/libs/components/form/checkbox.css.map +1 -1
  47. package/libs/components/form/checkbox.min.css +2 -2
  48. package/libs/components/form/fields.cjs +4 -4
  49. package/libs/components/form/fields.d.cts +1 -1
  50. package/libs/components/form/fields.d.ts +1 -1
  51. package/libs/components/form/fields.js +2 -2
  52. package/libs/components/form/form.css +1 -1
  53. package/libs/components/form/form.css.map +1 -1
  54. package/libs/components/form/form.min.css +2 -2
  55. package/libs/components/form/select.css +1 -0
  56. package/libs/components/form/select.css.map +1 -0
  57. package/libs/components/form/select.min.css +3 -0
  58. package/libs/components/form/textarea.cjs +4 -4
  59. package/libs/components/form/textarea.js +2 -2
  60. package/libs/components/heading/heading.cjs +3 -3
  61. package/libs/components/heading/heading.d.cts +2 -2
  62. package/libs/components/heading/heading.d.ts +2 -2
  63. package/libs/components/heading/heading.js +2 -2
  64. package/libs/components/icons/icon.cjs +4 -4
  65. package/libs/components/icons/icon.d.cts +2 -2
  66. package/libs/components/icons/icon.d.ts +2 -2
  67. package/libs/components/icons/icon.js +2 -2
  68. package/libs/components/link/link.cjs +6 -6
  69. package/libs/components/link/link.js +2 -2
  70. package/libs/components/list/list.cjs +5 -5
  71. package/libs/components/list/list.d.cts +2 -2
  72. package/libs/components/list/list.d.ts +2 -2
  73. package/libs/components/list/list.js +2 -2
  74. package/libs/components/modal.cjs +4 -4
  75. package/libs/components/modal.js +3 -3
  76. package/libs/components/nav/nav.cjs +7 -7
  77. package/libs/components/nav/nav.d.cts +2 -2
  78. package/libs/components/nav/nav.d.ts +2 -2
  79. package/libs/components/nav/nav.js +3 -3
  80. package/libs/components/text/text.cjs +5 -5
  81. package/libs/components/text/text.d.cts +1 -1
  82. package/libs/components/text/text.d.ts +1 -1
  83. package/libs/components/text/text.js +2 -2
  84. package/libs/{heading-81eef89a.d.ts → heading-064675b6.d.ts} +1 -1
  85. package/libs/hooks.cjs +4 -4
  86. package/libs/hooks.d.cts +1 -1
  87. package/libs/hooks.d.ts +1 -1
  88. package/libs/hooks.js +3 -3
  89. package/libs/{icons-df8e744f.d.ts → icons-48788561.d.ts} +1 -1
  90. package/libs/icons.cjs +3 -3
  91. package/libs/icons.d.cts +2 -2
  92. package/libs/icons.d.ts +2 -2
  93. package/libs/icons.js +2 -2
  94. package/libs/index.cjs +49 -49
  95. package/libs/index.cjs.map +1 -1
  96. package/libs/index.css +1 -1
  97. package/libs/index.css.map +1 -1
  98. package/libs/index.d.cts +74 -25
  99. package/libs/index.d.ts +74 -25
  100. package/libs/index.js +21 -21
  101. package/libs/index.js.map +1 -1
  102. package/libs/{list.types-d26de310.d.ts → list.types-bf2c44c1.d.ts} +1 -1
  103. package/libs/{ui-d01b50d4.d.ts → ui-993fc2e2.d.ts} +5 -2
  104. package/package.json +4 -7
  105. package/src/components/alert/alert.stories.tsx +1 -1
  106. package/src/components/alert/elements/dismiss-button.stories.tsx +1 -2
  107. package/src/components/badge/badge.stories.tsx +1 -1
  108. package/src/components/breadcrumbs/breadcrumb.stories.tsx +1 -2
  109. package/src/components/buttons/button.stories.tsx +1 -3
  110. package/src/components/cards/card.stories.tsx +1 -1
  111. package/src/components/cards/card.test.tsx +1 -1
  112. package/src/components/details/details.stories.tsx +1 -2
  113. package/src/components/dialog/dialog-modal.stories.tsx +1 -2
  114. package/src/components/dialog/dialog.stories.tsx +1 -1
  115. package/src/components/dialog/views/dialog-header.stories.tsx +1 -2
  116. package/src/components/form/CHECKBOX-STYLES.mdx +766 -0
  117. package/src/components/form/CHECKBOX.mdx +665 -0
  118. package/src/components/form/checkbox.scss +28 -0
  119. package/src/components/form/checkbox.tsx +72 -22
  120. package/src/components/form/form.scss +11 -14
  121. package/src/components/form/form.stories.tsx +1 -1
  122. package/src/components/form/input.stories.tsx +72 -23
  123. package/src/components/form/select.scss +97 -0
  124. package/src/components/form/select.stories.tsx +225 -9
  125. package/src/components/form/select.test.tsx +541 -0
  126. package/src/components/form/select.tsx +133 -16
  127. package/src/components/heading/heading.stories.tsx +1 -2
  128. package/src/components/images/figure.stories.tsx +1 -2
  129. package/src/components/images/img.stories.tsx +1 -1
  130. package/src/components/nav/nav.stories.tsx +1 -2
  131. package/src/components/text/text.stories.tsx +1 -1
  132. package/src/components/text-to-speech/TextToSpeech.stories.tsx +1 -1
  133. package/src/components/title/title.stories.tsx +1 -2
  134. package/src/components/ui.tsx +11 -4
  135. package/src/styles/form/checkbox.css +19 -0
  136. package/src/styles/form/checkbox.css.map +1 -1
  137. package/src/styles/form/form.css +100 -14
  138. package/src/styles/form/form.css.map +1 -1
  139. package/src/styles/form/select.css +75 -0
  140. package/src/styles/form/select.css.map +1 -0
  141. package/src/styles/index.css +100 -14
  142. package/src/styles/index.css.map +1 -1
  143. package/libs/chunk-DDSXKOUB.js +0 -7
  144. package/libs/chunk-DDSXKOUB.js.map +0 -1
  145. package/libs/chunk-EJ6KYBFE.cjs +0 -13
  146. package/libs/chunk-EJ6KYBFE.cjs.map +0 -1
  147. /package/libs/{chunk-DIJBIOFE.js.map → chunk-2ZJV6KQ3.js.map} +0 -0
  148. /package/libs/{chunk-LXODKKA3.cjs.map → chunk-3D6WUYSL.cjs.map} +0 -0
  149. /package/libs/{chunk-2JCDEC32.js.map → chunk-3ENBUQIB.js.map} +0 -0
  150. /package/libs/{chunk-NCGVF2QS.cjs.map → chunk-3RVZZZWX.cjs.map} +0 -0
  151. /package/libs/{chunk-M7JLT62Q.js.map → chunk-4F6SI5V5.js.map} +0 -0
  152. /package/libs/{chunk-3XJC4XUG.js.map → chunk-6ADHES7B.js.map} +0 -0
  153. /package/libs/{chunk-AOFQDQVS.cjs.map → chunk-6WMLG4O5.cjs.map} +0 -0
  154. /package/libs/{chunk-Q7OAQLUT.js.map → chunk-AQAI6COH.js.map} +0 -0
  155. /package/libs/{chunk-6BUJZ4DJ.cjs.map → chunk-BVPUT2PP.cjs.map} +0 -0
  156. /package/libs/{chunk-F64GE6RG.cjs.map → chunk-GVVCXXKI.cjs.map} +0 -0
  157. /package/libs/{chunk-75YQDONV.cjs.map → chunk-H4JRUNKU.cjs.map} +0 -0
  158. /package/libs/{chunk-G3TFKMWB.js.map → chunk-H6A2CUWA.js.map} +0 -0
  159. /package/libs/{chunk-2GJHKWEK.cjs.map → chunk-LQPWXSCK.cjs.map} +0 -0
  160. /package/libs/{chunk-IBUTNPTQ.js.map → chunk-M5ES7OWP.js.map} +0 -0
  161. /package/libs/{chunk-AWZLSWDO.js.map → chunk-MAG46S3P.js.map} +0 -0
  162. /package/libs/{chunk-KAR3HDXK.js.map → chunk-MJJKNHVH.js.map} +0 -0
  163. /package/libs/{chunk-5CJPTDK3.cjs.map → chunk-OZM455LO.cjs.map} +0 -0
  164. /package/libs/{chunk-NPWHQVYB.cjs.map → chunk-QU5AQQ4S.cjs.map} +0 -0
  165. /package/libs/{chunk-U5VA34SU.js.map → chunk-RQSMWB3J.js.map} +0 -0
  166. /package/libs/{chunk-5QSNJQVH.cjs.map → chunk-S7NIA6PI.cjs.map} +0 -0
  167. /package/libs/{chunk-MBWI67UT.js.map → chunk-SPESKPUA.js.map} +0 -0
  168. /package/libs/{chunk-PMWL5XZ4.js.map → chunk-SQ44OCJ2.js.map} +0 -0
  169. /package/libs/{chunk-EKJYOCLY.cjs.map → chunk-VISQ434C.cjs.map} +0 -0
  170. /package/libs/{chunk-AFINOD2L.cjs.map → chunk-VN2CVD4H.cjs.map} +0 -0
  171. /package/libs/{chunk-M5JARVJD.cjs.map → chunk-WTWGTWVI.cjs.map} +0 -0
  172. /package/libs/{chunk-TF3GQKOY.js.map → chunk-X2RDXWH5.js.map} +0 -0
@@ -2,24 +2,26 @@ import { StoryObj, Meta } from "@storybook/react-vite";
2
2
  import { within, expect } from "storybook/test";
3
3
 
4
4
  import Select from "./select";
5
+ import "./select.scss";
5
6
  import React from "react";
7
+
6
8
  const meta: Meta<typeof Select> = {
7
- title: "FP.REACT Forms/Select",
9
+ title: "FP.React Forms/Select",
8
10
  tags: ["stable"],
9
11
  component: Select,
10
12
  parameters: {
11
13
  docs: {
12
14
  description: {
13
- component: "Base select/Combobox component",
15
+ component: "Accessible select dropdown component with themeable arrow and validation support. Follows fpkit component conventions with ref forwarding and custom styling options.",
14
16
  },
15
17
  },
16
18
  },
17
19
  args: {
18
20
  children: (
19
21
  <>
20
- <Select.Option selectValue="value" selectLabel="Option 1" />
21
- <Select.Option selectValue="value" selectLabel="Option 2" />
22
- <Select.Option selectValue="value" selectLabel="Option 3" />
22
+ <Select.Option value="option1" label="Option 1" />
23
+ <Select.Option value="option2" label="Option 2" />
24
+ <Select.Option value="option3" label="Option 3" />
23
25
  </>
24
26
  ),
25
27
  },
@@ -28,18 +30,232 @@ const meta: Meta<typeof Select> = {
28
30
  export default meta;
29
31
  type Story = StoryObj<typeof Select>;
30
32
 
33
+ /**
34
+ * Default select component with standard options using the new API
35
+ */
31
36
  export const SelectComponent: Story = {
32
37
  args: {
38
+ id: "default-select",
39
+ name: "defaultSelect",
33
40
  children: (
34
41
  <>
35
- <Select.Option selectValue="value" selectLabel="Option 1" />
36
- <Select.Option selectValue="value" selectLabel="Option 2" />
37
- <Select.Option selectValue="value" selectLabel="Option 3" />
42
+ <Select.Option value="us" label="United States" />
43
+ <Select.Option value="uk" label="United Kingdom" />
44
+ <Select.Option value="ca" label="Canada" />
45
+ <Select.Option value="au" label="Australia" />
38
46
  </>
39
47
  ),
40
48
  },
41
49
  play: async ({ canvasElement }) => {
42
50
  const canvas = within(canvasElement);
43
- expect(canvas.getByRole("combobox")).toBeInTheDocument();
51
+ const select = canvas.getByRole("combobox");
52
+ expect(select).toBeInTheDocument();
53
+ expect(select).toHaveAttribute("id", "default-select");
54
+ },
55
+ } as Story;
56
+
57
+ /**
58
+ * Select with label prop for display text
59
+ */
60
+ export const WithLabels: Story = {
61
+ args: {
62
+ children: (
63
+ <>
64
+ <Select.Option value="sm" label="Small (SM)" />
65
+ <Select.Option value="md" label="Medium (MD)" />
66
+ <Select.Option value="lg" label="Large (LG)" />
67
+ <Select.Option value="xl" label="Extra Large (XL)" />
68
+ </>
69
+ ),
70
+ },
71
+ } as Story;
72
+
73
+ /**
74
+ * Select with children instead of label prop
75
+ */
76
+ export const WithChildren: Story = {
77
+ args: {
78
+ children: (
79
+ <>
80
+ <Select.Option value="react">⚛️ React</Select.Option>
81
+ <Select.Option value="vue">💚 Vue</Select.Option>
82
+ <Select.Option value="angular">🔺 Angular</Select.Option>
83
+ <Select.Option value="svelte">🧡 Svelte</Select.Option>
84
+ </>
85
+ ),
86
+ },
87
+ } as Story;
88
+
89
+ /**
90
+ * Select with disabled options
91
+ */
92
+ export const WithDisabledOptions: Story = {
93
+ args: {
94
+ children: (
95
+ <>
96
+ <Select.Option value="available" label="Available Option" />
97
+ <Select.Option value="disabled1" label="Disabled Option" disabled />
98
+ <Select.Option value="active" label="Active Option" />
99
+ <Select.Option value="disabled2" label="Another Disabled" disabled />
100
+ </>
101
+ ),
102
+ },
103
+ } as Story;
104
+
105
+ /**
106
+ * Required select field
107
+ */
108
+ export const Required: Story = {
109
+ args: {
110
+ id: "required-select",
111
+ name: "requiredSelect",
112
+ required: true,
113
+ children: (
114
+ <>
115
+ <Select.Option value="" label="-- Select an option --" />
116
+ <Select.Option value="option1" label="Option 1" />
117
+ <Select.Option value="option2" label="Option 2" />
118
+ <Select.Option value="option3" label="Option 3" />
119
+ </>
120
+ ),
121
+ },
122
+ } as Story;
123
+
124
+ /**
125
+ * Disabled select component
126
+ */
127
+ export const Disabled: Story = {
128
+ args: {
129
+ disabled: true,
130
+ children: (
131
+ <>
132
+ <Select.Option value="option1" label="Option 1" />
133
+ <Select.Option value="option2" label="Option 2" />
134
+ </>
135
+ ),
136
+ },
137
+ } as Story;
138
+
139
+ /**
140
+ * Select with custom styling
141
+ */
142
+ export const CustomStyling: Story = {
143
+ args: {
144
+ styles: {
145
+ "--select-arrow-color": "#0066cc",
146
+ "--input-border-color": "#0066cc",
147
+ "--input-radius": "1rem",
148
+ } as React.CSSProperties,
149
+ classes: "custom-select",
150
+ children: (
151
+ <>
152
+ <Select.Option value="option1" label="Styled Option 1" />
153
+ <Select.Option value="option2" label="Styled Option 2" />
154
+ <Select.Option value="option3" label="Styled Option 3" />
155
+ </>
156
+ ),
157
+ },
158
+ } as Story;
159
+
160
+ /**
161
+ * Styled options with variant data attributes
162
+ */
163
+ export const StyledWithVariants: Story = {
164
+ args: {
165
+ children: (
166
+ <>
167
+ <Select.Option value="default" label="Default Option" />
168
+ <Select.Option value="primary" label="Primary Option" variant="primary" />
169
+ <Select.Option value="success" label="Success Option" variant="success" />
170
+ <Select.Option value="error" label="Error Option" variant="error" />
171
+ <Select.Option value="warning" label="Warning Option" variant="warning" />
172
+ </>
173
+ ),
174
+ },
175
+ parameters: {
176
+ docs: {
177
+ description: {
178
+ story: "Options with variant data attributes for CSS targeting: `option[data-option=\"primary\"]`",
179
+ },
180
+ },
181
+ },
182
+ } as Story;
183
+
184
+ /**
185
+ * Options with size variants
186
+ */
187
+ export const WithSizes: Story = {
188
+ args: {
189
+ children: (
190
+ <>
191
+ <Select.Option value="sm" label="Small Option" size="sm" />
192
+ <Select.Option value="md" label="Medium Option" size="md" />
193
+ <Select.Option value="lg" label="Large Option" size="lg" />
194
+ </>
195
+ ),
196
+ },
197
+ parameters: {
198
+ docs: {
199
+ description: {
200
+ story: "Options with size data attributes: `option[data-size=\"sm\"]`",
201
+ },
202
+ },
203
+ },
204
+ } as Story;
205
+
206
+ /**
207
+ * Options with custom data attributes
208
+ */
209
+ export const WithCustomDataAttributes: Story = {
210
+ args: {
211
+ children: (
212
+ <>
213
+ <Select.Option
214
+ value="premium"
215
+ label="Premium Plan"
216
+ dataAttributes={{ 'data-category': 'premium', 'data-featured': true }}
217
+ />
218
+ <Select.Option
219
+ value="standard"
220
+ label="Standard Plan"
221
+ dataAttributes={{ 'data-category': 'standard' }}
222
+ />
223
+ <Select.Option
224
+ value="basic"
225
+ label="Basic Plan"
226
+ dataAttributes={{ 'data-category': 'basic', 'data-price': 0 }}
227
+ />
228
+ </>
229
+ ),
230
+ },
231
+ parameters: {
232
+ docs: {
233
+ description: {
234
+ story: "Options with custom data attributes for advanced styling: `option[data-category=\"premium\"]`",
235
+ },
236
+ },
237
+ },
238
+ } as Story;
239
+
240
+ /**
241
+ * Legacy API - backwards compatibility with selectValue and selectLabel
242
+ * @deprecated Use `value` and `label` props instead
243
+ */
244
+ export const LegacyAPI: Story = {
245
+ args: {
246
+ children: (
247
+ <>
248
+ <Select.Option selectValue="legacy1" selectLabel="Legacy Option 1" />
249
+ <Select.Option selectValue="legacy2" selectLabel="Legacy Option 2" />
250
+ <Select.Option selectValue="legacy3" selectLabel="Legacy Option 3" />
251
+ </>
252
+ ),
253
+ },
254
+ parameters: {
255
+ docs: {
256
+ description: {
257
+ story: "Example using deprecated `selectValue` and `selectLabel` props. Use `value` and `label` instead.",
258
+ },
259
+ },
44
260
  },
45
261
  } as Story;