vueless 0.0.114 → 0.0.116

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.
Files changed (50) hide show
  1. package/assets/icons/image.svg +1 -0
  2. package/package.json +1 -1
  3. package/ui.container-accordion/Docs.mdx +16 -0
  4. package/ui.container-group/composables/attrs.composable.js +6 -1
  5. package/ui.container-group/configs/default.config.js +19 -5
  6. package/ui.container-group/index.stories.js +9 -10
  7. package/ui.container-group/index.vue +15 -6
  8. package/ui.container-groups/composables/attrs.composable.js +19 -2
  9. package/ui.container-groups/configs/default.config.js +24 -1
  10. package/ui.container-groups/constants/index.js +5 -0
  11. package/ui.container-groups/index.stories.js +13 -13
  12. package/ui.container-groups/index.vue +24 -2
  13. package/ui.container-row/index.stories.js +10 -9
  14. package/ui.container-row/index.vue +3 -3
  15. package/ui.data-list/Docs.mdx +16 -0
  16. package/ui.form-checkbox/index.stories.js +2 -2
  17. package/ui.form-color-picker/Docs.mdx +16 -0
  18. package/ui.form-date-picker-range/Docs.mdx +16 -0
  19. package/ui.form-input/index.stories.js +1 -1
  20. package/ui.form-input-file/Docs.mdx +16 -0
  21. package/ui.form-input-money/index.stories.js +1 -1
  22. package/ui.form-input-number/index.stories.js +1 -1
  23. package/ui.form-input-rating/Docs.mdx +16 -0
  24. package/ui.form-input-search/Docs.mdx +16 -0
  25. package/ui.form-switch/Docs.mdx +16 -0
  26. package/ui.form-textarea/index.stories.js +1 -1
  27. package/ui.image-avatar/Docs.mdx +16 -0
  28. package/ui.image-avatar/composables/attrs.composable.js +2 -0
  29. package/ui.image-avatar/configs/default.config.js +19 -12
  30. package/ui.image-avatar/index.stories.js +82 -42
  31. package/ui.image-avatar/index.vue +53 -39
  32. package/ui.image-icon/index.vue +6 -9
  33. package/ui.image-logo/Docs.mdx +16 -0
  34. package/ui.loader/Docs.mdx +16 -0
  35. package/ui.loader-top/configs/default.config.js +5 -1
  36. package/ui.loader-top/index.vue +1 -1
  37. package/ui.navigation-pagination/Docs.mdx +16 -0
  38. package/ui.navigation-progress/Docs.mdx +16 -0
  39. package/ui.navigation-progress/configs/default.config.js +7 -7
  40. package/ui.navigation-progress/index.vue +17 -0
  41. package/ui.navigation-stepper/Docs.mdx +16 -0
  42. package/ui.navigation-tab/Docs.mdx +16 -0
  43. package/ui.navigation-tabs/Docs.mdx +16 -0
  44. package/ui.other-dot/Docs.mdx +16 -0
  45. package/ui.text-alert/Docs.mdx +16 -0
  46. package/ui.text-block/Docs.mdx +16 -0
  47. package/ui.text-file/Docs.mdx +16 -0
  48. package/ui.text-files/Docs.mdx +16 -0
  49. package/web-types.json +82 -33
  50. package/ui.image-avatar/default-avatar.png +0 -0
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 -960 960 960"><path d="M182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm50.74-92.7h495.22L578-476.59l-132 171-93-127-120.11 157.74Zm-50.74 92.7v-595.7 595.7Z"/></svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vueless",
3
- "version": "0.0.114",
3
+ "version": "0.0.116",
4
4
  "license": "MIT",
5
5
  "description": "Vue Styleless Component Framework.",
6
6
  "homepage": "https://vueless.com",
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -20,7 +20,12 @@ export function useAttrs(props) {
20
20
  compoundVariants: header.compoundVariants,
21
21
  });
22
22
 
