@e280/quay 0.0.0-7 → 0.0.0-9

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 (117) hide show
  1. package/package.json +13 -10
  2. package/s/demo/main.bundle.ts +2 -3
  3. package/s/dom/components/breadcrumb/component.ts +6 -5
  4. package/s/dom/components/browser/component.ts +11 -7
  5. package/s/dom/components/browser/style.css.ts +1 -1
  6. package/s/dom/components/dropzone/component.ts +6 -4
  7. package/s/dom/components/dropzone/style.css.ts +1 -1
  8. package/s/dom/components/filter/component.ts +11 -6
  9. package/s/dom/components/outliner/component.ts +8 -5
  10. package/s/dom/components/searchbar/component.ts +8 -5
  11. package/s/dom/components/sort/component.ts +10 -6
  12. package/s/dom/theme.css.ts +2 -1
  13. package/s/dom/views/tree/component.ts +10 -8
  14. package/s/dom/views/tree/style.css.ts +1 -1
  15. package/s/index.html.ts +68 -73
  16. package/s/index.ts +2 -1
  17. package/s/logic/aspects/codex/codex.ts +3 -3
  18. package/s/logic/aspects/codex/example.ts +1 -4
  19. package/s/logic/aspects/codex/parts/codex-item.ts +4 -4
  20. package/s/logic/aspects/codex/parts/types.ts +1 -1
  21. package/s/logic/aspects/dropzone.ts +20 -16
  22. package/s/logic/aspects/tree-trail.ts +5 -4
  23. package/s/logic/brain.ts +5 -3
  24. package/s/logic/group.ts +7 -7
  25. package/s/logic/presets/media/group.ts +5 -4
  26. package/s/logic/presets/media/schema.ts +1 -1
  27. package/s/logic/presets/opfs/schema.ts +1 -1
  28. package/s/logic/presets/plain/group.ts +2 -2
  29. package/s/logic/presets/plain/schema.ts +1 -1
  30. package/s/logic/types.ts +1 -1
  31. package/s/tests.test.ts +0 -1
  32. package/x/demo/main.bundle.js +2 -2
  33. package/x/demo/main.bundle.js.map +1 -1
  34. package/x/demo/main.bundle.min.js +105 -142
  35. package/x/demo/main.bundle.min.js.LEGAL.txt +33 -0
  36. package/x/demo/main.bundle.min.js.map +7 -0
  37. package/x/dom/components/breadcrumb/component.d.ts +1 -1
  38. package/x/dom/components/breadcrumb/component.js +6 -5
  39. package/x/dom/components/breadcrumb/component.js.map +1 -1
  40. package/x/dom/components/browser/component.d.ts +1 -1
  41. package/x/dom/components/browser/component.js +10 -7
  42. package/x/dom/components/browser/component.js.map +1 -1
  43. package/x/dom/components/browser/style.css.d.ts +1 -1
  44. package/x/dom/components/browser/style.css.js +1 -1
  45. package/x/dom/components/browser/style.css.js.map +1 -1
  46. package/x/dom/components/dropzone/component.d.ts +1 -1
  47. package/x/dom/components/dropzone/component.js +6 -4
  48. package/x/dom/components/dropzone/component.js.map +1 -1
  49. package/x/dom/components/dropzone/style.css.d.ts +1 -1
  50. package/x/dom/components/dropzone/style.css.js +1 -1
  51. package/x/dom/components/dropzone/style.css.js.map +1 -1
  52. package/x/dom/components/filter/component.d.ts +1 -1
  53. package/x/dom/components/filter/component.js +8 -6
  54. package/x/dom/components/filter/component.js.map +1 -1
  55. package/x/dom/components/outliner/component.d.ts +1 -1
  56. package/x/dom/components/outliner/component.js +7 -5
  57. package/x/dom/components/outliner/component.js.map +1 -1
  58. package/x/dom/components/searchbar/component.d.ts +1 -1
  59. package/x/dom/components/searchbar/component.js +7 -5
  60. package/x/dom/components/searchbar/component.js.map +1 -1
  61. package/x/dom/components/sort/component.d.ts +1 -1
  62. package/x/dom/components/sort/component.js +8 -6
  63. package/x/dom/components/sort/component.js.map +1 -1
  64. package/x/dom/components.d.ts +7 -7
  65. package/x/dom/theme.css.d.ts +1 -1
  66. package/x/dom/theme.css.js +1 -1
  67. package/x/dom/theme.css.js.map +1 -1
  68. package/x/dom/views/tree/component.d.ts +1 -6
  69. package/x/dom/views/tree/component.js +10 -8
  70. package/x/dom/views/tree/component.js.map +1 -1
  71. package/x/dom/views/tree/style.css.d.ts +1 -1
  72. package/x/dom/views/tree/style.css.js +1 -1
  73. package/x/dom/views/tree/style.css.js.map +1 -1
  74. package/x/index.d.ts +2 -1
  75. package/x/index.html +70 -167
  76. package/x/index.html.d.ts +1 -2
  77. package/x/index.html.js +67 -73
  78. package/x/index.html.js.map +1 -1
  79. package/x/index.js +2 -1
  80. package/x/index.js.map +1 -1
  81. package/x/logic/aspects/codex/codex.js +3 -3
  82. package/x/logic/aspects/codex/codex.js.map +1 -1
  83. package/x/logic/aspects/codex/example.d.ts +0 -1
  84. package/x/logic/aspects/codex/example.js +1 -3
  85. package/x/logic/aspects/codex/example.js.map +1 -1
  86. package/x/logic/aspects/codex/parts/codex-item.d.ts +1 -1
  87. package/x/logic/aspects/codex/parts/codex-item.js +4 -4
  88. package/x/logic/aspects/codex/parts/codex-item.js.map +1 -1
  89. package/x/logic/aspects/codex/parts/types.d.ts +1 -1
  90. package/x/logic/aspects/dropzone.d.ts +1 -1
  91. package/x/logic/aspects/dropzone.js +19 -15
  92. package/x/logic/aspects/dropzone.js.map +1 -1
  93. package/x/logic/aspects/tree-trail.d.ts +1 -1
  94. package/x/logic/aspects/tree-trail.js +4 -4
  95. package/x/logic/aspects/tree-trail.js.map +1 -1
  96. package/x/logic/brain.d.ts +4 -2
  97. package/x/logic/brain.js.map +1 -1
  98. package/x/logic/group.d.ts +4 -4
  99. package/x/logic/group.js +6 -6
  100. package/x/logic/group.js.map +1 -1
  101. package/x/logic/presets/media/group.d.ts +1 -1
  102. package/x/logic/presets/media/group.js +3 -3
  103. package/x/logic/presets/media/group.js.map +1 -1
  104. package/x/logic/presets/media/schema.d.ts +1 -1
  105. package/x/logic/presets/media/store.d.ts +22 -5
  106. package/x/logic/presets/opfs/schema.d.ts +1 -1
  107. package/x/logic/presets/plain/group.js +2 -2
  108. package/x/logic/presets/plain/group.js.map +1 -1
  109. package/x/logic/presets/plain/schema.d.ts +1 -1
  110. package/x/logic/types.d.ts +1 -1
  111. package/x/tests.test.d.ts +1 -1
  112. package/x/tests.test.js +0 -1
  113. package/x/tests.test.js.map +1 -1
  114. package/x/genius/folio.md +0 -29
  115. package/x/genius/quay.md +0 -13
  116. package/x/genius/turbo.md +0 -21
  117. package/x/importmap.json +0 -47
