@eagami/ui 5.25.1 → 5.26.1
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/eagami-ui.mjs +2082 -2062
- package/fesm2022/eagami-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/src/styles/_mixins.scss +16 -10
- package/src/styles/tokens/_colors.scss +5 -4
- package/types/eagami-ui.d.ts +100 -78
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eagami/ui",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.26.1",
|
|
4
4
|
"description": "Lightweight, accessible, themeable Angular UI component library and icon set built on CSS custom properties",
|
|
5
5
|
"author": "Michal Wiraszka <michal@eagami.com>",
|
|
6
6
|
"license": "MIT",
|
package/src/styles/_mixins.scss
CHANGED
|
@@ -149,10 +149,22 @@ $target-size-min: 24px;
|
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
+
// Hairline rule for a pseudo-element, so it spans its container's inner edges
|
|
153
|
+
// instead of being inset by the content's own padding. `$inset` pulls the rule
|
|
154
|
+
// in from those edges, matching a list that pads its rows.
|
|
155
|
+
@mixin divider-rule($edge: top, $inset: 0) {
|
|
156
|
+
position: absolute;
|
|
157
|
+
#{$edge}: 0;
|
|
158
|
+
inset-inline-end: $inset;
|
|
159
|
+
inset-inline-start: $inset;
|
|
160
|
+
height: var(--border-width-thin);
|
|
161
|
+
background-color: var(--color-divider);
|
|
162
|
+
content: '';
|
|
163
|
+
}
|
|
164
|
+
|
|
152
165
|
// Section wrapper in a grouped select-like option list, and the rule an
|
|
153
|
-
// unlabelled section carries in place of a heading. The rule
|
|
154
|
-
//
|
|
155
|
-
// the option padding, and stays out of the option list entirely.
|
|
166
|
+
// unlabelled section carries in place of a heading. The rule stays out of the
|
|
167
|
+
// option list entirely.
|
|
156
168
|
@mixin option-group {
|
|
157
169
|
position: relative;
|
|
158
170
|
|
|
@@ -161,13 +173,7 @@ $target-size-min: 24px;
|
|
|
161
173
|
margin-top: 0.25em;
|
|
162
174
|
|
|
163
175
|
&::before {
|
|
164
|
-
|
|
165
|
-
top: 0;
|
|
166
|
-
inset-inline-end: 0;
|
|
167
|
-
inset-inline-start: 0;
|
|
168
|
-
height: var(--border-width-thin);
|
|
169
|
-
background-color: var(--color-border-default);
|
|
170
|
-
content: '';
|
|
176
|
+
@include divider-rule;
|
|
171
177
|
}
|
|
172
178
|
}
|
|
173
179
|
}
|
|
@@ -115,7 +115,9 @@
|
|
|
115
115
|
--color-border-subtle: var(--color-neutral-200);
|
|
116
116
|
--color-border-default: var(--color-neutral-200);
|
|
117
117
|
--color-border-strong: var(--color-neutral-400);
|
|
118
|
-
|
|
118
|
+
// Dividers are a translucent wash, like the state fills, so hairline rules
|
|
119
|
+
// inside a surface read evenly on base, elevated, and hover tones alike.
|
|
120
|
+
--color-divider: rgba(0, 0, 0, 0.1);
|
|
119
121
|
--color-border-focus: var(--color-primary-500);
|
|
120
122
|
|
|
121
123
|
// brand-default/-hover/-active are the brand colour as a surface (solid bg
|
|
@@ -220,9 +222,8 @@
|
|
|
220
222
|
);
|
|
221
223
|
--color-border-default: var(--color-neutral-400);
|
|
222
224
|
--color-border-strong: var(--color-neutral-300);
|
|
223
|
-
// Dividers
|
|
224
|
-
|
|
225
|
-
--color-divider: var(--color-neutral-600);
|
|
225
|
+
// Dividers flip to a light wash so the rule stays visible on every dark tier
|
|
226
|
+
--color-divider: rgba(255, 255, 255, 0.12);
|
|
226
227
|
|
|
227
228
|
// Surface roles step one shade lighter than light mode so the button clears
|
|
228
229
|
// WCAG 1.4.11 (3:1) on the near-black canvas while keeping a white label
|
package/types/eagami-ui.d.ts
CHANGED
|
@@ -67,7 +67,6 @@ interface EagamiMessages {
|
|
|
67
67
|
dialogLabel: string;
|
|
68
68
|
searchPlaceholder: string;
|
|
69
69
|
empty: string;
|
|
70
|
-
clear: string;
|
|
71
70
|
};
|
|
72
71
|
colorPicker: {
|
|
73
72
|
dialogLabel: string;
|
|
@@ -1136,6 +1135,69 @@ declare class CheckboxComponent implements ControlValueAccessor {
|
|
|
1136
1135
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "ea-checkbox", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "changed": "changed"; }, never, never, true, never>;
|
|
1137
1136
|
}
|
|
1138
1137
|
|
|
1138
|
+
/**
|
|
1139
|
+
* Primary classification for an icon component. Every icon ships with a single
|
|
1140
|
+
* `category` (read off the component's `static readonly category` field) plus
|
|
1141
|
+
* a separate `static readonly isBrand` flag for whether it also depicts a
|
|
1142
|
+
* recognisable brand mark.
|
|
1143
|
+
*
|
|
1144
|
+
* `feather`: derived from the upstream Feather Icons set (MIT). Uses Feather's
|
|
1145
|
+
* canonical slug and design.
|
|
1146
|
+
* `eagami`: Eagami UI additions beyond the Feather set: the brand mark, the
|
|
1147
|
+
* basic shape set and household icons, brand-filled variants of
|
|
1148
|
+
* Feather outlines, the coloured brand marks (`isBrand`), and line
|
|
1149
|
+
* icons adapted from Lucide (ISC).
|
|
1150
|
+
*/
|
|
1151
|
+
type IconCategory = 'feather' | 'eagami';
|
|
1152
|
+
/**
|
|
1153
|
+
* Shape of the static metadata that every `ea-icon-*` component carries
|
|
1154
|
+
* alongside its template. Read these fields directly off the component class
|
|
1155
|
+
* (e.g. `GithubIconComponent.tags`) to build catalogues, search indices, or
|
|
1156
|
+
* documentation tables without pulling in any other icon as a transitive
|
|
1157
|
+
* dependency.
|
|
1158
|
+
*/
|
|
1159
|
+
interface IconMeta {
|
|
1160
|
+
readonly slug: string;
|
|
1161
|
+
readonly category: IconCategory;
|
|
1162
|
+
/** True when the icon depicts a recognisable third-party or Eagami brand mark. */
|
|
1163
|
+
readonly isBrand?: boolean;
|
|
1164
|
+
readonly tags: ReadonlyArray<string>;
|
|
1165
|
+
}
|
|
1166
|
+
/** An icon component class augmented with its static metadata. */
|
|
1167
|
+
type IconComponentType = Type<unknown> & IconMeta;
|
|
1168
|
+
/**
|
|
1169
|
+
* Abstract base class for every `ea-icon-*` component. Provides the shared
|
|
1170
|
+
* host bindings that make icons render as inline-flex 1em squares, so
|
|
1171
|
+
* individual icon components don't need to repeat the `host: { style: '...' }`
|
|
1172
|
+
* config in their `@Component` decorator. Brand icons with their own host
|
|
1173
|
+
* bindings (e.g. a colour binding tied to a `brand` input) layer those onto
|
|
1174
|
+
* this base via additional `@HostBinding` getters.
|
|
1175
|
+
*
|
|
1176
|
+
* Feather-derived icons read the `strokeWidth` input via `[attr.stroke-width]`
|
|
1177
|
+
* in their SVG template, so consumers can thin or thicken any icon at the
|
|
1178
|
+
* call site (e.g. `<ea-icon-star [strokeWidth]="1.5" />`). Subclasses can
|
|
1179
|
+
* change the default by setting `static override readonly defaultStrokeWidth`,
|
|
1180
|
+
* used by icons whose dense paths read better at a different default
|
|
1181
|
+
* (e.g. camera, upload at 1.5).
|
|
1182
|
+
*/
|
|
1183
|
+
declare abstract class IconComponentBase {
|
|
1184
|
+
readonly display = "inline-flex";
|
|
1185
|
+
readonly width = "1em";
|
|
1186
|
+
readonly height = "1em";
|
|
1187
|
+
static readonly defaultStrokeWidth: number;
|
|
1188
|
+
readonly strokeWidth: _angular_core.InputSignal<number>;
|
|
1189
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconComponentBase, never>;
|
|
1190
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<IconComponentBase, never, never, { "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
declare class SearchIconComponent extends IconComponentBase {
|
|
1194
|
+
static readonly slug = "search";
|
|
1195
|
+
static readonly category: IconCategory;
|
|
1196
|
+
static readonly tags: ReadonlyArray<string>;
|
|
1197
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchIconComponent, never>;
|
|
1198
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchIconComponent, "ea-icon-search", never, {}, {}, never, never, true, never>;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1139
1201
|
/**
|
|
1140
1202
|
* A single executable command in an `<ea-command-palette>`.
|
|
1141
1203
|
*
|
|
@@ -1169,12 +1231,14 @@ interface CommandPaletteItem<T = unknown> {
|
|
|
1169
1231
|
data?: T;
|
|
1170
1232
|
}
|
|
1171
1233
|
|
|
1234
|
+
interface PaletteEntry {
|
|
1235
|
+
item: CommandPaletteItem;
|
|
1236
|
+
flatIndex: number;
|
|
1237
|
+
disabled: boolean;
|
|
1238
|
+
}
|
|
1172
1239
|
interface GroupedItems {
|
|
1173
1240
|
group: string;
|
|
1174
|
-
items:
|
|
1175
|
-
item: CommandPaletteItem;
|
|
1176
|
-
flatIndex: number;
|
|
1177
|
-
}>;
|
|
1241
|
+
items: readonly PaletteEntry[];
|
|
1178
1242
|
}
|
|
1179
1243
|
/**
|
|
1180
1244
|
* `<ea-command-palette>` is a search-driven action launcher: a modal dialog
|
|
@@ -1196,25 +1260,33 @@ declare class CommandPaletteComponent {
|
|
|
1196
1260
|
readonly open: _angular_core.ModelSignal<boolean>;
|
|
1197
1261
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1198
1262
|
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
1263
|
+
/**
|
|
1264
|
+
* Optional predicate that disables every item it returns `true` for, in
|
|
1265
|
+
* addition to each item's own `disabled` flag.
|
|
1266
|
+
*/
|
|
1267
|
+
readonly disabledWhen: _angular_core.InputSignal<((item: CommandPaletteItem) => boolean) | undefined>;
|
|
1199
1268
|
readonly execute: _angular_core.OutputEmitterRef<CommandPaletteItem<unknown>>;
|
|
1200
1269
|
protected readonly messages: _angular_core.Signal<_eagami_ui.EagamiMessages>;
|
|
1201
1270
|
protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
|
|
1202
1271
|
private readonly dialogEl;
|
|
1203
1272
|
private readonly searchEl;
|
|
1273
|
+
protected readonly searchIcon: typeof SearchIconComponent;
|
|
1204
1274
|
protected readonly query: _angular_core.WritableSignal<string>;
|
|
1205
1275
|
protected readonly listboxId: string;
|
|
1206
1276
|
/**
|
|
1207
1277
|
* Items bucketed by `group`, then flattened back into display order
|
|
1208
1278
|
* (ungrouped items first, then each named group). The matching
|
|
1209
|
-
* `
|
|
1210
|
-
* one-to-one with what the user sees.
|
|
1279
|
+
* `filteredEntries` array follows this same order so `flatIndex` lines up
|
|
1280
|
+
* one-to-one with what the user sees. Each entry resolves its disabled state
|
|
1281
|
+
* once here, so a consumer's `disabledWhen` runs once per match rather than
|
|
1282
|
+
* on every binding read.
|
|
1211
1283
|
*/
|
|
1212
1284
|
protected readonly groupedItems: _angular_core.Signal<GroupedItems[]>;
|
|
1213
1285
|
/**
|
|
1214
1286
|
* Flat list of matches in display order. Drives keyboard navigation and
|
|
1215
1287
|
* `aria-activedescendant`.
|
|
1216
1288
|
*/
|
|
1217
|
-
protected readonly
|
|
1289
|
+
protected readonly filteredEntries: _angular_core.Signal<PaletteEntry[]>;
|
|
1218
1290
|
private readonly _activeIndex;
|
|
1219
1291
|
/**
|
|
1220
1292
|
* Tracks what the user last did so the visual highlight only renders when
|
|
@@ -1229,9 +1301,11 @@ declare class CommandPaletteComponent {
|
|
|
1229
1301
|
*/
|
|
1230
1302
|
private readonly interaction;
|
|
1231
1303
|
protected readonly activeIndex: _angular_core.Signal<number>;
|
|
1232
|
-
protected readonly activeId: _angular_core.Signal<string |
|
|
1304
|
+
protected readonly activeId: _angular_core.Signal<string | undefined>;
|
|
1233
1305
|
constructor();
|
|
1234
1306
|
protected itemDomId(item: CommandPaletteItem): string;
|
|
1307
|
+
/** Index of the first enabled entry from `start`, walking in `step`; -1 when none. */
|
|
1308
|
+
private firstEnabled;
|
|
1235
1309
|
protected isActive(flatIndex: number): boolean;
|
|
1236
1310
|
/**
|
|
1237
1311
|
* Whether the active row should render its highlighted background right
|
|
@@ -1240,23 +1314,22 @@ declare class CommandPaletteComponent {
|
|
|
1240
1314
|
* next-click target).
|
|
1241
1315
|
*/
|
|
1242
1316
|
protected showActiveHighlight(flatIndex: number): boolean;
|
|
1243
|
-
protected
|
|
1244
|
-
protected clearQuery(): void;
|
|
1317
|
+
protected onQueryChange(value: string): void;
|
|
1245
1318
|
protected onSearchKeydown(event: KeyboardEvent): void;
|
|
1246
1319
|
/** Wrapping arrow-key move that skips disabled items. */
|
|
1247
1320
|
private moveActive;
|
|
1248
1321
|
/** Home/End move to the first enabled item from the given end. */
|
|
1249
1322
|
private edgeActive;
|
|
1250
1323
|
private setActiveByKeyboard;
|
|
1251
|
-
protected onItemClick(
|
|
1252
|
-
protected onItemMouseEnter(
|
|
1324
|
+
protected onItemClick(entry: PaletteEntry): void;
|
|
1325
|
+
protected onItemMouseEnter(entry: PaletteEntry): void;
|
|
1253
1326
|
protected onListMouseLeave(): void;
|
|
1254
1327
|
protected onBackdropClick(event: MouseEvent): void;
|
|
1255
1328
|
protected onDialogClose(): void;
|
|
1256
1329
|
private executeItem;
|
|
1257
1330
|
private scrollActiveIntoView;
|
|
1258
1331
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandPaletteComponent, never>;
|
|
1259
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandPaletteComponent, "ea-command-palette", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "execute": "execute"; }, never, never, true, never>;
|
|
1332
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandPaletteComponent, "ea-command-palette", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "disabledWhen": { "alias": "disabledWhen"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "execute": "execute"; }, never, never, true, never>;
|
|
1260
1333
|
}
|
|
1261
1334
|
|
|
1262
1335
|
/** Visual size of the color picker trigger. */
|
|
@@ -2254,12 +2327,24 @@ declare class InputComponent implements ControlValueAccessor {
|
|
|
2254
2327
|
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
2255
2328
|
/** Accessible name for the control when no visible `label` is set. */
|
|
2256
2329
|
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
2330
|
+
/** ARIA role applied to the native input, e.g. `combobox` for a typeahead host. */
|
|
2331
|
+
readonly role: _angular_core.InputSignal<string | undefined>;
|
|
2332
|
+
/** Expanded state of a controlled popup, forwarded as `aria-expanded`. */
|
|
2333
|
+
readonly ariaExpanded: _angular_core.InputSignal<boolean | undefined>;
|
|
2334
|
+
/** `id` of the popup element the input controls, forwarded as `aria-controls`. */
|
|
2335
|
+
readonly ariaControls: _angular_core.InputSignal<string | undefined>;
|
|
2336
|
+
/** `id` of the active option in a controlled popup, forwarded as `aria-activedescendant`. */
|
|
2337
|
+
readonly ariaActivedescendant: _angular_core.InputSignal<string | undefined>;
|
|
2338
|
+
/** Autocomplete behavior hint, forwarded as `aria-autocomplete`. */
|
|
2339
|
+
readonly ariaAutocomplete: _angular_core.InputSignal<"none" | "inline" | "list" | "both" | undefined>;
|
|
2257
2340
|
/** Native input type; `password` adds a built-in show/hide toggle. */
|
|
2258
2341
|
readonly type: _angular_core.InputSignal<InputType>;
|
|
2259
2342
|
/** Placeholder shown while the field is empty. */
|
|
2260
2343
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
2261
2344
|
/** Leading icon component rendered before the text, e.g. a search or filter glyph. */
|
|
2262
2345
|
readonly icon: _angular_core.InputSignal<Type<unknown> | undefined>;
|
|
2346
|
+
/** Keeps the leading icon while the field has a value; when false it shows only alongside the placeholder. */
|
|
2347
|
+
readonly keepIcon: _angular_core.InputSignal<boolean>;
|
|
2263
2348
|
/** Visual size of the field. */
|
|
2264
2349
|
readonly size: _angular_core.InputSignal<EaSize>;
|
|
2265
2350
|
/** Helper text shown below the field; hidden while an error is showing. */
|
|
@@ -2346,7 +2431,7 @@ declare class InputComponent implements ControlValueAccessor {
|
|
|
2346
2431
|
/** Moves keyboard focus to the underlying native input element. */
|
|
2347
2432
|
focus(): void;
|
|
2348
2433
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
|
|
2349
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ea-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "list": { "alias": "list"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "showPasswordToggle": { "alias": "showPasswordToggle"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "focused": "focused"; "blurred": "blurred"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
|
|
2434
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "ea-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "aria-expanded"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "aria-controls"; "required": false; "isSignal": true; }; "ariaActivedescendant": { "alias": "aria-activedescendant"; "required": false; "isSignal": true; }; "ariaAutocomplete": { "alias": "aria-autocomplete"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "keepIcon": { "alias": "keepIcon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMsg": { "alias": "errorMsg"; "required": false; "isSignal": true; }; "errorMessages": { "alias": "errorMessages"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "list": { "alias": "list"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "showPasswordToggle": { "alias": "showPasswordToggle"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "focused": "focused"; "blurred": "blurred"; }, never, ["[slot=prefix]", "[slot=suffix]"], true, never>;
|
|
2350
2435
|
}
|
|
2351
2436
|
|
|
2352
2437
|
/** Placement of the menu list relative to its trigger. */
|
|
@@ -4354,61 +4439,6 @@ declare class VirtualListComponent {
|
|
|
4354
4439
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<VirtualListComponent, "ea-virtual-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "itemHeight": { "alias": "itemHeight"; "required": true; "isSignal": true; }; "viewportHeight": { "alias": "viewportHeight"; "required": true; "isSignal": true; }; "overscan": { "alias": "overscan"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "scrollIndexChange": "scrollIndexChange"; }, ["itemTemplate"], never, true, never>;
|
|
4355
4440
|
}
|
|
4356
4441
|
|
|
4357
|
-
/**
|
|
4358
|
-
* Primary classification for an icon component. Every icon ships with a single
|
|
4359
|
-
* `category` (read off the component's `static readonly category` field) plus
|
|
4360
|
-
* a separate `static readonly isBrand` flag for whether it also depicts a
|
|
4361
|
-
* recognisable brand mark.
|
|
4362
|
-
*
|
|
4363
|
-
* `feather`: derived from the upstream Feather Icons set (MIT). Uses Feather's
|
|
4364
|
-
* canonical slug and design.
|
|
4365
|
-
* `eagami`: Eagami UI additions beyond the Feather set: the brand mark, the
|
|
4366
|
-
* basic shape set and household icons, brand-filled variants of
|
|
4367
|
-
* Feather outlines, the coloured brand marks (`isBrand`), and line
|
|
4368
|
-
* icons adapted from Lucide (ISC).
|
|
4369
|
-
*/
|
|
4370
|
-
type IconCategory = 'feather' | 'eagami';
|
|
4371
|
-
/**
|
|
4372
|
-
* Shape of the static metadata that every `ea-icon-*` component carries
|
|
4373
|
-
* alongside its template. Read these fields directly off the component class
|
|
4374
|
-
* (e.g. `GithubIconComponent.tags`) to build catalogues, search indices, or
|
|
4375
|
-
* documentation tables without pulling in any other icon as a transitive
|
|
4376
|
-
* dependency.
|
|
4377
|
-
*/
|
|
4378
|
-
interface IconMeta {
|
|
4379
|
-
readonly slug: string;
|
|
4380
|
-
readonly category: IconCategory;
|
|
4381
|
-
/** True when the icon depicts a recognisable third-party or Eagami brand mark. */
|
|
4382
|
-
readonly isBrand?: boolean;
|
|
4383
|
-
readonly tags: ReadonlyArray<string>;
|
|
4384
|
-
}
|
|
4385
|
-
/** An icon component class augmented with its static metadata. */
|
|
4386
|
-
type IconComponentType = Type<unknown> & IconMeta;
|
|
4387
|
-
/**
|
|
4388
|
-
* Abstract base class for every `ea-icon-*` component. Provides the shared
|
|
4389
|
-
* host bindings that make icons render as inline-flex 1em squares, so
|
|
4390
|
-
* individual icon components don't need to repeat the `host: { style: '...' }`
|
|
4391
|
-
* config in their `@Component` decorator. Brand icons with their own host
|
|
4392
|
-
* bindings (e.g. a colour binding tied to a `brand` input) layer those onto
|
|
4393
|
-
* this base via additional `@HostBinding` getters.
|
|
4394
|
-
*
|
|
4395
|
-
* Feather-derived icons read the `strokeWidth` input via `[attr.stroke-width]`
|
|
4396
|
-
* in their SVG template, so consumers can thin or thicken any icon at the
|
|
4397
|
-
* call site (e.g. `<ea-icon-star [strokeWidth]="1.5" />`). Subclasses can
|
|
4398
|
-
* change the default by setting `static override readonly defaultStrokeWidth`,
|
|
4399
|
-
* used by icons whose dense paths read better at a different default
|
|
4400
|
-
* (e.g. camera, upload at 1.5).
|
|
4401
|
-
*/
|
|
4402
|
-
declare abstract class IconComponentBase {
|
|
4403
|
-
readonly display = "inline-flex";
|
|
4404
|
-
readonly width = "1em";
|
|
4405
|
-
readonly height = "1em";
|
|
4406
|
-
static readonly defaultStrokeWidth: number;
|
|
4407
|
-
readonly strokeWidth: _angular_core.InputSignal<number>;
|
|
4408
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconComponentBase, never>;
|
|
4409
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<IconComponentBase, never, never, { "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
4410
|
-
}
|
|
4411
|
-
|
|
4412
4442
|
/**
|
|
4413
4443
|
* Resolves an icon's human-readable display name. Pass the component class
|
|
4414
4444
|
* (`iconDisplayName(GithubIconComponent)` returns `'GitHub'`) or its slug
|
|
@@ -6928,14 +6958,6 @@ declare class ScissorsIconComponent extends IconComponentBase {
|
|
|
6928
6958
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScissorsIconComponent, "ea-icon-scissors", never, {}, {}, never, never, true, never>;
|
|
6929
6959
|
}
|
|
6930
6960
|
|
|
6931
|
-
declare class SearchIconComponent extends IconComponentBase {
|
|
6932
|
-
static readonly slug = "search";
|
|
6933
|
-
static readonly category: IconCategory;
|
|
6934
|
-
static readonly tags: ReadonlyArray<string>;
|
|
6935
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchIconComponent, never>;
|
|
6936
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchIconComponent, "ea-icon-search", never, {}, {}, never, never, true, never>;
|
|
6937
|
-
}
|
|
6938
|
-
|
|
6939
6961
|
declare class SendIconComponent extends IconComponentBase {
|
|
6940
6962
|
static readonly slug = "send";
|
|
6941
6963
|
static readonly category: IconCategory;
|