@elasticias/ui 1.0.16 → 1.0.18

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.16",
3
+ "version": "1.0.18",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -54,6 +54,17 @@
54
54
  --st-refunded-fg: #826208; --st-refunded-bg: #fdf1c8;
55
55
  --st-onhold-fg: #4f5560; --st-onhold-bg: #e7e9ee;
56
56
 
57
+ /* ── Typography ───────────────────────────────────────────────
58
+ The three faces, defined once. They were hardcoded 79 times across
59
+ 16 files, and the same face carried different fallback chains in
60
+ different components — so a render without the webfont looked
61
+ different depending on which component drew it. Stacks match
62
+ libs/tokens/typography.json, which is the contract that ships to
63
+ web, iOS and Android. */
64
+ --font-display: 'Bricolage Grotesque', system-ui, sans-serif;
65
+ --font-ui: 'Manrope', system-ui, sans-serif;
66
+ --font-mono: 'JetBrains Mono', ui-monospace, monospace;
67
+
57
68
  /* ── Radii ───────────────────────────────────────────────────── */
58
69
  --r-sm: 8px;
59
70
  --r-md: 12px;
@@ -39,7 +39,7 @@
39
39
 
40
40
  .page-head-row h1 {
41
41
  margin: 0;
42
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
42
+ font-family: var(--font-display);
43
43
  font-variation-settings:
44
44
  'opsz' 96,
45
45
  'wght' 700,
@@ -216,7 +216,7 @@
216
216
  }
217
217
 
