@africanies/angular-web-sdk 0.1.7 → 0.1.9

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 (157) hide show
  1. package/.angular/cache/22.0.9/playground/.tsbuildinfo +1 -1
  2. package/.nx/cache/{4082520855419352840 → 15302120112746851896}/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs +30 -8
  3. package/.nx/cache/15302120112746851896/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +1 -0
  4. package/.nx/cache/{4082520855419352840 → 15302120112746851896}/dist/libs/africanies-theme/tailwind-preset.cjs +89 -12
  5. package/.nx/cache/{4082520855419352840 → 15302120112746851896}/dist/libs/africanies-theme/types/africanies-africanies-theme.d.ts +14 -4
  6. package/.nx/cache/17289624717336768573/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +4639 -0
  7. package/.nx/cache/17289624717336768573/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +1 -0
  8. package/.nx/cache/17289624717336768573/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +2748 -0
  9. package/.nx/cache/18393832731522001121/dist/libs/africanies-core/README.md +85 -0
  10. package/.nx/cache/{17491371155400585077 → 18393832731522001121}/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +139 -51
  11. package/.nx/cache/18393832731522001121/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +1 -0
  12. package/.nx/cache/18393832731522001121/dist/libs/africanies-core/package.json +31 -0
  13. package/.nx/cache/{17491371155400585077 → 18393832731522001121}/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +14 -11
  14. package/.nx/cache/{3314955264390318442 → 3953970051755345887}/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs +775 -566
  15. package/.nx/cache/3953970051755345887/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +1 -0
  16. package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +150 -119
  17. package/.nx/cache/{12276756491762927325 → 4225324930345532464}/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs +34 -6
  18. package/.nx/cache/4225324930345532464/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +1 -0
  19. package/.nx/cache/{12276756491762927325 → 4225324930345532464}/dist/libs/africanies-theme/tailwind-preset.cjs +104 -19
  20. package/.nx/cache/{12276756491762927325 → 4225324930345532464}/dist/libs/africanies-theme/types/africanies-africanies-theme.d.ts +21 -2
  21. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/README.md +69 -0
  22. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/assets/icons.sprite.svg +1851 -0
  23. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs +833 -0
  24. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs.map +1 -0
  25. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/package.json +30 -0
  26. package/.nx/cache/5151121439688073678/dist/libs/africanies-icons/types/africanies-africanies-icons.d.ts +108 -0
  27. package/.nx/cache/877026836685850193/dist/libs/africanies-models/README.md +60 -0
  28. package/.nx/cache/877026836685850193/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs +613 -0
  29. package/.nx/cache/877026836685850193/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs.map +1 -0
  30. package/.nx/cache/877026836685850193/dist/libs/africanies-models/package.json +23 -0
  31. package/.nx/cache/877026836685850193/dist/libs/africanies-models/types/africanies-africanies-models.d.ts +1452 -0
  32. package/.nx/cache/{17499961385238663835 → 9406544675747598148}/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs +765 -615
  33. package/.nx/cache/9406544675747598148/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +1 -0
  34. package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +170 -130
  35. package/.nx/cache/run.json +36 -36
  36. package/.nx/cache/terminalOutputs/{3017748574492080228 → 12565224028063674529} +16 -7
  37. package/.nx/cache/terminalOutputs/{8648260256613557249 → 13478445034325959094} +175 -172
  38. package/.nx/cache/terminalOutputs/{7126777490381568487 → 15149466893522345489} +10 -5
  39. package/.nx/cache/terminalOutputs/{4082520855419352840 → 15302120112746851896} +1 -1
  40. package/.nx/cache/terminalOutputs/15835338512221847842 +185 -0
  41. package/.nx/cache/terminalOutputs/{17491371155400585077 → 17289624717336768573} +1 -1
  42. package/.nx/cache/terminalOutputs/17571479482482478257 +35 -0
  43. package/.nx/cache/terminalOutputs/{9408529484792607601 → 17960163310445607219} +1 -1
  44. package/.nx/cache/terminalOutputs/18393832731522001121 +21 -0
  45. package/.nx/cache/terminalOutputs/3088264223473143358 +8 -0
  46. package/.nx/cache/terminalOutputs/{3314955264390318442 → 3953970051755345887} +1 -1
  47. package/.nx/cache/terminalOutputs/{12276756491762927325 → 4225324930345532464} +1 -1
  48. package/.nx/cache/terminalOutputs/4363587767476846758 +176 -0
  49. package/.nx/cache/terminalOutputs/5151121439688073678 +21 -0
  50. package/.nx/cache/terminalOutputs/7462873189468732296 +17 -0
  51. package/.nx/cache/terminalOutputs/8032148447904822353 +184 -182
  52. package/.nx/cache/terminalOutputs/8193462679279018087 +39 -0
  53. package/.nx/cache/terminalOutputs/877026836685850193 +21 -0
  54. package/.nx/cache/terminalOutputs/9406544675747598148 +21 -0
  55. package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db +0 -0
  56. package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db-shm +0 -0
  57. package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db-wal +0 -0
  58. package/.nx/workspace-data/d/daemon.log +6813 -0
  59. package/.nx/workspace-data/d/server-process.json +2 -2
  60. package/.nx/workspace-data/file-map.json +3490 -3432
  61. package/.nx/workspace-data/nx_files.nxt +0 -0
  62. package/.nx/workspace-data/project-graph.json +7 -2
  63. package/apps/playground/src/app/pages/tokens-page.ts +17 -13
  64. package/apps/playground/src/app/snippets/filters.snippets.ts +10 -0
  65. package/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +6 -1
  66. package/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +1 -1
  67. package/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +6 -1
  68. package/dist/libs/africanies-icons/assets/icons.sprite.svg +7 -0
  69. package/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs +1 -0
  70. package/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs.map +1 -1
  71. package/dist/libs/africanies-icons/types/africanies-africanies-icons.d.ts +2 -2
  72. package/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs +22 -8
  73. package/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs.map +1 -1
  74. package/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs +22 -10
  75. package/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +1 -1
  76. package/dist/libs/africanies-theme/tailwind-preset.cjs +84 -16
  77. package/dist/libs/africanies-theme/types/africanies-africanies-theme.d.ts +4 -2
  78. package/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs +723 -618
  79. package/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +1 -1
  80. package/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +142 -114
  81. package/libs/africanies-core/src/index.ts +1 -1
  82. package/libs/africanies-core/src/lib/notification/notification-link.ts +6 -1
  83. package/libs/africanies-icons/src/assets/icons.sprite.svg +7 -0
  84. package/libs/africanies-icons/src/lib/icon-name.ts +1 -0
  85. package/libs/africanies-models/src/lib/filters/configs/seed-configs.ts +22 -8
  86. package/libs/africanies-theme/src/lib/mode-color.safelist.ts +12 -0
  87. package/libs/africanies-theme/src/lib/mode-color.service.spec.ts +55 -0
  88. package/libs/africanies-theme/src/lib/mode-color.service.ts +11 -11
  89. package/libs/africanies-theme/tailwind-preset.cjs +84 -16
  90. package/libs/africanies-ui/src/lib/action-menu/action-menu.component.ts +3 -3
  91. package/libs/africanies-ui/src/lib/alert/alert.component.ts +4 -4
  92. package/libs/africanies-ui/src/lib/avatar/avatar-menu.component.ts +2 -2
  93. package/libs/africanies-ui/src/lib/button/button.component.spec.ts +7 -7
  94. package/libs/africanies-ui/src/lib/button/button.component.ts +5 -5
  95. package/libs/africanies-ui/src/lib/chip/chip.component.ts +4 -4
  96. package/libs/africanies-ui/src/lib/content-stack/content-stack.component.ts +1 -1
  97. package/libs/africanies-ui/src/lib/feedback/error-indicator.component.ts +3 -3
  98. package/libs/africanies-ui/src/lib/feedback/error-state.component.ts +2 -2
  99. package/libs/africanies-ui/src/lib/filters/filter-drawer.panel.ts +44 -27
  100. package/libs/africanies-ui/src/lib/forms/checkbox/checkbox.component.ts +2 -1
  101. package/libs/africanies-ui/src/lib/forms/file-upload/file-preview.dialog.ts +1 -1
  102. package/libs/africanies-ui/src/lib/forms/file-upload/file-upload.component.ts +1 -1
  103. package/libs/africanies-ui/src/lib/forms/form-field.classes.ts +36 -6
  104. package/libs/africanies-ui/src/lib/forms/otp-input/otp-input.component.ts +2 -1
  105. package/libs/africanies-ui/src/lib/forms/radio/radio.component.ts +2 -1
  106. package/libs/africanies-ui/src/lib/forms/select/select.component.ts +1 -1
  107. package/libs/africanies-ui/src/lib/forms/toggle/toggle.component.ts +1 -1
  108. package/libs/africanies-ui/src/lib/image/image.component.ts +1 -1
  109. package/libs/africanies-ui/src/lib/info-popover/info-popover.component.ts +2 -2
  110. package/libs/africanies-ui/src/lib/layout/app-shell-content-header.component.ts +1 -1
  111. package/libs/africanies-ui/src/lib/layout/app-shell-header.component.ts +14 -14
  112. package/libs/africanies-ui/src/lib/layout/app-shell.component.html +2 -2
  113. package/libs/africanies-ui/src/lib/layout/app-shell.component.ts +3 -3
  114. package/libs/africanies-ui/src/lib/layout/header-greeting.util.ts +0 -2
  115. package/libs/africanies-ui/src/lib/layout/header-weather.spec.ts +11 -40
  116. package/libs/africanies-ui/src/lib/layout/header-weather.ts +22 -63
  117. package/libs/africanies-ui/src/lib/navigation/shipping-mode-switch/shipping-mode-switch.component.ts +6 -6
  118. package/libs/africanies-ui/src/lib/navigation/side-nav/africanies-side-nav.component.html +21 -13
  119. package/libs/africanies-ui/src/lib/navigation/side-nav/africanies-side-nav.component.ts +13 -7
  120. package/libs/africanies-ui/src/lib/notifications/notification-drawer.panel.ts +6 -6
  121. package/libs/africanies-ui/src/lib/overlay/confirm-dialog.component.ts +2 -2
  122. package/libs/africanies-ui/src/lib/overlay/drawer.service.ts +2 -2
  123. package/libs/africanies-ui/src/lib/overlay/modal.service.ts +3 -3
  124. package/libs/africanies-ui/src/lib/overlay/overlay-frame.component.ts +1 -1
  125. package/libs/africanies-ui/src/lib/pagination/pagination.component.ts +1 -1
  126. package/libs/africanies-ui/src/lib/stepper/stepper.component.ts +7 -7
  127. package/libs/africanies-ui/src/lib/table/table-column.ts +9 -0
  128. package/libs/africanies-ui/src/lib/table/table.component.spec.ts +99 -0
  129. package/libs/africanies-ui/src/lib/table/table.component.ts +72 -30
  130. package/libs/africanies-ui/src/lib/toast/toast-item.component.ts +6 -6
  131. package/package.json +1 -1
  132. package/svg/hand-coins.svg +9 -0
  133. package/.nx/cache/12276756491762927325/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +0 -1
  134. package/.nx/cache/17491371155400585077/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +0 -1
  135. package/.nx/cache/17499961385238663835/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +0 -1
  136. package/.nx/cache/3314955264390318442/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +0 -1
  137. package/.nx/cache/4082520855419352840/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +0 -1
  138. package/.nx/cache/terminalOutputs/17499961385238663835 +0 -21
  139. /package/.nx/cache/{12276756491762927325 → 15302120112746851896}/dist/libs/africanies-theme/README.md +0 -0
  140. /package/.nx/cache/{12276756491762927325 → 15302120112746851896}/dist/libs/africanies-theme/package.json +0 -0
  141. /package/.nx/cache/{17491371155400585077 → 17289624717336768573}/dist/libs/africanies-core/README.md +0 -0
  142. /package/.nx/cache/{17491371155400585077 → 17289624717336768573}/dist/libs/africanies-core/package.json +0 -0
  143. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/README.md +0 -0
  144. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/assets/brand/africanies-logo-mini.png +0 -0
  145. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/assets/brand/africanies-logo.png +0 -0
  146. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/assets/brand/africanies-logo.svg +0 -0
  147. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/assets/carriers/dhl.svg +0 -0
  148. /package/.nx/cache/{17499961385238663835 → 3953970051755345887}/dist/libs/africanies-ui/package.json +0 -0
  149. /package/.nx/cache/{4082520855419352840 → 4225324930345532464}/dist/libs/africanies-theme/README.md +0 -0
  150. /package/.nx/cache/{4082520855419352840 → 4225324930345532464}/dist/libs/africanies-theme/package.json +0 -0
  151. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/README.md +0 -0
  152. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/assets/brand/africanies-logo-mini.png +0 -0
  153. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/assets/brand/africanies-logo.png +0 -0
  154. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/assets/brand/africanies-logo.svg +0 -0
  155. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/assets/carriers/dhl.svg +0 -0
  156. /package/.nx/cache/{3314955264390318442 → 9406544675747598148}/dist/libs/africanies-ui/package.json +0 -0
  157. /package/.nx/cache/terminalOutputs/{16279119293212733518 → 14005735098959303198} +0 -0
