@elasticias/ui 1.0.30 → 1.0.32
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/fesm2022/elasticias-ui.mjs +69 -12
- package/fesm2022/elasticias-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_comptoir.scss +24 -0
- package/styles/_patterns.scss +17 -5
- package/types/elasticias-ui.d.ts +40 -4
package/package.json
CHANGED
package/styles/_comptoir.scss
CHANGED
|
@@ -119,6 +119,22 @@
|
|
|
119
119
|
--text-soft: var(--ink-400);
|
|
120
120
|
--ink-active: var(--ink-900);
|
|
121
121
|
|
|
122
|
+
/* The module rail is the shell's deepest chrome, and it is dark in BOTH
|
|
123
|
+
themes on purpose: it anchors the app rather than tracking the page.
|
|
124
|
+
|
|
125
|
+
It used to paint `--ink-active` on `--paper`. Both of those flip, so the
|
|
126
|
+
rail was a dark strip on a light app in light mode and a WHITE strip on a
|
|
127
|
+
dark app in dark mode — while its icons still hardcoded white, which
|
|
128
|
+
measured 1.03:1. The ink ramp itself is theme-independent (`--ink-900` is
|
|
129
|
+
#0f1115 under both `:root` and `.p-dark`); only the `--ink-active` alias
|
|
130
|
+
flips. Naming the ramp step directly is what makes the rail hold still. */
|
|
131
|
+
--rail-bg: var(--ink-900);
|
|
132
|
+
--rail-fg: #fff;
|
|
133
|
+
--rail-fg-mute: rgba(255, 255, 255, 0.6);
|
|
134
|
+
--rail-rule: rgba(255, 255, 255, 0.08);
|
|
135
|
+
--rail-hover: rgba(255, 255, 255, 0.08);
|
|
136
|
+
--rail-active: rgba(255, 255, 255, 0.12);
|
|
137
|
+
|
|
122
138
|
/* `--ink-soft` is not a ramp step and was never defined anywhere; it is an
|
|
123
139
|
alias, added because eight call sites across three files already name it
|
|
124
140
|
as `var(--ink-soft, #64748b)`. Undefined, every one of them fell through
|
|
@@ -192,6 +208,14 @@
|
|
|
192
208
|
--text-mute: var(--ink-400);
|
|
193
209
|
--text-soft: var(--ink-500);
|
|
194
210
|
--ink-active: var(--ink-50);
|
|
211
|
+
|
|
212
|
+
/* The page is already `--ink-900` here, so the rail goes one step deeper to
|
|
213
|
+
stay a surface of its own instead of merging into the canvas. In light
|
|
214
|
+
mode the rail is far darker than the page; this keeps that relationship
|
|
215
|
+
rather than the literal colour. Everything painted on it stays white, so
|
|
216
|
+
only the ground is restated. */
|
|
217
|
+
--rail-bg: #08090c;
|
|
218
|
+
|
|
195
219
|
/* Status pairs. Without these a chip kept its light pastel ground on a dark
|
|
196
220
|
page — the one place the dark theme visibly fell apart, because chips are
|
|
197
221
|
the densest colour in any list.
|
package/styles/_patterns.scss
CHANGED
|
@@ -734,7 +734,12 @@
|
|
|
734
734
|
}
|
|
735
735
|
|
|
736
736
|
.popover .preset.active .hint {
|
|
737
|
-
|
|
737
|
+
/* The active preset inverts against the page: its ground is `--ink-active`
|
|
738
|
+
and its ink `--paper`, and both flip together, so the pair stays readable
|
|
739
|
+
in either theme. This hint has to ride that inversion rather than assume
|
|
740
|
+
the ground is dark — hardcoded white measured 1.04:1 on the light ground
|
|
741
|
+
the token resolves to in dark mode. */
|
|
742
|
+
color: color-mix(in srgb, var(--paper) 70%, transparent);
|
|
738
743
|
}
|
|
739
744
|
|
|
740
745
|
.f-pill.has-pop {
|
|
@@ -1093,11 +1098,15 @@
|
|
|
1093
1098
|
}
|
|
1094
1099
|
|
|
1095
1100
|
.bulk .count {
|
|
1096
|
-
|
|
1101
|
+
/* `.bulk` inverts against the page (`--ink-active` ground, `--paper` ink),
|
|
1102
|
+
and both flip together. The count has to ride that inversion; hardcoded
|
|
1103
|
+
white read as white-on-white once the ground resolved light in dark mode.
|
|
1104
|
+
Same for the buttons below, whose scrims were white-on-white too. */
|
|
1105
|
+
color: color-mix(in srgb, var(--paper) 70%, transparent);
|
|
1097
1106
|
}
|
|
1098
1107
|
|
|
1099
1108
|
.bulk .btn {
|
|
1100
|
-
background:
|
|
1109
|
+
background: color-mix(in srgb, var(--paper) 10%, transparent);
|
|
1101
1110
|
color: var(--paper);
|
|
1102
1111
|
border: 0;
|
|
1103
1112
|
min-height: 28px;
|
|
@@ -1106,7 +1115,7 @@
|
|
|
1106
1115
|
}
|
|
1107
1116
|
|
|
1108
1117
|
.bulk .btn:hover {
|
|
1109
|
-
background:
|
|
1118
|
+
background: color-mix(in srgb, var(--paper) 20%, transparent);
|
|
1110
1119
|
}
|
|
1111
1120
|
|
|
1112
1121
|
/* ──────────── EMPTY STATE ──────────────────────────────────────── */
|
|
@@ -2045,7 +2054,10 @@
|
|
|
2045
2054
|
}
|
|
2046
2055
|
|
|
2047
2056
|
.dp__preset.active .hint {
|
|
2048
|
-
|
|
2057
|
+
/* Rides the active preset's inversion, same as `.popover .preset.active
|
|
2058
|
+
.hint`. The two lists are styled separately and carried the same
|
|
2059
|
+
hardcoded white, so they broke in dark mode together. */
|
|
2060
|
+
color: color-mix(in srgb, var(--paper) 70%, transparent);
|
|
2049
2061
|
}
|
|
2050
2062
|
|
|
2051
2063
|
.dp__preset.muted {
|
package/types/elasticias-ui.d.ts
CHANGED
|
@@ -4452,7 +4452,9 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
|
|
|
4452
4452
|
* equivalent and a tabindex to be usable, which a decorative box should
|
|
4453
4453
|
* not have.
|
|
4454
4454
|
*/
|
|
4455
|
-
protected onRowHeadActivate(row:
|
|
4455
|
+
protected onRowHeadActivate(row: TRow, index: number, event: Event): void;
|
|
4456
|
+
/** The chevron owns expansion once the head is busy navigating. */
|
|
4457
|
+
protected onDisclosureToggle(row: unknown, index: number, event: Event): void;
|
|
4456
4458
|
protected toggleExpanded(row: unknown, index: number): void;
|
|
4457
4459
|
private rowKey;
|
|
4458
4460
|
/**
|
|
@@ -4487,6 +4489,10 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
|
|
|
4487
4489
|
/** Fields a collapsed card shows. A row shows none until it opens. */
|
|
4488
4490
|
protected readonly cardPreviewColumns: _angular_core.Signal<EfDataCardColumn[]>;
|
|
4489
4491
|
protected readonly hasDetail: _angular_core.Signal<boolean>;
|
|
4492
|
+
/** Whether the screen wired an open-the-record action to this table. */
|
|
4493
|
+
protected readonly rowNavigable: _angular_core.Signal<boolean>;
|
|
4494
|
+
/** The head is a control when it either opens the row or expands it. */
|
|
4495
|
+
protected readonly headIsControl: _angular_core.Signal<boolean>;
|
|
4490
4496
|
/** Only worth a toggle when opening actually reveals something. */
|
|
4491
4497
|
protected readonly hasMoreThanPreview: _angular_core.Signal<boolean>;
|
|
4492
4498
|
/** Fields visible for a row right now, given layout and open state. */
|
|
@@ -4773,9 +4779,39 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
|
|
|
4773
4779
|
* popup can escape its rounded edges. */
|
|
4774
4780
|
readonly openMenuCount: _angular_core.WritableSignal<number>;
|
|
4775
4781
|
onRowActionsToggle(event: Event): void;
|
|
4776
|
-
/**
|
|
4777
|
-
*
|
|
4778
|
-
|
|
4782
|
+
/**
|
|
4783
|
+
* Children that own their own click. Opening the row on top of them would
|
|
4784
|
+
* run two things from one gesture.
|
|
4785
|
+
*/
|
|
4786
|
+
private static readonly INTERACTIVE_CHILD;
|
|
4787
|
+
/**
|
|
4788
|
+
* Bounded by the row on purpose. The row itself is given `role="button"`
|
|
4789
|
+
* when it is openable, so an unbounded `closest()` matches the row as its
|
|
4790
|
+
* own ancestor and suppresses every click on it — the interaction looks
|
|
4791
|
+
* wired and does nothing. Only a control *inside* the row counts.
|
|
4792
|
+
*/
|
|
4793
|
+
private isInteractiveTarget;
|
|
4794
|
+
/**
|
|
4795
|
+
* A drag that selects text ends in a click. Opening the row on that click
|
|
4796
|
+
* throws the selection away at the instant it was made, which is worse
|
|
4797
|
+
* than not opening, because the work is lost rather than merely delayed.
|
|
4798
|
+
*/
|
|
4799
|
+
private hasTextSelection;
|
|
4800
|
+
/**
|
|
4801
|
+
* Open a row with one click.
|
|
4802
|
+
*
|
|
4803
|
+
* This used to take two. The tell was not the pointer but the keyboard:
|
|
4804
|
+
* Enter on a focused row already opened it with a single press, because a
|
|
4805
|
+
* keyboard cannot produce a double-click at all. So the component was
|
|
4806
|
+
* already committed to single activation and only the mouse was asking
|
|
4807
|
+
* twice — and the row paints `cursor: pointer` the whole time, which says
|
|
4808
|
+
* a click does something.
|
|
4809
|
+
*
|
|
4810
|
+
* The output is still named `rowDoubleClick` so the twelve screens bound
|
|
4811
|
+
* to it keep working untouched. The name is now wrong; renaming it is a
|
|
4812
|
+
* breaking change to a published component and belongs in its own commit.
|
|
4813
|
+
*/
|
|
4814
|
+
onRowClick(row: TRow, event: MouseEvent): void;
|
|
4779
4815
|
/**
|
|
4780
4816
|
* `aria-sort` for the header cell: the only thing that tells a screen
|
|
4781
4817
|
* reader which column is ordered and which way. The arrow glyph is
|