@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,170 @@
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
  */
8
7
 
9
8
  import type { ActionBinding } from './actions';
9
+ import type { StateRef, BindStateRef } from './state';
10
+ import type { CondRef, TemplateRef } from './props';
11
+ import type { ItemRef, BindItemRef } from './directives';
12
+ import type {
13
+ ActionCardCatalogProps,
14
+ AiIconCatalogProps,
15
+ AlertCatalogProps,
16
+ AnimationCatalogProps,
17
+ ApiErrorCatalogProps,
18
+ AppGroupLoaderCatalogProps,
19
+ AppGroupSelectCatalogProps,
20
+ AppNavBarCatalogProps,
21
+ AtomsSeparatorCatalogProps,
22
+ AvatarCatalogProps,
23
+ AvatarListCatalogProps,
24
+ BadgeCatalogProps,
25
+ BoxCatalogProps,
26
+ BreadcrumbCatalogProps,
27
+ ButtonCatalogProps,
28
+ ButtonGroupCatalogProps,
29
+ CardCatalogProps,
30
+ CardGroupCatalogProps,
31
+ CarouselCatalogProps,
32
+ ChartLoaderCatalogProps,
33
+ CheckListCatalogProps,
34
+ CheckboxCatalogProps,
35
+ CheckboxGroupCatalogProps,
36
+ ChipCatalogProps,
37
+ ChipGroupCatalogProps,
38
+ CircleCatalogProps,
39
+ ColorPickerCatalogProps,
40
+ ContentLoaderCatalogProps,
41
+ CountDownCatalogProps,
42
+ CountryCatalogProps,
43
+ CurrencyCatalogProps,
44
+ DateCatalogProps,
45
+ DateInlineMultiCatalogProps,
46
+ DateRangeCatalogProps,
47
+ DaySelectorCatalogProps,
48
+ DistributionBarCatalogProps,
49
+ DividerCatalogProps,
50
+ DraggableListCatalogProps,
51
+ DrawerCatalogProps,
52
+ DropdownCatalogProps,
53
+ EmailCatalogProps,
54
+ ExpansionPanelCatalogProps,
55
+ ExpansionPanelGroupCatalogProps,
56
+ FieldCatalogProps,
57
+ FileCatalogProps,
58
+ FileDropCatalogProps,
59
+ FloatingButtonCatalogProps,
60
+ GridCatalogProps,
61
+ HStackCatalogProps,
62
+ HeadingCatalogProps,
63
+ IconCatalogProps,
64
+ IconButtonCatalogProps,
65
+ ImageCatalogProps,
66
+ ImageViewerCatalogProps,
67
+ InputGroupCatalogProps,
68
+ ItemNavigatorCatalogProps,
69
+ LabelCatalogProps,
70
+ LabelGroupCatalogProps,
71
+ LayoutCatalogProps,
72
+ LayoutCardCatalogProps,
73
+ LinkCatalogProps,
74
+ ListItemCatalogProps,
75
+ LoaderCardCatalogProps,
76
+ LocationCardCatalogProps,
77
+ MaskerCatalogProps,
78
+ MenuListCatalogProps,
79
+ ModalCatalogProps,
80
+ ModalCloseButtonCatalogProps,
81
+ ModalFooterCatalogProps,
82
+ NestedListCatalogProps,
83
+ NumberCatalogProps,
84
+ ObjectUICatalogProps,
85
+ ObjectUIContentCatalogProps,
86
+ ObjectUIHeaderCatalogProps,
87
+ ObjectUIStatsCatalogProps,
88
+ ObjectUITemplateCatalogProps,
89
+ PageAppLogoCatalogProps,
90
+ PageContentCatalogProps,
91
+ PageFooterCatalogProps,
92
+ PageHeaderCatalogProps,
93
+ PaginateCatalogProps,
94
+ PaneCatalogProps,
95
+ PasswordCatalogProps,
96
+ PercentageCatalogProps,
97
+ PhoneCatalogProps,
98
+ ProgressBarCatalogProps,
99
+ ProgressStepsCatalogProps,
100
+ RadioCatalogProps,
101
+ RangeSliderCatalogProps,
102
+ ReportLoaderCatalogProps,
103
+ ReportShareLoaderCatalogProps,
104
+ ReportViewerLoaderCatalogProps,
105
+ ResponsiveCatalogProps,
106
+ SegmentedControlCatalogProps,
107
+ SelectCatalogProps,
108
+ SelectableGroupCatalogProps,
109
+ SelectableMenuCatalogProps,
110
+ SettingsLoaderCatalogProps,
111
+ ShowMoreCatalogProps,
112
+ SignatureCatalogProps,
113
+ SinCatalogProps,
114
+ SkeletonCatalogProps,
115
+ SliderCatalogProps,
116
+ SnackBarCatalogProps,
117
+ SpinnerCatalogProps,
118
+ SplitButtonCatalogProps,
119
+ SplitPaneCatalogProps,
120
+ SsnCatalogProps,
121
+ StatusCatalogProps,
122
+ StepperCatalogProps,
123
+ SurveyCatalogProps,
124
+ SwitchCatalogProps,
125
+ TabCatalogProps,
126
+ TableBasicCatalogProps,
127
+ TextCatalogProps,
128
+ TextAutoSuggestCatalogProps,
129
+ TextClipCatalogProps,
130
+ TextInputCatalogProps,
131
+ TextSnippetCatalogProps,
132
+ TextareaCatalogProps,
133
+ TimeCatalogProps,
134
+ TimeRangeCatalogProps,
135
+ TimezoneCatalogProps,
136
+ TipCatalogProps,
137
+ TitleCaptionCatalogProps,
138
+ ToggleableArrowCatalogProps,
139
+ TreeCatalogProps,
140
+ TreeSelectCatalogProps,
141
+ VStackCatalogProps,
142
+ VideoCatalogProps,
143
+ WorkEmailCatalogProps,
144
+ AnalyticsCardCatalogProps,
145
+ ResizableBoardCatalogProps,
146
+ EChartCatalogProps,
147
+ RichTextCatalogProps,
148
+ DashboardRichTextCatalogProps,
149
+ CustomObjectGridCatalogProps,
150
+ ObjectListViewCatalogProps,
151
+ BarChartCatalogProps,
152
+ LineChartCatalogProps,
153
+ HorizontalBarChartCatalogProps,
154
+ CombinationChartCatalogProps,
155
+ PieChartCatalogProps,
156
+ ScatterChartCatalogProps,
157
+ FunnelChartCatalogProps,
158
+ GaugeChartCatalogProps,
159
+ SunburstChartCatalogProps,
160
+ WithSpinnerCatalogProps,
161
+ RadarChartCatalogProps,
162
+ RadarFilledChartCatalogProps,
163
+ HeatmapCalendarChartCatalogProps,
164
+ HeatmapChartCatalogProps,
165
+ TreemapChartCatalogProps,
166
+ SqlHighlightCatalogProps,
167
+ } from './propTypes';
10
168
 
