@e280/quay 0.0.0-1

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 (206) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +117 -0
  3. package/package.json +57 -0
  4. package/s/cellar/cask.ts +18 -0
  5. package/s/cellar/cellar.test.ts +100 -0
  6. package/s/cellar/cellar.ts +53 -0
  7. package/s/cellar/forklift.ts +9 -0
  8. package/s/cellar/index.ts +7 -0
  9. package/s/cellar/memory-forklift.ts +29 -0
  10. package/s/cellar/opfs-forklift.ts +49 -0
  11. package/s/demo/main.bundle.ts +39 -0
  12. package/s/demo/main.css +126 -0
  13. package/s/dom/components/breadcrumb/component.ts +29 -0
  14. package/s/dom/components/browser/component.ts +75 -0
  15. package/s/dom/components/browser/style.css.ts +118 -0
  16. package/s/dom/components/dropzone/component.ts +33 -0
  17. package/s/dom/components/dropzone/style.css.ts +54 -0
  18. package/s/dom/components/filter/component.ts +44 -0
  19. package/s/dom/components/outliner/component.ts +16 -0
  20. package/s/dom/components/searchbar/component.ts +29 -0
  21. package/s/dom/components/sort/component.ts +48 -0
  22. package/s/dom/components.ts +15 -0
  23. package/s/dom/context.ts +5 -0
  24. package/s/dom/theme.css.ts +11 -0
  25. package/s/dom/utils/find-group-name.ts +12 -0
  26. package/s/dom/utils/find-local-group.ts +9 -0
  27. package/s/dom/views/tree/component.ts +64 -0
  28. package/s/dom/views/tree/style.css.ts +64 -0
  29. package/s/genius/folio.md +29 -0
  30. package/s/genius/parts/hy-tree.ts +142 -0
  31. package/s/genius/quay.md +13 -0
  32. package/s/genius/turbo.md +21 -0
  33. package/s/genius/twig.ts +34 -0
  34. package/s/index.html.ts +89 -0
  35. package/s/index.ts +14 -0
  36. package/s/logic/aspects/codex/codex.ts +46 -0
  37. package/s/logic/aspects/codex/example.ts +65 -0
  38. package/s/logic/aspects/codex/parts/clade.ts +28 -0
  39. package/s/logic/aspects/codex/parts/codex-item.ts +94 -0
  40. package/s/logic/aspects/codex/parts/hierarchy.ts +82 -0
  41. package/s/logic/aspects/codex/parts/taxonomy.ts +18 -0
  42. package/s/logic/aspects/codex/parts/types.ts +23 -0
  43. package/s/logic/aspects/codex/utils/generate-id.ts +7 -0
  44. package/s/logic/aspects/dropzone.ts +77 -0
  45. package/s/logic/aspects/tree-trail.ts +33 -0
  46. package/s/logic/brain.ts +22 -0
  47. package/s/logic/group.ts +104 -0
  48. package/s/logic/permissions.ts +34 -0
  49. package/s/logic/presets/media/group.ts +94 -0
  50. package/s/logic/presets/media/schema.ts +22 -0
  51. package/s/logic/presets/opfs/schema.ts +21 -0
  52. package/s/logic/presets/plain/group.ts +44 -0
  53. package/s/logic/presets/plain/schema.ts +15 -0
  54. package/s/logic/types.ts +33 -0
  55. package/s/tests.test.ts +8 -0
  56. package/x/cellar/cask.d.ts +8 -0
  57. package/x/cellar/cask.js +19 -0
  58. package/x/cellar/cask.js.map +1 -0
  59. package/x/cellar/cellar.d.ts +22 -0
  60. package/x/cellar/cellar.js +47 -0
  61. package/x/cellar/cellar.js.map +1 -0
  62. package/x/cellar/cellar.test.d.ts +11 -0
  63. package/x/cellar/cellar.test.js +79 -0
  64. package/x/cellar/cellar.test.js.map +1 -0
  65. package/x/cellar/forklift.d.ts +7 -0
  66. package/x/cellar/forklift.js +2 -0
  67. package/x/cellar/forklift.js.map +1 -0
  68. package/x/cellar/index.d.ts +5 -0
  69. package/x/cellar/index.js +6 -0
  70. package/x/cellar/index.js.map +1 -0
  71. package/x/cellar/memory-forklift.d.ts +9 -0
  72. package/x/cellar/memory-forklift.js +21 -0
  73. package/x/cellar/memory-forklift.js.map +1 -0
  74. package/x/cellar/opfs-forklift.d.ts +11 -0
  75. package/x/cellar/opfs-forklift.js +44 -0
  76. package/x/cellar/opfs-forklift.js.map +1 -0
  77. package/x/demo/main.bundle.d.ts +1 -0
  78. package/x/demo/main.bundle.js +30 -0
  79. package/x/demo/main.bundle.js.map +1 -0
  80. package/x/demo/main.bundle.min.js +471 -0
  81. package/x/demo/main.css +126 -0
  82. package/x/dom/components/breadcrumb/component.d.ts +1 -0
  83. package/x/dom/components/breadcrumb/component.js +21 -0
  84. package/x/dom/components/breadcrumb/component.js.map +1 -0
  85. package/x/dom/components/browser/component.d.ts +1 -0
  86. package/x/dom/components/browser/component.js +65 -0
  87. package/x/dom/components/browser/component.js.map +1 -0
  88. package/x/dom/components/browser/style.css.d.ts +2 -0
  89. package/x/dom/components/browser/style.css.js +117 -0
  90. package/x/dom/components/browser/style.css.js.map +1 -0
  91. package/x/dom/components/dropzone/component.d.ts +1 -0
  92. package/x/dom/components/dropzone/component.js +27 -0
  93. package/x/dom/components/dropzone/component.js.map +1 -0
  94. package/x/dom/components/dropzone/style.css.d.ts +2 -0
  95. package/x/dom/components/dropzone/style.css.js +53 -0
  96. package/x/dom/components/dropzone/style.css.js.map +1 -0
  97. package/x/dom/components/filter/component.d.ts +1 -0
  98. package/x/dom/components/filter/component.js +40 -0
  99. package/x/dom/components/filter/component.js.map +1 -0
  100. package/x/dom/components/outliner/component.d.ts +1 -0
  101. package/x/dom/components/outliner/component.js +13 -0
  102. package/x/dom/components/outliner/component.js.map +1 -0
  103. package/x/dom/components/searchbar/component.d.ts +1 -0
  104. package/x/dom/components/searchbar/component.js +24 -0
  105. package/x/dom/components/searchbar/component.js.map +1 -0
  106. package/x/dom/components/sort/component.d.ts +1 -0
  107. package/x/dom/components/sort/component.js +44 -0
  108. package/x/dom/components/sort/component.js.map +1 -0
  109. package/x/dom/components.d.ts +18 -0
  110. package/x/dom/components.js +13 -0
  111. package/x/dom/components.js.map +1 -0
  112. package/x/dom/context.d.ts +2 -0
  113. package/x/dom/context.js +3 -0
  114. package/x/dom/context.js.map +1 -0
  115. package/x/dom/theme.css.d.ts +2 -0
  116. package/x/dom/theme.css.js +11 -0
  117. package/x/dom/theme.css.js.map +1 -0
  118. package/x/dom/utils/find-group-name.d.ts +1 -0
  119. package/x/dom/utils/find-group-name.js +9 -0
  120. package/x/dom/utils/find-group-name.js.map +1 -0
  121. package/x/dom/utils/find-local-group.d.ts +1 -0
  122. package/x/dom/utils/find-local-group.js +7 -0
  123. package/x/dom/utils/find-local-group.js.map +1 -0
  124. package/x/dom/views/tree/component.d.ts +7 -0
  125. package/x/dom/views/tree/component.js +52 -0
  126. package/x/dom/views/tree/component.js.map +1 -0
  127. package/x/dom/views/tree/style.css.d.ts +2 -0
  128. package/x/dom/views/tree/style.css.js +63 -0
  129. package/x/dom/views/tree/style.css.js.map +1 -0
  130. package/x/genius/folio.md +29 -0
  131. package/x/genius/parts/hy-tree.d.ts +44 -0
  132. package/x/genius/parts/hy-tree.js +116 -0
  133. package/x/genius/parts/hy-tree.js.map +1 -0
  134. package/x/genius/quay.md +13 -0
  135. package/x/genius/turbo.md +21 -0
  136. package/x/genius/twig.d.ts +34 -0
  137. package/x/genius/twig.js +2 -0
  138. package/x/genius/twig.js.map +1 -0
  139. package/x/importmap.json +47 -0
  140. package/x/index.d.ts +11 -0
  141. package/x/index.html +170 -0
  142. package/x/index.html.d.ts +3 -0
  143. package/x/index.html.js +87 -0
  144. package/x/index.html.js.map +1 -0
  145. package/x/index.js +9 -0
  146. package/x/index.js.map +1 -0
  147. package/x/logic/aspects/codex/codex.d.ts +17 -0
  148. package/x/logic/aspects/codex/codex.js +39 -0
  149. package/x/logic/aspects/codex/codex.js.map +1 -0
  150. package/x/logic/aspects/codex/example.d.ts +13 -0
  151. package/x/logic/aspects/codex/example.js +42 -0
  152. package/x/logic/aspects/codex/example.js.map +1 -0
  153. package/x/logic/aspects/codex/parts/clade.d.ts +16 -0
  154. package/x/logic/aspects/codex/parts/clade.js +23 -0
  155. package/x/logic/aspects/codex/parts/clade.js.map +1 -0
  156. package/x/logic/aspects/codex/parts/codex-item.d.ts +33 -0
  157. package/x/logic/aspects/codex/parts/codex-item.js +74 -0
  158. package/x/logic/aspects/codex/parts/codex-item.js.map +1 -0
  159. package/x/logic/aspects/codex/parts/hierarchy.d.ts +23 -0
  160. package/x/logic/aspects/codex/parts/hierarchy.js +69 -0
  161. package/x/logic/aspects/codex/parts/hierarchy.js.map +1 -0
  162. package/x/logic/aspects/codex/parts/taxonomy.d.ts +7 -0
  163. package/x/logic/aspects/codex/parts/taxonomy.js +13 -0
  164. package/x/logic/aspects/codex/parts/taxonomy.js.map +1 -0
  165. package/x/logic/aspects/codex/parts/types.d.ts +22 -0
  166. package/x/logic/aspects/codex/parts/types.js +2 -0
  167. package/x/logic/aspects/codex/parts/types.js.map +1 -0
  168. package/x/logic/aspects/codex/utils/generate-id.d.ts +1 -0
  169. package/x/logic/aspects/codex/utils/generate-id.js +5 -0
  170. package/x/logic/aspects/codex/utils/generate-id.js.map +1 -0
  171. package/x/logic/aspects/dropzone.d.ts +16 -0
  172. package/x/logic/aspects/dropzone.js +60 -0
  173. package/x/logic/aspects/dropzone.js.map +1 -0
  174. package/x/logic/aspects/tree-trail.d.ts +8 -0
  175. package/x/logic/aspects/tree-trail.js +24 -0
  176. package/x/logic/aspects/tree-trail.js.map +1 -0
  177. package/x/logic/brain.d.ts +11 -0
  178. package/x/logic/brain.js +17 -0
  179. package/x/logic/brain.js.map +1 -0
  180. package/x/logic/group.d.ts +51 -0
  181. package/x/logic/group.js +79 -0
  182. package/x/logic/group.js.map +1 -0
  183. package/x/logic/permissions.d.ts +18 -0
  184. package/x/logic/permissions.js +26 -0
  185. package/x/logic/permissions.js.map +1 -0
  186. package/x/logic/presets/media/group.d.ts +7 -0
  187. package/x/logic/presets/media/group.js +75 -0
  188. package/x/logic/presets/media/group.js.map +1 -0
  189. package/x/logic/presets/media/schema.d.ts +18 -0
  190. package/x/logic/presets/media/schema.js +2 -0
  191. package/x/logic/presets/media/schema.js.map +1 -0
  192. package/x/logic/presets/opfs/schema.d.ts +18 -0
  193. package/x/logic/presets/opfs/schema.js +2 -0
  194. package/x/logic/presets/opfs/schema.js.map +1 -0
  195. package/x/logic/presets/plain/group.d.ts +7 -0
  196. package/x/logic/presets/plain/group.js +33 -0
  197. package/x/logic/presets/plain/group.js.map +1 -0
  198. package/x/logic/presets/plain/schema.d.ts +12 -0
  199. package/x/logic/presets/plain/schema.js +2 -0
  200. package/x/logic/presets/plain/schema.js.map +1 -0
  201. package/x/logic/types.d.ts +20 -0
  202. package/x/logic/types.js +11 -0
  203. package/x/logic/types.js.map +1 -0
  204. package/x/tests.test.d.ts +1 -0
  205. package/x/tests.test.js +6 -0
  206. package/x/tests.test.js.map +1 -0
