@e280/quay 0.0.0-2 → 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 (124) hide show
  1. package/README.md +28 -0
  2. package/package.json +13 -10
  3. package/s/demo/main.bundle.ts +2 -3
  4. package/s/dom/components/breadcrumb/component.ts +6 -5
  5. package/s/dom/components/browser/component.ts +11 -7
  6. package/s/dom/components/browser/style.css.ts +1 -1
  7. package/s/dom/components/dropzone/component.ts +6 -4
  8. package/s/dom/components/dropzone/style.css.ts +1 -1
  9. package/s/dom/components/filter/component.ts +11 -6
  10. package/s/dom/components/outliner/component.ts +8 -5
  11. package/s/dom/components/searchbar/component.ts +8 -5
  12. package/s/dom/components/sort/component.ts +10 -6
  13. package/s/dom/theme.css.ts +2 -1
  14. package/s/dom/views/tree/component.ts +10 -8
  15. package/s/dom/views/tree/style.css.ts +1 -1
  16. package/s/index.html.ts +68 -73
  17. package/s/index.ts +6 -1
  18. package/s/logic/aspects/codex/codex.ts +3 -3
  19. package/s/logic/aspects/codex/example.ts +1 -4
  20. package/s/logic/aspects/codex/parts/codex-item.ts +4 -4
  21. package/s/logic/aspects/codex/parts/types.ts +1 -1
  22. package/s/logic/aspects/dropzone.ts +20 -16
  23. package/s/logic/aspects/tree-trail.ts +5 -4
  24. package/s/logic/brain.ts +5 -3
  25. package/s/logic/group.ts +7 -7
  26. package/s/logic/presets/media/group.ts +5 -4
  27. package/s/logic/presets/media/schema.ts +4 -1
  28. package/s/logic/presets/media/store.test.ts +41 -0
  29. package/s/logic/presets/media/store.ts +163 -0
  30. package/s/logic/presets/opfs/schema.ts +1 -1
  31. package/s/logic/presets/plain/group.ts +2 -2
  32. package/s/logic/presets/plain/schema.ts +1 -1
  33. package/s/logic/types.ts +1 -1
  34. package/s/tests.test.ts +2 -0
  35. package/x/demo/main.bundle.js +2 -2
  36. package/x/demo/main.bundle.js.map +1 -1
  37. package/x/demo/main.bundle.min.js +105 -142
  38. package/x/demo/main.bundle.min.js.LEGAL.txt +33 -0
  39. package/x/demo/main.bundle.min.js.map +7 -0
  40. package/x/dom/components/breadcrumb/component.d.ts +1 -1
  41. package/x/dom/components/breadcrumb/component.js +6 -5
  42. package/x/dom/components/breadcrumb/component.js.map +1 -1
  43. package/x/dom/components/browser/component.d.ts +1 -1
  44. package/x/dom/components/browser/component.js +10 -7
  45. package/x/dom/components/browser/component.js.map +1 -1
  46. package/x/dom/components/browser/style.css.d.ts +1 -1
  47. package/x/dom/components/browser/style.css.js +1 -1
  48. package/x/dom/components/browser/style.css.js.map +1 -1
  49. package/x/dom/components/dropzone/component.d.ts +1 -1
  50. package/x/dom/components/dropzone/component.js +6 -4
  51. package/x/dom/components/dropzone/component.js.map +1 -1
  52. package/x/dom/components/dropzone/style.css.d.ts +1 -1
  53. package/x/dom/components/dropzone/style.css.js +1 -1
  54. package/x/dom/components/dropzone/style.css.js.map +1 -1
  55. package/x/dom/components/filter/component.d.ts +1 -1
  56. package/x/dom/components/filter/component.js +8 -6
  57. package/x/dom/components/filter/component.js.map +1 -1
  58. package/x/dom/components/outliner/component.d.ts +1 -1
  59. package/x/dom/components/outliner/component.js +7 -5
  60. package/x/dom/components/outliner/component.js.map +1 -1
  61. package/x/dom/components/searchbar/component.d.ts +1 -1
  62. package/x/dom/components/searchbar/component.js +7 -5
  63. package/x/dom/components/searchbar/component.js.map +1 -1
  64. package/x/dom/components/sort/component.d.ts +1 -1
  65. package/x/dom/components/sort/component.js +8 -6
  66. package/x/dom/components/sort/component.js.map +1 -1
  67. package/x/dom/components.d.ts +7 -7
  68. package/x/dom/theme.css.d.ts +1 -1
  69. package/x/dom/theme.css.js +1 -1
  70. package/x/dom/theme.css.js.map +1 -1
  71. package/x/dom/views/tree/component.d.ts +1 -6
  72. package/x/dom/views/tree/component.js +10 -8
  73. package/x/dom/views/tree/component.js.map +1 -1
  74. package/x/dom/views/tree/style.css.d.ts +1 -1
  75. package/x/dom/views/tree/style.css.js +1 -1
  76. package/x/dom/views/tree/style.css.js.map +1 -1
  77. package/x/index.d.ts +6 -1
  78. package/x/index.html +70 -167
  79. package/x/index.html.d.ts +1 -2
  80. package/x/index.html.js +67 -73
  81. package/x/index.html.js.map +1 -1
  82. package/x/index.js +6 -1
  83. package/x/index.js.map +1 -1
  84. package/x/logic/aspects/codex/codex.js +3 -3
  85. package/x/logic/aspects/codex/codex.js.map +1 -1
  86. package/x/logic/aspects/codex/example.d.ts +0 -1
  87. package/x/logic/aspects/codex/example.js +1 -3
  88. package/x/logic/aspects/codex/example.js.map +1 -1
  89. package/x/logic/aspects/codex/parts/codex-item.d.ts +1 -1
  90. package/x/logic/aspects/codex/parts/codex-item.js +4 -4
  91. package/x/logic/aspects/codex/parts/codex-item.js.map +1 -1
  92. package/x/logic/aspects/codex/parts/types.d.ts +1 -1
  93. package/x/logic/aspects/dropzone.d.ts +1 -1
  94. package/x/logic/aspects/dropzone.js +19 -15
  95. package/x/logic/aspects/dropzone.js.map +1 -1
  96. package/x/logic/aspects/tree-trail.d.ts +1 -1
  97. package/x/logic/aspects/tree-trail.js +4 -4
  98. package/x/logic/aspects/tree-trail.js.map +1 -1
  99. package/x/logic/brain.d.ts +4 -2
  100. package/x/logic/brain.js.map +1 -1
  101. package/x/logic/group.d.ts +4 -4
  102. package/x/logic/group.js +6 -6
  103. package/x/logic/group.js.map +1 -1
  104. package/x/logic/presets/media/group.d.ts +1 -1
  105. package/x/logic/presets/media/group.js +3 -3
  106. package/x/logic/presets/media/group.js.map +1 -1
  107. package/x/logic/presets/media/schema.d.ts +4 -1
  108. package/x/logic/presets/media/store.d.ts +92 -0
  109. package/x/logic/presets/media/store.js +129 -0
  110. package/x/logic/presets/media/store.js.map +1 -0
  111. package/x/logic/presets/media/store.test.d.ts +7 -0
  112. package/x/logic/presets/media/store.test.js +31 -0
  113. package/x/logic/presets/media/store.test.js.map +1 -0
  114. package/x/logic/presets/opfs/schema.d.ts +1 -1
  115. package/x/logic/presets/plain/group.js +2 -2
  116. package/x/logic/presets/plain/group.js.map +1 -1
  117. package/x/logic/presets/plain/schema.d.ts +1 -1
  118. package/x/logic/types.d.ts +1 -1
  119. package/x/tests.test.js +2 -0
  120. package/x/tests.test.js.map +1 -1
  121. package/x/genius/folio.md +0 -29
  122. package/x/genius/quay.md +0 -13
  123. package/x/genius/turbo.md +0 -21
  124. package/x/importmap.json +0 -47
