@orcestr/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/README.md +151 -0
  2. package/README.ru.md +151 -0
  3. package/assets/orcestr-banner.webp +0 -0
  4. package/dist/components/Action/ActionConfirmModal.d.ts +8 -0
  5. package/dist/components/Action/ActionConfirmModal.d.ts.map +1 -0
  6. package/dist/components/Action/ActionConfirmModal.js +13 -0
  7. package/dist/components/Action/ActionTypes.d.ts +47 -0
  8. package/dist/components/Action/ActionTypes.d.ts.map +1 -0
  9. package/dist/components/Action/ActionTypes.js +49 -0
  10. package/dist/components/ActionMenu/ActionMenu.d.ts +3 -0
  11. package/dist/components/ActionMenu/ActionMenu.d.ts.map +1 -0
  12. package/dist/components/ActionMenu/ActionMenu.js +1 -0
  13. package/dist/components/Alert/Alert.d.ts +11 -0
  14. package/dist/components/Alert/Alert.d.ts.map +1 -0
  15. package/dist/components/Alert/Alert.js +7 -0
  16. package/dist/components/AppShell/AppShell.d.ts +102 -0
  17. package/dist/components/AppShell/AppShell.d.ts.map +1 -0
  18. package/dist/components/AppShell/AppShell.js +96 -0
  19. package/dist/components/Badge/Badge.d.ts +15 -0
  20. package/dist/components/Badge/Badge.d.ts.map +1 -0
  21. package/dist/components/Badge/Badge.js +8 -0
  22. package/dist/components/Box/Box.d.ts +11 -0
  23. package/dist/components/Box/Box.d.ts.map +1 -0
  24. package/dist/components/Box/Box.js +8 -0
  25. package/dist/components/Button/Button.d.ts +27 -0
  26. package/dist/components/Button/Button.d.ts.map +1 -0
  27. package/dist/components/Button/Button.js +13 -0
  28. package/dist/components/Checkbox/Checkbox.d.ts +10 -0
  29. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  30. package/dist/components/Checkbox/Checkbox.js +15 -0
  31. package/dist/components/Collapse/Collapse.d.ts +11 -0
  32. package/dist/components/Collapse/Collapse.d.ts.map +1 -0
  33. package/dist/components/Collapse/Collapse.js +33 -0
  34. package/dist/components/Combobox/Combobox.d.ts +17 -0
  35. package/dist/components/Combobox/Combobox.d.ts.map +1 -0
  36. package/dist/components/Combobox/Combobox.js +32 -0
  37. package/dist/components/CommandPalette/CommandPalette.d.ts +21 -0
  38. package/dist/components/CommandPalette/CommandPalette.d.ts.map +1 -0
  39. package/dist/components/CommandPalette/CommandPalette.js +168 -0
  40. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +25 -0
  41. package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
  42. package/dist/components/ConfirmDialog/ConfirmDialog.js +25 -0
  43. package/dist/components/ContextMenu/ContextMenu.d.ts +11 -0
  44. package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -0
  45. package/dist/components/ContextMenu/ContextMenu.js +68 -0
  46. package/dist/components/DataTable/DataTable.d.ts +88 -0
  47. package/dist/components/DataTable/DataTable.d.ts.map +1 -0
  48. package/dist/components/DataTable/DataTable.js +415 -0
  49. package/dist/components/DataTable/DataTableStateAdapters.d.ts +41 -0
  50. package/dist/components/DataTable/DataTableStateAdapters.d.ts.map +1 -0
  51. package/dist/components/DataTable/DataTableStateAdapters.js +192 -0
  52. package/dist/components/DatePicker/DatePicker.d.ts +21 -0
  53. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  54. package/dist/components/DatePicker/DatePicker.js +39 -0
  55. package/dist/components/DatePicker/DatePickerState.d.ts +30 -0
  56. package/dist/components/DatePicker/DatePickerState.d.ts.map +1 -0
  57. package/dist/components/DatePicker/DatePickerState.js +106 -0
  58. package/dist/components/DateRangePicker/DateRangePicker.d.ts +19 -0
  59. package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
  60. package/dist/components/DateRangePicker/DateRangePicker.js +6 -0
  61. package/dist/components/DateRangePresetPicker/DateRangePresetPicker.d.ts +10 -0
  62. package/dist/components/DateRangePresetPicker/DateRangePresetPicker.d.ts.map +1 -0
  63. package/dist/components/DateRangePresetPicker/DateRangePresetPicker.js +26 -0
  64. package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.d.ts +4 -0
  65. package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.d.ts.map +1 -0
  66. package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.js +20 -0
  67. package/dist/components/Dialog/Dialog.d.ts +2 -0
  68. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  69. package/dist/components/Dialog/Dialog.js +1 -0
  70. package/dist/components/Drawer/Drawer.d.ts +30 -0
  71. package/dist/components/Drawer/Drawer.d.ts.map +1 -0
  72. package/dist/components/Drawer/Drawer.js +83 -0
  73. package/dist/components/EntityPicker/EntityPicker.d.ts +41 -0
  74. package/dist/components/EntityPicker/EntityPicker.d.ts.map +1 -0
  75. package/dist/components/EntityPicker/EntityPicker.js +17 -0
  76. package/dist/components/Field/Field.d.ts +12 -0
  77. package/dist/components/Field/Field.d.ts.map +1 -0
  78. package/dist/components/Field/Field.js +8 -0
  79. package/dist/components/Flex/Flex.d.ts +9 -0
  80. package/dist/components/Flex/Flex.d.ts.map +1 -0
  81. package/dist/components/Flex/Flex.js +8 -0
  82. package/dist/components/Grid/Grid.d.ts +11 -0
  83. package/dist/components/Grid/Grid.d.ts.map +1 -0
  84. package/dist/components/Grid/Grid.js +12 -0
  85. package/dist/components/Highlight/Highlight.d.ts +27 -0
  86. package/dist/components/Highlight/Highlight.d.ts.map +1 -0
  87. package/dist/components/Highlight/Highlight.js +26 -0
  88. package/dist/components/IconButton/IconButton.d.ts +25 -0
  89. package/dist/components/IconButton/IconButton.d.ts.map +1 -0
  90. package/dist/components/IconButton/IconButton.js +13 -0
  91. package/dist/components/IconText/IconText.d.ts +12 -0
  92. package/dist/components/IconText/IconText.d.ts.map +1 -0
  93. package/dist/components/IconText/IconText.js +7 -0
  94. package/dist/components/Listbox/Listbox.d.ts +13 -0
  95. package/dist/components/Listbox/Listbox.d.ts.map +1 -0
  96. package/dist/components/Listbox/Listbox.js +74 -0
  97. package/dist/components/Menu/Menu.d.ts +14 -0
  98. package/dist/components/Menu/Menu.d.ts.map +1 -0
  99. package/dist/components/Menu/Menu.js +168 -0
  100. package/dist/components/Modal/Modal.d.ts +29 -0
  101. package/dist/components/Modal/Modal.d.ts.map +1 -0
  102. package/dist/components/Modal/Modal.js +155 -0
  103. package/dist/components/MultiSelect/MultiSelect.d.ts +21 -0
  104. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -0
  105. package/dist/components/MultiSelect/MultiSelect.js +139 -0
  106. package/dist/components/NumberField/NumberField.d.ts +4 -0
  107. package/dist/components/NumberField/NumberField.d.ts.map +1 -0
  108. package/dist/components/NumberField/NumberField.js +6 -0
  109. package/dist/components/Overlay/OverlayProvider.d.ts +19 -0
  110. package/dist/components/Overlay/OverlayProvider.d.ts.map +1 -0
  111. package/dist/components/Overlay/OverlayProvider.js +73 -0
  112. package/dist/components/PaginatedCombobox/PaginatedCombobox.d.ts +48 -0
  113. package/dist/components/PaginatedCombobox/PaginatedCombobox.d.ts.map +1 -0
  114. package/dist/components/PaginatedCombobox/PaginatedCombobox.js +223 -0
  115. package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.d.ts +13 -0
  116. package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.d.ts.map +1 -0
  117. package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.js +10 -0
  118. package/dist/components/Pagination/Pagination.d.ts +7 -0
  119. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  120. package/dist/components/Pagination/Pagination.js +9 -0
  121. package/dist/components/Popover/Popover.d.ts +19 -0
  122. package/dist/components/Popover/Popover.d.ts.map +1 -0
  123. package/dist/components/Popover/Popover.js +83 -0
  124. package/dist/components/Portal/Portal.d.ts +6 -0
  125. package/dist/components/Portal/Portal.d.ts.map +1 -0
  126. package/dist/components/Portal/Portal.js +23 -0
  127. package/dist/components/RadioGroup/RadioGroup.d.ts +14 -0
  128. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
  129. package/dist/components/RadioGroup/RadioGroup.js +6 -0
  130. package/dist/components/ScrollArea/ScrollArea.d.ts +36 -0
  131. package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  132. package/dist/components/ScrollArea/ScrollArea.js +124 -0
  133. package/dist/components/Section/Section.d.ts +14 -0
  134. package/dist/components/Section/Section.d.ts.map +1 -0
  135. package/dist/components/Section/Section.js +20 -0
  136. package/dist/components/SegmentedControl/SegmentedControl.d.ts +13 -0
  137. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -0
  138. package/dist/components/SegmentedControl/SegmentedControl.js +6 -0
  139. package/dist/components/Select/Select.d.ts +27 -0
  140. package/dist/components/Select/Select.d.ts.map +1 -0
  141. package/dist/components/Select/Select.js +142 -0
  142. package/dist/components/Separator/Separator.d.ts +6 -0
  143. package/dist/components/Separator/Separator.d.ts.map +1 -0
  144. package/dist/components/Separator/Separator.js +5 -0
  145. package/dist/components/Skeleton/Skeleton.d.ts +9 -0
  146. package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
  147. package/dist/components/Skeleton/Skeleton.js +8 -0
  148. package/dist/components/Spinner/Spinner.d.ts +7 -0
  149. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  150. package/dist/components/Spinner/Spinner.js +5 -0
  151. package/dist/components/Stack/Stack.d.ts +9 -0
  152. package/dist/components/Stack/Stack.d.ts.map +1 -0
  153. package/dist/components/Stack/Stack.js +7 -0
  154. package/dist/components/State/State.d.ts +23 -0
  155. package/dist/components/State/State.d.ts.map +1 -0
  156. package/dist/components/State/State.js +30 -0
  157. package/dist/components/State/stateIcon.d.ts +3 -0
  158. package/dist/components/State/stateIcon.d.ts.map +1 -0
  159. package/dist/components/State/stateIcon.js +11 -0
  160. package/dist/components/StepperInput/StepperInput.d.ts +13 -0
  161. package/dist/components/StepperInput/StepperInput.d.ts.map +1 -0
  162. package/dist/components/StepperInput/StepperInput.js +22 -0
  163. package/dist/components/Switch/Switch.d.ts +10 -0
  164. package/dist/components/Switch/Switch.d.ts.map +1 -0
  165. package/dist/components/Switch/Switch.js +14 -0
  166. package/dist/components/Tabs/Tabs.d.ts +18 -0
  167. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  168. package/dist/components/Tabs/Tabs.js +104 -0
  169. package/dist/components/Text/Text.d.ts +13 -0
  170. package/dist/components/Text/Text.d.ts.map +1 -0
  171. package/dist/components/Text/Text.js +8 -0
  172. package/dist/components/TextArea/TextArea.d.ts +15 -0
  173. package/dist/components/TextArea/TextArea.d.ts.map +1 -0
  174. package/dist/components/TextArea/TextArea.js +17 -0
  175. package/dist/components/TextField/TextField.d.ts +25 -0
  176. package/dist/components/TextField/TextField.d.ts.map +1 -0
  177. package/dist/components/TextField/TextField.js +31 -0
  178. package/dist/components/Toast/Toast.d.ts +43 -0
  179. package/dist/components/Toast/Toast.d.ts.map +1 -0
  180. package/dist/components/Toast/Toast.js +205 -0
  181. package/dist/components/Tooltip/Tooltip.d.ts +10 -0
  182. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  183. package/dist/components/Tooltip/Tooltip.js +24 -0
  184. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +8 -0
  185. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
  186. package/dist/components/VisuallyHidden/VisuallyHidden.js +6 -0
  187. package/dist/components/Workflow/Workflow.d.ts +82 -0
  188. package/dist/components/Workflow/Workflow.d.ts.map +1 -0
  189. package/dist/components/Workflow/Workflow.js +73 -0
  190. package/dist/example/CodePreview.d.ts +25 -0
  191. package/dist/example/CodePreview.d.ts.map +1 -0
  192. package/dist/example/CodePreview.js +93 -0
  193. package/dist/example/ExampleActionsSection.d.ts +10 -0
  194. package/dist/example/ExampleActionsSection.d.ts.map +1 -0
  195. package/dist/example/ExampleActionsSection.js +10 -0
  196. package/dist/example/ExampleBasicsSections.d.ts +8 -0
  197. package/dist/example/ExampleBasicsSections.d.ts.map +1 -0
  198. package/dist/example/ExampleBasicsSections.js +43 -0
  199. package/dist/example/ExampleDataSection.d.ts +7 -0
  200. package/dist/example/ExampleDataSection.d.ts.map +1 -0
  201. package/dist/example/ExampleDataSection.js +124 -0
  202. package/dist/example/ExampleFieldsSection.d.ts +17 -0
  203. package/dist/example/ExampleFieldsSection.d.ts.map +1 -0
  204. package/dist/example/ExampleFieldsSection.js +10 -0
  205. package/dist/example/ExampleFoundationsSection.d.ts +5 -0
  206. package/dist/example/ExampleFoundationsSection.d.ts.map +1 -0
  207. package/dist/example/ExampleFoundationsSection.js +25 -0
  208. package/dist/example/ExampleOverlays.d.ts +30 -0
  209. package/dist/example/ExampleOverlays.d.ts.map +1 -0
  210. package/dist/example/ExampleOverlays.js +12 -0
  211. package/dist/example/ExampleOverlaysSection.d.ts +14 -0
  212. package/dist/example/ExampleOverlaysSection.d.ts.map +1 -0
  213. package/dist/example/ExampleOverlaysSection.js +126 -0
  214. package/dist/example/ExampleSelectionSection.d.ts +30 -0
  215. package/dist/example/ExampleSelectionSection.d.ts.map +1 -0
  216. package/dist/example/ExampleSelectionSection.js +66 -0
  217. package/dist/example/ExampleStateSection.d.ts +8 -0
  218. package/dist/example/ExampleStateSection.d.ts.map +1 -0
  219. package/dist/example/ExampleStateSection.js +76 -0
  220. package/dist/example/ExampleThemePlayground.d.ts +417 -0
  221. package/dist/example/ExampleThemePlayground.d.ts.map +1 -0
  222. package/dist/example/ExampleThemePlayground.js +596 -0
  223. package/dist/example/UiExamplePage.d.ts +2 -0
  224. package/dist/example/UiExamplePage.d.ts.map +1 -0
  225. package/dist/example/UiExamplePage.js +315 -0
  226. package/dist/example/UiExampleSection.d.ts +8 -0
  227. package/dist/example/UiExampleSection.d.ts.map +1 -0
  228. package/dist/example/UiExampleSection.js +5 -0
  229. package/dist/example/codeSamples.d.ts +30 -0
  230. package/dist/example/codeSamples.d.ts.map +1 -0
  231. package/dist/example/codeSamples.js +976 -0
  232. package/dist/example/exampleData.d.ts +33 -0
  233. package/dist/example/exampleData.d.ts.map +1 -0
  234. package/dist/example/exampleData.js +217 -0
  235. package/dist/example/styles.css +1106 -0
  236. package/dist/hooks/useControllableState.d.ts +6 -0
  237. package/dist/hooks/useControllableState.d.ts.map +1 -0
  238. package/dist/hooks/useControllableState.js +16 -0
  239. package/dist/hooks/useDisclosure.d.ts +12 -0
  240. package/dist/hooks/useDisclosure.d.ts.map +1 -0
  241. package/dist/hooks/useDisclosure.js +14 -0
  242. package/dist/hooks/useEscapeKey.d.ts +2 -0
  243. package/dist/hooks/useEscapeKey.d.ts.map +1 -0
  244. package/dist/hooks/useEscapeKey.js +15 -0
  245. package/dist/hooks/useFloatingLayer.d.ts +19 -0
  246. package/dist/hooks/useFloatingLayer.d.ts.map +1 -0
  247. package/dist/hooks/useFloatingLayer.js +26 -0
  248. package/dist/hooks/useFloatingPosition.d.ts +17 -0
  249. package/dist/hooks/useFloatingPosition.d.ts.map +1 -0
  250. package/dist/hooks/useFloatingPosition.js +132 -0
  251. package/dist/hooks/useFocusTrap.d.ts +3 -0
  252. package/dist/hooks/useFocusTrap.d.ts.map +1 -0
  253. package/dist/hooks/useFocusTrap.js +54 -0
  254. package/dist/hooks/useListNavigation.d.ts +17 -0
  255. package/dist/hooks/useListNavigation.d.ts.map +1 -0
  256. package/dist/hooks/useListNavigation.js +44 -0
  257. package/dist/hooks/useOutsidePointerDown.d.ts +3 -0
  258. package/dist/hooks/useOutsidePointerDown.d.ts.map +1 -0
  259. package/dist/hooks/useOutsidePointerDown.js +20 -0
  260. package/dist/hooks/usePresence.d.ts +5 -0
  261. package/dist/hooks/usePresence.d.ts.map +1 -0
  262. package/dist/hooks/usePresence.js +35 -0
  263. package/dist/hooks/useTypeahead.d.ts +2 -0
  264. package/dist/hooks/useTypeahead.d.ts.map +1 -0
  265. package/dist/hooks/useTypeahead.js +23 -0
  266. package/dist/index.d.ts +64 -0
  267. package/dist/index.d.ts.map +1 -0
  268. package/dist/index.js +64 -0
  269. package/dist/locale/LocaleProvider.d.ts +89 -0
  270. package/dist/locale/LocaleProvider.d.ts.map +1 -0
  271. package/dist/locale/LocaleProvider.js +174 -0
  272. package/dist/provider/OrcestrUiProvider.d.ts +28 -0
  273. package/dist/provider/OrcestrUiProvider.d.ts.map +1 -0
  274. package/dist/provider/OrcestrUiProvider.js +9 -0
  275. package/dist/react-query.d.ts +2 -0
  276. package/dist/react-query.d.ts.map +1 -0
  277. package/dist/react-query.js +1 -0
  278. package/dist/styles/orcestr-ui.css +4676 -0
  279. package/dist/theme/ThemeProvider.d.ts +3 -0
  280. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  281. package/dist/theme/ThemeProvider.js +280 -0
  282. package/dist/theme/defaultTheme.d.ts +12 -0
  283. package/dist/theme/defaultTheme.d.ts.map +1 -0
  284. package/dist/theme/defaultTheme.js +516 -0
  285. package/dist/theme/systemProps.d.ts +53 -0
  286. package/dist/theme/systemProps.d.ts.map +1 -0
  287. package/dist/theme/systemProps.js +240 -0
  288. package/dist/theme/themeTypes.d.ts +197 -0
  289. package/dist/theme/themeTypes.d.ts.map +1 -0
  290. package/dist/theme/themeTypes.js +1 -0
  291. package/dist/theme/useTheme.d.ts +4 -0
  292. package/dist/theme/useTheme.d.ts.map +1 -0
  293. package/dist/theme/useTheme.js +10 -0
  294. package/dist/utils/cn.d.ts +2 -0
  295. package/dist/utils/cn.d.ts.map +1 -0
  296. package/dist/utils/cn.js +3 -0
  297. package/dist/utils/composeRefs.d.ts +3 -0
  298. package/dist/utils/composeRefs.d.ts.map +1 -0
  299. package/dist/utils/composeRefs.js +14 -0
  300. package/dist/utils/mergeProps.d.ts +4 -0
  301. package/dist/utils/mergeProps.d.ts.map +1 -0
  302. package/dist/utils/mergeProps.js +26 -0
  303. package/dist/utils/ownerDocument.d.ts +2 -0
  304. package/dist/utils/ownerDocument.d.ts.map +1 -0
  305. package/dist/utils/ownerDocument.js +3 -0
  306. package/dist/utils/polymorphic.d.ts +6 -0
  307. package/dist/utils/polymorphic.d.ts.map +1 -0
  308. package/dist/utils/polymorphic.js +1 -0
  309. package/package.json +78 -0