218
218
  .pill-group .count {
219
- font-family: 'JetBrains Mono', ui-monospace, monospace;
219
+ font-family: var(--font-mono);
220
220
  font-size: 10.5px;
221
221
  font-weight: 700;
222
222
  color: inherit;
@@ -289,7 +289,7 @@
289
289
  color: var(--paper);
290
290
  display: grid;
291
291
  place-items: center;
292
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
292
+ font-family: var(--font-display);
293
293
  font-variation-settings:
294
294
  'opsz' 12,
295
295
  'wght' 700,
@@ -311,7 +311,7 @@
311
311
  /* ──────────── TYPOGRAPHY UTILITIES ─────────────────────────────── */
312
312
 
313
313
  .label {
314
- font-family: 'Manrope', system-ui, sans-serif;
314
+ font-family: var(--font-ui);
315
315
  font-size: 11px;
316
316
  font-weight: 700;
317
317
  text-transform: uppercase;
@@ -350,7 +350,7 @@
350
350
 
351
351
  .mono,
352
352
  .num {
353
- font-family: 'JetBrains Mono', ui-monospace, monospace;
353
+ font-family: var(--font-mono);
354
354
  font-feature-settings: 'tnum', 'zero', 'ss01';
355
355
  font-variant-numeric: tabular-nums slashed-zero;
356
356
  }
@@ -415,15 +415,40 @@
415
415
  background: transparent;
416
416
  border: 0;
417
417
  border-radius: var(--r-xl);
418
- padding: 8px 14px 8px 38px;
418
+ /* Logical, not `padding: 8px 14px 8px 38px`. The search icon is placed
419
+ with inset-inline-start, so a physical shorthand reserved the 38px on
420
+ the wrong side in Arabic and the placeholder ran under the glyph. */
421
+ padding-block: 8px;
422
+ padding-inline: 38px 14px;
419
423
  color: var(--text);
420
- outline: 0;
421
- min-height: 36px;
424
+ min-block-size: var(--hit-base);
422
425
  letter-spacing: -0.005em;
423
426
  }
424
427
 
428
+ /* This field had `outline: 0` and nothing in its place, so the primary
429
+ search box on every list screen was the one control with no visible
430
+ focus at all. The ring goes on the label so it frames the whole
431
+ affordance, icon and shortcut hint included. */
432
+ .smart-bar .search input:focus {
433
+ outline: 0;
434
+ }
435
+
436
+ .smart-bar .search:focus-within {
437
+ outline: 2px solid color-mix(in srgb, var(--ink-active) 35%, transparent);
438
+ outline-offset: 2px;
439
+ border-radius: var(--r-xl);
440
+ }
441
+
425
442
  .smart-bar .search input::placeholder {
426
- color: var(--text-soft);
443
+ /* --text-soft is ink-400, about 2.5:1 on paper. A placeholder is real
444
+ text a user has to read, so it takes the 4.5:1 tier. */
445
+ color: var(--text-mute);
446
+ }
447
+
448
+ @media (pointer: coarse) {
449
+ .smart-bar .search input {
450
+ min-block-size: var(--hit-touch);
451
+ }
427
452
  }
428
453
 
429
454
  .smart-bar .search .kbd {
@@ -431,7 +456,7 @@
431
456
  inset-inline-end: 14px;
432
457
  top: 50%;
433
458
  transform: translateY(-50%);
434
- font-family: 'JetBrains Mono', ui-monospace, monospace;
459
+ font-family: var(--font-mono);
435
460
  font-size: 10.5px;
436
461
  font-weight: 600;
437
462
  color: var(--text-mute);
@@ -693,7 +718,7 @@
693
718
  }
694
719
 
695
720
  .popover .preset .hint {
696
- font-family: 'JetBrains Mono', ui-monospace, monospace;
721
+ font-family: var(--font-mono);
697
722
  font-size: 10.5px;
698
723
  color: var(--text-mute);
699
724
  font-weight: 500;
@@ -761,6 +786,46 @@
761
786
  white-space: nowrap;
762
787
  }
763
788
 
789
+ /* A sortable header is a real button now, so it inherits the cell's type
790
+ rather than restating it, and carries a focus ring the click handler on
791
+ the <th> never could. */
792
+ .tbl thead th .tbl-sort {
793
+ display: inline-flex;
794
+ align-items: center;
795
+ gap: 4px;
796
+ margin: 0;
797
+ padding: 0;
798
+ border: 0;
799
+ background: none;
800
+ font: inherit;
801
+ color: inherit;
802
+ letter-spacing: inherit;
803
+ text-transform: inherit;
804
+ text-align: inherit;
805
+ cursor: pointer;
806
+ }
807
+
808
+ .tbl thead th .tbl-sort:focus-visible {
809
+ outline: 2px solid color-mix(in srgb, var(--ink-active) 40%, transparent);
810
+ outline-offset: 2px;
811
+ border-radius: var(--r-sm);
812
+ }
813
+
814
+ .tbl thead th .tbl-sort:hover {
815
+ color: var(--text);
816
+ }
817
+
818
+ .tbl-sort__arrow {
819
+ opacity: 0.7;
820
+ }
821
+
822
+ /* The row itself is focusable when it opens, so it needs a visible ring.
823
+ Enter activates it; the double-click stays for the mouse. */
824
+ .tbl tbody tr.is-row-clickable:focus-visible {
825
+ outline: 2px solid color-mix(in srgb, var(--ink-active) 40%, transparent);
826
+ outline-offset: -2px;
827
+ }
828
+
764
829
  .tbl tbody td {
765
830
  padding: 14px 18px;
766
831
  border-bottom: 1px solid var(--rule-soft, rgba(15, 17, 21, 0.05));
@@ -773,6 +838,12 @@
773
838
 
774
839
  .tbl tbody tr {
775
840
  transition: background-color var(--t-fast) var(--ease-out);
841
+ }
842
+
843
+ /* The pointer belongs only on rows that actually open. It used to be set
844
+ on every row in every table, so a row that did nothing still promised
845
+ it would, and single-clicking any of them did nothing anywhere. */
846
+ .tbl tbody tr.is-row-clickable {
776
847
  cursor: pointer;
777
848
  }
778
849
 
@@ -787,7 +858,7 @@
787
858
  }
788
859
 
789
860
  .tbl .ref {
790
- font-family: 'JetBrains Mono', ui-monospace, monospace;
861
+ font-family: var(--font-mono);
791
862
  font-size: 12px;
792
863
  font-weight: 700;
793
864
  }
@@ -799,7 +870,7 @@
799
870
  }
800
871
 
