declarative-forms 2.0.1 → 2.1.0
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/README.md +148 -149
- package/dist/index.cjs +83 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +66 -1
- package/dist/index.d.ts +66 -1
- package/dist/index.js +83 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/CHANGELOG.md +0 -148
package/dist/index.d.cts
CHANGED
|
@@ -507,6 +507,16 @@ declare abstract class Field<D extends BaseFieldDescriptor = FieldDescriptor> im
|
|
|
507
507
|
* resolved before being applied.
|
|
508
508
|
*/
|
|
509
509
|
applyDefaultValue(): Promise<void>;
|
|
510
|
+
/**
|
|
511
|
+
* Apply a plainly declared default value straight away.
|
|
512
|
+
*
|
|
513
|
+
* {@link applyDefaultValue} is awaited during initialisation, so a value it
|
|
514
|
+
* applies cannot be seen by the first layout pass. A default that is neither a
|
|
515
|
+
* function nor a promise needs no awaiting, so it is applied at build time and
|
|
516
|
+
* `isActive` predicates reading it are right from the first paint. The async
|
|
517
|
+
* pass runs afterwards regardless and simply sets the same value again.
|
|
518
|
+
*/
|
|
519
|
+
applyStaticDefaultValue(): void;
|
|
510
520
|
/**
|
|
511
521
|
* Hook for setup that cannot happen in {@link build} — loading select
|
|
512
522
|
* options, or a first render that needs the form context. May be synchronous.
|
|
@@ -671,6 +681,21 @@ declare class DeclarativeForm implements SubForm, StackableDialog {
|
|
|
671
681
|
constructor(options: DeclarativeFormOptions, internal?: InternalOptions);
|
|
672
682
|
private resolveButtons;
|
|
673
683
|
private buildFields;
|
|
684
|
+
/**
|
|
685
|
+
* Decide field visibility and build the tab strip synchronously, before the
|
|
686
|
+
* caller gets the form back.
|
|
687
|
+
*
|
|
688
|
+
* {@link initialize} is async — it awaits option loads and default values —
|
|
689
|
+
* but `openInModal()` normally runs in the same tick as the constructor.
|
|
690
|
+
* Without this pass the dialog paints every field of every tab, then collapses
|
|
691
|
+
* to the active tab once that first async update lands, which is a visible
|
|
692
|
+
* layout shift as soon as any field loads its options over the network.
|
|
693
|
+
*
|
|
694
|
+
* Only visibility is decided here: no `onFormChange`, no `onFormUpdate`, and
|
|
695
|
+
* the value model is left untouched, so the regular update cycle still sees
|
|
696
|
+
* the first real change and refreshes the buttons.
|
|
697
|
+
*/
|
|
698
|
+
private applyInitialLayout;
|
|
674
699
|
private initialize;
|
|
675
700
|
/** Resolves once initial options and default values have been applied. */
|
|
676
701
|
whenReady(): Promise<void>;
|
|
@@ -761,6 +786,46 @@ declare class DeclarativeForm implements SubForm, StackableDialog {
|
|
|
761
786
|
resetTooltips(fieldNames: Iterable<string>): void;
|
|
762
787
|
}
|
|
763
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Everything {@link DeclarativeForm} accepts, minus the three things `ask`
|
|
791
|
+
* owns: the fields it is given, and the two callbacks it turns into a promise.
|
|
792
|
+
*/
|
|
793
|
+
interface AskOptions extends Omit<DeclarativeFormOptions, 'fields' | 'onConfirm' | 'onCancel'> {
|
|
794
|
+
/** Class names for the dialog chrome, as passed to `openInModal`. */
|
|
795
|
+
modal?: OpenInModalOptions;
|
|
796
|
+
/**
|
|
797
|
+
* Whether the dialog can be dismissed with Esc or the close button.
|
|
798
|
+
*
|
|
799
|
+
* Defaults to `true`. When `false` no close button is rendered and the
|
|
800
|
+
* promise can only settle with values — so only turn it off when a button of
|
|
801
|
+
* yours is guaranteed to close the dialog.
|
|
802
|
+
*/
|
|
803
|
+
dismissable?: boolean;
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Ask the user for a record, the way `prompt()` asks for a string.
|
|
807
|
+
*
|
|
808
|
+
* Opens the fields as a modal dialog and resolves with its values, or with
|
|
809
|
+
* `undefined` when the user dismisses it.
|
|
810
|
+
*
|
|
811
|
+
* ```ts
|
|
812
|
+
* const release = await ask([
|
|
813
|
+
* { name: 'title', displayName: 'Release title' },
|
|
814
|
+
* { name: 'notes', kind: 'textarea', displayName: 'What changed' },
|
|
815
|
+
* ]);
|
|
816
|
+
*
|
|
817
|
+
* if (release) publish(release);
|
|
818
|
+
* ```
|
|
819
|
+
*
|
|
820
|
+
* With custom {@link AskOptions.buttons | buttons}, the promise resolves when
|
|
821
|
+
* any button that closes the dialog has run its action; a `doNotCloseModal`
|
|
822
|
+
* button (a wizard's "Next") leaves it pending, as it leaves the dialog open.
|
|
823
|
+
*
|
|
824
|
+
* Use `new DeclarativeForm(…)` directly when you need the form object itself —
|
|
825
|
+
* to embed it in a page, subscribe to its values, or close it from elsewhere.
|
|
826
|
+
*/
|
|
827
|
+
declare function ask(fields: readonly FieldDescriptor[], options?: AskOptions): Promise<FormValues | undefined>;
|
|
828
|
+
|
|
764
829
|
/**
|
|
765
830
|
* A repeating list of sub-records, each edited in its own nested dialog.
|
|
766
831
|
*
|
|
@@ -1232,4 +1297,4 @@ declare class NativeTooltipProvider implements TooltipProvider {
|
|
|
1232
1297
|
*/
|
|
1233
1298
|
declare function deepEqual(a: unknown, b: unknown): boolean;
|
|
1234
1299
|
|
|
1235
|
-
export { ArrayField, type ArrayFieldDescriptor, type BaseFieldDescriptor, ButtonBar, type ButtonContext, type ButtonDescriptor, type ButtonMap, CardsField, type CardsFieldDescriptor, CheckboxField, type CheckboxFieldDescriptor, ComputedField, type ComputedFieldDescriptor, CustomField, type CustomFieldDescriptor, DL_SELECT_STYLES, DeclarativeForm, type DeclarativeFormOptions, DlOption, DlSelect, Field, type FieldConstructor, type FieldContext, type FieldDescriptor, type FieldHandle, type FieldKind, type FieldMessage, FieldRegistry, FileField, type FileFieldDescriptor, type FormChangeContext, type FormContext, FormModel, type FormValues, IdGenerator, MessageField, type MessageFieldDescriptor, ModalStack, ModalView, NativeTooltipProvider, type OpenInModalOptions, type OptionsErrorContext, type Reactive, type RenderContext, SafeHtml, SelectField, type SelectFieldDescriptor, type SelectOption, type StackableDialog, type SubForm, type SubFormOptions, TabBar, type TabSpec, TextAreaField, type TextAreaFieldDescriptor, TextField, type TextFieldDescriptor, type TextOrHtml, TooltipController, type TooltipDescriptor, type TooltipProvider, UpdateScheduler, deepEqual, defaultFieldRegistry, defineDlSelect, escapeHtml, globalModalStack, html, injectStyles, isSafeHtml };
|
|
1300
|
+
export { ArrayField, type ArrayFieldDescriptor, type AskOptions, type BaseFieldDescriptor, ButtonBar, type ButtonContext, type ButtonDescriptor, type ButtonMap, CardsField, type CardsFieldDescriptor, CheckboxField, type CheckboxFieldDescriptor, ComputedField, type ComputedFieldDescriptor, CustomField, type CustomFieldDescriptor, DL_SELECT_STYLES, DeclarativeForm, type DeclarativeFormOptions, DlOption, DlSelect, Field, type FieldConstructor, type FieldContext, type FieldDescriptor, type FieldHandle, type FieldKind, type FieldMessage, FieldRegistry, FileField, type FileFieldDescriptor, type FormChangeContext, type FormContext, FormModel, type FormValues, IdGenerator, MessageField, type MessageFieldDescriptor, ModalStack, ModalView, NativeTooltipProvider, type OpenInModalOptions, type OptionsErrorContext, type Reactive, type RenderContext, SafeHtml, SelectField, type SelectFieldDescriptor, type SelectOption, type StackableDialog, type SubForm, type SubFormOptions, TabBar, type TabSpec, TextAreaField, type TextAreaFieldDescriptor, TextField, type TextFieldDescriptor, type TextOrHtml, TooltipController, type TooltipDescriptor, type TooltipProvider, UpdateScheduler, ask, deepEqual, defaultFieldRegistry, defineDlSelect, escapeHtml, globalModalStack, html, injectStyles, isSafeHtml };
|
package/dist/index.d.ts
CHANGED
|
@@ -507,6 +507,16 @@ declare abstract class Field<D extends BaseFieldDescriptor = FieldDescriptor> im
|
|
|
507
507
|
* resolved before being applied.
|
|
508
508
|
*/
|
|
509
509
|
applyDefaultValue(): Promise<void>;
|
|
510
|
+
/**
|
|
511
|
+
* Apply a plainly declared default value straight away.
|
|
512
|
+
*
|
|
513
|
+
* {@link applyDefaultValue} is awaited during initialisation, so a value it
|
|
514
|
+
* applies cannot be seen by the first layout pass. A default that is neither a
|
|
515
|
+
* function nor a promise needs no awaiting, so it is applied at build time and
|
|
516
|
+
* `isActive` predicates reading it are right from the first paint. The async
|
|
517
|
+
* pass runs afterwards regardless and simply sets the same value again.
|
|
518
|
+
*/
|
|
519
|
+
applyStaticDefaultValue(): void;
|
|
510
520
|
/**
|
|
511
521
|
* Hook for setup that cannot happen in {@link build} — loading select
|
|
512
522
|
* options, or a first render that needs the form context. May be synchronous.
|
|
@@ -671,6 +681,21 @@ declare class DeclarativeForm implements SubForm, StackableDialog {
|
|
|
671
681
|
constructor(options: DeclarativeFormOptions, internal?: InternalOptions);
|
|
672
682
|
private resolveButtons;
|
|
673
683
|
private buildFields;
|
|
684
|
+
/**
|
|
685
|
+
* Decide field visibility and build the tab strip synchronously, before the
|
|
686
|
+
* caller gets the form back.
|
|
687
|
+
*
|
|
688
|
+
* {@link initialize} is async — it awaits option loads and default values —
|
|
689
|
+
* but `openInModal()` normally runs in the same tick as the constructor.
|
|
690
|
+
* Without this pass the dialog paints every field of every tab, then collapses
|
|
691
|
+
* to the active tab once that first async update lands, which is a visible
|
|
692
|
+
* layout shift as soon as any field loads its options over the network.
|
|
693
|
+
*
|
|
694
|
+
* Only visibility is decided here: no `onFormChange`, no `onFormUpdate`, and
|
|
695
|
+
* the value model is left untouched, so the regular update cycle still sees
|
|
696
|
+
* the first real change and refreshes the buttons.
|
|
697
|
+
*/
|
|
698
|
+
private applyInitialLayout;
|
|
674
699
|
private initialize;
|
|
675
700
|
/** Resolves once initial options and default values have been applied. */
|
|
676
701
|
whenReady(): Promise<void>;
|
|
@@ -761,6 +786,46 @@ declare class DeclarativeForm implements SubForm, StackableDialog {
|
|
|
761
786
|
resetTooltips(fieldNames: Iterable<string>): void;
|
|
762
787
|
}
|
|
763
788
|
|
|
789
|
+
/**
|
|
790
|
+
* Everything {@link DeclarativeForm} accepts, minus the three things `ask`
|
|
791
|
+
* owns: the fields it is given, and the two callbacks it turns into a promise.
|
|
792
|
+
*/
|
|
793
|
+
interface AskOptions extends Omit<DeclarativeFormOptions, 'fields' | 'onConfirm' | 'onCancel'> {
|
|
794
|
+
/** Class names for the dialog chrome, as passed to `openInModal`. */
|
|
795
|
+
modal?: OpenInModalOptions;
|
|
796
|
+
/**
|
|
797
|
+
* Whether the dialog can be dismissed with Esc or the close button.
|
|
798
|
+
*
|
|
799
|
+
* Defaults to `true`. When `false` no close button is rendered and the
|
|
800
|
+
* promise can only settle with values — so only turn it off when a button of
|
|
801
|
+
* yours is guaranteed to close the dialog.
|
|
802
|
+
*/
|
|
803
|
+
dismissable?: boolean;
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Ask the user for a record, the way `prompt()` asks for a string.
|
|
807
|
+
*
|
|
808
|
+
* Opens the fields as a modal dialog and resolves with its values, or with
|
|
809
|
+
* `undefined` when the user dismisses it.
|
|
810
|
+
*
|
|
811
|
+
* ```ts
|
|
812
|
+
* const release = await ask([
|
|
813
|
+
* { name: 'title', displayName: 'Release title' },
|
|
814
|
+
* { name: 'notes', kind: 'textarea', displayName: 'What changed' },
|
|
815
|
+
* ]);
|
|
816
|
+
*
|
|
817
|
+
* if (release) publish(release);
|
|
818
|
+
* ```
|
|
819
|
+
*
|
|
820
|
+
* With custom {@link AskOptions.buttons | buttons}, the promise resolves when
|
|
821
|
+
* any button that closes the dialog has run its action; a `doNotCloseModal`
|
|
822
|
+
* button (a wizard's "Next") leaves it pending, as it leaves the dialog open.
|
|
823
|
+
*
|
|
824
|
+
* Use `new DeclarativeForm(…)` directly when you need the form object itself —
|
|
825
|
+
* to embed it in a page, subscribe to its values, or close it from elsewhere.
|
|
826
|
+
*/
|
|
827
|
+
declare function ask(fields: readonly FieldDescriptor[], options?: AskOptions): Promise<FormValues | undefined>;
|
|
828
|
+
|
|
764
829
|
/**
|
|
765
830
|
* A repeating list of sub-records, each edited in its own nested dialog.
|
|
766
831
|
*
|
|
@@ -1232,4 +1297,4 @@ declare class NativeTooltipProvider implements TooltipProvider {
|
|
|
1232
1297
|
*/
|
|
1233
1298
|
declare function deepEqual(a: unknown, b: unknown): boolean;
|
|
1234
1299
|
|
|
1235
|
-
export { ArrayField, type ArrayFieldDescriptor, type BaseFieldDescriptor, ButtonBar, type ButtonContext, type ButtonDescriptor, type ButtonMap, CardsField, type CardsFieldDescriptor, CheckboxField, type CheckboxFieldDescriptor, ComputedField, type ComputedFieldDescriptor, CustomField, type CustomFieldDescriptor, DL_SELECT_STYLES, DeclarativeForm, type DeclarativeFormOptions, DlOption, DlSelect, Field, type FieldConstructor, type FieldContext, type FieldDescriptor, type FieldHandle, type FieldKind, type FieldMessage, FieldRegistry, FileField, type FileFieldDescriptor, type FormChangeContext, type FormContext, FormModel, type FormValues, IdGenerator, MessageField, type MessageFieldDescriptor, ModalStack, ModalView, NativeTooltipProvider, type OpenInModalOptions, type OptionsErrorContext, type Reactive, type RenderContext, SafeHtml, SelectField, type SelectFieldDescriptor, type SelectOption, type StackableDialog, type SubForm, type SubFormOptions, TabBar, type TabSpec, TextAreaField, type TextAreaFieldDescriptor, TextField, type TextFieldDescriptor, type TextOrHtml, TooltipController, type TooltipDescriptor, type TooltipProvider, UpdateScheduler, deepEqual, defaultFieldRegistry, defineDlSelect, escapeHtml, globalModalStack, html, injectStyles, isSafeHtml };
|
|
1300
|
+
export { ArrayField, type ArrayFieldDescriptor, type AskOptions, type BaseFieldDescriptor, ButtonBar, type ButtonContext, type ButtonDescriptor, type ButtonMap, CardsField, type CardsFieldDescriptor, CheckboxField, type CheckboxFieldDescriptor, ComputedField, type ComputedFieldDescriptor, CustomField, type CustomFieldDescriptor, DL_SELECT_STYLES, DeclarativeForm, type DeclarativeFormOptions, DlOption, DlSelect, Field, type FieldConstructor, type FieldContext, type FieldDescriptor, type FieldHandle, type FieldKind, type FieldMessage, FieldRegistry, FileField, type FileFieldDescriptor, type FormChangeContext, type FormContext, FormModel, type FormValues, IdGenerator, MessageField, type MessageFieldDescriptor, ModalStack, ModalView, NativeTooltipProvider, type OpenInModalOptions, type OptionsErrorContext, type Reactive, type RenderContext, SafeHtml, SelectField, type SelectFieldDescriptor, type SelectOption, type StackableDialog, type SubForm, type SubFormOptions, TabBar, type TabSpec, TextAreaField, type TextAreaFieldDescriptor, TextField, type TextFieldDescriptor, type TextOrHtml, TooltipController, type TooltipDescriptor, type TooltipProvider, UpdateScheduler, ask, deepEqual, defaultFieldRegistry, defineDlSelect, escapeHtml, globalModalStack, html, injectStyles, isSafeHtml };
|
package/dist/index.js
CHANGED
|
@@ -193,6 +193,21 @@ var Field = class {
|
|
|
193
193
|
);
|
|
194
194
|
if (value !== void 0) this.setValue(value);
|
|
195
195
|
}
|
|
196
|
+
/**
|
|
197
|
+
* Apply a plainly declared default value straight away.
|
|
198
|
+
*
|
|
199
|
+
* {@link applyDefaultValue} is awaited during initialisation, so a value it
|
|
200
|
+
* applies cannot be seen by the first layout pass. A default that is neither a
|
|
201
|
+
* function nor a promise needs no awaiting, so it is applied at build time and
|
|
202
|
+
* `isActive` predicates reading it are right from the first paint. The async
|
|
203
|
+
* pass runs afterwards regardless and simply sets the same value again.
|
|
204
|
+
*/
|
|
205
|
+
applyStaticDefaultValue() {
|
|
206
|
+
const value = this.descriptor.defaultValue;
|
|
207
|
+
if (value === void 0 || typeof value === "function") return;
|
|
208
|
+
if (value instanceof Promise) return;
|
|
209
|
+
this.setValue(value);
|
|
210
|
+
}
|
|
196
211
|
/**
|
|
197
212
|
* Hook for setup that cannot happen in {@link build} — loading select
|
|
198
213
|
* options, or a first render that needs the form context. May be synchronous.
|
|
@@ -2104,6 +2119,7 @@ var DeclarativeForm = class _DeclarativeForm {
|
|
|
2104
2119
|
closeWith: (action) => this.close(action)
|
|
2105
2120
|
});
|
|
2106
2121
|
this.buildFields();
|
|
2122
|
+
this.applyInitialLayout();
|
|
2107
2123
|
this.ready = this.initialize();
|
|
2108
2124
|
}
|
|
2109
2125
|
// ------------------------------------------------------------------ setup
|
|
@@ -2125,12 +2141,40 @@ var DeclarativeForm = class _DeclarativeForm {
|
|
|
2125
2141
|
);
|
|
2126
2142
|
}
|
|
2127
2143
|
const field = this.registry.create(descriptor, context);
|
|
2144
|
+
field.applyStaticDefaultValue();
|
|
2128
2145
|
this.fieldList.push(field);
|
|
2129
2146
|
this.fieldsByName.set(descriptor.name, field);
|
|
2130
2147
|
this.tooltips.register(descriptor.name, field.tooltipMarker);
|
|
2131
2148
|
this.formElement.appendChild(field.wrapper);
|
|
2132
2149
|
}
|
|
2133
2150
|
}
|
|
2151
|
+
/**
|
|
2152
|
+
* Decide field visibility and build the tab strip synchronously, before the
|
|
2153
|
+
* caller gets the form back.
|
|
2154
|
+
*
|
|
2155
|
+
* {@link initialize} is async — it awaits option loads and default values —
|
|
2156
|
+
* but `openInModal()` normally runs in the same tick as the constructor.
|
|
2157
|
+
* Without this pass the dialog paints every field of every tab, then collapses
|
|
2158
|
+
* to the active tab once that first async update lands, which is a visible
|
|
2159
|
+
* layout shift as soon as any field loads its options over the network.
|
|
2160
|
+
*
|
|
2161
|
+
* Only visibility is decided here: no `onFormChange`, no `onFormUpdate`, and
|
|
2162
|
+
* the value model is left untouched, so the regular update cycle still sees
|
|
2163
|
+
* the first real change and refreshes the buttons.
|
|
2164
|
+
*/
|
|
2165
|
+
applyInitialLayout() {
|
|
2166
|
+
const values = this.getValues();
|
|
2167
|
+
const activeTabs = /* @__PURE__ */ new Set();
|
|
2168
|
+
for (const field of this.fieldList) {
|
|
2169
|
+
const active = field.descriptor.isActive?.({
|
|
2170
|
+
...this.contextFor(field.descriptor),
|
|
2171
|
+
data: values
|
|
2172
|
+
}) ?? true;
|
|
2173
|
+
field.setActive(active);
|
|
2174
|
+
if (active) for (const tab of field.tabs()) activeTabs.add(tab);
|
|
2175
|
+
}
|
|
2176
|
+
this.renderTabs(activeTabs);
|
|
2177
|
+
}
|
|
2134
2178
|
async initialize() {
|
|
2135
2179
|
await Promise.allSettled(
|
|
2136
2180
|
this.fieldList.map(
|
|
@@ -2468,6 +2512,44 @@ var DeclarativeForm = class _DeclarativeForm {
|
|
|
2468
2512
|
}
|
|
2469
2513
|
};
|
|
2470
2514
|
|
|
2471
|
-
|
|
2515
|
+
// src/core/ask.ts
|
|
2516
|
+
function ask(fields, options = {}) {
|
|
2517
|
+
return askWith(DeclarativeForm, fields, options);
|
|
2518
|
+
}
|
|
2519
|
+
function askWith(FormClass, fields, options = {}) {
|
|
2520
|
+
const { modal, dismissable = true, buttons, ...formOptions } = options;
|
|
2521
|
+
return new Promise((resolve) => {
|
|
2522
|
+
let settled = false;
|
|
2523
|
+
const settle = (values) => {
|
|
2524
|
+
if (settled) return;
|
|
2525
|
+
settled = true;
|
|
2526
|
+
setTimeout(() => resolve(values), 0);
|
|
2527
|
+
};
|
|
2528
|
+
new FormClass({
|
|
2529
|
+
...formOptions,
|
|
2530
|
+
fields,
|
|
2531
|
+
buttons: buttons && settleOnClose(buttons, settle),
|
|
2532
|
+
onConfirm: (values) => settle(values),
|
|
2533
|
+
onCancel: dismissable ? () => settle(void 0) : void 0
|
|
2534
|
+
}).openInModal(modal);
|
|
2535
|
+
});
|
|
2536
|
+
}
|
|
2537
|
+
function settleOnClose(buttons, settle) {
|
|
2538
|
+
return Object.fromEntries(
|
|
2539
|
+
Object.entries(buttons).map(([label, descriptor]) => [
|
|
2540
|
+
label,
|
|
2541
|
+
descriptor.doNotCloseModal ? descriptor : {
|
|
2542
|
+
...descriptor,
|
|
2543
|
+
action: async (values) => {
|
|
2544
|
+
const result = await descriptor.action?.(values);
|
|
2545
|
+
settle(values);
|
|
2546
|
+
return result;
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
])
|
|
2550
|
+
);
|
|
2551
|
+
}
|
|
2552
|
+
|
|
2553
|
+
export { ArrayField, ButtonBar, CardsField, CheckboxField, ComputedField, CustomField, DL_SELECT_STYLES, DeclarativeForm, DlOption, DlSelect, Field, FieldRegistry, FileField, FormModel, IdGenerator, MessageField, ModalStack, ModalView, NativeTooltipProvider, SafeHtml, SelectField, TabBar, TextAreaField, TextField, TooltipController, UpdateScheduler, ask, deepEqual, defaultFieldRegistry, defineDlSelect, escapeHtml, globalModalStack, html, injectStyles, isSafeHtml };
|
|
2472
2554
|
//# sourceMappingURL=index.js.map
|
|
2473
2555
|
//# sourceMappingURL=index.js.map
|