@elaraai/e3-ui 1.0.82 → 1.0.84

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 (69) hide show
  1. package/dist/src/bind/record.d.ts +229 -4
  2. package/dist/src/bind/record.d.ts.map +1 -1
  3. package/dist/src/bind/record.js +245 -5
  4. package/dist/src/bind/record.js.map +1 -1
  5. package/dist/src/index.d.ts +2 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +4 -1
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/internal.d.ts +2 -1
  10. package/dist/src/internal.d.ts.map +1 -1
  11. package/dist/src/internal.js +5 -1
  12. package/dist/src/internal.js.map +1 -1
  13. package/dist/src/studio/builder.d.ts +3123 -0
  14. package/dist/src/studio/builder.d.ts.map +1 -0
  15. package/dist/src/studio/builder.js +115 -0
  16. package/dist/src/studio/builder.js.map +1 -0
  17. package/dist/src/studio/canvas.d.ts +83 -0
  18. package/dist/src/studio/canvas.d.ts.map +1 -0
  19. package/dist/src/studio/canvas.js +71 -0
  20. package/dist/src/studio/canvas.js.map +1 -0
  21. package/dist/src/studio/component.d.ts +178 -0
  22. package/dist/src/studio/component.d.ts.map +1 -0
  23. package/dist/src/studio/component.js +189 -0
  24. package/dist/src/studio/component.js.map +1 -0
  25. package/dist/src/studio/index.d.ts +104 -0
  26. package/dist/src/studio/index.d.ts.map +1 -0
  27. package/dist/src/studio/index.js +75 -0
  28. package/dist/src/studio/index.js.map +1 -0
  29. package/dist/src/studio/inspector.d.ts +208 -0
  30. package/dist/src/studio/inspector.d.ts.map +1 -0
  31. package/dist/src/studio/inspector.js +155 -0
  32. package/dist/src/studio/inspector.js.map +1 -0
  33. package/dist/src/studio/library.d.ts +3506 -0
  34. package/dist/src/studio/library.d.ts.map +1 -0
  35. package/dist/src/studio/library.js +245 -0
  36. package/dist/src/studio/library.js.map +1 -0
  37. package/dist/src/studio/page.d.ts +305 -0
  38. package/dist/src/studio/page.d.ts.map +1 -0
  39. package/dist/src/studio/page.js +105 -0
  40. package/dist/src/studio/page.js.map +1 -0
  41. package/dist/src/studio/pages.d.ts +10929 -0
  42. package/dist/src/studio/pages.d.ts.map +1 -0
  43. package/dist/src/studio/pages.js +502 -0
  44. package/dist/src/studio/pages.js.map +1 -0
  45. package/dist/src/studio/palette.d.ts +179 -0
  46. package/dist/src/studio/palette.d.ts.map +1 -0
  47. package/dist/src/studio/palette.js +120 -0
  48. package/dist/src/studio/palette.js.map +1 -0
  49. package/dist/src/studio/publish.d.ts +397 -0
  50. package/dist/src/studio/publish.d.ts.map +1 -0
  51. package/dist/src/studio/publish.js +198 -0
  52. package/dist/src/studio/publish.js.map +1 -0
  53. package/dist/test/bind/record/record.examples.d.ts +65 -1
  54. package/dist/test/bind/record/record.examples.d.ts.map +1 -1
  55. package/dist/test/bind/record/record.examples.js +21 -3
  56. package/dist/test/bind/record/record.examples.js.map +1 -1
  57. package/dist/test/studio/component.examples.d.ts +7 -0
  58. package/dist/test/studio/component.examples.d.ts.map +1 -0
  59. package/dist/test/studio/component.examples.js +46 -0
  60. package/dist/test/studio/component.examples.js.map +1 -0
  61. package/dist/test/studio/page.examples.d.ts +7 -0
  62. package/dist/test/studio/page.examples.d.ts.map +1 -0
  63. package/dist/test/studio/page.examples.js +64 -0
  64. package/dist/test/studio/page.examples.js.map +1 -0
  65. package/dist/test/studio/studio.examples.d.ts +1766 -0
  66. package/dist/test/studio/studio.examples.d.ts.map +1 -0
  67. package/dist/test/studio/studio.examples.js +354 -0
  68. package/dist/test/studio/studio.examples.js.map +1 -0
  69. package/package.json +9 -8
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The builder's palette (#994) — what it shows of the components a surface
7
+ * lists and of the project's pages, computed in East for the `StudioBuilder`
8
+ * renderer, which draws the palette: the components by category, and the
9
+ * project's pages, in one pane beside the canvas.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { ArrayType, BooleanType, DictType, IntegerType, OptionType, StringType, StructType } from "@elaraai/east";
14
+ /**
15
+ * The names a builder shares, by its `id`: the UI store key of the page open
16
+ * in it — which the page library writes when it opens a page — and the
17
+ * drag-source ids of its palette's two libraries.
18
+ *
19
+ * @remarks
20
+ * A builder and a page library with the same `id` open one page together, as
21
+ * `Slice.bind` shares a slice by key.
22
+ *
23
+ * @param id - The builder's name, when a surface holds more than one; omitted, the one builder
24
+ * @returns The key and ids
25
+ */
26
+ export declare function builderKeys(id: string | undefined): {
27
+ /** The open page's UI store key — a `Studio.Types.Key`. */
28
+ page: string;
29
+ /** The palette's components library's drag-source id — what the canvas takes cards from. */
30
+ components: string;
31
+ /** The palette's pages library's id. */
32
+ pages: string;
33
+ };
34
+ /**
35
+ * A listed component, as its palette card shows it.
36
+ *
37
+ * @property meta - The meta line: the datasets its code reads, or, placed, `ON CANVAS · ×N`
38
+ * @property placed - Whether the canvas has one of its placements selected
39
+ */
40
+ export declare const PaletteCardType: StructType<{
41
+ readonly meta: StringType;
42
+ readonly placed: BooleanType;
43
+ }>;
44
+ /**
45
+ * A page of the project, as the palette's Pages tab lists it.
46
+ *
47
+ * @property page - The page's name in the project
48
+ * @property title - Its title
49
+ * @property meta - Its status: `LIVE · Vn`, `DRAFT · Vn LIVE` or `DRAFT`
50
+ * @property live - Whether it is live
51
+ */
52
+ export declare const PalettePageType: StructType<{
53
+ readonly page: StringType;
54
+ readonly title: StringType;
55
+ readonly meta: StringType;
56
+ readonly live: BooleanType;
57
+ }>;
58
+ /**
59
+ * Each listed component's card, by key: its meta line and whether it is
60
+ * placed. A card's meta line names the datasets its component reads, joined
61
+ * with ` · `; the component the selected placement places is placed, and its
62
+ * line counts the page's placements of it instead. A key two components
63
+ * share keeps the first one's card.
64
+ */
65
+ export declare const paletteCards: import("@elaraai/east").CallableFunctionExpr<[ArrayType<StructType<{
66
+ readonly key: StringType;
67
+ readonly name: StringType;
68
+ readonly category: StringType;
69
+ readonly icon: StringType;
70
+ readonly span: IntegerType;
71
+ readonly description: OptionType<StringType>;
72
+ readonly frame: import("@elaraai/east").VariantType<{
73
+ readonly card: import("@elaraai/east").NullType;
74
+ readonly none: import("@elaraai/east").NullType;
75
+ }>;
76
+ readonly tags: ArrayType<StringType>;
77
+ readonly collections: ArrayType<StringType>;
78
+ readonly deprecated: BooleanType;
79
+ readonly reads: StructType<{
80
+ readonly paths: ArrayType<ArrayType<import("@elaraai/east").VariantType<{
81
+ readonly field: StringType;
82
+ }>>>;
83
+ readonly functions: ArrayType<StringType>;
84
+ readonly records: ArrayType<StringType>;
85
+ readonly pages: ArrayType<ArrayType<import("@elaraai/east").VariantType<{
86
+ readonly field: StringType;
87
+ }>>>;
88
+ }>;
89
+ readonly fingerprint: StringType;
90
+ readonly render: import("@elaraai/east").FunctionType<[], import("@elaraai/east").RecursiveType<import("@elaraai/east-ui").UIComponentNode>>;
91
+ }>>, ArrayType<StructType<{
92
+ readonly key: StringType;
93
+ readonly row: StringType;
94
+ readonly span: IntegerType;
95
+ readonly height: OptionType<IntegerType>;
96
+ readonly align: import("@elaraai/east").VariantType<{
97
+ readonly top: import("@elaraai/east").NullType;
98
+ readonly center: import("@elaraai/east").NullType;
99
+ readonly stretch: import("@elaraai/east").NullType;
100
+ }>;
101
+ readonly title: OptionType<StringType>;
102
+ readonly component: StringType;
103
+ readonly fingerprint: StringType;
104
+ }>>, OptionType<StringType>], DictType<StringType, StructType<{
105
+ readonly meta: StringType;
106
+ readonly placed: BooleanType;
107
+ }>>>;
108
+ /**
109
+ * A project's pages, in key order, as the palette's Pages tab lists them —
110
+ * each with its title and its status. Templates and other projects' pages are
111
+ * not listed.
112
+ */
113
+ export declare const palettePages: import("@elaraai/east").CallableFunctionExpr<[DictType<StructType<{
114
+ readonly project: StringType;
115
+ readonly page: StringType;
116
+ }>, import("@elaraai/east").VariantType<{
117
+ readonly page: StructType<{
118
+ readonly draft: StructType<{
119
+ readonly title: StringType;
120
+ readonly cells: ArrayType<StructType<{
121
+ readonly key: StringType;
122
+ readonly row: StringType;
123
+ readonly span: IntegerType;
124
+ readonly height: OptionType<IntegerType>;
125
+ readonly align: import("@elaraai/east").VariantType<{
126
+ readonly top: import("@elaraai/east").NullType;
127
+ readonly center: import("@elaraai/east").NullType;
128
+ readonly stretch: import("@elaraai/east").NullType;
129
+ }>;
130
+ readonly title: OptionType<StringType>;
131
+ readonly component: StringType;
132
+ readonly fingerprint: StringType;
133
+ }>>;
134
+ }>;
135
+ readonly live: OptionType<StructType<{
136
+ readonly version: IntegerType;
137
+ readonly page: StructType<{
138
+ readonly title: StringType;
139
+ readonly cells: ArrayType<StructType<{
140
+ readonly key: StringType;
141
+ readonly row: StringType;
142
+ readonly span: IntegerType;
143
+ readonly height: OptionType<IntegerType>;
144
+ readonly align: import("@elaraai/east").VariantType<{
145
+ readonly top: import("@elaraai/east").NullType;
146
+ readonly center: import("@elaraai/east").NullType;
147
+ readonly stretch: import("@elaraai/east").NullType;
148
+ }>;
149
+ readonly title: OptionType<StringType>;
150
+ readonly component: StringType;
151
+ readonly fingerprint: StringType;
152
+ }>>;
153
+ }>;
154
+ }>>;
155
+ }>;
156
+ readonly template: StructType<{
157
+ readonly title: StringType;
158
+ readonly cells: ArrayType<StructType<{
159
+ readonly key: StringType;
160
+ readonly row: StringType;
161
+ readonly span: IntegerType;
162
+ readonly height: OptionType<IntegerType>;
163
+ readonly align: import("@elaraai/east").VariantType<{
164
+ readonly top: import("@elaraai/east").NullType;
165
+ readonly center: import("@elaraai/east").NullType;
166
+ readonly stretch: import("@elaraai/east").NullType;
167
+ }>;
168
+ readonly title: OptionType<StringType>;
169
+ readonly component: StringType;
170
+ readonly fingerprint: StringType;
171
+ }>>;
172
+ }>;
173
+ }>>, StringType], ArrayType<StructType<{
174
+ readonly page: StringType;
175
+ readonly title: StringType;
176
+ readonly meta: StringType;
177
+ readonly live: BooleanType;
178
+ }>>>;
179
+ //# sourceMappingURL=palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../../src/studio/palette.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;GAOG;AAEH,OAAO,EACH,SAAS,EACT,WAAW,EACX,QAAQ,EAER,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EAGb,MAAM,eAAe,CAAC;AAQvB;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG;IACjD,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACjB,CAOA;AAMD;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;EAAwD,CAAC;AAErF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe;;;;;EAK1B,CAAC;AAMH;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiCxB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwBxB,CAAC"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The builder's palette (#994) — what it shows of the components a surface
7
+ * lists and of the project's pages, computed in East for the `StudioBuilder`
8
+ * renderer, which draws the palette: the components by category, and the
9
+ * project's pages, in one pane beside the canvas.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import { ArrayType, BooleanType, DictType, East, IntegerType, OptionType, StringType, StructType, none, some, } from "@elaraai/east";
14
+ import { StudioComponentType } from "./component.js";
15
+ import { StudioCellType, StudioPagesType, pageStatus } from "./pages.js";
16
+ // ============================================================================
17
+ // The builder's shared keys
18
+ // ============================================================================
19
+ /**
20
+ * The names a builder shares, by its `id`: the UI store key of the page open
21
+ * in it — which the page library writes when it opens a page — and the
22
+ * drag-source ids of its palette's two libraries.
23
+ *
24
+ * @remarks
25
+ * A builder and a page library with the same `id` open one page together, as
26
+ * `Slice.bind` shares a slice by key.
27
+ *
28
+ * @param id - The builder's name, when a surface holds more than one; omitted, the one builder
29
+ * @returns The key and ids
30
+ */
31
+ export function builderKeys(id) {
32
+ const suffix = id === undefined ? "" : `.${id}`;
33
+ return {
34
+ page: `studio.builder${suffix}.page`,
35
+ components: `studio.components${suffix}`,
36
+ pages: `studio.pages${suffix}`,
37
+ };
38
+ }
39
+ // ============================================================================
40
+ // Types
41
+ // ============================================================================
42
+ /**
43
+ * A listed component, as its palette card shows it.
44
+ *
45
+ * @property meta - The meta line: the datasets its code reads, or, placed, `ON CANVAS · ×N`
46
+ * @property placed - Whether the canvas has one of its placements selected
47
+ */
48
+ export const PaletteCardType = StructType({ meta: StringType, placed: BooleanType });
49
+ /**
50
+ * A page of the project, as the palette's Pages tab lists it.
51
+ *
52
+ * @property page - The page's name in the project
53
+ * @property title - Its title
54
+ * @property meta - Its status: `LIVE · Vn`, `DRAFT · Vn LIVE` or `DRAFT`
55
+ * @property live - Whether it is live
56
+ */
57
+ export const PalettePageType = StructType({
58
+ page: StringType,
59
+ title: StringType,
60
+ meta: StringType,
61
+ live: BooleanType,
62
+ });
63
+ // ============================================================================
64
+ // What the palette shows
65
+ // ============================================================================
66
+ /**
67
+ * Each listed component's card, by key: its meta line and whether it is
68
+ * placed. A card's meta line names the datasets its component reads, joined
69
+ * with ` · `; the component the selected placement places is placed, and its
70
+ * line counts the page's placements of it instead. A key two components
71
+ * share keeps the first one's card.
72
+ */
73
+ export const paletteCards = East.function([ArrayType(StudioComponentType), ArrayType(StudioCellType), OptionType(StringType)], DictType(StringType, PaletteCardType), ($, listed, cells, selectedCell) => {
74
+ const placements = $.let(new Map(), DictType(StringType, IntegerType));
75
+ $.for(cells, ($2, cell) => {
76
+ $2(placements.insertOrUpdate(cell.component, 1n, (_$3, count) => count.add(1n)));
77
+ });
78
+ // The component the selected placement places.
79
+ const selected = $.let(selectedCell.match({
80
+ some: (_$2, cellKey) => cells.firstMap((_$3, cell) => cell.key.equal(cellKey).ifElse(() => East.value(some(cell.component), OptionType(StringType)), () => East.value(none, OptionType(StringType)))),
81
+ none: (_$2) => East.value(none, OptionType(StringType)),
82
+ }), OptionType(StringType));
83
+ const cards = $.let(new Map(), DictType(StringType, PaletteCardType));
84
+ $.for(listed, ($2, component) => {
85
+ const reads = $2.let(component.reads.paths.concat(component.reads.pages)
86
+ .map((_$3, path) => path.get(path.size().subtract(1n)).unwrap("field")));
87
+ const placed = $2.let(East.equal(selected, some(component.key)));
88
+ const count = $2.let(placements.tryGet(component.key).match({
89
+ some: (_$3, n) => n,
90
+ none: (_$3) => East.value(0n),
91
+ }));
92
+ const meta = $2.let(placed.ifElse(() => East.str `ON CANVAS · ×${East.print(count)}`, () => reads.size().equal(0n).ifElse(() => East.value("no data"), () => reads.stringJoin(" · "))));
93
+ $2(cards.insertOrUpdate(component.key, { meta, placed }, (_$3, existing) => existing));
94
+ });
95
+ return cards;
96
+ });
97
+ /**
98
+ * A project's pages, in key order, as the palette's Pages tab lists them —
99
+ * each with its title and its status. Templates and other projects' pages are
100
+ * not listed.
101
+ */
102
+ export const palettePages = East.function([StudioPagesType, StringType], ArrayType(PalettePageType), ($, pages, project) => {
103
+ const listed = $.let([], ArrayType(PalettePageType));
104
+ $.for(pages, ($2, entry, key) => {
105
+ $2.if(key.project.equal(project), ($3) => {
106
+ $3.match(entry, {
107
+ page: ($4, page) => {
108
+ const live = $4.let(pageStatus(page).hasTag("live"));
109
+ const meta = $4.let(page.live.match({
110
+ some: (_$5, version) => live.ifElse(() => East.str `LIVE · V${East.print(version.version)}`, () => East.str `DRAFT · V${East.print(version.version)} LIVE`),
111
+ none: (_$5) => East.value("DRAFT"),
112
+ }));
113
+ $4(listed.pushLast({ page: key.page, title: page.draft.title, meta, live }));
114
+ },
115
+ });
116
+ });
117
+ });
118
+ return listed;
119
+ });
120
+ //# sourceMappingURL=palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../src/studio/palette.ts"],"names":[],"mappings":"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"}