11
169
  export interface SpecNode {
12
170
  type: string;
@@ -20,8 +178,34 @@ export interface SpecNode {
20
178
 
21
179
  type EventMap = Record<string, string>;
22
180
 
23
- function createComponent(type: string, eventMap: EventMap = {}) {
24
- return (props: Record<string, unknown> = {}): SpecNode => {
181
+ interface ComponentDirectives {
182
+ visible?: unknown;
183
+ watch?: Record<string, unknown>;
184
+ repeat?: { statePath: string; key?: string };
185
+ }
186
+
187
+ /**
188
+ * Wrap each prop with the set of runtime refs the renderer accepts in
189
+ * place of a literal value: state reads/binds, conditional/template
190
+ * expressions, and per-row item refs (inside repeat loops). This is what
191
+ * lets callers write `value: state.foo.$bind` or `label: cond(...)`
192
+ * against typed prop interfaces — the renderer dereferences these at
193
+ * runtime.
194
+ */
195
+ type Bindable<T> = {
196
+ [K in keyof T]: T[K] | StateRef | BindStateRef | CondRef | TemplateRef | ItemRef | BindItemRef;
197
+ };
198
+
199
+ const hasOwn = Object.prototype.hasOwnProperty;
200
+
201
+ // Conditional arg shape: when TProps has no required fields, the props
202
+ // arg is optional (Button() works); when it does, it's required
203
+ // (Badge() errors because text is required).
204
+ type CreateComponentArgs<TProps> = {} extends TProps ? [props?: TProps] : [props: TProps];
205
+
206
+ function createComponent<TProps>(type: string, eventMap: EventMap = {}) {
207
+ return (...args: CreateComponentArgs<TProps>): SpecNode => {
208
+ const props = (args[0] ?? {}) as Record<string, unknown>;
25
209
  const node: SpecNode = { type, props: {}, children: [] };
26
210
  for (const [key, value] of Object.entries(props)) {
27
211
  if (key === 'children') {
@@ -32,105 +216,427 @@ function createComponent(type: string, eventMap: EventMap = {}) {
32
216
  node.watch = value as Record<string, unknown>;
33
217
  } else if (key === 'repeat') {
34
218
  node.repeat = value as { statePath: string; key?: string };
35
- } else if (eventMap[key]) {
36
- node.on = node.on || {};
37
- node.on[eventMap[key]] = value as ActionBinding | ActionBinding[];
38
219
  } else {
39
- node.props[key] = value;
220
+ // hasOwn guards against Object.prototype keys (toString, etc.)
221
+ // matching as events via the prototype chain.
222
+ const eventName = hasOwn.call(eventMap, key) ? eventMap[key] : undefined;
223
+ if (eventName) {
224
+ node.on = node.on || {};
225
+ node.on[eventName] = value as ActionBinding | ActionBinding[];
226
+ } else {
227
+ node.props[key] = value;
228
+ }
40
229
  }
41
230
  }
42
231
  return node;
43
232
  };
44
233
  }
45
234
 
46
- export const TextInput = createComponent('TextInput', {
47
- onChange: 'change',
48
- onBlur: 'blur',
49
- onFocus: 'focus',
50
- onClick: 'click',
51
- onKeydown: 'keydown',
52
- onKeyup: 'keyup',
53
- onPaste: 'paste',
54
- onMouseenter: 'mouseenter',
55
- onMouseleave: 'mouseleave',
235
+ export type ActionCardProps = Bindable<ActionCardCatalogProps> & {
236
+ onPressPrimary?: ActionBinding | ActionBinding[];
237
+ onPressSecondary?: ActionBinding | ActionBinding[];
238
+ } & ComponentDirectives;
239
+ /**
240
+ * Placeholder for states like empty, success, error, and loading, featuring animations, icons, text, and action buttons.
241
+ */
242
+ export const ActionCard = createComponent<ActionCardProps>('ActionCard', {
243
+ onPressPrimary: 'pressPrimary',
244
+ onPressSecondary: 'pressSecondary',
245
+ });
246
+
247
+ export type AiIconProps = Bindable<AiIconCatalogProps> & ComponentDirectives;
248
+ /**
249
+ * Branded Rippling AI icon used to indicate AI-powered features or content. Displays the Rippling AI star icon with optional "Rippling AI" label text.
250
+ */
251
+ export const AiIcon = createComponent<AiIconProps>('AiIcon');
252
+
253
+ export type AlertProps = Bindable<AlertCatalogProps> & {
254
+ onPressPrimary?: ActionBinding | ActionBinding[];
255
+ onPressSecondary?: ActionBinding | ActionBinding[];
256
+ onDismiss?: ActionBinding | ActionBinding[];
257
+ } & ComponentDirectives;
258
+ /**
259
+ * 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).
260
+ */
261
+ export const Alert = createComponent<AlertProps>('Alert', {
262
+ onPressPrimary: 'pressPrimary',
263
+ onPressSecondary: 'pressSecondary',
264
+ onDismiss: 'dismiss',
56
265
  });
57
- export const Select = createComponent('Select', {
266
+
267
+ export type AnimationProps = Bindable<AnimationCatalogProps> & ComponentDirectives;
268
+ /**
269
+ * 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.
270
+ */
271
+ export const Animation = createComponent<AnimationProps>('Animation');
272
+
273
+ export type ApiErrorProps = Bindable<ApiErrorCatalogProps> & ComponentDirectives;
274
+ /**
275
+ * 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.
276
+ */
277
+ export const ApiError = createComponent<ApiErrorProps>('ApiError');
278
+
279
+ export type AppGroupLoaderProps = Bindable<AppGroupLoaderCatalogProps> & ComponentDirectives;
280
+ /**
281
+ * 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.
282
+ */
283
+ export const AppGroupLoader = createComponent<AppGroupLoaderProps>('AppGroupLoader');
284
+
285
+ export type AppGroupSelectProps = Bindable<AppGroupSelectCatalogProps> & {
286
+ onChange?: ActionBinding | ActionBinding[];
287
+ onBlur?: ActionBinding | ActionBinding[];
288
+ onFocus?: ActionBinding | ActionBinding[];
289
+ onPaste?: ActionBinding | ActionBinding[];
290
+ onMenuToggle?: ActionBinding | ActionBinding[];
291
+ } & ComponentDirectives;
292
+ /**
293
+ * 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.
294
+ */
295
+ export const AppGroupSelect = createComponent<AppGroupSelectProps>('AppGroupSelect', {
58
296
  onChange: 'change',
59
297
  onBlur: 'blur',
60
298
  onFocus: 'focus',
61
299
  onPaste: 'paste',
62
300
  onMenuToggle: 'menuToggle',
63
301
  });
64
- export const AppGroupSelect = createComponent('AppGroupSelect', {
302
+
303
+ export type AppNavBarProps = Bindable<AppNavBarCatalogProps> & {
304
+ onNavigate?: ActionBinding | ActionBinding[];
305
+ onAction?: ActionBinding | ActionBinding[];
306
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
307
+ /**
308
+ * 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.
309
+ */
310
+ export const AppNavBar = createComponent<AppNavBarProps>('AppNavBar', {
311
+ onNavigate: 'navigate',
312
+ onAction: 'action',
313
+ });
314
+
315
+ export type AtomsSeparatorProps = Bindable<AtomsSeparatorCatalogProps> & ComponentDirectives;
316
+ /**
317
+ * 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.
318
+ */
319
+ export const AtomsSeparator = createComponent<AtomsSeparatorProps>('AtomsSeparator');
320
+
321
+ export type AvatarProps = Bindable<AvatarCatalogProps> & {
322
+ onPress?: ActionBinding | ActionBinding[];
323
+ } & ComponentDirectives;
324
+ /**
325
+ * 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.
326
+ */
327
+ export const Avatar = createComponent<AvatarProps>('Avatar', {
328
+ onPress: 'press',
329
+ });
330
+
331
+ export type AvatarListProps = Bindable<AvatarListCatalogProps> & ComponentDirectives;
332
+ /**
333
+ * 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.
334
+ */
335
+ export const AvatarList = createComponent<AvatarListProps>('AvatarList');
336
+
337
+ export type BadgeProps = Bindable<BadgeCatalogProps> & ComponentDirectives;
338
+ /**
339
+ * 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).
340
+ */
341
+ export const Badge = createComponent<BadgeProps>('Badge');
342
+
343
+ export type BoxProps = Bindable<BoxCatalogProps> & ComponentDirectives & { children?: SpecNode | SpecNode[] };
344
+ /**
345
+ * 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.
346
+ */
347
+ export const Box = createComponent<BoxProps>('Box');
348
+
349
+ export type BreadcrumbProps = Bindable<BreadcrumbCatalogProps> & {
350
+ onSelect?: ActionBinding | ActionBinding[];
351
+ } & ComponentDirectives;
352
+ /**
353
+ * 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.
354
+ */
355
+ export const Breadcrumb = createComponent<BreadcrumbProps>('Breadcrumb', {
356
+ onSelect: 'select',
357
+ });
358
+
359
+ export type ButtonProps = Bindable<ButtonCatalogProps> & {
360
+ onPress?: ActionBinding | ActionBinding[];
361
+ onPressWhileDisabled?: ActionBinding | ActionBinding[];
362
+ onMouseEnter?: ActionBinding | ActionBinding[];
363
+ onMouseLeave?: ActionBinding | ActionBinding[];
364
+ } & ComponentDirectives;
365
+ /**
366
+ * 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.
367
+ */
368
+ export const Button = createComponent<ButtonProps>('Button', {
369
+ onPress: 'press',
370
+ onPressWhileDisabled: 'pressWhileDisabled',
371
+ onMouseEnter: 'mouseEnter',
372
+ onMouseLeave: 'mouseLeave',
373
+ });
374
+
375
+ export type ButtonGroupProps = Bindable<ButtonGroupCatalogProps> &
376
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
377
+ /**
378
+ * Layout container for arranging multiple Button elements horizontally or vertically with configurable placement, alignment, gap, and wrapping.
379
+ */
380
+ export const ButtonGroup = createComponent<ButtonGroupProps>('ButtonGroup');
381
+
382
+ export type CardProps = Bindable<CardCatalogProps> & {
383
+ onEdit?: ActionBinding | ActionBinding[];
384
+ onDelete?: ActionBinding | ActionBinding[];
385
+ onAdd?: ActionBinding | ActionBinding[];
386
+ onClick?: ActionBinding | ActionBinding[];
387
+ onAction?: ActionBinding | ActionBinding[];
388
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
389
+ /**
390
+ * 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).
391
+ */
392
+ export const Card = createComponent<CardProps>('Card', {
393
+ onEdit: 'edit',
394
+ onDelete: 'delete',
395
+ onAdd: 'add',
396
+ onClick: 'click',
397
+ onAction: 'action',
398
+ });
399
+
400
+ export type CardGroupProps = Bindable<CardGroupCatalogProps> &
401
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
402
+ /**
403
+ * 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.
404
+ */
405
+ export const CardGroup = createComponent<CardGroupProps>('CardGroup');
406
+
407
+ export type CarouselProps = Bindable<CarouselCatalogProps> & {
408
+ onDone?: ActionBinding | ActionBinding[];
409
+ } & ComponentDirectives;
410
+ /**
411
+ * 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.
412
+ */
413
+ export const Carousel = createComponent<CarouselProps>('Carousel', {
414
+ onDone: 'done',
415
+ });
416
+
417
+ export type ChartLoaderProps = Bindable<ChartLoaderCatalogProps> & {
418
+ onLoad?: ActionBinding | ActionBinding[];
419
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
420
+ /**
421
+ * 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.
422
+ */
423
+ export const ChartLoader = createComponent<ChartLoaderProps>('ChartLoader', {
424
+ onLoad: 'load',
425
+ });
426
+
427
+ export type CheckListProps = Bindable<CheckListCatalogProps> & {
428
+ onChange?: ActionBinding | ActionBinding[];
429
+ } & ComponentDirectives;
430
+ /**
431
+ * 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.
432
+ */
433
+ export const CheckList = createComponent<CheckListProps>('CheckList', {
434
+ onChange: 'change',
435
+ });
436
+
437
+ export type CheckboxProps = Bindable<CheckboxCatalogProps> & {
438
+ onChange?: ActionBinding | ActionBinding[];
439
+ onBlur?: ActionBinding | ActionBinding[];
440
+ } & ComponentDirectives;
441
+ /**
442
+ * 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.
443
+ */
444
+ export const Checkbox = createComponent<CheckboxProps>('Checkbox', {
65
445
  onChange: 'change',
66
446
  onBlur: 'blur',
67
- onFocus: 'focus',
68
- onPaste: 'paste',
69
- onMenuToggle: 'menuToggle',
70
447
  });
71
- export const Checkbox = createComponent('Checkbox', { onChange: 'change', onBlur: 'blur' });
72
- export const CheckboxGroup = createComponent('CheckboxGroup', { onChange: 'change', onBlur: 'blur' });
73
- export const Email = createComponent('Email', {
448
+
449
+ export type CheckboxGroupProps = Bindable<CheckboxGroupCatalogProps> & {
450
+ onChange?: ActionBinding | ActionBinding[];
451
+ onBlur?: ActionBinding | ActionBinding[];
452
+ } & ComponentDirectives;
453
+ /**
454
+ * 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.
455
+ */
456
+ export const CheckboxGroup = createComponent<CheckboxGroupProps>('CheckboxGroup', {
74
457
  onChange: 'change',
75
458
  onBlur: 'blur',
76
- onFocus: 'focus',
77
- onClick: 'click',
78
- onKeydown: 'keydown',
79
- onKeyup: 'keyup',
80
- onPaste: 'paste',
81
- onMouseenter: 'mouseenter',
82
- onMouseleave: 'mouseleave',
83
459
  });
84
- export const Number = createComponent('Number', {
460
+
461
+ export type ChipProps = Bindable<ChipCatalogProps> & {
462
+ onDismiss?: ActionBinding | ActionBinding[];
463
+ onPress?: ActionBinding | ActionBinding[];
464
+ } & ComponentDirectives;
465
+ /**
466
+ * 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.
467
+ */
468
+ export const Chip = createComponent<ChipProps>('Chip', {
469
+ onDismiss: 'dismiss',
470
+ onPress: 'press',
471
+ });
472
+
473
+ export type ChipGroupProps = Bindable<ChipGroupCatalogProps> & {
474
+ onOverflowChange?: ActionBinding | ActionBinding[];
475
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
476
+ /**
477
+ * 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.
478
+ */
479
+ export const ChipGroup = createComponent<ChipGroupProps>('ChipGroup', {
480
+ onOverflowChange: 'overflowChange',
481
+ });
482
+
483
+ export type CircleProps = Bindable<CircleCatalogProps> & ComponentDirectives;
484
+ /**
485
+ * Circular graphic element for status or decoration
486
+ */
487
+ export const Circle = createComponent<CircleProps>('Circle');
488
+
489
+ export type ColorPickerProps = Bindable<ColorPickerCatalogProps> & {
490
+ onChange?: ActionBinding | ActionBinding[];
491
+ onBlur?: ActionBinding | ActionBinding[];
492
+ } & ComponentDirectives;
493
+ /**
494
+ * 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.
495
+ */
496
+ export const ColorPicker = createComponent<ColorPickerProps>('ColorPicker', {
85
497
  onChange: 'change',
86
498
  onBlur: 'blur',
87
- onChangeRaw: 'changeRaw',
88
- onChangeCalculationState: 'changeCalculationState',
89
499
  });
90
- export const Date = createComponent('Date', { onChange: 'change', onBlur: 'blur' });
91
- export const DateRange = createComponent('DateRange', { onChange: 'change', onBlur: 'blur' });
92
- export const DateInlineMulti = createComponent('DateInlineMulti', { onChange: 'change', onBlur: 'blur' });
93
- export const Textarea = createComponent('Textarea', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
94
- export const Radio = createComponent('Radio', {
500
+
501
+ export type ContentLoaderProps = Bindable<ContentLoaderCatalogProps> & ComponentDirectives;
502
+ /**
503
+ * 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.
504
+ */
505
+ export const ContentLoader = createComponent<ContentLoaderProps>('ContentLoader');
506
+
507
+ export type CountDownProps = Bindable<CountDownCatalogProps> & ComponentDirectives;
508
+ /**
509
+ * Countdown timer displaying time remaining until a target date
510
+ */
511
+ export const CountDown = createComponent<CountDownProps>('CountDown');
512
+
513
+ export type CountryProps = Bindable<CountryCatalogProps> & ComponentDirectives;
514
+ /**
515
+ * 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.
516
+ */
517
+ export const Country = createComponent<CountryProps>('Country');
518
+
519
+ export type CurrencyProps = Bindable<CurrencyCatalogProps> & {
520
+ onChange?: ActionBinding | ActionBinding[];
521
+ onBlur?: ActionBinding | ActionBinding[];
522
+ } & ComponentDirectives;
523
+ /**
524
+ * 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.
525
+ */
526
+ export const Currency = createComponent<CurrencyProps>('Currency', {
95
527
  onChange: 'change',
96
528
  onBlur: 'blur',
97
- onMouseenter: 'mouseenter',
98
- onMouseleave: 'mouseleave',
99
529
  });
100
- export const Phone = createComponent('Phone', {
530
+
531
+ export type DateProps = Bindable<DateCatalogProps> & {
532
+ onChange?: ActionBinding | ActionBinding[];
533
+ onBlur?: ActionBinding | ActionBinding[];
534
+ } & ComponentDirectives;
535
+ /**
536
+ * 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.
537
+ */
538
+ export const Date = createComponent<DateProps>('Date', {
101
539
  onChange: 'change',
102
540
  onBlur: 'blur',
103
- onFocus: 'focus',
104
- onClick: 'click',
105
- onKeydown: 'keydown',
106
- onKeyup: 'keyup',
107
- onPaste: 'paste',
108
- onMouseenter: 'mouseenter',
109
- onMouseleave: 'mouseleave',
110
- onCountryCodeChange: 'countryCodeChange',
111
541
  });
112
- export const Password = createComponent('Password', {
542
+
543
+ export type DateInlineMultiProps = Bindable<DateInlineMultiCatalogProps> & {
544
+ onChange?: ActionBinding | ActionBinding[];
545
+ onBlur?: ActionBinding | ActionBinding[];
546
+ } & ComponentDirectives;
547
+ /**
548
+ * 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.
549
+ */
550
+ export const DateInlineMulti = createComponent<DateInlineMultiProps>('DateInlineMulti', {
113
551
  onChange: 'change',
114
552
  onBlur: 'blur',
115
- onFocus: 'focus',
116
- onClick: 'click',
117
- onKeydown: 'keydown',
118
- onKeyup: 'keyup',
119
- onPaste: 'paste',
120
- onMouseenter: 'mouseenter',
121
- onMouseleave: 'mouseleave',
122
- onReveal: 'reveal',
123
553
  });
124
- export const Switch = createComponent('Switch', { onChange: 'change', onBlur: 'blur' });
125
- export const FileDrop = createComponent('FileDrop', { onChange: 'change', onBlur: 'blur' });
126
- export const TextAutoSuggest = createComponent('TextAutoSuggest', {
554
+
555
+ export type DateRangeProps = Bindable<DateRangeCatalogProps> & {
556
+ onChange?: ActionBinding | ActionBinding[];
557
+ onBlur?: ActionBinding | ActionBinding[];
558
+ } & ComponentDirectives;
559
+ /**
560
+ * 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.
561
+ */
562
+ export const DateRange = createComponent<DateRangeProps>('DateRange', {
127
563
  onChange: 'change',
128
564
  onBlur: 'blur',
129
- onFocus: 'focus',
130
- onClick: 'click',
131
565
  });
132
- export const Currency = createComponent('Currency', { onChange: 'change', onBlur: 'blur' });
133
- export const WorkEmail = createComponent('WorkEmail', {
566
+
567
+ export type DaySelectorProps = Bindable<DaySelectorCatalogProps> & {
568
+ onChange?: ActionBinding | ActionBinding[];
569
+ } & ComponentDirectives;
570
+ /**
571
+ * 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.
572
+ */
573
+ export const DaySelector = createComponent<DaySelectorProps>('DaySelector', {
574
+ onChange: 'change',
575
+ });
576
+
577
+ export type DistributionBarProps = Bindable<DistributionBarCatalogProps> & ComponentDirectives;
578
+ /**
579
+ * 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.
580
+ */
581
+ export const DistributionBar = createComponent<DistributionBarProps>('DistributionBar');
582
+
583
+ export type DividerProps = Bindable<DividerCatalogProps> & ComponentDirectives;
584
+ /**
585
+ * Horizontal line to visually separate content sections
586
+ */
587
+ export const Divider = createComponent<DividerProps>('Divider');
588
+
589
+ export type DraggableListProps = Bindable<DraggableListCatalogProps> & {
590
+ onUpdate?: ActionBinding | ActionBinding[];
591
+ onRemove?: ActionBinding | ActionBinding[];
592
+ onDragStart?: ActionBinding | ActionBinding[];
593
+ onDragEnd?: ActionBinding | ActionBinding[];
594
+ } & ComponentDirectives;
595
+ /**
596
+ * 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.
597
+ */
598
+ export const DraggableList = createComponent<DraggableListProps>('DraggableList', {
599
+ onUpdate: 'update',
600
+ onRemove: 'remove',
601
+ onDragStart: 'dragStart',
602
+ onDragEnd: 'dragEnd',
603
+ });
604
+
605
+ export type DrawerProps = Bindable<DrawerCatalogProps> & {
606
+ onClose?: ActionBinding | ActionBinding[];
607
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
608
+ /**
609
+ * 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.
610
+ */
611
+ export const Drawer = createComponent<DrawerProps>('Drawer', {
612
+ onClose: 'close',
613
+ });
614
+
615
+ export type DropdownProps = Bindable<DropdownCatalogProps> & {
616
+ onChange?: ActionBinding | ActionBinding[];
617
+ } & ComponentDirectives;
618
+ /**
619
+ * 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.
620
+ */
621
+ export const Dropdown = createComponent<DropdownProps>('Dropdown', {
622
+ onChange: 'change',
623
+ });
624
+
625
+ export type EmailProps = Bindable<EmailCatalogProps> & {
626
+ onChange?: ActionBinding | ActionBinding[];
627
+ onBlur?: ActionBinding | ActionBinding[];
628
+ onFocus?: ActionBinding | ActionBinding[];
629
+ onClick?: ActionBinding | ActionBinding[];
630
+ onKeydown?: ActionBinding | ActionBinding[];
631
+ onKeyup?: ActionBinding | ActionBinding[];
632
+ onPaste?: ActionBinding | ActionBinding[];
633
+ onMouseenter?: ActionBinding | ActionBinding[];
634
+ onMouseleave?: ActionBinding | ActionBinding[];
635
+ } & ComponentDirectives;
636
+ /**
637
+ * 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.
638
+ */
639
+ export const Email = createComponent<EmailProps>('Email', {
134
640
  onChange: 'change',
135
641
  onBlur: 'blur',
136
642
  onFocus: 'focus',
@@ -141,168 +647,1077 @@ export const WorkEmail = createComponent('WorkEmail', {
141
647
  onMouseenter: 'mouseenter',
142
648
  onMouseleave: 'mouseleave',
143
649
  });
144
- export const Percentage = createComponent('Percentage', { onChange: 'change', onBlur: 'blur' });
145
- export const SegmentedControl = createComponent('SegmentedControl', { onChange: 'change', onBlur: 'blur' });
146
- export const Time = createComponent('Time', { onChange: 'change', onBlur: 'blur' });
147
- export const TimeRange = createComponent('TimeRange', { onChange: 'change', onBlur: 'blur' });
148
- export const Timezone = createComponent('Timezone', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
149
- export const Slider = createComponent('Slider', {
650
+
651
+ export type ExpansionPanelProps = Bindable<ExpansionPanelCatalogProps> & {
652
+ onToggle?: ActionBinding | ActionBinding[];
653
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
654
+ /**
655
+ * 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.
656
+ */
657
+ export const ExpansionPanel = createComponent<ExpansionPanelProps>('ExpansionPanel', { onToggle: 'toggle' });
658
+
659
+ export type ExpansionPanelGroupProps = Bindable<ExpansionPanelGroupCatalogProps> &
660
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
661
+ /**
662
+ * 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.
663
+ */
664
+ export const ExpansionPanelGroup = createComponent<ExpansionPanelGroupProps>('ExpansionPanelGroup');
665
+
666
+ export type FieldProps = Bindable<FieldCatalogProps> &
667
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
668
+ /**
669
+ * 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.
670
+ */
671
+ export const Field = createComponent<FieldProps>('Field');
672
+
673
+ export type FileProps = Bindable<FileCatalogProps> & {
674
+ onChange?: ActionBinding | ActionBinding[];
675
+ onDelete?: ActionBinding | ActionBinding[];
676
+ } & ComponentDirectives;
677
+ /**
678
+ * 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.
679
+ */
680
+ export const File = createComponent<FileProps>('File', {
150
681
  onChange: 'change',
151
- onBlur: 'blur',
152
- onBeforeChange: 'beforeChange',
153
- onAfterChange: 'afterChange',
682
+ onDelete: 'delete',
154
683
  });
155
- export const RangeSlider = createComponent('RangeSlider', {
684
+
685
+ export type FileDropProps = Bindable<FileDropCatalogProps> & {
686
+ onChange?: ActionBinding | ActionBinding[];
687
+ onBlur?: ActionBinding | ActionBinding[];
688
+ } & ComponentDirectives;
689
+ /**
690
+ * 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.
691
+ */
692
+ export const FileDrop = createComponent<FileDropProps>('FileDrop', {
156
693
  onChange: 'change',
157
- onBeforeChange: 'beforeChange',
158
- onAfterChange: 'afterChange',
159
694
  onBlur: 'blur',
160
695
  });
161
- export const Masker = createComponent('Masker', { onChange: 'change', onBlur: 'blur' });
162
- export const DaySelector = createComponent('DaySelector', { onChange: 'change' });
163
- export const ColorPicker = createComponent('ColorPicker', { onChange: 'change', onBlur: 'blur' });
164
- export const SelectableGroup = createComponent('SelectableGroup', { onChange: 'change' });
165
- export const Ssn = createComponent('Ssn', { onChange: 'change', onBlur: 'blur' });
166
- export const Sin = createComponent('Sin', { onChange: 'change', onBlur: 'blur' });
167
- export const Signature = createComponent('Signature', { onChange: 'change' });
168
- export const Survey = createComponent('Survey', { onChange: 'change' });
169
- export const Tree = createComponent('Tree', { onChange: 'change', onFooterAction: 'footerAction' });
170
- export const TreeSelect = createComponent('TreeSelect', { onChange: 'change' });
171
- export const File = createComponent('File', { onChange: 'change', onDelete: 'delete' });
172
- export const InputGroup = createComponent('InputGroup');
173
- export const Field = createComponent('Field');
174
- export const ActionCard = createComponent('ActionCard', {
175
- onPressPrimary: 'pressPrimary',
176
- onPressSecondary: 'pressSecondary',
177
- });
178
- export const Alert = createComponent('Alert', {
179
- onPressPrimary: 'pressPrimary',
180
- onPressSecondary: 'pressSecondary',
181
- onDismiss: 'dismiss',
182
- });
183
- export const Avatar = createComponent('Avatar', { onPress: 'press' });
184
- export const Badge = createComponent('Badge');
185
- export const Chip = createComponent('Chip', { onDismiss: 'dismiss', onPress: 'press' });
186
- export const Card = createComponent('Card', {
187
- onEdit: 'edit',
188
- onDelete: 'delete',
189
- onAdd: 'add',
190
- onClick: 'click',
191
- onAction: 'action',
192
- });
193
- export const ContentLoader = createComponent('ContentLoader');
194
- export const Divider = createComponent('Divider');
195
- export const Icon = createComponent('Icon', { onPress: 'press' });
196
- export const Label = createComponent('Label');
197
- export const ListItem = createComponent('ListItem', { onPress: 'press' });
198
- export const Modal = createComponent('Modal', { onClose: 'close' });
199
- export const ModalFooter = createComponent('ModalFooter');
200
- export const ProgressBar = createComponent('ProgressBar');
201
- export const Skeleton = createComponent('Skeleton');
202
- export const Spinner = createComponent('Spinner');
203
- export const Stepper = createComponent('Stepper', { onClick: 'click' });
204
- export const TextClip = createComponent('TextClip');
205
- export const TextSnippet = createComponent('TextSnippet');
206
- export const Tip = createComponent('Tip');
207
- export const CheckList = createComponent('CheckList', { onChange: 'change' });
208
- export const DistributionBar = createComponent('DistributionBar');
209
- export const ImageViewer = createComponent('ImageViewer');
210
- export const ObjectUI = createComponent('ObjectUI');
211
- export const ObjectUITemplate = createComponent('ObjectUITemplate');
212
- export const ObjectUIHeader = createComponent('ObjectUIHeader');
213
- export const ObjectUIContent = createComponent('ObjectUIContent');
214
- export const ObjectUIStats = createComponent('ObjectUIStats', { onActionClick: 'actionClick' });
215
- export const SnackBar = createComponent('SnackBar', { onDismiss: 'dismiss' });
216
- export const Video = createComponent('Video');
217
- export const AvatarList = createComponent('AvatarList');
218
- export const Image = createComponent('Image', { onPress: 'press', onLoad: 'load', onError: 'error' });
219
- export const AtomsSeparator = createComponent('AtomsSeparator');
220
- export const Carousel = createComponent('Carousel', { onDone: 'done' });
221
- export const TableBasic = createComponent('TableBasic');
222
- export const LocationCard = createComponent('LocationCard', {
223
- onEdit: 'edit',
224
- onDelete: 'delete',
225
- onClick: 'click',
226
- onAction: 'action',
227
- });
228
- export const LoaderCard = createComponent('LoaderCard');
229
- export const LayoutCard = createComponent('LayoutCard', { onPress: 'press' });
230
- export const AppGroupLoader = createComponent('AppGroupLoader');
231
- export const ChartLoader = createComponent('ChartLoader');
232
- export const ReportLoader = createComponent('ReportLoader');
233
- export const ReportShareLoader = createComponent('ReportShareLoader');
234
- export const ReportViewerLoader = createComponent('ReportViewerLoader');
235
- export const SettingsLoader = createComponent('SettingsLoader');
236
- export const ChipGroup = createComponent('ChipGroup', { onOverflowChange: 'overflowChange' });
237
- export const ModalCloseButton = createComponent('ModalCloseButton');
238
- export const Status = createComponent('Status');
239
- export const ApiError = createComponent('ApiError');
240
- export const Circle = createComponent('Circle');
241
- export const CountDown = createComponent('CountDown');
242
- export const Country = createComponent('Country');
243
- export const ToggleableArrow = createComponent('ToggleableArrow');
244
- export const TitleCaption = createComponent('TitleCaption');
245
- export const AiIcon = createComponent('AiIcon');
246
- export const Breadcrumb = createComponent('Breadcrumb', { onSelect: 'select' });
247
- export const Button = createComponent('Button', {
696
+
697
+ export type FloatingButtonProps = Bindable<FloatingButtonCatalogProps> & {
698
+ onPress?: ActionBinding | ActionBinding[];
699
+ onPressWhileDisabled?: ActionBinding | ActionBinding[];
700
+ onMouseEnter?: ActionBinding | ActionBinding[];
701
+ onMouseLeave?: ActionBinding | ActionBinding[];
702
+ } & ComponentDirectives;
703
+ /**
704
+ * 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.
705
+ */
706
+ export const FloatingButton = createComponent<FloatingButtonProps>('FloatingButton', {
248
707
  onPress: 'press',
249
708
  onPressWhileDisabled: 'pressWhileDisabled',
250
709
  onMouseEnter: 'mouseEnter',
251
710
  onMouseLeave: 'mouseLeave',
252
711
  });
253
- export const ButtonGroup = createComponent('ButtonGroup');
254
- export const DraggableList = createComponent('DraggableList', {
255
- onUpdate: 'update',
256
- onRemove: 'remove',
257
- onDragStart: 'dragStart',
258
- onDragEnd: 'dragEnd',
712
+
713
+ export type GridProps = Bindable<GridCatalogProps> & {
714
+ onRowClick?: ActionBinding | ActionBinding[];
715
+ onRowAction?: ActionBinding | ActionBinding[];
716
+ onHeaderAction?: ActionBinding | ActionBinding[];
717
+ } & ComponentDirectives;
718
+ /**
719
+ * 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.
720
+ */
721
+ export const Grid = createComponent<GridProps>('Grid', {
722
+ onRowClick: 'rowClick',
723
+ onRowAction: 'rowAction',
724
+ onHeaderAction: 'headerAction',
259
725
  });
260
- export const Drawer = createComponent('Drawer', { onClose: 'close' });
261
- export const Dropdown = createComponent('Dropdown', { onChange: 'change' });
262
- export const ExpansionPanel = createComponent('ExpansionPanel', { onToggle: 'toggle' });
263
- export const ExpansionPanelGroup = createComponent('ExpansionPanelGroup');
264
- export const FloatingButton = createComponent('FloatingButton', {
726
+
727
+ export type HStackProps = Bindable<HStackCatalogProps> &
728
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
729
+ /**
730
+ * 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.
731
+ */
732
+ export const HStack = createComponent<HStackProps>('HStack');
733
+
734
+ export type HeadingProps = Bindable<HeadingCatalogProps> & ComponentDirectives;
735
+ /**
736
+ * 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.
737
+ */
738
+ export const Heading = createComponent<HeadingProps>('Heading');
739
+
740
+ export type IconProps = Bindable<IconCatalogProps> & {
741
+ onPress?: ActionBinding | ActionBinding[];
742
+ } & ComponentDirectives;
743
+ /**
744
+ * 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.
745
+ */
746
+ export const Icon = createComponent<IconProps>('Icon', { onPress: 'press' });
747
+
748
+ export type IconButtonProps = Bindable<IconButtonCatalogProps> & {
749
+ onPress?: ActionBinding | ActionBinding[];
750
+ onPressWhileDisabled?: ActionBinding | ActionBinding[];
751
+ onMouseEnter?: ActionBinding | ActionBinding[];
752
+ onMouseLeave?: ActionBinding | ActionBinding[];
753
+ } & ComponentDirectives;
754
+ /**
755
+ * 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.
756
+ */
757
+ export const IconButton = createComponent<IconButtonProps>('IconButton', {
265
758
  onPress: 'press',
266
759
  onPressWhileDisabled: 'pressWhileDisabled',
267
760
  onMouseEnter: 'mouseEnter',
268
761
  onMouseLeave: 'mouseLeave',
269
762
  });
270
- export const IconButton = createComponent('IconButton', {
763
+
764
+ export type ImageProps = Bindable<ImageCatalogProps> & {
765
+ onPress?: ActionBinding | ActionBinding[];
766
+ onLoad?: ActionBinding | ActionBinding[];
767
+ onError?: ActionBinding | ActionBinding[];
768
+ } & ComponentDirectives;
769
+ /**
770
+ * 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.
771
+ */
772
+ export const Image = createComponent<ImageProps>('Image', {
271
773
  onPress: 'press',
272
- onPressWhileDisabled: 'pressWhileDisabled',
273
- onMouseEnter: 'mouseEnter',
274
- onMouseLeave: 'mouseLeave',
774
+ onLoad: 'load',
775
+ onError: 'error',
275
776
  });
276
- export const ItemNavigator = createComponent('ItemNavigator', { onNext: 'next', onPrevious: 'previous' });
277
- export const Link = createComponent('Link', { onPress: 'press' });
278
- export const MenuList = createComponent('MenuList', { onSelect: 'select' });
279
- export const NestedList = createComponent('NestedList', { onToggle: 'toggle', onSelect: 'select' });
280
- export const Paginate = createComponent('Paginate', { onChange: 'change' });
281
- export const SelectableMenu = createComponent('SelectableMenu', { onChange: 'change' });
282
- export const ShowMore = createComponent('ShowMore');
283
- export const Tab = createComponent('Tab', { onChange: 'change' });
284
- export const Heading = createComponent('Heading');
285
- export const Text = createComponent('Text');
286
- export const Box = createComponent('Box');
287
- export const Grid = createComponent('Grid', {
288
- onRowClick: 'rowClick',
289
- onRowAction: 'rowAction',
290
- onHeaderAction: 'headerAction',
777
+
778
+ export type ImageViewerProps = Bindable<ImageViewerCatalogProps> & ComponentDirectives;
779
+ /**
780
+ * 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.
781
+ */
782
+ export const ImageViewer = createComponent<ImageViewerProps>('ImageViewer');
783
+
784
+ export type InputGroupProps = Bindable<InputGroupCatalogProps> & ComponentDirectives;
785
+ /**
786
+ * 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.
787
+ */
788
+ export const InputGroup = createComponent<InputGroupProps>('InputGroup');
789
+
790
+ export type ItemNavigatorProps = Bindable<ItemNavigatorCatalogProps> & {
791
+ onNext?: ActionBinding | ActionBinding[];
792
+ onPrevious?: ActionBinding | ActionBinding[];
793
+ } & ComponentDirectives;
794
+ /**
795
+ * 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).
796
+ */
797
+ export const ItemNavigator = createComponent<ItemNavigatorProps>('ItemNavigator', {
798
+ onNext: 'next',
799
+ onPrevious: 'previous',
800
+ });
801
+
802
+ export type LabelProps = Bindable<LabelCatalogProps> & ComponentDirectives;
803
+ /**
804
+ * 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.
805
+ */
806
+ export const Label = createComponent<LabelProps>('Label');
807
+
808
+ export type LabelGroupProps = Bindable<LabelGroupCatalogProps> &
809
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
810
+ /**
811
+ * 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.
812
+ */
813
+ export const LabelGroup = createComponent<LabelGroupProps>('LabelGroup');
814
+
815
+ export type LayoutProps = Bindable<LayoutCatalogProps> &
816
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
817
+ /**
818
+ * 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.
819
+ */
820
+ export const Layout = createComponent<LayoutProps>('Layout');
821
+
822
+ export type LayoutCardProps = Bindable<LayoutCardCatalogProps> & {
823
+ onPress?: ActionBinding | ActionBinding[];
824
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
825
+ /**
826
+ * A standard card container for creating card-based page layouts with configurable padding and an optional selectable theme for selection interfaces.
827
+ */
828
+ export const LayoutCard = createComponent<LayoutCardProps>('LayoutCard', {
829
+ onPress: 'press',
291
830
  });
292
- export const HStack = createComponent('HStack');
293
- export const LabelGroup = createComponent('LabelGroup');
294
- export const Layout = createComponent('Layout');
295
- export const PageContent = createComponent('PageContent');
296
- export const PageHeader = createComponent('PageHeader');
297
- export const PageAppLogo = createComponent('PageAppLogo');
298
- export const PageFooter = createComponent('PageFooter', { onContinue: 'continue' });
299
- export const Pane = createComponent('Pane', {
831
+
832
+ export type LinkProps = Bindable<LinkCatalogProps> & {
833
+ onPress?: ActionBinding | ActionBinding[];
834
+ } & ComponentDirectives;
835
+ /**
836
+ * 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.
837
+ */
838
+ export const Link = createComponent<LinkProps>('Link', { onPress: 'press' });
839
+
840
+ export type ListItemProps = Bindable<ListItemCatalogProps> & {
841
+ onPress?: ActionBinding | ActionBinding[];
842
+ } & ComponentDirectives;
843
+ /**
844
+ * 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.
845
+ */
846
+ export const ListItem = createComponent<ListItemProps>('ListItem', {
847
+ onPress: 'press',
848
+ });
849
+
850
+ export type LoaderCardProps = Bindable<LoaderCardCatalogProps> & ComponentDirectives;
851
+ /**
852
+ * 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.
853
+ */
854
+ export const LoaderCard = createComponent<LoaderCardProps>('LoaderCard');
855
+
856
+ export type LocationCardProps = Bindable<LocationCardCatalogProps> & {
857
+ onEdit?: ActionBinding | ActionBinding[];
858
+ onDelete?: ActionBinding | ActionBinding[];
859
+ onClick?: ActionBinding | ActionBinding[];
860
+ onAction?: ActionBinding | ActionBinding[];
861
+ } & ComponentDirectives;
862
+ /**
863
+ * 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.
864
+ */
865
+ export const LocationCard = createComponent<LocationCardProps>('LocationCard', {
866
+ onEdit: 'edit',
867
+ onDelete: 'delete',
868
+ onClick: 'click',
869
+ onAction: 'action',
870
+ });
871
+
872
+ export type MaskerProps = Bindable<MaskerCatalogProps> & {
873
+ onChange?: ActionBinding | ActionBinding[];
874
+ onBlur?: ActionBinding | ActionBinding[];
875
+ } & ComponentDirectives;
876
+ /**
877
+ * 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.
878
+ */
879
+ export const Masker = createComponent<MaskerProps>('Masker', {
880
+ onChange: 'change',
881
+ onBlur: 'blur',
882
+ });
883
+
884
+ export type MenuListProps = Bindable<MenuListCatalogProps> & {
885
+ onSelect?: ActionBinding | ActionBinding[];
886
+ } & ComponentDirectives;
887
+ /**
888
+ * 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.
889
+ */
890
+ export const MenuList = createComponent<MenuListProps>('MenuList', {
891
+ onSelect: 'select',
892
+ });
893
+
894
+ export type ModalProps = Bindable<ModalCatalogProps> & {
895
+ onClose?: ActionBinding | ActionBinding[];
896
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
897
+ /**
898
+ * 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.
899
+ */
900
+ export const Modal = createComponent<ModalProps>('Modal', { onClose: 'close' });
901
+
902
+ export type ModalCloseButtonProps = Bindable<ModalCloseButtonCatalogProps> & ComponentDirectives;
903
+ /**
904
+ * 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.
905
+ */
906
+ export const ModalCloseButton = createComponent<ModalCloseButtonProps>('ModalCloseButton');
907
+
908
+ export type ModalFooterProps = Bindable<ModalFooterCatalogProps> &
909
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
910
+ /**
911
+ * 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.
912
+ */
913
+ export const ModalFooter = createComponent<ModalFooterProps>('ModalFooter');
914
+
915
+ export type NestedListProps = Bindable<NestedListCatalogProps> & {
916
+ onToggle?: ActionBinding | ActionBinding[];
917
+ onSelect?: ActionBinding | ActionBinding[];
918
+ } & ComponentDirectives;
919
+ /**
920
+ * 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.
921
+ */
922
+ export const NestedList = createComponent<NestedListProps>('NestedList', {
923
+ onToggle: 'toggle',
924
+ onSelect: 'select',
925
+ });
926
+
927
+ export type NumberProps = Bindable<NumberCatalogProps> & {
928
+ onChange?: ActionBinding | ActionBinding[];
929
+ onBlur?: ActionBinding | ActionBinding[];
930
+ onChangeRaw?: ActionBinding | ActionBinding[];
931
+ onChangeCalculationState?: ActionBinding | ActionBinding[];
932
+ } & ComponentDirectives;
933
+ /**
934
+ * 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.
935
+ */
936
+ export const Number = createComponent<NumberProps>('Number', {
937
+ onChange: 'change',
938
+ onBlur: 'blur',
939
+ onChangeRaw: 'changeRaw',
940
+ onChangeCalculationState: 'changeCalculationState',
941
+ });
942
+
943
+ export type ObjectUIProps = Bindable<ObjectUICatalogProps> &
944
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
945
+ /**
946
+ * 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.
947
+ */
948
+ export const ObjectUI = createComponent<ObjectUIProps>('ObjectUI');
949
+
950
+ export type ObjectUIContentProps = Bindable<ObjectUIContentCatalogProps> &
951
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
952
+ /**
953
+ * 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.
954
+ */
955
+ export const ObjectUIContent = createComponent<ObjectUIContentProps>('ObjectUIContent');
956
+
957
+ export type ObjectUIHeaderProps = Bindable<ObjectUIHeaderCatalogProps> & ComponentDirectives;
958
+ /**
959
+ * 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.
960
+ */
961
+ export const ObjectUIHeader = createComponent<ObjectUIHeaderProps>('ObjectUIHeader');
962
+
963
+ export type ObjectUIStatsProps = Bindable<ObjectUIStatsCatalogProps> & {
964
+ onActionClick?: ActionBinding | ActionBinding[];
965
+ } & ComponentDirectives;
966
+ /**
967
+ * 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.
968
+ */
969
+ export const ObjectUIStats = createComponent<ObjectUIStatsProps>('ObjectUIStats', {
970
+ onActionClick: 'actionClick',
971
+ });
972
+
973
+ export type ObjectUITemplateProps = Bindable<ObjectUITemplateCatalogProps> &
974
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
975
+ /**
976
+ * 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.
977
+ */
978
+ export const ObjectUITemplate = createComponent<ObjectUITemplateProps>('ObjectUITemplate');
979
+
980
+ export type PageAppLogoProps = Bindable<PageAppLogoCatalogProps> & ComponentDirectives;
981
+ /**
982
+ * 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.
983
+ */
984
+ export const PageAppLogo = createComponent<PageAppLogoProps>('PageAppLogo');
985
+
986
+ export type PageContentProps = Bindable<PageContentCatalogProps> &
987
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
988
+ /**
989
+ * 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.
990
+ */
991
+ export const PageContent = createComponent<PageContentProps>('PageContent');
992
+
993
+ export type PageFooterProps = Bindable<PageFooterCatalogProps> & {
994
+ onContinue?: ActionBinding | ActionBinding[];
995
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
996
+ /**
997
+ * 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.
998
+ */
999
+ export const PageFooter = createComponent<PageFooterProps>('PageFooter', {
1000
+ onContinue: 'continue',
1001
+ });
1002
+
1003
+ export type PageHeaderProps = Bindable<PageHeaderCatalogProps> & ComponentDirectives;
1004
+ /**
1005
+ * 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.
1006
+ */
1007
+ export const PageHeader = createComponent<PageHeaderProps>('PageHeader');
1008
+
1009
+ export type PaginateProps = Bindable<PaginateCatalogProps> & {
1010
+ onChange?: ActionBinding | ActionBinding[];
1011
+ } & ComponentDirectives;
1012
+ /**
1013
+ * 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.
1014
+ */
1015
+ export const Paginate = createComponent<PaginateProps>('Paginate', {
1016
+ onChange: 'change',
1017
+ });
1018
+
1019
+ export type PaneProps = Bindable<PaneCatalogProps> & {
1020
+ onCollapsedChange?: ActionBinding | ActionBinding[];
1021
+ onDismiss?: ActionBinding | ActionBinding[];
1022
+ onResize?: ActionBinding | ActionBinding[];
1023
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
1024
+ /**
1025
+ * 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.
1026
+ */
1027
+ export const Pane = createComponent<PaneProps>('Pane', {
300
1028
  onCollapsedChange: 'collapsedChange',
301
1029
  onDismiss: 'dismiss',
302
1030
  onResize: 'resize',
303
1031
  });
304
- export const Responsive = createComponent('Responsive');
305
- export const SplitPane = createComponent('SplitPane');
306
- export const VStack = createComponent('VStack');
307
- export const CustomObjectGrid = createComponent('CustomObjectGrid');
308
- export const ObjectListView = createComponent('ObjectListView');
1032
+
1033
+ export type PasswordProps = Bindable<PasswordCatalogProps> & {
1034
+ onChange?: ActionBinding | ActionBinding[];
1035
+ onBlur?: ActionBinding | ActionBinding[];
1036
+ onFocus?: ActionBinding | ActionBinding[];
1037
+ onClick?: ActionBinding | ActionBinding[];
1038
+ onKeydown?: ActionBinding | ActionBinding[];
1039
+ onKeyup?: ActionBinding | ActionBinding[];
1040
+ onPaste?: ActionBinding | ActionBinding[];
1041
+ onMouseenter?: ActionBinding | ActionBinding[];
1042
+ onMouseleave?: ActionBinding | ActionBinding[];
1043
+ onReveal?: ActionBinding | ActionBinding[];
1044
+ } & ComponentDirectives;
1045
+ /**
1046
+ * 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.
1047
+ */
1048
+ export const Password = createComponent<PasswordProps>('Password', {
1049
+ onChange: 'change',
1050
+ onBlur: 'blur',
1051
+ onFocus: 'focus',
1052
+ onClick: 'click',
1053
+ onKeydown: 'keydown',
1054
+ onKeyup: 'keyup',
1055
+ onPaste: 'paste',
1056
+ onMouseenter: 'mouseenter',
1057
+ onMouseleave: 'mouseleave',
1058
+ onReveal: 'reveal',
1059
+ });
1060
+
1061
+ export type PercentageProps = Bindable<PercentageCatalogProps> & {
1062
+ onChange?: ActionBinding | ActionBinding[];
1063
+ onBlur?: ActionBinding | ActionBinding[];
1064
+ } & ComponentDirectives;
1065
+ /**
1066
+ * 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.
1067
+ */
1068
+ export const Percentage = createComponent<PercentageProps>('Percentage', {
1069
+ onChange: 'change',
1070
+ onBlur: 'blur',
1071
+ });
1072
+
1073
+ export type PhoneProps = Bindable<PhoneCatalogProps> & {
1074
+ onChange?: ActionBinding | ActionBinding[];
1075
+ onBlur?: ActionBinding | ActionBinding[];
1076
+ onFocus?: ActionBinding | ActionBinding[];
1077
+ onClick?: ActionBinding | ActionBinding[];
1078
+ onKeydown?: ActionBinding | ActionBinding[];
1079
+ onKeyup?: ActionBinding | ActionBinding[];
1080
+ onPaste?: ActionBinding | ActionBinding[];
1081
+ onMouseenter?: ActionBinding | ActionBinding[];
1082
+ onMouseleave?: ActionBinding | ActionBinding[];
1083
+ onCountryCodeChange?: ActionBinding | ActionBinding[];
1084
+ } & ComponentDirectives;
1085
+ /**
1086
+ * A specialized input for entering and editing phone numbers with automatic region-based formatting, international support, and an optional country code dropdown selector.
1087
+ */
1088
+ export const Phone = createComponent<PhoneProps>('Phone', {
1089
+ onChange: 'change',
1090
+ onBlur: 'blur',
1091
+ onFocus: 'focus',
1092
+ onClick: 'click',
1093
+ onKeydown: 'keydown',
1094
+ onKeyup: 'keyup',
1095
+ onPaste: 'paste',
1096
+ onMouseenter: 'mouseenter',
1097
+ onMouseleave: 'mouseleave',
1098
+ onCountryCodeChange: 'countryCodeChange',
1099
+ });
1100
+
1101
+ export type ProgressBarProps = Bindable<ProgressBarCatalogProps> & ComponentDirectives;
1102
+ /**
1103
+ * 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.
1104
+ */
1105
+ export const ProgressBar = createComponent<ProgressBarProps>('ProgressBar');
1106
+
1107
+ export type ProgressStepsProps = Bindable<ProgressStepsCatalogProps> & ComponentDirectives;
1108
+ /**
1109
+ * 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.
1110
+ */
1111
+ export const ProgressSteps = createComponent<ProgressStepsProps>('ProgressSteps');
1112
+
1113
+ export type RadioProps = Bindable<RadioCatalogProps> & {
1114
+ onChange?: ActionBinding | ActionBinding[];
1115
+ onBlur?: ActionBinding | ActionBinding[];
1116
+ onMouseenter?: ActionBinding | ActionBinding[];
1117
+ onMouseleave?: ActionBinding | ActionBinding[];
1118
+ } & ComponentDirectives;
1119
+ /**
1120
+ * 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.
1121
+ */
1122
+ export const Radio = createComponent<RadioProps>('Radio', {
1123
+ onChange: 'change',
1124
+ onBlur: 'blur',
1125
+ onMouseenter: 'mouseenter',
1126
+ onMouseleave: 'mouseleave',
1127
+ });
1128
+
1129
+ export type RangeSliderProps = Bindable<RangeSliderCatalogProps> & {
1130
+ onChange?: ActionBinding | ActionBinding[];
1131
+ onBeforeChange?: ActionBinding | ActionBinding[];
1132
+ onAfterChange?: ActionBinding | ActionBinding[];
1133
+ onBlur?: ActionBinding | ActionBinding[];
1134
+ } & ComponentDirectives;
1135
+ /**
1136
+ * 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.
1137
+ */
1138
+ export const RangeSlider = createComponent<RangeSliderProps>('RangeSlider', {
1139
+ onChange: 'change',
1140
+ onBeforeChange: 'beforeChange',
1141
+ onAfterChange: 'afterChange',
1142
+ onBlur: 'blur',
1143
+ });
1144
+
1145
+ export type ReportLoaderProps = Bindable<ReportLoaderCatalogProps> & ComponentDirectives;
1146
+ /**
1147
+ * 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.
1148
+ */
1149
+ export const ReportLoader = createComponent<ReportLoaderProps>('ReportLoader');
1150
+
1151
+ export type ReportShareLoaderProps = Bindable<ReportShareLoaderCatalogProps> & ComponentDirectives;
1152
+ /**
1153
+ * 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).
1154
+ */
1155
+ export const ReportShareLoader = createComponent<ReportShareLoaderProps>('ReportShareLoader');
1156
+
1157
+ export type ReportViewerLoaderProps = Bindable<ReportViewerLoaderCatalogProps> & ComponentDirectives;
1158
+ /**
1159
+ * 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.
1160
+ */
1161
+ export const ReportViewerLoader = createComponent<ReportViewerLoaderProps>('ReportViewerLoader');
1162
+
1163
+ export type ResponsiveProps = Bindable<ResponsiveCatalogProps> &
1164
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1165
+ /**
1166
+ * 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.
1167
+ */
1168
+ export const Responsive = createComponent<ResponsiveProps>('Responsive');
1169
+
1170
+ export type SegmentedControlProps = Bindable<SegmentedControlCatalogProps> & {
1171
+ onChange?: ActionBinding | ActionBinding[];
1172
+ onBlur?: ActionBinding | ActionBinding[];
1173
+ } & ComponentDirectives;
1174
+ /**
1175
+ * 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.
1176
+ */
1177
+ export const SegmentedControl = createComponent<SegmentedControlProps>('SegmentedControl', {
1178
+ onChange: 'change',
1179
+ onBlur: 'blur',
1180
+ });
1181
+
1182
+ export type SelectProps = Bindable<SelectCatalogProps> & {
1183
+ onChange?: ActionBinding | ActionBinding[];
1184
+ onBlur?: ActionBinding | ActionBinding[];
1185
+ onFocus?: ActionBinding | ActionBinding[];
1186
+ onPaste?: ActionBinding | ActionBinding[];
1187
+ onMenuToggle?: ActionBinding | ActionBinding[];
1188
+ } & ComponentDirectives;
1189
+ /**
1190
+ * 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.
1191
+ */
1192
+ export const Select = createComponent<SelectProps>('Select', {
1193
+ onChange: 'change',
1194
+ onBlur: 'blur',
1195
+ onFocus: 'focus',
1196
+ onPaste: 'paste',
1197
+ onMenuToggle: 'menuToggle',
1198
+ });
1199
+
1200
+ export type SelectableGroupProps = Bindable<SelectableGroupCatalogProps> & {
1201
+ onChange?: ActionBinding | ActionBinding[];
1202
+ } & ComponentDirectives;
1203
+ /**
1204
+ * 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.
1205
+ */
1206
+ export const SelectableGroup = createComponent<SelectableGroupProps>('SelectableGroup', {
1207
+ onChange: 'change',
1208
+ });
1209
+
1210
+ export type SelectableMenuProps = Bindable<SelectableMenuCatalogProps> & {
1211
+ onChange?: ActionBinding | ActionBinding[];
1212
+ } & ComponentDirectives;
1213
+ /**
1214
+ * 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.
1215
+ */
1216
+ export const SelectableMenu = createComponent<SelectableMenuProps>('SelectableMenu', { onChange: 'change' });
1217
+
1218
+ export type SettingsLoaderProps = Bindable<SettingsLoaderCatalogProps> & ComponentDirectives;
1219
+ /**
1220
+ * 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.
1221
+ */
1222
+ export const SettingsLoader = createComponent<SettingsLoaderProps>('SettingsLoader');
1223
+
1224
+ export type ShowMoreProps = Bindable<ShowMoreCatalogProps> &
1225
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1226
+ /**
1227
+ * 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.
1228
+ */
1229
+ export const ShowMore = createComponent<ShowMoreProps>('ShowMore');
1230
+
1231
+ export type SignatureProps = Bindable<SignatureCatalogProps> & {
1232
+ onChange?: ActionBinding | ActionBinding[];
1233
+ } & ComponentDirectives;
1234
+ /**
1235
+ * 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.
1236
+ */
1237
+ export const Signature = createComponent<SignatureProps>('Signature', {
1238
+ onChange: 'change',
1239
+ });
1240
+
1241
+ export type SinProps = Bindable<SinCatalogProps> & {
1242
+ onChange?: ActionBinding | ActionBinding[];
1243
+ onBlur?: ActionBinding | ActionBinding[];
1244
+ } & ComponentDirectives;
1245
+ /**
1246
+ * 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.
1247
+ */
1248
+ export const Sin = createComponent<SinProps>('Sin', {
1249
+ onChange: 'change',
1250
+ onBlur: 'blur',
1251
+ });
1252
+
1253
+ export type SkeletonProps = Bindable<SkeletonCatalogProps> & ComponentDirectives;
1254
+ /**
1255
+ * An animated placeholder that mimics the shape of content while it loads, available in text (lines), circle, and box variants.
1256
+ */
1257
+ export const Skeleton = createComponent<SkeletonProps>('Skeleton');
1258
+
1259
+ export type SliderProps = Bindable<SliderCatalogProps> & {
1260
+ onChange?: ActionBinding | ActionBinding[];
1261
+ onBlur?: ActionBinding | ActionBinding[];
1262
+ onBeforeChange?: ActionBinding | ActionBinding[];
1263
+ onAfterChange?: ActionBinding | ActionBinding[];
1264
+ } & ComponentDirectives;
1265
+ /**
1266
+ * 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.
1267
+ */
1268
+ export const Slider = createComponent<SliderProps>('Slider', {
1269
+ onChange: 'change',
1270
+ onBlur: 'blur',
1271
+ onBeforeChange: 'beforeChange',
1272
+ onAfterChange: 'afterChange',
1273
+ });
1274
+
1275
+ export type SnackBarProps = Bindable<SnackBarCatalogProps> & {
1276
+ onDismiss?: ActionBinding | ActionBinding[];
1277
+ } & ComponentDirectives;
1278
+ /**
1279
+ * 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.
1280
+ */
1281
+ export const SnackBar = createComponent<SnackBarProps>('SnackBar', {
1282
+ onDismiss: 'dismiss',
1283
+ });
1284
+
1285
+ export type SpinnerProps = Bindable<SpinnerCatalogProps> & ComponentDirectives;
1286
+ /**
1287
+ * 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.
1288
+ */
1289
+ export const Spinner = createComponent<SpinnerProps>('Spinner');
1290
+
1291
+ export type SplitButtonProps = Bindable<SplitButtonCatalogProps> & {
1292
+ onPress?: ActionBinding | ActionBinding[];
1293
+ onDropdownChange?: ActionBinding | ActionBinding[];
1294
+ } & ComponentDirectives;
1295
+ /**
1296
+ * 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").
1297
+ */
1298
+ export const SplitButton = createComponent<SplitButtonProps>('SplitButton', {
1299
+ onPress: 'press',
1300
+ onDropdownChange: 'dropdownChange',
1301
+ });
1302
+
1303
+ export type SplitPaneProps = Bindable<SplitPaneCatalogProps> &
1304
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1305
+ /**
1306
+ * 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.
1307
+ */
1308
+ export const SplitPane = createComponent<SplitPaneProps>('SplitPane');
1309
+
1310
+ export type SsnProps = Bindable<SsnCatalogProps> & {
1311
+ onChange?: ActionBinding | ActionBinding[];
1312
+ onBlur?: ActionBinding | ActionBinding[];
1313
+ } & ComponentDirectives;
1314
+ /**
1315
+ * 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.
1316
+ */
1317
+ export const Ssn = createComponent<SsnProps>('Ssn', {
1318
+ onChange: 'change',
1319
+ onBlur: 'blur',
1320
+ });
1321
+
1322
+ export type StatusProps = Bindable<StatusCatalogProps> & ComponentDirectives;
1323
+ /**
1324
+ * 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.
1325
+ */
1326
+ export const Status = createComponent<StatusProps>('Status');
1327
+
1328
+ export type StepperProps = Bindable<StepperCatalogProps> & {
1329
+ onClick?: ActionBinding | ActionBinding[];
1330
+ } & ComponentDirectives;
1331
+ /**
1332
+ * 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.
1333
+ */
1334
+ export const Stepper = createComponent<StepperProps>('Stepper', {
1335
+ onClick: 'click',
1336
+ });
1337
+
1338
+ export type SurveyProps = Bindable<SurveyCatalogProps> & {
1339
+ onChange?: ActionBinding | ActionBinding[];
1340
+ } & ComponentDirectives;
1341
+ /**
1342
+ * 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.
1343
+ */
1344
+ export const Survey = createComponent<SurveyProps>('Survey', {
1345
+ onChange: 'change',
1346
+ });
1347
+
1348
+ export type SwitchProps = Bindable<SwitchCatalogProps> & {
1349
+ onChange?: ActionBinding | ActionBinding[];
1350
+ onBlur?: ActionBinding | ActionBinding[];
1351
+ } & ComponentDirectives;
1352
+ /**
1353
+ * 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.
1354
+ */
1355
+ export const Switch = createComponent<SwitchProps>('Switch', {
1356
+ onChange: 'change',
1357
+ onBlur: 'blur',
1358
+ });
1359
+
1360
+ export type TabProps = Bindable<TabCatalogProps> & {
1361
+ onChange?: ActionBinding | ActionBinding[];
1362
+ } & ComponentDirectives;
1363
+ /**
1364
+ * 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.
1365
+ */
1366
+ export const Tab = createComponent<TabProps>('Tab', { onChange: 'change' });
1367
+
1368
+ export type TableBasicProps = Bindable<TableBasicCatalogProps> & ComponentDirectives;
1369
+ /**
1370
+ * 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.
1371
+ */
1372
+ export const TableBasic = createComponent<TableBasicProps>('TableBasic');
1373
+
1374
+ export type TextProps = Bindable<TextCatalogProps> & ComponentDirectives;
1375
+ /**
1376
+ * 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.
1377
+ */
1378
+ export const Text = createComponent<TextProps>('Text');
1379
+
1380
+ export type TextAutoSuggestProps = Bindable<TextAutoSuggestCatalogProps> & {
1381
+ onChange?: ActionBinding | ActionBinding[];
1382
+ onBlur?: ActionBinding | ActionBinding[];
1383
+ onFocus?: ActionBinding | ActionBinding[];
1384
+ onClick?: ActionBinding | ActionBinding[];
1385
+ } & ComponentDirectives;
1386
+ /**
1387
+ * 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.
1388
+ */
1389
+ export const TextAutoSuggest = createComponent<TextAutoSuggestProps>('TextAutoSuggest', {
1390
+ onChange: 'change',
1391
+ onBlur: 'blur',
1392
+ onFocus: 'focus',
1393
+ onClick: 'click',
1394
+ });
1395
+
1396
+ export type TextClipProps = Bindable<TextClipCatalogProps> &
1397
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1398
+ /**
1399
+ * 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.
1400
+ */
1401
+ export const TextClip = createComponent<TextClipProps>('TextClip');
1402
+
1403
+ export type TextInputProps = Bindable<TextInputCatalogProps> & {
1404
+ onChange?: ActionBinding | ActionBinding[];
1405
+ onBlur?: ActionBinding | ActionBinding[];
1406
+ onFocus?: ActionBinding | ActionBinding[];
1407
+ onClick?: ActionBinding | ActionBinding[];
1408
+ onKeydown?: ActionBinding | ActionBinding[];
1409
+ onKeyup?: ActionBinding | ActionBinding[];
1410
+ onPaste?: ActionBinding | ActionBinding[];
1411
+ onMouseenter?: ActionBinding | ActionBinding[];
1412
+ onMouseleave?: ActionBinding | ActionBinding[];
1413
+ } & ComponentDirectives;
1414
+ /**
1415
+ * 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.
1416
+ */
1417
+ export const TextInput = createComponent<TextInputProps>('TextInput', {
1418
+ onChange: 'change',
1419
+ onBlur: 'blur',
1420
+ onFocus: 'focus',
1421
+ onClick: 'click',
1422
+ onKeydown: 'keydown',
1423
+ onKeyup: 'keyup',
1424
+ onPaste: 'paste',
1425
+ onMouseenter: 'mouseenter',
1426
+ onMouseleave: 'mouseleave',
1427
+ });
1428
+
1429
+ export type TextSnippetProps = Bindable<TextSnippetCatalogProps> & ComponentDirectives;
1430
+ /**
1431
+ * 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.
1432
+ */
1433
+ export const TextSnippet = createComponent<TextSnippetProps>('TextSnippet');
1434
+
1435
+ export type TextareaProps = Bindable<TextareaCatalogProps> & {
1436
+ onChange?: ActionBinding | ActionBinding[];
1437
+ onBlur?: ActionBinding | ActionBinding[];
1438
+ onFocus?: ActionBinding | ActionBinding[];
1439
+ } & ComponentDirectives;
1440
+ /**
1441
+ * 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.
1442
+ */
1443
+ export const Textarea = createComponent<TextareaProps>('Textarea', {
1444
+ onChange: 'change',
1445
+ onBlur: 'blur',
1446
+ onFocus: 'focus',
1447
+ });
1448
+
1449
+ export type TimeProps = Bindable<TimeCatalogProps> & {
1450
+ onChange?: ActionBinding | ActionBinding[];
1451
+ onBlur?: ActionBinding | ActionBinding[];
1452
+ } & ComponentDirectives;
1453
+ /**
1454
+ * 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.
1455
+ */
1456
+ export const Time = createComponent<TimeProps>('Time', {
1457
+ onChange: 'change',
1458
+ onBlur: 'blur',
1459
+ });
1460
+
1461
+ export type TimeRangeProps = Bindable<TimeRangeCatalogProps> & {
1462
+ onChange?: ActionBinding | ActionBinding[];
1463
+ onBlur?: ActionBinding | ActionBinding[];
1464
+ } & ComponentDirectives;
1465
+ /**
1466
+ * 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.
1467
+ */
1468
+ export const TimeRange = createComponent<TimeRangeProps>('TimeRange', {
1469
+ onChange: 'change',
1470
+ onBlur: 'blur',
1471
+ });
1472
+
1473
+ export type TimezoneProps = Bindable<TimezoneCatalogProps> & {
1474
+ onChange?: ActionBinding | ActionBinding[];
1475
+ onBlur?: ActionBinding | ActionBinding[];
1476
+ onFocus?: ActionBinding | ActionBinding[];
1477
+ } & ComponentDirectives;
1478
+ /**
1479
+ * 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.
1480
+ */
1481
+ export const Timezone = createComponent<TimezoneProps>('Timezone', {
1482
+ onChange: 'change',
1483
+ onBlur: 'blur',
1484
+ onFocus: 'focus',
1485
+ });
1486
+
1487
+ export type TipProps = Bindable<TipCatalogProps> & ComponentDirectives & { children?: SpecNode | SpecNode[] };
1488
+ /**
1489
+ * 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.
1490
+ */
1491
+ export const Tip = createComponent<TipProps>('Tip');
1492
+
1493
+ export type TitleCaptionProps = Bindable<TitleCaptionCatalogProps> & ComponentDirectives;
1494
+ /**
1495
+ * 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.
1496
+ */
1497
+ export const TitleCaption = createComponent<TitleCaptionProps>('TitleCaption');
1498
+
1499
+ export type ToggleableArrowProps = Bindable<ToggleableArrowCatalogProps> & ComponentDirectives;
1500
+ /**
1501
+ * 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.
1502
+ */
1503
+ export const ToggleableArrow = createComponent<ToggleableArrowProps>('ToggleableArrow');
1504
+
1505
+ export type TreeProps = Bindable<TreeCatalogProps> & {
1506
+ onChange?: ActionBinding | ActionBinding[];
1507
+ onFooterAction?: ActionBinding | ActionBinding[];
1508
+ } & ComponentDirectives;
1509
+ /**
1510
+ * 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.
1511
+ */
1512
+ export const Tree = createComponent<TreeProps>('Tree', {
1513
+ onChange: 'change',
1514
+ onFooterAction: 'footerAction',
1515
+ });
1516
+
1517
+ export type TreeSelectProps = Bindable<TreeSelectCatalogProps> & {
1518
+ onChange?: ActionBinding | ActionBinding[];
1519
+ } & ComponentDirectives;
1520
+ /**
1521
+ * 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.
1522
+ */
1523
+ export const TreeSelect = createComponent<TreeSelectProps>('TreeSelect', {
1524
+ onChange: 'change',
1525
+ });
1526
+
1527
+ export type VStackProps = Bindable<VStackCatalogProps> &
1528
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1529
+ /**
1530
+ * 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.
1531
+ */
1532
+ export const VStack = createComponent<VStackProps>('VStack');
1533
+
1534
+ export type VideoProps = Bindable<VideoCatalogProps> & ComponentDirectives;
1535
+ /**
1536
+ * Embedded video player with 16:9 aspect ratio
1537
+ */
1538
+ export const Video = createComponent<VideoProps>('Video');
1539
+
1540
+ export type WorkEmailProps = Bindable<WorkEmailCatalogProps> & {
1541
+ onChange?: ActionBinding | ActionBinding[];
1542
+ onBlur?: ActionBinding | ActionBinding[];
1543
+ onFocus?: ActionBinding | ActionBinding[];
1544
+ onClick?: ActionBinding | ActionBinding[];
1545
+ onKeydown?: ActionBinding | ActionBinding[];
1546
+ onKeyup?: ActionBinding | ActionBinding[];
1547
+ onPaste?: ActionBinding | ActionBinding[];
1548
+ onMouseenter?: ActionBinding | ActionBinding[];
1549
+ onMouseleave?: ActionBinding | ActionBinding[];
1550
+ } & ComponentDirectives;
1551
+ /**
1552
+ * 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
1553
+ */
1554
+ export const WorkEmail = createComponent<WorkEmailProps>('WorkEmail', {
1555
+ onChange: 'change',
1556
+ onBlur: 'blur',
1557
+ onFocus: 'focus',
1558
+ onClick: 'click',
1559
+ onKeydown: 'keydown',
1560
+ onKeyup: 'keyup',
1561
+ onPaste: 'paste',
1562
+ onMouseenter: 'mouseenter',
1563
+ onMouseleave: 'mouseleave',
1564
+ });
1565
+
1566
+ export type AnalyticsCardProps = Bindable<AnalyticsCardCatalogProps> & {
1567
+ onConfigure?: ActionBinding | ActionBinding[];
1568
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
1569
+ /**
1570
+ * 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).
1571
+ */
1572
+ export const AnalyticsCard = createComponent<AnalyticsCardProps>('AnalyticsCard', {
1573
+ onConfigure: 'configure',
1574
+ });
1575
+
1576
+ export type ResizableBoardProps = Bindable<ResizableBoardCatalogProps> &
1577
+ ComponentDirectives & { children?: SpecNode | SpecNode[] };
1578
+ /**
1579
+ * Resizable dashboard board for AI widget layouts. Wraps each child in a Pebble ResizableBoard block.
1580
+ */
1581
+ export const ResizableBoard = createComponent<ResizableBoardProps>('ResizableBoard');
1582
+
1583
+ export type EChartProps = Bindable<EChartCatalogProps> & {
1584
+ onClick?: ActionBinding | ActionBinding[];
1585
+ onLegendChange?: ActionBinding | ActionBinding[];
1586
+ onDataZoomChange?: ActionBinding | ActionBinding[];
1587
+ } & ComponentDirectives;
1588
+ /**
1589
+ * 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.
1590
+ */
1591
+ export const EChart = createComponent<EChartProps>('EChart', {
1592
+ onClick: 'click',
1593
+ onLegendChange: 'legendChange',
1594
+ onDataZoomChange: 'dataZoomChange',
1595
+ });
1596
+
1597
+ export type RichTextProps = Bindable<RichTextCatalogProps> & ComponentDirectives;
1598
+ /**
1599
+ * Read-only HTML content rendered with the shared RichTextEditor (non-editable). Generic SDUI building block for narrative or explanatory copy in any product layout.
1600
+ */
1601
+ export const RichText = createComponent<RichTextProps>('RichText');
1602
+
1603
+ export type DashboardRichTextProps = Bindable<DashboardRichTextCatalogProps> & ComponentDirectives;
1604
+ /**
1605
+ * Deprecated alias for RichText. Same props; prefer type `RichText` in new specs.
1606
+ */
1607
+ export const DashboardRichText = createComponent<DashboardRichTextProps>('DashboardRichText');
1608
+
1609
+ export type CustomObjectGridProps = Bindable<CustomObjectGridCatalogProps> & ComponentDirectives;
1610
+ /**
1611
+ * 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.
1612
+ */
1613
+ export const CustomObjectGrid = createComponent<CustomObjectGridProps>('CustomObjectGrid');
1614
+
1615
+ export type ObjectListViewProps = Bindable<ObjectListViewCatalogProps> & ComponentDirectives;
1616
+ /**
1617
+ * 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.
1618
+ */
1619
+ export const ObjectListView = createComponent<ObjectListViewProps>('ObjectListView');
1620
+
1621
+ export type BarChartProps = Bindable<BarChartCatalogProps> & {
1622
+ onBarClick?: ActionBinding | ActionBinding[];
1623
+ } & ComponentDirectives;
1624
+ /**
1625
+ * 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.
1626
+ */
1627
+ export const BarChart = createComponent<BarChartProps>('BarChart', {
1628
+ onBarClick: 'barClick',
1629
+ });
1630
+
1631
+ export type LineChartProps = Bindable<LineChartCatalogProps> & ComponentDirectives;
1632
+ /**
1633
+ * 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.
1634
+ */
1635
+ export const LineChart = createComponent<LineChartProps>('LineChart');
1636
+
1637
+ export type HorizontalBarChartProps = Bindable<HorizontalBarChartCatalogProps> & ComponentDirectives;
1638
+ /**
1639
+ * 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.
1640
+ */
1641
+ export const HorizontalBarChart = createComponent<HorizontalBarChartProps>('HorizontalBarChart');
1642
+
1643
+ export type CombinationChartProps = Bindable<CombinationChartCatalogProps> & ComponentDirectives;
1644
+ /**
1645
+ * 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.
1646
+ */
1647
+ export const CombinationChart = createComponent<CombinationChartProps>('CombinationChart');
1648
+
1649
+ export type PieChartProps = Bindable<PieChartCatalogProps> & ComponentDirectives;
1650
+ /**
1651
+ * Pie / donut chart. Each series entry has a data array of {name, value} pairs. Use radius: ["50%", "70%"] for a donut hole.
1652
+ */
1653
+ export const PieChart = createComponent<PieChartProps>('PieChart');
1654
+
1655
+ export type ScatterChartProps = Bindable<ScatterChartCatalogProps> & ComponentDirectives;
1656
+ /**
1657
+ * Scatter plot. Each series contains [x, y] data pairs plotted as individual points.
1658
+ */
1659
+ export const ScatterChart = createComponent<ScatterChartProps>('ScatterChart');
1660
+
1661
+ export type FunnelChartProps = Bindable<FunnelChartCatalogProps> & ComponentDirectives;
1662
+ /**
1663
+ * Funnel chart for conversion or stage-based data. Data items are ordered by value (largest at top).
1664
+ */
1665
+ export const FunnelChart = createComponent<FunnelChartProps>('FunnelChart');
1666
+
1667
+ export type GaugeChartProps = Bindable<GaugeChartCatalogProps> & ComponentDirectives;
1668
+ /**
1669
+ * Gauge (speedometer) chart. Displays a single numeric value against colored segments. Segments define the scale breakpoints and their colors.
1670
+ */
1671
+ export const GaugeChart = createComponent<GaugeChartProps>('GaugeChart');
1672
+
1673
+ export type SunburstChartProps = Bindable<SunburstChartCatalogProps> & ComponentDirectives;
1674
+ /**
1675
+ * Sunburst (multi-level pie) chart for hierarchical data. Each node has a name, optional value, and optional children array.
1676
+ */
1677
+ export const SunburstChart = createComponent<SunburstChartProps>('SunburstChart');
1678
+
1679
+ export type WithSpinnerProps = Bindable<WithSpinnerCatalogProps> & {
1680
+ onLoad?: ActionBinding | ActionBinding[];
1681
+ } & ComponentDirectives & { children?: SpecNode | SpecNode[] };
1682
+ /**
1683
+ * 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.
1684
+ */
1685
+ export const WithSpinner = createComponent<WithSpinnerProps>('WithSpinner', {
1686
+ onLoad: 'load',
1687
+ });
1688
+
1689
+ export type RadarChartProps = Bindable<RadarChartCatalogProps> & ComponentDirectives;
1690
+ /**
1691
+ * Radar (spider) chart for comparing multiple variables across categories. Each indicator defines a spoke axis. Provide radarIndicators (axis definitions) and radarOptions (series data).
1692
+ */
1693
+ export const RadarChart = createComponent<RadarChartProps>('RadarChart');
1694
+
1695
+ export type RadarFilledChartProps = Bindable<RadarFilledChartCatalogProps> & ComponentDirectives;
1696
+ /**
1697
+ * 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.
1698
+ */
1699
+ export const RadarFilledChart = createComponent<RadarFilledChartProps>('RadarFilledChart');
1700
+
1701
+ export type HeatmapCalendarChartProps = Bindable<HeatmapCalendarChartCatalogProps> & ComponentDirectives;
1702
+ /**
1703
+ * 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.
1704
+ */
1705
+ export const HeatmapCalendarChart = createComponent<HeatmapCalendarChartProps>('HeatmapCalendarChart');
1706
+
1707
+ export type HeatmapChartProps = Bindable<HeatmapChartCatalogProps> & ComponentDirectives;
1708
+ /**
1709
+ * Grid-based heatmap chart for showing magnitude across two dimensions. Data format: [[xIndex, yIndex, value], …]. Provide category labels for both axes.
1710
+ */
1711
+ export const HeatmapChart = createComponent<HeatmapChartProps>('HeatmapChart');
1712
+
1713
+ export type TreemapChartProps = Bindable<TreemapChartCatalogProps> & ComponentDirectives;
1714
+ /**
1715
+ * 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.
1716
+ */
1717
+ export const TreemapChart = createComponent<TreemapChartProps>('TreemapChart');
1718
+
1719
+ export type SqlHighlightProps = Bindable<SqlHighlightCatalogProps> & ComponentDirectives;
1720
+ /**
1721
+ * 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.
1722
+ */
1723
+ export const SqlHighlight = createComponent<SqlHighlightProps>('SqlHighlight');