@elasticias/ui 1.0.40 → 1.0.42

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elasticias/ui",
3
- "version": "1.0.40",
3
+ "version": "1.0.42",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -45,6 +45,24 @@
45
45
  --m-finance: #0d6e6a;
46
46
  --m-admin: #0f1115;
47
47
 
48
+ /* ── Crescilio brand colours ─────────────────────────────────────
49
+ These are the Crescilio brand colours: one per product, plus a
50
+ critical tone reserved for the system. The Crescilio Brand
51
+ Guidelines will be shared later, when the logo is ready; until
52
+ then these values are the reference.
53
+ Each colour comes as a pair named for the ground it sits on: the
54
+ plain name is for use on ink (dark grounds), `-paper` for use on
55
+ paper (light grounds). They are fixed values, not theme-switched,
56
+ so they are not restated under `.p-dark`. */
57
+ --cr-spring: #00D19A; /* Crescilio ERP, on ink */
58
+ --cr-spring-paper: #007A5A; /* Crescilio ERP, on paper */
59
+ --cr-sun: #FFCE3B; /* Crescilio POS, on ink */
60
+ --cr-sun-paper: #A87800; /* Crescilio POS, on paper */
61
+ --cr-violet: #7C5CFF; /* Crescilio Store, on ink */
62
+ --cr-violet-paper: #5B3FE0; /* Crescilio Store, on paper */
63
+ --cr-critical: #FF5C35; /* Coral, critical, system only, on ink */
64
+ --cr-critical-paper: #C2381A; /* Coral, critical, system only, on paper */
65
+
48
66
  /* ── Status pairs (chips only) ───────────────────────────────── */
49
67
  --st-pending-fg: #b34a00; --st-pending-bg: #fff1e0;
50
68
  --st-processing-fg: #1356a8; --st-processing-bg: #e0ecfc;
@@ -841,7 +841,10 @@
841
841
  }
842
842
 
843
843
  .tbl tbody td {
844
- padding: 14px 18px;
844
+ /* Published so a control inside the cell can size a touch slop that
845
+ stays inside its own row (see the toggle switch, pointer: coarse). */
846
+ --tbl-cell-pad-block: 14px;
847
+ padding: var(--tbl-cell-pad-block) 18px;
845
848
  border-bottom: 1px solid var(--rule-soft, rgba(15, 17, 21, 0.05));
846
849
  vertical-align: middle;
847
850
  }
@@ -4571,6 +4574,28 @@ input.ef-input[type='number'] {
4571
4574
  /* (48 - 40) / 2 outward on every side */
4572
4575
  inset: calc((var(--hit-touch) - var(--hit-base)) / -2);
4573
4576
  }
4577
+
4578
+ /* The switch draws at its theme size (Aura: 40x24) and its click
4579
+ target is PrimeNG's invisible input, sized to exactly that box. In a
4580
+ list row a tap that lands just outside it did nothing, because the
4581
+ row wrapper stops propagation. Grow the invisible input towards
4582
+ 48x48 around the switch; the visual does not change. The switch
4583
+ root is position: relative with no overflow clip, and a tap on the
4584
+ overhang still reaches PrimeNG's host click handler.
4585
+
4586
+ Vertically, the overhang never exceeds the cell's own block padding
4587
+ (`--tbl-cell-pad-block`, set by the table and its density presets).
4588
+ A compact row is about 33px, so a full 12px overhang reached into the
4589
+ next row and a tap on one client's switch toggled its neighbour's.
4590
+ Outside a table the variable is unset and the full slop applies. */
4591
+ ef-toggleswitch .p-toggleswitch-input {
4592
+ --ef-switch-slop-block: calc((var(--hit-touch) - var(--p-toggleswitch-height, 1.5rem)) / 2);
4593
+ --ef-switch-slop-inline: calc((var(--hit-touch) - var(--p-toggleswitch-width, 2.5rem)) / 2);
4594
+ inset-block: calc(-1 * min(var(--ef-switch-slop-block), var(--tbl-cell-pad-block, var(--ef-switch-slop-block))));
4595
+ inset-inline: calc(-1 * var(--ef-switch-slop-inline));
4596
+ width: auto;
4597
+ height: auto;
4598
+ }
4574
4599
  }
4575
4600
 
4576
4601
 
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { PipeTransform, OnInit, OnChanges, TemplateRef, EventEmitter, AfterContentInit, OnDestroy, SimpleChanges, InjectionToken, AfterViewInit } from '@angular/core';
3
3
  import * as _elasticias_screens from '@elasticias/screens';
4
4
  import { EfDataCardColumn, ScreenContext, EfDetailToolbarAction, EfSearchToolbarAction, EfDataCardSort, EfDataCardExportRequest, EfDateRange, EfDatePresetKey } from '@elasticias/screens';
