@africanies/angular-web-sdk 0.1.4 → 0.1.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.
- package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs +456 -169
- package/.nx/cache/14876618240301288353/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +1 -0
- package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/package.json +5 -5
- package/.nx/cache/{5741611231803799383 → 14876618240301288353}/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +100 -20
- package/.nx/cache/{1275815545780424169 → 17626862048742598274}/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs +6 -0
- package/.nx/cache/17626862048742598274/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +1 -0
- package/.nx/cache/{14153928176747262656 → 17626862048742598274}/dist/libs/africanies-theme/package.json +3 -3
- package/.nx/cache/{1275815545780424169 → 17626862048742598274}/dist/libs/africanies-theme/tailwind-preset.cjs +15 -7
- package/.nx/cache/{14153928176747262656 → 17626862048742598274}/dist/libs/africanies-theme/types/africanies-africanies-theme.d.ts +10 -1
- package/.nx/cache/{13524438527920092277 → 9040451482998546630}/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +9 -44
- package/.nx/cache/9040451482998546630/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +1 -0
- package/.nx/cache/{13524438527920092277 → 9040451482998546630}/dist/libs/africanies-core/package.json +3 -3
- package/.nx/cache/{13524438527920092277 → 9040451482998546630}/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +6 -5
- package/.nx/cache/run.json +19 -19
- package/.nx/cache/terminalOutputs/13555699813138069787 +6 -0
- package/.nx/cache/terminalOutputs/{12148417737220755248 → 14061940909886036014} +172 -174
- package/.nx/cache/terminalOutputs/{3064561615116090625 → 14876618240301288353} +7 -7
- package/.nx/cache/terminalOutputs/{1275815545780424169 → 17626862048742598274} +2 -2
- package/.nx/cache/terminalOutputs/7978448102466861029 +32 -0
- package/.nx/cache/terminalOutputs/{4011892767661954819 → 9040451482998546630} +1 -1
- package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db +0 -0
- package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db-shm +0 -0
- package/.nx/workspace-data/0091ABA9-5C90-580D-953C-8C94E763ADB5-v3.db-wal +0 -0
- package/.nx/workspace-data/d/daemon.log +2370 -0
- package/.nx/workspace-data/d/server-process.json +2 -2
- package/.nx/workspace-data/file-map.json +3177 -3177
- package/.nx/workspace-data/nx_files.nxt +0 -0
- package/.nx/workspace-data/project-graph.json +2 -2
- package/apps/playground/src/app/app.routes.ts +15 -4
- package/apps/playground/src/app/app.ts +2 -2
- package/apps/playground/src/app/pages/home-page.ts +14 -14
- package/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +8 -43
- package/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +1 -1
- package/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +6 -5
- package/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +11 -11
- package/libs/africanies-core/src/lib/http/api-client.ts +4 -18
- package/libs/africanies-core/src/lib/http/is-retryable-get-error.ts +8 -4
- package/libs/africanies-core/src/lib/query/provide-africanies-query-defaults.ts +5 -6
- package/package.json +1 -1
- package/.nx/cache/1275815545780424169/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +0 -1
- package/.nx/cache/1275815545780424169/dist/libs/africanies-theme/package.json +0 -36
- package/.nx/cache/1275815545780424169/dist/libs/africanies-theme/types/africanies-africanies-theme.d.ts +0 -157
- package/.nx/cache/13524438527920092277/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +0 -1
- package/.nx/cache/14153928176747262656/dist/libs/africanies-theme/README.md +0 -46
- package/.nx/cache/14153928176747262656/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs +0 -215
- package/.nx/cache/14153928176747262656/dist/libs/africanies-theme/fesm2022/africanies-africanies-theme.mjs.map +0 -1
- package/.nx/cache/14153928176747262656/dist/libs/africanies-theme/tailwind-preset.cjs +0 -245
- package/.nx/cache/18132311043100376919/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +0 -1
- package/.nx/cache/18132311043100376919/dist/libs/africanies-ui/types/africanies-africanies-ui.d.ts +0 -5410
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/README.md +0 -69
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/assets/icons.sprite.svg +0 -1844
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs +0 -832
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/fesm2022/africanies-africanies-icons.mjs.map +0 -1
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/package.json +0 -31
- package/.nx/cache/2782605790118376385/dist/libs/africanies-icons/types/africanies-africanies-icons.d.ts +0 -108
- package/.nx/cache/3064561615116090625/dist/libs/africanies-storage/README.md +0 -31
- package/.nx/cache/3064561615116090625/dist/libs/africanies-storage/fesm2022/africanies-africanies-storage.mjs +0 -243
- package/.nx/cache/3064561615116090625/dist/libs/africanies-storage/fesm2022/africanies-africanies-storage.mjs.map +0 -1
- package/.nx/cache/3064561615116090625/dist/libs/africanies-storage/package.json +0 -27
- package/.nx/cache/3064561615116090625/dist/libs/africanies-storage/types/africanies-africanies-storage.d.ts +0 -210
- package/.nx/cache/4011892767661954819/dist/libs/africanies-core/README.md +0 -85
- package/.nx/cache/4011892767661954819/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs +0 -4546
- package/.nx/cache/4011892767661954819/dist/libs/africanies-core/fesm2022/africanies-africanies-core.mjs.map +0 -1
- package/.nx/cache/4011892767661954819/dist/libs/africanies-core/package.json +0 -32
- package/.nx/cache/4011892767661954819/dist/libs/africanies-core/types/africanies-africanies-core.d.ts +0 -2740
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/README.md +0 -68
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/assets/brand/africanies-logo-mini.png +0 -0
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/assets/brand/africanies-logo.png +0 -0
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/assets/brand/africanies-logo.svg +0 -5
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/assets/carriers/dhl.svg +0 -7
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs +0 -19088
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/fesm2022/africanies-africanies-ui.mjs.map +0 -1
- package/.nx/cache/5741611231803799383/dist/libs/africanies-ui/package.json +0 -36
- package/.nx/cache/6372470950255467653/dist/libs/africanies-models/README.md +0 -60
- package/.nx/cache/6372470950255467653/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs +0 -599
- package/.nx/cache/6372470950255467653/dist/libs/africanies-models/fesm2022/africanies-africanies-models.mjs.map +0 -1
- package/.nx/cache/6372470950255467653/dist/libs/africanies-models/package.json +0 -24
- package/.nx/cache/6372470950255467653/dist/libs/africanies-models/types/africanies-africanies-models.d.ts +0 -1452
- package/.nx/cache/terminalOutputs/11768036696192889608 +0 -8
- package/.nx/cache/terminalOutputs/1227201614544602906 +0 -23
- package/.nx/cache/terminalOutputs/12538607787148205787 +0 -19
- package/.nx/cache/terminalOutputs/13524438527920092277 +0 -196
- package/.nx/cache/terminalOutputs/14153928176747262656 +0 -45
- package/.nx/cache/terminalOutputs/17404566492103808557 +0 -8
- package/.nx/cache/terminalOutputs/18132311043100376919 +0 -315
- package/.nx/cache/terminalOutputs/2436781291243085315 +0 -8
- package/.nx/cache/terminalOutputs/2782605790118376385 +0 -21
- package/.nx/cache/terminalOutputs/3681975492957101833 +0 -8
- package/.nx/cache/terminalOutputs/5741611231803799383 +0 -21
- package/.nx/cache/terminalOutputs/6037166070823946880 +0 -8
- package/.nx/cache/terminalOutputs/6372470950255467653 +0 -21
- package/.nx/cache/terminalOutputs/665190206482526466 +0 -175
- package/.nx/cache/terminalOutputs/7756595539965457927 +0 -23
- package/.nx/cache/terminalOutputs/9200013119269230075 +0 -8
- /package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/README.md +0 -0
- /package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/assets/brand/africanies-logo-mini.png +0 -0
- /package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/assets/brand/africanies-logo.png +0 -0
- /package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/assets/brand/africanies-logo.svg +0 -0
- /package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/assets/carriers/dhl.svg +0 -0
- /package/.nx/cache/{1275815545780424169 → 17626862048742598274}/dist/libs/africanies-theme/README.md +0 -0
- /package/.nx/cache/{13524438527920092277 → 9040451482998546630}/dist/libs/africanies-core/README.md +0 -0
package/.nx/cache/{18132311043100376919 → 14876618240301288353}/dist/libs/africanies-ui/package.json
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@africanies/africanies-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^22.0.0",
|
|
6
6
|
"@angular/core": "^22.0.0",
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"@angular/forms": "^22.0.0",
|
|
9
9
|
"@angular/router": "^22.0.0",
|
|
10
10
|
"rxjs": "^7.8.0",
|
|
11
|
-
"@africanies/africanies-models": "
|
|
12
|
-
"@africanies/africanies-icons": "
|
|
13
|
-
"@africanies/africanies-core": "
|
|
14
|
-
"@africanies/africanies-theme": "
|
|
11
|
+
"@africanies/africanies-models": ">=0.0.2 <0.1.0",
|
|
12
|
+
"@africanies/africanies-icons": ">=0.0.1 <0.1.0",
|
|
13
|
+
"@africanies/africanies-core": ">=0.0.2 <0.1.0",
|
|
14
|
+
"@africanies/africanies-theme": ">=0.0.1 <0.1.0"
|
|
15
15
|
},
|
|
16
16
|
"sideEffects": false,
|
|
17
17
|
"publishConfig": {
|
|
@@ -163,14 +163,31 @@ declare class CopyButtonComponent {
|
|
|
163
163
|
|
|
164
164
|
/**
|
|
165
165
|
* Option row for {@link ActionMenuComponent}.
|
|
166
|
+
*
|
|
167
|
+
* Set optional {@link routerLink} (and `queryParams` / `fragment`) so the row
|
|
168
|
+
* renders as an `<a href>` — right-click / ⌘-click can open in a new tab.
|
|
169
|
+
* Primary click still runs {@link onClick} when provided; otherwise the menu
|
|
170
|
+
* navigates via the router (same pattern as tabs / segment).
|
|
166
171
|
*/
|
|
167
172
|
interface AfricaniesMenuItem {
|
|
168
173
|
/** Visible label. */
|
|
169
174
|
label: string;
|
|
170
|
-
/**
|
|
171
|
-
|
|
175
|
+
/**
|
|
176
|
+
* Invoked on primary activation (then the menu closes).
|
|
177
|
+
* Optional when {@link routerLink} is set — the menu navigates instead.
|
|
178
|
+
*/
|
|
179
|
+
onClick?: () => void;
|
|
172
180
|
/** Optional leading icon from `@africanies/africanies-icons`. */
|
|
173
181
|
icon?: IconName;
|
|
182
|
+
/**
|
|
183
|
+
* Optional Angular router link (`string` or commands array).
|
|
184
|
+
* When set, the row is an `<a>` with a real `href` for open-in-new-tab.
|
|
185
|
+
*/
|
|
186
|
+
routerLink?: string | readonly unknown[];
|
|
187
|
+
/** Optional query params passed with {@link routerLink}. */
|
|
188
|
+
queryParams?: Record<string, unknown>;
|
|
189
|
+
/** Optional URL fragment with {@link routerLink}. */
|
|
190
|
+
fragment?: string;
|
|
174
191
|
/** When true, the item cannot be activated. */
|
|
175
192
|
disabled?: boolean;
|
|
176
193
|
/** Destructive styling (e.g. Delete). */
|
|
@@ -186,6 +203,9 @@ interface AfricaniesMenuItem {
|
|
|
186
203
|
* clipped by table `overflow`. Default trigger is a ghost ellipsis button;
|
|
187
204
|
* project a custom control with {@link ActionMenuTriggerDirective}.
|
|
188
205
|
*
|
|
206
|
+
* Items with {@link AfricaniesMenuItem.routerLink} render as anchors so users
|
|
207
|
+
* can right-click / modified-click to open in a new tab.
|
|
208
|
+
*
|
|
189
209
|
* @example
|
|
190
210
|
* ```html
|
|
191
211
|
* <!-- Default icon trigger (table row) -->
|
|
@@ -201,7 +221,12 @@ interface AfricaniesMenuItem {
|
|
|
201
221
|
* ```ts
|
|
202
222
|
* rowActions(row: Shipment): AfricaniesMenuItem[] {
|
|
203
223
|
* return [
|
|
204
|
-
* {
|
|
224
|
+
* {
|
|
225
|
+
* label: 'Open',
|
|
226
|
+
* icon: 'eye',
|
|
227
|
+
* routerLink: ['/shipments', row.id],
|
|
228
|
+
* onClick: () => this.open(row),
|
|
229
|
+
* },
|
|
205
230
|
* { label: 'Edit', icon: 'edit', onClick: () => this.edit(row) },
|
|
206
231
|
* {
|
|
207
232
|
* label: 'Delete',
|
|
@@ -215,6 +240,7 @@ interface AfricaniesMenuItem {
|
|
|
215
240
|
* ```
|
|
216
241
|
*/
|
|
217
242
|
declare class ActionMenuComponent {
|
|
243
|
+
private readonly router;
|
|
218
244
|
protected readonly panelPositions: ConnectedPosition[];
|
|
219
245
|
private readonly panelRef;
|
|
220
246
|
private readonly projectedTrigger;
|
|
@@ -230,12 +256,19 @@ declare class ActionMenuComponent {
|
|
|
230
256
|
protected readonly hasCustomTrigger: _angular_core.Signal<boolean>;
|
|
231
257
|
protected itemDomId(index: number): string;
|
|
232
258
|
protected itemClass(item: AfricaniesMenuItem, index: number): string;
|
|
259
|
+
protected hrefFor(item: AfricaniesMenuItem): string | null;
|
|
233
260
|
protected onTriggerClick(event: MouseEvent): void;
|
|
234
261
|
protected onTriggerKeydown(event: KeyboardEvent): void;
|
|
235
262
|
protected onPanelKeydown(event: KeyboardEvent): void;
|
|
236
263
|
protected onOutsideClick(event: MouseEvent): void;
|
|
237
264
|
protected onOverlayDetach(): void;
|
|
265
|
+
/**
|
|
266
|
+
* Primary click on a routed item: in-app activate via {@link onClick} or
|
|
267
|
+
* router. Modified clicks keep native link behaviour (new tab).
|
|
268
|
+
*/
|
|
269
|
+
protected onRoutedItemClick(event: MouseEvent, item: AfricaniesMenuItem): void;
|
|
238
270
|
protected selectItem(item: AfricaniesMenuItem): void;
|
|
271
|
+
private activateItem;
|
|
239
272
|
protected toggle(): void;
|
|
240
273
|
protected openMenu(): void;
|
|
241
274
|
protected close(): void;
|
|
@@ -522,6 +555,46 @@ declare class LoadingStateComponent {
|
|
|
522
555
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LoadingStateComponent, "africanies-loading-state", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
523
556
|
}
|
|
524
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Visual density for {@link AccordionComponent}.
|
|
560
|
+
*
|
|
561
|
+
* - `md` — page sections (pay review, top-level cards)
|
|
562
|
+
* - `sm` — nested panels (e.g. export boxes inside a manifest box)
|
|
563
|
+
*/
|
|
564
|
+
type AccordionSize = 'md' | 'sm';
|
|
565
|
+
/**
|
|
566
|
+
* Bordered expandable panel with animated fold — the pattern used on
|
|
567
|
+
* Manifest detail and Make Payment review.
|
|
568
|
+
*
|
|
569
|
+
* Parent owns open state via {@link open} (`model()` / `[(open)]`).
|
|
570
|
+
*
|
|
571
|
+
* @example
|
|
572
|
+
* ```html
|
|
573
|
+
* <africanies-accordion
|
|
574
|
+
* title="Customer Information"
|
|
575
|
+
* [open]="isOpen('customer')"
|
|
576
|
+
* (openChange)="onOpenChange('customer', $event)"
|
|
577
|
+
* >
|
|
578
|
+
* <dl>…</dl>
|
|
579
|
+
* </africanies-accordion>
|
|
580
|
+
* ```
|
|
581
|
+
*/
|
|
582
|
+
declare class AccordionComponent {
|
|
583
|
+
/** Plain-text header. Prefer projected `[africaniesAccordionTitle]` for rich titles. */
|
|
584
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
585
|
+
/** Whether the panel body is expanded. */
|
|
586
|
+
readonly open: _angular_core.ModelSignal<boolean>;
|
|
587
|
+
/** Padding / chevron density. */
|
|
588
|
+
readonly size: _angular_core.InputSignal<AccordionSize>;
|
|
589
|
+
protected readonly chevronSize: _angular_core.Signal<14 | 16>;
|
|
590
|
+
protected readonly shellClass: _angular_core.Signal<"rounded-lg border border-border dark:border-white/10" | "rounded-xl border border-border dark:border-white/10">;
|
|
591
|
+
protected readonly triggerClass: _angular_core.Signal<"flex w-full items-center justify-between gap-3 px-3 py-2 text-left text-ink dark:text-white" | "flex w-full items-center justify-between gap-3 px-4 py-3 text-left text-ink dark:text-white">;
|
|
592
|
+
protected readonly bodyClass: _angular_core.Signal<"border-t border-border px-3 py-2 dark:border-white/10" | "border-t border-border px-4 py-3 dark:border-white/10">;
|
|
593
|
+
protected toggle(): void;
|
|
594
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionComponent, never>;
|
|
595
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionComponent, "africanies-accordion", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["[africaniesAccordionTitle]", "*"], true, never>;
|
|
596
|
+
}
|
|
597
|
+
|
|
525
598
|
/**
|
|
526
599
|
* Visual tone for {@link AlertComponent}.
|
|
527
600
|
*
|
|
@@ -4780,9 +4853,11 @@ interface TableSortChange {
|
|
|
4780
4853
|
* **Sticky columns:** a column with `key: 'actions'` stays pinned to the
|
|
4781
4854
|
* right while the grid scrolls horizontally. The expand trigger column pins
|
|
4782
4855
|
* to the left when rows are expandable. Override with
|
|
4783
|
-
* {@link TableColumn.sticky}.
|
|
4856
|
+
* {@link TableColumn.sticky}. Sticky columns use a slightly thicker bottom
|
|
4857
|
+
* border (and opaque fill) so dividers stay visible while scrolling.
|
|
4784
4858
|
*/
|
|
4785
4859
|
declare class TableComponent<T = unknown> {
|
|
4860
|
+
protected readonly modeColor: ModeColorService;
|
|
4786
4861
|
/**
|
|
4787
4862
|
* When false, hides row expansion even if {@link RowDetailDefDirective}
|
|
4788
4863
|
* templates are projected. Defaults to true.
|
|
@@ -4932,6 +5007,17 @@ declare class TableComponent<T = unknown> {
|
|
|
4932
5007
|
protected cellContext(row: T): {
|
|
4933
5008
|
$implicit: T;
|
|
4934
5009
|
};
|
|
5010
|
+
/**
|
|
5011
|
+
* Header row chrome. Soft fill lives on each `th` ({@link headerSoftClass})
|
|
5012
|
+
* so sticky columns do not double-tint and paint over neighbor labels.
|
|
5013
|
+
* @returns Header row class list.
|
|
5014
|
+
*/
|
|
5015
|
+
protected headerRowClass(): string;
|
|
5016
|
+
/**
|
|
5017
|
+
* Opaque mode soft fill for header cells (sticky-safe in dark mode).
|
|
5018
|
+
* @returns Soft solid background utilities.
|
|
5019
|
+
*/
|
|
5020
|
+
protected headerSoftClass(): string;
|
|
4935
5021
|
/**
|
|
4936
5022
|
* Body row classes — row marker for hover styles, plus hide cell borders on
|
|
4937
5023
|
* the last / expanded row.
|
|
@@ -4955,8 +5041,8 @@ declare class TableComponent<T = unknown> {
|
|
|
4955
5041
|
protected expandHeaderClass(): string;
|
|
4956
5042
|
/**
|
|
4957
5043
|
* Body classes for the expand/collapse trigger column (pinned left).
|
|
4958
|
-
*
|
|
4959
|
-
*
|
|
5044
|
+
* Uses a slightly thicker bottom border than scrolling cells so the
|
|
5045
|
+
* sticky fill still reads a clear divider (no top-shadow fallback).
|
|
4960
5046
|
* @param index - Index within {@link rows}.
|
|
4961
5047
|
* @returns Body cell class list.
|
|
4962
5048
|
*/
|
|
@@ -4969,9 +5055,8 @@ declare class TableComponent<T = unknown> {
|
|
|
4969
5055
|
protected headerCellClass(col: TableColumn<T>): string;
|
|
4970
5056
|
/**
|
|
4971
5057
|
* Body cell classes, including sticky pin when set.
|
|
4972
|
-
* Sticky
|
|
4973
|
-
*
|
|
4974
|
-
* same pixel and read brighter (especially in dark mode).
|
|
5058
|
+
* Sticky expand/actions columns use a 1.5px bottom border; scrolling cells
|
|
5059
|
+
* stay at 1px. Expanded rows drop the bottom border (see {@link bodyRowClass}).
|
|
4975
5060
|
* @param col - Column definition.
|
|
4976
5061
|
* @param index - Index within {@link rows}.
|
|
4977
5062
|
* @returns Body cell class list.
|
|
@@ -4981,22 +5066,17 @@ declare class TableComponent<T = unknown> {
|
|
|
4981
5066
|
* Sticky pin utilities for a known edge (expand column or data column).
|
|
4982
5067
|
* @param edge - Left or right pin.
|
|
4983
5068
|
* @param surface - Header vs body fill tokens.
|
|
4984
|
-
* @param index - Body row index; unused for the header.
|
|
4985
|
-
* @param afterExpanded - Previous row is expanded — skip the top shadow
|
|
4986
|
-
* divider so the sticky column stays flush under the detail panel.
|
|
4987
5069
|
* @returns Sticky utilities.
|
|
4988
5070
|
*/
|
|
4989
|
-
protected stickyPinClass(edge: 'left' | 'right', surface: 'head' | 'body'
|
|
5071
|
+
protected stickyPinClass(edge: 'left' | 'right', surface: 'head' | 'body'): string;
|
|
4990
5072
|
/**
|
|
4991
5073
|
* Sticky pin plus an opaque fill matching the table surface, so scrolled
|
|
4992
5074
|
* cells do not show through.
|
|
4993
5075
|
* @param col - Column definition.
|
|
4994
5076
|
* @param surface - Header vs body fill tokens.
|
|
4995
|
-
* @param index - Body row index; unused for the header.
|
|
4996
|
-
* @param afterExpanded - Previous row is expanded — skip the top shadow.
|
|
4997
5077
|
* @returns Sticky utilities, or empty when the column scrolls.
|
|
4998
5078
|
*/
|
|
4999
|
-
protected stickySurfaceClass(col: TableColumn<T>, surface: 'head' | 'body'
|
|
5079
|
+
protected stickySurfaceClass(col: TableColumn<T>, surface: 'head' | 'body'): string;
|
|
5000
5080
|
/**
|
|
5001
5081
|
* Stable id for a row — used for expand/collapse state.
|
|
5002
5082
|
*
|
|
@@ -5286,7 +5366,7 @@ declare class AfricaniesActionsModule {
|
|
|
5286
5366
|
}
|
|
5287
5367
|
|
|
5288
5368
|
/**
|
|
5289
|
-
* Async feedback states, inline alert, and status chips.
|
|
5369
|
+
* Async feedback states, accordion panels, inline alert, and status chips.
|
|
5290
5370
|
*
|
|
5291
5371
|
* Toast stays out of this module — register {@link provideAfricaniesToasts} instead.
|
|
5292
5372
|
*
|
|
@@ -5300,7 +5380,7 @@ declare class AfricaniesActionsModule {
|
|
|
5300
5380
|
*/
|
|
5301
5381
|
declare class AfricaniesFeedbackModule {
|
|
5302
5382
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AfricaniesFeedbackModule, never>;
|
|
5303
|
-
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AfricaniesFeedbackModule, never, [typeof LoadingStateComponent, typeof ErrorStateComponent, typeof ErrorIndicatorComponent, typeof EmptyStateComponent, typeof AsyncStateComponent, typeof AlertComponent, typeof ChipComponent], [typeof LoadingStateComponent, typeof ErrorStateComponent, typeof ErrorIndicatorComponent, typeof EmptyStateComponent, typeof AsyncStateComponent, typeof AlertComponent, typeof ChipComponent]>;
|
|
5383
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<AfricaniesFeedbackModule, never, [typeof AccordionComponent, typeof LoadingStateComponent, typeof ErrorStateComponent, typeof ErrorIndicatorComponent, typeof EmptyStateComponent, typeof AsyncStateComponent, typeof AlertComponent, typeof ChipComponent], [typeof AccordionComponent, typeof LoadingStateComponent, typeof ErrorStateComponent, typeof ErrorIndicatorComponent, typeof EmptyStateComponent, typeof AsyncStateComponent, typeof AlertComponent, typeof ChipComponent]>;
|
|
5304
5384
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<AfricaniesFeedbackModule>;
|
|
5305
5385
|
}
|
|
5306
5386
|
|
|
@@ -5406,5 +5486,5 @@ declare class AfricaniesTooltipModule {
|
|
|
5406
5486
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<AfricaniesTooltipModule>;
|
|
5407
5487
|
}
|
|
5408
5488
|
|
|
5409
|
-
export { AFRICANIES_BRAND_LOGO_MINI_URL, AFRICANIES_BRAND_LOGO_URL, ActionMenuComponent, ActionMenuTriggerDirective, AddressInputComponent, AfricaniesActionsModule, AfricaniesFeedbackModule, AfricaniesFormsModule, AfricaniesInfoPopoverModule, AfricaniesNavigationModule, AfricaniesOverlayRef, AfricaniesStepperModule, AfricaniesTableModule, AfricaniesTooltipModule, AlertComponent, AppShellComponent, AppShellContentHeaderComponent, AppShellHeaderComponent, AppShellHeaderEndDirective, AppShellHeaderSlotDirective, AppShellHeaderStartDirective, AsyncStateComponent, AvatarComponent, AvatarMenuComponent, BrandLogoComponent, BreadcrumbComponent, ButtonComponent, CarrierLogoComponent, CellDefDirective, CheckboxComponent, ChipComponent, ConfirmDialogComponent, ConfirmService, ContentStackComponent, CopyButtonComponent, DatePickerComponent, DrawerService, EmptyStateComponent, ErrorIndicatorComponent, ErrorStateComponent, FileUploadComponent, FilterDrawerPanel, FilterDrawerService, FilterQueryService, GOOGLE_PLACES_CONFIG, GooglePlacesService, HeaderCellDefDirective, ImageComponent, InfoPopoverComponent, InfoPopoverContentDirective, InfoPopoverTriggerDirective, LoadingStateComponent, MODAL_SIZE_PANEL_CLASS, ModalService, NotificationDrawerPanel, NotificationDrawerService, NumberInputComponent, OVERLAY_DATA, OtpInputComponent, OverlayFooterDirective, OverlayFrameComponent, OverlayHeaderDirective, PageHeaderComponent, PaginationComponent, RadioComponent, RowDetailDefDirective, SearchComboboxComponent, SegmentComponent, SelectComponent, ShippingModeSwitchComponent, SideNavComponent, StepDefDirective, StepperComponent, TOAST_DURATION_MS, TOAST_ICONS, TabDefDirective, TableComponent, TabsComponent, TextInputComponent, TextareaComponent, ToastService, ToggleComponent, TooltipComponent, TooltipTriggerDirective, acceptLabels, buildBreadcrumbsFromSideNav, deliveryVendorOptionsForStoredValue, deliveryVendorSelectOptions, deliveryVendorSelected, fileExtensionLabel, fileMatchesAccept, headerGreetingFirstName, headerGreetingPeriod, isCatalogRootRoute, isNavItemActive, isNestedChildRoute, navItemUrlTree, normalizeCarrierLogoSlug, normalizeNavPath, pickHeaderGreeting, provideAfricaniesToasts, provideAfricaniesUiOverlays, provideGooglePlaces, resolveCatalogRootLink, resolveContentBackTarget, resolveHeaderBackTarget, resolveParentPathFromRootSnapshot, toastFingerprint };
|
|
5410
|
-
export type { AddressComponent, AddressPlace, AddressPrediction, AfricaniesMenuItem, AfricaniesNavItem, AfricaniesNotification, AfricaniesSideNavItem, AlertVariant, AppShellContentWidth, AppShellHeaderDensity, AppShellLayoutPreview, AvatarSize, BrandLogoSize, ButtonSize, ButtonVariant, CarrierLogoSize, CarrierLogoSlug, CellDefContext, ChipSize, ChipVariant, ConfirmOptions, ConfirmWork, ContentBackTarget, FileUploadResult, FileUploadVariant, FilterDrawerData, FilterDrawerResult, GooglePlacesConfig, HeaderBackTarget, HeaderGreeting, HeaderGreetingPeriod, HeaderWeather, HeaderWeatherKind, ImageFit, ImageShape, InfoPopoverPlacement, LoadingStateMode, ModalOpenConfig, ModalSize, NotificationDrawerData, NotificationDrawerResult, NotificationPageResult, OtpInputVariant, OverlayOpenConfig, RadioOption, RowDetailDefContext, SearchComboboxBadge, SearchComboboxBadgeFn, SearchComboboxLabelFn, SearchComboboxMarkFn, SearchComboboxSearchFn, SearchComboboxSubtitleFn, SearchComboboxTrackFn, SelectCreateConfig, SelectOption, SelectSize, StepDefContext, StepDefinition, TabDefContext, TableColumn, TableSortChange, TextInputType, ToastItem, ToastShowOptions, ToastVariant, TooltipPlacement };
|
|
5489
|
+
export { AFRICANIES_BRAND_LOGO_MINI_URL, AFRICANIES_BRAND_LOGO_URL, AccordionComponent, ActionMenuComponent, ActionMenuTriggerDirective, AddressInputComponent, AfricaniesActionsModule, AfricaniesFeedbackModule, AfricaniesFormsModule, AfricaniesInfoPopoverModule, AfricaniesNavigationModule, AfricaniesOverlayRef, AfricaniesStepperModule, AfricaniesTableModule, AfricaniesTooltipModule, AlertComponent, AppShellComponent, AppShellContentHeaderComponent, AppShellHeaderComponent, AppShellHeaderEndDirective, AppShellHeaderSlotDirective, AppShellHeaderStartDirective, AsyncStateComponent, AvatarComponent, AvatarMenuComponent, BrandLogoComponent, BreadcrumbComponent, ButtonComponent, CarrierLogoComponent, CellDefDirective, CheckboxComponent, ChipComponent, ConfirmDialogComponent, ConfirmService, ContentStackComponent, CopyButtonComponent, DatePickerComponent, DrawerService, EmptyStateComponent, ErrorIndicatorComponent, ErrorStateComponent, FileUploadComponent, FilterDrawerPanel, FilterDrawerService, FilterQueryService, GOOGLE_PLACES_CONFIG, GooglePlacesService, HeaderCellDefDirective, ImageComponent, InfoPopoverComponent, InfoPopoverContentDirective, InfoPopoverTriggerDirective, LoadingStateComponent, MODAL_SIZE_PANEL_CLASS, ModalService, NotificationDrawerPanel, NotificationDrawerService, NumberInputComponent, OVERLAY_DATA, OtpInputComponent, OverlayFooterDirective, OverlayFrameComponent, OverlayHeaderDirective, PageHeaderComponent, PaginationComponent, RadioComponent, RowDetailDefDirective, SearchComboboxComponent, SegmentComponent, SelectComponent, ShippingModeSwitchComponent, SideNavComponent, StepDefDirective, StepperComponent, TOAST_DURATION_MS, TOAST_ICONS, TabDefDirective, TableComponent, TabsComponent, TextInputComponent, TextareaComponent, ToastService, ToggleComponent, TooltipComponent, TooltipTriggerDirective, acceptLabels, buildBreadcrumbsFromSideNav, deliveryVendorOptionsForStoredValue, deliveryVendorSelectOptions, deliveryVendorSelected, fileExtensionLabel, fileMatchesAccept, headerGreetingFirstName, headerGreetingPeriod, isCatalogRootRoute, isNavItemActive, isNestedChildRoute, navItemUrlTree, normalizeCarrierLogoSlug, normalizeNavPath, pickHeaderGreeting, provideAfricaniesToasts, provideAfricaniesUiOverlays, provideGooglePlaces, resolveCatalogRootLink, resolveContentBackTarget, resolveHeaderBackTarget, resolveParentPathFromRootSnapshot, toastFingerprint };
|
|
5490
|
+
export type { AccordionSize, AddressComponent, AddressPlace, AddressPrediction, AfricaniesMenuItem, AfricaniesNavItem, AfricaniesNotification, AfricaniesSideNavItem, AlertVariant, AppShellContentWidth, AppShellHeaderDensity, AppShellLayoutPreview, AvatarSize, BrandLogoSize, ButtonSize, ButtonVariant, CarrierLogoSize, CarrierLogoSlug, CellDefContext, ChipSize, ChipVariant, ConfirmOptions, ConfirmWork, ContentBackTarget, FileUploadResult, FileUploadVariant, FilterDrawerData, FilterDrawerResult, GooglePlacesConfig, HeaderBackTarget, HeaderGreeting, HeaderGreetingPeriod, HeaderWeather, HeaderWeatherKind, ImageFit, ImageShape, InfoPopoverPlacement, LoadingStateMode, ModalOpenConfig, ModalSize, NotificationDrawerData, NotificationDrawerResult, NotificationPageResult, OtpInputVariant, OverlayOpenConfig, RadioOption, RowDetailDefContext, SearchComboboxBadge, SearchComboboxBadgeFn, SearchComboboxLabelFn, SearchComboboxMarkFn, SearchComboboxSearchFn, SearchComboboxSubtitleFn, SearchComboboxTrackFn, SelectCreateConfig, SelectOption, SelectSize, StepDefContext, StepDefinition, TabDefContext, TableColumn, TableSortChange, TextInputType, ToastItem, ToastShowOptions, ToastVariant, TooltipPlacement };
|
|
@@ -17,10 +17,12 @@ import { STORAGE_TOKEN, AFRICANIES_THEME_KEY } from '@africanies/africanies-stor
|
|
|
17
17
|
* SFN (export / green):
|
|
18
18
|
* text-export bg-export bg-export-subtle bg-export-light border-export
|
|
19
19
|
* hover:bg-export-light hover:bg-export-subtle dark:bg-export/15 dark:hover:bg-export/15
|
|
20
|
+
* dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]
|
|
20
21
|
*
|
|
21
22
|
* STN (import / orange):
|
|
22
23
|
* text-import bg-import bg-import-subtle bg-import-light border-import
|
|
23
24
|
* hover:bg-import-light hover:bg-import-subtle dark:bg-import/15 dark:hover:bg-import/15
|
|
25
|
+
* dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]
|
|
24
26
|
*/
|
|
25
27
|
const MODE_COLOR_SAFELIST = [
|
|
26
28
|
'text-export',
|
|
@@ -32,6 +34,7 @@ const MODE_COLOR_SAFELIST = [
|
|
|
32
34
|
'hover:bg-export-subtle',
|
|
33
35
|
'dark:bg-export/15',
|
|
34
36
|
'dark:hover:bg-export/15',
|
|
37
|
+
'dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',
|
|
35
38
|
'text-import',
|
|
36
39
|
'bg-import',
|
|
37
40
|
'bg-import-subtle',
|
|
@@ -41,6 +44,7 @@ const MODE_COLOR_SAFELIST = [
|
|
|
41
44
|
'hover:bg-import-subtle',
|
|
42
45
|
'dark:bg-import/15',
|
|
43
46
|
'dark:hover:bg-import/15',
|
|
47
|
+
'dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',
|
|
44
48
|
];
|
|
45
49
|
|
|
46
50
|
/**
|
|
@@ -76,6 +80,7 @@ class ModeColorService {
|
|
|
76
80
|
primary: 'bg-export text-white border-transparent hover:bg-export-light',
|
|
77
81
|
ghostPrimary: 'bg-transparent text-export border-transparent hover:bg-export-subtle dark:hover:bg-export/15',
|
|
78
82
|
soft: 'bg-export-subtle dark:bg-export/15',
|
|
83
|
+
softSolid: 'bg-export-subtle dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',
|
|
79
84
|
softHover: 'hover:bg-export-subtle dark:hover:bg-export/15',
|
|
80
85
|
};
|
|
81
86
|
}
|
|
@@ -87,6 +92,7 @@ class ModeColorService {
|
|
|
87
92
|
primary: 'bg-import text-white border-transparent hover:bg-import-light',
|
|
88
93
|
ghostPrimary: 'bg-transparent text-import border-transparent hover:bg-import-subtle dark:hover:bg-import/15',
|
|
89
94
|
soft: 'bg-import-subtle dark:bg-import/15',
|
|
95
|
+
softSolid: 'bg-import-subtle dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',
|
|
90
96
|
softHover: 'hover:bg-import-subtle dark:hover:bg-import/15',
|
|
91
97
|
};
|
|
92
98
|
}, /* @ts-ignore */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"africanies-africanies-theme.mjs","sources":["../../../../libs/africanies-theme/src/lib/mode-color.safelist.ts","../../../../libs/africanies-theme/src/lib/mode-color.service.ts","../../../../libs/africanies-theme/src/lib/theme.service.ts","../../../../libs/africanies-theme/src/africanies-africanies-theme.ts"],"sourcesContent":["/**\n * Tailwind safelist side-effect for shipping-mode color utilities.\n *\n * WHY this file exists: JIT/content scanning only keeps class names that appear\n * as *literal strings* in scanned sources. {@link ModeColorService} already\n * returns these literals, but keeping a dedicated comment list makes the\n * contract obvious for consumers who configure `safelist` or purge plugins.\n *\n * Do not rename these strings without updating ModeColorService and THEME.md.\n *\n * SFN (export / green):\n * text-export bg-export bg-export-subtle bg-export-light border-export\n * hover:bg-export-light hover:bg-export-subtle dark:bg-export/15 dark:hover:bg-export/15\n * dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]\n *\n * STN (import / orange):\n * text-import bg-import bg-import-subtle bg-import-light border-import\n * hover:bg-import-light hover:bg-import-subtle dark:bg-import/15 dark:hover:bg-import/15\n * dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]\n */\nexport const MODE_COLOR_SAFELIST = [\n 'text-export',\n 'bg-export',\n 'bg-export-subtle',\n 'bg-export-light',\n 'border-export',\n 'hover:bg-export-light',\n 'hover:bg-export-subtle',\n 'dark:bg-export/15',\n 'dark:hover:bg-export/15',\n 'dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',\n 'text-import',\n 'bg-import',\n 'bg-import-subtle',\n 'bg-import-light',\n 'border-import',\n 'hover:bg-import-light',\n 'hover:bg-import-subtle',\n 'dark:bg-import/15',\n 'dark:hover:bg-import/15',\n 'dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',\n] as const;\n","import { computed, inject, Injectable } from '@angular/core';\n\nimport { ShippingModeService } from '@africanies/africanies-core';\n\n/**\n * Tailwind class bundle for the active shipping mode (SFN export / STN import).\n *\n * Use these for **primary** product chrome: CTAs, selected controls, progress,\n * and accent text. Semantic colors (danger / warning) stay mode-independent.\n */\nexport interface ModeColorClasses {\n /** Text color utility, e.g. `text-export`. */\n text: string;\n /** Solid background utility, e.g. `bg-export`. */\n bg: string;\n /** Soft background utility, e.g. `bg-export-subtle`. */\n bgSubtle: string;\n /** Border matching the mode accent, e.g. `border-export`. */\n border: string;\n /**\n * Filled primary CTA — `variant=\"primary\"` on buttons.\n * Includes hover utility as a literal so Tailwind keeps it.\n */\n primary: string;\n /**\n * Transparent / text-only CTA — `variant=\"ghost-primary\"` on buttons.\n * Mode accent text + soft hover fill.\n */\n ghostPrimary: string;\n /**\n * Soft highlight for selected / active rows (works in dark mode).\n * Dark uses a translucent tint — fine over solid surfaces, not for\n * sticky overlays (see {@link softSolid}).\n */\n soft: string;\n /**\n * Opaque soft fill — same tint as {@link soft}, but dark mode mixes into\n * ink so scrolled content cannot show through (sticky table headers/cells).\n */\n softSolid: string;\n /**\n * Soft hover highlight for menus and lists.\n */\n softHover: string;\n}\n\n/**\n * Maps {@link ShippingModeService} to mode-accent Tailwind classes.\n *\n * - **SFN** → export green is primary\n * - **STN** → import orange is primary\n *\n * WHY literal class strings: Tailwind's scanner cannot see dynamically built\n * names like `` `text-${token}` ``. Returning full literals (`text-export`, …)\n * keeps utilities in the compiled CSS. See {@link MODE_COLOR_SAFELIST}.\n *\n * @example\n * ```html\n * @let colors = modeColor.classes();\n * <button type=\"button\" [class]=\"colors.primary\">Save</button>\n * <span [class]=\"colors.text\">Mode accent</span>\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ModeColorService {\n private readonly shippingMode = inject(ShippingModeService);\n\n /**\n * Mode-dependent utility classes. Recomputes when shipping mode changes.\n */\n readonly classes = computed<ModeColorClasses>(() => {\n // Literal strings required for Tailwind content detection — do not interpolate.\n if (this.shippingMode.mode() === 'sfn') {\n return {\n text: 'text-export',\n bg: 'bg-export',\n bgSubtle: 'bg-export-subtle',\n border: 'border-export',\n primary:\n 'bg-export text-white border-transparent hover:bg-export-light',\n ghostPrimary:\n 'bg-transparent text-export border-transparent hover:bg-export-subtle dark:hover:bg-export/15',\n soft: 'bg-export-subtle dark:bg-export/15',\n softSolid:\n 'bg-export-subtle dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]',\n softHover: 'hover:bg-export-subtle dark:hover:bg-export/15',\n };\n }\n return {\n text: 'text-import',\n bg: 'bg-import',\n bgSubtle: 'bg-import-subtle',\n border: 'border-import',\n primary:\n 'bg-import text-white border-transparent hover:bg-import-light',\n ghostPrimary:\n 'bg-transparent text-import border-transparent hover:bg-import-subtle dark:hover:bg-import/15',\n soft: 'bg-import-subtle dark:bg-import/15',\n softSolid:\n 'bg-import-subtle dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]',\n softHover: 'hover:bg-import-subtle dark:hover:bg-import/15',\n };\n });\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, signal } from '@angular/core';\n\nimport { AFRICANIES_THEME_KEY, STORAGE_TOKEN } from '@africanies/africanies-storage';\n\nimport type { Theme } from './theme.types';\n\n/**\n * Application light/dark theme preference.\n *\n * WHY signals (not BehaviorSubject): theme is synchronous UI state read from\n * templates and other services; a signal avoids RxJS subscription boilerplate\n * and matches Angular 22 change detection. Persistence goes through\n * {@link STORAGE_TOKEN} so tests can swap storage without touching `localStorage`.\n *\n * Applies the Tailwind `darkMode: 'class'` contract by toggling `dark` on\n * `document.documentElement`, and sets `color-scheme` so native UI (date\n * pickers, scrollbars, form controls) matches the app theme — class-based\n * dark mode alone does not restyle browser chrome.\n *\n * @example\n * ```ts\n * // app.config.ts\n * import { inject, provideAppInitializer } from '@angular/core';\n * import { ThemeService } from '@africanies/africanies-theme';\n *\n * export const appConfig = {\n * providers: [\n * provideAppInitializer(() => {\n * inject(ThemeService); // applies stored / system theme once\n * }),\n * ],\n * };\n *\n * // In a component\n * const theme = inject(ThemeService);\n * theme.toggle();\n * theme.setTheme('dark');\n * const current = theme.theme(); // 'light' | 'dark'\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly storage = inject(STORAGE_TOKEN);\n private readonly document = inject(DOCUMENT);\n\n /**\n * Current theme. Prefer reading via `theme()` in templates / computed values\n * rather than caching the string, so dark-class consumers stay in sync.\n */\n readonly theme = signal<Theme>(this.resolveInitialTheme());\n\n constructor() {\n this.applyToDocument(this.theme());\n }\n\n /**\n * Sets and persists the theme, updating the `dark` class and `color-scheme`\n * on `<html>`.\n *\n * @param theme - Absolute preference to store.\n */\n setTheme(theme: Theme): void {\n this.theme.set(theme);\n this.applyToDocument(theme);\n try {\n this.storage.set(AFRICANIES_THEME_KEY, theme);\n } catch {\n // Persistence failure must not block the in-session visual toggle —\n // private browsing / quota issues are transient for theme preference.\n }\n }\n\n /**\n * Flips between light and dark.\n *\n * @returns The theme after the toggle.\n */\n toggle(): Theme {\n const next: Theme = this.theme() === 'light' ? 'dark' : 'light';\n this.setTheme(next);\n return next;\n }\n\n private resolveInitialTheme(): Theme {\n try {\n const stored = this.storage.get<Theme>(AFRICANIES_THEME_KEY);\n if (stored === 'light' || stored === 'dark') {\n return stored;\n }\n } catch {\n // Fall through to system preference when storage is unavailable.\n }\n return this.prefersDark() ? 'dark' : 'light';\n }\n\n private prefersDark(): boolean {\n const win = this.document.defaultView;\n return !!win?.matchMedia?.('(prefers-color-scheme: dark)').matches;\n }\n\n private applyToDocument(theme: Theme): void {\n const root = this.document.documentElement;\n if (theme === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n // Native date/time pickers follow `color-scheme`, not Tailwind's `dark` class.\n root.style.colorScheme = theme;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@africanies/africanies-theme",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^22.0.0",
|
|
6
6
|
"@angular/core": "^22.0.0",
|
|
7
|
-
"@africanies/africanies-core": "
|
|
8
|
-
"@africanies/africanies-storage": "
|
|
7
|
+
"@africanies/africanies-core": ">=0.0.2 <0.1.0",
|
|
8
|
+
"@africanies/africanies-storage": ">=0.0.1 <0.1.0"
|
|
9
9
|
},
|
|
10
10
|
"sideEffects": false,
|
|
11
11
|
"publishConfig": {
|
|
@@ -69,6 +69,11 @@ function africaniesInteractiveCursorPlugin({ addBase }) {
|
|
|
69
69
|
* (`white` / `ink-950`) and `-webkit-text-fill-color` keeps body text on
|
|
70
70
|
* `ink` / white. `.dark` matches `ThemeService` (`class` on `<html>`).
|
|
71
71
|
*
|
|
72
|
+
* WHY one selector per `addBase` key: joining autofill selectors with commas
|
|
73
|
+
* under a single `.dark ${list}` key only scopes the first selector — the rest
|
|
74
|
+
* leak into light mode. WHY no `color` in the long transition: delaying color
|
|
75
|
+
* freezes text when the user toggles light/dark.
|
|
76
|
+
*
|
|
72
77
|
* @param {import('tailwindcss/types/config').PluginAPI} api
|
|
73
78
|
*/
|
|
74
79
|
function africaniesAutofillPlugin({ addBase }) {
|
|
@@ -81,21 +86,24 @@ function africaniesAutofillPlugin({ addBase }) {
|
|
|
81
86
|
'textarea:-webkit-autofill:hover',
|
|
82
87
|
'textarea:-webkit-autofill:focus',
|
|
83
88
|
'textarea:-webkit-autofill:active',
|
|
84
|
-
]
|
|
89
|
+
];
|
|
85
90
|
|
|
86
|
-
|
|
87
|
-
|
|
91
|
+
/** @type {Record<string, Record<string, string>>} */
|
|
92
|
+
const rules = {};
|
|
93
|
+
for (const selector of autofillSelectors) {
|
|
94
|
+
rules[selector] = {
|
|
88
95
|
WebkitTextFillColor: '#212529',
|
|
89
96
|
caretColor: '#212529',
|
|
90
97
|
boxShadow: '0 0 0 1000px #ffffff inset',
|
|
91
98
|
transition: 'background-color 99999s ease-in-out 0s',
|
|
92
|
-
}
|
|
93
|
-
[`.dark ${
|
|
99
|
+
};
|
|
100
|
+
rules[`.dark ${selector}`] = {
|
|
94
101
|
WebkitTextFillColor: '#ffffff',
|
|
95
102
|
caretColor: '#ffffff',
|
|
96
103
|
boxShadow: '0 0 0 1000px #272729 inset',
|
|
97
|
-
}
|
|
98
|
-
}
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
addBase(rules);
|
|
99
107
|
}
|
|
100
108
|
|
|
101
109
|
/**
|
|
@@ -13,12 +13,14 @@ import * as i0 from '@angular/core';
|
|
|
13
13
|
* SFN (export / green):
|
|
14
14
|
* text-export bg-export bg-export-subtle bg-export-light border-export
|
|
15
15
|
* hover:bg-export-light hover:bg-export-subtle dark:bg-export/15 dark:hover:bg-export/15
|
|
16
|
+
* dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]
|
|
16
17
|
*
|
|
17
18
|
* STN (import / orange):
|
|
18
19
|
* text-import bg-import bg-import-subtle bg-import-light border-import
|
|
19
20
|
* hover:bg-import-light hover:bg-import-subtle dark:bg-import/15 dark:hover:bg-import/15
|
|
21
|
+
* dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]
|
|
20
22
|
*/
|
|
21
|
-
declare const MODE_COLOR_SAFELIST: readonly ["text-export", "bg-export", "bg-export-subtle", "bg-export-light", "border-export", "hover:bg-export-light", "hover:bg-export-subtle", "dark:bg-export/15", "dark:hover:bg-export/15", "text-import", "bg-import", "bg-import-subtle", "bg-import-light", "border-import", "hover:bg-import-light", "hover:bg-import-subtle", "dark:bg-import/15", "dark:hover:bg-import/15"];
|
|
23
|
+
declare const MODE_COLOR_SAFELIST: readonly ["text-export", "bg-export", "bg-export-subtle", "bg-export-light", "border-export", "hover:bg-export-light", "hover:bg-export-subtle", "dark:bg-export/15", "dark:hover:bg-export/15", "dark:bg-[color-mix(in_srgb,#1cbd5d_15%,#212529)]", "text-import", "bg-import", "bg-import-subtle", "bg-import-light", "border-import", "hover:bg-import-light", "hover:bg-import-subtle", "dark:bg-import/15", "dark:hover:bg-import/15", "dark:bg-[color-mix(in_srgb,#f08829_15%,#212529)]"];
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Tailwind class bundle for the active shipping mode (SFN export / STN import).
|
|
@@ -47,8 +49,15 @@ interface ModeColorClasses {
|
|
|
47
49
|
ghostPrimary: string;
|
|
48
50
|
/**
|
|
49
51
|
* Soft highlight for selected / active rows (works in dark mode).
|
|
52
|
+
* Dark uses a translucent tint — fine over solid surfaces, not for
|
|
53
|
+
* sticky overlays (see {@link softSolid}).
|
|
50
54
|
*/
|
|
51
55
|
soft: string;
|
|
56
|
+
/**
|
|
57
|
+
* Opaque soft fill — same tint as {@link soft}, but dark mode mixes into
|
|
58
|
+
* ink so scrolled content cannot show through (sticky table headers/cells).
|
|
59
|
+
*/
|
|
60
|
+
softSolid: string;
|
|
52
61
|
/**
|
|
53
62
|
* Soft hover highlight for menus and lists.
|
|
54
63
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, Injector, signal, Injectable, makeEnvironmentProviders, provideAppInitializer } from '@angular/core';
|
|
3
3
|
import { SessionStorageService, AFRICANIES_SHIPPING_MODE_KEY, STORAGE_TOKEN, AFRICANIES_MODE_CONFIG_KEY, provideLocalStorage, AFRICANIES_ACCESS_TOKEN_KEY } from '@africanies/africanies-storage';
|
|
4
|
-
import { of,
|
|
4
|
+
import { of, timeout, throwError, map as map$1, tap as tap$1, catchError, finalize, firstValueFrom, forkJoin } from 'rxjs';
|
|
5
5
|
import { HttpErrorResponse, HttpContextToken, HttpContext, HttpClient, HttpHeaders, HttpParams, provideHttpClient, withInterceptors } from '@angular/common/http';
|
|
6
6
|
import { DEFAULT_PAGE_SIZE, NOTIFICATION_PAGE_SIZE } from '@africanies/africanies-models';
|
|
7
7
|
import { take, tap, map } from 'rxjs/operators';
|
|
@@ -687,31 +687,6 @@ class HttpResponseCache {
|
|
|
687
687
|
}
|
|
688
688
|
}
|
|
689
689
|
|
|
690
|
-
/**
|
|
691
|
-
* Whether a failed GET should be retried by {@link ApiClient}.
|
|
692
|
-
*
|
|
693
|
-
* Retries transient failures only (network blips, timeouts, 408/429, 5xx).
|
|
694
|
-
* Auth and other 4xx errors fail fast — retrying 401 does not help and causes
|
|
695
|
-
* duplicate requests + toasts.
|
|
696
|
-
* @param err
|
|
697
|
-
*/
|
|
698
|
-
function isRetryableGetError(err) {
|
|
699
|
-
if (err instanceof HttpErrorResponse) {
|
|
700
|
-
if (err.status === 0) {
|
|
701
|
-
return true;
|
|
702
|
-
}
|
|
703
|
-
if (err.status === 408 || err.status === 429) {
|
|
704
|
-
return true;
|
|
705
|
-
}
|
|
706
|
-
if (err.status >= 500) {
|
|
707
|
-
return true;
|
|
708
|
-
}
|
|
709
|
-
return false;
|
|
710
|
-
}
|
|
711
|
-
// Non-HTTP failures (e.g. timeout operator) may still be transient.
|
|
712
|
-
return true;
|
|
713
|
-
}
|
|
714
|
-
|
|
715
690
|
/**
|
|
716
691
|
* Per-request shipping-mode override for {@link shipmentModeInterceptor}.
|
|
717
692
|
*
|
|
@@ -979,7 +954,8 @@ function mapResourcePayload(id, raw, mapOne, mapMany) {
|
|
|
979
954
|
* - HTTP failures rethrown as `Error` whose `.message` is already
|
|
980
955
|
* user-facing ({@link formatApiErrorMessage}) — consumers do not need to
|
|
981
956
|
* parse `HttpErrorResponse` bodies
|
|
982
|
-
* -
|
|
957
|
+
* - **No automatic retry** — fail fast so UIs can show Select / table /
|
|
958
|
+
* error-state Retry instead of a stuck loading spinner
|
|
983
959
|
* - Optional per-GET TTL cache via `cacheTtlMs`
|
|
984
960
|
*
|
|
985
961
|
* @example
|
|
@@ -1121,18 +1097,8 @@ class ApiClient {
|
|
|
1121
1097
|
req$ = this.http.delete(url, hasBody ? { ...httpOpts, body } : httpOpts);
|
|
1122
1098
|
break;
|
|
1123
1099
|
}
|
|
1124
|
-
//
|
|
1125
|
-
|
|
1126
|
-
req$ = req$.pipe(retry({
|
|
1127
|
-
count: 1,
|
|
1128
|
-
delay: (err, retryCount) => {
|
|
1129
|
-
if (!isRetryableGetError(err)) {
|
|
1130
|
-
return throwError(() => err);
|
|
1131
|
-
}
|
|
1132
|
-
return timer(2 ** (retryCount - 1) * 1000);
|
|
1133
|
-
},
|
|
1134
|
-
}));
|
|
1135
|
-
}
|
|
1100
|
+
// No automatic GET retry — admin shells own Retry via UI
|
|
1101
|
+
// (`africanies-select` showRetry, table error→refreshClick, error-state).
|
|
1136
1102
|
if (this.config.timeout != null) {
|
|
1137
1103
|
req$ = req$.pipe(timeout({
|
|
1138
1104
|
each: this.config.timeout,
|
|
@@ -1808,8 +1774,8 @@ function listFetchKind(options) {
|
|
|
1808
1774
|
* (no caret/tilde): TanStack marks the Angular adapter experimental and
|
|
1809
1775
|
* breaking changes land without major bumps.
|
|
1810
1776
|
*
|
|
1811
|
-
*
|
|
1812
|
-
*
|
|
1777
|
+
* Query retries default to **0** to match {@link ApiClient} (fail fast;
|
|
1778
|
+
* screens use manual Retry). Apps can override per `QueryClient` if needed.
|
|
1813
1779
|
*/
|
|
1814
1780
|
/**
|
|
1815
1781
|
* Factory for TanStack `QueryClient` `defaultOptions`.
|
|
@@ -1859,8 +1825,7 @@ function createAfricaniesQueryClientDefaults() {
|
|
|
1859
1825
|
queries: {
|
|
1860
1826
|
staleTime: 60_000,
|
|
1861
1827
|
gcTime: 5 * 60_000,
|
|
1862
|
-
retry:
|
|
1863
|
-
// attemptIndex is 0-based in TanStack; match 1s, 2s, 4s style backoff.
|
|
1828
|
+
retry: 0,
|
|
1864
1829
|
retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30_000),
|
|
1865
1830
|
},
|
|
1866
1831
|
mutations: {
|
|
@@ -2725,7 +2690,7 @@ function mapPaymentMethod(raw) {
|
|
|
2725
2690
|
deleted_at: asNullableString(record['deleted_at'] ?? record['deletedAt']),
|
|
2726
2691
|
created_at: asNullableString(record['created_at'] ?? record['createdAt']),
|
|
2727
2692
|
updated_at: asNullableString(record['updated_at'] ?? record['updatedAt']),
|
|
2728
|
-
currencies:
|
|
2693
|
+
currencies: mapList(record['currencies'], mapPaymentMethodCurrency),
|
|
2729
2694
|
};
|
|
2730
2695
|
}
|
|
2731
2696
|
/**
|