@wordpress/ui 0.4.0 → 0.5.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/CHANGELOG.md +20 -0
- package/LICENSE.md +1 -1
- package/README.md +18 -0
- package/build/badge/badge.cjs +95 -0
- package/build/badge/badge.cjs.map +7 -0
- package/build/{lock-unlock.js → badge/index.cjs} +8 -14
- package/build/badge/index.cjs.map +7 -0
- package/build/badge/types.cjs +19 -0
- package/build/badge/types.cjs.map +7 -0
- package/build/box/{box.js → box.cjs} +7 -6
- package/build/box/box.cjs.map +7 -0
- package/build/box/{index.js → index.cjs} +2 -2
- package/build/box/{types.js → types.cjs} +1 -1
- package/build/box/types.cjs.map +7 -0
- package/build/button/button.cjs +401 -0
- package/build/button/button.cjs.map +7 -0
- package/build/{utils/element.js → button/icon.cjs} +22 -20
- package/build/button/icon.cjs.map +7 -0
- package/build/button/index.cjs +39 -0
- package/build/button/index.cjs.map +7 -0
- package/build/button/types.cjs +19 -0
- package/build/button/types.cjs.map +7 -0
- package/build/form/primitives/field/control.cjs +38 -0
- package/build/form/primitives/field/control.cjs.map +7 -0
- package/build/form/primitives/field/description.cjs +92 -0
- package/build/form/primitives/field/description.cjs.map +7 -0
- package/build/form/primitives/field/details.cjs +99 -0
- package/build/form/primitives/field/details.cjs.map +7 -0
- package/build/form/primitives/field/index.cjs +46 -0
- package/build/form/primitives/field/index.cjs.map +7 -0
- package/build/form/primitives/field/item.cjs +36 -0
- package/build/form/primitives/field/item.cjs.map +7 -0
- package/build/form/primitives/field/label.cjs +98 -0
- package/build/form/primitives/field/label.cjs.map +7 -0
- package/build/form/primitives/field/root.cjs +79 -0
- package/build/form/primitives/field/root.cjs.map +7 -0
- package/build/form/primitives/field/types.cjs +19 -0
- package/build/form/primitives/field/types.cjs.map +7 -0
- package/build/form/primitives/fieldset/context.cjs +40 -0
- package/build/form/primitives/fieldset/context.cjs.map +7 -0
- package/build/form/primitives/fieldset/description.cjs +101 -0
- package/build/form/primitives/fieldset/description.cjs.map +7 -0
- package/build/form/primitives/fieldset/details.cjs +103 -0
- package/build/form/primitives/fieldset/details.cjs.map +7 -0
- package/build/form/primitives/fieldset/index.cjs +40 -0
- package/build/form/primitives/fieldset/index.cjs.map +7 -0
- package/build/form/primitives/fieldset/legend.cjs +94 -0
- package/build/form/primitives/fieldset/legend.cjs.map +7 -0
- package/build/form/primitives/fieldset/root.cjs +86 -0
- package/build/form/primitives/fieldset/root.cjs.map +7 -0
- package/build/form/primitives/fieldset/types.cjs +19 -0
- package/build/form/primitives/fieldset/types.cjs.map +7 -0
- package/build/form/primitives/index.cjs +50 -0
- package/build/form/primitives/index.cjs.map +7 -0
- package/build/form/primitives/input/index.cjs +31 -0
- package/build/form/primitives/input/index.cjs.map +7 -0
- package/build/form/primitives/input/input.cjs +148 -0
- package/build/form/primitives/input/input.cjs.map +7 -0
- package/build/form/primitives/input/types.cjs +19 -0
- package/build/form/primitives/input/types.cjs.map +7 -0
- package/build/form/primitives/input-layout/context.cjs +49 -0
- package/build/form/primitives/input-layout/context.cjs.map +7 -0
- package/build/form/primitives/input-layout/index.cjs +35 -0
- package/build/form/primitives/input-layout/index.cjs.map +7 -0
- package/build/form/primitives/input-layout/input-layout.cjs +196 -0
- package/build/form/primitives/input-layout/input-layout.cjs.map +7 -0
- package/build/form/primitives/input-layout/slot.cjs +165 -0
- package/build/form/primitives/input-layout/slot.cjs.map +7 -0
- package/build/form/primitives/input-layout/types.cjs +19 -0
- package/build/form/primitives/input-layout/types.cjs.map +7 -0
- package/build/icon/icon.cjs +46 -0
- package/build/icon/icon.cjs.map +7 -0
- package/build/{index.js → icon/index.cjs} +13 -7
- package/build/icon/index.cjs.map +7 -0
- package/build/icon/types.cjs +19 -0
- package/build/icon/types.cjs.map +7 -0
- package/build/index.cjs +37 -0
- package/build/index.cjs.map +7 -0
- package/build/stack/{index.js → index.cjs} +2 -2
- package/build/stack/index.cjs.map +7 -0
- package/build/stack/{stack.js → stack.cjs} +6 -18
- package/build/stack/stack.cjs.map +7 -0
- package/build/stack/{types.js → types.cjs} +1 -1
- package/build/stack/types.cjs.map +7 -0
- package/build/types/css-modules.d.cjs +2 -0
- package/build/types/css-modules.d.cjs.map +7 -0
- package/build/types/{react.d.js → react.d.cjs} +1 -1
- package/build/utils/{types.js → types.cjs} +1 -1
- package/build/visually-hidden/index.cjs +31 -0
- package/build/visually-hidden/index.cjs.map +7 -0
- package/build/visually-hidden/types.cjs +19 -0
- package/build/visually-hidden/types.cjs.map +7 -0
- package/build/visually-hidden/visually-hidden.cjs +69 -0
- package/build/visually-hidden/visually-hidden.cjs.map +7 -0
- package/build-module/badge/badge.mjs +70 -0
- package/build-module/badge/badge.mjs.map +7 -0
- package/build-module/badge/index.mjs +6 -0
- package/build-module/badge/index.mjs.map +7 -0
- package/build-module/badge/types.mjs +1 -0
- package/build-module/box/{box.js → box.mjs} +7 -6
- package/build-module/box/box.mjs.map +7 -0
- package/build-module/box/index.mjs +6 -0
- package/build-module/box/types.mjs +1 -0
- package/build-module/button/button.mjs +366 -0
- package/build-module/button/button.mjs.map +7 -0
- package/build-module/button/icon.mjs +22 -0
- package/build-module/button/icon.mjs.map +7 -0
- package/build-module/button/index.mjs +14 -0
- package/build-module/button/index.mjs.map +7 -0
- package/build-module/button/types.mjs +1 -0
- package/build-module/form/primitives/field/control.mjs +13 -0
- package/build-module/form/primitives/field/control.mjs.map +7 -0
- package/build-module/form/primitives/field/description.mjs +57 -0
- package/build-module/form/primitives/field/description.mjs.map +7 -0
- package/build-module/form/primitives/field/details.mjs +64 -0
- package/build-module/form/primitives/field/details.mjs.map +7 -0
- package/build-module/form/primitives/field/index.mjs +16 -0
- package/build-module/form/primitives/field/index.mjs.map +7 -0
- package/build-module/form/primitives/field/item.mjs +11 -0
- package/build-module/form/primitives/field/item.mjs.map +7 -0
- package/build-module/form/primitives/field/label.mjs +63 -0
- package/build-module/form/primitives/field/label.mjs.map +7 -0
- package/build-module/form/primitives/field/root.mjs +44 -0
- package/build-module/form/primitives/field/root.mjs.map +7 -0
- package/build-module/form/primitives/field/types.mjs +1 -0
- package/build-module/form/primitives/fieldset/context.mjs +14 -0
- package/build-module/form/primitives/fieldset/context.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/description.mjs +66 -0
- package/build-module/form/primitives/fieldset/description.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/details.mjs +68 -0
- package/build-module/form/primitives/fieldset/details.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/index.mjs +12 -0
- package/build-module/form/primitives/fieldset/index.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/legend.mjs +59 -0
- package/build-module/form/primitives/fieldset/legend.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/root.mjs +51 -0
- package/build-module/form/primitives/fieldset/root.mjs.map +7 -0
- package/build-module/form/primitives/fieldset/types.mjs +1 -0
- package/build-module/form/primitives/index.mjs +12 -0
- package/build-module/form/primitives/index.mjs.map +7 -0
- package/build-module/form/primitives/input/index.mjs +6 -0
- package/build-module/form/primitives/input/index.mjs.map +7 -0
- package/build-module/form/primitives/input/input.mjs +113 -0
- package/build-module/form/primitives/input/input.mjs.map +7 -0
- package/build-module/form/primitives/input/types.mjs +1 -0
- package/build-module/form/primitives/input/types.mjs.map +7 -0
- package/build-module/form/primitives/input-layout/context.mjs +22 -0
- package/build-module/form/primitives/input-layout/context.mjs.map +7 -0
- package/build-module/form/primitives/input-layout/index.mjs +10 -0
- package/build-module/form/primitives/input-layout/index.mjs.map +7 -0
- package/build-module/form/primitives/input-layout/input-layout.mjs +161 -0
- package/build-module/form/primitives/input-layout/input-layout.mjs.map +7 -0
- package/build-module/form/primitives/input-layout/slot.mjs +130 -0
- package/build-module/form/primitives/input-layout/slot.mjs.map +7 -0
- package/build-module/form/primitives/input-layout/types.mjs +1 -0
- package/build-module/form/primitives/input-layout/types.mjs.map +7 -0
- package/build-module/icon/icon.mjs +21 -0
- package/build-module/icon/icon.mjs.map +7 -0
- package/build-module/icon/index.mjs +6 -0
- package/build-module/icon/index.mjs.map +7 -0
- package/build-module/icon/types.mjs +1 -0
- package/build-module/icon/types.mjs.map +7 -0
- package/build-module/index.mjs +9 -0
- package/build-module/index.mjs.map +7 -0
- package/build-module/stack/index.mjs +6 -0
- package/build-module/stack/index.mjs.map +7 -0
- package/build-module/stack/{stack.js → stack.mjs} +6 -8
- package/build-module/stack/stack.mjs.map +7 -0
- package/build-module/stack/types.mjs +1 -0
- package/build-module/stack/types.mjs.map +7 -0
- package/build-module/types/css-modules.d.mjs +1 -0
- package/build-module/types/css-modules.d.mjs.map +7 -0
- package/build-module/types/{react.d.js → react.d.mjs} +1 -1
- package/build-module/utils/types.mjs +1 -0
- package/build-module/utils/types.mjs.map +7 -0
- package/build-module/visually-hidden/index.mjs +6 -0
- package/build-module/visually-hidden/index.mjs.map +7 -0
- package/build-module/visually-hidden/types.mjs +1 -0
- package/build-module/visually-hidden/types.mjs.map +7 -0
- package/build-module/visually-hidden/visually-hidden.mjs +44 -0
- package/build-module/visually-hidden/visually-hidden.mjs.map +7 -0
- package/build-types/badge/badge.d.ts +7 -0
- package/build-types/badge/badge.d.ts.map +1 -0
- package/build-types/badge/index.d.ts +2 -0
- package/build-types/badge/index.d.ts.map +1 -0
- package/build-types/badge/stories/index.story.d.ts +15 -0
- package/build-types/badge/stories/index.story.d.ts.map +1 -0
- package/build-types/badge/types.d.ts +14 -0
- package/build-types/badge/types.d.ts.map +1 -0
- package/build-types/box/box.d.ts +0 -3
- package/build-types/box/box.d.ts.map +1 -1
- package/build-types/box/stories/index.story.d.ts +1 -11
- package/build-types/box/stories/index.story.d.ts.map +1 -1
- package/build-types/box/types.d.ts +8 -15
- package/build-types/box/types.d.ts.map +1 -1
- package/build-types/button/button.d.ts +3 -0
- package/build-types/button/button.d.ts.map +1 -0
- package/build-types/button/icon.d.ts +10 -0
- package/build-types/button/icon.d.ts.map +1 -0
- package/build-types/button/index.d.ts +10 -0
- package/build-types/button/index.d.ts.map +1 -0
- package/build-types/button/stories/index.story.d.ts +23 -0
- package/build-types/button/stories/index.story.d.ts.map +1 -0
- package/build-types/button/test/button.test.d.ts +2 -0
- package/build-types/button/test/button.test.d.ts.map +1 -0
- package/build-types/button/test/icon.test.d.ts +2 -0
- package/build-types/button/test/icon.test.d.ts.map +1 -0
- package/build-types/button/types.d.ts +63 -0
- package/build-types/button/types.d.ts.map +1 -0
- package/build-types/form/primitives/field/control.d.ts +6 -0
- package/build-types/form/primitives/field/control.d.ts.map +1 -0
- package/build-types/form/primitives/field/description.d.ts +9 -0
- package/build-types/form/primitives/field/description.d.ts.map +1 -0
- package/build-types/form/primitives/field/details.d.ts +21 -0
- package/build-types/form/primitives/field/details.d.ts.map +1 -0
- package/build-types/form/primitives/field/index.d.ts +8 -0
- package/build-types/form/primitives/field/index.d.ts.map +1 -0
- package/build-types/form/primitives/field/item.d.ts +3 -0
- package/build-types/form/primitives/field/item.d.ts.map +1 -0
- package/build-types/form/primitives/field/label.d.ts +11 -0
- package/build-types/form/primitives/field/label.d.ts.map +1 -0
- package/build-types/form/primitives/field/root.d.ts +15 -0
- package/build-types/form/primitives/field/root.d.ts.map +1 -0
- package/build-types/form/primitives/field/stories/index.story.d.ts +39 -0
- package/build-types/form/primitives/field/stories/index.story.d.ts.map +1 -0
- package/build-types/form/primitives/field/test/index.test.d.ts +2 -0
- package/build-types/form/primitives/field/test/index.test.d.ts.map +1 -0
- package/build-types/form/primitives/field/types.d.ts +62 -0
- package/build-types/form/primitives/field/types.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/context.d.ts +8 -0
- package/build-types/form/primitives/fieldset/context.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/description.d.ts +9 -0
- package/build-types/form/primitives/fieldset/description.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/details.d.ts +21 -0
- package/build-types/form/primitives/fieldset/details.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/index.d.ts +6 -0
- package/build-types/form/primitives/fieldset/index.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/legend.d.ts +9 -0
- package/build-types/form/primitives/fieldset/legend.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/root.d.ts +15 -0
- package/build-types/form/primitives/fieldset/root.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/stories/index.story.d.ts +18 -0
- package/build-types/form/primitives/fieldset/stories/index.story.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/test/index.test.d.ts +2 -0
- package/build-types/form/primitives/fieldset/test/index.test.d.ts.map +1 -0
- package/build-types/form/primitives/fieldset/types.d.ts +32 -0
- package/build-types/form/primitives/fieldset/types.d.ts.map +1 -0
- package/build-types/form/primitives/index.d.ts +5 -0
- package/build-types/form/primitives/index.d.ts.map +1 -0
- package/build-types/form/primitives/input/index.d.ts +2 -0
- package/build-types/form/primitives/input/index.d.ts.map +1 -0
- package/build-types/form/primitives/input/input.d.ts +10 -0
- package/build-types/form/primitives/input/input.d.ts.map +1 -0
- package/build-types/form/primitives/input/stories/index.story.d.ts +13 -0
- package/build-types/form/primitives/input/stories/index.story.d.ts.map +1 -0
- package/build-types/form/primitives/input/test/index.test.d.ts +2 -0
- package/build-types/form/primitives/input/test/index.test.d.ts.map +1 -0
- package/build-types/form/primitives/input/types.d.ts +27 -0
- package/build-types/form/primitives/input/types.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/context.d.ts +17 -0
- package/build-types/form/primitives/input-layout/context.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/index.d.ts +4 -0
- package/build-types/form/primitives/input-layout/index.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/input-layout.d.ts +7 -0
- package/build-types/form/primitives/input-layout/input-layout.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/slot.d.ts +6 -0
- package/build-types/form/primitives/input-layout/slot.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/stories/index.story.d.ts +24 -0
- package/build-types/form/primitives/input-layout/stories/index.story.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/test/index.test.d.ts +2 -0
- package/build-types/form/primitives/input-layout/test/index.test.d.ts.map +1 -0
- package/build-types/form/primitives/input-layout/types.d.ts +41 -0
- package/build-types/form/primitives/input-layout/types.d.ts.map +1 -0
- package/build-types/icon/icon.d.ts +14 -0
- package/build-types/icon/icon.d.ts.map +1 -0
- package/build-types/icon/index.d.ts +2 -0
- package/build-types/icon/index.d.ts.map +1 -0
- package/build-types/icon/stories/index.story.d.ts +11 -0
- package/build-types/icon/stories/index.story.d.ts.map +1 -0
- package/build-types/icon/test/icon.test.d.ts +2 -0
- package/build-types/icon/test/icon.test.d.ts.map +1 -0
- package/build-types/icon/types.d.ts +15 -0
- package/build-types/icon/types.d.ts.map +1 -0
- package/build-types/index.d.ts +6 -0
- package/build-types/index.d.ts.map +1 -1
- package/build-types/stack/index.d.ts +0 -3
- package/build-types/stack/index.d.ts.map +1 -1
- package/build-types/stack/stack.d.ts.map +1 -1
- package/build-types/stack/stories/index.story.d.ts +1 -11
- package/build-types/stack/stories/index.story.d.ts.map +1 -1
- package/build-types/stack/types.d.ts +2 -5
- package/build-types/stack/types.d.ts.map +1 -1
- package/build-types/test/index.test.d.ts +2 -0
- package/build-types/test/index.test.d.ts.map +1 -0
- package/build-types/visually-hidden/index.d.ts +2 -0
- package/build-types/visually-hidden/index.d.ts.map +1 -0
- package/build-types/visually-hidden/stories/index.story.d.ts +7 -0
- package/build-types/visually-hidden/stories/index.story.d.ts.map +1 -0
- package/build-types/visually-hidden/test/visually-hidden.test.d.ts +2 -0
- package/build-types/visually-hidden/test/visually-hidden.test.d.ts.map +1 -0
- package/build-types/visually-hidden/types.d.ts +8 -0
- package/build-types/visually-hidden/types.d.ts.map +1 -0
- package/build-types/visually-hidden/visually-hidden.d.ts +7 -0
- package/build-types/visually-hidden/visually-hidden.d.ts.map +1 -0
- package/package.json +26 -9
- package/src/badge/badge.tsx +88 -0
- package/src/badge/index.ts +1 -0
- package/src/badge/stories/choosing-intent.mdx +112 -0
- package/src/badge/stories/index.story.tsx +120 -0
- package/src/badge/types.ts +22 -0
- package/src/box/box.tsx +11 -23
- package/src/box/stories/index.story.tsx +3 -15
- package/src/box/types.ts +16 -59
- package/src/button/button.tsx +57 -0
- package/src/button/icon.tsx +24 -0
- package/src/button/index.ts +16 -0
- package/src/button/stories/index.story.tsx +192 -0
- package/src/button/style.module.css +232 -0
- package/src/button/test/button.test.tsx +89 -0
- package/src/button/test/icon.test.tsx +13 -0
- package/src/button/types.ts +72 -0
- package/src/form/primitives/field/control.tsx +9 -0
- package/src/form/primitives/field/description.tsx +18 -0
- package/src/form/primitives/field/details.tsx +36 -0
- package/src/form/primitives/field/index.ts +8 -0
- package/src/form/primitives/field/item.tsx +9 -0
- package/src/form/primitives/field/label.tsx +21 -0
- package/src/form/primitives/field/root.tsx +33 -0
- package/src/form/primitives/field/stories/index.story.tsx +132 -0
- package/src/form/primitives/field/test/index.test.tsx +36 -0
- package/src/form/primitives/field/types.ts +82 -0
- package/src/form/primitives/fieldset/context.tsx +13 -0
- package/src/form/primitives/fieldset/description.tsx +36 -0
- package/src/form/primitives/fieldset/details.tsx +46 -0
- package/src/form/primitives/fieldset/index.ts +6 -0
- package/src/form/primitives/fieldset/legend.tsx +17 -0
- package/src/form/primitives/fieldset/root.tsx +42 -0
- package/src/form/primitives/fieldset/stories/index.story.tsx +67 -0
- package/src/form/primitives/fieldset/style.module.css +12 -0
- package/src/form/primitives/fieldset/test/index.test.tsx +135 -0
- package/src/form/primitives/fieldset/types.ts +35 -0
- package/src/form/primitives/index.ts +4 -0
- package/src/form/primitives/input/index.ts +1 -0
- package/src/form/primitives/input/input.tsx +28 -0
- package/src/form/primitives/input/stories/index.story.tsx +40 -0
- package/src/form/primitives/input/style.module.css +34 -0
- package/src/form/primitives/input/test/index.test.tsx +13 -0
- package/src/form/primitives/input/types.ts +31 -0
- package/src/form/primitives/input-layout/context.tsx +36 -0
- package/src/form/primitives/input-layout/index.ts +6 -0
- package/src/form/primitives/input-layout/input-layout.tsx +49 -0
- package/src/form/primitives/input-layout/slot.tsx +39 -0
- package/src/form/primitives/input-layout/stories/index.story.tsx +67 -0
- package/src/form/primitives/input-layout/style.module.css +82 -0
- package/src/form/primitives/input-layout/test/index.test.tsx +23 -0
- package/src/form/primitives/input-layout/types.ts +44 -0
- package/src/icon/icon.tsx +30 -0
- package/src/icon/index.ts +1 -0
- package/src/icon/stories/index.story.tsx +47 -0
- package/src/icon/test/icon.test.tsx +13 -0
- package/src/icon/types.ts +14 -0
- package/src/index.ts +6 -0
- package/src/stack/index.ts +0 -3
- package/src/stack/stack.tsx +5 -18
- package/src/stack/stories/index.story.tsx +1 -14
- package/src/stack/test/stack.test.tsx +22 -12
- package/src/stack/types.ts +2 -6
- package/src/stories/introduction.mdx +6 -0
- package/src/test/index.test.ts +22 -0
- package/src/utils/css/field.module.css +27 -0
- package/src/utils/css/focus.module.css +31 -0
- package/src/utils/css/resets.module.css +13 -0
- package/src/visually-hidden/index.ts +1 -0
- package/src/visually-hidden/stories/index.story.tsx +22 -0
- package/src/visually-hidden/style.module.css +15 -0
- package/src/visually-hidden/test/visually-hidden.test.tsx +59 -0
- package/src/visually-hidden/types.ts +8 -0
- package/src/visually-hidden/visually-hidden.tsx +23 -0
- package/build/box/box.js.map +0 -7
- package/build/box/types.js.map +0 -7
- package/build/index.js.map +0 -7
- package/build/lock-unlock.js.map +0 -7
- package/build/stack/index.js.map +0 -7
- package/build/stack/stack.js.map +0 -7
- package/build/stack/types.js.map +0 -7
- package/build/types/css-modules.d.js +0 -2
- package/build/utils/element.js.map +0 -7
- package/build-module/box/box.js.map +0 -7
- package/build-module/box/index.js +0 -6
- package/build-module/box/types.js +0 -1
- package/build-module/index.js +0 -3
- package/build-module/index.js.map +0 -7
- package/build-module/lock-unlock.js +0 -11
- package/build-module/lock-unlock.js.map +0 -7
- package/build-module/stack/index.js +0 -6
- package/build-module/stack/index.js.map +0 -7
- package/build-module/stack/stack.js.map +0 -7
- package/build-module/stack/types.js +0 -1
- package/build-module/types/css-modules.d.js +0 -1
- package/build-module/utils/element.js +0 -20
- package/build-module/utils/element.js.map +0 -7
- package/build-module/utils/types.js +0 -1
- package/build-types/lock-unlock.d.ts +0 -2
- package/build-types/lock-unlock.d.ts.map +0 -1
- package/build-types/utils/element.d.ts +0 -25
- package/build-types/utils/element.d.ts.map +0 -1
- package/src/lock-unlock.ts +0 -10
- package/src/utils/element.ts +0 -51
- package/tsconfig.json +0 -13
- package/tsconfig.tsbuildinfo +0 -1
- /package/build/box/{index.js.map → index.cjs.map} +0 -0
- /package/build/types/{react.d.js.map → react.d.cjs.map} +0 -0
- /package/build/utils/{types.js.map → types.cjs.map} +0 -0
- /package/build-module/{box/types.js.map → badge/types.mjs.map} +0 -0
- /package/build-module/box/{index.js.map → index.mjs.map} +0 -0
- /package/build-module/{stack/types.js.map → box/types.mjs.map} +0 -0
- /package/build-module/{types/css-modules.d.js.map → button/types.mjs.map} +0 -0
- /package/build-module/{utils/types.js.map → form/primitives/field/types.mjs.map} +0 -0
- /package/{build/types/css-modules.d.js.map → build-module/form/primitives/fieldset/types.mjs.map} +0 -0
- /package/build-module/types/{react.d.js.map → react.d.mjs.map} +0 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Meta } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import { Badge } from '../index';
|
|
3
|
+
import '@wordpress/theme/design-tokens.css';
|
|
4
|
+
|
|
5
|
+
<Meta title="Design System/Components/Badge/Choosing intent" />
|
|
6
|
+
|
|
7
|
+
# Choosing intent
|
|
8
|
+
|
|
9
|
+
<div style={ { padding: '2rem', display: 'flex', justifyContent: 'center', gap: '0.5rem', flexWrap: 'wrap', border: '1px solid #e0e0e0', borderRadius: '0.5rem' } }>
|
|
10
|
+
<Badge intent="high">high</Badge>
|
|
11
|
+
<Badge intent="medium">medium</Badge>
|
|
12
|
+
<Badge intent="low">low</Badge>
|
|
13
|
+
<Badge intent="stable">stable</Badge>
|
|
14
|
+
<Badge intent="informational">informational</Badge>
|
|
15
|
+
<Badge intent="draft">draft</Badge>
|
|
16
|
+
<Badge intent="none">none</Badge>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
It can be difficult to determine which badge intent to use because the component's properties are not tied to any specific product view. Those properties should be balanced against the requirements of the view in which the badge appears, all while keeping an eye on high-level consistency (global statuses that appear across multiple views).
|
|
20
|
+
|
|
21
|
+
Here is a decision tree to help identify which badge to use.
|
|
22
|
+
|
|
23
|
+
## 1. Ask first: should this draw the eye?
|
|
24
|
+
|
|
25
|
+
If the user scans this screen, should their attention be drawn to this badge?
|
|
26
|
+
|
|
27
|
+
- If **no** → use `none` (or even just plain text; no badge), even if the state is positive or "stable".
|
|
28
|
+
- If **yes** → pick an intent based on how important the action or awareness is.
|
|
29
|
+
|
|
30
|
+
## 2. High / Medium / Low = action priority
|
|
31
|
+
|
|
32
|
+
Use when there's something for the user to act on.
|
|
33
|
+
|
|
34
|
+
### `high` – Critical / top priority
|
|
35
|
+
|
|
36
|
+
* Needs attention as soon as possible
|
|
37
|
+
* _E.g. "Payment declined", "Security issue"_
|
|
38
|
+
|
|
39
|
+
<Badge intent="high">Payment declined</Badge> <Badge intent="high">Security issue</Badge>
|
|
40
|
+
|
|
41
|
+
### `medium` – Important / blocks progress
|
|
42
|
+
|
|
43
|
+
* Blocks a key task, should be handled soon
|
|
44
|
+
* _E.g. "Approval required", "Review needed"_
|
|
45
|
+
|
|
46
|
+
<Badge intent="medium">Approval required</Badge> <Badge intent="medium">Review needed</Badge>
|
|
47
|
+
|
|
48
|
+
### `low` – Worth noticing / non‑urgent
|
|
49
|
+
|
|
50
|
+
* Good to be aware of; action may be optional or later
|
|
51
|
+
* _E.g. "Pending", "Queued", "Minor issues", "Optional setup"_
|
|
52
|
+
|
|
53
|
+
<Badge intent="low">Pending</Badge> <Badge intent="low">Queued</Badge>
|
|
54
|
+
|
|
55
|
+
## 3. Informational / draft = special non-final states
|
|
56
|
+
|
|
57
|
+
### `informational` – Notable, no action / fix needed
|
|
58
|
+
|
|
59
|
+
* Context only; no clear action
|
|
60
|
+
* _E.g. "Scheduled", "Beta", "Internal only"_
|
|
61
|
+
|
|
62
|
+
<Badge intent="informational">Scheduled</Badge> <Badge intent="informational">Beta</Badge>
|
|
63
|
+
|
|
64
|
+
### `draft` – Not final / work in progress
|
|
65
|
+
|
|
66
|
+
* _E.g. "Draft", "Unpublished", "Work in progress"_
|
|
67
|
+
|
|
68
|
+
<Badge intent="draft">Draft</Badge> <Badge intent="draft">Unpublished</Badge>
|
|
69
|
+
|
|
70
|
+
## 4. Stable / none = normal states
|
|
71
|
+
|
|
72
|
+
### `stable` – Positive / "healthy" state
|
|
73
|
+
|
|
74
|
+
* Use when confirming success or "all good" is important in that view
|
|
75
|
+
* _E.g. "Healthy", "Active", "Live"_
|
|
76
|
+
|
|
77
|
+
<Badge intent="stable">Healthy</Badge> <Badge intent="stable">Active</Badge>
|
|
78
|
+
|
|
79
|
+
### `none` – Default for normal / background states
|
|
80
|
+
|
|
81
|
+
* Especially in dense lists where too much color creates visual noise
|
|
82
|
+
* _E.g. "Inactive", "Expired"_
|
|
83
|
+
|
|
84
|
+
<Badge intent="none">Inactive</Badge> <Badge intent="none">Expired</Badge>
|
|
85
|
+
|
|
86
|
+
## Examples
|
|
87
|
+
|
|
88
|
+
### Comment status:
|
|
89
|
+
|
|
90
|
+
- "Approved" → `none`: <Badge intent="none">Approved</Badge>
|
|
91
|
+
- "Approval required" → `medium`: <Badge intent="medium">Approval required</Badge>
|
|
92
|
+
|
|
93
|
+
### Page status:
|
|
94
|
+
|
|
95
|
+
- "Published" → `none`: <Badge intent="none">Published</Badge>
|
|
96
|
+
- "Pending" → `low`: <Badge intent="low">Pending</Badge>
|
|
97
|
+
- "Draft" → `draft`: <Badge intent="draft">Draft</Badge>
|
|
98
|
+
- "Scheduled" → `informational`: <Badge intent="informational">Scheduled</Badge>
|
|
99
|
+
- "Private" → `informational`: <Badge intent="informational">Private</Badge>
|
|
100
|
+
|
|
101
|
+
### Plugin status:
|
|
102
|
+
|
|
103
|
+
- "Active" → `stable`: <Badge intent="stable">Active</Badge>
|
|
104
|
+
- "Inactive" → `none`: <Badge intent="none">Inactive</Badge>
|
|
105
|
+
|
|
106
|
+
## 5. When in doubt…
|
|
107
|
+
|
|
108
|
+
Use the least attention‑grabbing intent that still:
|
|
109
|
+
|
|
110
|
+
- Makes it clear what needs attention,
|
|
111
|
+
- Marks what isn't final, or
|
|
112
|
+
- Confirms a key success state in that context.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { Fragment } from '@wordpress/element';
|
|
3
|
+
import { Badge } from '../index';
|
|
4
|
+
|
|
5
|
+
const meta: Meta< typeof Badge > = {
|
|
6
|
+
title: 'Design System/Components/Badge',
|
|
7
|
+
component: Badge,
|
|
8
|
+
};
|
|
9
|
+
export default meta;
|
|
10
|
+
|
|
11
|
+
type Story = StoryObj< typeof Badge >;
|
|
12
|
+
|
|
13
|
+
export const Default: Story = {
|
|
14
|
+
args: {
|
|
15
|
+
children: 'Badge',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const High: Story = {
|
|
20
|
+
...Default,
|
|
21
|
+
args: {
|
|
22
|
+
...Default.args,
|
|
23
|
+
intent: 'high',
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export const Medium: Story = {
|
|
28
|
+
...Default,
|
|
29
|
+
args: {
|
|
30
|
+
...Default.args,
|
|
31
|
+
intent: 'medium',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const Low: Story = {
|
|
36
|
+
...Default,
|
|
37
|
+
args: {
|
|
38
|
+
...Default.args,
|
|
39
|
+
intent: 'low',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const Stable: Story = {
|
|
44
|
+
...Default,
|
|
45
|
+
args: {
|
|
46
|
+
...Default.args,
|
|
47
|
+
intent: 'stable',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const Informational: Story = {
|
|
52
|
+
...Default,
|
|
53
|
+
args: {
|
|
54
|
+
...Default.args,
|
|
55
|
+
intent: 'informational',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const Draft: Story = {
|
|
60
|
+
...Default,
|
|
61
|
+
args: {
|
|
62
|
+
...Default.args,
|
|
63
|
+
intent: 'draft',
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const None: Story = {
|
|
68
|
+
...Default,
|
|
69
|
+
args: {
|
|
70
|
+
...Default.args,
|
|
71
|
+
intent: 'none',
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const AllIntents: Story = {
|
|
76
|
+
...Default,
|
|
77
|
+
render: ( args ) => (
|
|
78
|
+
<div
|
|
79
|
+
style={ {
|
|
80
|
+
display: 'grid',
|
|
81
|
+
gridTemplateColumns: 'max-content min-content',
|
|
82
|
+
gap: '1rem',
|
|
83
|
+
color: 'var(--wpds-color-fg-content-neutral)',
|
|
84
|
+
} }
|
|
85
|
+
>
|
|
86
|
+
{ (
|
|
87
|
+
[
|
|
88
|
+
'high',
|
|
89
|
+
'medium',
|
|
90
|
+
'low',
|
|
91
|
+
'stable',
|
|
92
|
+
'informational',
|
|
93
|
+
'draft',
|
|
94
|
+
'none',
|
|
95
|
+
] as const
|
|
96
|
+
).map( ( intent ) => (
|
|
97
|
+
<Fragment key={ intent }>
|
|
98
|
+
<div
|
|
99
|
+
style={ {
|
|
100
|
+
paddingInlineEnd: '1rem',
|
|
101
|
+
display: 'flex',
|
|
102
|
+
alignItems: 'center',
|
|
103
|
+
} }
|
|
104
|
+
>
|
|
105
|
+
{ intent }
|
|
106
|
+
</div>
|
|
107
|
+
<div
|
|
108
|
+
style={ {
|
|
109
|
+
padding: '0.5rem 1rem',
|
|
110
|
+
display: 'flex',
|
|
111
|
+
alignItems: 'center',
|
|
112
|
+
} }
|
|
113
|
+
>
|
|
114
|
+
<Badge { ...args } intent={ intent } />
|
|
115
|
+
</div>
|
|
116
|
+
</Fragment>
|
|
117
|
+
) ) }
|
|
118
|
+
</div>
|
|
119
|
+
),
|
|
120
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ComponentProps } from '../utils/types';
|
|
2
|
+
|
|
3
|
+
export interface BadgeProps extends ComponentProps< 'span' > {
|
|
4
|
+
/**
|
|
5
|
+
* The text to display in the badge.
|
|
6
|
+
*/
|
|
7
|
+
children: string;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The semantic intent of the badge, communicating its meaning through color.
|
|
11
|
+
*
|
|
12
|
+
* @default "none"
|
|
13
|
+
*/
|
|
14
|
+
intent?:
|
|
15
|
+
| 'high'
|
|
16
|
+
| 'medium'
|
|
17
|
+
| 'low'
|
|
18
|
+
| 'stable'
|
|
19
|
+
| 'informational'
|
|
20
|
+
| 'draft'
|
|
21
|
+
| 'none';
|
|
22
|
+
}
|
package/src/box/box.tsx
CHANGED
|
@@ -1,18 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
* WordPress dependencies
|
|
3
|
-
*/
|
|
1
|
+
import { useRender, mergeProps } from '@base-ui/react';
|
|
4
2
|
import { forwardRef } from '@wordpress/element';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Internal dependencies
|
|
8
|
-
*/
|
|
9
3
|
import { type BoxProps } from './types';
|
|
10
|
-
import { renderElement } from '../utils/element';
|
|
11
4
|
|
|
12
5
|
/**
|
|
13
6
|
* Default render function that renders a div element with the given props.
|
|
14
|
-
*
|
|
15
|
-
* @param props The props to apply to the HTML element.
|
|
16
7
|
*/
|
|
17
8
|
const DEFAULT_RENDER = ( props: React.ComponentPropsWithoutRef< 'div' > ) => (
|
|
18
9
|
<div { ...props } />
|
|
@@ -20,30 +11,25 @@ const DEFAULT_RENDER = ( props: React.ComponentPropsWithoutRef< 'div' > ) => (
|
|
|
20
11
|
|
|
21
12
|
/**
|
|
22
13
|
* Capitalizes the first character of a string.
|
|
23
|
-
*
|
|
24
|
-
* @param str The string to capitalize.
|
|
25
|
-
* @return The capitalized string.
|
|
26
14
|
*/
|
|
27
15
|
const capitalize = ( str: string ): string =>
|
|
28
16
|
str.charAt( 0 ).toUpperCase() + str.slice( 1 );
|
|
29
17
|
|
|
30
18
|
/**
|
|
31
|
-
* Converts a size
|
|
32
|
-
* fallback)
|
|
19
|
+
* Converts a size token name to a CSS design token property reference (with
|
|
20
|
+
* fallback).
|
|
33
21
|
*
|
|
34
22
|
* @param property The CSS property name.
|
|
35
23
|
* @param target The design system token target.
|
|
36
|
-
* @param value The size
|
|
24
|
+
* @param value The size token name.
|
|
37
25
|
* @return A CSS value string with variable references.
|
|
38
26
|
*/
|
|
39
27
|
const getSpacingValue = (
|
|
40
28
|
property: string,
|
|
41
29
|
target: string,
|
|
42
|
-
value:
|
|
30
|
+
value: string
|
|
43
31
|
): string =>
|
|
44
|
-
|
|
45
|
-
? `calc(var(--wpds-dimension-base) * ${ value })`
|
|
46
|
-
: `var(--wpds-dimension-${ property }-${ target }-${ value }, var(--wpds-dimension-${ property }-surface-${ value }))`;
|
|
32
|
+
`var(--wpds-dimension-${ property }-${ target }-${ value }, var(--wpds-dimension-${ property }-surface-${ value }))`;
|
|
47
33
|
|
|
48
34
|
/**
|
|
49
35
|
* Generates CSS styles for properties with optionally directional values,
|
|
@@ -92,7 +78,7 @@ export const Box = forwardRef< HTMLDivElement, BoxProps >( function Box(
|
|
|
92
78
|
},
|
|
93
79
|
ref
|
|
94
80
|
) {
|
|
95
|
-
const style: React.CSSProperties = {
|
|
81
|
+
const style: React.CSSProperties = {};
|
|
96
82
|
|
|
97
83
|
if ( backgroundColor ) {
|
|
98
84
|
style.backgroundColor = `var(--wpds-color-bg-${ target }-${ backgroundColor }, var(--wpds-color-bg-surface-${ backgroundColor }))`;
|
|
@@ -122,9 +108,11 @@ export const Box = forwardRef< HTMLDivElement, BoxProps >( function Box(
|
|
|
122
108
|
style.borderColor = `var(--wpds-color-stroke-${ target }-${ borderColor }, var(--wpds-color-stroke-surface-${ borderColor }))`;
|
|
123
109
|
}
|
|
124
110
|
|
|
125
|
-
|
|
111
|
+
const element = useRender( {
|
|
126
112
|
render,
|
|
127
113
|
ref,
|
|
128
|
-
props:
|
|
114
|
+
props: mergeProps< 'div' >( props, { style } ),
|
|
129
115
|
} );
|
|
116
|
+
|
|
117
|
+
return element;
|
|
130
118
|
} );
|
|
@@ -1,22 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*/
|
|
4
|
-
import { type Meta, type StoryObj } from '@storybook/react';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* WordPress dependencies
|
|
8
|
-
*/
|
|
9
|
-
import '@wordpress/theme/design-tokens.css';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Internal dependencies
|
|
13
|
-
*/
|
|
1
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { type PaddingSize } from '@wordpress/theme';
|
|
14
3
|
import { Box } from '../box';
|
|
15
4
|
|
|
16
5
|
const meta: Meta< typeof Box > = {
|
|
17
6
|
title: 'Design System/Components/Box',
|
|
18
7
|
component: Box,
|
|
19
|
-
tags: [ 'status-experimental' ],
|
|
20
8
|
};
|
|
21
9
|
export default meta;
|
|
22
10
|
|
|
@@ -35,7 +23,7 @@ export const Default: Story = {
|
|
|
35
23
|
argTypes: {
|
|
36
24
|
padding: {
|
|
37
25
|
control: 'select',
|
|
38
|
-
options: [ '2xs', 'xs', 'sm', 'md', 'lg'
|
|
26
|
+
options: [ '2xs', 'xs', 'sm', 'md', 'lg' ] satisfies PaddingSize[],
|
|
39
27
|
},
|
|
40
28
|
},
|
|
41
29
|
};
|
package/src/box/types.ts
CHANGED
|
@@ -1,57 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import {
|
|
2
|
+
type PaddingSize,
|
|
3
|
+
type BorderRadiusSize,
|
|
4
|
+
type BorderWidthSize,
|
|
5
|
+
type Target,
|
|
6
|
+
type SurfaceBackgroundColor,
|
|
7
|
+
type ContentForegroundColor,
|
|
8
|
+
type SurfaceStrokeColor,
|
|
9
|
+
} from '@wordpress/theme';
|
|
4
10
|
import { type ComponentProps } from '../utils/types';
|
|
5
11
|
|
|
6
|
-
type SizeToken = '2xs' | 'xs' | 'sm' | 'md' | 'lg';
|
|
7
|
-
|
|
8
|
-
type Size = number | SizeToken;
|
|
9
|
-
|
|
10
|
-
type BackgroundColor =
|
|
11
|
-
| 'neutral'
|
|
12
|
-
| 'neutral-strong'
|
|
13
|
-
| 'neutral-weak'
|
|
14
|
-
| 'brand'
|
|
15
|
-
| 'success'
|
|
16
|
-
| 'success-weak'
|
|
17
|
-
| 'info'
|
|
18
|
-
| 'info-weak'
|
|
19
|
-
| 'warning'
|
|
20
|
-
| 'warning-weak'
|
|
21
|
-
| 'caution'
|
|
22
|
-
| 'caution-weak'
|
|
23
|
-
| 'error'
|
|
24
|
-
| 'error-weak';
|
|
25
|
-
|
|
26
|
-
type ForegroundColor =
|
|
27
|
-
| 'neutral'
|
|
28
|
-
| 'neutral-weak'
|
|
29
|
-
| 'success'
|
|
30
|
-
| 'success-weak'
|
|
31
|
-
| 'info'
|
|
32
|
-
| 'info-weak'
|
|
33
|
-
| 'warning'
|
|
34
|
-
| 'warning-weak'
|
|
35
|
-
| 'caution'
|
|
36
|
-
| 'caution-weak'
|
|
37
|
-
| 'error'
|
|
38
|
-
| 'error-weak';
|
|
39
|
-
|
|
40
|
-
type StrokeColor =
|
|
41
|
-
| 'brand'
|
|
42
|
-
| 'brand-strong'
|
|
43
|
-
| 'error'
|
|
44
|
-
| 'error-strong'
|
|
45
|
-
| 'info'
|
|
46
|
-
| 'info-strong'
|
|
47
|
-
| 'neutral'
|
|
48
|
-
| 'neutral-strong'
|
|
49
|
-
| 'neutral-weak'
|
|
50
|
-
| 'success'
|
|
51
|
-
| 'success-strong'
|
|
52
|
-
| 'warning'
|
|
53
|
-
| 'warning-strong';
|
|
54
|
-
|
|
55
12
|
type DimensionVariant< T > = {
|
|
56
13
|
block?: T;
|
|
57
14
|
blockStart?: T;
|
|
@@ -65,37 +22,37 @@ export interface BoxProps extends ComponentProps< 'div' > {
|
|
|
65
22
|
/**
|
|
66
23
|
* The target rendering element design token grouping to use for the box.
|
|
67
24
|
*/
|
|
68
|
-
target?:
|
|
25
|
+
target?: Target;
|
|
69
26
|
|
|
70
27
|
/**
|
|
71
28
|
* The surface background design token for box background color.
|
|
72
29
|
*/
|
|
73
|
-
backgroundColor?:
|
|
30
|
+
backgroundColor?: SurfaceBackgroundColor;
|
|
74
31
|
|
|
75
32
|
/**
|
|
76
33
|
* The surface foreground design token for box text color.
|
|
77
34
|
*/
|
|
78
|
-
color?:
|
|
35
|
+
color?: ContentForegroundColor;
|
|
79
36
|
|
|
80
37
|
/**
|
|
81
38
|
* The surface spacing design token or base unit multiplier for box padding.
|
|
82
39
|
*/
|
|
83
|
-
padding?:
|
|
40
|
+
padding?: PaddingSize | DimensionVariant< PaddingSize >;
|
|
84
41
|
|
|
85
42
|
/**
|
|
86
43
|
* The surface border radius design token.
|
|
87
44
|
*/
|
|
88
|
-
borderRadius?:
|
|
45
|
+
borderRadius?: BorderRadiusSize;
|
|
89
46
|
|
|
90
47
|
/**
|
|
91
48
|
* The surface border width design token.
|
|
92
49
|
*/
|
|
93
|
-
borderWidth?:
|
|
50
|
+
borderWidth?: BorderWidthSize;
|
|
94
51
|
|
|
95
52
|
/**
|
|
96
53
|
* The surface border stroke color design token.
|
|
97
54
|
*/
|
|
98
|
-
borderColor?:
|
|
55
|
+
borderColor?: SurfaceStrokeColor;
|
|
99
56
|
|
|
100
57
|
/**
|
|
101
58
|
* The content to be rendered inside the component.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Button as _Button } from '@base-ui/react/button';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { speak } from '@wordpress/a11y';
|
|
4
|
+
import { forwardRef, useEffect } from '@wordpress/element';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { type ButtonProps } from './types';
|
|
7
|
+
import styles from './style.module.css';
|
|
8
|
+
import resetStyles from '../utils/css/resets.module.css';
|
|
9
|
+
import focusStyles from '../utils/css/focus.module.css';
|
|
10
|
+
|
|
11
|
+
export const Button = forwardRef< HTMLButtonElement, ButtonProps >(
|
|
12
|
+
function Button(
|
|
13
|
+
{
|
|
14
|
+
tone = 'brand',
|
|
15
|
+
variant = 'solid',
|
|
16
|
+
size = 'default',
|
|
17
|
+
className,
|
|
18
|
+
focusableWhenDisabled = true,
|
|
19
|
+
disabled,
|
|
20
|
+
loading,
|
|
21
|
+
loadingAnnouncement = __( 'Loading' ),
|
|
22
|
+
children,
|
|
23
|
+
...props
|
|
24
|
+
},
|
|
25
|
+
ref
|
|
26
|
+
) {
|
|
27
|
+
const mergedClassName = clsx(
|
|
28
|
+
resetStyles[ 'box-sizing' ],
|
|
29
|
+
focusStyles[ 'outset-ring--focus-except-active' ],
|
|
30
|
+
variant !== 'unstyled' && styles.button,
|
|
31
|
+
styles[ `is-${ tone }` ],
|
|
32
|
+
styles[ `is-${ variant }` ],
|
|
33
|
+
styles[ `is-${ size }` ],
|
|
34
|
+
loading && styles[ 'is-loading' ],
|
|
35
|
+
className
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Announce loading state to assistive technology
|
|
39
|
+
useEffect( () => {
|
|
40
|
+
if ( loading && loadingAnnouncement ) {
|
|
41
|
+
speak( loadingAnnouncement );
|
|
42
|
+
}
|
|
43
|
+
}, [ loading, loadingAnnouncement ] );
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<_Button
|
|
47
|
+
ref={ ref }
|
|
48
|
+
className={ mergedClassName }
|
|
49
|
+
focusableWhenDisabled={ focusableWhenDisabled }
|
|
50
|
+
disabled={ disabled ?? loading }
|
|
51
|
+
{ ...props }
|
|
52
|
+
>
|
|
53
|
+
{ children }
|
|
54
|
+
</_Button>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { forwardRef } from '@wordpress/element';
|
|
2
|
+
import { type IconProps } from '../icon/types';
|
|
3
|
+
import { Icon } from '../icon';
|
|
4
|
+
|
|
5
|
+
interface ButtonIconProps extends IconProps {
|
|
6
|
+
/**
|
|
7
|
+
* The icon to display, from the `@wordpress/icons` package.
|
|
8
|
+
*/
|
|
9
|
+
icon: IconProps[ 'icon' ];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const ButtonIcon = forwardRef< SVGSVGElement, ButtonIconProps >(
|
|
13
|
+
function ButtonIcon( { icon, ...props }, ref ) {
|
|
14
|
+
return (
|
|
15
|
+
<Icon
|
|
16
|
+
ref={ ref }
|
|
17
|
+
icon={ icon }
|
|
18
|
+
viewBox="4 4 16 16"
|
|
19
|
+
size={ 16 }
|
|
20
|
+
{ ...props }
|
|
21
|
+
/>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Button as ButtonButton } from './button';
|
|
2
|
+
import { ButtonIcon } from './icon';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A versatile button component with multiple variants, tones, and sizes.
|
|
6
|
+
* Built on design tokens for consistent theming and accessibility.
|
|
7
|
+
*/
|
|
8
|
+
export const Button = Object.assign( ButtonButton, {
|
|
9
|
+
/**
|
|
10
|
+
* An icon component specifically designed to work well when rendered inside
|
|
11
|
+
* a `Button` component.
|
|
12
|
+
*/
|
|
13
|
+
Icon: ButtonIcon,
|
|
14
|
+
} ) as typeof ButtonButton & {
|
|
15
|
+
Icon: typeof ButtonIcon;
|
|
16
|
+
};
|