@charcoal-ui/react 4.3.0 → 4.4.1

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 (40) hide show
  1. package/dist/components/MultiSelect/context.d.ts +14 -0
  2. package/dist/components/MultiSelect/context.d.ts.map +1 -0
  3. package/dist/components/MultiSelect/index.d.ts +38 -0
  4. package/dist/components/MultiSelect/index.d.ts.map +1 -0
  5. package/dist/index.cjs.js +318 -216
  6. package/dist/index.cjs.js.map +1 -1
  7. package/dist/index.css +111 -0
  8. package/dist/index.css.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.esm.js +281 -181
  12. package/dist/index.esm.js.map +1 -1
  13. package/dist/layered.css +111 -0
  14. package/dist/layered.css.map +1 -1
  15. package/package.json +6 -7
  16. package/src/components/Button/__snapshots__/index.story.storyshot +89 -71
  17. package/src/components/Checkbox/CheckboxInput/__snapshots__/index.story.storyshot +50 -53
  18. package/src/components/Checkbox/__snapshots__/index.story.storyshot +108 -102
  19. package/src/components/Clickable/__snapshots__/index.story.storyshot +19 -17
  20. package/src/components/DropdownSelector/ListItem/__snapshots__/index.story.storyshot +45 -54
  21. package/src/components/DropdownSelector/MenuList/__snapshots__/index.story.storyshot +238 -275
  22. package/src/components/DropdownSelector/Popover/__snapshots__/index.story.storyshot +28 -50
  23. package/src/components/DropdownSelector/__snapshots__/index.story.storyshot +780 -1158
  24. package/src/components/Icon/__snapshots__/index.story.storyshot +9 -7
  25. package/src/components/IconButton/__snapshots__/index.story.storyshot +43 -37
  26. package/src/components/LoadingSpinner/__snapshots__/index.story.storyshot +52 -64
  27. package/src/components/Modal/__snapshots__/index.story.storyshot +568 -716
  28. package/src/components/MultiSelect/__snapshots__/index.story.storyshot +531 -0
  29. package/src/components/MultiSelect/context.ts +23 -0
  30. package/src/components/MultiSelect/index.css +139 -0
  31. package/src/components/MultiSelect/index.story.tsx +118 -0
  32. package/src/components/MultiSelect/index.test.tsx +255 -0
  33. package/src/components/MultiSelect/index.tsx +153 -0
  34. package/src/components/Radio/__snapshots__/index.story.storyshot +313 -367
  35. package/src/components/SegmentedControl/__snapshots__/index.story.storyshot +116 -228
  36. package/src/components/Switch/__snapshots__/index.story.storyshot +74 -73
  37. package/src/components/TagItem/__snapshots__/index.story.storyshot +177 -193
  38. package/src/components/TextArea/__snapshots__/TextArea.story.storyshot +372 -533
  39. package/src/components/TextField/__snapshots__/TextField.story.storyshot +444 -583
  40. package/src/index.ts +6 -0
