@speakeasy-api/moonshine 1.36.1 → 1.38.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.
Files changed (26) hide show
  1. package/dist/components/Table/index.d.ts +30 -4
  2. package/dist/components/Table/sorting.d.ts +31 -0
  3. package/dist/{createCustomLucideIcon-D-gFRvUd.mjs → createCustomLucideIcon-PXfw4lT4.mjs} +2 -2
  4. package/dist/{createCustomLucideIcon-D-gFRvUd.mjs.map → createCustomLucideIcon-PXfw4lT4.mjs.map} +1 -1
  5. package/dist/{gems-C9gEGS_l.mjs → gems-B2uZHIOZ.mjs} +2 -2
  6. package/dist/{gems-C9gEGS_l.mjs.map → gems-B2uZHIOZ.mjs.map} +1 -1
  7. package/dist/{go-C9P0gGBL.mjs → go-DkxSUbdC.mjs} +2 -2
  8. package/dist/{go-C9P0gGBL.mjs.map → go-DkxSUbdC.mjs.map} +1 -1
  9. package/dist/{index-B333GcaX.mjs → index-BMwTVKfO.mjs} +2903 -2777
  10. package/dist/index-BMwTVKfO.mjs.map +1 -0
  11. package/dist/index.d.ts +2 -1
  12. package/dist/{maven-C8d6w32K.mjs → maven-0m_0YhcW.mjs} +2 -2
  13. package/dist/{maven-C8d6w32K.mjs.map → maven-0m_0YhcW.mjs.map} +1 -1
  14. package/dist/moonshine.es.js +17 -16
  15. package/dist/{npm-BObhxj3J.mjs → npm-C-bOlvs0.mjs} +2 -2
  16. package/dist/{npm-BObhxj3J.mjs.map → npm-C-bOlvs0.mjs.map} +1 -1
  17. package/dist/{nuget-BVH-Ny8G.mjs → nuget-DjNpwz-r.mjs} +2 -2
  18. package/dist/{nuget-BVH-Ny8G.mjs.map → nuget-DjNpwz-r.mjs.map} +1 -1
  19. package/dist/{packagist-C1UMnDsn.mjs → packagist-Ce_Byfj6.mjs} +2 -2
  20. package/dist/{packagist-C1UMnDsn.mjs.map → packagist-Ce_Byfj6.mjs.map} +1 -1
  21. package/dist/{pypi-i9XQRZGp.mjs → pypi-D6-7tJjw.mjs} +2 -2
  22. package/dist/{pypi-i9XQRZGp.mjs.map → pypi-D6-7tJjw.mjs.map} +1 -1
  23. package/dist/style.css +1 -1
  24. package/package.json +10 -10
  25. package/types/utilities.d.ts +1 -1
  26. package/dist/index-B333GcaX.mjs.map +0 -1
@@ -1,10 +1,31 @@
1
1
  import { default as React, PropsWithChildren, ReactNode } from 'react';
