@elaraai/e3-ui 1.0.83 → 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,155 @@
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 inspector (#996) — the selected placement's component, what
7
+ * it reads, its description and its layout, computed in East for the
8
+ * `StudioBuilder` renderer, which draws the inspector in its pane after the
9
+ * canvas. It writes no page: a layout edit is a request the canvas takes as
10
+ * one gesture of the page's editing session, undone, redone, discarded and
11
+ * applied with the rest.
12
+ *
13
+ * @packageDocumentation
14
+ */
15
+ import { ArrayType, BooleanType, East, FunctionType, IntegerType, NullType, OptionType, SetType, StringType, StructType, none, some, } from "@elaraai/east";
16
+ import { SnapGrid } from "@elaraai/east-ui/internal";
17
+ import { TreePathType } from "@elaraai/e3-types";
18
+ import { StudioComponentType } from "./component.js";
19
+ import { StudioCellType } from "./pages.js";
20
+ // ============================================================================
21
+ // What the inspector shows
22
+ // ============================================================================
23
+ /**
24
+ * The selected placement's layout, as the canvas draws it.
25
+ *
26
+ * @property span - Its span, in columns of 12
27
+ * @property most - The most span its row leaves it: 12 less the row's other spans
28
+ * @property row - Its row, counting from 1 in the order the rows first appear
29
+ * @property rows - How many rows the page has
30
+ * @property height - Its height in px; `none` is its content's
31
+ * @property align - Where it sits in a taller row
32
+ */
33
+ export const InspectorLayoutType = StructType({
34
+ span: IntegerType,
35
+ most: IntegerType,
36
+ row: IntegerType,
37
+ rows: IntegerType,
38
+ height: OptionType(IntegerType),
39
+ align: SnapGrid.Types.Align,
40
+ });
41
+ /**
42
+ * The selected placement, as the inspector shows it.
43
+ *
44
+ * @property key - The placement's key — what a layout request names
45
+ * @property name - Its title, else its component's name, else its component's key
46
+ * @property component - Its component's key
47
+ * @property changed - Its component's code changed since the page went live:
48
+ * its fingerprint differs from the one the live version's cell stored
49
+ * @property reads - The paths of the datasets its component's code reads, whole
50
+ * or a window at a time — the renderer prints each as its keypath (`.inputs.sales_daily`)
51
+ * @property description - Its component's description, fixed by its developer
52
+ * @property layout - Its layout ({@link InspectorLayoutType})
53
+ */
54
+ export const InspectorSelectionType = StructType({
55
+ key: StringType,
56
+ name: StringType,
57
+ component: StringType,
58
+ changed: BooleanType,
59
+ reads: ArrayType(TreePathType),
60
+ description: OptionType(StringType),
61
+ layout: InspectorLayoutType,
62
+ });
63
+ /**
64
+ * The inspector, as the `StudioBuilder` renderer draws it.
65
+ *
66
+ * @property selection - The selected placement; `none` when nothing is selected
67
+ * @property onRequest - Asks the canvas for a layout change, which it takes as one gesture
68
+ */
69
+ export const StudioInspectorPayloadType = StructType({
70
+ selection: OptionType(InspectorSelectionType),
71
+ onRequest: FunctionType([SnapGrid.Types.Request], NullType),
72
+ });
73
+ /**
74
+ * The selected placement, as the inspector shows it — `none` when nothing is
75
+ * selected, or the page has no placement under the selected key.
76
+ *
77
+ * @remarks
78
+ * `cells` are the page's placements as the canvas draws them, its unsaved
79
+ * drafts in place; `live` the live version's, whose fingerprints say whether a
80
+ * component's code changed since the page went live — a placement the live
81
+ * version does not hold has not gone live, and has not changed. A placement
82
+ * whose component the surface does not list is named by its component's key,
83
+ * reads nothing and has no description.
84
+ */
85
+ export const inspectorSelection = East.function([ArrayType(StudioComponentType), ArrayType(StudioCellType), OptionType(ArrayType(StudioCellType)), OptionType(StringType)], OptionType(InspectorSelectionType), ($, listed, cells, live, selected) => {
86
+ const found = $.let(selected.match({
87
+ some: (_$2, key) => cells.firstMap((_$3, cell) => cell.key.equal(key).ifElse(() => East.value(some(cell), OptionType(StudioCellType)), () => East.value(none, OptionType(StudioCellType)))),
88
+ none: (_$2) => East.value(none, OptionType(StudioCellType)),
89
+ }), OptionType(StudioCellType));
90
+ $.if(found.hasTag("none"), ($2) => {
91
+ $2.return(East.value(none, OptionType(InspectorSelectionType)));
92
+ });
93
+ const cell = $.let(found.unwrap("some"));
94
+ const component = $.let(listed.firstMap((_$2, c) => c.key.equal(cell.component).ifElse(() => East.value(some(c), OptionType(StudioComponentType)), () => East.value(none, OptionType(StudioComponentType)))), OptionType(StudioComponentType));
95
+ const name = $.let(cell.title.match({
96
+ some: (_$2, title) => title,
97
+ none: (_$2) => component.match({ some: (_$3, c) => c.name, none: (_$3) => cell.component }),
98
+ }));
99
+ // The fingerprint the live version's cell stored, against its code's now.
100
+ const stored = $.let(live.match({
101
+ some: (_$2, liveCells) => liveCells.firstMap((_$3, c) => c.key.equal(cell.key).ifElse(() => East.value(some(c.fingerprint), OptionType(StringType)), () => East.value(none, OptionType(StringType)))),
102
+ none: (_$2) => East.value(none, OptionType(StringType)),
103
+ }), OptionType(StringType));
104
+ const changed = $.let(stored.match({
105
+ some: (_$2, fingerprint) => component.match({
106
+ some: (_$3, c) => c.fingerprint.notEqual(fingerprint),
107
+ none: (_$3) => East.value(false),
108
+ }),
109
+ none: (_$2) => East.value(false),
110
+ }));
111
+ const reads = $.let(component.match({
112
+ some: (_$2, c) => c.reads.paths.concat(c.reads.pages),
113
+ none: (_$2) => East.value([], ArrayType(TreePathType)),
114
+ }), ArrayType(TreePathType));
115
+ // Its row among the rows, in the order they first appear, and the room
116
+ // the row's other placements leave it.
117
+ const rows = $.let([], ArrayType(StringType));
118
+ const seen = $.let(new Set(), SetType(StringType));
119
+ const others = $.let(0n);
120
+ $.for(cells, ($2, c) => {
121
+ $2.if(seen.has(c.row).not(), ($3) => {
122
+ $3(seen.insert(c.row));
123
+ $3(rows.pushLast(c.row));
124
+ });
125
+ $2.if(c.row.equal(cell.row).and(() => c.key.notEqual(cell.key)), ($3) => {
126
+ $3.assign(others, others.add(c.span));
127
+ });
128
+ });
129
+ const row = $.let(0n);
130
+ $.for(rows, ($2, r, index) => {
131
+ $2.if(r.equal(cell.row), ($3) => {
132
+ $3.assign(row, index.add(1n));
133
+ });
134
+ });
135
+ return East.value(some({
136
+ key: cell.key,
137
+ name,
138
+ component: cell.component,
139
+ changed,
140
+ reads,
141
+ description: component.match({
142
+ some: (_$2, c) => c.description,
143
+ none: (_$2) => East.value(none, OptionType(StringType)),
144
+ }),
145
+ layout: {
146
+ span: cell.span,
147
+ most: East.value(12n).subtract(others),
148
+ row,
149
+ rows: rows.size(),
150
+ height: cell.height,
151
+ align: cell.align,
152
+ },
153
+ }), OptionType(InspectorSelectionType));
154
+ });
155
+ //# sourceMappingURL=inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../../src/studio/inspector.ts"],"names":[],"mappings":"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"}