@neovici/cosmoz-queue 1.0.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 (143) hide show
  1. package/README.md +3 -0
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +1 -0
  5. package/dist/queue/actions/index.d.ts +22 -0
  6. package/dist/queue/actions/index.d.ts.map +1 -0
  7. package/dist/queue/actions/index.js +20 -0
  8. package/dist/queue/icon.d.ts +2 -0
  9. package/dist/queue/icon.d.ts.map +1 -0
  10. package/dist/queue/icon.js +12 -0
  11. package/dist/queue/icons.d.ts +4 -0
  12. package/dist/queue/icons.d.ts.map +1 -0
  13. package/dist/queue/icons.js +61 -0
  14. package/dist/queue/index.d.ts +8 -0
  15. package/dist/queue/index.d.ts.map +1 -0
  16. package/dist/queue/index.js +5 -0
  17. package/dist/queue/item-click.d.ts +5 -0
  18. package/dist/queue/item-click.d.ts.map +1 -0
  19. package/dist/queue/item-click.js +15 -0
  20. package/dist/queue/list-core/column.d.ts +34 -0
  21. package/dist/queue/list-core/column.d.ts.map +1 -0
  22. package/dist/queue/list-core/column.js +10 -0
  23. package/dist/queue/list-core/index.d.ts +7 -0
  24. package/dist/queue/list-core/index.d.ts.map +1 -0
  25. package/dist/queue/list-core/index.js +6 -0
  26. package/dist/queue/list-core/list-core.d.ts +6 -0
  27. package/dist/queue/list-core/list-core.d.ts.map +1 -0
  28. package/dist/queue/list-core/list-core.js +6 -0
  29. package/dist/queue/list-core/render-generic-actions.d.ts +4 -0
  30. package/dist/queue/list-core/render-generic-actions.d.ts.map +1 -0
  31. package/dist/queue/list-core/render-generic-actions.js +14 -0
  32. package/dist/queue/list-core/render-list-core.d.ts +18 -0
  33. package/dist/queue/list-core/render-list-core.d.ts.map +1 -0
  34. package/dist/queue/list-core/render-list-core.js +42 -0
  35. package/dist/queue/list-core/style.css.d.ts +2 -0
  36. package/dist/queue/list-core/style.css.d.ts.map +1 -0
  37. package/dist/queue/list-core/style.css.js +20 -0
  38. package/dist/queue/list-core/use-inline-actions.d.ts +4 -0
  39. package/dist/queue/list-core/use-inline-actions.d.ts.map +1 -0
  40. package/dist/queue/list-core/use-inline-actions.js +10 -0
  41. package/dist/queue/list-core/use-list-core.d.ts +34 -0
  42. package/dist/queue/list-core/use-list-core.d.ts.map +1 -0
  43. package/dist/queue/list-core/use-list-core.js +36 -0
  44. package/dist/queue/list-core/use-list-state.d.ts +24 -0
  45. package/dist/queue/list-core/use-list-state.d.ts.map +1 -0
  46. package/dist/queue/list-core/use-list-state.js +25 -0
  47. package/dist/queue/list-core/use-more.d.ts +23 -0
  48. package/dist/queue/list-core/use-more.d.ts.map +1 -0
  49. package/dist/queue/list-core/use-more.js +41 -0
  50. package/dist/queue/omnitable.d.ts +19 -0
  51. package/dist/queue/omnitable.d.ts.map +1 -0
  52. package/dist/queue/omnitable.js +31 -0
  53. package/dist/queue/pagination.d.ts +5 -0
  54. package/dist/queue/pagination.d.ts.map +1 -0
  55. package/dist/queue/pagination.js +10 -0
  56. package/dist/queue/queue.d.ts +24 -0
  57. package/dist/queue/queue.d.ts.map +1 -0
  58. package/dist/queue/queue.js +58 -0
  59. package/dist/queue/render.d.ts +74 -0
  60. package/dist/queue/render.d.ts.map +1 -0
  61. package/dist/queue/render.js +134 -0
  62. package/dist/queue/style.d.ts +7 -0
  63. package/dist/queue/style.d.ts.map +1 -0
  64. package/dist/queue/style.js +182 -0
  65. package/dist/queue/test/__snapshots__/render.test.snap.d.ts +2 -0
  66. package/dist/queue/test/__snapshots__/render.test.snap.d.ts.map +1 -0
  67. package/dist/queue/test/__snapshots__/render.test.snap.js +64 -0
  68. package/dist/queue/test/item-click.test.d.ts +2 -0
  69. package/dist/queue/test/item-click.test.d.ts.map +1 -0
  70. package/dist/queue/test/item-click.test.js +28 -0
  71. package/dist/queue/test/render.test.d.ts +2 -0
  72. package/dist/queue/test/render.test.d.ts.map +1 -0
  73. package/dist/queue/test/render.test.js +27 -0
  74. package/dist/queue/test/use-pref.test.d.ts +2 -0
  75. package/dist/queue/test/use-pref.test.d.ts.map +1 -0
  76. package/dist/queue/test/use-pref.test.js +16 -0
  77. package/dist/queue/types.d.ts +10 -0
  78. package/dist/queue/types.d.ts.map +1 -0
  79. package/dist/queue/types.js +1 -0
  80. package/dist/queue/use-async-action.d.ts +15 -0
  81. package/dist/queue/use-async-action.d.ts.map +1 -0
  82. package/dist/queue/use-async-action.js +17 -0
  83. package/dist/queue/use-data-nav.d.ts +20 -0
  84. package/dist/queue/use-data-nav.d.ts.map +1 -0
  85. package/dist/queue/use-data-nav.js +59 -0
  86. package/dist/queue/use-data-service.d.ts +31 -0
  87. package/dist/queue/use-data-service.d.ts.map +1 -0
  88. package/dist/queue/use-data-service.js +26 -0
  89. package/dist/queue/use-fetch-actions.d.ts +42 -0
  90. package/dist/queue/use-fetch-actions.d.ts.map +1 -0
  91. package/dist/queue/use-fetch-actions.js +38 -0
  92. package/dist/queue/use-key-nav.d.ts +8 -0
  93. package/dist/queue/use-key-nav.d.ts.map +1 -0
  94. package/dist/queue/use-key-nav.js +49 -0
  95. package/dist/queue/use-list-sse.d.ts +42 -0
  96. package/dist/queue/use-list-sse.d.ts.map +1 -0
  97. package/dist/queue/use-list-sse.js +82 -0
  98. package/dist/queue/use-list.d.ts +33 -0
  99. package/dist/queue/use-list.d.ts.map +1 -0
  100. package/dist/queue/use-list.js +42 -0
  101. package/dist/queue/use-pref.d.ts +5 -0
  102. package/dist/queue/use-pref.d.ts.map +1 -0
  103. package/dist/queue/use-pref.js +11 -0
  104. package/dist/queue/use-queue.d.ts +132 -0
  105. package/dist/queue/use-queue.d.ts.map +1 -0
  106. package/dist/queue/use-queue.js +69 -0
  107. package/dist/queue/use-split.d.ts +8 -0
  108. package/dist/queue/use-split.d.ts.map +1 -0
  109. package/dist/queue/use-split.js +30 -0
  110. package/dist/queue/use-tabs.d.ts +54 -0
  111. package/dist/queue/use-tabs.d.ts.map +1 -0
  112. package/dist/queue/use-tabs.js +31 -0
  113. package/dist/queue/use-updates.d.ts +9 -0
  114. package/dist/queue/use-updates.d.ts.map +1 -0
  115. package/dist/queue/use-updates.js +17 -0
  116. package/dist/queue/util.d.ts +4 -0
  117. package/dist/queue/util.d.ts.map +1 -0
  118. package/dist/queue/util.js +16 -0
  119. package/dist/types/dialogable.d.ts +39 -0
  120. package/dist/types/dialogable.d.ts.map +1 -0
  121. package/dist/types/dialogable.js +5 -0
  122. package/dist/types/performable.d.ts +5 -0
  123. package/dist/types/performable.d.ts.map +1 -0
  124. package/dist/types/performable.js +1 -0
  125. package/dist/util/dom/active-element.d.ts +3 -0
  126. package/dist/util/dom/active-element.d.ts.map +1 -0
  127. package/dist/util/dom/active-element.js +11 -0
  128. package/dist/util/fetch/fetch.d.ts +41 -0
  129. package/dist/util/fetch/fetch.d.ts.map +1 -0
  130. package/dist/util/fetch/fetch.js +74 -0
  131. package/dist/util/fetch/url.d.ts +30 -0
  132. package/dist/util/fetch/url.d.ts.map +1 -0
  133. package/dist/util/fetch/url.js +29 -0
  134. package/dist/util/path.d.ts +42 -0
  135. package/dist/util/path.d.ts.map +1 -0
  136. package/dist/util/path.js +68 -0
  137. package/dist/util/polymer-property-changed-event.d.ts +6 -0
  138. package/dist/util/polymer-property-changed-event.d.ts.map +1 -0
  139. package/dist/util/polymer-property-changed-event.js +27 -0
  140. package/dist/util/test/path.test.d.ts +2 -0
  141. package/dist/util/test/path.test.d.ts.map +1 -0
  142. package/dist/util/test/path.test.js +99 -0
  143. package/package.json +113 -0
