From ea372ae2ba48b596b85021be4db6f45a2984d822 Mon Sep 17 00:00:00 2001 From: egdev6 Date: Wed, 22 Jul 2026 20:56:55 +0200 Subject: [PATCH 1/2] refactor(primitives): move skeleton to primitives --- scripts/verify-package-consumption.mjs | 39 +++++++++++++++++-- .../skeleton/Skeleton.stories.tsx | 3 +- .../skeleton/Skeleton.test.tsx | 0 .../skeleton/Skeleton.tsx | 0 .../{atoms => primitives}/skeleton/index.ts | 0 .../{atoms => primitives}/skeleton/types.ts | 0 .../skeleton/useSkeleton.ts | 0 src/index.ts | 3 +- 8 files changed, 39 insertions(+), 6 deletions(-) rename src/components/{atoms => primitives}/skeleton/Skeleton.stories.tsx (93%) rename src/components/{atoms => primitives}/skeleton/Skeleton.test.tsx (100%) rename src/components/{atoms => primitives}/skeleton/Skeleton.tsx (100%) rename src/components/{atoms => primitives}/skeleton/index.ts (100%) rename src/components/{atoms => primitives}/skeleton/types.ts (100%) rename src/components/{atoms => primitives}/skeleton/useSkeleton.ts (100%) diff --git a/scripts/verify-package-consumption.mjs b/scripts/verify-package-consumption.mjs index 3b6acba6..a24a8dfa 100644 --- a/scripts/verify-package-consumption.mjs +++ b/scripts/verify-package-consumption.mjs @@ -4,7 +4,7 @@ import { createRequire } from 'node:module'; import { tmpdir } from 'node:os'; import { dirname, join, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; -import { Button, Divider, Spacer } from '@stack-and-flow/design-system'; +import { Button, Divider, Skeleton, Spacer } from '@stack-and-flow/design-system'; const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..'); const loadCjs = createRequire(import.meta.url); @@ -23,6 +23,10 @@ if (typeof Spacer !== 'function') { throw new TypeError(`Expected ESM Spacer export to be a function, received ${typeof Spacer}`); } +if (typeof Skeleton !== 'function') { + throw new TypeError(`Expected ESM Skeleton export to be a function, received ${typeof Skeleton}`); +} + if (typeof cjsExports.Button !== 'function') { throw new TypeError(`Expected CJS Button export to be a function, received ${typeof cjsExports.Button}`); } @@ -35,6 +39,10 @@ if (typeof cjsExports.Spacer !== 'function') { throw new TypeError(`Expected CJS Spacer export to be a function, received ${typeof cjsExports.Spacer}`); } +if (typeof cjsExports.Skeleton !== 'function') { + throw new TypeError(`Expected CJS Skeleton export to be a function, received ${typeof cjsExports.Skeleton}`); +} + const cssPath = resolve(packageRoot, 'dist/design-system.css'); if (stylesPath !== cssPath) { throw new Error(`Expected styles subpath to resolve to ${cssPath}, received ${stylesPath}`); @@ -140,10 +148,13 @@ try { import type { DividerColor, DividerProps, + SkeletonProps, + SkeletonRounded, + SkeletonSize, SpacerProps, SpacerScale } from '@stack-and-flow/design-system'; -import { Button, Divider, Popover, Select, Spacer } from '@stack-and-flow/design-system'; +import { Button, Divider, Popover, Select, Skeleton, Spacer } from '@stack-and-flow/design-system'; const buttonProps: ComponentProps = { text: 'Save', @@ -165,6 +176,17 @@ const spacerProps: ComponentProps = { }; const explicitSpacerProps: SpacerProps = spacerProps; +const skeletonSize: SkeletonSize = 'title'; +const skeletonRounded: SkeletonRounded = 'lg'; +const skeletonProps: ComponentProps = { + size: skeletonSize, + rounded: skeletonRounded, + ariaHidden: false, + role: 'status', + 'aria-label': 'Loading profile' +}; +const explicitSkeletonProps: SkeletonProps = skeletonProps; + const selectProps: ComponentProps = { ariaLabel: 'Framework', options: [{ key: 'react', label: 'React' }] @@ -173,6 +195,7 @@ const selectProps: ComponentProps = { const button =