@golemui/lit 0.12.2 → 0.13.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.
- package/CHANGELOG.md +14 -0
- package/index.js +159 -162
- package/index.umd.cjs +4 -4
- package/lib/adapters/action-widget.adapter.d.ts +4 -4
- package/lib/adapters/base-widget.adapter.d.ts +3 -3
- package/lib/adapters/display.widget-adapter.d.ts +4 -4
- package/lib/adapters/input-widget.adapter.d.ts +5 -5
- package/lib/adapters/layout-widget.adapter.d.ts +4 -4
- package/lib/components/form/form.element.d.ts +4 -4
- package/lib/components/form/property.converters.d.ts +2 -2
- package/lib/components/item-renderers/item-renderer.d.ts +2 -2
- package/lib/context/form.context.d.ts +2 -2
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## 0.13.0 (2026-05-18)
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **core,gui-shared:** introduce /internals subpath ([#90](https://github.com/golemui/golemui/pull/90))
|
|
6
|
+
|
|
7
|
+
### ❤️ Thank You
|
|
8
|
+
|
|
9
|
+
- mudscientist
|
|
10
|
+
|
|
11
|
+
## 0.12.2 (2026-05-16)
|
|
12
|
+
|
|
13
|
+
This was a version bump only for lit to align it with other projects, there were no code changes.
|
|
14
|
+
|
|
1
15
|
## 0.12.1 (2026-05-16)
|
|
2
16
|
|
|
3
17
|
This was a version bump only for lit to align it with other projects, there were no code changes.
|
package/index.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Subject as
|
|
3
|
-
import { createContext as
|
|
4
|
-
import { LitElement as
|
|
5
|
-
import { property as
|
|
6
|
-
import { when as
|
|
7
|
-
|
|
1
|
+
import { FormContext as I, calculatedWidgetsByUid$ as W, assertNoPropCollisions as A, dataByPath$ as S, validationByPath$ as O, injectedValidationByPath$ as N, touchedControlsByPath$ as R, calculatedLayoutChildrenByUid$ as P, makeRepeaterItemConfig as T, cloneObject as _, errorCodes as $, shortUUID as L, getDirectionFromLanguage as v, formHealth as j } from "@golemui/core";
|
|
2
|
+
import { Subject as E, takeUntil as p, combineLatest as F } from "rxjs";
|
|
3
|
+
import { createContext as h, consume as m, ContextProvider as U, provide as M } from "@lit/context";
|
|
4
|
+
import { LitElement as y, nothing as V, html as b } from "lit";
|
|
5
|
+
import { property as n, customElement as f, state as B } from "lit/decorators.js";
|
|
6
|
+
import { when as H } from "lit/directives/when.js";
|
|
7
|
+
const w = h("guiFormContext");
|
|
8
|
+
class z extends I {
|
|
9
|
+
// Just a subclass to make Core.FormContext Injectable
|
|
10
|
+
}
|
|
11
|
+
class g {
|
|
8
12
|
constructor() {
|
|
9
|
-
this.templateData = {}, this.destroy$ = new
|
|
13
|
+
this.templateData = {}, this.destroy$ = new E(), this.templateDataChanged$ = new E();
|
|
10
14
|
}
|
|
11
15
|
setTemplateData(t) {
|
|
12
16
|
this.templateData = { ...this.templateData, ...t }, this.templateDataChanged$.next();
|
|
@@ -19,13 +23,13 @@ class b {
|
|
|
19
23
|
}
|
|
20
24
|
// Listen to the calculated props stream and keep all widget props merged in a flattened object
|
|
21
25
|
templateDataUpdater() {
|
|
22
|
-
this.context.store.state$.pipe(
|
|
26
|
+
this.context.store.state$.pipe(p(this.destroy$), W(this.widget.uid)).subscribe((t) => {
|
|
23
27
|
const o = {
|
|
24
28
|
...t,
|
|
25
29
|
lang: this.context.store.getState().lang,
|
|
26
30
|
deps: this.context.dependencies
|
|
27
31
|
};
|
|
28
|
-
|
|
32
|
+
A(t.uid, t.props, o), this.setTemplateData({
|
|
29
33
|
...o,
|
|
30
34
|
...t.props
|
|
31
35
|
});
|
|
@@ -38,8 +42,8 @@ class b {
|
|
|
38
42
|
}), this.destroy$.next();
|
|
39
43
|
}
|
|
40
44
|
}
|
|
41
|
-
const
|
|
42
|
-
class
|
|
45
|
+
const nt = h("guiInputWidgetAdapter");
|
|
46
|
+
class dt extends g {
|
|
43
47
|
constructor() {
|
|
44
48
|
super(...arguments), this.templateData = {};
|
|
45
49
|
}
|
|
@@ -47,21 +51,21 @@ class J extends b {
|
|
|
47
51
|
this.widget = t, this.addWidgetToTheStore(t), this.templateDataUpdater(), this.context.store.dispatch({
|
|
48
52
|
type: "SET_WIDGET_INITIAL_DATA",
|
|
49
53
|
payload: { data: t.defaultValue, path: t.path }
|
|
50
|
-
}), this.context.store.state$.pipe(
|
|
54
|
+
}), this.context.store.state$.pipe(p(this.destroy$), S(t.path)).subscribe((e) => this.setTemplateData({ value: e }));
|
|
51
55
|
const o = this.context.store.state$.pipe(
|
|
52
|
-
|
|
53
|
-
|
|
56
|
+
p(this.destroy$),
|
|
57
|
+
O(t.path)
|
|
54
58
|
), r = this.context.store.state$.pipe(
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
p(this.destroy$),
|
|
60
|
+
N(t.path)
|
|
57
61
|
);
|
|
58
|
-
|
|
59
|
-
([e,
|
|
62
|
+
F([o, r]).subscribe(
|
|
63
|
+
([e, i]) => {
|
|
60
64
|
this.setTemplateData({
|
|
61
|
-
errors: [...e ?? [], ...
|
|
65
|
+
errors: [...e ?? [], ...i ?? []]
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
|
-
), this.context.store.state$.pipe(
|
|
68
|
+
), this.context.store.state$.pipe(p(this.destroy$), R(t.path)).subscribe((e) => this.setTemplateData({ touched: e })), this.context.emitEvent("load", this.widget);
|
|
65
69
|
}
|
|
66
70
|
valueChanged(t) {
|
|
67
71
|
this.context.store.dispatch({
|
|
@@ -91,8 +95,8 @@ class J extends b {
|
|
|
91
95
|
}), this.context.emitEvent("blur", this.widget);
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
|
-
const
|
|
95
|
-
class
|
|
98
|
+
const pt = h("guiDisplayWidgetAdapter");
|
|
99
|
+
class ht extends g {
|
|
96
100
|
constructor() {
|
|
97
101
|
super(...arguments), this.templateData = {};
|
|
98
102
|
}
|
|
@@ -102,8 +106,8 @@ class Q extends b {
|
|
|
102
106
|
}), this.addWidgetToTheStore(t), this.templateDataUpdater();
|
|
103
107
|
}
|
|
104
108
|
}
|
|
105
|
-
const
|
|
106
|
-
class
|
|
109
|
+
const ct = h("guiActionWidgetAdapter");
|
|
110
|
+
class lt extends g {
|
|
107
111
|
constructor() {
|
|
108
112
|
super(...arguments), this.templateData = {};
|
|
109
113
|
}
|
|
@@ -118,15 +122,15 @@ class Y extends b {
|
|
|
118
122
|
this.context.emitEvent("click", this.widget);
|
|
119
123
|
}
|
|
120
124
|
}
|
|
121
|
-
const
|
|
122
|
-
class
|
|
125
|
+
const ut = h("guiLayoutWidgetAdapter");
|
|
126
|
+
class mt extends g {
|
|
123
127
|
constructor() {
|
|
124
128
|
super(...arguments), this.templateData = {};
|
|
125
129
|
}
|
|
126
130
|
init(t) {
|
|
127
131
|
this.widget = t, this.setTemplateData({
|
|
128
132
|
...this.widget.props
|
|
129
|
-
}), this.context.store.state$.pipe(
|
|
133
|
+
}), this.context.store.state$.pipe(P(this.widget.uid)).pipe(p(this.destroy$)).subscribe((o) => {
|
|
130
134
|
this.setTemplateData({
|
|
131
135
|
children: o
|
|
132
136
|
});
|
|
@@ -136,18 +140,14 @@ class tt extends b {
|
|
|
136
140
|
this.context.emitEvent("change", this.widget, t);
|
|
137
141
|
}
|
|
138
142
|
}
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
var O = Object.defineProperty, u = (i, t, o, r) => {
|
|
145
|
-
for (var e = void 0, s = i.length - 1, a; s >= 0; s--)
|
|
146
|
-
(a = i[s]) && (e = a(t, o, e) || e);
|
|
147
|
-
return e && O(t, o, e), e;
|
|
143
|
+
const x = h("guiRepeaterIndexesContext");
|
|
144
|
+
var G = Object.defineProperty, l = (s, t, o, r) => {
|
|
145
|
+
for (var e = void 0, i = s.length - 1, a; i >= 0; i--)
|
|
146
|
+
(a = s[i]) && (e = a(t, o, e) || e);
|
|
147
|
+
return e && G(t, o, e), e;
|
|
148
148
|
};
|
|
149
|
-
const
|
|
150
|
-
class t extends
|
|
149
|
+
const k = (s) => {
|
|
150
|
+
class t extends s {
|
|
151
151
|
constructor() {
|
|
152
152
|
super(...arguments), this.repeaterIndexes = [];
|
|
153
153
|
}
|
|
@@ -157,15 +157,12 @@ const R = (i) => {
|
|
|
157
157
|
async loadWidgetComponent() {
|
|
158
158
|
if (this.widget)
|
|
159
159
|
try {
|
|
160
|
-
const r = await this.formContext.widgetRegistry.loadWidget(this.widget.type), e = new r(),
|
|
160
|
+
const r = await this.formContext.widgetRegistry.loadWidget(this.widget.type), e = new r(), i = this.repeaterIndexes ?? [];
|
|
161
161
|
let a;
|
|
162
|
-
this.repeaterIndex !== void 0 ? a = [...
|
|
163
|
-
n.cloneObject(this.widget),
|
|
164
|
-
a
|
|
165
|
-
) : this.widget, e.id = `host-${this.widget.uid}`, this.replaceWith(e);
|
|
162
|
+
this.repeaterIndex !== void 0 ? a = [...i, this.repeaterIndex] : a = i, e.widget = a.length > 0 ? T(_(this.widget), a) : this.widget, e.id = `host-${this.widget.uid}`, this.replaceWith(e);
|
|
166
163
|
} catch (r) {
|
|
167
164
|
console.error(`Widget "${this.widget.type}" could not be loaded`, r);
|
|
168
|
-
const e =
|
|
165
|
+
const e = $.widgetCouldNotBeLoaded;
|
|
169
166
|
this.dispatchEvent(
|
|
170
167
|
new CustomEvent("formHealth", {
|
|
171
168
|
detail: {
|
|
@@ -183,35 +180,35 @@ const R = (i) => {
|
|
|
183
180
|
return null;
|
|
184
181
|
}
|
|
185
182
|
}
|
|
186
|
-
return
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
], t.prototype, "formContext"),
|
|
190
|
-
|
|
191
|
-
], t.prototype, "widget"),
|
|
192
|
-
|
|
193
|
-
], t.prototype, "repeaterIndex"),
|
|
194
|
-
|
|
195
|
-
|
|
183
|
+
return l([
|
|
184
|
+
m({ context: w }),
|
|
185
|
+
n({ attribute: !1 })
|
|
186
|
+
], t.prototype, "formContext"), l([
|
|
187
|
+
n({ type: Object })
|
|
188
|
+
], t.prototype, "widget"), l([
|
|
189
|
+
n({ type: Number })
|
|
190
|
+
], t.prototype, "repeaterIndex"), l([
|
|
191
|
+
m({ context: x, subscribe: !0 }),
|
|
192
|
+
n({ attribute: !1 })
|
|
196
193
|
], t.prototype, "repeaterIndexes"), t;
|
|
197
194
|
};
|
|
198
|
-
var
|
|
199
|
-
for (var e = r > 1 ? void 0 : r ?
|
|
200
|
-
(a = i
|
|
195
|
+
var q = Object.getOwnPropertyDescriptor, J = (s, t, o, r) => {
|
|
196
|
+
for (var e = r > 1 ? void 0 : r ? q(t, o) : t, i = s.length - 1, a; i >= 0; i--)
|
|
197
|
+
(a = s[i]) && (e = a(e) || e);
|
|
201
198
|
return e;
|
|
202
199
|
};
|
|
203
|
-
let
|
|
200
|
+
let C = class extends k(y) {
|
|
204
201
|
};
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
],
|
|
208
|
-
var
|
|
209
|
-
for (var e = void 0,
|
|
210
|
-
(a = i
|
|
211
|
-
return e &&
|
|
202
|
+
C = J([
|
|
203
|
+
f("gui-widget")
|
|
204
|
+
], C);
|
|
205
|
+
var Z = Object.defineProperty, u = (s, t, o, r) => {
|
|
206
|
+
for (var e = void 0, i = s.length - 1, a; i >= 0; i--)
|
|
207
|
+
(a = s[i]) && (e = a(t, o, e) || e);
|
|
208
|
+
return e && Z(t, o, e), e;
|
|
212
209
|
};
|
|
213
|
-
const
|
|
214
|
-
class t extends
|
|
210
|
+
const Q = (s) => {
|
|
211
|
+
class t extends s {
|
|
215
212
|
constructor() {
|
|
216
213
|
super(...arguments), this.repeaterIndex = -1, this.parentRepeaterIndexes = [];
|
|
217
214
|
}
|
|
@@ -221,23 +218,23 @@ const j = (i) => {
|
|
|
221
218
|
async loadWidgetComponent(r) {
|
|
222
219
|
if (this.widget)
|
|
223
220
|
try {
|
|
224
|
-
const e = await this.formContext.widgetRegistry.loadWidget(this.widget.type),
|
|
225
|
-
new
|
|
226
|
-
context:
|
|
221
|
+
const e = await this.formContext.widgetRegistry.loadWidget(this.widget.type), i = new e(), a = [...this.parentRepeaterIndexes ?? [], r];
|
|
222
|
+
new U(i, {
|
|
223
|
+
context: x,
|
|
227
224
|
initialValue: a
|
|
228
|
-
}),
|
|
229
|
-
|
|
225
|
+
}), i.widget = T(
|
|
226
|
+
_(this.widget),
|
|
230
227
|
a
|
|
231
|
-
),
|
|
228
|
+
), i.id = `host-${this.widget.uid}`, this.replaceWith(i);
|
|
232
229
|
} catch (e) {
|
|
233
230
|
console.error(`Widget "${this.widget.type}" could not be loaded`, e);
|
|
234
|
-
const
|
|
231
|
+
const i = $.widgetCouldNotBeLoaded;
|
|
235
232
|
this.dispatchEvent(
|
|
236
233
|
new CustomEvent("formHealth", {
|
|
237
234
|
detail: {
|
|
238
235
|
status: "errored",
|
|
239
|
-
message: `[${
|
|
240
|
-
code:
|
|
236
|
+
message: `[${i}] Widget "${this.widget.type}" could not be loaded`,
|
|
237
|
+
code: i
|
|
241
238
|
},
|
|
242
239
|
bubbles: !0,
|
|
243
240
|
composed: !0
|
|
@@ -249,137 +246,137 @@ const j = (i) => {
|
|
|
249
246
|
return null;
|
|
250
247
|
}
|
|
251
248
|
}
|
|
252
|
-
return
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
], t.prototype, "formContext"),
|
|
256
|
-
|
|
257
|
-
], t.prototype, "widget"),
|
|
258
|
-
|
|
259
|
-
], t.prototype, "repeaterIndex"),
|
|
260
|
-
|
|
261
|
-
|
|
249
|
+
return u([
|
|
250
|
+
m({ context: w }),
|
|
251
|
+
n({ attribute: !1 })
|
|
252
|
+
], t.prototype, "formContext"), u([
|
|
253
|
+
n({ type: Object })
|
|
254
|
+
], t.prototype, "widget"), u([
|
|
255
|
+
n({ type: Number })
|
|
256
|
+
], t.prototype, "repeaterIndex"), u([
|
|
257
|
+
m({ context: x, subscribe: !0 }),
|
|
258
|
+
n({ attribute: !1 })
|
|
262
259
|
], t.prototype, "parentRepeaterIndexes"), t;
|
|
263
260
|
};
|
|
264
|
-
var
|
|
265
|
-
for (var e = r > 1 ? void 0 : r ?
|
|
266
|
-
(a = i
|
|
261
|
+
var X = Object.getOwnPropertyDescriptor, Y = (s, t, o, r) => {
|
|
262
|
+
for (var e = r > 1 ? void 0 : r ? X(t, o) : t, i = s.length - 1, a; i >= 0; i--)
|
|
263
|
+
(a = s[i]) && (e = a(e) || e);
|
|
267
264
|
return e;
|
|
268
265
|
};
|
|
269
|
-
let D = class extends
|
|
266
|
+
let D = class extends Q(y) {
|
|
270
267
|
};
|
|
271
|
-
D =
|
|
272
|
-
|
|
268
|
+
D = Y([
|
|
269
|
+
f("gui-repeater-widget")
|
|
273
270
|
], D);
|
|
274
|
-
var
|
|
275
|
-
for (var e = r > 1 ? void 0 : r ?
|
|
276
|
-
(a = i
|
|
277
|
-
return r && e &&
|
|
271
|
+
var K = Object.defineProperty, tt = Object.getOwnPropertyDescriptor, c = (s, t, o, r) => {
|
|
272
|
+
for (var e = r > 1 ? void 0 : r ? tt(t, o) : t, i = s.length - 1, a; i >= 0; i--)
|
|
273
|
+
(a = s[i]) && (e = (r ? a(t, o, e) : a(e)) || e);
|
|
274
|
+
return r && e && K(t, o, e), e;
|
|
278
275
|
};
|
|
279
|
-
let
|
|
276
|
+
let d = class extends y {
|
|
280
277
|
constructor() {
|
|
281
|
-
super(...arguments), this.context = new
|
|
282
|
-
}, this._defaultFormName =
|
|
278
|
+
super(...arguments), this.context = new z(), this.autocomplete = void 0, this.direction = "ltr", this.unsubscribeI18n = () => {
|
|
279
|
+
}, this._defaultFormName = L();
|
|
283
280
|
}
|
|
284
281
|
connectedCallback() {
|
|
285
282
|
super.connectedCallback(), this.classList.add("gui-form"), this.eventSub = this.context.events$.subscribe(
|
|
286
|
-
(
|
|
287
|
-
new CustomEvent(
|
|
283
|
+
(s) => this.dispatchEvent(
|
|
284
|
+
new CustomEvent(d.FORM_EVENT, { detail: s, bubbles: !0 })
|
|
288
285
|
)
|
|
289
286
|
);
|
|
290
287
|
}
|
|
291
|
-
updated(
|
|
292
|
-
super.updated(
|
|
288
|
+
updated(s) {
|
|
289
|
+
super.updated(s), s.has("config") && this.config && this._reinitialize(this.config);
|
|
293
290
|
}
|
|
294
|
-
_reinitialize(
|
|
291
|
+
_reinitialize(s) {
|
|
295
292
|
this.unsubscribeI18n(), this.stateSub?.unsubscribe(), this.healthSub?.unsubscribe(), this.context.initialize(
|
|
296
|
-
|
|
297
|
-
|
|
293
|
+
s.widgetLoaders,
|
|
294
|
+
s.middlewares ?? [],
|
|
298
295
|
this.validators,
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
), this.direction =
|
|
296
|
+
s.validateOn ?? "eager",
|
|
297
|
+
s.itemRenderers ?? {},
|
|
298
|
+
s.localization,
|
|
299
|
+
s.dependencies ?? {}
|
|
300
|
+
), this.direction = v(this.context.localization.lang), this.stateSub = this.context.store.state$.subscribe((t) => {
|
|
304
301
|
this.formState = t, this.requestUpdate();
|
|
305
|
-
}), this.healthSub =
|
|
302
|
+
}), this.healthSub = j(this.context.store.state$).subscribe((t) => {
|
|
306
303
|
this.dispatchEvent(
|
|
307
|
-
new CustomEvent(
|
|
304
|
+
new CustomEvent(d.FORM_HEALTH_EVENT, {
|
|
308
305
|
detail: t,
|
|
309
306
|
bubbles: !0
|
|
310
307
|
})
|
|
311
308
|
);
|
|
312
309
|
}), this.context.store.dispatch({
|
|
313
310
|
type: "INITIALIZE",
|
|
314
|
-
payload: { formName:
|
|
315
|
-
}), this.context.store.dispatch({ type: "SET_DATA", payload: { data:
|
|
316
|
-
this.direction =
|
|
311
|
+
payload: { formName: s.formName ?? this._defaultFormName, formDef: s.formDef }
|
|
312
|
+
}), this.context.store.dispatch({ type: "SET_DATA", payload: { data: s.data ?? {} } }), this.context.store.dispatch({ type: "SET_META", payload: { meta: s.meta ?? {} } }), this.unsubscribeI18n = this.context.localization.subscribe((t) => {
|
|
313
|
+
this.direction = v(t), this.context.store.dispatch({ type: "SET_LANGUAGE", payload: { lang: t } });
|
|
317
314
|
});
|
|
318
315
|
}
|
|
319
316
|
createRenderRoot() {
|
|
320
317
|
return this;
|
|
321
318
|
}
|
|
322
319
|
render() {
|
|
323
|
-
const
|
|
324
|
-
return
|
|
320
|
+
const s = this.formState?.formDef && this.context.widgetRegistry.ready, t = this.config?.formName ?? this._defaultFormName;
|
|
321
|
+
return b`
|
|
325
322
|
<form
|
|
326
323
|
id=${t}
|
|
327
324
|
novalidate
|
|
328
325
|
dir=${this.direction}
|
|
329
|
-
autocomplete=${this.autocomplete ||
|
|
326
|
+
autocomplete=${this.autocomplete || V}
|
|
330
327
|
>
|
|
331
|
-
${
|
|
332
|
-
|
|
333
|
-
() =>
|
|
334
|
-
() =>
|
|
328
|
+
${H(
|
|
329
|
+
s,
|
|
330
|
+
() => b` <gui-widget .widget=${this.formState?.formDef.form}></gui-widget>`,
|
|
331
|
+
() => b` <div>Loading form...</div>`
|
|
335
332
|
)}
|
|
336
333
|
</form>
|
|
337
334
|
`;
|
|
338
335
|
}
|
|
339
|
-
setData(
|
|
340
|
-
this.context.store.dispatch({ type: "SET_DATA", payload: { data:
|
|
336
|
+
setData(s) {
|
|
337
|
+
this.context.store.dispatch({ type: "SET_DATA", payload: { data: s } });
|
|
341
338
|
}
|
|
342
|
-
setMeta(
|
|
343
|
-
this.context.store.dispatch({ type: "SET_META", payload: { meta:
|
|
339
|
+
setMeta(s) {
|
|
340
|
+
this.context.store.dispatch({ type: "SET_META", payload: { meta: s } });
|
|
344
341
|
}
|
|
345
342
|
disconnectedCallback() {
|
|
346
343
|
super.disconnectedCallback(), this.stateSub?.unsubscribe(), this.healthSub?.unsubscribe(), this.eventSub?.unsubscribe(), this.unsubscribeI18n();
|
|
347
344
|
}
|
|
348
345
|
};
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
],
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
],
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
],
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
],
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
],
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
],
|
|
346
|
+
d.FORM_HEALTH_EVENT = "formHealth";
|
|
347
|
+
d.FORM_EVENT = "formEvent";
|
|
348
|
+
c([
|
|
349
|
+
M({ context: w })
|
|
350
|
+
], d.prototype, "context", 2);
|
|
351
|
+
c([
|
|
352
|
+
n({ attribute: !1 })
|
|
353
|
+
], d.prototype, "config", 2);
|
|
354
|
+
c([
|
|
355
|
+
n({ attribute: !1 })
|
|
356
|
+
], d.prototype, "validators", 2);
|
|
357
|
+
c([
|
|
358
|
+
n({ type: String })
|
|
359
|
+
], d.prototype, "autocomplete", 2);
|
|
360
|
+
c([
|
|
361
|
+
B()
|
|
362
|
+
], d.prototype, "direction", 2);
|
|
363
|
+
d = c([
|
|
364
|
+
f("gui-core-form")
|
|
365
|
+
], d);
|
|
369
366
|
export {
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
367
|
+
lt as ActionWidgetAdapter,
|
|
368
|
+
g as BaseWidgetAdapter,
|
|
369
|
+
ht as DisplayWidgetAdapter,
|
|
370
|
+
d as FormElement,
|
|
371
|
+
dt as InputWidgetAdapter,
|
|
372
|
+
mt as LayoutWidgetAdapter,
|
|
373
|
+
z as LitFormContext,
|
|
377
374
|
D as RepeaterWidgetElement,
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
375
|
+
C as WidgetElement,
|
|
376
|
+
ct as actionContext,
|
|
377
|
+
pt as displayWidgetContext,
|
|
378
|
+
w as formContext,
|
|
379
|
+
nt as inputContext,
|
|
380
|
+
ut as layoutContext,
|
|
381
|
+
x as repeaterIndexesContext
|
|
385
382
|
};
|
package/index.umd.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
(function(i,
|
|
1
|
+
(function(i,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("@golemui/core"),require("rxjs"),require("@lit/context"),require("lit"),require("lit/decorators.js"),require("lit/directives/when.js")):typeof define=="function"&&define.amd?define(["exports","@golemui/core","rxjs","@lit/context","lit","lit/decorators.js","lit/directives/when.js"],r):(i=typeof globalThis<"u"?globalThis:i||self,r(i.lit={},i.core,i.rxjs,i.context,i.lit,i.decorators_js,i.when_js))})(this,(function(i,r,l,h,c,p,x){"use strict";const g=h.createContext("guiFormContext");class E extends r.FormContext{}class m{constructor(){this.templateData={},this.destroy$=new l.Subject,this.templateDataChanged$=new l.Subject}setTemplateData(t){this.templateData={...this.templateData,...t},this.templateDataChanged$.next()}addWidgetToTheStore(t){this.context.store.dispatch({type:"ADD_WIDGET",payload:{widget:t}})}templateDataUpdater(){this.context.store.state$.pipe(l.takeUntil(this.destroy$),r.calculatedWidgetsByUid$(this.widget.uid)).subscribe(t=>{const s={...t,lang:this.context.store.getState().lang,deps:this.context.dependencies};r.assertNoPropCollisions(t.uid,t.props,s),this.setTemplateData({...s,...t.props})})}destroy(){this.context.store.dispatch({type:"REMOVE_WIDGET",payload:{uid:this.widget.uid}}),this.destroy$.next()}}const w=h.createContext("guiInputWidgetAdapter");class C extends m{constructor(){super(...arguments),this.templateData={}}init(t){this.widget=t,this.addWidgetToTheStore(t),this.templateDataUpdater(),this.context.store.dispatch({type:"SET_WIDGET_INITIAL_DATA",payload:{data:t.defaultValue,path:t.path}}),this.context.store.state$.pipe(l.takeUntil(this.destroy$),r.dataByPath$(t.path)).subscribe(e=>this.setTemplateData({value:e}));const s=this.context.store.state$.pipe(l.takeUntil(this.destroy$),r.validationByPath$(t.path)),d=this.context.store.state$.pipe(l.takeUntil(this.destroy$),r.injectedValidationByPath$(t.path));l.combineLatest([s,d]).subscribe(([e,a])=>{this.setTemplateData({errors:[...e??[],...a??[]]})}),this.context.store.state$.pipe(l.takeUntil(this.destroy$),r.touchedControlsByPath$(t.path)).subscribe(e=>this.setTemplateData({touched:e})),this.context.emitEvent("load",this.widget)}valueChanged(t){this.context.store.dispatch({type:"SET_WIDGET_DATA",payload:{path:this.widget.path,data:t}}),this.context.emitEvent("change",this.widget)}filterChanged(t){this.context.emitEvent("filter",this.widget,t)}injectValidationIssues(t){this.context.store.dispatch({type:"INJECT_VALIDATION_ISSUES",payload:{path:this.widget.path,issues:t}})}getItemRenderer(t,s){return t?this.context.itemRenderers[t]:s}onBlur(){this.context.store.dispatch({type:"ATTEMPT_VALIDATION",payload:{reason:"blur",path:this.widget.path,uid:this.widget.uid}}),this.context.emitEvent("blur",this.widget)}}const v=h.createContext("guiDisplayWidgetAdapter");class T extends m{constructor(){super(...arguments),this.templateData={}}init(t){this.widget=t,this.setTemplateData({...this.widget.props}),this.addWidgetToTheStore(t),this.templateDataUpdater()}}const D=h.createContext("guiActionWidgetAdapter");class $ extends m{constructor(){super(...arguments),this.templateData={}}init(t){this.widget=t,this.setTemplateData({label:this.widget.label,icon:this.widget.props?.icon,iconPosition:this.widget.props?.iconPosition}),this.addWidgetToTheStore(t),this.templateDataUpdater(),this.context.emitEvent("load",this.widget)}click(){this.context.emitEvent("click",this.widget)}}const W=h.createContext("guiLayoutWidgetAdapter");class I extends m{constructor(){super(...arguments),this.templateData={}}init(t){this.widget=t,this.setTemplateData({...this.widget.props}),this.context.store.state$.pipe(r.calculatedLayoutChildrenByUid$(this.widget.uid)).pipe(l.takeUntil(this.destroy$)).subscribe(s=>{this.setTemplateData({children:s})}),this.addWidgetToTheStore(t),this.templateDataUpdater()}change(t){this.context.emitEvent("change",this.widget,t)}}const y=h.createContext("guiRepeaterIndexesContext");var A=Object.defineProperty,b=(n,t,s,d)=>{for(var e=void 0,a=n.length-1,o;a>=0;a--)(o=n[a])&&(e=o(t,s,e)||e);return e&&A(t,s,e),e};const _=n=>{class t extends n{constructor(){super(...arguments),this.repeaterIndexes=[]}connectedCallback(){super.connectedCallback?.(),this.loadWidgetComponent()}async loadWidgetComponent(){if(this.widget)try{const d=await this.formContext.widgetRegistry.loadWidget(this.widget.type),e=new d,a=this.repeaterIndexes??[];let o;this.repeaterIndex!==void 0?o=[...a,this.repeaterIndex]:o=a,e.widget=o.length>0?r.makeRepeaterItemConfig(r.cloneObject(this.widget),o):this.widget,e.id=`host-${this.widget.uid}`,this.replaceWith(e)}catch(d){console.error(`Widget "${this.widget.type}" could not be loaded`,d);const e=r.errorCodes.widgetCouldNotBeLoaded;this.dispatchEvent(new CustomEvent("formHealth",{detail:{status:"errored",message:`[${e}] Widget "${this.widget.type}" could not be loaded`,code:e},bubbles:!0,composed:!0}))}}render(){return null}}return b([h.consume({context:g}),p.property({attribute:!1})],t.prototype,"formContext"),b([p.property({type:Object})],t.prototype,"widget"),b([p.property({type:Number})],t.prototype,"repeaterIndex"),b([h.consume({context:y,subscribe:!0}),p.property({attribute:!1})],t.prototype,"repeaterIndexes"),t};var S=Object.getOwnPropertyDescriptor,F=(n,t,s,d)=>{for(var e=d>1?void 0:d?S(t,s):t,a=n.length-1,o;a>=0;a--)(o=n[a])&&(e=o(e)||e);return e};i.WidgetElement=class extends _(c.LitElement){},i.WidgetElement=F([p.customElement("gui-widget")],i.WidgetElement);var R=Object.defineProperty,f=(n,t,s,d)=>{for(var e=void 0,a=n.length-1,o;a>=0;a--)(o=n[a])&&(e=o(t,s,e)||e);return e&&R(t,s,e),e};const O=n=>{class t extends n{constructor(){super(...arguments),this.repeaterIndex=-1,this.parentRepeaterIndexes=[]}connectedCallback(){super.connectedCallback(),this.loadWidgetComponent(this.repeaterIndex)}async loadWidgetComponent(d){if(this.widget)try{const e=await this.formContext.widgetRegistry.loadWidget(this.widget.type),a=new e,o=[...this.parentRepeaterIndexes??[],d];new h.ContextProvider(a,{context:y,initialValue:o}),a.widget=r.makeRepeaterItemConfig(r.cloneObject(this.widget),o),a.id=`host-${this.widget.uid}`,this.replaceWith(a)}catch(e){console.error(`Widget "${this.widget.type}" could not be loaded`,e);const a=r.errorCodes.widgetCouldNotBeLoaded;this.dispatchEvent(new CustomEvent("formHealth",{detail:{status:"errored",message:`[${a}] Widget "${this.widget.type}" could not be loaded`,code:a},bubbles:!0,composed:!0}))}}render(){return null}}return f([h.consume({context:g}),p.property({attribute:!1})],t.prototype,"formContext"),f([p.property({type:Object})],t.prototype,"widget"),f([p.property({type:Number})],t.prototype,"repeaterIndex"),f([h.consume({context:y,subscribe:!0}),p.property({attribute:!1})],t.prototype,"parentRepeaterIndexes"),t};var L=Object.getOwnPropertyDescriptor,N=(n,t,s,d)=>{for(var e=d>1?void 0:d?L(t,s):t,a=n.length-1,o;a>=0;a--)(o=n[a])&&(e=o(e)||e);return e};i.RepeaterWidgetElement=class extends O(c.LitElement){},i.RepeaterWidgetElement=N([p.customElement("gui-repeater-widget")],i.RepeaterWidgetElement);var P=Object.defineProperty,U=Object.getOwnPropertyDescriptor,u=(n,t,s,d)=>{for(var e=d>1?void 0:d?U(t,s):t,a=n.length-1,o;a>=0;a--)(o=n[a])&&(e=(d?o(t,s,e):o(e))||e);return d&&e&&P(t,s,e),e};i.FormElement=class extends c.LitElement{constructor(){super(...arguments),this.context=new E,this.autocomplete=void 0,this.direction="ltr",this.unsubscribeI18n=()=>{},this._defaultFormName=r.shortUUID()}connectedCallback(){super.connectedCallback(),this.classList.add("gui-form"),this.eventSub=this.context.events$.subscribe(t=>this.dispatchEvent(new CustomEvent(i.FormElement.FORM_EVENT,{detail:t,bubbles:!0})))}updated(t){super.updated(t),t.has("config")&&this.config&&this._reinitialize(this.config)}_reinitialize(t){this.unsubscribeI18n(),this.stateSub?.unsubscribe(),this.healthSub?.unsubscribe(),this.context.initialize(t.widgetLoaders,t.middlewares??[],this.validators,t.validateOn??"eager",t.itemRenderers??{},t.localization,t.dependencies??{}),this.direction=r.getDirectionFromLanguage(this.context.localization.lang),this.stateSub=this.context.store.state$.subscribe(s=>{this.formState=s,this.requestUpdate()}),this.healthSub=r.formHealth(this.context.store.state$).subscribe(s=>{this.dispatchEvent(new CustomEvent(i.FormElement.FORM_HEALTH_EVENT,{detail:s,bubbles:!0}))}),this.context.store.dispatch({type:"INITIALIZE",payload:{formName:t.formName??this._defaultFormName,formDef:t.formDef}}),this.context.store.dispatch({type:"SET_DATA",payload:{data:t.data??{}}}),this.context.store.dispatch({type:"SET_META",payload:{meta:t.meta??{}}}),this.unsubscribeI18n=this.context.localization.subscribe(s=>{this.direction=r.getDirectionFromLanguage(s),this.context.store.dispatch({type:"SET_LANGUAGE",payload:{lang:s}})})}createRenderRoot(){return this}render(){const t=this.formState?.formDef&&this.context.widgetRegistry.ready,s=this.config?.formName??this._defaultFormName;return c.html`
|
|
2
2
|
<form
|
|
3
3
|
id=${s}
|
|
4
4
|
novalidate
|
|
5
5
|
dir=${this.direction}
|
|
6
|
-
autocomplete=${this.autocomplete||
|
|
6
|
+
autocomplete=${this.autocomplete||c.nothing}
|
|
7
7
|
>
|
|
8
|
-
${
|
|
8
|
+
${x.when(t,()=>c.html` <gui-widget .widget=${this.formState?.formDef.form}></gui-widget>`,()=>c.html` <div>Loading form...</div>`)}
|
|
9
9
|
</form>
|
|
10
|
-
`}setData(t){this.context.store.dispatch({type:"SET_DATA",payload:{data:t}})}setMeta(t){this.context.store.dispatch({type:"SET_META",payload:{meta:t}})}disconnectedCallback(){super.disconnectedCallback(),this.stateSub?.unsubscribe(),this.healthSub?.unsubscribe(),this.eventSub?.unsubscribe(),this.unsubscribeI18n()}},i.FormElement.FORM_HEALTH_EVENT="formHealth",i.FormElement.FORM_EVENT="formEvent",u([h.provide({context:
|
|
10
|
+
`}setData(t){this.context.store.dispatch({type:"SET_DATA",payload:{data:t}})}setMeta(t){this.context.store.dispatch({type:"SET_META",payload:{meta:t}})}disconnectedCallback(){super.disconnectedCallback(),this.stateSub?.unsubscribe(),this.healthSub?.unsubscribe(),this.eventSub?.unsubscribe(),this.unsubscribeI18n()}},i.FormElement.FORM_HEALTH_EVENT="formHealth",i.FormElement.FORM_EVENT="formEvent",u([h.provide({context:g})],i.FormElement.prototype,"context",2),u([p.property({attribute:!1})],i.FormElement.prototype,"config",2),u([p.property({attribute:!1})],i.FormElement.prototype,"validators",2),u([p.property({type:String})],i.FormElement.prototype,"autocomplete",2),u([p.state()],i.FormElement.prototype,"direction",2),i.FormElement=u([p.customElement("gui-core-form")],i.FormElement),i.ActionWidgetAdapter=$,i.BaseWidgetAdapter=m,i.DisplayWidgetAdapter=T,i.InputWidgetAdapter=C,i.LayoutWidgetAdapter=I,i.LitFormContext=E,i.actionContext=D,i.displayWidgetContext=v,i.formContext=g,i.inputContext=w,i.layoutContext=W,i.repeaterIndexesContext=y,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { ActionWidget, ActionWidgetTemplateData } from '@golemui/core';
|
|
1
2
|
import { BaseWidgetAdapter } from './base-widget.adapter';
|
|
2
|
-
import * as Core from '@golemui/core';
|
|
3
3
|
export declare const actionContext: {
|
|
4
4
|
__context__: ActionWidgetAdapter<any>;
|
|
5
5
|
};
|
|
6
|
-
export declare class ActionWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<
|
|
7
|
-
templateData:
|
|
8
|
-
init(widget:
|
|
6
|
+
export declare class ActionWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<ActionWidget> {
|
|
7
|
+
templateData: ActionWidgetTemplateData & ExtraProps;
|
|
8
|
+
init(widget: ActionWidget): void;
|
|
9
9
|
click(): void;
|
|
10
10
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FormWidget } from '@golemui/core';
|
|
2
|
+
import { WithWidget } from '@golemui/core/internals';
|
|
2
3
|
import { Subject } from 'rxjs';
|
|
3
4
|
import { LitFormContext } from '../context/form.context';
|
|
4
|
-
|
|
5
|
-
export declare abstract class BaseWidgetAdapter<F extends Core.FormWidget> {
|
|
5
|
+
export declare abstract class BaseWidgetAdapter<F extends FormWidget> {
|
|
6
6
|
context: LitFormContext<WithWidget>;
|
|
7
7
|
templateData: any;
|
|
8
8
|
protected destroy$: Subject<void>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { DisplayWidget, DisplayWidgetTemplateData } from '@golemui/core';
|
|
1
2
|
import { BaseWidgetAdapter } from './base-widget.adapter';
|
|
2
|
-
import * as Core from '@golemui/core';
|
|
3
3
|
export declare const displayWidgetContext: {
|
|
4
4
|
__context__: DisplayWidgetAdapter<any>;
|
|
5
5
|
};
|
|
6
|
-
export declare class DisplayWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<
|
|
7
|
-
templateData:
|
|
8
|
-
init(widget:
|
|
6
|
+
export declare class DisplayWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<DisplayWidget> {
|
|
7
|
+
templateData: DisplayWidgetTemplateData & ExtraProps;
|
|
8
|
+
init(widget: DisplayWidget): void;
|
|
9
9
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
+
import { ControlTemplateData, InputWidget, ItemRenderItemData } from '@golemui/core';
|
|
1
2
|
import { LitItemRenderer } from '../components/item-renderers/item-renderer';
|
|
2
3
|
import { BaseWidgetAdapter } from './base-widget.adapter';
|
|
3
|
-
import * as Core from '@golemui/core';
|
|
4
4
|
export declare const inputContext: {
|
|
5
5
|
__context__: InputWidgetAdapter<any, any>;
|
|
6
6
|
};
|
|
7
|
-
export declare class InputWidgetAdapter<T, ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<
|
|
8
|
-
templateData:
|
|
9
|
-
init(widget:
|
|
7
|
+
export declare class InputWidgetAdapter<T, ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<InputWidget<T>> {
|
|
8
|
+
templateData: ControlTemplateData<T> & ExtraProps;
|
|
9
|
+
init(widget: InputWidget<T>): void;
|
|
10
10
|
valueChanged<T>(value: T): void;
|
|
11
11
|
filterChanged<T>(value: T): void;
|
|
12
12
|
injectValidationIssues(issues: string[] | null): void;
|
|
13
13
|
/**
|
|
14
14
|
* This is a helper to get the item renderer from the context
|
|
15
15
|
*/
|
|
16
|
-
getItemRenderer<T extends
|
|
16
|
+
getItemRenderer<T extends ItemRenderItemData>(itemRendererKey: string | undefined, defaultItemRenderer: LitItemRenderer<T>): LitItemRenderer<T>;
|
|
17
17
|
onBlur(): void;
|
|
18
18
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { LayoutTemplateData, LayoutWidget } from '@golemui/core';
|
|
1
2
|
import { BaseWidgetAdapter } from './base-widget.adapter';
|
|
2
|
-
import * as Core from '@golemui/core';
|
|
3
3
|
export declare const layoutContext: {
|
|
4
4
|
__context__: LayoutWidgetAdapter<any>;
|
|
5
5
|
};
|
|
6
|
-
export declare class LayoutWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<
|
|
7
|
-
templateData:
|
|
8
|
-
init(widget:
|
|
6
|
+
export declare class LayoutWidgetAdapter<ExtraProps extends Record<string, any>> extends BaseWidgetAdapter<LayoutWidget> {
|
|
7
|
+
templateData: LayoutTemplateData & ExtraProps;
|
|
8
|
+
init(widget: LayoutWidget): void;
|
|
9
9
|
change<T>(detail?: T): void;
|
|
10
10
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { FormInitConfig,
|
|
1
|
+
import { FormInitConfig, ValidatorFn } from '@golemui/core';
|
|
2
|
+
import { WithWidget } from '@golemui/core/internals';
|
|
2
3
|
import { LitElement } from 'lit';
|
|
3
4
|
import { LitFormContext } from '../../context/form.context';
|
|
4
|
-
import * as Core from '@golemui/core';
|
|
5
5
|
export declare class FormElement extends LitElement {
|
|
6
|
-
context: LitFormContext<
|
|
6
|
+
context: LitFormContext<WithWidget>;
|
|
7
7
|
config: FormInitConfig<WithWidget>;
|
|
8
|
-
validators:
|
|
8
|
+
validators: ValidatorFn<any>;
|
|
9
9
|
autocomplete: string | undefined;
|
|
10
10
|
direction: 'ltr' | 'rtl';
|
|
11
11
|
private formState;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
+
import { ValidateOn } from '@golemui/core';
|
|
1
2
|
import { ComplexAttributeConverter } from 'lit';
|
|
2
|
-
|
|
3
|
-
export declare const ValidateOnConverter: ComplexAttributeConverter<Core.ValidateOn | undefined>;
|
|
3
|
+
export declare const ValidateOnConverter: ComplexAttributeConverter<ValidateOn | undefined>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { ItemRenderContext, ItemRenderItemData } from '@golemui/core';
|
|
1
2
|
import { TemplateResult } from 'lit';
|
|
2
|
-
import * as Core from '@golemui/core';
|
|
3
3
|
/**
|
|
4
4
|
* The Lit-specific Core.ItemRenderer type.
|
|
5
5
|
* @template T The type of the data item.
|
|
6
6
|
*/
|
|
7
|
-
export type LitItemRenderer<T extends
|
|
7
|
+
export type LitItemRenderer<T extends ItemRenderItemData> = (ctx: ItemRenderContext<T>) => TemplateResult;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FormContext, WithWidget } from '@golemui/core';
|
|
2
2
|
export declare const formContext: {
|
|
3
3
|
__context__: LitFormContext<any>;
|
|
4
4
|
};
|
|
5
|
-
export declare class LitFormContext<T extends
|
|
5
|
+
export declare class LitFormContext<T extends WithWidget> extends FormContext<T> {
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@golemui/lit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.umd.cjs",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"*.md"
|
|
21
21
|
],
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"@golemui/core": "0.
|
|
23
|
+
"@golemui/core": "0.13.1",
|
|
24
24
|
"@lit/context": "^1.1.6",
|
|
25
25
|
"lit": "^3.3.1",
|
|
26
26
|
"rxjs": "^7.8.0"
|