@rippling/rippling-sdk 0.2.0-alpha.37 → 0.2.0-alpha.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/examples/sdui/sdui-crud-todo/sdui-crud-todo.ts +3 -3
  2. package/examples/sdui/sdui-showcase/sdui-showcase.ts +6 -11
  3. package/examples/sdui/sdui-tab-multi-view/sdui-tab-multi-view.ts +14 -24
  4. package/examples/sdui/vote/vote.ts +7 -11
  5. package/lib/manifest/app.d.mts +11 -1
  6. package/lib/manifest/app.d.mts.map +1 -1
  7. package/lib/manifest/app.d.ts +11 -1
  8. package/lib/manifest/app.d.ts.map +1 -1
  9. package/lib/manifest/app.js +42 -1
  10. package/lib/manifest/app.js.map +1 -1
  11. package/lib/manifest/app.mjs +42 -1
  12. package/lib/manifest/app.mjs.map +1 -1
  13. package/lib/manifest/category.d.mts +14 -3
  14. package/lib/manifest/category.d.mts.map +1 -1
  15. package/lib/manifest/category.d.ts +14 -3
  16. package/lib/manifest/category.d.ts.map +1 -1
  17. package/lib/manifest/category.js +25 -3
  18. package/lib/manifest/category.js.map +1 -1
  19. package/lib/manifest/category.mjs +25 -3
  20. package/lib/manifest/category.mjs.map +1 -1
  21. package/lib/manifest/custom-object-field-section.d.mts +13 -0
  22. package/lib/manifest/custom-object-field-section.d.mts.map +1 -1
  23. package/lib/manifest/custom-object-field-section.d.ts +13 -0
  24. package/lib/manifest/custom-object-field-section.d.ts.map +1 -1
  25. package/lib/manifest/custom-object-field-section.js +22 -1
  26. package/lib/manifest/custom-object-field-section.js.map +1 -1
  27. package/lib/manifest/custom-object-field-section.mjs +22 -1
  28. package/lib/manifest/custom-object-field-section.mjs.map +1 -1
  29. package/lib/manifest/custom-object-page-layout.d.mts +23 -0
  30. package/lib/manifest/custom-object-page-layout.d.mts.map +1 -1
  31. package/lib/manifest/custom-object-page-layout.d.ts +23 -0
  32. package/lib/manifest/custom-object-page-layout.d.ts.map +1 -1
  33. package/lib/manifest/custom-object-page-layout.js +45 -2
  34. package/lib/manifest/custom-object-page-layout.js.map +1 -1
  35. package/lib/manifest/custom-object-page-layout.mjs +45 -2
  36. package/lib/manifest/custom-object-page-layout.mjs.map +1 -1
  37. package/lib/manifest/custom-object.d.mts +41 -2
  38. package/lib/manifest/custom-object.d.mts.map +1 -1
  39. package/lib/manifest/custom-object.d.ts +41 -2
  40. package/lib/manifest/custom-object.d.ts.map +1 -1
  41. package/lib/manifest/custom-object.js +70 -3
  42. package/lib/manifest/custom-object.js.map +1 -1
  43. package/lib/manifest/custom-object.mjs +70 -3
  44. package/lib/manifest/custom-object.mjs.map +1 -1
  45. package/lib/manifest/existing-manifest-context.d.mts +87 -0
  46. package/lib/manifest/existing-manifest-context.d.mts.map +1 -0
  47. package/lib/manifest/existing-manifest-context.d.ts +87 -0
  48. package/lib/manifest/existing-manifest-context.d.ts.map +1 -0
  49. package/lib/manifest/existing-manifest-context.js +511 -0
  50. package/lib/manifest/existing-manifest-context.js.map +1 -0
  51. package/lib/manifest/existing-manifest-context.mjs +506 -0
  52. package/lib/manifest/existing-manifest-context.mjs.map +1 -0
  53. package/lib/manifest/field.d.mts +44 -2
  54. package/lib/manifest/field.d.mts.map +1 -1
  55. package/lib/manifest/field.d.ts +44 -2
  56. package/lib/manifest/field.d.ts.map +1 -1
  57. package/lib/manifest/field.js +134 -3
  58. package/lib/manifest/field.js.map +1 -1
  59. package/lib/manifest/field.mjs +134 -3
  60. package/lib/manifest/field.mjs.map +1 -1
  61. package/lib/manifest/index.d.mts +8 -7
  62. package/lib/manifest/index.d.mts.map +1 -1
  63. package/lib/manifest/index.d.ts +8 -7
  64. package/lib/manifest/index.d.ts.map +1 -1
  65. package/lib/manifest/index.js +3 -1
  66. package/lib/manifest/index.js.map +1 -1
  67. package/lib/manifest/index.mjs +5 -4
  68. package/lib/manifest/index.mjs.map +1 -1
  69. package/lib/manifest/list-view.d.mts +17 -0
  70. package/lib/manifest/list-view.d.mts.map +1 -1
  71. package/lib/manifest/list-view.d.ts +17 -0
  72. package/lib/manifest/list-view.d.ts.map +1 -1
  73. package/lib/manifest/list-view.js +38 -1
  74. package/lib/manifest/list-view.js.map +1 -1
  75. package/lib/manifest/list-view.mjs +38 -1
  76. package/lib/manifest/list-view.mjs.map +1 -1
  77. package/lib/manifest/manifest-builder.d.mts +60 -7
  78. package/lib/manifest/manifest-builder.d.mts.map +1 -1
  79. package/lib/manifest/manifest-builder.d.ts +60 -7
  80. package/lib/manifest/manifest-builder.d.ts.map +1 -1
  81. package/lib/manifest/manifest-builder.js +62 -4
  82. package/lib/manifest/manifest-builder.js.map +1 -1
  83. package/lib/manifest/manifest-builder.mjs +62 -4
  84. package/lib/manifest/manifest-builder.mjs.map +1 -1
  85. package/lib/manifest/manifest-function.d.mts +18 -3
  86. package/lib/manifest/manifest-function.d.mts.map +1 -1
  87. package/lib/manifest/manifest-function.d.ts +18 -3
  88. package/lib/manifest/manifest-function.d.ts.map +1 -1
  89. package/lib/manifest/manifest-function.js +44 -3
  90. package/lib/manifest/manifest-function.js.map +1 -1
  91. package/lib/manifest/manifest-function.mjs +44 -3
  92. package/lib/manifest/manifest-function.mjs.map +1 -1
  93. package/lib/manifest/rule.d.mts +17 -0
  94. package/lib/manifest/rule.d.mts.map +1 -1
  95. package/lib/manifest/rule.d.ts +17 -0
  96. package/lib/manifest/rule.d.ts.map +1 -1
  97. package/lib/manifest/rule.js +45 -1
  98. package/lib/manifest/rule.js.map +1 -1
  99. package/lib/manifest/rule.mjs +45 -1
  100. package/lib/manifest/rule.mjs.map +1 -1
  101. package/lib/manifest/sdui-page.d.mts +10 -1
  102. package/lib/manifest/sdui-page.d.mts.map +1 -1
  103. package/lib/manifest/sdui-page.d.ts +10 -1
  104. package/lib/manifest/sdui-page.d.ts.map +1 -1
  105. package/lib/manifest/sdui-page.js +28 -1
  106. package/lib/manifest/sdui-page.js.map +1 -1
  107. package/lib/manifest/sdui-page.mjs +28 -1
  108. package/lib/manifest/sdui-page.mjs.map +1 -1
  109. package/lib/manifest/validation.d.mts +17 -0
  110. package/lib/manifest/validation.d.mts.map +1 -1
  111. package/lib/manifest/validation.d.ts +17 -0
  112. package/lib/manifest/validation.d.ts.map +1 -1
  113. package/lib/manifest/validation.js +31 -1
  114. package/lib/manifest/validation.js.map +1 -1
  115. package/lib/manifest/validation.mjs +31 -1
  116. package/lib/manifest/validation.mjs.map +1 -1
  117. package/lib/sdui/actions.d.mts.map +1 -1
  118. package/lib/sdui/actions.d.ts.map +1 -1
  119. package/lib/sdui/actions.js +23 -13
  120. package/lib/sdui/actions.js.map +1 -1
  121. package/lib/sdui/actions.mjs +23 -13
  122. package/lib/sdui/actions.mjs.map +1 -1
  123. package/lib/sdui/component.d.mts +28 -11
  124. package/lib/sdui/component.d.mts.map +1 -1
  125. package/lib/sdui/component.d.ts +28 -11
  126. package/lib/sdui/component.d.ts.map +1 -1
  127. package/lib/sdui/component.js +69 -36
  128. package/lib/sdui/component.js.map +1 -1
  129. package/lib/sdui/component.mjs +69 -36
  130. package/lib/sdui/component.mjs.map +1 -1
  131. package/lib/sdui/components.d.mts +1141 -132
  132. package/lib/sdui/components.d.mts.map +1 -1
  133. package/lib/sdui/components.d.ts +1141 -132
  134. package/lib/sdui/components.d.ts.map +1 -1
  135. package/lib/sdui/components.js +834 -206
  136. package/lib/sdui/components.js.map +1 -1
  137. package/lib/sdui/components.mjs +830 -203
  138. package/lib/sdui/components.mjs.map +1 -1
  139. package/lib/sdui/directives.d.mts.map +1 -1
  140. package/lib/sdui/directives.d.ts.map +1 -1
  141. package/lib/sdui/directives.js +4 -1
  142. package/lib/sdui/directives.js.map +1 -1
  143. package/lib/sdui/directives.mjs +4 -1
  144. package/lib/sdui/directives.mjs.map +1 -1
  145. package/lib/sdui/index.d.mts +314 -261
  146. package/lib/sdui/index.d.mts.map +1 -1
  147. package/lib/sdui/index.d.ts +314 -261
  148. package/lib/sdui/index.d.ts.map +1 -1
  149. package/lib/sdui/index.js +255 -204
  150. package/lib/sdui/index.js.map +1 -1
  151. package/lib/sdui/index.mjs +128 -103
  152. package/lib/sdui/index.mjs.map +1 -1
  153. package/lib/sdui/propTypes.d.mts +6330 -0
  154. package/lib/sdui/propTypes.d.mts.map +1 -0
  155. package/lib/sdui/propTypes.d.ts +6330 -0
  156. package/lib/sdui/propTypes.d.ts.map +1 -0
  157. package/lib/sdui/propTypes.js +14 -0
  158. package/lib/sdui/propTypes.js.map +1 -0
  159. package/lib/sdui/propTypes.mjs +13 -0
  160. package/lib/sdui/propTypes.mjs.map +1 -0
  161. package/lib/sdui/render.d.mts +1 -1
  162. package/lib/sdui/render.d.mts.map +1 -1
  163. package/lib/sdui/render.d.ts +1 -1
  164. package/lib/sdui/render.d.ts.map +1 -1
  165. package/lib/sdui/render.js +11 -3
  166. package/lib/sdui/render.js.map +1 -1
  167. package/lib/sdui/render.mjs +11 -3
  168. package/lib/sdui/render.mjs.map +1 -1
  169. package/lib/sdui/state.d.mts.map +1 -1
  170. package/lib/sdui/state.d.ts.map +1 -1
  171. package/lib/sdui/state.js +3 -1
  172. package/lib/sdui/state.js.map +1 -1
  173. package/lib/sdui/state.mjs +3 -1
  174. package/lib/sdui/state.mjs.map +1 -1
  175. package/package.json +1 -1
  176. package/src/lib/manifest/app.ts +46 -2
  177. package/src/lib/manifest/category.ts +35 -7
  178. package/src/lib/manifest/custom-object-field-section.ts +37 -1
  179. package/src/lib/manifest/custom-object-page-layout.ts +67 -2
  180. package/src/lib/manifest/custom-object.ts +88 -4
  181. package/src/lib/manifest/existing-manifest-context.ts +673 -0
  182. package/src/lib/manifest/field.ts +160 -3
  183. package/src/lib/manifest/index.ts +39 -4
  184. package/src/lib/manifest/list-view.ts +50 -1
  185. package/src/lib/manifest/manifest-builder.ts +115 -5
  186. package/src/lib/manifest/manifest-function.ts +44 -4
  187. package/src/lib/manifest/rule.ts +60 -1
  188. package/src/lib/manifest/sdui-page.ts +37 -2
  189. package/src/lib/manifest/validation.ts +48 -1
  190. package/src/lib/sdui/actions.ts +23 -10
  191. package/src/lib/sdui/component.ts +84 -44
  192. package/src/lib/sdui/components.ts +1627 -212
  193. package/src/lib/sdui/directives.ts +4 -1
  194. package/src/lib/sdui/index.ts +565 -200
  195. package/src/lib/sdui/propTypes.ts +8470 -0
  196. package/src/lib/sdui/render.ts +13 -5
  197. package/src/lib/sdui/state.ts +8 -2
  198. package/src/version.ts +1 -1
  199. package/version.d.mts +1 -1
  200. package/version.d.ts +1 -1
  201. package/version.js +1 -1
  202. package/version.mjs +1 -1