5
- export { EfDataCardColumn, EfDataCardColumnAlign, EfDataCardColumnMobileRole, EfDataCardColumnType, EfDataCardSort, EfDataCardSortDirection, EfDatePresetKey, EfDateRange, EfDetailToolbarAction, EfSearchToolbarAction } from '@elasticias/screens';
5
+ export { EfBoundedDateRange, EfDataCardColumn, EfDataCardColumnAlign, EfDataCardColumnMobileRole, EfDataCardColumnType, EfDataCardSort, EfDataCardSortDirection, EfDatePresetKey, EfDateRange, EfDetailToolbarAction, EfSearchToolbarAction } from '@elasticias/screens';
6
6
  import { Menu } from 'primeng/menu';
7
7
  import * as _elasticias_core from '@elasticias/core';
8
8
  import { EfBuildPackage, EfModule, EfNavSection, EfNavItem, EfModuleId, EfToast, EfToastAction, EfThemeConfigService } from '@elasticias/core';
@@ -1600,6 +1600,7 @@ declare class EfAppShellComponent {
1600
1600
  readonly viewport: _angular_core.Signal<_elasticias_core.EfViewport>;
1601
1601
  readonly isMobile: _angular_core.Signal<boolean>;
1602
1602
  readonly showSide: _angular_core.Signal<boolean>;
1603
+ private readonly prefs;
1603
1604
  readonly sideCollapsed: _angular_core.WritableSignal<boolean>;
1604
1605
  /** Shown in the toggle's tooltip: the button is far from the content, the shortcut is not. */
1605
1606
  readonly shortcutHint: string;
@@ -4487,6 +4488,7 @@ type EfTableDensity = 'compact' | 'default' | 'comfortable';
4487
4488
  */
4488
4489
  declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
4489
4490
  private readonly viewport;
4491
+ private readonly prefs;
4490
4492
  private readonly configuredMobileLayout;
4491
4493
  readonly isMobile: _angular_core.Signal<boolean>;
4492
4494
  /** Per-screen override of the app-wide default. */
@@ -5692,7 +5694,9 @@ type EfDateFieldValue = Date | [Date, Date] | null;
5692
5694
  * Built-in presets (computed from `today` at open time):
5693
5695
  * `today`, `this_week`, `this_month`, `last_30_days`, `last_90_days`,
5694
5696
  * `this_quarter`, `this_year`. Override with `[presets]="customList"`
5695
- * if you need a different set.
5697
+ * if you need a different set. `all_time` (no bounds, emitted as null
5698
+ * start and end) is also recognised, and offered first in the default
5699
+ * list with `allowAllTime`.
5696
5700
  */
5697
5701
  declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implements ControlValueAccessor, AfterViewInit {
5698
5702
  private readonly host;
@@ -5739,6 +5743,15 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
5739
5743
  readonly end: _angular_core.InputSignal<Date>;
5740
5744
  /** Show a `'Personnalisé…'` row that opens the calendar view. */
5741
5745
  readonly allowCustomRange: _angular_core.InputSignalWithTransform<boolean, unknown>;
5746
+ /**
5747
+ * Offer an `all_time` row ("Toute la période") at the top of the
5748
+ * default preset list. Picking it emits `start: null, end: null`.
5749
+ * Off by default because a report screen needs a bounded period;
5750
+ * list screens whose search treats null dates as "no filter" turn
5751
+ * it on so the user can get back to the unfiltered list. Ignored
5752
+ * when `[presets]` is supplied.
5753
+ */
5754
+ readonly allowAllTime: _angular_core.InputSignalWithTransform<boolean, unknown>;
5742
5755
  /** Component behaviour: smart-bar filter vs. form field. */
5743
5756
  readonly mode: _angular_core.InputSignal<"filter" | "field">;
5744
5757
  /** Field mode only — pick a single date or a `[start, end]` range. */
@@ -5915,6 +5928,7 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
5915
5928
  /** Assemble an EfDateRange — exposes `labelKey` (for the trigger
5916
5929
  * to render via `| translate`) and a literal `label` fallback. */
5917
5930
  private buildRange;
5931
+ private static readonly BUILT_IN_KEYS;
5918
5932
  private builtInRange;
5919
5933
  private builtInHint;
5920
5934
  /** 6 weeks × 7 days. Each cell carries its date + flags. */
@@ -5938,7 +5952,7 @@ declare class EfDatepickerAdvancedComponent extends AbstractEfFormControl implem
5938
5952
  }) => number;
5939
5953
  trackByDow: (_: number, label: string) => string;
5940
5954
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfDatepickerAdvancedComponent, never>;
5941
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfDatepickerAdvancedComponent, "ef-datepicker-advanced", never, { "triggerLabelKey": { "alias": "triggerLabelKey"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "activePreset": { "alias": "activePreset"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "allowCustomRange": { "alias": "allowCustomRange"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
5955
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfDatepickerAdvancedComponent, "ef-datepicker-advanced", never, { "triggerLabelKey": { "alias": "triggerLabelKey"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; "activePreset": { "alias": "activePreset"; "required": false; "isSignal": true; }; "start": { "alias": "start"; "required": false; "isSignal": true; }; "end": { "alias": "end"; "required": false; "isSignal": true; }; "allowCustomRange": { "alias": "allowCustomRange"; "required": false; "isSignal": true; }; "allowAllTime": { "alias": "allowAllTime"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showTime": { "alias": "showTime"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
5942
5956
  }
5943
5957
 
5944
5958
  /**