@comitor/ui 3.1.0 → 3.3.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 (38) hide show
  1. package/dist/components/composite/avatar-group.d.ts +10 -1
  2. package/dist/components/composite/avatar-group.js +37 -14
  3. package/dist/components/composite/avatar-group.js.map +1 -1
  4. package/dist/components/composite/status-config.d.ts +41 -1
  5. package/dist/components/composite/status-config.js +6 -0
  6. package/dist/components/composite/status-config.js.map +1 -1
  7. package/dist/components/composite/status-pill.d.ts +4 -1
  8. package/dist/components/composite/status-pill.js +1 -1
  9. package/dist/components/composite/status-pill.js.map +1 -1
  10. package/dist/components/composite/toast.d.ts +1 -1
  11. package/dist/components/composite/toast.js +25 -18
  12. package/dist/components/composite/toast.js.map +1 -1
  13. package/dist/components/ui/action-bar.d.ts +20 -0
  14. package/dist/components/ui/action-bar.js +59 -8
  15. package/dist/components/ui/action-bar.js.map +1 -1
  16. package/dist/components/ui/dialog.d.ts +1 -1
  17. package/dist/components/ui/dialog.js +6 -0
  18. package/dist/components/ui/dialog.js.map +1 -1
  19. package/dist/components/ui/sheet.d.ts +1 -1
  20. package/dist/components/ui/sheet.js +6 -0
  21. package/dist/components/ui/sheet.js.map +1 -1
  22. package/dist/components/ui/sonner.d.ts +1 -1
  23. package/dist/components/ui/sonner.js +5 -1
  24. package/dist/components/ui/sonner.js.map +1 -1
  25. package/dist/data-grid/data-grid-cell-variants.js +23 -5
  26. package/dist/data-grid/data-grid-cell-variants.js.map +1 -1
  27. package/dist/data-grid/types.d.ts +16 -0
  28. package/dist/i18n/namespaces/toast.d.ts +13 -4
  29. package/dist/i18n/namespaces/toast.js +10 -2
  30. package/dist/i18n/namespaces/toast.js.map +1 -1
  31. package/dist/lib/use-modal-return-focus.d.ts +26 -0
  32. package/dist/lib/use-modal-return-focus.js +48 -0
  33. package/dist/lib/use-modal-return-focus.js.map +1 -0
  34. package/dist/tokens.d.ts +43 -11
  35. package/dist/tokens.js +36 -9
  36. package/dist/tokens.js.map +1 -1
  37. package/package.json +1 -1
  38. package/styles.css +73 -13
package/styles.css CHANGED
@@ -75,8 +75,9 @@
75
75
  comitor-ds không có các cụm sau, nên không có bản duyệt nào để khớp và chúng giữ nguyên bảng
76
76
  màu đã đo của gói: toàn bộ tầng composite (StatusPill, StatCard, DataTable, Toast,
77
77
  FilterChips, LetterAvatar, EmptyState…), tầng shell (AppShell, Sidebar, AppLauncher…),
78
- --app-accent-ink, và thang đổ bóng bản dark (--elevation-* trong .dark — comitor-ds không
79
- khai bóng cho dark).
78
+ --app-accent-ink, thang đổ bóng bản dark (--elevation-* trong .dark — comitor-ds không
79
+ khai bóng cho dark), và cả thang CAM (--orange/--orange-ink, gốc của tone `severe`) — vì thế
80
+ nó là màu phụ DUY NHẤT mà chính bậc TÔ NỀN có bản dark riêng ngay trong bảng mặc định.
80
81
  ════════════════════════════════════════════════════════════════════════════ */
81
82
 
82
83
  /* ────────────────────────────────────────────────────────────────────────────
@@ -123,6 +124,13 @@
123
124
  --red: #d64545;
124
125
  --green: #2ea56a;
125
126
  --yellow: #f2c94c;
127
+ /* Cam — nấc GIỮA vàng (warning) và đỏ (destructive), gốc của tone `severe`. comitor-ds không có
128
+ cam, nên đây là màu ĐO của gói chứ không phải hex của bản duyệt (khối NGOÀI PHẠM VI ĐỐI CHIẾU).
129
+ #EA580C (orange-600 của thang Tailwind) giữ 3:1 trên MỌI nền trang của light — điều kiện bắt
130
+ buộc, vì chính mảng tô này vẽ chấm của `StatusPill variant="dot"` (`dotColor` ở
131
+ status-config.ts): --background 3,56 · --sidebar 3,41 · --muted 3,32 · --sidebar-accent
132
+ 3,25:1 ✓. Sáng hơn một nấc của cùng thang (#F97316) chỉ còn 2,80 / 2,62:1 ✗. */
133
+ --orange: #ea580c;
126
134
 
