@persona/design-system 0.1.8 → 0.1.9
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/CHANGELOG.md +12 -0
- package/README.md +20 -1
- package/dist/Attribute.d.mts +1 -1
- package/dist/{Badge-DortWowZ.mjs → Badge-DEVbRlJX.mjs} +2 -2
- package/dist/{Badge-DortWowZ.mjs.map → Badge-DEVbRlJX.mjs.map} +1 -1
- package/dist/{Breadcrumbs-CDZ_Mrcg.mjs → Breadcrumbs-W8hIhdHD.mjs} +3 -3
- package/dist/{Breadcrumbs-CDZ_Mrcg.mjs.map → Breadcrumbs-W8hIhdHD.mjs.map} +1 -1
- package/dist/{Button-9p469xA1.d.mts → Button-Vd5O4DUp.d.mts} +3 -3
- package/dist/Button.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/{CardV2-C9z0Hr-c.mjs → CardV2-C0fcOUdp.mjs} +5 -5
- package/dist/{CardV2-C9z0Hr-c.mjs.map → CardV2-C0fcOUdp.mjs.map} +1 -1
- package/dist/{Checkbox-B0bjZbji.mjs → Checkbox-BcuiFvK7.mjs} +2 -2
- package/dist/{Checkbox-B0bjZbji.mjs.map → Checkbox-BcuiFvK7.mjs.map} +1 -1
- package/dist/{Combobox-BdqU5WLG.mjs → Combobox-B6JyLog8.mjs} +13 -7
- package/dist/Combobox-B6JyLog8.mjs.map +1 -0
- package/dist/{Combobox-DBWMHwUt.d.cts → Combobox-BaD0f2Du.d.mts} +3 -3
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-BsY7CYoB.d.mts → ComboboxBase-BsPf8BZh.d.mts} +8 -3
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-dNuETspL.d.mts → ComboboxMultiSelect-DhLzCWbz.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-C8KvIJ43.d.mts → ComboboxSingleSelect-P0r5rs_u.d.mts} +3 -3
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/DataTable.d.mts +9 -0
- package/dist/{DatePicker-DY1YA_Fu.mjs → DatePicker-Bw79p-Lx.mjs} +5 -5
- package/dist/{DatePicker-DY1YA_Fu.mjs.map → DatePicker-Bw79p-Lx.mjs.map} +1 -1
- package/dist/{DropdownButton-DKLjJylQ.mjs → DropdownButton-BI3IFJun.mjs} +3 -3
- package/dist/{DropdownButton-DKLjJylQ.mjs.map → DropdownButton-BI3IFJun.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-DGYexb7s.mjs → DropdownMenu-D25WBCah.mjs} +2 -2
- package/dist/{DropdownMenu-DGYexb7s.mjs.map → DropdownMenu-D25WBCah.mjs.map} +1 -1
- package/dist/{DropdownMenu-CVPanvKA.d.mts → DropdownMenu-D6nfAsi0.d.mts} +2 -2
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{FormControl-B28qa7aQ.mjs → FormControl-CFU9uKF7.mjs} +2 -2
- package/dist/{FormControl-B28qa7aQ.mjs.map → FormControl-CFU9uKF7.mjs.map} +1 -1
- package/dist/{FormField-PeYYRO4s.mjs → FormField-DdmgSWq4.mjs} +14 -11
- package/dist/{FormField-PeYYRO4s.mjs.map → FormField-DdmgSWq4.mjs.map} +1 -1
- package/dist/{HoverCopyableField-ClXBg_ld.mjs → HoverCopyableField-7TWP0Y1Z.mjs} +3 -3
- package/dist/{HoverCopyableField-ClXBg_ld.mjs.map → HoverCopyableField-7TWP0Y1Z.mjs.map} +1 -1
- package/dist/{IconButton-ZcyTFjPn.d.cts → IconButton-BHCmHIx5.d.mts} +2 -2
- package/dist/{IconButton-CIWiEsS-.mjs → IconButton-P8w0JDI5.mjs} +2 -2
- package/dist/{IconButton-CIWiEsS-.mjs.map → IconButton-P8w0JDI5.mjs.map} +1 -1
- package/dist/IconButton.d.mts +1 -1
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-BPClVzwD.d.mts → Input-DMgVyZyq.d.mts} +3 -3
- package/dist/{Input-BFI_e7aU.mjs → Input-QC6xla6I.mjs} +2 -2
- package/dist/Input-QC6xla6I.mjs.map +1 -0
- package/dist/Input.d.mts +1 -1
- package/dist/{ListBox-_fcSPynx.d.mts → ListBox-D09N1a5D.d.mts} +8 -3
- package/dist/{ListBox-BwID8jpk.mjs → ListBox-TrL3Tb7X.mjs} +13 -7
- package/dist/ListBox-TrL3Tb7X.mjs.map +1 -0
- package/dist/ListBox.d.mts +1 -1
- package/dist/ListBoxField.d.mts +2 -2
- package/dist/{LogicRow-BtCKGX_j.d.mts → LogicRow-BcuiSTHN.d.mts} +2 -2
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +1 -1
- package/dist/{Menu-CUp_9HgC.d.mts → Menu-Bv8dsrz6.d.mts} +2 -2
- package/dist/{Menu-CPYXo61N.mjs → Menu-DmeMgN-i.mjs} +2 -2
- package/dist/{Menu-CPYXo61N.mjs.map → Menu-DmeMgN-i.mjs.map} +1 -1
- package/dist/Menu.d.mts +1 -1
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-D-6W61E_.mjs → PageHeader-jSLud2JI.mjs} +5 -4
- package/dist/PageHeader-jSLud2JI.mjs.map +1 -0
- package/dist/PageHeader.d.mts +7 -2
- package/dist/{Pagination-ztqhywAP.mjs → Pagination-BeYukNCj.mjs} +4 -4
- package/dist/{Pagination-ztqhywAP.mjs.map → Pagination-BeYukNCj.mjs.map} +1 -1
- package/dist/{Pii-DrrtEz7U.mjs → Pii-QsTrz8wn.mjs} +2 -2
- package/dist/{Pii-DrrtEz7U.mjs.map → Pii-QsTrz8wn.mjs.map} +1 -1
- package/dist/{Select-2KbtKawr.d.mts → Select-Bk27TgN8.d.mts} +2 -2
- package/dist/{Select-cPEORy70.mjs → Select-C1ZoRk39.mjs} +4 -4
- package/dist/{Select-cPEORy70.mjs.map → Select-C1ZoRk39.mjs.map} +1 -1
- package/dist/Select.d.mts +1 -1
- package/dist/{Sticker-DbqKLe33.mjs → Sticker-CyGb9dEu.mjs} +2 -2
- package/dist/{Sticker-DbqKLe33.mjs.map → Sticker-CyGb9dEu.mjs.map} +1 -1
- package/dist/Tab.d.mts +13 -4
- package/dist/{TabBar-zSA8kyE6.mjs → TabBar-Bn8PHHBZ.mjs} +15 -9
- package/dist/TabBar-Bn8PHHBZ.mjs.map +1 -0
- package/dist/TabBarIconButton.d.mts +1 -1
- package/dist/{Table-D8IcpACv.mjs → Table-BfontAeY.mjs} +7 -5
- package/dist/{Table-D8IcpACv.mjs.map → Table-BfontAeY.mjs.map} +1 -1
- package/dist/{TableBox-luasMC73.mjs → TableBox-bmrKh_ax.mjs} +86 -35
- package/dist/TableBox-bmrKh_ax.mjs.map +1 -0
- package/dist/TableBox.d.mts +1 -1
- package/dist/{TableBoxCell-By1xE6_Q.d.mts → TableBoxCell-CvjLYhTV.d.mts} +21 -7
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/TableBoxField.d.mts +7 -4
- package/dist/{TableBoxRow-CsRPRPQ-.d.mts → TableBoxRow-BzXECgid.d.mts} +2 -2
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-DMYOI8Do.d.mts → TableBoxRowActions-BAiFXiCh.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableControls-DHMs7o58.mjs → TableControls-DVTtNAPo.mjs} +11 -11
- package/dist/{TableControls-DHMs7o58.mjs.map → TableControls-DVTtNAPo.mjs.map} +1 -1
- package/dist/{TableLayout-Ct0kepcA.d.cts → TableLayout-BZeP8qfg.d.mts} +7 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{Tooltip-C6AR1xT-.mjs → Tooltip-BvDbmXak.mjs} +2 -2
- package/dist/{Tooltip-C6AR1xT-.mjs.map → Tooltip-BvDbmXak.mjs.map} +1 -1
- package/dist/components/Attribute/index.mjs +3 -3
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +1 -1
- package/dist/components/Breadcrumbs/index.mjs +1 -1
- package/dist/components/Button/index.d.mts +2 -2
- package/dist/components/Button/index.mjs +1 -1
- package/dist/components/ButtonGroup/index.mjs +1 -1
- package/dist/components/CardV2/index.mjs +1 -1
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/Combobox/index.d.mts +2 -2
- package/dist/components/Combobox/index.mjs +1 -1
- package/dist/components/DataTable/TableControls/index.mjs +1 -1
- package/dist/components/DataTable/index.mjs +14 -12
- package/dist/components/DataTable/index.mjs.map +1 -1
- package/dist/components/DataTable/types.d.mts +1 -1
- package/dist/components/DatePicker/index.mjs +1 -1
- package/dist/components/DropdownButton/index.mjs +1 -1
- package/dist/components/DropdownMenu/index.d.mts +1 -1
- package/dist/components/DropdownMenu/index.mjs +1 -1
- package/dist/components/FormControl/index.mjs +1 -1
- package/dist/components/FormField/index.d.mts +2 -2
- package/dist/components/FormField/index.mjs +2 -2
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +4 -4
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- package/dist/components/ListBox/index.mjs +1 -1
- package/dist/components/MaskedInput/index.mjs +1 -1
- package/dist/components/Menu/index.d.mts +1 -1
- package/dist/components/Menu/index.mjs +1 -1
- package/dist/components/Modal/index.mjs +2 -2
- package/dist/components/PageHeader/index.mjs +1 -1
- package/dist/components/Pagination/index.mjs +1 -1
- package/dist/components/Pii/index.mjs +1 -1
- package/dist/components/ProgressBar/index.mjs +1 -1
- package/dist/components/Select/index.d.mts +1 -1
- package/dist/components/Select/index.mjs +1 -1
- package/dist/components/Slider/index.mjs +1 -1
- package/dist/components/Sticker/index.mjs +1 -1
- package/dist/components/TabBar/index.mjs +1 -1
- package/dist/components/Table/index.d.mts +1 -1
- package/dist/components/Table/index.mjs +1 -1
- package/dist/components/TableBox/index.d.mts +1 -1
- package/dist/components/TableBox/index.mjs +1 -1
- package/dist/components/TechnicalSticker/index.mjs +1 -1
- package/dist/components/Tile/index.mjs +2 -2
- package/dist/components/Toast/index.mjs +1 -1
- package/dist/components/Tooltip/index.mjs +1 -1
- package/dist/fieldPickerOptions.d.mts +1 -1
- package/dist/{index-IlwGkCAe2.d.mts → index-BxXTpeUb2.d.mts} +4 -3
- package/dist/inputFields.d.mts +4 -4
- package/dist/layouts/LayoutLoadingShimmer/index.mjs +3 -3
- package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
- package/dist/lib/useScrollOverflow.d.mts +7 -0
- package/dist/lib/useScrollOverflow.mjs +22 -1
- package/dist/lib/useScrollOverflow.mjs.map +1 -1
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/package.json +202 -746
- package/skills/ui-authoring/COMPONENTS.md +331 -0
- package/skills/ui-authoring/EXAMPLES.md +370 -0
- package/skills/ui-authoring/REFERENCE.md +293 -0
- package/skills/ui-authoring/SKILL.md +237 -0
- package/dist/Action-E90Wvqmc.d.cts +0 -35
- package/dist/Action.d.cts +0 -2
- package/dist/Attribute.d.cts +0 -107
- package/dist/AttributeGrid.d.cts +0 -40
- package/dist/Badge-ADPloFsd.cjs +0 -38
- package/dist/Badge-ADPloFsd.cjs.map +0 -1
- package/dist/Badge.d.cts +0 -25
- package/dist/Banner.d.cts +0 -48
- package/dist/Breadcrumb-VH-Mwo-M.d.cts +0 -44
- package/dist/Breadcrumb.d.cts +0 -2
- package/dist/Breadcrumbs-BBREROrw.d.cts +0 -26
- package/dist/Breadcrumbs-tR49JqAS.cjs +0 -295
- package/dist/Breadcrumbs-tR49JqAS.cjs.map +0 -1
- package/dist/Breadcrumbs.d.cts +0 -2
- package/dist/Button-C_3p5Xfi.d.cts +0 -101
- package/dist/Button.d.cts +0 -2
- package/dist/ButtonGroup.d.cts +0 -20
- package/dist/Calendar.d.cts +0 -11
- package/dist/Card-CJPEmUvg.d.cts +0 -52
- package/dist/Card-Csz-PxX0.cjs +0 -248
- package/dist/Card-Csz-PxX0.cjs.map +0 -1
- package/dist/Card.d.cts +0 -2
- package/dist/Card2.d.cts +0 -95
- package/dist/CardV2-DJXgFomd.cjs +0 -419
- package/dist/CardV2-DJXgFomd.cjs.map +0 -1
- package/dist/Checkbox-CmCujC1W.cjs +0 -183
- package/dist/Checkbox-CmCujC1W.cjs.map +0 -1
- package/dist/Checkbox-Cr8ifm10.d.cts +0 -46
- package/dist/Checkbox.d.cts +0 -2
- package/dist/CheckboxGroupField.d.cts +0 -24
- package/dist/Combobox-BdqU5WLG.mjs.map +0 -1
- package/dist/Combobox-C99xluaM.d.mts +0 -11
- package/dist/Combobox-COXvmxlM.cjs +0 -1877
- package/dist/Combobox-COXvmxlM.cjs.map +0 -1
- package/dist/Combobox.d.cts +0 -3
- package/dist/ComboboxBase-zZ3tE-dH.d.cts +0 -361
- package/dist/ComboboxBase.d.cts +0 -2
- package/dist/ComboboxMultiSelect-ioB4Jx7_.d.cts +0 -47
- package/dist/ComboboxMultiSelect.d.cts +0 -2
- package/dist/ComboboxSingleSelect-Fn80tdhz.d.cts +0 -35
- package/dist/ComboboxSingleSelect.d.cts +0 -2
- package/dist/CompactBar-BEAK55kh.d.cts +0 -21
- package/dist/CompactBar.d.cts +0 -2
- package/dist/ConfigFormGroup-m5YdVa9n.cjs +0 -35
- package/dist/ConfigFormGroup-m5YdVa9n.cjs.map +0 -1
- package/dist/ConfigFormGroup.d.cts +0 -7
- package/dist/ControlBar-D8CirAyZ.d.cts +0 -151
- package/dist/ControlBar.d.cts +0 -2
- package/dist/DataTable.d.cts +0 -372
- package/dist/DateField.d.cts +0 -23
- package/dist/DatePicker-BlCgFb7g.cjs +0 -948
- package/dist/DatePicker-BlCgFb7g.cjs.map +0 -1
- package/dist/DatePicker.d.cts +0 -19
- package/dist/DateRangePicker.d.cts +0 -52
- package/dist/DropdownButton-Dl7IEzAc.cjs +0 -32
- package/dist/DropdownButton-Dl7IEzAc.cjs.map +0 -1
- package/dist/DropdownButton.d.cts +0 -26
- package/dist/DropdownMenu-DnlQqTjs.cjs +0 -74
- package/dist/DropdownMenu-DnlQqTjs.cjs.map +0 -1
- package/dist/DropdownMenu-FkiManPP.d.cts +0 -75
- package/dist/DropdownMenu.d.cts +0 -2
- package/dist/ErrorProps-Dxqb4gw_.d.cts +0 -8
- package/dist/ErrorProps.d.cts +0 -2
- package/dist/FieldRegistry-OX60T3hr.d.cts +0 -122
- package/dist/FieldRegistry.d.cts +0 -2
- package/dist/FilterBar-YzOh02f9.d.cts +0 -103
- package/dist/FilterBar.d.cts +0 -2
- package/dist/FloatingActionBar.d.cts +0 -40
- package/dist/FormControl-DFp_qcW1.d.cts +0 -60
- package/dist/FormControl-MkBXuUF6.cjs +0 -212
- package/dist/FormControl-MkBXuUF6.cjs.map +0 -1
- package/dist/FormControl.d.cts +0 -2
- package/dist/FormField-D3XhxTMg.cjs +0 -550
- package/dist/FormField-D3XhxTMg.cjs.map +0 -1
- package/dist/FormField-idNLw5PW.d.cts +0 -69
- package/dist/FormField.d.cts +0 -2
- package/dist/Header-C-WhPOin.d.cts +0 -35
- package/dist/Header.d.cts +0 -2
- package/dist/HelperTooltip-T-sTGGLD.d.cts +0 -20
- package/dist/HelperTooltip.d.cts +0 -2
- package/dist/HoverCopyableField-CRkM7o4B.cjs +0 -110
- package/dist/HoverCopyableField-CRkM7o4B.cjs.map +0 -1
- package/dist/HoverCopyableField.d.cts +0 -16
- package/dist/IconButton-BSES_-6g.d.mts +0 -24
- package/dist/IconButton-nlgjJQCS.cjs +0 -372
- package/dist/IconButton-nlgjJQCS.cjs.map +0 -1
- package/dist/IconButton.d.cts +0 -2
- package/dist/ImageTile.d.cts +0 -60
- package/dist/Input-BFI_e7aU.mjs.map +0 -1
- package/dist/Input-BM0DzWEf.d.cts +0 -65
- package/dist/Input-OJPQ07TW.cjs +0 -209
- package/dist/Input-OJPQ07TW.cjs.map +0 -1
- package/dist/Input.d.cts +0 -2
- package/dist/InputProps-CoVNpQSj.d.cts +0 -16
- package/dist/InputProps.d.cts +0 -2
- package/dist/Inserter.d.cts +0 -12
- package/dist/LayoutLoadingShimmer.d.cts +0 -20
- package/dist/Link.d.cts +0 -43
- package/dist/ListBox-BP1eaG7L.cjs +0 -448
- package/dist/ListBox-BP1eaG7L.cjs.map +0 -1
- package/dist/ListBox-BwID8jpk.mjs.map +0 -1
- package/dist/ListBox-QaeRQBSC.d.cts +0 -138
- package/dist/ListBox.d.cts +0 -2
- package/dist/ListBoxField.d.cts +0 -46
- package/dist/LoadingShimmer-Dx6ncVUV.cjs +0 -92
- package/dist/LoadingShimmer-Dx6ncVUV.cjs.map +0 -1
- package/dist/LoadingShimmer.d.cts +0 -38
- package/dist/LogicRow-C6lrFIq0.d.cts +0 -40
- package/dist/LogicRow.d.cts +0 -2
- package/dist/MaskedInput.d.cts +0 -10
- package/dist/MatchHighlight.d.cts +0 -11
- package/dist/Menu-fUnbIYr5.d.cts +0 -70
- package/dist/Menu-t2q8NrV0.cjs +0 -217
- package/dist/Menu-t2q8NrV0.cjs.map +0 -1
- package/dist/Menu.d.cts +0 -2
- package/dist/MiddleTruncatedText-CO76xIqP.cjs +0 -178
- package/dist/MiddleTruncatedText-CO76xIqP.cjs.map +0 -1
- package/dist/Modal.d.cts +0 -146
- package/dist/PageHeader-CUDnarkt.cjs +0 -77
- package/dist/PageHeader-CUDnarkt.cjs.map +0 -1
- package/dist/PageHeader-D-6W61E_.mjs.map +0 -1
- package/dist/PageHeader.d.cts +0 -35
- package/dist/PageSelector-CNnVp3Al.d.cts +0 -30
- package/dist/PageSelector.d.cts +0 -2
- package/dist/Pagination-2Yo1vRJZ.cjs +0 -236
- package/dist/Pagination-2Yo1vRJZ.cjs.map +0 -1
- package/dist/Pagination-D04tn-tf.d.cts +0 -39
- package/dist/Pagination.d.cts +0 -2
- package/dist/Pii-DHTb3ewO.cjs +0 -25
- package/dist/Pii-DHTb3ewO.cjs.map +0 -1
- package/dist/Pii.d.cts +0 -16
- package/dist/Popover-BzgMAhsX.cjs +0 -168
- package/dist/Popover-BzgMAhsX.cjs.map +0 -1
- package/dist/Popover.d.cts +0 -90
- package/dist/ProgressBar.d.cts +0 -83
- package/dist/ProgressIndicator.d.cts +0 -64
- package/dist/PseudoClassProps-C5jpj6Rp.d.cts +0 -12
- package/dist/PseudoClassProps.d.cts +0 -2
- package/dist/Radio-BrTzy7-C.cjs +0 -154
- package/dist/Radio-BrTzy7-C.cjs.map +0 -1
- package/dist/Radio.d.cts +0 -21
- package/dist/RadioGroup-CriF2InQ.cjs +0 -57
- package/dist/RadioGroup-CriF2InQ.cjs.map +0 -1
- package/dist/RadioGroup-XYWjprsv.d.cts +0 -21
- package/dist/RadioGroup.d.cts +0 -2
- package/dist/SearchInput-CTI59-NW.d.cts +0 -46
- package/dist/SearchInput.d.cts +0 -2
- package/dist/SectionHeading-C6hjGdK-.d.cts +0 -71
- package/dist/SectionHeading.d.cts +0 -2
- package/dist/SegmentedControl-C2XZF0ys.cjs +0 -125
- package/dist/SegmentedControl-C2XZF0ys.cjs.map +0 -1
- package/dist/SegmentedControl-nHIK1ZvR.d.cts +0 -59
- package/dist/SegmentedControl.d.cts +0 -2
- package/dist/Select-BH3hXMxp.d.cts +0 -83
- package/dist/Select-BurtT6bN.cjs +0 -265
- package/dist/Select-BurtT6bN.cjs.map +0 -1
- package/dist/Select.d.cts +0 -2
- package/dist/Slider.d.cts +0 -51
- package/dist/SliderRHF.d.cts +0 -18
- package/dist/Spacer-B2CerL6e.cjs +0 -20
- package/dist/Spacer-B2CerL6e.cjs.map +0 -1
- package/dist/Spacer.d.cts +0 -17
- package/dist/Spinner-B6bx70yR.cjs +0 -48
- package/dist/Spinner-B6bx70yR.cjs.map +0 -1
- package/dist/Spinner.d.cts +0 -26
- package/dist/Stack-BzVkf3cz.d.cts +0 -47
- package/dist/Stack-UeifHn3c.cjs +0 -53
- package/dist/Stack-UeifHn3c.cjs.map +0 -1
- package/dist/Stack.d.cts +0 -2
- package/dist/StatusIndicator.d.cts +0 -82
- package/dist/Sticker-CI-XxUmM.d.cts +0 -68
- package/dist/Sticker-CIoseh9f.cjs +0 -244
- package/dist/Sticker-CIoseh9f.cjs.map +0 -1
- package/dist/Sticker.d.cts +0 -2
- package/dist/SwatchPicker.d.cts +0 -18
- package/dist/Tab.d.cts +0 -26
- package/dist/TabBar-PFaDNRw0.cjs +0 -298
- package/dist/TabBar-PFaDNRw0.cjs.map +0 -1
- package/dist/TabBar-zSA8kyE6.mjs.map +0 -1
- package/dist/TabBar.d.cts +0 -33
- package/dist/TabBarIconButton.d.cts +0 -10
- package/dist/Table-DXqyNohc.d.cts +0 -13
- package/dist/Table-DxLvJYWK.cjs +0 -478
- package/dist/Table-DxLvJYWK.cjs.map +0 -1
- package/dist/Table.d.cts +0 -2
- package/dist/TableBody-CxwHmdNb.d.cts +0 -9
- package/dist/TableBody.d.cts +0 -2
- package/dist/TableBox-CiuXCXyv.cjs +0 -1370
- package/dist/TableBox-CiuXCXyv.cjs.map +0 -1
- package/dist/TableBox-luasMC73.mjs.map +0 -1
- package/dist/TableBox.d.cts +0 -3
- package/dist/TableBoxCell-DIMenSwX.d.cts +0 -259
- package/dist/TableBoxCell.d.cts +0 -2
- package/dist/TableBoxField.d.cts +0 -99
- package/dist/TableBoxRow-RNQ6wJLh.d.cts +0 -86
- package/dist/TableBoxRow.d.cts +0 -2
- package/dist/TableBoxRowActions-CYpoPhYZ.d.cts +0 -57
- package/dist/TableBoxRowActions.d.cts +0 -2
- package/dist/TableCell.d.cts +0 -2
- package/dist/TableControls-BtXK7Ils.cjs +0 -3995
- package/dist/TableControls-BtXK7Ils.cjs.map +0 -1
- package/dist/TableControls-CLNF0AJG.d.cts +0 -70
- package/dist/TableControls.d.cts +0 -2
- package/dist/TableControlsContext-DAZx6Rrj.d.cts +0 -21
- package/dist/TableControlsContext.d.cts +0 -2
- package/dist/TableHead-Ch4Ho3LW.d.cts +0 -12
- package/dist/TableHead.d.cts +0 -2
- package/dist/TableHeaderCell-Crsa2R2g.d.cts +0 -17
- package/dist/TableHeaderCell.d.cts +0 -2
- package/dist/TableLayout-nwy094C_.d.mts +0 -19
- package/dist/TableLayout.d.cts +0 -2
- package/dist/TableRow-DVTPqT4w.d.cts +0 -13
- package/dist/TableRow.d.cts +0 -2
- package/dist/TableTH.d.cts +0 -2
- package/dist/TableViewConfigurationDropdown-CaiOGyrU.d.cts +0 -32
- package/dist/TableViewConfigurationDropdown.d.cts +0 -2
- package/dist/TechnicalSticker.d.cts +0 -51
- package/dist/Text-CrGiWG2E.d.cts +0 -42
- package/dist/Text-G9QmYf0P.cjs +0 -95
- package/dist/Text-G9QmYf0P.cjs.map +0 -1
- package/dist/Text.d.cts +0 -2
- package/dist/TextArea-BNiipQDb.cjs +0 -40
- package/dist/TextArea-BNiipQDb.cjs.map +0 -1
- package/dist/TextArea-CHW9FKM4.d.cts +0 -10
- package/dist/TextArea.d.cts +0 -2
- package/dist/TextUnderlineTooltip-DMEyOu8C.d.cts +0 -18
- package/dist/TextUnderlineTooltip.d.cts +0 -2
- package/dist/Tile.d.cts +0 -63
- package/dist/Toast.d.cts +0 -23
- package/dist/Toggle-Ce-rF8Xp.cjs +0 -174
- package/dist/Toggle-Ce-rF8Xp.cjs.map +0 -1
- package/dist/Toggle-tbIebQWC.d.cts +0 -54
- package/dist/Toggle.d.cts +0 -2
- package/dist/Tooltip--eDrrk2r.d.cts +0 -100
- package/dist/Tooltip-olP3rdUO.cjs +0 -152
- package/dist/Tooltip-olP3rdUO.cjs.map +0 -1
- package/dist/Tooltip.d.cts +0 -2
- package/dist/TruncatedText-Dit2NJI6.d.cts +0 -18
- package/dist/chunk-CKQMccvm.cjs +0 -28
- package/dist/components/Attribute/index.cjs +0 -210
- package/dist/components/Attribute/index.cjs.map +0 -1
- package/dist/components/Attribute/index.d.cts +0 -3
- package/dist/components/Badge/index.cjs +0 -7
- package/dist/components/Badge/index.d.cts +0 -2
- package/dist/components/Banner/index.cjs +0 -99
- package/dist/components/Banner/index.cjs.map +0 -1
- package/dist/components/Banner/index.d.cts +0 -2
- package/dist/components/Breadcrumbs/index.cjs +0 -7
- package/dist/components/Breadcrumbs/index.d.cts +0 -2
- package/dist/components/Button/index.cjs +0 -11
- package/dist/components/Button/index.d.cts +0 -3
- package/dist/components/ButtonGroup/index.cjs +0 -112
- package/dist/components/ButtonGroup/index.cjs.map +0 -1
- package/dist/components/ButtonGroup/index.d.cts +0 -2
- package/dist/components/Card/index.cjs +0 -12
- package/dist/components/Card/index.d.cts +0 -3
- package/dist/components/CardV2/index.cjs +0 -7
- package/dist/components/CardV2/index.d.cts +0 -3
- package/dist/components/Checkbox/index.cjs +0 -7
- package/dist/components/Checkbox/index.d.cts +0 -2
- package/dist/components/Combobox/index.cjs +0 -9
- package/dist/components/Combobox/index.d.cts +0 -3
- package/dist/components/ConfigFormGroup/index.cjs +0 -10
- package/dist/components/ConfigFormGroup/index.d.cts +0 -3
- package/dist/components/DataTable/TableControls/index.cjs +0 -27
- package/dist/components/DataTable/TableControls/index.d.cts +0 -16
- package/dist/components/DataTable/index.cjs +0 -1434
- package/dist/components/DataTable/index.cjs.map +0 -1
- package/dist/components/DataTable/index.d.cts +0 -8
- package/dist/components/DataTable/types.cjs +0 -0
- package/dist/components/DataTable/types.d.cts +0 -159
- package/dist/components/DatePicker/index.cjs +0 -10
- package/dist/components/DatePicker/index.d.cts +0 -5
- package/dist/components/DropdownButton/index.cjs +0 -7
- package/dist/components/DropdownButton/index.d.cts +0 -2
- package/dist/components/DropdownMenu/index.cjs +0 -7
- package/dist/components/DropdownMenu/index.d.cts +0 -2
- package/dist/components/FormControl/index.cjs +0 -15
- package/dist/components/FormControl/index.d.cts +0 -3
- package/dist/components/FormField/index.cjs +0 -19
- package/dist/components/FormField/index.d.cts +0 -6
- package/dist/components/HoverCopyableField/index.cjs +0 -2
- package/dist/components/HoverCopyableField/index.d.cts +0 -2
- package/dist/components/ImageTile/index.cjs +0 -225
- package/dist/components/ImageTile/index.cjs.map +0 -1
- package/dist/components/ImageTile/index.d.cts +0 -2
- package/dist/components/Input/index.cjs +0 -14
- package/dist/components/Input/index.cjs.map +0 -1
- package/dist/components/Input/index.d.cts +0 -2
- package/dist/components/Link/index.cjs +0 -87
- package/dist/components/Link/index.cjs.map +0 -1
- package/dist/components/Link/index.d.cts +0 -2
- package/dist/components/ListBox/index.cjs +0 -8
- package/dist/components/ListBox/index.d.cts +0 -4
- package/dist/components/LoadingShimmer/index.cjs +0 -6
- package/dist/components/LoadingShimmer/index.d.cts +0 -2
- package/dist/components/MaskedInput/index.cjs +0 -29
- package/dist/components/MaskedInput/index.cjs.map +0 -1
- package/dist/components/MaskedInput/index.d.cts +0 -2
- package/dist/components/MatchHighlight/index.cjs +0 -31
- package/dist/components/MatchHighlight/index.cjs.map +0 -1
- package/dist/components/MatchHighlight/index.d.cts +0 -2
- package/dist/components/Menu/index.cjs +0 -14
- package/dist/components/Menu/index.d.cts +0 -2
- package/dist/components/Modal/index.cjs +0 -290
- package/dist/components/Modal/index.cjs.map +0 -1
- package/dist/components/Modal/index.d.cts +0 -2
- package/dist/components/PageHeader/index.cjs +0 -7
- package/dist/components/PageHeader/index.d.cts +0 -2
- package/dist/components/Pagination/index.cjs +0 -10
- package/dist/components/Pagination/index.d.cts +0 -4
- package/dist/components/Pii/index.cjs +0 -2
- package/dist/components/Pii/index.d.cts +0 -2
- package/dist/components/Popover/index.cjs +0 -12
- package/dist/components/Popover/index.d.cts +0 -2
- package/dist/components/ProgressBar/index.cjs +0 -177
- package/dist/components/ProgressBar/index.cjs.map +0 -1
- package/dist/components/ProgressBar/index.d.cts +0 -2
- package/dist/components/ProgressIndicator/index.cjs +0 -185
- package/dist/components/ProgressIndicator/index.cjs.map +0 -1
- package/dist/components/ProgressIndicator/index.d.cts +0 -2
- package/dist/components/Radio/index.cjs +0 -7
- package/dist/components/Radio/index.d.cts +0 -2
- package/dist/components/RadioGroup/index.cjs +0 -7
- package/dist/components/RadioGroup/index.d.cts +0 -2
- package/dist/components/SegmentedControl/index.cjs +0 -8
- package/dist/components/SegmentedControl/index.d.cts +0 -2
- package/dist/components/Select/index.cjs +0 -9
- package/dist/components/Select/index.d.cts +0 -2
- package/dist/components/Slider/index.cjs +0 -245
- package/dist/components/Slider/index.cjs.map +0 -1
- package/dist/components/Slider/index.d.cts +0 -3
- package/dist/components/Spacer/index.cjs +0 -2
- package/dist/components/Spacer/index.d.cts +0 -2
- package/dist/components/Spinner/index.cjs +0 -7
- package/dist/components/Spinner/index.d.cts +0 -2
- package/dist/components/Stack/index.cjs +0 -8
- package/dist/components/Stack/index.d.cts +0 -2
- package/dist/components/StatusIndicator/index.cjs +0 -224
- package/dist/components/StatusIndicator/index.cjs.map +0 -1
- package/dist/components/StatusIndicator/index.d.cts +0 -2
- package/dist/components/Sticker/index.cjs +0 -11
- package/dist/components/Sticker/index.d.cts +0 -2
- package/dist/components/SwatchPicker/index.cjs +0 -63
- package/dist/components/SwatchPicker/index.cjs.map +0 -1
- package/dist/components/SwatchPicker/index.d.cts +0 -2
- package/dist/components/TabBar/index.cjs +0 -11
- package/dist/components/TabBar/index.d.cts +0 -4
- package/dist/components/Table/index.cjs +0 -21
- package/dist/components/Table/index.d.cts +0 -8
- package/dist/components/TableBox/index.cjs +0 -7
- package/dist/components/TableBox/index.d.cts +0 -3
- package/dist/components/TechnicalSticker/index.cjs +0 -239
- package/dist/components/TechnicalSticker/index.cjs.map +0 -1
- package/dist/components/TechnicalSticker/index.d.cts +0 -2
- package/dist/components/Text/index.cjs +0 -8
- package/dist/components/Text/index.d.cts +0 -2
- package/dist/components/TextArea/index.cjs +0 -7
- package/dist/components/TextArea/index.d.cts +0 -2
- package/dist/components/Tile/index.cjs +0 -102
- package/dist/components/Tile/index.cjs.map +0 -1
- package/dist/components/Tile/index.d.cts +0 -2
- package/dist/components/Toast/index.cjs +0 -134
- package/dist/components/Toast/index.cjs.map +0 -1
- package/dist/components/Toast/index.d.cts +0 -2
- package/dist/components/Toggle/index.cjs +0 -7
- package/dist/components/Toggle/index.d.cts +0 -2
- package/dist/components/Tooltip/index.cjs +0 -11
- package/dist/components/Tooltip/index.d.cts +0 -4
- package/dist/constants-B6c8S033.d.cts +0 -6
- package/dist/constants.d.cts +0 -2
- package/dist/constants2.d.cts +0 -10
- package/dist/filter-size-context-CIw0Zi6r.d.cts +0 -52
- package/dist/filter-size-context.d.cts +0 -2
- package/dist/helpers.d.cts +0 -76
- package/dist/index-BIAn8oQh.d.cts +0 -1
- package/dist/index-BL32-cvv.d.cts +0 -1
- package/dist/index-BPSCxsMC.d.cts +0 -1
- package/dist/index-BR1oNnaF.d.cts +0 -1
- package/dist/index-BXpMZvwA.d.cts +0 -1
- package/dist/index-BhY1qu3m.d.cts +0 -1
- package/dist/index-BlwcRiXv.d.cts +0 -1
- package/dist/index-Bw8QVu_o.d.cts +0 -75
- package/dist/index-C0NRIDsj2.d.cts +0 -1
- package/dist/index-C1ihAKnV.d.cts +0 -1
- package/dist/index-C9EIpBh8.d.cts +0 -7
- package/dist/index-CDAfh8Ew.d.cts +0 -1
- package/dist/index-CFG0_wK4.d.cts +0 -1
- package/dist/index-CQ25UCod.d.cts +0 -1
- package/dist/index-Cv0jeUQf2.d.cts +0 -1
- package/dist/index-CwSIy_W-.d.cts +0 -1
- package/dist/index-D-BciAtf.d.cts +0 -1
- package/dist/index-D34XP8vp.d.cts +0 -54
- package/dist/index-D6CnpA_r.d.cts +0 -1
- package/dist/index-D9IqtUDs.d.cts +0 -1
- package/dist/index-DFKoAoY2.d.cts +0 -1
- package/dist/index-DpEKQcoR.d.cts +0 -1
- package/dist/index-_wQ5ClJU.d.cts +0 -1
- package/dist/index-dC-i2r_u.d.cts +0 -1
- package/dist/index-sQecLSpR.d.cts +0 -1
- package/dist/index.cjs +0 -0
- package/dist/index.d.cts +0 -2
- package/dist/index2.d.cts +0 -2
- package/dist/index3.d.cts +0 -4
- package/dist/index4.d.cts +0 -11
- package/dist/index5.d.cts +0 -1
- package/dist/input-DPB0cX2m.d.cts +0 -17
- package/dist/inputFields.d.cts +0 -83
- package/dist/intersperse-_0nQM5Rb.cjs +0 -26
- package/dist/intersperse-_0nQM5Rb.cjs.map +0 -1
- package/dist/layouts/LayoutLoadingShimmer/index.cjs +0 -139
- package/dist/layouts/LayoutLoadingShimmer/index.cjs.map +0 -1
- package/dist/layouts/LayoutLoadingShimmer/index.d.cts +0 -2
- package/dist/lib/ConfigContext.cjs +0 -15
- package/dist/lib/ConfigContext.cjs.map +0 -1
- package/dist/lib/ConfigContext.d.cts +0 -16
- package/dist/lib/GlobalStyles.cjs +0 -57
- package/dist/lib/GlobalStyles.cjs.map +0 -1
- package/dist/lib/GlobalStyles.d.cts +0 -8
- package/dist/lib/HeadlessAriaButton.cjs +0 -33
- package/dist/lib/HeadlessAriaButton.cjs.map +0 -1
- package/dist/lib/HeadlessAriaButton.d.cts +0 -12
- package/dist/lib/MiddleTruncatedText.cjs +0 -7
- package/dist/lib/MiddleTruncatedText.d.cts +0 -14
- package/dist/lib/PDSProvider.cjs +0 -13
- package/dist/lib/PDSProvider.cjs.map +0 -1
- package/dist/lib/PDSProvider.d.cts +0 -10
- package/dist/lib/TruncatedText.cjs +0 -39
- package/dist/lib/TruncatedText.cjs.map +0 -1
- package/dist/lib/TruncatedText.d.cts +0 -2
- package/dist/lib/TruncatedTextWithTooltip.cjs +0 -34
- package/dist/lib/TruncatedTextWithTooltip.cjs.map +0 -1
- package/dist/lib/TruncatedTextWithTooltip.d.cts +0 -15
- package/dist/lib/comboboxHelper.cjs +0 -46
- package/dist/lib/comboboxHelper.cjs.map +0 -1
- package/dist/lib/comboboxHelper.d.cts +0 -24
- package/dist/lib/copyTextToClipboard.cjs +0 -33
- package/dist/lib/copyTextToClipboard.cjs.map +0 -1
- package/dist/lib/copyTextToClipboard.d.cts +0 -4
- package/dist/lib/datePickerHelper.cjs +0 -36
- package/dist/lib/datePickerHelper.cjs.map +0 -1
- package/dist/lib/datePickerHelper.d.cts +0 -19
- package/dist/lib/message.cjs +0 -12
- package/dist/lib/message.cjs.map +0 -1
- package/dist/lib/message.d.cts +0 -2
- package/dist/lib/pseudoClass.cjs +0 -31
- package/dist/lib/pseudoClass.cjs.map +0 -1
- package/dist/lib/pseudoClass.d.cts +0 -45
- package/dist/lib/reorderItems.cjs +0 -38
- package/dist/lib/reorderItems.cjs.map +0 -1
- package/dist/lib/reorderItems.d.cts +0 -26
- package/dist/lib/selectHelper.cjs +0 -22
- package/dist/lib/selectHelper.cjs.map +0 -1
- package/dist/lib/selectHelper.d.cts +0 -14
- package/dist/lib/useControlled.cjs +0 -20
- package/dist/lib/useControlled.cjs.map +0 -1
- package/dist/lib/useControlled.d.cts +0 -16
- package/dist/lib/useIsOverflow.cjs +0 -58
- package/dist/lib/useIsOverflow.cjs.map +0 -1
- package/dist/lib/useIsOverflow.d.cts +0 -11
- package/dist/lib/useOutsideClick.cjs +0 -19
- package/dist/lib/useOutsideClick.cjs.map +0 -1
- package/dist/lib/useOutsideClick.d.cts +0 -13
- package/dist/lib/useScrollOverflow.cjs +0 -61
- package/dist/lib/useScrollOverflow.cjs.map +0 -1
- package/dist/lib/useScrollOverflow.d.cts +0 -36
- package/dist/lib/zindex.cjs +0 -26
- package/dist/lib/zindex.cjs.map +0 -1
- package/dist/lib/zindex.d.cts +0 -25
- package/dist/message-BEgtEjQC.d.cts +0 -9
- package/dist/mixins/focus.cjs +0 -39
- package/dist/mixins/focus.cjs.map +0 -1
- package/dist/mixins/focus.d.cts +0 -11
- package/dist/mixins/hoverable.cjs +0 -38
- package/dist/mixins/hoverable.cjs.map +0 -1
- package/dist/mixins/hoverable.d.cts +0 -16
- package/dist/mixins/input.cjs +0 -95
- package/dist/mixins/input.cjs.map +0 -1
- package/dist/mixins/input.d.cts +0 -2
- package/dist/mixins/menuItem.cjs +0 -110
- package/dist/mixins/menuItem.cjs.map +0 -1
- package/dist/mixins/menuItem.d.cts +0 -30
- package/dist/mixins/print/index.cjs +0 -25
- package/dist/mixins/print/index.cjs.map +0 -1
- package/dist/mixins/print/index.d.cts +0 -11
- package/dist/mixins/text.cjs +0 -93
- package/dist/mixins/text.cjs.map +0 -1
- package/dist/mixins/text.d.cts +0 -2
- package/dist/operators-1qE2GpC7.d.cts +0 -43
- package/dist/operators.d.cts +0 -2
- package/dist/text-PmH5oc61.d.cts +0 -14
- package/dist/theme-Cadb1xzQ.d.cts +0 -154
- package/dist/theme.cjs +0 -353
- package/dist/theme.cjs.map +0 -1
- package/dist/theme.d.cts +0 -2
- package/dist/types-B_HHNlia.d.cts +0 -158
- package/dist/types-CCvc590y.d.cts +0 -45
- package/dist/types-CkiXVJeR.d.cts +0 -10
- package/dist/types-SYSKcZKW.d.cts +0 -25
- package/dist/types.d.cts +0 -2
- package/dist/types2.d.cts +0 -2
- package/dist/types3.d.cts +0 -2
- package/dist/types4.d.cts +0 -2
- package/dist/useFilterStateV2-DbPwX5N1.d.cts +0 -93
- package/dist/useFilterStateV2.d.cts +0 -2
- package/dist/useFormField--Q8ZdpW5.d.cts +0 -30
- package/dist/useFormField-BZlArnsI.cjs +0 -37
- package/dist/useFormField-BZlArnsI.cjs.map +0 -1
- package/dist/useFormField.d.cts +0 -2
- package/dist/useFormGroup-Bmnzgq0S.cjs +0 -26
- package/dist/useFormGroup-Bmnzgq0S.cjs.map +0 -1
- package/dist/useFormGroup.d.cts +0 -18
- package/dist/useTableBoxDragAndDrop-DnbUToce.d.cts +0 -69
- package/dist/useTableBoxDragAndDrop.d.cts +0 -2
- package/dist/useTableColumns.d.cts +0 -72
- package/dist/useToggle-DARO917w.cjs +0 -27
- package/dist/useToggle-DARO917w.cjs.map +0 -1
- package/dist/utilities-mSlaTrjB.d.cts +0 -9
- package/dist/utilities.d.cts +0 -2
- package/dist/utils/storybook.cjs +0 -12
- package/dist/utils/storybook.cjs.map +0 -1
- package/dist/utils/testing.cjs +0 -50
- package/dist/utils/testing.cjs.map +0 -1
- package/dist/utils/testing.d.cts +0 -18
- package/dist/validation-CJymv6JE.d.cts +0 -51
- package/dist/validation.d.cts +0 -2
- package/dist/value-control-resolver-B9p25q3G.d.cts +0 -46
- package/dist/value-control-resolver.d.cts +0 -2
- package/dist/variables/color.cjs +0 -22
- package/dist/variables/color.cjs.map +0 -1
- package/dist/variables/color.d.cts +0 -19
- package/dist/variables/effect.cjs +0 -27
- package/dist/variables/effect.cjs.map +0 -1
- package/dist/variables/effect.d.cts +0 -21
- package/dist/variables/keyframes.cjs +0 -22
- package/dist/variables/keyframes.cjs.map +0 -1
- package/dist/variables/keyframes.d.cts +0 -8
- package/dist/variables/spacing.cjs +0 -10
- package/dist/variables/spacing.cjs.map +0 -1
- package/dist/variables/spacing.d.cts +0 -8
- package/dist/variables/text.cjs +0 -13
- package/dist/variables/text.cjs.map +0 -1
- package/dist/variables/text.d.cts +0 -10
- package/dist/variables/transitions.cjs +0 -24
- package/dist/variables/transitions.cjs.map +0 -1
- package/dist/variables/transitions.d.cts +0 -19
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# Component Patterns & Props Reference
|
|
2
|
+
|
|
3
|
+
## Form Configuration
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import ConfigFormGroup from '@persona/design-system/components/ConfigFormGroup';
|
|
7
|
+
import { TextField, TextAreaField } from '@persona/design-system/components/FormField';
|
|
8
|
+
|
|
9
|
+
const [config, setConfig] = useState({ name: '', description: '', prompt: '' });
|
|
10
|
+
|
|
11
|
+
<ConfigFormGroup>
|
|
12
|
+
<TextField
|
|
13
|
+
label="Name"
|
|
14
|
+
value={config.name}
|
|
15
|
+
onChange={(e) => setConfig({ ...config, name: e.target.value })}
|
|
16
|
+
configField={true} // helperText becomes a tooltip
|
|
17
|
+
helperText="Unique identifier"
|
|
18
|
+
errorText={errors.name}
|
|
19
|
+
rightActions={<Button size="sm" variant="basic">Generate</Button>}
|
|
20
|
+
/>
|
|
21
|
+
<TextAreaField
|
|
22
|
+
label="Prompt"
|
|
23
|
+
value={config.prompt}
|
|
24
|
+
onChange={(e) => setConfig({ ...config, prompt: e.target.value })}
|
|
25
|
+
configField={true}
|
|
26
|
+
warningText={warnings.prompt}
|
|
27
|
+
/>
|
|
28
|
+
</ConfigFormGroup>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
- `configField={true}` → helper text becomes a tooltip instead of inline text
|
|
32
|
+
- `ConfigFormGroup` provides consistent 20px spacing between fields
|
|
33
|
+
- Use controlled inputs; clear `errorText` on change via `updateField` in form state hook
|
|
34
|
+
|
|
35
|
+
## Form State Hook
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
const useFormState = (initialConfig) => {
|
|
39
|
+
const [config, setConfig] = useState(initialConfig);
|
|
40
|
+
const [errors, setErrors] = useState({});
|
|
41
|
+
|
|
42
|
+
const updateField = useCallback((field, value) => {
|
|
43
|
+
setConfig(prev => ({ ...prev, [field]: value }));
|
|
44
|
+
setErrors(prev => { const next = { ...prev }; delete next[field]; return next; });
|
|
45
|
+
}, []);
|
|
46
|
+
|
|
47
|
+
const validate = useCallback(() => {
|
|
48
|
+
const newErrors = {};
|
|
49
|
+
if (!config.name) newErrors.name = 'Required';
|
|
50
|
+
setErrors(newErrors);
|
|
51
|
+
return Object.keys(newErrors).length === 0;
|
|
52
|
+
}, [config]);
|
|
53
|
+
|
|
54
|
+
return { config, errors, updateField, validate };
|
|
55
|
+
};
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Dynamic List (ListBox)
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { ListBox } from '@persona/design-system/components/ListBox';
|
|
62
|
+
|
|
63
|
+
<ListBox
|
|
64
|
+
items={items}
|
|
65
|
+
selectedKeys={selectedKeys}
|
|
66
|
+
onSelectionChange={setSelectedKeys}
|
|
67
|
+
onAdd={() => setItems([...items, { id: uuid(), name: 'New' }])}
|
|
68
|
+
onDelete={(keys) => setItems(items.filter(i => !keys.has(i.id)))}
|
|
69
|
+
selectionMode="multiple"
|
|
70
|
+
emptyText="No items"
|
|
71
|
+
>
|
|
72
|
+
{items.map(item => (
|
|
73
|
+
<ListBox.Item key={item.id}>{item.name}</ListBox.Item>
|
|
74
|
+
))}
|
|
75
|
+
</ListBox>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Drag-drop reordering: add `reorderConfig={{ onReorder: (items) => void, dragIcon: ReactNode }}`.
|
|
79
|
+
|
|
80
|
+
## Editable Table (TableBox)
|
|
81
|
+
|
|
82
|
+
Use `TableBox` for **small, form-adjacent tables** — config editors, field mappings, inline-editable row lists. Use `DataTable` for **data views** with pagination, sorting, and server-side data.
|
|
83
|
+
|
|
84
|
+
```tsx
|
|
85
|
+
import TableBox from '@persona/design-system/components/TableBox';
|
|
86
|
+
|
|
87
|
+
const columns = [
|
|
88
|
+
{ key: 'name', title: 'Name' },
|
|
89
|
+
{ key: 'type', title: 'Type' },
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
<TableBox columns={columns} aria-label='File list' selectionMode='none'>
|
|
93
|
+
{items.map((item) => (
|
|
94
|
+
<TableBox.Row key={item.id} id={item.id} onDelete={() => removeItem(item.id)}>
|
|
95
|
+
<TableBox.Cell>{item.name}</TableBox.Cell>
|
|
96
|
+
<TableBox.Cell>{item.type}</TableBox.Cell>
|
|
97
|
+
</TableBox.Row>
|
|
98
|
+
))}
|
|
99
|
+
</TableBox>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
- `aria-label` is **required**
|
|
103
|
+
- Rows are composed via `TableBox.Row` + `TableBox.Cell` children (not an `items` prop)
|
|
104
|
+
- Row actions: pass `actions={[{ label, onClick }]}` or `onDelete` on `TableBox.Row`
|
|
105
|
+
- Drag-drop reordering: `reorderConfig={{ items, itemKeyPath: 'id', onReorder }}`
|
|
106
|
+
- Empty state: `emptyText`; pass `onCreateNewRow` to make the message a clickable "add row" button
|
|
107
|
+
- `onCreateNewRow` also fires after Enter on the **last cell of the last row** (single-line text inline edit only)
|
|
108
|
+
|
|
109
|
+
### Inline editing
|
|
110
|
+
|
|
111
|
+
Declare `inlineEditConfig` on column definitions; pass `columnKey`, `itemId`, and `value` on each cell:
|
|
112
|
+
|
|
113
|
+
```tsx
|
|
114
|
+
const columns = [
|
|
115
|
+
{
|
|
116
|
+
key: 'name',
|
|
117
|
+
title: 'Name',
|
|
118
|
+
inlineEditConfig: { type: 'text', onChange: (id, value) => updateField(id, 'name', value) },
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: 'role',
|
|
122
|
+
title: 'Role',
|
|
123
|
+
inlineEditConfig: {
|
|
124
|
+
type: 'combobox',
|
|
125
|
+
options: roleOptions,
|
|
126
|
+
onChange: (id, value) => updateField(id, 'role', value),
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
|
|
131
|
+
<TableBox columns={columns} aria-label='Editable users'>
|
|
132
|
+
{users.map((user) => (
|
|
133
|
+
<TableBox.Row key={user.id} id={user.id}>
|
|
134
|
+
<TableBox.Cell columnKey='name' itemId={user.id} value={user.name} errorText={errors[user.id]?.name}>
|
|
135
|
+
{user.name}
|
|
136
|
+
</TableBox.Cell>
|
|
137
|
+
<TableBox.Cell columnKey='role' itemId={user.id} value={user.role}>
|
|
138
|
+
{roleLabel(user.role)}
|
|
139
|
+
</TableBox.Cell>
|
|
140
|
+
</TableBox.Row>
|
|
141
|
+
))}
|
|
142
|
+
</TableBox>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
- Inline editing forces fixed-width layout (no horizontal scroll) automatically
|
|
146
|
+
- Cell/row validation: pass `errorText` on `TableBox.Cell` or `TableBox.Row`
|
|
147
|
+
- For adding rows from a form field, prefer `TableBoxField` (below) over bare `onCreateNewRow`
|
|
148
|
+
|
|
149
|
+
### Form field wrapper (TableBoxField)
|
|
150
|
+
|
|
151
|
+
Use inside `ConfigFormGroup` when the table needs a label, add/delete toolbar, and row creation:
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
import { TableBoxField } from '@persona/design-system/components/FormField';
|
|
155
|
+
|
|
156
|
+
<TableBoxField
|
|
157
|
+
label='Case actions'
|
|
158
|
+
labelProps={{ size: 'md' }} // defaults to 'sm'; match sibling ControlPanel labels
|
|
159
|
+
columns={columns}
|
|
160
|
+
createNewRow={() => addRow()}
|
|
161
|
+
onDelete={(selectedKey) => removeRow(selectedKey)}
|
|
162
|
+
selectionMode='single'
|
|
163
|
+
>
|
|
164
|
+
{rows.map((row) => (
|
|
165
|
+
<TableBoxField.Row key={row.id} id={row.id}>
|
|
166
|
+
<TableBoxField.Cell columnKey='key' itemId={row.id} value={row.key}>
|
|
167
|
+
{row.key}
|
|
168
|
+
</TableBoxField.Cell>
|
|
169
|
+
</TableBoxField.Row>
|
|
170
|
+
))}
|
|
171
|
+
</TableBoxField>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`TableBoxField.Row` and `TableBoxField.Cell` are aliases for `TableBox.Row` / `TableBox.Cell`.
|
|
175
|
+
|
|
176
|
+
## Collapsible Sections (Card)
|
|
177
|
+
|
|
178
|
+
```tsx
|
|
179
|
+
import { Card } from '@persona/design-system/components/CardV2';
|
|
180
|
+
|
|
181
|
+
<Card>
|
|
182
|
+
<Card.Section header="Basic Settings" collapsible={true} defaultCollapsed={false}>
|
|
183
|
+
{/* Content */}
|
|
184
|
+
</Card.Section>
|
|
185
|
+
<Card.Section header="Advanced" collapsible={true}>
|
|
186
|
+
{/* Content */}
|
|
187
|
+
</Card.Section>
|
|
188
|
+
</Card>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Modal
|
|
192
|
+
|
|
193
|
+
```tsx
|
|
194
|
+
import { Modal } from '@persona/design-system/components/Modal';
|
|
195
|
+
|
|
196
|
+
<Modal
|
|
197
|
+
isOpen={isOpen}
|
|
198
|
+
onClose={() => setIsOpen(false)}
|
|
199
|
+
title="Add Tools"
|
|
200
|
+
footer={
|
|
201
|
+
<>
|
|
202
|
+
<Button variant="basic" onClick={() => setIsOpen(false)}>Cancel</Button>
|
|
203
|
+
<Button variant="primary" onClick={handleSave}>Save</Button>
|
|
204
|
+
</>
|
|
205
|
+
}
|
|
206
|
+
>
|
|
207
|
+
{/* Content */}
|
|
208
|
+
</Modal>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
## Testing
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
import { render as dsRender, screen } from '@persona/design-system/utils/testing';
|
|
215
|
+
import userEvent from '@testing-library/user-event';
|
|
216
|
+
import { waitFor } from '@testing-library/react';
|
|
217
|
+
|
|
218
|
+
it('handles input', async () => {
|
|
219
|
+
dsRender(<MyComponent />);
|
|
220
|
+
await userEvent.type(screen.getByLabelText('Name'), 'Test');
|
|
221
|
+
expect(screen.getByLabelText('Name')).toHaveValue('Test');
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('shows validation errors', async () => {
|
|
225
|
+
dsRender(<MyComponent />);
|
|
226
|
+
await userEvent.click(screen.getByRole('button', { name: /save/i }));
|
|
227
|
+
await waitFor(() => expect(screen.getByText('Required')).toBeInTheDocument());
|
|
228
|
+
});
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
- Use `dsRender` (wraps with ThemeProvider)
|
|
232
|
+
- Prefer `userEvent.type()` over `fireEvent.change()`
|
|
233
|
+
- Use `waitFor()` for async state updates
|
|
234
|
+
- Prefer `getByRole`, `getByLabelText`, `getByText` over `getByTestId`
|
|
235
|
+
|
|
236
|
+
## Props Reference
|
|
237
|
+
|
|
238
|
+
### TextField / TextAreaField
|
|
239
|
+
- `label` — field label
|
|
240
|
+
- `value` / `onChange` — controlled input
|
|
241
|
+
- `helperText` — help text (tooltip if `configField={true}`)
|
|
242
|
+
- `errorText` — error message (red)
|
|
243
|
+
- `warningText` — warning message (yellow)
|
|
244
|
+
- `configField` — boolean, renders helper as tooltip
|
|
245
|
+
- `rightActions` — ReactNode for buttons/icons next to label
|
|
246
|
+
- `disabled` — boolean
|
|
247
|
+
|
|
248
|
+
### ListBox
|
|
249
|
+
- `items` — array of items
|
|
250
|
+
- `selectedKeys` / `onSelectionChange` — controlled selection (`Set<string>`)
|
|
251
|
+
- `selectionMode` — `"single"` | `"multiple"` | `"none"`
|
|
252
|
+
- `onAdd` — add button callback
|
|
253
|
+
- `onDelete` — delete callback (receives `Set<string>` of keys)
|
|
254
|
+
- `reorderConfig` — `{ onReorder: (items) => void, dragIcon: ReactNode }`
|
|
255
|
+
- `emptyText` — shown when no items
|
|
256
|
+
|
|
257
|
+
### TableBox
|
|
258
|
+
- `columns` — `{ key, title, inlineEditConfig? }[]` (required)
|
|
259
|
+
- `aria-label` — accessible table name (required)
|
|
260
|
+
- `emptyText` — shown when no rows
|
|
261
|
+
- `selectionMode` — `"single"` | `"none"` (default `"none"`)
|
|
262
|
+
- `selectedKey` / `onSelectionChange` / `defaultSelectedKey` — row selection
|
|
263
|
+
- `onCreateNewRow` — makes empty state clickable; fires after Enter on last cell of last row (single-line text)
|
|
264
|
+
- `newRowId` — auto-opens inline edit on the first column of the new row
|
|
265
|
+
- `disabled` — view-only; blocks edits, delete, and reorder
|
|
266
|
+
- `reorderConfig` — `{ items, itemKeyPath, onReorder }` for drag-drop row reorder
|
|
267
|
+
- `disableHorizontalScroll` — fixed-width/truncating layout (auto when any column has `inlineEditConfig`)
|
|
268
|
+
- `hideHeader` — hide column headers (e.g. single-column tables under a `FormField` label)
|
|
269
|
+
|
|
270
|
+
#### TableBox.Row
|
|
271
|
+
- `id` — row identifier (required)
|
|
272
|
+
- `actions` — `[{ label, onClick }]` dropdown menu items
|
|
273
|
+
- `onDelete` — renders row delete button
|
|
274
|
+
- `errorText` — row-wide validation error (shown in first cell)
|
|
275
|
+
- `dropdownFormFields` / `dropdownContent` / `dropdownHeadingText` / `dropdownFooter` — expandable row popover (requires `selectionMode='single'`; opens when row is selected)
|
|
276
|
+
|
|
277
|
+
#### TableBox.Cell
|
|
278
|
+
- `columnKey` / `itemId` / `value` — required for inline editing
|
|
279
|
+
- `errorText` — cell validation error
|
|
280
|
+
- `inlineEditConfigOverride` — per-cell override of column `inlineEditConfig`
|
|
281
|
+
|
|
282
|
+
#### TableBoxField (extends TableBox + FormField)
|
|
283
|
+
- `label`, `helperText`, `errorText`, `warningText`, `configField` — standard form field props
|
|
284
|
+
- `createNewRow` — returns new row id; wires add button and empty state
|
|
285
|
+
- `onAdd` — alternative add handler (when not using `createNewRow`)
|
|
286
|
+
- `onDelete` — deletes the currently selected row
|
|
287
|
+
- `actions` — toolbar dropdown actions (receives `selectedKey`)
|
|
288
|
+
- `addDropdownConfig` — `{ options, onSelection }` for add-menu instead of direct add
|
|
289
|
+
|
|
290
|
+
### Card / Card.Section
|
|
291
|
+
- `collapsible` — boolean
|
|
292
|
+
- `defaultCollapsed` — boolean
|
|
293
|
+
- `header` — section header text
|
|
294
|
+
- `loading` — boolean
|
|
295
|
+
- `empty` — boolean
|
|
296
|
+
|
|
297
|
+
### Stack / HStack
|
|
298
|
+
- `spacing` — spacing value (default: `Spacing[2]`)
|
|
299
|
+
- `align` — `"start"` | `"center"` | `"end"` | `"stretch"`
|
|
300
|
+
- `justify` — `"start"` | `"center"` | `"end"` | `"space-between"`
|
|
301
|
+
- `wrap` — boolean
|
|
302
|
+
- `fullWidth` — boolean
|
|
303
|
+
|
|
304
|
+
### Modal
|
|
305
|
+
- `isOpen` / `onClose` — controlled open state
|
|
306
|
+
- `title` — modal title
|
|
307
|
+
- `footer` — footer content (ReactNode)
|
|
308
|
+
|
|
309
|
+
### Sticker
|
|
310
|
+
- `variant` — `"blue"` | `"teal"` | `"green"` | `"yellow"` | `"orange"` | `"red"` | `"purple"` | `"darkGrey"` | `"white"` | `"success"` | `"danger"` | `"caution"` | `"basic"` | `"grey"`
|
|
311
|
+
- `icon` — optional icon component (use 12px icons)
|
|
312
|
+
- `onDismiss` — dismiss button callback
|
|
313
|
+
- `required` — boolean, shows asterisk
|
|
314
|
+
|
|
315
|
+
## Key File Paths
|
|
316
|
+
|
|
317
|
+
- `@persona/design-system/components/ConfigFormGroup/ConfigFormGroup.tsx`
|
|
318
|
+
- `@persona/design-system/components/FormField/FormField.tsx`
|
|
319
|
+
- `@persona/design-system/components/Input/Input.tsx`
|
|
320
|
+
- `@persona/design-system/components/TextArea/TextArea.tsx`
|
|
321
|
+
- `@persona/design-system/components/ListBox/ListBox.tsx`
|
|
322
|
+
- `@persona/design-system/components/TableBox/TableBox.tsx`
|
|
323
|
+
- `@persona/design-system/components/FormField/TableBoxField.tsx`
|
|
324
|
+
- `@persona/design-system/components/CardV2/Card.tsx`
|
|
325
|
+
- `@persona/design-system/components/Stack/Stack.tsx`
|
|
326
|
+
- `@persona/design-system/components/Text/` (Heading, Paragraph, Label)
|
|
327
|
+
- `@persona/design-system/components/Sticker/Sticker.tsx`
|
|
328
|
+
- `@persona/design-system/components/Modal/Modal.tsx`
|
|
329
|
+
- `@persona/design-system/components/Popover/Popover.tsx`
|
|
330
|
+
- `@persona/design-system/utils/testing.tsx`
|
|
331
|
+
- `@persona/design-system/components/DataTable/`
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# PDS UI Examples
|
|
2
|
+
|
|
3
|
+
Common patterns for building UI with the Persona design system.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Buttons](#buttons)
|
|
8
|
+
- [Forms](#forms)
|
|
9
|
+
- [Modals](#modals)
|
|
10
|
+
- [Data Tables](#data-tables)
|
|
11
|
+
- [Status Indicators](#status-indicators)
|
|
12
|
+
- [Layout](#layout)
|
|
13
|
+
- [Navigation — Tabs](#navigation--tabs)
|
|
14
|
+
- [Text Components](#text-components)
|
|
15
|
+
- [Feedback Components](#feedback-components)
|
|
16
|
+
- [Empty States](#empty-states)
|
|
17
|
+
|
|
18
|
+
## Buttons
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import Button from '@persona/design-system/components/Button';
|
|
22
|
+
import { PlusIcon, ArrowRightIcon } from '@persona/icons';
|
|
23
|
+
|
|
24
|
+
// Variants
|
|
25
|
+
<Button variant="primary" size="md">Save Changes</Button>
|
|
26
|
+
<Button variant="basic" size="md">Cancel</Button>
|
|
27
|
+
<Button variant="danger" size="md">Delete Account</Button>
|
|
28
|
+
<Button variant="outline" size="md">Learn More</Button>
|
|
29
|
+
<Button variant="text" size="md">Skip</Button>
|
|
30
|
+
|
|
31
|
+
// States
|
|
32
|
+
<Button variant="primary" disabled>Submit</Button>
|
|
33
|
+
<Button variant="primary" isPending>Saving...</Button>
|
|
34
|
+
|
|
35
|
+
// With icons
|
|
36
|
+
<Button variant="primary" prefixIcon={<PlusIcon />}>Add Item</Button>
|
|
37
|
+
<Button variant="basic" suffixIcon={<ArrowRightIcon />}>Next</Button>
|
|
38
|
+
|
|
39
|
+
// Icon-only (must include aria-label)
|
|
40
|
+
<Button variant="basic" width="icon" aria-label="Add"><PlusIcon /></Button>
|
|
41
|
+
|
|
42
|
+
// Widths
|
|
43
|
+
<Button variant="primary" width="full">Full Width</Button>
|
|
44
|
+
<Button variant="primary" width="auto">Auto Width</Button>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Forms
|
|
48
|
+
|
|
49
|
+
**Always use `ConfigFormGroup` + `TextField`/`TextAreaField` — never hand-roll `styled.input` or `styled.label`.**
|
|
50
|
+
|
|
51
|
+
### Basic form
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import ConfigFormGroup from '@persona/design-system/components/ConfigFormGroup';
|
|
55
|
+
import { TextField, TextAreaField } from '@persona/design-system/components/FormField';
|
|
56
|
+
import { Select } from '@persona/design-system/components/Select';
|
|
57
|
+
import { TextUnderlineTooltip } from '@persona/design-system/components/Tooltip';
|
|
58
|
+
import { Label } from '@persona/design-system/components/Text';
|
|
59
|
+
import Stack from '@persona/design-system/components/Stack';
|
|
60
|
+
import { Spacing } from '@persona/design-tokens';
|
|
61
|
+
|
|
62
|
+
<ConfigFormGroup>
|
|
63
|
+
{/* Field with tooltip: use TextUnderlineTooltip, never an info icon */}
|
|
64
|
+
<TextUnderlineTooltip tooltip="Must be unique." side="right">
|
|
65
|
+
<TextField
|
|
66
|
+
label="Name"
|
|
67
|
+
value={config.name}
|
|
68
|
+
onChange={(e) => setConfig({ ...config, name: e.target.value })}
|
|
69
|
+
configField={true}
|
|
70
|
+
errorText={errors.name}
|
|
71
|
+
/>
|
|
72
|
+
</TextUnderlineTooltip>
|
|
73
|
+
|
|
74
|
+
<TextAreaField
|
|
75
|
+
label="Description"
|
|
76
|
+
value={config.description}
|
|
77
|
+
onChange={(e) => setConfig({ ...config, description: e.target.value })}
|
|
78
|
+
configField={true}
|
|
79
|
+
helperText="Short summary shown in listings."
|
|
80
|
+
/>
|
|
81
|
+
|
|
82
|
+
{/* Dropdown */}
|
|
83
|
+
<Stack spacing={Spacing[2]}>
|
|
84
|
+
<Label size="sm" color="secondary">Enforcement</Label>
|
|
85
|
+
<Select
|
|
86
|
+
value={config.enforcement}
|
|
87
|
+
onChange={(val) => setConfig({ ...config, enforcement: val })}
|
|
88
|
+
options={[
|
|
89
|
+
{ label: 'Strict', value: 'strict' },
|
|
90
|
+
{ label: 'Lenient', value: 'lenient' },
|
|
91
|
+
{ label: 'Disabled', value: 'disabled' },
|
|
92
|
+
]}
|
|
93
|
+
/>
|
|
94
|
+
</Stack>
|
|
95
|
+
</ConfigFormGroup>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Form state hook
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
const useFormState = (initialConfig) => {
|
|
102
|
+
const [config, setConfig] = useState(initialConfig);
|
|
103
|
+
const [errors, setErrors] = useState({});
|
|
104
|
+
|
|
105
|
+
const updateField = useCallback((field, value) => {
|
|
106
|
+
setConfig(prev => ({ ...prev, [field]: value }));
|
|
107
|
+
setErrors(prev => { const next = { ...prev }; delete next[field]; return next; });
|
|
108
|
+
}, []);
|
|
109
|
+
|
|
110
|
+
const validate = useCallback(() => {
|
|
111
|
+
const newErrors = {};
|
|
112
|
+
if (!config.name) newErrors.name = 'Required';
|
|
113
|
+
setErrors(newErrors);
|
|
114
|
+
return Object.keys(newErrors).length === 0;
|
|
115
|
+
}, [config]);
|
|
116
|
+
|
|
117
|
+
return { config, errors, updateField, validate };
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Form with footer buttons
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
import Stack from '@persona/design-system/components/Stack';
|
|
125
|
+
import { HStack } from '@persona/design-system/components/Stack';
|
|
126
|
+
|
|
127
|
+
<Stack spacing={Spacing[5]}>
|
|
128
|
+
<ConfigFormGroup>
|
|
129
|
+
<TextField label="Name" value={config.name} onChange={...} />
|
|
130
|
+
<TextAreaField label="Description" value={config.description} onChange={...} />
|
|
131
|
+
</ConfigFormGroup>
|
|
132
|
+
<HStack spacing={Spacing[3]} justify="flex-end">
|
|
133
|
+
<Button variant="basic" onClick={onCancel}>Cancel</Button>
|
|
134
|
+
<Button variant="primary" onClick={handleSave} isPending={isSaving}>Save</Button>
|
|
135
|
+
</HStack>
|
|
136
|
+
</Stack>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Modals
|
|
140
|
+
|
|
141
|
+
**Always use the `Modal` component — never hand-roll `ModalOverlay`/`ModalContainer` styled divs.**
|
|
142
|
+
|
|
143
|
+
```tsx
|
|
144
|
+
import { Modal } from '@persona/design-system/components/Modal';
|
|
145
|
+
|
|
146
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
147
|
+
|
|
148
|
+
<Modal
|
|
149
|
+
isOpen={isOpen}
|
|
150
|
+
onClose={() => setIsOpen(false)}
|
|
151
|
+
title="Confirm Delete"
|
|
152
|
+
footer={
|
|
153
|
+
<>
|
|
154
|
+
<Button variant="basic" onClick={() => setIsOpen(false)}>Cancel</Button>
|
|
155
|
+
<Button variant="danger" onClick={handleDelete} isPending={isDeleting}>Delete</Button>
|
|
156
|
+
</>
|
|
157
|
+
}
|
|
158
|
+
>
|
|
159
|
+
<Paragraph>Are you sure you want to delete this rule? This action cannot be undone.</Paragraph>
|
|
160
|
+
</Modal>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Data Tables
|
|
164
|
+
|
|
165
|
+
Use **`DataTable`** for data views (pagination, sorting, server-side data). For small, form-adjacent editable tables, use **`TableBox`** — see [COMPONENTS.md — Editable Table (TableBox)](COMPONENTS.md#editable-table-tablebox). Never hand-roll `<table>`.
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
import DataTable from '@persona/design-system/components/DataTable';
|
|
169
|
+
|
|
170
|
+
const columns = [
|
|
171
|
+
'name',
|
|
172
|
+
{
|
|
173
|
+
accessor: 'enforcement',
|
|
174
|
+
header: 'Enforcement',
|
|
175
|
+
format: {
|
|
176
|
+
type: 'sticker',
|
|
177
|
+
config: { colors: { strict: 'danger', lenient: 'caution', disabled: 'basic' } },
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
{ accessor: 'lastModified', header: 'Last Modified', format: { type: 'datetime' } },
|
|
181
|
+
];
|
|
182
|
+
|
|
183
|
+
<DataTable
|
|
184
|
+
columns={columns}
|
|
185
|
+
data={rules}
|
|
186
|
+
rowActions={[
|
|
187
|
+
{ label: 'Edit', onClick: (rowId) => handleEdit(rowId) },
|
|
188
|
+
{ label: 'Delete', onClick: (rowId) => setDeleteTarget(rowId) },
|
|
189
|
+
]}
|
|
190
|
+
pagination={{ clientPagination: true, pageSize: 10, pageSizeOptions: [10, 25, 50] }}
|
|
191
|
+
/>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Status Indicators
|
|
195
|
+
|
|
196
|
+
### Sticker (Status Labels)
|
|
197
|
+
|
|
198
|
+
```tsx
|
|
199
|
+
import Sticker from '@persona/design-system/components/Sticker';
|
|
200
|
+
import { CheckCircleIcon } from '@persona/icons/12px'; // 12px for sticker icons
|
|
201
|
+
|
|
202
|
+
// Semantic variants — match business status to variant:
|
|
203
|
+
// approved/active/verified → success
|
|
204
|
+
// declined/failed/error → danger
|
|
205
|
+
// pending/in-review/flagged → caution
|
|
206
|
+
// inactive/archived → basic
|
|
207
|
+
<Sticker variant="success">Approved</Sticker>
|
|
208
|
+
<Sticker variant="danger">Failed</Sticker>
|
|
209
|
+
<Sticker variant="caution">Pending</Sticker>
|
|
210
|
+
<Sticker variant="basic">Inactive</Sticker>
|
|
211
|
+
|
|
212
|
+
// Color variants for categorization
|
|
213
|
+
<Sticker variant="purple">New</Sticker>
|
|
214
|
+
<Sticker variant="blue">In Progress</Sticker>
|
|
215
|
+
|
|
216
|
+
// With icon (use 12px icons)
|
|
217
|
+
<Sticker variant="success" icon={<CheckCircleIcon />}>Verified</Sticker>
|
|
218
|
+
|
|
219
|
+
// Dismissible
|
|
220
|
+
<Sticker variant="purple" onDismiss={() => handleRemove()}>Removable Tag</Sticker>
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Banner (Alert / Notification)
|
|
224
|
+
|
|
225
|
+
```tsx
|
|
226
|
+
import Banner from '@persona/design-system/components/Banner';
|
|
227
|
+
import { CircleInfoIcon, CheckCircleIcon, AlertTriangleIcon, XCircleIcon } from '@persona/icons';
|
|
228
|
+
|
|
229
|
+
<Banner variant="informational"><CircleInfoIcon />This is an informational message.</Banner>
|
|
230
|
+
<Banner variant="success"><CheckCircleIcon />Changes saved successfully!</Banner>
|
|
231
|
+
<Banner variant="warning"><AlertTriangleIcon />Please review before submitting.</Banner>
|
|
232
|
+
<Banner variant="alert"><XCircleIcon />There was an error processing your request.</Banner>
|
|
233
|
+
|
|
234
|
+
// With dismiss
|
|
235
|
+
<Banner variant="informational" onClose={() => setShowBanner(false)}>
|
|
236
|
+
<CircleInfoIcon />You can dismiss this message.
|
|
237
|
+
</Banner>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Layout
|
|
241
|
+
|
|
242
|
+
### Stack / HStack
|
|
243
|
+
|
|
244
|
+
```tsx
|
|
245
|
+
import Stack from '@persona/design-system/components/Stack';
|
|
246
|
+
import { HStack } from '@persona/design-system/components/Stack';
|
|
247
|
+
|
|
248
|
+
// Vertical layout
|
|
249
|
+
<Stack spacing={Spacing[4]}>
|
|
250
|
+
<Heading size="sm">Section Title</Heading>
|
|
251
|
+
<Paragraph>Content...</Paragraph>
|
|
252
|
+
</Stack>
|
|
253
|
+
|
|
254
|
+
// Horizontal layout
|
|
255
|
+
<HStack spacing={Spacing[3]} justify="flex-end">
|
|
256
|
+
<Button variant="basic">Cancel</Button>
|
|
257
|
+
<Button variant="primary">Save</Button>
|
|
258
|
+
</HStack>
|
|
259
|
+
|
|
260
|
+
// Space between header + action
|
|
261
|
+
<HStack spacing={Spacing[4]} justify="space-between" align="center">
|
|
262
|
+
<Heading size="sm">Policy Rules</Heading>
|
|
263
|
+
<Button variant="primary" size="sm" prefixIcon={<PlusIcon />}>Add Rule</Button>
|
|
264
|
+
</HStack>
|
|
265
|
+
|
|
266
|
+
// Wrapping tags/stickers
|
|
267
|
+
<HStack spacing={Spacing[2]} wrap>
|
|
268
|
+
<Sticker variant="purple">Tag 1</Sticker>
|
|
269
|
+
<Sticker variant="blue">Tag 2</Sticker>
|
|
270
|
+
</HStack>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Card with collapsible sections
|
|
274
|
+
|
|
275
|
+
```tsx
|
|
276
|
+
import { Card } from '@persona/design-system/components/CardV2';
|
|
277
|
+
|
|
278
|
+
<Card>
|
|
279
|
+
<Card.Section header="Basic Settings" collapsible={true} defaultCollapsed={false}>
|
|
280
|
+
<ConfigFormGroup>
|
|
281
|
+
<TextField label="Name" value={...} onChange={...} />
|
|
282
|
+
</ConfigFormGroup>
|
|
283
|
+
</Card.Section>
|
|
284
|
+
<Card.Section header="Advanced" collapsible={true}>
|
|
285
|
+
{/* Advanced fields */}
|
|
286
|
+
</Card.Section>
|
|
287
|
+
</Card>
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Navigation — Tabs
|
|
291
|
+
|
|
292
|
+
```tsx
|
|
293
|
+
import TabBar, { Tab } from '@persona/design-system/components/TabBar';
|
|
294
|
+
import Badge from '@persona/design-system/components/Badge';
|
|
295
|
+
import { useState } from 'react';
|
|
296
|
+
|
|
297
|
+
const [selectedTab, setSelectedTab] = useState(0);
|
|
298
|
+
|
|
299
|
+
<TabBar aria-label="Policy tabs" title="Policy Configuration">
|
|
300
|
+
<Tab selected={selectedTab === 0} onClick={() => setSelectedTab(0)}>Overview</Tab>
|
|
301
|
+
<Tab selected={selectedTab === 1} onClick={() => setSelectedTab(1)} badge={<Badge variant="active">5</Badge>}>
|
|
302
|
+
Pending
|
|
303
|
+
</Tab>
|
|
304
|
+
<Tab selected={selectedTab === 2} onClick={() => setSelectedTab(2)} badge={<Badge variant="alert">2</Badge>}>
|
|
305
|
+
Alerts
|
|
306
|
+
</Tab>
|
|
307
|
+
</TabBar>
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## Text Components
|
|
311
|
+
|
|
312
|
+
```tsx
|
|
313
|
+
import { Heading, Paragraph, Label } from '@persona/design-system/components/Text';
|
|
314
|
+
|
|
315
|
+
// Headings
|
|
316
|
+
<Heading size="lg" color="primary">Page Title</Heading>
|
|
317
|
+
<Heading size="md" color="primary">Section Title</Heading>
|
|
318
|
+
<Heading size="sm" color="primary">Subsection</Heading>
|
|
319
|
+
|
|
320
|
+
// Body text — defaults to color="secondary" (grey); use color="primary" for black
|
|
321
|
+
<Paragraph size="md" color="primary">Black body text</Paragraph>
|
|
322
|
+
<Paragraph size="md">Secondary (grey) body text</Paragraph>
|
|
323
|
+
<Paragraph size="sm" color="tertiary">Helper / caption text</Paragraph>
|
|
324
|
+
|
|
325
|
+
// Form labels
|
|
326
|
+
<Label size="sm" color="secondary">Field Name</Label>
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
## Feedback Components
|
|
330
|
+
|
|
331
|
+
### Spinner
|
|
332
|
+
|
|
333
|
+
```tsx
|
|
334
|
+
import Spinner from '@persona/design-system/components/Spinner';
|
|
335
|
+
|
|
336
|
+
// Centered loading state
|
|
337
|
+
<Stack align="center" spacing={Spacing[3]}>
|
|
338
|
+
<Spinner size="md" srText="Loading policies..." />
|
|
339
|
+
</Stack>
|
|
340
|
+
|
|
341
|
+
// Inline in button (use isPending prop on Button instead when possible)
|
|
342
|
+
<Button variant="primary" isPending>Saving...</Button>
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Tooltip (standalone, no label)
|
|
346
|
+
|
|
347
|
+
```tsx
|
|
348
|
+
import Tooltip from '@persona/design-system/components/Tooltip';
|
|
349
|
+
import { HelpCircleIcon } from '@persona/icons';
|
|
350
|
+
|
|
351
|
+
// Standalone icon trigger (only when there's no adjacent label)
|
|
352
|
+
<Tooltip iconTrigger={<HelpCircleIcon />} side="right">
|
|
353
|
+
Additional help text appears here.
|
|
354
|
+
</Tooltip>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
## Empty States
|
|
358
|
+
|
|
359
|
+
For tables/lists when there is no data to show:
|
|
360
|
+
|
|
361
|
+
```tsx
|
|
362
|
+
// Inside a Card section or table container
|
|
363
|
+
<Stack align="center" spacing={Spacing[3]} style={{ padding: Spacing[6] }}>
|
|
364
|
+
<Paragraph color="secondary">No policy rules yet.</Paragraph>
|
|
365
|
+
<Button variant="primary" size="sm" prefixIcon={<PlusIcon />}>Add Rule</Button>
|
|
366
|
+
</Stack>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
For `ListBox`, pass `emptyText="No items"` prop directly.
|
|
370
|
+
For `Card.Section`, pass `empty={true}` to show the built-in empty state.
|