@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.
Files changed (268) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +899 -0
  3. package/dist/adapters-revalidate.d.ts +44 -0
  4. package/dist/adapters-revalidate.d.ts.map +1 -0
  5. package/dist/adapters-revalidate.js +68 -0
  6. package/dist/adapters-revalidate.js.map +1 -0
  7. package/dist/alpha.d.ts +21 -0
  8. package/dist/alpha.d.ts.map +1 -0
  9. package/dist/alpha.js +21 -0
  10. package/dist/alpha.js.map +1 -0
  11. package/dist/analytics-core.d.ts +34 -0
  12. package/dist/analytics-core.d.ts.map +1 -0
  13. package/dist/analytics-core.js +138 -0
  14. package/dist/analytics-core.js.map +1 -0
  15. package/dist/analytics-server.d.ts +54 -0
  16. package/dist/analytics-server.d.ts.map +1 -0
  17. package/dist/analytics-server.js +78 -0
  18. package/dist/analytics-server.js.map +1 -0
  19. package/dist/attribution-logo.d.ts +2 -0
  20. package/dist/attribution-logo.d.ts.map +1 -0
  21. package/dist/attribution-logo.js +5 -0
  22. package/dist/attribution-logo.js.map +1 -0
  23. package/dist/auth-handler.d.ts +92 -0
  24. package/dist/auth-handler.d.ts.map +1 -0
  25. package/dist/auth-handler.js +277 -0
  26. package/dist/auth-handler.js.map +1 -0
  27. package/dist/biab-forms.css +484 -0
  28. package/dist/cli.d.ts +46 -0
  29. package/dist/cli.d.ts.map +1 -0
  30. package/dist/cli.js +1824 -0
  31. package/dist/cli.js.map +1 -0
  32. package/dist/client.d.ts +1681 -0
  33. package/dist/client.d.ts.map +1 -0
  34. package/dist/client.js +2845 -0
  35. package/dist/client.js.map +1 -0
  36. package/dist/collections.d.ts +13 -0
  37. package/dist/collections.d.ts.map +1 -0
  38. package/dist/collections.js +13 -0
  39. package/dist/collections.js.map +1 -0
  40. package/dist/contracts.d.ts +14609 -0
  41. package/dist/contracts.d.ts.map +1 -0
  42. package/dist/contracts.js +2428 -0
  43. package/dist/contracts.js.map +1 -0
  44. package/dist/data-model-schema.d.ts +962 -0
  45. package/dist/data-model-schema.d.ts.map +1 -0
  46. package/dist/data-model-schema.js +2295 -0
  47. package/dist/data-model-schema.js.map +1 -0
  48. package/dist/distribution.d.ts +38 -0
  49. package/dist/distribution.d.ts.map +1 -0
  50. package/dist/distribution.js +61 -0
  51. package/dist/distribution.js.map +1 -0
  52. package/dist/element.d.ts +121 -0
  53. package/dist/element.d.ts.map +1 -0
  54. package/dist/element.js +276 -0
  55. package/dist/element.js.map +1 -0
  56. package/dist/enums.d.ts +25 -0
  57. package/dist/enums.d.ts.map +1 -0
  58. package/dist/enums.js +38 -0
  59. package/dist/enums.js.map +1 -0
  60. package/dist/errors.d.ts +195 -0
  61. package/dist/errors.d.ts.map +1 -0
  62. package/dist/errors.js +188 -0
  63. package/dist/errors.js.map +1 -0
  64. package/dist/forms-core/autocomplete.d.ts +37 -0
  65. package/dist/forms-core/autocomplete.d.ts.map +1 -0
  66. package/dist/forms-core/autocomplete.js +82 -0
  67. package/dist/forms-core/autocomplete.js.map +1 -0
  68. package/dist/forms-core/business-function.d.ts +61 -0
  69. package/dist/forms-core/business-function.d.ts.map +1 -0
  70. package/dist/forms-core/business-function.js +149 -0
  71. package/dist/forms-core/business-function.js.map +1 -0
  72. package/dist/forms-core/calculation.d.ts +72 -0
  73. package/dist/forms-core/calculation.d.ts.map +1 -0
  74. package/dist/forms-core/calculation.js +103 -0
  75. package/dist/forms-core/calculation.js.map +1 -0
  76. package/dist/forms-core/controller.d.ts +249 -0
  77. package/dist/forms-core/controller.d.ts.map +1 -0
  78. package/dist/forms-core/controller.js +590 -0
  79. package/dist/forms-core/controller.js.map +1 -0
  80. package/dist/forms-core/elements.d.ts +44 -0
  81. package/dist/forms-core/elements.d.ts.map +1 -0
  82. package/dist/forms-core/elements.js +68 -0
  83. package/dist/forms-core/elements.js.map +1 -0
  84. package/dist/forms-core/email-domains.d.ts +10 -0
  85. package/dist/forms-core/email-domains.d.ts.map +1 -0
  86. package/dist/forms-core/email-domains.js +69 -0
  87. package/dist/forms-core/email-domains.js.map +1 -0
  88. package/dist/forms-core/file-rules.d.ts +51 -0
  89. package/dist/forms-core/file-rules.d.ts.map +1 -0
  90. package/dist/forms-core/file-rules.js +105 -0
  91. package/dist/forms-core/file-rules.js.map +1 -0
  92. package/dist/forms-core/formula.d.ts +114 -0
  93. package/dist/forms-core/formula.d.ts.map +1 -0
  94. package/dist/forms-core/formula.js +1170 -0
  95. package/dist/forms-core/formula.js.map +1 -0
  96. package/dist/forms-core/index.d.ts +24 -0
  97. package/dist/forms-core/index.d.ts.map +1 -0
  98. package/dist/forms-core/index.js +28 -0
  99. package/dist/forms-core/index.js.map +1 -0
  100. package/dist/forms-core/units.d.ts +49 -0
  101. package/dist/forms-core/units.d.ts.map +1 -0
  102. package/dist/forms-core/units.js +255 -0
  103. package/dist/forms-core/units.js.map +1 -0
  104. package/dist/forms-core/us-states.d.ts +14 -0
  105. package/dist/forms-core/us-states.d.ts.map +1 -0
  106. package/dist/forms-core/us-states.js +66 -0
  107. package/dist/forms-core/us-states.js.map +1 -0
  108. package/dist/forms-core/validation.d.ts +266 -0
  109. package/dist/forms-core/validation.d.ts.map +1 -0
  110. package/dist/forms-core/validation.js +850 -0
  111. package/dist/forms-core/validation.js.map +1 -0
  112. package/dist/forms.d.ts +19 -0
  113. package/dist/forms.d.ts.map +1 -0
  114. package/dist/forms.js +29 -0
  115. package/dist/forms.js.map +1 -0
  116. package/dist/gallery-types.d.ts +32 -0
  117. package/dist/gallery-types.d.ts.map +1 -0
  118. package/dist/gallery-types.js +2 -0
  119. package/dist/gallery-types.js.map +1 -0
  120. package/dist/graphql.d.ts +97 -0
  121. package/dist/graphql.d.ts.map +1 -0
  122. package/dist/graphql.js +212 -0
  123. package/dist/graphql.js.map +1 -0
  124. package/dist/index.cjs +19448 -0
  125. package/dist/index.d.cts +19 -0
  126. package/dist/index.d.mts +19 -0
  127. package/dist/index.d.ts +19 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +20 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/marketing-schema.d.ts +216 -0
  132. package/dist/marketing-schema.d.ts.map +1 -0
  133. package/dist/marketing-schema.js +200 -0
  134. package/dist/marketing-schema.js.map +1 -0
  135. package/dist/mcp.d.ts +42 -0
  136. package/dist/mcp.d.ts.map +1 -0
  137. package/dist/mcp.js +87 -0
  138. package/dist/mcp.js.map +1 -0
  139. package/dist/native.d.ts +45 -0
  140. package/dist/native.d.ts.map +1 -0
  141. package/dist/native.js +43 -0
  142. package/dist/native.js.map +1 -0
  143. package/dist/next-revalidate.d.ts +43 -0
  144. package/dist/next-revalidate.d.ts.map +1 -0
  145. package/dist/next-revalidate.js +84 -0
  146. package/dist/next-revalidate.js.map +1 -0
  147. package/dist/parallel-pages.d.ts +102 -0
  148. package/dist/parallel-pages.d.ts.map +1 -0
  149. package/dist/parallel-pages.js +108 -0
  150. package/dist/parallel-pages.js.map +1 -0
  151. package/dist/payment-icons.d.ts +66 -0
  152. package/dist/payment-icons.d.ts.map +1 -0
  153. package/dist/payment-icons.js +160 -0
  154. package/dist/payment-icons.js.map +1 -0
  155. package/dist/proxy.d.ts +67 -0
  156. package/dist/proxy.d.ts.map +1 -0
  157. package/dist/proxy.js +97 -0
  158. package/dist/proxy.js.map +1 -0
  159. package/dist/react-analytics.d.ts +39 -0
  160. package/dist/react-analytics.d.ts.map +1 -0
  161. package/dist/react-analytics.js +59 -0
  162. package/dist/react-analytics.js.map +1 -0
  163. package/dist/react-attribution.d.ts +99 -0
  164. package/dist/react-attribution.d.ts.map +1 -0
  165. package/dist/react-attribution.js +52 -0
  166. package/dist/react-attribution.js.map +1 -0
  167. package/dist/react-marketing.d.ts +181 -0
  168. package/dist/react-marketing.d.ts.map +1 -0
  169. package/dist/react-marketing.js +215 -0
  170. package/dist/react-marketing.js.map +1 -0
  171. package/dist/react.d.ts +727 -0
  172. package/dist/react.d.ts.map +1 -0
  173. package/dist/react.js +2418 -0
  174. package/dist/react.js.map +1 -0
  175. package/dist/reserved-paths.d.ts +24 -0
  176. package/dist/reserved-paths.d.ts.map +1 -0
  177. package/dist/reserved-paths.js +60 -0
  178. package/dist/reserved-paths.js.map +1 -0
  179. package/dist/revalidate-verify.d.ts +30 -0
  180. package/dist/revalidate-verify.d.ts.map +1 -0
  181. package/dist/revalidate-verify.js +74 -0
  182. package/dist/revalidate-verify.js.map +1 -0
  183. package/dist/sdk.d.ts +678 -0
  184. package/dist/sdk.d.ts.map +1 -0
  185. package/dist/sdk.js +801 -0
  186. package/dist/sdk.js.map +1 -0
  187. package/dist/seo.d.ts +218 -0
  188. package/dist/seo.d.ts.map +1 -0
  189. package/dist/seo.js +309 -0
  190. package/dist/seo.js.map +1 -0
  191. package/dist/socials.d.ts +47 -0
  192. package/dist/socials.d.ts.map +1 -0
  193. package/dist/socials.js +172 -0
  194. package/dist/socials.js.map +1 -0
  195. package/dist/static.d.ts +14 -0
  196. package/dist/static.d.ts.map +1 -0
  197. package/dist/static.js +14 -0
  198. package/dist/static.js.map +1 -0
  199. package/dist/url-pattern.d.ts +47 -0
  200. package/dist/url-pattern.d.ts.map +1 -0
  201. package/dist/url-pattern.js +124 -0
  202. package/dist/url-pattern.js.map +1 -0
  203. package/dist/vanilla.d.ts +77 -0
  204. package/dist/vanilla.d.ts.map +1 -0
  205. package/dist/vanilla.js +903 -0
  206. package/dist/vanilla.js.map +1 -0
  207. package/openapi.json +13779 -0
  208. package/package.json +204 -0
  209. package/src/adapters-revalidate.ts +88 -0
  210. package/src/alpha.ts +89 -0
  211. package/src/analytics-core.ts +175 -0
  212. package/src/analytics-server.ts +99 -0
  213. package/src/angular/biab-form.component.ts +1443 -0
  214. package/src/angular/index.ts +26 -0
  215. package/src/attribution-logo.ts +5 -0
  216. package/src/auth-handler.ts +352 -0
  217. package/src/cli.ts +2517 -0
  218. package/src/client.ts +3578 -0
  219. package/src/collections.ts +101 -0
  220. package/src/contracts.ts +3390 -0
  221. package/src/data-model-schema.ts +4042 -0
  222. package/src/distribution.ts +73 -0
  223. package/src/element.ts +321 -0
  224. package/src/enums.ts +65 -0
  225. package/src/errors.ts +338 -0
  226. package/src/forms-core/autocomplete.ts +97 -0
  227. package/src/forms-core/business-function.ts +209 -0
  228. package/src/forms-core/calculation.ts +167 -0
  229. package/src/forms-core/controller.ts +922 -0
  230. package/src/forms-core/elements.ts +86 -0
  231. package/src/forms-core/email-domains.ts +68 -0
  232. package/src/forms-core/file-rules.ts +123 -0
  233. package/src/forms-core/formula.ts +1339 -0
  234. package/src/forms-core/index.ts +122 -0
  235. package/src/forms-core/units.ts +308 -0
  236. package/src/forms-core/us-states.ts +68 -0
  237. package/src/forms-core/validation.ts +1037 -0
  238. package/src/forms.ts +63 -0
  239. package/src/gallery-types.ts +31 -0
  240. package/src/graphql.ts +295 -0
  241. package/src/index.ts +505 -0
  242. package/src/marketing-schema.ts +395 -0
  243. package/src/mcp.ts +108 -0
  244. package/src/native.ts +73 -0
  245. package/src/next-revalidate.ts +124 -0
  246. package/src/parallel-pages.ts +192 -0
  247. package/src/payment-icons.ts +205 -0
  248. package/src/proxy.ts +173 -0
  249. package/src/qwik.tsx +1234 -0
  250. package/src/react-analytics.tsx +76 -0
  251. package/src/react-attribution.tsx +192 -0
  252. package/src/react-marketing.tsx +338 -0
  253. package/src/react.tsx +5495 -0
  254. package/src/reserved-paths.ts +65 -0
  255. package/src/revalidate-verify.ts +98 -0
  256. package/src/sdk.ts +1671 -0
  257. package/src/seo.ts +488 -0
  258. package/src/socials.ts +230 -0
  259. package/src/solid.tsx +1466 -0
  260. package/src/static.ts +21 -0
  261. package/src/styles/biab-forms.css +484 -0
  262. package/src/svelte/BiabForm.svelte +1069 -0
  263. package/src/svelte/context.ts +57 -0
  264. package/src/svelte/index.ts +79 -0
  265. package/src/url-pattern.ts +153 -0
  266. package/src/vanilla.ts +1290 -0
  267. package/src/vue/BiabForm.vue +1538 -0
  268. package/src/vue/index.ts +119 -0
@@ -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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"}
@@ -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"}
@@ -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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"}