@charcoal-ui/react 6.1.0-beta.4 → 6.1.0-beta.6

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 (35) hide show
  1. package/dist/components/Notification/NotificationRegion.cjs +10 -6
  2. package/dist/components/Notification/NotificationRegion.cjs.map +1 -1
  3. package/dist/components/Notification/NotificationRegion.d.ts +2 -1
  4. package/dist/components/Notification/NotificationRegion.d.ts.map +1 -1
  5. package/dist/components/Notification/NotificationRegion.js +11 -7
  6. package/dist/components/Notification/NotificationRegion.js.map +1 -1
  7. package/dist/components/Notification/Snackbar/index.d.ts +2 -1
  8. package/dist/components/Notification/Snackbar/index.d.ts.map +1 -1
  9. package/dist/components/Notification/Snackbar/index2.cjs +3 -4
  10. package/dist/components/Notification/Snackbar/index2.cjs.map +1 -1
  11. package/dist/components/Notification/Snackbar/index2.js +3 -4
  12. package/dist/components/Notification/Snackbar/index2.js.map +1 -1
  13. package/dist/components/Notification/useNotificationQueue.cjs +5 -8
  14. package/dist/components/Notification/useNotificationQueue.cjs.map +1 -1
  15. package/dist/components/Notification/useNotificationQueue.d.ts +2 -4
  16. package/dist/components/Notification/useNotificationQueue.d.ts.map +1 -1
  17. package/dist/components/Notification/useNotificationQueue.js +5 -8
  18. package/dist/components/Notification/useNotificationQueue.js.map +1 -1
  19. package/dist/index.css +748 -740
  20. package/dist/layered.css +748 -740
  21. package/dist/layered.css.map +1 -1
  22. package/package.json +4 -7
  23. package/src/components/Notification/NotificationRegion.tsx +12 -7
  24. package/src/components/Notification/Snackbar/__snapshots__/index.css.snap +2 -0
  25. package/src/components/Notification/Snackbar/index.css +2 -0
  26. package/src/components/Notification/Snackbar/index.story.tsx +4 -0
  27. package/src/components/Notification/Snackbar/index.test.tsx +26 -7
  28. package/src/components/Notification/Snackbar/index.tsx +7 -6
  29. package/src/components/Notification/Toast/__snapshots__/index.css.snap +2 -0
  30. package/src/components/Notification/Toast/index.css +2 -0
  31. package/src/components/Notification/Toast/index.story.tsx +4 -0
  32. package/src/components/Notification/Toast/index.test.tsx +5 -2
  33. package/src/components/Notification/__snapshots__/layout.css.snap +8 -4
  34. package/src/components/Notification/layout.css +8 -4
  35. package/src/components/Notification/useNotificationQueue.ts +7 -18
package/dist/index.css CHANGED
@@ -199,6 +199,130 @@
199
199
  border-style: none;
200
200
  padding: 0;
201
201
  }
202
+ .charcoal-icon-button {
203
+ cursor: pointer;
204
+ -webkit-appearance: none;
205
+ -moz-appearance: none;
206
+ appearance: none;
207
+ background: transparent;
208
+ padding: 0;
209
+ border-style: none;
210
+ outline: none;
211
+ color: inherit;
212
+ text-rendering: inherit;
213
+ letter-spacing: inherit;
214
+ word-spacing: inherit;
215
+ text-decoration: none;
216
+ font: inherit;
217
+ margin: 0;
218
+ overflow: visible;
219
+ text-transform: none;
220
+
221
+ -webkit-user-select: none;
222
+
223
+ -moz-user-select: none;
224
+
225
+ user-select: none;
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ border-radius: 999999px;
230
+ transition:
231
+ 0.2s background-color,
232
+ 0.2s box-shadow;
233
+ }
234
+
235
+ .charcoal-icon-button:disabled,
236
+ .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
237
+ cursor: default;
238
+ opacity: 0.32;
239
+ }
240
+
241
+ .charcoal-icon-button:focus {
242
+ outline: none;
243
+ }
244
+
245
+ .charcoal-icon-button::-moz-focus-inner {
246
+ border-style: none;
247
+ padding: 0;
248
+ }
249
+
250
+ .charcoal-icon-button[data-size='XS'] {
251
+ width: 20px;
252
+ height: 20px;
253
+ }
254
+
255
+ .charcoal-icon-button[data-size='S'] {
256
+ width: 32px;
257
+ height: 32px;
258
+ }
259
+
260
+ .charcoal-icon-button[data-size='M'] {
261
+ width: 40px;
262
+ height: 40px;
263
+ }
264
+
265
+ .charcoal-icon-button[data-variant='Default'] {
266
+ color: var(--charcoal-color-icon-tertiary-default);
267
+ background-color: transparent;
268
+ }
269
+
270
+ .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
271
+ .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
272
+ color: var(--charcoal-color-icon-tertiary-press);
273
+ background-color: var(--charcoal-color-container-press-a);
274
+ }
275
+
276
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
277
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
278
+ color: var(--charcoal-color-icon-tertiary-hover);
279
+ background-color: var(--charcoal-color-container-hover-a);
280
+ }
281
+
282
+ .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
283
+ .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
284
+ color: var(--charcoal-color-icon-tertiary-press);
285
+ background-color: var(--charcoal-color-container-press-a);
286
+ }
287
+
288
+ .charcoal-icon-button[data-variant='Overlay'] {
289
+ color: var(--charcoal-color-icon-on-on-img-default);
290
+ background-color: var(--charcoal-color-container-on-img-default);
291
+ }
292
+
293
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
294
+ .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
295
+ color: var(--charcoal-color-icon-on-on-img-press);
296
+ background-color: var(--charcoal-color-container-on-img-press);
297
+ }
298
+
299
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
300
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
301
+ color: var(--charcoal-color-icon-on-on-img-hover);
302
+ background-color: var(--charcoal-color-container-on-img-hover);
303
+ }
304
+
305
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
306
+ .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
307
+ color: var(--charcoal-color-icon-on-on-img-press);
308
+ background-color: var(--charcoal-color-container-on-img-press);
309
+ }
310
+
311
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
312
+ .charcoal-icon-button[aria-disabled='false']:focus {
313
+ outline: none;
314
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
315
+ }
316
+
317
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
318
+ .charcoal-icon-button[aria-disabled='false']:focus-visible {
319
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
320
+ }
321
+
322
+ .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
323
+ .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
324
+ box-shadow: none;
325
+ }
202
326
  .charcoal-radio__label {
203
327
  display: grid;
204
328
  grid-template-columns: auto 1fr;
@@ -357,265 +481,127 @@
357
481
  border-width: 2px;
358
482
  border-style: solid;
359
483
  }