23
- const contentClasses = computed(() => cvaContent({ size: props.size }));
23
+ const contentClasses = computed(() =>
24
+ cvaContent({
25
+ gap: props.gap,
26
+ align: props.align,
27
+ }),
28
+ );
24
29
 
25
30
  const headerClasses = computed(() => cvaHeader({ underlined: props.underlined }));
26
31
 
@@ -1,5 +1,5 @@
1
1
  export default /*tw*/ {
2
- wrapper: "",
2
+ wrapper: "w-full",
3
3
  upperline: "",
4
4
  header: {
5
5
  base: "flex items-center justify-between",
@@ -13,16 +13,30 @@ export default /*tw*/ {
13
13
  title: "pr-2",
14
14
  underline: "pt-1.5",
15
15
  content: {
16
+ base: "flex flex-col",
16
17
  variants: {
17
- size: {
18
- sm: "space-y-2",
18
+ gap: {
19
+ none: "space-y-0",
20
+ "2xs": "space-y-1",
21
+ xs: "space-y-2",
22
+ sm: "space-y-3",
19
23
  md: "space-y-4",
20
- lg: "space-y-6",
24
+ lg: "space-y-5",
25
+ xl: "space-y-6",
26
+ "2xl": "space-y-8",
27
+ },
28
+ align: {
29
+ end: "items-end",
30
+ start: "items-start",
31
+ center: "items-center",
32
+ stretch: "items-stretch",
33
+ baseline: "items-baseline",
21
34
  },
22
35
  },
23
36
  },
24
37
  defaultVariants: {
25
- size: "md",
38
+ gap: "md",
39
+ align: "start",
26
40
  upperlined: true,
27
41
  underlined: false,
28
42
  },
@@ -10,15 +10,6 @@ export default {
10
10
  component: UGroup,
11
11
  args: {
12
12
  title: "Form group",
13
- slotTemplate: `
14
- <template #default>
15
- <UInput placeholder="Vasyl" label="Name" />
16
-
17
- <UInput placeholder="Vasylenko" label="Surname" />
18
-
19
- <UInput placeholder="Kyiv" label="Town" />
20
- </template>
21
- `,
22
13
  },
23
14
  argTypes: {
24
15
  ...getArgTypes(UGroup.name),
@@ -32,6 +23,14 @@ export default {
32
23
  },
33
24
  };
34
25
 
26
+ const defaultSlotTemplate = `
27
+ <template #default>
28
+ <UInput placeholder="Vasyl" label="Name" />
29
+ <UInput placeholder="Vasylenko" label="Surname" />
30
+ <UInput placeholder="Kyiv" label="Town" />
31
+ </template>
32
+ `;
33
+
35
34
  const DefaultTemplate = (args) => ({
36
35
  components: { UGroup, UInput, UButton },
37
36
  setup() {
@@ -39,7 +38,7 @@ const DefaultTemplate = (args) => ({
39
38
  },
40
39
  template: `
41
40
  <UGroup v-bind="args">
42
- ${args.slotTemplate}
41
+ ${args.slotTemplate || defaultSlotTemplate}
43
42
  </UGroup>
44
43
  `,
45
44
  });
@@ -53,12 +53,21 @@ const props = defineProps({
53
53
  },
54
54
 
55
55
  /**
56
- * The distance between nested components.
57
- * @values sm, md, lg
56
+ * The distance between nested elements.
57
+ * @values none, 2xs, xs, sm, md, lg, xl, 2xl
58
58
  */
59
- size: {
59
+ gap: {
60
60
  type: String,
61
- default: UIService.get(defaultConfig, UGroup).default.size,
61
+ default: UIService.get(defaultConfig, UGroup).default.gap,
62
+ },
63
+
64
+ /**
65
+ * Nested items align (flex align-items).
66
+ * @values start, end, center, stretch, baseline
67
+ */
68
+ align: {
69
+ type: String,
70
+ default: UIService.get(defaultConfig, UGroup).default.align,
62
71
  },
63
72
 
64
73
  /**
@@ -78,7 +87,7 @@ const props = defineProps({
78
87
  },
79
88
 
80
89
  /**
81
- * Set component ui config object.
90
+ *Component ui config object.
82
91
  */
83
92
  config: {
84
93
  type: Object,
@@ -86,7 +95,7 @@ const props = defineProps({
86
95
  },
87
96
 
88
97
  /**
89
- * Set data-cy attribute for automated testing.
98
+ * Data-cy attribute for automated testing.
90
99
  */
91
100
  dataCy: {
92
101
  type: String,
@@ -1,10 +1,27 @@
1
+ import { computed } from "vue";
2
+
3
+ import { cva } from "../../service.ui";
1
4
  import useUI from "../../composable.ui";
2
5
  import defaultConfig from "../configs/default.config";
3
6
 
4
7
  export function useAttrs(props) {
5
- const { getAttrs } = useUI(defaultConfig, () => props.config);
8
+ const { config, getAttrs } = useUI(defaultConfig, () => props.config);
9
+ const { wrapper } = config.value;
10
+
11
+ const cvaWrapper = cva({
12
+ base: wrapper.base,
13
+ variants: wrapper.variants,
14
+ compoundVariants: wrapper.compoundVariants,
15
+ });
16
+
17
+ const wrapperClasses = computed(() =>
18
+ cvaWrapper({
19
+ gap: props.gap,
20
+ align: props.align,
21
+ }),
22
+ );
6
23
 
7
- const wrapperAttrs = getAttrs("wrapper");
24
+ const wrapperAttrs = getAttrs("wrapper", { classes: wrapperClasses });
8
25
 
9
26
  return {
10
27
  wrapperAttrs,
@@ -1,3 +1,26 @@
1
1
  export default /*tw*/ {
2
- wrapper: "flex flex-col space-y-14",
2
+ wrapper: {
3
+ base: "flex flex-col",
4
+ variants: {
5
+ gap: {
6
+ none: "space-y-0",
7
+ xs: "space-y-10",
8
+ sm: "space-y-12",
9
+ md: "space-y-14",
10
+ lg: "space-y-16",
11
+ xl: "space-y-20",
12
+ },
13
+ align: {
14
+ end: "items-end",
15
+ start: "items-start",
16
+ center: "items-center",
17
+ stretch: "items-stretch",
18
+ baseline: "items-baseline",
19
+ },
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ gap: "md",
24
+ align: "start",
25
+ },
3
26
  };
@@ -0,0 +1,5 @@
1
+ /*
2
+ This const is needed to prevent the issue in script setup:
3
+ `defineProps` is referencing locally declared variables. (vue/valid-define-props)
4
+ */
5
+ export const UGroups = "UGroups";
@@ -1,7 +1,7 @@
1
1
  import { getArgTypes } from "../service.storybook";
2
2
 
3
- import UGroup from "../ui.container-group";
4
3
  import UGroups from "../ui.container-groups";
4
+ import UGroup from "../ui.container-group";
5
5
  import UInput from "../ui.form-input";
6
6
 
7
7
  export default {
@@ -20,26 +20,26 @@ export default {
20
20
  },
21
21
  };
22
22
 
23
+ const defaultSlotTemplate = `
24
+ <template #default>
25
+ <UGroup :upperlined="n !== 1" :title="'Group '+n" v-for="n in 3">
26
+ <UInput placeholder="input" label="Label" />
27
+ <UInput placeholder="input" label="Label" />
28
+ </UGroup>
29
+ </template>
30
+ `;
31
+
23
32
  const DefaultTemplate = (args) => ({
24
33
  components: { UGroups, UGroup, UInput },
25
34
  setup() {
26
35
  return { args };
27
36
  },
28
37
  template: `
29
- <UGroups>
30
- ${args.slotTemplate}
38
+ <UGroups v-bind="args">
39
+ ${args.slotTemplate || defaultSlotTemplate}
31
40
  </UGroups>
32
41
  `,
33
42
  });
34
43
 
35
44
  export const Default = DefaultTemplate.bind({});
36
- Default.args = {
37
- slotTemplate: `
38
- <template #default>
39
- <UGroup :upperlined="n !== 1" :title="'Group '+n" v-for="n in 3">
40
- <UInput placeholder="input" label="Label" />
41
- <UInput placeholder="input" label="Label" />
42
- </UGroup>
43
- </template>
44
- `,
45
- };
45
+ Default.args = {};
@@ -6,6 +6,10 @@
6
6
  </template>
7
7
 
8
8
  <script setup>
9
+ import UIService from "../service.ui";
10
+
11
+ import { UGroups } from "./constants";
12
+ import defaultConfig from "./configs/default.config";
9
13
  import { useAttrs } from "./composables/attrs.composable";
10
14
 
11
15
  /* Should be a string for correct web-types gen */
@@ -13,7 +17,25 @@ defineOptions({ name: "UGroups", inheritAttrs: false });
13
17
 
14
18
  const props = defineProps({
15
19
  /**
16
- * Set component ui config object.
20
+ * The distance between nested elements.
21
+ * @values none, xs, sm, md, lg, xl
22
+ */
23
+ gap: {
24
+ type: String,
25
+ default: UIService.get(defaultConfig, UGroups).default.gap,
26
+ },
27
+
28
+ /**
29
+ * Nested items align (flex align-items).
30
+ * @values start, end, center, stretch, baseline
31
+ */
32
+ align: {
33
+ type: String,
34
+ default: UIService.get(defaultConfig, UGroups).default.align,
35
+ },
36
+
37
+ /**
38
+ * Component ui config object.
17
39
  */
18
40
  config: {
19
41
  type: Object,
@@ -21,7 +43,7 @@ const props = defineProps({
21
43
  },
22
44
 
23
45
  /**
24
- * Set data-cy attribute for automated testing.
46
+ * Data-cy attribute for automated testing.
25
47
  */
26
48
  dataCy: {
27
49
  type: String,
@@ -14,6 +14,13 @@ export default {
14
14
  },
15
15
  };
16
16
 
17
+ const defaultSlotTemplate = `
18
+ <template #default>
19
+ <UInput label="Name" />
20
+ <UButton label="Submit" size="xs" block />
21
+ </template>
22
+ `;
23
+
17
24
  const DefaultTemplate = (args) => ({
18
25
  components: { URow, UInput, UButton },
19
26
  setup() {
@@ -21,13 +28,7 @@ const DefaultTemplate = (args) => ({
21
28
  },
22
29
  template: `
23
30
  <URow v-bind="args">
24
- ${
25
- args.slotTemplate ||
26
- `
27
- <UInput label="Name" />
28
- <UButton label="Submit" size="xs" block />
29
- `
30
- }
31
+ ${args.slotTemplate || defaultSlotTemplate}
31
32
  </URow>
32
33
  `,
33
34
  });
@@ -41,7 +42,7 @@ const GapTemplate = (args, { argTypes } = {}) => ({
41
42
  };
42
43
  },
43
44
  template: `
44
- <UGroup size="lg">
45
+ <UGroup gap="xl">
45
46
  <URow v-for="(gap, index) in gaps" :key="index" v-bind="args" :gap="gap" align="center">
46
47
  <UInput :label="gap" />
47
48
  <UInput :label="gap" />
@@ -59,7 +60,7 @@ const AlignTemplate = (args, { argTypes } = {}) => ({
59
60
  };
60
61
  },
61
62
  template: `
62
- <UGroup size="lg">
63
+ <UGroup gap="xl">
63
64
  <URow v-for="(align, index) in aligns" :key="index" v-bind="args" :align="align">
64
65
  <UButton :label="align" size="xs" block />
65
66
  <UInput label="Name" />
@@ -26,7 +26,7 @@ const props = defineProps({
26
26
  },
27
27
 
28
28
  /**
29
- * Row nested elements vertical align (align-items).
29
+ * Nested items align (flex align-items).
30
30
  * @values start, end, center, stretch, baseline
31
31
  */
32
32
  align: {
@@ -43,7 +43,7 @@ const props = defineProps({
43
43
  },
44
44
 
45
45
  /**
46
- * Sets component ui config object.
46
+ * Component ui config object.
47
47
  */
48
48
  config: {
49
49
  type: Object,
@@ -51,7 +51,7 @@ const props = defineProps({
51
51
  },
52
52
 
53
53
  /**
54
- * Sets data-cy attribute for automated testing.
54
+ * Data-cy attribute for automated testing.
55
55
  */
56
56
  dataCy: {
57
57
  type: String,
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -47,7 +47,7 @@ const ValueTypesTemplate = (args) => ({
47
47
  };
48
48
  },
49
49
  template: `
50
- <UGroup size="lg">
50
+ <UGroup gap="xl">
51
51
  <UCheckbox
52
52
  v-bind="args"
53
53
  v-model="defaultValue"
@@ -97,7 +97,7 @@ const SizesTemplate = (args, { argTypes } = {}) => ({
97
97
  };
98
98
  },
99
99
  template: `
100
- <UGroup size="lg">
100
+ <UGroup gap="xl">
101
101
  <UCheckbox
102
102
  v-for="(size, index) in sizes"
103
103
  :key="index"
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -98,7 +98,7 @@ const LabelPlacementTemplate = (args) => ({
98
98
  };
99
99
  },
100
100
  template: `
101
- <UGroup size="lg">
101
+ <UGroup gap="xl">
102
102
  <UInput
103
103
  v-bind="args"
104
104
  label="top"
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -65,7 +65,7 @@ const SizesTemplate = (args, { argTypes } = {}) => ({
65
65
  // };
66
66
  // },
67
67
  // template: `
68
- // <UGroup size="lg">
68
+ // <UGroup gap="xl">
69
69
  // <UInputMoney
70
70
  // v-bind="args"
71
71
  // :label-outside="true"
@@ -46,7 +46,7 @@ const SizesTemplate = (args, { argTypes } = {}) => ({
46
46
  };
47
47
  },
48
48
  template: `
49
- <UGroup size="lg">
49
+ <UGroup gap="xl">
50
50
  <UInputNumber
51
51
  v-for="(size, index) in sizes"
52
52
  v-bind="args"
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -78,7 +78,7 @@ const LabelPlacementTemplate = (args) => ({
78
78
  };
79
79
  },
80
80
  template: `
81
- <UGroup size="lg">
81
+ <UGroup gap="xl">
82
82
  <UTextarea
83
83
  v-bind="args"
84
84
  label-align="top"
@@ -0,0 +1,16 @@
1
+ import { Meta, Title, Subtitle, Description, Primary, Controls, Stories, Source } from "@storybook/blocks";
2
+ import { getSource } from "../service.storybook";
3
+
4
+ import * as stories from "./index.stories";
5
+ import defaultConfig from "./configs/default.config?raw"
6
+
7
+ <Meta of={stories} />
8
+ <Title of={stories} />
9
+ <Subtitle of={stories} />
10
+ <Description of={stories} />
11
+ <Primary of={stories} />
12
+ <Controls of={stories.Default} />
13
+ <Stories of={stories} />
14
+
15
+ ## **Default config**
16
+ <Source code={getSource(defaultConfig)} language="jsx" dark />
@@ -27,8 +27,10 @@ export function useAttrs(props) {
27
27
  );
28
28
 
29
29
  const avatarAttrs = getAttrs("avatar", { classes: avatarClasses });
30
+ const iconAttrs = getAttrs("icon", { isComponent: true });
30
31
 
31
32
  return {
32
33
  avatarAttrs,
34
+ iconAttrs,
33
35
  };
34
36
  }