vueless 0.0.679 → 0.0.680

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vueless",
3
- "version": "0.0.679",
3
+ "version": "0.0.680",
4
4
  "license": "MIT",
5
5
  "description": "Vue Styleless UI Component Library, powered by Tailwind CSS.",
6
6
  "keywords": [
@@ -36,7 +36,6 @@ export default {
36
36
  },
37
37
  argTypes: {
38
38
  ...getArgTypes(UToggle.__name),
39
- modelValue: { control: { type: "text" } },
40
39
  },
41
40
  parameters: {
42
41
  docs: {
@@ -78,6 +78,7 @@ const { config, wrapperAttrs, dropdownBadgeAttrs, dropdownListAttrs, dropdownIco
78
78
  :size="size"
79
79
  :color="color"
80
80
  :variant="variant"
81
+ :round="round"
81
82
  v-bind="dropdownBadgeAttrs"
82
83
  tabindex="0"
83
84
  :data-test="dataTest"
@@ -102,17 +103,15 @@ const { config, wrapperAttrs, dropdownBadgeAttrs, dropdownListAttrs, dropdownIco
102
103
  <slot :label="label" :opened="isShownOptions" />
103
104
  </template>
104
105
 
105
- <template #right="{ iconSize }">
106
+ <template #right>
106
107
  <!--
107
108
  @slot Use it to add something after the label.
108
109
  @binding {boolean} opened
109
110
  -->
110
- <slot name="right" :opened="isShownOptions">
111
+ <slot v-if="!noIcon" name="right" :opened="isShownOptions">
111
112
  <UIcon
112
- v-if="!noIcon"
113
113
  internal
114
114
  color="inherit"
115
- :size="iconSize"
116
115
  :name="config.defaults.dropdownIcon"
117
116
  v-bind="dropdownIconAttrs"
118
117
  :data-test="`${dataTest}-dropdown`"
@@ -9,7 +9,16 @@ export default /*tw*/ {
9
9
  },
10
10
  compoundVariants: [{ opened: true, color: ["grayscale", "white"], class: "ring-gray-700/15" }],
11
11
  },
12
- dropdownIcon: "{UIcon} transition duration-300 group-[]:rotate-180",
12
+ dropdownIcon: {
13
+ base: "{UIcon} transition duration-300 group-[]:rotate-180",
14
+ defaults: {
15
+ size: {
16
+ sm: "2xs",
17
+ md: "xs",
18
+ lg: "xs",
19
+ },
20
+ },
21
+ },
13
22
  dropdownList: {
14
23
  base: "{UDropdownList} w-fit",
15
24
  variants: {
@@ -110,9 +110,8 @@ const { config, dropdownButtonAttrs, dropdownListAttrs, dropdownIconAttrs, wrapp
110
110
  @slot Use it to add something after the label.
111
111
  @binding {boolean} opened
112
112
  -->
113
- <slot name="toggle" :opened="isShownOptions">
113
+ <slot v-if="!noIcon" name="toggle" :opened="isShownOptions">
114
114
  <UIcon
115
- v-if="!noIcon"
116
115
  internal
117
116
  color="inherit"
118
117
  :name="config.defaults.dropdownIcon"
@@ -13,12 +13,12 @@ export default /*tw*/ {
13
13
  base: "{UIcon} transition duration-300 group-[]:rotate-180",
14
14
  defaults: {
15
15
  size: {
16
- "2xs": "sm",
17
- xs: "sm",
16
+ "2xs": "2xs",
17
+ xs: "xs",
18
18
  sm: "sm",
19
- md: "md",
20
- lg: "lg",
21
- xl: "lg",
19
+ md: "sm",
20
+ lg: "sm",
21
+ xl: "sm",
22
22
  },
23
23
  },
24
24
  },
@@ -27,7 +27,6 @@ export default {
27
27
  },
28
28
  argTypes: {
29
29
  ...getArgTypes(UCheckbox.__name),
30
- modelValue: { control: { type: "boolean" } },
31
30
  },
32
31
  parameters: {
33
32
  docs: {
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { computed, useId } from "vue";
2
+ import { ref, computed, useId } from "vue";
3
3
 
4
4
  import { vTooltip } from "../directives";
5
5
  import useUI from "../composables/useUI.ts";
@@ -31,13 +31,16 @@ const emit = defineEmits([
31
31
 
32
32
  const elementId = props.id || useId();
33
33
 
34
+ const localValue = ref("");
35
+
34
36
  const selectedItem = computed({
35
- get: () => props.modelValue,
37
+ get: () => props.modelValue || localValue.value,
36
38
  set: (value) => emit("update:modelValue", value),
37
39
  });
38
40
 
39
41
  function onClickColor(color: string) {
40
42
  selectedItem.value = color;
43
+ localValue.value = color;
41
44
  }
42
45
 
43
46
  /**
@@ -2,11 +2,14 @@ export default /*tw*/ {
2
2
  inputLabel: "{ULabel}",
3
3
  wrapper: {
4
4
  base: `
5
- w-full bg-white relative flex border border-gray-300 rounded-dynamic transition
5
+ w-full bg-white relative flex border border-gray-300 rounded-dynamic-sm transition
6
6
  hover:border-gray-400 hover:focus-within:border-brand-500 focus-within:border-brand-500
7
7
  focus-within:ring-dynamic focus-within:ring-offset-dynamic focus-within:ring-brand-700/15
8
8
  `,
9
9
  variants: {
10
+ labelAlign: {
11
+ topInside: "rounded-dynamic",
12
+ },
10
13
  error: {
11
14
  true: `
12
15
  border-red-300 bg-red-50
@@ -53,9 +56,9 @@ export default /*tw*/ {
53
56
  },
54
57
  error: {
55
58
  true: `
56
- bg-red-50 placeholder:text-red-300 hover:border-red-400 focus:border-red-500 focus:ring-red-700/15
57
- focus-within:border-red-500 focus-within:ring-red-700/15
58
- `,
59
+ bg-red-50 placeholder:text-red-300 hover:border-red-400 focus:border-red-500 focus:ring-red-700/15
60
+ focus-within:border-red-500 focus-within:ring-red-700/15
61
+ `,
59
62
  },
60
63
  typePassword: {
61
64
  true: "tracking-widest !leading-[1.18] [font-family:text-security-disc,serif] [-webkit-text-security:disc]",
@@ -27,7 +27,6 @@ export default {
27
27
  },
28
28
  argTypes: {
29
29
  ...getArgTypes(UInput.__name),
30
- modelValue: { control: { type: "text" } },
31
30
  },
32
31
  parameters: {
33
32
  docs: {
@@ -27,7 +27,6 @@ export default {
27
27
  },
28
28
  argTypes: {
29
29
  ...getArgTypes(UInputMoney.__name),
30
- modelValue: { control: { type: "number" } },
31
30
  },
32
31
  parameters: {
33
32
  docs: {
@@ -17,7 +17,7 @@ export interface Props {
17
17
  /**
18
18
  * Input value.
19
19
  */
20
- modelValue?: string | number;
20
+ modelValue?: number | string;
21
21
  /**
22
22
  * Input label.
23
23
  */
@@ -25,7 +25,6 @@ export default {
25
25
  },
26
26
  argTypes: {
27
27
  ...getArgTypes(UInputNumber.__name),
28
- modelValue: { control: { type: "number" } },
29
28
  },
30
29
  parameters: {
31
30
  docs: {
@@ -3,9 +3,9 @@ export default /*tw*/ {
3
3
  base: "flex w-full",
4
4
  variants: {
5
5
  align: {
6
- top: "flex-col gap-2",
7
6
  topInside: "flex-col gap-0 relative",
8
- topWithDesc: "flex-col-reverse w-fit",
7
+ topWithDesc: "flex-col-reverse gap-2",
8
+ top: "flex-col gap-2",
9
9
  right: "flex-row w-fit",
10
10
  left: "flex-row-reverse w-fit",
11
11
  },
@@ -68,7 +68,7 @@ export default /*tw*/ {
68
68
  lg: "text-sm",
69
69
  },
70
70
  align: {
71
- top: "pl-3",
71
+ top: "",
72
72
  topInside: "pl-3 mt-1.5",
73
73
  topWithDesc: "pt-0.5",
74
74
  left: "pt-0.5",
@@ -41,7 +41,6 @@ export default {
41
41
  },
42
42
  argTypes: {
43
43
  ...getArgTypes(USelect.__name),
44
- modelValue: { control: { type: "number" } },
45
44
  },
46
45
  parameters: {
47
46
  docs: {
@@ -9,7 +9,7 @@ export interface Props {
9
9
  /**
10
10
  * Select value.
11
11
  */
12
- modelValue?: string | number | (string | number)[];
12
+ modelValue?: number | string | (number | string)[];
13
13
 
14
14
  /**
15
15
  * Select options.
@@ -26,7 +26,6 @@ export default {
26
26
  },
27
27
  argTypes: {
28
28
  ...getArgTypes(UTextarea.__name),
29
- modelValue: { control: { type: "text" } },
30
29
  },
31
30
  parameters: {
32
31
  docs: {
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { computed, useId } from "vue";
2
+ import { ref, computed, useId } from "vue";
3
3
 
4
4
  import useUI from "../composables/useUI.ts";
5
5
  import { getDefaults } from "../utils/ui.ts";
@@ -42,8 +42,11 @@ const emit = defineEmits([
42
42
 
43
43
  const elementId = props.id || useId();
44
44
 
45
+ const localBrand = ref("");
46
+ const localGray = ref("");
47
+
45
48
  const selectedBrandColor = computed({
46
- get: () => props.brand || getSelectedBrandColor(),
49
+ get: () => props.brand || localBrand.value || getSelectedBrandColor(),
47
50
  set: (brand: string) => {
48
51
  const prevBrand = getSelectedBrandColor();
49
52
  const isBrandGrayscale = brand === GRAYSCALE_COLOR;
@@ -55,14 +58,16 @@ const selectedBrandColor = computed({
55
58
 
56
59
  setTheme({ brand });
57
60
  emit("update:brand", brand);
61
+ localBrand.value = brand;
58
62
  },
59
63
  });
60
64
 
61
65
  const selectedGrayColor = computed({
62
- get: () => props.gray || getSelectedGrayColor(),
63
- set: (value: string) => {
64
- setTheme({ gray: value });
65
- emit("update:gray", value);
66
+ get: () => props.gray || localGray.value || getSelectedGrayColor(),
67
+ set: (gray: string) => {
68
+ setTheme({ gray });
69
+ emit("update:gray", gray);
70
+ localGray.value = gray;
66
71
  },
67
72
  });
68
73
 
@@ -98,9 +98,9 @@ const { badgeAttrs, bodyAttrs, leftIconAttrs, centerIconAttrs, rightIconAttrs }
98
98
  >
99
99
  <div v-bind="bodyAttrs">
100
100
  <!--
101
- @slot Use it to add icon before the text.
102
- @binding {string} icon-name
103
- -->
101
+ @slot Use it to add icon before the text.
102
+ @binding {string} icon-name
103
+ -->
104
104
  <slot name="left" :icon-name="leftIcon">
105
105
  <UIcon v-if="leftIcon" internal :name="leftIcon" color="inherit" v-bind="leftIconAttrs" />
106
106
  </slot>
@@ -118,9 +118,9 @@ const { badgeAttrs, bodyAttrs, leftIconAttrs, centerIconAttrs, rightIconAttrs }
118
118
  </slot>
119
119
 
120
120
  <!--
121
- @slot Use it to add icon after the text.
122
- @binding {string} icon-name
123
- -->
121
+ @slot Use it to add icon after the text.
122
+ @binding {string} icon-name
123
+ -->
124
124
  <slot name="right" :icon-name="rightIcon">
125
125
  <UIcon
126
126
  v-if="rightIcon"
@@ -100,37 +100,36 @@ export function getArgTypes(componentName: string | undefined) {
100
100
  const type = attribute.value.type;
101
101
 
102
102
  if (attribute.enum) {
103
- types[attribute.name] = {
104
- options: attribute.enum,
105
- control: "select",
106
- table: {
107
- defaultValue: { summary: attribute.default || "" },
108
- type: { summary: attribute.enum.join(" | ") },
109
- },
110
- };
111
- }
103
+ attribute.enum = attribute.enum.map((item) => {
104
+ if (item === "UnknownObject") return "Object";
105
+ if (item === "UnknownArray") return "Array";
112
106
 
113
- if (attribute.enum?.length === 1) {
114
- types[attribute.name] = {
115
- control: "object",
116
- table: {
117
- defaultValue: { summary: attribute.default || "" },
118
- type: { summary: attribute.enum.join(" | ") },
119
- },
120
- };
107
+ return item;
108
+ });
121
109
  }
122
110
 
123
111
  const nonUnionTypes = [
112
+ "null",
124
113
  "string",
125
114
  "number",
126
115
  "boolean",
127
116
  "Date",
128
- "UnknownObject",
129
- "UnknownArray",
130
117
  "Array",
118
+ "Object",
119
+ "UnknownArray",
120
+ "UnknownObject",
131
121
  ];
132
122
 
133
- if (attribute.enum?.every((value) => nonUnionTypes.includes(value))) {
123
+ if (attribute.enum?.some((value) => !nonUnionTypes.includes(value))) {
124
+ types[attribute.name] = {
125
+ options: attribute.enum,
126
+ control: "select",
127
+ table: {
128
+ defaultValue: { summary: attribute.default || "" },
129
+ type: { summary: attribute.enum.join(" | ") },
130
+ },
131
+ };
132
+ } else if (attribute.enum?.some((value) => nonUnionTypes.includes(value))) {
134
133
  let control = attribute.enum[0];
135
134
 
136
135
  if (control === "string") {
@@ -145,6 +144,17 @@ export function getArgTypes(componentName: string | undefined) {
145
144
  control: control as ArgType["control"],
146
145
  table: {
147
146
  defaultValue: { summary: attribute.default || "" },
147
+ type: { summary: attribute.enum.join(" | ") },
148
+ },
149
+ };
150
+ }
151
+
152
+ if (attribute.enum?.length === 1) {
153
+ types[attribute.name] = {
154
+ control: "object",
155
+ table: {
156
+ defaultValue: { summary: attribute.default || "" },
157
+ type: { summary: attribute.enum.join(" | ") },
148
158
  },
149
159
  };
150
160
  }