127
135
  /* ─ HỢP ĐỒNG BA VAI TRÒ CỦA MỘT TONE MÀU — đọc tên là biết dùng ở đâu ─
128
136
 
@@ -145,17 +153,20 @@
145
153
  green #2EA56A trên #E0F2E9 = 2,69:1 ✗ → --green-ink #216A48 = 5,60:1 ✓
146
154
  red #D64545 trên #F9E3E3 = 3,57:1 ✗ → --red-ink #9A3537 = 5,83:1 ✓
147
155
  yellow #F2C94C trên #FDF7E4 = 1,48:1 ✗ → --yellow-ink #7A5800 = 6,08:1 ✓
156
+ orange #EA580C trên #FCE6DB = 2,96:1 ✗ → --orange-ink #AC440F = 4,87:1 ✓
148
157
 
149
158
  Bậc ink phải đạt trên CẢ nền trắng lẫn nền tint — hai phép đo, không phải một. Trên các nền
150
159
  trang của light (--background · --sidebar #FAFAF9 · --sidebar-accent #FBF5DC):
151
160
  teal 6,68 · 6,39 · 6,10 | green 6,52 · 6,24 · 5,96
152
- red 7,15 · 6,84 · 6,53 | yellow 6,51 · 6,24 · 5,96 ✓ đều ≥ 4,5:1
161
+ red 7,15 · 6,84 · 6,53 | yellow 6,51 · 6,24 · 5,96
162
+ orange 5,85 · 5,60 · 5,35 ✓ đều ≥ 4,5:1
153
163
 
154
164
  Hex ở đây là kết quả ĐÃ ĐÓNG BĂNG của color-mix(in srgb, --<màu>, --ink 30/40%) mà vòng
155
165
  trước tính tay trong từng component. Đóng băng thành token có chủ ý: (a) một chỗ duy nhất
156
166
  để đo lại khi đổi màu phụ, (b) component không phải nhắc lại chuỗi color-mix (dễ chép lệch
157
167
  % giữa Badge/LetterAvatar/Input), (c) `tokens.ts` mirror được ra hex thật.
158
- ⚠ Đổi --teal/--green/--red/--yellow thì PHẢI tính lại bậc ink tương ứng — không tự theo.
168
+ ⚠ Đổi --teal/--green/--red/--yellow/--orange thì PHẢI tính lại bậc ink tương ứng — không tự
169
+ theo.
159
170
 
160
171
  ⚠ PHẠM VI ÁP DỤNG TỪ 0.3.0: hợp đồng này chỉ còn áp cho các cụm TONAL mà comitor-ds KHÔNG
161
172
  có (Badge success/warning, StatusPill, LetterAvatar, StatCard, Toast) — đó là chỗ chữ đứng
@@ -164,7 +175,8 @@
164
175
  sự thật và bậc ink đã được gỡ khỏi đường render — xem khối NGUỒN SỰ THẬT ở đầu file.
165
176
 
166
177
  Ở DARK, --x-ink trỏ về var(--x): comitor-ds dùng một hex cho cả hai theme, nên bên dark bậc
167
- ink chính là màu phụ. */
178
+ ink chính là màu phụ. (Cam cũng trỏ về fill ở dark, nhưng fill ấy là bản dark RIÊNG — xem
179
+ khối .dark.) */
168
180
  --teal-ink: #1a6668;
169
181
  --green-ink: #216a48;
170
182
  --red-ink: #9a3537;
@@ -174,23 +186,34 @@
174
186
  --yellow-ink: var(--gold-500);
175
187
  /* Navy vốn đã đủ tối ở light nên ink = chính nó; .dark mới cần bậc sáng (xem khối .dark). */
176
188
  --navy-ink: var(--navy);
189
+ /* Cam: đóng băng color-mix(in srgb, --orange 72%, --ink 28%) — ÍT mực hơn 30/40% của các tone
190
+ trên, cố ý: tone `severe` sinh ra vì bậc ink của warning (#7A5800) đọc ra ô-liu xỉn, nên bậc
191
+ này phải còn đọc ra CAM. 72% là bậc SÁNG nhất còn giữ trần chung /20 của hợp đồng:
192
+ --background 5,85 · --muted 5,47 · orange/15 4,87 · orange/20 4,58:1 ✓ (trần tint /21).
193
+ Sáng hơn một nấc (75% = #B3460F) vẫn qua /15 (4,60:1) nhưng tụt ở /20 (4,33:1 ✗) — app viết
194
+ `bg-severe/20` theo khuôn của warning là hỏng. Bảng tương phản cao kéo tối thêm (khối 5b). */
195
+ --orange-ink: #ac440f;
177
196
 
