@wallarm-org/design-system 0.5.0 → 0.6.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.
@@ -1,14 +1,26 @@
1
- import type { ComponentProps, FC, PropsWithChildren, Ref } from 'react';
1
+ import type { FC, HTMLAttributes, ReactNode, Ref } from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const skeletonVariants: (props?: ({
4
- variant?: "rect" | "text" | "circular" | "rounded" | null | undefined;
5
- asChild?: boolean | null | undefined;
4
+ transparent?: boolean | null | undefined;
5
+ rounded?: "none" | 2 | 4 | 6 | 8 | 12 | 16 | 32 | 24 | "full" | null | undefined;
6
+ withDimensions?: boolean | null | undefined;
7
+ withChildren?: boolean | null | undefined;
6
8
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
- type SkeletonNativeProps = ComponentProps<'div'>;
8
- type SkeletonVariantProps = VariantProps<typeof skeletonVariants>;
9
- export type SkeletonProps = SkeletonNativeProps & SkeletonVariantProps & PropsWithChildren & {
9
+ type SkeletonVariantsProps = VariantProps<typeof skeletonVariants>;
10
+ type SkeletonDimension = `${number}px` | `${number}%`;
11
+ interface SkeletonSharedProps {
10
12
  ref?: Ref<HTMLDivElement>;
11
13
  loading?: boolean;
14
+ }
15
+ type SkeletonStandaloneProps = SkeletonSharedProps & {
16
+ width: SkeletonDimension;
17
+ height: SkeletonDimension;
12
18
  };
19
+ type SkeletonWrapProps = SkeletonSharedProps & {
20
+ children: ReactNode;
21
+ width?: never;
22
+ height?: never;
23
+ };
24
+ export type SkeletonProps = HTMLAttributes<HTMLDivElement> & SkeletonVariantsProps & (SkeletonStandaloneProps | SkeletonWrapProps);
13
25
  export declare const Skeleton: FC<SkeletonProps>;
14
26
  export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import code_connect from "@figma/code-connect";
3
+ import { Skeleton } from "./Skeleton.js";
4
+ const figmaNodeUrl = 'https://www.figma.com/design/VKb5gW46uSGw0rqrhZsbXT/WADS-Components?node-id=5451-23064';
5
+ code_connect.connect(Skeleton, figmaNodeUrl, {
6
+ props: {
7
+ transparent: code_connect.boolean('Transparent')
8
+ },
9
+ example: ({ transparent })=>/*#__PURE__*/ jsx(Skeleton, {
10
+ width: "100%",
11
+ height: "20px",
12
+ transparent: transparent
13
+ })
14
+ });
@@ -1,40 +1,59 @@
1
1
  import { Fragment, jsx } from "react/jsx-runtime";
2
- import { Slot } from "@radix-ui/react-slot";
3
2
  import { cva } from "class-variance-authority";
4
3
  import { cn } from "../../utils/cn.js";
5
- const skeletonVariants = cva('animate-pulse bg-bg-primary rounded-6', {
4
+ const skeletonVariants = cva(cn('overflow-hidden', 'animate-skeleton'), {
6
5
  variants: {
7
- variant: {
8
- text: 'h-16 w-full',
9
- circular: 'rounded-full',
10
- rect: '',
11
- rounded: 'rounded-12'
6
+ transparent: {
7
+ true: '',
8
+ false: 'bg-bg-surface-1'
12
9
  },
13
- asChild: {
14
- true: 'select-none pointer-events-none overflow-hidden text-transparent *:invisible',
15
- false: ''
10
+ rounded: {
11
+ none: 'rounded-none',
12
+ full: 'rounded-full',
13
+ 2: 'rounded-2',
14
+ 4: 'rounded-4',
15
+ 6: 'rounded-6',
16
+ 8: 'rounded-8',
17
+ 12: 'rounded-12',
18
+ 16: 'rounded-16',
19
+ 24: 'rounded-24',
20
+ 32: 'rounded-32'
21
+ },
22
+ withDimensions: {
23
+ true: 'w-(--skeleton-width) h-(--skeleton-height)'
24
+ },
25
+ withChildren: {
26
+ true: 'select-none pointer-events-none text-transparent *:invisible'
16
27
  }
17
28
  },
18
29
  defaultVariants: {
19
- variant: 'rect',
20
- asChild: false
30
+ transparent: true
21
31
  }
22
32
  });
23
- const Skeleton = ({ variant = 'rect', loading = true, asChild = false, className, children, ref, ...props })=>{
33
+ const Skeleton = ({ children, ref, className, width, height, loading = true, transparent = true, rounded = 6, ...props })=>{
24
34
  if (!loading) return /*#__PURE__*/ jsx(Fragment, {
25
35
  children: children
26
36
  });
27
- const Comp = asChild ? Slot : 'div';
28
- return /*#__PURE__*/ jsx(Comp, {
37
+ const style = {
38
+ ...width ? {
39
+ '--skeleton-width': width
40
+ } : {},
41
+ ...height ? {
42
+ '--skeleton-height': height
43
+ } : {}
44
+ };
45
+ return /*#__PURE__*/ jsx("div", {
46
+ ...props,
29
47
  ref: ref,
30
48
  "data-slot": "skeleton",
31
- "aria-hidden": true,
32
- tabIndex: -1,
49
+ style: style,
33
50
  className: cn(skeletonVariants({
34
- variant,
35
- asChild
51
+ transparent,
52
+ rounded,
53
+ withDimensions: !!width && !!height,
54
+ withChildren: !!children
36
55
  }), className),
37
- ...props,
56
+ "aria-hidden": true,
38
57
  children: children
39
58
  });
40
59
  };
@@ -17,7 +17,8 @@ const TableLoadingState = ()=>{
17
17
  width: column.getSize()
18
18
  },
19
19
  children: /*#__PURE__*/ jsx(Skeleton, {
20
- className: "h-20 w-full"
20
+ width: "100%",
21
+ height: "20px"
21
22
  })
22
23
  }, column.id))
23
24
  }, key);
package/dist/index.d.ts CHANGED
@@ -23,6 +23,7 @@ export { SegmentedControl, SegmentedControlButton, type SegmentedControlButtonPr
23
23
  export { SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton, } from './components/SegmentedTabs';
24
24
  export { Select, SelectButton, SelectClearTrigger, SelectContent, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, } from './components/Select';
25
25
  export { Separator, type SeparatorProps } from './components/Separator';
26
+ export { Skeleton, type SkeletonProps } from './components/Skeleton';
26
27
  export { HStack, type HStackProps, Stack, type StackProps, VStack, type VStackProps, } from './components/Stack';
27
28
  export { Switch, SwitchControl, SwitchDescription, type SwitchDescriptionProps, SwitchLabel, type SwitchLabelProps, type SwitchProps, } from './components/Switch';
28
29
  export { createTableColumnHelper, Table, type TableAccessorColumnDef, TableActionBar, type TableCellContext, type TableColumnBase, type TableColumnDef, type TableColumnHelper, type TableColumnMeta, type TableColumnPinningState, type TableColumnSizingState, type TableDisplayColumnDef, TableEmptyState, type TableExpandedState, type TableGroupingState, type TableOnChangeFn, type TableProps, type TableRow, type TableRowSelectionState, TableSettingsMenu, type TableSortingState, type TableUpdater, type TableVisibilityState, } from './components/Table';
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ import { SegmentedControl, SegmentedControlButton, SegmentedControlItem, Segment
23
23
  import { SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton } from "./components/SegmentedTabs/index.js";
24
24
  import { Select, SelectButton, SelectClearTrigger, SelectContent, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator } from "./components/Select/index.js";
25
25
  import { Separator } from "./components/Separator/index.js";
26
+ import { Skeleton } from "./components/Skeleton/index.js";
26
27
  import { HStack, Stack, VStack } from "./components/Stack/index.js";
27
28
  import { Switch, SwitchControl, SwitchDescription, SwitchLabel } from "./components/Switch/index.js";
28
29
  import { Table, TableActionBar, TableEmptyState, TableSettingsMenu, createTableColumnHelper } from "./components/Table/index.js";
@@ -35,4 +36,4 @@ import { Toast, ToastActions, Toaster, toaster } from "./components/Toast/index.
35
36
  import { ToggleButton } from "./components/ToggleButton/index.js";
36
37
  import { Tooltip, TooltipContent, TooltipTrigger } from "./components/Tooltip/index.js";
37
38
  import { Tour, beaconStepEffect, useTour, waitForStepEvent } from "./components/Tour/index.js";
38
- export { Alert, AlertClose, AlertContent, AlertControls, AlertDescription, AlertIcon, AlertTitle, Badge, Button, Checkbox, CheckboxDescription, CheckboxGroup, CheckboxIndicator, CheckboxLabel, Code, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerFooter, DrawerFooterControls, DrawerHeader, DrawerPositioner, DrawerResizeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuContextTrigger, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemContent, DropdownMenuItemDescription, DropdownMenuItemIcon, DropdownMenuItemText, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, DropdownMenuTriggerItem, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Flex, HStack, Heading, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, Kbd, KbdGroup, Link, Loader, NumberInput, NumericBadge, OverflowTooltip, OverflowTooltipContent, Popover, PopoverContent, PopoverTrigger, Radio, RadioDescription, RadioGroup, RadioIndicator, RadioLabel, ScrollArea, ScrollAreaContent, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaViewport, SegmentedControl, SegmentedControlButton, SegmentedControlItem, SegmentedControlSeparator, SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton, Select, SelectButton, SelectClearTrigger, SelectContent, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, Separator, Stack, Switch, SwitchControl, SwitchDescription, SwitchLabel, Table, TableActionBar, TableEmptyState, TableSettingsMenu, Tabs, TabsButton, TabsContent, TabsLineActions, TabsList, TabsSeparator, TabsTrigger, Tag, TagClose, Text, Textarea, ThemeProvider, Toast, ToastActions, Toaster, ToggleButton, Tooltip, TooltipContent, TooltipTrigger, Tour, VStack, beaconStepEffect, createTableColumnHelper, drawerContentVariants, drawerPositionerVariants, toaster, useDrawerContext, useTheme, useTour, waitForStepEvent };
39
+ export { Alert, AlertClose, AlertContent, AlertControls, AlertDescription, AlertIcon, AlertTitle, Badge, Button, Checkbox, CheckboxDescription, CheckboxGroup, CheckboxIndicator, CheckboxLabel, Code, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerFooter, DrawerFooterControls, DrawerHeader, DrawerPositioner, DrawerResizeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuContent, DropdownMenuContextTrigger, DropdownMenuGroup, DropdownMenuItem, DropdownMenuItemContent, DropdownMenuItemDescription, DropdownMenuItemIcon, DropdownMenuItemText, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, DropdownMenuTriggerItem, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Flex, HStack, Heading, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, Kbd, KbdGroup, Link, Loader, NumberInput, NumericBadge, OverflowTooltip, OverflowTooltipContent, Popover, PopoverContent, PopoverTrigger, Radio, RadioDescription, RadioGroup, RadioIndicator, RadioLabel, ScrollArea, ScrollAreaContent, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaViewport, SegmentedControl, SegmentedControlButton, SegmentedControlItem, SegmentedControlSeparator, SegmentedTabs, SegmentedTabsButton, SegmentedTabsContent, SegmentedTabsList, SegmentedTabsSeparator, SegmentedTabsTrigger, SegmentedTabsTriggerButton, Select, SelectButton, SelectClearTrigger, SelectContent, SelectFooter, SelectGroup, SelectGroupLabel, SelectHeader, SelectInput, SelectOption, SelectOptionDescription, SelectOptionIndicator, SelectOptionText, SelectPositioner, SelectSearchInput, SelectSeparator, Separator, Skeleton, Stack, Switch, SwitchControl, SwitchDescription, SwitchLabel, Table, TableActionBar, TableEmptyState, TableSettingsMenu, Tabs, TabsButton, TabsContent, TabsLineActions, TabsList, TabsSeparator, TabsTrigger, Tag, TagClose, Text, Textarea, ThemeProvider, Toast, ToastActions, Toaster, ToggleButton, Tooltip, TooltipContent, TooltipTrigger, Tour, VStack, beaconStepEffect, createTableColumnHelper, drawerContentVariants, drawerPositionerVariants, toaster, useDrawerContext, useTheme, useTour, waitForStepEvent };
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.4.2",
3
- "generatedAt": "2026-03-04T15:28:50.771Z",
2
+ "version": "0.5.0",
3
+ "generatedAt": "2026-03-05T11:22:14.251Z",
4
4
  "components": [
5
5
  {
6
6
  "name": "Alert",
@@ -15746,7 +15746,7 @@
15746
15746
  },
15747
15747
  {
15748
15748
  "name": "autoCapitalize",
15749
- "type": "\"off\" | \"none\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}) | undefined",
15749
+ "type": "\"none\" | \"off\" | \"on\" | \"sentences\" | \"words\" | \"characters\" | (string & {}) | undefined",
15750
15750
  "required": false
15751
15751
  },
15752
15752
  {
@@ -15776,7 +15776,7 @@
15776
15776
  },
15777
15777
  {
15778
15778
  "name": "enterKeyHint",
15779
- "type": "\"search\" | \"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"send\" | undefined",
15779
+ "type": "\"enter\" | \"done\" | \"go\" | \"next\" | \"previous\" | \"search\" | \"send\" | undefined",
15780
15780
  "required": false
15781
15781
  },
15782
15782
  {
@@ -15967,7 +15967,7 @@
15967
15967
  },
15968
15968
  {
15969
15969
  "name": "inputMode",
15970
- "type": "\"search\" | \"text\" | \"none\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
15970
+ "type": "\"none\" | \"search\" | \"text\" | \"tel\" | \"url\" | \"email\" | \"numeric\" | \"decimal\" | undefined",
15971
15971
  "required": false,
15972
15972
  "description": "Hints at the type of data that might be entered by the user while editing the element or its contents"
15973
15973
  },
@@ -15990,69 +15990,98 @@
15990
15990
  "description": "@see {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/part}"
15991
15991
  },
15992
15992
  {
15993
- "name": "variant",
15994
- "type": "{ text: string; circular: string; rect: string; rounded: string; }",
15993
+ "name": "transparent",
15994
+ "type": "{ true: string; false: string; }",
15995
15995
  "required": false,
15996
- "defaultValue": "rect"
15996
+ "defaultValue": "true"
15997
15997
  },
15998
15998
  {
15999
- "name": "asChild",
16000
- "type": "{ true: string; false: string; }",
15999
+ "name": "rounded",
16000
+ "type": "{ none: string; full: string; 2: string; 4: string; 6: string; 8: string; 12: string; 16: string; 24: string; 32: string; }",
16001
16001
  "required": false,
16002
- "defaultValue": "false"
16002
+ "defaultValue": "6"
16003
+ },
16004
+ {
16005
+ "name": "withDimensions",
16006
+ "type": "{ true: string; }",
16007
+ "required": false
16008
+ },
16009
+ {
16010
+ "name": "withChildren",
16011
+ "type": "{ true: string; }",
16012
+ "required": false
16003
16013
  },
16004
16014
  {
16005
16015
  "name": "loading",
16006
16016
  "type": "boolean | undefined",
16007
16017
  "required": false,
16008
16018
  "defaultValue": "true"
16019
+ },
16020
+ {
16021
+ "name": "width",
16022
+ "type": "SkeletonDimension",
16023
+ "required": false
16024
+ },
16025
+ {
16026
+ "name": "height",
16027
+ "type": "SkeletonDimension",
16028
+ "required": false
16009
16029
  }
16010
16030
  ],
16011
16031
  "variants": [
16012
16032
  {
16013
- "name": "variant",
16033
+ "name": "transparent",
16014
16034
  "options": [
16015
- "text",
16016
- "circular",
16017
- "rect",
16018
- "rounded"
16035
+ "true",
16036
+ "false"
16019
16037
  ],
16020
- "defaultValue": "rect"
16038
+ "defaultValue": "true"
16021
16039
  },
16022
16040
  {
16023
- "name": "asChild",
16041
+ "name": "rounded",
16024
16042
  "options": [
16025
- "true",
16026
- "false"
16027
- ],
16028
- "defaultValue": "false"
16043
+ "none",
16044
+ "full",
16045
+ "2",
16046
+ "4",
16047
+ "6",
16048
+ "8",
16049
+ "12",
16050
+ "16",
16051
+ "24",
16052
+ "32"
16053
+ ]
16054
+ },
16055
+ {
16056
+ "name": "withDimensions",
16057
+ "options": [
16058
+ "true"
16059
+ ]
16060
+ },
16061
+ {
16062
+ "name": "withChildren",
16063
+ "options": [
16064
+ "true"
16065
+ ]
16029
16066
  }
16030
16067
  ],
16031
16068
  "subComponents": [],
16032
16069
  "examples": [
16033
16070
  {
16034
16071
  "name": "Basic",
16035
- "code": "args => <Skeleton {...args} className='h-40 w-256' />"
16036
- },
16037
- {
16038
- "name": "Variants",
16039
- "code": "() => (\n <VStack className='gap-16 w-320'>\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>text</span>\n <Skeleton variant='text' />\n </VStack>\n\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>rect (default)</span>\n <Skeleton variant='rect' className='h-40 w-256' />\n </VStack>\n\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>rounded</span>\n <Skeleton variant='rounded' className='h-40 w-256' />\n </VStack>\n\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>circular</span>\n <Skeleton variant='circular' className='h-48 w-48' />\n </VStack>\n </VStack>\n)"
16072
+ "code": "() => <Skeleton width='200px' height='20px' />"
16040
16073
  },
16041
16074
  {
16042
- "name": "WithAsChild",
16043
- "code": "() => (\n <VStack className='gap-16'>\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>loading=true, asChild</span>\n <HStack className='gap-8'>\n <Skeleton asChild loading>\n <Badge>Select</Badge>\n </Skeleton>\n <Skeleton asChild loading>\n <Button>Submit</Button>\n </Skeleton>\n </HStack>\n </VStack>\n\n <VStack className='gap-4'>\n <span className='text-sm text-text-secondary'>loading=false (children rendered)</span>\n <HStack className='gap-8'>\n <Skeleton asChild loading={false}>\n <Badge>Select</Badge>\n </Skeleton>\n <Skeleton asChild loading={false}>\n <Button>Submit</Button>\n </Skeleton>\n </HStack>\n </VStack>\n </VStack>\n)"
16075
+ "name": "Shapes",
16076
+ "code": "() => (\n <HStack gap={24} align='start'>\n <div className='flex flex-col items-end gap-24 w-[400px]'>\n {/* Title */}\n <Skeleton width='256px' height='40px' />\n\n {/* Text */}\n <Skeleton width='256px' height='24px' />\n\n {/* Tags row */}\n <HStack gap={4}>\n <Skeleton width='48px' height='20px' />\n <Skeleton width='48px' height='20px' />\n <Skeleton width='48px' height='20px' />\n <Skeleton width='48px' height='20px' />\n </HStack>\n\n {/* Icon Button */}\n <Skeleton width='36px' height='36px' />\n\n {/* Circle + text + badge */}\n <HStack align='center' gap={4}>\n <Skeleton width='20px' height='24px' rounded='full' />\n <Skeleton width='88px' height='24px' />\n <Skeleton width='32px' height='24px' />\n </HStack>\n\n {/* Button */}\n <Skeleton width='100px' height='36px' rounded={8} />\n\n {/* Segmented tabs */}\n <Skeleton width='284px' height='36px' rounded={12} />\n </div>\n\n <div className='flex flex-col gap-24 w-[400px]'>\n {/* Title */}\n <Heading size='4xl'>Advanced API Security</Heading>\n\n {/* Text */}\n <Text size='md'>Advanced API Security</Text>\n\n {/* Tags row */}\n <div className='flex flex-row gap-4'>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Badge>+5</Badge>\n </div>\n\n {/* Icon Button */}\n <Button variant='outline' color='neutral' size='large'>\n <CircleDashed />\n </Button>\n\n {/* Circle + text + badge */}\n <div className='flex flex-row items-center gap-4'>\n <Globe className='size-[20px] text-text-secondary' />\n <Text size='md'>34.74.73.20</Text>\n <Badge>AWS</Badge>\n </div>\n\n {/* Button */}\n <div className='flex w-100'>\n <Button variant='primary' color='brand' size='large'>\n <CircleDashed />\n Button\n </Button>\n </div>\n\n {/* Segmented tabs */}\n <div className='flex w-284'>\n <SegmentedTabs defaultValue='item1'>\n <SegmentedTabsList>\n <SegmentedTabsTrigger value='item1'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item2'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item3'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item4'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item5'>Item</SegmentedTabsTrigger>\n </SegmentedTabsList>\n </SegmentedTabs>\n </div>\n </div>\n </HStack>\n)"
16044
16077
  },
16045
16078
  {
16046
- "name": "LoadingToggle",
16047
- "code": "({ loading = true }) => (\n <HStack className='gap-16'>\n <Skeleton loading={loading} className='h-48 w-48' variant='circular' />\n <VStack className='gap-8'>\n <Skeleton loading={loading} variant='text' className='w-200' />\n <Skeleton loading={loading} variant='text' className='w-128' />\n </VStack>\n </HStack>\n)"
16048
- },
16049
- {
16050
- "name": "ShapeVariety",
16051
- "code": "() => (\n <VStack className='gap-16'>\n <HStack className='gap-16 items-center'>\n <Skeleton variant='circular' className='h-48 w-48' />\n <VStack className='gap-8 flex-1'>\n <Skeleton variant='text' className='w-200' />\n <Skeleton variant='text' className='w-128' />\n </VStack>\n </HStack>\n\n <HStack className='gap-16 items-center'>\n <Skeleton variant='circular' className='h-36 w-36' />\n <VStack className='gap-8 flex-1'>\n <Skeleton variant='text' className='w-160' />\n <Skeleton variant='text' className='w-96' />\n </VStack>\n </HStack>\n </VStack>\n)"
16079
+ "name": "Wrap",
16080
+ "code": "() => (\n <HStack gap={24} align='start'>\n <div className='flex flex-col items-end gap-24 w-[400px]'>\n {/* Title */}\n <Skeleton>\n <Heading size='4xl'>Advanced API Security</Heading>\n </Skeleton>\n\n {/* Text */}\n <Skeleton>\n <Text size='md'>Advanced API Security</Text>\n </Skeleton>\n\n {/* Tags row */}\n <HStack gap={4}>\n <Skeleton>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n </Skeleton>\n <Skeleton>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n </Skeleton>\n <Skeleton>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n </Skeleton>\n <Skeleton>\n <Badge>+5</Badge>\n </Skeleton>\n </HStack>\n\n {/* Icon Button */}\n <Skeleton rounded={8}>\n <Button variant='outline' color='neutral' size='large'>\n <CircleDashed />\n </Button>\n </Skeleton>\n\n {/* Circle + text + badge */}\n <HStack align='center' gap={4}>\n <Skeleton rounded='full'>\n <Globe className='size-[20px] text-text-secondary' />\n </Skeleton>\n <Skeleton>\n <Text size='md'>34.74.73.20</Text>\n </Skeleton>\n <Skeleton>\n <Badge>AWS</Badge>\n </Skeleton>\n </HStack>\n\n {/* Button */}\n <Skeleton rounded={8}>\n <Button variant='primary' color='brand' size='large'>\n <CircleDashed />\n Button\n </Button>\n </Skeleton>\n\n {/* Segmented tabs */}\n <Skeleton rounded={12}>\n <SegmentedTabs defaultValue='item1'>\n <SegmentedTabsList>\n <SegmentedTabsTrigger value='item1'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item2'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item3'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item4'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item5'>Item</SegmentedTabsTrigger>\n </SegmentedTabsList>\n </SegmentedTabs>\n </Skeleton>\n </div>\n\n <div className='flex flex-col gap-24 w-[400px]'>\n {/* Title */}\n <Heading size='4xl'>Advanced API Security</Heading>\n\n {/* Text */}\n <Text size='md'>Advanced API Security</Text>\n\n {/* Tags row */}\n <div className='flex flex-row gap-4'>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Tag>\n Tag\n <TagClose />\n </Tag>\n <Badge>+5</Badge>\n </div>\n\n {/* Icon Button */}\n <Button variant='outline' color='neutral' size='large'>\n <CircleDashed />\n </Button>\n\n {/* Circle + text + badge */}\n <div className='flex flex-row items-center gap-4'>\n <Globe className='size-[20px] text-text-secondary' />\n <Text size='md'>34.74.73.20</Text>\n <Badge>AWS</Badge>\n </div>\n\n {/* Button */}\n <div className='flex w-100'>\n <Button variant='primary' color='brand' size='large'>\n <CircleDashed />\n Button\n </Button>\n </div>\n\n {/* Segmented tabs */}\n <div className='flex w-284'>\n <SegmentedTabs defaultValue='item1'>\n <SegmentedTabsList>\n <SegmentedTabsTrigger value='item1'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item2'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item3'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item4'>Item</SegmentedTabsTrigger>\n <SegmentedTabsTrigger value='item5'>Item</SegmentedTabsTrigger>\n </SegmentedTabsList>\n </SegmentedTabs>\n </div>\n </div>\n </HStack>\n)"
16052
16081
  },
16053
16082
  {
16054
- "name": "CardExample",
16055
- "code": "() => (\n <VStack className='gap-12 w-320'>\n <Skeleton variant='rounded' className='h-160 w-full' />\n <Skeleton variant='text' className='w-200' />\n <Skeleton variant='text' />\n <Skeleton variant='text' className='w-240' />\n <HStack className='gap-8'>\n <Skeleton variant='rounded' className='h-36 w-100' />\n <Skeleton variant='circular' className='h-36 w-36' />\n </HStack>\n </VStack>\n)"
16083
+ "name": "Transparent",
16084
+ "code": "() => (\n <div className='flex flex-col gap-8 p-8 rounded-8 bg-orange-100'>\n <div className='flex gap-24 justify-end'>\n Transparent: <Skeleton width='200px' height='20px' />\n </div>\n <div className='flex gap-24 justify-end'>\n Not transparent: <Skeleton width='200px' height='20px' transparent={false} />\n </div>\n </div>\n)"
16056
16085
  }
16057
16086
  ]
16058
16087
  },
@@ -0,0 +1,19 @@
1
+ @keyframes skeleton {
2
+ 0% {
3
+ background-position: 200% 0;
4
+ }
5
+ 100% {
6
+ background-position: -200% 0;
7
+ }
8
+ }
9
+
10
+ .animate-skeleton {
11
+ background-image: linear-gradient(
12
+ 90deg,
13
+ --alpha(var(--color-slate-600) / 6%) 0%,
14
+ --alpha(var(--color-slate-600) / 16%) 50%,
15
+ --alpha(var(--color-slate-600) / 6%) 100%
16
+ );
17
+ background-size: 200% 100%;
18
+ animation: skeleton 1.5s linear infinite;
19
+ }
@@ -16,6 +16,7 @@
16
16
  @import './components/drawer.css';
17
17
  @import './components/dialog.css';
18
18
  @import './components/tour.css';
19
+ @import './components/skeleton.css';
19
20
 
20
21
  [data-scope='scroll-area'][data-part='viewport'] {
21
22
  scrollbar-width: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wallarm-org/design-system",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Core design system library with React components and Storybook documentation",
5
5
  "publishConfig": {
6
6
  "access": "public",