@businessdash/sdk 0.9.60
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/LICENSE +21 -0
- package/README.md +899 -0
- package/dist/adapters-revalidate.d.ts +44 -0
- package/dist/adapters-revalidate.d.ts.map +1 -0
- package/dist/adapters-revalidate.js +68 -0
- package/dist/adapters-revalidate.js.map +1 -0
- package/dist/alpha.d.ts +21 -0
- package/dist/alpha.d.ts.map +1 -0
- package/dist/alpha.js +21 -0
- package/dist/alpha.js.map +1 -0
- package/dist/analytics-core.d.ts +34 -0
- package/dist/analytics-core.d.ts.map +1 -0
- package/dist/analytics-core.js +138 -0
- package/dist/analytics-core.js.map +1 -0
- package/dist/analytics-server.d.ts +54 -0
- package/dist/analytics-server.d.ts.map +1 -0
- package/dist/analytics-server.js +78 -0
- package/dist/analytics-server.js.map +1 -0
- package/dist/attribution-logo.d.ts +2 -0
- package/dist/attribution-logo.d.ts.map +1 -0
- package/dist/attribution-logo.js +5 -0
- package/dist/attribution-logo.js.map +1 -0
- package/dist/auth-handler.d.ts +92 -0
- package/dist/auth-handler.d.ts.map +1 -0
- package/dist/auth-handler.js +277 -0
- package/dist/auth-handler.js.map +1 -0
- package/dist/biab-forms.css +484 -0
- package/dist/cli.d.ts +46 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1824 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +1681 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2845 -0
- package/dist/client.js.map +1 -0
- package/dist/collections.d.ts +13 -0
- package/dist/collections.d.ts.map +1 -0
- package/dist/collections.js +13 -0
- package/dist/collections.js.map +1 -0
- package/dist/contracts.d.ts +14609 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2428 -0
- package/dist/contracts.js.map +1 -0
- package/dist/data-model-schema.d.ts +962 -0
- package/dist/data-model-schema.d.ts.map +1 -0
- package/dist/data-model-schema.js +2295 -0
- package/dist/data-model-schema.js.map +1 -0
- package/dist/distribution.d.ts +38 -0
- package/dist/distribution.d.ts.map +1 -0
- package/dist/distribution.js +61 -0
- package/dist/distribution.js.map +1 -0
- package/dist/element.d.ts +121 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +276 -0
- package/dist/element.js.map +1 -0
- package/dist/enums.d.ts +25 -0
- package/dist/enums.d.ts.map +1 -0
- package/dist/enums.js +38 -0
- package/dist/enums.js.map +1 -0
- package/dist/errors.d.ts +195 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +188 -0
- package/dist/errors.js.map +1 -0
- package/dist/forms-core/autocomplete.d.ts +37 -0
- package/dist/forms-core/autocomplete.d.ts.map +1 -0
- package/dist/forms-core/autocomplete.js +82 -0
- package/dist/forms-core/autocomplete.js.map +1 -0
- package/dist/forms-core/business-function.d.ts +61 -0
- package/dist/forms-core/business-function.d.ts.map +1 -0
- package/dist/forms-core/business-function.js +149 -0
- package/dist/forms-core/business-function.js.map +1 -0
- package/dist/forms-core/calculation.d.ts +72 -0
- package/dist/forms-core/calculation.d.ts.map +1 -0
- package/dist/forms-core/calculation.js +103 -0
- package/dist/forms-core/calculation.js.map +1 -0
- package/dist/forms-core/controller.d.ts +249 -0
- package/dist/forms-core/controller.d.ts.map +1 -0
- package/dist/forms-core/controller.js +590 -0
- package/dist/forms-core/controller.js.map +1 -0
- package/dist/forms-core/elements.d.ts +44 -0
- package/dist/forms-core/elements.d.ts.map +1 -0
- package/dist/forms-core/elements.js +68 -0
- package/dist/forms-core/elements.js.map +1 -0
- package/dist/forms-core/email-domains.d.ts +10 -0
- package/dist/forms-core/email-domains.d.ts.map +1 -0
- package/dist/forms-core/email-domains.js +69 -0
- package/dist/forms-core/email-domains.js.map +1 -0
- package/dist/forms-core/file-rules.d.ts +51 -0
- package/dist/forms-core/file-rules.d.ts.map +1 -0
- package/dist/forms-core/file-rules.js +105 -0
- package/dist/forms-core/file-rules.js.map +1 -0
- package/dist/forms-core/formula.d.ts +114 -0
- package/dist/forms-core/formula.d.ts.map +1 -0
- package/dist/forms-core/formula.js +1170 -0
- package/dist/forms-core/formula.js.map +1 -0
- package/dist/forms-core/index.d.ts +24 -0
- package/dist/forms-core/index.d.ts.map +1 -0
- package/dist/forms-core/index.js +28 -0
- package/dist/forms-core/index.js.map +1 -0
- package/dist/forms-core/units.d.ts +49 -0
- package/dist/forms-core/units.d.ts.map +1 -0
- package/dist/forms-core/units.js +255 -0
- package/dist/forms-core/units.js.map +1 -0
- package/dist/forms-core/us-states.d.ts +14 -0
- package/dist/forms-core/us-states.d.ts.map +1 -0
- package/dist/forms-core/us-states.js +66 -0
- package/dist/forms-core/us-states.js.map +1 -0
- package/dist/forms-core/validation.d.ts +266 -0
- package/dist/forms-core/validation.d.ts.map +1 -0
- package/dist/forms-core/validation.js +850 -0
- package/dist/forms-core/validation.js.map +1 -0
- package/dist/forms.d.ts +19 -0
- package/dist/forms.d.ts.map +1 -0
- package/dist/forms.js +29 -0
- package/dist/forms.js.map +1 -0
- package/dist/gallery-types.d.ts +32 -0
- package/dist/gallery-types.d.ts.map +1 -0
- package/dist/gallery-types.js +2 -0
- package/dist/gallery-types.js.map +1 -0
- package/dist/graphql.d.ts +97 -0
- package/dist/graphql.d.ts.map +1 -0
- package/dist/graphql.js +212 -0
- package/dist/graphql.js.map +1 -0
- package/dist/index.cjs +19448 -0
- package/dist/index.d.cts +19 -0
- package/dist/index.d.mts +19 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/marketing-schema.d.ts +216 -0
- package/dist/marketing-schema.d.ts.map +1 -0
- package/dist/marketing-schema.js +200 -0
- package/dist/marketing-schema.js.map +1 -0
- package/dist/mcp.d.ts +42 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +87 -0
- package/dist/mcp.js.map +1 -0
- package/dist/native.d.ts +45 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +43 -0
- package/dist/native.js.map +1 -0
- package/dist/next-revalidate.d.ts +43 -0
- package/dist/next-revalidate.d.ts.map +1 -0
- package/dist/next-revalidate.js +84 -0
- package/dist/next-revalidate.js.map +1 -0
- package/dist/parallel-pages.d.ts +102 -0
- package/dist/parallel-pages.d.ts.map +1 -0
- package/dist/parallel-pages.js +108 -0
- package/dist/parallel-pages.js.map +1 -0
- package/dist/payment-icons.d.ts +66 -0
- package/dist/payment-icons.d.ts.map +1 -0
- package/dist/payment-icons.js +160 -0
- package/dist/payment-icons.js.map +1 -0
- package/dist/proxy.d.ts +67 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +97 -0
- package/dist/proxy.js.map +1 -0
- package/dist/react-analytics.d.ts +39 -0
- package/dist/react-analytics.d.ts.map +1 -0
- package/dist/react-analytics.js +59 -0
- package/dist/react-analytics.js.map +1 -0
- package/dist/react-attribution.d.ts +99 -0
- package/dist/react-attribution.d.ts.map +1 -0
- package/dist/react-attribution.js +52 -0
- package/dist/react-attribution.js.map +1 -0
- package/dist/react-marketing.d.ts +181 -0
- package/dist/react-marketing.d.ts.map +1 -0
- package/dist/react-marketing.js +215 -0
- package/dist/react-marketing.js.map +1 -0
- package/dist/react.d.ts +727 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +2418 -0
- package/dist/react.js.map +1 -0
- package/dist/reserved-paths.d.ts +24 -0
- package/dist/reserved-paths.d.ts.map +1 -0
- package/dist/reserved-paths.js +60 -0
- package/dist/reserved-paths.js.map +1 -0
- package/dist/revalidate-verify.d.ts +30 -0
- package/dist/revalidate-verify.d.ts.map +1 -0
- package/dist/revalidate-verify.js +74 -0
- package/dist/revalidate-verify.js.map +1 -0
- package/dist/sdk.d.ts +678 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +801 -0
- package/dist/sdk.js.map +1 -0
- package/dist/seo.d.ts +218 -0
- package/dist/seo.d.ts.map +1 -0
- package/dist/seo.js +309 -0
- package/dist/seo.js.map +1 -0
- package/dist/socials.d.ts +47 -0
- package/dist/socials.d.ts.map +1 -0
- package/dist/socials.js +172 -0
- package/dist/socials.js.map +1 -0
- package/dist/static.d.ts +14 -0
- package/dist/static.d.ts.map +1 -0
- package/dist/static.js +14 -0
- package/dist/static.js.map +1 -0
- package/dist/url-pattern.d.ts +47 -0
- package/dist/url-pattern.d.ts.map +1 -0
- package/dist/url-pattern.js +124 -0
- package/dist/url-pattern.js.map +1 -0
- package/dist/vanilla.d.ts +77 -0
- package/dist/vanilla.d.ts.map +1 -0
- package/dist/vanilla.js +903 -0
- package/dist/vanilla.js.map +1 -0
- package/openapi.json +13779 -0
- package/package.json +204 -0
- package/src/adapters-revalidate.ts +88 -0
- package/src/alpha.ts +89 -0
- package/src/analytics-core.ts +175 -0
- package/src/analytics-server.ts +99 -0
- package/src/angular/biab-form.component.ts +1443 -0
- package/src/angular/index.ts +26 -0
- package/src/attribution-logo.ts +5 -0
- package/src/auth-handler.ts +352 -0
- package/src/cli.ts +2517 -0
- package/src/client.ts +3578 -0
- package/src/collections.ts +101 -0
- package/src/contracts.ts +3390 -0
- package/src/data-model-schema.ts +4042 -0
- package/src/distribution.ts +73 -0
- package/src/element.ts +321 -0
- package/src/enums.ts +65 -0
- package/src/errors.ts +338 -0
- package/src/forms-core/autocomplete.ts +97 -0
- package/src/forms-core/business-function.ts +209 -0
- package/src/forms-core/calculation.ts +167 -0
- package/src/forms-core/controller.ts +922 -0
- package/src/forms-core/elements.ts +86 -0
- package/src/forms-core/email-domains.ts +68 -0
- package/src/forms-core/file-rules.ts +123 -0
- package/src/forms-core/formula.ts +1339 -0
- package/src/forms-core/index.ts +122 -0
- package/src/forms-core/units.ts +308 -0
- package/src/forms-core/us-states.ts +68 -0
- package/src/forms-core/validation.ts +1037 -0
- package/src/forms.ts +63 -0
- package/src/gallery-types.ts +31 -0
- package/src/graphql.ts +295 -0
- package/src/index.ts +505 -0
- package/src/marketing-schema.ts +395 -0
- package/src/mcp.ts +108 -0
- package/src/native.ts +73 -0
- package/src/next-revalidate.ts +124 -0
- package/src/parallel-pages.ts +192 -0
- package/src/payment-icons.ts +205 -0
- package/src/proxy.ts +173 -0
- package/src/qwik.tsx +1234 -0
- package/src/react-analytics.tsx +76 -0
- package/src/react-attribution.tsx +192 -0
- package/src/react-marketing.tsx +338 -0
- package/src/react.tsx +5495 -0
- package/src/reserved-paths.ts +65 -0
- package/src/revalidate-verify.ts +98 -0
- package/src/sdk.ts +1671 -0
- package/src/seo.ts +488 -0
- package/src/socials.ts +230 -0
- package/src/solid.tsx +1466 -0
- package/src/static.ts +21 -0
- package/src/styles/biab-forms.css +484 -0
- package/src/svelte/BiabForm.svelte +1069 -0
- package/src/svelte/context.ts +57 -0
- package/src/svelte/index.ts +79 -0
- package/src/url-pattern.ts +153 -0
- package/src/vanilla.ts +1290 -0
- package/src/vue/BiabForm.vue +1538 -0
- package/src/vue/index.ts +119 -0
package/dist/element.js
ADDED
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@businessdash/sdk/element` — the `<biab-form>` custom element binding.
|
|
3
|
+
*
|
|
4
|
+
* A drop-in web component that renders a BIAB form anywhere a tag can go:
|
|
5
|
+
*
|
|
6
|
+
* <biab-form slug="contact" submit-label="Send"></biab-form>
|
|
7
|
+
*
|
|
8
|
+
* It is a thin custom-element shell around the framework-free `mountBiabForm`
|
|
9
|
+
* (`@businessdash/sdk/vanilla`): the element owns the lifecycle (connect / attribute
|
|
10
|
+
* changes / disconnect) and `mountBiabForm` owns all rendering + the headless
|
|
11
|
+
* controller. It renders into LIGHT DOM (no shadow root) so the consumer's
|
|
12
|
+
* `biab-*` CSS cascades straight in — identical to every other binding.
|
|
13
|
+
*
|
|
14
|
+
* ── Passing the SDK client ───────────────────────────────────────────────────
|
|
15
|
+
* A `BiabClient` can't travel through an HTML attribute, so there are three ways
|
|
16
|
+
* to give the element one (checked in this order):
|
|
17
|
+
* 1. The `.client` JS property: el.client = createBiabClient(...)
|
|
18
|
+
* 2. A DI default set once at startup: setBiabFormClient(createBiabClient(...))
|
|
19
|
+
* (the "Provider equivalent" — every <biab-form> on the page uses it)
|
|
20
|
+
* 3. A pre-fetched schema (SSR), via the `.schema` property — no client needed
|
|
21
|
+
* to render; a client is still required to actually submit.
|
|
22
|
+
*
|
|
23
|
+
* ── Attributes (reflected, kebab-case) ───────────────────────────────────────
|
|
24
|
+
* slug — form slug to load via the client
|
|
25
|
+
* submit-label — label for the final submit button (default "Submit")
|
|
26
|
+
* dry-run — present ⇒ validate server-side but store nothing
|
|
27
|
+
* class — extra class(es) added to the inner `.biab-form`
|
|
28
|
+
* auto-complete — global HTML autofill switch: "false" ⇒ off, "true" or
|
|
29
|
+
* absent ⇒ infer tokens per field
|
|
30
|
+
* field-auto-complete — JSON object of per-field overrides keyed by field id
|
|
31
|
+
* ({ "<id>": token | true | false })
|
|
32
|
+
*
|
|
33
|
+
* ── Properties (JS, richer types) ────────────────────────────────────────────
|
|
34
|
+
* .client : BiabClient — the SDK client
|
|
35
|
+
* .schema : FormSchema — pre-fetched schema (SSR / adopt)
|
|
36
|
+
* .submitOptions : FormSubmitOptions
|
|
37
|
+
* .autoComplete : boolean | undefined — mirrors `auto-complete`
|
|
38
|
+
* .fieldAutoComplete : Record<string, string | boolean> | undefined
|
|
39
|
+
*
|
|
40
|
+
* ── Events (bubbling, composed) ──────────────────────────────────────────────
|
|
41
|
+
* biab-form-success — detail: the ok FormSubmitResult
|
|
42
|
+
* biab-form-error — detail: the failed FormSubmitResult
|
|
43
|
+
* biab-form-submit — detail: { data } working values at submit time
|
|
44
|
+
*
|
|
45
|
+
* Compiled to dist (plain TS, no JSX). Importing this module registers the
|
|
46
|
+
* element once (idempotent).
|
|
47
|
+
*/
|
|
48
|
+
import { mountBiabForm, } from "./vanilla.js";
|
|
49
|
+
// Re-export the core + the vanilla mount so this subpath is a complete entry.
|
|
50
|
+
export * from "./forms-core/index.js";
|
|
51
|
+
export { mountBiabForm } from "./vanilla.js";
|
|
52
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
// Provider equivalent — a process-wide default client for every <biab-form>.
|
|
54
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
let defaultClient = null;
|
|
56
|
+
/**
|
|
57
|
+
* Set (or clear) the default SDK client used by every `<biab-form>` that doesn't
|
|
58
|
+
* have its own `.client` property. The web-component analogue of a React
|
|
59
|
+
* `<BiabFormProvider client={…}>`. Call once at startup:
|
|
60
|
+
*
|
|
61
|
+
* import { setBiabFormClient } from "@businessdash/sdk/element";
|
|
62
|
+
* setBiabFormClient(createBiabClient({ apiKey, siteId, baseUrl }));
|
|
63
|
+
*/
|
|
64
|
+
export function setBiabFormClient(client) {
|
|
65
|
+
defaultClient = client;
|
|
66
|
+
}
|
|
67
|
+
/** Read the current default client (mostly for tests / introspection). */
|
|
68
|
+
export function getBiabFormClient() {
|
|
69
|
+
return defaultClient;
|
|
70
|
+
}
|
|
71
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
72
|
+
// The custom element.
|
|
73
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
74
|
+
export class BiabFormElement extends HTMLElement {
|
|
75
|
+
static get observedAttributes() {
|
|
76
|
+
return [
|
|
77
|
+
"slug",
|
|
78
|
+
"submit-label",
|
|
79
|
+
"dry-run",
|
|
80
|
+
"class",
|
|
81
|
+
"auto-complete",
|
|
82
|
+
"field-auto-complete",
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
/** The mounted instance (null until connected with enough config). */
|
|
86
|
+
instance = null;
|
|
87
|
+
/** Property-only backing fields (can't ride on attributes). */
|
|
88
|
+
_client;
|
|
89
|
+
_schema;
|
|
90
|
+
_submitOptions;
|
|
91
|
+
/** Per-field autofill overrides set via the JS property; the
|
|
92
|
+
* `field-auto-complete` JSON attribute is parsed at mount as a fallback. */
|
|
93
|
+
_fieldAutoComplete;
|
|
94
|
+
// ── Property accessors ─────────────────────────────────────────────────────
|
|
95
|
+
get client() {
|
|
96
|
+
return this._client;
|
|
97
|
+
}
|
|
98
|
+
set client(value) {
|
|
99
|
+
this._client = value;
|
|
100
|
+
this.remount();
|
|
101
|
+
}
|
|
102
|
+
get schema() {
|
|
103
|
+
return this._schema;
|
|
104
|
+
}
|
|
105
|
+
set schema(value) {
|
|
106
|
+
this._schema = value;
|
|
107
|
+
this.remount();
|
|
108
|
+
}
|
|
109
|
+
get submitOptions() {
|
|
110
|
+
return this._submitOptions;
|
|
111
|
+
}
|
|
112
|
+
set submitOptions(value) {
|
|
113
|
+
this._submitOptions = value;
|
|
114
|
+
this.remount();
|
|
115
|
+
}
|
|
116
|
+
get slug() {
|
|
117
|
+
return this.getAttribute("slug");
|
|
118
|
+
}
|
|
119
|
+
set slug(value) {
|
|
120
|
+
if (value == null)
|
|
121
|
+
this.removeAttribute("slug");
|
|
122
|
+
else
|
|
123
|
+
this.setAttribute("slug", value);
|
|
124
|
+
}
|
|
125
|
+
get submitLabel() {
|
|
126
|
+
return this.getAttribute("submit-label");
|
|
127
|
+
}
|
|
128
|
+
set submitLabel(value) {
|
|
129
|
+
if (value == null)
|
|
130
|
+
this.removeAttribute("submit-label");
|
|
131
|
+
else
|
|
132
|
+
this.setAttribute("submit-label", value);
|
|
133
|
+
}
|
|
134
|
+
get dryRun() {
|
|
135
|
+
return this.hasAttribute("dry-run");
|
|
136
|
+
}
|
|
137
|
+
set dryRun(value) {
|
|
138
|
+
if (value)
|
|
139
|
+
this.setAttribute("dry-run", "");
|
|
140
|
+
else
|
|
141
|
+
this.removeAttribute("dry-run");
|
|
142
|
+
}
|
|
143
|
+
/** Global autofill switch. `undefined` (attribute absent) infers tokens;
|
|
144
|
+
* `false` (`auto-complete="false"`) emits `autocomplete="off"` everywhere. */
|
|
145
|
+
get autoComplete() {
|
|
146
|
+
const attr = this.getAttribute("auto-complete");
|
|
147
|
+
if (attr == null)
|
|
148
|
+
return undefined;
|
|
149
|
+
return attr !== "false";
|
|
150
|
+
}
|
|
151
|
+
set autoComplete(value) {
|
|
152
|
+
if (value == null)
|
|
153
|
+
this.removeAttribute("auto-complete");
|
|
154
|
+
else
|
|
155
|
+
this.setAttribute("auto-complete", value ? "true" : "false");
|
|
156
|
+
}
|
|
157
|
+
/** Per-field autofill overrides keyed by field id. Settable as a JS object
|
|
158
|
+
* property or as the `field-auto-complete` JSON attribute. */
|
|
159
|
+
get fieldAutoComplete() {
|
|
160
|
+
if (this._fieldAutoComplete !== undefined)
|
|
161
|
+
return this._fieldAutoComplete;
|
|
162
|
+
return parseFieldAutoComplete(this.getAttribute("field-auto-complete"));
|
|
163
|
+
}
|
|
164
|
+
set fieldAutoComplete(value) {
|
|
165
|
+
this._fieldAutoComplete = value;
|
|
166
|
+
this.remount();
|
|
167
|
+
}
|
|
168
|
+
// ── Lifecycle ───────────────────────────────────────────────────────────────
|
|
169
|
+
connectedCallback() {
|
|
170
|
+
this.mount();
|
|
171
|
+
}
|
|
172
|
+
disconnectedCallback() {
|
|
173
|
+
this.teardown();
|
|
174
|
+
}
|
|
175
|
+
attributeChangedCallback(_name, oldValue, newValue) {
|
|
176
|
+
if (oldValue === newValue)
|
|
177
|
+
return;
|
|
178
|
+
// Any observed attribute changing re-derives the mount options.
|
|
179
|
+
this.remount();
|
|
180
|
+
}
|
|
181
|
+
/** Imperatively submit the form (parity with `mountBiabForm`'s handle). */
|
|
182
|
+
submit(options) {
|
|
183
|
+
return this.instance?.submit(options);
|
|
184
|
+
}
|
|
185
|
+
/** Reset values / errors / step. */
|
|
186
|
+
reset() {
|
|
187
|
+
this.instance?.reset();
|
|
188
|
+
}
|
|
189
|
+
/** Re-fetch (or re-adopt) the schema. */
|
|
190
|
+
reload() {
|
|
191
|
+
return this.instance?.reload();
|
|
192
|
+
}
|
|
193
|
+
// ── Internals ────────────────────────────────────────────────────────────────
|
|
194
|
+
mount() {
|
|
195
|
+
if (this.instance)
|
|
196
|
+
return;
|
|
197
|
+
const client = this._client ?? defaultClient ?? undefined;
|
|
198
|
+
const slug = this.getAttribute("slug") ?? undefined;
|
|
199
|
+
// Need either a client+slug or a pre-fetched schema to render.
|
|
200
|
+
if (!this._schema && (!client || !slug)) {
|
|
201
|
+
this.replaceChildren();
|
|
202
|
+
const hint = document.createElement("div");
|
|
203
|
+
hint.className = "biab-form biab-form__error";
|
|
204
|
+
hint.textContent =
|
|
205
|
+
"<biab-form> needs a `slug` + a client (set `.client` or call setBiabFormClient), or a pre-fetched `.schema`.";
|
|
206
|
+
this.append(hint);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const extraClass = this.getAttribute("class") ?? undefined;
|
|
210
|
+
const submitLabel = this.getAttribute("submit-label") ?? undefined;
|
|
211
|
+
const autoComplete = this.autoComplete;
|
|
212
|
+
const fieldAutoComplete = this.fieldAutoComplete;
|
|
213
|
+
this.instance = mountBiabForm(this, {
|
|
214
|
+
...(client ? { client } : {}),
|
|
215
|
+
...(slug ? { slug } : {}),
|
|
216
|
+
...(this._schema ? { schema: this._schema } : {}),
|
|
217
|
+
...(submitLabel ? { submitLabel } : {}),
|
|
218
|
+
...(this.hasAttribute("dry-run") ? { dryRun: true } : {}),
|
|
219
|
+
...(extraClass ? { class: extraClass } : {}),
|
|
220
|
+
...(this._submitOptions ? { submitOptions: this._submitOptions } : {}),
|
|
221
|
+
...(autoComplete !== undefined ? { autoComplete } : {}),
|
|
222
|
+
...(fieldAutoComplete ? { fieldAutoComplete } : {}),
|
|
223
|
+
onSubmit: (data) => this.emit("biab-form-submit", { data }),
|
|
224
|
+
onSuccess: (result) => this.emit("biab-form-success", result),
|
|
225
|
+
onError: (result) => this.emit("biab-form-error", result),
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
teardown() {
|
|
229
|
+
this.instance?.destroy();
|
|
230
|
+
this.instance = null;
|
|
231
|
+
}
|
|
232
|
+
/** Tear down + re-mount with current attrs/props. Cheap; ignored pre-connect. */
|
|
233
|
+
remount() {
|
|
234
|
+
if (!this.isConnected)
|
|
235
|
+
return;
|
|
236
|
+
this.teardown();
|
|
237
|
+
this.mount();
|
|
238
|
+
}
|
|
239
|
+
emit(type, detail) {
|
|
240
|
+
this.dispatchEvent(new CustomEvent(type, { detail, bubbles: true, composed: true }));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Parse the `field-auto-complete` JSON attribute into a per-field overrides
|
|
245
|
+
* record. Returns `undefined` on absent/blank/invalid JSON or a non-object so a
|
|
246
|
+
* malformed attribute silently falls back to inferred tokens.
|
|
247
|
+
*/
|
|
248
|
+
function parseFieldAutoComplete(raw) {
|
|
249
|
+
if (raw == null || raw.trim() === "")
|
|
250
|
+
return undefined;
|
|
251
|
+
try {
|
|
252
|
+
const parsed = JSON.parse(raw);
|
|
253
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
254
|
+
return parsed;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// Malformed JSON — ignore and fall back to inferred tokens.
|
|
259
|
+
}
|
|
260
|
+
return undefined;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Register `<biab-form>` once. Idempotent and SSR-safe (no-op when
|
|
264
|
+
* `customElements` is unavailable, e.g. on the server). Called automatically on
|
|
265
|
+
* import; also exported so a consumer can register under a custom tag name.
|
|
266
|
+
*/
|
|
267
|
+
export function defineBiabForm(tagName = "biab-form") {
|
|
268
|
+
if (typeof customElements === "undefined")
|
|
269
|
+
return;
|
|
270
|
+
if (customElements.get(tagName))
|
|
271
|
+
return;
|
|
272
|
+
customElements.define(tagName, BiabFormElement);
|
|
273
|
+
}
|
|
274
|
+
// Auto-register on import (the common case: `import "@businessdash/sdk/element"`).
|
|
275
|
+
defineBiabForm();
|
|
276
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.js","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}
|
package/dist/enums.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface EnumEntry {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function Enums<const T extends readonly (string | {
|
|
6
|
+
value: string;
|
|
7
|
+
label?: string;
|
|
8
|
+
})[]>(definitions: T): {
|
|
9
|
+
type: "enum";
|
|
10
|
+
entries: EnumEntry[];
|
|
11
|
+
values: { [K in keyof T]: T[K] extends string ? T[K] : T[K] extends {
|
|
12
|
+
value: infer V;
|
|
13
|
+
} ? V : never; };
|
|
14
|
+
isValid: (val: unknown) => boolean;
|
|
15
|
+
getLabel: (val: string) => string | undefined;
|
|
16
|
+
};
|
|
17
|
+
export type InferEnumValues<T extends {
|
|
18
|
+
values: readonly string[];
|
|
19
|
+
}> = T["values"][number];
|
|
20
|
+
export type Enum = EnumEntry;
|
|
21
|
+
export type DefineEnums = EnumEntry;
|
|
22
|
+
export type InferEnum<T extends {
|
|
23
|
+
values: readonly string[];
|
|
24
|
+
}> = InferEnumValues<T>;
|
|
25
|
+
//# sourceMappingURL=enums.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd;AAGD,wBAAgB,KAAK,CACpB,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,EACtE,WAAW,EAAE,CAAC;;;YAkBoC,GAChD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAChC,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC,CAAA;KAAE,GAC9B,CAAC,GACD,KAAK,GACT;mBACc,OAAO,KAAG,OAAO;oBAChB,MAAM,KAAG,MAAM,GAAG,SAAS;EAG5C;AAGD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,IAClE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,IAAI,GAAG,SAAS,CAAC;AAC7B,MAAM,MAAM,WAAW,GAAG,SAAS,CAAC;AACpC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,IAC5D,eAAe,CAAC,CAAC,CAAC,CAAC"}
|
package/dist/enums.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Core utility to extract and humanize strings into clean labels
|
|
2
|
+
function formatLabel(value) {
|
|
3
|
+
// 1. Separate camelCase/PascalCase boundaries (e.g., "inProgress" -> "in Progress")
|
|
4
|
+
const spaced = value.replace(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g, " ");
|
|
5
|
+
// 2. Normalize snake_case (_) and kebab-case (-) into clear spaces
|
|
6
|
+
const normalized = spaced.replace(/[_-]+/g, " ").trim();
|
|
7
|
+
// 3. Capitalize the first letter of each discrete word
|
|
8
|
+
return normalized
|
|
9
|
+
.toLowerCase()
|
|
10
|
+
.split(" ")
|
|
11
|
+
.filter((word) => word.length > 0) // Clean up any duplicate spacing artifacts
|
|
12
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
13
|
+
.join(" ");
|
|
14
|
+
}
|
|
15
|
+
// The core runtime handler implementation for the Pull Request
|
|
16
|
+
export function Enums(definitions) {
|
|
17
|
+
// Normalize mixed inputs to a standard array layout
|
|
18
|
+
const entries = definitions.map((item) => {
|
|
19
|
+
if (typeof item === "string") {
|
|
20
|
+
return {
|
|
21
|
+
value: item,
|
|
22
|
+
label: formatLabel(item),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
value: item.value,
|
|
27
|
+
label: item.label ?? formatLabel(item.value),
|
|
28
|
+
};
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
type: "enum",
|
|
32
|
+
entries,
|
|
33
|
+
values: entries.map((e) => e.value),
|
|
34
|
+
isValid: (val) => entries.some((e) => e.value === val),
|
|
35
|
+
getLabel: (val) => entries.find((e) => e.value === val)?.label,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,SAAS,WAAW,CAAC,KAAa;IACjC,oFAAoF;IACpF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAC3B,+CAA+C,EAC/C,GAAG,CACH,CAAC;IACF,mEAAmE;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,uDAAuD;IACvD,OAAO,UAAU;SACf,WAAW,EAAE;SACb,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,2CAA2C;SAC7E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAOD,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAEnB,WAAc;IACf,oDAAoD;IACpD,MAAM,OAAO,GAAgB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO;gBACN,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC;aACxB,CAAC;QACH,CAAC;QACD,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;SAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACN,IAAI,EAAE,MAAe;QACrB,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAMjC;QACD,OAAO,EAAE,CAAC,GAAY,EAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;QACxE,QAAQ,EAAE,CAAC,GAAW,EAAsB,EAAE,CAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK;KAC5C,CAAC;AACH,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
export declare class BiabApiError extends Error {
|
|
2
|
+
readonly status: number;
|
|
3
|
+
readonly body: unknown;
|
|
4
|
+
readonly path: string;
|
|
5
|
+
constructor(input: {
|
|
6
|
+
status: number;
|
|
7
|
+
path: string;
|
|
8
|
+
message: string;
|
|
9
|
+
body: unknown;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Discriminated body BIAB returns when the package API refuses to
|
|
14
|
+
* run a handler — three reasons:
|
|
15
|
+
*
|
|
16
|
+
* - `plan_required` — feature not in the org's plan (customer can
|
|
17
|
+
* still use site; upsell card is the right UI).
|
|
18
|
+
* - `payment_required` — org's billing is 0-60 days past-due.
|
|
19
|
+
* Static-data routes still serve; interactive ones return this
|
|
20
|
+
* shape and the org's customer-facing site keeps working.
|
|
21
|
+
* - `service_suspended` — 60+ days past-due. Everything returns
|
|
22
|
+
* this shape. The SDK consumer should render a 503 fallback page
|
|
23
|
+
* so search engines treat the outage as temporary, not
|
|
24
|
+
* permanent.
|
|
25
|
+
*
|
|
26
|
+
* READ endpoints return 200 with this body so consumers can branch
|
|
27
|
+
* cleanly without try/catch; WRITE endpoints return 402 so
|
|
28
|
+
* accidental mutations surface as exceptions.
|
|
29
|
+
*/
|
|
30
|
+
export type BiabPlanGateBody = {
|
|
31
|
+
available: false;
|
|
32
|
+
reason: "plan_required";
|
|
33
|
+
requiredFeature: string;
|
|
34
|
+
requiredPlan: string;
|
|
35
|
+
planDisplayName: string;
|
|
36
|
+
upgradeUrl: string;
|
|
37
|
+
message: string;
|
|
38
|
+
} | {
|
|
39
|
+
available: false;
|
|
40
|
+
reason: "payment_required";
|
|
41
|
+
daysLapsed: number;
|
|
42
|
+
daysUntilSuspension: number;
|
|
43
|
+
upgradeUrl: string;
|
|
44
|
+
message: string;
|
|
45
|
+
} | {
|
|
46
|
+
available: false;
|
|
47
|
+
reason: "service_suspended";
|
|
48
|
+
daysLapsed: number;
|
|
49
|
+
upgradeUrl: string;
|
|
50
|
+
message: string;
|
|
51
|
+
};
|
|
52
|
+
export declare function isBiabPlanGateBody(value: unknown): value is BiabPlanGateBody;
|
|
53
|
+
/**
|
|
54
|
+
* Base class for every billing/entitlement rejection. Catch this to
|
|
55
|
+
* handle "the SDK refused to serve" uniformly; catch one of the three
|
|
56
|
+
* subclasses (or `instanceof`-narrow on this class) to branch on the
|
|
57
|
+
* specific reason.
|
|
58
|
+
*/
|
|
59
|
+
export declare class BiabAccessRejectedError extends Error {
|
|
60
|
+
readonly reason: "plan_required" | "payment_required" | "service_suspended";
|
|
61
|
+
readonly upgradeUrl: string;
|
|
62
|
+
readonly featureMessage: string;
|
|
63
|
+
readonly path: string;
|
|
64
|
+
readonly status: number;
|
|
65
|
+
constructor(input: {
|
|
66
|
+
body: BiabPlanGateBody;
|
|
67
|
+
path: string;
|
|
68
|
+
status: number;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Thrown when the org's plan doesn't include the feature the call
|
|
73
|
+
* needs. The org can resolve this by upgrading (or by adding the
|
|
74
|
+
* specific feature à la carte once that surface ships).
|
|
75
|
+
*/
|
|
76
|
+
export declare class BiabFeatureNotEntitledError extends BiabAccessRejectedError {
|
|
77
|
+
readonly feature: string;
|
|
78
|
+
readonly requiredPlan: string;
|
|
79
|
+
readonly planDisplayName: string;
|
|
80
|
+
constructor(input: {
|
|
81
|
+
body: Extract<BiabPlanGateBody, {
|
|
82
|
+
reason: "plan_required";
|
|
83
|
+
}>;
|
|
84
|
+
path: string;
|
|
85
|
+
status: number;
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Thrown when the org's billing is 0-60 days past-due. Static-data
|
|
90
|
+
* routes (marketing bundle, sitemap, robots, parallel-page reads,
|
|
91
|
+
* gallery/blog reads) continue serving normally — interactive ones
|
|
92
|
+
* (forms, cart, scheduling bookings, chatbot writes) throw this.
|
|
93
|
+
*/
|
|
94
|
+
export declare class BiabPaymentLapsedError extends BiabAccessRejectedError {
|
|
95
|
+
readonly daysLapsed: number;
|
|
96
|
+
readonly daysUntilSuspension: number;
|
|
97
|
+
constructor(input: {
|
|
98
|
+
body: Extract<BiabPlanGateBody, {
|
|
99
|
+
reason: "payment_required";
|
|
100
|
+
}>;
|
|
101
|
+
path: string;
|
|
102
|
+
status: number;
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Thrown when the org's billing has been past-due for more than 60
|
|
107
|
+
* days. Every SDK call throws this; the consumer's framework-level
|
|
108
|
+
* page handler should catch it and return HTTP 503 with a "site
|
|
109
|
+
* temporarily unavailable" page so search engines treat the outage
|
|
110
|
+
* as temporary. `robots.txt` and `sitemap.xml` separately switch to
|
|
111
|
+
* suspended-mode bodies (`Disallow: /` / empty) for the same reason.
|
|
112
|
+
*/
|
|
113
|
+
export declare class BiabServiceSuspendedError extends BiabAccessRejectedError {
|
|
114
|
+
readonly daysLapsed: number;
|
|
115
|
+
constructor(input: {
|
|
116
|
+
body: Extract<BiabPlanGateBody, {
|
|
117
|
+
reason: "service_suspended";
|
|
118
|
+
}>;
|
|
119
|
+
path: string;
|
|
120
|
+
status: number;
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Factory the transport uses to throw the right subclass.
|
|
125
|
+
*/
|
|
126
|
+
export declare function accessRejectionFromBody(input: {
|
|
127
|
+
body: BiabPlanGateBody;
|
|
128
|
+
path: string;
|
|
129
|
+
status: number;
|
|
130
|
+
}): BiabAccessRejectedError;
|
|
131
|
+
/**
|
|
132
|
+
* Result shape returned by `unwrapAccess` — either the data the
|
|
133
|
+
* inner promise resolved to, OR a `rejected` descriptor (one of the
|
|
134
|
+
* three reasons) so the consumer can render the appropriate card.
|
|
135
|
+
* Errors that aren't access rejections continue to throw.
|
|
136
|
+
*
|
|
137
|
+
* ```ts
|
|
138
|
+
* const result = await unwrapAccess(() => client.gallery.list());
|
|
139
|
+
* if (result.rejected) {
|
|
140
|
+
* switch (result.rejected.reason) {
|
|
141
|
+
* case "plan_required": return <UpsellCard {...result.rejected} />;
|
|
142
|
+
* case "payment_required": return <BillingLapsedCard {...result.rejected} />;
|
|
143
|
+
* case "service_suspended": return <SiteUnavailableCard {...result.rejected} />;
|
|
144
|
+
* }
|
|
145
|
+
* }
|
|
146
|
+
* return <Gallery items={result.data} />;
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export type UnwrappedAccess<T> = {
|
|
150
|
+
data: T;
|
|
151
|
+
rejected: null;
|
|
152
|
+
} | {
|
|
153
|
+
data: null;
|
|
154
|
+
rejected: {
|
|
155
|
+
reason: "plan_required";
|
|
156
|
+
feature: string;
|
|
157
|
+
requiredPlan: string;
|
|
158
|
+
planDisplayName: string;
|
|
159
|
+
upgradeUrl: string;
|
|
160
|
+
message: string;
|
|
161
|
+
} | {
|
|
162
|
+
reason: "payment_required";
|
|
163
|
+
daysLapsed: number;
|
|
164
|
+
daysUntilSuspension: number;
|
|
165
|
+
upgradeUrl: string;
|
|
166
|
+
message: string;
|
|
167
|
+
} | {
|
|
168
|
+
reason: "service_suspended";
|
|
169
|
+
daysLapsed: number;
|
|
170
|
+
upgradeUrl: string;
|
|
171
|
+
message: string;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
export declare function unwrapAccess<T>(fn: () => Promise<T>): Promise<UnwrappedAccess<T>>;
|
|
175
|
+
/**
|
|
176
|
+
* Back-compat alias for the plan-only escape hatch. Same shape as
|
|
177
|
+
* `unwrapAccess` but only catches `BiabFeatureNotEntitledError` —
|
|
178
|
+
* other access rejections (payment lapse, suspension) still throw.
|
|
179
|
+
* Prefer `unwrapAccess` for new code.
|
|
180
|
+
*/
|
|
181
|
+
export type UnwrappedEntitlement<T> = {
|
|
182
|
+
data: T;
|
|
183
|
+
notEntitled: null;
|
|
184
|
+
} | {
|
|
185
|
+
data: null;
|
|
186
|
+
notEntitled: {
|
|
187
|
+
feature: string;
|
|
188
|
+
requiredPlan: string;
|
|
189
|
+
planDisplayName: string;
|
|
190
|
+
upgradeUrl: string;
|
|
191
|
+
featureMessage: string | null;
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
export declare function unwrapEntitlement<T>(fn: () => Promise<T>): Promise<UnwrappedEntitlement<T>>;
|
|
195
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|