@@ -0,0 +1,79 @@
1
+ import { Txt } from "@e280/stz";
2
+ import { expect, Science, test } from "@e280/science";
3
+ import { Cask } from "./cask.js";
4
+ import { Cellar } from "./cellar.js";
5
+ import { MemoryForklift } from "./memory-forklift.js";
6
+ export default Science.suite({
7
+ "save + load roundtrip": test(async () => {
8
+ const cellar = new Cellar();
9
+ const text = "hello world";
10
+ const bytes = Txt.toBytes(text);
11
+ await cellar.save(bytes);
12
+ const hash = await Cask.hash(bytes);
13
+ expect(await cellar.has(hash)).is(true);
14
+ const loaded = await cellar.load(hash);
15
+ expect(loaded.hash).is(hash);
16
+ expect(Txt.fromBytes(loaded.bytes)).is(text);
17
+ }),
18
+ "save is idempotent": test(async () => {
19
+ const cellar = new Cellar();
20
+ const bytes = new TextEncoder().encode("foo bar");
21
+ await cellar.save(bytes);
22
+ await cellar.save(bytes); // again
23
+ const hash = await Cask.hash(bytes);
24
+ expect(await cellar.has(hash)).is(true);
25
+ }),
26
+ "throws on corruption": test(async () => {
27
+ const forklift = new MemoryForklift();
28
+ const cellar = new Cellar(forklift);
29
+ const good = new TextEncoder().encode("valid data");
30
+ const bad = new TextEncoder().encode("corrupt data");
31
+ const hash = await Cask.hash(good);
32
+ await forklift.save(hash, bad);
33
+ await expect(async () => cellar.load(hash)).throwsAsync();
34
+ }),
35
+ "delete removes file": test(async () => {
36
+ const cellar = new Cellar();
37
+ const bytes = new TextEncoder().encode("temporary data");
38
+ await cellar.save(bytes);
39
+ const hash = await Cask.hash(bytes);
40
+ expect(await cellar.has(hash)).is(true);
41
+ await cellar.delete(hash);
42
+ expect(await cellar.has(hash)).is(false);
43
+ }),
44
+ "load missing throws": test(async () => {
45
+ const cellar = new Cellar();
46
+ const fakeHash = "deadbeef1234567890";
47
+ await expect(async () => cellar.load(fakeHash)).throwsAsync();
48
+ }),
49
+ "list returns saved hashes": test(async () => {
50
+ const cellar = new Cellar();
51
+ const texts = ["a", "b", "c"];
52
+ for (const t of texts)
53
+ await cellar.save(Txt.toBytes(t));
54
+ const hashes = [];
55
+ for await (const hash of cellar.list())
56
+ hashes.push(hash);
57
+ expect(hashes.length).is(3);
58
+ for (const t of texts) {
59
+ const h = await Cask.hash(Txt.toBytes(t));
60
+ expect(hashes.includes(h)).is(true);
61
+ }
62
+ }),
63
+ "clear removes all entries": test(async () => {
64
+ const cellar = new Cellar();
65
+ await cellar.save(Txt.toBytes("one"));
66
+ await cellar.save(Txt.toBytes("two"));
67
+ await cellar.save(Txt.toBytes("three"));
68
+ let count = 0;
69
+ for await (const _ of cellar.list())
70
+ count++;
71
+ expect(count).is(3);
72
+ await cellar.clear();
73
+ let postClearCount = 0;
74
+ for await (const _ of cellar.list())
75
+ postClearCount++;
76
+ expect(postClearCount).is(0);
77
+ })
78
+ });
79
+ //# sourceMappingURL=cellar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cellar.test.js","sourceRoot":"","sources":["../../s/cellar/cellar.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type Forklift = {
2
+ list(): AsyncIterable<string>;
3
+ has(label: string): Promise<boolean>;
4
+ save(label: string, bytes: Uint8Array): Promise<void>;
5
+ load(label: string): Promise<Uint8Array>;
6
+ delete(label: string): Promise<void>;
7
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=forklift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forklift.js","sourceRoot":"","sources":["../../s/cellar/forklift.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export * from "./cask.js";
2
+ export * from "./cellar.js";
3
+ export * from "./forklift.js";
4
+ export * from "./memory-forklift.js";
5
+ export * from "./opfs-forklift.js";
@@ -0,0 +1,6 @@
1
+ export * from "./cask.js";
2
+ export * from "./cellar.js";
3
+ export * from "./forklift.js";
4
+ export * from "./memory-forklift.js";
5
+ export * from "./opfs-forklift.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/cellar/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Forklift } from "./forklift.js";
2
+ export declare class MemoryForklift implements Forklift {
3
+ #private;
4
+ list(): AsyncIterable<string>;
5
+ has(label: string): Promise<boolean>;
6
+ save(label: string, bytes: Uint8Array): Promise<void>;
7
+ load(label: string): Promise<Uint8Array>;
8
+ delete(label: string): Promise<void>;
9
+ }
@@ -0,0 +1,21 @@
1
+ import { MapG } from "@e280/stz";
2
+ export class MemoryForklift {
3
+ #map = new MapG();
4
+ async *list() {
5
+ for (const label of this.#map.keys())
6
+ yield label;
7
+ }
8
+ async has(label) {
9
+ return this.#map.has(label);
10
+ }
11
+ async save(label, bytes) {
12
+ this.#map.set(label, bytes);
13
+ }
14
+ async load(label) {
15
+ return this.#map.require(label);
16
+ }
17
+ async delete(label) {
18
+ this.#map.delete(label);
19
+ }
20
+ }
21
+ //# sourceMappingURL=memory-forklift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-forklift.js","sourceRoot":"","sources":["../../s/cellar/memory-forklift.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B,MAAM,OAAO,cAAc;IAC1B,IAAI,GAAG,IAAI,IAAI,EAAsB,CAAA;IAErC,KAAK,CAAC,CAAC,IAAI;QACV,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACnC,MAAM,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,KAAiB;QAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;CACD"}
@@ -0,0 +1,11 @@
1
+ import { Forklift } from "./forklift.js";
2
+ export declare class OpfsForklift implements Forklift {
3
+ private directory;
4
+ static setup(dirname: string): Promise<OpfsForklift>;
5
+ constructor(directory: FileSystemDirectoryHandle);
6
+ list(): AsyncIterable<string>;
7
+ has(label: string): Promise<boolean>;
8
+ save(label: string, bytes: Uint8Array): Promise<void>;
9
+ load(label: string): Promise<Uint8Array>;
10
+ delete(label: string): Promise<void>;
11
+ }
@@ -0,0 +1,44 @@
1
+ export class OpfsForklift {
2
+ directory;
3
+ static async setup(dirname) {
4
+ const root = await navigator.storage.getDirectory();
5
+ const directory = await root.getDirectoryHandle(dirname, { create: true });
6
+ return new this(directory);
7
+ }
8
+ constructor(directory) {
9
+ this.directory = directory;
10
+ }
11
+ async *list() {
12
+ for await (const [name, handle] of this.directory.entries()) {
13
+ if (handle.kind === "file")
14
+ yield name;
15
+ }
16
+ }
17
+ async has(label) {
18
+ try {
19
+ await this.directory.getFileHandle(label);
20
+ return true;
21
+ }
22
+ catch (err) {
23
+ if (err.name === "NotFoundError")
24
+ return false;
25
+ throw err;
26
+ }
27
+ }
28
+ async save(label, bytes) {
29
+ const fileHandle = await this.directory.getFileHandle(label, { create: true });
30
+ const writable = await fileHandle.createWritable();
31
+ await writable.write(bytes);
32
+ await writable.close();
33
+ }
34
+ async load(label) {
35
+ const fileHandle = await this.directory.getFileHandle(label);
36
+ const file = await fileHandle.getFile();
37
+ const buffer = await file.arrayBuffer();
38
+ return new Uint8Array(buffer);
39
+ }
40
+ async delete(label) {
41
+ await this.directory.removeEntry(label);
42
+ }
43
+ }
44
+ //# sourceMappingURL=opfs-forklift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opfs-forklift.js","sourceRoot":"","sources":["../../s/cellar/opfs-forklift.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IAOJ;IANpB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAe;QACjC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAA;QACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;QACxE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IAED,YAAoB,SAAoC;QAApC,cAAS,GAAT,SAAS,CAA2B;IAAG,CAAC;IAE5D,KAAK,CAAC,CAAC,IAAI;QACV,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;gBACzB,MAAM,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAa;QACtB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YACzC,OAAO,IAAI,CAAA;QACZ,CAAC;QACD,OAAO,GAAG,EAAE,CAAC;YACZ,IAAK,GAAoB,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO,KAAK,CAAA;YAChE,MAAM,GAAG,CAAA;QACV,CAAC;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,KAAiB;QAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAA;QAC5E,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,cAAc,EAAE,CAAA;QAClD,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC3B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACvB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC5D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACvC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;CACD"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { register } from "@benev/slate";
2
+ import { brain } from "../dom/context.js";
3
+ import { MediaGroup } from "../logic/presets/media/group.js";
4
+ import { components, setShoelaceDarkTheme } from "../dom/components.js";
5
+ const group = brain.setGroup("default", new MediaGroup());
6
+ const { codex, root } = group.config;
7
+ const previewUrl = "/assets/preview.webp";
8
+ const introVid = codex.create("file", { format: "video", label: "01‑introduction.mp4", previewUrl });
9
+ const coverImg = codex.create("file", { format: "image", label: "cover.png", previewUrl });
10
+ const audioFx = codex.create("file", { format: "audio", label: "click.wav", previewUrl: null });
11
+ // sub folder
12
+ const sprites = codex.create("folder", { label: "sprites" });
13
+ const heroPng = codex.create("file", { format: "image", label: "hero.png", previewUrl });
14
+ const enemyPng = codex.create("file", { format: "image", label: "enemy.png", previewUrl });
15
+ codex.root(root)
16
+ .attach(introVid)
17
+ .attach(coverImg)
18
+ .attach(audioFx)
19
+ .attach(sprites);
20
+ sprites.attach(heroPng).attach(enemyPng);
21
+ group.on.upload.sub(({ files, target }) => {
22
+ for (const file of files) {
23
+ const format = file.type.split("/")[0];
24
+ const item = codex.create("file", { label: file.name, format, previewUrl });
25
+ target.attach(item);
26
+ }
27
+ });
28
+ setShoelaceDarkTheme();
29
+ register(components);
30
+ //# sourceMappingURL=main.bundle.js.map
@@ -0,0 +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"}