@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,17 +1,19 @@
1
1
  "use strict";
2
2
  /**
3
- * AUTO-GENERATED from component-manifest.json
4
- * Generated at: 2026-04-17T04:10:01.126Z
5
- * Components: 128
3
+ * AUTO-GENERATED from catalog-schema.json
4
+ * Components: 154
6
5
  *
7
- * Do not edit manually. Run: npx tsx scripts/codegen-builder.ts
6
+ * Do not edit manually. Run: node tools/sdui/builder/build.js
8
7
  */
9
8
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ListItem = exports.Label = exports.Icon = exports.Divider = exports.ContentLoader = exports.Card = exports.Chip = exports.Badge = exports.Avatar = exports.Alert = exports.ActionCard = exports.Field = exports.InputGroup = exports.File = exports.TreeSelect = exports.Tree = exports.Survey = exports.Signature = exports.Sin = exports.Ssn = exports.SelectableGroup = exports.ColorPicker = exports.DaySelector = exports.Masker = exports.RangeSlider = exports.Slider = exports.Timezone = exports.TimeRange = exports.Time = exports.SegmentedControl = exports.Percentage = exports.WorkEmail = exports.Currency = exports.TextAutoSuggest = exports.FileDrop = exports.Switch = exports.Password = exports.Phone = exports.Radio = exports.Textarea = exports.DateInlineMulti = exports.DateRange = exports.Date = exports.Number = exports.Email = exports.CheckboxGroup = exports.Checkbox = exports.AppGroupSelect = exports.Select = exports.TextInput = void 0;
11
- exports.ExpansionPanel = exports.Dropdown = exports.Drawer = exports.DraggableList = exports.ButtonGroup = exports.Button = exports.Breadcrumb = exports.AiIcon = exports.TitleCaption = exports.ToggleableArrow = exports.Country = exports.CountDown = exports.Circle = exports.ApiError = exports.Status = exports.ModalCloseButton = exports.ChipGroup = exports.SettingsLoader = exports.ReportViewerLoader = exports.ReportShareLoader = exports.ReportLoader = exports.ChartLoader = exports.AppGroupLoader = exports.LayoutCard = exports.LoaderCard = exports.LocationCard = exports.TableBasic = exports.Carousel = exports.AtomsSeparator = exports.Image = exports.AvatarList = exports.Video = exports.SnackBar = exports.ObjectUIStats = exports.ObjectUIContent = exports.ObjectUIHeader = exports.ObjectUITemplate = exports.ObjectUI = exports.ImageViewer = exports.DistributionBar = exports.CheckList = exports.Tip = exports.TextSnippet = exports.TextClip = exports.Stepper = exports.Spinner = exports.Skeleton = exports.ProgressBar = exports.ModalFooter = exports.Modal = void 0;
12
- exports.ObjectListView = exports.CustomObjectGrid = exports.VStack = exports.SplitPane = exports.Responsive = exports.Pane = exports.PageFooter = exports.PageAppLogo = exports.PageHeader = exports.PageContent = exports.Layout = exports.LabelGroup = exports.HStack = exports.Grid = exports.Box = exports.Text = exports.Heading = exports.Tab = exports.ShowMore = exports.SelectableMenu = exports.Paginate = exports.NestedList = exports.MenuList = exports.Link = exports.ItemNavigator = exports.IconButton = exports.FloatingButton = exports.ExpansionPanelGroup = void 0;
9
+ exports.Heading = exports.HStack = exports.Grid = exports.FloatingButton = exports.FileDrop = exports.File = exports.Field = exports.ExpansionPanelGroup = exports.ExpansionPanel = exports.Email = exports.Dropdown = exports.Drawer = exports.DraggableList = exports.Divider = exports.DistributionBar = exports.DaySelector = exports.DateRange = exports.DateInlineMulti = exports.Date = exports.Currency = exports.Country = exports.CountDown = exports.ContentLoader = exports.ColorPicker = exports.Circle = exports.ChipGroup = exports.Chip = exports.CheckboxGroup = exports.Checkbox = exports.CheckList = exports.ChartLoader = exports.Carousel = exports.CardGroup = exports.Card = exports.ButtonGroup = exports.Button = exports.Breadcrumb = exports.Box = exports.Badge = exports.AvatarList = exports.Avatar = exports.AtomsSeparator = exports.AppNavBar = exports.AppGroupSelect = exports.AppGroupLoader = exports.ApiError = exports.Animation = exports.Alert = exports.AiIcon = exports.ActionCard = void 0;
10
+ exports.Signature = exports.ShowMore = exports.SettingsLoader = exports.SelectableMenu = exports.SelectableGroup = exports.Select = exports.SegmentedControl = exports.Responsive = exports.ReportViewerLoader = exports.ReportShareLoader = exports.ReportLoader = exports.RangeSlider = exports.Radio = exports.ProgressSteps = exports.ProgressBar = exports.Phone = exports.Percentage = exports.Password = exports.Pane = exports.Paginate = exports.PageHeader = exports.PageFooter = exports.PageContent = exports.PageAppLogo = exports.ObjectUITemplate = exports.ObjectUIStats = exports.ObjectUIHeader = exports.ObjectUIContent = exports.ObjectUI = exports.Number = exports.NestedList = exports.ModalFooter = exports.ModalCloseButton = exports.Modal = exports.MenuList = exports.Masker = exports.LocationCard = exports.LoaderCard = exports.ListItem = exports.Link = exports.LayoutCard = exports.Layout = exports.LabelGroup = exports.Label = exports.ItemNavigator = exports.InputGroup = exports.ImageViewer = exports.Image = exports.IconButton = exports.Icon = void 0;
11
+ exports.RadarFilledChart = exports.RadarChart = exports.WithSpinner = exports.SunburstChart = exports.GaugeChart = exports.FunnelChart = exports.ScatterChart = exports.PieChart = exports.CombinationChart = exports.HorizontalBarChart = exports.LineChart = exports.BarChart = exports.ObjectListView = exports.CustomObjectGrid = exports.DashboardRichText = exports.RichText = exports.EChart = exports.ResizableBoard = exports.AnalyticsCard = exports.WorkEmail = exports.Video = exports.VStack = exports.TreeSelect = exports.Tree = exports.ToggleableArrow = exports.TitleCaption = exports.Tip = exports.Timezone = exports.TimeRange = exports.Time = exports.Textarea = exports.TextSnippet = exports.TextInput = exports.TextClip = exports.TextAutoSuggest = exports.Text = exports.TableBasic = exports.Tab = exports.Switch = exports.Survey = exports.Stepper = exports.Status = exports.Ssn = exports.SplitPane = exports.SplitButton = exports.Spinner = exports.SnackBar = exports.Slider = exports.Skeleton = exports.Sin = void 0;
12
+ exports.SqlHighlight = exports.TreemapChart = exports.HeatmapChart = exports.HeatmapCalendarChart = void 0;
13
+ const hasOwn = Object.prototype.hasOwnProperty;
13
14
  function createComponent(type, eventMap = {}) {
14
- return (props = {}) => {
15
+ return (...args) => {
16
+ const props = (args[0] ?? {});
15
17
  const node = { type, props: {}, children: [] };
16
18
  for (const [key, value] of Object.entries(props)) {
17
19
  if (key === 'children') {
@@ -26,105 +28,260 @@ function createComponent(type, eventMap = {}) {
26
28
  else if (key === 'repeat') {
27
29
  node.repeat = value;
28
30
  }
29
- else if (eventMap[key]) {
30
- node.on = node.on || {};
31
- node.on[eventMap[key]] = value;
32
- }
33
31
  else {
34
- node.props[key] = value;
32
+ // hasOwn guards against Object.prototype keys (toString, etc.)
33
+ // matching as events via the prototype chain.
34
+ const eventName = hasOwn.call(eventMap, key) ? eventMap[key] : undefined;
35
+ if (eventName) {
36
+ node.on = node.on || {};
37
+ node.on[eventName] = value;
38
+ }
39
+ else {
40
+ node.props[key] = value;
41
+ }
35
42
  }
36
43
  }
37
44
  return node;
38
45
  };
39
46
  }
40
- exports.TextInput = createComponent('TextInput', {
41
- onChange: 'change',
42
- onBlur: 'blur',
43
- onFocus: 'focus',
44
- onClick: 'click',
45
- onKeydown: 'keydown',
46
- onKeyup: 'keyup',
47
- onPaste: 'paste',
48
- onMouseenter: 'mouseenter',
49
- onMouseleave: 'mouseleave',
47
+ /**
48
+ * Placeholder for states like empty, success, error, and loading, featuring animations, icons, text, and action buttons.
49
+ */
50
+ exports.ActionCard = createComponent('ActionCard', {
51
+ onPressPrimary: 'pressPrimary',
52
+ onPressSecondary: 'pressSecondary',
50
53
  });
51
- exports.Select = createComponent('Select', {
54
+ /**
55
+ * Branded Rippling AI icon used to indicate AI-powered features or content. Displays the Rippling AI star icon with optional "Rippling AI" label text.
56
+ */
57
+ exports.AiIcon = createComponent('AiIcon');
58
+ /**
59
+ * 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).
60
+ */
61
+ exports.Alert = createComponent('Alert', {
62
+ onPressPrimary: 'pressPrimary',
63
+ onPressSecondary: 'pressSecondary',
64
+ onDismiss: 'dismiss',
65
+ });
66
+ /**
67
+ * 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.
68
+ */
69
+ exports.Animation = createComponent('Animation');
70
+ /**
71
+ * 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.
72
+ */
73
+ exports.ApiError = createComponent('ApiError');
74
+ /**
75
+ * 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.
76
+ */
77
+ exports.AppGroupLoader = createComponent('AppGroupLoader');
78
+ /**
79
+ * 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.
80
+ */
81
+ exports.AppGroupSelect = createComponent('AppGroupSelect', {
52
82
  onChange: 'change',
53
83
  onBlur: 'blur',
54
84
  onFocus: 'focus',
55
85
  onPaste: 'paste',
56
86
  onMenuToggle: 'menuToggle',
57
87
  });
58
- exports.AppGroupSelect = createComponent('AppGroupSelect', {
88
+ /**
89
+ * 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.
90
+ */
91
+ exports.AppNavBar = createComponent('AppNavBar', {
92
+ onNavigate: 'navigate',
93
+ onAction: 'action',
94
+ });
95
+ /**
96
+ * 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.
97
+ */
98
+ exports.AtomsSeparator = createComponent('AtomsSeparator');
99
+ /**
100
+ * 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.
101
+ */
102
+ exports.Avatar = createComponent('Avatar', {
103
+ onPress: 'press',
104
+ });
105
+ /**
106
+ * 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.
107
+ */
108
+ exports.AvatarList = createComponent('AvatarList');
109
+ /**
110
+ * 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).
111
+ */
112
+ exports.Badge = createComponent('Badge');
113
+ /**
114
+ * 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.
115
+ */
116
+ exports.Box = createComponent('Box');
117
+ /**
118
+ * 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.
119
+ */
120
+ exports.Breadcrumb = createComponent('Breadcrumb', {
121
+ onSelect: 'select',
122
+ });
123
+ /**
124
+ * 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.
125
+ */
126
+ exports.Button = createComponent('Button', {
127
+ onPress: 'press',
128
+ onPressWhileDisabled: 'pressWhileDisabled',
129
+ onMouseEnter: 'mouseEnter',
130
+ onMouseLeave: 'mouseLeave',
131
+ });
132
+ /**
133
+ * Layout container for arranging multiple Button elements horizontally or vertically with configurable placement, alignment, gap, and wrapping.
134
+ */
135
+ exports.ButtonGroup = createComponent('ButtonGroup');
136
+ /**
137
+ * 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).
138
+ */
139
+ exports.Card = createComponent('Card', {
140
+ onEdit: 'edit',
141
+ onDelete: 'delete',
142
+ onAdd: 'add',
143
+ onClick: 'click',
144
+ onAction: 'action',
145
+ });
146
+ /**
147
+ * 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.
148
+ */
149
+ exports.CardGroup = createComponent('CardGroup');
150
+ /**
151
+ * 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.
152
+ */
153
+ exports.Carousel = createComponent('Carousel', {
154
+ onDone: 'done',
155
+ });
156
+ /**
157
+ * 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.
158
+ */
159
+ exports.ChartLoader = createComponent('ChartLoader', {
160
+ onLoad: 'load',
161
+ });
162
+ /**
163
+ * 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.
164
+ */
165
+ exports.CheckList = createComponent('CheckList', {
166
+ onChange: 'change',
167
+ });
168
+ /**
169
+ * 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.
170
+ */
171
+ exports.Checkbox = createComponent('Checkbox', {
59
172
  onChange: 'change',
60
173
  onBlur: 'blur',
61
- onFocus: 'focus',
62
- onPaste: 'paste',
63
- onMenuToggle: 'menuToggle',
64
174
  });
65
- exports.Checkbox = createComponent('Checkbox', { onChange: 'change', onBlur: 'blur' });
66
- exports.CheckboxGroup = createComponent('CheckboxGroup', { onChange: 'change', onBlur: 'blur' });
67
- exports.Email = createComponent('Email', {
175
+ /**
176
+ * 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.
177
+ */
178
+ exports.CheckboxGroup = createComponent('CheckboxGroup', {
68
179
  onChange: 'change',
69
180
  onBlur: 'blur',
70
- onFocus: 'focus',
71
- onClick: 'click',
72
- onKeydown: 'keydown',
73
- onKeyup: 'keyup',
74
- onPaste: 'paste',
75
- onMouseenter: 'mouseenter',
76
- onMouseleave: 'mouseleave',
77
181
  });
78
- exports.Number = createComponent('Number', {
182
+ /**
183
+ * 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.
184
+ */
185
+ exports.Chip = createComponent('Chip', {
186
+ onDismiss: 'dismiss',
187
+ onPress: 'press',
188
+ });
189
+ /**
190
+ * 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.
191
+ */
192
+ exports.ChipGroup = createComponent('ChipGroup', {
193
+ onOverflowChange: 'overflowChange',
194
+ });
195
+ /**
196
+ * Circular graphic element for status or decoration
197
+ */
198
+ exports.Circle = createComponent('Circle');
199
+ /**
200
+ * 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.
201
+ */
202
+ exports.ColorPicker = createComponent('ColorPicker', {
79
203
  onChange: 'change',
80
204
  onBlur: 'blur',
81
- onChangeRaw: 'changeRaw',
82
- onChangeCalculationState: 'changeCalculationState',
83
205
  });
84
- exports.Date = createComponent('Date', { onChange: 'change', onBlur: 'blur' });
85
- exports.DateRange = createComponent('DateRange', { onChange: 'change', onBlur: 'blur' });
86
- exports.DateInlineMulti = createComponent('DateInlineMulti', { onChange: 'change', onBlur: 'blur' });
87
- exports.Textarea = createComponent('Textarea', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
88
- exports.Radio = createComponent('Radio', {
206
+ /**
207
+ * 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.
208
+ */
209
+ exports.ContentLoader = createComponent('ContentLoader');
210
+ /**
211
+ * Countdown timer displaying time remaining until a target date
212
+ */
213
+ exports.CountDown = createComponent('CountDown');
214
+ /**
215
+ * 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.
216
+ */
217
+ exports.Country = createComponent('Country');
218
+ /**
219
+ * 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.
220
+ */
221
+ exports.Currency = createComponent('Currency', {
89
222
  onChange: 'change',
90
223
  onBlur: 'blur',
91
- onMouseenter: 'mouseenter',
92
- onMouseleave: 'mouseleave',
93
224
  });
94
- exports.Phone = createComponent('Phone', {
225
+ /**
226
+ * 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.
227
+ */
228
+ exports.Date = createComponent('Date', {
95
229
  onChange: 'change',
96
230
  onBlur: 'blur',
97
- onFocus: 'focus',
98
- onClick: 'click',
99
- onKeydown: 'keydown',
100
- onKeyup: 'keyup',
101
- onPaste: 'paste',
102
- onMouseenter: 'mouseenter',
103
- onMouseleave: 'mouseleave',
104
- onCountryCodeChange: 'countryCodeChange',
105
231
  });
106
- exports.Password = createComponent('Password', {
232
+ /**
233
+ * 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.
234
+ */
235
+ exports.DateInlineMulti = createComponent('DateInlineMulti', {
107
236
  onChange: 'change',
108
237
  onBlur: 'blur',
109
- onFocus: 'focus',
110
- onClick: 'click',
111
- onKeydown: 'keydown',
112
- onKeyup: 'keyup',
113
- onPaste: 'paste',
114
- onMouseenter: 'mouseenter',
115
- onMouseleave: 'mouseleave',
116
- onReveal: 'reveal',
117
238
  });
118
- exports.Switch = createComponent('Switch', { onChange: 'change', onBlur: 'blur' });
119
- exports.FileDrop = createComponent('FileDrop', { onChange: 'change', onBlur: 'blur' });
120
- exports.TextAutoSuggest = createComponent('TextAutoSuggest', {
239
+ /**
240
+ * 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.
241
+ */
242
+ exports.DateRange = createComponent('DateRange', {
121
243
  onChange: 'change',
122
244
  onBlur: 'blur',
123
- onFocus: 'focus',
124
- onClick: 'click',
125
245
  });
126
- exports.Currency = createComponent('Currency', { onChange: 'change', onBlur: 'blur' });
127
- exports.WorkEmail = createComponent('WorkEmail', {
246
+ /**
247
+ * 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.
248
+ */
249
+ exports.DaySelector = createComponent('DaySelector', {
250
+ onChange: 'change',
251
+ });
252
+ /**
253
+ * 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.
254
+ */
255
+ exports.DistributionBar = createComponent('DistributionBar');
256
+ /**
257
+ * Horizontal line to visually separate content sections
258
+ */
259
+ exports.Divider = createComponent('Divider');
260
+ /**
261
+ * 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.
262
+ */
263
+ exports.DraggableList = createComponent('DraggableList', {
264
+ onUpdate: 'update',
265
+ onRemove: 'remove',
266
+ onDragStart: 'dragStart',
267
+ onDragEnd: 'dragEnd',
268
+ });
269
+ /**
270
+ * 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.
271
+ */
272
+ exports.Drawer = createComponent('Drawer', {
273
+ onClose: 'close',
274
+ });
275
+ /**
276
+ * 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.
277
+ */
278
+ exports.Dropdown = createComponent('Dropdown', {
279
+ onChange: 'change',
280
+ });
281
+ /**
282
+ * 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.
283
+ */
284
+ exports.Email = createComponent('Email', {
128
285
  onChange: 'change',
129
286
  onBlur: 'blur',
130
287
  onFocus: 'focus',
@@ -135,169 +292,640 @@ exports.WorkEmail = createComponent('WorkEmail', {
135
292
  onMouseenter: 'mouseenter',
136
293
  onMouseleave: 'mouseleave',
137
294
  });
138
- exports.Percentage = createComponent('Percentage', { onChange: 'change', onBlur: 'blur' });
139
- exports.SegmentedControl = createComponent('SegmentedControl', { onChange: 'change', onBlur: 'blur' });
140
- exports.Time = createComponent('Time', { onChange: 'change', onBlur: 'blur' });
141
- exports.TimeRange = createComponent('TimeRange', { onChange: 'change', onBlur: 'blur' });
142
- exports.Timezone = createComponent('Timezone', { onChange: 'change', onBlur: 'blur', onFocus: 'focus' });
143
- exports.Slider = createComponent('Slider', {
295
+ /**
296
+ * 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.
297
+ */
298
+ exports.ExpansionPanel = createComponent('ExpansionPanel', { onToggle: 'toggle' });
299
+ /**
300
+ * 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.
301
+ */
302
+ exports.ExpansionPanelGroup = createComponent('ExpansionPanelGroup');
303
+ /**
304
+ * 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.
305
+ */
306
+ exports.Field = createComponent('Field');
307
+ /**
308
+ * 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.
309
+ */
310
+ exports.File = createComponent('File', {
144
311
  onChange: 'change',
145
- onBlur: 'blur',
146
- onBeforeChange: 'beforeChange',
147
- onAfterChange: 'afterChange',
312
+ onDelete: 'delete',
148
313
  });
149
- exports.RangeSlider = createComponent('RangeSlider', {
314
+ /**
315
+ * 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.
316
+ */
317
+ exports.FileDrop = createComponent('FileDrop', {
150
318
  onChange: 'change',
151
- onBeforeChange: 'beforeChange',
152
- onAfterChange: 'afterChange',
153
319
  onBlur: 'blur',
154
320
  });
155
- exports.Masker = createComponent('Masker', { onChange: 'change', onBlur: 'blur' });
156
- exports.DaySelector = createComponent('DaySelector', { onChange: 'change' });
157
- exports.ColorPicker = createComponent('ColorPicker', { onChange: 'change', onBlur: 'blur' });
158
- exports.SelectableGroup = createComponent('SelectableGroup', { onChange: 'change' });
159
- exports.Ssn = createComponent('Ssn', { onChange: 'change', onBlur: 'blur' });
160
- exports.Sin = createComponent('Sin', { onChange: 'change', onBlur: 'blur' });
161
- exports.Signature = createComponent('Signature', { onChange: 'change' });
162
- exports.Survey = createComponent('Survey', { onChange: 'change' });
163
- exports.Tree = createComponent('Tree', { onChange: 'change', onFooterAction: 'footerAction' });
164
- exports.TreeSelect = createComponent('TreeSelect', { onChange: 'change' });
165
- exports.File = createComponent('File', { onChange: 'change', onDelete: 'delete' });
166
- exports.InputGroup = createComponent('InputGroup');
167
- exports.Field = createComponent('Field');
168
- exports.ActionCard = createComponent('ActionCard', {
169
- onPressPrimary: 'pressPrimary',
170
- onPressSecondary: 'pressSecondary',
171
- });
172
- exports.Alert = createComponent('Alert', {
173
- onPressPrimary: 'pressPrimary',
174
- onPressSecondary: 'pressSecondary',
175
- onDismiss: 'dismiss',
321
+ /**
322
+ * 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.
323
+ */
324
+ exports.FloatingButton = createComponent('FloatingButton', {
325
+ onPress: 'press',
326
+ onPressWhileDisabled: 'pressWhileDisabled',
327
+ onMouseEnter: 'mouseEnter',
328
+ onMouseLeave: 'mouseLeave',
176
329
  });
177
- exports.Avatar = createComponent('Avatar', { onPress: 'press' });
178
- exports.Badge = createComponent('Badge');
179
- exports.Chip = createComponent('Chip', { onDismiss: 'dismiss', onPress: 'press' });
180
- exports.Card = createComponent('Card', {
181
- onEdit: 'edit',
182
- onDelete: 'delete',
183
- onAdd: 'add',
184
- onClick: 'click',
185
- onAction: 'action',
330
+ /**
331
+ * 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.
332
+ */
333
+ exports.Grid = createComponent('Grid', {
334
+ onRowClick: 'rowClick',
335
+ onRowAction: 'rowAction',
336
+ onHeaderAction: 'headerAction',
186
337
  });
187
- exports.ContentLoader = createComponent('ContentLoader');
188
- exports.Divider = createComponent('Divider');
338
+ /**
339
+ * 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.
340
+ */
341
+ exports.HStack = createComponent('HStack');
342
+ /**
343
+ * 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.
344
+ */
345
+ exports.Heading = createComponent('Heading');
346
+ /**
347
+ * 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.
348
+ */
189
349
  exports.Icon = createComponent('Icon', { onPress: 'press' });
190
- exports.Label = createComponent('Label');
191
- exports.ListItem = createComponent('ListItem', { onPress: 'press' });
192
- exports.Modal = createComponent('Modal', { onClose: 'close' });
193
- exports.ModalFooter = createComponent('ModalFooter');
194
- exports.ProgressBar = createComponent('ProgressBar');
195
- exports.Skeleton = createComponent('Skeleton');
196
- exports.Spinner = createComponent('Spinner');
197
- exports.Stepper = createComponent('Stepper', { onClick: 'click' });
198
- exports.TextClip = createComponent('TextClip');
199
- exports.TextSnippet = createComponent('TextSnippet');
200
- exports.Tip = createComponent('Tip');
201
- exports.CheckList = createComponent('CheckList', { onChange: 'change' });
202
- exports.DistributionBar = createComponent('DistributionBar');
350
+ /**
351
+ * 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.
352
+ */
353
+ exports.IconButton = createComponent('IconButton', {
354
+ onPress: 'press',
355
+ onPressWhileDisabled: 'pressWhileDisabled',
356
+ onMouseEnter: 'mouseEnter',
357
+ onMouseLeave: 'mouseLeave',
358
+ });
359
+ /**
360
+ * 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.
361
+ */
362
+ exports.Image = createComponent('Image', {
363
+ onPress: 'press',
364
+ onLoad: 'load',
365
+ onError: 'error',
366
+ });
367
+ /**
368
+ * 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.
369
+ */
203
370
  exports.ImageViewer = createComponent('ImageViewer');
204
- exports.ObjectUI = createComponent('ObjectUI');
205
- exports.ObjectUITemplate = createComponent('ObjectUITemplate');
206
- exports.ObjectUIHeader = createComponent('ObjectUIHeader');
207
- exports.ObjectUIContent = createComponent('ObjectUIContent');
208
- exports.ObjectUIStats = createComponent('ObjectUIStats', { onActionClick: 'actionClick' });
209
- exports.SnackBar = createComponent('SnackBar', { onDismiss: 'dismiss' });
210
- exports.Video = createComponent('Video');
211
- exports.AvatarList = createComponent('AvatarList');
212
- exports.Image = createComponent('Image', { onPress: 'press', onLoad: 'load', onError: 'error' });
213
- exports.AtomsSeparator = createComponent('AtomsSeparator');
214
- exports.Carousel = createComponent('Carousel', { onDone: 'done' });
215
- exports.TableBasic = createComponent('TableBasic');
371
+ /**
372
+ * 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.
373
+ */
374
+ exports.InputGroup = createComponent('InputGroup');
375
+ /**
376
+ * 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).
377
+ */
378
+ exports.ItemNavigator = createComponent('ItemNavigator', {
379
+ onNext: 'next',
380
+ onPrevious: 'previous',
381
+ });
382
+ /**
383
+ * 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.
384
+ */
385
+ exports.Label = createComponent('Label');
386
+ /**
387
+ * 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.
388
+ */
389
+ exports.LabelGroup = createComponent('LabelGroup');
390
+ /**
391
+ * 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.
392
+ */
393
+ exports.Layout = createComponent('Layout');
394
+ /**
395
+ * A standard card container for creating card-based page layouts with configurable padding and an optional selectable theme for selection interfaces.
396
+ */
397
+ exports.LayoutCard = createComponent('LayoutCard', {
398
+ onPress: 'press',
399
+ });
400
+ /**
401
+ * 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.
402
+ */
403
+ exports.Link = createComponent('Link', { onPress: 'press' });
404
+ /**
405
+ * 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.
406
+ */
407
+ exports.ListItem = createComponent('ListItem', {
408
+ onPress: 'press',
409
+ });
410
+ /**
411
+ * 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.
412
+ */
413
+ exports.LoaderCard = createComponent('LoaderCard');
414
+ /**
415
+ * 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.
416
+ */
216
417
  exports.LocationCard = createComponent('LocationCard', {
217
418
  onEdit: 'edit',
218
419
  onDelete: 'delete',
219
420
  onClick: 'click',
220
421
  onAction: 'action',
221
422
  });
222
- exports.LoaderCard = createComponent('LoaderCard');
223
- exports.LayoutCard = createComponent('LayoutCard', { onPress: 'press' });
224
- exports.AppGroupLoader = createComponent('AppGroupLoader');
225
- exports.ChartLoader = createComponent('ChartLoader');
226
- exports.ReportLoader = createComponent('ReportLoader');
227
- exports.ReportShareLoader = createComponent('ReportShareLoader');
228
- exports.ReportViewerLoader = createComponent('ReportViewerLoader');
229
- exports.SettingsLoader = createComponent('SettingsLoader');
230
- exports.ChipGroup = createComponent('ChipGroup', { onOverflowChange: 'overflowChange' });
231
- exports.ModalCloseButton = createComponent('ModalCloseButton');
232
- exports.Status = createComponent('Status');
233
- exports.ApiError = createComponent('ApiError');
234
- exports.Circle = createComponent('Circle');
235
- exports.CountDown = createComponent('CountDown');
236
- exports.Country = createComponent('Country');
237
- exports.ToggleableArrow = createComponent('ToggleableArrow');
238
- exports.TitleCaption = createComponent('TitleCaption');
239
- exports.AiIcon = createComponent('AiIcon');
240
- exports.Breadcrumb = createComponent('Breadcrumb', { onSelect: 'select' });
241
- exports.Button = createComponent('Button', {
242
- onPress: 'press',
243
- onPressWhileDisabled: 'pressWhileDisabled',
244
- onMouseEnter: 'mouseEnter',
245
- onMouseLeave: 'mouseLeave',
423
+ /**
424
+ * 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.
425
+ */
426
+ exports.Masker = createComponent('Masker', {
427
+ onChange: 'change',
428
+ onBlur: 'blur',
246
429
  });
247
- exports.ButtonGroup = createComponent('ButtonGroup');
248
- exports.DraggableList = createComponent('DraggableList', {
249
- onUpdate: 'update',
250
- onRemove: 'remove',
251
- onDragStart: 'dragStart',
252
- onDragEnd: 'dragEnd',
430
+ /**
431
+ * 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.
432
+ */
433
+ exports.MenuList = createComponent('MenuList', {
434
+ onSelect: 'select',
253
435
  });
254
- exports.Drawer = createComponent('Drawer', { onClose: 'close' });
255
- exports.Dropdown = createComponent('Dropdown', { onChange: 'change' });
256
- exports.ExpansionPanel = createComponent('ExpansionPanel', { onToggle: 'toggle' });
257
- exports.ExpansionPanelGroup = createComponent('ExpansionPanelGroup');
258
- exports.FloatingButton = createComponent('FloatingButton', {
259
- onPress: 'press',
260
- onPressWhileDisabled: 'pressWhileDisabled',
261
- onMouseEnter: 'mouseEnter',
262
- onMouseLeave: 'mouseLeave',
436
+ /**
437
+ * 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.
438
+ */
439
+ exports.Modal = createComponent('Modal', { onClose: 'close' });
440
+ /**
441
+ * 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.
442
+ */
443
+ exports.ModalCloseButton = createComponent('ModalCloseButton');
444
+ /**
445
+ * 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.
446
+ */
447
+ exports.ModalFooter = createComponent('ModalFooter');
448
+ /**
449
+ * 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.
450
+ */
451
+ exports.NestedList = createComponent('NestedList', {
452
+ onToggle: 'toggle',
453
+ onSelect: 'select',
263
454
  });
264
- exports.IconButton = createComponent('IconButton', {
265
- onPress: 'press',
266
- onPressWhileDisabled: 'pressWhileDisabled',
267
- onMouseEnter: 'mouseEnter',
268
- onMouseLeave: 'mouseLeave',
455
+ /**
456
+ * 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.
457
+ */
458
+ exports.Number = createComponent('Number', {
459
+ onChange: 'change',
460
+ onBlur: 'blur',
461
+ onChangeRaw: 'changeRaw',
462
+ onChangeCalculationState: 'changeCalculationState',
269
463
  });
270
- exports.ItemNavigator = createComponent('ItemNavigator', { onNext: 'next', onPrevious: 'previous' });
271
- exports.Link = createComponent('Link', { onPress: 'press' });
272
- exports.MenuList = createComponent('MenuList', { onSelect: 'select' });
273
- exports.NestedList = createComponent('NestedList', { onToggle: 'toggle', onSelect: 'select' });
274
- exports.Paginate = createComponent('Paginate', { onChange: 'change' });
275
- exports.SelectableMenu = createComponent('SelectableMenu', { onChange: 'change' });
276
- exports.ShowMore = createComponent('ShowMore');
277
- exports.Tab = createComponent('Tab', { onChange: 'change' });
278
- exports.Heading = createComponent('Heading');
279
- exports.Text = createComponent('Text');
280
- exports.Box = createComponent('Box');
281
- exports.Grid = createComponent('Grid', {
282
- onRowClick: 'rowClick',
283
- onRowAction: 'rowAction',
284
- onHeaderAction: 'headerAction',
464
+ /**
465
+ * 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.
466
+ */
467
+ exports.ObjectUI = createComponent('ObjectUI');
468
+ /**
469
+ * 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.
470
+ */
471
+ exports.ObjectUIContent = createComponent('ObjectUIContent');
472
+ /**
473
+ * 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.
474
+ */
475
+ exports.ObjectUIHeader = createComponent('ObjectUIHeader');
476
+ /**
477
+ * 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.
478
+ */
479
+ exports.ObjectUIStats = createComponent('ObjectUIStats', {
480
+ onActionClick: 'actionClick',
285
481
  });
286
- exports.HStack = createComponent('HStack');
287
- exports.LabelGroup = createComponent('LabelGroup');
288
- exports.Layout = createComponent('Layout');
482
+ /**
483
+ * 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.
484
+ */
485
+ exports.ObjectUITemplate = createComponent('ObjectUITemplate');
486
+ /**
487
+ * 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.
488
+ */
489
+ exports.PageAppLogo = createComponent('PageAppLogo');
490
+ /**
491
+ * 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.
492
+ */
289
493
  exports.PageContent = createComponent('PageContent');
494
+ /**
495
+ * 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.
496
+ */
497
+ exports.PageFooter = createComponent('PageFooter', {
498
+ onContinue: 'continue',
499
+ });
500
+ /**
501
+ * 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.
502
+ */
290
503
  exports.PageHeader = createComponent('PageHeader');
291
- exports.PageAppLogo = createComponent('PageAppLogo');
292
- exports.PageFooter = createComponent('PageFooter', { onContinue: 'continue' });
504
+ /**
505
+ * 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.
506
+ */
507
+ exports.Paginate = createComponent('Paginate', {
508
+ onChange: 'change',
509
+ });
510
+ /**
511
+ * 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.
512
+ */
293
513
  exports.Pane = createComponent('Pane', {
294
514
  onCollapsedChange: 'collapsedChange',
295
515
  onDismiss: 'dismiss',
296
516
  onResize: 'resize',
297
517
  });
518
+ /**
519
+ * 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.
520
+ */
521
+ exports.Password = createComponent('Password', {
522
+ onChange: 'change',
523
+ onBlur: 'blur',
524
+ onFocus: 'focus',
525
+ onClick: 'click',
526
+ onKeydown: 'keydown',
527
+ onKeyup: 'keyup',
528
+ onPaste: 'paste',
529
+ onMouseenter: 'mouseenter',
530
+ onMouseleave: 'mouseleave',
531
+ onReveal: 'reveal',
532
+ });
533
+ /**
534
+ * 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.
535
+ */
536
+ exports.Percentage = createComponent('Percentage', {
537
+ onChange: 'change',
538
+ onBlur: 'blur',
539
+ });
540
+ /**
541
+ * A specialized input for entering and editing phone numbers with automatic region-based formatting, international support, and an optional country code dropdown selector.
542
+ */
543
+ exports.Phone = createComponent('Phone', {
544
+ onChange: 'change',
545
+ onBlur: 'blur',
546
+ onFocus: 'focus',
547
+ onClick: 'click',
548
+ onKeydown: 'keydown',
549
+ onKeyup: 'keyup',
550
+ onPaste: 'paste',
551
+ onMouseenter: 'mouseenter',
552
+ onMouseleave: 'mouseleave',
553
+ onCountryCodeChange: 'countryCodeChange',
554
+ });
555
+ /**
556
+ * 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.
557
+ */
558
+ exports.ProgressBar = createComponent('ProgressBar');
559
+ /**
560
+ * 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.
561
+ */
562
+ exports.ProgressSteps = createComponent('ProgressSteps');
563
+ /**
564
+ * 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.
565
+ */
566
+ exports.Radio = createComponent('Radio', {
567
+ onChange: 'change',
568
+ onBlur: 'blur',
569
+ onMouseenter: 'mouseenter',
570
+ onMouseleave: 'mouseleave',
571
+ });
572
+ /**
573
+ * 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.
574
+ */
575
+ exports.RangeSlider = createComponent('RangeSlider', {
576
+ onChange: 'change',
577
+ onBeforeChange: 'beforeChange',
578
+ onAfterChange: 'afterChange',
579
+ onBlur: 'blur',
580
+ });
581
+ /**
582
+ * 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.
583
+ */
584
+ exports.ReportLoader = createComponent('ReportLoader');
585
+ /**
586
+ * 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).
587
+ */
588
+ exports.ReportShareLoader = createComponent('ReportShareLoader');
589
+ /**
590
+ * 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.
591
+ */
592
+ exports.ReportViewerLoader = createComponent('ReportViewerLoader');
593
+ /**
594
+ * 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.
595
+ */
298
596
  exports.Responsive = createComponent('Responsive');
597
+ /**
598
+ * 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.
599
+ */
600
+ exports.SegmentedControl = createComponent('SegmentedControl', {
601
+ onChange: 'change',
602
+ onBlur: 'blur',
603
+ });
604
+ /**
605
+ * 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.
606
+ */
607
+ exports.Select = createComponent('Select', {
608
+ onChange: 'change',
609
+ onBlur: 'blur',
610
+ onFocus: 'focus',
611
+ onPaste: 'paste',
612
+ onMenuToggle: 'menuToggle',
613
+ });
614
+ /**
615
+ * 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.
616
+ */
617
+ exports.SelectableGroup = createComponent('SelectableGroup', {
618
+ onChange: 'change',
619
+ });
620
+ /**
621
+ * 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.
622
+ */
623
+ exports.SelectableMenu = createComponent('SelectableMenu', { onChange: 'change' });
624
+ /**
625
+ * 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.
626
+ */
627
+ exports.SettingsLoader = createComponent('SettingsLoader');
628
+ /**
629
+ * 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.
630
+ */
631
+ exports.ShowMore = createComponent('ShowMore');
632
+ /**
633
+ * 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.
634
+ */
635
+ exports.Signature = createComponent('Signature', {
636
+ onChange: 'change',
637
+ });
638
+ /**
639
+ * 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.
640
+ */
641
+ exports.Sin = createComponent('Sin', {
642
+ onChange: 'change',
643
+ onBlur: 'blur',
644
+ });
645
+ /**
646
+ * An animated placeholder that mimics the shape of content while it loads, available in text (lines), circle, and box variants.
647
+ */
648
+ exports.Skeleton = createComponent('Skeleton');
649
+ /**
650
+ * 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.
651
+ */
652
+ exports.Slider = createComponent('Slider', {
653
+ onChange: 'change',
654
+ onBlur: 'blur',
655
+ onBeforeChange: 'beforeChange',
656
+ onAfterChange: 'afterChange',
657
+ });
658
+ /**
659
+ * 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.
660
+ */
661
+ exports.SnackBar = createComponent('SnackBar', {
662
+ onDismiss: 'dismiss',
663
+ });
664
+ /**
665
+ * 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.
666
+ */
667
+ exports.Spinner = createComponent('Spinner');
668
+ /**
669
+ * 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").
670
+ */
671
+ exports.SplitButton = createComponent('SplitButton', {
672
+ onPress: 'press',
673
+ onDropdownChange: 'dropdownChange',
674
+ });
675
+ /**
676
+ * 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.
677
+ */
299
678
  exports.SplitPane = createComponent('SplitPane');
679
+ /**
680
+ * 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.
681
+ */
682
+ exports.Ssn = createComponent('Ssn', {
683
+ onChange: 'change',
684
+ onBlur: 'blur',
685
+ });
686
+ /**
687
+ * 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.
688
+ */
689
+ exports.Status = createComponent('Status');
690
+ /**
691
+ * 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.
692
+ */
693
+ exports.Stepper = createComponent('Stepper', {
694
+ onClick: 'click',
695
+ });
696
+ /**
697
+ * 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.
698
+ */
699
+ exports.Survey = createComponent('Survey', {
700
+ onChange: 'change',
701
+ });
702
+ /**
703
+ * 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.
704
+ */
705
+ exports.Switch = createComponent('Switch', {
706
+ onChange: 'change',
707
+ onBlur: 'blur',
708
+ });
709
+ /**
710
+ * 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.
711
+ */
712
+ exports.Tab = createComponent('Tab', { onChange: 'change' });
713
+ /**
714
+ * 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.
715
+ */
716
+ exports.TableBasic = createComponent('TableBasic');
717
+ /**
718
+ * 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.
719
+ */
720
+ exports.Text = createComponent('Text');
721
+ /**
722
+ * 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.
723
+ */
724
+ exports.TextAutoSuggest = createComponent('TextAutoSuggest', {
725
+ onChange: 'change',
726
+ onBlur: 'blur',
727
+ onFocus: 'focus',
728
+ onClick: 'click',
729
+ });
730
+ /**
731
+ * 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.
732
+ */
733
+ exports.TextClip = createComponent('TextClip');
734
+ /**
735
+ * 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.
736
+ */
737
+ exports.TextInput = createComponent('TextInput', {
738
+ onChange: 'change',
739
+ onBlur: 'blur',
740
+ onFocus: 'focus',
741
+ onClick: 'click',
742
+ onKeydown: 'keydown',
743
+ onKeyup: 'keyup',
744
+ onPaste: 'paste',
745
+ onMouseenter: 'mouseenter',
746
+ onMouseleave: 'mouseleave',
747
+ });
748
+ /**
749
+ * 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.
750
+ */
751
+ exports.TextSnippet = createComponent('TextSnippet');
752
+ /**
753
+ * 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.
754
+ */
755
+ exports.Textarea = createComponent('Textarea', {
756
+ onChange: 'change',
757
+ onBlur: 'blur',
758
+ onFocus: 'focus',
759
+ });
760
+ /**
761
+ * 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.
762
+ */
763
+ exports.Time = createComponent('Time', {
764
+ onChange: 'change',
765
+ onBlur: 'blur',
766
+ });
767
+ /**
768
+ * 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.
769
+ */
770
+ exports.TimeRange = createComponent('TimeRange', {
771
+ onChange: 'change',
772
+ onBlur: 'blur',
773
+ });
774
+ /**
775
+ * 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.
776
+ */
777
+ exports.Timezone = createComponent('Timezone', {
778
+ onChange: 'change',
779
+ onBlur: 'blur',
780
+ onFocus: 'focus',
781
+ });
782
+ /**
783
+ * 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.
784
+ */
785
+ exports.Tip = createComponent('Tip');
786
+ /**
787
+ * 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.
788
+ */
789
+ exports.TitleCaption = createComponent('TitleCaption');
790
+ /**
791
+ * 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.
792
+ */
793
+ exports.ToggleableArrow = createComponent('ToggleableArrow');
794
+ /**
795
+ * 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.
796
+ */
797
+ exports.Tree = createComponent('Tree', {
798
+ onChange: 'change',
799
+ onFooterAction: 'footerAction',
800
+ });
801
+ /**
802
+ * 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.
803
+ */
804
+ exports.TreeSelect = createComponent('TreeSelect', {
805
+ onChange: 'change',
806
+ });
807
+ /**
808
+ * 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.
809
+ */
300
810
  exports.VStack = createComponent('VStack');
811
+ /**
812
+ * Embedded video player with 16:9 aspect ratio
813
+ */
814
+ exports.Video = createComponent('Video');
815
+ /**
816
+ * 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
817
+ */
818
+ exports.WorkEmail = createComponent('WorkEmail', {
819
+ onChange: 'change',
820
+ onBlur: 'blur',
821
+ onFocus: 'focus',
822
+ onClick: 'click',
823
+ onKeydown: 'keydown',
824
+ onKeyup: 'keyup',
825
+ onPaste: 'paste',
826
+ onMouseenter: 'mouseenter',
827
+ onMouseleave: 'mouseleave',
828
+ });
829
+ /**
830
+ * 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).
831
+ */
832
+ exports.AnalyticsCard = createComponent('AnalyticsCard', {
833
+ onConfigure: 'configure',
834
+ });
835
+ /**
836
+ * Resizable dashboard board for AI widget layouts. Wraps each child in a Pebble ResizableBoard block.
837
+ */
838
+ exports.ResizableBoard = createComponent('ResizableBoard');
839
+ /**
840
+ * 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.
841
+ */
842
+ exports.EChart = createComponent('EChart', {
843
+ onClick: 'click',
844
+ onLegendChange: 'legendChange',
845
+ onDataZoomChange: 'dataZoomChange',
846
+ });
847
+ /**
848
+ * Read-only HTML content rendered with the shared RichTextEditor (non-editable). Generic SDUI building block for narrative or explanatory copy in any product layout.
849
+ */
850
+ exports.RichText = createComponent('RichText');
851
+ /**
852
+ * Deprecated alias for RichText. Same props; prefer type `RichText` in new specs.
853
+ */
854
+ exports.DashboardRichText = createComponent('DashboardRichText');
855
+ /**
856
+ * 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.
857
+ */
301
858
  exports.CustomObjectGrid = createComponent('CustomObjectGrid');
859
+ /**
860
+ * 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.
861
+ */
302
862
  exports.ObjectListView = createComponent('ObjectListView');
863
+ /**
864
+ * 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.
865
+ */
866
+ exports.BarChart = createComponent('BarChart', {
867
+ onBarClick: 'barClick',
868
+ });
869
+ /**
870
+ * 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.
871
+ */
872
+ exports.LineChart = createComponent('LineChart');
873
+ /**
874
+ * 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.
875
+ */
876
+ exports.HorizontalBarChart = createComponent('HorizontalBarChart');
877
+ /**
878
+ * 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.
879
+ */
880
+ exports.CombinationChart = createComponent('CombinationChart');
881
+ /**
882
+ * Pie / donut chart. Each series entry has a data array of {name, value} pairs. Use radius: ["50%", "70%"] for a donut hole.
883
+ */
884
+ exports.PieChart = createComponent('PieChart');
885
+ /**
886
+ * Scatter plot. Each series contains [x, y] data pairs plotted as individual points.
887
+ */
888
+ exports.ScatterChart = createComponent('ScatterChart');
889
+ /**
890
+ * Funnel chart for conversion or stage-based data. Data items are ordered by value (largest at top).
891
+ */
892
+ exports.FunnelChart = createComponent('FunnelChart');
893
+ /**
894
+ * Gauge (speedometer) chart. Displays a single numeric value against colored segments. Segments define the scale breakpoints and their colors.
895
+ */
896
+ exports.GaugeChart = createComponent('GaugeChart');
897
+ /**
898
+ * Sunburst (multi-level pie) chart for hierarchical data. Each node has a name, optional value, and optional children array.
899
+ */
900
+ exports.SunburstChart = createComponent('SunburstChart');
901
+ /**
902
+ * 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.
903
+ */
904
+ exports.WithSpinner = createComponent('WithSpinner', {
905
+ onLoad: 'load',
906
+ });
907
+ /**
908
+ * Radar (spider) chart for comparing multiple variables across categories. Each indicator defines a spoke axis. Provide radarIndicators (axis definitions) and radarOptions (series data).
909
+ */
910
+ exports.RadarChart = createComponent('RadarChart');
911
+ /**
912
+ * 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.
913
+ */
914
+ exports.RadarFilledChart = createComponent('RadarFilledChart');
915
+ /**
916
+ * 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.
917
+ */
918
+ exports.HeatmapCalendarChart = createComponent('HeatmapCalendarChart');
919
+ /**
920
+ * Grid-based heatmap chart for showing magnitude across two dimensions. Data format: [[xIndex, yIndex, value], …]. Provide category labels for both axes.
921
+ */
922
+ exports.HeatmapChart = createComponent('HeatmapChart');
923
+ /**
924
+ * 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.
925
+ */
926
+ exports.TreemapChart = createComponent('TreemapChart');
927
+ /**
928
+ * 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.
929
+ */
930
+ exports.SqlHighlight = createComponent('SqlHighlight');
303
931
  //# sourceMappingURL=components.js.map