@fiscozen/input 1.0.0-next.0 → 1.0.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.
@@ -28,23 +28,12 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
28
28
  pattern: {
29
29
  type: import('vue').PropType<string>;
30
30
  };
31
- environment: {
32
- type: import('vue').PropType<import('./types').InputEnvironment>;
33
- };
34
- minimumFractionDigits: {
35
- type: import('vue').PropType<number>;
36
- default: number;
37
- };
38
- maximumFractionDigits: {
39
- type: import('vue').PropType<number>;
40
- default: number;
41
- };
42
- valid: {
43
- type: import('vue').PropType<boolean>;
44
- };
45
31
  placeholder: {
46
32
  type: import('vue').PropType<string>;
47
33
  };
34
+ environment: {
35
+ type: import('vue').PropType<import('./types').InputEnvironment>;
36
+ };
48
37
  leftIcon: {
49
38
  type: import('vue').PropType<string>;
50
39
  };
@@ -57,12 +46,18 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
57
46
  leftIconAriaLabel: {
58
47
  type: import('vue').PropType<string>;
59
48
  };
49
+ valid: {
50
+ type: import('vue').PropType<boolean>;
51
+ };
60
52
  readonly: {
61
53
  type: import('vue').PropType<boolean>;
62
54
  };
63
55
  maxlength: {
64
56
  type: import('vue').PropType<number>;
65
57
  };
58
+ autocomplete: {
59
+ type: import('vue').PropType<boolean>;
60
+ };
66
61
  leftIconClass: {
67
62
  type: import('vue').PropType<string>;
68
63
  };
@@ -72,6 +67,14 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
72
67
  zeroOnEmpty: {
73
68
  type: import('vue').PropType<boolean>;
74
69
  };
