@arbor-education/design-system.components 0.15.0 → 0.16.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 (304) hide show
  1. package/.gather/skills/write-stories/SKILL.md +207 -271
  2. package/.storybook/preview.ts +5 -0
  3. package/CHANGELOG.md +23 -0
  4. package/README.md +8 -0
  5. package/component-library.md +144 -13
  6. package/dist/components/articleCard/ArticleCard.stories.d.ts +137 -11
  7. package/dist/components/articleCard/ArticleCard.stories.d.ts.map +1 -1
  8. package/dist/components/articleCard/ArticleCard.stories.js +358 -91
  9. package/dist/components/articleCard/ArticleCard.stories.js.map +1 -1
  10. package/dist/components/avatar/Avatar.stories.d.ts +6 -6
  11. package/dist/components/avatar/Avatar.stories.d.ts.map +1 -1
  12. package/dist/components/avatar/Avatar.stories.js +393 -49
  13. package/dist/components/avatar/Avatar.stories.js.map +1 -1
  14. package/dist/components/avatarGroup/AvatarGroup.stories.d.ts +9 -7
  15. package/dist/components/avatarGroup/AvatarGroup.stories.d.ts.map +1 -1
  16. package/dist/components/avatarGroup/AvatarGroup.stories.js +688 -65
  17. package/dist/components/avatarGroup/AvatarGroup.stories.js.map +1 -1
  18. package/dist/components/banner/Banner.stories.d.ts.map +1 -1
  19. package/dist/components/banner/Banner.stories.js +7 -3
  20. package/dist/components/banner/Banner.stories.js.map +1 -1
  21. package/dist/components/card/Card.stories.d.ts +105 -4
  22. package/dist/components/card/Card.stories.d.ts.map +1 -1
  23. package/dist/components/card/Card.stories.js +336 -18
  24. package/dist/components/card/Card.stories.js.map +1 -1
  25. package/dist/components/combobox/Combobox.stories.d.ts +134 -21
  26. package/dist/components/combobox/Combobox.stories.d.ts.map +1 -1
  27. package/dist/components/combobox/Combobox.stories.js +676 -175
  28. package/dist/components/combobox/Combobox.stories.js.map +1 -1
  29. package/dist/components/datePicker/DatePicker.stories.d.ts +119 -27
  30. package/dist/components/datePicker/DatePicker.stories.d.ts.map +1 -1
  31. package/dist/components/datePicker/DatePicker.stories.js +575 -47
  32. package/dist/components/datePicker/DatePicker.stories.js.map +1 -1
  33. package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts +155 -39
  34. package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts.map +1 -1
  35. package/dist/components/dateTimePicker/DateTimePicker.stories.js +674 -103
  36. package/dist/components/dateTimePicker/DateTimePicker.stories.js.map +1 -1
  37. package/dist/components/editableText/EditableText.stories.d.ts +53 -12
  38. package/dist/components/editableText/EditableText.stories.d.ts.map +1 -1
  39. package/dist/components/editableText/EditableText.stories.js +401 -64
  40. package/dist/components/editableText/EditableText.stories.js.map +1 -1
  41. package/dist/components/formField/FormField.d.ts +4 -0
  42. package/dist/components/formField/FormField.d.ts.map +1 -1
  43. package/dist/components/formField/FormField.js +2 -1
  44. package/dist/components/formField/FormField.js.map +1 -1
  45. package/dist/components/formField/FormField.test.js +5 -0
  46. package/dist/components/formField/FormField.test.js.map +1 -1
  47. package/dist/components/formField/fieldset/Fieldset.stories.d.ts +56 -4
  48. package/dist/components/formField/fieldset/Fieldset.stories.d.ts.map +1 -1
  49. package/dist/components/formField/fieldset/Fieldset.stories.js +534 -28
  50. package/dist/components/formField/fieldset/Fieldset.stories.js.map +1 -1
  51. package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts +3 -1
  52. package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts.map +1 -1
  53. package/dist/components/formField/inputs/checkbox/CheckboxInput.js +1 -1
  54. package/dist/components/formField/inputs/checkbox/CheckboxInput.js.map +1 -1
  55. package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.d.ts +95 -1
  56. package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.d.ts.map +1 -1
  57. package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.js +386 -9
  58. package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.js.map +1 -1
  59. package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts +6 -2
  60. package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts.map +1 -1
  61. package/dist/components/formField/inputs/radio/RadioButtonGroup.js.map +1 -1
  62. package/dist/components/formField/inputs/radio/RadioButtonInput.stories.d.ts.map +1 -1
  63. package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js +61 -49
  64. package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js.map +1 -1
  65. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts +188 -166
  66. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -1
  67. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js +821 -160
  68. package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -1
  69. package/dist/components/formField/inputs/time/TimeInput.stories.d.ts +176 -22
  70. package/dist/components/formField/inputs/time/TimeInput.stories.d.ts.map +1 -1
  71. package/dist/components/formField/inputs/time/TimeInput.stories.js +851 -92
  72. package/dist/components/formField/inputs/time/TimeInput.stories.js.map +1 -1
  73. package/dist/components/formField/label/Label.stories.d.ts +54 -5
  74. package/dist/components/formField/label/Label.stories.d.ts.map +1 -1
  75. package/dist/components/formField/label/Label.stories.js +238 -4
  76. package/dist/components/formField/label/Label.stories.js.map +1 -1
  77. package/dist/components/icoText/IcoText.stories.d.ts +32 -6
  78. package/dist/components/icoText/IcoText.stories.d.ts.map +1 -1
  79. package/dist/components/icoText/IcoText.stories.js +309 -14
  80. package/dist/components/icoText/IcoText.stories.js.map +1 -1
  81. package/dist/components/kpiCard/KPICard.stories.d.ts +100 -2
  82. package/dist/components/kpiCard/KPICard.stories.d.ts.map +1 -1
  83. package/dist/components/kpiCard/KPICard.stories.js +354 -10
  84. package/dist/components/kpiCard/KPICard.stories.js.map +1 -1
  85. package/dist/components/kvpList/KVPList.stories.d.ts +57 -4
  86. package/dist/components/kvpList/KVPList.stories.d.ts.map +1 -1
  87. package/dist/components/kvpList/KVPList.stories.js +403 -10
  88. package/dist/components/kvpList/KVPList.stories.js.map +1 -1
  89. package/dist/components/modal/Modal.stories.d.ts +113 -9
  90. package/dist/components/modal/Modal.stories.d.ts.map +1 -1
  91. package/dist/components/modal/Modal.stories.js +633 -13
  92. package/dist/components/modal/Modal.stories.js.map +1 -1
  93. package/dist/components/modal/modalManager/ModalManager.stories.d.ts +34 -10
  94. package/dist/components/modal/modalManager/ModalManager.stories.d.ts.map +1 -1
  95. package/dist/components/modal/modalManager/ModalManager.stories.js +463 -85
  96. package/dist/components/modal/modalManager/ModalManager.stories.js.map +1 -1
  97. package/dist/components/pill/Pill.d.ts.map +1 -1
  98. package/dist/components/pill/Pill.js +1 -1
  99. package/dist/components/pill/Pill.js.map +1 -1
  100. package/dist/components/pill/Pill.stories.d.ts.map +1 -1
  101. package/dist/components/pill/Pill.stories.js +11 -13
  102. package/dist/components/pill/Pill.stories.js.map +1 -1
  103. package/dist/components/row/Row.stories.d.ts +1 -2
  104. package/dist/components/row/Row.stories.d.ts.map +1 -1
  105. package/dist/components/row/Row.stories.js +360 -50
  106. package/dist/components/row/Row.stories.js.map +1 -1
  107. package/dist/components/searchBar/SearchBar.stories.d.ts +52 -4
  108. package/dist/components/searchBar/SearchBar.stories.d.ts.map +1 -1
  109. package/dist/components/searchBar/SearchBar.stories.js +428 -36
  110. package/dist/components/searchBar/SearchBar.stories.js.map +1 -1
  111. package/dist/components/section/Section.stories.d.ts +11 -41
  112. package/dist/components/section/Section.stories.d.ts.map +1 -1
  113. package/dist/components/section/Section.stories.js +494 -56
  114. package/dist/components/section/Section.stories.js.map +1 -1
  115. package/dist/components/singleUser/SingleUser.stories.d.ts +5 -4
  116. package/dist/components/singleUser/SingleUser.stories.d.ts.map +1 -1
  117. package/dist/components/singleUser/SingleUser.stories.js +303 -31
  118. package/dist/components/singleUser/SingleUser.stories.js.map +1 -1
  119. package/dist/components/slideoverManager/SlideoverManager.stories.d.ts +32 -11
  120. package/dist/components/slideoverManager/SlideoverManager.stories.d.ts.map +1 -1
  121. package/dist/components/slideoverManager/SlideoverManager.stories.js +380 -84
  122. package/dist/components/slideoverManager/SlideoverManager.stories.js.map +1 -1
  123. package/dist/components/table/DSDefaultColDef.d.ts.map +1 -1
  124. package/dist/components/table/DSDefaultColDef.js +4 -3
  125. package/dist/components/table/DSDefaultColDef.js.map +1 -1
  126. package/dist/components/table/Table.d.ts +6 -1
  127. package/dist/components/table/Table.d.ts.map +1 -1
  128. package/dist/components/table/Table.js +8 -3
  129. package/dist/components/table/Table.js.map +1 -1
  130. package/dist/components/table/Table.stories.d.ts +3 -0
  131. package/dist/components/table/Table.stories.d.ts.map +1 -1
  132. package/dist/components/table/Table.stories.js +384 -5
  133. package/dist/components/table/Table.stories.js.map +1 -1
  134. package/dist/components/table/Table.test.js +30 -0
  135. package/dist/components/table/Table.test.js.map +1 -1
  136. package/dist/components/table/TableFooter.stories.d.ts +49 -0
  137. package/dist/components/table/TableFooter.stories.d.ts.map +1 -0
  138. package/dist/components/table/TableFooter.stories.js +137 -0
  139. package/dist/components/table/TableFooter.stories.js.map +1 -0
  140. package/dist/components/table/TableHeader.stories.d.ts +93 -0
  141. package/dist/components/table/TableHeader.stories.d.ts.map +1 -0
  142. package/dist/components/table/TableHeader.stories.js +176 -0
  143. package/dist/components/table/TableHeader.stories.js.map +1 -0
  144. package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts +44 -0
  145. package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts.map +1 -0
  146. package/dist/components/table/cellEditors/DateCellEditor.stories.js +186 -0
  147. package/dist/components/table/cellEditors/DateCellEditor.stories.js.map +1 -0
  148. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts +40 -0
  149. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts.map +1 -0
  150. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js +209 -0
  151. package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js.map +1 -0
  152. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts +48 -0
  153. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts.map +1 -0
  154. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js +244 -0
  155. package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js.map +1 -0
  156. package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -1
  157. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +3 -1
  158. package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -1
  159. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts +64 -0
  160. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts.map +1 -0
  161. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js +241 -0
  162. package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js.map +1 -0
  163. package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.d.ts +55 -0
  164. package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.d.ts.map +1 -0
  165. package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.js +245 -0
  166. package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.js.map +1 -0
  167. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts +67 -0
  168. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts.map +1 -0
  169. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js +221 -0
  170. package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js.map +1 -0
  171. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts +75 -0
  172. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -0
  173. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +270 -0
  174. package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -0
  175. package/dist/components/table/columnFilters/BooleanFilter.stories.d.ts +57 -0
  176. package/dist/components/table/columnFilters/BooleanFilter.stories.d.ts.map +1 -0
  177. package/dist/components/table/columnFilters/BooleanFilter.stories.js +198 -0
  178. package/dist/components/table/columnFilters/BooleanFilter.stories.js.map +1 -0
  179. package/dist/components/table/columnFilters/TimeFilter.stories.d.ts +58 -0
  180. package/dist/components/table/columnFilters/TimeFilter.stories.d.ts.map +1 -0
  181. package/dist/components/table/columnFilters/TimeFilter.stories.js +207 -0
  182. package/dist/components/table/columnFilters/TimeFilter.stories.js.map +1 -0
  183. package/dist/components/table/pagination/PaginationPanel.stories.d.ts +113 -0
  184. package/dist/components/table/pagination/PaginationPanel.stories.d.ts.map +1 -0
  185. package/dist/components/table/pagination/PaginationPanel.stories.js +272 -0
  186. package/dist/components/table/pagination/PaginationPanel.stories.js.map +1 -0
  187. package/dist/components/table/tableControls/HideColumnsDropdown.d.ts.map +1 -1
  188. package/dist/components/table/tableControls/HideColumnsDropdown.js +9 -3
  189. package/dist/components/table/tableControls/HideColumnsDropdown.js.map +1 -1
  190. package/dist/components/table/tableControls/TableControls.stories.d.ts +151 -0
  191. package/dist/components/table/tableControls/TableControls.stories.d.ts.map +1 -0
  192. package/dist/components/table/tableControls/TableControls.stories.js +356 -0
  193. package/dist/components/table/tableControls/TableControls.stories.js.map +1 -0
  194. package/dist/components/table/tableControls/TableSettingsDropdown.d.ts +27 -1
  195. package/dist/components/table/tableControls/TableSettingsDropdown.d.ts.map +1 -1
  196. package/dist/components/table/tableControls/TableSettingsDropdown.js +53 -26
  197. package/dist/components/table/tableControls/TableSettingsDropdown.js.map +1 -1
  198. package/dist/components/table/tableControls/TableSettingsDropdown.test.d.ts +2 -0
  199. package/dist/components/table/tableControls/TableSettingsDropdown.test.d.ts.map +1 -0
  200. package/dist/components/table/tableControls/TableSettingsDropdown.test.js +178 -0
  201. package/dist/components/table/tableControls/TableSettingsDropdown.test.js.map +1 -0
  202. package/dist/components/tabs/Tabs.stories.d.ts +22 -4
  203. package/dist/components/tabs/Tabs.stories.d.ts.map +1 -1
  204. package/dist/components/tabs/Tabs.stories.js +398 -22
  205. package/dist/components/tabs/Tabs.stories.js.map +1 -1
  206. package/dist/components/tabs/TabsItem.stories.d.ts +54 -1
  207. package/dist/components/tabs/TabsItem.stories.d.ts.map +1 -1
  208. package/dist/components/tabs/TabsItem.stories.js +61 -9
  209. package/dist/components/tabs/TabsItem.stories.js.map +1 -1
  210. package/dist/components/toast/Toast.stories.d.ts +103 -10
  211. package/dist/components/toast/Toast.stories.d.ts.map +1 -1
  212. package/dist/components/toast/Toast.stories.js +409 -47
  213. package/dist/components/toast/Toast.stories.js.map +1 -1
  214. package/dist/components/toggle/Toggle.stories.d.ts +61 -46
  215. package/dist/components/toggle/Toggle.stories.d.ts.map +1 -1
  216. package/dist/components/toggle/Toggle.stories.js +311 -122
  217. package/dist/components/toggle/Toggle.stories.js.map +1 -1
  218. package/dist/components/tooltip/Tooltip.stories.d.ts +78 -6
  219. package/dist/components/tooltip/Tooltip.stories.d.ts.map +1 -1
  220. package/dist/components/tooltip/Tooltip.stories.js +413 -7
  221. package/dist/components/tooltip/Tooltip.stories.js.map +1 -1
  222. package/dist/components/tooltip/TooltipWrapper.stories.d.ts +71 -7
  223. package/dist/components/tooltip/TooltipWrapper.stories.d.ts.map +1 -1
  224. package/dist/components/tooltip/TooltipWrapper.stories.js +238 -10
  225. package/dist/components/tooltip/TooltipWrapper.stories.js.map +1 -1
  226. package/dist/index.css +8 -0
  227. package/dist/index.css.map +1 -1
  228. package/dist/utils/PopupParentContext.stories.d.ts +17 -0
  229. package/dist/utils/PopupParentContext.stories.d.ts.map +1 -0
  230. package/dist/utils/PopupParentContext.stories.js +266 -0
  231. package/dist/utils/PopupParentContext.stories.js.map +1 -0
  232. package/dist/utils/getDefaultPopupParent.d.ts.map +1 -1
  233. package/dist/utils/getDefaultPopupParent.js +6 -0
  234. package/dist/utils/getDefaultPopupParent.js.map +1 -1
  235. package/package.json +1 -1
  236. package/src/components/articleCard/ArticleCard.stories.tsx +524 -111
  237. package/src/components/avatar/Avatar.stories.tsx +504 -59
  238. package/src/components/avatarGroup/AvatarGroup.stories.tsx +977 -175
  239. package/src/components/banner/Banner.stories.tsx +7 -3
  240. package/src/components/card/Card.stories.tsx +466 -36
  241. package/src/components/combobox/Combobox.stories.tsx +867 -260
  242. package/src/components/datePicker/DatePicker.stories.tsx +777 -60
  243. package/src/components/dateTimePicker/DateTimePicker.stories.tsx +910 -132
  244. package/src/components/editableText/EditableText.stories.tsx +567 -91
  245. package/src/components/formField/FormField.test.tsx +6 -0
  246. package/src/components/formField/FormField.tsx +5 -0
  247. package/src/components/formField/fieldset/Fieldset.stories.tsx +761 -51
  248. package/src/components/formField/inputs/checkbox/CheckboxGroup.tsx +1 -1
  249. package/src/components/formField/inputs/checkbox/CheckboxInput.tsx +1 -1
  250. package/src/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.tsx +504 -11
  251. package/src/components/formField/inputs/radio/RadioButtonGroup.tsx +17 -4
  252. package/src/components/formField/inputs/radio/RadioButtonInput.stories.tsx +71 -59
  253. package/src/components/formField/inputs/selectDropdown/SelectDropdown.stories.tsx +1079 -168
  254. package/src/components/formField/inputs/time/TimeInput.stories.tsx +1140 -104
  255. package/src/components/formField/label/Label.stories.tsx +317 -8
  256. package/src/components/icoText/IcoText.stories.tsx +442 -31
  257. package/src/components/kpiCard/KPICard.stories.tsx +475 -30
  258. package/src/components/kvpList/KVPList.stories.tsx +593 -26
  259. package/src/components/modal/Modal.stories.tsx +963 -26
  260. package/src/components/modal/modalManager/ModalManager.stories.tsx +612 -454
  261. package/src/components/pill/Pill.stories.tsx +11 -13
  262. package/src/components/pill/Pill.tsx +1 -0
  263. package/src/components/row/Row.stories.tsx +474 -58
  264. package/src/components/searchBar/SearchBar.stories.tsx +570 -38
  265. package/src/components/section/Section.stories.tsx +723 -70
  266. package/src/components/singleUser/SingleUser.stories.tsx +393 -34
  267. package/src/components/slideoverManager/SlideoverManager.stories.tsx +572 -342
  268. package/src/components/table/DSDefaultColDef.ts +25 -5
  269. package/src/components/table/Table.stories.tsx +460 -5
  270. package/src/components/table/Table.test.tsx +53 -0
  271. package/src/components/table/Table.tsx +9 -2
  272. package/src/components/table/TableFooter.stories.tsx +196 -0
  273. package/src/components/table/TableHeader.stories.tsx +251 -0
  274. package/src/components/table/cellEditors/DateCellEditor.stories.tsx +245 -0
  275. package/src/components/table/cellRenderers/BooleanCellRenderer.stories.tsx +278 -0
  276. package/src/components/table/cellRenderers/ButtonCellRenderer.stories.tsx +333 -0
  277. package/src/components/table/cellRenderers/CheckboxCellRenderer.stories.tsx +337 -0
  278. package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +5 -1
  279. package/src/components/table/cellRenderers/DefaultCellRenderer.stories.tsx +342 -0
  280. package/src/components/table/cellRenderers/InlineTextCellRenderer.stories.tsx +292 -0
  281. package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +369 -0
  282. package/src/components/table/columnFilters/BooleanFilter.stories.tsx +268 -0
  283. package/src/components/table/columnFilters/TimeFilter.stories.tsx +281 -0
  284. package/src/components/table/pagination/PaginationPanel.stories.tsx +327 -0
  285. package/src/components/table/tableControls/HideColumnsDropdown.tsx +11 -2
  286. package/src/components/table/tableControls/TableControls.stories.tsx +415 -0
  287. package/src/components/table/tableControls/TableSettingsDropdown.test.tsx +207 -0
  288. package/src/components/table/tableControls/TableSettingsDropdown.tsx +103 -39
  289. package/src/components/tabs/Tabs.stories.tsx +540 -60
  290. package/src/components/tabs/TabsItem.stories.tsx +82 -8
  291. package/src/components/toast/Toast.stories.tsx +539 -77
  292. package/src/components/toggle/Toggle.stories.tsx +371 -135
  293. package/src/components/tooltip/Tooltip.stories.tsx +606 -15
  294. package/src/components/tooltip/TooltipWrapper.stories.tsx +348 -12
  295. package/src/docs/Contributing.mdx +241 -0
  296. package/src/docs/UsingComponents.mdx +93 -0
  297. package/src/docs/Welcome.mdx +68 -0
  298. package/src/global.scss +7 -0
  299. package/src/utils/PopupParentContext.stories.tsx +367 -0
  300. package/src/utils/getDefaultPopupParent.ts +6 -0
  301. package/.ralph/storybook-upgrade/knowledge.md +0 -308
  302. package/.ralph/storybook-upgrade/prd.json +0 -777
  303. package/.ralph/storybook-upgrade/progress.md +0 -342
  304. package/src/components/table/TableWIP.mdx +0 -3