@@ -0,0 +1,531 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`Storybook Tests > react/MultiSelect > Basic 1`] = `
4
+ <div>
5
+ <div
6
+ data-dark="false"
7
+ >
8
+ <div
9
+ aria-label="label"
10
+ data-testid="SelectGroup"
11
+ style="display: grid; grid-template-columns: 1fr; gap: 8px;"
12
+ >
13
+ <label
14
+ aria-disabled="false"
15
+ class="charcoal-multi-select"
16
+ >
17
+ <input
18
+ aria-invalid="false"
19
+ checked=""
20
+ class="charcoal-multi-select-input"
21
+ data-overlay="false"
22
+ name="name"
23
+ type="checkbox"
24
+ value="選択肢1"
25
+ />
26
+ <div
27
+ aria-hidden="true"
28
+ aria-invalid="false"
29
+ class="charcoal-multi-select-overlay"
30
+ data-overlay="false"
31
+ >
32
+ <pixiv-icon
33
+ name="24/Check"
34
+ unsafe-non-guideline-scale="0.6666666666666666"
35
+ />
36
+ </div>
37
+ <div
38
+ class="charcoal-multi-select-label"
39
+ >
40
+ 選択肢1
41
+ </div>
42
+ </label>
43
+ <label
44
+ aria-disabled="false"
45
+ class="charcoal-multi-select"
46
+ >
47
+ <input
48
+ aria-invalid="false"
49
+ class="charcoal-multi-select-input"
50
+ data-overlay="false"
51
+ name="name"
52
+ type="checkbox"
53
+ value="選択肢2"
54
+ />
55
+ <div
56
+ aria-hidden="true"
57
+ aria-invalid="false"
58
+ class="charcoal-multi-select-overlay"
59
+ data-overlay="false"
60
+ >
61
+ <pixiv-icon
62
+ name="24/Check"
63
+ unsafe-non-guideline-scale="0.6666666666666666"
64
+ />
65
+ </div>
66
+ <div
67
+ class="charcoal-multi-select-label"
68
+ >
69
+ 選択肢2
70
+ </div>
71
+ </label>
72
+ <label
73
+ aria-disabled="false"
74
+ class="charcoal-multi-select"
75
+ >
76
+ <input
77
+ aria-invalid="false"
78
+ checked=""
79
+ class="charcoal-multi-select-input"
80
+ data-overlay="false"
81
+ name="name"
82
+ type="checkbox"
83
+ value="選択肢3"
84
+ />
85
+ <div
86
+ aria-hidden="true"
87
+ aria-invalid="false"
88
+ class="charcoal-multi-select-overlay"
89
+ data-overlay="false"
90
+ >
91
+ <pixiv-icon
92
+ name="24/Check"
93
+ unsafe-non-guideline-scale="0.6666666666666666"
94
+ />
95
+ </div>
96
+ <div
97
+ class="charcoal-multi-select-label"
98
+ >
99
+ 選択肢3
100
+ </div>
101
+ </label>
102
+ <label
103
+ aria-disabled="false"
104
+ class="charcoal-multi-select"
105
+ >
106
+ <input
107
+ aria-invalid="false"
108
+ class="charcoal-multi-select-input"
109
+ data-overlay="false"
110
+ name="name"
111
+ type="checkbox"
112
+ value="選択肢4"
113
+ />
114
+ <div
115
+ aria-hidden="true"
116
+ aria-invalid="false"
117
+ class="charcoal-multi-select-overlay"
118
+ data-overlay="false"
119
+ >
120
+ <pixiv-icon
121
+ name="24/Check"
122
+ unsafe-non-guideline-scale="0.6666666666666666"
123
+ />
124
+ </div>
125
+ <div
126
+ class="charcoal-multi-select-label"
127
+ >
128
+ 選択肢4
129
+ </div>
130
+ </label>
131
+ </div>
132
+ </div>
133
+ </div>
134
+ `;
135
+
136
+ exports[`Storybook Tests > react/MultiSelect > Invalid 1`] = `
137
+ <div>
138
+ <div
139
+ data-dark="false"
140
+ >
141
+ <div
142
+ aria-label="label"
143
+ data-testid="SelectGroup"
144
+ style="display: grid; grid-template-columns: 1fr; gap: 8px;"
145
+ >
146
+ <label
147
+ aria-disabled="false"
148
+ class="charcoal-multi-select"
149
+ >
150
+ <input
151
+ aria-invalid="true"
152
+ class="charcoal-multi-select-input"
153
+ data-overlay="false"
154
+ name="name"
155
+ type="checkbox"
156
+ value="選択肢1"
157
+ />
158
+ <div
159
+ aria-hidden="true"
160
+ aria-invalid="true"
161
+ class="charcoal-multi-select-overlay"
162
+ data-overlay="false"
163
+ >
164
+ <pixiv-icon
165
+ name="24/Check"
166
+ unsafe-non-guideline-scale="0.6666666666666666"
167
+ />
168
+ </div>
169
+ <div
170
+ class="charcoal-multi-select-label"
171
+ >
172
+ 選択肢1
173
+ </div>
174
+ </label>
175
+ <label
176
+ aria-disabled="false"
177
+ class="charcoal-multi-select"
178
+ >
179
+ <input
180
+ aria-invalid="true"
181
+ class="charcoal-multi-select-input"
182
+ data-overlay="false"
183
+ name="name"
184
+ type="checkbox"
185
+ value="選択肢2"
186
+ />
187
+ <div
188
+ aria-hidden="true"
189
+ aria-invalid="true"
190
+ class="charcoal-multi-select-overlay"
191
+ data-overlay="false"
192
+ >
193
+ <pixiv-icon
194
+ name="24/Check"
195
+ unsafe-non-guideline-scale="0.6666666666666666"
196
+ />
197
+ </div>
198
+ <div
199
+ class="charcoal-multi-select-label"
200
+ >
201
+ 選択肢2
202
+ </div>
203
+ </label>
204
+ <label
205
+ aria-disabled="false"
206
+ class="charcoal-multi-select"
207
+ >
208
+ <input
209
+ aria-invalid="true"
210
+ class="charcoal-multi-select-input"
211
+ data-overlay="false"
212
+ name="name"
213
+ type="checkbox"
214
+ value="選択肢3"
215
+ />
216
+ <div
217
+ aria-hidden="true"
218
+ aria-invalid="true"
219
+ class="charcoal-multi-select-overlay"
220
+ data-overlay="false"
221
+ >
222
+ <pixiv-icon
223
+ name="24/Check"
224
+ unsafe-non-guideline-scale="0.6666666666666666"
225
+ />
226
+ </div>
227
+ <div
228
+ class="charcoal-multi-select-label"
229
+ >
230
+ 選択肢3
231
+ </div>
232
+ </label>
233
+ <label
234
+ aria-disabled="false"
235
+ class="charcoal-multi-select"
236
+ >
237
+ <input
238
+ aria-invalid="true"
239
+ class="charcoal-multi-select-input"
240
+ data-overlay="false"
241
+ name="name"
242
+ type="checkbox"
243
+ value="選択肢4"
244
+ />
245
+ <div
246
+ aria-hidden="true"
247
+ aria-invalid="true"
248
+ class="charcoal-multi-select-overlay"
249
+ data-overlay="false"
250
+ >
251
+ <pixiv-icon
252
+ name="24/Check"
253
+ unsafe-non-guideline-scale="0.6666666666666666"
254
+ />
255
+ </div>
256
+ <div
257
+ class="charcoal-multi-select-label"
258
+ >
259
+ 選択肢4
260
+ </div>
261
+ </label>
262
+ </div>
263
+ </div>
264
+ </div>
265
+ `;
266
+
267
+ exports[`Storybook Tests > react/MultiSelect > Overlay 1`] = `
268
+ <div>
269
+ <div
270
+ data-dark="false"
271
+ >
272
+ <div
273
+ aria-label="label"
274
+ data-testid="SelectGroup"
275
+ style="display: grid; grid-template-columns: 1fr; gap: 8px;"
276
+ >
277
+ <label
278
+ aria-disabled="false"
279
+ class="charcoal-multi-select"
280
+ >
281
+ <input
282
+ aria-invalid="false"
283
+ class="charcoal-multi-select-input"
284
+ data-overlay="true"
285
+ name="name"
286
+ type="checkbox"
287
+ value="選択肢1"
288
+ />
289
+ <div
290
+ aria-hidden="true"
291
+ aria-invalid="false"
292
+ class="charcoal-multi-select-overlay"
293
+ data-overlay="true"
294
+ >
295
+ <pixiv-icon
296
+ name="24/Check"
297
+ unsafe-non-guideline-scale="0.6666666666666666"
298
+ />
299
+ </div>
300
+ <div
301
+ class="charcoal-multi-select-label"
302
+ >
303
+ 選択肢1
304
+ </div>
305
+ </label>
306
+ <label
307
+ aria-disabled="false"
308
+ class="charcoal-multi-select"
309
+ >
310
+ <input
311
+ aria-invalid="false"
312
+ class="charcoal-multi-select-input"
313
+ data-overlay="true"
314
+ name="name"
315
+ type="checkbox"
316
+ value="選択肢2"
317
+ />
318
+ <div
319
+ aria-hidden="true"
320
+ aria-invalid="false"
321
+ class="charcoal-multi-select-overlay"
322
+ data-overlay="true"
323
+ >
324
+ <pixiv-icon
325
+ name="24/Check"
326
+ unsafe-non-guideline-scale="0.6666666666666666"
327
+ />
328
+ </div>
329
+ <div
330
+ class="charcoal-multi-select-label"
331
+ >
332
+ 選択肢2
333
+ </div>
334
+ </label>
335
+ <label
336
+ aria-disabled="false"
337
+ class="charcoal-multi-select"
338
+ >
339
+ <input
340
+ aria-invalid="false"
341
+ class="charcoal-multi-select-input"
342
+ data-overlay="true"
343
+ name="name"
344
+ type="checkbox"
345
+ value="選択肢3"
346
+ />
347
+ <div
348
+ aria-hidden="true"
349
+ aria-invalid="false"
350
+ class="charcoal-multi-select-overlay"
351
+ data-overlay="true"
352
+ >
353
+ <pixiv-icon
354
+ name="24/Check"
355
+ unsafe-non-guideline-scale="0.6666666666666666"
356
+ />
357
+ </div>
358
+ <div
359
+ class="charcoal-multi-select-label"
360
+ >
361
+ 選択肢3
362
+ </div>
363
+ </label>
364
+ <label
365
+ aria-disabled="false"
366
+ class="charcoal-multi-select"
367
+ >
368
+ <input
369
+ aria-invalid="false"
370
+ class="charcoal-multi-select-input"
371
+ data-overlay="true"
372
+ name="name"
373
+ type="checkbox"
374
+ value="選択肢4"
375
+ />
376
+ <div
377
+ aria-hidden="true"
378
+ aria-invalid="false"
379
+ class="charcoal-multi-select-overlay"
380
+ data-overlay="true"
381
+ >
382
+ <pixiv-icon
383
+ name="24/Check"
384
+ unsafe-non-guideline-scale="0.6666666666666666"
385
+ />
386
+ </div>
387
+ <div
388
+ class="charcoal-multi-select-label"
389
+ >
390
+ 選択肢4
391
+ </div>
392
+ </label>
393
+ </div>
394
+ </div>
395
+ </div>
396
+ `;
397
+
398
+ exports[`Storybook Tests > react/MultiSelect > Playground 1`] = `
399
+ <div>
400
+ <div
401
+ data-dark="false"
402
+ >
403
+ <div
404
+ aria-label=""
405
+ data-testid="SelectGroup"
406
+ style="display: grid; grid-template-columns: 1fr; gap: 8px;"
407
+ >
408
+ <label
409
+ aria-disabled="false"
410
+ class="charcoal-multi-select"
411
+ >
412
+ <input
413
+ aria-invalid="false"
414
+ class="charcoal-multi-select-input"
415
+ data-overlay="false"
416
+ name=""
417
+ type="checkbox"
418
+ value="選択肢1"
419
+ />
420
+ <div
421
+ aria-hidden="true"
422
+ aria-invalid="false"
423
+ class="charcoal-multi-select-overlay"
424
+ data-overlay="false"
425
+ >
426
+ <pixiv-icon
427
+ name="24/Check"
428
+ unsafe-non-guideline-scale="0.6666666666666666"
429
+ />
430
+ </div>
431
+ <div
432
+ class="charcoal-multi-select-label"
433
+ >
434
+ 選択肢
435
+ 1
436
+ </div>
437
+ </label>
438
+ <label
439
+ aria-disabled="false"
440
+ class="charcoal-multi-select"
441
+ >
442
+ <input
443
+ aria-invalid="false"
444
+ class="charcoal-multi-select-input"
445
+ data-overlay="false"
446
+ name=""
447
+ type="checkbox"
448
+ value="選択肢2"
449
+ />
450
+ <div
451
+ aria-hidden="true"
452
+ aria-invalid="false"
453
+ class="charcoal-multi-select-overlay"
454
+ data-overlay="false"
455
+ >
456
+ <pixiv-icon
457
+ name="24/Check"
458
+ unsafe-non-guideline-scale="0.6666666666666666"
459
+ />
460
+ </div>
461
+ <div
462
+ class="charcoal-multi-select-label"
463
+ >
464
+ 選択肢
465
+ 2
466
+ </div>
467
+ </label>
468
+ <label
469
+ aria-disabled="false"
470
+ class="charcoal-multi-select"
471
+ >
472
+ <input
473
+ aria-invalid="false"
474
+ class="charcoal-multi-select-input"
475
+ data-overlay="false"
476
+ name=""
477
+ type="checkbox"
478
+ value="選択肢3"
479
+ />
480
+ <div
481
+ aria-hidden="true"
482
+ aria-invalid="false"
483
+ class="charcoal-multi-select-overlay"
484
+ data-overlay="false"
485
+ >
486
+ <pixiv-icon
487
+ name="24/Check"
488
+ unsafe-non-guideline-scale="0.6666666666666666"
489
+ />
490
+ </div>
491
+ <div
492
+ class="charcoal-multi-select-label"
493
+ >
494
+ 選択肢
495
+ 3
496
+ </div>
497
+ </label>
498
+ <label
499
+ aria-disabled="false"
500
+ class="charcoal-multi-select"
501
+ >
502
+ <input
503
+ aria-invalid="false"
504
+ class="charcoal-multi-select-input"
505
+ data-overlay="false"
506
+ name=""
507
+ type="checkbox"
508
+ value="選択肢4"
509
+ />
510
+ <div
511
+ aria-hidden="true"
512
+ aria-invalid="false"
513
+ class="charcoal-multi-select-overlay"
514
+ data-overlay="false"
515
+ >
516
+ <pixiv-icon
517
+ name="24/Check"
518
+ unsafe-non-guideline-scale="0.6666666666666666"
519
+ />
520
+ </div>
521
+ <div
522
+ class="charcoal-multi-select-label"
523
+ >
524
+ 選択肢
525
+ 4
526
+ </div>
527
+ </label>
528
+ </div>
529
+ </div>
530
+ </div>
531
+ `;
@@ -0,0 +1,23 @@
1
+ import { createContext } from 'react'
2
+
3
+ type MultiSelectGroupContext = {
4
+ name: string
5
+ selected: string[]
6
+ disabled: boolean
7
+ readonly: boolean
8
+ invalid: boolean
9
+ onChange: ({ value, selected }: { value: string; selected: boolean }) => void
10
+ }
11
+
12
+ export const MultiSelectGroupContext = createContext<MultiSelectGroupContext>({
13
+ name: undefined as never,
14
+ selected: [],
15
+ disabled: false,
16
+ readonly: false,
17
+ invalid: false,
18
+ onChange() {
19
+ throw new Error(
20
+ 'Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?'
21
+ )
22
+ },
23
+ })
@@ -0,0 +1,139 @@
1
+ .charcoal-multi-select {
2
+ display: grid;
3
+ grid-template-columns: auto 1fr;
4
+ align-items: center;
5
+ position: relative;
6
+ cursor: pointer;
7
+ gap: 4px;
8
+ }
9
+
10
+ .charcoal-multi-select:disabled,
11
+ .charcoal-multi-select[aria-disabled]:not([aria-disabled='false']) {
12
+ opacity: 0.32;
13
+ cursor: default;
14
+ }
15
+
16
+ .charcoal-multi-select-label {
17
+ display: flow-root;
18
+ align-items: center;
19
+ font-size: 14px;
20
+ line-height: 22px;
21
+ color: var(--charcoal-text2);
22
+ }
23
+
24
+ .charcoal-multi-select-label::before {
25
+ display: block;
26
+ width: 0;
27
+ height: 0;
28
+ content: '';
29
+ margin-top: -4px;
30
+ }
31
+
32
+ .charcoal-multi-select-label::after {
33
+ display: block;
34
+ width: 0;
35
+ height: 0;
36
+ content: '';
37
+ margin-bottom: -4px;
38
+ }
39
+
40
+ .charcoal-multi-select-input[type='checkbox'] {
41
+ appearance: none;
42
+ display: block;
43
+ width: 20px;
44
+ height: 20px;
45
+ margin: 0;
46
+ background-color: var(--charcoal-text3);
47
+ border-radius: 999999px;
48
+ transition: 0.2s background-color, 0.2s box-shadow;
49
+ }
50
+
51
+ .charcoal-multi-select-input[type='checkbox']:checked {
52
+ background-color: var(--charcoal-brand);
53
+ }
54
+
55
+ .charcoal-multi-select-input[type='checkbox']:focus {
56
+ outline: none;
57
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
58
+ }
59
+
60
+ .charcoal-multi-select-input[type='checkbox']:focus-visible {
61
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
62
+ }
63
+
64
+ .charcoal-multi-select-input[type='checkbox']:focus:not(:focus-visible) {
65
+ box-shadow: none;
66
+ }
67
+
68
+ .charcoal-multi-select-input[type='checkbox']:hover:not(:disabled):not(
69
+ [aria-disabled]
70
+ ),
71
+ .charcoal-multi-select-input[type='checkbox']:hover[aria-disabled='false'] {
72
+ background-color: var(--charcoal-text3-hover);
73
+ }
74
+
75
+ .charcoal-multi-select-input[type='checkbox']:active:not(:disabled):not(
76
+ [aria-disabled]
77
+ ),
78
+ .charcoal-multi-select-input[type='checkbox']:active[aria-disabled='false'] {
79
+ background-color: var(--charcoal-text3-press);
80
+ }
81
+
82
+ .charcoal-multi-select-input[type='checkbox']:checked:hover:not(:disabled):not(
83
+ [aria-disabled]
84
+ ),
85
+ .charcoal-multi-select-input[type='checkbox']:checked:hover[aria-disabled='false'] {
86
+ background-color: var(--charcoal-brand-hover);
87
+ }
88
+
89
+ .charcoal-multi-select-input[type='checkbox']:checked:active:not(:disabled):not(
90
+ [aria-disabled]
91
+ ),
92
+ .charcoal-multi-select-input[type='checkbox']:checked:active[aria-disabled='false'] {
93
+ background-color: var(--charcoal-brand-press);
94
+ }
95
+
96
+ .charcoal-multi-select-input[aria-invalid='true'][data-overlay='false']:not(
97
+ :disabled
98
+ ):not([aria-disabled]) {
99
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
100
+ }
101
+
102
+ .charcoal-multi-select-input[aria-invalid='true'][data-overlay='false'][aria-disabled='false'] {
103
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
104
+ }
105
+
106
+ .charcoal-multi-select-input[data-overlay='true'] {
107
+ background-color: var(--charcoal-surface4);
108
+ }
109
+
110
+ .charcoal-multi-select-overlay {
111
+ position: absolute;
112
+ top: -2px;
113
+ left: -2px;
114
+ box-sizing: border-box;
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ width: 24px;
119
+ height: 24px;
120
+ border-radius: 999999px;
121
+ color: var(--charcoal-text5);
122
+ transition: 0.2s box-shadow;
123
+ }
124
+
125
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true']:not(
126
+ :disabled
127
+ ):not([aria-disabled]) {
128
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
129
+ }
130
+
131
+ .charcoal-multi-select-overlay[aria-invalid='true'][data-overlay='true'][aria-disabled='false'] {
132
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
133
+ }
134
+
135
+ .charcoal-multi-select-overlay[data-overlay='true'] {
136
+ border-color: var(--charcoal-text5);
137
+ border-width: 2px;
138
+ border-style: solid;
139
+ }