@arbor-education/design-system.components 0.14.0 → 0.16.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.
- package/.gather/skills/write-stories/SKILL.md +207 -271
- package/.storybook/preview.ts +5 -0
- package/CHANGELOG.md +27 -0
- package/README.md +8 -0
- package/component-library.md +144 -13
- package/dist/components/articleCard/ArticleCard.stories.d.ts +137 -11
- package/dist/components/articleCard/ArticleCard.stories.d.ts.map +1 -1
- package/dist/components/articleCard/ArticleCard.stories.js +358 -91
- package/dist/components/articleCard/ArticleCard.stories.js.map +1 -1
- package/dist/components/avatar/Avatar.stories.d.ts +6 -6
- package/dist/components/avatar/Avatar.stories.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.stories.js +393 -49
- package/dist/components/avatar/Avatar.stories.js.map +1 -1
- package/dist/components/avatarGroup/AvatarGroup.stories.d.ts +9 -7
- package/dist/components/avatarGroup/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/components/avatarGroup/AvatarGroup.stories.js +688 -65
- package/dist/components/avatarGroup/AvatarGroup.stories.js.map +1 -1
- package/dist/components/banner/Banner.stories.d.ts.map +1 -1
- package/dist/components/banner/Banner.stories.js +7 -3
- package/dist/components/banner/Banner.stories.js.map +1 -1
- package/dist/components/card/Card.stories.d.ts +105 -4
- package/dist/components/card/Card.stories.d.ts.map +1 -1
- package/dist/components/card/Card.stories.js +336 -18
- package/dist/components/card/Card.stories.js.map +1 -1
- package/dist/components/combobox/Combobox.stories.d.ts +134 -21
- package/dist/components/combobox/Combobox.stories.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.stories.js +676 -175
- package/dist/components/combobox/Combobox.stories.js.map +1 -1
- package/dist/components/datePicker/DatePicker.stories.d.ts +119 -27
- package/dist/components/datePicker/DatePicker.stories.d.ts.map +1 -1
- package/dist/components/datePicker/DatePicker.stories.js +575 -47
- package/dist/components/datePicker/DatePicker.stories.js.map +1 -1
- package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts +155 -39
- package/dist/components/dateTimePicker/DateTimePicker.stories.d.ts.map +1 -1
- package/dist/components/dateTimePicker/DateTimePicker.stories.js +674 -103
- package/dist/components/dateTimePicker/DateTimePicker.stories.js.map +1 -1
- package/dist/components/editableText/EditableText.stories.d.ts +53 -12
- package/dist/components/editableText/EditableText.stories.d.ts.map +1 -1
- package/dist/components/editableText/EditableText.stories.js +401 -64
- package/dist/components/editableText/EditableText.stories.js.map +1 -1
- package/dist/components/formField/FormField.d.ts +4 -0
- package/dist/components/formField/FormField.d.ts.map +1 -1
- package/dist/components/formField/FormField.js +2 -1
- package/dist/components/formField/FormField.js.map +1 -1
- package/dist/components/formField/FormField.test.js +5 -0
- package/dist/components/formField/FormField.test.js.map +1 -1
- package/dist/components/formField/fieldset/Fieldset.stories.d.ts +56 -4
- package/dist/components/formField/fieldset/Fieldset.stories.d.ts.map +1 -1
- package/dist/components/formField/fieldset/Fieldset.stories.js +534 -28
- package/dist/components/formField/fieldset/Fieldset.stories.js.map +1 -1
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts +3 -1
- package/dist/components/formField/inputs/checkbox/CheckboxGroup.d.ts.map +1 -1
- package/dist/components/formField/inputs/checkbox/CheckboxInput.js +1 -1
- package/dist/components/formField/inputs/checkbox/CheckboxInput.js.map +1 -1
- package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.d.ts +95 -1
- package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.js +386 -9
- package/dist/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.js.map +1 -1
- package/dist/components/formField/inputs/number/NumberInput.d.ts.map +1 -1
- package/dist/components/formField/inputs/number/NumberInput.js +14 -2
- package/dist/components/formField/inputs/number/NumberInput.js.map +1 -1
- package/dist/components/formField/inputs/number/NumberInput.test.js +21 -0
- package/dist/components/formField/inputs/number/NumberInput.test.js.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts +6 -2
- package/dist/components/formField/inputs/radio/RadioButtonGroup.d.ts.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonGroup.js.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js +61 -49
- package/dist/components/formField/inputs/radio/RadioButtonInput.stories.js.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts +188 -166
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js +821 -160
- package/dist/components/formField/inputs/selectDropdown/SelectDropdown.stories.js.map +1 -1
- package/dist/components/formField/inputs/time/TimeInput.stories.d.ts +176 -22
- package/dist/components/formField/inputs/time/TimeInput.stories.d.ts.map +1 -1
- package/dist/components/formField/inputs/time/TimeInput.stories.js +851 -92
- package/dist/components/formField/inputs/time/TimeInput.stories.js.map +1 -1
- package/dist/components/formField/label/Label.stories.d.ts +54 -5
- package/dist/components/formField/label/Label.stories.d.ts.map +1 -1
- package/dist/components/formField/label/Label.stories.js +238 -4
- package/dist/components/formField/label/Label.stories.js.map +1 -1
- package/dist/components/icoText/IcoText.stories.d.ts +32 -6
- package/dist/components/icoText/IcoText.stories.d.ts.map +1 -1
- package/dist/components/icoText/IcoText.stories.js +309 -14
- package/dist/components/icoText/IcoText.stories.js.map +1 -1
- package/dist/components/kpiCard/KPICard.stories.d.ts +100 -2
- package/dist/components/kpiCard/KPICard.stories.d.ts.map +1 -1
- package/dist/components/kpiCard/KPICard.stories.js +354 -10
- package/dist/components/kpiCard/KPICard.stories.js.map +1 -1
- package/dist/components/kvpList/KVPList.stories.d.ts +57 -4
- package/dist/components/kvpList/KVPList.stories.d.ts.map +1 -1
- package/dist/components/kvpList/KVPList.stories.js +403 -10
- package/dist/components/kvpList/KVPList.stories.js.map +1 -1
- package/dist/components/modal/Modal.stories.d.ts +113 -9
- package/dist/components/modal/Modal.stories.d.ts.map +1 -1
- package/dist/components/modal/Modal.stories.js +633 -13
- package/dist/components/modal/Modal.stories.js.map +1 -1
- package/dist/components/modal/modalManager/ModalManager.stories.d.ts +34 -10
- package/dist/components/modal/modalManager/ModalManager.stories.d.ts.map +1 -1
- package/dist/components/modal/modalManager/ModalManager.stories.js +463 -85
- package/dist/components/modal/modalManager/ModalManager.stories.js.map +1 -1
- package/dist/components/pill/Pill.d.ts.map +1 -1
- package/dist/components/pill/Pill.js +1 -1
- package/dist/components/pill/Pill.js.map +1 -1
- package/dist/components/pill/Pill.stories.d.ts.map +1 -1
- package/dist/components/pill/Pill.stories.js +11 -13
- package/dist/components/pill/Pill.stories.js.map +1 -1
- package/dist/components/row/Row.stories.d.ts +1 -2
- package/dist/components/row/Row.stories.d.ts.map +1 -1
- package/dist/components/row/Row.stories.js +360 -50
- package/dist/components/row/Row.stories.js.map +1 -1
- package/dist/components/searchBar/SearchBar.stories.d.ts +52 -4
- package/dist/components/searchBar/SearchBar.stories.d.ts.map +1 -1
- package/dist/components/searchBar/SearchBar.stories.js +428 -36
- package/dist/components/searchBar/SearchBar.stories.js.map +1 -1
- package/dist/components/section/Section.stories.d.ts +11 -41
- package/dist/components/section/Section.stories.d.ts.map +1 -1
- package/dist/components/section/Section.stories.js +494 -56
- package/dist/components/section/Section.stories.js.map +1 -1
- package/dist/components/singleUser/SingleUser.stories.d.ts +5 -4
- package/dist/components/singleUser/SingleUser.stories.d.ts.map +1 -1
- package/dist/components/singleUser/SingleUser.stories.js +303 -31
- package/dist/components/singleUser/SingleUser.stories.js.map +1 -1
- package/dist/components/slideoverManager/SlideoverManager.stories.d.ts +32 -11
- package/dist/components/slideoverManager/SlideoverManager.stories.d.ts.map +1 -1
- package/dist/components/slideoverManager/SlideoverManager.stories.js +380 -84
- package/dist/components/slideoverManager/SlideoverManager.stories.js.map +1 -1
- package/dist/components/table/DSDefaultColDef.d.ts.map +1 -1
- package/dist/components/table/DSDefaultColDef.js +4 -3
- package/dist/components/table/DSDefaultColDef.js.map +1 -1
- package/dist/components/table/Table.d.ts +7 -1
- package/dist/components/table/Table.d.ts.map +1 -1
- package/dist/components/table/Table.js +12 -5
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/Table.stories.d.ts +3 -0
- package/dist/components/table/Table.stories.d.ts.map +1 -1
- package/dist/components/table/Table.stories.js +445 -3
- package/dist/components/table/Table.stories.js.map +1 -1
- package/dist/components/table/Table.test.js +184 -0
- package/dist/components/table/Table.test.js.map +1 -1
- package/dist/components/table/TableFooter.stories.d.ts +49 -0
- package/dist/components/table/TableFooter.stories.d.ts.map +1 -0
- package/dist/components/table/TableFooter.stories.js +137 -0
- package/dist/components/table/TableFooter.stories.js.map +1 -0
- package/dist/components/table/TableHeader.stories.d.ts +93 -0
- package/dist/components/table/TableHeader.stories.d.ts.map +1 -0
- package/dist/components/table/TableHeader.stories.js +176 -0
- package/dist/components/table/TableHeader.stories.js.map +1 -0
- package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts +44 -0
- package/dist/components/table/cellEditors/DateCellEditor.stories.d.ts.map +1 -0
- package/dist/components/table/cellEditors/DateCellEditor.stories.js +186 -0
- package/dist/components/table/cellEditors/DateCellEditor.stories.js.map +1 -0
- package/dist/components/table/cellEditors/NumberCellEditor.d.ts +13 -0
- package/dist/components/table/cellEditors/NumberCellEditor.d.ts.map +1 -0
- package/dist/components/table/cellEditors/NumberCellEditor.js +35 -0
- package/dist/components/table/cellEditors/NumberCellEditor.js.map +1 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts +40 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js +209 -0
- package/dist/components/table/cellRenderers/BooleanCellRenderer.stories.js.map +1 -0
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts +48 -0
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js +244 -0
- package/dist/components/table/cellRenderers/ButtonCellRenderer.stories.js.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.d.ts.map +1 -1
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.js +3 -1
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.js.map +1 -1
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts +64 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js +241 -0
- package/dist/components/table/cellRenderers/CheckboxCellRenderer.stories.js.map +1 -0
- package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.d.ts +55 -0
- package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.js +245 -0
- package/dist/components/table/cellRenderers/DefaultCellRenderer.stories.js.map +1 -0
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts +67 -0
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js +221 -0
- package/dist/components/table/cellRenderers/InlineTextCellRenderer.stories.js.map +1 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts +75 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.d.ts.map +1 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js +270 -0
- package/dist/components/table/cellRenderers/SelectDropdownCellRenderer.stories.js.map +1 -0
- package/dist/components/table/columnFilters/BooleanFilter.stories.d.ts +57 -0
- package/dist/components/table/columnFilters/BooleanFilter.stories.d.ts.map +1 -0
- package/dist/components/table/columnFilters/BooleanFilter.stories.js +198 -0
- package/dist/components/table/columnFilters/BooleanFilter.stories.js.map +1 -0
- package/dist/components/table/columnFilters/TimeFilter.stories.d.ts +58 -0
- package/dist/components/table/columnFilters/TimeFilter.stories.d.ts.map +1 -0
- package/dist/components/table/columnFilters/TimeFilter.stories.js +207 -0
- package/dist/components/table/columnFilters/TimeFilter.stories.js.map +1 -0
- package/dist/components/table/pagination/PaginationPanel.stories.d.ts +113 -0
- package/dist/components/table/pagination/PaginationPanel.stories.d.ts.map +1 -0
- package/dist/components/table/pagination/PaginationPanel.stories.js +272 -0
- package/dist/components/table/pagination/PaginationPanel.stories.js.map +1 -0
- package/dist/components/table/tableControls/TableControls.stories.d.ts +151 -0
- package/dist/components/table/tableControls/TableControls.stories.d.ts.map +1 -0
- package/dist/components/table/tableControls/TableControls.stories.js +356 -0
- package/dist/components/table/tableControls/TableControls.stories.js.map +1 -0
- package/dist/components/table/tableControls/TableSettingsDropdown.d.ts +27 -1
- package/dist/components/table/tableControls/TableSettingsDropdown.d.ts.map +1 -1
- package/dist/components/table/tableControls/TableSettingsDropdown.js +53 -26
- package/dist/components/table/tableControls/TableSettingsDropdown.js.map +1 -1
- package/dist/components/table/tableControls/TableSettingsDropdown.test.d.ts +2 -0
- package/dist/components/table/tableControls/TableSettingsDropdown.test.d.ts.map +1 -0
- package/dist/components/table/tableControls/TableSettingsDropdown.test.js +178 -0
- package/dist/components/table/tableControls/TableSettingsDropdown.test.js.map +1 -0
- package/dist/components/tabs/Tabs.stories.d.ts +22 -4
- package/dist/components/tabs/Tabs.stories.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.stories.js +398 -22
- package/dist/components/tabs/Tabs.stories.js.map +1 -1
- package/dist/components/tabs/TabsItem.stories.d.ts +54 -1
- package/dist/components/tabs/TabsItem.stories.d.ts.map +1 -1
- package/dist/components/tabs/TabsItem.stories.js +61 -9
- package/dist/components/tabs/TabsItem.stories.js.map +1 -1
- package/dist/components/toast/Toast.stories.d.ts +103 -10
- package/dist/components/toast/Toast.stories.d.ts.map +1 -1
- package/dist/components/toast/Toast.stories.js +409 -47
- package/dist/components/toast/Toast.stories.js.map +1 -1
- package/dist/components/toggle/Toggle.stories.d.ts +61 -46
- package/dist/components/toggle/Toggle.stories.d.ts.map +1 -1
- package/dist/components/toggle/Toggle.stories.js +311 -122
- package/dist/components/toggle/Toggle.stories.js.map +1 -1
- package/dist/components/tooltip/Tooltip.stories.d.ts +78 -6
- package/dist/components/tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/components/tooltip/Tooltip.stories.js +413 -7
- package/dist/components/tooltip/Tooltip.stories.js.map +1 -1
- package/dist/components/tooltip/TooltipWrapper.stories.d.ts +71 -7
- package/dist/components/tooltip/TooltipWrapper.stories.d.ts.map +1 -1
- package/dist/components/tooltip/TooltipWrapper.stories.js +238 -10
- package/dist/components/tooltip/TooltipWrapper.stories.js.map +1 -1
- package/dist/index.css +27 -0
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/PopupParentContext.stories.d.ts +17 -0
- package/dist/utils/PopupParentContext.stories.d.ts.map +1 -0
- package/dist/utils/PopupParentContext.stories.js +266 -0
- package/dist/utils/PopupParentContext.stories.js.map +1 -0
- package/dist/utils/getDefaultPopupParent.d.ts.map +1 -1
- package/dist/utils/getDefaultPopupParent.js +6 -0
- package/dist/utils/getDefaultPopupParent.js.map +1 -1
- package/package.json +1 -1
- package/src/components/articleCard/ArticleCard.stories.tsx +524 -111
- package/src/components/avatar/Avatar.stories.tsx +504 -59
- package/src/components/avatarGroup/AvatarGroup.stories.tsx +977 -175
- package/src/components/banner/Banner.stories.tsx +7 -3
- package/src/components/card/Card.stories.tsx +466 -36
- package/src/components/combobox/Combobox.stories.tsx +867 -260
- package/src/components/datePicker/DatePicker.stories.tsx +777 -60
- package/src/components/dateTimePicker/DateTimePicker.stories.tsx +910 -132
- package/src/components/editableText/EditableText.stories.tsx +567 -91
- package/src/components/formField/FormField.test.tsx +6 -0
- package/src/components/formField/FormField.tsx +5 -0
- package/src/components/formField/fieldset/Fieldset.stories.tsx +761 -51
- package/src/components/formField/inputs/checkbox/CheckboxGroup.tsx +1 -1
- package/src/components/formField/inputs/checkbox/CheckboxInput.tsx +1 -1
- package/src/components/formField/inputs/colourPickerDropdown/ColourPickerDropdown.stories.tsx +504 -11
- package/src/components/formField/inputs/number/NumberInput.test.tsx +28 -0
- package/src/components/formField/inputs/number/NumberInput.tsx +15 -0
- package/src/components/formField/inputs/radio/RadioButtonGroup.tsx +17 -4
- package/src/components/formField/inputs/radio/RadioButtonInput.stories.tsx +71 -59
- package/src/components/formField/inputs/selectDropdown/SelectDropdown.stories.tsx +1079 -168
- package/src/components/formField/inputs/time/TimeInput.stories.tsx +1140 -104
- package/src/components/formField/label/Label.stories.tsx +317 -8
- package/src/components/icoText/IcoText.stories.tsx +442 -31
- package/src/components/kpiCard/KPICard.stories.tsx +475 -30
- package/src/components/kvpList/KVPList.stories.tsx +593 -26
- package/src/components/modal/Modal.stories.tsx +963 -26
- package/src/components/modal/modalManager/ModalManager.stories.tsx +612 -454
- package/src/components/pill/Pill.stories.tsx +11 -13
- package/src/components/pill/Pill.tsx +1 -0
- package/src/components/row/Row.stories.tsx +474 -58
- package/src/components/searchBar/SearchBar.stories.tsx +570 -38
- package/src/components/section/Section.stories.tsx +723 -70
- package/src/components/singleUser/SingleUser.stories.tsx +393 -34
- package/src/components/slideoverManager/SlideoverManager.stories.tsx +572 -342
- package/src/components/table/DSDefaultColDef.ts +25 -5
- package/src/components/table/Table.stories.tsx +504 -3
- package/src/components/table/Table.test.tsx +255 -0
- package/src/components/table/Table.tsx +15 -2
- package/src/components/table/TableFooter.stories.tsx +196 -0
- package/src/components/table/TableHeader.stories.tsx +251 -0
- package/src/components/table/cellEditors/DateCellEditor.stories.tsx +245 -0
- package/src/components/table/cellEditors/NumberCellEditor.tsx +83 -0
- package/src/components/table/cellEditors/numberCellEditor.scss +11 -0
- package/src/components/table/cellRenderers/BooleanCellRenderer.stories.tsx +278 -0
- package/src/components/table/cellRenderers/ButtonCellRenderer.stories.tsx +333 -0
- package/src/components/table/cellRenderers/CheckboxCellRenderer.stories.tsx +337 -0
- package/src/components/table/cellRenderers/CheckboxCellRenderer.tsx +5 -1
- package/src/components/table/cellRenderers/DefaultCellRenderer.stories.tsx +342 -0
- package/src/components/table/cellRenderers/InlineTextCellRenderer.stories.tsx +292 -0
- package/src/components/table/cellRenderers/SelectDropdownCellRenderer.stories.tsx +369 -0
- package/src/components/table/columnFilters/BooleanFilter.stories.tsx +268 -0
- package/src/components/table/columnFilters/TimeFilter.stories.tsx +281 -0
- package/src/components/table/pagination/PaginationPanel.stories.tsx +327 -0
- package/src/components/table/table.scss +11 -0
- package/src/components/table/tableControls/TableControls.stories.tsx +415 -0
- package/src/components/table/tableControls/TableSettingsDropdown.test.tsx +207 -0
- package/src/components/table/tableControls/TableSettingsDropdown.tsx +103 -39
- package/src/components/tabs/Tabs.stories.tsx +540 -60
- package/src/components/tabs/TabsItem.stories.tsx +82 -8
- package/src/components/toast/Toast.stories.tsx +539 -77
- package/src/components/toggle/Toggle.stories.tsx +371 -135
- package/src/components/tooltip/Tooltip.stories.tsx +606 -15
- package/src/components/tooltip/TooltipWrapper.stories.tsx +348 -12
- package/src/docs/Contributing.mdx +241 -0
- package/src/docs/UsingComponents.mdx +93 -0
- package/src/docs/Welcome.mdx +68 -0
- package/src/global.scss +7 -0
- package/src/index.scss +1 -0
- package/src/index.ts +3 -2
- package/src/utils/PopupParentContext.stories.tsx +367 -0
- package/src/utils/getDefaultPopupParent.ts +6 -0
- package/.ralph/storybook-upgrade/knowledge.md +0 -308
- package/.ralph/storybook-upgrade/prd.json +0 -777
- package/.ralph/storybook-upgrade/progress.md +0 -342
- package/src/components/table/TableWIP.mdx +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: write-stories
|
|
3
|
-
description: Write comprehensive,
|
|
3
|
+
description: Write comprehensive, production-quality Storybook stories for Arbor design system components. Fetches designer guidance from Confluence, enlists the full Golden Girls team, and produces BOMBASS documentation that teaches consumers exactly how and when to use each component.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Write Storybook Stories
|
|
@@ -11,11 +11,11 @@ AROOOOO HUNNI!! 🐺💖 Time to write the most EXCELLENT, most BODACIOUS Storyb
|
|
|
11
11
|
|
|
12
12
|
Write **comprehensive, production-quality Storybook stories** for a given Arbor design system component that:
|
|
13
13
|
|
|
14
|
-
- ✅
|
|
15
|
-
- ✅ Include a
|
|
16
|
-
- ✅ Define `argTypes` for all key props so the **
|
|
14
|
+
- ✅ Use the **mandatory custom docs.page format** (see below — NOT plain autodocs)
|
|
15
|
+
- ✅ Include a custom `DocsPage` component with the correct TOC structure
|
|
16
|
+
- ✅ Define `argTypes` for all key props so the **Controls** panel is always populated
|
|
17
17
|
- ✅ Cover every variant, size, and state the component supports
|
|
18
|
-
- ✅ Include per-story descriptions
|
|
18
|
+
- ✅ Include per-story descriptions via the `withDescription` helper
|
|
19
19
|
- ✅ Incorporate designer guidance fetched directly from Confluence
|
|
20
20
|
- ✅ Show interactive examples for components with complex behaviour (modals, dropdowns, etc.)
|
|
21
21
|
- ✅ Link related components using Storybook story paths so consumers can navigate the docs
|
|
@@ -23,11 +23,16 @@ Write **comprehensive, production-quality Storybook stories** for a given Arbor
|
|
|
23
23
|
|
|
24
24
|
**Output**: An updated (or new) `.stories.tsx` file at the component's existing location.
|
|
25
25
|
|
|
26
|
-
>
|
|
26
|
+
> **⚠️ MANDATORY DOCS FORMAT — READ THIS BEFORE DOING ANYTHING ELSE**
|
|
27
27
|
>
|
|
28
|
-
>
|
|
28
|
+
> ALL stories in this codebase use a **custom `docs.page` component** — NOT the plain autodocs format.
|
|
29
|
+
> The canonical reference file is `src/components/progress/Progress.stories.tsx`. READ IT before writing any stories.
|
|
29
30
|
>
|
|
30
|
-
>
|
|
31
|
+
> The required page structure (TOC sections the user expects to see):
|
|
32
|
+
> **Interactive example → Usage guidance → Developer notes → Examples → Related components**
|
|
33
|
+
>
|
|
34
|
+
> Do NOT use `parameters.docs.description.component` as a single blob. Do NOT omit the `docs.page` override.
|
|
35
|
+
> Every single stories file must have the `XxxDocsPage` function and `docs: { page: XxxDocsPage }` in meta.
|
|
31
36
|
|
|
32
37
|
---
|
|
33
38
|
|
|
@@ -113,7 +118,7 @@ Look up designer guidance for this component using the Atlassian MCP tools. Use
|
|
|
113
118
|
|
|
114
119
|
### Step 4 — Read the Component Library Manifest
|
|
115
120
|
|
|
116
|
-
Read
|
|
121
|
+
Read `.claude/component-library.md` for a comprehensive overview of the component's role in the design system, use cases, and known relationships to other components.
|
|
117
122
|
|
|
118
123
|
If it contains guidance about when to use this component vs. alternatives, note it — it goes into the story description.
|
|
119
124
|
|
|
@@ -212,247 +217,149 @@ TARGET FILE PATH: [src/components/{componentName}/{ComponentName}.stories.tsx]
|
|
|
212
217
|
|
|
213
218
|
REQUIREMENTS — please follow ALL of these:
|
|
214
219
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
> **Built on [Radix UI ComponentName](https://www.radix-ui.com/primitives/docs/components/component-name).**
|
|
231
|
-
> Props not listed above are passed through to the Radix primitive — see the Radix docs for the full API.
|
|
220
|
+
**⚠️ BEFORE YOU WRITE A SINGLE LINE — READ `src/components/progress/Progress.stories.tsx`.**
|
|
221
|
+
That is the canonical reference. Every stories file in this codebase follows that format. No exceptions.
|
|
222
|
+
|
|
223
|
+
1. STORYBOOK IMPORT:
|
|
224
|
+
```tsx
|
|
225
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
226
|
+
import {
|
|
227
|
+
Controls,
|
|
228
|
+
Heading as DocHeading,
|
|
229
|
+
Markdown,
|
|
230
|
+
Primary as DocPrimary,
|
|
231
|
+
Stories,
|
|
232
|
+
Subtitle,
|
|
233
|
+
Title,
|
|
234
|
+
} from '@storybook/addon-docs/blocks';
|
|
232
235
|
```
|
|
233
|
-
Only include the "Props not listed above" sentence when the component actually does prop pass-through. If the component only uses Radix internally without exposing its props, just link to Radix for context (e.g. so consumers understand keyboard/focus behaviour).
|
|
234
|
-
|
|
235
|
-
Format it in markdown, keep it warm and informative. Consumers should finish reading it and know EXACTLY what this component is for.
|
|
236
|
-
|
|
237
|
-
4. STORY DESCRIPTIONS: Every single story MUST have a description in parameters.docs.description.story that explains:
|
|
238
|
-
- What this story demonstrates
|
|
239
|
-
- When you'd choose this variant or configuration in a real product
|
|
240
|
-
|
|
241
|
-
Use the withDescription helper pattern from Badge.stories.tsx (see below).
|
|
242
|
-
|
|
243
|
-
5. COVER EVERY VARIANT/STATE: Write a dedicated story for each variant, size, and significant state:
|
|
244
|
-
- All enum values (e.g., every Banner level, every Button variant)
|
|
245
|
-
- Disabled state
|
|
246
|
-
- Error state (if applicable)
|
|
247
|
-
- Loading state (if applicable)
|
|
248
|
-
- With and without optional content (e.g., icon, title, button)
|
|
249
|
-
- Edge cases (very long text, empty state, etc.)
|
|
250
|
-
|
|
251
|
-
6. COMPOSITE STORIES: Include at least one 'AllVariants' or 'Overview' story using a render function that shows all variants side-by-side. This helps consumers see the full palette at a glance.
|
|
252
|
-
|
|
253
|
-
7. INTERACTIVE STORIES: For components with complex behaviour (modals, dropdowns, controlled inputs), use render functions with useState to show real interactive behaviour.
|
|
254
|
-
|
|
255
|
-
8. CONTENT GUIDELINES STORY: If Confluence specifies content length limits or copy guidelines (like Toast: max 2 lines, ideally 1), include a story that demonstrates both the ideal case AND what NOT to do (using a 'DoNotUse' or 'ContentGuidelines' story with inline comments).
|
|
256
|
-
|
|
257
|
-
9. ARGTYPE DESCRIPTIONS: `argTypes` is MANDATORY and must be defined in the meta for every key prop. Each entry needs:
|
|
258
|
-
- `description`: plain English explanation of the prop's purpose
|
|
259
|
-
- `control`: the right control type (`'boolean'`, `'select'`, `'text'`, `false` to disable)
|
|
260
|
-
- `table.type.summary`: the TypeScript type as a string
|
|
261
|
-
- `table.defaultValue.summary`: the default value as a string
|
|
262
|
-
- `options`: array of allowed values for `control: 'select'` props
|
|
263
|
-
|
|
264
|
-
This is what populates the **Props (Controls)** section in the global docs template. If `argTypes` is empty, consumers see an empty table. Every important prop must be documented. For compound components, add a `children` entry with a note pointing to sub-component prop documentation in the stories below.
|
|
265
|
-
|
|
266
|
-
10. INTERACTIVE DEFAULT STORY: The `Default` story MUST use `render: (args) => <Component {...args} />` and declare `args` with sensible defaults. This is what wires the `Controls` block to the live canvas — without this, controls exist in the table but don't change anything on screen.
|
|
267
|
-
|
|
268
|
-
Do **NOT** add an explicit `source.code` block to the Default story — Storybook auto-generates the code from the current args so the code panel updates live when the user tweaks controls. This is the intended UX. If Storybook uses the wrong internal name (e.g. `BannerRoot` instead of `Banner` because the component uses `Object.assign`), use `source.transform` to patch the name without breaking live updates:
|
|
269
|
-
```tsx
|
|
270
|
-
parameters: {
|
|
271
|
-
docs: {
|
|
272
|
-
source: {
|
|
273
|
-
transform: (src: string) => src.replace(/InternalName/g, 'ExportedName'),
|
|
274
|
-
},
|
|
275
|
-
},
|
|
276
|
-
},
|
|
277
|
-
```
|
|
278
236
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
237
|
+
2. CONTENT STRINGS — define these as separate named consts ABOVE everything else:
|
|
238
|
+
- `DESCRIPTION_INTRO` — 1-2 sentence intro + Radix UI link if applicable (blockquote format)
|
|
239
|
+
- `USAGE_GUIDANCE` — `### When to use` bullets + `---` + `### When NOT to use` table
|
|
240
|
+
- `DEVELOPER_NOTES` — `### Critical usage patterns` + `---` + `### Accessibility` + `---` + `### TypeScript types` code block
|
|
241
|
+
- `RELATED_COMPONENTS` — `## Related components` with component links
|
|
242
|
+
- `PROPS_INTRO` — one sentence: `'The preview below is wired to the **Controls** panel — tweak any prop to see the story update in real time.'`
|
|
243
|
+
|
|
244
|
+
3. CUSTOM DOCS PAGE — define a named function component ABOVE the meta:
|
|
245
|
+
```tsx
|
|
246
|
+
function ComponentNameDocsPage() {
|
|
247
|
+
return (
|
|
248
|
+
<>
|
|
249
|
+
<Title />
|
|
250
|
+
<Subtitle />
|
|
251
|
+
<Markdown>{DESCRIPTION_INTRO}</Markdown>
|
|
252
|
+
<DocHeading>Interactive example</DocHeading>
|
|
253
|
+
<Markdown>{PROPS_INTRO}</Markdown>
|
|
254
|
+
<DocPrimary />
|
|
255
|
+
<Controls />
|
|
256
|
+
<DocHeading>Usage guidance</DocHeading>
|
|
257
|
+
<Markdown>{USAGE_GUIDANCE}</Markdown>
|
|
258
|
+
<DocHeading>Developer notes</DocHeading>
|
|
259
|
+
<Markdown>{DEVELOPER_NOTES}</Markdown>
|
|
260
|
+
<DocHeading>Examples</DocHeading>
|
|
261
|
+
<Stories title="" />
|
|
262
|
+
<Markdown>{RELATED_COMPONENTS}</Markdown>
|
|
263
|
+
</>
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
This is NOT optional. This is what produces the correct TOC.
|
|
268
|
+
|
|
269
|
+
4. META — use `satisfies Meta<typeof ComponentName>` and wire the docs page:
|
|
270
|
+
```tsx
|
|
271
|
+
const meta = {
|
|
272
|
+
title: 'Components/ComponentName',
|
|
273
|
+
component: ComponentName,
|
|
274
|
+
tags: ['autodocs'],
|
|
275
|
+
parameters: {
|
|
276
|
+
layout: 'padded',
|
|
277
|
+
docs: { page: ComponentNameDocsPage },
|
|
278
|
+
},
|
|
279
|
+
argTypes: { /* all key props */ },
|
|
280
|
+
} satisfies Meta<typeof ComponentName>;
|
|
281
|
+
```
|
|
282
|
+
Do NOT put `description.component` in parameters.docs — the content is rendered by the Markdown blocks in the DocsPage function.
|
|
283
|
+
|
|
284
|
+
5. ARGTYPES — MANDATORY for every key prop:
|
|
285
|
+
- `description`: plain English (use array of strings joined with space for long descriptions)
|
|
286
|
+
- `control`: appropriate control type or `false` to disable
|
|
287
|
+
- `table.type.summary`: TypeScript type as string
|
|
288
|
+
- `table.defaultValue.summary`: default value as string
|
|
289
|
+
- For callbacks: `action: 'callbackName'`, `control: false`
|
|
290
|
+
|
|
291
|
+
6. STORY TYPE — prefer `type Story = StoryObj<typeof meta>` over `StoryObj<typeof ComponentName>`. The `typeof meta` form is stricter: it picks up `args` and `argTypes` for better type inference.
|
|
292
|
+
|
|
293
|
+
7. WITHDESCRPTION HELPER — include verbatim (copy from Progress.stories.tsx):
|
|
294
|
+
```tsx
|
|
295
|
+
const withDescription = (story: Story, description: string): Story => ({
|
|
296
|
+
...story,
|
|
297
|
+
parameters: {
|
|
298
|
+
...story.parameters,
|
|
299
|
+
docs: { ...story.parameters?.docs, description: { story: description } },
|
|
300
|
+
},
|
|
301
|
+
});
|
|
302
|
+
```
|
|
308
303
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
},
|
|
337
|
-
argTypes: { /* ... */ },
|
|
338
|
-
};
|
|
339
|
-
```
|
|
304
|
+
8. NAMED TEMPLATE COMPONENTS — for ALL stateful or complex stories, define a named function component BEFORE the story exports. No inline `() => {}` with useState. Follow the Progress.stories.tsx pattern exactly:
|
|
305
|
+
```tsx
|
|
306
|
+
const MyStoryTemplate = () => {
|
|
307
|
+
const [state, setState] = useState(...);
|
|
308
|
+
return <Component ... />;
|
|
309
|
+
};
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
9. ALL STORIES use `withDescription(storyObject, 'description')`:
|
|
313
|
+
- `Default` story: `args` + `render: args => <Component {...args} />` — this wires Controls
|
|
314
|
+
- All other stories: `render: TemplateComponent` or `render: args => <Wrapper><Component {...args} /></Wrapper>`
|
|
315
|
+
- Non-default stories include `parameters.controls: { disable: true }` and `parameters.docs.source.code` with a named function component + `export default`
|
|
316
|
+
|
|
317
|
+
10. SOURCE CODE — CRITICAL DISTINCTION:
|
|
318
|
+
- **Default/interactive story**: do NOT add `source.code`. Let Storybook auto-generate from current args so the code panel updates live when controls change. This is the intended UX.
|
|
319
|
+
- **All other stories** (template-based, inline renders, stateful): use explicit `source.code` with a named function + `export default`.
|
|
320
|
+
|
|
321
|
+
For `Object.assign` components (Banner, AvatarGroup) where Storybook picks up the internal function name, use `source.transform` on the Default story to rename without breaking live updates:
|
|
322
|
+
```tsx
|
|
323
|
+
parameters: {
|
|
324
|
+
docs: {
|
|
325
|
+
source: {
|
|
326
|
+
transform: (src: string) => src.replace(/BannerRoot/g, 'Banner'),
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
```
|
|
340
331
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
```tsx
|
|
359
|
-
// Import Markdown alongside the other blocks:
|
|
360
|
-
import { ArgTypes, Controls, Heading, Markdown, Primary, Stories, Subheading, Subtitle, Title } from '@storybook/addon-docs/blocks';
|
|
361
|
-
|
|
362
|
-
function ComponentDocsPage() {
|
|
363
|
-
return (
|
|
364
|
-
<>
|
|
365
|
-
<Title />
|
|
366
|
-
<Subtitle />
|
|
367
|
-
<Markdown>{DESCRIPTION_INTRO}</Markdown>
|
|
368
|
-
<Primary />
|
|
369
|
-
<Heading>Props reference</Heading>
|
|
370
|
-
<Subheading>Root props (ComponentName)</Subheading>
|
|
371
|
-
<Controls />
|
|
372
|
-
<Subheading>Component.SubA props</Subheading>
|
|
373
|
-
<ArgTypes of={SubComponentA} />
|
|
374
|
-
<Subheading>Component.SubB props</Subheading>
|
|
375
|
-
<ArgTypes of={SubComponentB} />
|
|
376
|
-
<Markdown>{DESCRIPTION_OUTRO}</Markdown>
|
|
377
|
-
<Stories />
|
|
378
|
-
</>
|
|
379
|
-
);
|
|
380
|
-
}
|
|
381
|
-
```
|
|
382
|
-
**Page order this achieves**: intro → primary story → props reference → critical notes + accessibility + related components → all stories. Related components is always last.
|
|
383
|
-
|
|
384
|
-
**IMPORTANT — TOC nesting fix**: `Subheading` renders as h3. The description uses `##` (h2). Without `<Heading>Props reference</Heading>`, the TOC nests all Subheadings under the last h2 in the intro (e.g. "Compound component API"). The `Heading` block (h2) gives the props sections their own TOC parent. Always include it.
|
|
385
|
-
|
|
386
|
-
**Do NOT include `description.component` in meta.parameters.docs** when using `Markdown` blocks — the content is rendered by the blocks directly, so a separate `description.component` is redundant.
|
|
387
|
-
d. Set `docs.page` in the meta:
|
|
388
|
-
```tsx
|
|
389
|
-
parameters: {
|
|
390
|
-
docs: {
|
|
391
|
-
page: ComponentDocsPage,
|
|
392
|
-
description: { component: COMPONENT_DESCRIPTION },
|
|
393
|
-
},
|
|
332
|
+
Non-default SOURCE CODE FORMAT:
|
|
333
|
+
```tsx
|
|
334
|
+
parameters: {
|
|
335
|
+
controls: { disable: true },
|
|
336
|
+
docs: {
|
|
337
|
+
source: {
|
|
338
|
+
language: 'tsx',
|
|
339
|
+
code: `
|
|
340
|
+
import { ComponentName } from '@arbor-education/design-system.components';
|
|
341
|
+
|
|
342
|
+
function ComponentNameStoryNameExample() {
|
|
343
|
+
return (
|
|
344
|
+
<ComponentName ... />
|
|
345
|
+
);
|
|
346
|
+
}
|
|
347
|
+
export default ComponentNameStoryNameExample;
|
|
348
|
+
`.trim(),
|
|
394
349
|
},
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
parameters: {
|
|
409
|
-
...story.parameters,
|
|
410
|
-
docs: {
|
|
411
|
-
...story.parameters?.docs,
|
|
412
|
-
description: {
|
|
413
|
-
story: description,
|
|
414
|
-
},
|
|
415
|
-
},
|
|
416
|
-
},
|
|
417
|
-
});
|
|
418
|
-
\`\`\`
|
|
419
|
-
|
|
420
|
-
REFERENCE — component description goes in meta like this:
|
|
421
|
-
\`\`\`tsx
|
|
422
|
-
const meta: Meta<typeof ComponentName> = {
|
|
423
|
-
title: 'Components/ComponentName',
|
|
424
|
-
component: ComponentName,
|
|
425
|
-
tags: ['autodocs'],
|
|
426
|
-
parameters: {
|
|
427
|
-
docs: {
|
|
428
|
-
description: {
|
|
429
|
-
component: \`
|
|
430
|
-
**ComponentName** does X, Y, Z.
|
|
431
|
-
|
|
432
|
-
### When to use
|
|
433
|
-
- Use ComponentName when...
|
|
434
|
-
- Use it for...
|
|
435
|
-
|
|
436
|
-
### When NOT to use
|
|
437
|
-
- Use [OtherComponent] instead when...
|
|
438
|
-
- Avoid ComponentName when...
|
|
439
|
-
|
|
440
|
-
### Design guidance
|
|
441
|
-
- Keep content to X lines
|
|
442
|
-
- Always include...
|
|
443
|
-
|
|
444
|
-
### Accessibility
|
|
445
|
-
- Keyboard: ...
|
|
446
|
-
- Screen readers: ...
|
|
447
|
-
\`,
|
|
448
|
-
},
|
|
449
|
-
},
|
|
450
|
-
},
|
|
451
|
-
argTypes: { ... },
|
|
452
|
-
};
|
|
453
|
-
\`\`\`
|
|
454
|
-
|
|
455
|
-
Please write the COMPLETE stories file. Include every story from Sophia's outline. Make it comprehensive, warm, and genuinely useful for developers building with this component. AROOOOO!! 🌹💖"
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
10. REALISTIC CONTENT — use realistic Arbor/school-management copy in options and examples, not "Option 1, Option 2" or "Lorem ipsum"
|
|
355
|
+
|
|
356
|
+
11. RADIX UI LINK — if the component wraps a Radix primitive, add this to DESCRIPTION_INTRO:
|
|
357
|
+
```markdown
|
|
358
|
+
> **Built on [Radix UI ComponentName](https://www.radix-ui.com/primitives/docs/components/component-name).**
|
|
359
|
+
> The [panel/overlay/etc] renders via a portal — do **not** place inside a container with `overflow: hidden`.
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Please write the COMPLETE stories file. Read Progress.stories.tsx first — match its structure exactly. Include every story from Sophia's outline. AROOOOO!! 🌹💖"
|
|
456
363
|
```
|
|
457
364
|
|
|
458
365
|
**WAIT for Rose's full story file.** Rose will produce the complete `.stories.tsx` content.
|
|
@@ -704,15 +611,20 @@ If you need a component not in this table, derive its path from the `title` in i
|
|
|
704
611
|
|
|
705
612
|
The Atlassian cloud ID is always `orchard.atlassian.net`. Fetch pages with `mcp__atlassian__getConfluencePage`.
|
|
706
613
|
|
|
614
|
+
> **⚠️ Page staleness warning**: Some older page IDs are archived. If a page returns no usable content, use CQL search to find the current page: `mcp__atlassian__searchConfluenceUsingCql` with `title ~ "ComponentName" AND space.key = "AG"`.
|
|
615
|
+
|
|
707
616
|
| Component | Confluence Page ID | Key Guidance |
|
|
708
617
|
|---|---|---|
|
|
709
|
-
| Banner | `
|
|
710
|
-
| Button | `2216957127` |
|
|
711
|
-
| Modal | `2216762125` |
|
|
712
|
-
| Slideover | `2216891079` |
|
|
713
|
-
|
|
|
714
|
-
| Section | `2217056643` | Section header link styles guidance. |
|
|
618
|
+
| Banner | `2390032476` | Current page: "Banners (on-page)". 4 types, icon guidance, content length. |
|
|
619
|
+
| Button, inputs | `2216957127` | States, number inputs, date/time (check if archived). |
|
|
620
|
+
| Modal | `2216762125` | CTA buttons, size options, delete confirmations. |
|
|
621
|
+
| Modal, Slideover, Tooltip, Dropdown | `2216891079` | Popup vs Modal vs Slideover — when to use each. |
|
|
622
|
+
| Section | `2217056643` | Section header link styles. |
|
|
715
623
|
| Toast | `2216957106` | Max 2 lines, ideally 1. Icon aligned to centre of first line. |
|
|
624
|
+
| Icon | `2431778909` | 3-sizes-only rule, icon+label patterns, accessibility. |
|
|
625
|
+
| Badge / Tag / Pill | `2394521682` | "Pills & Tags (& Badges)" — current. |
|
|
626
|
+
| Heading | `2393767941` | Single-H1 rule, action button limits, back-button legacy. |
|
|
627
|
+
| CheckboxInput / RadioButtonInput | `2390720566` | Use cases, label phrasing, disabled tooltip guidance, keyboard/a11y. |
|
|
716
628
|
| All (overview) | `2371747857` | Tables row heights, tooltip triggers, shadow guidance. |
|
|
717
629
|
|
|
718
630
|
If no dedicated page exists for a component, still fetch the overview page — there may be a relevant section.
|
|
@@ -726,9 +638,13 @@ If no dedicated page exists for a component, still fetch the overview page — t
|
|
|
726
638
|
- **Dorothy has final say** — if she flags a prop as wrong, fix it before shipping
|
|
727
639
|
- **Real content matters** — use realistic Arbor-style copy in stories (e.g., school management UI language, not placeholder text)
|
|
728
640
|
- **Storybook import**: always `@storybook/react-vite`, NOT `@storybook/react`
|
|
641
|
+
- **Story type**: prefer `type Story = StoryObj<typeof meta>` over `StoryObj<typeof ComponentName>` — stricter inference
|
|
642
|
+
- **`fn` imports**: come from `storybook/test` (unscoped), NOT `@storybook/test`
|
|
729
643
|
- **No testIds in stories** — use accessible queries
|
|
730
644
|
- **Always `nvm use`** before running any yarn commands (use `source ~/.nvm/nvm.sh && nvm use && yarn ...`)
|
|
731
645
|
- **Use yarn, not npm**
|
|
646
|
+
- **No unsourced authority claims** — never write "most common bug" or "consumers frequently hit" without a source
|
|
647
|
+
- **UserDropdown** — slated for demolition, do NOT write stories for it and exclude from "related components" lists
|
|
732
648
|
- This codebase serves millions of users in schools — ACCURATE documentation matters enormously
|
|
733
649
|
- AROOO like you mean it!! 🐺💪
|
|
734
650
|
|
|
@@ -736,44 +652,64 @@ If no dedicated page exists for a component, still fetch the overview page — t
|
|
|
736
652
|
|
|
737
653
|
When stories need wrapper elements (divs, paragraphs, labels) to set context or layout, follow these rules:
|
|
738
654
|
|
|
739
|
-
- **Never use inline styles for typography** — use a `ds-` class instead. Any class beginning with `ds-` automatically inherits the design system's base font styles. Use `className="ds-text"` for body copy, labels, and paragraph text in story wrappers.
|
|
740
655
|
- **Use CSS tokens for spacing** — `var(--spacing-xlarge)`, `var(--spacing-large)`, etc. Never hardcode px values for padding/gap.
|
|
741
656
|
- **Use CSS tokens for colours** — `var(--color-grey-600)`, `var(--color-semantic-destructive-600)`, etc. Never hardcode hex values.
|
|
742
657
|
- **No `overflow: hidden` or `position: relative` on wrappers** for components that portal their content (Dropdown, Modal, Tooltip, Slideover) — it will clip the floating content.
|
|
658
|
+
- **No unsourced authority claims** — never write "most common bug consumers report" or "consumers frequently hit this". No data source = no claim.
|
|
743
659
|
|
|
744
660
|
Example of a well-styled story wrapper:
|
|
745
661
|
```tsx
|
|
746
662
|
<div style={{ padding: 'var(--spacing-xlarge)', display: 'flex', flexDirection: 'column', gap: 'var(--spacing-large)' }}>
|
|
747
|
-
<p
|
|
663
|
+
<p style={{ margin: 0, fontSize: 'var(--font-size-3-14)' }}>Attendance report filter</p>
|
|
748
664
|
<Dropdown>...</Dropdown>
|
|
749
665
|
</div>
|
|
750
666
|
```
|
|
751
667
|
|
|
752
|
-
##
|
|
668
|
+
## Design Token Gotchas (Verified — always check before using)
|
|
669
|
+
|
|
670
|
+
- **Font sizes are numeric, not semantic**: `--font-size-1-11` (0.688rem), `--font-size-2-13` (0.812rem), `--font-size-3-14` (0.875rem). There is NO `--font-size-small`, `--font-size-body`, or `--font-size-caption`.
|
|
671
|
+
- **Grey scale**: `--color-grey-050` and `--color-grey-100` both exist. `--color-grey-50` (no leading zero) does NOT exist.
|
|
672
|
+
- **Border radius**: only `--border-radius-xsmall` (4px), `--border-radius-small` (8px), `--border-radius-large` (16px), `--border-radius-round` (99px). NO `--border-radius-medium`.
|
|
673
|
+
- **Spacing tokens**: `--spacing-xsmall`, `--spacing-small`, `--spacing-medium`, `--spacing-large`, `--spacing-xlarge`, `--spacing-xxlarge`, `--spacing-xxxlarge`.
|
|
674
|
+
- **`--color-semantic-info-200` is phantom** — info scale is 050/100/300/500/600/700/800/900. No 200 tier.
|
|
675
|
+
- **Icon names — always grep `allowedIcons.tsx`**: `calendar` is keyed as `date`. `bell` does NOT exist. Never assume an icon name.
|
|
676
|
+
- **`fn` imports come from `storybook/test`** (unscoped), NOT `@storybook/test`. Flag if Rose ever uses the scoped form.
|
|
753
677
|
|
|
754
|
-
|
|
678
|
+
## Docs Page Structure
|
|
755
679
|
|
|
756
|
-
|
|
757
|
-
2. Description (from `parameters.docs.description.component`) — intro, When to use, When NOT to use, design guidance, gotchas, accessibility. **DO NOT include "## Related components" here.**
|
|
758
|
-
3. `<Heading>Props</Heading>` — h2 heading, TOC sibling of the description's h2 sections.
|
|
759
|
-
4. Props intro copy — one-line hint ("The preview below is wired to the Controls panel — tweak any prop to see this story update in real time.") rendered as a Markdown block.
|
|
760
|
-
5. Primary story (live interactive canvas) — lives UNDER the Props heading because the canvas and Controls are one interactive unit.
|
|
761
|
-
6. `<Controls />` — interactive prop table driving the Primary canvas.
|
|
762
|
-
7. `<Heading>Stories</Heading>` + `<Stories title="" />` — suppresses the built-in "STORIES" label so our explicit Heading is the only one.
|
|
763
|
-
8. Related components — rendered automatically from `parameters.docs.relatedComponents` (a markdown string). Always last.
|
|
680
|
+
ALL stories use a custom `docs.page` function. The canonical reference is `src/components/progress/Progress.stories.tsx`.
|
|
764
681
|
|
|
765
|
-
|
|
682
|
+
The required page structure — produces this TOC:
|
|
683
|
+
1. **Interactive example** — `<DocPrimary />` + `<Controls />`
|
|
684
|
+
2. **Usage guidance** — When to use / When NOT to use
|
|
685
|
+
3. **Developer notes** — Critical usage patterns / Accessibility / TypeScript types
|
|
686
|
+
4. **Examples** — `<Stories title="" />`
|
|
687
|
+
5. **Related components** — `<Markdown>{RELATED_COMPONENTS}</Markdown>` (always last)
|
|
766
688
|
|
|
767
689
|
```tsx
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
}
|
|
690
|
+
function ComponentNameDocsPage() {
|
|
691
|
+
return (
|
|
692
|
+
<>
|
|
693
|
+
<Title />
|
|
694
|
+
<Subtitle />
|
|
695
|
+
<Markdown>{DESCRIPTION_INTRO}</Markdown>
|
|
696
|
+
<DocHeading>Interactive example</DocHeading>
|
|
697
|
+
<Markdown>{PROPS_INTRO}</Markdown>
|
|
698
|
+
<DocPrimary />
|
|
699
|
+
<Controls />
|
|
700
|
+
<DocHeading>Usage guidance</DocHeading>
|
|
701
|
+
<Markdown>{USAGE_GUIDANCE}</Markdown>
|
|
702
|
+
<DocHeading>Developer notes</DocHeading>
|
|
703
|
+
<Markdown>{DEVELOPER_NOTES}</Markdown>
|
|
704
|
+
<DocHeading>Examples</DocHeading>
|
|
705
|
+
<Stories title="" />
|
|
706
|
+
<Markdown>{RELATED_COMPONENTS}</Markdown>
|
|
707
|
+
</>
|
|
708
|
+
);
|
|
709
|
+
}
|
|
774
710
|
```
|
|
775
711
|
|
|
776
|
-
For **compound components** (sub-
|
|
712
|
+
For **compound components** (sub-components with their own prop tables), extend this pattern by adding `<Subheading>` + `<ArgTypes of={SubComponent} />` blocks between Controls and Usage guidance.
|
|
777
713
|
|
|
778
714
|
### Sub-component props for compound components
|
|
779
715
|
|
package/.storybook/preview.ts
CHANGED
|
@@ -5,6 +5,11 @@ import '../src/index.scss';
|
|
|
5
5
|
|
|
6
6
|
const preview: Preview = {
|
|
7
7
|
parameters: {
|
|
8
|
+
options: {
|
|
9
|
+
storySort: {
|
|
10
|
+
order: ['Getting Started', ['Welcome', 'Using the Components', 'Contributing'], 'Components', '*'],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
8
13
|
controls: {
|
|
9
14
|
matchers: {
|
|
10
15
|
color: /(background|color)$/i,
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.16.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#175](https://github.com/arbor-education/design-system.components/pull/175) [`eb701a4`](https://github.com/arbor-education/design-system.components/commit/eb701a4177d358ceee29419247d7d6d898930faf) Thanks [@angusmglfraser](https://github.com/angusmglfraser)! - MIS-69977 🐛 sort out key population on checkbox and radio groups
|
|
8
|
+
|
|
9
|
+
- [#168](https://github.com/arbor-education/design-system.components/pull/168) [`36de162`](https://github.com/arbor-education/design-system.components/commit/36de1620148a853b07539116b4f003585dd0a468) Thanks [@rickbairstow](https://github.com/rickbairstow)! - MIS-70192 Customisations for Table Dropdown Settings
|
|
10
|
+
|
|
11
|
+
- [#171](https://github.com/arbor-education/design-system.components/pull/171) [`ba865e1`](https://github.com/arbor-education/design-system.components/commit/ba865e1b0316114120fed1264bd28996f7fead28) Thanks [@AmeeMorris](https://github.com/AmeeMorris)! - MIS-70118 New public API additions:
|
|
12
|
+
|
|
13
|
+
- `FormField` now supports `inputType: 'dateTimePicker'` with `inputProps: DateTimePickerProps`
|
|
14
|
+
- `Table.InlineTextCellRenderer` and `Table.SelectDropdownCellRenderer` are now exported from the `Table` namespace, consistent with all other cell renderers
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- [#174](https://github.com/arbor-education/design-system.components/pull/174) [`d4ea4b7`](https://github.com/arbor-education/design-system.components/commit/d4ea4b74c0e81c2abd2c07f61a1d3d89bf282bd8) Thanks [@angusmglfraser](https://github.com/angusmglfraser)! - MIS-68567 🐛 fix AG Grid floating elements clamping to the main grid container
|
|
19
|
+
|
|
20
|
+
## 0.15.0
|
|
21
|
+
|
|
22
|
+
### Minor Changes
|
|
23
|
+
|
|
24
|
+
- [#155](https://github.com/arbor-education/design-system.components/pull/155) [`1461039`](https://github.com/arbor-education/design-system.components/commit/146103967baa767076ec7a316944d5cb156134e6) Thanks [@Alex-DN-SP](https://github.com/Alex-DN-SP)! - MIS-69125 Number cell editor
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- [#160](https://github.com/arbor-education/design-system.components/pull/160) [`cc9dc10`](https://github.com/arbor-education/design-system.components/commit/cc9dc10adafba77d790020afa60d7f3a22deb071) Thanks [@Alex-DN-SP](https://github.com/Alex-DN-SP)! - MIS-64984 Added option for vertical column headers
|
|
29
|
+
|
|
3
30
|
## 0.14.0
|
|
4
31
|
|
|
5
32
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -15,6 +15,14 @@ https://main--68c3f2a09d95b22aa55a11e8.chromatic.com/
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## Consuming the package
|
|
19
|
+
|
|
20
|
+
If you're integrating this library into a consumer project, check out the guide on Confluence:
|
|
21
|
+
|
|
22
|
+
[Consuming the design system NPM package](https://orchard.atlassian.net/wiki/spaces/SATD/pages/2500591662/Consuming+the+design+system+NPM+package)
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
18
26
|
## Local setup
|
|
19
27
|
|
|
20
28
|
### Prerequisites
|