@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,484 @@
1
+ /*
2
+ * @businessdash/sdk — optional form styles.
3
+ *
4
+ * Styles the parts of `<BiabForm>` that benefit from non-trivial layout: the
5
+ * date-range / slot pickers, the file-upload field, and the multi-step progress
6
+ * header (numbered-steps and bar variants). Base field/label/input chrome is
7
+ * left to the host app so the form adopts your design. Import once:
8
+ *
9
+ * import "@businessdash/sdk/biab-forms.css";
10
+ *
11
+ * It is theme-aware: it reads the standard shadcn/COSS CSS variables
12
+ * (--primary, --muted, --border, --radius-md, …) and falls back to the COSS
13
+ * light-theme defaults when they aren't defined, so it looks right out of the box
14
+ * and adopts your theme when present. Containers are intentionally
15
+ * background-LESS — add a surface fill in your own app if you want one.
16
+ */
17
+
18
+ .biab-daterange {
19
+ --biab-cell-size: 2rem;
20
+ --biab-radius: var(--radius-md, 0.375rem);
21
+ --biab-primary: var(--primary, oklch(0.205 0 0));
22
+ --biab-primary-fg: var(--primary-foreground, oklch(0.985 0 0));
23
+ --biab-muted: var(--muted, oklch(0.97 0 0));
24
+ --biab-muted-fg: var(--muted-foreground, oklch(0.556 0 0));
25
+ --biab-border: var(--border, oklch(0.922 0 0));
26
+ --biab-popover: var(--popover, oklch(1 0 0));
27
+ --biab-popover-fg: var(--popover-foreground, oklch(0.145 0 0));
28
+ --biab-accent: var(--accent, oklch(0.97 0 0));
29
+ position: relative;
30
+ }
31
+
32
+ /* Trigger — mirrors the COSS outline button (w-full justify-start). */
33
+ .biab-daterange__trigger {
34
+ display: flex;
35
+ width: 100%;
36
+ align-items: center;
37
+ gap: 0.5rem;
38
+ height: 2.25rem;
39
+ padding: 0 0.75rem;
40
+ border: 1px solid var(--biab-border);
41
+ border-radius: var(--biab-radius);
42
+ background: transparent;
43
+ color: inherit;
44
+ font-size: 0.875rem;
45
+ text-align: left;
46
+ cursor: pointer;
47
+ }
48
+ .biab-daterange__trigger:hover {
49
+ background: var(--biab-accent);
50
+ }
51
+
52
+ /* Popover card — matches the COSS popover (bg-popover, border, rounded, shadow). */
53
+ .biab-daterange__popover {
54
+ top: calc(100% + 4px);
55
+ left: 0;
56
+ width: max-content;
57
+ padding: 0.75rem;
58
+ border: 1px solid var(--biab-border);
59
+ border-radius: calc(var(--biab-radius) + 0.25rem);
60
+ background: var(--biab-popover);
61
+ color: var(--biab-popover-fg);
62
+ box-shadow:
63
+ 0 4px 6px -1px rgb(0 0 0 / 0.1),
64
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
65
+ }
66
+
67
+ /* Month nav — ghost prev/next flanking a centered caption. */
68
+ .biab-daterange__nav {
69
+ display: flex;
70
+ align-items: center;
71
+ justify-content: space-between;
72
+ gap: 0.25rem;
73
+ margin-bottom: 0.5rem;
74
+ }
75
+ .biab-daterange__navbtn {
76
+ display: inline-flex;
77
+ align-items: center;
78
+ justify-content: center;
79
+ width: var(--biab-cell-size);
80
+ height: var(--biab-cell-size);
81
+ padding: 0;
82
+ border: none;
83
+ border-radius: var(--biab-radius);
84
+ background: transparent;
85
+ color: inherit;
86
+ font-size: 1rem;
87
+ line-height: 1;
88
+ cursor: pointer;
89
+ }
90
+ .biab-daterange__navbtn:hover {
91
+ background: var(--biab-accent);
92
+ }
93
+ .biab-daterange__title {
94
+ flex: 1;
95
+ text-align: center;
96
+ font-size: 0.875rem;
97
+ font-weight: 500;
98
+ user-select: none;
99
+ }
100
+
101
+ /* Day grid. */
102
+ .biab-daterange__grid {
103
+ display: grid;
104
+ grid-template-columns: repeat(7, var(--biab-cell-size));
105
+ gap: 0;
106
+ }
107
+ .biab-daterange__dow {
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ height: var(--biab-cell-size);
112
+ font-size: 0.8rem;
113
+ font-weight: 400;
114
+ color: var(--biab-muted-fg);
115
+ user-select: none;
116
+ }
117
+ .biab-daterange__blank {
118
+ width: var(--biab-cell-size);
119
+ height: var(--biab-cell-size);
120
+ }
121
+ .biab-daterange__day {
122
+ width: var(--biab-cell-size);
123
+ height: var(--biab-cell-size);
124
+ border: none;
125
+ border-radius: var(--biab-radius);
126
+ background: transparent;
127
+ color: inherit;
128
+ font-size: 0.875rem;
129
+ line-height: 1;
130
+ cursor: pointer;
131
+ user-select: none;
132
+ }
133
+ .biab-daterange__day:hover {
134
+ background: var(--biab-accent);
135
+ }
136
+
137
+ /* today (when not selected) — matches COSS `today` (bg-muted). */
138
+ .biab-daterange__day[data-today]:not([data-selected-single]):not(
139
+ [data-range-start]
140
+ ):not([data-range-end]):not([data-range-middle]) {
141
+ background: var(--biab-muted);
142
+ font-weight: 500;
143
+ }
144
+
145
+ /* Range middle — muted fill, square corners (connects the pill). */
146
+ .biab-daterange__day[data-range-middle] {
147
+ background: var(--biab-muted);
148
+ color: var(--biab-popover-fg);
149
+ border-radius: 0;
150
+ }
151
+
152
+ /* Range start / end + single selection — solid primary, rounded on the outer
153
+ * edge so start→end reads as one connected pill (exactly like COSS). */
154
+ .biab-daterange__day[data-range-start],
155
+ .biab-daterange__day[data-range-end],
156
+ .biab-daterange__day[data-selected-single] {
157
+ background: var(--biab-primary);
158
+ color: var(--biab-primary-fg);
159
+ }
160
+ .biab-daterange__day[data-range-start] {
161
+ border-top-right-radius: 0;
162
+ border-bottom-right-radius: 0;
163
+ }
164
+ .biab-daterange__day[data-range-end] {
165
+ border-top-left-radius: 0;
166
+ border-bottom-left-radius: 0;
167
+ }
168
+ .biab-daterange__day[data-range-start]:hover,
169
+ .biab-daterange__day[data-range-end]:hover,
170
+ .biab-daterange__day[data-selected-single]:hover {
171
+ background: var(--biab-primary);
172
+ }
173
+
174
+ /* ── Auto-schedule (instant booking) slot picker ─────────────────────────── */
175
+ .biab-field__schedule-auto {
176
+ display: flex;
177
+ flex-direction: column;
178
+ gap: 0.75rem;
179
+ max-height: 18rem;
180
+ overflow-y: auto;
181
+ }
182
+ .biab-field__schedule-day-label {
183
+ margin: 0 0 0.25rem;
184
+ font-size: 0.8125rem;
185
+ font-weight: 600;
186
+ }
187
+ .biab-field__schedule-times {
188
+ display: flex;
189
+ flex-wrap: wrap;
190
+ gap: 0.375rem;
191
+ }
192
+ .biab-field__schedule-slot {
193
+ border: 1px solid var(--biab-border, #d4d4d8);
194
+ background: var(--biab-card, #fff);
195
+ border-radius: 9999px;
196
+ padding: 0.25rem 0.75rem;
197
+ font-size: 0.875rem;
198
+ cursor: pointer;
199
+ }
200
+ .biab-field__schedule-slot:hover {
201
+ background: var(--biab-muted, #f4f4f5);
202
+ }
203
+ .biab-field__schedule-slot[data-selected="true"] {
204
+ background: var(--biab-primary);
205
+ color: var(--biab-primary-fg);
206
+ border-color: var(--biab-primary);
207
+ }
208
+ .biab-field__schedule-hint {
209
+ font-size: 0.875rem;
210
+ color: var(--biab-muted-fg, #71717a);
211
+ }
212
+
213
+ /* ── Shared theme tokens for the components below ─────────────────────────── */
214
+ /* Same theme-aware pattern as `.biab-daterange`: read the host's shadcn/COSS
215
+ * vars, fall back to neutral light defaults. Containers are intentionally
216
+ * background-LESS — the host app adds a surface fill if it wants one. */
217
+ .biab-field__files,
218
+ .biab-field__schedule,
219
+ .biab-progress {
220
+ --biab-radius: var(--radius-md, 0.5rem);
221
+ --biab-primary: var(--primary, oklch(0.205 0 0));
222
+ --biab-primary-fg: var(--primary-foreground, oklch(0.985 0 0));
223
+ --biab-muted: var(--muted, oklch(0.97 0 0));
224
+ --biab-muted-fg: var(--muted-foreground, oklch(0.556 0 0));
225
+ --biab-border: var(--border, oklch(0.922 0 0));
226
+ --biab-accent: var(--accent, oklch(0.97 0 0));
227
+ }
228
+
229
+ /* ── File upload ─────────────────────────────────────────────────────────── */
230
+ .biab-field__files {
231
+ display: flex;
232
+ flex-direction: column;
233
+ gap: 0.5rem;
234
+ }
235
+ /* The picker — a dashed drop-zone box. No background fill by default.
236
+ * `appearance: auto` + the text resets defend the NATIVE file control against a
237
+ * host app's global input styling (e.g. `appearance: none` / letter-spacing),
238
+ * which otherwise glitches the "Choose file" text and its layout in Safari. */
239
+ .biab-field__fileinput {
240
+ -webkit-appearance: auto;
241
+ appearance: auto;
242
+ box-sizing: border-box;
243
+ display: block;
244
+ width: 100%;
245
+ max-width: 100%;
246
+ padding: 0.75rem;
247
+ border: 1.5px dashed var(--biab-border);
248
+ border-radius: var(--biab-radius);
249
+ background: transparent;
250
+ color: var(--biab-muted-fg);
251
+ font-size: 0.875rem;
252
+ line-height: normal;
253
+ letter-spacing: normal;
254
+ cursor: pointer;
255
+ transition: border-color 0.15s ease;
256
+ }
257
+ .biab-field__fileinput:hover:not(:disabled) {
258
+ border-color: var(--biab-primary);
259
+ }
260
+ .biab-field__fileinput:disabled {
261
+ opacity: 0.55;
262
+ cursor: not-allowed;
263
+ }
264
+ /* The native "choose file" control — styled as an obvious button (it's a
265
+ * control, not a container, so it carries a fill). */
266
+ .biab-field__fileinput::file-selector-button {
267
+ margin-right: 0.75rem;
268
+ padding: 0.35rem 0.75rem;
269
+ border: none;
270
+ border-radius: calc(var(--biab-radius) - 0.15rem);
271
+ background: var(--biab-primary);
272
+ color: var(--biab-primary-fg);
273
+ font-size: 0.8125rem;
274
+ font-weight: 600;
275
+ cursor: pointer;
276
+ }
277
+ /* Selected-file rows — bordered, no fill. */
278
+ .biab-field__filelist {
279
+ list-style: none;
280
+ margin: 0;
281
+ padding: 0;
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 0.375rem;
285
+ }
286
+ .biab-field__fileitem {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 0.5rem;
290
+ padding: 0.4rem 0.625rem;
291
+ border: 1px solid var(--biab-border);
292
+ border-radius: var(--biab-radius);
293
+ background: transparent;
294
+ font-size: 0.8125rem;
295
+ }
296
+ .biab-field__filename {
297
+ flex: 1;
298
+ overflow: hidden;
299
+ text-overflow: ellipsis;
300
+ white-space: nowrap;
301
+ }
302
+ .biab-field__filepending {
303
+ flex-shrink: 0;
304
+ color: var(--biab-muted-fg);
305
+ font-size: 0.75rem;
306
+ white-space: nowrap;
307
+ }
308
+ .biab-field__fileremove {
309
+ flex-shrink: 0;
310
+ display: inline-flex;
311
+ align-items: center;
312
+ justify-content: center;
313
+ width: 1.25rem;
314
+ height: 1.25rem;
315
+ border: none;
316
+ border-radius: 9999px;
317
+ background: transparent;
318
+ color: var(--biab-muted-fg);
319
+ font-size: 1.1rem;
320
+ line-height: 1;
321
+ cursor: pointer;
322
+ transition: color 0.15s ease;
323
+ }
324
+ .biab-field__fileremove:hover {
325
+ color: var(--biab-primary);
326
+ }
327
+
328
+ /* ── Progress header — steps ─────────────────────────────────────────────── */
329
+ .biab-progress {
330
+ margin-bottom: 1.25rem;
331
+ }
332
+ .biab-progress--steps {
333
+ display: flex;
334
+ align-items: center;
335
+ gap: 0.25rem;
336
+ }
337
+ .biab-progress__line {
338
+ flex: 1;
339
+ height: 2px;
340
+ border-radius: 1px;
341
+ background: var(--biab-border);
342
+ }
343
+ .biab-progress__line--done {
344
+ background: var(--biab-primary);
345
+ }
346
+ .biab-progress__step {
347
+ display: inline-flex;
348
+ align-items: center;
349
+ gap: 0.4rem;
350
+ padding: 0.25rem 0.4rem;
351
+ border: none;
352
+ background: transparent;
353
+ color: var(--biab-muted-fg);
354
+ font-size: 0.8125rem;
355
+ cursor: pointer;
356
+ }
357
+ /* The step number/check — a small indicator circle (filled only once done). */
358
+ .biab-progress__num {
359
+ display: inline-flex;
360
+ align-items: center;
361
+ justify-content: center;
362
+ flex-shrink: 0;
363
+ width: 1.5rem;
364
+ height: 1.5rem;
365
+ border-radius: 9999px;
366
+ border: 1.5px solid var(--biab-border);
367
+ background: transparent;
368
+ color: var(--biab-muted-fg);
369
+ font-size: 0.8125rem;
370
+ font-weight: 600;
371
+ }
372
+ .biab-progress__step--current .biab-progress__num {
373
+ border-color: var(--biab-primary);
374
+ color: var(--biab-primary);
375
+ }
376
+ .biab-progress__step--done .biab-progress__num {
377
+ border-color: var(--biab-primary);
378
+ background: var(--biab-primary);
379
+ color: var(--biab-primary-fg);
380
+ }
381
+ .biab-progress__title {
382
+ white-space: nowrap;
383
+ }
384
+ .biab-progress__step--current .biab-progress__title {
385
+ color: var(--biab-primary);
386
+ font-weight: 600;
387
+ }
388
+ /* Compact: drop step labels on narrow viewports so the row doesn't wrap. */
389
+ @media (max-width: 520px) {
390
+ .biab-progress__title {
391
+ display: none;
392
+ }
393
+ }
394
+
395
+ /* ── Progress header — bar ───────────────────────────────────────────────── */
396
+ .biab-progress--bar {
397
+ display: flex;
398
+ flex-direction: column;
399
+ gap: 0.375rem;
400
+ }
401
+ .biab-progress__count {
402
+ font-size: 0.8125rem;
403
+ font-weight: 500;
404
+ color: var(--biab-muted-fg);
405
+ }
406
+ /* The track is intrinsic to a progress bar (it shows the unfilled portion), so
407
+ * it keeps a muted fill — it's the control, not a layout container. */
408
+ .biab-progress__track {
409
+ width: 100%;
410
+ height: 0.5rem;
411
+ border-radius: 9999px;
412
+ background: var(--biab-muted);
413
+ overflow: hidden;
414
+ }
415
+ .biab-progress__fill {
416
+ height: 100%;
417
+ border-radius: 9999px;
418
+ background: var(--biab-primary);
419
+ transition: width 0.3s ease;
420
+ }
421
+
422
+ /* ── Availability (capture mode) — ASAP + day/time chips ──────────────────── */
423
+ .biab-field__schedule {
424
+ display: flex;
425
+ flex-direction: column;
426
+ gap: 0.875rem;
427
+ }
428
+ .biab-field__schedule-asap {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 0.5rem;
432
+ cursor: pointer;
433
+ }
434
+ .biab-field__schedule-asap input {
435
+ width: 1rem;
436
+ height: 1rem;
437
+ accent-color: var(--biab-primary);
438
+ }
439
+ .biab-field__schedule-group {
440
+ display: flex;
441
+ flex-direction: column;
442
+ gap: 0.4rem;
443
+ }
444
+ .biab-field__schedule-label {
445
+ font-size: 0.8125rem;
446
+ font-weight: 600;
447
+ color: var(--biab-muted-fg);
448
+ }
449
+ .biab-field__schedule-chips {
450
+ display: flex;
451
+ flex-wrap: wrap;
452
+ gap: 0.4rem;
453
+ }
454
+
455
+ /* Toggle chips (day/time choices, and any `biab-field__chip` elsewhere). The
456
+ * selected state (`--on`) is a solid primary fill so a pick is unmistakable. */
457
+ .biab-field__chip {
458
+ -webkit-appearance: none;
459
+ appearance: none;
460
+ padding: 0.35rem 0.85rem;
461
+ border: 1px solid var(--biab-border);
462
+ border-radius: 9999px;
463
+ background: transparent;
464
+ color: inherit;
465
+ font-size: 0.875rem;
466
+ line-height: 1.2;
467
+ cursor: pointer;
468
+ transition:
469
+ background 0.15s ease,
470
+ border-color 0.15s ease,
471
+ color 0.15s ease;
472
+ }
473
+ .biab-field__chip:hover {
474
+ border-color: var(--biab-primary);
475
+ background: var(--biab-accent);
476
+ }
477
+ .biab-field__chip--on {
478
+ border-color: var(--biab-primary);
479
+ background: var(--biab-primary);
480
+ color: var(--biab-primary-fg);
481
+ }
482
+ .biab-field__chip--on:hover {
483
+ background: var(--biab-primary);
484
+ }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `biab-dev` CLI entry point.
4
+ *
5
+ * Two independent flows, deliberately sharing nothing but transport
6
+ * conventions — a website's content shape and an org's database shape are
7
+ * different artifacts, with different review cadence and blast radius.
8
+ *
9
+ * WEBSITE CONTENT (`biab.config.{ts,mjs,js}`):
10
+ * - `sync-schema` — resolve the config, compute the canonical SHA-256,
11
+ * POST to the draft-schema endpoint. Idempotent.
12
+ * - `sync-content` — walk `<contentSync.rootDir>/<locale>/<page>/
13
+ * <section>.json`, batch, POST to bulk-sections.
14
+ * Per-row failures are reported but don't abort.
15
+ * - `print-schema` — resolved schema + checksum, no upload.
16
+ *
17
+ * CUSTOM DATABASE (`biab.data-model.config.{ts,mjs,js}`):
18
+ * - `view-data-model` — what's LIVE (not what was last pushed — the
19
+ * dashboard writes this model too). `--diff` for the
20
+ * migration plan, `--out` to scaffold a config.
21
+ * - `print-data-model` — resolved local config + checksum, no network.
22
+ * - `sync-data-model` — push to the draft slot. Prints the plan first.
23
+ * - `sync-records` — upsert rows from JSON, keyed on row identity so
24
+ * re-running converges instead of duplicating.
25
+ * - `wipe-collections` — hard-delete records from explicitly named custom
26
+ * collections, only after a verified Media backup and
27
+ * two interactive confirmations.
28
+ *
29
+ * The CLI never promotes, restores, or inspects schema history. Those live in the
30
+ * dashboard, gated on the operator's permission (`website.manage` /
31
+ * `metadata.manage`), NOT on the API key. Wiping records is the deliberately
32
+ * destructive exception: it requires a user-bound secret key, a state-bound
33
+ * preview, a verified backup in Media, and typed confirmation. The schema
34
+ * invariant still holds: **a key proposes, a human promotes.** A schema key
35
+ * cannot promote a draft or change what visitors see. The wipe endpoint does
36
+ * change record contents, so its backup and confirmation guards are
37
+ * load-bearing.
38
+ *
39
+ * Auth: `BIAB_API_KEY`, `BIAB_SITE_ID`, and `BIAB_PACKAGE_API_BASE_URL` from
40
+ * the environment (or a `.env` / `.env.local` in the cwd). Scopes:
41
+ * `marketing:write_schema` / `marketing:write_content` for the website flow;
42
+ * `metadata:read_schema` (view/plan), `metadata:write_schema` (push), and
43
+ * `metadata:write_records` (seed/wipe) for the data model.
44
+ */
45
+ export {};
46
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG"}