@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,308 +0,0 @@
|
|
|
1
|
-
# Knowledge — Storybook Upgrade Project
|
|
2
|
-
|
|
3
|
-
## Project Overview
|
|
4
|
-
|
|
5
|
-
Upgrade all component story files (except Dropdown, which is already done, and UserDropdown, which is slated for demolition) to the `/write-stories` gold standard. Each component gets the full Golden Girls squad treatment: Sophia (API inventory), Blanche (design tokens), Rose (story authoring), Dorothy (fact-checking).
|
|
6
|
-
|
|
7
|
-
## Branch
|
|
8
|
-
|
|
9
|
-
`feature/MIS-70118-storybook-skill` — all work happens on this branch.
|
|
10
|
-
|
|
11
|
-
## Gold Standard References
|
|
12
|
-
|
|
13
|
-
**Button** (`src/components/button/Button.stories.tsx`, 873 lines, completed 2026-04-17) is the reference for **simple components**. Uses the global `DocsTemplate` with `parameters.docs.description.component` + `parameters.docs.relatedComponents`. No custom `docs.page`.
|
|
14
|
-
|
|
15
|
-
**Dropdown** (`src/components/dropdown/Dropdown.stories.tsx`, 714 lines) is the reference for **compound components**. It demonstrates:
|
|
16
|
-
- Compound component docs page with `addon-docs/blocks` imports
|
|
17
|
-
- Manual Markdown prop tables for Radix-based sub-components
|
|
18
|
-
- `DESCRIPTION_INTRO` / `DESCRIPTION_OUTRO` split for optimal page flow
|
|
19
|
-
- `<Heading>Props reference</Heading>` for TOC nesting
|
|
20
|
-
- Rich argTypes with descriptions, controls, table.type.summary, table.defaultValue.summary
|
|
21
|
-
- Per-story descriptions
|
|
22
|
-
- Interactive stories with `useState`
|
|
23
|
-
- Realistic Arbor-style copy (school management domain)
|
|
24
|
-
- `ds-text` class on wrapper text elements
|
|
25
|
-
- CSS token spacing (`var(--spacing-xlarge)`) not hardcoded px
|
|
26
|
-
|
|
27
|
-
## Implementation Pattern
|
|
28
|
-
|
|
29
|
-
Each story is implemented by invoking `/write-stories ComponentName`. The skill handles:
|
|
30
|
-
1. Reading component source, tests, SCSS, and existing stories
|
|
31
|
-
2. Fetching Confluence design guidance (see page ID mapping in skill)
|
|
32
|
-
3. Calling Sophia for API inventory and story outline
|
|
33
|
-
4. Calling Blanche for design token guidance
|
|
34
|
-
5. Calling Rose to write the actual story file
|
|
35
|
-
6. Writing the file to disk
|
|
36
|
-
7. Running lint + type checks
|
|
37
|
-
8. Calling Dorothy to fact-check every prop and variant
|
|
38
|
-
|
|
39
|
-
## Design Token Gotchas (Verified)
|
|
40
|
-
|
|
41
|
-
**Font sizes are numeric, not semantic:** The font-size scale is `--font-size-1-11` (0.688rem), `--font-size-2-13` (0.812rem), `--font-size-3-14` (0.875rem), etc. There is NO `--font-size-small` or `--font-size-medium`. When writing story wrapper caption text, use the numeric tokens.
|
|
42
|
-
|
|
43
|
-
**Grey scale has `--color-grey-050` and `--color-grey-100`:** Both exist (tokens.scss lines 39 and 30). The phantom token is `--color-grey-50` (no leading zero) — that one does NOT exist. Always verify the exact string before flagging.
|
|
44
|
-
|
|
45
|
-
**Border radius tokens:** Only `--border-radius-xsmall` (4px), `--border-radius-small` (8px), `--border-radius-large` (16px), `--border-radius-round` (99px). NO `--border-radius-medium`.
|
|
46
|
-
|
|
47
|
-
**Border weight:** Only `--border-weight` (1px) exists. For 2px/3px visual accents there's no matching token — either use `--focus-border` (3px) where appropriate, or accept a hardcoded value with a comment.
|
|
48
|
-
|
|
49
|
-
**Available spacing tokens:** `--spacing-xsmall` (0.25rem), `--spacing-small` (0.5rem), `--spacing-medium` (0.75rem), `--spacing-large` (1rem), `--spacing-xlarge` (1.5rem), `--spacing-xxlarge` (2rem), `--spacing-xxxlarge` (4rem).
|
|
50
|
-
|
|
51
|
-
**Prop spelling — Tag vs Badge:** Tag uses American spelling `color`; Badge uses British `colour`. When writing bad/good code comparison blocks that cross components, VERIFY the prop name in each component's source. Mixing them will ship a TypeScript error into the docs.
|
|
52
|
-
|
|
53
|
-
**Icon names — gotchas:** `bell` does NOT exist in `allowedIcons.tsx`. `calendar` is keyed as `date`. Always grep allowedIcons.tsx before using an icon name in argTypes options.
|
|
54
|
-
|
|
55
|
-
**Confluence page staleness:** The write-stories skill's known-page-ID table may reference archived pages. Confluence pages for Banner (old 2216762167 = archived, new 2390032476 = current) and Button (2216957127 = archived with no usable guidance) have been replaced or superseded. Use CQL search (`mcp__atlassian__searchConfluenceUsingCql` with `title ~ "ComponentName" AND space.key = "AG"`) to find the current page before fetching.
|
|
56
|
-
|
|
57
|
-
**Newly discovered current Confluence pages (not in skill's mapping table):**
|
|
58
|
-
- Icon → `2431778909` ("Icons" — current, rich guidance on 3-sizes-only rule, icon+label patterns, accessibility)
|
|
59
|
-
- Badge / Tag / Pill → `2394521682` ("Pills & Tags (& Badges)" — current)
|
|
60
|
-
- Banner → `2390032476` ("Banners (on-page)" — current)
|
|
61
|
-
- Heading → `2393767941` ("Page Headings" — current, single-H1 rule, action button limits, back-button legacy, NO subtitle support)
|
|
62
|
-
- CheckboxInput / RadioButtonInput → `2390720566` ("Checkbox & Radio" — current, use cases, label phrasing, disabled tooltip guidance, keyboard/a11y)
|
|
63
|
-
|
|
64
|
-
**`--color-semantic-info-200` is phantom** — the semantic info scale is 050/100/300/500/600/700/800/900. There is NO 200 tier. Rose reached for it in a callout box border; replaced with `--color-semantic-info-100`. Dorothy caught it. Watch for this in future info-coloured callout boxes.
|
|
65
|
-
|
|
66
|
-
**Separator visibility gotcha** — `--page-base-color-border` resolves to `--color-grey-050`, which is ALSO `--page-color-background`. The Separator is completely invisible on the standard page background by default. Consumers must override via `className`. No `--separator-*` tokens exist. Document this prominently for any future Separator-adjacent work.
|
|
67
|
-
|
|
68
|
-
**Separator vertical orientation** — the SCSS only styles horizontal. For vertical, consumer must supply `width: 'var(--border-weight)'` and either an explicit height or `alignSelf: 'stretch'` in a flex container. `decorative` should almost always be `true` for vertical separators.
|
|
69
|
-
|
|
70
|
-
**Rose's recurring `--border-radius-medium` phantom** — second confirmed occurrence (also hit Badge stories). Scale is ONLY `xsmall | small | large | round`. No medium. Rose keeps reaching for it as a "common design system convention" but it doesn't exist in OUR tokens.scss. Agents should double-check before using it.
|
|
71
|
-
|
|
72
|
-
**Blanche's `color` prop doctrine for Icon — REJECTED by user.** Blanche initially suggested "consumers should nearly never pass `color` explicitly to Icon — always wrap the parent and let currentColor do the work". The user overruled this. Correct framing: `color` is a first-class API. Use inheritance (the default) for icon+label pairings where the icon should track text colour through state changes. Pass `color` explicitly for status icons, fixed brand/accent colours, or anywhere a specific colour is semantically required. Always use design tokens — never hardcode hex. Applies to future Icon-adjacent stories.
|
|
73
|
-
|
|
74
|
-
**NumberInput `onBlur` gotcha — consumer wins, not the component.** `{...rest}` is spread AFTER `onBlur={handleOnBlur}` in the JSX. So if a consumer passes `onBlur`, their handler fires and the internal blur-clamping silently stops working. Document as "passing `onBlur` disables min/max clamping on blur" — NOT "your handler won't fire".
|
|
75
|
-
|
|
76
|
-
**NumberInput font-size phantom tokens** — Rose reached for `--font-size-body` and `--font-size-caption` which do not exist. Use `--font-size-2-13` (0.812rem) for body-weight wrapper labels and `--font-size-1-11` (0.688rem) for caption/hint text in story wrappers.
|
|
77
|
-
|
|
78
|
-
**`loader` icon is STATIC.** The Icon component does not apply any rotation animation to `loader` (LoaderCircle). There is no global `@keyframes spin` in the codebase — only `ds-combobox-loader-spin` scoped to Combobox. If a consumer needs rotation, they must add a CSS animation via `className` or parent styling.
|
|
79
|
-
|
|
80
|
-
**`fn` imports come from `storybook/test` (unscoped)**, not `@storybook/test`. The latter is wrong for this codebase — every existing story uses the unscoped form. Flag if Rose ever slips.
|
|
81
|
-
|
|
82
|
-
**Tag component API was rewritten** — old `text` + `dotColour` props are gone. Real API uses `children` (required), `color` (British), `slotStart`/`slotEnd` for prefix/suffix content (Dot/Icon), and `onRemove`/`removeLabel`/`removeButtonTabIndex` for composite-chip contexts. Manifest updated 2026-04-17.
|
|
83
|
-
|
|
84
|
-
**GOLDEN GIRLS PROCESS DISCIPLINE (important lesson from Pill run):** Sophia and Blanche are GUIDANCE agents. They provide prop inventories, token advice, and anti-pattern lists. They MUST NOT write or edit the stories file — Rose owns the file. If a subagent delivers actual code instead of guidance, the orchestrator must: (1) flag the process violation, (2) hand the file to Rose for ownership review (validate or rewrite, her call), and (3) not proceed to Dorothy until Rose has signed off. Don't rubber-stamp a non-Rose file just because types pass. The Pill stories initially shipped as a 969-line/16-story file by Sophia+Blanche; Rose trimmed to 594 lines/10 stories after review.
|
|
85
|
-
|
|
86
|
-
**Pill component quirks** — lowercase `onclick` prop (non-idiomatic React), uncontrolled-only (no `value`/`onValueChange`), `useEffect` fires callback on mount, toggle-mode renders as `<span onClick>` without keyboard accessibility, CheckboxInput is wired with `onClick` not `onChange` so keyboard Space toggles visual state but not the parent's `onclick`. Worth a future component-level ticket.
|
|
87
|
-
|
|
88
|
-
## Key Conventions
|
|
89
|
-
|
|
90
|
-
- **Storybook import**: `import type { Meta, StoryObj } from '@storybook/react-vite'` (NOT `@storybook/react`)
|
|
91
|
-
- **Story type**: prefer `type Story = StoryObj<typeof meta>` over `StoryObj<typeof ComponentName>` — `typeof meta` is stricter (picks up args/argTypes for better inference)
|
|
92
|
-
- **Autodocs**: `tags: ['autodocs']` in meta
|
|
93
|
-
- **Story names**: PascalCase
|
|
94
|
-
- **Story descriptions**: Use `withDescription` helper or `parameters.docs.description.story`
|
|
95
|
-
- **Wrapper text**: use `className="ds-text"` is a phantom class (does NOT exist in any SCSS) — it is a no-op. Stories use inline `style` props for typography, not this class. Do NOT add `ds-text` expecting it to apply styles.
|
|
96
|
-
- **Wrapper spacing**: Use CSS tokens (`var(--spacing-large)`) — never hardcoded px
|
|
97
|
-
- **Wrapper colours**: Use CSS tokens (`var(--color-grey-600)`) — never hardcoded hex
|
|
98
|
-
- **No overflow:hidden on wrappers** for portal-based components (Dropdown, Modal, Tooltip, Slideover)
|
|
99
|
-
- **Realistic content**: School management domain copy, not Lorem ipsum
|
|
100
|
-
- **No unsourced authority claims**: never write "most common bug consumers report", "consumers frequently hit this" etc. — no data source = no claim
|
|
101
|
-
|
|
102
|
-
## `ds-text` phantom class — Rose's recurring bad habit
|
|
103
|
-
|
|
104
|
-
Rose keeps adding `className="ds-text"` to wrapper `<label>` and `<span>` elements in stories. This class does NOT exist in any SCSS file in the codebase — it is a complete no-op. Strip it before Dorothy reviews. Confirmed phantom on: NumberInput (5 occurrences), TextArea (5 occurrences). Use `style={{ ... }}` with inline styles for wrapper typography instead.
|
|
105
|
-
|
|
106
|
-
## `parameters.docs.source.code` — The Full Convention
|
|
107
|
-
|
|
108
|
-
Every story's code panel MUST show a complete, runnable file that a consumer can copy-paste. The convention (matching Radix UI docs) is:
|
|
109
|
-
|
|
110
|
-
```tsx
|
|
111
|
-
import { MyComponent } from '@arbor-education/design-system.components';
|
|
112
|
-
|
|
113
|
-
function MyComponentExample() {
|
|
114
|
-
return (
|
|
115
|
-
<MyComponent prop="value" />
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export default MyComponentExample;
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
**Rules:**
|
|
123
|
-
1. **Always a named function component** — never bare JSX, never an anonymous arrow. Even one-liners need a named component.
|
|
124
|
-
2. **Always `export default ComponentNameExample`** at the bottom.
|
|
125
|
-
3. **Import only what's used** — do not include unused imports.
|
|
126
|
-
4. **Function name convention**: `{StoryName}Example` in PascalCase (e.g. story `WithTitle` → `BannerWithTitleExample`). For stateful templates that already have good names (e.g. `YearGroupFilter`), keep the descriptive name.
|
|
127
|
-
|
|
128
|
-
**When to apply `parameters.docs.source.code`**:
|
|
129
|
-
- **Named template stories** (`render: SomeTemplate`) — always. Storybook shows `render: SomeTemplate` otherwise.
|
|
130
|
-
- **Inline render stories** (`render: () => (...)`) — always. Storybook shows a bare arrow function without imports.
|
|
131
|
-
- **Default/interactive story** — always, especially when the component uses `Object.assign` internally (see Banner gotcha below). The code panel shows a representative static example; the live Controls canvas still updates independently.
|
|
132
|
-
|
|
133
|
-
**CRITICAL DISTINCTION — Default story vs all other stories:**
|
|
134
|
-
- **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 of the interactive canvas.
|
|
135
|
-
- **All other stories** (template-based, inline renders, stateful stories): use explicit `source.code` with a named function component + `export default`.
|
|
136
|
-
|
|
137
|
-
```tsx
|
|
138
|
-
// NON-DEFAULT story — explicit source.code with function wrapper
|
|
139
|
-
export const MyStory: Story = withDescription(
|
|
140
|
-
{
|
|
141
|
-
render: () => <MyComponent prop="value" />,
|
|
142
|
-
parameters: {
|
|
143
|
-
docs: {
|
|
144
|
-
source: {
|
|
145
|
-
language: 'tsx',
|
|
146
|
-
code: `
|
|
147
|
-
import { MyComponent } from '@arbor-education/design-system.components';
|
|
148
|
-
|
|
149
|
-
function MyComponentExample() {
|
|
150
|
-
return <MyComponent prop="value" />;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export default MyComponentExample;
|
|
154
|
-
`.trim(),
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
'Story description here.',
|
|
160
|
-
);
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
**Why `withDescription` is safe**: The helper spreads `story.parameters?.docs`, so `docs.source` is preserved when `description` is added on top.
|
|
164
|
-
|
|
165
|
-
## `Object.assign` Internal Name Gotcha — Banner
|
|
166
|
-
|
|
167
|
-
`Banner` is defined as `Object.assign(BannerRoot, { Level, ... })`. Storybook picks up the internal function name `BannerRoot` for auto-generated code.
|
|
168
|
-
|
|
169
|
-
**Fix**: Use `source.transform` on the Default story to rename the internal name without breaking live updates:
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
parameters: {
|
|
173
|
-
docs: {
|
|
174
|
-
source: {
|
|
175
|
-
// Keeps code panel dynamic (updates with controls) — only renames the internal component name
|
|
176
|
-
transform: (src: string) => src.replace(/BannerRoot/g, 'Banner'),
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Only `Banner.tsx` and `AvatarGroup.tsx` use this pattern — all other components are safe.
|
|
183
|
-
|
|
184
|
-
## Docs Page Structure (ALL components — updated 2026-04-22)
|
|
185
|
-
|
|
186
|
-
Every component (simple and compound) now uses a custom `docs.page` function. The global `DocsTemplate` is no longer used directly. The gold standard is `src/components/button/Button.stories.tsx`.
|
|
187
|
-
|
|
188
|
-
### String consts (in order)
|
|
189
|
-
|
|
190
|
-
1. **`DESCRIPTION_INTRO`** — one or two sentences, no headings. The hook that appears before the interactive canvas.
|
|
191
|
-
2. **`USAGE_GUIDANCE`** — "Usage guidance" section content. Sub-sections as `###` h3s, each separated by `---`. Typically: When to use, When NOT to use, Design guidance. Also include compound component API overviews here.
|
|
192
|
-
3. **`DEVELOPER_NOTES`** — "Developer notes" section content. Sub-sections as `###` h3s, each separated by `---`. Typically: Critical gotchas, Accessibility, TypeScript types (always last).
|
|
193
|
-
4. **`RELATED_COMPONENTS`** — unchanged, still a markdown string with `## Related components`.
|
|
194
|
-
5. **`PROPS_INTRO`** — always exactly: `'The preview below is wired to the **Controls** panel — tweak any prop to see the story update in real time.'`
|
|
195
|
-
|
|
196
|
-
### DocsPage function render order
|
|
197
|
-
|
|
198
|
-
```tsx
|
|
199
|
-
<Title />
|
|
200
|
-
<Subtitle />
|
|
201
|
-
<Markdown>{DESCRIPTION_INTRO}</Markdown>
|
|
202
|
-
<DocHeading>Interactive example</DocHeading>
|
|
203
|
-
<Markdown>{PROPS_INTRO}</Markdown>
|
|
204
|
-
<DocPrimary />
|
|
205
|
-
<Controls />
|
|
206
|
-
<DocHeading>Usage guidance</DocHeading>
|
|
207
|
-
<Markdown>{USAGE_GUIDANCE}</Markdown>
|
|
208
|
-
<DocHeading>Developer notes</DocHeading>
|
|
209
|
-
<Markdown>{DEVELOPER_NOTES}</Markdown>
|
|
210
|
-
<DocHeading>Examples</DocHeading>
|
|
211
|
-
<Stories title="" />
|
|
212
|
-
<Markdown>{RELATED_COMPONENTS}</Markdown>
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### Doc blocks import (always alias to avoid naming conflicts)
|
|
216
|
-
|
|
217
|
-
```ts
|
|
218
|
-
import {
|
|
219
|
-
Controls,
|
|
220
|
-
Heading as DocHeading,
|
|
221
|
-
Markdown,
|
|
222
|
-
Primary as DocPrimary,
|
|
223
|
-
Stories,
|
|
224
|
-
Subtitle,
|
|
225
|
-
Title,
|
|
226
|
-
} from '@storybook/addon-docs/blocks';
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### meta.parameters.docs
|
|
230
|
-
|
|
231
|
-
Only `page: {ComponentName}DocsPage`. No `description.component`, no `relatedComponents` — both rendered manually in the DocsPage.
|
|
232
|
-
|
|
233
|
-
### TypeScript types section
|
|
234
|
-
|
|
235
|
-
Always the last `###` inside `DEVELOPER_NOTES`. Only include if the component has a namespace export. Show a usage snippet + table of all types. Enums (Object.assign pattern, e.g. `Banner.Level`) get a note that they're runtime values not just types.
|
|
236
|
-
|
|
237
|
-
### Heading conflicts
|
|
238
|
-
|
|
239
|
-
`Heading` component stories must alias BOTH the component-level `Heading` import AND the doc block: use `Heading as DocHeading` in the doc blocks import. Same applies to any future component whose name clashes with a Storybook doc block name (Primary, Controls, Stories, etc.).
|
|
240
|
-
|
|
241
|
-
## Confluence Page IDs
|
|
242
|
-
|
|
243
|
-
| Component(s) | Page ID | Key Content |
|
|
244
|
-
|---|---|---|
|
|
245
|
-
| Banner | `2216762167` | Types, colours, content length, icon guidance |
|
|
246
|
-
| Button, inputs | `2216957127` | States, number inputs, date/time |
|
|
247
|
-
| Modal | `2216762125` | CTA buttons, size options, delete confirmations |
|
|
248
|
-
| Modal, Slideover, Tooltip, Dropdown | `2216891079` | Popup vs Modal vs Slideover — when to use each |
|
|
249
|
-
| Section | `2217056643` | Section header link styles |
|
|
250
|
-
| Toast | `2216957106` | Content length, icon alignment |
|
|
251
|
-
| All (overview) | `2371747857` | Tables, tooltips, shadows, colours |
|
|
252
|
-
|
|
253
|
-
## Utilities That Need Documentation Stories
|
|
254
|
-
|
|
255
|
-
### PopupParentContext (`src/utils/PopupParentContext.ts`)
|
|
256
|
-
- React context holding a `RefObject<HTMLElement | null>` — controls where portalled floating elements render
|
|
257
|
-
- Default value comes from `getDefaultPopupParent()`
|
|
258
|
-
- Exported from `src/index.ts` as a public API
|
|
259
|
-
- Consumed by: Dropdown, Modal, Tooltip, DatePicker, DateTimePicker, Combobox, SlideoverManager, Table column filters (TimeFilter, BooleanFilter)
|
|
260
|
-
- **Not a component** — cannot use `/write-stories`. Needs a manually authored documentation story
|
|
261
|
-
- Story should go at `Utils/PopupParentContext` in Storybook
|
|
262
|
-
- Key use case: when floating components are inside containers with `overflow: hidden` or custom z-index stacking contexts, consumers wrap with `<PopupParentContext.Provider value={ref}>` to re-parent portals
|
|
263
|
-
|
|
264
|
-
## Components Without Dedicated Stories
|
|
265
|
-
|
|
266
|
-
- `slideover/` — no story file; `SlideoverManager` handles it
|
|
267
|
-
- `tableSettingsDropdown/` — empty directory
|
|
268
|
-
- `testComponent/` — empty directory (test-only)
|
|
269
|
-
|
|
270
|
-
## Excluded Components
|
|
271
|
-
|
|
272
|
-
- **UserDropdown** — slated for demolition. Do NOT write stories for it. Removed from the Ralph backlog on 2026-04-17. Any references to UserDropdown in future stories (e.g. component relationships, "related components" lists) should be omitted.
|
|
273
|
-
|
|
274
|
-
## Quality Tiers (Current State)
|
|
275
|
-
|
|
276
|
-
**CheckboxGroup IS public API** — exported from `src/index.ts` line 13, despite the component-library.md marking it as "internal". Import from `'@arbor-education/design-system.components'` is correct for story documentation.
|
|
277
|
-
|
|
278
|
-
**`aria-checked` spread order in CheckboxInput — COUNTER-INTUITIVE:** `{...rest}` is spread AFTER the explicit `aria-checked` in CheckboxInput.tsx. This means a consumer passing `aria-checked` via `...rest` would WIN and override the component's indeterminate logic. Document as "your value overrides the component's" not "it will be overwritten".
|
|
279
|
-
|
|
280
|
-
**CheckboxGroup `--checkbox-or-radio-button-group-spacing-gap-vertical`** — handles vertical spacing between options internally via Fieldset. Do NOT add a gap wrapper around CheckboxGroup in stories or layouts — it will double-space the items.
|
|
281
|
-
|
|
282
|
-
### Already done (skip)
|
|
283
|
-
- Dropdown (714 lines) — full write-stories treatment ✅ (compound component reference)
|
|
284
|
-
- Button (873 lines) — full write-stories treatment ✅ (simple component reference) — 2026-04-17
|
|
285
|
-
- Badge (691 lines) — full write-stories treatment ✅ — 2026-04-17
|
|
286
|
-
- Banner (685 lines) — full write-stories treatment ✅ — 2026-04-17
|
|
287
|
-
- Icon (1168 lines) — full write-stories treatment ✅ — 2026-04-17 (includes a 106-icon gallery)
|
|
288
|
-
- Heading (499 lines) — full write-stories treatment ✅ — 2026-04-17 (compound with InnerContainer)
|
|
289
|
-
- Tag (557 lines) — full write-stories treatment ✅ — 2026-04-17 (non-interactive metadata, 14 stories incl. faux Combobox pattern)
|
|
290
|
-
- Pill (594 lines) — full write-stories treatment ✅ — 2026-04-17 (interactive filter control, 10 stories; Rose rescued after Sophia+Blanche broke process)
|
|
291
|
-
- Dot (509 lines) — full write-stories treatment ✅ — 2026-04-17 (6 focused stories; clean Golden Girls run with guidance-only discipline)
|
|
292
|
-
- Progress (537 lines) — full write-stories treatment ✅ — 2026-04-17 (7 focused stories; Radix Progress wrapper; IndeterminateAntiPattern story documents the `value={null}` trap)
|
|
293
|
-
- Separator (646 lines) — full write-stories treatment ✅ — 2026-04-22 (6 focused stories; visibility gotcha + decorative/semantic distinction documented; Dropdown.Separator anti-pattern called out)
|
|
294
|
-
- TextInput (~640 lines) — full write-stories treatment ✅ — 2026-04-22 (7 focused stories; aria-invalid gotcha on bare TextInput; ControlledWithValidation + WithForwardRef use source.code pattern)
|
|
295
|
-
- NumberInput (~870 lines) — full write-stories treatment ✅ — 2026-04-23 (8 focused stories; DecimalStep makes Decimal.js precision benefit concrete; onBlur override gotcha documented correctly)
|
|
296
|
-
- CheckboxInput (~1055 lines) — full write-stories treatment ✅ — 2026-04-23 (12 stories; SelectAllWithIndeterminate canonical pattern; controlled-only + aria-checked spread gotchas; CheckboxGroup companion documented)
|
|
297
|
-
|
|
298
|
-
### Minimal (< 50 lines — needs everything)
|
|
299
|
-
Separator (15), Label (15), TooltipWrapper (24), ColourPickerDropdown (29), Tooltip (35), Modal (37)
|
|
300
|
-
|
|
301
|
-
### Basic (50–100 lines — has some stories but no descriptions)
|
|
302
|
-
TabsItem (55), SingleUser (63), Badge (74), Row (85), SearchBar (86), Fieldset (89), Section (90), Progress (90), Tabs (92), Avatar (92), Banner (96), Tag (98), Card (99)
|
|
303
|
-
|
|
304
|
-
### Medium (100–250 lines — decent structure, needs enrichment)
|
|
305
|
-
DatePicker (105), RadioButtonInput (106), Toast (113), EditableText (136), Heading (142), Button (169), TimeInput (170), FormField (181), SelectDropdown (200), DateTimePicker (202), AvatarGroup (218), Toggle (239)
|
|
306
|
-
|
|
307
|
-
### Large (250+ lines — significant existing content)
|
|
308
|
-
Combobox (358), SlideoverManager (374), ModalManager (497), Table (1412)
|