@elasticias/ui 1.0.11 → 1.0.13
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 +256 -13
- package/fesm2022/elasticias-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_patterns.scss +137 -10
- package/types/elasticias-ui.d.ts +190 -6
package/package.json
CHANGED
package/styles/_patterns.scss
CHANGED
|
@@ -1586,7 +1586,8 @@
|
|
|
1586
1586
|
}
|
|
1587
1587
|
}
|
|
1588
1588
|
|
|
1589
|
-
.row-actions__item
|
|
1589
|
+
.row-actions__item,
|
|
1590
|
+
.ef-menu__item {
|
|
1590
1591
|
appearance: none;
|
|
1591
1592
|
background: transparent;
|
|
1592
1593
|
border: 0;
|
|
@@ -1606,19 +1607,24 @@
|
|
|
1606
1607
|
}
|
|
1607
1608
|
|
|
1608
1609
|
.row-actions__item:hover,
|
|
1609
|
-
.row-actions__item:focus-visible
|
|
1610
|
+
.row-actions__item:focus-visible,
|
|
1611
|
+
.ef-menu__item:hover,
|
|
1612
|
+
.ef-menu__item:focus-visible {
|
|
1610
1613
|
background: var(--paper);
|
|
1611
1614
|
outline: 0;
|
|
1612
1615
|
}
|
|
1613
1616
|
|
|
1614
|
-
.row-actions__item[disabled]
|
|
1617
|
+
.row-actions__item[disabled],
|
|
1618
|
+
.ef-menu__item[disabled] {
|
|
1615
1619
|
opacity: 0.45;
|
|
1616
1620
|
cursor: not-allowed;
|
|
1617
1621
|
background: transparent;
|
|
1618
1622
|
}
|
|
1619
1623
|
|
|
1620
1624
|
.row-actions__item .ico,
|
|
1621
|
-
.row-actions__item i
|
|
1625
|
+
.row-actions__item i,
|
|
1626
|
+
.ef-menu__item .ico,
|
|
1627
|
+
.ef-menu__item i {
|
|
1622
1628
|
width: 16px;
|
|
1623
1629
|
height: 16px;
|
|
1624
1630
|
font-size: 16px;
|
|
@@ -1633,11 +1639,16 @@
|
|
|
1633
1639
|
.row-actions__item:hover .ico,
|
|
1634
1640
|
.row-actions__item:hover i,
|
|
1635
1641
|
.row-actions__item:focus-visible .ico,
|
|
1636
|
-
.row-actions__item:focus-visible i
|
|
1642
|
+
.row-actions__item:focus-visible i,
|
|
1643
|
+
.ef-menu__item:hover .ico,
|
|
1644
|
+
.ef-menu__item:hover i,
|
|
1645
|
+
.ef-menu__item:focus-visible .ico,
|
|
1646
|
+
.ef-menu__item:focus-visible i {
|
|
1637
1647
|
color: var(--text);
|
|
1638
1648
|
}
|
|
1639
1649
|
|
|
1640
|
-
.row-actions__item .kbd
|
|
1650
|
+
.row-actions__item .kbd,
|
|
1651
|
+
.ef-menu__item .kbd {
|
|
1641
1652
|
margin-inline-start: auto;
|
|
1642
1653
|
font-family: 'JetBrains Mono', monospace;
|
|
1643
1654
|
font-size: 10px;
|
|
@@ -1650,26 +1661,142 @@
|
|
|
1650
1661
|
line-height: 1;
|
|
1651
1662
|
}
|
|
1652
1663
|
|
|
1653
|
-
.row-actions__item.danger
|
|
1664
|
+
.row-actions__item.danger,
|
|
1665
|
+
.ef-menu__item.danger {
|
|
1654
1666
|
color: var(--st-cancelled-fg);
|
|
1655
1667
|
}
|
|
1656
1668
|
|
|
1657
1669
|
.row-actions__item.danger .ico,
|
|
1658
|
-
.row-actions__item.danger i
|
|
1670
|
+
.row-actions__item.danger i,
|
|
1671
|
+
.ef-menu__item.danger .ico,
|
|
1672
|
+
.ef-menu__item.danger i {
|
|
1659
1673
|
color: var(--st-cancelled-fg);
|
|
1660
1674
|
}
|
|
1661
1675
|
|
|
1662
1676
|
.row-actions__item.danger:hover,
|
|
1663
|
-
.row-actions__item.danger:focus-visible
|
|
1677
|
+
.row-actions__item.danger:focus-visible,
|
|
1678
|
+
.ef-menu__item.danger:hover,
|
|
1679
|
+
.ef-menu__item.danger:focus-visible {
|
|
1664
1680
|
background: var(--st-cancelled-bg);
|
|
1665
1681
|
}
|
|
1666
1682
|
|
|
1667
|
-
.row-actions__divider
|
|
1683
|
+
.row-actions__divider,
|
|
1684
|
+
.ef-menu__divider {
|
|
1668
1685
|
height: 1px;
|
|
1669
1686
|
background: var(--rule);
|
|
1670
1687
|
margin: 4px;
|
|
1671
1688
|
}
|
|
1672
1689
|
|
|
1690
|
+
/* ──────────── MENU (shared) ─────────────────────────────────────
|
|
1691
|
+
The panel half of the menu language above, without the absolute
|
|
1692
|
+
positioning `.row-actions__menu` needs for its own trigger. Anything
|
|
1693
|
+
that already owns its placement (a popover, a bottom sheet) styles its
|
|
1694
|
+
surface with `.ef-menu` and fills it with `.ef-menu__item`. */
|
|
1695
|
+
|
|
1696
|
+
.ef-menu {
|
|
1697
|
+
display: grid;
|
|
1698
|
+
/* A grid track defaults to auto, so one long row would size the column and
|
|
1699
|
+
widen the whole panel. minmax(0, 1fr) is what lets a label truncate. */
|
|
1700
|
+
grid-template-columns: minmax(0, 1fr);
|
|
1701
|
+
gap: 1px;
|
|
1702
|
+
min-width: 212px;
|
|
1703
|
+
padding: 6px;
|
|
1704
|
+
background: var(--paper-alt);
|
|
1705
|
+
border: 1px solid var(--rule);
|
|
1706
|
+
border-radius: var(--r-xl);
|
|
1707
|
+
box-shadow: var(--shadow-3);
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
/* Identity block at the top of a menu: a name and a secondary line.
|
|
1711
|
+
Sized to sit level with the items rather than tower over them. */
|
|
1712
|
+
.ef-menu__head {
|
|
1713
|
+
display: grid;
|
|
1714
|
+
gap: 1px;
|
|
1715
|
+
min-width: 0;
|
|
1716
|
+
padding: 8px 12px 7px;
|
|
1717
|
+
margin-bottom: 4px;
|
|
1718
|
+
border-bottom: 1px solid var(--rule);
|
|
1719
|
+
}
|
|
1720
|
+
|
|
1721
|
+
.ef-menu__head-name {
|
|
1722
|
+
min-width: 0;
|
|
1723
|
+
overflow: hidden;
|
|
1724
|
+
text-overflow: ellipsis;
|
|
1725
|
+
white-space: nowrap;
|
|
1726
|
+
font-size: 13.5px;
|
|
1727
|
+
font-weight: 700;
|
|
1728
|
+
line-height: 1.3;
|
|
1729
|
+
color: var(--text);
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
.ef-menu__head-sub {
|
|
1733
|
+
min-width: 0;
|
|
1734
|
+
overflow: hidden;
|
|
1735
|
+
text-overflow: ellipsis;
|
|
1736
|
+
white-space: nowrap;
|
|
1737
|
+
font-size: 12px;
|
|
1738
|
+
line-height: 1.3;
|
|
1739
|
+
color: var(--text-mute);
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
/* A nested group, revealed by expanding its parent row. Indented to the
|
|
1743
|
+
label column so the children line up under the text, not the icon. */
|
|
1744
|
+
/* Label takes the free space so a trailing chip or caret can sit at the
|
|
1745
|
+
inline end, and a long name truncates instead of widening the panel. */
|
|
1746
|
+
.ef-menu__label {
|
|
1747
|
+
flex: 1 1 auto;
|
|
1748
|
+
min-width: 0;
|
|
1749
|
+
overflow: hidden;
|
|
1750
|
+
text-overflow: ellipsis;
|
|
1751
|
+
white-space: nowrap;
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1754
|
+
.ef-menu__item .ef-menu__caret {
|
|
1755
|
+
margin-inline-start: auto;
|
|
1756
|
+
width: 12px;
|
|
1757
|
+
height: 12px;
|
|
1758
|
+
font-size: 12px;
|
|
1759
|
+
}
|
|
1760
|
+
|
|
1761
|
+
.ef-menu__item .ef-menu__badge {
|
|
1762
|
+
margin-inline-start: auto;
|
|
1763
|
+
flex: 0 0 auto;
|
|
1764
|
+
padding: 1px 7px;
|
|
1765
|
+
border-radius: var(--r-pill);
|
|
1766
|
+
background: var(--st-cancelled-fg);
|
|
1767
|
+
color: #fff;
|
|
1768
|
+
font-size: 11px;
|
|
1769
|
+
font-weight: 700;
|
|
1770
|
+
line-height: 1.5;
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1773
|
+
/* A popover reduced to a placement mechanism. The `.ef-menu` inside draws
|
|
1774
|
+
the surface, so PrimeNG must not draw a second panel or an arrow. */
|
|
1775
|
+
.p-popover.ef-menu-popover {
|
|
1776
|
+
background: transparent;
|
|
1777
|
+
border: 0;
|
|
1778
|
+
box-shadow: none;
|
|
1779
|
+
padding: 0;
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1782
|
+
.p-popover.ef-menu-popover .p-popover-content {
|
|
1783
|
+
padding: 0;
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
.p-popover.ef-menu-popover:before,
|
|
1787
|
+
.p-popover.ef-menu-popover:after {
|
|
1788
|
+
display: none;
|
|
1789
|
+
}
|
|
1790
|
+
|
|
1791
|
+
.ef-menu__sublist {
|
|
1792
|
+
display: grid;
|
|
1793
|
+
gap: 1px;
|
|
1794
|
+
margin: 0;
|
|
1795
|
+
padding: 0 0 2px 28px;
|
|
1796
|
+
list-style: none;
|
|
1797
|
+
min-width: 0;
|
|
1798
|
+
}
|
|
1799
|
+
|
|
1673
1800
|
/* When a row-actions menu is open inside a data card, the table-wrap
|
|
1674
1801
|
should let the popover escape its overflow. The data-card binds
|
|
1675
1802
|
.has-open-menu when any descendant trigger is in `.open` state. */
|
package/types/elasticias-ui.d.ts
CHANGED
|
@@ -1079,6 +1079,35 @@ declare class EfTooltipDirective {
|
|
|
1079
1079
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<EfTooltipDirective, "[efTooltip]", never, {}, {}, never, never, true, [{ directive: typeof i1.Tooltip; inputs: { "pTooltip": "efTooltip"; "tooltipPosition": "efTooltipPosition"; "tooltipDisabled": "efTooltipDisabled"; "tooltipStyleClass": "efTooltipStyleClass"; "tooltipEvent": "efTooltipEvent"; "showDelay": "efTooltipShowDelay"; "hideDelay": "efTooltipHideDelay"; "appendTo": "efTooltipAppendTo"; "autoHide": "efTooltipAutoHide"; "escape": "efTooltipEscape"; "life": "efTooltipLife"; }; outputs: {}; }]>;
|
|
1080
1080
|
}
|
|
1081
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* The keyboard-shortcuts reference: every registration currently sitting
|
|
1084
|
+
* in `EfShortcutService`, grouped and rendered with the same `.kbd` chip
|
|
1085
|
+
* `ef-row-actions` and `ef-menu` already use, so a chip means one thing
|
|
1086
|
+
* everywhere it appears.
|
|
1087
|
+
*
|
|
1088
|
+
* Reads `EfShortcutService.list()` directly, so it stays live: open it
|
|
1089
|
+
* while a row menu is on screen and its row-scoped shortcuts are already
|
|
1090
|
+
* listed under "Row actions". Close the row menu and, since a row's
|
|
1091
|
+
* shortcuts unregister with it, they're gone from here too.
|
|
1092
|
+
*
|
|
1093
|
+
* ```html
|
|
1094
|
+
* <ef-shortcuts-dialog [(visible)]="shortcutsOpen" />
|
|
1095
|
+
* ```
|
|
1096
|
+
*/
|
|
1097
|
+
declare class EfShortcutsDialogComponent {
|
|
1098
|
+
private readonly shortcutService;
|
|
1099
|
+
/** Two-way open state. */
|
|
1100
|
+
readonly visible: _angular_core.ModelSignal<boolean>;
|
|
1101
|
+
protected readonly groups: _angular_core.Signal<_elasticias_core.EfShortcutGroup[]>;
|
|
1102
|
+
/** Only macOS reads `⌘` at a glance. Everyone else needs the line
|
|
1103
|
+
* spelling out that it means Ctrl. */
|
|
1104
|
+
protected readonly isMacPlatform: boolean;
|
|
1105
|
+
protected readonly closeAction: EfDialogAction[];
|
|
1106
|
+
protected formatKeys(keys: string): string;
|
|
1107
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfShortcutsDialogComponent, never>;
|
|
1108
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfShortcutsDialogComponent, "ef-shortcuts-dialog", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; }, never, never, true, never>;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1082
1111
|
declare class EfFieldsetComponent {
|
|
1083
1112
|
/** Direct legend text (not translated) */
|
|
1084
1113
|
legend?: string;
|
|
@@ -1920,6 +1949,89 @@ declare class EfProfileChipComponent {
|
|
|
1920
1949
|
static ngAcceptInputType_readonly: unknown;
|
|
1921
1950
|
}
|
|
1922
1951
|
|
|
1952
|
+
/**
|
|
1953
|
+
* One row in `ef-profile-menu`.
|
|
1954
|
+
*
|
|
1955
|
+
* Navigation is a `command` like everything else: a host that wants to
|
|
1956
|
+
* route passes `command: () => this.router.navigate([...])`, which keeps
|
|
1957
|
+
* the lib free of `RouterModule`.
|
|
1958
|
+
*/
|
|
1959
|
+
interface EfProfileMenuItem {
|
|
1960
|
+
/** Stable identifier, used for tracking and for expansion state. */
|
|
1961
|
+
id: string;
|
|
1962
|
+
/** Translation key for the row label. */
|
|
1963
|
+
labelKey: string;
|
|
1964
|
+
/** PrimeIcons class, e.g. `'pi pi-user'`. */
|
|
1965
|
+
icon?: string;
|
|
1966
|
+
/** Trailing count pill. `0` renders; `undefined` and `null` do not. */
|
|
1967
|
+
badge?: string | number;
|
|
1968
|
+
/** `'danger'` tints the row, for log out and other one-way actions. */
|
|
1969
|
+
severity?: 'default' | 'danger';
|
|
1970
|
+
/** Draw a separating rule above this row. */
|
|
1971
|
+
groupStart?: boolean;
|
|
1972
|
+
/** Rows shown when this one is expanded. A row with children never
|
|
1973
|
+
* runs its own `command`; choosing it toggles the group. */
|
|
1974
|
+
children?: EfProfileMenuItem[];
|
|
1975
|
+
/** What choosing the row does. */
|
|
1976
|
+
command?: () => void;
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1979
|
+
/** The slice of PrimeNG's Popover this component actually calls. Typing it
|
|
1980
|
+
* structurally keeps the template ref usable and the tests free of PrimeNG. */
|
|
1981
|
+
interface Dismissible {
|
|
1982
|
+
hide: () => void;
|
|
1983
|
+
/** PrimeNG positions a popover once, when it opens. Expanding a group
|
|
1984
|
+
* changes the panel's height afterwards, so the host has to ask for a
|
|
1985
|
+
* reposition or the panel grows past the edge it was anchored to. */
|
|
1986
|
+
align?: () => void;
|
|
1987
|
+
}
|
|
1988
|
+
/**
|
|
1989
|
+
* The signed-in user's menu.
|
|
1990
|
+
*
|
|
1991
|
+
* Two renderings of one `items` array. `variant="chip"` (the default) shows
|
|
1992
|
+
* an `ef-profile-chip` that opens a popover, for the side footer on a
|
|
1993
|
+
* desktop. `variant="list"` renders the same rows flat, with no popover,
|
|
1994
|
+
* for the mobile sheet: `ef-app-shell` does not render the side footer on a
|
|
1995
|
+
* phone, and this menu is the only way to sign out, so it cannot live only
|
|
1996
|
+
* there.
|
|
1997
|
+
*
|
|
1998
|
+
* ```html
|
|
1999
|
+
* <ef-profile-menu
|
|
2000
|
+
* side-footer
|
|
2001
|
+
* [name]="userName()"
|
|
2002
|
+
* [secondary]="userEmail()"
|
|
2003
|
+
* [initial]="userInitial()"
|
|
2004
|
+
* [items]="menuItems()"
|
|
2005
|
+
* />
|
|
2006
|
+
* ```
|
|
2007
|
+
*/
|
|
2008
|
+
declare class EfProfileMenuComponent {
|
|
2009
|
+
/** Display name, shown on the chip and in the panel header. */
|
|
2010
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
2011
|
+
/** Second header line. The email, usually. */
|
|
2012
|
+
readonly secondary: _angular_core.InputSignal<string>;
|
|
2013
|
+
/** Chip subtitle. Falls back to `secondary` when empty. */
|
|
2014
|
+
readonly role: _angular_core.InputSignal<string>;
|
|
2015
|
+
/** Avatar glyph. Up to two characters; falls back to the first of `name`. */
|
|
2016
|
+
readonly initial: _angular_core.InputSignal<string>;
|
|
2017
|
+
readonly tone: _angular_core.InputSignal<"tenant" | "neutral">;
|
|
2018
|
+
readonly items: _angular_core.InputSignal<readonly EfProfileMenuItem[]>;
|
|
2019
|
+
readonly variant: _angular_core.InputSignal<"chip" | "list">;
|
|
2020
|
+
readonly itemSelected: _angular_core.OutputEmitterRef<EfProfileMenuItem>;
|
|
2021
|
+
/** Id of the one expanded group, or null. One at a time: a menu that
|
|
2022
|
+
* grows in two directions at once stops being scannable. */
|
|
2023
|
+
private readonly expandedId;
|
|
2024
|
+
readonly chipRole: _angular_core.Signal<string>;
|
|
2025
|
+
isExpanded(id: string): boolean;
|
|
2026
|
+
/**
|
|
2027
|
+
* Choose a row. A row with children toggles its group and leaves the
|
|
2028
|
+
* popover open; a leaf runs its command, reports it, and dismisses.
|
|
2029
|
+
*/
|
|
2030
|
+
select(item: EfProfileMenuItem, popover?: Dismissible): void;
|
|
2031
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfProfileMenuComponent, never>;
|
|
2032
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfProfileMenuComponent, "ef-profile-menu", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "role": { "alias": "role"; "required": false; "isSignal": true; }; "initial": { "alias": "initial"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "itemSelected": "itemSelected"; }, never, never, true, never>;
|
|
2033
|
+
}
|
|
2034
|
+
|
|
1923
2035
|
declare class EfBlockUiComponent {
|
|
1924
2036
|
isLoading: boolean;
|
|
1925
2037
|
contentPanel: any;
|
|
@@ -4246,7 +4358,11 @@ declare class EfDataCardComponent<TRow = any> implements AfterContentInit {
|
|
|
4246
4358
|
/** Items array for the auto row-actions cell. Rebuilt per call so
|
|
4247
4359
|
* the ef-row-actions component receives a fresh closure per row.
|
|
4248
4360
|
* Visibility is filtered later by ef-row-actions against
|
|
4249
|
-
* `rowActionsContext` (ScreenContext.isGranted).
|
|
4361
|
+
* `rowActionsContext` (ScreenContext.isGranted).
|
|
4362
|
+
*
|
|
4363
|
+
* `kbd` is rendered through `formatShortcut()`, not a literal glyph:
|
|
4364
|
+
* `ef-row-actions` binds these same keys for real while the row's
|
|
4365
|
+
* menu is open, and a hardcoded `'⌘D'` would lie to a Windows user. */
|
|
4250
4366
|
defaultRowActions(row: TRow): ReadonlyArray<EfRowAction>;
|
|
4251
4367
|
bodyTemplate(columnId: string): TemplateRef<unknown> | undefined;
|
|
4252
4368
|
headerTemplate(columnId: string): TemplateRef<unknown> | undefined;
|
|
@@ -4355,11 +4471,11 @@ declare class EfColumnHeaderTemplateDirective {
|
|
|
4355
4471
|
*
|
|
4356
4472
|
* ```ts
|
|
4357
4473
|
* actions: ReadonlyArray<EfRowAction> = [
|
|
4358
|
-
* { id: 'view', labelKey: 'common_view', icon: 'pi pi-eye', kbd: '
|
|
4474
|
+
* { id: 'view', labelKey: 'common_view', icon: 'pi pi-eye', kbd: formatShortcut('enter'),
|
|
4359
4475
|
* permission: Permissions.Read, command: () => view(row) },
|
|
4360
|
-
* { id: 'edit', labelKey: 'common_edit', icon: 'pi pi-pencil', kbd: '
|
|
4476
|
+
* { id: 'edit', labelKey: 'common_edit', icon: 'pi pi-pencil', kbd: formatShortcut('e'),
|
|
4361
4477
|
* permission: Permissions.Edit, command: () => edit(row) },
|
|
4362
|
-
* { id: 'duplicate', labelKey: 'common_duplicate', icon: 'pi pi-copy',
|
|
4478
|
+
* { id: 'duplicate', labelKey: 'common_duplicate', icon: 'pi pi-copy', kbd: formatShortcut('mod+d'),
|
|
4363
4479
|
* command: () => duplicate(row) },
|
|
4364
4480
|
* { separator: true },
|
|
4365
4481
|
* { id: 'delete', labelKey: 'common_delete', icon: 'pi pi-trash', severity: 'danger',
|
|
@@ -4385,9 +4501,25 @@ declare class EfColumnHeaderTemplateDirective {
|
|
|
4385
4501
|
* Permission filtering: pass `[context]="..."` (a `ScreenContext`); items
|
|
4386
4502
|
* declaring a `permission` are hidden unless that permission is granted.
|
|
4387
4503
|
* Items with no `permission` always show.
|
|
4504
|
+
*
|
|
4505
|
+
* The `kbd` hint is decorative unless it's one of `view` / `edit` /
|
|
4506
|
+
* `duplicate`: this component registers Enter, `E` and `mod+D` against
|
|
4507
|
+
* `EfShortcutService`, gated on `open()`, so they only fire while this
|
|
4508
|
+
* row's menu is on screen. Render `kbd` through `formatShortcut()` (as
|
|
4509
|
+
* above): a hardcoded `'⌘D'` is wrong for a Windows user, which is
|
|
4510
|
+
* exactly the bug this wiring fixes.
|
|
4388
4511
|
*/
|
|
4389
4512
|
declare class EfRowActionsComponent {
|
|
4390
4513
|
private readonly host;
|
|
4514
|
+
private readonly shortcuts;
|
|
4515
|
+
/** Distinguishes this instance's registrations from every other row's:
|
|
4516
|
+
* each row on screen constructs its own component, and ids must not
|
|
4517
|
+
* collide or one row's disposer (and its `when`) would clobber
|
|
4518
|
+
* another's still-live registration. */
|
|
4519
|
+
private static nextInstanceId;
|
|
4520
|
+
private readonly instanceId;
|
|
4521
|
+
constructor();
|
|
4522
|
+
private isFocusInsideMenu;
|
|
4391
4523
|
/** Action descriptors. */
|
|
4392
4524
|
readonly items: _angular_core.InputSignal<readonly EfRowAction[]>;
|
|
4393
4525
|
/** Optional context — when present, items with a `permission` are
|
|
@@ -4732,6 +4864,58 @@ declare class EfClearButtonComponent {
|
|
|
4732
4864
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfClearButtonComponent, "ef-clear-button", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "clear": "clear"; }, never, never, true, never>;
|
|
4733
4865
|
}
|
|
4734
4866
|
|
|
4867
|
+
/** What the form hands back. `currentPassword` is absent when the host
|
|
4868
|
+
* did not ask for one (an administrator resetting someone else's). */
|
|
4869
|
+
interface EfChangePasswordSubmit {
|
|
4870
|
+
currentPassword?: string;
|
|
4871
|
+
newPassword: string;
|
|
4872
|
+
}
|
|
4873
|
+
/**
|
|
4874
|
+
* Password form, deliberately without an API client.
|
|
4875
|
+
*
|
|
4876
|
+
* `@elasticias/ui` cannot import an app's generated HTTP client, and that
|
|
4877
|
+
* limitation is what makes one component serve two different endpoints: a
|
|
4878
|
+
* user changing their own password proves the old one, an administrator
|
|
4879
|
+
* resetting someone else's does not. The host reads `canSubmit()`, calls
|
|
4880
|
+
* `submit()` from its dialog footer, and listens to `submitted`.
|
|
4881
|
+
*
|
|
4882
|
+
* ```html
|
|
4883
|
+
* <ef-change-password
|
|
4884
|
+
* #form
|
|
4885
|
+
* [requireCurrent]="!userId()"
|
|
4886
|
+
* [busy]="saving()"
|
|
4887
|
+
* [errors]="serverErrors()"
|
|
4888
|
+
* (submitted)="save($event)"
|
|
4889
|
+
* />
|
|
4890
|
+
* ```
|
|
4891
|
+
*
|
|
4892
|
+
* There is no `reset()`: hosts mount it under `@if`, so every open is a
|
|
4893
|
+
* fresh instance.
|
|
4894
|
+
*/
|
|
4895
|
+
declare class EfChangePasswordComponent {
|
|
4896
|
+
/** Ask for the existing password. False for an administrator reset. */
|
|
4897
|
+
readonly requireCurrent: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4898
|
+
/** A request is in flight: the form refuses to submit again. */
|
|
4899
|
+
readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
4900
|
+
/** Already-translated server messages, rendered under the fields. */
|
|
4901
|
+
readonly errors: _angular_core.InputSignal<readonly string[]>;
|
|
4902
|
+
/** Minimum length. Kept in step with the backend validator's 8. */
|
|
4903
|
+
readonly minLength: _angular_core.InputSignal<number>;
|
|
4904
|
+
readonly submitted: _angular_core.OutputEmitterRef<EfChangePasswordSubmit>;
|
|
4905
|
+
readonly currentPassword: _angular_core.WritableSignal<string>;
|
|
4906
|
+
readonly newPassword: _angular_core.WritableSignal<string>;
|
|
4907
|
+
readonly confirmation: _angular_core.WritableSignal<string>;
|
|
4908
|
+
/**
|
|
4909
|
+
* Translation keys for every rule the current input breaks. Empty while
|
|
4910
|
+
* the user has typed nothing, so the form does not scold on open.
|
|
4911
|
+
*/
|
|
4912
|
+
readonly validationKeys: _angular_core.Signal<string[]>;
|
|
4913
|
+
readonly canSubmit: _angular_core.Signal<boolean>;
|
|
4914
|
+
submit(): void;
|
|
4915
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EfChangePasswordComponent, never>;
|
|
4916
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfChangePasswordComponent, "ef-change-password", never, { "requireCurrent": { "alias": "requireCurrent"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; }, { "submitted": "submitted"; }, never, never, true, never>;
|
|
4917
|
+
}
|
|
4918
|
+
|
|
4735
4919
|
/**
|
|
4736
4920
|
* Native Comptoir textarea — no PrimeNG wrapper. Pairs with the
|
|
4737
4921
|
* `.ef-textarea` rule in `@elasticias/ui/styles/patterns` (focus
|
|
@@ -5318,5 +5502,5 @@ declare class EfEmailMetricsCardComponent {
|
|
|
5318
5502
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EfEmailMetricsCardComponent, "ef-email-metrics-card", never, { "metrics": { "alias": "metrics"; "required": false; "isSignal": true; }; "recentEvents": { "alias": "recentEvents"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; }, never, never, true, never>;
|
|
5319
5503
|
}
|
|
5320
5504
|
|
|
5321
|
-
export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRankListComponent, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfServerErrorsDirective, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
|
|
5322
|
-
export type { CatalogueProduct, CatalogueProductVariant, CategoryAssignment, CategoryGroup, CategoryItem, DatatableSearchEntity, DocumentConfig, EfAboutServer, EfBadgeColor, EfBadgeConfig, EfBadgeSize, EfBadgeVariant, EfButtonComptoirSeverity, EfButtonPrimeNGSeverity, EfButtonSeverity, EfChangeHistoryEntry, EfChangeHistoryFieldChange, EfChartSeries, EfChartType, EfDataCardMobileLayout, EfDataCardRowAction, EfDatatableActions, EfDatatableColumn, EfDatatableColumnAlign, EfDatatableColumnType, EfDatatableConfig, EfDateFieldValue, EfDatePreset, EfDialogAction, EfDialogSeverity, EfDialogSize, EfFabPosition, EfKpiDeltaTone, EfKpiSparkline, EfPillItem, EfPresetItem, EfRankRow, EfRowAction, EfSkeletonVariant, EfStatsRow, EfStatusColor, EfStatusReferenceItem, EfTabItem, EfTabsModule, EfTabsVariant, EfTimelineItem, EfTimelineState, EfToastRegionPosition, EfTotalsGrand, EfTotalsRow, HighlightSegment, OrderChangeInfo, OrderEntity, OrderLineItem, OrderProductsSummary, OrderSummaryItem, ProductCountGroup, ProductCountGroupLabel, ProductTypeaheadRow, ProductTypeaheadSelection, ProductWithCountGroup, SelectedFilter, ValidationResult };
|
|
5505
|
+
export { EF_BADGE_BG_COLORS, EF_BADGE_BG_LIGHT_COLORS, EF_BADGE_BORDER_COLORS, EF_BADGE_DEFAULTS, EF_BADGE_TEXT_COLORS, EF_CHART_PALETTE, EF_DATATABLE_ACTIONS_DEFAULTS, EF_DATATABLE_COLUMN_DEFAULTS, EF_DATATABLE_DEFAULTS, EF_DATA_CARD_MOBILE_LAYOUT, EF_STATUS_COLORS, EF_STATUS_COLOR_ALIASES, EfAboutDialogComponent, EfActivationFilterComponent, EfAppMainComponent, EfAppShellComponent, EfAppShellMobileComponent, EfAppTopComponent, EfBadgeComponent, EfBlockUiComponent, EfBlockableDivComponent, EfBottomSheetComponent, EfBuildStampComponent, EfBulkBarComponent, EfButtonComponent, EfButtonGroupComponent, EfCardComponent, EfChangeHistoryComponent, EfChangePasswordComponent, EfChartComponent, EfCheckboxComponent, EfClearButtonComponent, EfColumnHeaderTemplateDirective, EfColumnTemplateDirective, EfCompactPipe, EfConfirmDialogComponent, EfCurrencyPipe, EfDataCardComponent, EfDatatableActionBarComponent, EfDatatableComponent, EfDatepickerAdvancedComponent, EfDatepickerComponent, EfDetailToolbarComponent, EfDialogComponent, EfEmailMetricsCardComponent, EfEmptyStateComponent, EfFabComponent, EfFieldsetComponent, EfFilterDrawerComponent, EfFilterPillComponent, EfFormGridComponent, EfInputNumberComponent, EfInputTextComponent, EfKpiCardComponent, EfLabelComponent, EfModuleRailComponent, EfModuleSideComponent, EfMultiSelectComponent, EfOrderBuilderComponent, EfOrderSummaryComponent, EfPagerComponent, EfPasswordComponent, EfPdfPreviewComponent, EfPillGroupComponent, EfPresetPillComponent, EfPriceDisplayComponent, EfProductCatalogueComponent, EfProductCatalogueFilterComponent, EfProductTypeaheadComponent, EfProfileChipComponent, EfProfileMenuComponent, EfPulseComponent, EfQuantitySelectorComponent, EfQuantityStepperComponent, EfRankListComponent, EfRowActionsComponent, EfSearchToolbarComponent, EfSelectButtonComponent, EfSelectComponent, EfServerErrorsDirective, EfShortcutsDialogComponent, EfSkeletonComponent, EfSmartBarComponent, EfStatsComponent, EfStatusChipComponent, EfTabPanelDirective, EfTabsComponent, EfTextareaComponent, EfThemeConfiguratorComponent, EfThemeToggleComponent, EfTimelineComponent, EfToastRegionComponent, EfToggleSwitchComponent, EfToolbarComponent, EfTooltipDirective, EfTotalsComponent, OrderEntityHelper, OrderLineItemHelper, TruncatePipe, buildChartConfig, getColumnAlignment, mergeColumnDefaults, resolveEfStatusColor };
|
|
5506
|
+
export type { CatalogueProduct, CatalogueProductVariant, CategoryAssignment, CategoryGroup, CategoryItem, DatatableSearchEntity, DocumentConfig, EfAboutServer, EfBadgeColor, EfBadgeConfig, EfBadgeSize, EfBadgeVariant, EfButtonComptoirSeverity, EfButtonPrimeNGSeverity, EfButtonSeverity, EfChangeHistoryEntry, EfChangeHistoryFieldChange, EfChangePasswordSubmit, EfChartSeries, EfChartType, EfDataCardMobileLayout, EfDataCardRowAction, EfDatatableActions, EfDatatableColumn, EfDatatableColumnAlign, EfDatatableColumnType, EfDatatableConfig, EfDateFieldValue, EfDatePreset, EfDialogAction, EfDialogSeverity, EfDialogSize, EfFabPosition, EfKpiDeltaTone, EfKpiSparkline, EfPillItem, EfPresetItem, EfProfileMenuItem, EfRankRow, EfRowAction, EfSkeletonVariant, EfStatsRow, EfStatusColor, EfStatusReferenceItem, EfTabItem, EfTabsModule, EfTabsVariant, EfTimelineItem, EfTimelineState, EfToastRegionPosition, EfTotalsGrand, EfTotalsRow, HighlightSegment, OrderChangeInfo, OrderEntity, OrderLineItem, OrderProductsSummary, OrderSummaryItem, ProductCountGroup, ProductCountGroupLabel, ProductTypeaheadRow, ProductTypeaheadSelection, ProductWithCountGroup, SelectedFilter, ValidationResult };
|