@orianatech/pire 0.6.0 → 0.7.0
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/dist/components/core/IconButton.d.cts +12 -0
- package/dist/components/core/IconButton.d.ts +12 -0
- package/dist/components/core/IconButton.d.ts.map +1 -1
- package/dist/components/data/DataTable.d.cts +7 -1
- package/dist/components/data/DataTable.d.ts +7 -1
- package/dist/components/data/DataTable.d.ts.map +1 -1
- package/dist/components/layout/PageBand.d.cts +15 -0
- package/dist/components/layout/PageBand.d.ts +16 -0
- package/dist/components/layout/PageBand.d.ts.map +1 -0
- package/dist/components.css +18 -0
- package/dist/i18n/messages.d.cts +2 -0
- package/dist/i18n/messages.d.ts +2 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/index.cjs +308 -240
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +394 -327
- package/dist/index.js.map +1 -1
- package/dist/tokens/base.css +3 -0
- package/package.json +1 -1
|
@@ -10,6 +10,18 @@ export interface IconButtonProps extends Omit<AriaButtonProps, 'className' | 'ch
|
|
|
10
10
|
selected?: boolean;
|
|
11
11
|
/** Suppress the tooltip when the control already sits inside one. */
|
|
12
12
|
hideTooltip?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Indicator over the icon. `0` and `undefined` draw nothing — a badge reading "0" is noise.
|
|
15
|
+
*
|
|
16
|
+
* Drawn `aria-hidden`, so **`label` must carry the number itself** ("Notifications, 3 unread").
|
|
17
|
+
* Pire cannot compose that sentence: it does not know the noun, and word order differs by
|
|
18
|
+
* language. Passing `count` without putting it in `label` hides the count from screen readers.
|
|
19
|
+
*/
|
|
20
|
+
count?: number;
|
|
21
|
+
/** Cap before rendering "N+". Default 9. */
|
|
22
|
+
countMax?: number;
|
|
23
|
+
/** `dot` when "something is new" is the whole message and the number adds nothing. */
|
|
24
|
+
countVariant?: 'number' | 'dot';
|
|
13
25
|
className?: string;
|
|
14
26
|
}
|
|
15
27
|
export declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -10,6 +10,18 @@ export interface IconButtonProps extends Omit<AriaButtonProps, 'className' | 'ch
|
|
|
10
10
|
selected?: boolean;
|
|
11
11
|
/** Suppress the tooltip when the control already sits inside one. */
|
|
12
12
|
hideTooltip?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Indicator over the icon. `0` and `undefined` draw nothing — a badge reading "0" is noise.
|
|
15
|
+
*
|
|
16
|
+
* Drawn `aria-hidden`, so **`label` must carry the number itself** ("Notifications, 3 unread").
|
|
17
|
+
* Pire cannot compose that sentence: it does not know the noun, and word order differs by
|
|
18
|
+
* language. Passing `count` without putting it in `label` hides the count from screen readers.
|
|
19
|
+
*/
|
|
20
|
+
count?: number;
|
|
21
|
+
/** Cap before rendering "N+". Default 9. */
|
|
22
|
+
countMax?: number;
|
|
23
|
+
/** `dot` when "something is new" is the whole message and the number adds nothing. */
|
|
24
|
+
countVariant?: 'number' | 'dot';
|
|
13
25
|
className?: string;
|
|
14
26
|
}
|
|
15
27
|
export declare const IconButton: React.ForwardRefExoticComponent<IconButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/components/core/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAwB,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKlG,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IACrG,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/components/core/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAwB,KAAK,WAAW,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKlG,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,UAAU,GAAG,YAAY,CAAC;IACrG,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,YAAY,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,UAAU,2FAkBrB,CAAC"}
|
|
@@ -29,6 +29,12 @@ export interface DataTableProps<T extends {
|
|
|
29
29
|
onSortChange?: (sort: DataTableSort) => void;
|
|
30
30
|
onRowAction?: (row: T) => void;
|
|
31
31
|
emptyLabel?: React.ReactNode;
|
|
32
|
+
/** Swaps the body for skeleton rows derived from `columns` and `density`, keeping the header. */
|
|
33
|
+
isLoading?: boolean;
|
|
34
|
+
/** Skeleton row count. Defaults to the current `rows` length, or 5 when there are none. */
|
|
35
|
+
loadingRowCount?: number;
|
|
36
|
+
/** Overrides the dictionary's `dataTableLoading`, announced while the body is a skeleton. */
|
|
37
|
+
loadingLabel?: string;
|
|
32
38
|
stickyHeader?: boolean;
|
|
33
39
|
className?: string;
|
|
34
40
|
style?: React.CSSProperties;
|
|
@@ -37,4 +43,4 @@ export interface DataTableProps<T extends {
|
|
|
37
43
|
* screen-reader row/column announcements — do not hand-roll a <table> in product code. */
|
|
38
44
|
export declare function DataTable<T extends {
|
|
39
45
|
id: string | number;
|
|
40
|
-
}>({ columns, rows, density, selectable, selected, onSelectionChange, sort, onSortChange, onRowAction, stickyHeader, emptyLabel, className, style, ...rest }: DataTableProps<T>): React.JSX.Element;
|
|
46
|
+
}>({ columns, rows, density, selectable, selected, onSelectionChange, sort, onSortChange, onRowAction, stickyHeader, emptyLabel, isLoading, loadingRowCount, loadingLabel, className, style, ...rest }: DataTableProps<T>): React.JSX.Element;
|
|
@@ -29,6 +29,12 @@ export interface DataTableProps<T extends {
|
|
|
29
29
|
onSortChange?: (sort: DataTableSort) => void;
|
|
30
30
|
onRowAction?: (row: T) => void;
|
|
31
31
|
emptyLabel?: React.ReactNode;
|
|
32
|
+
/** Swaps the body for skeleton rows derived from `columns` and `density`, keeping the header. */
|
|
33
|
+
isLoading?: boolean;
|
|
34
|
+
/** Skeleton row count. Defaults to the current `rows` length, or 5 when there are none. */
|
|
35
|
+
loadingRowCount?: number;
|
|
36
|
+
/** Overrides the dictionary's `dataTableLoading`, announced while the body is a skeleton. */
|
|
37
|
+
loadingLabel?: string;
|
|
32
38
|
stickyHeader?: boolean;
|
|
33
39
|
className?: string;
|
|
34
40
|
style?: React.CSSProperties;
|
|
@@ -37,5 +43,5 @@ export interface DataTableProps<T extends {
|
|
|
37
43
|
* screen-reader row/column announcements — do not hand-roll a <table> in product code. */
|
|
38
44
|
export declare function DataTable<T extends {
|
|
39
45
|
id: string | number;
|
|
40
|
-
}>({ columns, rows, density, selectable, selected, onSelectionChange, sort, onSortChange, onRowAction, stickyHeader, emptyLabel, className, style, ...rest }: DataTableProps<T>): React.JSX.Element;
|
|
46
|
+
}>({ columns, rows, density, selectable, selected, onSelectionChange, sort, onSortChange, onRowAction, stickyHeader, emptyLabel, isLoading, loadingRowCount, loadingLabel, className, style, ...rest }: DataTableProps<T>): React.JSX.Element;
|
|
41
47
|
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../src/components/data/DataTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AASpC,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,wFAAwF;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAAG,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE;AAEnE,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG,GAAG;IACrE,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,oEAAoE;IACpE,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IAC1D,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,iGAAiG;IACjG,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;2FAC2F;AAC3F,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAmB,EAC/F,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,YAAmB,EAC7F,UAAoD,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAC9F,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,qBAkF/C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
export interface PageBandProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** `card` for a header band, `page` for a filter band or the body behind the content. */
|
|
4
|
+
surface?: 'card' | 'page';
|
|
5
|
+
/** `false` when the band below continues the same block and a rule would cut it in two. */
|
|
6
|
+
hasBorder?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The full-bleed horizontal band an ERP screen is built from: header, filters, body.
|
|
11
|
+
*
|
|
12
|
+
* Holds a `PageHeader`, `ObjectHeader`, `FilterBar` or edge-to-edge `Tabs`, supplying the page
|
|
13
|
+
* gutter and the surface those components deliberately leave to their container.
|
|
14
|
+
*/
|
|
15
|
+
export declare function PageBand({ surface, hasBorder, children, className, ...rest }: PageBandProps): React.JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type * as React from 'react';
|
|
2
|
+
export interface PageBandProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** `card` for a header band, `page` for a filter band or the body behind the content. */
|
|
4
|
+
surface?: 'card' | 'page';
|
|
5
|
+
/** `false` when the band below continues the same block and a rule would cut it in two. */
|
|
6
|
+
hasBorder?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The full-bleed horizontal band an ERP screen is built from: header, filters, body.
|
|
11
|
+
*
|
|
12
|
+
* Holds a `PageHeader`, `ObjectHeader`, `FilterBar` or edge-to-edge `Tabs`, supplying the page
|
|
13
|
+
* gutter and the surface those components deliberately leave to their container.
|
|
14
|
+
*/
|
|
15
|
+
export declare function PageBand({ surface, hasBorder, children, className, ...rest }: PageBandProps): React.JSX.Element;
|
|
16
|
+
//# sourceMappingURL=PageBand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageBand.d.ts","sourceRoot":"","sources":["../../../src/components/layout/PageBand.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,MAAM,WAAW,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACzE,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,2FAA2F;IAC3F,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAAE,SAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EACjE,EAAE,aAAa,qBAWf"}
|
package/dist/components.css
CHANGED
|
@@ -481,6 +481,24 @@
|
|
|
481
481
|
.pire-menu-section-title{display:block;padding:var(--sp-1) var(--sp-3);font:var(--type-label);letter-spacing:var(--ls-caps);text-transform:uppercase;color:var(--text-secondary)}
|
|
482
482
|
.pire-menu-separator{border:0;border-top:var(--border-w-hairline) solid var(--border-subtle);margin:var(--sp-1) 0}
|
|
483
483
|
|
|
484
|
+
/* ---- PageBand ------------------------------------------------------------ */
|
|
485
|
+
.pire-pageband{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-4) var(--page-pad-x);background:var(--surface-card)}
|
|
486
|
+
.pire-pageband[data-surface="page"]{background:var(--surface-page)}
|
|
487
|
+
.pire-pageband[data-border="true"]{border-bottom:1px solid var(--border-subtle)}
|
|
488
|
+
|
|
489
|
+
/* ---- IconButton count ---------------------------------------------------- */
|
|
490
|
+
/* Sits over the icon's top-right. The button is position:relative only when a count is present,
|
|
491
|
+
so nothing else about its layout changes for the common case. */
|
|
492
|
+
.pire-iconbtn[data-has-count="true"]{position:relative}
|
|
493
|
+
.pire-iconbtn-count{position:absolute;top:2px;right:2px;display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;padding:0 var(--sp-1);border-radius:var(--radius-pill);background:var(--status-negative-fg);color:var(--text-inverse);font:var(--type-micro);font-weight:var(--fw-semibold);line-height:1;pointer-events:none}
|
|
494
|
+
.pire-iconbtn-count[data-variant="dot"]{min-width:8px;width:8px;height:8px;padding:0;top:4px;right:4px}
|
|
495
|
+
.pire-iconbtn[data-variant="inverse"] .pire-iconbtn-count{box-shadow:0 0 0 2px var(--surface-shell)}
|
|
496
|
+
|
|
497
|
+
/* ---- DataTable loading --------------------------------------------------- */
|
|
498
|
+
/* renderEmptyState gives one node for the whole body, so the skeleton rows stack inside it while
|
|
499
|
+
the real header stays mounted above — which is what stops the grid resizing mid-reload. */
|
|
500
|
+
.pire-table-loading{display:flex;flex-direction:column}
|
|
501
|
+
|
|
484
502
|
/* ---- Reduced motion --------------------------------------------------- */
|
|
485
503
|
@media (prefers-reduced-motion: reduce){.pire-modal,.pire-toast,.pire-popover,.pire-tooltip,.pire-sidepanel{animation:none}
|
|
486
504
|
/* The skeleton also drops its background sweep, not just the animation: an infinite shimmer is
|
package/dist/i18n/messages.d.cts
CHANGED
|
@@ -19,6 +19,8 @@ export interface PireMessages {
|
|
|
19
19
|
dataTableSelectAll: string;
|
|
20
20
|
/** Accessible name of a row's selection checkbox. */
|
|
21
21
|
dataTableSelectRow: string;
|
|
22
|
+
/** Announced while the table body is a skeleton. */
|
|
23
|
+
dataTableLoading: string;
|
|
22
24
|
/** Accessible name of the dialog's close affordance. */
|
|
23
25
|
dialogClose: string;
|
|
24
26
|
/** Accessible name of SidePanel's close affordance. */
|
package/dist/i18n/messages.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ export interface PireMessages {
|
|
|
19
19
|
dataTableSelectAll: string;
|
|
20
20
|
/** Accessible name of a row's selection checkbox. */
|
|
21
21
|
dataTableSelectRow: string;
|
|
22
|
+
/** Announced while the table body is a skeleton. */
|
|
23
|
+
dataTableLoading: string;
|
|
22
24
|
/** Accessible name of the dialog's close affordance. */
|
|
23
25
|
dialogClose: string;
|
|
24
26
|
/** Accessible name of SidePanel's close affordance. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAE1B,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAE1B,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,CAAC;IAEzB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IAEvB,6DAA6D;IAC7D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,kEAAkE;IAClE,uBAAuB,EAAE,MAAM,CAAC;IAEhC,qEAAqE;IACrE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAE5B,oDAAoD;IACpD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAE5B,kEAAkE;IAClE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,uBAAuB,EAAE,MAAM,CAAC;IAChC,uEAAuE;IACvE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yDAAyD;IACzD,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uDAAuD;IACvD,qBAAqB,EAAE,MAAM,CAAC;IAE9B,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAE9B,0FAA0F;IAC1F,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,UAAU,EAAE,YAuCxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,YAuCxB,CAAC"}
|