@@ -0,0 +1,33 @@
1
+ import { Rec } from '@neovici/cosmoz-utils/object';
2
+ type NewState<T> = T | ((previousState?: T) => T);
3
+ type StateUpdater<T> = (value: NewState<T>) => void;
4
+ interface FilterMeta<F extends Rec<string>> {
5
+ filters: F;
6
+ onFilter: (name: PropertyKey, value: any) => void;
7
+ setFilters: StateUpdater<F>;
8
+ }
9
+ export declare const filter: <F extends Rec<string>>(meta: FilterMeta<F>) => (name: keyof F) => (e: CustomEvent<{
10
+ value: F[typeof name];
11
+ }>) => void;
12
+ export declare const notify: (host: EventTarget) => (name: string) => (e: CustomEvent) => void;
13
+ export declare const useList: <F extends Rec<string>>() => {
14
+ sortOn: string | undefined;
15
+ descending: boolean;
16
+ filters: F;
17
+ onSort: (e: CustomEvent<import("@pionjs/pion/lib/use-state.js").NewState<string | undefined>>) => void;
18
+ onDescending: (e: CustomEvent<import("@pionjs/pion/lib/use-state.js").NewState<boolean>>) => void;
19
+ filter: (name: string) => (e: CustomEvent<{
20
+ value: any;
21
+ }>) => void;
22
+ notify: (name: string) => (e: CustomEvent) => void;
23
+ };
24
+ export declare const useListState: <I>() => {
25
+ totalAvailable: number | undefined;
26
+ setTotalAvailable: import("@pionjs/pion").StateUpdater<number | undefined>;
27
+ items: I[];
28
+ setItems: import("@pionjs/pion").StateUpdater<I[]>;
29
+ selected: I[];
30
+ setSelected: import("@pionjs/pion").StateUpdater<I[]>;
31
+ };
32
+ export {};
33
+ //# sourceMappingURL=use-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-list.d.ts","sourceRoot":"","sources":["../../src/queue/use-list.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAGnD,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAEpD,UAAU,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;CAC5B;AAED,eAAO,MAAM,MAAM,GACjB,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,MAC1C,MAAM,MAAM,CAAC,MACb,GAAG,WAAW,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAA;CAAE,CAAC,SAKzC,CAAC;AAEH,eAAO,MAAM,MAAM,GACjB,MAAM,WAAW,MAAM,MAAM,MAAM,MAAM,GAAG,WAAW,SAEvD,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC;;;;;;+BAZ3C;;MAAyC;mBAQZ,MAAM,MAAM,GAAG,WAAW;CA4BxD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC;;;;;;;CAa7B,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { useMemo, useState, useCallback } from '@pionjs/pion';
2
+ import { useHost } from '@neovici/cosmoz-utils/hooks/use-host';
3
+ import { useMeta } from '@neovici/cosmoz-utils/hooks/use-meta';
4
+ import { updateWith } from '../util/polymer-property-changed-event.js';
5
+ export const filter = (meta) => (name) => (e) => {
6
+ const { value } = e.detail;
7
+ if (value === meta.filters?.[name])
8
+ return;
9
+ meta.setFilters((f) => ({ ...f, [name]: value }));
10
+ meta.onFilter(name, value);
11
+ };
12
+ export const notify = (host) => (name) => (e) => {
13
+ host.dispatchEvent(new CustomEvent(name, { detail: e.detail }));
14
+ };
15
+ export const useList = () => {
16
+ const host = useHost();
17
+ const [sortOn, setSortOn] = useState();
18
+ const [descending, setDescending] = useState(false);
19
+ const [filters, setFilters] = useState({});
20
+ const onFilter = useCallback((name, value) => host.dispatchEvent(new CustomEvent('filter', { detail: { name, value } })), []);
21
+ const meta = useMeta({ filters, setFilters, onFilter });
22
+ return {
23
+ sortOn,
24
+ descending,
25
+ filters,
26
+ onSort: useMemo(() => updateWith(setSortOn), []),
27
+ onDescending: useMemo(() => updateWith(setDescending), []),
28
+ filter: useMemo(() => filter(meta), []),
29
+ notify: useMemo(() => notify(host), []),
30
+ };
31
+ };
32
+ export const useListState = () => {
33
+ const [totalAvailable, setTotalAvailable] = useState(), [items, setItems] = useState([]), [selected, setSelected] = useState([]);
34
+ return {
35
+ totalAvailable,
36
+ setTotalAvailable,
37
+ items,
38
+ setItems,
39
+ selected,
40
+ setSelected,
41
+ };
42
+ };
@@ -0,0 +1,5 @@
1
+ type Returned<T> = [T, (v: T) => void];
2
+ export declare function usePref<T extends string>(key: string): Returned<T>;
3
+ export declare function usePref<T extends string>(key: string, defaultValue: T): Returned<T>;
4
+ export {};
5
+ //# sourceMappingURL=use-pref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-pref.d.ts","sourceRoot":"","sources":["../../src/queue/use-pref.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AACvC,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACvC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACb,QAAQ,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { useState, useCallback } from '@pionjs/pion';
2
+ export function usePref(key, defaultValue) {
3
+ const [pref, setPref] = useState(() => localStorage.getItem(`pref-${key}`) || defaultValue);
4
+ return [
5
+ pref,
6
+ useCallback((value) => {
7
+ localStorage.setItem(`pref-${key}`, value);
8
+ setPref(value);
9
+ }, [setPref]),
10
+ ];
11
+ }
@@ -0,0 +1,132 @@
1
+ import { useListState } from './use-list';
2
+ import { SplitOpts } from './use-split';
3
+ import { Options as UseTabsOptions } from './use-tabs';
4
+ interface Opts<I> extends ReturnType<typeof useListState<I>>, Pick<UseTabsOptions<I>, 'fallback'> {
5
+ tabHashParam?: string;
6
+ idHashParam?: string;
7
+ onActivate?: (name: string) => void;
8
+ api?: (id: string, item: I) => string;
9
+ id?: (i: I) => string;
10
+ split?: SplitOpts;
11
+ }
12
+ declare const useQueue: <I>({ id, api, tabHashParam, idHashParam, fallback, onActivate, split, ...thru }: Opts<I>) => {
13
+ tabnav: import("@neovici/cosmoz-tabs/next/use-tabs.js").Result<{
14
+ readonly name: "overview";
15
+ readonly title: string;
16
+ readonly disabled: false;
17
+ readonly content: import("lit-html").TemplateResult<1>;
18
+ } | {
19
+ readonly name: "split";
20
+ readonly disabled: boolean;
21
+ readonly title: string;
22
+ readonly content: import("lit-html").TemplateResult<1>;
23
+ } | {
24
+ readonly name: "queue";
25
+ readonly disabled: boolean;
26
+ readonly title: string;
27
+ readonly content: import("lit-html").TemplateResult<1>;
28
+ } | {
29
+ fallback: boolean;
30
+ name: "overview";
31
+ title: string;
32
+ disabled: false;
33
+ content: import("lit-html").TemplateResult<1>;
34
+ } | {
35
+ fallback: boolean;
36
+ name: "split";
37
+ disabled: boolean;
38
+ title: string;
39
+ content: import("lit-html").TemplateResult<1>;
40
+ } | {
41
+ fallback: boolean;
42
+ name: "queue";
43
+ disabled: boolean;
44
+ title: string;
45
+ content: import("lit-html").TemplateResult<1>;
46
+ }>;
47
+ activeTab: "split" | "overview" | "queue";
48
+ mobile: boolean;
49
+ hideActions: boolean;
50
+ index: number;
51
+ onItemClick: (e: Event) => void;
52
+ ensue: (itemId: string) => void;
53
+ nav: {
54
+ id: import("./use-data-nav").MapId<I>;
55
+ details: ((item: I) => Promise<any>) | undefined;
56
+ forward: boolean;
57
+ index: number;
58
+ item: I;
59
+ items: I[];
60
+ setItem: import("@pionjs/pion").StateUpdater<I>;
61
+ prev: (() => void) | undefined;
62
+ next: (() => void) | undefined;
63
+ };
64
+ totalAvailable: number | undefined;
65
+ setTotalAvailable: import("@pionjs/pion").StateUpdater<number | undefined>;
66
+ items: I[];
67
+ setItems: import("@pionjs/pion").StateUpdater<I[]>;
68
+ selected: I[];
69
+ setSelected: import("@pionjs/pion").StateUpdater<I[]>;
70
+ };
71
+ export type UseQueue<I> = Omit<Parameters<typeof useQueue<I>>[0], keyof ReturnType<typeof useListState<I>>>;
72
+ declare const _default: <I>(thru: UseQueue<I>) => {
73
+ tabnav: import("@neovici/cosmoz-tabs/next/use-tabs.js").Result<{
74
+ readonly name: "overview";
75
+ readonly title: string;
76
+ readonly disabled: false;
77
+ readonly content: import("lit-html").TemplateResult<1>;
78
+ } | {
79
+ readonly name: "split";
80
+ readonly disabled: boolean;
81
+ readonly title: string;
82
+ readonly content: import("lit-html").TemplateResult<1>;
83
+ } | {
84
+ readonly name: "queue";
85
+ readonly disabled: boolean;
86
+ readonly title: string;
87
+ readonly content: import("lit-html").TemplateResult<1>;
88
+ } | {
89
+ fallback: boolean;
90
+ name: "overview";
91
+ title: string;
92
+ disabled: false;
93
+ content: import("lit-html").TemplateResult<1>;
94
+ } | {
95
+ fallback: boolean;
96
+ name: "split";
97
+ disabled: boolean;
98
+ title: string;
99
+ content: import("lit-html").TemplateResult<1>;
100
+ } | {
101
+ fallback: boolean;
102
+ name: "queue";
103
+ disabled: boolean;
104
+ title: string;
105
+ content: import("lit-html").TemplateResult<1>;
106
+ }>;
107
+ activeTab: "split" | "overview" | "queue";
108
+ mobile: boolean;
109
+ hideActions: boolean;
110
+ index: number;
111
+ onItemClick: (e: Event) => void;
112
+ ensue: (itemId: string) => void;
113
+ nav: {
114
+ id: import("./use-data-nav").MapId<I>;
115
+ details: ((item: I) => Promise<any>) | undefined;
116
+ forward: boolean;
117
+ index: number;
118
+ item: I;
119
+ items: I[];
120
+ setItem: import("@pionjs/pion").StateUpdater<I>;
121
+ prev: (() => void) | undefined;
122
+ next: (() => void) | undefined;
123
+ };
124
+ totalAvailable: number | undefined;
125
+ setTotalAvailable: import("@pionjs/pion").StateUpdater<number | undefined>;
126
+ items: I[];
127
+ setItems: import("@pionjs/pion").StateUpdater<I[]>;
128
+ selected: I[];
129
+ setSelected: import("@pionjs/pion").StateUpdater<I[]>;
130
+ };
131
+ export default _default;
132
+ //# sourceMappingURL=use-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-queue.d.ts","sourceRoot":"","sources":["../../src/queue/use-queue.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAgB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AA8BhE,UAAU,IAAI,CAAC,CAAC,CACf,SACC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACtC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,QAAA,MAAM,QAAQ,GAAI,CAAC,EAAE,8EASlB,IAAI,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2CH,KAAK;oBAtBA,MAAM;;;;;;;;;;;;;;;;;;CAkDjB,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,IAAI,CAC7B,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;yBAEc,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAnC7B,KAAK;oBAtBA,MAAM;;;;;;;;;;;;;;;;;;;AAyDlB,wBACgD"}
@@ -0,0 +1,69 @@
1
+ import { array } from '@neovici/cosmoz-utils/array';
2
+ import { memoize } from '@neovici/cosmoz-utils/memoize';
3
+ import { useViewInfo } from '@neovici/cosmoz-viewinfo';
4
+ import { useCallback, useMemo } from '@pionjs/pion';
5
+ import { json } from '../util/fetch/fetch';
6
+ import useDataNav from './use-data-nav';
7
+ import useKeyNav from './use-key-nav';
8
+ import { useListState } from './use-list';
9
+ import useSplit from './use-split';
10
+ import useTabs from './use-tabs';
11
+ import useUpdates from './use-updates';
12
+ import { getItems, normalizeHeaders } from './util';
13
+ const _id = (item) => item['id'];
14
+ const useQNav = ({ id, api, items, ...thru }) => {
15
+ const details = useMemo(() => api && memoize((item) => json(api(id(item), item))), [id, api]), pass = useDataNav(items, {
16
+ ...thru,
17
+ id,
18
+ });
19
+ return { ...pass, id, details };
20
+ };
21
+ const useQueue = ({ id = _id, api, tabHashParam, idHashParam, fallback, onActivate, split, ...thru }) => {
22
+ const { items: _items, selected } = thru, { mobile } = useViewInfo(), items = useMemo(() => normalizeHeaders(_items), [_items]), queueItems = useMemo(() => getItems(items, selected), [items, selected]), { tabnav, activeTab } = useTabs({
23
+ items: queueItems,
24
+ hashParam: tabHashParam,
25
+ fallback,
26
+ onActivate,
27
+ mobile,
28
+ }), nav = useQNav({
29
+ id,
30
+ api,
31
+ items: queueItems,
32
+ hashParam: idHashParam,
33
+ maintainSelection: ['queue', 'split'].includes(activeTab),
34
+ }), { item, setItem } = nav, ensue = useCallback((itemId) => {
35
+ if (id(item) !== itemId) {
36
+ return;
37
+ }
38
+ const idx = items.indexOf(item);
39
+ setItem(items[Math.min(idx + 1, items.length - 1)]);
40
+ }, [item, id, items]);
41
+ useKeyNav({ activeTab, ...nav });
42
+ useSplit({ activeTab, ...split });
43
+ useUpdates({ ensue, ...nav });
44
+ return {
45
+ ...thru,
46
+ tabnav,
47
+ activeTab,
48
+ mobile,
49
+ hideActions: selected?.length > 0 && activeTab === 'split',
50
+ index: useMemo(() => items.indexOf(item), [item, items]),
51
+ onItemClick: useCallback((e) => {
52
+ const { index, activate: mustActivate } = e.detail;
53
+ const mini = e
54
+ .composedPath()
55
+ .find((el) => el instanceof Element && el.matches?.('[mini]'));
56
+ const activate = mustActivate ?? (mini ? ['split', 'queue'] : undefined);
57
+ setItem(items[index]);
58
+ if (activate) {
59
+ const next = array(activate).find((name) => tabnav.tabs.find((tab) => tab.name === name && !tab.disabled));
60
+ if (next)
61
+ tabnav.activate(next);
62
+ }
63
+ e.preventDefault();
64
+ }, [activeTab, items]),
65
+ ensue,
66
+ nav,
67
+ };
68
+ };
69
+ export default (thru) => useQueue({ ...thru, ...useListState() });
@@ -0,0 +1,8 @@
1
+ import Split from 'split.js';
2
+ export type SplitOpts = Pick<Split.Options, 'sizes' | 'minSize' | 'expandToMin' | 'snapOffset'>;
3
+ interface Opts extends SplitOpts {
4
+ activeTab: string;
5
+ }
6
+ declare const _default: ({ activeTab, ...opts }: Opts) => void;
7
+ export default _default;
8
+ //# sourceMappingURL=use-split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-split.d.ts","sourceRoot":"","sources":["../../src/queue/use-split.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,UAAU,CAAC;AAE7B,MAAM,MAAM,SAAS,GAAG,IAAI,CAC3B,KAAK,CAAC,OAAO,EACb,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,CAClD,CAAC;AAEF,UAAU,IAAK,SAAQ,SAAS;IAC/B,SAAS,EAAE,MAAM,CAAC;CAClB;yBAEe,wBAAwB,IAAI;AAA5C,wBAyBE"}
@@ -0,0 +1,30 @@
1
+ import { useRef, useEffect } from '@pionjs/pion';
2
+ import { useMeta } from '@neovici/cosmoz-utils/hooks/use-meta';
3
+ import { useHost } from '@neovici/cosmoz-utils/hooks/use-host';
4
+ import Split from 'split.js';
5
+ export default ({ activeTab, ...opts }) => {
6
+ const splitRef = useRef(undefined);
7
+ const host = useHost();
8
+ const meta = useMeta(opts);
9
+ useEffect(() => {
10
+ if (activeTab !== 'split')
11
+ return;
12
+ const root = host.shadowRoot;
13
+ const list = root.querySelector('#list');
14
+ const queue = root.querySelector('#queue');
15
+ const listMinWidth = Array.isArray(meta.minSize)
16
+ ? meta.minSize[0]
17
+ : undefined;
18
+ if (listMinWidth != null && list) {
19
+ list.style.minWidth = `${listMinWidth}px`;
20
+ }
21
+ splitRef.current = Split([list, queue], {
22
+ gutterSize: 2,
23
+ ...meta,
24
+ });
25
+ return () => {
26
+ splitRef.current?.destroy();
27
+ list.style.minWidth = '';
28
+ };
29
+ }, [activeTab]);
30
+ };
@@ -0,0 +1,54 @@
1
+ import { RenderTab } from '@neovici/cosmoz-tabs/next/index.js';
2
+ export interface Options<I> {
3
+ items: I[];
4
+ hashParam?: string;
5
+ mobile?: boolean;
6
+ onActivate?: (name: string) => void;
7
+ fallback?: string;
8
+ sizes?: {
9
+ list?: string;
10
+ view?: string;
11
+ };
12
+ }
13
+ export interface Tab extends RenderTab {
14
+ content: unknown;
15
+ }
16
+ declare const _default: <I = unknown>({ items, hashParam, mobile, fallback, onActivate, }: Options<I>) => {
17
+ activeTab: "split" | "overview" | "queue";
18
+ tabnav: import("@neovici/cosmoz-tabs/next/use-tabs.js").Result<{
19
+ readonly name: "overview";
20
+ readonly title: string;
21
+ readonly disabled: false;
22
+ readonly content: import("lit-html").TemplateResult<1>;
23
+ } | {
24
+ readonly name: "split";
25
+ readonly disabled: boolean;
26
+ readonly title: string;
27
+ readonly content: import("lit-html").TemplateResult<1>;
28
+ } | {
29
+ readonly name: "queue";
30
+ readonly disabled: boolean;
31
+ readonly title: string;
32
+ readonly content: import("lit-html").TemplateResult<1>;
33
+ } | {
34
+ fallback: boolean;
35
+ name: "overview";
36
+ title: string;
37
+ disabled: false;
38
+ content: import("lit-html").TemplateResult<1>;
39
+ } | {
40
+ fallback: boolean;
41
+ name: "split";
42
+ disabled: boolean;
43
+ title: string;
44
+ content: import("lit-html").TemplateResult<1>;
45
+ } | {
46
+ fallback: boolean;
47
+ name: "queue";
48
+ disabled: boolean;
49
+ title: string;
50
+ content: import("lit-html").TemplateResult<1>;
51
+ }>;
52
+ };
53
+ export default _default;
54
+ //# sourceMappingURL=use-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tabs.d.ts","sourceRoot":"","sources":["../../src/queue/use-tabs.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAKxE,MAAM,WAAW,OAAO,CAAC,CAAC;IACzB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,MAAM,WAAW,GAAI,SAAQ,SAAS;IACrC,OAAO,EAAE,OAAO,CAAC;CACjB;yBAEe,CAAC,GAAG,OAAO,EAAE,qDAM1B,OAAO,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AANb,wBA4CE"}
@@ -0,0 +1,31 @@
1
+ import { useMemo } from '@pionjs/pion';
2
+ import { useTabs } from '@neovici/cosmoz-tabs/next/index.js';
3
+ import { _ } from '@neovici/cosmoz-i18next';
4
+ import * as icons from './icons';
5
+ export default ({ items, hashParam, mobile, fallback, onActivate, }) => {
6
+ const tabs = useMemo(() => [
7
+ {
8
+ name: 'overview',
9
+ title: _('List'),
10
+ disabled: false,
11
+ content: icons.list,
12
+ },
13
+ {
14
+ name: 'split',
15
+ disabled: mobile || !(items.length > 0),
16
+ title: _('Split'),
17
+ content: icons.split,
18
+ },
19
+ {
20
+ name: 'queue',
21
+ disabled: !(items.length > 0),
22
+ title: _('Queue'),
23
+ content: icons.queue,
24
+ },
25
+ ].map((tab) => tab.name === fallback ? { ...tab, fallback: true } : tab), [items.length, mobile, fallback]);
26
+ const _tabnav = useTabs(tabs, { hashParam, onActivate }), tabnav = useMemo(() => _tabnav, Object.values(_tabnav)), activeTab = tabnav.active?.name;
27
+ return {
28
+ activeTab,
29
+ tabnav,
30
+ };
31
+ };
@@ -0,0 +1,9 @@
1
+ export interface ListItemDetail {
2
+ id: string;
3
+ remove: () => void;
4
+ }
5
+ declare const _default: ({ ensue }: {
6
+ ensue: (id: string) => void;
7
+ }) => void;
8
+ export default _default;
9
+ //# sourceMappingURL=use-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-updates.d.ts","sourceRoot":"","sources":["../../src/queue/use-updates.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,IAAI,CAAC;CACnB;yBAEe,WAAW;IAAE,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE;AAA1D,wBAiBE"}
@@ -0,0 +1,17 @@
1
+ import { useEffect } from '@pionjs/pion';
2
+ import { useMeta } from '@neovici/cosmoz-utils/hooks/use-meta';
3
+ import { useHost } from '@neovici/cosmoz-utils/hooks/use-host';
4
+ export default ({ ensue }) => {
5
+ const host = useHost(), meta = useMeta({ ensue });
6
+ useEffect(() => {
7
+ const onRemove = (e) => {
8
+ const { id, remove } = e
9
+ .detail;
10
+ e.preventDefault();
11
+ meta?.ensue(id);
12
+ remove();
13
+ };
14
+ host.addEventListener('list-item-remove', onRemove);
15
+ return () => host.removeEventListener('list-item-remove', onRemove);
16
+ }, []);
17
+ };
@@ -0,0 +1,4 @@
1
+ export declare const getItems: <I>(items: I[], selected: I[]) => I[];
2
+ export declare const normalizeHeaders: <I>(headers?: I[]) => I[];
3
+ export declare const touch: <L extends HTMLElement>(list: L, id: string) => void;
4
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/queue/util.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,QACL,CAAC;AAEjD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,UAAU,CAAC,EAAE,KAAG,CAAC,EAMpD,CAAC;AAMF,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,SAO/D,CAAC"}
@@ -0,0 +1,16 @@
1
+ export const getItems = (items, selected) => (selected?.length > 0 ? selected : items) ?? [];
2
+ export const normalizeHeaders = (headers) => {
3
+ if (!headers)
4
+ return [];
5
+ const items = headers[0]?.['items'];
6
+ return Array.isArray(items)
7
+ ? headers.flatMap((group) => group.items ?? [])
8
+ : headers;
9
+ };
10
+ export const touch = (list, id) => {
11
+ const ot = list?.shadowRoot?.querySelector('cosmoz-omnitable'), item = ot?.data?.find((i) => id === i.id);
12
+ if (!item) {
13
+ return;
14
+ }
15
+ ot.replaceItem(item, { ...item });
16
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @deprecated These types are temporary copies from @neovici/core.
3
+ * TODO: Refactor once cz-form is its own repo and import from there instead.
4
+ */
5
+ import type { TemplateResult } from 'lit';
6
+ export type Renderable = null | undefined | string | number | TemplateResult | ReadonlyArray<Renderable>;
7
+ export type Progress = [string | number, string | number];
8
+ export interface Field<T extends object, K extends keyof T = keyof T> {
9
+ id: K;
10
+ label?: string;
11
+ placeholder?: string;
12
+ disabled?: boolean;
13
+ hidden?: boolean;
14
+ mandatory?: boolean;
15
+ }
16
+ export type Fields<T extends object> = readonly Field<T, keyof T>[];
17
+ export interface Dialog<T extends object> {
18
+ heading: string;
19
+ title?: string;
20
+ name?: string;
21
+ description?: Renderable;
22
+ fields: Fields<T>;
23
+ initial: T;
24
+ onClose?: () => void;
25
+ onSave?: (values: T, initial: T, setProgress?: (p: Progress) => void) => PromiseLike<unknown>;
26
+ allowEmpty?: boolean;
27
+ auto?: boolean;
28
+ uncancelable?: boolean;
29
+ hideCancelButton?: boolean;
30
+ saveText?: string;
31
+ renderInPortal?: boolean;
32
+ backdrop?: boolean;
33
+ manualFocus?: boolean;
34
+ }
35
+ export interface Dialogable<T extends object> extends Dialog<T> {
36
+ preventClose?: boolean;
37
+ preventRefresh?: boolean;
38
+ }
39
+ //# sourceMappingURL=dialogable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialogable.d.ts","sourceRoot":"","sources":["../../src/types/dialogable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAE1C,MAAM,MAAM,UAAU,GACnB,IAAI,GACJ,SAAS,GACT,MAAM,GACN,MAAM,GACN,cAAc,GACd,aAAa,CAAC,UAAU,CAAC,CAAC;AAE7B,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC;IACnE,EAAE,EAAE,CAAC,CAAC;IACN,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;AAEpE,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @deprecated These types are temporary copies from @neovici/core.
3
+ * TODO: Refactor once cz-form is its own repo and import from there instead.
4
+ */
5
+ export {};
@@ -0,0 +1,5 @@
1
+ export type Performable<TAvailableAction = string> = {
2
+ action: TAvailableAction;
3
+ reasonCodeIds?: string[] | null;
4
+ };
5
+ //# sourceMappingURL=performable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performable.d.ts","sourceRoot":"","sources":["../../src/types/performable.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,CAAC,gBAAgB,GAAG,MAAM,IAAI;IACpD,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAChC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ declare const getActiveElement: (root?: Document | ShadowRoot) => HTMLElement | null;
2
+ export default getActiveElement;
3
+ //# sourceMappingURL=active-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-element.d.ts","sourceRoot":"","sources":["../../../src/util/dom/active-element.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,gBAAgB,GACrB,OAAM,QAAQ,GAAG,UAAqB,KACpC,WAAW,GAAG,IAYhB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,11 @@
1
+ const getActiveElement = (root = document) => {
2
+ const activeEl = root.activeElement;
3
+ if (!activeEl) {
4
+ return null;
5
+ }
6
+ if (activeEl.shadowRoot) {
7
+ return getActiveElement(activeEl.shadowRoot);
8
+ }
9
+ return activeEl;
10
+ };
11
+ export default getActiveElement;
@@ -0,0 +1,41 @@
1
+ export declare class RequestError extends Error {
2
+ response: Response;
3
+ data: unknown;
4
+ constructor(message: string, response: Response, data?: unknown);
5
+ }
6
+ export declare const notice: (data: unknown) => string;
7
+ export declare const setBaseInit: <T extends RequestInit>(init: T) => Partial<RequestInit> & {
8
+ body?: (BodyInit | null) | undefined;
9
+ cache?: RequestCache | undefined;
10
+ credentials?: RequestCredentials | undefined;
11
+ headers?: HeadersInit | undefined;
12
+ integrity?: string | undefined;
13
+ keepalive?: boolean | undefined;
14
+ method?: string | undefined;
15
+ mode?: RequestMode | undefined;
16
+ priority?: RequestPriority | undefined;
17
+ redirect?: RequestRedirect | undefined;
18
+ referrer?: string | undefined;
19
+ referrerPolicy?: ReferrerPolicy | undefined;
20
+ signal?: (AbortSignal | null) | undefined;
21
+ window?: null | undefined;
22
+ } & T & {
23
+ headers: {};
24
+ };
25
+ export declare const fetch: (url: string, opts?: RequestInit) => Promise<Response>;
26
+ export declare const handleJSON: (res: Response) => Promise<any> | "";
27
+ /**
28
+ * @deprecated
29
+ */
30
+ export declare const json: (url: string, { fetch: _fetch, handleJSON: _handleJSON, ...opts }?: RequestInit & {
31
+ fetch?: typeof fetch;
32
+ handleJSON?: typeof handleJSON;
33
+ }) => Promise<any>;
34
+ /**
35
+ * @deprecated
36
+ */
37
+ export declare const jsonPost: (url: string, body?: object | BodyInit, opts?: Omit<RequestInit, "body">) => Promise<any>;
38
+ export declare const jsonPut: (url: string, body?: object | BodyInit, opts?: Omit<RequestInit, "body">) => Promise<any>;
39
+ export declare const jsonPatch: (url: string, body: object | BodyInit, opts?: Omit<RequestInit, "body">) => Promise<any>;
40
+ export declare const jsonDelete: (url: string, body?: object | BodyInit, opts?: Omit<RequestInit, "body">) => Promise<any>;
41
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/util/fetch/fetch.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACtC,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,OAAO;CAM/D;AAUD,eAAO,MAAM,MAAM,GAAI,MAAM,OAAO,WAYnC,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,WAAW,EAAE,MAAM,CAAC;;;;;;;;;;;;;;;;;CAOzD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,EAAE,OAAO,WAAW,sBAUlD,CAAC;AAEJ,eAAO,MAAM,UAAU,GAAI,KAAK,QAAQ,sBAkBvC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,IAAI,GAChB,KAAK,MAAM,EACX,sDAIG,WAAW,GAAG;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;CAC1B,iBACiC,CAAC;AAEzC;;GAEG;AACH,eAAO,MAAM,QAAQ,GACpB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,QAAQ,EACxB,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,iBAU9B,CAAC;AAEJ,eAAO,MAAM,OAAO,GACnB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,QAAQ,EACxB,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,iBACmB,CAAC;AAErD,eAAO,MAAM,SAAS,GACrB,KAAK,MAAM,EACX,MAAM,MAAM,GAAG,QAAQ,EACvB,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,iBACqB,CAAC;AAEvD,eAAO,MAAM,UAAU,GACtB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,QAAQ,EACxB,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,iBACsB,CAAC"}