@@ -0,0 +1,292 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import {
3
+ Controls,
4
+ Heading as DocHeading,
5
+ Markdown,
6
+ Primary as DocPrimary,
7
+ Stories,
8
+ Subtitle,
9
+ Title,
10
+ } from '@storybook/addon-docs/blocks';
11
+ import type { CustomCellRendererProps } from 'ag-grid-react';
12
+ import { InlineTextCellRenderer } from './InlineTextCellRenderer';
13
+ import { Table } from 'Components/table/Table';
14
+
15
+ // ---------------------------------------------------------------------------
16
+ // Docs page content
17
+ // ---------------------------------------------------------------------------
18
+
19
+ const DESCRIPTION_INTRO = [
20
+ '`InlineTextCellRenderer` is an AG Grid cell renderer that renders a `TextInput` permanently',
21
+ 'inside a table cell for inline text editing. Pressing Enter commits the current value via',
22
+ '`node.setDataValue`. The input is pre-populated from `valueFormatted ?? value`.',
23
+ '',
24
+ 'Register it via the string key `dsInlineTextCellRenderer` (pre-registered by Arbor\'s `Table`) or by importing the component directly.',
25
+ ].join('\n');
26
+
27
+ const USAGE_GUIDANCE = [
28
+ '### When to use',
29
+ '',
30
+ '- When users need to edit text values directly in the table row without opening a modal or form',
31
+ '- Short, single-field edits (names, codes, quantities) where the editing context is clear',
32
+ '',
33
+ '---',
34
+ '',
35
+ '### When NOT to use',
36
+ '',
37
+ '| Situation | Use instead |',
38
+ '|---|---|',
39
+ '| Editing a date value | `DateCellEditor` (`dsDateCellEditor`) |',
40
+ '| Selecting from a list of options | `SelectDropdownCellRenderer` (`dsSelectDropdownCellRenderer`) |',
41
+ '| The edit requires validation before saving | A form in a modal — inline editing skips the validation step |',
42
+ '| The field is long-form text | A full text area in a slideover or modal |',
43
+ ].join('\n');
44
+
45
+ const DEVELOPER_NOTES = [
46
+ '### Critical usage patterns',
47
+ '',
48
+ '**This is a renderer, not an editor — the `TextInput` is always visible.**',
49
+ 'Unlike AG Grid\'s native cell editors (which mount only during edit mode), `InlineTextCellRenderer`',
50
+ 'renders the `TextInput` permanently in the cell.',
51
+ '',
52
+ '**Pressing Enter commits the value via `node.setDataValue`.**',
53
+ 'The renderer attaches a `keydown` listener to the cell wrapper on mount. Pressing Enter calls',
54
+ '`node.setDataValue(column, currentInputValue)`. If `column` is not in props, Enter is a no-op.',
55
+ '',
56
+ '```tsx',
57
+ "import { Table } from '@arbor-education/design-system.components';",
58
+ '',
59
+ 'const colDefs = [',
60
+ ' {',
61
+ " field: 'forename',",
62
+ " headerName: 'First name',",
63
+ " cellRenderer: 'dsInlineTextCellRenderer',",
64
+ ' },',
65
+ '];',
66
+ '```',
67
+ '',
68
+ '---',
69
+ '',
70
+ '### Accessibility',
71
+ '',
72
+ 'The `TextInput` inside the cell has no explicit label — the column header provides visual context.',
73
+ 'For screen readers, add an `aria-label` via `cellRendererParams: { "aria-label": "..." }`.',
74
+ '',
75
+ '---',
76
+ '',
77
+ '### TypeScript types',
78
+ '',
79
+ '```ts',
80
+ "import { InlineTextCellRenderer } from '@arbor-education/design-system.components';",
81
+ '```',
82
+ '',
83
+ '`InlineTextCellRenderer` extends `CustomCellRendererProps` with `value: string`.',
84
+ ].join('\n');
85
+
86
+ const RELATED_COMPONENTS = [
87
+ '## Related components',
88
+ '',
89
+ '[Table](?path=/docs/components-table--docs) · [SelectDropdownCellRenderer](?path=/docs/components-table-cellrenderers-selectdropdowncellrenderer--docs) · [TextInput](?path=/docs/components-textinput--docs)',
90
+ ].join('\n');
91
+
92
+ const PROPS_INTRO = 'The preview below shows `InlineTextCellRenderer` with a pre-populated value. Type in the input to see it update. Pressing Enter would call `node.setDataValue` — in this preview that call is a no-op since there is no AG Grid row node.';
93
+
94
+ // ---------------------------------------------------------------------------
95
+ // Custom DocsPage
96
+ // ---------------------------------------------------------------------------
97
+
98
+ function InlineTextCellRendererDocsPage() {
99
+ return (
100
+ <>
101
+ <Title />
102
+ <Subtitle />
103
+ <Markdown>{DESCRIPTION_INTRO}</Markdown>
104
+ <DocHeading>Interactive example</DocHeading>
105
+ <Markdown>{PROPS_INTRO}</Markdown>
106
+ <DocPrimary />
107
+ <Controls />
108
+ <DocHeading>Usage guidance</DocHeading>
109
+ <Markdown>{USAGE_GUIDANCE}</Markdown>
110
+ <DocHeading>Developer notes</DocHeading>
111
+ <Markdown>{DEVELOPER_NOTES}</Markdown>
112
+ <DocHeading>Examples</DocHeading>
113
+ <Stories title="" />
114
+ <Markdown>{RELATED_COMPONENTS}</Markdown>
115
+ </>
116
+ );
117
+ }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // Meta
121
+ // ---------------------------------------------------------------------------
122
+
123
+ const MOCK_CELL_PROPS = {} as unknown as CustomCellRendererProps;
124
+
125
+ const meta = {
126
+ title: 'Components/Table/CellRenderers/InlineTextCellRenderer',
127
+ component: InlineTextCellRenderer,
128
+ tags: ['autodocs'],
129
+ parameters: {
130
+ layout: 'padded',
131
+ docs: { page: InlineTextCellRendererDocsPage },
132
+ },
133
+ argTypes: {
134
+ value: {
135
+ control: false,
136
+ description: 'The initial text value displayed in the `TextInput`. The component manages its own internal state from this initial value.',
137
+ table: {
138
+ type: { summary: 'string' },
139
+ defaultValue: { summary: "''" },
140
+ },
141
+ },
142
+ valueFormatted: {
143
+ control: false,
144
+ description: 'If provided, used as the initial text value instead of `value`. Set by AG Grid\'s `valueFormatter`.',
145
+ table: {
146
+ type: { summary: 'string | undefined' },
147
+ defaultValue: { summary: 'undefined' },
148
+ },
149
+ },
150
+ node: {
151
+ control: false,
152
+ description: 'AG Grid row node. The renderer calls `node.setDataValue` when the user presses Enter.',
153
+ table: { type: { summary: 'IRowNode' } },
154
+ },
155
+ column: {
156
+ control: false,
157
+ description: 'AG Grid column instance. Passed as the first argument to `node.setDataValue`.',
158
+ table: { type: { summary: 'Column | null' } },
159
+ },
160
+ },
161
+ } satisfies Meta<typeof InlineTextCellRenderer>;
162
+
163
+ export default meta;
164
+ type Story = StoryObj<typeof InlineTextCellRenderer>;
165
+
166
+ // ---------------------------------------------------------------------------
167
+ // Helper: attach a per-story description to docs
168
+ // ---------------------------------------------------------------------------
169
+
170
+ const withDescription = (story: Story, description: string): Story => ({
171
+ ...story,
172
+ parameters: {
173
+ ...story.parameters,
174
+ docs: { ...story.parameters?.docs, description: { story: description } },
175
+ },
176
+ });
177
+
178
+ // ---------------------------------------------------------------------------
179
+ // Stories
180
+ // ---------------------------------------------------------------------------
181
+
182
+ export const Default: Story = withDescription(
183
+ {
184
+ parameters: { controls: { disable: true } },
185
+ render: () => (
186
+ <InlineTextCellRenderer
187
+ {...MOCK_CELL_PROPS}
188
+ value="Alice Smith"
189
+ />
190
+ ),
191
+ },
192
+ 'Pre-populated with an existing value. The `TextInput` is always visible — type to update the internal value, then press Enter to commit (in a real table, Enter calls `node.setDataValue`).',
193
+ );
194
+
195
+ export const Empty: Story = withDescription(
196
+ {
197
+ parameters: {
198
+ controls: { disable: true },
199
+ docs: {
200
+ source: {
201
+ language: 'tsx',
202
+ code: `
203
+ import { Table } from '@arbor-education/design-system.components';
204
+
205
+ const colDefs = [
206
+ {
207
+ field: 'forename',
208
+ headerName: 'First name',
209
+ cellRenderer: 'dsInlineTextCellRenderer',
210
+ },
211
+ ];
212
+ `.trim(),
213
+ },
214
+ },
215
+ },
216
+ render: () => (
217
+ <InlineTextCellRenderer
218
+ {...MOCK_CELL_PROPS}
219
+ value=""
220
+ />
221
+ ),
222
+ },
223
+ 'Empty initial state — the `TextInput` is blank and ready for input. This is the state for a new row with no existing data.',
224
+ );
225
+
226
+ const INLINE_TEXT_IN_TABLE_DATA = [
227
+ { fullName: 'Alice Johnson', forename: 'Alice' },
228
+ { fullName: 'Bob Smith', forename: 'Bob' },
229
+ { fullName: 'Charlie Brown', forename: 'Charlie' },
230
+ ];
231
+
232
+ export const InATable: Story = withDescription(
233
+ {
234
+ parameters: {
235
+ controls: { disable: true },
236
+ docs: {
237
+ source: {
238
+ language: 'tsx',
239
+ code: `
240
+ import { Table } from '@arbor-education/design-system.components';
241
+
242
+ const rowData = [
243
+ { fullName: 'Alice Johnson', forename: 'Alice' },
244
+ { fullName: 'Bob Smith', forename: 'Bob' },
245
+ { fullName: 'Charlie Brown', forename: 'Charlie' },
246
+ ];
247
+
248
+ function InlineTextCellRendererExample() {
249
+ return (
250
+ <Table
251
+ rowData={rowData}
252
+ columnDefs={[
253
+ { field: 'fullName', headerName: 'Full Name', flex: 2, editable: false },
254
+ {
255
+ field: 'forename',
256
+ headerName: 'First Name',
257
+ flex: 1,
258
+ editable: false,
259
+ cellRenderer: 'dsInlineTextCellRenderer',
260
+ },
261
+ ]}
262
+ defaultColDef={{ flex: 1, minWidth: 120 }}
263
+ domLayout="autoHeight"
264
+ />
265
+ );
266
+ }
267
+
268
+ export default InlineTextCellRendererExample;
269
+ `.trim(),
270
+ },
271
+ },
272
+ },
273
+ render: () => (
274
+ <Table
275
+ rowData={INLINE_TEXT_IN_TABLE_DATA}
276
+ columnDefs={[
277
+ { field: 'fullName', headerName: 'Full Name', flex: 2, editable: false },
278
+ {
279
+ field: 'forename',
280
+ headerName: 'First Name',
281
+ flex: 1,
282
+ editable: false,
283
+ cellRenderer: 'dsInlineTextCellRenderer',
284
+ },
285
+ ]}
286
+ defaultColDef={{ flex: 1, minWidth: 120 }}
287
+ domLayout="autoHeight"
288
+ />
289
+ ),
290
+ },
291
+ '`dsInlineTextCellRenderer` wired up inside a full `Table`. Click into any First Name cell to start editing — the `TextInput` is always visible. Press Enter to commit the value via `node.setDataValue`, updating the row data in-place.',
292
+ );
@@ -0,0 +1,369 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import {
3
+ Controls,
4
+ Heading as DocHeading,
5
+ Markdown,
6
+ Primary as DocPrimary,
7
+ Stories,
8
+ Subtitle,
9
+ Title,
10
+ } from '@storybook/addon-docs/blocks';
11
+ import type { GridApi } from 'ag-grid-community';
12
+ import type { CustomCellRendererProps } from 'ag-grid-react';
13
+ import { SelectDropdownCellRenderer } from './SelectDropdownCellRenderer';
14
+ import { Table } from 'Components/table/Table';
15
+
16
+ // ---------------------------------------------------------------------------
17
+ // Docs page content
18
+ // ---------------------------------------------------------------------------
19
+
20
+ const DESCRIPTION_INTRO = [
21
+ '`SelectDropdownCellRenderer` is an AG Grid cell renderer that renders an Arbor `SelectDropdown`',
22
+ 'permanently inside a table cell. It listens for `cellKeyDown` events on the Grid API to open the',
23
+ 'dropdown when the user presses Enter in the focused cell. On selection, it calls `node.setDataValue`',
24
+ 'to update the row data in-place.',
25
+ '',
26
+ 'Register it via the string key `dsSelectDropdownCellRenderer` (pre-registered by Arbor\'s `Table`) or by importing the component directly.',
27
+ ].join('\n');
28
+
29
+ const USAGE_GUIDANCE = [
30
+ '### When to use',
31
+ '',
32
+ '- On columns where the user must choose from a fixed list of options (status, category, type)',
33
+ '- When the options are the same for every row',
34
+ '',
35
+ '---',
36
+ '',
37
+ '### When NOT to use',
38
+ '',
39
+ '| Situation | Use instead |',
40
+ '|---|---|',
41
+ '| Options vary per row | A custom cell renderer with a `SelectDropdown` and per-row option logic |',
42
+ '| The user can select multiple options in one cell | Not currently supported — use a form in a modal |',
43
+ '| The list is very long (100+ options) | A searchable select or a modal with filtering |',
44
+ ].join('\n');
45
+
46
+ const DEVELOPER_NOTES = [
47
+ '### Critical usage patterns',
48
+ '',
49
+ '**`api` is required.**',
50
+ 'The renderer attaches a `cellKeyDown` listener to the Grid API on mount so that pressing Enter',
51
+ 'in the focused cell opens the dropdown. Without `api`, the keyboard shortcut is silently skipped',
52
+ 'but the dropdown still renders and is clickable.',
53
+ '',
54
+ '**`options` must be passed via `cellRendererParams`.**',
55
+ 'Options are not part of the cell `value` — configure them in `cellRendererParams`.',
56
+ 'Option `value` fields are normalised to strings internally for comparison, but the original value',
57
+ '(string or number) is restored when calling `node.setDataValue`.',
58
+ '',
59
+ '```tsx',
60
+ "import { Table } from '@arbor-education/design-system.components';",
61
+ '',
62
+ 'const colDefs = [',
63
+ ' {',
64
+ " field: 'status',",
65
+ " headerName: 'Status',",
66
+ " cellRenderer: 'dsSelectDropdownCellRenderer',",
67
+ ' cellRendererParams: {',
68
+ ' options: [',
69
+ " { label: 'Active', value: 'active' },",
70
+ " { label: 'Inactive', value: 'inactive' },",
71
+ " { label: 'Pending', value: 'pending' },",
72
+ ' ],',
73
+ " placeholder: 'Select status',",
74
+ ' },',
75
+ ' },',
76
+ '];',
77
+ '```',
78
+ '',
79
+ '---',
80
+ '',
81
+ '### Accessibility',
82
+ '',
83
+ 'Pressing Enter in a focused cell opens the dropdown — no mouse click required.',
84
+ 'The `SelectDropdown` handles full keyboard navigation internally (arrow keys, Enter/Escape).',
85
+ '',
86
+ '---',
87
+ '',
88
+ '### TypeScript types',
89
+ '',
90
+ '```ts',
91
+ "import { SelectDropdownCellRenderer } from '@arbor-education/design-system.components';",
92
+ '```',
93
+ '',
94
+ '`SelectDropdownCellRenderer` extends `CustomCellRendererProps` with `SelectDropdownInputProps`.',
95
+ '`options` and `placeholder` are the most commonly used extra props.',
96
+ ].join('\n');
97
+
98
+ const RELATED_COMPONENTS = [
99
+ '## Related components',
100
+ '',
101
+ '[Table](?path=/docs/components-table--docs) · [SelectDropdown](?path=/docs/components-selectdropdown--docs) · [InlineTextCellRenderer](?path=/docs/components-table-cellrenderers-inlinetextcellrenderer--docs)',
102
+ ].join('\n');
103
+
104
+ const PROPS_INTRO = 'The preview below shows `SelectDropdownCellRenderer` with a set of status options. The dropdown can be opened by clicking it — the Enter-key shortcut requires a live AG Grid API and is a no-op in this preview.';
105
+
106
+ // ---------------------------------------------------------------------------
107
+ // Custom DocsPage
108
+ // ---------------------------------------------------------------------------
109
+
110
+ function SelectDropdownCellRendererDocsPage() {
111
+ return (
112
+ <>
113
+ <Title />
114
+ <Subtitle />
115
+ <Markdown>{DESCRIPTION_INTRO}</Markdown>
116
+ <DocHeading>Interactive example</DocHeading>
117
+ <Markdown>{PROPS_INTRO}</Markdown>
118
+ <DocPrimary />
119
+ <Controls />
120
+ <DocHeading>Usage guidance</DocHeading>
121
+ <Markdown>{USAGE_GUIDANCE}</Markdown>
122
+ <DocHeading>Developer notes</DocHeading>
123
+ <Markdown>{DEVELOPER_NOTES}</Markdown>
124
+ <DocHeading>Examples</DocHeading>
125
+ <Stories title="" />
126
+ <Markdown>{RELATED_COMPONENTS}</Markdown>
127
+ </>
128
+ );
129
+ }
130
+
131
+ // ---------------------------------------------------------------------------
132
+ // Meta
133
+ // ---------------------------------------------------------------------------
134
+
135
+ const MOCK_API = {
136
+ addEventListener: () => {},
137
+ removeEventListener: () => {},
138
+ } as unknown as GridApi;
139
+
140
+ const MOCK_CELL_PROPS = {} as unknown as CustomCellRendererProps;
141
+
142
+ const STATUS_OPTIONS = [
143
+ { label: 'Active', value: 'active' },
144
+ { label: 'Inactive', value: 'inactive' },
145
+ { label: 'Pending', value: 'pending' },
146
+ ];
147
+
148
+ const meta = {
149
+ title: 'Components/Table/CellRenderers/SelectDropdownCellRenderer',
150
+ component: SelectDropdownCellRenderer,
151
+ tags: ['autodocs'],
152
+ parameters: {
153
+ layout: 'padded',
154
+ docs: { page: SelectDropdownCellRendererDocsPage },
155
+ },
156
+ argTypes: {
157
+ value: {
158
+ control: false,
159
+ description: 'The currently selected option value. Used to set the initial selection in the `SelectDropdown`.',
160
+ table: {
161
+ type: { summary: 'string | number | null | undefined' },
162
+ },
163
+ },
164
+ options: {
165
+ control: false,
166
+ description: 'The list of options to display in the dropdown. Passed via `cellRendererParams` in the column definition.',
167
+ table: {
168
+ type: { summary: 'Array<{ label: string; value: string | number }>' },
169
+ defaultValue: { summary: '[]' },
170
+ },
171
+ },
172
+ placeholder: {
173
+ control: false,
174
+ description: 'Placeholder text shown when no option is selected.',
175
+ table: {
176
+ type: { summary: 'string' },
177
+ defaultValue: { summary: '"Select"' },
178
+ },
179
+ },
180
+ api: {
181
+ control: false,
182
+ description: 'AG Grid API. Required for the Enter-key shortcut that opens the dropdown. Provided automatically by AG Grid.',
183
+ table: { type: { summary: 'GridApi' } },
184
+ },
185
+ node: {
186
+ control: false,
187
+ description: 'AG Grid row node. The renderer calls `node.setDataValue` on option selection.',
188
+ table: { type: { summary: 'IRowNode' } },
189
+ },
190
+ },
191
+ } satisfies Meta<typeof SelectDropdownCellRenderer>;
192
+
193
+ export default meta;
194
+ type Story = StoryObj<typeof SelectDropdownCellRenderer>;
195
+
196
+ // ---------------------------------------------------------------------------
197
+ // Helper: attach a per-story description to docs
198
+ // ---------------------------------------------------------------------------
199
+
200
+ const withDescription = (story: Story, description: string): Story => ({
201
+ ...story,
202
+ parameters: {
203
+ ...story.parameters,
204
+ docs: { ...story.parameters?.docs, description: { story: description } },
205
+ },
206
+ });
207
+
208
+ // ---------------------------------------------------------------------------
209
+ // Stories
210
+ // ---------------------------------------------------------------------------
211
+
212
+ export const Default: Story = withDescription(
213
+ {
214
+ parameters: { controls: { disable: true } },
215
+ render: () => (
216
+ <SelectDropdownCellRenderer
217
+ {...MOCK_CELL_PROPS}
218
+ api={MOCK_API}
219
+ value=""
220
+ options={STATUS_OPTIONS}
221
+ placeholder="Select status"
222
+ node={{ setDataValue: () => {} } as unknown as CustomCellRendererProps['node']}
223
+ column={{} as CustomCellRendererProps['column']}
224
+ />
225
+ ),
226
+ },
227
+ 'No selection — the `SelectDropdown` shows the placeholder text. Click to open the dropdown and select an option.',
228
+ );
229
+
230
+ export const WithSelection: Story = withDescription(
231
+ {
232
+ parameters: {
233
+ controls: { disable: true },
234
+ docs: {
235
+ source: {
236
+ language: 'tsx',
237
+ code: `
238
+ import { Table } from '@arbor-education/design-system.components';
239
+
240
+ const colDefs = [
241
+ {
242
+ field: 'status',
243
+ headerName: 'Status',
244
+ cellRenderer: 'dsSelectDropdownCellRenderer',
245
+ cellRendererParams: {
246
+ options: [
247
+ { label: 'Active', value: 'active' },
248
+ { label: 'Inactive', value: 'inactive' },
249
+ { label: 'Pending', value: 'pending' },
250
+ ],
251
+ placeholder: 'Select status',
252
+ },
253
+ },
254
+ ];
255
+ `.trim(),
256
+ },
257
+ },
258
+ },
259
+ render: () => (
260
+ <SelectDropdownCellRenderer
261
+ {...MOCK_CELL_PROPS}
262
+ api={MOCK_API}
263
+ value="active"
264
+ options={STATUS_OPTIONS}
265
+ placeholder="Select status"
266
+ node={{ setDataValue: () => {} } as unknown as CustomCellRendererProps['node']}
267
+ column={{} as CustomCellRendererProps['column']}
268
+ />
269
+ ),
270
+ },
271
+ 'Pre-selected with `value="active"`. The `SelectDropdown` initialises with the matching option selected.',
272
+ );
273
+
274
+ export const Disabled: Story = withDescription(
275
+ {
276
+ parameters: { controls: { disable: true } },
277
+ render: () => (
278
+ <SelectDropdownCellRenderer
279
+ {...MOCK_CELL_PROPS}
280
+ api={MOCK_API}
281
+ value="active"
282
+ options={STATUS_OPTIONS}
283
+ placeholder="Select status"
284
+ disabled={true}
285
+ node={{ setDataValue: () => {} } as unknown as CustomCellRendererProps['node']}
286
+ column={{} as CustomCellRendererProps['column']}
287
+ />
288
+ ),
289
+ },
290
+ 'Pass `disabled: true` via `cellRendererParams` to prevent the user from changing the selection for specific rows.',
291
+ );
292
+
293
+ const SELECT_IN_TABLE_DATA = [
294
+ { name: 'Alice Johnson', status: 'active' },
295
+ { name: 'Bob Smith', status: 'inactive' },
296
+ { name: 'Charlie Brown', status: 'pending' },
297
+ { name: 'Diana Prince', status: 'active' },
298
+ ];
299
+
300
+ export const InATable: Story = withDescription(
301
+ {
302
+ parameters: {
303
+ controls: { disable: true },
304
+ docs: {
305
+ source: {
306
+ language: 'tsx',
307
+ code: `
308
+ import { Table } from '@arbor-education/design-system.components';
309
+
310
+ const rowData = [
311
+ { name: 'Alice Johnson', status: 'active' },
312
+ { name: 'Bob Smith', status: 'inactive' },
313
+ { name: 'Charlie Brown', status: 'pending' },
314
+ { name: 'Diana Prince', status: 'active' },
315
+ ];
316
+
317
+ const statusOptions = [
318
+ { label: 'Active', value: 'active' },
319
+ { label: 'Inactive', value: 'inactive' },
320
+ { label: 'Pending', value: 'pending' },
321
+ ];
322
+
323
+ function SelectDropdownCellRendererExample() {
324
+ return (
325
+ <Table
326
+ rowData={rowData}
327
+ columnDefs={[
328
+ { field: 'name', headerName: 'Name', flex: 2 },
329
+ {
330
+ field: 'status',
331
+ headerName: 'Status',
332
+ flex: 1,
333
+ editable: false,
334
+ cellRenderer: 'dsSelectDropdownCellRenderer',
335
+ cellRendererParams: { options: statusOptions },
336
+ },
337
+ ]}
338
+ defaultColDef={{ flex: 1, minWidth: 120 }}
339
+ domLayout="autoHeight"
340
+ />
341
+ );
342
+ }
343
+
344
+ export default SelectDropdownCellRendererExample;
345
+ `.trim(),
346
+ },
347
+ },
348
+ },
349
+ render: () => (
350
+ <Table
351
+ rowData={SELECT_IN_TABLE_DATA}
352
+ columnDefs={[
353
+ { field: 'name', headerName: 'Name', flex: 2 },
354
+ {
355
+ field: 'status',
356
+ headerName: 'Status',
357
+ flex: 1,
358
+ editable: false,
359
+ cellRenderer: 'dsSelectDropdownCellRenderer',
360
+ cellRendererParams: { options: STATUS_OPTIONS },
361
+ },
362
+ ]}
363
+ defaultColDef={{ flex: 1, minWidth: 120 }}
364
+ domLayout="autoHeight"
365
+ />
366
+ ),
367
+ },
368
+ '`dsSelectDropdownCellRenderer` wired up inside a full `Table`. Click a Status dropdown to select a new value — the selection is committed to the row via `node.setDataValue`. Press Enter in a focused Status cell to open the dropdown via keyboard.',
369
+ );