360
- .charcoal-icon-button {
484
+ .charcoal-switch__label {
485
+ display: inline-grid;
486
+ grid-template-columns: auto 1fr;
487
+ align-items: center;
361
488
  cursor: pointer;
362
- -webkit-appearance: none;
363
- -moz-appearance: none;
364
- appearance: none;
365
- background: transparent;
366
- padding: 0;
367
- border-style: none;
368
- outline: none;
369
- color: inherit;
370
- text-rendering: inherit;
371
- letter-spacing: inherit;
372
- word-spacing: inherit;
373
- text-decoration: none;
374
- font: inherit;
375
- margin: 0;
376
- overflow: visible;
377
- text-transform: none;
489
+ outline: 0;
490
+ gap: 4px;
491
+ }
378
492
 
379
- -webkit-user-select: none;
493
+ .charcoal-switch__label[aria-disabled='true'] {
494
+ opacity: 0.32;
495
+ cursor: default;
496
+ }
380
497
 
381
- -moz-user-select: none;
498
+ .charcoal-switch__label[aria-disabled='true'] > input {
499
+ opacity: 1;
500
+ }
382
501
 
383
- user-select: none;
384
- display: flex;
385
- align-items: center;
386
- justify-content: center;
387
- border-radius: 999999px;
388
- transition:
389
- 0.2s background-color,
390
- 0.2s box-shadow;
502
+ .charcoal-switch__label_div {
503
+ font-size: 14px;
504
+ line-height: 22px;
505
+ color: var(--charcoal-color-text-default);
506
+ }
507
+ .charcoal-text-field-root {
508
+ display: grid;
509
+ grid-template-columns: 1fr;
510
+ grid-gap: 4px;
391
511
  }
392
512
 
393
- .charcoal-icon-button:disabled,
394
- .charcoal-icon-button[aria-disabled]:not([aria-disabled='false']) {
395
- cursor: default;
513
+ .charcoal-text-field-root[aria-disabled='true'] {
396
514
  opacity: 0.32;
397
515
  }
398
516
 
399
- .charcoal-icon-button:focus {
400
- outline: none;
401
- }
517
+ .charcoal-text-field-container {
518
+ display: flex;
519
+ height: 40px;
520
+ transition:
521
+ 0.2s background-color,
522
+ 0.2s box-shadow;
523
+ color: var(--charcoal-color-text-secondary-default);
524
+ background-color: var(--charcoal-color-container-secondary-default-a);
525
+ border-radius: 4px;
526
+ padding: 0 8px;
527
+ line-height: 22px;
528
+ font-size: 14px;
529
+ }
402
530
 
403
- .charcoal-icon-button::-moz-focus-inner {
404
- border-style: none;
405
- padding: 0;
531
+ .charcoal-text-field-container[data-invalid='true'] {
532
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
406
533
  }
407
534
 
408
- .charcoal-icon-button[data-size='XS'] {
409
- width: 20px;
410
- height: 20px;
535
+ .charcoal-text-field-container:not([aria-disabled='true']):hover {
536
+ background-color: var(--charcoal-color-container-secondary-hover-a);
411
537
  }
412
538
 
413
- .charcoal-icon-button[data-size='S'] {
414
- width: 32px;
415
- height: 32px;
539
+ .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
540
+ outline: none;
541
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
416
542
  }
417
543
 
418
- .charcoal-icon-button[data-size='M'] {
419
- width: 40px;
420
- height: 40px;
544
+ .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
545
+ box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
421
546
  }
422
547
 
423
- .charcoal-icon-button[data-variant='Default'] {
424
- color: var(--charcoal-color-icon-tertiary-default);
425
- background-color: transparent;
426
- }
548
+ .charcoal-text-field-prefix {
549
+ display: flex;
550
+ align-items: center;
551
+ margin-right: 4px;
552
+ }
427
553
 
428
- .charcoal-icon-button[data-variant='Default'][data-active='true']:not(:disabled):not([aria-disabled]),
429
- .charcoal-icon-button[data-variant='Default'][data-active='true'][aria-disabled='false'] {
430
- color: var(--charcoal-color-icon-tertiary-press);
431
- background-color: var(--charcoal-color-container-press-a);
432
- }
554
+ .charcoal-text-field-suffix {
555
+ display: flex;
556
+ align-items: center;
557
+ gap: 8px;
558
+ margin-left: 4px;
559
+ }
433
560
 
434
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
435
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:hover {
436
- color: var(--charcoal-color-icon-tertiary-hover);
437
- background-color: var(--charcoal-color-container-hover-a);
438
- }
561
+ .charcoal-text-field-input-root {
562
+ flex: 1;
563
+ min-width: 0;
564
+ overflow: hidden;
565
+ }
439
566
 
440
- .charcoal-icon-button[data-variant='Default'][data-active='false']:not(:disabled):not([aria-disabled]):active,
441
- .charcoal-icon-button[data-variant='Default'][data-active='false'][aria-disabled='false']:active {
442
- color: var(--charcoal-color-icon-tertiary-press);
443
- background-color: var(--charcoal-color-container-press-a);
444
- }
567
+ .charcoal-text-field-input {
568
+ border: none;
569
+ box-sizing: border-box;
570
+ outline: none;
571
+ font-family: inherit;
445
572
 
446
- .charcoal-icon-button[data-variant='Overlay'] {
447
- color: var(--charcoal-color-icon-on-on-img-default);
448
- background-color: var(--charcoal-color-container-on-img-default);
449
- }
450
-
451
- .charcoal-icon-button[data-variant='Overlay'][data-active='true']:not(:disabled):not([aria-disabled]),
452
- .charcoal-icon-button[data-variant='Overlay'][data-active='true'][aria-disabled='false'] {
453
- color: var(--charcoal-color-icon-on-on-img-press);
454
- background-color: var(--charcoal-color-container-on-img-press);
455
- }
456
-
457
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):hover,
458
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:hover {
459
- color: var(--charcoal-color-icon-on-on-img-hover);
460
- background-color: var(--charcoal-color-container-on-img-hover);
461
- }
462
-
463
- .charcoal-icon-button[data-variant='Overlay'][data-active='false']:not(:disabled):not([aria-disabled]):active,
464
- .charcoal-icon-button[data-variant='Overlay'][data-active='false'][aria-disabled='false']:active {
465
- color: var(--charcoal-color-icon-on-on-img-press);
466
- background-color: var(--charcoal-color-container-on-img-press);
467
- }
468
-
469
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus,
470
- .charcoal-icon-button[aria-disabled='false']:focus {
471
- outline: none;
472
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
473
- }
474
-
475
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus-visible,
476
- .charcoal-icon-button[aria-disabled='false']:focus-visible {
477
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
478
- }
479
-
480
- .charcoal-icon-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
481
- .charcoal-icon-button[aria-disabled='false']:focus:not(:focus-visible) {
482
- box-shadow: none;
483
- }
484
- .charcoal-icon {
485
- display: inline-flex;
486
- width: var(--charcoal-icon-size);
487
- height: var(--charcoal-icon-size);
488
- }
573
+ /* Prevent zooming for iOS Safari */
574
+ transform-origin: top left;
575
+ transform: scale(0.875);
576
+ width: calc(100% / 0.875);
577
+ height: calc(100% / 0.875);
578
+ font-size: calc(14px / 0.875);
579
+ line-height: calc(22px / 0.875);
580
+ padding-left: 0;
581
+ padding-right: 0;
582
+ border-radius: calc(4px / 0.875);
489
583
 
490
- pixiv-icon:not(:defined) {
491
- --pixiv-icon-base: 24px;
492
- --pixiv-icon-scale: 1;
493
- --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
584
+ /* Display box-shadow for iOS Safari */
585
+ -webkit-appearance: none;
586
+ -moz-appearance: none;
587
+ appearance: none;
588
+ background: transparent;
494
589
 
495
- display: inline-flex;
496
- /* --charcoal-icon-size がセットされていればそれを優先、
497
- なければ name / scale から導出した --pixiv-icon-size をフォールバック */
498
- width: var(--charcoal-icon-size, var(--pixiv-icon-size));
499
- height: var(--charcoal-icon-size, var(--pixiv-icon-size));
590
+ color: var(--charcoal-color-text-secondary-default);
500
591
  }
501
592
 
502
- pixiv-icon:not(:defined)[name^='16/'] {
503
- --pixiv-icon-base: 16px;
504
- --pixiv-icon-size: 16px;
505
- }
506
-
507
- pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
508
- --pixiv-icon-scale: 2;
509
- }
510
-
511
- pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
512
- --pixiv-icon-scale: 3;
513
- }
514
-
515
- pixiv-icon:not(:defined)[name^='32/'] {
516
- --pixiv-icon-base: 32px;
517
- --pixiv-icon-size: 32px;
518
- }
519
-
520
- pixiv-icon:not(:defined)[name^='Inline/'] {
521
- --pixiv-icon-base: 16px;
593
+ .charcoal-text-field-input::-moz-placeholder {
594
+ color: var(--charcoal-color-text-placeholder-default);
522
595
  }
523
596
 
524
- pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
525
- --pixiv-icon-scale: 2;
526
- }
527
- .charcoal-switch__label {
528
- display: inline-grid;
529
- grid-template-columns: auto 1fr;
530
- align-items: center;
531
- cursor: pointer;
532
- outline: 0;
533
- gap: 4px;
534
- }
535
-
536
- .charcoal-switch__label[aria-disabled='true'] {
537
- opacity: 0.32;
538
- cursor: default;
597
+ .charcoal-text-field-input::placeholder {
598
+ color: var(--charcoal-color-text-placeholder-default);
539
599
  }
540
600
 
541
- .charcoal-switch__label[aria-disabled='true'] > input {
542
- opacity: 1;
543
- }
544
-
545
- .charcoal-switch__label_div {
546
- font-size: 14px;
601
+ .charcoal-text-field-line-counter {
547
602
  line-height: 22px;
548
- color: var(--charcoal-color-text-default);
549
- }
550
- .charcoal-modal-background {
551
- overflow: auto;
552
- display: flex;
553
- position: fixed;
554
- top: 0;
555
- left: 0;
556
- width: 100%;
557
- height: 100%;
558
- justify-content: center;
559
- padding: 40px 0;
560
- box-sizing: border-box;
561
-
562
- background-color: var(--charcoal-color-background-overlay);
563
- }
564
-
565
- @media (max-width: 743px) {
566
- .charcoal-modal-background[data-bottom-sheet='true'],
567
- .charcoal-modal-background[data-bottom-sheet='full'] {
568
- padding: 0;
569
- }
570
- }
571
-
572
- /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
573
- transition は entering / exiting に限定し、開いたままテーマ切り替え等で
574
- 色や transform が変わってもアニメーションしないようにする */
575
- .charcoal-modal-background[data-animation] {
576
- overflow: hidden;
577
- }
578
-
579
- .charcoal-modal-background[data-animation='entering'],
580
- .charcoal-modal-background[data-animation='exiting'] {
581
- transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
582
- }
583
-
584
- /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
585
- 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
586
- .charcoal-modal-background[data-animation='exited'],
587
- .charcoal-modal-background[data-animation='exiting'] {
588
- background-color: transparent;
589
- pointer-events: none;
590
- }
591
-
592
- .charcoal-modal-background[data-animation='entered'] {
593
- overflow: auto;
594
- }
595
-
596
- .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
597
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
598
- transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
599
- }
600
-
601
- .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
602
- .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
603
- transform: translateY(100%);
604
- }
605
-
606
- .charcoal-modal-close-button {
607
- position: absolute;
608
- top: 8px;
609
- right: 8px;
610
-
603
+ font-size: 14px;
611
604
  color: var(--charcoal-color-text-tertiary-default);
612
- transition: 0.2s color;
613
- }
614
-
615
- .charcoal-modal-title {
616
- margin: 0;
617
- font-weight: inherit;
618
- font-size: inherit;
619
605
  }
620
606
  .charcoal-text-area-root {
621
607
  display: grid;
@@ -729,49 +715,119 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
729
715
  font-size: 14px;
730
716
  color: var(--charcoal-color-text-tertiary-default);
731
717
  }
732
- .charcoal-loading-spinner {
733
- box-sizing: content-box;
734
- margin: auto;
735
- padding: 16px;
736
- border-radius: 8px;
737
- font-size: 48px;
738
- width: 48px;
739
- height: 48px;
740
- opacity: 0.84;
741
- color: var(--charcoal-color-icon-tertiary-default);
742
- background-color: var(--charcoal-color-background-default);
718
+ .charcoal-icon {
719
+ display: inline-flex;
720
+ width: var(--charcoal-icon-size);
721
+ height: var(--charcoal-icon-size);
743
722
  }
744
723
 
745
- .charcoal-loading-spinner[data-transparent='true'] {
746
- background-color: transparent;
724
+ pixiv-icon:not(:defined) {
725
+ --pixiv-icon-base: 24px;
726
+ --pixiv-icon-scale: 1;
727
+ --pixiv-icon-size: calc(var(--pixiv-icon-base) * var(--pixiv-icon-scale));
728
+
729
+ display: inline-flex;
730
+ /* --charcoal-icon-size がセットされていればそれを優先、
731
+ なければ name / scale から導出した --pixiv-icon-size をフォールバック */
732
+ width: var(--charcoal-icon-size, var(--pixiv-icon-size));
733
+ height: var(--charcoal-icon-size, var(--pixiv-icon-size));
734
+ }
735
+
736
+ pixiv-icon:not(:defined)[name^='16/'] {
737
+ --pixiv-icon-base: 16px;
738
+ --pixiv-icon-size: 16px;
747
739
  }
748
740
 
749
- @keyframes charcoal-loading-spinner-icon-scale-out {
750
- from {
751
- transform: scale(0);
752
- opacity: 1;
741
+ pixiv-icon:not(:defined)[name^='24/'][scale='2'] {
742
+ --pixiv-icon-scale: 2;
743
+ }
744
+
745
+ pixiv-icon:not(:defined)[name^='24/'][scale='3'] {
746
+ --pixiv-icon-scale: 3;
747
+ }
748
+
749
+ pixiv-icon:not(:defined)[name^='32/'] {
750
+ --pixiv-icon-base: 32px;
751
+ --pixiv-icon-size: 32px;
753
752
  }
754
- to {
755
- transform: scale(1);
756
- opacity: 0;
753
+
754
+ pixiv-icon:not(:defined)[name^='Inline/'] {
755
+ --pixiv-icon-base: 16px;
757
756
  }
758
- }
759
757
 
760
- .charcoal-loading-spinner-icon {
761
- width: 1em;
762
- height: 1em;
763
- border-radius: 1em;
764
- background-color: currentColor;
765
- animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
758
+ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
759
+ --pixiv-icon-scale: 2;
760
+ }
761
+ .charcoal-modal-background {
762
+ overflow: auto;
763
+ display: flex;
764
+ position: fixed;
765
+ top: 0;
766
+ left: 0;
767
+ width: 100%;
768
+ height: 100%;
769
+ justify-content: center;
770
+ padding: 40px 0;
771
+ box-sizing: border-box;
772
+
773
+ background-color: var(--charcoal-color-background-overlay);
766
774
  }
767
775
 
768
- .charcoal-loading-spinner-icon[data-reset-animation] {
769
- animation: none;
776
+ @media (max-width: 743px) {
777
+ .charcoal-modal-background[data-bottom-sheet='true'],
778
+ .charcoal-modal-background[data-bottom-sheet='full'] {
779
+ padding: 0;
780
+ }
770
781
  }
771
782
 
772
- .charcoal-loading-spinner-icon[data-once='true'] {
773
- animation-iteration-count: 1;
774
- }
783
+ /* easeOutQuart。duration は useTransitionPresence の MODAL_TRANSITION_DURATION_MS と一致させること。
784
+ transition は entering / exiting に限定し、開いたままテーマ切り替え等で
785
+ 色や transform が変わってもアニメーションしないようにする */
786
+ .charcoal-modal-background[data-animation] {
787
+ overflow: hidden;
788
+ }
789
+
790
+ .charcoal-modal-background[data-animation='entering'],
791
+ .charcoal-modal-background[data-animation='exiting'] {
792
+ transition: background-color 400ms cubic-bezier(0.25, 1, 0.5, 1);
793
+ }
794
+
795
+ /* 閉じアニメーション中はクリックを下のページへ通す(transitionend が来ない環境で
796
+ 透明なオーバーレイがタップを奪い続けるのも防ぐ) */
797
+ .charcoal-modal-background[data-animation='exited'],
798
+ .charcoal-modal-background[data-animation='exiting'] {
799
+ background-color: transparent;
800
+ pointer-events: none;
801
+ }
802
+
803
+ .charcoal-modal-background[data-animation='entered'] {
804
+ overflow: auto;
805
+ }
806
+
807
+ .charcoal-modal-background[data-animation='entering'] > .charcoal-modal-dialog,
808
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
809
+ transition: transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
810
+ }
811
+
812
+ .charcoal-modal-background[data-animation='exited'] > .charcoal-modal-dialog,
813
+ .charcoal-modal-background[data-animation='exiting'] > .charcoal-modal-dialog {
814
+ transform: translateY(100%);
815
+ }
816
+
817
+ .charcoal-modal-close-button {
818
+ position: absolute;
819
+ top: 8px;
820
+ right: 8px;
821
+
822
+ color: var(--charcoal-color-text-tertiary-default);
823
+ transition: 0.2s color;
824
+ }
825
+
826
+ .charcoal-modal-title {
827
+ margin: 0;
828
+ font-weight: inherit;
829
+ font-size: inherit;
830
+ }
775
831
  .charcoal-modal-header-root {
776
832
  height: 64px;
777
833
  display: grid;
@@ -812,164 +868,49 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
812
868
  padding-left: 16px;
813
869
  padding-right: 16px;
814
870
  }
815
- .charcoal-text-field-root {
816
- display: grid;
817
- grid-template-columns: 1fr;
818
- grid-gap: 4px;
819
- }
820
-
821
- .charcoal-text-field-root[aria-disabled='true'] {
822
- opacity: 0.32;
823
- }
824
-
825
- .charcoal-text-field-container {
826
- display: flex;
827
- height: 40px;
828
- transition:
829
- 0.2s background-color,
830
- 0.2s box-shadow;
831
- color: var(--charcoal-color-text-secondary-default);
832
- background-color: var(--charcoal-color-container-secondary-default-a);
833
- border-radius: 4px;
834
- padding: 0 8px;
835
- line-height: 22px;
836
- font-size: 14px;
837
- }
838
-
839
- .charcoal-text-field-container[data-invalid='true'] {
840
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
841
- }
842
-
843
- .charcoal-text-field-container:not([aria-disabled='true']):hover {
844
- background-color: var(--charcoal-color-container-secondary-hover-a);
845
- }
846
-
847
- .charcoal-text-field-container:not([aria-disabled='true']):focus-within {
848
- outline: none;
849
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
850
- }
851
-
852
- .charcoal-text-field-container:not([aria-disabled='true'])[data-invalid='true']:focus-within {
853
- box-shadow: 0 0 0 4px rgba(255, 43, 0, 0.32);
854
- }
855
-
856
- .charcoal-text-field-prefix {
857
- display: flex;
858
- align-items: center;
859
- margin-right: 4px;
860
- }
861
-
862
- .charcoal-text-field-suffix {
863
- display: flex;
864
- align-items: center;
865
- gap: 8px;
866
- margin-left: 4px;
867
- }
868
-
869
- .charcoal-text-field-input-root {
870
- flex: 1;
871
- min-width: 0;
872
- overflow: hidden;
873
- }
874
-
875
- .charcoal-text-field-input {
876
- border: none;
877
- box-sizing: border-box;
878
- outline: none;
879
- font-family: inherit;
880
-
881
- /* Prevent zooming for iOS Safari */
882
- transform-origin: top left;
883
- transform: scale(0.875);
884
- width: calc(100% / 0.875);
885
- height: calc(100% / 0.875);
886
- font-size: calc(14px / 0.875);
887
- line-height: calc(22px / 0.875);
888
- padding-left: 0;
889
- padding-right: 0;
890
- border-radius: calc(4px / 0.875);
891
-
892
- /* Display box-shadow for iOS Safari */
893
- -webkit-appearance: none;
894
- -moz-appearance: none;
895
- appearance: none;
896
- background: transparent;
897
-
898
- color: var(--charcoal-color-text-secondary-default);
899
- }
900
-
901
- .charcoal-text-field-input::-moz-placeholder {
902
- color: var(--charcoal-color-text-placeholder-default);
903
- }
904
-
905
- .charcoal-text-field-input::placeholder {
906
- color: var(--charcoal-color-text-placeholder-default);
907
- }
908
-
909
- .charcoal-text-field-line-counter {
910
- line-height: 22px;
911
- font-size: 14px;
912
- color: var(--charcoal-color-text-tertiary-default);
913
- }
914
- .charcoal-dropdown-selector-menu-item {
915
- font-size: 14px;
916
- line-height: 22px;
917
- color: var(--charcoal-color-text-secondary-default);
918
- padding: 9px 0;
919
-
920
- display: flex;
921
- align-items: center;
922
- width: 100%;
923
- margin-left: 20px;
924
- }
925
-
926
- .charcoal-dropdown-selector-menu-item[data-selected='true'] {
927
- margin-left: 0px;
928
- }
929
-
930
- .charcoal-dropdown-selector-menu-item-icon {
931
- color: var(--charcoal-color-text-secondary-default);
932
- padding-right: 4px;
933
- }
934
-
935
- .charcoal-dropdown-selector-menu-item-container {
936
- display: flex;
937
- align-items: center;
938
- }
939
-
940
- .charcoal-dropdown-selector-menu-secondary {
941
- font-size: 12px;
942
- line-height: 20px;
943
- color: var(--charcoal-color-text-tertiary-default);
944
- padding-bottom: 9px;
945
-
946
- display: flex;
947
- align-items: center;
948
- margin-left: 20px;
871
+ .charcoal-loading-spinner {
872
+ box-sizing: content-box;
873
+ margin: auto;
874
+ padding: 16px;
875
+ border-radius: 8px;
876
+ font-size: 48px;
877
+ width: 48px;
878
+ height: 48px;
879
+ opacity: 0.84;
880
+ color: var(--charcoal-color-icon-tertiary-default);
881
+ background-color: var(--charcoal-color-background-default);
949
882
  }
950
883
 
951
- .charcoal-dropdown-selector-menu-fullwidth {
952
- width: 100%;
953
- }
954
- .charcoal-menu-item-group {
955
- display: block;
956
- }
884
+ .charcoal-loading-spinner[data-transparent='true'] {
885
+ background-color: transparent;
886
+ }
957
887
 
958
- .charcoal-menu-item-group > span {
959
- display: block;
960
- color: var(--charcoal-color-text-tertiary-default);
961
- font-size: 12px;
962
- font-weight: bold;
963
- padding: 12px 0 8px 16px;
888
+ @keyframes charcoal-loading-spinner-icon-scale-out {
889
+ from {
890
+ transform: scale(0);
891
+ opacity: 1;
892
+ }
893
+ to {
894
+ transform: scale(1);
895
+ opacity: 0;
896
+ }
964
897
  }
965
898
 
966
- .charcoal-menu-item-group > ul {
967
- padding-left: 0;
968
- margin: 0;
969
- box-sizing: border-box;
970
- list-style: none;
971
- overflow: hidden;
899
+ .charcoal-loading-spinner-icon {
900
+ width: 1em;
901
+ height: 1em;
902
+ border-radius: 1em;
903
+ background-color: currentColor;
904
+ animation: charcoal-loading-spinner-icon-scale-out 1s infinite both ease-out;
972
905
  }
906
+
907
+ .charcoal-loading-spinner-icon[data-reset-animation] {
908
+ animation: none;
909
+ }
910
+
911
+ .charcoal-loading-spinner-icon[data-once='true'] {
912
+ animation-iteration-count: 1;
913
+ }
973
914
  .charcoal-dropdown-selector-root {
974
915
  display: grid;
975
916
  grid-template-columns: 1fr;
@@ -1054,6 +995,46 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1054
995
  .charcoal-ui-dropdown-selector-icon {
1055
996
  color: var(--charcoal-color-icon-secondary-default);
1056
997
  }
998
+ .charcoal-dropdown-selector-menu-item {
999
+ font-size: 14px;
1000
+ line-height: 22px;
1001
+ color: var(--charcoal-color-text-secondary-default);
1002
+ padding: 9px 0;
1003
+
1004
+ display: flex;
1005
+ align-items: center;
1006
+ width: 100%;
1007
+ margin-left: 20px;
1008
+ }
1009
+
1010
+ .charcoal-dropdown-selector-menu-item[data-selected='true'] {
1011
+ margin-left: 0px;
1012
+ }
1013
+
1014
+ .charcoal-dropdown-selector-menu-item-icon {
1015
+ color: var(--charcoal-color-text-secondary-default);
1016
+ padding-right: 4px;
1017
+ }
1018
+
1019
+ .charcoal-dropdown-selector-menu-item-container {
1020
+ display: flex;
1021
+ align-items: center;
1022
+ }
1023
+
1024
+ .charcoal-dropdown-selector-menu-secondary {
1025
+ font-size: 12px;
1026
+ line-height: 20px;
1027
+ color: var(--charcoal-color-text-tertiary-default);
1028
+ padding-bottom: 9px;
1029
+
1030
+ display: flex;
1031
+ align-items: center;
1032
+ margin-left: 20px;
1033
+ }
1034
+
1035
+ .charcoal-dropdown-selector-menu-fullwidth {
1036
+ width: 100%;
1037
+ }
1057
1038
  .charcoal-segmented-control {
1058
1039
  display: inline-flex;
1059
1040
  align-items: center;
@@ -1125,52 +1106,25 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1125
1106
  white-space: nowrap;
1126
1107
  opacity: 0;
1127
1108
  }
1128
- .charcoal-checkbox__label {
1129
- position: relative;
1130
- cursor: pointer;
1131
- display: flex;
1132
- gap: 4px;
1109
+ .charcoal-menu-item-group {
1110
+ display: block;
1133
1111
  }
1134
1112
 
1135
- .charcoal-checkbox__label[aria-disabled='true'] {
1136
- cursor: default;
1137
- opacity: 0.32;
1138
- }
1139
-
1140
- .charcoal-checkbox__label[aria-disabled='true'] > input {
1141
- opacity: 1;
1142
- }
1143
-
1144
- .charcoal-checkbox__label_div {
1145
- flex: 1;
1146
- color: var(--charcoal-color-text-default);
1147
- font-size: 14px;
1148
- line-height: 20px;
1113
+ .charcoal-menu-item-group > span {
1114
+ display: block;
1115
+ color: var(--charcoal-color-text-tertiary-default);
1116
+ font-size: 12px;
1117
+ font-weight: bold;
1118
+ padding: 12px 0 8px 16px;
1149
1119
  }
1150
- .charcoal-text-ellipsis {
1151
- /* Runtime variables overridden by the React component. */
1152
- --charcoal-text-ellipsis-line-limit: 1;
1153
- --charcoal-text-ellipsis-line-height: inherit;
1154
1120
 
1121
+ .charcoal-menu-item-group > ul {
1122
+ padding-left: 0;
1123
+ margin: 0;
1124
+ box-sizing: border-box;
1125
+ list-style: none;
1155
1126
  overflow: hidden;
1156
- overflow-wrap: break-word;
1157
- display: -webkit-box;
1158
- -webkit-box-orient: vertical;
1159
- -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1160
1127
  }
1161
-
1162
- .charcoal-text-ellipsis[data-has-line-height='true'] {
1163
- line-height: var(--charcoal-text-ellipsis-line-height);
1164
- }
1165
-
1166
- .charcoal-text-ellipsis[data-has-line-height='false'] {
1167
- line-height: inherit;
1168
- }
1169
-
1170
- .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1171
- text-overflow: ellipsis;
1172
- white-space: nowrap;
1173
- }
1174
1128
  .charcoal-tag-item {
1175
1129
  --charcoal-tag-item-color: var(--charcoal-color-text-on-primary-default);
1176
1130
  --charcoal-tag-item-size: 40px;
@@ -1279,167 +1233,52 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1279
1233
  .charcoal-tag-item__bg[data-state='inactive'] {
1280
1234
  background-color: var(--charcoal-color-container-secondary-default);
1281
1235
  }
1282
-
1283
- .charcoal-tag-item__label {
1284
- height: 100%;
1285
- display: flex;
1286
- flex-direction: column;
1287
- align-items: center;
1288
- justify-content: center;
1289
- }
1290
-
1291
- .charcoal-tag-item__label[data-has-translate='true'] {
1292
- justify-content: space-between;
1293
- }
1294
-
1295
- .charcoal-tag-item__label__translated {
1296
- --charcoal-tag-item-text-font-size: 12px;
1297
- --charcoal-tag-item-text-line-height: 20px;
1298
- font-weight: bold;
1299
- }
1300
-
1301
- .charcoal-tag-item__label__translated::before {
1302
- display: none;
1303
- }
1304
-
1305
- .charcoal-tag-item__label__text {
1306
- --charcoal-tag-item-text-font-size: 14px;
1307
- --charcoal-tag-item-text-line-height: 22px;
1308
-
1309
- max-width: 152px;
1310
- overflow: hidden;
1311
- font-weight: bold;
1312
-
1313
- color: inherit;
1314
- white-space: nowrap;
1315
- text-overflow: ellipsis;
1316
- }
1317
-
1318
- .charcoal-tag-item__label__text[data-has-translate='true'] {
1319
- --charcoal-tag-item-text-font-size: 10px;
1320
- --charcoal-tag-item-text-line-height: 14px;
1321
- font-weight: normal;
1322
- }
1323
-
1324
- /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1325
- .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1326
- display: none;
1327
- }
1328
- .charcoal-pagination {
1329
- display: flex;
1330
- justify-content: center;
1331
- align-items: center;
1332
- }
1333
-
1334
- .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1335
- min-width: 32px;
1336
- min-height: 32px;
1337
- }
1338
-
1339
- .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1340
- min-width: 40px;
1341
- min-height: 40px;
1342
- }
1343
-
1344
- /* stylelint-disable no-descending-specificity */
1345
- .charcoal-pagination-button {
1346
- cursor: pointer;
1347
- -webkit-appearance: none;
1348
- -moz-appearance: none;
1349
- appearance: none;
1350
- padding: 0;
1351
- border-style: none;
1352
- outline: none;
1353
- text-decoration: none;
1354
- font-family: inherit;
1355
- font-style: inherit;
1356
- font-variant: inherit;
1357
- margin: 0;
1358
- -webkit-user-select: none;
1359
- -moz-user-select: none;
1360
- user-select: none;
1361
-
1362
- display: flex;
1363
- align-items: center;
1364
- justify-content: center;
1365
- font-size: 14px;
1366
- font-weight: 700;
1367
- line-height: 22px;
1368
-
1369
- /* HACK:
1370
- * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1371
- * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1372
- */
1373
- -webkit-transform: translateZ(0);
1374
-
1375
- color: var(--charcoal-color-text-tertiary-default);
1376
- background-color: transparent;
1377
- border-radius: 20px;
1378
- transition:
1379
- 0.2s background-color,
1380
- 0.2s box-shadow;
1381
- }
1382
- .charcoal-pagination-button:focus {
1383
- outline: none;
1384
- }
1385
- .charcoal-pagination-button::-moz-focus-inner {
1386
- border-style: none;
1387
- padding: 0;
1388
- }
1389
- .charcoal-pagination-button[hidden] {
1390
- visibility: hidden;
1391
- display: block;
1392
- }
1393
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1394
- .charcoal-pagination-button[aria-disabled='false']:hover {
1395
- color: var(--charcoal-color-text-tertiary-default);
1396
- background-color: var(--charcoal-color-container-secondary-default);
1397
- }
1398
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1399
- .charcoal-pagination-button[aria-disabled='false']:active {
1400
- color: var(--charcoal-color-text-tertiary-press);
1401
- background-color: var(--charcoal-color-container-tertiary-press);
1402
- }
1403
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1404
- .charcoal-pagination-button[aria-disabled='false']:focus {
1405
- outline: none;
1406
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1407
- }
1408
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1409
- .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1410
- box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1411
- }
1412
- .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1413
- .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1414
- box-shadow: none;
1415
- }
1416
- .charcoal-pagination-button[aria-current] {
1417
- cursor: default;
1418
- background-color: var(--charcoal-color-container-hud-default);
1419
- color: var(--charcoal-color-text-on-hud-default);
1236
+
1237
+ .charcoal-tag-item__label {
1238
+ height: 100%;
1239
+ display: flex;
1240
+ flex-direction: column;
1241
+ align-items: center;
1242
+ justify-content: center;
1243
+ }
1244
+
1245
+ .charcoal-tag-item__label[data-has-translate='true'] {
1246
+ justify-content: space-between;
1420
1247
  }
1421
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1422
- .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1423
- background-color: var(--charcoal-color-container-hud-default);
1424
- color: var(--charcoal-color-text-on-hud-default);
1425
- }
1426
- /* stylelint-enable no-descending-specificity */
1427
1248
 
1428
- .charcoal-pagination-nav-button[data-hidden] {
1429
- visibility: hidden;
1249
+ .charcoal-tag-item__label__translated {
1250
+ --charcoal-tag-item-text-font-size: 12px;
1251
+ --charcoal-tag-item-text-line-height: 20px;
1252
+ font-weight: bold;
1430
1253
  }
1431
1254
 
1432
- .charcoal-pagination-spacer,
1433
- .charcoal-pagination-spacer:hover,
1434
- .charcoal-pagination-spacer:active {
1435
- cursor: default;
1436
- color: var(--charcoal-color-text-tertiary-default);
1437
- background: none;
1255
+ .charcoal-tag-item__label__translated::before {
1256
+ display: none;
1438
1257
  }
1439
1258
 
1440
- .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1441
- opacity: 1;
1259
+ .charcoal-tag-item__label__text {
1260
+ --charcoal-tag-item-text-font-size: 14px;
1261
+ --charcoal-tag-item-text-line-height: 22px;
1262
+
1263
+ max-width: 152px;
1264
+ overflow: hidden;
1265
+ font-weight: bold;
1266
+
1267
+ color: inherit;
1268
+ white-space: nowrap;
1269
+ text-overflow: ellipsis;
1270
+ }
1271
+
1272
+ .charcoal-tag-item__label__text[data-has-translate='true'] {
1273
+ --charcoal-tag-item-text-font-size: 10px;
1274
+ --charcoal-tag-item-text-line-height: 14px;
1275
+ font-weight: normal;
1442
1276
  }
1277
+
1278
+ /* Kept flat: different class name from .charcoal-tag-item__label__text (note: "labe" typo in original) */
1279
+ .charcoal-tag-item__labe__text[data-has-translate='true']::after {
1280
+ display: none;
1281
+ }
1443
1282
  .charcoal-hint-text {
1444
1283
  background-color: var(--charcoal-color-container-secondary-default);
1445
1284
  border-radius: 8px;
@@ -1476,6 +1315,28 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1476
1315
  min-width: 0;
1477
1316
  overflow-wrap: break-word;
1478
1317
  }
1318
+ .charcoal-checkbox__label {
1319
+ position: relative;
1320
+ cursor: pointer;
1321
+ display: flex;
1322
+ gap: 4px;
1323
+ }
1324
+
1325
+ .charcoal-checkbox__label[aria-disabled='true'] {
1326
+ cursor: default;
1327
+ opacity: 0.32;
1328
+ }
1329
+
1330
+ .charcoal-checkbox__label[aria-disabled='true'] > input {
1331
+ opacity: 1;
1332
+ }
1333
+
1334
+ .charcoal-checkbox__label_div {
1335
+ flex: 1;
1336
+ color: var(--charcoal-color-text-default);
1337
+ font-size: 14px;
1338
+ line-height: 20px;
1339
+ }
1479
1340
  .charcoal-carousel {
1480
1341
  --charcoal-carousel-gap: 0px;
1481
1342
 
@@ -1796,13 +1657,17 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1796
1657
  }
1797
1658
  /* stylelint-enable selector-pseudo-class-no-unknown */
1798
1659
  .charcoal-notification-region {
1799
- position: fixed;
1800
1660
  left: 0;
1801
1661
  right: 0;
1802
- display: grid;
1803
- justify-content: center;
1804
- pointer-events: none;
1805
1662
  box-sizing: border-box;
1663
+ position: absolute;
1664
+ width: 100%;
1665
+ height: 100%;
1666
+ display: flex;
1667
+ flex-direction: column;
1668
+ align-items: center;
1669
+ pointer-events: none;
1670
+ top: 0;
1806
1671
  }
1807
1672
 
1808
1673
  .charcoal-notification {
@@ -1849,6 +1714,7 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1849
1714
  .charcoal-snackbar-region[data-position='top'] {
1850
1715
  --charcoal-snackbar-enter-offset: calc(-1 * var(--charcoal-space-30));
1851
1716
 
1717
+ position: sticky;
1852
1718
  top: calc(
1853
1719
  env(safe-area-inset-top, 0px) + max(var(--charcoal-snackbar-offset), 16px)
1854
1720
  );
@@ -1857,6 +1723,7 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1857
1723
  .charcoal-snackbar-region[data-position='bottom'] {
1858
1724
  --charcoal-snackbar-enter-offset: var(--charcoal-space-30);
1859
1725
 
1726
+ position: fixed;
1860
1727
  bottom: calc(
1861
1728
  env(safe-area-inset-bottom, 0px) +
1862
1729
  max(var(--charcoal-snackbar-offset), 16px)
@@ -1909,68 +1776,209 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
1909
1776
  to {
1910
1777
  opacity: 0;
1911
1778
  }
1912
- }
1913
- .charcoal-toast-region {
1914
- --charcoal-toast-offset: 16px;
1915
- }
1916
-
1917
- .charcoal-toast-region[data-position='top'] {
1918
- --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1919
-
1920
- top: calc(
1921
- env(safe-area-inset-top, 0px) + max(var(--charcoal-toast-offset), 16px)
1922
- );
1779
+ }
1780
+ .charcoal-toast-region {
1781
+ --charcoal-toast-offset: 16px;
1782
+ }
1783
+
1784
+ .charcoal-toast-region[data-position='top'] {
1785
+ position: sticky;
1786
+ --charcoal-toast-enter-offset: calc(-1 * var(--charcoal-space-30));
1787
+
1788
+ top: calc(
1789
+ env(safe-area-inset-top, 0px) + max(var(--charcoal-toast-offset), 16px)
1790
+ );
1791
+ }
1792
+
1793
+ .charcoal-toast-region[data-position='bottom'] {
1794
+ position: fixed;
1795
+ --charcoal-toast-enter-offset: var(--charcoal-space-30);
1796
+
1797
+ bottom: calc(
1798
+ env(safe-area-inset-bottom, 0px) + max(var(--charcoal-toast-offset), 16px)
1799
+ );
1800
+ }
1801
+
1802
+ .charcoal-toast {
1803
+ min-height: 40px;
1804
+ padding: var(--charcoal-space-20) var(--charcoal-space-40);
1805
+ color: var(--charcoal-color-text-on-positive-default);
1806
+ border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1807
+ animation: charcoal-toast-enter 0.3s ease-out both;
1808
+ }
1809
+
1810
+ .charcoal-toast[data-exiting='true'] {
1811
+ animation: charcoal-toast-exit 0.3s ease-out both;
1812
+ }
1813
+
1814
+ .charcoal-toast[data-type='success'] {
1815
+ background-color: var(--charcoal-color-container-positive-default);
1816
+ }
1817
+
1818
+ .charcoal-toast[data-type='error'] {
1819
+ background-color: var(--charcoal-color-container-negative-default);
1820
+ }
1821
+
1822
+ @keyframes charcoal-toast-enter {
1823
+ from {
1824
+ opacity: 0;
1825
+ transform: translateY(var(--charcoal-toast-enter-offset));
1826
+ }
1827
+
1828
+ to {
1829
+ opacity: 1;
1830
+ transform: translateY(0);
1831
+ }
1832
+ }
1833
+
1834
+ @keyframes charcoal-toast-exit {
1835
+ from {
1836
+ opacity: 1;
1837
+ }
1838
+
1839
+ to {
1840
+ opacity: 0;
1841
+ }
1842
+ }
1843
+ .charcoal-pagination {
1844
+ display: flex;
1845
+ justify-content: center;
1846
+ align-items: center;
1847
+ }
1848
+
1849
+ .charcoal-pagination[data-size='S'] .charcoal-pagination-button {
1850
+ min-width: 32px;
1851
+ min-height: 32px;
1852
+ }
1853
+
1854
+ .charcoal-pagination[data-size='M'] .charcoal-pagination-button {
1855
+ min-width: 40px;
1856
+ min-height: 40px;
1857
+ }
1858
+
1859
+ /* stylelint-disable no-descending-specificity */
1860
+ .charcoal-pagination-button {
1861
+ cursor: pointer;
1862
+ -webkit-appearance: none;
1863
+ -moz-appearance: none;
1864
+ appearance: none;
1865
+ padding: 0;
1866
+ border-style: none;
1867
+ outline: none;
1868
+ text-decoration: none;
1869
+ font-family: inherit;
1870
+ font-style: inherit;
1871
+ font-variant: inherit;
1872
+ margin: 0;
1873
+ -webkit-user-select: none;
1874
+ -moz-user-select: none;
1875
+ user-select: none;
1876
+
1877
+ display: flex;
1878
+ align-items: center;
1879
+ justify-content: center;
1880
+ font-size: 14px;
1881
+ font-weight: 700;
1882
+ line-height: 22px;
1883
+
1884
+ /* HACK:
1885
+ * Safari doesn't correctly repaint the elements when they're reordered in response to interaction.
1886
+ * This forces it to repaint them. This doesn't work if put on the parents either, has to be here.
1887
+ */
1888
+ -webkit-transform: translateZ(0);
1889
+
1890
+ color: var(--charcoal-color-text-tertiary-default);
1891
+ background-color: transparent;
1892
+ border-radius: 20px;
1893
+ transition:
1894
+ 0.2s background-color,
1895
+ 0.2s box-shadow;
1896
+ }
1897
+ .charcoal-pagination-button:focus {
1898
+ outline: none;
1899
+ }
1900
+ .charcoal-pagination-button::-moz-focus-inner {
1901
+ border-style: none;
1902
+ padding: 0;
1903
+ }
1904
+ .charcoal-pagination-button[hidden] {
1905
+ visibility: hidden;
1906
+ display: block;
1907
+ }
1908
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):hover,
1909
+ .charcoal-pagination-button[aria-disabled='false']:hover {
1910
+ color: var(--charcoal-color-text-tertiary-default);
1911
+ background-color: var(--charcoal-color-container-secondary-default);
1912
+ }
1913
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):active,
1914
+ .charcoal-pagination-button[aria-disabled='false']:active {
1915
+ color: var(--charcoal-color-text-tertiary-press);
1916
+ background-color: var(--charcoal-color-container-tertiary-press);
1917
+ }
1918
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus,
1919
+ .charcoal-pagination-button[aria-disabled='false']:focus {
1920
+ outline: none;
1921
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1922
+ }
1923
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus-visible,
1924
+ .charcoal-pagination-button[aria-disabled='false']:focus-visible {
1925
+ box-shadow: 0 0 0 4px rgba(0, 150, 250, 0.32);
1926
+ }
1927
+ .charcoal-pagination-button:not(:disabled):not([aria-disabled]):focus:not(:focus-visible),
1928
+ .charcoal-pagination-button[aria-disabled='false']:focus:not(:focus-visible) {
1929
+ box-shadow: none;
1923
1930
  }
1924
-
1925
- .charcoal-toast-region[data-position='bottom'] {
1926
- --charcoal-toast-enter-offset: var(--charcoal-space-30);
1927
-
1928
- bottom: calc(
1929
- env(safe-area-inset-bottom, 0px) + max(var(--charcoal-toast-offset), 16px)
1930
- );
1931
+ .charcoal-pagination-button[aria-current] {
1932
+ cursor: default;
1933
+ background-color: var(--charcoal-color-container-hud-default);
1934
+ color: var(--charcoal-color-text-on-hud-default);
1931
1935
  }
1936
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):hover,
1937
+ .charcoal-pagination-button[aria-current]:not(:disabled):not([aria-disabled]):active {
1938
+ background-color: var(--charcoal-color-container-hud-default);
1939
+ color: var(--charcoal-color-text-on-hud-default);
1940
+ }
1941
+ /* stylelint-enable no-descending-specificity */
1932
1942
 
1933
- .charcoal-toast {
1934
- min-height: 40px;
1935
- padding: var(--charcoal-space-20) var(--charcoal-space-40);
1936
- color: var(--charcoal-color-text-on-positive-default);
1937
- border: var(--charcoal-border-width-m) solid var(--charcoal-color-border-hud);
1938
- animation: charcoal-toast-enter 0.3s ease-out both;
1943
+ .charcoal-pagination-nav-button[data-hidden] {
1944
+ visibility: hidden;
1939
1945
  }
1940
1946
 
1941
- .charcoal-toast[data-exiting='true'] {
1942
- animation: charcoal-toast-exit 0.3s ease-out both;
1943
- }
1944
-
1945
- .charcoal-toast[data-type='success'] {
1946
- background-color: var(--charcoal-color-container-positive-default);
1947
+ .charcoal-pagination-spacer,
1948
+ .charcoal-pagination-spacer:hover,
1949
+ .charcoal-pagination-spacer:active {
1950
+ cursor: default;
1951
+ color: var(--charcoal-color-text-tertiary-default);
1952
+ background: none;
1947
1953
  }
1948
1954
 
1949
- .charcoal-toast[data-type='error'] {
1950
- background-color: var(--charcoal-color-container-negative-default);
1955
+ .charcoal-pagination-spacer.charcoal-icon-button:disabled {
1956
+ opacity: 1;
1951
1957
  }
1958
+ .charcoal-text-ellipsis {
1959
+ /* Runtime variables overridden by the React component. */
1960
+ --charcoal-text-ellipsis-line-limit: 1;
1961
+ --charcoal-text-ellipsis-line-height: inherit;
1952
1962
 
1953
- @keyframes charcoal-toast-enter {
1954
- from {
1955
- opacity: 0;
1956
- transform: translateY(var(--charcoal-toast-enter-offset));
1957
- }
1963
+ overflow: hidden;
1964
+ overflow-wrap: break-word;
1965
+ display: -webkit-box;
1966
+ -webkit-box-orient: vertical;
1967
+ -webkit-line-clamp: var(--charcoal-text-ellipsis-line-limit);
1968
+ }
1958
1969
 
1959
- to {
1960
- opacity: 1;
1961
- transform: translateY(0);
1970
+ .charcoal-text-ellipsis[data-has-line-height='true'] {
1971
+ line-height: var(--charcoal-text-ellipsis-line-height);
1962
1972
  }
1963
- }
1964
1973
 
1965
- @keyframes charcoal-toast-exit {
1966
- from {
1967
- opacity: 1;
1974
+ .charcoal-text-ellipsis[data-has-line-height='false'] {
1975
+ line-height: inherit;
1968
1976
  }
1969
1977
 
1970
- to {
1971
- opacity: 0;
1978
+ .charcoal-text-ellipsis[data-line-limit='1'][data-use-nowrap='true'] {
1979
+ text-overflow: ellipsis;
1980
+ white-space: nowrap;
1972
1981
  }
1973
- }
1974
1982
  .charcoal-text-field-assistive-text {
1975
1983
  font-size: 14px;
1976
1984
  line-height: 22px;
@@ -2069,51 +2077,43 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2069
2077
  .charcoal-radio-input:checked:not(:disabled):active::after {
2070
2078
  background-color: var(--charcoal-color-icon-on-primary-press);
2071
2079
  }
2072
- .charcoal-modal-dialog {
2073
- margin: auto;
2074
- position: relative;
2075
- height: -moz-fit-content;
2076
- height: fit-content;
2077
- width: 440px;
2078
-
2079
- background-color: var(--charcoal-color-container-default);
2080
- border-radius: 24px;
2080
+ .charcoal-field-label {
2081
+ font-size: 14px;
2082
+ line-height: 22px;
2083
+ font-weight: bold;
2084
+ display: flow-root;
2085
+ color: var(--charcoal-color-text-default-text1);
2081
2086
  }
2082
2087
 
2083
- .charcoal-modal-dialog[data-size='S'] {
2084
- width: 336px;
2088
+ .charcoal-field-label-required-text {
2089
+ font-size: 14px;
2090
+ line-height: 22px;
2091
+ display: flow-root;
2092
+ color: var(--charcoal-color-text-secondary-default);
2085
2093
  }
2086
2094
 
2087
- .charcoal-modal-dialog[data-size='M'] {
2088
- width: 440px;
2095
+ .charcoal-field-label-sub-label {
2096
+ font-size: 14px;
2097
+ line-height: 22px;
2098
+ display: flow-root;
2099
+ color: var(--charcoal-color-text-tertiary-default);
2100
+ transition:
2101
+ 0.2s color,
2102
+ 0.2s box-shadow;
2089
2103
  }
2090
2104
 
2091
- .charcoal-modal-dialog[data-size='L'] {
2092
- width: 648px;
2105
+ .charcoal-field-label-root {
2106
+ display: inline-flex;
2107
+ align-items: center;
2093
2108
  }
2094
2109
 
2095
- @media (max-width: 743px) {
2096
- .charcoal-modal-dialog {
2097
- max-width: 440px;
2098
- width: calc(100% - 48px);
2099
- }
2100
-
2101
- .charcoal-modal-dialog[data-bottom-sheet='true'],
2102
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
2103
- max-width: unset;
2104
- width: 100%;
2105
- border-radius: 0;
2106
- margin: auto 0 0 0;
2110
+ .charcoal-field-label-root > .charcoal-field-label-required-text {
2111
+ margin-left: 4px;
2107
2112
  }
2108
2113
 
2109
- .charcoal-modal-dialog[data-bottom-sheet='full'] {
2110
- min-height: 100%;
2114
+ .charcoal-field-label-root > .charcoal-field-label-sub-label {
2115
+ margin-left: auto;
2111
2116
  }
2112
- }
2113
-
2114
- .charcoal-modal-dialog:focus {
2115
- outline: none;
2116
- }
2117
2117
  .charcoal-switch-input {
2118
2118
  cursor: pointer;
2119
2119
  -webkit-appearance: none;
@@ -2198,43 +2198,75 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2198
2198
  .charcoal-switch-input:not(:disabled):checked:active {
2199
2199
  background-color: var(--charcoal-color-container-primary-press);
2200
2200
  }
2201
- .charcoal-field-label {
2202
- font-size: 14px;
2203
- line-height: 22px;
2204
- font-weight: bold;
2205
- display: flow-root;
2206
- color: var(--charcoal-color-text-default-text1);
2201
+ .charcoal-modal-dialog {
2202
+ margin: auto;
2203
+ position: relative;
2204
+ height: -moz-fit-content;
2205
+ height: fit-content;
2206
+ width: 440px;
2207
+
2208
+ background-color: var(--charcoal-color-container-default);
2209
+ border-radius: 24px;
2207
2210
  }
2208
2211
 
2209
- .charcoal-field-label-required-text {
2210
- font-size: 14px;
2211
- line-height: 22px;
2212
- display: flow-root;
2213
- color: var(--charcoal-color-text-secondary-default);
2212
+ .charcoal-modal-dialog[data-size='S'] {
2213
+ width: 336px;
2214
2214
  }
2215
2215
 
2216
- .charcoal-field-label-sub-label {
2217
- font-size: 14px;
2218
- line-height: 22px;
2219
- display: flow-root;
2220
- color: var(--charcoal-color-text-tertiary-default);
2221
- transition:
2222
- 0.2s color,
2223
- 0.2s box-shadow;
2216
+ .charcoal-modal-dialog[data-size='M'] {
2217
+ width: 440px;
2224
2218
  }
2225
2219
 
2226
- .charcoal-field-label-root {
2227
- display: inline-flex;
2228
- align-items: center;
2220
+ .charcoal-modal-dialog[data-size='L'] {
2221
+ width: 648px;
2229
2222
  }
2230
2223
 
2231
- .charcoal-field-label-root > .charcoal-field-label-required-text {
2232
- margin-left: 4px;
2224
+ @media (max-width: 743px) {
2225
+ .charcoal-modal-dialog {
2226
+ max-width: 440px;
2227
+ width: calc(100% - 48px);
2233
2228
  }
2234
2229
 
2235
- .charcoal-field-label-root > .charcoal-field-label-sub-label {
2236
- margin-left: auto;
2230
+ .charcoal-modal-dialog[data-bottom-sheet='true'],
2231
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2232
+ max-width: unset;
2233
+ width: 100%;
2234
+ border-radius: 0;
2235
+ margin: auto 0 0 0;
2236
+ }
2237
+
2238
+ .charcoal-modal-dialog[data-bottom-sheet='full'] {
2239
+ min-height: 100%;
2237
2240
  }
2241
+ }
2242
+
2243
+ .charcoal-modal-dialog:focus {
2244
+ outline: none;
2245
+ }
2246
+ .charcoal-list-item {
2247
+ list-style: none;
2248
+ display: flex;
2249
+ align-items: center;
2250
+ min-height: 40px;
2251
+ cursor: pointer;
2252
+ outline: none;
2253
+
2254
+ padding-right: 16px;
2255
+ padding-left: 16px;
2256
+
2257
+ transition: background-color 0.2s;
2258
+ }
2259
+
2260
+ .charcoal-list-item:not([aria-disabled='true']):hover,
2261
+ .charcoal-list-item:not([aria-disabled='true']):focus,
2262
+ .charcoal-list-item:not([aria-disabled='true']):focus-within {
2263
+ background-color: var(--charcoal-color-container-secondary-default);
2264
+ }
2265
+
2266
+ .charcoal-list-item[aria-disabled='true'] {
2267
+ opacity: 0.32;
2268
+ cursor: default;
2269
+ }
2238
2270
  .charcoal-menu-list {
2239
2271
  padding: 0;
2240
2272
  margin: 0;
@@ -2353,30 +2385,6 @@ pixiv-icon:not(:defined)[name^='Inline/'][scale='2'] {
2353
2385
  border: 2px solid #fff;
2354
2386
  box-sizing: border-box;
2355
2387
  }
2356
- .charcoal-list-item {
2357
- list-style: none;
2358
- display: flex;
2359
- align-items: center;
2360
- min-height: 40px;
2361
- cursor: pointer;
2362
- outline: none;
2363
-
2364
- padding-right: 16px;
2365
- padding-left: 16px;
2366
-
2367
- transition: background-color 0.2s;
2368
- }
2369
-
2370
- .charcoal-list-item:not([aria-disabled='true']):hover,
2371
- .charcoal-list-item:not([aria-disabled='true']):focus,
2372
- .charcoal-list-item:not([aria-disabled='true']):focus-within {
2373
- background-color: var(--charcoal-color-container-secondary-default);
2374
- }
2375
-
2376
- .charcoal-list-item[aria-disabled='true'] {
2377
- opacity: 0.32;
2378
- cursor: default;
2379
- }
2380
2388
  .charcoal-popover {
2381
2389
  margin: 4px 0;
2382
2390
  list-style: none;