70
+ minimumFractionDigits: {
71
+ type: import('vue').PropType<number>;
72
+ default: number;
73
+ };
74
+ maximumFractionDigits: {
75
+ type: import('vue').PropType<number>;
76
+ default: number;
77
+ };
75
78
  min: {
76
79
  type: import('vue').PropType<number>;
77
80
  default: number;
@@ -122,23 +125,12 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
122
125
  pattern: {
123
126
  type: import('vue').PropType<string>;
124
127
  };
125
- environment: {
126
- type: import('vue').PropType<import('./types').InputEnvironment>;
127
- };
128
- minimumFractionDigits: {
129
- type: import('vue').PropType<number>;
130
- default: number;
131
- };
132
- maximumFractionDigits: {
133
- type: import('vue').PropType<number>;
134
- default: number;
135
- };
136
- valid: {
137
- type: import('vue').PropType<boolean>;
138
- };
139
128
  placeholder: {
140
129
  type: import('vue').PropType<string>;
141
130
  };
131
+ environment: {
132
+ type: import('vue').PropType<import('./types').InputEnvironment>;
133
+ };
142
134
  leftIcon: {
143
135
  type: import('vue').PropType<string>;
144
136
  };
@@ -151,12 +143,18 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
151
143
  leftIconAriaLabel: {
152
144
  type: import('vue').PropType<string>;
153
145
  };
146
+ valid: {
147
+ type: import('vue').PropType<boolean>;
148
+ };
154
149
  readonly: {
155
150
  type: import('vue').PropType<boolean>;
156
151
  };
157
152
  maxlength: {
158
153
  type: import('vue').PropType<number>;
159
154
  };
155
+ autocomplete: {
156
+ type: import('vue').PropType<boolean>;
157
+ };
160
158
  leftIconClass: {
161
159
  type: import('vue').PropType<string>;
162
160
  };
@@ -166,6 +164,14 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
166
164
  zeroOnEmpty: {
167
165
  type: import('vue').PropType<boolean>;
168
166
  };
167
+ minimumFractionDigits: {
168
+ type: import('vue').PropType<number>;
169
+ default: number;
170
+ };
171
+ maximumFractionDigits: {
172
+ type: import('vue').PropType<number>;
173
+ default: number;
174
+ };
169
175
  min: {
170
176
  type: import('vue').PropType<number>;
171
177
  default: number;
@@ -191,8 +197,9 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
191
197
  step: number;
192
198
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>, {
193
199
  label?(_: {}): any;
194
- errorMessage?(_: {}): any;
200
+ "left-icon"?(_: {}): any;
195
201
  helpText?(_: {}): any;
202
+ errorMessage?(_: {}): any;
196
203
  }>;
197
204
  export default _default;
198
205
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -33,13 +33,13 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
33
33
  pattern: {
34
34
  type: import('vue').PropType<string>;
35
35
  };
36
+ placeholder: {
37
+ type: import('vue').PropType<string>;
38
+ };
36
39
  environment: {
37
40
  type: import('vue').PropType<InputEnvironment>;
38
41
  default: string;
39
42
  };
40
- valid: {
41
- type: import('vue').PropType<boolean>;
42
- };
43
43
  rightIcon: {
44
44
  type: import('vue').PropType<string>;
45
45
  };
@@ -81,9 +81,6 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
81
81
  secondRightIconAriaLabel: {
82
82
  type: import('vue').PropType<string>;
83
83
  };
84
- placeholder: {
85
- type: import('vue').PropType<string>;
86
- };
87
84
  leftIcon: {
88
85
  type: import('vue').PropType<string>;
89
86
  };
@@ -96,12 +93,19 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
96
93
  leftIconAriaLabel: {
97
94
  type: import('vue').PropType<string>;
98
95
  };
96
+ valid: {
97
+ type: import('vue').PropType<boolean>;
98
+ };
99
99
  readonly: {
100
100
  type: import('vue').PropType<boolean>;
101
101
  };
102
102
  maxlength: {
103
103
  type: import('vue').PropType<number>;
104
104
  };
105
+ autocomplete: {
106
+ type: import('vue').PropType<boolean>;
107
+ default: boolean;
108
+ };
105
109
  leftIconClass: {
106
110
  type: import('vue').PropType<string>;
107
111
  };
@@ -111,7 +115,6 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
111
115
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
112
116
  blur: (event: FocusEvent) => void;
113
117
  focus: (event: FocusEvent) => void;
114
- paste: (event: ClipboardEvent) => void;
115
118
  "fzinput:left-icon-click": () => void;
116
119
  "fzinput:right-icon-click": () => void;
117
120
  "fzinput:second-right-icon-click": () => void;
@@ -147,13 +150,13 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
147
150
  pattern: {
148
151
  type: import('vue').PropType<string>;
149
152
  };
153
+ placeholder: {
154
+ type: import('vue').PropType<string>;
155
+ };
150
156
  environment: {
151
157
  type: import('vue').PropType<InputEnvironment>;
152
158
  default: string;
153
159
  };
154
- valid: {
155
- type: import('vue').PropType<boolean>;
156
- };
157
160
  rightIcon: {
158
161
  type: import('vue').PropType<string>;
159
162
  };
@@ -195,9 +198,6 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
195
198
  secondRightIconAriaLabel: {
196
199
  type: import('vue').PropType<string>;
197
200
  };
198
- placeholder: {
199
- type: import('vue').PropType<string>;
200
- };
201
201
  leftIcon: {
202
202
  type: import('vue').PropType<string>;
203
203
  };
@@ -210,19 +210,25 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
210
210
  leftIconAriaLabel: {
211
211
  type: import('vue').PropType<string>;
212
212
  };
213
+ valid: {
214
+ type: import('vue').PropType<boolean>;
215
+ };
213
216
  readonly: {
214
217
  type: import('vue').PropType<boolean>;
215
218
  };
216
219
  maxlength: {
217
220
  type: import('vue').PropType<number>;
218
221
  };
222
+ autocomplete: {
223
+ type: import('vue').PropType<boolean>;
224
+ default: boolean;
225
+ };
219
226
  leftIconClass: {
220
227
  type: import('vue').PropType<string>;
221
228
  };
222
229
  }>> & Readonly<{
223
230
  onBlur?: ((event: FocusEvent) => any) | undefined;
224
231
  onFocus?: ((event: FocusEvent) => any) | undefined;
225
- onPaste?: ((event: ClipboardEvent) => any) | undefined;
226
232
  "onFzinput:left-icon-click"?: (() => any) | undefined;
227
233
  "onFzinput:right-icon-click"?: (() => any) | undefined;
228
234
  "onFzinput:second-right-icon-click"?: (() => any) | undefined;
@@ -233,6 +239,7 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
233
239
  environment: InputEnvironment;
234
240
  rightIconButtonVariant: import('@fiscozen/button').CommonButtonVariant;
235
241
  secondRightIconButtonVariant: import('@fiscozen/button').CommonButtonVariant;
242
+ autocomplete: boolean;
236
243
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>, Readonly<{
237
244
  label?: (() => unknown) | undefined;
238
245
  "left-icon"?: (() => unknown) | undefined;
@@ -145,6 +145,12 @@ type FzInputProps = {
145
145
  * Native maxlength attribute. Limits maximum number of characters
146
146
  */
147
147
  maxlength?: number;
148
+ /**
149
+ * Native autocomplete attribute. Controls browser autocomplete and suggestions.
150
+ * When false, sets autocomplete="off" to disable browser autocomplete.
151
+ * @default false
152
+ */
153
+ autocomplete?: boolean;
148
154
  /**
149
155
  * Additional CSS classes applied to left icon container
150
156
  */
@@ -14,8 +14,8 @@ export declare const sizeToEnvironmentMapping: Record<InputSize, InputEnvironmen
14
14
  * @returns Unique input ID with "fz-input" prefix
15
15
  *
16
16
  * @example
17
- * generateInputId() // "fz-input-97123456-a8d3k"
18
- * generateInputId() // "fz-input-97123457-k2m9p"
17
+ * generateInputId() // "fz-input-97123456-1"
18
+ * generateInputId() // "fz-input-97123456-2"
19
19
  */
20
20
  export declare function generateInputId(): string;
21
21
  export {};
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .fz-icon-button-wrapper[data-v-b4be112d]>button{gap:0!important;min-width:0!important}.fz-icon-button-wrapper--backoffice[data-v-b4be112d]>button{padding-left:5px;padding-right:5px}.fz-icon-button-wrapper--frontoffice[data-v-b4be112d]>button{padding-left:11px;padding-right:11px}.fz-container[data-v-ad2af2dd]{display:flex}.fz-container--vertical[data-v-ad2af2dd]{flex-direction:column}.fz-container--horizontal[data-v-ad2af2dd]{flex-direction:row;flex-wrap:nowrap}.fz-container.align-items-start[data-v-ad2af2dd]{align-items:flex-start}.fz-container.align-items-center[data-v-ad2af2dd]{align-items:center}.fz-container.align-items-end[data-v-ad2af2dd]{align-items:flex-end}.fz-container.align-items-stretch[data-v-ad2af2dd]{align-items:stretch}.fz-container.align-items-baseline[data-v-ad2af2dd]{align-items:baseline}.fz-container--horizontal.layout-expand-first[data-v-ad2af2dd]>*:first-child{flex-grow:1}.fz-container--horizontal.layout-expand-all[data-v-ad2af2dd]>*{flex-grow:1}.fz-container--horizontal.layout-space-between[data-v-ad2af2dd]{justify-content:space-between}.fz-container--vertical.gap-main-content-sm[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--main-content-sm, 32px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-main-content-base[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--main-content-base, 48px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-main-content-lg[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--main-content-lg, 64px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-none[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--section-content-none, 0px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-xs[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--section-content-xs, 8px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-sm[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--section-content-sm, 16px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-base[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--section-content-base, 24px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-lg[data-v-ad2af2dd]>p+p{margin-top:calc((0px - var(--section-content-lg, 32px)) + var(--paragraph-gap, 8px))}.fz-container--horizontal[data-v-ad2af2dd]>p+p{margin-top:0}.fz-button-group[data-v-00e5427e]>*:nth-child(1):nth-last-child(2),.fz-button-group[data-v-00e5427e]>*:nth-child(1):nth-last-child(2)~*{flex-basis:50%;flex-grow:0;flex-shrink:1}.fz-button-group[data-v-00e5427e]>*:nth-child(1):nth-last-child(3),.fz-button-group[data-v-00e5427e]>*:nth-child(1):nth-last-child(3)~*{flex-basis:33.333%;flex-grow:0;flex-shrink:1}.fz-button-group.fz-button-group--md[data-v-00e5427e]{justify-content:flex-end!important}.fz-button-group.fz-button-group--md[data-v-00e5427e]>*{flex-basis:initial!important;flex-grow:0!important;flex-shrink:0!important}.fz-button-group[data-v-00e5427e]>.fz-icon-button-wrapper{flex-basis:initial!important;flex-grow:0!important;flex-shrink:0!important}
1
+ .fz-icon-button-wrapper[data-v-b4be112d]>button{gap:0!important;min-width:0!important}.fz-icon-button-wrapper--backoffice[data-v-b4be112d]>button{padding-left:5px;padding-right:5px}.fz-icon-button-wrapper--frontoffice[data-v-b4be112d]>button{padding-left:11px;padding-right:11px}.fz-container[data-v-8c40daeb]{display:flex}.fz-container--vertical[data-v-8c40daeb]{flex-direction:column}.fz-container--horizontal[data-v-8c40daeb]{flex-direction:row;flex-wrap:nowrap}.fz-container.align-items-start[data-v-8c40daeb]{align-items:flex-start}.fz-container.align-items-center[data-v-8c40daeb]{align-items:center}.fz-container.align-items-end[data-v-8c40daeb]{align-items:flex-end}.fz-container.align-items-stretch[data-v-8c40daeb]{align-items:stretch}.fz-container.align-items-baseline[data-v-8c40daeb]{align-items:baseline}.fz-container--horizontal.layout-expand-first[data-v-8c40daeb]>*:first-child{flex-grow:1}.fz-container--horizontal.layout-expand-all[data-v-8c40daeb]>*{flex-grow:1}.fz-container--horizontal.layout-space-between[data-v-8c40daeb]{justify-content:space-between}.fz-container--horizontal.layout-expand-last[data-v-8c40daeb]>*:last-child{flex-grow:1}.fz-container--vertical.gap-main-content-sm[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--main-content-sm, 32px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-main-content-base[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--main-content-base, 48px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-main-content-lg[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--main-content-lg, 64px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-none[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--section-content-none, 0px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-xs[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--section-content-xs, 8px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-sm[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--section-content-sm, 16px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-base[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--section-content-base, 24px)) + var(--paragraph-gap, 8px))}.fz-container--vertical.gap-section-content-lg[data-v-8c40daeb]>p+p{margin-top:calc((0px - var(--section-content-lg, 32px)) + var(--paragraph-gap, 8px))}.fz-container--horizontal[data-v-8c40daeb]>p+p{margin-top:0}.fz-button-group[data-v-79dd8b6f]>*:nth-child(1):nth-last-child(2),.fz-button-group[data-v-79dd8b6f]>*:nth-child(1):nth-last-child(2)~*{flex-basis:50%;flex-grow:0;flex-shrink:1}.fz-button-group[data-v-79dd8b6f]>*:nth-child(1):nth-last-child(3),.fz-button-group[data-v-79dd8b6f]>*:nth-child(1):nth-last-child(3)~*{flex-basis:33.333%;flex-grow:0;flex-shrink:1}.fz-button-group[data-v-79dd8b6f]>.fz-icon-button-wrapper{flex-basis:initial!important;flex-grow:0!important;flex-shrink:0!important}
package/package.json CHANGED
@@ -1,17 +1,19 @@
1
1
  {
2
2
  "name": "@fiscozen/input",
3
- "version": "1.0.0-next.0",
3
+ "version": "1.0.0",
4
4
  "description": "Design System Input component",
5
5
  "main": "src/index.ts",
6
6
  "type": "module",
7
7
  "keywords": [],
8
8
  "author": "Cristian Barraco",
9
+ "dependencies": {
10
+ "@fiscozen/composables": "1.0.1",
11
+ "@fiscozen/button": "1.0.1",
12
+ "@fiscozen/icons": "0.1.36"
13
+ },
9
14
  "peerDependencies": {
10
15
  "tailwindcss": "^3.4.1",
11
- "vue": "^3.4.13",
12
- "@fiscozen/button": "^1.0.1-next.1",
13
- "@fiscozen/composables": "^0.1.39-next.0",
14
- "@fiscozen/icons": "^0.1.36"
16
+ "vue": "^3.4.13"
15
17
  },
16
18
  "devDependencies": {
17
19
  "@rushstack/eslint-patch": "^1.3.3",
@@ -29,9 +31,9 @@
29
31
  "vite-plugin-dts": "^3.8.3",
30
32
  "vitest": "^1.2.0",
31
33
  "vue-tsc": "^1.8.25",
34
+ "@fiscozen/tsconfig": "^0.1.0",
32
35
  "@fiscozen/prettier-config": "^0.1.0",
33
- "@fiscozen/eslint-config": "^0.1.0",
34
- "@fiscozen/tsconfig": "^0.1.0"
36
+ "@fiscozen/eslint-config": "^0.1.0"
35
37
  },
36
38
  "license": "MIT",
37
39
  "scripts": {
package/src/FzInput.vue CHANGED
@@ -25,6 +25,7 @@ const props = withDefaults(defineProps<FzInputProps>(), {
25
25
  secondRightIconButtonVariant: "invisible",
26
26
  variant: "normal",
27
27
  environment: "frontoffice",
28
+ autocomplete: false,
28
29
  });
29
30
 
30
31
  /**
@@ -384,6 +385,7 @@ defineExpose({
384
385
  :pattern="pattern"
385
386
  :name
386
387
  :maxlength
388
+ :autocomplete="autocomplete ? 'on' : 'off'"
387
389
  :aria-required="required ? 'true' : 'false'"
388
390
  :aria-invalid="error ? 'true' : 'false'"
389
391
  :aria-disabled="isReadonlyOrDisabled ? 'true' : 'false'"
@@ -136,6 +136,47 @@ describe('FzInput', () => {
136
136
  expect(wrapper.find('input').attributes('required')).toBe('')
137
137
  expect(wrapper.text()).toContain('*')
138
138
  })
139
+
140
+ it('applies autocomplete="off" by default', async () => {
141
+ const wrapper = mount(FzInput, {
142
+ props: {
143
+ label: 'Label',
144
+ },
145
+ slots: {},
146
+ })
147
+
148
+ await wrapper.vm.$nextTick()
149
+
150
+ expect(wrapper.find('input').attributes('autocomplete')).toBe('off')
151
+ })
152
+
153
+ it('applies autocomplete="off" when autocomplete is false', async () => {
154
+ const wrapper = mount(FzInput, {
155
+ props: {
156
+ label: 'Label',
157
+ autocomplete: false,
158
+ },
159
+ slots: {},
160
+ })
161
+
162
+ await wrapper.vm.$nextTick()
163
+
164
+ expect(wrapper.find('input').attributes('autocomplete')).toBe('off')
165
+ })
166
+
167
+ it('applies autocomplete="on" when autocomplete is true', async () => {
168
+ const wrapper = mount(FzInput, {
169
+ props: {
170
+ label: 'Label',
171
+ autocomplete: true,
172
+ },
173
+ slots: {},
174
+ })
175
+
176
+ await wrapper.vm.$nextTick()
177
+
178
+ expect(wrapper.find('input').attributes('autocomplete')).toBe('on')
179
+ })
139
180
  })
140
181
 
141
182
  describe('Events', () => {
package/src/types.ts CHANGED
@@ -146,6 +146,12 @@ type FzInputProps = {
146
146
  * Native maxlength attribute. Limits maximum number of characters
147
147
  */
148
148
  maxlength?: number;
149
+ /**
150
+ * Native autocomplete attribute. Controls browser autocomplete and suggestions.
151
+ * When false, sets autocomplete="off" to disable browser autocomplete.
152
+ * @default false
153
+ */
154
+ autocomplete?: boolean;
149
155
  /**
150
156
  * Additional CSS classes applied to left icon container
151
157
  */
package/src/utils.ts CHANGED
@@ -20,18 +20,30 @@ export const sizeToEnvironmentMapping: Record<InputSize, InputEnvironment> = {
20
20
  lg: "frontoffice",
21
21
  };
22
22
 
23
+ /**
24
+ * Auto-incrementing counter used by {@link generateId} to guarantee
25
+ * uniqueness even when multiple components are created within the
26
+ * same millisecond (e.g. in a v-for loop or during SSR).
27
+ *
28
+ * Using a counter instead of Math.random() makes ID generation fully
29
+ * deterministic, which is critical for snapshot testing stability.
30
+ *
31
+ * @internal
32
+ */
33
+ let idCounter = 0;
34
+
23
35
  /**
24
36
  * Internal helper function to generate unique IDs with a given prefix.
25
37
  *
26
38
  * The ID is composed of:
27
39
  * - Prefix string (e.g., "fz-input")
28
40
  * - Obfuscated timestamp (Date.now() - epoch offset)
29
- * - Random alphanumeric suffix (5 characters)
41
+ * - Auto-incrementing counter (base-36 encoded)
30
42
  *
31
43
  * This strategy ensures uniqueness through:
32
44
  * - Different timestamps for components created at different times
33
- * - Random suffix prevents collisions within the same millisecond
34
- * - Stateless generation (no global counters to manage)
45
+ * - Counter prevents collisions within the same millisecond
46
+ * - Deterministic generation (no Math.random(), safe for snapshot tests)
35
47
  *
36
48
  * @param prefix - The prefix to use for the generated ID
37
49
  * @returns Unique ID with the specified prefix
@@ -39,14 +51,12 @@ export const sizeToEnvironmentMapping: Record<InputSize, InputEnvironment> = {
39
51
  * @internal
40
52
  *
41
53
  * @example
42
- * generateId("fz-input") // "fz-input-97123456-a8d3k"
54
+ * generateId("fz-input") // "fz-input-97123456-1"
43
55
  */
44
56
  function generateId(prefix: string): string {
45
57
  // Obfuscate timestamp (Sept 13, 2020 offset) for shorter IDs
46
58
  const timestamp = Date.now() - 1600000000000;
47
- // Generate 5-char random alphanumeric suffix (base36: 0-9, a-z)
48
- const random = Math.random().toString(36).slice(2, 7);
49
- return `${prefix}-${timestamp}-${random}`;
59
+ return `${prefix}-${timestamp}-${++idCounter}`;
50
60
  }
51
61
 
52
62
  /**
@@ -55,8 +65,8 @@ function generateId(prefix: string): string {
55
65
  * @returns Unique input ID with "fz-input" prefix
56
66
  *
57
67
  * @example
58
- * generateInputId() // "fz-input-97123456-a8d3k"
59
- * generateInputId() // "fz-input-97123457-k2m9p"
68
+ * generateInputId() // "fz-input-97123456-1"
69
+ * generateInputId() // "fz-input-97123456-2"
60
70
  */
61
71
  export function generateInputId(): string {
62
72
  return generateId("fz-input");
@@ -1 +1 @@
1
- {"program":{"fileNames":["../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@vue+shared@3.5.13/node_modules/@vue/shared/dist/shared.d.ts","../../node_modules/.pnpm/@vue+reactivity@3.5.13/node_modules/@vue/reactivity/dist/reactivity.d.ts","../../node_modules/.pnpm/@vue+runtime-core@3.5.13/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@vue+runtime-dom@3.5.13/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","../../node_modules/.pnpm/vue@3.5.13_typescript@5.3.3/node_modules/vue/jsx-runtime/index.d.ts","../../node_modules/.pnpm/@babel+types@7.26.9/node_modules/@babel/types/lib/index.d.ts","../../node_modules/.pnpm/@babel+parser@7.26.9/node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/.pnpm/@vue+compiler-core@3.5.13/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","../../node_modules/.pnpm/@vue+compiler-dom@3.5.13/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","../../node_modules/.pnpm/vue@3.5.13_typescript@5.3.3/node_modules/vue/dist/vue.d.mts","../../node_modules/.pnpm/vue@3.5.13_typescript@5.9.3/node_modules/vue/jsx-runtime/index.d.ts","../../node_modules/.pnpm/vue@3.5.13_typescript@5.9.3/node_modules/vue/dist/vue.d.mts","../../node_modules/.pnpm/@fortawesome+fontawesome-common-types@6.7.2/node_modules/@fortawesome/fontawesome-common-types/index.d.ts","../../node_modules/.pnpm/@fortawesome+fontawesome-svg-core@6.7.2/node_modules/@fortawesome/fontawesome-svg-core/index.d.ts","../../node_modules/.pnpm/@awesome.me+kit-8137893ad3@1.0.394/node_modules/@awesome.me/kit-8137893ad3/icons/modules/icon-types.ts","../../node_modules/.pnpm/@awesome.me+kit-8137893ad3@1.0.394/node_modules/@awesome.me/kit-8137893ad3/icons/modules/index.d.ts","../../node_modules/.pnpm/@fortawesome+vue-fontawesome@3.1.1_@fortawesome+fontawesome-svg-core@6.7.2_vue@3.5.13_typescript@5.9.3_/node_modules/@fortawesome/vue-fontawesome/index.d.ts","../icons/src/types.ts","../icons/src/fzicon.vue.ts","../icons/src/index.ts","../button/src/types.ts","../button/src/utils.ts","../button/src/fzbutton.vue.ts","../button/src/fziconbutton.vue.ts","../composables/src/types.ts","../composables/src/utils/number/index.ts","../composables/src/utils/position/index.ts","../composables/src/utils/index.ts","../composables/src/composables/usefloating.ts","../composables/src/composables/usemediaquery.ts","../composables/src/composables/usebreakpoints.ts","../composables/src/composables/useclickoutside.ts","../composables/src/composables/usekeydown.ts","../composables/src/composables/usekeyup.ts","../composables/src/composables/usecurrency.ts","../composables/src/composables/index.ts","../style/src/custom-directives/validation.ts","../style/src/custom-directives/config.ts","../style/src/custom-directives/vbold.ts","../style/tokens.json","../style/safe-colors.json","../style/safe-semantic-colors.json","../style/src/custom-directives/vcolor.ts","../style/src/custom-directives/vsmall.ts","../style/src/custom-directives/index.ts","../style/src/constants.ts","../style/src/index.ts","../composables/src/fzfloating.vue.ts","../composables/src/index.ts","../container/src/types.ts","../container/src/fzcontainer.vue.ts","../container/src/index.ts","../button/src/fzbuttongroup.vue.ts","../button/src/index.ts","./src/types.ts","./src/useinputstyle.ts","./src/utils.ts","./src/fzinput.vue.ts","./src/fzcurrencyinput.vue.ts","./__vls_types.d.ts","./dist/src/types.d.ts","./dist/src/fzinput.vue.d.ts","./dist/src/fzcurrencyinput.vue.d.ts","./dist/src/utils.d.ts","./dist/src/index.d.ts","./dist/index.d.ts","./dist/src/useinputstyle.d.ts","./src/index.ts"],"fileInfos":[{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0"],"root":[[101,114]],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[51,59],[61],[52],[59],[56,60],[46,52,53],[54],[46],[46,47,48,50],[47,48,49,50],[50,55],[50],[51,56,66,67,68],[51,56,67,68,93,95,98],[51,56,67,68,69],[51,67,69,70,99],[51,66],[51,56,67,69],[51,75,76,77,78,79,80,81],[51,76],[51,56],[51,71,74],[51,56,71,74],[51,56,71,82,93],[51,71,74,82,94],[51,72,73],[51],[51,71],[51,56,96],[51,96,97],[51,56,62,63,64],[51,56,60,62,64,65],[111],[56,64,100,107],[107,108,109,110],[66,100],[56,107],[107],[51,56,66,95,101,104],[51,56,66,100,101,102,103],[51,101,103,104,105],[51,66,100],[51,56,101],[51,101],[51,86],[51,83],[51,83,84,85,89,90],[51,56,83,84],[51,56,83,84,86,87,88],[51,56,91,92],[51,67],[51,66,67],[51,71,74,82],[51,96],[51,56,60,64],[51,56,92]],"referencedMap":[[61,1],[62,2],[53,3],[60,4],[63,5],[54,6],[55,7],[47,8],[48,9],[50,10],[56,11],[51,12],[58,11],[57,12],[69,13],[99,14],[70,15],[100,16],[67,17],[68,18],[82,19],[77,20],[78,21],[81,22],[75,23],[79,21],[80,21],[76,21],[94,24],[95,25],[71,21],[74,26],[72,27],[73,28],[97,29],[98,30],[96,27],[65,31],[66,32],[64,27],[106,21],[112,33],[109,34],[108,34],[111,35],[107,36],[113,37],[110,38],[105,39],[104,40],[114,41],[101,42],[102,43],[103,44],[92,45],[84,46],[91,47],[83,21],[85,48],[89,49],[90,48],[93,50]],"exportedModulesMap":[[61,1],[62,2],[53,3],[60,4],[63,5],[54,6],[55,7],[47,8],[48,9],[50,10],[56,11],[51,12],[58,11],[57,12],[69,13],[99,14],[70,15],[100,51],[67,27],[68,52],[82,19],[77,20],[78,21],[81,23],[75,23],[79,21],[80,21],[76,21],[94,24],[95,53],[71,21],[74,26],[72,28],[73,28],[97,29],[98,54],[96,27],[65,31],[66,55],[64,27],[106,21],[112,21],[109,21],[108,21],[111,21],[107,21],[113,21],[110,21],[105,39],[104,40],[114,21],[101,42],[102,43],[103,44],[92,45],[84,46],[91,47],[83,21],[85,48],[89,49],[90,48],[93,56]],"semanticDiagnosticsPerFile":[61,62,53,52,59,60,63,54,55,47,48,50,46,49,44,45,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,1,56,51,58,57,69,99,70,100,67,68,82,77,78,81,75,79,80,76,94,95,71,74,72,73,97,98,96,65,66,64,106,112,109,108,111,107,113,110,105,104,114,101,102,103,87,88,92,84,91,83,85,89,90,93,86],"affectedFilesPendingEmit":[105,104,114,101,102,103],"emitSignatures":[101,102,103,104,105]},"version":"5.3.3"}
1
+ {"program":{"fileNames":["../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@vue+shared@3.5.26/node_modules/@vue/shared/dist/shared.d.ts","../../node_modules/.pnpm/@vue+reactivity@3.5.26/node_modules/@vue/reactivity/dist/reactivity.d.ts","../../node_modules/.pnpm/@vue+runtime-core@3.5.26/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@vue+runtime-dom@3.5.26/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","../../node_modules/.pnpm/vue@3.5.26_typescript@5.3.3/node_modules/vue/jsx-runtime/index.d.ts","../../node_modules/.pnpm/@babel+types@7.28.6/node_modules/@babel/types/lib/index.d.ts","../../node_modules/.pnpm/@babel+parser@7.28.6/node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/.pnpm/@vue+compiler-core@3.5.26/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","../../node_modules/.pnpm/@vue+compiler-dom@3.5.26/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","../../node_modules/.pnpm/vue@3.5.26_typescript@5.3.3/node_modules/vue/dist/vue.d.mts","../../node_modules/.pnpm/@fortawesome+fontawesome-common-types@6.7.2/node_modules/@fortawesome/fontawesome-common-types/index.d.ts","../../node_modules/.pnpm/@fortawesome+fontawesome-svg-core@6.7.2/node_modules/@fortawesome/fontawesome-svg-core/index.d.ts","../../node_modules/.pnpm/@awesome.me+kit-8137893ad3@1.0.396/node_modules/@awesome.me/kit-8137893ad3/icons/modules/icon-types.ts","../../node_modules/.pnpm/@awesome.me+kit-8137893ad3@1.0.396/node_modules/@awesome.me/kit-8137893ad3/icons/modules/index.d.ts","../../node_modules/.pnpm/@fortawesome+vue-fontawesome@3.1.3_@fortawesome+fontawesome-svg-core@6.7.2_vue@3.5.26_typescript@5.3.3_/node_modules/@fortawesome/vue-fontawesome/index.d.ts","../icons/src/types.ts","../icons/src/fzicon.vue.ts","../icons/src/index.ts","../button/src/types.ts","../button/src/utils.ts","../button/src/fzbutton.vue.ts","../button/src/fziconbutton.vue.ts","../container/src/types.ts","../container/src/fzcontainer.vue.ts","../container/src/index.ts","../button/src/fzbuttongroup.vue.ts","../button/src/index.ts","./src/types.ts","./src/useinputstyle.ts","./src/utils.ts","./src/fzinput.vue.ts","../composables/src/types.ts","../composables/src/utils/number/index.ts","../composables/src/utils/position/index.ts","../composables/src/utils/index.ts","../composables/src/composables/usefloating.ts","../composables/src/composables/usemediaquery.ts","../composables/src/composables/usebreakpoints.ts","../composables/src/composables/useclickoutside.ts","../composables/src/composables/usekeydown.ts","../composables/src/composables/usekeyup.ts","../composables/src/composables/usecurrency.ts","../composables/src/composables/index.ts","../style/src/custom-directives/validation.ts","../style/src/custom-directives/config.ts","../style/src/custom-directives/vbold.ts","../style/tokens.json","../style/safe-colors.json","../style/safe-semantic-colors.json","../style/src/custom-directives/vcolor.ts","../style/src/custom-directives/vsmall.ts","../style/src/custom-directives/index.ts","../style/src/constants.ts","../style/src/index.ts","../composables/src/fzfloating.vue.ts","../composables/src/index.ts","./src/fzcurrencyinput.vue.ts","./__vls_types.d.ts","./dist/src/types.d.ts","./dist/src/fzinput.vue.d.ts","./dist/src/fzcurrencyinput.vue.d.ts","./dist/src/utils.d.ts","./dist/src/index.d.ts","./dist/index.d.ts","./dist/src/useinputstyle.d.ts","./src/index.ts","../button/src/fzbuttongroup.vue","../composables/src/fzfloating.vue","../container/src/fzcontainer.vue"],"fileInfos":[{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0"],"root":[[74,77],[103,112]],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[51,57],[59],[52],[57],[56,58],[46,52,53],[54],[46],[46,47,48,50],[47,48,49,50],[50,55],[50],[51,56,64,65,66],[51,56,65,66,71],[51,56,65,66,67],[51,65,67,68,72],[51,64],[51,56,65,67],[51,82,83,84,85,86,87,88],[51,83],[51,56],[51,78,81],[51,56,78,81],[51,56,78,89,100],[51,78,81,89,101],[51,79,80],[51],[51,78],[51,56,69],[51,69,70],[51,56,60,61,62],[51,56,58,60,62,63],[109],[56,62,73,105],[105,106,107,108],[64,73],[56,105],[105],[51,56,64,74,77,102],[51,56,64,73,74,75,76],[51,74,76,77,103],[51,64,73],[51,56,74],[51,74],[51,93],[51,90],[51,90,91,92,96,97],[51,56,90,91],[51,56,90,91,93,94,95],[51,56,98,99],[51,65,113,114,115],[51,56,65,113],[51,78,81,89],[51,69],[51,73]],"referencedMap":[[59,1],[60,2],[53,3],[58,4],[61,5],[54,6],[55,7],[47,8],[48,9],[50,10],[56,11],[51,12],[67,13],[72,14],[68,15],[73,16],[65,17],[66,18],[89,19],[84,20],[85,21],[88,22],[82,23],[86,21],[87,21],[83,21],[101,24],[102,25],[78,21],[81,26],[79,27],[80,28],[70,29],[71,30],[69,27],[63,31],[64,32],[62,27],[104,21],[110,33],[107,34],[106,34],[109,35],[105,36],[111,37],[108,38],[103,39],[77,40],[112,41],[74,42],[75,43],[76,44],[99,45],[91,46],[98,47],[90,21],[92,48],[96,49],[97,48],[100,50]],"exportedModulesMap":[[59,1],[60,2],[53,3],[58,4],[61,5],[54,6],[55,7],[47,8],[48,9],[50,10],[56,11],[51,12],[67,13],[72,14],[68,15],[73,51],[65,17],[66,52],[89,19],[84,20],[85,21],[88,22],[82,23],[86,21],[87,21],[83,21],[101,24],[102,53],[78,21],[81,26],[79,27],[80,28],[70,29],[71,54],[69,27],[63,31],[64,21],[62,27],[104,21],[110,21],[107,21],[106,21],[109,21],[105,21],[111,21],[108,21],[103,39],[77,40],[112,21],[74,55],[75,43],[76,44],[99,45],[91,46],[98,47],[90,21],[92,48],[96,49],[97,48],[100,50]],"semanticDiagnosticsPerFile":[59,60,53,52,57,58,61,54,55,47,48,50,46,49,44,45,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,1,56,51,67,72,68,73,65,66,89,84,85,88,82,86,87,83,101,102,78,81,79,80,70,71,69,63,64,62,104,110,107,106,109,105,111,108,103,77,112,74,75,76,94,95,99,91,98,90,92,96,97,100,93],"affectedFilesPendingEmit":[103,77,112,74,75,76],"emitSignatures":[74,75,76,77,103]},"version":"5.3.3"}
package/vitest.config.ts CHANGED
@@ -9,11 +9,19 @@ export default mergeConfig(
9
9
  environment: 'jsdom',
10
10
  exclude: [...configDefaults.exclude, 'e2e/*'],
11
11
  root: fileURLToPath(new URL('./', import.meta.url)),
12
+ setupFiles: ['../vitest.setup.ts'],
12
13
  coverage: {
13
14
  provider: 'v8',
14
15
  include: ['**/src/**'],
15
- exclude: ['**/index.ts']
16
+ exclude: ['**/index.ts', '**/__tests__/**', '**/*.stories.ts'],
17
+ thresholds: {
18
+ statements: 80,
19
+ branches: 75,
20
+ functions: 80,
21
+ lines: 80
22
+ }
16
23
  }
17
24
  }
18
25
  })
19
26
  )
27
+