2
- export type Column<T extends object> = {
3
- key: keyof T | string;
2
+ export type SortDirection = 'asc' | 'desc';
3
+ export type SortValue = string | number | boolean | Date | null | undefined;
4
+ type ColumnKey<T extends object> = keyof T | string;
5
+ export type SortDescriptor = {
6
+ id: string;
7
+ direction: SortDirection;
8
+ };
9
+ type BaseColumn<T extends object> = {
10
+ key: ColumnKey<T>;
11
+ id?: string;
4
12
  header: ReactNode;
5
13
  render?: (row: T) => ReactNode;
6
14
  width?: `${number}fr` | `${number}px` | 'auto' | undefined;
7
15
  };
16
+ export type SortableColumn<T extends object> = BaseColumn<T> & {
17
+ sortable: true;
18
+ sortLabel?: string;
19
+ sortValue: (row: T) => SortValue;
20
+ sortCompare?: (a: T, b: T) => number;
21
+ };
22
+ type UnsortableColumn<T extends object> = BaseColumn<T> & {
23
+ sortable?: false;
24
+ sortLabel?: never;
25
+ sortValue?: never;
26
+ sortCompare?: never;
27
+ };
28
+ export type Column<T extends object> = SortableColumn<T> | UnsortableColumn<T>;
8
29
  export type Group<T extends object> = {
9
30
  key: string;
10
31
  items: T[];
@@ -27,6 +48,8 @@ export type TableProps<T extends object> = {
27
48
  className?: string;
28
49
  cellPadding?: CellPadding;
29
50
  hideHeader?: boolean;
51
+ sort?: SortDescriptor | null;
52
+ onSortChange?: (sort: SortDescriptor | null) => void;
30
53
  };
31
54
  export type TableWrapperProps<T extends object> = PropsWithChildrenAndClassName & {
32
55
  columns: Column<T>[];
@@ -35,6 +58,8 @@ export type TableWrapperProps<T extends object> = PropsWithChildrenAndClassName
35
58
  declare function TableRoot<T extends object>(props: TableProps<T> | TableWrapperProps<T>): import("react/jsx-runtime").JSX.Element;
36
59
  type HeaderProps<T extends object> = {
37
60
  columns: Column<T>[];
61
+ sort?: SortDescriptor | null;
62
+ onSortChange?: (sort: SortDescriptor | null) => void;
38
63
  className?: string;
39
64
  };
40
65
  declare function Header<T extends object>(props: HeaderProps<T> | PropsWithChildrenAndClassName): import("react/jsx-runtime").JSX.Element;
@@ -76,9 +101,10 @@ type CellProps<T extends object> = {
76
101
  };
77
102
  declare function Cell<T extends object>(props: CellProps<T> | PropsWithChildrenAndClassName): import("react/jsx-runtime").JSX.Element;
78
103
  declare function NoResultsMessage({ className, children, }: PropsWithChildrenAndClassName): import("react/jsx-runtime").JSX.Element;
79
- declare function HeaderCell({ className, children, }: PropsWithChildren<{
104
+ type HeaderCellProps = React.ThHTMLAttributes<HTMLTableCellElement> & PropsWithChildren<{
80
105
  className?: string;
81
- }>): import("react/jsx-runtime").JSX.Element;
106
+ }>;
107
+ declare function HeaderCell({ className, children, ...props }: HeaderCellProps): import("react/jsx-runtime").JSX.Element;
82
108
  export declare const Table: typeof TableRoot & {
83
109
  Header: typeof Header & {
84
110
  Cell: typeof HeaderCell;
@@ -0,0 +1,31 @@
1
+ import { Column, Group, SortableColumn, SortDescriptor, SortDirection, SortValue } from './index';
2
+ export declare function isSortableColumn<T extends object>(column: Column<T>): column is SortableColumn<T>;
3
+ export declare function getColumnSortId<T extends object>(column: Column<T>): string;
4
+ export declare function compareSortValues(a: SortValue, b: SortValue): number;
5
+ export declare function sortRows<T extends object>(rows: T[], column: SortableColumn<T>, direction: SortDirection): T[];
6
+ /**
7
+ * Sorts table data with the same sort descriptors emitted by `Table`.
8
+ *
9
+ * `Table` only renders sortable headers and calls `onSortChange`; it never
10
+ * reorders `data` internally. Use this helper when the caller wants simple
11
+ * client-side sorting for rows already loaded in memory.
12
+ *
13
+ * For grouped data, group order is preserved and only each group's `items`
14
+ * array is sorted. If `sort` is `null` or references a missing/non-sortable
15
+ * column, the original `data` reference is returned unchanged.
16
+ *
17
+ * @example
18
+ * const [sort, setSort] = useState<SortDescriptor | null>(null)
19
+ * const sortedData = sortTableData(data, columns, sort)
20
+ *
21
+ * return (
22
+ * <Table
23
+ * columns={columns}
24
+ * data={sortedData}
25
+ * rowKey={(row) => row.id}
26
+ * sort={sort}
27
+ * onSortChange={setSort}
28
+ * />
29
+ * )
30
+ */
31
+ export declare function sortTableData<T extends object>(data: T[] | Group<T>[], columns: Column<T>[], sort: SortDescriptor | null | undefined): T[] | Group<T>[];
@@ -1,4 +1,4 @@
1
- import { c as s, t as n } from "./index-B333GcaX.mjs";
1
+ import { c as s, t as n } from "./index-BMwTVKfO.mjs";
2
2
  import { Icon as p } from "lucide-react";
3
3
  import { forwardRef as f, createElement as i } from "react";
4
4
  const C = (e, t, r) => {
@@ -16,4 +16,4 @@ const C = (e, t, r) => {
16
16
  export {
17
17
  C as c
18
18
  };
19
- //# sourceMappingURL=createCustomLucideIcon-D-gFRvUd.mjs.map
19
+ //# sourceMappingURL=createCustomLucideIcon-PXfw4lT4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"createCustomLucideIcon-D-gFRvUd.mjs","sources":["../src/components/Icon/customIcons/createCustomLucideIcon.ts"],"sourcesContent":["import { cn, toKebabCase } from '@/lib/utils'\nimport { Icon, IconNode, LucideProps } from 'lucide-react'\nimport { createElement, forwardRef } from 'react'\n\nconst createCustomLucideIcon = (\n iconName: string,\n iconNode: IconNode,\n lucideProps?: Partial<LucideProps>\n) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(\n ({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: cn(`lucide-${toKebabCase(iconName)}`, className),\n ...{ ...(lucideProps ?? {}), ...props },\n })\n )\n\n Component.displayName = `${iconName}`\n\n return Component\n}\n\nexport default createCustomLucideIcon\n"],"names":["createCustomLucideIcon","iconName","iconNode","lucideProps","Component","forwardRef","className","props","ref","createElement","Icon","cn","toKebabCase"],"mappings":";;;AAIA,MAAMA,IAAyB,CAC7BC,GACAC,GACAC,MACG;AACH,QAAMC,IAAYC;AAAA,IAChB,CAAC,EAAE,WAAAC,GAAW,GAAGC,KAASC,MACxBC,EAAcC,GAAM;AAAA,MAClB,KAAAF;AAAA,MACA,UAAAN;AAAA,MACA,WAAWS,EAAG,UAAUC,EAAYX,CAAQ,CAAC,IAAIK,CAAS;AAAA,MACrD,GAAIH,KAAe,CAAA;AAAA,MAAK,GAAGI;AAAA,IAAM,CACvC;AAAA,EAAA;AAGL,SAAAH,EAAU,cAAc,GAAGH,CAAQ,IAE5BG;AACT;"}
1
+ {"version":3,"file":"createCustomLucideIcon-PXfw4lT4.mjs","sources":["../src/components/Icon/customIcons/createCustomLucideIcon.ts"],"sourcesContent":["import { cn, toKebabCase } from '@/lib/utils'\nimport { Icon, IconNode, LucideProps } from 'lucide-react'\nimport { createElement, forwardRef } from 'react'\n\nconst createCustomLucideIcon = (\n iconName: string,\n iconNode: IconNode,\n lucideProps?: Partial<LucideProps>\n) => {\n const Component = forwardRef<SVGSVGElement, LucideProps>(\n ({ className, ...props }, ref) =>\n createElement(Icon, {\n ref,\n iconNode,\n className: cn(`lucide-${toKebabCase(iconName)}`, className),\n ...{ ...(lucideProps ?? {}), ...props },\n })\n )\n\n Component.displayName = `${iconName}`\n\n return Component\n}\n\nexport default createCustomLucideIcon\n"],"names":["createCustomLucideIcon","iconName","iconNode","lucideProps","Component","forwardRef","className","props","ref","createElement","Icon","cn","toKebabCase"],"mappings":";;;AAIA,MAAMA,IAAyB,CAC7BC,GACAC,GACAC,MACG;AACH,QAAMC,IAAYC;AAAA,IAChB,CAAC,EAAE,WAAAC,GAAW,GAAGC,KAASC,MACxBC,EAAcC,GAAM;AAAA,MAClB,KAAAF;AAAA,MACA,UAAAN;AAAA,MACA,WAAWS,EAAG,UAAUC,EAAYX,CAAQ,CAAC,IAAIK,CAAS;AAAA,MACrD,GAAIH,KAAe,CAAA;AAAA,MAAK,GAAGI;AAAA,IAAM,CACvC;AAAA,EAAA;AAGL,SAAAH,EAAU,cAAc,GAAGH,CAAQ,IAE5BG;AACT;"}
@@ -1,4 +1,4 @@
1
- import { c as L } from "./createCustomLucideIcon-D-gFRvUd.mjs";
1
+ import { c as L } from "./createCustomLucideIcon-PXfw4lT4.mjs";
2
2
  const o = [
3
3
  [
4
4
  "path",
@@ -21,4 +21,4 @@ const o = [
21
21
  export {
22
22
  e as default
23
23
  };
24
- //# sourceMappingURL=gems-C9gEGS_l.mjs.map
24
+ //# sourceMappingURL=gems-B2uZHIOZ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"gems-C9gEGS_l.mjs","sources":["../src/components/Icon/customIcons/gems.ts"],"sourcesContent":["import { IconNode } from 'lucide-react'\nimport createCustomLucideIcon from './createCustomLucideIcon'\n\nconst iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M156.139 157.469L196.307 117.301L168.177 89.1397V89.0126H88.2885L88.4113 89.2582L88.2885 89.1354L60.6496 117.296L128.5 184.929',\n key: 'path-1',\n },\n ],\n [\n 'path',\n {\n d: 'M128.5 14L29 71.0835V185.25L128.5 242.333L228 185.25V71.0829L128.5 14ZM208.96 174.341L128.5 220.767L48.0401 174.34V81.7386L128.5 35.3114L208.96 81.3762',\n key: 'path-2',\n },\n ],\n]\n\nconst icon = createCustomLucideIcon('gems', iconNode, {\n viewBox: '0 0 256 256',\n fill: 'currentColor',\n})\n\nexport { icon as default }\n"],"names":["iconNode","icon","createCustomLucideIcon"],"mappings":";AAGA,MAAMA,IAAqB;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAEJ,GAEMC,IAAOC,EAAuB,QAAQF,GAAU;AAAA,EACpD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;"}
1
+ {"version":3,"file":"gems-B2uZHIOZ.mjs","sources":["../src/components/Icon/customIcons/gems.ts"],"sourcesContent":["import { IconNode } from 'lucide-react'\nimport createCustomLucideIcon from './createCustomLucideIcon'\n\nconst iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M156.139 157.469L196.307 117.301L168.177 89.1397V89.0126H88.2885L88.4113 89.2582L88.2885 89.1354L60.6496 117.296L128.5 184.929',\n key: 'path-1',\n },\n ],\n [\n 'path',\n {\n d: 'M128.5 14L29 71.0835V185.25L128.5 242.333L228 185.25V71.0829L128.5 14ZM208.96 174.341L128.5 220.767L48.0401 174.34V81.7386L128.5 35.3114L208.96 81.3762',\n key: 'path-2',\n },\n ],\n]\n\nconst icon = createCustomLucideIcon('gems', iconNode, {\n viewBox: '0 0 256 256',\n fill: 'currentColor',\n})\n\nexport { icon as default }\n"],"names":["iconNode","icon","createCustomLucideIcon"],"mappings":";AAGA,MAAMA,IAAqB;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAEJ,GAEMC,IAAOC,EAAuB,QAAQF,GAAU;AAAA,EACpD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;"}
@@ -1,4 +1,4 @@
1
- import { c } from "./createCustomLucideIcon-D-gFRvUd.mjs";
1
+ import { c } from "./createCustomLucideIcon-PXfw4lT4.mjs";
2
2
  const o = [
3
3
  [
4
4
  "path",
@@ -21,4 +21,4 @@ const o = [
21
21
  export {
22
22
  e as default
23
23
  };
24
- //# sourceMappingURL=go-C9P0gGBL.mjs.map
24
+ //# sourceMappingURL=go-DkxSUbdC.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"go-C9P0gGBL.mjs","sources":["../src/components/Icon/customIcons/go.ts"],"sourcesContent":["import { IconNode } from 'lucide-react'\nimport createCustomLucideIcon from './createCustomLucideIcon'\n\nconst iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.156 54.829c-.243 0-.303-.122-.182-.303l1.273-1.637c.12-.182.424-.303.666-.303H34.55c.243 0 .303.182.182.364l-1.03 1.576c-.121.181-.424.363-.606.363zM2.004 60.404c-.242 0-.303-.12-.182-.303l1.273-1.636c.121-.182.424-.303.667-.303h27.636c.242 0 .364.182.303.364l-.485 1.454c-.06.243-.303.364-.545.364zM16.67 65.98c-.242 0-.302-.182-.181-.364l.848-1.515c.122-.182.364-.363.607-.363h12.12c.243 0 .364.181.364.424l-.12 1.454c0 .243-.243.425-.425.425zM79.58 53.738c-3.819.97-6.425 1.697-10.182 2.666-.91.243-.97.303-1.758-.606-.909-1.03-1.576-1.697-2.848-2.303-3.819-1.878-7.516-1.333-10.97.91-4.121 2.666-6.242 6.605-6.182 11.514.06 4.849 3.394 8.849 8.182 9.516 4.121.545 7.576-.91 10.303-4 .545-.667 1.03-1.394 1.636-2.243H56.064c-1.272 0-1.575-.788-1.151-1.818.788-1.879 2.242-5.03 3.09-6.606.183-.364.607-.97 1.516-.97h22.06c-.12 1.637-.12 3.273-.363 4.91-.667 4.363-2.303 8.363-4.97 11.878-4.364 5.758-10.06 9.333-17.273 10.303-5.939.788-11.454-.364-16.302-4-4.485-3.394-7.03-7.879-7.697-13.454-.788-6.606 1.151-12.546 5.151-17.758 4.303-5.636 10-9.212 16.97-10.485 5.697-1.03 11.151-.363 16.06 2.97 3.212 2.121 5.515 5.03 7.03 8.545.364.546.122.849-.606 1.03z',\n key: 'path-1',\n },\n ],\n [\n 'path',\n {\n d: 'M99.64 87.253c-5.515-.122-10.546-1.697-14.788-5.334-3.576-3.09-5.818-7.03-6.545-11.697-1.091-6.848.787-12.909 4.909-18.302 4.424-5.819 9.757-8.849 16.97-10.122 6.181-1.09 12-.484 17.272 3.091 4.788 3.273 7.757 7.697 8.545 13.515 1.03 8.182-1.333 14.849-6.97 20.546-4 4.06-8.909 6.606-14.545 7.757-1.636.303-3.273.364-4.848.546zm14.424-24.485c-.06-.788-.06-1.394-.182-2-1.09-6-6.606-9.394-12.363-8.06-5.637 1.272-9.273 4.848-10.606 10.545-1.091 4.727 1.212 9.515 5.575 11.454 3.334 1.455 6.667 1.273 9.879-.363 4.788-2.485 7.394-6.364 7.697-11.576z',\n key: 'path-2',\n },\n ],\n]\n\nconst icon = createCustomLucideIcon('go', iconNode, {\n viewBox: '0 0 128 128',\n fill: 'currentColor',\n})\n\nexport { icon as default }\n"],"names":["iconNode","icon","createCustomLucideIcon"],"mappings":";AAGA,MAAMA,IAAqB;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAEJ,GAEMC,IAAOC,EAAuB,MAAMF,GAAU;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;"}
1
+ {"version":3,"file":"go-DkxSUbdC.mjs","sources":["../src/components/Icon/customIcons/go.ts"],"sourcesContent":["import { IconNode } from 'lucide-react'\nimport createCustomLucideIcon from './createCustomLucideIcon'\n\nconst iconNode: IconNode = [\n [\n 'path',\n {\n d: 'M11.156 54.829c-.243 0-.303-.122-.182-.303l1.273-1.637c.12-.182.424-.303.666-.303H34.55c.243 0 .303.182.182.364l-1.03 1.576c-.121.181-.424.363-.606.363zM2.004 60.404c-.242 0-.303-.12-.182-.303l1.273-1.636c.121-.182.424-.303.667-.303h27.636c.242 0 .364.182.303.364l-.485 1.454c-.06.243-.303.364-.545.364zM16.67 65.98c-.242 0-.302-.182-.181-.364l.848-1.515c.122-.182.364-.363.607-.363h12.12c.243 0 .364.181.364.424l-.12 1.454c0 .243-.243.425-.425.425zM79.58 53.738c-3.819.97-6.425 1.697-10.182 2.666-.91.243-.97.303-1.758-.606-.909-1.03-1.576-1.697-2.848-2.303-3.819-1.878-7.516-1.333-10.97.91-4.121 2.666-6.242 6.605-6.182 11.514.06 4.849 3.394 8.849 8.182 9.516 4.121.545 7.576-.91 10.303-4 .545-.667 1.03-1.394 1.636-2.243H56.064c-1.272 0-1.575-.788-1.151-1.818.788-1.879 2.242-5.03 3.09-6.606.183-.364.607-.97 1.516-.97h22.06c-.12 1.637-.12 3.273-.363 4.91-.667 4.363-2.303 8.363-4.97 11.878-4.364 5.758-10.06 9.333-17.273 10.303-5.939.788-11.454-.364-16.302-4-4.485-3.394-7.03-7.879-7.697-13.454-.788-6.606 1.151-12.546 5.151-17.758 4.303-5.636 10-9.212 16.97-10.485 5.697-1.03 11.151-.363 16.06 2.97 3.212 2.121 5.515 5.03 7.03 8.545.364.546.122.849-.606 1.03z',\n key: 'path-1',\n },\n ],\n [\n 'path',\n {\n d: 'M99.64 87.253c-5.515-.122-10.546-1.697-14.788-5.334-3.576-3.09-5.818-7.03-6.545-11.697-1.091-6.848.787-12.909 4.909-18.302 4.424-5.819 9.757-8.849 16.97-10.122 6.181-1.09 12-.484 17.272 3.091 4.788 3.273 7.757 7.697 8.545 13.515 1.03 8.182-1.333 14.849-6.97 20.546-4 4.06-8.909 6.606-14.545 7.757-1.636.303-3.273.364-4.848.546zm14.424-24.485c-.06-.788-.06-1.394-.182-2-1.09-6-6.606-9.394-12.363-8.06-5.637 1.272-9.273 4.848-10.606 10.545-1.091 4.727 1.212 9.515 5.575 11.454 3.334 1.455 6.667 1.273 9.879-.363 4.788-2.485 7.394-6.364 7.697-11.576z',\n key: 'path-2',\n },\n ],\n]\n\nconst icon = createCustomLucideIcon('go', iconNode, {\n viewBox: '0 0 128 128',\n fill: 'currentColor',\n})\n\nexport { icon as default }\n"],"names":["iconNode","icon","createCustomLucideIcon"],"mappings":";AAGA,MAAMA,IAAqB;AAAA,EACzB;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IAAA;AAAA,EACP;AAEJ,GAEMC,IAAOC,EAAuB,MAAMF,GAAU;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AACR,CAAC;"}