@elasticias/ui 1.0.43 → 1.0.44

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.43",
3
+ "version": "1.0.44",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -1048,11 +1048,20 @@
1048
1048
 
1049
1049
  /* ──────────── PAGER ─────────────────────────────────────────────── */
1050
1050
 
1051
+ /* Both halves wrap and can shrink. A row of controls has an intrinsic
1052
+ min-content width, so a pager that cannot wrap is as wide as its
1053
+ lines-per-page block plus every page button, and the card clips the
1054
+ rest: on a 390px phone, or in a narrow card on a tablet with the side
1055
+ panel open, "next" and the last page were cut off. When the two halves
1056
+ no longer fit on one line the page buttons take their own line, still
1057
+ at the end. */
1051
1058
  .pager {
1052
1059
  display: flex;
1060
+ flex-wrap: wrap;
1053
1061
  justify-content: space-between;
1054
1062
  align-items: center;
1055
1063
  gap: var(--s-3);
1064
+ min-width: 0;
1056
1065
  padding: var(--s-3) var(--s-5);
1057
1066
  border-top: 1px solid var(--rule);
1058
1067
  background: var(--paper-alt);
@@ -1060,8 +1069,21 @@
1060
1069
 
1061
1070
  .pager .pages {
1062
1071
  display: flex;
1072
+ flex-wrap: wrap;
1063
1073
  align-items: center;
1064
1074
  gap: 4px;
1075
+ min-width: 0;
1076
+ margin-inline-start: auto;
1077
+ }
1078
+
1079
+ /* The phone pager's "5 sur 20", between previous and next. */
1080
+ .pager .pg-status {
1081
+ padding: 0 8px;
1082
+ font-size: 12.5px;
1083
+ font-weight: 600;
1084
+ color: var(--text);
1085
+ font-variant-numeric: tabular-nums;
1086
+ white-space: nowrap;
1065
1087
  }
1066
1088
 
1067
1089
  .pager .pg {
@@ -1090,7 +1112,9 @@
1090
1112
 
1091
1113
  .pager .size {
1092
1114
  display: flex;
1115
+ flex-wrap: wrap;
1093
1116
  align-items: center;
1117
+ min-width: 0;
1094
1118
  gap: 8px;
1095
1119
  font-size: 12.5px;
1096
1120
  color: var(--text-mute);
@@ -4585,10 +4609,52 @@ input.ef-input[type='number'] {
4585
4609
  min-inline-size: var(--hit-touch);
4586
4610
  }
4587
4611
 
4612
+ /* The row ⋯ trigger and the clear ✕ draw at their desktop size (34x28
4613
+ pill, 22px circle) and reach the 48px tier through an invisible
4614
+ overhang, like the top-bar icons. Growing the painted box instead
4615
+ turned every row's ⋯ into a 48px bordered circle.
4616
+
4617
+ The margin reserves the same 48x48 the old rule laid out, so rows,
4618
+ cards and inputs keep their height and spacing, and the overhang
4619
+ never leaves that box: two triggers in adjacent compact rows cannot
4620
+ overlap, because each target is the footprint its own row already
4621
+ made room for. The trigger's overhang adds its 1px border, since an
4622
+ absolute box is measured from the padding edge. */
4588
4623
  .row-actions__trigger,
4589
- .ef-clear,
4590
- .pg {
4591
- inline-size: var(--hit-touch);
4624
+ .ef-clear {
4625
+ position: relative;
4626
+ }
4627
+
4628
+ .row-actions__trigger {
4629
+ margin-block: calc((var(--hit-touch) - 28px) / 2);
4630
+ margin-inline: calc((var(--hit-touch) - 34px) / 2);
4631
+ }
4632
+
4633
+ .ef-clear {
4634
+ margin: calc((var(--hit-touch) - 22px) / 2);
4635
+ }
4636
+
4637
+ .row-actions__trigger::after,
4638
+ .ef-clear::after {
4639
+ content: '';
4640
+ position: absolute;
4641
+ }
4642
+
4643
+ .row-actions__trigger::after {
4644
+ inset-block: calc((var(--hit-touch) - 28px) / -2 - 1px);
4645
+ inset-inline: calc((var(--hit-touch) - 34px) / -2 - 1px);
4646
+ }
4647
+
4648
+ .ef-clear::after {
4649
+ inset: calc((var(--hit-touch) - 22px) / -2);
4650
+ }
4651
+
4652
+ /* Written as `.pager .pg` to match the base rule's specificity: a bare
4653
+ `.pg` lost to its `height: 32px`, so page buttons drew 48px wide but
4654
+ 32px tall on every touch screen. A floor rather than a fixed width,
4655
+ so a four-digit page number is not squeezed. */
4656
+ .pager .pg {
4657
+ min-inline-size: var(--hit-touch);
4592
4658
  block-size: var(--hit-touch);
4593
4659
  }
4594
4660
 
@@ -5194,6 +5194,13 @@ interface PageBtn {
5194
5194
  *
5195
5195
  * Renders a windowed page list (first / current ±1 / last with
5196
5196
  * ellipsis) for total > 7 pages. Below 7 pages all buttons show.
5197
+ *
5198
+ * On a phone (`EfViewportService.isMobile`) the window becomes
5199
+ * first · previous · "5 of 20" · next · last. The window is up to nine
5200
+ * 48px touch targets (about 464px) and a 390px phone has about 316px
5201
+ * inside a card, so it ran off the edge. The compact set still reaches
5202
+ * every page the window offered: its numbered neighbours are one step
5203
+ * away, and the first and the last page are one tap.
5197
5204
  */
5198
5205
  declare class EfPagerComponent {
5199
5206
  readonly pageNumber: _angular_core.InputSignal<number>;
@@ -5205,10 +5212,14 @@ declare class EfPagerComponent {
5205
5212
  readonly ofLabelKey: _angular_core.InputSignal<string>;
5206
5213
  readonly prevLabelKey: _angular_core.InputSignal<string>;
5207
5214
  readonly nextLabelKey: _angular_core.InputSignal<string>;
5215
+ readonly firstLabelKey: _angular_core.InputSignal<string>;
5216
+ readonly lastLabelKey: _angular_core.InputSignal<string>;
5208
5217
  /** Hide the lines-per-page selector + range when only paging is wanted. */
5209
5218
  readonly hideSize: _angular_core.InputSignal<boolean>;
5210
5219
  readonly pageChange: _angular_core.OutputEmitterRef<number>;
5211
5220
  readonly pageSizeChange: _angular_core.OutputEmitterRef<number>;
5221
+ /** Phone layout: first · prev · "n of N" · next · last. */
5222
+ readonly compact: _angular_core.Signal<boolean>;
5212
5223
  /** Falls back to the first configured option if the value ever goes empty. */
5213
5224
  private get defaultSize();
5214
5225
  /** `pageSizeOptions` shaped for `ef-select`, which reads a label and a
@@ -5228,7 +5239,7 @@ declare class EfPagerComponent {
5228
5239
  onSizeChange(value: number | string | null): void;
5229
5240
  trackBtn(index: number, btn: PageBtn): string;
5230
5241
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfPagerComponent, never>;
5231
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfPagerComponent, "ef-pager", never, { "pageNumber": { "alias": "pageNumber"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "linesPerPageLabelKey": { "alias": "linesPerPageLabelKey"; "required": false; "isSignal": true; }; "ofLabelKey": { "alias": "ofLabelKey"; "required": false; "isSignal": true; }; "prevLabelKey": { "alias": "prevLabelKey"; "required": false; "isSignal": true; }; "nextLabelKey": { "alias": "nextLabelKey"; "required": false; "isSignal": true; }; "hideSize": { "alias": "hideSize"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
5242
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfPagerComponent, "ef-pager", never, { "pageNumber": { "alias": "pageNumber"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "linesPerPageLabelKey": { "alias": "linesPerPageLabelKey"; "required": false; "isSignal": true; }; "ofLabelKey": { "alias": "ofLabelKey"; "required": false; "isSignal": true; }; "prevLabelKey": { "alias": "prevLabelKey"; "required": false; "isSignal": true; }; "nextLabelKey": { "alias": "nextLabelKey"; "required": false; "isSignal": true; }; "firstLabelKey": { "alias": "firstLabelKey"; "required": false; "isSignal": true; }; "lastLabelKey": { "alias": "lastLabelKey"; "required": false; "isSignal": true; }; "hideSize": { "alias": "hideSize"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; }, never, never, true, never>;
5232
5243
  }
5233
5244
 
5234
5245
  /**