@@ -1,11 +1,12 @@
1
- import {ShockDragDrop, signal} from "@benev/slate"
1
+ import {loot} from "@e280/sly/loot"
2
+ import {signal} from "@e280/strata"
2
3
 
3
4
  import {Group} from "../group.js"
4
5
  import {CodexItem} from "./codex/parts/codex-item.js"
5
6
 
6
7
  export class Dropzone {
7
- #drag_drop = new ShockDragDrop<CodexItem, CodexItem>({
8
- handle_drop: (_e, grabbed, hovering) => this.group.move(grabbed, hovering)
8
+ #drag_drop = new loot.DragAndDrops<CodexItem, CodexItem>({
9
+ acceptDrop: (_e, grabbed, hovering) => this.group.move(grabbed, hovering)
9
10
  })
10
11
 
11
12
  constructor(private group: Group) {}
@@ -14,37 +15,40 @@ export class Dropzone {
14
15
  #hovering = signal<CodexItem | undefined>(undefined)
15
16
 
16
17
  get grabbed() {
17
- return this.#drag_drop.grabbed
18
+ return this.#drag_drop.dragging
18
19
  }
19
20
 
20
21
  get hovering() {
21
- return this.#drag_drop.hovering ?? this.#hovering.value
22
+ return this.#drag_drop.hovering ?? this.#hovering()
22
23
  }
23
24
 
24
- dragenter = (e: DragEvent, target?: CodexItem) => {
25
+ dragenter = (e: DragEvent, target: CodexItem) => {
25
26
  e.preventDefault()
26
- this.#drag_drop.dropzone.dragenter()(e)
27
- this.#hovering.value = target
27
+ this.#drag_drop.dropzone(() => target).dragenter(e)
28
+ this.#hovering(target)
28
29
  }
29
30
 
30
31
  dragleave = (e: DragEvent) => {
31
- this.#drag_drop.dropzone.dragleave()(e)
32
- this.#hovering.value = undefined
32
+ const hovering = this.hovering
33
+ if (hovering)
34
+ this.#drag_drop.dropzone(() => hovering).dragleave(e)
35
+ this.#hovering(undefined)
33
36
  }
34
37
 
35
38
  dragstart = (e: DragEvent, n: CodexItem) => {
36
39
  e.stopPropagation()
37
- this.#drag_drop.dragzone.dragstart(n)(e)
40
+ this.#drag_drop.dragzone(() => n).dragstart(e)
38
41
  }
39
42
 
40
43
  dragover = (e: DragEvent, n: CodexItem) => {
41
44
  e.preventDefault()
42
- this.#drag_drop.dropzone.dragover(n)(e)
45
+ this.#drag_drop.dropzone(() => n).dragover(e)
43
46
  }
44
47
 
45
48
  dragend = (e: DragEvent) => {
46
- this.#drag_drop.dragzone.dragend()(e)
47
- this.#hovering.value = undefined
49
+ this.#drag_drop.$draggy(undefined)
50
+ this.#drag_drop.$droppy(undefined)
51
+ this.#hovering(undefined)
48
52
  }
49
53
 
50
54
  drop = (e: DragEvent, target: CodexItem) => {
@@ -60,9 +64,9 @@ export class Dropzone {
60
64
  const parent = this.grabbed?.parent?.id === this.hovering?.id
61
65
 
62
66
  if(!same && !child && !parent)
63
- this.#drag_drop.dropzone.drop(target)(e)
67
+ this.#drag_drop.dropzone(() => target).drop(e)
64
68
 
65
- this.#hovering.value = undefined
69
+ this.#hovering(undefined)
66
70
  }
67
71
 
68
72
  change = (e: DragEvent, targetFolder: CodexItem) => {
@@ -1,4 +1,5 @@
1
- import {signal} from "@benev/slate"
1
+
2
+ import {signal} from "@e280/strata"
2
3
  import {Schema} from "./codex/parts/types.js"
3
4
  import {CodexItem} from "./codex/parts/codex-item.js"
4
5
 
@@ -6,7 +7,7 @@ export class TreeTrail<Sc extends Schema> {
6
7
  readonly signal = signal<CodexItem<Sc>[]>([])
7
8
 
8
9
  constructor(root: CodexItem<Sc>) {
9
- this.signal.value = [root]
10
+ this.signal([root])
10
11
  }
11
12
 
12
13
  setTrail(e: Event, item: CodexItem<Sc>) {
@@ -23,11 +24,11 @@ export class TreeTrail<Sc extends Schema> {
23
24
  cur = cur.parent
24
25
  }
25
26
 
26
- this.signal.value = trail
27
+ this.signal(trail)
27
28
  }
28
29
 
29
30
  get currentFolder() {
30
- return this.signal.value.at(-1)?.children ?? []
31
+ return this.signal().at(-1)?.children ?? []
31
32
  }
32
33
  }
33
34
 
package/s/logic/brain.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  import {MapG} from "@e280/stz"
3
3
  import {Group} from "./group.js"
4
4
 
5
+ type RegisteredGroup<G> = G extends Group<infer _Schema> ? G : never
6
+
5
7
  /**
6
8
  * Quay's global state
7
9
  * - manages groups
@@ -10,13 +12,13 @@ import {Group} from "./group.js"
10
12
  export class Brain {
11
13
  #groups = new MapG<string, Group>()
12
14
 
13
- setGroup<G extends Group>(name: string, group: G) {
15
+ setGroup<G>(name: string, group: RegisteredGroup<G>) {
14
16
  this.#groups.set(name, group)
15
17
  return group
16
18
  }
17
19
 
18
- getGroup<G extends Group>(name: string) {
19
- return this.#groups.require(name) as G
20
+ getGroup<G = Group>(name: string) {
21
+ return this.#groups.require(name) as RegisteredGroup<G>
20
22
  }
21
23
  }
22
24
 
package/s/logic/group.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import {sub} from "@e280/stz"
2
- import {signal} from "@benev/slate"
2
+ import {signal} from "@e280/strata"
3
3
 
4
4
  import {Permission} from "./permissions.js"
5
5
  import {Dropzone} from "./aspects/dropzone.js"
@@ -26,13 +26,13 @@ export class Group<Sc extends Schema = any> {
26
26
  }
27
27
 
28
28
  constructor(public config: GroupConfig<Sc>) {
29
- this.selectedFilter.value = config.defaultFilter
30
- this.selectedSort.value = config.defaultSort
29
+ this.selectedFilter(config.defaultFilter)
30
+ this.selectedSort(config.defaultSort)
31
31
  this.trail = new TreeTrail(config.root)
32
32
  }
33
33
 
34
34
  get permissions() {
35
- return this.config.permissions as (item: CodexItem) => Permission
35
+ return this.config.permissions as (item: CodexItem<Sc>) => Permission
36
36
  }
37
37
 
38
38
  getFilterFn(filterKey: string): SearchFn<Sc> {
@@ -49,13 +49,13 @@ export class Group<Sc extends Schema = any> {
49
49
  }
50
50
 
51
51
  sort(items: CodexItem<Sc>[]): CodexItem<Sc>[] {
52
- const sortFn = this.getSortFn(this.selectedSort.value)
52
+ const sortFn = this.getSortFn(this.selectedSort())
53
53
  return [...items].sort(sortFn)
54
54
  }
55
55
 
56
56
  matches(item: CodexItem<Sc>) {
57
- const filterFn = this.getFilterFn(this.selectedFilter.value)
58
- const searchFn = this.getSearchFn(this.searchText.value)
57
+ const filterFn = this.getFilterFn(this.selectedFilter())
58
+ const searchFn = this.getSearchFn(this.searchText())
59
59
  return filterFn(item) && searchFn(item)
60
60
  }
61
61
 
@@ -1,15 +1,16 @@
1
1
 
2
+ import {html} from "lit"
2
3
  import {MapG} from "@e280/stz"
3
- import {Content, html} from "@benev/slate"
4
+ import {Content} from "@e280/sly"
4
5
 
5
- import Quay from "../../../index.js"
6
6
  import {Group} from "../../group.js"
7
+ import {Permissions} from "../../permissions.js"
7
8
  import {Codex} from "../../aspects/codex/codex.js"
8
9
  import {MediaFormat, MediaSchema} from "./schema.js"
9
10
  import {GroupConfig, SearchFn, SortFn} from "../../types.js"
10
11
  import {CodexItem} from "../../aspects/codex/parts/codex-item.js"
11
12
 
12
- export class MediaGroup extends Group<MediaSchema> implements Group {
13
+ export class MediaGroup extends Group<MediaSchema> {
13
14
  static config = (): GroupConfig<MediaSchema> => {
14
15
  const formatIcons = new MapG<MediaFormat, Content>()
15
16
  .set("audio", html`<sl-icon name=music-note-beamed></sl-icon>`)
@@ -83,7 +84,7 @@ export class MediaGroup extends Group<MediaSchema> implements Group {
83
84
  // // TODO icons
84
85
  // : html`<sl-icon name=${item.taxon.icon}></sl-icon>`
85
86
  },
86
- permissions: item => Quay.permissions.all,
87
+ permissions: item => Permissions.all,
87
88
  }
88
89
  }
89
90
 
@@ -1,5 +1,5 @@
1
1
 
2
- import {Content} from "@benev/slate"
2
+ import {Content} from "@e280/sly"
3
3
  import {AsSchema} from "../../aspects/codex/parts/types.js"
4
4
 
5
5
  export type MediaFormat = "video" | "image" | "audio" | "other"
@@ -1,5 +1,5 @@
1
1
 
2
- import {Content} from "@benev/slate"
2
+ import {Content} from "@e280/sly"
3
3
  import {AsSchema} from "../../aspects/codex/parts/types.js"
4
4
 
5
5
  export type OpfsSchema = AsSchema<{
@@ -1,7 +1,7 @@
1
1
 
2
- import Quay from "../../../index.js"
3
2
  import {Group} from "../../group.js"
4
3
  import {PlainSchema} from "./schema.js"
4
+ import {Permissions} from "../../permissions.js"
5
5
  import {GroupConfig, SortFn} from "../../types.js"
6
6
  import {Codex} from "../../aspects/codex/codex.js"
7
7
 
@@ -33,7 +33,7 @@ export class PlainGroup extends Group<PlainSchema> {
33
33
  renderLabel: item => item.id,
34
34
  renderIcon: item => item.taxon.icon,
35
35
  renderPreview: () => null,
36
- permissions: item => Quay.permissions.all,
36
+ permissions: item => Permissions.all,
37
37
  }
38
38
  }
39
39
 
@@ -1,5 +1,5 @@
1
1
 
2
- import {Content} from "@benev/slate"
2
+ import {Content} from "@e280/sly"
3
3
  import {AsSchema} from "../../aspects/codex/parts/types.js"
4
4
 
5
5
  export type PlainSchema = AsSchema<{
package/s/logic/types.ts CHANGED
@@ -1,9 +1,9 @@
1
1
 
2
+ import {Content} from "@e280/sly"
2
3
  import {Permission} from "./permissions.js"
3
4
  import {Codex} from "./aspects/codex/codex.js"
4
5
  import {Schema} from "./aspects/codex/parts/types.js"
5
6
  import {CodexItem} from "./aspects/codex/parts/codex-item.js"
6
- import { Content } from "@benev/slate"
7
7
 
8
8
  export type SearchFn<Sc extends Schema> = (item: CodexItem<Sc>) => boolean
9
9
  export type SortFn<Sc extends Schema> = (a: CodexItem<Sc>, b: CodexItem<Sc>) => number
package/s/tests.test.ts CHANGED
@@ -1,5 +1,4 @@
1
1
 
2
- import "@benev/slate/x/node.js"
3
2
  import {Science} from "@e280/science"
4
3
  import cellar from "./cellar/cellar.test.js"
5
4
  import media from "./logic/presets/media/store.test.js"
@@ -1,4 +1,4 @@
1
- import { register } from "@benev/slate";
1
+ import { dom } from "@e280/sly";
2
2
  import { brain } from "../dom/context.js";
3
3
  import { MediaGroup } from "../logic/presets/media/group.js";
4
4
  import { components, setShoelaceDarkTheme } from "../dom/components.js";
@@ -26,5 +26,5 @@ group.on.upload.sub(({ files, target }) => {
26
26
  }
27
27
  });
28
28
  setShoelaceDarkTheme();
29
- register(components);
29
+ dom.register(components);
30
30
  //# sourceMappingURL=main.bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.bundle.js","sourceRoot":"","sources":["../../s/demo/main.bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAA;AACrC,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAA;AAE1D,OAAO,EAAC,UAAU,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAA;AAErE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;AACzD,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,KAAK,CAAC,MAAM,CAAA;AAElC,MAAM,UAAU,GAAG,sBAAsB,CAAA;AACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAC,CAAC,CAAA;AAClG,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC,CAAA;AACxF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAA;AAE7F,aAAa;AACb,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;AAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAA;AACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC,CAAA;AAExF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KACd,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC,OAAO,CAAC,CAAA;AAEjB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAExC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,EAAE,EAAE;IACvC,KAAI,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAgB,CAAA;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;AACF,CAAC,CAAC,CAAA;AAEF,oBAAoB,EAAE,CAAA;AACtB,QAAQ,CAAC,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"main.bundle.js","sourceRoot":"","sources":["../../s/demo/main.bundle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAA;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,iCAAiC,CAAA;AAE1D,OAAO,EAAC,UAAU,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAA;AAErE,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC,CAAA;AACzD,MAAM,EAAC,KAAK,EAAE,IAAI,EAAC,GAAG,KAAK,CAAC,MAAM,CAAA;AAElC,MAAM,UAAU,GAAG,sBAAsB,CAAA;AACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAC,CAAC,CAAA;AAClG,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC,CAAA;AACxF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAA;AAE7F,aAAa;AACb,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;AAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAA;AACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAC,CAAC,CAAA;AAExF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;KACd,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,OAAO,CAAC;KACf,MAAM,CAAC,OAAO,CAAC,CAAA;AAEjB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;AAExC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAC,EAAE,EAAE;IACvC,KAAI,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAgB,CAAA;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC,CAAA;QACzE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;AACF,CAAC,CAAC,CAAA;AAEF,oBAAoB,EAAE,CAAA;AACtB,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA"}