801
872
  .tbl .total {
802
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
873
+ font-family: var(--font-display);
803
874
  font-variation-settings:
804
875
  'opsz' 12,
805
876
  'wght' 700,
@@ -871,7 +942,7 @@
871
942
  display: inline-flex;
872
943
  align-items: center;
873
944
  gap: 6px;
874
- font-family: 'JetBrains Mono', ui-monospace, monospace;
945
+ font-family: var(--font-mono);
875
946
  font-size: 11px;
876
947
  letter-spacing: 0.02em;
877
948
  color: var(--text-soft);
@@ -1074,14 +1145,14 @@
1074
1145
 
1075
1146
 
1076
1147
  .detail-toolbar .ref {
1077
- font-family: 'JetBrains Mono', ui-monospace, monospace;
1148
+ font-family: var(--font-mono);
1078
1149
  font-size: 14px;
1079
1150
  font-weight: 700;
1080
1151
  letter-spacing: -0.01em;
1081
1152
  }
1082
1153
 
1083
1154
  .detail-toolbar .name {
1084
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
1155
+ font-family: var(--font-display);
1085
1156
  font-variation-settings:
1086
1157
  'opsz' 12,
1087
1158
  'wght' 700,
@@ -1136,7 +1207,7 @@
1136
1207
  }
1137
1208
 
1138
1209
  .card-head .title {
1139
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
1210
+ font-family: var(--font-display);
1140
1211
  font-variation-settings:
1141
1212
  'opsz' 12,
1142
1213
  'wght' 700,
@@ -1375,7 +1446,7 @@
1375
1446
  }
1376
1447
 
1377
1448
  .kpi-value {
1378
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
1449
+ font-family: var(--font-display);
1379
1450
  font-variation-settings:
1380
1451
  'opsz' 96,
1381
1452
  'wght' 700,
@@ -1388,7 +1459,7 @@
1388
1459
  }
1389
1460
 
1390
1461
  .kpi-value .unit {
1391
- font-family: 'JetBrains Mono', ui-monospace, monospace;
1462
+ font-family: var(--font-mono);
1392
1463
  font-size: 0.4em;
1393
1464
  font-weight: 500;
1394
1465
  color: var(--text-mute);
@@ -1403,7 +1474,7 @@
1403
1474
  }
1404
1475
 
1405
1476
  .delta {
1406
- font-family: 'JetBrains Mono', ui-monospace, monospace;
1477
+ font-family: var(--font-mono);
1407
1478
  font-size: 11px;
1408
1479
  font-weight: 700;
1409
1480
  padding: 2px 8px;
@@ -1471,7 +1542,7 @@
1471
1542
  display: grid;
1472
1543
  place-items: center;
1473
1544
  color: var(--tenant-500);
1474
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
1545
+ font-family: var(--font-display);
1475
1546
  font-variation-settings:
1476
1547
  'opsz' 12,
1477
1548
  'wght' 700,
@@ -1654,7 +1725,7 @@
1654
1725
  .row-actions__item .kbd,
1655
1726
  .ef-menu__item .kbd {
1656
1727
  margin-inline-start: auto;
1657
- font-family: 'JetBrains Mono', monospace;
1728
+ font-family: var(--font-mono);
1658
1729
  font-size: 10px;
1659
1730
  font-weight: 600;
1660
1731
  color: var(--text-mute);
@@ -2049,7 +2120,7 @@
2049
2120
  }
2050
2121
 
2051
2122
  .dp__preset .hint {
2052
- font-family: 'JetBrains Mono', monospace;
2123
+ font-family: var(--font-mono);
2053
2124
  font-size: 11.5px;
2054
2125
  font-weight: 500;
2055
2126
  color: var(--text-mute);
@@ -2262,7 +2333,7 @@
2262
2333
  }
2263
2334
 
2264
2335
  .dp__cal-dow {
2265
- font-family: 'JetBrains Mono', monospace;
2336
+ font-family: var(--font-mono);
2266
2337
  font-size: 10px;
2267
2338
  font-weight: 700;
2268
2339
  color: var(--text-mute);
@@ -2390,7 +2461,7 @@
2390
2461
 
2391
2462
  .dp__field input {
2392
2463
  font: inherit;
2393
- font-family: 'JetBrains Mono', monospace;
2464
+ font-family: var(--font-mono);
2394
2465
  font-size: 12.5px;
2395
2466
  background: var(--paper);
2396
2467
  border: 1px solid var(--rule);
@@ -2423,7 +2494,7 @@
2423
2494
  }
2424
2495
 
2425
2496
  .dp__actions .duration {
2426
- font-family: 'JetBrains Mono', monospace;
2497
+ font-family: var(--font-mono);
2427
2498
  font-size: 11.5px;
2428
2499
  font-weight: 600;
2429
2500
  color: var(--text-mute);
@@ -2716,7 +2787,7 @@
2716
2787
  }
2717
2788
 
2718
2789
  .detail-toolbar .ref {
2719
- font-family: 'JetBrains Mono', monospace;
2790
+ font-family: var(--font-mono);
2720
2791
  font-size: 14px;
2721
2792
  font-weight: 700;
2722
2793
  letter-spacing: -0.01em;
@@ -2747,7 +2818,7 @@
2747
2818
 
2748
2819
  .search-toolbar h1 {
2749
2820
  margin: 0;
2750
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
2821
+ font-family: var(--font-display);
2751
2822
  font-variation-settings:
2752
2823
  'opsz' 96,
2753
2824
  'wght' 700,
@@ -2845,7 +2916,7 @@
2845
2916
  }
2846
2917
 
2847
2918
  .card-head .title {
2848
- font-family: 'Bricolage Grotesque', sans-serif;
2919
+ font-family: var(--font-display);
2849
2920
  font-variation-settings:
2850
2921
  'opsz' 12,
2851
2922
  'wght' 700,
@@ -2968,7 +3039,7 @@
2968
3039
  }
2969
3040
 
2970
3041
  .totals .row .v {
2971
- font-family: 'JetBrains Mono', monospace;
3042
+ font-family: var(--font-mono);
2972
3043
  font-feature-settings: 'tnum';
2973
3044
  font-variant-numeric: tabular-nums;
2974
3045
  font-weight: 700;
@@ -2990,7 +3061,7 @@
2990
3061
  }
2991
3062
 
2992
3063
  .totals .grand-row .lbl {
2993
- font-family: 'Bricolage Grotesque', sans-serif;
3064
+ font-family: var(--font-display);
2994
3065
  font-variation-settings:
2995
3066
  'opsz' 12,
2996
3067
  'wght' 700,
@@ -3002,7 +3073,7 @@
3002
3073
  }
3003
3074
 
3004
3075
  .totals .grand-row .v {
3005
- font-family: 'Bricolage Grotesque', sans-serif;
3076
+ font-family: var(--font-display);
3006
3077
  font-variation-settings:
3007
3078
  'opsz' 96,
3008
3079
  'wght' 700,
@@ -3013,7 +3084,7 @@
3013
3084
  }
3014
3085
 
3015
3086
  .totals .currency {
3016
- font-family: 'JetBrains Mono', monospace;
3087
+ font-family: var(--font-mono);
3017
3088
  font-size: 0.35em;
3018
3089
  color: var(--text-mute);
3019
3090
  margin-inline-start: 4px;
@@ -3046,7 +3117,7 @@
3046
3117
  }
3047
3118
 
3048
3119
  .stats .row .v {
3049
- font-family: 'JetBrains Mono', monospace;
3120
+ font-family: var(--font-mono);
3050
3121
  font-size: 13.5px;
3051
3122
  font-weight: 700;
3052
3123
  font-feature-settings: 'tnum';
@@ -3061,7 +3132,7 @@
3061
3132
  }
3062
3133
 
3063
3134
  .stats .row.big .v {
3064
- font-family: 'Bricolage Grotesque', sans-serif;
3135
+ font-family: var(--font-display);
3065
3136
  font-variation-settings:
3066
3137
  'opsz' 12,
3067
3138
  'wght' 700,
@@ -3146,7 +3217,7 @@
3146
3217
  }
3147
3218
 
3148
3219
  .kpi-value {
3149
- font-family: 'Bricolage Grotesque', sans-serif;
3220
+ font-family: var(--font-display);
3150
3221
  font-variation-settings:
3151
3222
  'opsz' 96,
3152
3223
  'wght' 700,
@@ -3159,7 +3230,7 @@
3159
3230
  }
3160
3231
 
3161
3232
  .kpi-value .unit {
3162
- font-family: 'JetBrains Mono', monospace;
3233
+ font-family: var(--font-mono);
3163
3234
  font-size: 0.32em;
3164
3235
  font-weight: 500;
3165
3236
  color: var(--text-mute);
@@ -3168,7 +3239,7 @@
3168
3239
  }
3169
3240
 
3170
3241
  .delta {
3171
- font-family: 'JetBrains Mono', monospace;
3242
+ font-family: var(--font-mono);
3172
3243
  font-size: 11px;
3173
3244
  font-weight: 600;
3174
3245
  }
@@ -3203,7 +3274,7 @@
3203
3274
 
3204
3275
  .ef-label {
3205
3276
  display: inline-block;
3206
- font-family: 'Manrope', system-ui, sans-serif;
3277
+ font-family: var(--font-ui);
3207
3278
  font-size: 11px;
3208
3279
  font-weight: 700;
3209
3280
  color: var(--text-mute);
@@ -3453,7 +3524,7 @@
3453
3524
  .ef-input-group .ef-input-addon {
3454
3525
  background: var(--paper);
3455
3526
  padding: 9px 12px;
3456
- font-family: 'JetBrains Mono', monospace;
3527
+ font-family: var(--font-mono);
3457
3528
  font-size: 12.5px;
3458
3529
  color: var(--text-mute);
3459
3530
  display: flex;
@@ -3907,7 +3978,7 @@ input.ef-input[type='number'] {
3907
3978
  /* Group headers */
3908
3979
  .es__panel .p-select-option-group,
3909
3980
  .es__panel .p-multiselect-option-group {
3910
- font-family: 'JetBrains Mono', ui-monospace, monospace;
3981
+ font-family: var(--font-mono);
3911
3982
  font-size: 10px;
3912
3983
  font-weight: 800;
3913
3984
  letter-spacing: 0.06em;
@@ -4076,7 +4147,7 @@ input.ef-input[type='number'] {
4076
4147
 
4077
4148
  .es-dialog .p-dialog-title,
4078
4149
  .es-dialog .p-dialog-header-title {
4079
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
4150
+ font-family: var(--font-display);
4080
4151
  font-variation-settings:
4081
4152
  'opsz' 14,
4082
4153
  'wght' 700,
@@ -4329,7 +4400,7 @@ input.ef-input[type='number'] {
4329
4400
  }
4330
4401
 
4331
4402
  .es-dialog .es-dialog__title {
4332
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
4403
+ font-family: var(--font-display);
4333
4404
  font-variation-settings:
4334
4405
  'opsz' 14,
4335
4406
  'wght' 700,
@@ -4403,7 +4474,7 @@ input.ef-input[type='number'] {
4403
4474
  color: var(--paper);
4404
4475
  display: grid;
4405
4476
  place-items: center;
4406
- font-family: 'Bricolage Grotesque', system-ui, sans-serif;
4477
+ font-family: var(--font-display);
4407
4478
  font-variation-settings:
4408
4479
  'opsz' 12,
4409
4480
  'wght' 700,
@@ -4512,3 +4583,37 @@ input.ef-input[type='number'] {
4512
4583
  text-overflow: ellipsis;
4513
4584
  }
4514
4585
  }
4586
+
4587
+ /* ── TOUCH TARGET TIER ──────────────────────────────────────────────
4588
+ The design system documents three tiers: --hit-base 40px for forms,
4589
+ --hit-touch 48px for touch, --hit-pos 64px for the till. Until now
4590
+ --hit-touch appeared exactly once in this file, and every top-bar
4591
+ icon, pagination control and row-actions trigger rendered at 32px on
4592
+ a phone as well as a desktop, against a guide that promises 48.
4593
+
4594
+ Keyed on `pointer: coarse` rather than a width breakpoint, so a touch
4595
+ laptop is treated as touch and a narrow desktop window is not. Only
4596
+ the box grows; type and icon sizes are left alone. */
4597
+ @media (pointer: coarse) {
4598
+ .btn,
4599
+ .btn-sm {
4600
+ min-block-size: var(--hit-touch);
4601
+ }
4602
+
4603
+ /* An icon-only button has no label to give it width, so the height tier
4604
+ alone leaves a 40px-wide target. Square it off. */
4605
+ .btn:has(> i:only-child),
4606
+ .btn-sm:has(> i:only-child) {
4607
+ min-inline-size: var(--hit-touch);
4608
+ }
4609
+
4610
+ .ef-app-top__action,
4611
+ .ef-theme-toggle,
4612
+ .ef-app-top__logout,
4613
+ .row-actions__trigger,
4614
+ .ef-clear,
4615
+ .pg {
4616
+ inline-size: var(--hit-touch);
4617
+ block-size: var(--hit-touch);
4618
+ }
4619
+ }
@@ -4495,10 +4495,15 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
4495
4495
  readonly hideableColumns: _angular_core.Signal<EfDataCardColumn[]>;
4496
4496
  toggleTool(tool: 'density' | 'columns'): void;
4497
4497
  /**
4498
- * Hand the host screen everything it needs to write the file: the
4499
- * columns the viewer can actually see, in the order they see them, and
4500
- * the rows already on screen as a fallback for hosts that do not fetch.
4501
- * `select` and `actions` are chrome, never data, so they are dropped.
4498
+ * Hand the host screen what it needs to write the file: the columns
4499
+ * the viewer can actually see, in the order they see them, plus a
4500
+ * resolver for their values. `select` and `actions` are chrome, never
4501
+ * data, so they are dropped.
4502
+ *
4503
+ * The on-screen rows are deliberately not sent. They were, as a
4504
+ * "fallback for hosts that do not fetch", and no host ever read them
4505
+ * — a published contract carrying a field nobody consumes is a
4506
+ * promise to keep supporting it.
4502
4507
  */
4503
4508
  requestExport(): void;
4504
4509
  /**
@@ -4530,6 +4535,19 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
4530
4535
  /** Fires `rowDoubleClick` unless the dblclick originated on an
4531
4536
  * interactive child (checkbox, button, link, form control). */
4532
4537
  onRowDoubleClick(row: TRow, event: MouseEvent): void;
4538
+ /**
4539
+ * `aria-sort` for the header cell: the only thing that tells a screen
4540
+ * reader which column is ordered and which way. The arrow glyph is
4541
+ * decorative and marked aria-hidden, so without this the sort state
4542
+ * was invisible to assistive technology.
4543
+ */
4544
+ ariaSort(col: EfDataCardColumn): 'ascending' | 'descending' | 'none' | null;
4545
+ /**
4546
+ * Open a row from the keyboard. Desktop opening is a double-click,
4547
+ * which no keyboard can produce, so Enter on a focused row was the
4548
+ * only missing half of the interaction.
4549
+ */
4550
+ onRowKeydown(row: TRow, event: Event): void;
4533
4551
  onHeaderClick(col: EfDataCardColumn): void;
4534
4552
  trackByRow: (_: number, row: TRow) => unknown;
4535
4553
  trackByColumn: (_: number, col: EfDataCardColumn) => string;
@@ -4845,6 +4863,7 @@ declare class EfEmptyStateComponent {
4845
4863
  */
4846
4864
  declare class EfSmartBarComponent {
4847
4865
  private readonly shortcuts;
4866
+ private readonly translate;
4848
4867
  /** Distinguishes this instance's registration from any other
4849
4868
  * ef-smart-bar on screen, the same convention ef-row-actions uses. */
4850
4869
  private static nextInstanceId;
@@ -4865,6 +4884,13 @@ declare class EfSmartBarComponent {
4865
4884
  * (a screen with two smart bars registers the binding on only one
4866
4885
  * of them). Defaults to `'mod+k'`. */
4867
4886
  readonly shortcut: _angular_core.InputSignal<string>;
4887
+ /**
4888
+ * Accessible name for the search field: the placeholder text, which
4889
+ * already says what this box searches ("Search by order N, customer,
4890
+ * product, employee"). Falls back to a generic label when a screen
4891
+ * supplies no placeholder.
4892
+ */
4893
+ protected readonly accessibleLabel: _angular_core.Signal<any>;
4868
4894
  protected readonly kbdLabel: _angular_core.Signal<string>;
4869
4895
  readonly search: _angular_core.OutputEmitterRef<string>;
4870
4896
  readonly clear: _angular_core.OutputEmitterRef<void>;