@@ -210,9 +210,9 @@ export {
210
210
 
211
211
  // User notifications (auth required)
212
212
  export {
213
+ isNotificationExternalLink,
213
214
  mapNotification,
214
215
  mapNotificationInboxItem,
215
- isNotificationExternalLink,
216
216
  mapNotificationList,
217
217
  mapNotificationPayload,
218
218
  NOTIFICATION_READ_PATH,
@@ -12,7 +12,10 @@ const QUERY_SHIPMENT_APP = 'shipment_app';
12
12
  const LEGACY_PORTAL_HOST =
13
13
  /^(?:test-)?(?:admin|customer)-(?:export|import)\.africaniestest\.com$/i;
14
14
 
15
- /** Signed export downloads and other hosts that must not be rewritten in-app. */
15
+ /**
16
+ * Signed export downloads and other hosts that must not be rewritten in-app.
17
+ * @param link
18
+ */
16
19
  export function isNotificationExternalLink(link: string): boolean {
17
20
  const trimmed = decodeNotificationLink(link).trim();
18
21
  if (!trimmed) {
@@ -39,6 +42,8 @@ export function isNotificationExternalLink(link: string): boolean {
39
42
  * - Legacy portal hosts become relative `/portal/...` paths with query preserved.
40
43
  * - When the notification already includes `shipment_app`, it is kept as-is.
41
44
  * - Otherwise classic host / `shipment_app` rewriting applies for portal URLs.
45
+ * @param link
46
+ * @param mode
42
47
  */
43
48
  export function resolveNotificationLinkForMode(
44
49
  link: string | null | undefined,
@@ -744,6 +744,13 @@
744
744
  <path d="M14 8H10C9.5 8 9 8.5 9 9V13C9 13.5 9.5 14 10 14V20H14V14C14.5 14 15 13.5 15 13V9C15 8.5 14.5 8 14 8Z" fill="currentColor"/></symbol>
745
745
  <symbol id="hammer" viewBox="0 0 24 24"><path d="M9.99707 6L16.9971 13L19.9971 10L15.5171 5.52C15.5171 5.52 12.5471 6.55 10.9971 5L9.99707 6Z" fill="currentColor"/>
746
746
  <path d="M12.797 9.79004L4.267 18.31C4.102 18.488 4 18.727 4 18.99C4 19.253 4.101 19.492 4.267 19.671C4.448 19.854 4.7 19.968 4.978 19.968C5.231 19.968 5.462 19.874 5.638 19.72L14.207 11.201L12.797 9.79004Z" fill="currentColor"/></symbol>
747
+ <symbol id="hand-coins" viewBox="0 0 16 15"><path
748
+ fill-rule="evenodd"
749
+ clip-rule="evenodd"
750
+ d="M0.142433 5.8125C0.142433 6.8115 0.394433 7.74975 0.836933 8.5695C0.62996 8.65739 0.447722 8.79474 0.30621 8.96949C0.164697 9.14424 0.0682364 9.35105 0.0252912 9.57178C-0.0176541 9.7925 -0.00577094 10.0204 0.0598977 10.2354C0.125566 10.4505 0.243013 10.6462 0.401933 10.8053L3.64643 14.049C3.95198 14.3546 4.32385 14.5858 4.73318 14.7244C5.14251 14.8631 5.57829 14.9055 6.00668 14.8485L10.4924 14.25H12.8924V15H15.5174V13.875H14.0174V8.25H15.5174V7.125H12.8924V7.875H11.3909C11.7249 6.99496 11.8402 6.04697 11.7269 5.11253C11.6135 4.17809 11.2749 3.28516 10.7402 2.51051C10.2054 1.73585 9.49058 1.10266 8.65704 0.665352C7.8235 0.228047 6.89622 -0.00028052 5.95493 2.58646e-07C4.41336 2.58646e-07 2.93493 0.612387 1.84488 1.70244C0.75482 2.7925 0.142433 4.27093 0.142433 5.8125ZM5.95493 1.125C5.0719 1.12517 4.20686 1.37472 3.45942 1.84492C2.71198 2.31512 2.11253 2.98685 1.73009 3.78277C1.34765 4.57869 1.19776 5.46644 1.29769 6.3438C1.39762 7.22116 1.7433 8.05247 2.29493 8.742L4.64768 9.7995C4.6685 9.54613 4.74629 9.30073 4.87525 9.08164C5.00421 8.86255 5.18101 8.67542 5.39243 8.53425V8.25H4.64243V7.125H6.14243C6.24189 7.125 6.33727 7.08549 6.4076 7.01517C6.47792 6.94484 6.51743 6.84946 6.51743 6.75C6.51743 6.65054 6.47792 6.55516 6.4076 6.48483C6.33727 6.41451 6.24189 6.375 6.14243 6.375H5.76743C5.40208 6.37536 5.04916 6.24237 4.77491 6.00099C4.50066 5.7596 4.32393 5.42642 4.2779 5.06398C4.23187 4.70155 4.3197 4.33477 4.52491 4.03249C4.73012 3.73022 5.03859 3.51323 5.39243 3.42225V2.625H6.51743V3.375H7.26743V4.5H5.76743C5.66798 4.5 5.57259 4.53951 5.50227 4.60984C5.43194 4.68016 5.39243 4.77554 5.39243 4.875C5.39243 4.97446 5.43194 5.06984 5.50227 5.14017C5.57259 5.21049 5.66798 5.25 5.76743 5.25H6.14243C6.50778 5.24964 6.8607 5.38263 7.13496 5.62402C7.40921 5.8654 7.58593 6.19858 7.63196 6.56102C7.67799 6.92345 7.59016 7.29023 7.38495 7.59251C7.17975 7.89478 6.87127 8.11177 6.51743 8.20275V8.25H9.23843L10.1249 7.9545C10.4921 7.23989 10.6693 6.44291 10.6398 5.64006C10.6102 4.8372 10.3748 4.05542 9.95615 3.36973C9.53748 2.68405 8.94961 2.11748 8.24894 1.72439C7.54827 1.33131 6.75833 1.12491 5.95493 1.125ZM5.62343 11.4705L1.47593 9.60675C1.42279 9.58303 1.36303 9.57868 1.30701 9.59444C1.25099 9.6102 1.20227 9.64509 1.16929 9.69304C1.13632 9.74098 1.12118 9.79897 1.1265 9.85691C1.13182 9.91486 1.15727 9.96911 1.19843 10.0103L4.44143 13.2533C4.6248 13.4368 4.84801 13.5756 5.09372 13.6588C5.33943 13.7421 5.60103 13.7675 5.85818 13.7333L10.4182 13.125H12.8924V9H10.5464L9.42143 9.375H6.32993C6.18075 9.375 6.03767 9.43426 5.93219 9.53975C5.8267 9.64524 5.76743 9.78832 5.76743 9.9375C5.76743 10.0867 5.8267 10.2298 5.93219 10.3352C6.03767 10.4407 6.18075 10.5 6.32993 10.5H9.56243L10.4774 11.415L9.68243 12.21L9.09743 11.625H6.32993C6.07793 11.625 5.83793 11.5695 5.62343 11.4705Z"
751
+ fill="currentColor"
752
+
753
+ /></symbol>
747
754
  <symbol id="hand" viewBox="0 0 24 24"><path d="M17.4612 6.45C17.0612 6.05 16.4612 5.95 15.9612 6.15C15.9612 5.85 15.8612 5.55 15.5612 5.25C15.3612 5.05 14.9612 4.85 14.4612 4.85C14.1612 4.85 13.9612 4.95 13.7612 4.95C13.7612 4.75 13.6612 4.65 13.5612 4.45C13.0612 3.85 12.0612 3.85 11.5612 4.45C11.3612 4.65 11.1612 4.85 11.1612 5.05C10.9612 5.05 10.7612 4.95 10.5612 4.95C10.0612 4.95 9.76122 5.15 9.46122 5.45C8.96122 5.95 8.96122 6.75 8.96122 6.75V10.55C8.66122 10.25 8.16122 9.75 7.46122 9.75C7.26122 9.75 6.96122 9.85 6.76122 9.95C6.36122 10.15 6.16122 10.45 6.06122 10.85C5.76122 11.85 6.66122 13.25 6.66122 13.35C6.76122 13.45 7.86122 16.05 8.86122 17.15C9.86122 18.35 10.9612 19.05 13.7612 19.05C16.6612 19.05 17.9612 17.45 17.9612 13.95V8.45C17.9612 8.35 18.0612 7.15 17.4612 6.45ZM11.9612 6.05C11.9612 5.75 11.8612 5.05 12.4612 5.05C12.9612 5.05 12.9612 5.55 12.9612 6.05V10.05C12.9612 10.35 13.1612 10.55 13.4612 10.55C13.7612 10.55 13.9612 10.35 13.9612 10.05V6.25C13.9612 6.25 13.9612 5.85 14.4612 5.85C15.0612 5.85 14.9612 6.75 14.9612 6.75V10.05C14.9612 10.35 15.1612 10.55 15.4612 10.55C15.7612 10.55 15.9612 10.35 15.9612 10.05V7.65C15.9612 7.55 15.9612 7.05 16.4612 7.05C16.9612 7.05 16.9612 8.05 16.9612 8.05V13.95C16.9612 17.35 15.6612 18.05 13.7612 18.05C11.3612 18.05 10.4612 17.55 9.66122 16.45C8.76122 15.45 7.56122 12.85 7.56122 12.75C7.26122 12.45 6.86122 11.55 6.96122 11.15C6.96122 11.05 7.06122 10.95 7.16122 10.85C7.26122 10.85 7.36122 10.75 7.36122 10.75C7.76122 10.75 8.16122 11.25 8.26122 11.45L8.86122 12.35C8.96122 12.55 9.26122 12.65 9.46122 12.55C9.86122 12.55 9.96122 12.35 9.96122 12.15V6.95C9.96122 6.55 9.96122 5.95 10.4612 5.95C10.8612 5.95 10.9612 6.25 10.9612 6.75V10.05C10.9612 10.35 11.1612 10.55 11.4612 10.55C11.7612 10.55 11.9612 10.35 11.9612 10.05V6.05Z" fill="currentColor"/></symbol>
748
755
  <symbol id="handle-corner" viewBox="0 0 24 24"><path d="M8.4 17.7L17.7 8.4V7L7 17.7H8.4Z" fill="currentColor"/>
749
756
  <path d="M11.4 17.7L17.7 11.4V10L10 17.7H11.4Z" fill="currentColor"/>
@@ -336,6 +336,7 @@ export const ICON_NAMES = [
336
336
  'grid',
337
337
  'group',
338
338
  'hammer',
339
+ 'hand-coins',
339
340
  'hand',
340
341
  'handle-corner',
341
342
  'hands-up',
@@ -122,7 +122,7 @@ export const updateShipmentsFilterConfig: ModuleFilterConfigModel = {
122
122
  },
123
123
  {
124
124
  key: 'shipment_method_id',
125
- label: 'Shipment Carrier',
125
+ label: 'Shipment Methods',
126
126
  type: 'select',
127
127
  optionsSource: 'shipmentMethods',
128
128
  placeholder: 'Shipment Methods',
@@ -133,6 +133,7 @@ export const updateShipmentsFilterConfig: ModuleFilterConfigModel = {
133
133
  type: 'select',
134
134
  optionsSource: 'static',
135
135
  options: [
136
+ { value: '', label: 'None' },
136
137
  { value: 'individual', label: 'Individual' },
137
138
  { value: 'business', label: 'Business' },
138
139
  ],
@@ -148,17 +149,20 @@ export const updateShipmentsFilterConfig: ModuleFilterConfigModel = {
148
149
  {
149
150
  key: 'shipment_manifest_id',
150
151
  label: 'Shipment Manifest',
151
- type: 'select',
152
- optionsSource: 'shipmentManifests',
153
- placeholder: 'Shipment Manifest',
152
+ type: 'enum',
153
+ exclusive: true,
154
+ options: [
155
+ { value: 'not_null', label: 'Manifest Added', color: '#25945c' },
156
+ { value: 'null', label: 'Manifest Not Added', color: '#667185' },
157
+ ],
154
158
  },
155
159
  {
156
160
  key: 'api_request',
157
161
  label: 'API Request',
158
162
  type: 'boolean',
159
163
  options: [
160
- { value: '1', label: 'Yes' },
161
- { value: '0', label: 'No' },
164
+ { value: '1', label: 'Yes', color: '#25945c' },
165
+ { value: '0', label: 'No', color: '#FF001C' },
162
166
  ],
163
167
  },
164
168
  {
@@ -166,8 +170,18 @@ export const updateShipmentsFilterConfig: ModuleFilterConfigModel = {
166
170
  label: 'Insured',
167
171
  type: 'boolean',
168
172
  options: [
169
- { value: '1', label: 'Yes' },
170
- { value: '0', label: 'No' },
173
+ { value: '1', label: 'Yes', color: '#3B82F6' },
174
+ { value: '0', label: 'No', color: '#f48220' },
175
+ ],
176
+ },
177
+ {
178
+ key: 'pay_later',
179
+ label: 'Pay Later',
180
+ type: 'enum',
181
+ exclusive: true,
182
+ options: [
183
+ { value: 'credit', label: 'Credit', color: '#25945c' },
184
+ { value: 'debit', label: 'Debit', color: '#667185' },
171
185
  ],
172
186
  },
173
187
  ],
@@ -9,38 +9,50 @@
9
9
  * Do not rename these strings without updating ModeColorService and THEME.md.
10
10
  *
11
11
  * SFN (export / green):
12
+ * text-export-strong bg-export-strong hover:bg-export-hover border-export-strong
12
13
  * text-export bg-export bg-export-subtle bg-export-light border-export
13
14
  * hover:bg-export-light hover:bg-export-subtle dark:bg-export/15 dark:hover:bg-export/15
14
15
  * dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)] dark:bg-export dark:text-export dark:border-export
15
16
  *
16
17
  * STN (import / orange):
18
+ * text-import-strong bg-import-strong hover:bg-import-hover border-import-strong
17
19
  * text-import bg-import bg-import-subtle bg-import-light border-import
18
20
  * hover:bg-import-light hover:bg-import-subtle dark:bg-import/15 dark:hover:bg-import/15
19
21
  * dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)] dark:bg-import dark:text-import dark:border-import
20
22
  */
21
23
  export const MODE_COLOR_SAFELIST = [
22
24
  'text-export',
25
+ 'text-export-strong',
23
26
  'bg-export',
27
+ 'bg-export-strong',
24
28
  'bg-export-subtle',
25
29
  'bg-export-light',
26
30
  'border-export',
31
+ 'border-export-strong',
32
+ 'hover:bg-export-hover',
27
33
  'hover:bg-export-light',
28
34
  'hover:bg-export-subtle',
29
35
  'dark:bg-export/15',
30
36
  'dark:hover:bg-export/15',
37
+ 'dark:hover:bg-export-light',
31
38
  'dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',
32
39
  'dark:bg-export',
33
40
  'dark:text-export',
34
41
  'dark:border-export',
35
42
  'text-import',
43
+ 'text-import-strong',
36
44
  'bg-import',
45
+ 'bg-import-strong',
37
46
  'bg-import-subtle',
38
47
  'bg-import-light',
39
48
  'border-import',
49
+ 'border-import-strong',
50
+ 'hover:bg-import-hover',
40
51
  'hover:bg-import-light',
41
52
  'hover:bg-import-subtle',
42
53
  'dark:bg-import/15',
43
54
  'dark:hover:bg-import/15',
55
+ 'dark:hover:bg-import-light',
44
56
  'dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',
45
57
  'dark:bg-import',
46
58
  'dark:text-import',
@@ -0,0 +1,55 @@
1
+ import { signal } from '@angular/core';
2
+ import { TestBed } from '@angular/core/testing';
3
+
4
+ import { ShippingModeService } from '@africanies/africanies-core';
5
+ import type { ShippingMode } from '@africanies/africanies-models';
6
+
7
+ import { ModeColorService } from './mode-color.service';
8
+
9
+ describe('ModeColorService', () => {
10
+ let mode: ReturnType<typeof signal<ShippingMode>>;
11
+ let service: ModeColorService;
12
+
13
+ beforeEach(() => {
14
+ mode = signal<ShippingMode>('sfn');
15
+ TestBed.configureTestingModule({
16
+ providers: [
17
+ ModeColorService,
18
+ {
19
+ provide: ShippingModeService,
20
+ useValue: {
21
+ mode: mode.asReadonly(),
22
+ },
23
+ },
24
+ ],
25
+ });
26
+ service = TestBed.inject(ModeColorService);
27
+ });
28
+
29
+ it('uses accessible export-strong fills and text in SFN light mode', () => {
30
+ const classes = service.classes();
31
+ expect(classes.text).toContain('text-export-strong');
32
+ expect(classes.primary).toContain('bg-export-strong');
33
+ expect(classes.ghostPrimary).toContain('text-export-strong');
34
+ expect(classes.activeFill).toContain('bg-export-strong');
35
+ expect(classes.stroked).toContain('text-export-strong');
36
+ expect(classes.stroked).toContain('border-export-strong');
37
+ });
38
+
39
+ it('keeps bright export accents for dark-mode companions in SFN', () => {
40
+ const classes = service.classes();
41
+ expect(classes.primary).toContain('dark:bg-export');
42
+ expect(classes.ghostPrimary).toContain('dark:text-export');
43
+ });
44
+
45
+ it('uses accessible import-strong fills and text in STN light mode', () => {
46
+ mode.set('stn');
47
+ const classes = service.classes();
48
+ expect(classes.text).toContain('text-import-strong');
49
+ expect(classes.primary).toContain('bg-import-strong');
50
+ expect(classes.ghostPrimary).toContain('text-import-strong');
51
+ expect(classes.activeFill).toContain('bg-import-strong');
52
+ expect(classes.stroked).toContain('text-import-strong');
53
+ expect(classes.primary).not.toContain('bg-export-strong');
54
+ });
55
+ });
@@ -9,7 +9,7 @@ import { ShippingModeService } from '@africanies/africanies-core';
9
9
  * and accent text. Semantic colors (danger / warning) stay mode-independent.
10
10
  */
11
11
  export interface ModeColorClasses {
12
- /** Text color utility, e.g. `text-export`. */
12
+ /** Accessible accent text `text-export-strong` in light, `text-export` in dark. */
13
13
  text: string;
14
14
  /** Solid background utility, e.g. `bg-export`. */
15
15
  bg: string;
@@ -80,41 +80,41 @@ export class ModeColorService {
80
80
  // Literal strings required for Tailwind content detection — do not interpolate.
81
81
  if (this.shippingMode.mode() === 'sfn') {
82
82
  return {
83
- text: 'text-export',
83
+ text: 'text-export-strong dark:text-export',
84
84
  bg: 'bg-export',
85
85
  bgSubtle: 'bg-export-subtle',
86
86
  border: 'border-export',
87
87
  primary:
88
- 'bg-export text-white border-transparent hover:bg-export-light',
88
+ 'bg-export-strong text-white border-transparent hover:bg-export-hover dark:bg-export dark:hover:bg-export-light',
89
89
  ghostPrimary:
90
- 'bg-transparent text-export border-transparent hover:bg-export-subtle dark:hover:bg-export/15',
90
+ 'bg-transparent text-export-strong border-transparent hover:bg-export-subtle dark:text-export dark:hover:bg-export/15',
91
91
  soft: 'bg-export-subtle dark:bg-export/15',
92
92
  softSolid:
93
93
  'bg-export-subtle dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',
94
94
  softHover: 'hover:bg-export-subtle dark:hover:bg-export/15',
95
95
  activeFill:
96
- 'bg-export text-white border-transparent dark:bg-export dark:text-white',
96
+ 'bg-export-strong text-white border-transparent hover:bg-export-hover dark:bg-export dark:text-white dark:hover:bg-export-light',
97
97
  stroked:
98
- 'bg-white text-export border-export hover:bg-export-subtle dark:bg-ink-950 dark:text-export dark:border-export dark:hover:bg-export/15',
98
+ 'bg-surface text-export-strong border-export-strong hover:bg-export-subtle dark:bg-ink-950 dark:text-export dark:border-export dark:hover:bg-export/15',
99
99
  };
100
100
  }
101
101
  return {
102
- text: 'text-import',
102
+ text: 'text-import-strong dark:text-import',
103
103
  bg: 'bg-import',
104
104
  bgSubtle: 'bg-import-subtle',
105
105
  border: 'border-import',
106
106
  primary:
107
- 'bg-import text-white border-transparent hover:bg-import-light',
107
+ 'bg-import-strong text-white border-transparent hover:bg-import-hover dark:bg-import dark:hover:bg-import-light',
108
108
  ghostPrimary:
109
- 'bg-transparent text-import border-transparent hover:bg-import-subtle dark:hover:bg-import/15',
109
+ 'bg-transparent text-import-strong border-transparent hover:bg-import-subtle dark:text-import dark:hover:bg-import/15',
110
110
  soft: 'bg-import-subtle dark:bg-import/15',
111
111
  softSolid:
112
112
  'bg-import-subtle dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',
113
113
  softHover: 'hover:bg-import-subtle dark:hover:bg-import/15',
114
114
  activeFill:
115
- 'bg-import text-white border-transparent dark:bg-import dark:text-white',
115
+ 'bg-import-strong text-white border-transparent hover:bg-import-hover dark:bg-import dark:text-white dark:hover:bg-import-light',
116
116
  stroked:
117
- 'bg-white text-import border-import hover:bg-import-subtle dark:bg-ink-950 dark:text-import dark:border-import dark:hover:bg-import/15',
117
+ 'bg-surface text-import-strong border-import-strong hover:bg-import-subtle dark:bg-ink-950 dark:text-import dark:border-import dark:hover:bg-import/15',
118
118
  };
119
119
  });
120
120
  }
@@ -92,8 +92,8 @@ function africaniesAutofillPlugin({ addBase }) {
92
92
  const rules = {};
93
93
  for (const selector of autofillSelectors) {
94
94
  rules[selector] = {
95
- WebkitTextFillColor: '#1c2b3f',
96
- caretColor: '#1c2b3f',
95
+ WebkitTextFillColor: '#172033',
96
+ caretColor: '#172033',
97
97
  boxShadow: '0 0 0 1000px #ffffff inset',
98
98
  transition: 'background-color 99999s ease-in-out 0s',
99
99
  };
@@ -143,6 +143,36 @@ function africaniesOverlayStackPlugin({ addBase }) {
143
143
  });
144
144
  }
145
145
 
146
+ /**
147
+ * Shared elevated card shell so list/detail pages keep one light-theme recipe.
148
+ *
149
+ * @param {import('tailwindcss/types/config').PluginAPI} api
150
+ */
151
+ function africaniesSurfacePlugin({ addComponents }) {
152
+ addComponents({
153
+ '.africanies-card': {
154
+ borderRadius: '0.75rem',
155
+ borderWidth: '1px',
156
+ borderStyle: 'solid',
157
+ borderColor: '#dde3ea',
158
+ backgroundColor: '#ffffff',
159
+ padding: '1.25rem',
160
+ color: '#172033',
161
+ boxShadow:
162
+ '0 1px 2px rgb(23 32 51 / 0.04), 0 1px 3px rgb(23 32 51 / 0.06)',
163
+ '@media (min-width: 640px)': {
164
+ padding: '1.5rem',
165
+ },
166
+ },
167
+ '.dark .africanies-card': {
168
+ borderColor: 'rgba(255, 255, 255, 0.1)',
169
+ backgroundColor: '#272729',
170
+ color: '#ffffff',
171
+ boxShadow: 'none',
172
+ },
173
+ });
174
+ }
175
+
146
176
  /**
147
177
  * Keep overlay scrollbars off close buttons and other end-aligned chrome.
148
178
  *
@@ -186,6 +216,7 @@ module.exports = {
186
216
  africaniesSpinPlugin,
187
217
  africaniesOverlayStackPlugin,
188
218
  africaniesOverlayScrollPlugin,
219
+ africaniesSurfacePlugin,
189
220
  africaniesAutofillPlugin,
190
221
  ],
191
222
  theme: {
@@ -193,56 +224,83 @@ module.exports = {
193
224
  colors: {
194
225
  black: '#000000',
195
226
  white: '#ffffff',
227
+ surface: {
228
+ DEFAULT: '#ffffff',
229
+ subtle: '#f8fafc',
230
+ hover: '#e9eef5',
231
+ sunken: '#eef2f6',
232
+ },
196
233
  ink: {
197
- // Portal `.txt-primary` navy primary body / heading text (light).
198
- DEFAULT: '#1c2b3f',
234
+ // High-contrast cool navy for light-theme body and heading text.
235
+ DEFAULT: '#172033',
199
236
  blue: '#192a3e',
200
- brand: '#1c2b3f',
237
+ brand: '#172033',
201
238
  // Previous ink DEFAULT — dark elevated cards / panels (`dark:bg-ink-surface`).
202
239
  surface: '#212529',
203
240
  950: '#272729',
204
241
  },
205
242
  neutral: {
243
+ 50: '#f8fafc',
244
+ 100: '#eef2f6',
245
+ 200: '#dde3ea',
206
246
  300: '#c9d5e1',
247
+ // Keep 300/400 stable: they are the established dark-theme foregrounds.
207
248
  400: '#a9b5cb',
208
- 600: '#667185',
249
+ 500: '#667185',
250
+ 600: '#526071',
251
+ 700: '#3e4a59',
252
+ 800: '#2c3644',
253
+ 900: '#172033',
209
254
  },
210
255
  border: {
211
- // Soft hairline on white (portal `$border-bottom-gray`).
212
- DEFAULT: '#f0f2f5',
213
- // Nav pins / stronger chrome dividers.
214
- strong: '#e0e6f0',
256
+ // Quiet card/divider chrome. Controls use the stronger `control` token.
257
+ DEFAULT: '#dde3ea',
258
+ strong: '#c4cdd8',
215
259
  },
260
+ // 3.1:1 against white: visible enough for meaningful control boundaries.
261
+ control: '#8793a3',
262
+ focus: '#175cd3',
216
263
  background: {
217
- // Portal page shell (`container-wrap`).
218
- chrome: '#f6f7f9',
264
+ // Cooler canvas and a clearer inset level beneath white surfaces.
265
+ chrome: '#f4f6f8',
219
266
  // Nested wells inside white cards.
220
- well: '#f3f3f3',
267
+ well: '#eef2f6',
221
268
  // Auth / welcome / soft hover.
222
- welcome: '#f9fafb',
269
+ welcome: '#f8fafc',
270
+ hover: '#e9eef5',
223
271
  },
224
272
  export: {
225
273
  DEFAULT: '#1cbd5d',
226
274
  light: '#24dc6d',
227
275
  subtle: '#e4fff3',
228
276
  tint: '#f2fff8',
277
+ // Accessible normal-text / white-text-control foreground (5.43:1).
278
+ strong: '#0b7a3e',
279
+ hover: '#096833',
229
280
  },
230
281
  import: {
231
282
  DEFAULT: '#f08829',
232
283
  light: '#ffa95b',
233
284
  subtle: '#fffcef',
285
+ // Accessible normal-text / white-text-control foreground (6.20:1).
286
+ strong: '#9a4b0b',
287
+ hover: '#7f3e09',
234
288
  },
235
289
  danger: {
236
290
  DEFAULT: '#ff001c',
237
- dark: '#b41433',
291
+ dark: '#b4233c',
238
292
  strong: '#C00B19',
239
293
  subtle: '#FFF2F2',
240
294
  },
241
295
  warning: {
242
296
  DEFAULT: '#DBB316',
243
- dark: '#EF8833',
297
+ dark: '#8a5a00',
244
298
  subtle: '#FFF6E6',
245
299
  },
300
+ info: {
301
+ DEFAULT: '#175cd3',
302
+ subtle: '#eff6ff',
303
+ },
246
304
  },
247
305
  fontFamily: {
248
306
  sans: ['Inter', 'system-ui', 'sans-serif'],
@@ -257,6 +315,16 @@ module.exports = {
257
315
  'body-sm': ['0.875rem', { lineHeight: 1.4, fontWeight: 400 }],
258
316
  caption: ['0.75rem', { lineHeight: 1.3, fontWeight: 400 }],
259
317
  },
318
+ borderRadius: {
319
+ control: '0.5rem',
320
+ panel: '0.75rem',
321
+ },
322
+ boxShadow: {
323
+ card:
324
+ '0 1px 2px rgb(23 32 51 / 0.04), 0 1px 3px rgb(23 32 51 / 0.06)',
325
+ floating:
326
+ '0 12px 32px rgb(23 32 51 / 0.12), 0 2px 8px rgb(23 32 51 / 0.06)',
327
+ },
260
328
  },
261
329
  },
262
330
  };
@@ -158,7 +158,7 @@ const MENU_PANEL_POSITIONS: ConnectedPosition[] = [
158
158
  >
159
159
  <div
160
160
  #panel
161
- class="min-w-44 rounded-md border border-border bg-white py-1 shadow-lg outline-none dark:border-white/15 dark:bg-ink-950"
161
+ class="min-w-44 rounded-md border border-border bg-surface py-1 shadow-floating outline-none dark:border-white/15 dark:bg-ink-950"
162
162
  role="menu"
163
163
  tabindex="-1"
164
164
  [attr.aria-label]="ariaLabel()"
@@ -246,10 +246,10 @@ export class ActionMenuComponent {
246
246
  const base =
247
247
  'flex w-full cursor-pointer items-center gap-2 px-3 py-2 text-body-sm no-underline transition-colors ' +
248
248
  'disabled:cursor-not-allowed disabled:opacity-50 ' +
249
- 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-ink';
249
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-focus';
250
250
  if (item.danger) {
251
251
  return (
252
- `${base} text-danger ` +
252
+ `${base} text-danger-dark dark:text-danger ` +
253
253
  (active
254
254
  ? 'bg-danger-subtle dark:bg-danger/15'
255
255
  : 'hover:bg-danger-subtle dark:hover:bg-danger/15')
@@ -144,11 +144,11 @@ export class AlertComponent {
144
144
  protected readonly iconClass = computed(() => {
145
145
  switch (this.variant()) {
146
146
  case 'success':
147
- return 'text-export dark:text-export-light';
147
+ return 'text-export-strong dark:text-export-light';
148
148
  case 'warning':
149
149
  return 'text-warning-dark dark:text-warning';
150
150
  case 'danger':
151
- return 'text-danger';
151
+ return 'text-danger-dark dark:text-danger';
152
152
  default:
153
153
  return 'text-ink-blue dark:text-neutral-300';
154
154
  }
@@ -158,11 +158,11 @@ export class AlertComponent {
158
158
  const base = 'm-0 text-body font-medium';
159
159
  switch (this.variant()) {
160
160
  case 'success':
161
- return `${base} text-export dark:text-export-light`;
161
+ return `${base} text-export-strong dark:text-export-light`;
162
162
  case 'warning':
163
163
  return `${base} text-warning-dark dark:text-warning`;
164
164
  case 'danger':
165
- return `${base} text-danger`;
165
+ return `${base} text-danger-dark dark:text-danger`;
166
166
  default:
167
167
  return `${base} text-ink dark:text-white`;
168
168
  }
@@ -45,7 +45,7 @@ import { AvatarComponent, type AvatarSize } from './avatar.component';
45
45
  <button
46
46
  type="button"
47
47
  africaniesActionMenuTrigger
48
- class="inline-flex cursor-pointer items-center gap-1 rounded-lg p-0.5 pr-1 transition-colors hover:bg-background-welcome focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-white/10"
48
+ class="inline-flex cursor-pointer items-center gap-1 rounded-lg p-0.5 pr-1 transition-colors hover:bg-background-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-focus disabled:cursor-not-allowed disabled:opacity-50 dark:hover:bg-white/10"
49
49
  [attr.aria-label]="ariaLabel()"
50
50
  >
51
51
  <africanies-avatar [name]="name()" [src]="src()" [size]="size()" />
@@ -53,7 +53,7 @@ import { AvatarComponent, type AvatarSize } from './avatar.component';
53
53
  <africanies-icon
54
54
  name="chevron-down"
55
55
  [size]="14"
56
- class="shrink-0 text-neutral-500 dark:text-neutral-400"
56
+ class="shrink-0 text-neutral-600 dark:text-neutral-400"
57
57
  aria-hidden="true"
58
58
  />
59
59
  }
@@ -65,7 +65,7 @@ describe('ButtonComponent', () => {
65
65
  });
66
66
 
67
67
  it('should apply primary variant classes by default (SFN / export)', () => {
68
- expect(button.className).toContain('bg-export');
68
+ expect(button.className).toContain('bg-export-strong');
69
69
  expect(button.className).toContain('text-white');
70
70
  });
71
71
 
@@ -73,21 +73,21 @@ describe('ButtonComponent', () => {
73
73
  mode.set('stn');
74
74
  fixture.detectChanges();
75
75
 
76
- expect(button.className).toContain('bg-import');
77
- expect(button.className).not.toContain('bg-export');
76
+ expect(button.className).toContain('bg-import-strong');
77
+ expect(button.className).not.toContain('bg-export-strong');
78
78
  });
79
79
 
80
80
  it('should switch ghost-primary text accent with shipping mode', () => {
81
81
  host.variant.set('ghost-primary');
82
82
  fixture.detectChanges();
83
- expect(button.className).toContain('text-export');
83
+ expect(button.className).toContain('text-export-strong');
84
84
  expect(button.className).toContain('bg-transparent');
85
85
 
86
86
  mode.set('stn');
87
87
  fixture.detectChanges();
88
88
 
89
- expect(button.className).toContain('text-import');
90
- expect(button.className).not.toContain('text-export');
89
+ expect(button.className).toContain('text-import-strong');
90
+ expect(button.className).not.toContain('text-export-strong');
91
91
  });
92
92
 
93
93
  it('should switch variant and size classes', () => {
@@ -95,7 +95,7 @@ describe('ButtonComponent', () => {
95
95
  host.size.set('sm');
96
96
  fixture.detectChanges();
97
97
 
98
- expect(button.className).toContain('bg-danger');
98
+ expect(button.className).toContain('bg-danger-dark');
99
99
  expect(button.className).toContain('h-8');
100
100
  });
101
101
 
@@ -153,7 +153,7 @@ export class ButtonComponent {
153
153
  protected readonly hostClass = computed(() => {
154
154
  const base =
155
155
  'relative inline-flex items-center justify-center gap-2 box-border font-sans font-medium rounded-md border transition-colors cursor-pointer ' +
156
- 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ink ' +
156
+ 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-focus ' +
157
157
  'disabled:opacity-50 disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:cursor-not-allowed';
158
158
 
159
159
  const sizes: Record<ButtonSize, string> = {
@@ -172,19 +172,19 @@ export class ButtonComponent {
172
172
  variantClass = this.modeColor.classes().stroked;
173
173
  } else if (variant === 'flat') {
174
174
  variantClass =
175
- 'bg-white dark:bg-ink-950 text-ink dark:text-white border-border dark:border-white/15 hover:bg-background-welcome dark:hover:bg-white/10';
175
+ 'bg-surface dark:bg-ink-950 text-ink dark:text-white border-control dark:border-white/15 hover:bg-background-hover dark:hover:bg-white/10';
176
176
  } else if (variant === 'ghost') {
177
177
  variantClass =
178
- 'bg-transparent text-ink dark:text-white border-transparent hover:bg-background-welcome dark:hover:bg-white/10';
178
+ 'bg-transparent text-ink dark:text-white border-transparent hover:bg-background-hover dark:hover:bg-white/10';
179
179
  } else if (variant === 'ghost-danger') {
180
180
  variantClass =
181
- 'bg-transparent text-danger border-transparent hover:bg-danger-subtle dark:hover:bg-danger/10';
181
+ 'bg-transparent text-danger-dark border-transparent hover:bg-danger-subtle dark:text-danger dark:hover:bg-danger/10';
182
182
  } else if (variant === 'underline') {
183
183
  variantClass =
184
184
  'bg-transparent text-ink dark:text-white border-transparent underline underline-offset-2 hover:opacity-80 !px-0 !h-auto !min-h-0';
185
185
  } else {
186
186
  variantClass =
187
- 'bg-danger text-white border-transparent hover:bg-danger-dark';
187
+ 'bg-danger-dark text-white border-transparent hover:bg-danger-strong dark:bg-danger dark:hover:bg-danger-dark';
188
188
  }
189
189
 
190
190
  return `${base} ${sizes[this.size()]} ${variantClass}`;
@@ -63,7 +63,7 @@ export type ChipSize = 'sm' | 'md';
63
63
  @if (removable()) {
64
64
  <button
65
65
  type="button"
66
- class="inline-flex shrink-0 cursor-pointer items-center justify-center rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-ink"
66
+ class="inline-flex shrink-0 cursor-pointer items-center justify-center rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-focus"
67
67
  [attr.aria-label]="removeLabel()"
68
68
  (click)="onRemove($event)"
69
69
  >
@@ -118,13 +118,13 @@ export class ChipComponent {
118
118
  switch (this.variant()) {
119
119
  case 'success':
120
120
  case 'export':
121
- return 'bg-export-subtle text-export dark:bg-export/15 dark:text-export-light';
121
+ return 'bg-export-subtle text-export-strong dark:bg-export/15 dark:text-export-light';
122
122
  case 'import':
123
- return 'bg-import-subtle text-import dark:bg-import/15 dark:text-import-light';
123
+ return 'bg-import-subtle text-import-strong dark:bg-import/15 dark:text-import-light';
124
124
  case 'warning':
125
125
  return 'bg-warning-subtle text-warning-dark dark:bg-warning/15 dark:text-warning';
126
126
  case 'danger':
127
- return 'bg-danger-subtle text-danger dark:bg-danger/15 dark:text-danger';
127
+ return 'bg-danger-subtle text-danger-dark dark:bg-danger/15 dark:text-danger';
128
128
  default:
129
129
  return 'bg-border/60 text-ink dark:bg-white/10 dark:text-neutral-200';
130
130
  }