178
197
  /* ─ Bậc FOREGROUND của màu phụ — chữ/icon nằm TRÊN nền --x ĐẶC ─
179
- teal/green/yellow đều là sắc SÁNG-VỪA ở light và còn sáng hơn ở dark, nên chữ phải là MỰC
180
- chứ không phải trắng; một giá trị chạy được cả hai theme (khối .dark không khai lại):
198
+ teal/green/yellow/orange đều là sắc SÁNG-VỪA ở light và còn sáng hơn ở dark, nên chữ phải là
199
+ MỰC chứ không phải trắng; một giá trị chạy được cả hai theme (khối .dark không khai lại):
181
200
  teal mực 4,56:1 (light) · 10,16:1 (dark) [trắng chỉ 4,14:1 ✗ — cặp CHẶT nhất gói]
182
201
  green mực 6,04:1 (light) · 10,85:1 (dark) [trắng chỉ 3,13:1 ✗]
183
202
  yellow mực 11,92:1 (light) · 12,35:1 (dark) [trắng chỉ 1,59:1 ✗]
203
+ orange mực 5,31:1 (light) · 8,36:1 (dark) [trắng chỉ 3,56 / 2,26:1 ✗]
184
204
  navy TRẮNG 16,49:1 ở cả hai theme (.dark không override --navy)
185
205
 
186
206
  ⚠ CỐ Ý KHÔNG CÓ --red-foreground. Nền --red ĐẶC không mang được chữ ở light: #D64545 với
187
207
  chữ trắng = 4,38:1 ✗ và với chữ mực = 4,32:1 ✗ — không màu chữ nào của brand cứu được cặp
188
208
  đó. Nền đỏ đặc CÓ CHỮ phải đi qua --destructive (#C93B3B, ghim cả hai theme) cùng
189
209
  --destructive-foreground = 5,03:1 ✓. --red chỉ để tô TINT (badge/avatar) và làm màu chart.
190
- ⚠ Đổi --teal/--green/--yellow/--navy thì phải đo lại bốn bậc này. */
210
+ Cam thì KHÔNG rơi vào ca đó dù cùng họ nóng: mực cứu được nền #EA580C (5,31:1), nên nó có
211
+ --orange-foreground như teal/green/yellow.
212
+ ⚠ Đổi --teal/--green/--yellow/--orange/--navy thì phải đo lại năm bậc này. */
191
213
  --teal-foreground: #0e1116;
192
214
  --green-foreground: #0e1116;
193
215
  --yellow-foreground: #0e1116;
216
+ --orange-foreground: #0e1116;
194
217
  --navy-foreground: #ffffff;
195
218
 
196
219
  /* ─ Semantic shadcn ─ */
@@ -354,20 +377,27 @@
354
377
 
355
378
  /* ─ Alias trạng thái (package bổ sung; comitor-ds chưa có) ─
356
379
  Trỏ vào màu phụ để đổi tông trạng thái mà không đụng brand.
357
- Vì trỏ bằng var(), khối .dark bên dưới đổi --green/--yellow/--teal là
358
- --success/--warning/--info tự sáng theo, không cần khai lại. */
380
+ Vì trỏ bằng var(), khối .dark bên dưới đổi --green/--yellow/--orange/--teal là
381
+ --success/--warning/--severe/--info tự sáng theo, không cần khai lại. */
359
382
  --success: var(--green);
360
383
  --warning: var(--yellow);
384
+ /* `severe` — nấc GIỮA warning và destructive: ưu tiên cao, SLA sắp trễ, sắp chạm hạn mức. GitHub
385
+ Primer gọi đúng nấc này là "severe" (attention → severe → danger). Tách thành tone riêng chứ
386
+ không dồn vào hai tone kề: bậc ink của warning mượn gold-500 (#7A5800) nên ở cỡ CHẤM nó đọc
387
+ ra ô-liu xỉn chứ không ra "gấp"; còn đỏ đã là của destructive (xoá, lỗi, hỏng). */
388
+ --severe: var(--orange);
361
389
  --info: var(--teal);