@@ -1,12 +1,13 @@
1
1
  /**
2
- * AUTO-GENERATED from component-manifest.json
3
- * Generated at: 2026-04-17T04:10:01.126Z
4
- * Components: 128
2
+ * AUTO-GENERATED from catalog-schema.json
3
+ * Components: 154
5
4
  *
6
- * Do not edit manually. Run: npx tsx scripts/codegen-builder.ts
5
+ * Do not edit manually. Run: node tools/sdui/builder/build.js
7
6
  */
7
+ const hasOwn = Object.prototype.hasOwnProperty;
8
8
  function createComponent(type, eventMap = {}) {
9
- return (props = {}) => {
9
+ return (...args) => {
10
+ const props = (args[0] ?? {});
10
11
  const node = { type, props: {}, children: [] };
11
12
  for (const [key, value] of Object.entries(props)) {
12
13
  if (key === 'children') {
@@ -21,105 +22,260 @@ function createComponent(type, eventMap = {}) {
21
22
  else if (key === 'repeat') {
22
23
  node.repeat = value;
23
24
  }
24
- else if (eventMap[key]) {
25
- node.on = node.on || {};
26
- node.on[eventMap[key]] = value;
27
- }
28
25
  else {
29
- node.props[key] = value;
26
+ // hasOwn guards against Object.prototype keys (toString, etc.)
27
+ // matching as events via the prototype chain.
28
+ const eventName = hasOwn.call(eventMap, key) ? eventMap[key] : undefined;
29
+ if (eventName) {
30
+ node.on = node.on || {};
31
+ node.on[eventName] = value;
32
+ }
33
+ else {
34
+ node.props[key] = value;
35
+ }
30
36
  }
31
37
  }
32
38
  return node;
33
39
  };
34
40
  }
35
- export const TextInput = createComponent('TextInput', {
36
- onChange: 'change',
37
- onBlur: 'blur',
38
- onFocus: 'focus',
39
- onClick: 'click',
40
- onKeydown: 'keydown',
41
- onKeyup: 'keyup',
42
- onPaste: 'paste',
43
- onMouseenter: 'mouseenter',
44
- onMouseleave: 'mouseleave',
41
+ /**
42
+ * Placeholder for states like empty, success, error, and loading, featuring animations, icons, text, and action buttons.
43
+ */
44
+ export const ActionCard = createComponent('ActionCard', {
45
+ onPressPrimary: 'pressPrimary',
46
+ onPressSecondary: 'pressSecondary',
45
47
  });
46
- export const Select = createComponent('Select', {
48
+ /**
49
+ * Branded Rippling AI icon used to indicate AI-powered features or content. Displays the Rippling AI star icon with optional "Rippling AI" label text.
50
+ */
51
+ export const AiIcon = createComponent('AiIcon');
52
+ /**
53
+ * A persistent, high-priority notice that conveys critical information (errors, warnings, success confirmations, or informational messages) and guides users to proceed or resolve issues. Appears with page content and remains visible until dismissed or resolved. Use for system-level or page-level messaging, not for ephemeral feedback (use SnackBar instead) or for interruptions requiring immediate input (use Modal instead).
54
+ */
55
+ export const Alert = createComponent('Alert', {
56
+ onPressPrimary: 'pressPrimary',
57
+ onPressSecondary: 'pressSecondary',
58
+ onDismiss: 'dismiss',
59
+ });
60
+ /**
61
+ * Renders pre-built Lottie animations from a curated library. Each animation type maps to an SVG animation that plays on mount. Use for empty states, onboarding flows, status illustrations, and feature highlights.
62
+ */
63
+ export const Animation = createComponent('Animation');
64
+ /**
65
+ * A full-screen error state placeholder for API or server failures, displaying an animated exclamation icon and an error message. Use when an API call fails and the entire content area should show an error instead of the expected content.
66
+ */
67
+ export const ApiError = createComponent('ApiError');
68
+ /**
69
+ * A skeleton placeholder shown while app group content is loading. Use when the layout of the app group area is known and you want to reduce perceived loading time and prevent layout shift.
70
+ */
71
+ export const AppGroupLoader = createComponent('AppGroupLoader');
72
+ /**
73
+ * A multi-select dropdown for choosing multiple options from grouped categories, with app-group styling. Use when users need to pick several items organized into labeled groups (e.g. apps by category). For single selection or ungrouped options, use Select instead.
74
+ */
75
+ export const AppGroupSelect = createComponent('AppGroupSelect', {
47
76
  onChange: 'change',
48
77
  onBlur: 'blur',
49
78
  onFocus: 'focus',
50
79
  onPaste: 'paste',
51
80
  onMenuToggle: 'menuToggle',
52
81
  });
53
- export const AppGroupSelect = createComponent('AppGroupSelect', {
82
+ /**
83
+ * Application navigation bar with routing support. Displays a horizontal tab bar or vertical sidebar with links, icons, badges, and optional nested sub-navigation. Use for top-level page navigation.
84
+ */
85
+ export const AppNavBar = createComponent('AppNavBar', {
86
+ onNavigate: 'navigate',
87
+ onAction: 'action',
88
+ });
89
+ /**
90
+ * A horizontal rule that visually divides sections of content, with optional centered text (e.g. "OR"). Use for content separation — use Divider for separating individual list items.
91
+ */
92
+ export const AtomsSeparator = createComponent('AtomsSeparator');
93
+ /**
94
+ * A visual representation of an entity, such as a user, organization, or product. Use circular shape (isRounded=true) for people and rounded square (isRounded=false) for non-human entities like organizations or brands.
95
+ */
96
+ export const Avatar = createComponent('Avatar', {
97
+ onPress: 'press',
98
+ });
99
+ /**
100
+ * Displays a list of avatars with a configurable maximum limit that automatically truncates with a number indicating the remaining entities. Use to represent a group of people or organizations.
101
+ */
102
+ export const AvatarList = createComponent('AvatarList');
103
+ /**
104
+ * A static indicator for displaying notifications, counts, or numerical status information. Use for unread counts, pending items, and quantity metrics — not for categories (use Label) or actions (use Button).
105
+ */
106
+ export const Badge = createComponent('Badge');
107
+ /**
108
+ * A general-purpose flexbox layout container with full control over direction, alignment, spacing, dimensions, styling, and responsive direction switching via container queries. Use Box when you need fine-grained CSS control (custom dimensions, borders, backgrounds, positioning, responsive breakpoints) beyond what VStack/HStack provide. Prefer VStack or HStack for simple vertical or horizontal stacking with token-based spacing.
109
+ */
110
+ export const Box = createComponent('Box');
111
+ /**
112
+ * A sequential series of links that mark the nested hierarchy and navigational context for a user's location within an app. Use for complex information architectures where users need a clear path back to higher-level pages.
113
+ */
114
+ export const Breadcrumb = createComponent('Breadcrumb', {
115
+ onSelect: 'select',
116
+ });
117
+ /**
118
+ * An interactive element that allows users to trigger actions or events with a single click. Use for actions, not navigation — use links for navigation. Use IconButton when space is limited and the action is not critical.
119
+ */
120
+ export const Button = createComponent('Button', {
121
+ onPress: 'press',
122
+ onPressWhileDisabled: 'pressWhileDisabled',
123
+ onMouseEnter: 'mouseEnter',
124
+ onMouseLeave: 'mouseLeave',
125
+ });
126
+ /**
127
+ * Layout container for arranging multiple Button elements horizontally or vertically with configurable placement, alignment, gap, and wrapping.
128
+ */
129
+ export const ButtonGroup = createComponent('ButtonGroup');
130
+ /**
131
+ * Visually groups related information and components into a contained, interactive card. Use for summarizing content, facilitating comparisons, or guiding users toward specific actions. Renders as a simple layout container when used with children only (no title/content).
132
+ */
133
+ export const Card = createComponent('Card', {
134
+ onEdit: 'edit',
135
+ onDelete: 'delete',
136
+ onAdd: 'add',
137
+ onClick: 'click',
138
+ onAction: 'action',
139
+ });
140
+ /**
141
+ * A layout container that arranges Card children (Card, LocationCard, LoaderCard) in an auto-sizing responsive grid. Automatically computes a uniform card width based on available container space.
142
+ */
143
+ export const CardGroup = createComponent('CardGroup');
144
+ /**
145
+ * A step-through image carousel for onboarding flows and guided walkthroughs. Each slide has a heading and image, with built-in navigation controls. Emits a done event when the user advances past the last slide.
146
+ */
147
+ export const Carousel = createComponent('Carousel', {
148
+ onDone: 'done',
149
+ });
150
+ /**
151
+ * Chart-specific replacement for `WithSpinner`. While `isLoading` is true and `error` is empty, renders a chart-shaped stencil (the same `ChartVisualizationStencil` bar-chart animation the Analytics Report uses) instead of a generic Pebble spinner. When `error` is non-null/non-false, renders a status-aware `ChartError` fallback that picks an animation + copy variant from the HTTP status (403 forbidden, 404 not found, 400 bad request, 500-or-default), mirroring the Analytics Report `VisualizationErrorFallback`. Otherwise renders children. Emits `load` once on mount so a handler can kick off the data fetch.
152
+ */
153
+ export const ChartLoader = createComponent('ChartLoader', {
154
+ onLoad: 'load',
155
+ });
156
+ /**
157
+ * A flexible multi-select interface with nested lists, allowing users to toggle selections using switches or checkboxes. Use for hierarchical options with parent-child relationships, bulk selection, or settings where multiple configurations can be enabled simultaneously.
158
+ */
159
+ export const CheckList = createComponent('CheckList', {
160
+ onChange: 'change',
161
+ });
162
+ /**
163
+ * A checkbox that lets users select or unselect an option. Use for toggling a single boolean (e.g. "I agree") or selecting multiple items from a list. Use Radio for mutually exclusive choices; use Toggle when the change takes effect immediately.
164
+ */
165
+ export const Checkbox = createComponent('Checkbox', {
54
166
  onChange: 'change',
55
167
  onBlur: 'blur',
56
- onFocus: 'focus',
57
- onPaste: 'paste',
58
- onMenuToggle: 'menuToggle',
59
168
  });
60
- export const Checkbox = createComponent('Checkbox', { onChange: 'change', onBlur: 'blur' });
61
- export const CheckboxGroup = createComponent('CheckboxGroup', { onChange: 'change', onBlur: 'blur' });
62
- export const Email = createComponent('Email', {
169
+ /**
170
+ * A group of checkboxes that lets users select multiple options from a predefined list. Use when users can choose all, some, or none of the options. Use Radio instead for mutually exclusive single selection, or Toggle for immediate on/off activation.
171
+ */
172
+ export const CheckboxGroup = createComponent('CheckboxGroup', {
63
173
  onChange: 'change',
64
174
  onBlur: 'blur',
65
- onFocus: 'focus',
66
- onClick: 'click',
67
- onKeydown: 'keydown',
68
- onKeyup: 'keyup',
69
- onPaste: 'paste',
70
- onMouseenter: 'mouseenter',
71
- onMouseleave: 'mouseleave',
72
175
  });
73
- export const Number = createComponent('Number', {
176
+ /**
177
+ * A compact, interactive element for representing entities, attributes, filters, or complex criteria. Use for user-selected tags, filter conditions, or dismissible items. Use Label instead for static semantic color-coded metadata like "New" or "Caution", and Button for calls to action.
178
+ */
179
+ export const Chip = createComponent('Chip', {
180
+ onDismiss: 'dismiss',
181
+ onPress: 'press',
182
+ });
183
+ /**
184
+ * A layout container for grouping multiple Chip components (tags, filters, attributes), managing arrangement with configurable gap spacing, overflow behavior that collapses excess chips into a "+N more" modal, and incremental batch rendering for large datasets.
185
+ */
186
+ export const ChipGroup = createComponent('ChipGroup', {
187
+ onOverflowChange: 'overflowChange',
188
+ });
189
+ /**
190
+ * Circular graphic element for status or decoration
191
+ */
192
+ export const Circle = createComponent('Circle');
193
+ /**
194
+ * A form input for selecting a color from a predefined palette or entering a custom hex value. Use for brand color selection, theme customization, or any setting where users choose a specific color.
195
+ */
196
+ export const ColorPicker = createComponent('ColorPicker', {
74
197
  onChange: 'change',
75
198
  onBlur: 'blur',
76
- onChangeRaw: 'changeRaw',
77
- onChangeCalculationState: 'changeCalculationState',
78
199
  });
79
- export const Date = createComponent('Date', { onChange: 'change', onBlur: 'blur' });
80
- export const DateRange = createComponent('DateRange', { onChange: 'change', onBlur: 'blur' });
81
- export const DateInlineMulti = createComponent('DateInlineMulti', { onChange: 'change', onBlur: 'blur' });
82
- export const Textarea = createComponent('Textarea', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
83
- export const Radio = createComponent('Radio', {
200
+ /**
201
+ * A low-level SVG shimmer placeholder used to indicate loading state. Renders a plain animated rectangle whose dimensions you control. For shaped placeholders (text lines, circles, boxes), use Skeleton instead.
202
+ */
203
+ export const ContentLoader = createComponent('ContentLoader');
204
+ /**
205
+ * Countdown timer displaying time remaining until a target date
206
+ */
207
+ export const CountDown = createComponent('CountDown');
208
+ /**
209
+ * Displays a country by its ISO code, showing flag and/or name. Can show both (default), flag only, or name only. Ideal for profiles, address settings, or regional customization contexts where country identification is needed.
210
+ */
211
+ export const Country = createComponent('Country');
212
+ /**
213
+ * Specialized input for entering monetary amounts with currency symbol/code prefix and locale-aware number formatting. Supports arithmetic expression evaluation, currency type selection via dropdown, and decimal precision control.
214
+ */
215
+ export const Currency = createComponent('Currency', {
84
216
  onChange: 'change',
85
217
  onBlur: 'blur',
86
- onMouseenter: 'mouseenter',
87
- onMouseleave: 'mouseleave',
88
218
  });
89
- export const Phone = createComponent('Phone', {
219
+ /**
220
+ * A date input that lets users select a single date via calendar or keyboard entry. Use for collecting exact, approximate, or memorable dates (e.g. birth date, start date) and for scheduling. Optionally includes time selection with timezone support. Use DateRange for start/end date pairs; use DateInlineMulti for selecting multiple individual dates without an input field.
221
+ */
222
+ export const Date = createComponent('Date', {
90
223
  onChange: 'change',
91
224
  onBlur: 'blur',
92
- onFocus: 'focus',
93
- onClick: 'click',
94
- onKeydown: 'keydown',
95
- onKeyup: 'keyup',
96
- onPaste: 'paste',
97
- onMouseenter: 'mouseenter',
98
- onMouseleave: 'mouseleave',
99
- onCountryCodeChange: 'countryCodeChange',
100
225
  });
101
- export const Password = createComponent('Password', {
226
+ /**
227
+ * An always-visible inline calendar for selecting multiple individual dates without an input field. Use when users need to pick several non-contiguous dates (e.g. holidays, blocked days). Use Date for single-date entry with an input field, or DateRange for start/end date pairs.
228
+ */
229
+ export const DateInlineMulti = createComponent('DateInlineMulti', {
102
230
  onChange: 'change',
103
231
  onBlur: 'blur',
104
- onFocus: 'focus',
105
- onClick: 'click',
106
- onKeydown: 'keydown',
107
- onKeyup: 'keyup',
108
- onPaste: 'paste',
109
- onMouseenter: 'mouseenter',
110
- onMouseleave: 'mouseleave',
111
- onReveal: 'reveal',
112
232
  });
113
- export const Switch = createComponent('Switch', { onChange: 'change', onBlur: 'blur' });
114
- export const FileDrop = createComponent('FileDrop', { onChange: 'change', onBlur: 'blur' });
115
- export const TextAutoSuggest = createComponent('TextAutoSuggest', {
233
+ /**
234
+ * A date range picker for selecting a start date and end date pair, such as travel dates, leave periods, or reporting intervals. Use Date instead when only a single date is needed.
235
+ */
236
+ export const DateRange = createComponent('DateRange', {
116
237
  onChange: 'change',
117
238
  onBlur: 'blur',
118
- onFocus: 'focus',
119
- onClick: 'click',
120
239
  });
121
- export const Currency = createComponent('Currency', { onChange: 'change', onBlur: 'blur' });
122
- export const WorkEmail = createComponent('WorkEmail', {
240
+ /**
241
+ * A form input for selecting one or more days of the week (Sunday through Saturday). Use for recurring schedules, availability preferences, or any scenario requiring day-of-week choices.
242
+ */
243
+ export const DaySelector = createComponent('DaySelector', {
244
+ onChange: 'change',
245
+ });
246
+ /**
247
+ * A horizontal stacked bar that visualizes proportional distribution of values across categories. Use to show how parts contribute to a whole, such as budget allocation, storage usage breakdown, or workforce composition.
248
+ */
249
+ export const DistributionBar = createComponent('DistributionBar');
250
+ /**
251
+ * Horizontal line to visually separate content sections
252
+ */
253
+ export const Divider = createComponent('Divider');
254
+ /**
255
+ * A reorderable drag-and-drop list for dynamically rearranging items. Supports vertical and horizontal layouts; use when item order flexibility is crucial to the user experience.
256
+ */
257
+ export const DraggableList = createComponent('DraggableList', {
258
+ onUpdate: 'update',
259
+ onRemove: 'remove',
260
+ onDragStart: 'dragStart',
261
+ onDragEnd: 'dragEnd',
262
+ });
263
+ /**
264
+ * A sliding panel that appears from the edge of the screen, allowing users to access additional information or complete secondary tasks like forms without losing context of their primary workflow. Use instead of Modal when preserving the user's place on the page is important.
265
+ */
266
+ export const Drawer = createComponent('Drawer', {
267
+ onClose: 'close',
268
+ });
269
+ /**
270
+ * A popover menu that displays a list of actions or selectable options. Use for 3–15 choices triggered by a button; for form field selection, use Select instead.
271
+ */
272
+ export const Dropdown = createComponent('Dropdown', {
273
+ onChange: 'change',
274
+ });
275
+ /**
276
+ * A form input field for collecting email addresses with built-in format validation. Use for registration, login, subscriptions, and any context requiring a valid email. Do not use for non-email text like phone numbers or usernames — use Text instead.
277
+ */
278
+ export const Email = createComponent('Email', {
123
279
  onChange: 'change',
124
280
  onBlur: 'blur',
125
281
  onFocus: 'focus',
@@ -130,169 +286,640 @@ export const WorkEmail = createComponent('WorkEmail', {
130
286
  onMouseenter: 'mouseenter',
131
287
  onMouseleave: 'mouseleave',
132
288
  });
133
- export const Percentage = createComponent('Percentage', { onChange: 'change', onBlur: 'blur' });
134
- export const SegmentedControl = createComponent('SegmentedControl', { onChange: 'change', onBlur: 'blur' });
135
- export const Time = createComponent('Time', { onChange: 'change', onBlur: 'blur' });
136
- export const TimeRange = createComponent('TimeRange', { onChange: 'change', onBlur: 'blur' });
137
- export const Timezone = createComponent('Timezone', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
138
- export const Slider = createComponent('Slider', {
289
+ /**
290
+ * A collapsible panel that expands or contracts to reveal additional detailed information. Use to organize related content within limited space, such as FAQs, settings menus, or side panels. Prefer a full scrolling page when users need to read all content.
291
+ */
292
+ export const ExpansionPanel = createComponent('ExpansionPanel', { onToggle: 'toggle' });
293
+ /**
294
+ * A container that coordinates multiple ExpansionPanel children, optionally enforcing accordion behavior where only one panel can be open at a time. Use to organize related content into collapsible sections within limited space.
295
+ */
296
+ export const ExpansionPanelGroup = createComponent('ExpansionPanelGroup');
297
+ /**
298
+ * A layout wrapper that provides consistent structure around form inputs, including a label, required indicator, helper or error message, tooltip, read-only mode, and inline (side-by-side) layout option. Use Field to wrap any form input component.
299
+ */
300
+ export const Field = createComponent('Field');
301
+ /**
302
+ * A compact file upload input for selecting one or more files via browse or drag-and-drop. Supports file type restrictions, size limits, and upload progress. Use for inline file fields in forms; use FileDrop for larger drag-and-drop zones with labels and validation.
303
+ */
304
+ export const File = createComponent('File', {
139
305
  onChange: 'change',
140
- onBlur: 'blur',
141
- onBeforeChange: 'beforeChange',
142
- onAfterChange: 'afterChange',
306
+ onDelete: 'delete',
143
307
  });
144
- export const RangeSlider = createComponent('RangeSlider', {
308
+ /**
309
+ * A file upload input that allows users to drag and drop files into a drop zone or click to browse. Supports single or multiple file uploads with configurable file type restrictions, size limits, and optional image cropping.
310
+ */
311
+ export const FileDrop = createComponent('FileDrop', {
145
312
  onChange: 'change',
146
- onBeforeChange: 'beforeChange',
147
- onAfterChange: 'afterChange',
148
313
  onBlur: 'blur',
149
314
  });
150
- export const Masker = createComponent('Masker', { onChange: 'change', onBlur: 'blur' });
151
- export const DaySelector = createComponent('DaySelector', { onChange: 'change' });
152
- export const ColorPicker = createComponent('ColorPicker', { onChange: 'change', onBlur: 'blur' });
153
- export const SelectableGroup = createComponent('SelectableGroup', { onChange: 'change' });
154
- export const Ssn = createComponent('Ssn', { onChange: 'change', onBlur: 'blur' });
155
- export const Sin = createComponent('Sin', { onChange: 'change', onBlur: 'blur' });
156
- export const Signature = createComponent('Signature', { onChange: 'change' });
157
- export const Survey = createComponent('Survey', { onChange: 'change' });
158
- export const Tree = createComponent('Tree', { onChange: 'change', onFooterAction: 'footerAction' });
159
- export const TreeSelect = createComponent('TreeSelect', { onChange: 'change' });
160
- export const File = createComponent('File', { onChange: 'change', onDelete: 'delete' });
161
- export const InputGroup = createComponent('InputGroup');
162
- export const Field = createComponent('Field');
163
- export const ActionCard = createComponent('ActionCard', {
164
- onPressPrimary: 'pressPrimary',
165
- onPressSecondary: 'pressSecondary',
166
- });
167
- export const Alert = createComponent('Alert', {
168
- onPressPrimary: 'pressPrimary',
169
- onPressSecondary: 'pressSecondary',
170
- onDismiss: 'dismiss',
315
+ /**
316
+ * A floating action button (FAB) that highlights the primary action on a screen, staying visible above other content. Uses an icon only (no text label) and typically appears once per screen for key tasks like creating, favoriting, or sharing.
317
+ */
318
+ export const FloatingButton = createComponent('FloatingButton', {
319
+ onPress: 'press',
320
+ onPressWhileDisabled: 'pressWhileDisabled',
321
+ onMouseEnter: 'mouseEnter',
322
+ onMouseLeave: 'mouseLeave',
171
323
  });
172
- export const Avatar = createComponent('Avatar', { onPress: 'press' });
173
- export const Badge = createComponent('Badge');
174
- export const Chip = createComponent('Chip', { onDismiss: 'dismiss', onPress: 'press' });
175
- export const Card = createComponent('Card', {
176
- onEdit: 'edit',
177
- onDelete: 'delete',
178
- onAdd: 'add',
179
- onClick: 'click',
180
- onAction: 'action',
324
+ /**
325
+ * Data grid for displaying tabular data. Each column defines a header, data key path, and cell type. Use $bindState on selectedRow to capture clicked row data. Data is an array of row objects with _key as unique identifier.
326
+ */
327
+ export const Grid = createComponent('Grid', {
328
+ onRowClick: 'rowClick',
329
+ onRowAction: 'rowAction',
330
+ onHeaderAction: 'headerAction',
181
331
  });
182
- export const ContentLoader = createComponent('ContentLoader');
183
- export const Divider = createComponent('Divider');
332
+ /**
333
+ * Horizontal stack layout that arranges children side-by-side in a row with token-based spacing. Use for placing elements next to each other horizontally — e.g. side-by-side form fields, button groups, or inline icon-and-text pairs. Prefer VStack for vertical stacking and Box for complex layouts needing custom dimensions, borders, or backgrounds.
334
+ */
335
+ export const HStack = createComponent('HStack');
336
+ /**
337
+ * A semantic heading element (h1–h6) for page titles and section headers that establishes document hierarchy. Use for structural headings only — for body text or paragraphs use Paragraph, and for a title paired with a subtitle use TitleCaption.
338
+ */
339
+ export const Heading = createComponent('Heading');
340
+ /**
341
+ * A standalone icon element from the Pebble icon set. Use for decorative or interactive icon displays — as clickable action triggers, status indicators, or visual accents. Supports tooltips and full ARIA attributes for accessibility.
342
+ */
184
343
  export const Icon = createComponent('Icon', { onPress: 'press' });
185
- export const Label = createComponent('Label');
186
- export const ListItem = createComponent('ListItem', { onPress: 'press' });
187
- export const Modal = createComponent('Modal', { onClose: 'close' });
188
- export const ModalFooter = createComponent('ModalFooter');
189
- export const ProgressBar = createComponent('ProgressBar');
190
- export const Skeleton = createComponent('Skeleton');
191
- export const Spinner = createComponent('Spinner');
192
- export const Stepper = createComponent('Stepper', { onClick: 'click' });
193
- export const TextClip = createComponent('TextClip');
194
- export const TextSnippet = createComponent('TextSnippet');
195
- export const Tip = createComponent('Tip');
196
- export const CheckList = createComponent('CheckList', { onChange: 'change' });
197
- export const DistributionBar = createComponent('DistributionBar');
344
+ /**
345
+ * An icon-only button for repeated, common, or persistent actions when screen real estate is limited. Use for well-known actions like search, refresh, edit, or navigation — use a regular Button with text when the action is critical or requires more context.
346
+ */
347
+ export const IconButton = createComponent('IconButton', {
348
+ onPress: 'press',
349
+ onPressWhileDisabled: 'pressWhileDisabled',
350
+ onMouseEnter: 'mouseEnter',
351
+ onMouseLeave: 'mouseLeave',
352
+ });
353
+ /**
354
+ * Displays an image with optional theme-aware light/dark sources, lazy loading, and click interaction. Use for static or decorative images — use Avatar for user profile pictures, Icon for symbolic glyphs, or ImageViewer for zoomable image galleries.
355
+ */
356
+ export const Image = createComponent('Image', {
357
+ onPress: 'press',
358
+ onLoad: 'load',
359
+ onError: 'error',
360
+ });
361
+ /**
362
+ * Displays an image thumbnail that expands into a full-size overlay with zoom when clicked. Use for previewing images such as uploaded documents, photos, or screenshots where users need to inspect detail.
363
+ */
198
364
  export const ImageViewer = createComponent('ImageViewer');
199
- export const ObjectUI = createComponent('ObjectUI');
200
- export const ObjectUITemplate = createComponent('ObjectUITemplate');
201
- export const ObjectUIHeader = createComponent('ObjectUIHeader');
202
- export const ObjectUIContent = createComponent('ObjectUIContent');
203
- export const ObjectUIStats = createComponent('ObjectUIStats', { onActionClick: 'actionClick' });
204
- export const SnackBar = createComponent('SnackBar', { onDismiss: 'dismiss' });
205
- export const Video = createComponent('Video');
206
- export const AvatarList = createComponent('AvatarList');
207
- export const Image = createComponent('Image', { onPress: 'press', onLoad: 'load', onError: 'error' });
208
- export const AtomsSeparator = createComponent('AtomsSeparator');
209
- export const Carousel = createComponent('Carousel', { onDone: 'done' });
210
- export const TableBasic = createComponent('TableBasic');
365
+ /**
366
+ * Combines multiple input fields (e.g. a Select prefix with a Text input) into a single visually unified group with shared sizing, disabled, invalid, and read-only state. Use for composite inputs like currency amount with currency selector, or phone number with country code.
367
+ */
368
+ export const InputGroup = createComponent('InputGroup');
369
+ /**
370
+ * A compact prev/next control for stepping through items one at a time, displaying "X of Y items" with previous and next buttons. Use for sequential item-by-item navigation such as cycling through detail views of records, search results, or review queues — not for page-based navigation (use Pagination instead).
371
+ */
372
+ export const ItemNavigator = createComponent('ItemNavigator', {
373
+ onNext: 'next',
374
+ onPrevious: 'previous',
375
+ });
376
+ /**
377
+ * A static, non-interactive identifier representing a status, property, or other highlighted metadata about an item. Use for categorizing or labeling items with short keywords like "New", "Recommended", or "High Priority". For interactive tagging use Chip; for live status updates use Status.
378
+ */
379
+ export const Label = createComponent('Label');
380
+ /**
381
+ * A layout container for grouping multiple Label components together, with automatic wrapping and overflow handling. When labels exceed a configured row limit, excess labels collapse into a "+N more" indicator that opens a modal. Use when displaying a set of categorization or metadata labels on an item.
382
+ */
383
+ export const LabelGroup = createComponent('LabelGroup');
384
+ /**
385
+ * A flex-based container for arranging child elements with control over direction, alignment, spacing, dimensions, and styling. Use Layout for general-purpose page structure and custom layouts. Prefer VStack or HStack for simple vertical or horizontal stacking.
386
+ */
387
+ export const Layout = createComponent('Layout');
388
+ /**
389
+ * A standard card container for creating card-based page layouts with configurable padding and an optional selectable theme for selection interfaces.
390
+ */
391
+ export const LayoutCard = createComponent('LayoutCard', {
392
+ onPress: 'press',
393
+ });
394
+ /**
395
+ * A clickable text hyperlink for navigating to URLs or downloading files. Use for inline or standalone text links — use Button for actions that don't navigate, and Breadcrumb for hierarchical navigation trails.
396
+ */
397
+ export const Link = createComponent('Link', { onPress: 'press' });
398
+ /**
399
+ * A structured list entry for displaying related entities vertically, with a title and optional caption. Use within grouped lists to present items for scanning, selection, or action.
400
+ */
401
+ export const ListItem = createComponent('ListItem', {
402
+ onPress: 'press',
403
+ });
404
+ /**
405
+ * A skeleton placeholder shaped like a card, shown while card content is loading. Use inside a Card.Group context to match card dimensions and reduce perceived loading time. Set isGridView for grid-based layouts.
406
+ */
407
+ export const LoaderCard = createComponent('LoaderCard');
408
+ /**
409
+ * A specialized card for displaying a physical location with its nickname and formatted address. Supports edit/delete actions, custom dropdown actions, and navigation links to location details.
410
+ */
211
411
  export const LocationCard = createComponent('LocationCard', {
212
412
  onEdit: 'edit',
213
413
  onDelete: 'delete',
214
414
  onClick: 'click',
215
415
  onAction: 'action',
216
416
  });
217
- export const LoaderCard = createComponent('LoaderCard');
218
- export const LayoutCard = createComponent('LayoutCard', { onPress: 'press' });
219
- export const AppGroupLoader = createComponent('AppGroupLoader');
220
- export const ChartLoader = createComponent('ChartLoader');
221
- export const ReportLoader = createComponent('ReportLoader');
222
- export const ReportShareLoader = createComponent('ReportShareLoader');
223
- export const ReportViewerLoader = createComponent('ReportViewerLoader');
224
- export const SettingsLoader = createComponent('SettingsLoader');
225
- export const ChipGroup = createComponent('ChipGroup', { onOverflowChange: 'overflowChange' });
226
- export const ModalCloseButton = createComponent('ModalCloseButton');
227
- export const Status = createComponent('Status');
228
- export const ApiError = createComponent('ApiError');
229
- export const Circle = createComponent('Circle');
230
- export const CountDown = createComponent('CountDown');
231
- export const Country = createComponent('Country');
232
- export const ToggleableArrow = createComponent('ToggleableArrow');
233
- export const TitleCaption = createComponent('TitleCaption');
234
- export const AiIcon = createComponent('AiIcon');
235
- export const Breadcrumb = createComponent('Breadcrumb', { onSelect: 'select' });
236
- export const Button = createComponent('Button', {
237
- onPress: 'press',
238
- onPressWhileDisabled: 'pressWhileDisabled',
239
- onMouseEnter: 'mouseEnter',
240
- onMouseLeave: 'mouseLeave',
417
+ /**
418
+ * A text input that enforces a specific format pattern using mask characters (e.g. phone numbers, SSNs, postal codes). Use when the input value must conform to a known fixed-length pattern with digit, letter, or mixed character slots.
419
+ */
420
+ export const Masker = createComponent('Masker', {
421
+ onChange: 'change',
422
+ onBlur: 'blur',
241
423
  });
242
- export const ButtonGroup = createComponent('ButtonGroup');
243
- export const DraggableList = createComponent('DraggableList', {
244
- onUpdate: 'update',
245
- onRemove: 'remove',
246
- onDragStart: 'dragStart',
247
- onDragEnd: 'dragEnd',
424
+ /**
425
+ * A dropdown menu list that displays selectable actions or options. Use for context menus, action menus, or option pickers where items need to be selected from a list. Items can use WARNING type for cautionary actions or ALERT type for destructive actions like delete.
426
+ */
427
+ export const MenuList = createComponent('MenuList', {
428
+ onSelect: 'select',
248
429
  });
249
- export const Drawer = createComponent('Drawer', { onClose: 'close' });
250
- export const Dropdown = createComponent('Dropdown', { onChange: 'change' });
251
- export const ExpansionPanel = createComponent('ExpansionPanel', { onToggle: 'toggle' });
252
- export const ExpansionPanelGroup = createComponent('ExpansionPanelGroup');
253
- export const FloatingButton = createComponent('FloatingButton', {
254
- onPress: 'press',
255
- onPressWhileDisabled: 'pressWhileDisabled',
256
- onMouseEnter: 'mouseEnter',
257
- onMouseLeave: 'mouseLeave',
430
+ /**
431
+ * An interactive overlay that demands user attention and input, isolating specific tasks or information above the main page content. Use for confirmations, urgent notifications, or brief focused tasks that require an immediate response.
432
+ */
433
+ export const Modal = createComponent('Modal', { onClose: 'close' });
434
+ /**
435
+ * A button placed inside a Modal that dismisses the dialog when clicked. Used as the cancel or close action in modal footers, allowing users to exit without completing the modal task.
436
+ */
437
+ export const ModalCloseButton = createComponent('ModalCloseButton');
438
+ /**
439
+ * Footer section of a Modal that holds primary action buttons for task completion or cancellation. Use inside a Modal as the bottom bar for confirm/cancel actions.
440
+ */
441
+ export const ModalFooter = createComponent('ModalFooter');
442
+ /**
443
+ * A hierarchical nested list for displaying complex data structures like categories and subcategories, supporting up to four levels of expandable/collapsible nesting. Use for organizing large amounts of nested information such as organizational structures or department lists.
444
+ */
445
+ export const NestedList = createComponent('NestedList', {
446
+ onToggle: 'toggle',
447
+ onSelect: 'select',
258
448
  });
259
- export const IconButton = createComponent('IconButton', {
260
- onPress: 'press',
261
- onPressWhileDisabled: 'pressWhileDisabled',
262
- onMouseEnter: 'mouseEnter',
263
- onMouseLeave: 'mouseLeave',
449
+ /**
450
+ * A general-purpose numeric input for entering whole or decimal numbers. Supports min/max range constraints, step increments, locale-aware formatting, and inline arithmetic evaluation. Use for quantities, counts, measurements, or any plain number entry — use Currency for monetary amounts, Percentage for percent values, or Slider/RangeSlider for visual range selection.
451
+ */
452
+ export const Number = createComponent('Number', {
453
+ onChange: 'change',
454
+ onBlur: 'blur',
455
+ onChangeRaw: 'changeRaw',
456
+ onChangeCalculationState: 'changeCalculationState',
264
457
  });
265
- export const ItemNavigator = createComponent('ItemNavigator', { onNext: 'next', onPrevious: 'previous' });
266
- export const Link = createComponent('Link', { onPress: 'press' });
267
- export const MenuList = createComponent('MenuList', { onSelect: 'select' });
268
- export const NestedList = createComponent('NestedList', { onToggle: 'toggle', onSelect: 'select' });
269
- export const Paginate = createComponent('Paginate', { onChange: 'change' });
270
- export const SelectableMenu = createComponent('SelectableMenu', { onChange: 'change' });
271
- export const ShowMore = createComponent('ShowMore');
272
- export const Tab = createComponent('Tab', { onChange: 'change' });
273
- export const Heading = createComponent('Heading');
274
- export const Text = createComponent('Text');
275
- export const Box = createComponent('Box');
276
- export const Grid = createComponent('Grid', {
277
- onRowClick: 'rowClick',
278
- onRowAction: 'rowAction',
279
- onHeaderAction: 'headerAction',
458
+ /**
459
+ * A modular component that presents a high-level overview of an entity (person, organization, device) with an avatar, title, and caption. Typically placed at the top of a detail page below navigation. Use Cards for detailed entity info, Lists for comparing multiple items, or Tables for large sortable datasets.
460
+ */
461
+ export const ObjectUI = createComponent('ObjectUI');
462
+ /**
463
+ * The main body content area of an ObjectUI entity detail page. Place below ObjectUIHeader (and optionally ObjectUIStats) inside ObjectUITemplate to hold the detailed content for the entity.
464
+ */
465
+ export const ObjectUIContent = createComponent('ObjectUIContent');
466
+ /**
467
+ * Header section of an entity overview (person, organization, device) displaying an avatar, title, and caption. Used at the top of ObjectUI layouts to identify the entity at a glance.
468
+ */
469
+ export const ObjectUIHeader = createComponent('ObjectUIHeader');
470
+ /**
471
+ * A grid section within ObjectUI that displays key-value statistics about an entity (person, organization, device), with optional tooltips on stat labels and icon action buttons.
472
+ */
473
+ export const ObjectUIStats = createComponent('ObjectUIStats', {
474
+ onActionClick: 'actionClick',
280
475
  });
281
- export const HStack = createComponent('HStack');
282
- export const LabelGroup = createComponent('LabelGroup');
283
- export const Layout = createComponent('Layout');
476
+ /**
477
+ * The root container for an ObjectUI entity detail page that presents a high-level overview of an entity (person, organization, device). Place ObjectUIHeader, ObjectUIStats, and ObjectUIContent as children. Use ObjectUITemplate when you need a structured entity overview at the top of a page; use Cards for detailed entity info, Lists for comparing multiple items, or Tables for large sortable datasets.
478
+ */
479
+ export const ObjectUITemplate = createComponent('ObjectUITemplate');
480
+ /**
481
+ * Branded header for an application or module page, displaying the app logo, title, optional subtitle, and optional help/support link. Use at the top of a page to identify which app the user is in.
482
+ */
483
+ export const PageAppLogo = createComponent('PageAppLogo');
484
+ /**
485
+ * The standard wrapper for a page's main body area. Controls maximum content width (584–1544px or FLUID for edge-to-edge) and horizontal alignment (center, left, right). Use PageContent for every page-level content region, whether constrained to a fixed width or stretched full-width.
486
+ */
284
487
  export const PageContent = createComponent('PageContent');
488
+ /**
489
+ * A persistent footer bar at the bottom of a page, typically used for primary navigation actions like "Continue" or "Submit". Supports a built-in continue button (via the continue event) or custom child content for more complex footer layouts. Use shouldBeSticky to keep it visible at the bottom of the viewport as the user scrolls.
490
+ */
491
+ export const PageFooter = createComponent('PageFooter', {
492
+ onContinue: 'continue',
493
+ });
494
+ /**
495
+ * A top-of-page header displaying a title and optional caption, used inside a page layout alongside PageContent and PageFooter. Use size to match the PageContent width.
496
+ */
285
497
  export const PageHeader = createComponent('PageHeader');
286
- export const PageAppLogo = createComponent('PageAppLogo');
287
- export const PageFooter = createComponent('PageFooter', { onContinue: 'continue' });
498
+ /**
499
+ * A navigation control that breaks large content into smaller pages, commonly used with data tables and content-rich views. Use when loading all data at once is impractical or when content is too large for a single view.
500
+ */
501
+ export const Paginate = createComponent('Paginate', {
502
+ onChange: 'change',
503
+ });
504
+ /**
505
+ * An individual panel within a SplitPane container. Each Pane defines its own size constraints, collapse priority, and resize behavior. Must be a direct child of SplitPane.
506
+ */
288
507
  export const Pane = createComponent('Pane', {
289
508
  onCollapsedChange: 'collapsedChange',
290
509
  onDismiss: 'dismiss',
291
510
  onResize: 'resize',
292
511
  });
512
+ /**
513
+ * A secure input field for entering or creating passwords, with automatic character masking and an optional visibility toggle. Use in login, signup, or verification flows.
514
+ */
515
+ export const Password = createComponent('Password', {
516
+ onChange: 'change',
517
+ onBlur: 'blur',
518
+ onFocus: 'focus',
519
+ onClick: 'click',
520
+ onKeydown: 'keydown',
521
+ onKeyup: 'keyup',
522
+ onPaste: 'paste',
523
+ onMouseenter: 'mouseenter',
524
+ onMouseleave: 'mouseleave',
525
+ onReveal: 'reveal',
526
+ });
527
+ /**
528
+ * A numeric input for entering and editing percentage values. Automatically appends a % suffix, supports decimal precision, negative values, and upper/lower bounds. Use for financial calculations, progress indicators, or statistical entries requiring percentage values.
529
+ */
530
+ export const Percentage = createComponent('Percentage', {
531
+ onChange: 'change',
532
+ onBlur: 'blur',
533
+ });
534
+ /**
535
+ * A specialized input for entering and editing phone numbers with automatic region-based formatting, international support, and an optional country code dropdown selector.
536
+ */
537
+ export const Phone = createComponent('Phone', {
538
+ onChange: 'change',
539
+ onBlur: 'blur',
540
+ onFocus: 'focus',
541
+ onClick: 'click',
542
+ onKeydown: 'keydown',
543
+ onKeyup: 'keyup',
544
+ onPaste: 'paste',
545
+ onMouseenter: 'mouseenter',
546
+ onMouseleave: 'mouseleave',
547
+ onCountryCodeChange: 'countryCodeChange',
548
+ });
549
+ /**
550
+ * Communicates the status of an ongoing process, like downloading or uploading files, to inform the user of the remaining wait time. Use determinate mode when progress percentage is known, or indeterminate when wait time cannot be calculated. For multi-step processes requiring user action, use ProgressSteps instead; for a simple busy indicator, use Spinner.
551
+ */
552
+ export const ProgressBar = createComponent('ProgressBar');
553
+ /**
554
+ * A multi-step progress indicator that visually shows completed, current, and upcoming steps in a sequential workflow. Use for onboarding flows, form wizards, or any multi-part process where users need to see their progress.
555
+ */
556
+ export const ProgressSteps = createComponent('ProgressSteps');
557
+ /**
558
+ * Radio buttons let users choose a single option from two or more mutually exclusive options. Prefer over Select when showing 5 or fewer options that need to be immediately visible. Use Checkbox instead when multiple selections are allowed.
559
+ */
560
+ export const Radio = createComponent('Radio', {
561
+ onChange: 'change',
562
+ onBlur: 'blur',
563
+ onMouseenter: 'mouseenter',
564
+ onMouseleave: 'mouseleave',
565
+ });
566
+ /**
567
+ * A two-handle slider for selecting a numeric range within a track. Use for defining min/max boundaries such as price filters or value ranges.
568
+ */
569
+ export const RangeSlider = createComponent('RangeSlider', {
570
+ onChange: 'change',
571
+ onBeforeChange: 'beforeChange',
572
+ onAfterChange: 'afterChange',
573
+ onBlur: 'blur',
574
+ });
575
+ /**
576
+ * A skeleton placeholder shown while tabular report content is loading. Use when the content area will contain a data report with header and detail rows, and you want to reduce perceived loading time and prevent layout shift.
577
+ */
578
+ export const ReportLoader = createComponent('ReportLoader');
579
+ /**
580
+ * A skeleton placeholder shown while report sharing content is loading. Use when the report share dialog or page layout is known and you want to reduce perceived loading time and prevent layout shift. Renders a header, description, and two side-by-side content blocks (stacking on mobile).
581
+ */
582
+ export const ReportShareLoader = createComponent('ReportShareLoader');
583
+ /**
584
+ * A skeleton placeholder shown while report viewer content is loading. Use when the content area will contain a report viewer with sidebar navigation and a main report content area, and you want to reduce perceived loading time and prevent layout shift.
585
+ */
586
+ export const ReportViewerLoader = createComponent('ReportViewerLoader');
587
+ /**
588
+ * Conditionally show or hide content based on container or viewport width breakpoints, enabling responsive layouts that adapt to different screen and panel sizes. Use to hide non-essential UI at narrow widths or show alternative layouts at wider breakpoints.
589
+ */
293
590
  export const Responsive = createComponent('Responsive');
591
+ /**
592
+ * A linear set of buttons for toggling between closely related choices (2-5 short-label options) and instantly applying a selection. Supports single, multi, and range selection modes. NOT suitable for binary (2-option) choices — use Toggle or ToggleButton instead. Prefer over Radio when options are short labels needing a compact inline layout; use Radio for longer phrases, Tabs for content navigation.
593
+ */
594
+ export const SegmentedControl = createComponent('SegmentedControl', {
595
+ onChange: 'change',
596
+ onBlur: 'blur',
597
+ });
598
+ /**
599
+ * A dropdown input that lets users choose one or more options from a predefined list. Use for long lists, searchable lists, or constrained spaces. Use Radio or Checkbox cards instead when there are few options and the selection is a key part of the flow.
600
+ */
601
+ export const Select = createComponent('Select', {
602
+ onChange: 'change',
603
+ onBlur: 'blur',
604
+ onFocus: 'focus',
605
+ onPaste: 'paste',
606
+ onMenuToggle: 'menuToggle',
607
+ });
608
+ /**
609
+ * A card-based selection input that renders a group of selectable cards for single or multi-choice picking. Use when users need to choose from a small set of visually rich options displayed as cards (e.g. plans, locations, tiers). Use Radio for simple text-only single choice, or Select for long option lists in a dropdown.
610
+ */
611
+ export const SelectableGroup = createComponent('SelectableGroup', {
612
+ onChange: 'change',
613
+ });
614
+ /**
615
+ * A dropdown menu that displays selectable options, allowing users to choose from a list of actions or settings. Includes a built-in trigger button. Deprecated — prefer Dropdown for new specs.
616
+ */
617
+ export const SelectableMenu = createComponent('SelectableMenu', { onChange: 'change' });
618
+ /**
619
+ * A skeleton placeholder shown while settings page content is loading. Use when the content area will contain a settings form with label/value rows, and you want to reduce perceived loading time and prevent layout shift. Supports optional centering and custom margin.
620
+ */
621
+ export const SettingsLoader = createComponent('SettingsLoader');
622
+ /**
623
+ * A container that truncates a list of child elements, showing only the first N items with a "Show all" / "Show less" toggle button. Use to reduce visual clutter in long lists while keeping all items accessible on demand.
624
+ */
625
+ export const ShowMore = createComponent('ShowMore');
626
+ /**
627
+ * A signature capture input that lets users sign by drawing on a canvas or typing their name. Use for legally binding agreements, contracts, or any workflow requiring a personal signature.
628
+ */
629
+ export const Signature = createComponent('Signature', {
630
+ onChange: 'change',
631
+ });
632
+ /**
633
+ * A specialized masked input for entering Canadian Social Insurance Numbers (SIN). Automatically formats the 9-digit value as "XXX XXX XXX" while storing the unmasked digits. Use for Canadian employee or tax forms requiring a SIN — use Ssn for US Social Security Numbers, or Masker for other custom-format masked inputs.
634
+ */
635
+ export const Sin = createComponent('Sin', {
636
+ onChange: 'change',
637
+ onBlur: 'blur',
638
+ });
639
+ /**
640
+ * An animated placeholder that mimics the shape of content while it loads, available in text (lines), circle, and box variants.
641
+ */
642
+ export const Skeleton = createComponent('Skeleton');
643
+ /**
644
+ * An interactive control for selecting a single numeric value within a defined range by dragging a handle along a horizontal track. Use for numeric ranges like 0–100; do not use for extremely large ranges (e.g. 1–1000) or non-numeric values.
645
+ */
646
+ export const Slider = createComponent('Slider', {
647
+ onChange: 'change',
648
+ onBlur: 'blur',
649
+ onBeforeChange: 'beforeChange',
650
+ onAfterChange: 'afterChange',
651
+ });
652
+ /**
653
+ * A passive notification that appears at the bottom of the screen to provide quick, at-a-glance feedback on the outcome of an action. Use for non-critical, supplementary messages that do not require user action — for critical messages requiring acknowledgment, use a Modal instead.
654
+ */
655
+ export const SnackBar = createComponent('SnackBar', {
656
+ onDismiss: 'dismiss',
657
+ });
658
+ /**
659
+ * A progress indicator for communicating that a process or task is currently underway without a known completion time. Use ProgressBar instead when the completion percentage is known.
660
+ */
661
+ export const Spinner = createComponent('Spinner');
662
+ /**
663
+ * A compound button that combines a primary action with a secondary trailing button, typically opening a dropdown of alternative actions. Use when the user has a main action with related alternatives (e.g. "Save" with "Save as draft", "Save and publish").
664
+ */
665
+ export const SplitButton = createComponent('SplitButton', {
666
+ onPress: 'press',
667
+ onDropdownChange: 'dropdownChange',
668
+ });
669
+ /**
670
+ * A multi-pane layout container that arranges child Pane components side-by-side with support for resizing, collapsing, and responsive behavior. Use for master-detail views, sidebars, and split-screen interfaces where panels need independent sizing and collapse control.
671
+ */
294
672
  export const SplitPane = createComponent('SplitPane');
673
+ /**
674
+ * A specialized masked input for collecting US Social Security Numbers (SSN). Automatically formats display as XXX-XX-XXXX while storing the raw 9-digit value. Use for any form field that requires an SSN; use Text for general text or Password for secret credentials.
675
+ */
676
+ export const Ssn = createComponent('Ssn', {
677
+ onChange: 'change',
678
+ onBlur: 'blur',
679
+ });
680
+ /**
681
+ * A static indicator of real-time state or condition, such as availability, progress, or publication status. Displays a colored dot alongside a text label. Use Label instead for categorizing or organizing items with keywords.
682
+ */
683
+ export const Status = createComponent('Status');
684
+ /**
685
+ * A progress indicator that guides users through multi-step sequential workflows by displaying completed steps, current position, and upcoming tasks. Best for linear processes with 3-7 steps such as checkout flows, onboarding sequences, or form wizards. Not suitable for non-linear workflows or processes with fewer than three steps.
686
+ */
687
+ export const Stepper = createComponent('Stepper', {
688
+ onClick: 'click',
689
+ });
690
+ /**
691
+ * A button-group input for collecting ratings or opinions on a Likert scale (e.g. 1–5 or 1–10). Renders each option as a clickable button with optional range labels for the endpoints. Supports single or multi-select. Use for satisfaction surveys, NPS scores, or opinion scales. Use Radio for mutually exclusive text choices, SegmentedControl for toggling between named options, or Slider for continuous numeric ranges.
692
+ */
693
+ export const Survey = createComponent('Survey', {
694
+ onChange: 'change',
695
+ });
696
+ /**
697
+ * A toggle that lets users switch instantly between on and off states. Use for activation settings that take effect immediately; use Checkbox instead for selection or agreement scenarios that require submission.
698
+ */
699
+ export const Switch = createComponent('Switch', {
700
+ onChange: 'change',
701
+ onBlur: 'blur',
702
+ });
703
+ /**
704
+ * Labeled controls for alternating between related views within the same page or context. Use to organize groups of related content at the same hierarchy level; for selection within a single view, use a segmented control instead.
705
+ */
706
+ export const Tab = createComponent('Tab', { onChange: 'change' });
707
+ /**
708
+ * A read-only data table for displaying moderately large amounts of information in rows and columns. Use for structured, text-based data that benefits from systematic organization and easy scanning. For sorting, filtering, or cell-level interaction, use Grid instead; for simple vertical lists without column headings, use ListItem.
709
+ */
710
+ export const TableBasic = createComponent('TableBasic');
711
+ /**
712
+ * A general-purpose text component for rendering body copy, descriptions, captions, and other non-heading text content. Defaults to a paragraph (<p>) with body-medium typestyle. Use Heading instead for section titles (h1–h6), and TitleCaption for a title paired with a subtitle.
713
+ */
714
+ export const Text = createComponent('Text');
715
+ /**
716
+ * An autocomplete input that offers text suggestions in a dropdown menu as the user types. Unlike Select, users can either manually type free-form text or pick from the suggestions list.
717
+ */
718
+ export const TextAutoSuggest = createComponent('TextAutoSuggest', {
719
+ onChange: 'change',
720
+ onBlur: 'blur',
721
+ onFocus: 'focus',
722
+ onClick: 'click',
723
+ });
724
+ /**
725
+ * Displays extensive text or content in a compact area by clipping it at a specified height, with an expand/collapse toggle for full viewing. Use when space is limited but more information is available. Use ExpansionPanel instead for multiple collapsible sections, or Tooltip for brief hover-only content.
726
+ */
727
+ export const TextClip = createComponent('TextClip');
728
+ /**
729
+ * A single-line text input for collecting short-form text data such as names, emails, URLs, or search queries. Use TextArea for multi-line content or Number for numeric-only values.
730
+ */
731
+ export const TextInput = createComponent('TextInput', {
732
+ onChange: 'change',
733
+ onBlur: 'blur',
734
+ onFocus: 'focus',
735
+ onClick: 'click',
736
+ onKeydown: 'keydown',
737
+ onKeyup: 'keyup',
738
+ onPaste: 'paste',
739
+ onMouseenter: 'mouseenter',
740
+ onMouseleave: 'mouseleave',
741
+ });
742
+ /**
743
+ * A read-only text block with a one-click action to copy its content to the clipboard or download it as a file. Use for command-line instructions, code snippets, API keys, or any text the user needs to grab verbatim.
744
+ */
745
+ export const TextSnippet = createComponent('TextSnippet');
746
+ /**
747
+ * A multi-line text input for entering longer free-form text such as comments, descriptions, or paragraphs. Use TextInput instead for short single-line entries.
748
+ */
749
+ export const Textarea = createComponent('Textarea', {
750
+ onChange: 'change',
751
+ onBlur: 'blur',
752
+ onFocus: 'focus',
753
+ });
754
+ /**
755
+ * A form input for entering or selecting a specific time of day. Supports typed entry, optional dropdown time selection, timezone display, and locale-aware formatting.
756
+ */
757
+ export const Time = createComponent('Time', {
758
+ onChange: 'change',
759
+ onBlur: 'blur',
760
+ });
761
+ /**
762
+ * A time range input for selecting a start and end time pair, such as work schedules, shifts, or availability windows. Stores a [startTime, endTime] tuple of ISO 8601 strings. Supports timezone display and next-day span detection.
763
+ */
764
+ export const TimeRange = createComponent('TimeRange', {
765
+ onChange: 'change',
766
+ onBlur: 'blur',
767
+ });
768
+ /**
769
+ * A specialized select component for choosing a timezone. Lists all IANA timezones with search filtering. Use this when the user needs to pick a standalone timezone; use Time with timezone instead when selecting a time together with a timezone.
770
+ */
771
+ export const Timezone = createComponent('Timezone', {
772
+ onChange: 'change',
773
+ onBlur: 'blur',
774
+ onFocus: 'focus',
775
+ });
776
+ /**
777
+ * A supportive floating text box that offers contextual details about an associated element when hovered over or focused. Use for supplementary, non-critical information such as labelling icon buttons or describing ambiguous UI elements.
778
+ */
779
+ export const Tip = createComponent('Tip');
780
+ /**
781
+ * A compact title-and-caption pair for displaying a primary label with an optional secondary descriptor, such as a person's name with their job title or a heading with a subtitle.
782
+ */
783
+ export const TitleCaption = createComponent('TitleCaption');
784
+ /**
785
+ * A chevron arrow indicator that toggles between down (collapsed) and up (expanded) directions. Use as a standalone expand/collapse affordance, such as in custom collapsible sections or tree nodes.
786
+ */
787
+ export const ToggleableArrow = createComponent('ToggleableArrow');
788
+ /**
789
+ * A hierarchical selector for choosing from a tree-structured list of parent-child relationships with expand/collapse navigation. Use for selecting from deeply nested data like org structures, file systems, directories, or classification hierarchies.
790
+ */
791
+ export const Tree = createComponent('Tree', {
792
+ onChange: 'change',
793
+ onFooterAction: 'footerAction',
794
+ });
795
+ /**
796
+ * A dropdown select component with a hierarchical tree structure for choosing from nested parent-child options. Use when users need to pick from deeply nested data like org structures, file systems, or classification hierarchies, but the tree should stay collapsed behind a dropdown trigger. Use Tree instead when the hierarchy should be visible at all times.
797
+ */
798
+ export const TreeSelect = createComponent('TreeSelect', {
799
+ onChange: 'change',
800
+ });
801
+ /**
802
+ * Vertical stack layout that arranges children top-to-bottom in a column with token-based spacing. Use for stacking elements vertically — e.g. form field groups, page sections, or lists of content blocks. Prefer HStack for horizontal side-by-side arrangement and Box for complex layouts needing custom dimensions, borders, or backgrounds.
803
+ */
295
804
  export const VStack = createComponent('VStack');
805
+ /**
806
+ * Embedded video player with 16:9 aspect ratio
807
+ */
808
+ export const Video = createComponent('Video');
809
+ /**
810
+ * A specialized email input for entering work email addresses, featuring a domain suffix dropdown selector so users type only the username while choosing from a predefined list of company domains
811
+ */
812
+ export const WorkEmail = createComponent('WorkEmail', {
813
+ onChange: 'change',
814
+ onBlur: 'blur',
815
+ onFocus: 'focus',
816
+ onClick: 'click',
817
+ onKeydown: 'keydown',
818
+ onKeyup: 'keyup',
819
+ onPaste: 'paste',
820
+ onMouseenter: 'mouseenter',
821
+ onMouseleave: 'mouseleave',
822
+ });
823
+ /**
824
+ * Dashboard tile chrome with a fixed header (start: heading + sub-heading; end: optional configure button) and a children body. The header renders immediately when the spec lands so the chrome is visible while the body subtree resolves its run_query data through a WithSpinner. Use this instead of the legacy Card for every dashboard tile (KPI, visual chart, grid).
825
+ */
826
+ export const AnalyticsCard = createComponent('AnalyticsCard', {
827
+ onConfigure: 'configure',
828
+ });
829
+ /**
830
+ * Resizable dashboard board for AI widget layouts. Wraps each child in a Pebble ResizableBoard block.
831
+ */
832
+ export const ResizableBoard = createComponent('ResizableBoard');
833
+ /**
834
+ * Raw ECharts renderer for SDUI. Provide a JSON-safe ECharts option object. It fills its parent card by default and keeps a usable minimum height when no fixed parent height exists; optional height/width can override sizing.
835
+ */
836
+ export const EChart = createComponent('EChart', {
837
+ onClick: 'click',
838
+ onLegendChange: 'legendChange',
839
+ onDataZoomChange: 'dataZoomChange',
840
+ });
841
+ /**
842
+ * Read-only HTML content rendered with the shared RichTextEditor (non-editable). Generic SDUI building block for narrative or explanatory copy in any product layout.
843
+ */
844
+ export const RichText = createComponent('RichText');
845
+ /**
846
+ * Deprecated alias for RichText. Same props; prefer type `RichText` in new specs.
847
+ */
848
+ export const DashboardRichText = createComponent('DashboardRichText');
849
+ /**
850
+ * Auto-fetching grid for Rippling Custom Objects. Provide objectApiName and fieldApiNames to display records with auto-generated columns, pagination, sorting, and field-type formatting. Increment refreshKey to force a data refresh after mutations.
851
+ */
296
852
  export const CustomObjectGrid = createComponent('CustomObjectGrid');
853
+ /**
854
+ * Full-featured object list page with list view management. Supports multiple list views, view switching, inline editing, bulk actions, and record management. Use objectApiName to specify the object. Optionally set defaultListViewId to pre-select a specific list view.
855
+ */
297
856
  export const ObjectListView = createComponent('ObjectListView');
857
+ /**
858
+ * Vertical bar chart powered by ECharts. Provide series (name + data array) and optional categories for the x-axis. Use showStackedPercent for 100%-stacked bars, showBarLabel to render values on bars, and showLegend to display a series legend. Use $bindState on selected to capture the clicked bar.
859
+ */
860
+ export const BarChart = createComponent('BarChart', {
861
+ onBarClick: 'barClick',
862
+ });
863
+ /**
864
+ * Line chart powered by ECharts. Provide series (name + data array) and optional categories for the x-axis. Use connectNulls to bridge null gaps, showAreaPercent for 100%-stacked area, and showLegend to display a series legend.
865
+ */
866
+ export const LineChart = createComponent('LineChart');
867
+ /**
868
+ * Horizontal bar chart powered by ECharts. Same data shape as BarChart but renders bars horizontally. Categories appear on the y-axis and values on the x-axis.
869
+ */
870
+ export const HorizontalBarChart = createComponent('HorizontalBarChart');
871
+ /**
872
+ * Combination chart with bars and lines on dual Y-axes. Bars use the left Y-axis by default; lines can use the right Y-axis via yAxisIndex: 1.
873
+ */
874
+ export const CombinationChart = createComponent('CombinationChart');
875
+ /**
876
+ * Pie / donut chart. Each series entry has a data array of {name, value} pairs. Use radius: ["50%", "70%"] for a donut hole.
877
+ */
878
+ export const PieChart = createComponent('PieChart');
879
+ /**
880
+ * Scatter plot. Each series contains [x, y] data pairs plotted as individual points.
881
+ */
882
+ export const ScatterChart = createComponent('ScatterChart');
883
+ /**
884
+ * Funnel chart for conversion or stage-based data. Data items are ordered by value (largest at top).
885
+ */
886
+ export const FunnelChart = createComponent('FunnelChart');
887
+ /**
888
+ * Gauge (speedometer) chart. Displays a single numeric value against colored segments. Segments define the scale breakpoints and their colors.
889
+ */
890
+ export const GaugeChart = createComponent('GaugeChart');
891
+ /**
892
+ * Sunburst (multi-level pie) chart for hierarchical data. Each node has a name, optional value, and optional children array.
893
+ */
894
+ export const SunburstChart = createComponent('SunburstChart');
895
+ /**
896
+ * Wrapper that shows a spinner while loading. Emits `load` once on mount so a handler can start fetching data. Renders children only when `isLoading` is false.
897
+ */
898
+ export const WithSpinner = createComponent('WithSpinner', {
899
+ onLoad: 'load',
900
+ });
901
+ /**
902
+ * Radar (spider) chart for comparing multiple variables across categories. Each indicator defines a spoke axis. Provide radarIndicators (axis definitions) and radarOptions (series data).
903
+ */
904
+ export const RadarChart = createComponent('RadarChart');
905
+ /**
906
+ * Radar chart with filled area between data points and the center. Same data shape as RadarChart but renders with semi-transparent area fill for each series.
907
+ */
908
+ export const RadarFilledChart = createComponent('RadarFilledChart');
909
+ /**
910
+ * Calendar heatmap chart that renders data points on a calendar grid. Each cell represents a day, colored by value intensity. Provide heatmapOptions with [date, value] data and calendarOptions with a date range.
911
+ */
912
+ export const HeatmapCalendarChart = createComponent('HeatmapCalendarChart');
913
+ /**
914
+ * Grid-based heatmap chart for showing magnitude across two dimensions. Data format: [[xIndex, yIndex, value], …]. Provide category labels for both axes.
915
+ */
916
+ export const HeatmapChart = createComponent('HeatmapChart');
917
+ /**
918
+ * Treemap chart for visualizing hierarchical data as nested rectangles. Each node has a name and either a numeric value (leaf) or children (branch). Rectangle size represents the value.
919
+ */
920
+ export const TreemapChart = createComponent('TreemapChart');
921
+ /**
922
+ * Read-only SQL syntax highlighter powered by Monaco Editor. Renders a formatted, non-editable SQL block with auto-height based on line count and a max height cap.
923
+ */
924
+ export const SqlHighlight = createComponent('SqlHighlight');
298
925
  //# sourceMappingURL=components.mjs.map