@commercetools/nimbus-mcp 3.2.0 → 3.3.0

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 (189) hide show
  1. package/README.md +9 -1
  2. package/data/docs/route-manifest.json +806 -41
  3. package/data/docs/routes/components-buttons-button.json +25 -2
  4. package/data/docs/routes/components-chat-chat-message-list.json +448 -0
  5. package/data/docs/routes/components-chat-chat-message.json +580 -0
  6. package/data/docs/routes/components-content-markdown.json +548 -0
  7. package/data/docs/routes/components-feedback-activity-indicator.json +396 -0
  8. package/data/docs/routes/components-feedback-tooltip.json +23 -1
  9. package/data/docs/routes/components-inputs-drop-zone.json +562 -0
  10. package/data/docs/routes/components-inputs-file-trigger.json +421 -0
  11. package/data/docs/routes/components-layout-splitter.json +3 -3
  12. package/data/docs/routes/components-media-avatar.json +16 -5
  13. package/data/docs/routes/components-navigation-menu.json +1 -1
  14. package/data/docs/routes/components-navigation-tabnav.json +80 -14
  15. package/data/docs/routes/components-navigation-tabs.json +44 -11
  16. package/data/docs/routes/components-navigation-tree.json +445 -0
  17. package/data/docs/routes/home-getting-started-mcp-server-overview.json +2 -2
  18. package/data/docs/routes/home-getting-started-mcp-server-setup.json +2 -2
  19. package/data/docs/routes/patterns-buttons-floating-action-button.json +392 -0
  20. package/data/docs/routes/patterns-buttons.json +58 -0
  21. package/data/docs/search-index.json +1 -1
  22. package/data/docs/types/AccordionContent.json +24 -24
  23. package/data/docs/types/AccordionHeader.json +88 -88
  24. package/data/docs/types/AccordionItem.json +20 -20
  25. package/data/docs/types/AccordionRoot.json +14 -14
  26. package/data/docs/types/ActivityIndicator.json +202 -0
  27. package/data/docs/types/AlertDescription.json +8 -8
  28. package/data/docs/types/AlertDismissButton.json +98 -81
  29. package/data/docs/types/AlertTitle.json +8 -8
  30. package/data/docs/types/Avatar.json +19 -2
  31. package/data/docs/types/Badge.json +2 -2
  32. package/data/docs/types/Body.json +6 -6
  33. package/data/docs/types/Box.json +6 -6
  34. package/data/docs/types/Button.json +106 -89
  35. package/data/docs/types/Calendar.json +56 -56
  36. package/data/docs/types/Caption.json +6 -6
  37. package/data/docs/types/CardRoot.json +2 -2
  38. package/data/docs/types/Cell.json +6 -6
  39. package/data/docs/types/ChatMessage.json +12 -0
  40. package/data/docs/types/ChatMessageActions.json +42 -0
  41. package/data/docs/types/ChatMessageAvatar.json +140 -0
  42. package/data/docs/types/ChatMessageBody.json +42 -0
  43. package/data/docs/types/ChatMessageList.json +12 -0
  44. package/data/docs/types/ChatMessageListItem.json +42 -0
  45. package/data/docs/types/ChatMessageListRoot.json +78 -0
  46. package/data/docs/types/ChatMessageMeta.json +42 -0
  47. package/data/docs/types/ChatMessageRoot.json +119 -0
  48. package/data/docs/types/ChatMessageTyping.json +42 -0
  49. package/data/docs/types/Checkbox.json +86 -86
  50. package/data/docs/types/Code.json +11 -11
  51. package/data/docs/types/Column.json +6 -6
  52. package/data/docs/types/ColumnGroup.json +6 -6
  53. package/data/docs/types/ColumnHeader.json +6 -6
  54. package/data/docs/types/ComboBoxListBox.json +70 -70
  55. package/data/docs/types/ComboBoxOption.json +64 -64
  56. package/data/docs/types/ComboBoxPopover.json +91 -70
  57. package/data/docs/types/ComboBoxRoot.json +8 -8
  58. package/data/docs/types/ComboBoxSection.json +24 -24
  59. package/data/docs/types/ComboBoxTrigger.json +6 -6
  60. package/data/docs/types/DataTable.json +2 -2
  61. package/data/docs/types/DataTableBody.json +20 -20
  62. package/data/docs/types/DataTableHeader.json +25 -25
  63. package/data/docs/types/DataTableRoot.json +2 -2
  64. package/data/docs/types/DataTableTable.json +6 -6
  65. package/data/docs/types/DateInput.json +73 -73
  66. package/data/docs/types/DatePicker.json +58 -58
  67. package/data/docs/types/DateRangePicker.json +86 -86
  68. package/data/docs/types/DateRangePickerField.json +86 -86
  69. package/data/docs/types/DefaultPageRoot.json +2 -2
  70. package/data/docs/types/DialogCloseTrigger.json +96 -79
  71. package/data/docs/types/DraggableListField.json +88 -60
  72. package/data/docs/types/DraggableListItem.json +52 -52
  73. package/data/docs/types/DraggableListRoot.json +88 -60
  74. package/data/docs/types/DrawerCloseTrigger.json +96 -79
  75. package/data/docs/types/DropZone.json +161 -0
  76. package/data/docs/types/FieldErrors.json +2 -2
  77. package/data/docs/types/FileTrigger.json +130 -0
  78. package/data/docs/types/Flex.json +22 -22
  79. package/data/docs/types/FloatingActionButton.json +1036 -0
  80. package/data/docs/types/Footer.json +6 -6
  81. package/data/docs/types/FormActionBar.json +1 -1
  82. package/data/docs/types/FormFieldRoot.json +2 -2
  83. package/data/docs/types/Grid.json +24 -24
  84. package/data/docs/types/Group.json +12 -12
  85. package/data/docs/types/Header.json +6 -6
  86. package/data/docs/types/Heading.json +8 -8
  87. package/data/docs/types/Icon.json +4 -4
  88. package/data/docs/types/IconButton.json +106 -89
  89. package/data/docs/types/IconToggleButton.json +71 -71
  90. package/data/docs/types/Image.json +43 -43
  91. package/data/docs/types/Indicator.json +6 -6
  92. package/data/docs/types/InlineSvg.json +2 -2
  93. package/data/docs/types/Item.json +6 -6
  94. package/data/docs/types/Kbd.json +8 -8
  95. package/data/docs/types/Link.json +14 -14
  96. package/data/docs/types/ListIndicator.json +6 -6
  97. package/data/docs/types/ListItem.json +6 -6
  98. package/data/docs/types/ListRoot.json +11 -11
  99. package/data/docs/types/LoadingSpinner.json +2 -2
  100. package/data/docs/types/MakeElementFocusable.json +18 -18
  101. package/data/docs/types/Markdown.json +183 -0
  102. package/data/docs/types/MenuItem.json +62 -62
  103. package/data/docs/types/MenuRoot.json +55 -55
  104. package/data/docs/types/MenuSection.json +30 -30
  105. package/data/docs/types/MenuSubmenuTrigger.json +4 -4
  106. package/data/docs/types/MenuTrigger.json +88 -88
  107. package/data/docs/types/MultilineTextInput.json +104 -104
  108. package/data/docs/types/MultilineTextInputField.json +102 -102
  109. package/data/docs/types/NumberInput.json +86 -86
  110. package/data/docs/types/NumberInputField.json +82 -82
  111. package/data/docs/types/PageContentColumn.json +6 -6
  112. package/data/docs/types/PageContentRoot.json +6 -6
  113. package/data/docs/types/PasswordInput.json +100 -100
  114. package/data/docs/types/PasswordInputField.json +100 -100
  115. package/data/docs/types/ProgressBar.json +13 -13
  116. package/data/docs/types/RadioInputOption.json +56 -56
  117. package/data/docs/types/RadioInputRoot.json +48 -48
  118. package/data/docs/types/RangeCalendar.json +58 -58
  119. package/data/docs/types/Region.json +6 -6
  120. package/data/docs/types/RegionTarget.json +6 -6
  121. package/data/docs/types/RichTextInput.json +2 -2
  122. package/data/docs/types/Root.json +11 -11
  123. package/data/docs/types/Row.json +6 -6
  124. package/data/docs/types/ScrollArea.json +2 -2
  125. package/data/docs/types/SearchInput.json +106 -106
  126. package/data/docs/types/SearchInputField.json +102 -102
  127. package/data/docs/types/SelectOption.json +54 -54
  128. package/data/docs/types/SelectOptionGroup.json +18 -18
  129. package/data/docs/types/SelectOptions.json +64 -64
  130. package/data/docs/types/SelectRoot.json +92 -92
  131. package/data/docs/types/Separator.json +4 -4
  132. package/data/docs/types/SimpleGrid.json +28 -28
  133. package/data/docs/types/SlidingIndicatorGeometry.json +9 -0
  134. package/data/docs/types/SlidingIndicatorRects.json +9 -0
  135. package/data/docs/types/SplitButton.json +16 -20
  136. package/data/docs/types/Stack.json +2 -2
  137. package/data/docs/types/StepsRoot.json +2 -2
  138. package/data/docs/types/Switch.json +34 -34
  139. package/data/docs/types/TabNavItem.json +5 -5
  140. package/data/docs/types/TabNavRoot.json +5 -5
  141. package/data/docs/types/TableBody.json +6 -6
  142. package/data/docs/types/TableCaption.json +6 -6
  143. package/data/docs/types/TableCell.json +6 -6
  144. package/data/docs/types/TableColumn.json +6 -6
  145. package/data/docs/types/TableColumnGroup.json +6 -6
  146. package/data/docs/types/TableColumnHeader.json +6 -6
  147. package/data/docs/types/TableFooter.json +6 -6
  148. package/data/docs/types/TableHeader.json +6 -6
  149. package/data/docs/types/TableRoot.json +19 -19
  150. package/data/docs/types/TableRow.json +6 -6
  151. package/data/docs/types/TableScrollArea.json +6 -6
  152. package/data/docs/types/TabsList.json +2 -2
  153. package/data/docs/types/TabsPanel.json +2 -2
  154. package/data/docs/types/TabsPanels.json +2 -2
  155. package/data/docs/types/TabsRoot.json +3 -3
  156. package/data/docs/types/TabsTab.json +2 -2
  157. package/data/docs/types/TagGroupRoot.json +24 -24
  158. package/data/docs/types/TagGroupTag.json +56 -56
  159. package/data/docs/types/TagGroupTagList.json +14 -14
  160. package/data/docs/types/Text.json +8 -8
  161. package/data/docs/types/TextInput.json +102 -102
  162. package/data/docs/types/TextInputField.json +100 -100
  163. package/data/docs/types/TimeInput.json +68 -68
  164. package/data/docs/types/ToggleButton.json +73 -73
  165. package/data/docs/types/ToggleButtonGroupButton.json +30 -30
  166. package/data/docs/types/ToggleButtonGroupRoot.json +20 -20
  167. package/data/docs/types/Toolbar.json +9 -9
  168. package/data/docs/types/TooltipContent.json +28 -28
  169. package/data/docs/types/TooltipRoot.json +16 -16
  170. package/data/docs/types/Tree.json +12 -0
  171. package/data/docs/types/TreeIndicator.json +828 -0
  172. package/data/docs/types/TreeItem.json +559 -0
  173. package/data/docs/types/TreeItemContent.json +27 -0
  174. package/data/docs/types/TreeRoot.json +636 -0
  175. package/data/docs/types/TreeSubTree.json +40 -0
  176. package/data/docs/types/VisuallyHidden.json +6 -6
  177. package/data/docs/types/createItemsFromCsvDrop.json +4 -4
  178. package/data/docs/types/createItemsFromDirectoryDrop.json +4 -4
  179. package/data/docs/types/createItemsFromFileDrop.json +4 -4
  180. package/data/docs/types/createItemsFromImageDrop.json +4 -4
  181. package/data/docs/types/createItemsFromJsonDrop.json +4 -4
  182. package/data/docs/types/manifest.json +25 -0
  183. package/data/docs/types/useRegion.json +2 -2
  184. package/data/docs/types/useSlidingIndicator.json +145 -0
  185. package/data/docs/types/useTree.json +267 -0
  186. package/data/tokens.json +21 -0
  187. package/data/uikit-tokens.json +894 -0
  188. package/dist/index.js +3298 -109
  189. package/package.json +8 -6