362
- /* Chữ/icon trên nền trạng thái ĐẶC. Cả ba sắc đều SÁNG ở light và còn sáng hơn ở dark → chữ là
390
+ /* Chữ/icon trên nền trạng thái ĐẶC. Cả bốn sắc đều SÁNG ở light và còn sáng hơn ở dark → chữ là
363
391
  MỰC ở CẢ hai theme, nên khối .dark không khai lại (trước đây success/info để #FFFFFF ở light
364
392
  rồi lật về mực ở dark — bản light hỏng thẳng ngưỡng AA):
365
393
  success mực 6,04:1 (light) · 10,85:1 (dark) [trắng chỉ 3,13:1 / 1,74:1 ✗]
366
394
  info mực 4,56:1 (light) · 10,16:1 (dark) [trắng chỉ 4,14:1 / 1,86:1 ✗]
367
395
  warning mực 11,92:1 (light) · 12,35:1 (dark) [trắng chỉ 1,59:1 / 1,53:1 ✗]
396
+ severe mực 5,31:1 (light) · 8,36:1 (dark) [trắng chỉ 3,56:1 / 2,26:1 ✗]
368
397
  ⚠ info ở light là cặp CHẶT nhất gói (4,56:1, dư 0,06). Đổi --teal thì phải đo lại ngay. */
369
398
  --success-foreground: #0e1116;
370
399
  --warning-foreground: #0e1116;
400
+ --severe-foreground: #0e1116;
371
401
  --info-foreground: #0e1116;
372
402
  /* Bậc ink của trạng thái — chữ/icon trạng thái trên nền trang hoặc trên tint của chính nó
373
403
  (Badge tonal, dòng lỗi, chip cảnh báo, icon Alert). Trỏ vào bậc ink của màu phụ đúng như
@@ -375,9 +405,12 @@
375
405
  Đo trên nền trang / trên tint 15% của chính nó — hai phép đo, phải đạt cả hai:
376
406
  success #216A48 6,52 / 5,60:1 (light) · #4ADE80 10,85 / 7,44:1 (dark) ✓
377
407
  warning #7A5800 6,51 / 6,08:1 (light) · #FACC15 12,35 / 8,27:1 (dark) ✓
408
+ severe #AC440F 5,85 / 4,87:1 (light) · #FB923C 8,36 / 6,09:1 (dark) ✓
409
+ (bảng tương phản cao, light: #9D3F10 6,66 / 5,55:1)
378
410
  info #1A6668 6,68 / 5,54:1 (light) · #2DD4BF 10,16 / 7,12:1 (dark) ✓ */
379
411
  --success-ink: var(--green-ink);
380
412
  --warning-ink: var(--yellow-ink);
413
+ --severe-ink: var(--orange-ink);
381
414
  --info-ink: var(--teal-ink);
382
415
 
383
416
  /* ─ Bảng màu biểu đồ (đổi độc lập với brand) ─
@@ -560,6 +593,14 @@
560
593
  --green-ink: var(--green);
561
594
  --red-ink: var(--red);
562
595
  --yellow-ink: var(--yellow);
596
+ /* Cam là NGOẠI LỆ của câu "màu phụ không có bản dark" ở trên: comitor-ds không có cam nên không
597
+ có hex duyệt nào để giữ chung cho hai theme — và giữ chung thì hỏng thật: #EA580C làm chữ trên
598
+ tint /15 của chính nó hợp lên --card chỉ 4,21:1 ✗. Bản dark #FB923C (cùng họ "400" mà bảng
599
+ tương phản cao dùng cho teal/red/green/yellow): --background 8,36 · --card 7,85 · --muted 7,12
600
+ · orange/15 6,09 · orange/20 5,48:1 ✓ (trần tint /28); chấm tô bằng chính nó 8,36:1. Bậc ink
601
+ trỏ về fill, đúng lối của mọi màu phụ trong khối này. */
602
+ --orange: #fb923c;
603
+ --orange-ink: var(--orange);
563
604
  /* navy nguyên bản (#0F1E3D) chìm hẳn vào nền dark — 1,15:1 (bản trước ghi 1,17:1, sai). Bậc
564
605
  ink gánh vai trò đó (7,40:1 trên --background · 6,95:1 trên --card), và --chart-3 vì trỏ vào
565
606
  --navy-ink nên tự đúng, không cần khai lại ở đây nữa. */
@@ -569,8 +610,8 @@
569
610
  --app-accent-ink: var(--primary);
570
611
 