@@ -1,8 +1,9 @@
1
- import { ShockDragDrop, signal } from "@benev/slate";
1
+ import { loot } from "@e280/sly/loot";
2
+ import { signal } from "@e280/strata";
2
3
  export class Dropzone {
3
4
  group;
4
- #drag_drop = new ShockDragDrop({
5
- handle_drop: (_e, grabbed, hovering) => this.group.move(grabbed, hovering)
5
+ #drag_drop = new loot.DragAndDrops({
6
+ acceptDrop: (_e, grabbed, hovering) => this.group.move(grabbed, hovering)
6
7
  });
7
8
  constructor(group) {
8
9
  this.group = group;
@@ -10,31 +11,34 @@ export class Dropzone {
10
11
  // to make drop file to import ui work
11
12
  #hovering = signal(undefined);
12
13
  get grabbed() {
13
- return this.#drag_drop.grabbed;
14
+ return this.#drag_drop.dragging;
14
15
  }
15
16
  get hovering() {
16
- return this.#drag_drop.hovering ?? this.#hovering.value;
17
+ return this.#drag_drop.hovering ?? this.#hovering();
17
18
  }
18
19
  dragenter = (e, target) => {
19
20
  e.preventDefault();
20
- this.#drag_drop.dropzone.dragenter()(e);
21
- this.#hovering.value = target;
21
+ this.#drag_drop.dropzone(() => target).dragenter(e);
22
+ this.#hovering(target);
22
23
  };
23
24
  dragleave = (e) => {
24
- this.#drag_drop.dropzone.dragleave()(e);
25
- this.#hovering.value = undefined;
25
+ const hovering = this.hovering;
26
+ if (hovering)
27
+ this.#drag_drop.dropzone(() => hovering).dragleave(e);
28
+ this.#hovering(undefined);
26
29
  };
27
30
  dragstart = (e, n) => {
28
31
  e.stopPropagation();
29
- this.#drag_drop.dragzone.dragstart(n)(e);
32
+ this.#drag_drop.dragzone(() => n).dragstart(e);
30
33
  };
31
34
  dragover = (e, n) => {
32
35
  e.preventDefault();
33
- this.#drag_drop.dropzone.dragover(n)(e);
36
+ this.#drag_drop.dropzone(() => n).dragover(e);
34
37
  };
35
38
  dragend = (e) => {
36
- this.#drag_drop.dragzone.dragend()(e);
37
- this.#hovering.value = undefined;
39
+ this.#drag_drop.$draggy(undefined);
40
+ this.#drag_drop.$droppy(undefined);
41
+ this.#hovering(undefined);
38
42
  };
39
43
  drop = (e, target) => {
40
44
  e.preventDefault();
@@ -46,8 +50,8 @@ export class Dropzone {
46
50
  const child = this.grabbed?.children.some(c => this.hovering?.id === c.id);
47
51
  const parent = this.grabbed?.parent?.id === this.hovering?.id;
48
52
  if (!same && !child && !parent)
49
- this.#drag_drop.dropzone.drop(target)(e);
50
- this.#hovering.value = undefined;
53
+ this.#drag_drop.dropzone(() => target).drop(e);
54
+ this.#hovering(undefined);
51
55
  };
52
56
  change = (e, targetFolder) => {
53
57
  const input = e.currentTarget;
@@ -1 +1 @@
1
- {"version":3,"file":"dropzone.js","sourceRoot":"","sources":["../../../s/logic/aspects/dropzone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dropzone.js","sourceRoot":"","sources":["../../../s/logic/aspects/dropzone.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Schema } from "./codex/parts/types.js";
2
2
  import { CodexItem } from "./codex/parts/codex-item.js";
3
3
  export declare class TreeTrail<Sc extends Schema> {
4
- readonly signal: import("@benev/slate").Signal<CodexItem<Sc, keyof Sc["specimens"]>[]>;
4
+ readonly signal: import("@e280/strata").Signal<CodexItem<Sc, keyof Sc["specimens"]>[]>;
5
5
  constructor(root: CodexItem<Sc>);
6
6
  setTrail(e: Event, item: CodexItem<Sc>): void;
7
7
  get currentFolder(): CodexItem<Sc, keyof Sc["specimens"]>[];
@@ -1,8 +1,8 @@
1
- import { signal } from "@benev/slate";
1
+ import { signal } from "@e280/strata";
2
2
  export class TreeTrail {
3
3
  signal = signal([]);
4
4
  constructor(root) {
5
- this.signal.value = [root];
5
+ this.signal([root]);
6
6
  }
7
7
  setTrail(e, item) {
8
8
  if (e.target !== e.currentTarget)
@@ -15,10 +15,10 @@ export class TreeTrail {
15
15
  trail.unshift(cur);
16
16
  cur = cur.parent;
17
17
  }
18
- this.signal.value = trail;
18
+ this.signal(trail);
19
19
  }
20
20
  get currentFolder() {
21
- return this.signal.value.at(-1)?.children ?? [];
21
+ return this.signal().at(-1)?.children ?? [];
22
22
  }
23
23
  }
24
24
  //# sourceMappingURL=tree-trail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-trail.js","sourceRoot":"","sources":["../../../s/logic/aspects/tree-trail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAInC,MAAM,OAAO,SAAS;IACZ,MAAM,GAAG,MAAM,CAAkB,EAAE,CAAC,CAAA;IAE7C,YAAY,IAAmB;QAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,QAAQ,CAAC,CAAQ,EAAE,IAAmB;QACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;YAAE,OAAM;QAExC,MAAM,KAAK,GAAoB,EAAE,CAAA;QAEjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC/B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAEd,OAAO,GAAG,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAA;IAChD,CAAC;CACD"}
1
+ {"version":3,"file":"tree-trail.js","sourceRoot":"","sources":["../../../s/logic/aspects/tree-trail.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAInC,MAAM,OAAO,SAAS;IACZ,MAAM,GAAG,MAAM,CAAkB,EAAE,CAAC,CAAA;IAE7C,YAAY,IAAmB;QAC9B,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACpB,CAAC;IAED,QAAQ,CAAC,CAAQ,EAAE,IAAmB;QACrC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;YAAE,OAAM;QAExC,MAAM,KAAK,GAAoB,EAAE,CAAA;QAEjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC/B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;QAEd,OAAO,GAAG,EAAE,CAAC;YACZ,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAA;QACjB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC;IAED,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAA;IAC5C,CAAC;CACD"}
@@ -1,4 +1,5 @@
1
1
  import { Group } from "./group.js";
2
+ type RegisteredGroup<G> = G extends Group<infer _Schema> ? G : never;
2
3
  /**
3
4
  * Quay's global state
4
5
  * - manages groups
@@ -6,6 +7,7 @@ import { Group } from "./group.js";
6
7
  */
7
8
  export declare class Brain {
8
9
  #private;
9
- setGroup<G extends Group>(name: string, group: G): G;
10
- getGroup<G extends Group>(name: string): G;
10
+ setGroup<G>(name: string, group: RegisteredGroup<G>): RegisteredGroup<G>;
11
+ getGroup<G = Group>(name: string): RegisteredGroup<G>;
11
12
  }
13
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"brain.js","sourceRoot":"","sources":["../../s/logic/brain.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B;;;;GAIG;AACH,MAAM,OAAO,KAAK;IACjB,OAAO,GAAG,IAAI,IAAI,EAAiB,CAAA;IAEnC,QAAQ,CAAkB,IAAY,EAAE,KAAQ;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7B,OAAO,KAAK,CAAA;IACb,CAAC;IAED,QAAQ,CAAkB,IAAY;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAM,CAAA;IACvC,CAAC;CACD"}
1
+ {"version":3,"file":"brain.js","sourceRoot":"","sources":["../../s/logic/brain.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAK9B;;;;GAIG;AACH,MAAM,OAAO,KAAK;IACjB,OAAO,GAAG,IAAI,IAAI,EAAiB,CAAA;IAEnC,QAAQ,CAAI,IAAY,EAAE,KAAyB;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7B,OAAO,KAAK,CAAA;IACb,CAAC;IAED,QAAQ,CAAY,IAAY;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAuB,CAAA;IACxD,CAAC;CACD"}
@@ -8,9 +8,9 @@ export declare class Group<Sc extends Schema = any> {
8
8
  config: GroupConfig<Sc>;
9
9
  trail: TreeTrail<Sc>;
10
10
  dropzone: Dropzone;
11
- searchText: import("@benev/slate").Signal<string>;
12
- selectedFilter: import("@benev/slate").Signal<string>;
13
- selectedSort: import("@benev/slate").Signal<string>;
11
+ searchText: import("@e280/strata").Signal<string>;
12
+ selectedFilter: import("@e280/strata").Signal<string>;
13
+ selectedSort: import("@e280/strata").Signal<string>;
14
14
  on: {
15
15
  newFolder: import("@e280/stz").Sub<[{
16
16
  parent: CodexItem<Sc>;
@@ -36,7 +36,7 @@ export declare class Group<Sc extends Schema = any> {
36
36
  refresh: import("@e280/stz").Sub<[{}]>;
37
37
  };
38
38
  constructor(config: GroupConfig<Sc>);
39
- get permissions(): (item: CodexItem) => Permission;
39
+ get permissions(): (item: CodexItem<Sc>) => Permission;
40
40
  getFilterFn(filterKey: string): SearchFn<Sc>;
41
41
  getSearchFn(searchText: string): SearchFn<Sc>;
42
42
  getSortFn(sortKey: string): SortFn<Sc>;
package/x/logic/group.js 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
  import { Dropzone } from "./aspects/dropzone.js";
4
4
  import { TreeTrail } from "./aspects/tree-trail.js";
5
5
  export class Group {
@@ -20,8 +20,8 @@ export class Group {
20
20
  };
21
21
  constructor(config) {
22
22
  this.config = config;
23
- this.selectedFilter.value = config.defaultFilter;
24
- this.selectedSort.value = config.defaultSort;
23
+ this.selectedFilter(config.defaultFilter);
24
+ this.selectedSort(config.defaultSort);
25
25
  this.trail = new TreeTrail(config.root);
26
26
  }
27
27
  get permissions() {
@@ -38,12 +38,12 @@ export class Group {
38
38
  return this.config.sorts?.get(sortKey) ?? (() => 0);
39
39
  }
40
40
  sort(items) {
41
- const sortFn = this.getSortFn(this.selectedSort.value);
41
+ const sortFn = this.getSortFn(this.selectedSort());
42
42
  return [...items].sort(sortFn);
43
43
  }
44
44
  matches(item) {
45
- const filterFn = this.getFilterFn(this.selectedFilter.value);
46
- const searchFn = this.getSearchFn(this.searchText.value);
45
+ const filterFn = this.getFilterFn(this.selectedFilter());
46
+ const searchFn = this.getSearchFn(this.searchText());
47
47
  return filterFn(item) && searchFn(item);
48
48
  }
49
49
  move(item, target) {
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../s/logic/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../s/logic/group.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { Group } from "../../group.js";
2
2
  import { MediaSchema } from "./schema.js";
3
3
  import { GroupConfig } from "../../types.js";
4
- export declare class MediaGroup extends Group<MediaSchema> implements Group {
4
+ export declare class MediaGroup extends Group<MediaSchema> {
5
5
  static config: () => GroupConfig<MediaSchema>;
6
6
  constructor();
7
7
  }
@@ -1,7 +1,7 @@
1
+ import { html } from "lit";
1
2
  import { MapG } from "@e280/stz";
2
- import { html } from "@benev/slate";
3
- import Quay from "../../../index.js";
4
3
  import { Group } from "../../group.js";
4
+ import { Permissions } from "../../permissions.js";
5
5
  import { Codex } from "../../aspects/codex/codex.js";
6
6
  export class MediaGroup extends Group {
7
7
  static config = () => {
@@ -65,7 +65,7 @@ export class MediaGroup extends Group {
65
65
  // // TODO icons
66
66
  // : html`<sl-icon name=${item.taxon.icon}></sl-icon>`
67
67
  },
68
- permissions: item => Quay.permissions.all,
68
+ permissions: item => Permissions.all,
69
69
  };
70
70
  };
71
71
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/group.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/group.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAC,KAAK,EAAC,MAAM,8BAA8B,CAAA;AAKlD,MAAM,OAAO,UAAW,SAAQ,KAAkB;IACjD,MAAM,CAAC,MAAM,GAAG,GAA6B,EAAE;QAC9C,MAAM,WAAW,GAAG,IAAI,IAAI,EAAwB;aAClD,GAAG,CAAC,OAAO,EAAE,IAAI,CAAA,4CAA4C,CAAC;aAC9D,GAAG,CAAC,OAAO,EAAE,IAAI,CAAA,+BAA+B,CAAC;aACjD,GAAG,CAAC,OAAO,EAAE,IAAI,CAAA,gCAAgC,CAAC;aAClD,GAAG,CAAC,OAAO,EAAE,IAAI,CAAA,uCAAuC,CAAC,CAAA;QAE3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC;aACtD,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;aACtB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;aACxG,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAA;QAE1G,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B;aAClD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACxE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACvB,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACvC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;YAE1D,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAA;YAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,CAAA;YAE9B,OAAO,CAAC,CAAA;QACT,CAAC,CAAC,CAAA;QAEH,MAAM,MAAM,GAA+D,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAClD,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAA;YAE7B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;YACzD,CAAC;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACzD,CAAC,CAAA;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAc;YACtC,MAAM,EAAE,EAAC,IAAI,EAAE,IAAI,CAAA,mCAAmC,EAAC;YACvD,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,CAAA,iCAAiC,EAAC;SACnD,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACtB,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAC1C,CAAA;QAED,MAAM,UAAU,GAAG,CAAC,IAA4B,EAAE,MAAe,EAAE,EAAE;YACpE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;gBACzB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3C,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,yCAAyC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;QAC5E,CAAC,CAAA;QAED,OAAO;YACN,KAAK;YACL,IAAI;YACJ,KAAK;YACL,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,OAAO;YACpB,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAClC,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YAC1B,CAAC;YACD,UAAU;YACV,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK;YACxC,aAAa,EAAE,CAAC,IAA4B,EAAE,EAAE;gBAC/C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACvD,CAAC,CAAC,IAAI,CAAA,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG;oBAC7C,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;gBACzB,gBAAgB;gBAChB,sDAAsD;YACxD,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG;SACpC,CAAA;IACF,CAAC,CAAA;IAED;QACC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Content } from "@benev/slate";
1
+ import { Content } from "@e280/sly";
2
2
  import { AsSchema } from "../../aspects/codex/parts/types.js";
3
3
  export type MediaFormat = "video" | "image" | "audio" | "other";
4
4
  export type MediaSchema = AsSchema<{
@@ -13,6 +13,9 @@ export type MediaSchema = AsSchema<{
13
13
  label: string;
14
14
  format: MediaFormat;
15
15
  previewUrl: string | null;
16
+ hash?: string;
17
+ mime?: string;
18
+ size?: number;
16
19
  };
17
20
  };
18
21
  }>;
@@ -0,0 +1,92 @@
1
+ import { Cellar } from "../../../cellar/cellar.js";
2
+ import { MediaFormat } from "./schema.js";
3
+ import { MediaGroup } from "./group.js";
4
+ export type MediaRecord = {
5
+ hash: string;
6
+ label: string;
7
+ format: MediaFormat;
8
+ mime: string;
9
+ size: number;
10
+ createdAt: number;
11
+ updatedAt: number;
12
+ };
13
+ export declare class MediaStore extends MediaGroup {
14
+ #private;
15
+ static open(scope?: string): Promise<MediaStore>;
16
+ cellar: Cellar;
17
+ constructor();
18
+ records(): AsyncGenerator<MediaRecord, void, unknown>;
19
+ importFiles(files: File[], parent?: import("../../aspects/codex/parts/codex-item.js").CodexItem<{
20
+ taxon: {
21
+ icon: import("@e280/sly").Content;
22
+ };
23
+ specimens: {
24
+ folder: {
25
+ label: string;
26
+ };
27
+ file: {
28
+ label: string;
29
+ format: MediaFormat;
30
+ previewUrl: string | null;
31
+ hash?: string;
32
+ mime?: string;
33
+ size?: number;
34
+ };
35
+ };
36
+ }, "file" | "folder">): Promise<MediaRecord[]>;
37
+ importFile(file: File, parent?: import("../../aspects/codex/parts/codex-item.js").CodexItem<{
38
+ taxon: {
39
+ icon: import("@e280/sly").Content;
40
+ };
41
+ specimens: {
42
+ folder: {
43
+ label: string;
44
+ };
45
+ file: {
46
+ label: string;
47
+ format: MediaFormat;
48
+ previewUrl: string | null;
49
+ hash?: string;
50
+ mime?: string;
51
+ size?: number;
52
+ };
53
+ };
54
+ }, "file" | "folder">): Promise<MediaRecord>;
55
+ remove(hash: string): Promise<void>;
56
+ findByHash(hash: string): (import("../../aspects/codex/parts/codex-item.js").CodexItem<{
57
+ taxon: {
58
+ icon: import("@e280/sly").Content;
59
+ };
60
+ specimens: {
61
+ folder: {
62
+ label: string;
63
+ };
64
+ file: {
65
+ label: string;
66
+ format: MediaFormat;
67
+ previewUrl: string | null;
68
+ hash?: string;
69
+ mime?: string;
70
+ size?: number;
71
+ };
72
+ };
73
+ }, "file" | "folder"> & import("../../aspects/codex/parts/codex-item.js").CodexItem<{
74
+ taxon: {
75
+ icon: import("@e280/sly").Content;
76
+ };
77
+ specimens: {
78
+ folder: {
79
+ label: string;
80
+ };
81
+ file: {
82
+ label: string;
83
+ format: MediaFormat;
84
+ previewUrl: string | null;
85
+ hash?: string;
86
+ mime?: string;
87
+ size?: number;
88
+ };
89
+ };
90
+ }, "file">) | undefined;
91
+ dispose(): void;
92
+ }
@@ -0,0 +1,129 @@
1
+ import { Kv, StorageDriver } from "@e280/kv";
2
+ import { Cellar } from "../../../cellar/cellar.js";
3
+ import { MediaGroup } from "./group.js";
4
+ export class MediaStore extends MediaGroup {
5
+ static async open(scope = "default") {
6
+ const group = new this();
7
+ group.cellar = await Cellar.opfs("media");
8
+ group.#index = mediaIndex(scope);
9
+ await group.#load();
10
+ return group;
11
+ }
12
+ #objectUrls = new Map();
13
+ #index;
14
+ cellar = new Cellar();
15
+ constructor() {
16
+ super();
17
+ this.#index = mediaIndex("default");
18
+ this.on.upload.sub(({ files, target }) => {
19
+ void this.importFiles(files, target);
20
+ });
21
+ }
22
+ async *records() {
23
+ for await (const [, record] of this.#index.entries())
24
+ yield record;
25
+ }
26
+ async #load() {
27
+ for await (const record of this.records()) {
28
+ if (record.format === "image" && !this.#objectUrls.has(record.hash))
29
+ await this.#loadPreview(record);
30
+ this.#attachRecord(record, this.config.root);
31
+ }
32
+ }
33
+ async importFiles(files, parent = this.config.root) {
34
+ return Promise.all(files.map(f => this.importFile(f, parent)));
35
+ }
36
+ async importFile(file, parent = this.config.root) {
37
+ const bytes = new Uint8Array(await file.arrayBuffer());
38
+ const cask = await this.cellar.save(bytes);
39
+ const existing = await this.#index.get(cask.hash);
40
+ const now = Date.now();
41
+ const record = {
42
+ hash: cask.hash,
43
+ label: existing?.label ?? file.name,
44
+ format: mediaFormat(file.type),
45
+ mime: file.type,
46
+ size: file.size,
47
+ createdAt: existing?.createdAt ?? now,
48
+ updatedAt: now,
49
+ };
50
+ await this.#index.set(record.hash, record);
51
+ if (record.format === "image")
52
+ this.#setPreview(record.hash, URL.createObjectURL(file));
53
+ this.#attachRecord(record, parent);
54
+ return record;
55
+ }
56
+ async remove(hash) {
57
+ await this.#index.del(hash);
58
+ await this.cellar.delete(hash);
59
+ const item = this.findByHash(hash);
60
+ if (item) {
61
+ item.detach();
62
+ item.destroy();
63
+ }
64
+ this.#revokePreview(hash);
65
+ }
66
+ findByHash(hash) {
67
+ for (const [item] of this.config.root.crawl()) {
68
+ if (item.isKind("file") && item.specimen.hash === hash)
69
+ return item;
70
+ }
71
+ }
72
+ dispose() {
73
+ for (const url of this.#objectUrls.values())
74
+ URL.revokeObjectURL(url);
75
+ this.#objectUrls.clear();
76
+ }
77
+ #attachRecord(record, parent = this.config.root) {
78
+ const existing = this.findByHash(record.hash);
79
+ if (existing)
80
+ return existing;
81
+ const item = this.config.codex.create("file", {
82
+ hash: record.hash,
83
+ label: record.label,
84
+ format: record.format,
85
+ mime: record.mime,
86
+ size: record.size,
87
+ previewUrl: this.#objectUrls.get(record.hash) ?? null,
88
+ });
89
+ parent.attach(item);
90
+ return item;
91
+ }
92
+ async #loadPreview(record) {
93
+ const cask = await this.cellar.load(record.hash);
94
+ const blob = new Blob([cask.bytes], { type: record.mime || "image/*" });
95
+ return this.#setPreview(record.hash, URL.createObjectURL(blob));
96
+ }
97
+ #setPreview(hash, url) {
98
+ this.#revokePreview(hash);
99
+ this.#objectUrls.set(hash, url);
100
+ return url;
101
+ }
102
+ #revokePreview(hash) {
103
+ const url = this.#objectUrls.get(hash);
104
+ if (url) {
105
+ URL.revokeObjectURL(url);
106
+ this.#objectUrls.delete(hash);
107
+ }
108
+ }
109
+ }
110
+ const mediaFormats = new Set(["video", "image", "audio"]);
111
+ const memoryIndexes = new Map();
112
+ function mediaFormat(mime) {
113
+ const [type] = mime.split("/");
114
+ return mediaFormats.has(type) ? type : "other";
115
+ }
116
+ function mediaIndex(scope) {
117
+ const storage = globalThis.localStorage;
118
+ if (storage)
119
+ return new Kv(new StorageDriver(storage))
120
+ .namespace("quay.media")
121
+ .namespace(scope);
122
+ const existing = memoryIndexes.get(scope);
123
+ if (existing)
124
+ return existing;
125
+ const index = new Kv();
126
+ memoryIndexes.set(scope, index);
127
+ return index;
128
+ }
129
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Science } from "@e280/science";
2
+ declare const _default: {
3
+ "imports files into cellar and index": Science.Test;
4
+ "lists media records": Science.Test;
5
+ "removes media records and bytes": Science.Test;
6
+ };
7
+ export default _default;
@@ -0,0 +1,31 @@
1
+ import { Txt } from "@e280/stz";
2
+ import { expect, Science, test } from "@e280/science";
3
+ import { MediaStore } from "./store.js";
4
+ delete globalThis.localStorage;
5
+ export default Science.suite({
6
+ "imports files into cellar and index": test(async () => {
7
+ const group = new MediaStore();
8
+ const file = new File([Txt.toBytes("hello")], "hello.txt", { type: "text/plain" });
9
+ const [record] = await group.importFiles([file]);
10
+ expect(await group.cellar.has(record.hash)).is(true);
11
+ expect(group.findByHash(record.hash)?.specimen.label).is("hello.txt");
12
+ }),
13
+ "lists media records": test(async () => {
14
+ const store = new MediaStore();
15
+ const file = new File([Txt.toBytes("image")], "image.png", { type: "image/png" });
16
+ const record = await store.importFile(file);
17
+ const records = [];
18
+ for await (const record of store.records())
19
+ records.push(record);
20
+ expect(records.some(r => r.hash === record.hash)).is(true);
21
+ }),
22
+ "removes media records and bytes": test(async () => {
23
+ const store = new MediaStore();
24
+ const file = new File([Txt.toBytes("image")], "image.png", { type: "image/png" });
25
+ const record = await store.importFile(file);
26
+ await store.remove(record.hash);
27
+ expect(await store.cellar.has(record.hash)).is(false);
28
+ expect(store.findByHash(record.hash)).is(undefined);
29
+ }),
30
+ });
31
+ //# sourceMappingURL=store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../../../s/logic/presets/media/store.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAC,MAAM,eAAe,CAAA;AAEnD,OAAO,EAAC,UAAU,EAAC,MAAM,YAAY,CAAA;AAErC,OAAQ,UAAkB,CAAC,YAAY,CAAA;AAEvC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,qCAAqC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAC,IAAI,EAAE,YAAY,EAAC,CAAC,CAAA;QAEhF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAEhD,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IACtE,CAAC,CAAC;IAEF,qBAAqB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YACzC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAErB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAC;IAEF,iCAAiC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACjD,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAA;QAC9B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,WAAW,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAA;QAC/E,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAE3C,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE/B,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QACrD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC,CAAC;CACF,CAAC,CAAA"}
@@ -1,4 +1,4 @@
1
- import { Content } from "@benev/slate";
1
+ import { Content } from "@e280/sly";
2
2
  import { AsSchema } from "../../aspects/codex/parts/types.js";
3
3
  export type OpfsSchema = AsSchema<{
4
4
  taxon: {
@@ -1,5 +1,5 @@
1
- import Quay from "../../../index.js";
2
1
  import { Group } from "../../group.js";
2
+ import { Permissions } from "../../permissions.js";
3
3
  import { Codex } from "../../aspects/codex/codex.js";
4
4
  export class PlainGroup extends Group {
5
5
  static config = () => {
@@ -23,7 +23,7 @@ export class PlainGroup extends Group {
23
23
  renderLabel: item => item.id,
24
24
  renderIcon: item => item.taxon.icon,
25
25
  renderPreview: () => null,
26
- permissions: item => Quay.permissions.all,
26
+ permissions: item => Permissions.all,
27
27
  };
28
28
  };
29
29
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../s/logic/presets/plain/group.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAA;AAGpC,OAAO,EAAC,KAAK,EAAC,MAAM,8BAA8B,CAAA;AAElD,MAAM,OAAO,UAAW,SAAQ,KAAkB;IACjD,MAAM,CAAC,MAAM,GAAG,GAA6B,EAAE;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAc;YACtC,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC;SAClB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACtB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,CACrC,CAAA;QAED,OAAO;YACN,KAAK;YACL,IAAI;YACJ,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI,GAAG,EAA+B;iBAC3C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI,GAAG,EAAE;iBAChB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtB,CAAC,CAAA;YACH,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YACnC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;YACzB,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;SACzC,CAAA;IACF,CAAC,CAAA;IAED;QACC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3B,CAAC"}
1
+ {"version":3,"file":"group.js","sourceRoot":"","sources":["../../../../s/logic/presets/plain/group.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,gBAAgB,CAAA;AAEpC,OAAO,EAAC,WAAW,EAAC,MAAM,sBAAsB,CAAA;AAEhD,OAAO,EAAC,KAAK,EAAC,MAAM,8BAA8B,CAAA;AAElD,MAAM,OAAO,UAAW,SAAQ,KAAkB;IACjD,MAAM,CAAC,MAAM,GAAG,GAA6B,EAAE;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAc;YACtC,IAAI,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC;SAClB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACtB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,KAAK,EAAE,MAAM,EAAC,CAAC,CACrC,CAAA;QAED,OAAO;YACN,KAAK;YACL,IAAI;YACJ,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE,IAAI,GAAG,EAA+B;iBAC3C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClD,aAAa,EAAE,KAAK;YACpB,OAAO,EAAE,IAAI,GAAG,EAAE;iBAChB,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACxB,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACxB,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACtB,CAAC,CAAA;YACH,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;YACnC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;YACzB,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG;SACpC,CAAA;IACF,CAAC,CAAA;IAED;QACC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;IAC3B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Content } from "@benev/slate";
1
+ import { Content } from "@e280/sly";
2
2
  import { AsSchema } from "../../aspects/codex/parts/types.js";
3
3
  export type PlainSchema = AsSchema<{
4
4
  taxon: {
@@ -1,8 +1,8 @@
1
+ import { Content } from "@e280/sly";
1
2
  import { Permission } from "./permissions.js";
2
3
  import { Codex } from "./aspects/codex/codex.js";
3
4
  import { Schema } from "./aspects/codex/parts/types.js";
4
5
  import { CodexItem } from "./aspects/codex/parts/codex-item.js";
5
- import { Content } from "@benev/slate";
6
6
  export type SearchFn<Sc extends Schema> = (item: CodexItem<Sc>) => boolean;
7
7
  export type SortFn<Sc extends Schema> = (a: CodexItem<Sc>, b: CodexItem<Sc>) => number;
8
8
  export interface GroupConfig<Sc extends Schema> {
package/x/tests.test.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { Science } from "@e280/science";
2
2
  import cellar from "./cellar/cellar.test.js";
3
+ import media from "./logic/presets/media/store.test.js";
3
4
  await Science.run({
4
5
  cellar,
6
+ media
5
7
  });
6
8
  //# sourceMappingURL=tests.test.js.map