@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
|
@@ -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"}
|