@@ -0,0 +1,392 @@
1
+ {
2
+ "meta": {
3
+ "id": "Patterns-FloatingActionButton",
4
+ "title": "Floating action button",
5
+ "exportName": "FloatingActionButton",
6
+ "description": "A circular, icon-only floating button for prominent single actions, such as opening a chat panel or triggering a primary workflow.",
7
+ "lifecycleState": "Stable",
8
+ "order": 999,
9
+ "repoPath": "packages/nimbus/src/patterns/buttons/floating-action-button/floating-action-button.mdx",
10
+ "menu": [
11
+ "Patterns",
12
+ "Buttons",
13
+ "Floating action button"
14
+ ],
15
+ "route": "patterns/buttons/floating-action-button",
16
+ "tags": [
17
+ "component",
18
+ "pattern",
19
+ "buttons",
20
+ "actions",
21
+ "floating"
22
+ ],
23
+ "toc": [
24
+ {
25
+ "value": "Overview",
26
+ "href": "#overview",
27
+ "depth": 2,
28
+ "numbering": [
29
+ 1,
30
+ 1
31
+ ],
32
+ "parent": "root"
33
+ },
34
+ {
35
+ "value": "Resources",
36
+ "href": "#resources",
37
+ "depth": 3,
38
+ "numbering": [
39
+ 1,
40
+ 1,
41
+ 1
42
+ ],
43
+ "parent": "root"
44
+ },
45
+ {
46
+ "value": "Usage",
47
+ "href": "#usage",
48
+ "depth": 2,
49
+ "numbering": [
50
+ 1,
51
+ 2
52
+ ],
53
+ "parent": "root"
54
+ },
55
+ {
56
+ "value": "States",
57
+ "href": "#states",
58
+ "depth": 2,
59
+ "numbering": [
60
+ 1,
61
+ 3
62
+ ],
63
+ "parent": "root"
64
+ },
65
+ {
66
+ "value": "Default",
67
+ "href": "#default",
68
+ "depth": 3,
69
+ "numbering": [
70
+ 1,
71
+ 3,
72
+ 1
73
+ ],
74
+ "parent": "root"
75
+ },
76
+ {
77
+ "value": "Disabled",
78
+ "href": "#disabled",
79
+ "depth": 3,
80
+ "numbering": [
81
+ 1,
82
+ 3,
83
+ 2
84
+ ],
85
+ "parent": "root"
86
+ },
87
+ {
88
+ "value": "Color palette",
89
+ "href": "#color-palette",
90
+ "depth": 2,
91
+ "numbering": [
92
+ 1,
93
+ 4
94
+ ],
95
+ "parent": "root"
96
+ }
97
+ ],
98
+ "figmaLink": "https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=11090-7295",
99
+ "layout": "app-frame",
100
+ "tabs": [
101
+ {
102
+ "key": "overview",
103
+ "title": "Overview",
104
+ "order": 0
105
+ },
106
+ {
107
+ "key": "dev",
108
+ "title": "Implementation",
109
+ "order": 3
110
+ }
111
+ ]
112
+ },
113
+ "mdx": "\n## Overview\n\nThe floating action button (FAB) is a 48px circular button used for a single,\nprominent action on the screen — such as opening an agent chat panel. It uses\nthe primary color palette and includes a drop shadow to float above page\ncontent.\n\nPositioning is the consumer's responsibility via style props. The Figma spec\nsuggests 32px from both the right and bottom edges as a starting point.\n\n### Resources\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=11090-7295)\n\n## Usage\n\n```jsx live\nconst App = () => {\n return (\n <FloatingActionButton aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n );\n};\n```\n\n## States\n\n### Default\n\n```jsx live\nconst App = () => (\n <FloatingActionButton aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n);\n```\n\n### Disabled\n\n```jsx live\nconst App = () => (\n <FloatingActionButton aria-label=\"Open assistant\" isDisabled>\n <Icons.Chat />\n </FloatingActionButton>\n);\n```\n\n## Color palette\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\">\n <FloatingActionButton aria-label=\"Primary\" colorPalette=\"primary\">\n <Icons.Chat />\n </FloatingActionButton>\n <FloatingActionButton aria-label=\"Critical\" colorPalette=\"critical\">\n <Icons.Chat />\n </FloatingActionButton>\n </Stack>\n);\n```\n",
114
+ "views": {
115
+ "overview": {
116
+ "mdx": "\n## Overview\n\nThe floating action button (FAB) is a 48px circular button used for a single,\nprominent action on the screen — such as opening an agent chat panel. It uses\nthe primary color palette and includes a drop shadow to float above page\ncontent.\n\nPositioning is the consumer's responsibility via style props. The Figma spec\nsuggests 32px from both the right and bottom edges as a starting point.\n\n### Resources\n\n[Figma library](https://www.figma.com/design/AvtPX6g7OGGCRvNlatGOIY/NIMBUS-design-system?node-id=11090-7295)\n\n## Usage\n\n```jsx live\nconst App = () => {\n return (\n <FloatingActionButton aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n );\n};\n```\n\n## States\n\n### Default\n\n```jsx live\nconst App = () => (\n <FloatingActionButton aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n);\n```\n\n### Disabled\n\n```jsx live\nconst App = () => (\n <FloatingActionButton aria-label=\"Open assistant\" isDisabled>\n <Icons.Chat />\n </FloatingActionButton>\n);\n```\n\n## Color palette\n\n```jsx live\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\">\n <FloatingActionButton aria-label=\"Primary\" colorPalette=\"primary\">\n <Icons.Chat />\n </FloatingActionButton>\n <FloatingActionButton aria-label=\"Critical\" colorPalette=\"critical\">\n <Icons.Chat />\n </FloatingActionButton>\n </Stack>\n);\n```\n",
117
+ "toc": [
118
+ {
119
+ "value": "Overview",
120
+ "href": "#overview",
121
+ "depth": 2,
122
+ "numbering": [
123
+ 1,
124
+ 1
125
+ ],
126
+ "parent": "root"
127
+ },
128
+ {
129
+ "value": "Resources",
130
+ "href": "#resources",
131
+ "depth": 3,
132
+ "numbering": [
133
+ 1,
134
+ 1,
135
+ 1
136
+ ],
137
+ "parent": "root"
138
+ },
139
+ {
140
+ "value": "Usage",
141
+ "href": "#usage",
142
+ "depth": 2,
143
+ "numbering": [
144
+ 1,
145
+ 2
146
+ ],
147
+ "parent": "root"
148
+ },
149
+ {
150
+ "value": "States",
151
+ "href": "#states",
152
+ "depth": 2,
153
+ "numbering": [
154
+ 1,
155
+ 3
156
+ ],
157
+ "parent": "root"
158
+ },
159
+ {
160
+ "value": "Default",
161
+ "href": "#default",
162
+ "depth": 3,
163
+ "numbering": [
164
+ 1,
165
+ 3,
166
+ 1
167
+ ],
168
+ "parent": "root"
169
+ },
170
+ {
171
+ "value": "Disabled",
172
+ "href": "#disabled",
173
+ "depth": 3,
174
+ "numbering": [
175
+ 1,
176
+ 3,
177
+ 2
178
+ ],
179
+ "parent": "root"
180
+ },
181
+ {
182
+ "value": "Color palette",
183
+ "href": "#color-palette",
184
+ "depth": 2,
185
+ "numbering": [
186
+ 1,
187
+ 4
188
+ ],
189
+ "parent": "root"
190
+ }
191
+ ]
192
+ },
193
+ "dev": {
194
+ "mdx": "\n## Getting started\n\n### Import\n\n```tsx\nimport {\n FloatingActionButton,\n type FloatingActionButtonProps,\n} from '@commercetools/nimbus';\n```\n\n### Basic usage\n\nFloatingActionButton is a 48px circular icon-only button. `aria-label` is\nrequired since there is no visible text:\n\n```jsx live-dev\nconst App = () => (\n <FloatingActionButton aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n)\n```\n\n## Usage examples\n\n### Disabled state\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <FloatingActionButton aria-label=\"Enabled\">\n <Icons.Chat />\n </FloatingActionButton>\n <FloatingActionButton aria-label=\"Disabled\" isDisabled>\n <Icons.Chat />\n </FloatingActionButton>\n </Stack>\n)\n```\n\n### Color palettes\n\n```jsx live-dev\nconst App = () => (\n <Stack direction=\"row\" gap=\"400\" alignItems=\"center\">\n <FloatingActionButton aria-label=\"Primary action\" colorPalette=\"primary\">\n <Icons.Chat />\n </FloatingActionButton>\n <FloatingActionButton aria-label=\"Critical action\" colorPalette=\"critical\">\n <Icons.Chat />\n </FloatingActionButton>\n </Stack>\n)\n```\n\n### Press handling\n\n```jsx live-dev\nconst App = () => {\n const [open, setOpen] = React.useState(false);\n\n return (\n <Stack direction=\"column\" gap=\"400\" alignItems=\"flex-start\">\n <FloatingActionButton\n aria-label={open ? 'Close panel' : 'Open panel'}\n onPress={() => setOpen(!open)}\n >\n <Icons.Chat />\n </FloatingActionButton>\n <Text fontSize=\"sm\">{open ? 'Panel open' : 'Panel closed'}</Text>\n </Stack>\n );\n}\n```\n\n### Fixed positioning\n\nPositioning is the consumer's responsibility. The FAB accepts Chakra UI style\nprops directly, so `position`, `bottom`, and `right` can be passed as props\nrather than via the `style` attribute. The FAB has a default `z-index` of\n`banner` (1200), which keeps it floating above standard page content and sticky\nelements without displacing them:\n\n```jsx live-dev\nconst App = () => (\n <FloatingActionButton\n aria-label=\"Open assistant\"\n position=\"fixed\"\n bottom=\"800\"\n right=\"800\"\n >\n <Icons.Chat />\n </FloatingActionButton>\n)\n```\n\n### Overriding z-index\n\nIf your app uses a custom stacking context, pass `zIndex` directly as a prop:\n\n```jsx live-dev\nconst App = () => (\n <FloatingActionButton\n aria-label=\"Open assistant\"\n zIndex={50}\n >\n <Icons.Chat />\n </FloatingActionButton>\n)\n```\n\n## Accessibility\n\n`aria-label` is a **required** prop since the button contains only an icon.\nThe label should clearly describe the action.\n\n```tsx\n<FloatingActionButton aria-label=\"Open AI assistant\">\n <Icons.Chat />\n</FloatingActionButton>\n```\n\nIf your use case requires tracking and analytics for this component, it is good\npractice to add a **persistent**, **unique** id to the component:\n\n```tsx\nconst PERSISTENT_ID = \"example-floating-action-button\";\n\nexport const Example = () => (\n <FloatingActionButton id={PERSISTENT_ID} aria-label=\"Open assistant\">\n <Icons.Chat />\n </FloatingActionButton>\n);\n```\n\n#### Keyboard navigation\n\n- `Tab` / `Shift+Tab`: Move focus to/from the button\n- `Enter` / `Space`: Activate the button\n\n## API reference\n\n<PropsTable id=\"FloatingActionButton\" />\n\n## Testing your implementation\n\nThese examples demonstrate how to test your implementation when using\nFloatingActionButton within your application. As the component's internal\nfunctionality is already tested by Nimbus, these patterns help you verify your\nintegration and application-specific logic.\n\n### Panel Toggle Integration\n\nUse FloatingActionButton to toggle application state such as a side panel\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { FloatingActionButton, NimbusProvider } from \"@commercetools/nimbus\";\nimport { Add as AddIcon } from \"@commercetools/nimbus-icons\";\nimport { useState } from \"react\";\n\ndescribe(\"FloatingActionButton - Panel toggle integration\", () => {\n const PanelToggle = () => {\n const [open, setOpen] = useState(false);\n return (\n <NimbusProvider>\n <FloatingActionButton\n aria-label={open ? \"Close panel\" : \"Open panel\"}\n onPress={() => setOpen((prev) => !prev)}\n data-testid=\"fab\"\n >\n <AddIcon />\n </FloatingActionButton>\n {open && <div data-testid=\"panel\">Panel content</div>}\n </NimbusProvider>\n );\n };\n\n it(\"opens a panel on press\", async () => {\n const user = userEvent.setup();\n render(<PanelToggle />);\n\n expect(screen.queryByTestId(\"panel\")).not.toBeInTheDocument();\n\n await user.click(screen.getByTestId(\"fab\"));\n\n expect(screen.getByTestId(\"panel\")).toBeInTheDocument();\n });\n\n it(\"toggles the panel closed on second press\", async () => {\n const user = userEvent.setup();\n render(<PanelToggle />);\n\n await user.click(screen.getByTestId(\"fab\"));\n expect(screen.getByTestId(\"panel\")).toBeInTheDocument();\n\n await user.click(screen.getByTestId(\"fab\"));\n expect(screen.queryByTestId(\"panel\")).not.toBeInTheDocument();\n });\n\n it(\"updates aria-label to reflect panel state\", async () => {\n const user = userEvent.setup();\n render(<PanelToggle />);\n\n expect(\n screen.getByRole(\"button\", { name: \"Open panel\" })\n ).toBeInTheDocument();\n await user.click(screen.getByRole(\"button\", { name: \"Open panel\" }));\n expect(\n screen.getByRole(\"button\", { name: \"Close panel\" })\n ).toBeInTheDocument();\n });\n});\n```\n\n### Async Action Integration\n\nUse FloatingActionButton to trigger an async operation\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { FloatingActionButton, NimbusProvider } from \"@commercetools/nimbus\";\nimport { Add as AddIcon } from \"@commercetools/nimbus-icons\";\nimport { useState } from \"react\";\n\ndescribe(\"FloatingActionButton - Async action integration\", () => {\n it(\"triggers an async callback on press\", async () => {\n const user = userEvent.setup();\n const asyncAction = vi.fn().mockResolvedValue(undefined);\n\n render(\n <NimbusProvider>\n <FloatingActionButton\n aria-label=\"Save\"\n onPress={asyncAction}\n data-testid=\"fab\"\n >\n <AddIcon />\n </FloatingActionButton>\n </NimbusProvider>\n );\n\n await user.click(screen.getByTestId(\"fab\"));\n\n expect(asyncAction).toHaveBeenCalledTimes(1);\n });\n\n it(\"does not trigger callback when disabled\", async () => {\n const user = userEvent.setup();\n const asyncAction = vi.fn();\n\n render(\n <NimbusProvider>\n <FloatingActionButton\n aria-label=\"Save\"\n onPress={asyncAction}\n isDisabled\n data-testid=\"fab\"\n >\n <AddIcon />\n </FloatingActionButton>\n </NimbusProvider>\n );\n\n await user.click(screen.getByTestId(\"fab\"));\n\n expect(asyncAction).not.toHaveBeenCalled();\n });\n});\n```\n\n### Stacking Context\n\nThe FAB has a default z-index of \"banner\" (1200) so it floats above page\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { FloatingActionButton, NimbusProvider } from \"@commercetools/nimbus\";\nimport { Add as AddIcon } from \"@commercetools/nimbus-icons\";\nimport { useState } from \"react\";\n\ndescribe(\"FloatingActionButton - Stacking context\", () => {\n it(\"accepts a zIndex prop override for custom stacking contexts\", () => {\n // zIndex is a Chakra style prop — applied via CSS class, not inline style.\n // This test verifies the prop is accepted and the component renders correctly.\n render(\n <NimbusProvider>\n <FloatingActionButton\n aria-label=\"Open assistant\"\n zIndex={50}\n data-testid=\"fab\"\n >\n <AddIcon />\n </FloatingActionButton>\n </NimbusProvider>\n );\n\n expect(screen.getByTestId(\"fab\")).toBeInTheDocument();\n });\n});\n```\n\n### Analytics Tracking Integration\n\nUse a persistent id for analytics tracking\n\n```tsx\nimport { describe, it, expect, vi } from \"vitest\";\nimport { render, screen } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { FloatingActionButton, NimbusProvider } from \"@commercetools/nimbus\";\nimport { Add as AddIcon } from \"@commercetools/nimbus-icons\";\nimport { useState } from \"react\";\n\ndescribe(\"FloatingActionButton - Analytics tracking integration\", () => {\n it(\"renders with a persistent id for tracking\", () => {\n const PERSISTENT_ID = \"main-fab-open-assistant\";\n\n render(\n <NimbusProvider>\n <FloatingActionButton\n id={PERSISTENT_ID}\n aria-label=\"Open assistant\"\n data-testid=\"fab\"\n >\n <AddIcon />\n </FloatingActionButton>\n </NimbusProvider>\n );\n\n expect(screen.getByTestId(\"fab\")).toHaveAttribute(\"id\", PERSISTENT_ID);\n });\n});\n```\n\n\n## Resources\n\n- [Storybook](https://nimbus-storybook.vercel.app/?path=/docs/patterns-buttons-floatingactionbutton--docs)\n- [React Aria Button](https://react-spectrum.adobe.com/react-aria/Button.html)\n- [ARIA Button Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/button/)\n",
195
+ "toc": [
196
+ {
197
+ "value": "Getting started",
198
+ "href": "#getting-started",
199
+ "depth": 2,
200
+ "numbering": [
201
+ 1,
202
+ 1
203
+ ],
204
+ "parent": "root"
205
+ },
206
+ {
207
+ "value": "Import",
208
+ "href": "#import",
209
+ "depth": 3,
210
+ "numbering": [
211
+ 1,
212
+ 1,
213
+ 1
214
+ ],
215
+ "parent": "root"
216
+ },
217
+ {
218
+ "value": "Basic usage",
219
+ "href": "#basic-usage",
220
+ "depth": 3,
221
+ "numbering": [
222
+ 1,
223
+ 1,
224
+ 2
225
+ ],
226
+ "parent": "root"
227
+ },
228
+ {
229
+ "value": "Usage examples",
230
+ "href": "#usage-examples",
231
+ "depth": 2,
232
+ "numbering": [
233
+ 1,
234
+ 2
235
+ ],
236
+ "parent": "root"
237
+ },
238
+ {
239
+ "value": "Disabled state",
240
+ "href": "#disabled-state",
241
+ "depth": 3,
242
+ "numbering": [
243
+ 1,
244
+ 2,
245
+ 1
246
+ ],
247
+ "parent": "root"
248
+ },
249
+ {
250
+ "value": "Color palettes",
251
+ "href": "#color-palettes",
252
+ "depth": 3,
253
+ "numbering": [
254
+ 1,
255
+ 2,
256
+ 2
257
+ ],
258
+ "parent": "root"
259
+ },
260
+ {
261
+ "value": "Press handling",
262
+ "href": "#press-handling",
263
+ "depth": 3,
264
+ "numbering": [
265
+ 1,
266
+ 2,
267
+ 3
268
+ ],
269
+ "parent": "root"
270
+ },
271
+ {
272
+ "value": "Fixed positioning",
273
+ "href": "#fixed-positioning",
274
+ "depth": 3,
275
+ "numbering": [
276
+ 1,
277
+ 2,
278
+ 4
279
+ ],
280
+ "parent": "root"
281
+ },
282
+ {
283
+ "value": "Overriding z-index",
284
+ "href": "#overriding-z-index",
285
+ "depth": 3,
286
+ "numbering": [
287
+ 1,
288
+ 2,
289
+ 5
290
+ ],
291
+ "parent": "root"
292
+ },
293
+ {
294
+ "value": "Accessibility",
295
+ "href": "#accessibility",
296
+ "depth": 2,
297
+ "numbering": [
298
+ 1,
299
+ 3
300
+ ],
301
+ "parent": "root"
302
+ },
303
+ {
304
+ "value": "Keyboard navigation",
305
+ "href": "#keyboard-navigation",
306
+ "depth": 4,
307
+ "numbering": [
308
+ 1,
309
+ 3,
310
+ 1,
311
+ 1
312
+ ],
313
+ "parent": "root"
314
+ },
315
+ {
316
+ "value": "API reference",
317
+ "href": "#api-reference",
318
+ "depth": 2,
319
+ "numbering": [
320
+ 1,
321
+ 4
322
+ ],
323
+ "parent": "root"
324
+ },
325
+ {
326
+ "value": "Testing your implementation",
327
+ "href": "#testing-your-implementation",
328
+ "depth": 2,
329
+ "numbering": [
330
+ 1,
331
+ 5
332
+ ],
333
+ "parent": "root"
334
+ },
335
+ {
336
+ "value": "Panel Toggle Integration",
337
+ "href": "#panel-toggle-integration",
338
+ "depth": 3,
339
+ "numbering": [
340
+ 1,
341
+ 5,
342
+ 1
343
+ ],
344
+ "parent": "root"
345
+ },
346
+ {
347
+ "value": "Async Action Integration",
348
+ "href": "#async-action-integration",
349
+ "depth": 3,
350
+ "numbering": [
351
+ 1,
352
+ 5,
353
+ 2
354
+ ],
355
+ "parent": "root"
356
+ },
357
+ {
358
+ "value": "Stacking Context",
359
+ "href": "#stacking-context",
360
+ "depth": 3,
361
+ "numbering": [
362
+ 1,
363
+ 5,
364
+ 3
365
+ ],
366
+ "parent": "root"
367
+ },
368
+ {
369
+ "value": "Analytics Tracking Integration",
370
+ "href": "#analytics-tracking-integration",
371
+ "depth": 3,
372
+ "numbering": [
373
+ 1,
374
+ 5,
375
+ 4
376
+ ],
377
+ "parent": "root"
378
+ },
379
+ {
380
+ "value": "Resources",
381
+ "href": "#resources",
382
+ "depth": 2,
383
+ "numbering": [
384
+ 1,
385
+ 6
386
+ ],
387
+ "parent": "root"
388
+ }
389
+ ]
390
+ }
391
+ }
392
+ }
@@ -0,0 +1,58 @@
1
+ {
2
+ "meta": {
3
+ "id": "Patterns-Buttons",
4
+ "title": "Buttons",
5
+ "description": "Pre-styled button patterns for prominent, single-purpose actions",
6
+ "order": 5,
7
+ "repoPath": "packages/nimbus/src/docs/patterns-buttons.mdx",
8
+ "menu": [
9
+ "Patterns",
10
+ "Buttons"
11
+ ],
12
+ "route": "patterns/buttons",
13
+ "tags": [
14
+ "patterns",
15
+ "buttons",
16
+ "actions"
17
+ ],
18
+ "toc": [
19
+ {
20
+ "value": "Available button patterns",
21
+ "href": "#available-button-patterns",
22
+ "depth": 2,
23
+ "numbering": [
24
+ 1,
25
+ 1
26
+ ],
27
+ "parent": "root"
28
+ }
29
+ ],
30
+ "icon": "SmartButton",
31
+ "layout": "app-frame",
32
+ "tabs": [
33
+ {
34
+ "key": "overview",
35
+ "title": "Overview",
36
+ "order": 0
37
+ }
38
+ ]
39
+ },
40
+ "mdx": "\n# Buttons\n\nButton pattern components wrap the base button components in small, opinionated APIs for common, high-visibility actions. Use them to get consistent styling and placement without re-deriving the defaults each time.\n\n## Available button patterns\n\n<CategoryOverview variant=\"list\" />\n</content>\n</invoke>\n",
41
+ "views": {
42
+ "overview": {
43
+ "mdx": "\n# Buttons\n\nButton pattern components wrap the base button components in small, opinionated APIs for common, high-visibility actions. Use them to get consistent styling and placement without re-deriving the defaults each time.\n\n## Available button patterns\n\n<CategoryOverview variant=\"list\" />\n</content>\n</invoke>\n",
44
+ "toc": [
45
+ {
46
+ "value": "Available button patterns",
47
+ "href": "#available-button-patterns",
48
+ "depth": 2,
49
+ "numbering": [
50
+ 1,
51
+ 1
52
+ ],
53
+ "parent": "root"
54
+ }
55
+ ]
56
+ }
57
+ }
58
+ }