@antify/ui 1.0.4 → 1.1.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.
@@ -9,6 +9,11 @@ const props = withDefaults(defineProps<{
9
9
  content?: string;
10
10
  isOpen?: boolean;
11
11
  iconLeft?: boolean;
12
+ contentPadding?: boolean;
13
+ activeLabelClasses?: string;
14
+ activeIconClasses?: string;
15
+ inactiveLabelClasses?: string;
16
+ inactiveIconClasses?: string;
12
17
  }[];
13
18
  collapseStrategy?: CollapseStrategy;
14
19
  }>(), {
@@ -49,9 +54,21 @@ function onClose(index: number) {
49
54
  :label="item.label"
50
55
  :is-open="openItems.includes(index)"
51
56
  :icon-left="item.iconLeft"
57
+ :content-padding="item.contentPadding"
58
+ :activeLabelClasses="item.activeLabelClasses"
59
+ :activeIconClasses="item.activeIconClasses"
60
+ :inactiveLabelClasses="item.inactiveLabelClasses"
61
+ :inactiveIconClasses="item.inactiveIconClasses"
52
62
  @open="() => onOpen(index)"
53
63
  @close="() => onClose(index)"
54
64
  >
65
+ <template #icon-left="{isOpen}">
66
+ <slot
67
+ name="icon-left"
68
+ v-bind="{item, index, isOpen}"
69
+ />
70
+ </template>
71
+
55
72
  <slot
56
73
  name="item-content"
57
74
  v-bind="{item, index}"
@@ -3,15 +3,26 @@ import {faAngleDown, faAngleUp, faQuestionCircle} from '@fortawesome/free-solid-
3
3
  import AntIcon from './AntIcon.vue';
4
4
  import AntTransitionCollapseHeight from './transitions/AntTransitionCollapseHeight.vue';
5
5
  import {IconSize} from './__types/AntIcon.types';
6
+ import {computed} from 'vue';
6
7
 
7
8
  const props = withDefaults(defineProps<{
8
9
  isOpen: boolean;
9
10
  label?: string;
10
11
  collapseTransition?: string;
11
- iconLeft: boolean;
12
+ iconLeft?: boolean;
13
+ contentPadding?: boolean;
14
+ activeLabelClasses?: string;
15
+ activeIconClasses?: string;
16
+ inactiveLabelClasses?: string;
17
+ inactiveIconClasses?: string;
12
18
  }>(), {
13
19
  collapseTransition: 'slide',
14
20
  iconLeft: false,
21
+ contentPadding: true,
22
+ activeLabelClasses: 'bg-primary-500 text-primary-500-font',
23
+ activeIconClasses: 'text-primary-500-font',
24
+ inactiveLabelClasses: 'bg-white text-for-white-bg-font',
25
+ inactiveIconClasses: 'text-for-white-bg-font'
15
26
  });
16
27
  const emit = defineEmits(['close', 'open']);
17
28
 
@@ -23,12 +34,17 @@ function onClick() {
23
34
  emit('open');
24
35
  }
25
36
  }
37
+
38
+ const labelClasses = computed(() => ({
39
+ [props.activeLabelClasses]: props.isOpen,
40
+ [props.inactiveLabelClasses]: !props.isOpen
41
+ }))
26
42
  </script>
27
43
 
28
44
  <template>
29
45
  <div
30
46
  class="p-2 select-none cursor-pointer transition-colors"
31
- :class="{'bg-primary-500 text-primary-500-font': isOpen, 'bg-white text-for-white-bg-font': !isOpen}"
47
+ :class="labelClasses"
32
48
  @click="onClick"
33
49
  >
34
50
  <slot
@@ -36,15 +52,17 @@ function onClick() {
36
52
  v-bind="{ isOpen: isOpen }"
37
53
  >
38
54
  <div
39
- class="hover:text-gray-800 flex justify-between items-center"
55
+ class="flex justify-between items-center"
40
56
  >
41
57
  <div class="flex items-center gap-2">
42
- <AntIcon
43
- v-if="iconLeft"
44
- :size="IconSize.sm"
45
- :icon="faQuestionCircle"
46
- :color="isOpen ? 'text-primary-500-font' : 'text-for-white-bg-font'"
47
- />
58
+ <slot name="icon-left" v-bind="{isOpen}">
59
+ <AntIcon
60
+ v-if="iconLeft"
61
+ :size="IconSize.sm"
62
+ :icon="faQuestionCircle"
63
+ :color="isOpen ? activeIconClasses : inactiveIconClasses"
64
+ />
65
+ </slot>
48
66
 
49
67
  <span class="text-sm font-semibold">
50
68
  {{ label }}
@@ -53,7 +71,7 @@ function onClick() {
53
71
 
54
72
  <AntIcon
55
73
  :icon="isOpen ? faAngleUp : faAngleDown"
56
- :color="isOpen ? 'text-primary-500-font' : undefined"
74
+ :color="isOpen ? activeIconClasses : inactiveIconClasses"
57
75
  />
58
76
  </div>
59
77
  </slot>
@@ -67,7 +85,8 @@ function onClick() {
67
85
  <Transition name="bounce">
68
86
  <div
69
87
  v-show="isOpen"
70
- class="p-2 text-sm bg-white text-for-white-bg-font"
88
+ class="text-sm bg-white text-for-white-bg-font"
89
+ :class="{'p-2': contentPadding}"
71
90
  >
72
91
  <slot/>
73
92
  </div>
@@ -8,7 +8,7 @@ import {computed} from 'vue';
8
8
 
9
9
  const props = withDefaults(defineProps<{
10
10
  icon?: IconDefinition
11
- size: AntKeycapSize
11
+ size?: AntKeycapSize
12
12
 
13
13
  }>(), {
14
14
  size: AntKeycapSize.sm
@@ -16,22 +16,27 @@ const props = withDefaults(defineProps<{
16
16
 
17
17
  const classes = computed(() => {
18
18
  return {
19
- 'text-sm px-px min-w-5': props.size === AntKeycapSize.sm,
20
- 'text-2xs px-px py-0.5 min-w-[18px]': props.size === AntKeycapSize.xs,
19
+ 'px-1': true,
20
+ 'test-sm min-w-6 h-6 ': props.size === AntKeycapSize.md,
21
+ 'test-xs min-w-5 h-5': props.size === AntKeycapSize.sm,
22
+ 'text-2xs min-w-4 h-4': props.size === AntKeycapSize.xs,
21
23
  };
22
24
  });
23
25
  const iconClasses = computed(() => {
24
- if (props.size === AntKeycapSize.sm) {
25
- return IconSize.sm;
26
- } else {
27
- return IconSize.xs2;
26
+ switch (props.size) {
27
+ case AntKeycapSize.md:
28
+ return IconSize.md
29
+ case AntKeycapSize.sm:
30
+ return IconSize.sm
31
+ default:
32
+ return IconSize.xs;
28
33
  }
29
34
  });
30
35
  </script>
31
36
 
32
37
  <template>
33
38
  <span
34
- class="inline-block bg-neutral-300 rounded-md text-center text-neutral-500-font font-medium"
39
+ class="inline-flex justify-center items-center bg-neutral-300 rounded-sm text-center text-neutral-300-font font-medium"
35
40
  :class="classes"
36
41
  >
37
42
  <AntIcon
@@ -7,3 +7,4 @@ export declare const Docs: Story;
7
7
  export declare const CustomContent: Story;
8
8
  export declare const MultipleCollapseStrategy: Story;
9
9
  export declare const htmlInContent: Story;
10
+ export declare const mixedVariants: Story;
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.htmlInContent = exports.default = exports.MultipleCollapseStrategy = exports.Docs = exports.CustomContent = void 0;
6
+ exports.mixedVariants = exports.htmlInContent = exports.default = exports.MultipleCollapseStrategy = exports.Docs = exports.CustomContent = void 0;
7
7
  var _AntAccordion = _interopRequireDefault(require("../AntAccordion.vue"));
8
8
  var _AntAccordionItem = _interopRequireDefault(require("../AntAccordionItem.vue"));
9
9
  var _AntAccordion2 = require("../__types/AntAccordion.types");
10
+ var _AntIcon = _interopRequireDefault(require("../AntIcon.vue"));
11
+ var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
10
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
13
  const meta = {
12
14
  title: "Components/Accordion",
@@ -117,4 +119,65 @@ const htmlInContent = exports.htmlInContent = {
117
119
  justo duo dolores et ea rebum. Stet clita kasd`
118
120
  }]
119
121
  }
122
+ };
123
+ const mixedVariants = exports.mixedVariants = {
124
+ parameters: {
125
+ chromatic: {
126
+ disableSnapshot: false
127
+ }
128
+ },
129
+ render: args => ({
130
+ components: {
131
+ AntAccordion: _AntAccordion.default,
132
+ AntAccordionItem: _AntAccordionItem.default,
133
+ AntIcon: _AntIcon.default
134
+ },
135
+ setup() {
136
+ return {
137
+ args,
138
+ faEye: _freeSolidSvgIcons.faEye
139
+ };
140
+ },
141
+ template: `
142
+ <AntAccordion
143
+ v-bind="args"
144
+ :contentPadding="false"
145
+ >
146
+ <template #icon-left="{item, index, isOpen}">
147
+ <AntIcon
148
+ :class="{'text-success-500-font': isOpen, 'text-success-200-font': !isOpen}"
149
+ :icon="faEye"/>
150
+ </template>
151
+ </AntAccordion>`
152
+ }),
153
+ args: {
154
+ items: [{
155
+ label: "First entry",
156
+ content: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
157
+ }, {
158
+ label: `Second entry`,
159
+ content: `<div class="bg-success-100 p-4"><span class="font-bold text-success-500">Success</span> Content</div>`,
160
+ iconLeft: true,
161
+ activeLabelClasses: "bg-success-500 text-success-500-font",
162
+ activeIconClasses: "text-success-500-font",
163
+ inactiveLabelClasses: "bg-success-200 text-success-200-font",
164
+ inactiveIconClasses: "bg-success-200 text-success-200-font",
165
+ contentPadding: false
166
+ }, {
167
+ label: "Third entry",
168
+ content: `<div class="bg-warning-100 p-4"><span class="font-bold text-warning-500">Warning</span> Content</div>`,
169
+ activeLabelClasses: "bg-warning-500 text-warning-500-font",
170
+ activeIconClasses: "text-warning-500-font",
171
+ inactiveLabelClasses: "bg-warning-200 text-warning-200-font",
172
+ inactiveIconClasses: "text-warning-200-font"
173
+ }, {
174
+ label: "Fourth entry",
175
+ content: `<div class="bg-danger-100 p-8"><span class="font-bold text-danger-500">Danger</span> Content</div>`,
176
+ activeLabelClasses: "bg-danger-500 text-danger-500-font",
177
+ activeIconClasses: "text-danger-500-font",
178
+ inactiveLabelClasses: "bg-danger-200 text-danger-200-font",
179
+ inactiveIconClasses: "text-danger-200-font",
180
+ contentPadding: false
181
+ }]
182
+ }
120
183
  };
@@ -1,6 +1,8 @@
1
1
  import AntAccordion from "../AntAccordion.vue";
2
2
  import AntAccordionItem from "../AntAccordionItem.vue";
3
3
  import { CollapseStrategy } from "../__types/AntAccordion.types.mjs";
4
+ import AntIcon from "../AntIcon.vue";
5
+ import { faEye } from "@fortawesome/free-solid-svg-icons";
4
6
  const meta = {
5
7
  title: "Components/Accordion",
6
8
  component: AntAccordion,
@@ -99,3 +101,60 @@ export const htmlInContent = {
99
101
  ]
100
102
  }
101
103
  };
104
+ export const mixedVariants = {
105
+ parameters: {
106
+ chromatic: { disableSnapshot: false }
107
+ },
108
+ render: (args) => ({
109
+ components: { AntAccordion, AntAccordionItem, AntIcon },
110
+ setup() {
111
+ return { args, faEye };
112
+ },
113
+ template: `
114
+ <AntAccordion
115
+ v-bind="args"
116
+ :contentPadding="false"
117
+ >
118
+ <template #icon-left="{item, index, isOpen}">
119
+ <AntIcon
120
+ :class="{'text-success-500-font': isOpen, 'text-success-200-font': !isOpen}"
121
+ :icon="faEye"/>
122
+ </template>
123
+ </AntAccordion>`
124
+ }),
125
+ args: {
126
+ items: [
127
+ {
128
+ label: "First entry",
129
+ content: "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
130
+ },
131
+ {
132
+ label: `Second entry`,
133
+ content: `<div class="bg-success-100 p-4"><span class="font-bold text-success-500">Success</span> Content</div>`,
134
+ iconLeft: true,
135
+ activeLabelClasses: "bg-success-500 text-success-500-font",
136
+ activeIconClasses: "text-success-500-font",
137
+ inactiveLabelClasses: "bg-success-200 text-success-200-font",
138
+ inactiveIconClasses: "bg-success-200 text-success-200-font",
139
+ contentPadding: false
140
+ },
141
+ {
142
+ label: "Third entry",
143
+ content: `<div class="bg-warning-100 p-4"><span class="font-bold text-warning-500">Warning</span> Content</div>`,
144
+ activeLabelClasses: "bg-warning-500 text-warning-500-font",
145
+ activeIconClasses: "text-warning-500-font",
146
+ inactiveLabelClasses: "bg-warning-200 text-warning-200-font",
147
+ inactiveIconClasses: "text-warning-200-font"
148
+ },
149
+ {
150
+ label: "Fourth entry",
151
+ content: `<div class="bg-danger-100 p-8"><span class="font-bold text-danger-500">Danger</span> Content</div>`,
152
+ activeLabelClasses: "bg-danger-500 text-danger-500-font",
153
+ activeIconClasses: "text-danger-500-font",
154
+ inactiveLabelClasses: "bg-danger-200 text-danger-200-font",
155
+ inactiveIconClasses: "text-danger-200-font",
156
+ contentPadding: false
157
+ }
158
+ ]
159
+ }
160
+ };
@@ -69,28 +69,26 @@ const Summary = exports.Summary = {
69
69
  },
70
70
  render: args => ({
71
71
  components: {
72
- AntKeycap: _AntKeycap.default,
73
- faChevronUp: _freeSolidSvgIcons.faChevronUp,
74
- faChevronDown: _freeSolidSvgIcons.faChevronDown
72
+ AntKeycap: _AntKeycap.default
75
73
  },
76
74
  setup() {
77
75
  return {
78
76
  args,
79
- faChevronUp: _freeSolidSvgIcons.faChevronUp,
80
- faChevronDown: _freeSolidSvgIcons.faChevronDown
77
+ AntKeycapSize: _AntKeycap2.AntKeycapSize,
78
+ faPlus: _freeSolidSvgIcons.faPlus
81
79
  };
82
80
  },
83
81
  template: `
84
- <div class="p-4">
85
- Press
86
- <AntKeycap v-bind="args" :icon="faChevronUp"/>
87
- or
88
- <AntKeycap v-bind="args" :icon="faChevronDown"/>
89
- to navigate. Press
90
- <AntKeycap v-bind="args">ctl</AntKeycap>
91
- +
92
- <AntKeycap v-bind="args">K</AntKeycap>
93
- to search.
82
+ <div class="flex gap-2 p-4">
83
+ <AntKeycap v-bind="args" :size="AntKeycapSize.xs">K</AntKeycap>
84
+ <AntKeycap v-bind="args" :size="AntKeycapSize.sm">K</AntKeycap>
85
+ <AntKeycap v-bind="args" :size="AntKeycapSize.md">K</AntKeycap>
86
+ <AntKeycap v-bind="args" :size="AntKeycapSize.xs">Strg</AntKeycap>
87
+ <AntKeycap v-bind="args" :size="AntKeycapSize.sm">Strg</AntKeycap>
88
+ <AntKeycap v-bind="args" :size="AntKeycapSize.md">Strg</AntKeycap>
89
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.xs"/>
90
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.sm"/>
91
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.md"/>
94
92
  </div>
95
93
  `
96
94
  }),
@@ -1,6 +1,6 @@
1
1
  import AntKeycap from "../AntKeycap.vue";
2
2
  import { AntKeycapSize } from "../__types/AntKeycap.types.mjs";
3
- import { faChevronUp, faChevronDown } from "@fortawesome/free-solid-svg-icons";
3
+ import { faPlus, faChevronUp } from "@fortawesome/free-solid-svg-icons";
4
4
  const meta = {
5
5
  title: "Components/Keycap",
6
6
  component: AntKeycap,
@@ -47,21 +47,21 @@ export const Summary = {
47
47
  chromatic: { disableSnapshot: false }
48
48
  },
49
49
  render: (args) => ({
50
- components: { AntKeycap, faChevronUp, faChevronDown },
50
+ components: { AntKeycap },
51
51
  setup() {
52
- return { args, faChevronUp, faChevronDown };
52
+ return { args, AntKeycapSize, faPlus };
53
53
  },
54
54
  template: `
55
- <div class="p-4">
56
- Press
57
- <AntKeycap v-bind="args" :icon="faChevronUp"/>
58
- or
59
- <AntKeycap v-bind="args" :icon="faChevronDown"/>
60
- to navigate. Press
61
- <AntKeycap v-bind="args">ctl</AntKeycap>
62
- +
63
- <AntKeycap v-bind="args">K</AntKeycap>
64
- to search.
55
+ <div class="flex gap-2 p-4">
56
+ <AntKeycap v-bind="args" :size="AntKeycapSize.xs">K</AntKeycap>
57
+ <AntKeycap v-bind="args" :size="AntKeycapSize.sm">K</AntKeycap>
58
+ <AntKeycap v-bind="args" :size="AntKeycapSize.md">K</AntKeycap>
59
+ <AntKeycap v-bind="args" :size="AntKeycapSize.xs">Strg</AntKeycap>
60
+ <AntKeycap v-bind="args" :size="AntKeycapSize.sm">Strg</AntKeycap>
61
+ <AntKeycap v-bind="args" :size="AntKeycapSize.md">Strg</AntKeycap>
62
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.xs"/>
63
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.sm"/>
64
+ <AntKeycap v-bind="args" :icon="faPlus" :size="AntKeycapSize.md"/>
65
65
  </div>
66
66
  `
67
67
  }),
@@ -1,4 +1,5 @@
1
1
  export declare enum AntKeycapSize {
2
+ md = "md",
2
3
  sm = "sm",
3
4
  xs = "xs"
4
5
  }
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.AntKeycapSize = void 0;
7
7
  var AntKeycapSize = exports.AntKeycapSize = /* @__PURE__ */(AntKeycapSize2 => {
8
+ AntKeycapSize2["md"] = "md";
8
9
  AntKeycapSize2["sm"] = "sm";
9
10
  AntKeycapSize2["xs"] = "xs";
10
11
  return AntKeycapSize2;
@@ -1,4 +1,5 @@
1
1
  export var AntKeycapSize = /* @__PURE__ */ ((AntKeycapSize2) => {
2
+ AntKeycapSize2["md"] = "md";
2
3
  AntKeycapSize2["sm"] = "sm";
3
4
  AntKeycapSize2["xs"] = "xs";
4
5
  return AntKeycapSize2;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antify/ui",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {