@brandsync/wc 0.0.1
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/custom-elements.json +1138 -0
- package/dist/brandsync-wc/brandsync-wc.css +1730 -0
- package/dist/brandsync-wc/brandsync-wc.esm.js +1 -0
- package/dist/brandsync-wc/brandsync-wc.esm.js.map +1 -0
- package/dist/brandsync-wc/index-Cqxk7LcP.js.map +1 -0
- package/dist/brandsync-wc/index.esm.js +1 -0
- package/dist/brandsync-wc/index.esm.js.map +1 -0
- package/dist/brandsync-wc/p-042ad15a.entry.js +1 -0
- package/dist/brandsync-wc/p-2c4df28d.entry.js +1 -0
- package/dist/brandsync-wc/p-3134f5f5.entry.js +1 -0
- package/dist/brandsync-wc/p-5739acaf.entry.js +1 -0
- package/dist/brandsync-wc/p-BOj_41o9.js +3 -0
- package/dist/brandsync-wc/p-c2cc0d6f.entry.js +1 -0
- package/dist/brandsync-wc/p-da11e421.entry.js +1 -0
- package/dist/brandsync-wc/p-db3934d2.entry.js +1 -0
- package/dist/brandsync-wc/p-e38a9744.entry.js +1 -0
- package/dist/cjs/brandsync-wc.cjs.js +24 -0
- package/dist/cjs/bs-badge.cjs.entry.js +19 -0
- package/dist/cjs/bs-button-skeleton.cjs.entry.js +19 -0
- package/dist/cjs/bs-button.cjs.entry.js +88 -0
- package/dist/cjs/bs-card.cjs.entry.js +20 -0
- package/dist/cjs/bs-composer.cjs.entry.js +116 -0
- package/dist/cjs/bs-data-table.cjs.entry.js +62 -0
- package/dist/cjs/bs-input.cjs.entry.js +42 -0
- package/dist/cjs/bs-modal.cjs.entry.js +69 -0
- package/dist/cjs/index-nyOcuVbF.js +1710 -0
- package/dist/cjs/index.cjs.js +7 -0
- package/dist/cjs/loader.cjs.js +12 -0
- package/dist/collection/collection-manifest.json +20 -0
- package/dist/collection/components/bs-badge/bs-badge.cmp.test.js +30 -0
- package/dist/collection/components/bs-badge/bs-badge.css +55 -0
- package/dist/collection/components/bs-badge/bs-badge.js +64 -0
- package/dist/collection/components/bs-badge/bs-badge.stories.js +75 -0
- package/dist/collection/components/bs-button/bs-button.cmp.test.js +81 -0
- package/dist/collection/components/bs-button/bs-button.css +247 -0
- package/dist/collection/components/bs-button/bs-button.js +242 -0
- package/dist/collection/components/bs-button/bs-button.stories.js +145 -0
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.cmp.test.js +18 -0
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.css +46 -0
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +73 -0
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.stories.js +25 -0
- package/dist/collection/components/bs-card/bs-card.cmp.test.js +42 -0
- package/dist/collection/components/bs-card/bs-card.css +31 -0
- package/dist/collection/components/bs-card/bs-card.js +70 -0
- package/dist/collection/components/bs-card/bs-card.stories.js +27 -0
- package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +132 -0
- package/dist/collection/components/bs-composer/bs-composer.css +185 -0
- package/dist/collection/components/bs-composer/bs-composer.js +353 -0
- package/dist/collection/components/bs-composer/bs-composer.stories.js +66 -0
- package/dist/collection/components/bs-data-table/bs-data-table.css +56 -0
- package/dist/collection/components/bs-data-table/bs-data-table.js +259 -0
- package/dist/collection/components/bs-data-table/bs-data-table.stories.js +55 -0
- package/dist/collection/components/bs-input/bs-input.cmp.test.js +101 -0
- package/dist/collection/components/bs-input/bs-input.css +64 -0
- package/dist/collection/components/bs-input/bs-input.js +230 -0
- package/dist/collection/components/bs-input/bs-input.stories.js +40 -0
- package/dist/collection/components/bs-modal/bs-modal.cmp.test.js +112 -0
- package/dist/collection/components/bs-modal/bs-modal.css +66 -0
- package/dist/collection/components/bs-modal/bs-modal.js +198 -0
- package/dist/collection/components/bs-modal/bs-modal.stories.js +38 -0
- package/dist/collection/index.js +10 -0
- package/dist/collection/stories-utils.js +25 -0
- package/dist/collection/utils/utils.js +3 -0
- package/dist/collection/utils/utils.unit.test.js +16 -0
- package/dist/components/bs-badge.d.ts +11 -0
- package/dist/components/bs-badge.js +1 -0
- package/dist/components/bs-button-skeleton.d.ts +11 -0
- package/dist/components/bs-button-skeleton.js +1 -0
- package/dist/components/bs-button.d.ts +11 -0
- package/dist/components/bs-button.js +1 -0
- package/dist/components/bs-card.d.ts +11 -0
- package/dist/components/bs-card.js +1 -0
- package/dist/components/bs-composer.d.ts +11 -0
- package/dist/components/bs-composer.js +1 -0
- package/dist/components/bs-data-table.d.ts +11 -0
- package/dist/components/bs-data-table.js +1 -0
- package/dist/components/bs-input.d.ts +11 -0
- package/dist/components/bs-input.js +1 -0
- package/dist/components/bs-modal.d.ts +11 -0
- package/dist/components/bs-modal.js +1 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +1 -0
- package/dist/components/p-Cu4gTknX.js +1 -0
- package/dist/esm/brandsync-wc.js +20 -0
- package/dist/esm/bs-badge.entry.js +17 -0
- package/dist/esm/bs-button-skeleton.entry.js +17 -0
- package/dist/esm/bs-button.entry.js +86 -0
- package/dist/esm/bs-card.entry.js +18 -0
- package/dist/esm/bs-composer.entry.js +114 -0
- package/dist/esm/bs-data-table.entry.js +60 -0
- package/dist/esm/bs-input.entry.js +40 -0
- package/dist/esm/bs-modal.entry.js +67 -0
- package/dist/esm/index-BOj_41o9.js +1701 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/loader.js +10 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/types/components/bs-badge/bs-badge.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-badge/bs-badge.d.ts +20 -0
- package/dist/types/components/bs-badge/bs-badge.stories.d.ts +19 -0
- package/dist/types/components/bs-button/bs-button.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-button/bs-button.d.ts +84 -0
- package/dist/types/components/bs-button/bs-button.stories.d.ts +29 -0
- package/dist/types/components/bs-button-skeleton/bs-button-skeleton.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +28 -0
- package/dist/types/components/bs-button-skeleton/bs-button-skeleton.stories.d.ts +10 -0
- package/dist/types/components/bs-card/bs-card.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-card/bs-card.d.ts +26 -0
- package/dist/types/components/bs-card/bs-card.stories.d.ts +10 -0
- package/dist/types/components/bs-composer/bs-composer.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-composer/bs-composer.d.ts +83 -0
- package/dist/types/components/bs-composer/bs-composer.stories.d.ts +17 -0
- package/dist/types/components/bs-data-table/bs-data-table.d.ts +55 -0
- package/dist/types/components/bs-data-table/bs-data-table.stories.d.ts +7 -0
- package/dist/types/components/bs-input/bs-input.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-input/bs-input.d.ts +33 -0
- package/dist/types/components/bs-input/bs-input.stories.d.ts +15 -0
- package/dist/types/components/bs-modal/bs-modal.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-modal/bs-modal.d.ts +45 -0
- package/dist/types/components/bs-modal/bs-modal.stories.d.ts +9 -0
- package/dist/types/components.d.ts +962 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/stencil-public-runtime.d.ts +1872 -0
- package/dist/types/stories-utils.d.ts +8 -0
- package/dist/types/utils/utils.d.ts +1 -0
- package/dist/types/utils/utils.unit.test.d.ts +1 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +67 -0
- package/readme.md +48 -0
|
@@ -0,0 +1,962 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
/* tslint:disable */
|
|
3
|
+
/**
|
|
4
|
+
* This is an autogenerated file created by the Stencil compiler.
|
|
5
|
+
* It contains typing information for all components that exist in this project.
|
|
6
|
+
*/
|
|
7
|
+
import { HTMLStencilElement, JSXBase } from "./stencil-public-runtime";
|
|
8
|
+
import { BsBadgeVariant } from "./components/bs-badge/bs-badge";
|
|
9
|
+
import { BsButtonSize, BsButtonVariant } from "./components/bs-button/bs-button";
|
|
10
|
+
import { BsButtonSize as BsButtonSize1 } from "./components/bs-button/bs-button";
|
|
11
|
+
import { BsCardSurface } from "./components/bs-card/bs-card";
|
|
12
|
+
import { BsComposerState, BsComposerVariant } from "./components/bs-composer/bs-composer";
|
|
13
|
+
import { BsDataTableColumn, BsDataTableRow } from "./components/bs-data-table/bs-data-table";
|
|
14
|
+
import { BsModalSize } from "./components/bs-modal/bs-modal";
|
|
15
|
+
export { BsBadgeVariant } from "./components/bs-badge/bs-badge";
|
|
16
|
+
export { BsButtonSize, BsButtonVariant } from "./components/bs-button/bs-button";
|
|
17
|
+
export { BsButtonSize as BsButtonSize1 } from "./components/bs-button/bs-button";
|
|
18
|
+
export { BsCardSurface } from "./components/bs-card/bs-card";
|
|
19
|
+
export { BsComposerState, BsComposerVariant } from "./components/bs-composer/bs-composer";
|
|
20
|
+
export { BsDataTableColumn, BsDataTableRow } from "./components/bs-data-table/bs-data-table";
|
|
21
|
+
export { BsModalSize } from "./components/bs-modal/bs-modal";
|
|
22
|
+
export namespace Components {
|
|
23
|
+
/**
|
|
24
|
+
* A small status or category pill, usually paired with a label or list item.
|
|
25
|
+
* ## When to use
|
|
26
|
+
* - Communicating a short, fixed status (e.g. "Active", "On leave") or category label.
|
|
27
|
+
* ## When not to use
|
|
28
|
+
* - As an interactive/clickable element — a badge is a label, not a control. Use a button
|
|
29
|
+
* or chip component if it needs to be clickable.
|
|
30
|
+
* - For long text — badges are sized for one or two words.
|
|
31
|
+
*/
|
|
32
|
+
interface BsBadge {
|
|
33
|
+
/**
|
|
34
|
+
* Maps directly to the brandsync-tokens `--bs-badge-bg-*` / `--bs-badge-text-*` sets.
|
|
35
|
+
* @default 'default'
|
|
36
|
+
*/
|
|
37
|
+
"variant": BsBadgeVariant;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A clickable action element for the single most important action in a given context.
|
|
41
|
+
* ## When to use
|
|
42
|
+
* - The primary call to action on a screen or within a card/modal (e.g. "Book room", "Confirm").
|
|
43
|
+
* - Secondary, lower-emphasis actions alongside it (use `variant="neutral"`).
|
|
44
|
+
* - `variant="error"` for destructive/irreversible actions (e.g. "Delete account") — per
|
|
45
|
+
* BrandSync guidance, destructive actions should always use the error variant, never
|
|
46
|
+
* `neutral`, so the visual weight matches the risk of the action.
|
|
47
|
+
* ## When not to use
|
|
48
|
+
* - For navigation between pages — use a link/nav component instead, a button implies an
|
|
49
|
+
* in-page action, not a destination change.
|
|
50
|
+
* - For more than one primary-emphasis action in the same view — pick one, demote the rest to
|
|
51
|
+
* `neutral`.
|
|
52
|
+
* - `error` purely for visual emphasis — it signals a destructive action to the user, so reserve
|
|
53
|
+
* it for actions that actually delete/revoke/undo something.
|
|
54
|
+
* @prop --bs-button-radius - Corner radius. Aliased to `--bs-border-radius-100` by default.
|
|
55
|
+
* @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
56
|
+
* @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
57
|
+
* @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
58
|
+
*/
|
|
59
|
+
interface BsButton {
|
|
60
|
+
/**
|
|
61
|
+
* Accessible name for the button. Required for icon-only usage (no visible label text via the default slot) so screen readers still announce what the button does. Stencil reflects this camelCase prop to the `aria-label` HTML attribute automatically.
|
|
62
|
+
* @default null
|
|
63
|
+
*/
|
|
64
|
+
"ariaLabel": string | null;
|
|
65
|
+
/**
|
|
66
|
+
* Disables the button and applies the disabled token set.
|
|
67
|
+
* @default false
|
|
68
|
+
*/
|
|
69
|
+
"disabled": boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Sizing scale.
|
|
72
|
+
* @default 'md'
|
|
73
|
+
*/
|
|
74
|
+
"size": BsButtonSize;
|
|
75
|
+
/**
|
|
76
|
+
* Native `<button>` type.
|
|
77
|
+
* @default 'button'
|
|
78
|
+
*/
|
|
79
|
+
"type": 'button' | 'submit' | 'reset';
|
|
80
|
+
/**
|
|
81
|
+
* Visual style. Maps directly to the brandsync-tokens `--bs-button-*` semantic set. `error` is for destructive/irreversible actions per BrandSync guidance, not a stronger emphasis alternative to `primary`.
|
|
82
|
+
* @default 'primary'
|
|
83
|
+
*/
|
|
84
|
+
"variant": BsButtonVariant;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A shape-matched loading placeholder for `bs-button`, shown while the real label/action isn't
|
|
88
|
+
* known yet (e.g. still being fetched from an API). Sized to match `bs-button`'s `sm`/`md`/`lg`
|
|
89
|
+
* heights so layout doesn't shift once the real button renders.
|
|
90
|
+
* This is not a submit-in-progress spinner — that's a different concern (a button that's
|
|
91
|
+
* already rendered but waiting on an async action it triggered). Use this component only when
|
|
92
|
+
* the button itself doesn't exist yet.
|
|
93
|
+
* ## When to use
|
|
94
|
+
* - In place of a `bs-button` whose label/visibility depends on data that hasn't loaded yet.
|
|
95
|
+
* ## When not to use
|
|
96
|
+
* - While a button's own click handler is running (e.g. a submit request in flight) — render the
|
|
97
|
+
* real `bs-button` and show its own busy/spinner state instead.
|
|
98
|
+
* @prop --bs-button-skeleton-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
99
|
+
* @prop --bs-button-skeleton-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
100
|
+
* @prop --bs-button-skeleton-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
101
|
+
* @prop --bs-button-skeleton-width - Placeholder width. Defaults to `96px`.
|
|
102
|
+
*/
|
|
103
|
+
interface BsButtonSkeleton {
|
|
104
|
+
/**
|
|
105
|
+
* Sizing scale, matching the `bs-button` size it stands in for.
|
|
106
|
+
* @default 'md'
|
|
107
|
+
*/
|
|
108
|
+
"size": BsButtonSize1;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* A bounded surface for grouping related content — a summary, a form section, a list item.
|
|
112
|
+
* ## When to use
|
|
113
|
+
* - Grouping a self-contained piece of content that needs visual separation from the page
|
|
114
|
+
* background (e.g. a booking summary, a settings section).
|
|
115
|
+
* ## When not to use
|
|
116
|
+
* - As the only structural element on a page — cards group content, they don't replace layout.
|
|
117
|
+
* - For a dismissible/transient message — use a modal or a dedicated notification component.
|
|
118
|
+
*/
|
|
119
|
+
interface BsCard {
|
|
120
|
+
/**
|
|
121
|
+
* Maps to the brandsync-tokens `--bs-paper-bg-*` set — Brandsync's tokens don't have a dedicated "card" component yet, so this reuses the existing Paper surface tokens.
|
|
122
|
+
* @default 'raised'
|
|
123
|
+
*/
|
|
124
|
+
"surface": BsCardSurface;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A chat composer input for Genie AI-style conversational interfaces: a text field
|
|
128
|
+
* plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
|
|
129
|
+
* icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
|
|
130
|
+
* ## When to use
|
|
131
|
+
* - The message-entry bar for an AI chat/assistant or human support conversation.
|
|
132
|
+
* ## When not to use
|
|
133
|
+
* - A general-purpose text field — use `bs-input` instead; this component's layout and states are
|
|
134
|
+
* purpose-built for a chat composer, not a generic form field.
|
|
135
|
+
* @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
|
|
136
|
+
* @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
|
|
137
|
+
* @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
|
|
138
|
+
* @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
|
|
139
|
+
* @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
|
|
140
|
+
* @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
|
|
141
|
+
* @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
|
|
142
|
+
* @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
|
|
143
|
+
* @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
|
|
144
|
+
* @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
|
|
145
|
+
* @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
|
|
146
|
+
* @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
|
|
147
|
+
* @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
|
|
148
|
+
* @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
|
|
149
|
+
* @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
|
|
150
|
+
* @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
|
|
151
|
+
* @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
|
|
152
|
+
*/
|
|
153
|
+
interface BsComposer {
|
|
154
|
+
/**
|
|
155
|
+
* Accessible name for the text field. This component has no visible `<label>` (chat composers don't show one in the design), so `ariaLabel` is the only way a consumer gives the textbox an accessible name -- set it in every real usage.
|
|
156
|
+
* @default null
|
|
157
|
+
*/
|
|
158
|
+
"ariaLabel": string | null;
|
|
159
|
+
/**
|
|
160
|
+
* Overrides the variant's default placeholder.
|
|
161
|
+
*/
|
|
162
|
+
"placeholder"?: string;
|
|
163
|
+
/**
|
|
164
|
+
* Which of the four mutually-exclusive composer states to render: `idle` (send, enabled), `generating` (stop, while the AI is responding), `disabled` (send, but not interactive), or `recording` (voice input in progress -- shows a waveform and a confirm action).
|
|
165
|
+
* @default 'idle'
|
|
166
|
+
*/
|
|
167
|
+
"state": BsComposerState;
|
|
168
|
+
/**
|
|
169
|
+
* Current text value. Native `input` events don't cross the Shadow DOM boundary, so this component re-dispatches them as a `bsInput` custom event instead.
|
|
170
|
+
* @default ''
|
|
171
|
+
*/
|
|
172
|
+
"value": string;
|
|
173
|
+
/**
|
|
174
|
+
* Which flavor of composer this is: changes the *default* placeholder text (set `placeholder` directly to override it) and, per the Figma design, renders the container border dashed instead of solid for `'human'` -- a deliberate visual cue distinguishing a human-support composer from the AI one, not a layout/token difference.
|
|
175
|
+
* @default 'ai'
|
|
176
|
+
*/
|
|
177
|
+
"variant": BsComposerVariant;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* A sortable, optionally row-selectable table for tabular data.
|
|
181
|
+
* `columns`, `rows`, and `cellRenderer` are JS-property-only — HTML attributes can only carry
|
|
182
|
+
* strings, so arrays/objects/functions must be set via `element.rows = [...]` etc., not as
|
|
183
|
+
* attributes. See CONVENTIONS.md.
|
|
184
|
+
* ## When to use
|
|
185
|
+
* - Comparing structured records across the same set of fields (a list of people, bookings, etc.).
|
|
186
|
+
* ## When not to use
|
|
187
|
+
* - A handful of unrelated key/value pairs — a simple list or card is lighter-weight.
|
|
188
|
+
* - Deeply nested/hierarchical data — this component renders one flat row per record.
|
|
189
|
+
*/
|
|
190
|
+
interface BsDataTable {
|
|
191
|
+
/**
|
|
192
|
+
* Optional custom cell renderer, e.g. for an actions column. Function props are JS-property-only, same as array props -- there is no attribute equivalent. Falls back to the raw cell value.
|
|
193
|
+
*/
|
|
194
|
+
"cellRenderer"?: (row: BsDataTableRow, column: BsDataTableColumn) => string;
|
|
195
|
+
/**
|
|
196
|
+
* Array prop -- must be set as a JS property (`el.columns = [...]`), not an HTML attribute, since attributes can only carry strings. See CONVENTIONS.md.
|
|
197
|
+
* @default []
|
|
198
|
+
*/
|
|
199
|
+
"columns": BsDataTableColumn[];
|
|
200
|
+
/**
|
|
201
|
+
* Array prop -- same JS-property-only rule as `columns`.
|
|
202
|
+
* @default []
|
|
203
|
+
*/
|
|
204
|
+
"rows": BsDataTableRow[];
|
|
205
|
+
/**
|
|
206
|
+
* @default false
|
|
207
|
+
*/
|
|
208
|
+
"selectable": boolean;
|
|
209
|
+
"sortColumn"?: string;
|
|
210
|
+
/**
|
|
211
|
+
* @default 'asc'
|
|
212
|
+
*/
|
|
213
|
+
"sortDirection": 'asc' | 'desc';
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* A single-line text field with an optional label, description, and error state.
|
|
217
|
+
* ## When to use
|
|
218
|
+
* - Collecting a single line of free-text, email, password, or numeric input.
|
|
219
|
+
* - Pair with `error` for inline validation feedback tied to that specific field.
|
|
220
|
+
* ## When not to use
|
|
221
|
+
* - Multi-line text — this component has no `textarea` mode.
|
|
222
|
+
* - A fixed set of choices — use a select/radio/checkbox component instead of free text.
|
|
223
|
+
*/
|
|
224
|
+
interface BsInput {
|
|
225
|
+
"description"?: string;
|
|
226
|
+
/**
|
|
227
|
+
* @default false
|
|
228
|
+
*/
|
|
229
|
+
"disabled": boolean;
|
|
230
|
+
"error"?: string;
|
|
231
|
+
"label"?: string;
|
|
232
|
+
"placeholder"?: string;
|
|
233
|
+
/**
|
|
234
|
+
* @default 'text'
|
|
235
|
+
*/
|
|
236
|
+
"type": 'text' | 'email' | 'password' | 'number';
|
|
237
|
+
/**
|
|
238
|
+
* Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this component re-dispatches them as `bsInput`/`bsChange` custom events instead.
|
|
239
|
+
* @default ''
|
|
240
|
+
*/
|
|
241
|
+
"value": string;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* An overlay dialog that interrupts the current flow for a focused task or confirmation.
|
|
245
|
+
* Closes itself on backdrop click, Escape, or its own close button, and emits `bsClose`.
|
|
246
|
+
* ## When to use
|
|
247
|
+
* - Confirming a consequential action (e.g. "Confirm booking") before it takes effect.
|
|
248
|
+
* - A short, focused task that doesn't warrant navigating to a new page.
|
|
249
|
+
* ## When not to use
|
|
250
|
+
* - For non-blocking status messages — use a toast/notification instead of interrupting the user.
|
|
251
|
+
* - For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a
|
|
252
|
+
* modal that just gets taller and taller.
|
|
253
|
+
*/
|
|
254
|
+
interface BsModal {
|
|
255
|
+
"heading"?: string;
|
|
256
|
+
/**
|
|
257
|
+
* Mutable + reflected so the component can close itself (backdrop click, Escape, close button) the same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.
|
|
258
|
+
* @default false
|
|
259
|
+
*/
|
|
260
|
+
"open": boolean;
|
|
261
|
+
/**
|
|
262
|
+
* @default 'md'
|
|
263
|
+
*/
|
|
264
|
+
"size": BsModalSize;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
export interface BsComposerCustomEvent<T> extends CustomEvent<T> {
|
|
268
|
+
detail: T;
|
|
269
|
+
target: HTMLBsComposerElement;
|
|
270
|
+
}
|
|
271
|
+
export interface BsDataTableCustomEvent<T> extends CustomEvent<T> {
|
|
272
|
+
detail: T;
|
|
273
|
+
target: HTMLBsDataTableElement;
|
|
274
|
+
}
|
|
275
|
+
export interface BsInputCustomEvent<T> extends CustomEvent<T> {
|
|
276
|
+
detail: T;
|
|
277
|
+
target: HTMLBsInputElement;
|
|
278
|
+
}
|
|
279
|
+
export interface BsModalCustomEvent<T> extends CustomEvent<T> {
|
|
280
|
+
detail: T;
|
|
281
|
+
target: HTMLBsModalElement;
|
|
282
|
+
}
|
|
283
|
+
declare global {
|
|
284
|
+
/**
|
|
285
|
+
* A small status or category pill, usually paired with a label or list item.
|
|
286
|
+
* ## When to use
|
|
287
|
+
* - Communicating a short, fixed status (e.g. "Active", "On leave") or category label.
|
|
288
|
+
* ## When not to use
|
|
289
|
+
* - As an interactive/clickable element — a badge is a label, not a control. Use a button
|
|
290
|
+
* or chip component if it needs to be clickable.
|
|
291
|
+
* - For long text — badges are sized for one or two words.
|
|
292
|
+
*/
|
|
293
|
+
interface HTMLBsBadgeElement extends Components.BsBadge, HTMLStencilElement {
|
|
294
|
+
}
|
|
295
|
+
var HTMLBsBadgeElement: {
|
|
296
|
+
prototype: HTMLBsBadgeElement;
|
|
297
|
+
new (): HTMLBsBadgeElement;
|
|
298
|
+
};
|
|
299
|
+
/**
|
|
300
|
+
* A clickable action element for the single most important action in a given context.
|
|
301
|
+
* ## When to use
|
|
302
|
+
* - The primary call to action on a screen or within a card/modal (e.g. "Book room", "Confirm").
|
|
303
|
+
* - Secondary, lower-emphasis actions alongside it (use `variant="neutral"`).
|
|
304
|
+
* - `variant="error"` for destructive/irreversible actions (e.g. "Delete account") — per
|
|
305
|
+
* BrandSync guidance, destructive actions should always use the error variant, never
|
|
306
|
+
* `neutral`, so the visual weight matches the risk of the action.
|
|
307
|
+
* ## When not to use
|
|
308
|
+
* - For navigation between pages — use a link/nav component instead, a button implies an
|
|
309
|
+
* in-page action, not a destination change.
|
|
310
|
+
* - For more than one primary-emphasis action in the same view — pick one, demote the rest to
|
|
311
|
+
* `neutral`.
|
|
312
|
+
* - `error` purely for visual emphasis — it signals a destructive action to the user, so reserve
|
|
313
|
+
* it for actions that actually delete/revoke/undo something.
|
|
314
|
+
* @prop --bs-button-radius - Corner radius. Aliased to `--bs-border-radius-100` by default.
|
|
315
|
+
* @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
316
|
+
* @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
317
|
+
* @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
318
|
+
*/
|
|
319
|
+
interface HTMLBsButtonElement extends Components.BsButton, HTMLStencilElement {
|
|
320
|
+
}
|
|
321
|
+
var HTMLBsButtonElement: {
|
|
322
|
+
prototype: HTMLBsButtonElement;
|
|
323
|
+
new (): HTMLBsButtonElement;
|
|
324
|
+
};
|
|
325
|
+
/**
|
|
326
|
+
* A shape-matched loading placeholder for `bs-button`, shown while the real label/action isn't
|
|
327
|
+
* known yet (e.g. still being fetched from an API). Sized to match `bs-button`'s `sm`/`md`/`lg`
|
|
328
|
+
* heights so layout doesn't shift once the real button renders.
|
|
329
|
+
* This is not a submit-in-progress spinner — that's a different concern (a button that's
|
|
330
|
+
* already rendered but waiting on an async action it triggered). Use this component only when
|
|
331
|
+
* the button itself doesn't exist yet.
|
|
332
|
+
* ## When to use
|
|
333
|
+
* - In place of a `bs-button` whose label/visibility depends on data that hasn't loaded yet.
|
|
334
|
+
* ## When not to use
|
|
335
|
+
* - While a button's own click handler is running (e.g. a submit request in flight) — render the
|
|
336
|
+
* real `bs-button` and show its own busy/spinner state instead.
|
|
337
|
+
* @prop --bs-button-skeleton-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
338
|
+
* @prop --bs-button-skeleton-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
339
|
+
* @prop --bs-button-skeleton-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
340
|
+
* @prop --bs-button-skeleton-width - Placeholder width. Defaults to `96px`.
|
|
341
|
+
*/
|
|
342
|
+
interface HTMLBsButtonSkeletonElement extends Components.BsButtonSkeleton, HTMLStencilElement {
|
|
343
|
+
}
|
|
344
|
+
var HTMLBsButtonSkeletonElement: {
|
|
345
|
+
prototype: HTMLBsButtonSkeletonElement;
|
|
346
|
+
new (): HTMLBsButtonSkeletonElement;
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* A bounded surface for grouping related content — a summary, a form section, a list item.
|
|
350
|
+
* ## When to use
|
|
351
|
+
* - Grouping a self-contained piece of content that needs visual separation from the page
|
|
352
|
+
* background (e.g. a booking summary, a settings section).
|
|
353
|
+
* ## When not to use
|
|
354
|
+
* - As the only structural element on a page — cards group content, they don't replace layout.
|
|
355
|
+
* - For a dismissible/transient message — use a modal or a dedicated notification component.
|
|
356
|
+
*/
|
|
357
|
+
interface HTMLBsCardElement extends Components.BsCard, HTMLStencilElement {
|
|
358
|
+
}
|
|
359
|
+
var HTMLBsCardElement: {
|
|
360
|
+
prototype: HTMLBsCardElement;
|
|
361
|
+
new (): HTMLBsCardElement;
|
|
362
|
+
};
|
|
363
|
+
interface HTMLBsComposerElementEventMap {
|
|
364
|
+
"bsInput": string;
|
|
365
|
+
"bsSubmit": void;
|
|
366
|
+
"bsStop": void;
|
|
367
|
+
"bsVoiceConfirm": void;
|
|
368
|
+
"bsAttach": void;
|
|
369
|
+
"bsMicToggle": void;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* A chat composer input for Genie AI-style conversational interfaces: a text field
|
|
373
|
+
* plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
|
|
374
|
+
* icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
|
|
375
|
+
* ## When to use
|
|
376
|
+
* - The message-entry bar for an AI chat/assistant or human support conversation.
|
|
377
|
+
* ## When not to use
|
|
378
|
+
* - A general-purpose text field — use `bs-input` instead; this component's layout and states are
|
|
379
|
+
* purpose-built for a chat composer, not a generic form field.
|
|
380
|
+
* @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
|
|
381
|
+
* @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
|
|
382
|
+
* @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
|
|
383
|
+
* @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
|
|
384
|
+
* @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
|
|
385
|
+
* @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
|
|
386
|
+
* @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
|
|
387
|
+
* @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
|
|
388
|
+
* @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
|
|
389
|
+
* @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
|
|
390
|
+
* @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
|
|
391
|
+
* @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
|
|
392
|
+
* @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
|
|
393
|
+
* @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
|
|
394
|
+
* @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
|
|
395
|
+
* @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
|
|
396
|
+
* @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
|
|
397
|
+
*/
|
|
398
|
+
interface HTMLBsComposerElement extends Components.BsComposer, HTMLStencilElement {
|
|
399
|
+
addEventListener<K extends keyof HTMLBsComposerElementEventMap>(type: K, listener: (this: HTMLBsComposerElement, ev: BsComposerCustomEvent<HTMLBsComposerElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
400
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
401
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
402
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
403
|
+
removeEventListener<K extends keyof HTMLBsComposerElementEventMap>(type: K, listener: (this: HTMLBsComposerElement, ev: BsComposerCustomEvent<HTMLBsComposerElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
404
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
405
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
406
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
407
|
+
}
|
|
408
|
+
var HTMLBsComposerElement: {
|
|
409
|
+
prototype: HTMLBsComposerElement;
|
|
410
|
+
new (): HTMLBsComposerElement;
|
|
411
|
+
};
|
|
412
|
+
interface HTMLBsDataTableElementEventMap {
|
|
413
|
+
"bsSort": { column: string; direction: 'asc' | 'desc' };
|
|
414
|
+
"bsRowSelect": { id: string | number; selected: boolean };
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* A sortable, optionally row-selectable table for tabular data.
|
|
418
|
+
* `columns`, `rows`, and `cellRenderer` are JS-property-only — HTML attributes can only carry
|
|
419
|
+
* strings, so arrays/objects/functions must be set via `element.rows = [...]` etc., not as
|
|
420
|
+
* attributes. See CONVENTIONS.md.
|
|
421
|
+
* ## When to use
|
|
422
|
+
* - Comparing structured records across the same set of fields (a list of people, bookings, etc.).
|
|
423
|
+
* ## When not to use
|
|
424
|
+
* - A handful of unrelated key/value pairs — a simple list or card is lighter-weight.
|
|
425
|
+
* - Deeply nested/hierarchical data — this component renders one flat row per record.
|
|
426
|
+
*/
|
|
427
|
+
interface HTMLBsDataTableElement extends Components.BsDataTable, HTMLStencilElement {
|
|
428
|
+
addEventListener<K extends keyof HTMLBsDataTableElementEventMap>(type: K, listener: (this: HTMLBsDataTableElement, ev: BsDataTableCustomEvent<HTMLBsDataTableElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
429
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
430
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
431
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
432
|
+
removeEventListener<K extends keyof HTMLBsDataTableElementEventMap>(type: K, listener: (this: HTMLBsDataTableElement, ev: BsDataTableCustomEvent<HTMLBsDataTableElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
433
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
434
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
435
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
436
|
+
}
|
|
437
|
+
var HTMLBsDataTableElement: {
|
|
438
|
+
prototype: HTMLBsDataTableElement;
|
|
439
|
+
new (): HTMLBsDataTableElement;
|
|
440
|
+
};
|
|
441
|
+
interface HTMLBsInputElementEventMap {
|
|
442
|
+
"bsInput": string;
|
|
443
|
+
"bsChange": string;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* A single-line text field with an optional label, description, and error state.
|
|
447
|
+
* ## When to use
|
|
448
|
+
* - Collecting a single line of free-text, email, password, or numeric input.
|
|
449
|
+
* - Pair with `error` for inline validation feedback tied to that specific field.
|
|
450
|
+
* ## When not to use
|
|
451
|
+
* - Multi-line text — this component has no `textarea` mode.
|
|
452
|
+
* - A fixed set of choices — use a select/radio/checkbox component instead of free text.
|
|
453
|
+
*/
|
|
454
|
+
interface HTMLBsInputElement extends Components.BsInput, HTMLStencilElement {
|
|
455
|
+
addEventListener<K extends keyof HTMLBsInputElementEventMap>(type: K, listener: (this: HTMLBsInputElement, ev: BsInputCustomEvent<HTMLBsInputElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
456
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
457
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
458
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
459
|
+
removeEventListener<K extends keyof HTMLBsInputElementEventMap>(type: K, listener: (this: HTMLBsInputElement, ev: BsInputCustomEvent<HTMLBsInputElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
460
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
461
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
462
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
463
|
+
}
|
|
464
|
+
var HTMLBsInputElement: {
|
|
465
|
+
prototype: HTMLBsInputElement;
|
|
466
|
+
new (): HTMLBsInputElement;
|
|
467
|
+
};
|
|
468
|
+
interface HTMLBsModalElementEventMap {
|
|
469
|
+
"bsClose": void;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* An overlay dialog that interrupts the current flow for a focused task or confirmation.
|
|
473
|
+
* Closes itself on backdrop click, Escape, or its own close button, and emits `bsClose`.
|
|
474
|
+
* ## When to use
|
|
475
|
+
* - Confirming a consequential action (e.g. "Confirm booking") before it takes effect.
|
|
476
|
+
* - A short, focused task that doesn't warrant navigating to a new page.
|
|
477
|
+
* ## When not to use
|
|
478
|
+
* - For non-blocking status messages — use a toast/notification instead of interrupting the user.
|
|
479
|
+
* - For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a
|
|
480
|
+
* modal that just gets taller and taller.
|
|
481
|
+
*/
|
|
482
|
+
interface HTMLBsModalElement extends Components.BsModal, HTMLStencilElement {
|
|
483
|
+
addEventListener<K extends keyof HTMLBsModalElementEventMap>(type: K, listener: (this: HTMLBsModalElement, ev: BsModalCustomEvent<HTMLBsModalElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
484
|
+
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
485
|
+
addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
486
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
487
|
+
removeEventListener<K extends keyof HTMLBsModalElementEventMap>(type: K, listener: (this: HTMLBsModalElement, ev: BsModalCustomEvent<HTMLBsModalElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
|
|
488
|
+
removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
489
|
+
removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
|
|
490
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
491
|
+
}
|
|
492
|
+
var HTMLBsModalElement: {
|
|
493
|
+
prototype: HTMLBsModalElement;
|
|
494
|
+
new (): HTMLBsModalElement;
|
|
495
|
+
};
|
|
496
|
+
interface HTMLElementTagNameMap {
|
|
497
|
+
"bs-badge": HTMLBsBadgeElement;
|
|
498
|
+
"bs-button": HTMLBsButtonElement;
|
|
499
|
+
"bs-button-skeleton": HTMLBsButtonSkeletonElement;
|
|
500
|
+
"bs-card": HTMLBsCardElement;
|
|
501
|
+
"bs-composer": HTMLBsComposerElement;
|
|
502
|
+
"bs-data-table": HTMLBsDataTableElement;
|
|
503
|
+
"bs-input": HTMLBsInputElement;
|
|
504
|
+
"bs-modal": HTMLBsModalElement;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
declare namespace LocalJSX {
|
|
508
|
+
/**
|
|
509
|
+
* A small status or category pill, usually paired with a label or list item.
|
|
510
|
+
* ## When to use
|
|
511
|
+
* - Communicating a short, fixed status (e.g. "Active", "On leave") or category label.
|
|
512
|
+
* ## When not to use
|
|
513
|
+
* - As an interactive/clickable element — a badge is a label, not a control. Use a button
|
|
514
|
+
* or chip component if it needs to be clickable.
|
|
515
|
+
* - For long text — badges are sized for one or two words.
|
|
516
|
+
*/
|
|
517
|
+
interface BsBadge {
|
|
518
|
+
/**
|
|
519
|
+
* Maps directly to the brandsync-tokens `--bs-badge-bg-*` / `--bs-badge-text-*` sets.
|
|
520
|
+
* @default 'default'
|
|
521
|
+
*/
|
|
522
|
+
"variant"?: BsBadgeVariant;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* A clickable action element for the single most important action in a given context.
|
|
526
|
+
* ## When to use
|
|
527
|
+
* - The primary call to action on a screen or within a card/modal (e.g. "Book room", "Confirm").
|
|
528
|
+
* - Secondary, lower-emphasis actions alongside it (use `variant="neutral"`).
|
|
529
|
+
* - `variant="error"` for destructive/irreversible actions (e.g. "Delete account") — per
|
|
530
|
+
* BrandSync guidance, destructive actions should always use the error variant, never
|
|
531
|
+
* `neutral`, so the visual weight matches the risk of the action.
|
|
532
|
+
* ## When not to use
|
|
533
|
+
* - For navigation between pages — use a link/nav component instead, a button implies an
|
|
534
|
+
* in-page action, not a destination change.
|
|
535
|
+
* - For more than one primary-emphasis action in the same view — pick one, demote the rest to
|
|
536
|
+
* `neutral`.
|
|
537
|
+
* - `error` purely for visual emphasis — it signals a destructive action to the user, so reserve
|
|
538
|
+
* it for actions that actually delete/revoke/undo something.
|
|
539
|
+
* @prop --bs-button-radius - Corner radius. Aliased to `--bs-border-radius-100` by default.
|
|
540
|
+
* @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
541
|
+
* @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
542
|
+
* @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
543
|
+
*/
|
|
544
|
+
interface BsButton {
|
|
545
|
+
/**
|
|
546
|
+
* Accessible name for the button. Required for icon-only usage (no visible label text via the default slot) so screen readers still announce what the button does. Stencil reflects this camelCase prop to the `aria-label` HTML attribute automatically.
|
|
547
|
+
* @default null
|
|
548
|
+
*/
|
|
549
|
+
"ariaLabel"?: string | null;
|
|
550
|
+
/**
|
|
551
|
+
* Disables the button and applies the disabled token set.
|
|
552
|
+
* @default false
|
|
553
|
+
*/
|
|
554
|
+
"disabled"?: boolean;
|
|
555
|
+
/**
|
|
556
|
+
* Sizing scale.
|
|
557
|
+
* @default 'md'
|
|
558
|
+
*/
|
|
559
|
+
"size"?: BsButtonSize;
|
|
560
|
+
/**
|
|
561
|
+
* Native `<button>` type.
|
|
562
|
+
* @default 'button'
|
|
563
|
+
*/
|
|
564
|
+
"type"?: 'button' | 'submit' | 'reset';
|
|
565
|
+
/**
|
|
566
|
+
* Visual style. Maps directly to the brandsync-tokens `--bs-button-*` semantic set. `error` is for destructive/irreversible actions per BrandSync guidance, not a stronger emphasis alternative to `primary`.
|
|
567
|
+
* @default 'primary'
|
|
568
|
+
*/
|
|
569
|
+
"variant"?: BsButtonVariant;
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* A shape-matched loading placeholder for `bs-button`, shown while the real label/action isn't
|
|
573
|
+
* known yet (e.g. still being fetched from an API). Sized to match `bs-button`'s `sm`/`md`/`lg`
|
|
574
|
+
* heights so layout doesn't shift once the real button renders.
|
|
575
|
+
* This is not a submit-in-progress spinner — that's a different concern (a button that's
|
|
576
|
+
* already rendered but waiting on an async action it triggered). Use this component only when
|
|
577
|
+
* the button itself doesn't exist yet.
|
|
578
|
+
* ## When to use
|
|
579
|
+
* - In place of a `bs-button` whose label/visibility depends on data that hasn't loaded yet.
|
|
580
|
+
* ## When not to use
|
|
581
|
+
* - While a button's own click handler is running (e.g. a submit request in flight) — render the
|
|
582
|
+
* real `bs-button` and show its own busy/spinner state instead.
|
|
583
|
+
* @prop --bs-button-skeleton-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
584
|
+
* @prop --bs-button-skeleton-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
585
|
+
* @prop --bs-button-skeleton-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
586
|
+
* @prop --bs-button-skeleton-width - Placeholder width. Defaults to `96px`.
|
|
587
|
+
*/
|
|
588
|
+
interface BsButtonSkeleton {
|
|
589
|
+
/**
|
|
590
|
+
* Sizing scale, matching the `bs-button` size it stands in for.
|
|
591
|
+
* @default 'md'
|
|
592
|
+
*/
|
|
593
|
+
"size"?: BsButtonSize1;
|
|
594
|
+
}
|
|
595
|
+
/**
|
|
596
|
+
* A bounded surface for grouping related content — a summary, a form section, a list item.
|
|
597
|
+
* ## When to use
|
|
598
|
+
* - Grouping a self-contained piece of content that needs visual separation from the page
|
|
599
|
+
* background (e.g. a booking summary, a settings section).
|
|
600
|
+
* ## When not to use
|
|
601
|
+
* - As the only structural element on a page — cards group content, they don't replace layout.
|
|
602
|
+
* - For a dismissible/transient message — use a modal or a dedicated notification component.
|
|
603
|
+
*/
|
|
604
|
+
interface BsCard {
|
|
605
|
+
/**
|
|
606
|
+
* Maps to the brandsync-tokens `--bs-paper-bg-*` set — Brandsync's tokens don't have a dedicated "card" component yet, so this reuses the existing Paper surface tokens.
|
|
607
|
+
* @default 'raised'
|
|
608
|
+
*/
|
|
609
|
+
"surface"?: BsCardSurface;
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* A chat composer input for Genie AI-style conversational interfaces: a text field
|
|
613
|
+
* plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
|
|
614
|
+
* icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
|
|
615
|
+
* ## When to use
|
|
616
|
+
* - The message-entry bar for an AI chat/assistant or human support conversation.
|
|
617
|
+
* ## When not to use
|
|
618
|
+
* - A general-purpose text field — use `bs-input` instead; this component's layout and states are
|
|
619
|
+
* purpose-built for a chat composer, not a generic form field.
|
|
620
|
+
* @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
|
|
621
|
+
* @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
|
|
622
|
+
* @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
|
|
623
|
+
* @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
|
|
624
|
+
* @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
|
|
625
|
+
* @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
|
|
626
|
+
* @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
|
|
627
|
+
* @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
|
|
628
|
+
* @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
|
|
629
|
+
* @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
|
|
630
|
+
* @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
|
|
631
|
+
* @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
|
|
632
|
+
* @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
|
|
633
|
+
* @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
|
|
634
|
+
* @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
|
|
635
|
+
* @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
|
|
636
|
+
* @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
|
|
637
|
+
*/
|
|
638
|
+
interface BsComposer {
|
|
639
|
+
/**
|
|
640
|
+
* Accessible name for the text field. This component has no visible `<label>` (chat composers don't show one in the design), so `ariaLabel` is the only way a consumer gives the textbox an accessible name -- set it in every real usage.
|
|
641
|
+
* @default null
|
|
642
|
+
*/
|
|
643
|
+
"ariaLabel"?: string | null;
|
|
644
|
+
/**
|
|
645
|
+
* Fires when the "+" attach button is clicked.
|
|
646
|
+
*/
|
|
647
|
+
"onBsAttach"?: (event: BsComposerCustomEvent<void>) => void;
|
|
648
|
+
/**
|
|
649
|
+
* Fires on every keystroke in the text field, with the current value.
|
|
650
|
+
*/
|
|
651
|
+
"onBsInput"?: (event: BsComposerCustomEvent<string>) => void;
|
|
652
|
+
/**
|
|
653
|
+
* Fires when the mic/stop-recording button is clicked. The consumer decides what that means (e.g. start recording when idle/generating, or stop recording when `state="recording"`).
|
|
654
|
+
*/
|
|
655
|
+
"onBsMicToggle"?: (event: BsComposerCustomEvent<void>) => void;
|
|
656
|
+
/**
|
|
657
|
+
* Fires when the primary action button is clicked while `state="generating"`.
|
|
658
|
+
*/
|
|
659
|
+
"onBsStop"?: (event: BsComposerCustomEvent<void>) => void;
|
|
660
|
+
/**
|
|
661
|
+
* Fires when the primary action button is clicked while `state="idle"`.
|
|
662
|
+
*/
|
|
663
|
+
"onBsSubmit"?: (event: BsComposerCustomEvent<void>) => void;
|
|
664
|
+
/**
|
|
665
|
+
* Fires when the primary action button is clicked while `state="recording"`.
|
|
666
|
+
*/
|
|
667
|
+
"onBsVoiceConfirm"?: (event: BsComposerCustomEvent<void>) => void;
|
|
668
|
+
/**
|
|
669
|
+
* Overrides the variant's default placeholder.
|
|
670
|
+
*/
|
|
671
|
+
"placeholder"?: string;
|
|
672
|
+
/**
|
|
673
|
+
* Which of the four mutually-exclusive composer states to render: `idle` (send, enabled), `generating` (stop, while the AI is responding), `disabled` (send, but not interactive), or `recording` (voice input in progress -- shows a waveform and a confirm action).
|
|
674
|
+
* @default 'idle'
|
|
675
|
+
*/
|
|
676
|
+
"state"?: BsComposerState;
|
|
677
|
+
/**
|
|
678
|
+
* Current text value. Native `input` events don't cross the Shadow DOM boundary, so this component re-dispatches them as a `bsInput` custom event instead.
|
|
679
|
+
* @default ''
|
|
680
|
+
*/
|
|
681
|
+
"value"?: string;
|
|
682
|
+
/**
|
|
683
|
+
* Which flavor of composer this is: changes the *default* placeholder text (set `placeholder` directly to override it) and, per the Figma design, renders the container border dashed instead of solid for `'human'` -- a deliberate visual cue distinguishing a human-support composer from the AI one, not a layout/token difference.
|
|
684
|
+
* @default 'ai'
|
|
685
|
+
*/
|
|
686
|
+
"variant"?: BsComposerVariant;
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* A sortable, optionally row-selectable table for tabular data.
|
|
690
|
+
* `columns`, `rows`, and `cellRenderer` are JS-property-only — HTML attributes can only carry
|
|
691
|
+
* strings, so arrays/objects/functions must be set via `element.rows = [...]` etc., not as
|
|
692
|
+
* attributes. See CONVENTIONS.md.
|
|
693
|
+
* ## When to use
|
|
694
|
+
* - Comparing structured records across the same set of fields (a list of people, bookings, etc.).
|
|
695
|
+
* ## When not to use
|
|
696
|
+
* - A handful of unrelated key/value pairs — a simple list or card is lighter-weight.
|
|
697
|
+
* - Deeply nested/hierarchical data — this component renders one flat row per record.
|
|
698
|
+
*/
|
|
699
|
+
interface BsDataTable {
|
|
700
|
+
/**
|
|
701
|
+
* Optional custom cell renderer, e.g. for an actions column. Function props are JS-property-only, same as array props -- there is no attribute equivalent. Falls back to the raw cell value.
|
|
702
|
+
*/
|
|
703
|
+
"cellRenderer"?: (row: BsDataTableRow, column: BsDataTableColumn) => string;
|
|
704
|
+
/**
|
|
705
|
+
* Array prop -- must be set as a JS property (`el.columns = [...]`), not an HTML attribute, since attributes can only carry strings. See CONVENTIONS.md.
|
|
706
|
+
* @default []
|
|
707
|
+
*/
|
|
708
|
+
"columns"?: BsDataTableColumn[];
|
|
709
|
+
"onBsRowSelect"?: (event: BsDataTableCustomEvent<{ id: string | number; selected: boolean }>) => void;
|
|
710
|
+
"onBsSort"?: (event: BsDataTableCustomEvent<{ column: string; direction: 'asc' | 'desc' }>) => void;
|
|
711
|
+
/**
|
|
712
|
+
* Array prop -- same JS-property-only rule as `columns`.
|
|
713
|
+
* @default []
|
|
714
|
+
*/
|
|
715
|
+
"rows"?: BsDataTableRow[];
|
|
716
|
+
/**
|
|
717
|
+
* @default false
|
|
718
|
+
*/
|
|
719
|
+
"selectable"?: boolean;
|
|
720
|
+
"sortColumn"?: string;
|
|
721
|
+
/**
|
|
722
|
+
* @default 'asc'
|
|
723
|
+
*/
|
|
724
|
+
"sortDirection"?: 'asc' | 'desc';
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* A single-line text field with an optional label, description, and error state.
|
|
728
|
+
* ## When to use
|
|
729
|
+
* - Collecting a single line of free-text, email, password, or numeric input.
|
|
730
|
+
* - Pair with `error` for inline validation feedback tied to that specific field.
|
|
731
|
+
* ## When not to use
|
|
732
|
+
* - Multi-line text — this component has no `textarea` mode.
|
|
733
|
+
* - A fixed set of choices — use a select/radio/checkbox component instead of free text.
|
|
734
|
+
*/
|
|
735
|
+
interface BsInput {
|
|
736
|
+
"description"?: string;
|
|
737
|
+
/**
|
|
738
|
+
* @default false
|
|
739
|
+
*/
|
|
740
|
+
"disabled"?: boolean;
|
|
741
|
+
"error"?: string;
|
|
742
|
+
"label"?: string;
|
|
743
|
+
"onBsChange"?: (event: BsInputCustomEvent<string>) => void;
|
|
744
|
+
"onBsInput"?: (event: BsInputCustomEvent<string>) => void;
|
|
745
|
+
"placeholder"?: string;
|
|
746
|
+
/**
|
|
747
|
+
* @default 'text'
|
|
748
|
+
*/
|
|
749
|
+
"type"?: 'text' | 'email' | 'password' | 'number';
|
|
750
|
+
/**
|
|
751
|
+
* Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this component re-dispatches them as `bsInput`/`bsChange` custom events instead.
|
|
752
|
+
* @default ''
|
|
753
|
+
*/
|
|
754
|
+
"value"?: string;
|
|
755
|
+
}
|
|
756
|
+
/**
|
|
757
|
+
* An overlay dialog that interrupts the current flow for a focused task or confirmation.
|
|
758
|
+
* Closes itself on backdrop click, Escape, or its own close button, and emits `bsClose`.
|
|
759
|
+
* ## When to use
|
|
760
|
+
* - Confirming a consequential action (e.g. "Confirm booking") before it takes effect.
|
|
761
|
+
* - A short, focused task that doesn't warrant navigating to a new page.
|
|
762
|
+
* ## When not to use
|
|
763
|
+
* - For non-blocking status messages — use a toast/notification instead of interrupting the user.
|
|
764
|
+
* - For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a
|
|
765
|
+
* modal that just gets taller and taller.
|
|
766
|
+
*/
|
|
767
|
+
interface BsModal {
|
|
768
|
+
"heading"?: string;
|
|
769
|
+
"onBsClose"?: (event: BsModalCustomEvent<void>) => void;
|
|
770
|
+
/**
|
|
771
|
+
* Mutable + reflected so the component can close itself (backdrop click, Escape, close button) the same way a native `<dialog>` does, while still emitting `bsClose` for the consumer to react to.
|
|
772
|
+
* @default false
|
|
773
|
+
*/
|
|
774
|
+
"open"?: boolean;
|
|
775
|
+
/**
|
|
776
|
+
* @default 'md'
|
|
777
|
+
*/
|
|
778
|
+
"size"?: BsModalSize;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
interface BsBadgeAttributes {
|
|
782
|
+
"variant": BsBadgeVariant;
|
|
783
|
+
}
|
|
784
|
+
interface BsButtonAttributes {
|
|
785
|
+
"variant": BsButtonVariant;
|
|
786
|
+
"size": BsButtonSize;
|
|
787
|
+
"disabled": boolean;
|
|
788
|
+
"type": 'button' | 'submit' | 'reset';
|
|
789
|
+
"ariaLabel": string | null;
|
|
790
|
+
}
|
|
791
|
+
interface BsButtonSkeletonAttributes {
|
|
792
|
+
"size": BsButtonSize;
|
|
793
|
+
}
|
|
794
|
+
interface BsCardAttributes {
|
|
795
|
+
"surface": BsCardSurface;
|
|
796
|
+
}
|
|
797
|
+
interface BsComposerAttributes {
|
|
798
|
+
"variant": BsComposerVariant;
|
|
799
|
+
"placeholder": string;
|
|
800
|
+
"value": string;
|
|
801
|
+
"state": BsComposerState;
|
|
802
|
+
"ariaLabel": string | null;
|
|
803
|
+
}
|
|
804
|
+
interface BsDataTableAttributes {
|
|
805
|
+
"sortColumn": string;
|
|
806
|
+
"sortDirection": 'asc' | 'desc';
|
|
807
|
+
"selectable": boolean;
|
|
808
|
+
}
|
|
809
|
+
interface BsInputAttributes {
|
|
810
|
+
"value": string;
|
|
811
|
+
"type": 'text' | 'email' | 'password' | 'number';
|
|
812
|
+
"label": string;
|
|
813
|
+
"placeholder": string;
|
|
814
|
+
"description": string;
|
|
815
|
+
"error": string;
|
|
816
|
+
"disabled": boolean;
|
|
817
|
+
}
|
|
818
|
+
interface BsModalAttributes {
|
|
819
|
+
"open": boolean;
|
|
820
|
+
"heading": string;
|
|
821
|
+
"size": BsModalSize;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
interface IntrinsicElements {
|
|
825
|
+
"bs-badge": Omit<BsBadge, keyof BsBadgeAttributes> & { [K in keyof BsBadge & keyof BsBadgeAttributes]?: BsBadge[K] } & { [K in keyof BsBadge & keyof BsBadgeAttributes as `attr:${K}`]?: BsBadgeAttributes[K] } & { [K in keyof BsBadge & keyof BsBadgeAttributes as `prop:${K}`]?: BsBadge[K] };
|
|
826
|
+
"bs-button": Omit<BsButton, keyof BsButtonAttributes> & { [K in keyof BsButton & keyof BsButtonAttributes]?: BsButton[K] } & { [K in keyof BsButton & keyof BsButtonAttributes as `attr:${K}`]?: BsButtonAttributes[K] } & { [K in keyof BsButton & keyof BsButtonAttributes as `prop:${K}`]?: BsButton[K] };
|
|
827
|
+
"bs-button-skeleton": Omit<BsButtonSkeleton, keyof BsButtonSkeletonAttributes> & { [K in keyof BsButtonSkeleton & keyof BsButtonSkeletonAttributes]?: BsButtonSkeleton[K] } & { [K in keyof BsButtonSkeleton & keyof BsButtonSkeletonAttributes as `attr:${K}`]?: BsButtonSkeletonAttributes[K] } & { [K in keyof BsButtonSkeleton & keyof BsButtonSkeletonAttributes as `prop:${K}`]?: BsButtonSkeleton[K] };
|
|
828
|
+
"bs-card": Omit<BsCard, keyof BsCardAttributes> & { [K in keyof BsCard & keyof BsCardAttributes]?: BsCard[K] } & { [K in keyof BsCard & keyof BsCardAttributes as `attr:${K}`]?: BsCardAttributes[K] } & { [K in keyof BsCard & keyof BsCardAttributes as `prop:${K}`]?: BsCard[K] };
|
|
829
|
+
"bs-composer": Omit<BsComposer, keyof BsComposerAttributes> & { [K in keyof BsComposer & keyof BsComposerAttributes]?: BsComposer[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `attr:${K}`]?: BsComposerAttributes[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `prop:${K}`]?: BsComposer[K] };
|
|
830
|
+
"bs-data-table": Omit<BsDataTable, keyof BsDataTableAttributes> & { [K in keyof BsDataTable & keyof BsDataTableAttributes]?: BsDataTable[K] } & { [K in keyof BsDataTable & keyof BsDataTableAttributes as `attr:${K}`]?: BsDataTableAttributes[K] } & { [K in keyof BsDataTable & keyof BsDataTableAttributes as `prop:${K}`]?: BsDataTable[K] };
|
|
831
|
+
"bs-input": Omit<BsInput, keyof BsInputAttributes> & { [K in keyof BsInput & keyof BsInputAttributes]?: BsInput[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `attr:${K}`]?: BsInputAttributes[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `prop:${K}`]?: BsInput[K] };
|
|
832
|
+
"bs-modal": Omit<BsModal, keyof BsModalAttributes> & { [K in keyof BsModal & keyof BsModalAttributes]?: BsModal[K] } & { [K in keyof BsModal & keyof BsModalAttributes as `attr:${K}`]?: BsModalAttributes[K] } & { [K in keyof BsModal & keyof BsModalAttributes as `prop:${K}`]?: BsModal[K] };
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
export { LocalJSX as JSX };
|
|
836
|
+
declare module "@stencil/core" {
|
|
837
|
+
export namespace JSX {
|
|
838
|
+
interface IntrinsicElements {
|
|
839
|
+
/**
|
|
840
|
+
* A small status or category pill, usually paired with a label or list item.
|
|
841
|
+
* ## When to use
|
|
842
|
+
* - Communicating a short, fixed status (e.g. "Active", "On leave") or category label.
|
|
843
|
+
* ## When not to use
|
|
844
|
+
* - As an interactive/clickable element — a badge is a label, not a control. Use a button
|
|
845
|
+
* or chip component if it needs to be clickable.
|
|
846
|
+
* - For long text — badges are sized for one or two words.
|
|
847
|
+
*/
|
|
848
|
+
"bs-badge": LocalJSX.IntrinsicElements["bs-badge"] & JSXBase.HTMLAttributes<HTMLBsBadgeElement>;
|
|
849
|
+
/**
|
|
850
|
+
* A clickable action element for the single most important action in a given context.
|
|
851
|
+
* ## When to use
|
|
852
|
+
* - The primary call to action on a screen or within a card/modal (e.g. "Book room", "Confirm").
|
|
853
|
+
* - Secondary, lower-emphasis actions alongside it (use `variant="neutral"`).
|
|
854
|
+
* - `variant="error"` for destructive/irreversible actions (e.g. "Delete account") — per
|
|
855
|
+
* BrandSync guidance, destructive actions should always use the error variant, never
|
|
856
|
+
* `neutral`, so the visual weight matches the risk of the action.
|
|
857
|
+
* ## When not to use
|
|
858
|
+
* - For navigation between pages — use a link/nav component instead, a button implies an
|
|
859
|
+
* in-page action, not a destination change.
|
|
860
|
+
* - For more than one primary-emphasis action in the same view — pick one, demote the rest to
|
|
861
|
+
* `neutral`.
|
|
862
|
+
* - `error` purely for visual emphasis — it signals a destructive action to the user, so reserve
|
|
863
|
+
* it for actions that actually delete/revoke/undo something.
|
|
864
|
+
* @prop --bs-button-radius - Corner radius. Aliased to `--bs-border-radius-100` by default.
|
|
865
|
+
* @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
866
|
+
* @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
867
|
+
* @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
868
|
+
*/
|
|
869
|
+
"bs-button": LocalJSX.IntrinsicElements["bs-button"] & JSXBase.HTMLAttributes<HTMLBsButtonElement>;
|
|
870
|
+
/**
|
|
871
|
+
* A shape-matched loading placeholder for `bs-button`, shown while the real label/action isn't
|
|
872
|
+
* known yet (e.g. still being fetched from an API). Sized to match `bs-button`'s `sm`/`md`/`lg`
|
|
873
|
+
* heights so layout doesn't shift once the real button renders.
|
|
874
|
+
* This is not a submit-in-progress spinner — that's a different concern (a button that's
|
|
875
|
+
* already rendered but waiting on an async action it triggered). Use this component only when
|
|
876
|
+
* the button itself doesn't exist yet.
|
|
877
|
+
* ## When to use
|
|
878
|
+
* - In place of a `bs-button` whose label/visibility depends on data that hasn't loaded yet.
|
|
879
|
+
* ## When not to use
|
|
880
|
+
* - While a button's own click handler is running (e.g. a submit request in flight) — render the
|
|
881
|
+
* real `bs-button` and show its own busy/spinner state instead.
|
|
882
|
+
* @prop --bs-button-skeleton-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
883
|
+
* @prop --bs-button-skeleton-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
884
|
+
* @prop --bs-button-skeleton-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
885
|
+
* @prop --bs-button-skeleton-width - Placeholder width. Defaults to `96px`.
|
|
886
|
+
*/
|
|
887
|
+
"bs-button-skeleton": LocalJSX.IntrinsicElements["bs-button-skeleton"] & JSXBase.HTMLAttributes<HTMLBsButtonSkeletonElement>;
|
|
888
|
+
/**
|
|
889
|
+
* A bounded surface for grouping related content — a summary, a form section, a list item.
|
|
890
|
+
* ## When to use
|
|
891
|
+
* - Grouping a self-contained piece of content that needs visual separation from the page
|
|
892
|
+
* background (e.g. a booking summary, a settings section).
|
|
893
|
+
* ## When not to use
|
|
894
|
+
* - As the only structural element on a page — cards group content, they don't replace layout.
|
|
895
|
+
* - For a dismissible/transient message — use a modal or a dedicated notification component.
|
|
896
|
+
*/
|
|
897
|
+
"bs-card": LocalJSX.IntrinsicElements["bs-card"] & JSXBase.HTMLAttributes<HTMLBsCardElement>;
|
|
898
|
+
/**
|
|
899
|
+
* A chat composer input for Genie AI-style conversational interfaces: a text field
|
|
900
|
+
* plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
|
|
901
|
+
* icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
|
|
902
|
+
* ## When to use
|
|
903
|
+
* - The message-entry bar for an AI chat/assistant or human support conversation.
|
|
904
|
+
* ## When not to use
|
|
905
|
+
* - A general-purpose text field — use `bs-input` instead; this component's layout and states are
|
|
906
|
+
* purpose-built for a chat composer, not a generic form field.
|
|
907
|
+
* @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
|
|
908
|
+
* @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
|
|
909
|
+
* @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
|
|
910
|
+
* @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
|
|
911
|
+
* @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
|
|
912
|
+
* @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
|
|
913
|
+
* @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
|
|
914
|
+
* @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
|
|
915
|
+
* @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
|
|
916
|
+
* @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
|
|
917
|
+
* @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
|
|
918
|
+
* @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
|
|
919
|
+
* @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
|
|
920
|
+
* @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
|
|
921
|
+
* @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
|
|
922
|
+
* @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
|
|
923
|
+
* @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
|
|
924
|
+
*/
|
|
925
|
+
"bs-composer": LocalJSX.IntrinsicElements["bs-composer"] & JSXBase.HTMLAttributes<HTMLBsComposerElement>;
|
|
926
|
+
/**
|
|
927
|
+
* A sortable, optionally row-selectable table for tabular data.
|
|
928
|
+
* `columns`, `rows`, and `cellRenderer` are JS-property-only — HTML attributes can only carry
|
|
929
|
+
* strings, so arrays/objects/functions must be set via `element.rows = [...]` etc., not as
|
|
930
|
+
* attributes. See CONVENTIONS.md.
|
|
931
|
+
* ## When to use
|
|
932
|
+
* - Comparing structured records across the same set of fields (a list of people, bookings, etc.).
|
|
933
|
+
* ## When not to use
|
|
934
|
+
* - A handful of unrelated key/value pairs — a simple list or card is lighter-weight.
|
|
935
|
+
* - Deeply nested/hierarchical data — this component renders one flat row per record.
|
|
936
|
+
*/
|
|
937
|
+
"bs-data-table": LocalJSX.IntrinsicElements["bs-data-table"] & JSXBase.HTMLAttributes<HTMLBsDataTableElement>;
|
|
938
|
+
/**
|
|
939
|
+
* A single-line text field with an optional label, description, and error state.
|
|
940
|
+
* ## When to use
|
|
941
|
+
* - Collecting a single line of free-text, email, password, or numeric input.
|
|
942
|
+
* - Pair with `error` for inline validation feedback tied to that specific field.
|
|
943
|
+
* ## When not to use
|
|
944
|
+
* - Multi-line text — this component has no `textarea` mode.
|
|
945
|
+
* - A fixed set of choices — use a select/radio/checkbox component instead of free text.
|
|
946
|
+
*/
|
|
947
|
+
"bs-input": LocalJSX.IntrinsicElements["bs-input"] & JSXBase.HTMLAttributes<HTMLBsInputElement>;
|
|
948
|
+
/**
|
|
949
|
+
* An overlay dialog that interrupts the current flow for a focused task or confirmation.
|
|
950
|
+
* Closes itself on backdrop click, Escape, or its own close button, and emits `bsClose`.
|
|
951
|
+
* ## When to use
|
|
952
|
+
* - Confirming a consequential action (e.g. "Confirm booking") before it takes effect.
|
|
953
|
+
* - A short, focused task that doesn't warrant navigating to a new page.
|
|
954
|
+
* ## When not to use
|
|
955
|
+
* - For non-blocking status messages — use a toast/notification instead of interrupting the user.
|
|
956
|
+
* - For a long, multi-step flow — a full page or a dedicated route is usually a better fit than a
|
|
957
|
+
* modal that just gets taller and taller.
|
|
958
|
+
*/
|
|
959
|
+
"bs-modal": LocalJSX.IntrinsicElements["bs-modal"] & JSXBase.HTMLAttributes<HTMLBsModalElement>;
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
}
|