571
612
  /* KHÔNG khai lại --*-foreground của trạng thái và của màu phụ: chúng là MỰC (#0E1116) ở cả hai
572
- theme vì cả hai bản màu đều sáng — xem bảng số ở :root. --navy-foreground cũng vậy (trắng),
573
- vì khối này không override --navy. */
613
+ theme vì cả hai bản màu đều sáng — xem bảng số ở :root (kể cả cam: mực trên #FB923C 8,36:1).
614
+ --navy-foreground cũng vậy (trắng), vì khối này không override --navy. */
574
615
 
575
616
  /* Đổ bóng bản dark — bóng "mực" 4–16% trên nền #0E1116 gần như vô hình, lớp overlay
576
617
  mất sạch tín hiệu độ cao (dialog/popover trông như dán phẳng vào nền). Trên nền tối,
@@ -659,6 +700,15 @@
659
700
  --primary-ink: var(--gold-500);
660
701
  --link-ink: var(--gold-500);
661
702
  --link-ink-hover: var(--gold-600);
703
+ /* Cam: bảng mặc định lấy bậc ink SÁNG nhất còn giữ trần /20 (#AC440F — orange/15 4,87:1, dư ít).
704
+ Bảng này kéo nó về đúng SÀN mà các bậc ink light khác đang đứng (≥6,5:1 trên nền trắng · ≥5,5:1
705
+ trên tint /15 của chính nó): color-mix(in srgb, --orange 65%, --ink 35%) = #9D3F10 —
706
+ --background 6,66 · --muted 6,22 · orange/15 5,55 · orange/20 5,22:1 ✓, trần tint /31 (bằng
707
+ teal). Fill #EA580C GIỮ NGUYÊN: chấm 3,56:1 (--muted 3,32) đã ngang --control-on của chính
708
+ bảng này (3,28 · 3,06).
709
+ ⚠ .dark[data-contrast="high"] PHẢI khai lại --orange-ink — khối này đứng sau .dark, cùng độ
710
+ đặc tả, nên bậc tối này thắng bậc sáng của .dark và chữ cam chìm vào nền tối. */
711
+ --orange-ink: #9d3f10;
662
712
  }
663
713
 
664
714
  .dark[data-contrast="high"] {
@@ -684,6 +734,10 @@
684
734
  --red: #f87171;
685
735
  --green: #4ade80;
686
736
  --yellow: #facc15;
737
+ /* Cam không khai lại ở đây: .dark đã cho nó bản "400" (#FB923C — orange/15 6,09 · --muted 7,12:1).
738
+ Chỉ phải HUỶ bậc ink tối mà [data-contrast="high"] đặt cho light — cùng lý do --primary-ink
739
+ được trỏ lại về --primary ở trên. */
740
+ --orange-ink: var(--orange);
687
741
  }
688
742
 
689
743
  /* ────────────────────────────────────────────────────────────────────────────
@@ -844,27 +898,33 @@
844
898
  --color-red: var(--red);
845
899
  --color-green: var(--green);
846
900
  --color-yellow: var(--yellow);
901
+ --color-orange: var(--orange);
847
902
  --color-navy-ink: var(--navy-ink);
848
903
  --color-teal-ink: var(--teal-ink);
849
904
  --color-red-ink: var(--red-ink);
850
905
  --color-green-ink: var(--green-ink);
851
906
  --color-yellow-ink: var(--yellow-ink);
907
+ --color-orange-ink: var(--orange-ink);
852
908
  /* Chữ trên nền màu phụ ĐẶC. Không có `red-foreground`: nền --red đặc không mang được chữ ở
853
909
  light (4,38 / 4,32:1) → dùng `bg-destructive text-destructive-foreground`. */
854
910
  --color-navy-foreground: var(--navy-foreground);
855
911
  --color-teal-foreground: var(--teal-foreground);
856
912
  --color-green-foreground: var(--green-foreground);
857
913
  --color-yellow-foreground: var(--yellow-foreground);
914
+ --color-orange-foreground: var(--orange-foreground);
858
915
 
859
916
  /* Trạng thái */
860
917
  --color-success: var(--success);
861
918
  --color-success-foreground: var(--success-foreground);
862
919
  --color-warning: var(--warning);
863
920
  --color-warning-foreground: var(--warning-foreground);
921
+ --color-severe: var(--severe);
922
+ --color-severe-foreground: var(--severe-foreground);
864
923
  --color-info: var(--info);
865
924
  --color-info-foreground: var(--info-foreground);
866
925
  --color-success-ink: var(--success-ink);
867
926
  --color-warning-ink: var(--warning-ink);
927
+ --color-severe-ink: var(--severe-ink);
868
928
  --color-info-ink: var(--info-ink);
869
929
 
870
930
  /* Biểu đồ */