@@ -0,0 +1,976 @@
1
+ export const codeSamples = {
2
+ typography: `import {Badge, Box, Flex, Stack, Text} from '@orcestr/ui';
3
+
4
+ <Stack g={3}>
5
+ <Stack g={1}>
6
+ <Text as='h1' fs='28px' fw={780} lh={1.1}>
7
+ Workflow review
8
+ </Text>
9
+ <Text as='h2' fs='20px' fw={720} lh={1.2}>
10
+ Review window and status
11
+ </Text>
12
+ <Text tone='muted' fs='13px' lh={1.5}>
13
+ Compact operational text with muted metadata.
14
+ </Text>
15
+ </Stack>
16
+
17
+ <Stack g={1}>
18
+ <Text fs='15px' fw={700}>Body strong text</Text>
19
+ <Text fs='14px' lh={1.55}>Body regular text.</Text>
20
+ <Text fs='12px' tone='muted' lh={1.4}>Caption text.</Text>
21
+ </Stack>
22
+
23
+ <Flex g={2} wrap>
24
+ <Text tone='brand' fw={700}>Brand</Text>
25
+ <Text tone='success' fw={700}>Success</Text>
26
+ <Text tone='warning' fw={700}>Warning</Text>
27
+ <Text tone='danger' fw={700}>Danger</Text>
28
+ <Text tone='info' fw={700}>Info</Text>
29
+ </Flex>
30
+
31
+ <Box w='100%' p={2} r={3}>
32
+ <Text display='block' truncate>
33
+ This is a long single line value that truncates cleanly.
34
+ </Text>
35
+ </Box>
36
+
37
+ <Flex g={2} wrap>
38
+ <Badge>Neutral</Badge>
39
+ <Badge tone='brand'>Brand</Badge>
40
+ <Badge tone='success'>Success</Badge>
41
+ <Badge tone='warning'>Warning</Badge>
42
+ <Badge tone='danger'>Danger</Badge>
43
+ <Badge tone='info'>Info</Badge>
44
+ </Flex>
45
+ </Stack>`,
46
+ skeleton: `import {Skeleton, Stack} from '@orcestr/ui';
47
+
48
+ <Stack g={2}>
49
+ <Skeleton h={16} w='80%' />
50
+ <Skeleton h={16} w='64%' />
51
+ <Skeleton h={36} />
52
+ </Stack>`,
53
+ appShell: `import {
54
+ AppShell,
55
+ AppShellContent,
56
+ AppShellHeader,
57
+ AppShellNav,
58
+ AppShellSidebar,
59
+ Button,
60
+ OrcestrUiProvider,
61
+ Stack,
62
+ Text,
63
+ } from '@orcestr/ui';
64
+
65
+ <OrcestrUiProvider surface='operations' locale='ru'>
66
+ <AppShell
67
+ sidebarOpen={mobileOpen}
68
+ onSidebarOpenChange={setMobileOpen}
69
+ header={
70
+ <AppShellHeader
71
+ visibility='mobile'
72
+ title='Operations'
73
+ sidebarOpen={mobileOpen}
74
+ onSidebarOpenChange={setMobileOpen}
75
+ actions={<Button size={1}>Create</Button>}
76
+ />
77
+ }
78
+ sidebar={
79
+ <AppShellSidebar
80
+ title='Operations'
81
+ description='Operational module shell with themed navigation.'
82
+ onClose={() => setMobileOpen(false)}
83
+ footer={<Button fullWidth v='surface'>Settings</Button>}
84
+ >
85
+ <AppShellNav items={navigationItems} />
86
+ </AppShellSidebar>
87
+ }
88
+ >
89
+ <AppShellContent>
90
+ <Stack g={1}>
91
+ <Text as='h1' fs='22px' fw={760}>Queue</Text>
92
+ <Text tone='muted'>Daily workspace operations and status movement.</Text>
93
+ </Stack>
94
+ {children}
95
+ </AppShellContent>
96
+ </AppShell>
97
+ </OrcestrUiProvider>`,
98
+ layoutFlex: `import {Badge, Button, Flex, Text} from '@orcestr/ui';
99
+
100
+ <Flex col g={3}>
101
+ <Flex row g={2} a='c' j='sb' wrap>
102
+ <Flex row g={2} a='c' wrap>
103
+ <Badge tone='brand'>status</Badge>
104
+ <Text fw={700}>Task TASK-2048</Text>
105
+ </Flex>
106
+ <Flex row g={1} a='c'>
107
+ <Button size={1} v='surface'>Cancel</Button>
108
+ <Button size={1}>Apply</Button>
109
+ </Flex>
110
+ </Flex>
111
+ <Flex row g={2} wrap>
112
+ {['Intake', 'Review', 'Complete'].map((item, index) => (
113
+ <Flex key={item} col g={1} p={2} r={3} flex='1 1 150px'>
114
+ <Text fs='12px' tone='muted'>Step {index + 1}</Text>
115
+ <Text fw={700}>{item}</Text>
116
+ </Flex>
117
+ ))}
118
+ </Flex>
119
+ </Flex>`,
120
+ layoutStack: `import {Box, Flex, Stack, Text} from '@orcestr/ui';
121
+
122
+ <Stack g={2}>
123
+ {[
124
+ ['Created', 'Draft created from intake'],
125
+ ['Reserved', 'Capacity is reserved for review'],
126
+ ['Scheduled', 'Review window is confirmed'],
127
+ ].map(([title, description]) => (
128
+ <Flex key={title} row g={2} p={2} r={3} a='s'>
129
+ <Box size={8} r={7} mt={1} />
130
+ <Stack g={0}>
131
+ <Text fs='13px' fw={700}>{title}</Text>
132
+ <Text fs='12px' tone='muted' lh={1.45}>{description}</Text>
133
+ </Stack>
134
+ </Flex>
135
+ ))}
136
+ </Stack>`,
137
+ layoutCollapse: `import {useState} from 'react';
138
+ import {Badge, Button, Collapse, Flex, Stack, Text} from '@orcestr/ui';
139
+
140
+ const [detailsOpen, setDetailsOpen] = useState(true);
141
+
142
+ <Stack g={2}>
143
+ <Flex row g={2} a='c' j='sb'>
144
+ <Text fw={700}>Item details</Text>
145
+ <Button size={1} v='surface' onClick={() => setDetailsOpen((open) => !open)}>
146
+ {detailsOpen ? 'Hide' : 'Show'}
147
+ </Button>
148
+ </Flex>
149
+ <Collapse open={detailsOpen}>
150
+ <Stack g={2} p={2} r={3}>
151
+ <Flex row g={2} j='sb'>
152
+ <Text tone='muted'>Owner</Text>
153
+ <Text fw={700}>Core team</Text>
154
+ </Flex>
155
+ <Flex row g={2} j='sb'>
156
+ <Text tone='muted'>Window</Text>
157
+ <Text fw={700}>09:00 - 12:00</Text>
158
+ </Flex>
159
+ <Flex row g={2} j='sb'>
160
+ <Text tone='muted'>Priority</Text>
161
+ <Badge tone='warning'>High</Badge>
162
+ </Flex>
163
+ </Stack>
164
+ </Collapse>
165
+ </Stack>`,
166
+ layoutGrid: `import {Box, Grid, Text} from '@orcestr/ui';
167
+
168
+ <Grid columns='repeat(3, minmax(0, 1fr))' g={2}>
169
+ {['A', 'B', 'C', 'D', 'E', 'F'].map((item) => (
170
+ <Box key={item} p={2} r={3} ta='center'>
171
+ <Text fs='13px' fw={700}>{item}</Text>
172
+ </Box>
173
+ ))}
174
+ </Grid>`,
175
+ highlights: `import {BottomHighlight, Text, TopHighlight} from '@orcestr/ui';
176
+
177
+ <div
178
+ className='oui-highlight-demo-surface'
179
+ style={{background: 'var(--oui-section-nested-solid-bg)'}}
180
+ >
181
+ <TopHighlight
182
+ h={32}
183
+ color='var(--oui-section-nested-solid-bg)'
184
+ position='absolute'
185
+ />
186
+ <Text fs='13px' fw={700}>Top and bottom highlights</Text>
187
+ <Text fs='12px' tone='muted'>
188
+ One surface shows both edge masks at the same time.
189
+ </Text>
190
+ <BottomHighlight
191
+ h={32}
192
+ color='var(--oui-section-nested-solid-bg)'
193
+ position='absolute'
194
+ />
195
+ </div>`,
196
+ scrollArea: `import {Badge, Flex, ScrollArea, Stack, Text} from '@orcestr/ui';
197
+
198
+ <Stack g={2}>
199
+ <ScrollArea h={116} pr={1}>
200
+ <Stack g={1}>{rows}</Stack>
201
+ </ScrollArea>
202
+
203
+ <ScrollArea
204
+ h={112}
205
+ pr={1}
206
+ highlights
207
+ highlightColor='var(--oui-section-nested-solid-bg)'
208
+ highlightTop={{h: 28, mode: 'static', maxOpacity: 0.96}}
209
+ highlightBottom={{h: 28, mode: 'static', maxOpacity: 0.96}}
210
+ >
211
+ <Stack g={1}>{rows}</Stack>
212
+ </ScrollArea>
213
+
214
+ <ScrollArea
215
+ h={176}
216
+ pr={1}
217
+ highlights
218
+ highlightColor='var(--oui-section-nested-solid-bg)'
219
+ highlightTop={{
220
+ h: 42,
221
+ mode: 'scroll',
222
+ start: 50,
223
+ fadeDistance: 160,
224
+ maxOpacity: 0.94,
225
+ }}
226
+ highlightBottom={{
227
+ h: 34,
228
+ mode: 'scroll',
229
+ start: 12,
230
+ fadeDistance: 96,
231
+ maxOpacity: 0.9,
232
+ }}
233
+ >
234
+ <Stack g={1}>
235
+ {rows.map((row, index) => (
236
+ <Flex key={row.id} row g={2} p={2} r={3} a='c'>
237
+ <Badge tone={index < 3 ? 'brand' : 'info'}>
238
+ {index + 1}
239
+ </Badge>
240
+ <Stack g={0}>
241
+ <Text fs='13px' fw={700}>{row.title}</Text>
242
+ <Text fs='12px' tone='muted'>{row.description}</Text>
243
+ </Stack>
244
+ </Flex>
245
+ ))}
246
+ </Stack>
247
+ </ScrollArea>
248
+ </Stack>`,
249
+ systemRadius: `import {Box, Button, Flex, Text} from '@orcestr/ui';
250
+
251
+ <Flex g={2} a='c' wrap>
252
+ {[0, 2, 4, 6, 7].map((radius) => (
253
+ <Box key={radius} size={32} r={radius} display='flex' a='c' j='c'>
254
+ <Text fs='12px'>{radius}</Text>
255
+ </Box>
256
+ ))}
257
+ </Flex>
258
+ <Button mt={2} v='pad' r={7}>
259
+ Button r=7
260
+ </Button>`,
261
+ buttons: `import {Button, Spinner} from '@orcestr/ui';
262
+ import {LuCheck, LuInfo, LuTrash2, LuTriangleAlert} from 'react-icons/lu';
263
+
264
+ <Button size={3}>Solid</Button>
265
+ <Button size={3} v='soft'>Soft</Button>
266
+ <Button size={3} v='surface'>Surface</Button>
267
+ <Button size={3} v='pad'>Pad</Button>
268
+ <Button size={3} v='outline'>Outline</Button>
269
+ <Button size={3} v='ghost'>Ghost</Button>
270
+
271
+ <Button tone='success' leftIcon={<LuCheck size={16} />}>Success</Button>
272
+ <Button tone='warning' v='soft' leftIcon={<LuTriangleAlert size={16} />}>Warning</Button>
273
+ <Button tone='info' v='soft' leftIcon={<LuInfo size={16} />}>Info</Button>
274
+ <Button tone='danger' v='soft' leftIcon={<LuTrash2 size={16} />}>Delete</Button>
275
+
276
+ <Button size={1} v='surface'>Size 1</Button>
277
+ <Button size={2} v='surface'>Size 2</Button>
278
+ <Button size={3} v='surface'>Size 3</Button>
279
+ <Button size={4} v='surface'>Size 4</Button>
280
+
281
+ <Button size={1}>Solid 1</Button>
282
+ <Button size={2} v='soft'>Soft 2</Button>
283
+ <Button size={3} v='surface'>Surface 3</Button>
284
+ <Button size={3} v='pad'>Pad 3</Button>
285
+ <Button size={4} v='outline'>Outline 4</Button>
286
+ <Button size={2} v='ghost'>Ghost 2</Button>
287
+
288
+ <Button v='surface' pressAnimation='translate'>Press translate</Button>
289
+ <Button v='surface' pressAnimation='scale'>Press scale</Button>
290
+ <Button v='surface' pressAnimation='soft'>Press soft</Button>
291
+ <Button v='surface' pressAnimation='none'>Press none</Button>
292
+
293
+ <Button size={3} loading>Loading</Button>
294
+ <Button size={3} v='surface' loading leftIcon={<LuCheck size={16} />}>Save</Button>
295
+ <Button size={3} tone='success' loading leftIcon={<LuCheck size={16} />}>Success</Button>
296
+ <Spinner />`,
297
+ iconButtons: `import {Button, IconButton, Menu, Tooltip} from '@orcestr/ui';
298
+ import {LuBell, LuCheck, LuCommand, LuEllipsis, LuInfo} from 'react-icons/lu';
299
+
300
+ <IconButton v='solid' icon={<LuCheck size={17} />} aria-label='Solid icon' />
301
+ <IconButton v='soft' icon={<LuBell size={17} />} aria-label='Soft icon' />
302
+ <IconButton v='surface' icon={<LuBell size={17} />} aria-label='Surface icon' />
303
+ <IconButton v='pad' icon={<LuBell size={17} />} aria-label='Pad icon' />
304
+ <IconButton v='outline' icon={<LuInfo size={17} />} aria-label='Outline icon' />
305
+ <IconButton v='ghost' icon={<LuEllipsis size={17} />} aria-label='Ghost icon' />
306
+
307
+ <IconButton size={1} v='surface' icon={<LuBell size={13} />} aria-label='Size 1 icon' />
308
+ <IconButton size={2} v='surface' icon={<LuBell size={15} />} aria-label='Size 2 icon' />
309
+ <IconButton size={3} v='surface' icon={<LuBell size={17} />} aria-label='Size 3 icon' />
310
+ <IconButton size={4} v='surface' icon={<LuBell size={19} />} aria-label='Size 4 icon' />
311
+
312
+ <IconButton size={3} v='pad' round={false} r={3} icon={<LuCommand size={17} />} aria-label='Square pad icon' />
313
+ <IconButton size={3} v='outline' loading icon={<LuBell size={17} />} aria-label='Loading icon' />
314
+
315
+ <IconButton size={1} v='ghost' icon={<LuEllipsis size={13} />} aria-label='Ghost size 1' />
316
+ <IconButton size={2} v='ghost' icon={<LuEllipsis size={15} />} aria-label='Ghost size 2' />
317
+ <IconButton size={3} v='ghost' icon={<LuEllipsis size={17} />} aria-label='Ghost size 3' />
318
+ <IconButton size={4} v='ghost' icon={<LuEllipsis size={19} />} aria-label='Ghost size 4' />
319
+
320
+ <Tooltip content='Notifications'>
321
+ <IconButton v='surface' icon={<LuBell size={17} />} aria-label='Notifications' />
322
+ </Tooltip>
323
+ <IconButton v='surface' loading icon={<LuBell size={17} />} aria-label='Loading action' />
324
+ <IconButton v='pad' icon={<LuBell size={17} />} aria-label='Pad action' />
325
+ <Menu
326
+ trigger={<IconButton v='surface' icon={<LuEllipsis size={17} />} aria-label='Actions' />}
327
+ items={menuItems}
328
+ />
329
+ <Button v='surface' leftIcon={<LuCommand size={16} />} onClick={openPalette}>
330
+ Commands
331
+ </Button>`,
332
+ textFields: `import {Button, Flex, Field, TextArea, TextField} from '@orcestr/ui';
333
+ import {LuSearch} from 'react-icons/lu';
334
+
335
+ <Field label='Search' helperText='Clearable field with left slot.'>
336
+ <Flex g={2} a='c'>
337
+ <TextField
338
+ size={2}
339
+ placeholder='Search entity'
340
+ clearable
341
+ leftSlot={<LuSearch size={16} />}
342
+ />
343
+ <Button size={2} v='surface'>Search</Button>
344
+ </Flex>
345
+ </Field>
346
+ <Field label='Comment'>
347
+ <TextArea rows={4} placeholder='Internal note' />
348
+ </Field>`,
349
+ groupedFields: `import {Button, Flex, Field, Grid, Section, Stack, Text, TextArea, TextField} from '@orcestr/ui';
350
+
351
+ <Section g={3}>
352
+ <Stack g={1}>
353
+ <Text fw={760}>Request details</Text>
354
+ <Text fs='12px' tone='muted'>
355
+ Layout primitives group fields without owning state.
356
+ </Text>
357
+ </Stack>
358
+ <Grid columns='repeat(auto-fit, minmax(min(100%, 180px), 1fr))' g={3}>
359
+ <Field label='Source' required error='Choose a source'>
360
+ <TextField placeholder='Search source' invalid />
361
+ </Field>
362
+ <Field label='Contact'>
363
+ <TextField placeholder='Name or email' />
364
+ </Field>
365
+ </Grid>
366
+ <Field label='Review note' helperText='Visible to operators.'>
367
+ <TextArea rows={3} placeholder='Internal instructions' />
368
+ </Field>
369
+ <Flex g={2} j='e' wrap>
370
+ <Button type='button' v='surface'>Cancel</Button>
371
+ <Button type='button'>Save request</Button>
372
+ </Flex>
373
+ </Section>`,
374
+ numberAndDateFields: `import {DatePicker, Field, NumberField, StepperInput} from '@orcestr/ui';
375
+
376
+ <Field label='Quantity'>
377
+ <StepperInput value={quantity} onChange={setQuantity} min={0} max={200} />
378
+ </Field>
379
+ <Field label='Price'>
380
+ <NumberField defaultValue={1250} min={0} />
381
+ </Field>
382
+ <Field label='Date'>
383
+ <DatePicker value={date} onValueChange={setDate} />
384
+ </Field>`,
385
+ dateRangeFields: `import {DateRangePicker, DateRangePresetPicker, Field} from '@orcestr/ui';
386
+
387
+ <Field label='Range'>
388
+ <DateRangePicker value={dateRange} onValueChange={setDateRange} />
389
+ </Field>
390
+ <DateRangePresetPicker
391
+ today='2026-06-26'
392
+ onValueChange={setDateRange}
393
+ />`,
394
+ selection: `import {Combobox, EntityPicker, MultiSelect, Select, SegmentedControl} from '@orcestr/ui';
395
+ import {LuPlus} from 'react-icons/lu';
396
+
397
+ <Select items={items} value={status} onValueChange={setStatus} clearable />
398
+ <Select
399
+ items={items}
400
+ value={statusWithoutChevron}
401
+ onValueChange={setStatusWithoutChevron}
402
+ clearable
403
+ showChevron={false}
404
+ placeholder='Clearable without chevron'
405
+ />
406
+ <Select
407
+ items={items}
408
+ value={plainStatus}
409
+ onValueChange={setPlainStatus}
410
+ clearable={false}
411
+ showChevron={false}
412
+ placeholder='Plain select'
413
+ />
414
+ <Combobox
415
+ items={items}
416
+ value={comboValue}
417
+ onValueChange={setComboValue}
418
+ placeholder='Find status'
419
+ />
420
+ <MultiSelect
421
+ items={owners}
422
+ value={ownerValues}
423
+ onValueChange={setOwnerValues}
424
+ placeholder='Responsible users'
425
+ clearable
426
+ renderValue={(items) =>
427
+ items.length === 1 ? items[0]?.label : String(items.length) + ' responsible'
428
+ }
429
+ />
430
+ <EntityPicker
431
+ value={entity}
432
+ onValueChange={setEntity}
433
+ loadPage={(page, search) => loadEntityPage(locale, page, search)}
434
+ getEntityId={(item) => item.id}
435
+ renderValue={(item) => item.article}
436
+ renderEntity={(item) => (
437
+ <>
438
+ <span className='oui-entity-option-main'>
439
+ <span className='oui-entity-option-code'>{item.article}</span>
440
+ <span className='oui-entity-option-meta'>{item.name}</span>
441
+ </span>
442
+ <span className='oui-entity-option-badge'>{item.status}</span>
443
+ </>
444
+ )}
445
+ placeholder='Entity picker'
446
+ clearable
447
+ createAction={{
448
+ label: 'Create entity from search',
449
+ onCreate: createEntity,
450
+ }}
451
+ optionAction={{
452
+ icon: <LuPlus size={14} />,
453
+ label: (item) => 'Add ' + item.article,
454
+ onClick: addEntity,
455
+ }}
456
+ />
457
+ <SegmentedControl
458
+ items={[
459
+ {value: 'active', label: 'Active'},
460
+ {value: 'drafts', label: 'Drafts'},
461
+ {value: 'archive', label: 'Archive'},
462
+ ]}
463
+ value={segment}
464
+ onValueChange={setSegment}
465
+ />`,
466
+ selectionGroup: `import {Checkbox, RadioGroup, Switch} from '@orcestr/ui';
467
+
468
+ <Checkbox defaultChecked>Confirmed</Checkbox>
469
+ <Checkbox>Needs review</Checkbox>
470
+ <Checkbox disabled>Locked option</Checkbox>
471
+ <Switch defaultChecked>Auto updates</Switch>
472
+ <Switch>Manual mode</Switch>
473
+ <Switch disabled>Disabled switch</Switch>
474
+ <RadioGroup
475
+ name='mode'
476
+ value={mode}
477
+ onValueChange={setMode}
478
+ items={[
479
+ {value: 'manual', label: 'Manual'},
480
+ {value: 'auto', label: 'Automatic'},
481
+ ]}
482
+ />`,
483
+ tabs: `import {Tabs} from '@orcestr/ui';
484
+ import {LuHistory, LuListChecks} from 'react-icons/lu';
485
+
486
+ <Tabs
487
+ value={tab}
488
+ onValueChange={setTab}
489
+ items={[
490
+ {value: 'overview', label: 'Overview', icon: <LuListChecks size={16} />, badge: '12', content},
491
+ {value: 'history', label: 'History', icon: <LuHistory size={16} />, content},
492
+ ]}
493
+ />`,
494
+ overlays: `import {Button, CommandPalette, Flex, Field, Modal, Popover, Stack, Text, TextField, Tooltip} from '@orcestr/ui';
495
+ import {LuChevronDown} from 'react-icons/lu';
496
+
497
+ <Popover
498
+ trigger={
499
+ <Button v='surface' rightIcon={<LuChevronDown size={16} />}>
500
+ Open popover
501
+ </Button>
502
+ }
503
+ >
504
+ <Stack g={2} p={1}>
505
+ <Text fw={700}>Popover content</Text>
506
+ <Text color='var(--oui-muted)' fs='13px'>Shared positioning and presence.</Text>
507
+ </Stack>
508
+ </Popover>
509
+
510
+ <Tooltip content='Tooltip uses the same floating layer'>
511
+ <Button v='outline'>Hover me</Button>
512
+ </Tooltip>
513
+
514
+ <Button onClick={() => setModalOpen(true)}>Default modal</Button>
515
+ <Button v='surface' onClick={() => setBlurModalOpen(true)}>Blur modal</Button>
516
+ <Button v='outline' onClick={() => setFastModalOpen(true)}>Fast modal</Button>
517
+ <Button v='outline' onClick={() => setRiseModalOpen(true)}>Rise modal</Button>
518
+ <Button v='outline' onClick={() => setSlowModalOpen(true)}>Very slow modal</Button>
519
+ <Button v='soft' tone='danger' onClick={() => setDangerModalOpen(true)}>
520
+ Danger modal
521
+ </Button>
522
+
523
+ <Modal
524
+ open={modalOpen}
525
+ onOpenChange={setModalOpen}
526
+ title='Custom modal'
527
+ description='First modal layer with the default theme blur backdrop.'
528
+ footer={
529
+ <Flex g={2} j='e' w='100%'>
530
+ <Button v='surface' onClick={() => setModalOpen(false)}>Close</Button>
531
+ <Button onClick={() => setNestedOpen(true)}>Open nested</Button>
532
+ </Flex>
533
+ }
534
+ >
535
+ <Stack g={3}>
536
+ <Text color='var(--oui-muted)' lh={1.5}>
537
+ Nested modals stack above the previous layer.
538
+ </Text>
539
+ <Field label='Modal field'>
540
+ <TextField placeholder='Focus stays inside modal' />
541
+ </Field>
542
+ </Stack>
543
+ </Modal>
544
+
545
+ <Modal
546
+ open={nestedOpen}
547
+ onOpenChange={setNestedOpen}
548
+ title='Nested modal'
549
+ description='Second layer with the same default modal animation.'
550
+ maxWidth={440}
551
+ >
552
+ <Stack g={3}>
553
+ <Text color='var(--oui-muted)' lh={1.5}>This checks layer indexes and focus trap.</Text>
554
+ <Button onClick={() => toast.push('Nested modal action completed', 'success')}>
555
+ Show toast
556
+ </Button>
557
+ </Stack>
558
+ </Modal>
559
+
560
+ <Modal
561
+ open={blurModalOpen}
562
+ onOpenChange={setBlurModalOpen}
563
+ title='Blur modal'
564
+ description='Default modal surface with pure backdrop blur and no overlay tint.'
565
+ maxWidth={560}
566
+ overlayColor='transparent'
567
+ overlayOpacity={0}
568
+ overlayBlur={10}
569
+ borderColor='color-mix(in srgb, var(--oui-brand) 34%, var(--oui-border))'
570
+ radius={10}
571
+ shadow='0 24px 90px rgb(0 0 0 / 44%)'
572
+ footer={
573
+ <Flex g={2} j='e' w='100%'>
574
+ <Button v='surface' onClick={() => setBlurModalOpen(false)}>Close</Button>
575
+ <Button onClick={() => setBlurNestedOpen(true)}>Open nested blur</Button>
576
+ </Flex>
577
+ }
578
+ >
579
+ <Stack g={3}>
580
+ <Text color='var(--oui-muted)' lh={1.5}>
581
+ This variant checks a strong backdrop blur with transparent overlay tint.
582
+ </Text>
583
+ <Field label='Reference'>
584
+ <TextField placeholder='ORD-2048' />
585
+ </Field>
586
+ </Stack>
587
+ </Modal>
588
+
589
+ <Modal
590
+ open={blurNestedOpen}
591
+ onOpenChange={setBlurNestedOpen}
592
+ title='Nested blur modal'
593
+ description='Second blur layer without overlay tint.'
594
+ maxWidth={500}
595
+ overlayColor='transparent'
596
+ overlayOpacity={0}
597
+ overlayBlur={8}
598
+ borderColor='color-mix(in srgb, var(--oui-brand) 38%, var(--oui-border))'
599
+ radius={10}
600
+ footer={
601
+ <Flex g={2} j='e' w='100%'>
602
+ <Button v='surface' onClick={() => setBlurNestedOpen(false)}>Close</Button>
603
+ <Button onClick={() => setBlurFinalOpen(true)}>Open final blur</Button>
604
+ </Flex>
605
+ }
606
+ >
607
+ <Stack g={3}>
608
+ <Text color='var(--oui-muted)' lh={1.5}>This layer stacks above the first blur modal.</Text>
609
+ <TextField placeholder='Nested value' />
610
+ </Stack>
611
+ </Modal>
612
+
613
+ <Modal
614
+ open={blurFinalOpen}
615
+ onOpenChange={setBlurFinalOpen}
616
+ title='Final blur modal'
617
+ description='Top blur layer. Toast must appear above this modal.'
618
+ maxWidth={440}
619
+ overlayColor='transparent'
620
+ overlayOpacity={0}
621
+ overlayBlur={6}
622
+ borderColor='color-mix(in srgb, var(--oui-brand) 42%, var(--oui-border))'
623
+ radius={10}
624
+ >
625
+ <Stack g={3}>
626
+ <Text color='var(--oui-muted)' lh={1.5}>Verify blur stacking and toast z-index.</Text>
627
+ <Button onClick={() => toast.push('Toast above nested blur modals', 'success')}>
628
+ Show toast
629
+ </Button>
630
+ </Stack>
631
+ </Modal>
632
+
633
+ <Modal
634
+ open={fastModalOpen}
635
+ onOpenChange={setFastModalOpen}
636
+ title='Fast modal'
637
+ description='Short animationDuration passed directly to the modal.'
638
+ maxWidth={460}
639
+ overlayColor='#0b1020'
640
+ overlayOpacity={0.28}
641
+ overlayBlur={4}
642
+ animationDuration='160ms'
643
+ >
644
+ <Stack g={3}>
645
+ <Text color='var(--oui-muted)' lh={1.5}>Fast open and close animation.</Text>
646
+ <Button onClick={() => setFastModalOpen(false)}>Close</Button>
647
+ </Stack>
648
+ </Modal>
649
+
650
+ <Modal
651
+ open={slowModalOpen}
652
+ onOpenChange={setSlowModalOpen}
653
+ title='Very slow modal'
654
+ description='Long animationDuration for checking smooth blur ramp.'
655
+ maxWidth={520}
656
+ overlayColor='transparent'
657
+ overlayOpacity={0}
658
+ overlayBlur={14}
659
+ animationDuration='1200ms'
660
+ borderColor='color-mix(in srgb, var(--oui-brand) 42%, var(--oui-border))'
661
+ radius={10}
662
+ >
663
+ <Stack g={3}>
664
+ <Text color='var(--oui-muted)' lh={1.5}>Slow blur ramp for animation checks.</Text>
665
+ <Button onClick={() => setSlowModalOpen(false)}>Close</Button>
666
+ </Stack>
667
+ </Modal>
668
+
669
+ <Modal
670
+ open={riseModalOpen}
671
+ onOpenChange={setRiseModalOpen}
672
+ title='Rise modal'
673
+ description='Legacy rise animation kept as an explicit modal animation variant.'
674
+ maxWidth={480}
675
+ overlayColor='#0b1020'
676
+ overlayOpacity={0.28}
677
+ overlayBlur={4}
678
+ animation='rise'
679
+ >
680
+ <Stack g={3}>
681
+ <Text color='var(--oui-muted)' lh={1.5}>Previous rise animation variant.</Text>
682
+ <Button onClick={() => setRiseModalOpen(false)}>Close</Button>
683
+ </Stack>
684
+ </Modal>
685
+
686
+ <Modal
687
+ open={dangerModalOpen}
688
+ onOpenChange={setDangerModalOpen}
689
+ title='Danger modal'
690
+ description='Strong colored overlay, danger border and compact radius.'
691
+ maxWidth={500}
692
+ overlayColor='#3b0712'
693
+ overlayOpacity={0.48}
694
+ overlayBlur={3}
695
+ borderColor='color-mix(in srgb, var(--oui-danger) 46%, var(--oui-border))'
696
+ radius={8}
697
+ footer={
698
+ <Flex g={2} j='e' w='100%'>
699
+ <Button v='surface' onClick={() => setDangerModalOpen(false)}>Cancel</Button>
700
+ <Button tone='danger' onClick={confirmDangerAction}>Confirm</Button>
701
+ </Flex>
702
+ }
703
+ >
704
+ <Stack g={3}>
705
+ <Text color='var(--oui-muted)' lh={1.5}>Colored backdrop without a hard flash.</Text>
706
+ <TextField value='Archive selected record' readOnly />
707
+ </Stack>
708
+ </Modal>
709
+
710
+ <CommandPalette
711
+ open={paletteOpen}
712
+ onOpenChange={setPaletteOpen}
713
+ items={[
714
+ {
715
+ key: 'create-record',
716
+ label: 'Create record',
717
+ description: 'Start a workflow.',
718
+ shortcut: 'C',
719
+ group: 'Create',
720
+ keywords: ['new', 'workflow'],
721
+ onSelect: () => toast.info('Create record action'),
722
+ },
723
+ ]}
724
+ recentItems={recentCommands}
725
+ globalOpenEvents={['orcestr:open-command-palette']}
726
+ onSelect={(value) => toast.info('Command selected: ' + value)}
727
+ />`,
728
+ toast: `import {Button, type ToastPosition, type ToastTone, useToast} from '@orcestr/ui';
729
+
730
+ const toast = useToast();
731
+
732
+ <Button
733
+ onClick={() =>
734
+ toast.success({
735
+ title: 'Saved successfully',
736
+ message: 'The settings are synced with the current theme.',
737
+ position: 'bottom-right',
738
+ })
739
+ }
740
+ >
741
+ Success
742
+ </Button>
743
+ <Button
744
+ onClick={() =>
745
+ toast.warning({
746
+ title: 'Needs attention',
747
+ message: 'Only 4 items need attention in this view.',
748
+ dedupeKey: 'needs-attention',
749
+ position: 'top-right',
750
+ })
751
+ }
752
+ >
753
+ Warning dedupe
754
+ </Button>
755
+ <Button
756
+ onClick={() =>
757
+ toast.error({
758
+ title: 'Export failed',
759
+ message: 'The report can be retried without closing this page.',
760
+ position: 'bottom-right',
761
+ action: {
762
+ label: 'Retry',
763
+ onClick: () => toast.info('Retry queued'),
764
+ },
765
+ })
766
+ }
767
+ >
768
+ Error action
769
+ </Button>
770
+ <Button
771
+ onClick={() =>
772
+ toast.info({
773
+ title: 'Pinned note',
774
+ message: 'duration: null keeps this toast visible.',
775
+ position: 'top-center',
776
+ duration: null,
777
+ closeButton: true,
778
+ })
779
+ }
780
+ >
781
+ Pinned
782
+ </Button>
783
+ <Button
784
+ onClick={() =>
785
+ toast.info({
786
+ title: 'Glass background',
787
+ message: 'Custom blur and translucent background.',
788
+ position: 'bottom-right',
789
+ background: 'rgb(18 24 34 / 72%)',
790
+ blur: 18,
791
+ borderColor: 'rgb(255 255 255 / 18%)',
792
+ duration: 5200,
793
+ })
794
+ }
795
+ >
796
+ Glass
797
+ </Button>
798
+ <Button
799
+ onClick={() =>
800
+ toast.info({
801
+ title: 'Static background',
802
+ message: 'Blur can be disabled per toast.',
803
+ position: 'bottom-left',
804
+ background: 'var(--oui-floating-bg)',
805
+ blur: false,
806
+ duration: 5200,
807
+ })
808
+ }
809
+ >
810
+ Static
811
+ </Button>
812
+
813
+ const toastPositions: Array<{position: ToastPosition; label: string}> = [
814
+ {position: 'top-left', label: 'Top left'},
815
+ {position: 'top-center', label: 'Top center'},
816
+ {position: 'top-right', label: 'Top right'},
817
+ {position: 'bottom-left', label: 'Bottom left'},
818
+ {position: 'bottom-center', label: 'Bottom center'},
819
+ {position: 'bottom-right', label: 'Bottom right'},
820
+ ];
821
+
822
+ const toastPositionVariants: Array<{
823
+ position: ToastPosition;
824
+ label: string;
825
+ tone: ToastTone;
826
+ message: string;
827
+ background?: string;
828
+ blur?: number | string | false;
829
+ }> = [
830
+ {
831
+ position: 'top-left',
832
+ label: 'Status synced',
833
+ tone: 'success',
834
+ message: 'Glass toast from the left edge.',
835
+ blur: 14,
836
+ },
837
+ {
838
+ position: 'top-center',
839
+ label: 'Command ready',
840
+ tone: 'info',
841
+ message: 'Centered toast drops from the top.',
842
+ background: 'rgb(18 28 42 / 88%)',
843
+ blur: 10,
844
+ },
845
+ {
846
+ position: 'top-right',
847
+ label: 'Needs attention',
848
+ tone: 'warning',
849
+ message: 'Right edge bubble animation.',
850
+ blur: 12,
851
+ },
852
+ {
853
+ position: 'bottom-left',
854
+ label: 'Import queued',
855
+ tone: 'info',
856
+ message: 'Static background, no blur.',
857
+ blur: false,
858
+ },
859
+ {
860
+ position: 'bottom-center',
861
+ label: 'Batch completed',
862
+ tone: 'success',
863
+ message: 'Bottom center rises into place.',
864
+ blur: 16,
865
+ },
866
+ {
867
+ position: 'bottom-right',
868
+ label: 'Export failed',
869
+ tone: 'danger',
870
+ message: 'Actionable toast from the right edge.',
871
+ blur: 12,
872
+ },
873
+ ];
874
+
875
+ {toastPositions.map((item) => (
876
+ <Button
877
+ key={item.position}
878
+ size={1}
879
+ v='surface'
880
+ onClick={() =>
881
+ toast.info({
882
+ title: item.label,
883
+ message: 'Positioned toast with directional bubble animation.',
884
+ position: item.position,
885
+ duration: 3600,
886
+ })
887
+ }
888
+ >
889
+ {item.label}
890
+ </Button>
891
+ ))}
892
+
893
+ <Button
894
+ size={1}
895
+ tone='success'
896
+ v='soft'
897
+ onClick={() => {
898
+ toastPositionVariants.forEach((item, index) => {
899
+ window.setTimeout(() => {
900
+ toast.push({
901
+ title: item.label,
902
+ message: item.message,
903
+ position: item.position,
904
+ tone: item.tone,
905
+ background: item.background,
906
+ blur: item.blur,
907
+ duration: 4200 + index * 220,
908
+ });
909
+ }, index * 120);
910
+ });
911
+ }}
912
+ >
913
+ Show all positions
914
+ </Button>`,
915
+ overlaySettings: `import {Button, Modal} from '@orcestr/ui';
916
+
917
+ <Modal
918
+ open={open}
919
+ onOpenChange={setOpen}
920
+ title='Blur modal'
921
+ overlayColor='transparent'
922
+ overlayOpacity={0}
923
+ overlayBlur={10}
924
+ animation='zoom-blur'
925
+ animationDuration='380ms'
926
+ radius={10}
927
+ >
928
+ Modal content
929
+ </Modal>
930
+
931
+ <Button onClick={() => setOpen(true)}>Open modal</Button>`,
932
+ data: `import {Button, DataTable, TextField, type DataTableSort} from '@orcestr/ui';
933
+
934
+ const [sort, setSort] = useState<DataTableSort | null>({key: 'name', direction: 'asc'});
935
+ const [selectedRowKeys, setSelectedRowKeys] = useState<string[]>([]);
936
+ const [visibleColumnKeys, setVisibleColumnKeys] = useState(columns.map((column) => column.key));
937
+ const [columnOrder, setColumnOrder] = useState(columns.map((column) => column.key));
938
+ const [columnWidths, setColumnWidths] = useState<Record<string, number>>({});
939
+ const resetTable = () => {
940
+ setVisibleColumnKeys(columns.map((column) => column.key));
941
+ setColumnOrder(columns.map((column) => column.key));
942
+ setColumnWidths({});
943
+ };
944
+
945
+ <DataTable
946
+ toolbar={
947
+ <>
948
+ <TextField value={query} onChange={(event) => setQuery(event.target.value)} clearable />
949
+ <Button onClick={resetTable}>Reset</Button>
950
+ </>
951
+ }
952
+ rowKey={(row) => row.name}
953
+ rows={rows}
954
+ columns={columns}
955
+ sort={sort}
956
+ onSortChange={(nextSort) => setSort(Array.isArray(nextSort) ? nextSort[0] ?? null : nextSort)}
957
+ selectable
958
+ selectedRowKeys={selectedRowKeys}
959
+ onSelectedRowKeysChange={setSelectedRowKeys}
960
+ columnSettings={{
961
+ columns,
962
+ visibleColumnKeys,
963
+ onVisibleColumnKeysChange: setVisibleColumnKeys,
964
+ columnOrder,
965
+ onColumnOrderChange: setColumnOrder,
966
+ columnWidths,
967
+ onColumnWidthsChange: setColumnWidths,
968
+ }}
969
+ />
970
+
971
+ <DataTable
972
+ rowKey={(row) => row.name}
973
+ rows={rows.slice(0, 4)}
974
+ columns={columns}
975
+ />`,
976
+ };