@fiscozen/input 0.1.16 → 1.0.0-next.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.
package/src/index.ts CHANGED
@@ -2,3 +2,6 @@ export { default as FzInput } from "./FzInput.vue";
2
2
  export { default as FzCurrencyInput } from "./FzCurrencyInput.vue";
3
3
 
4
4
  export type * from "./types";
5
+
6
+ // Utility exports
7
+ export { sizeToEnvironmentMapping } from "./utils";
package/src/types.ts CHANGED
@@ -1,143 +1,268 @@
1
1
  import { IconButtonVariant } from "@fiscozen/button";
2
2
  import { IconSize , IconVariant } from "@fiscozen/icons";
3
3
 
4
+ export type InputEnvironment = "backoffice" | "frontoffice";
5
+
4
6
  type FzInputProps = {
5
7
  /**
6
- * The label displayed on top of the input
8
+ * Text label displayed above the input field. Overridden by label slot if provided.
7
9
  */
8
10
  label?: string;
9
11
  /**
10
- * The size of the input
12
+ * Environment determining input size and styling
13
+ * @default 'frontoffice'
11
14
  */
12
- size?: "sm" | "md" | "lg";
15
+ environment?: InputEnvironment;
13
16
  /**
14
- * The placeholder displayed in the input
17
+ * Visual size affecting height, padding, and text size
18
+ *
19
+ * @deprecated Use the 'environment' prop instead. This prop will be removed in a future version.
20
+ * Size values map to environments: sm/md → backoffice, lg → frontoffice
15
21
  */
16
- placeholder?: string;
22
+ size?: "sm" | "md" | "lg";
17
23
  /**
18
- * Secondary - floating like placeholder
24
+ * Placeholder text shown when input is empty. Behavior differs based on variant.
19
25
  */
20
- secondaryPlaceholder?: string;
26
+ placeholder?: string;
21
27
  /**
22
- * If set to true, the input is required
28
+ * Marks input as required. Adds asterisk to label and sets native required attribute.
29
+ * @default false
23
30
  */
24
31
  required?: boolean;
25
32
  /**
26
- * If set to true, the input is disabled
33
+ * Disables input interaction and applies disabled styling
34
+ * @default false
27
35
  */
28
36
  disabled?: boolean;
29
37
  /**
30
- * If set to true, the input is in error state
38
+ * Shows error state with red border and enables errorMessage slot display
39
+ * @default false
31
40
  */
32
41
  error?: boolean;
33
42
  /**
34
- * Left icon name
43
+ * Font Awesome icon name displayed on the left side of input
35
44
  */
36
45
  leftIcon?: string;
37
46
  /**
38
- * Left icon variant
47
+ * Visual style variant for left icon (solid, regular, light, etc.)
39
48
  */
40
49
  leftIconVariant?: IconVariant;
41
50
  /**
42
- * Left icon button variant
51
+ * Button variant for left icon when rendered as clickable button
43
52
  */
44
53
  leftIconButtonVariant?: IconButtonVariant;
45
54
  /**
46
- * Right icon name
55
+ * Accessible label for left icon when clickable. Required for screen reader accessibility.
56
+ */
57
+ leftIconAriaLabel?: string;
58
+ /**
59
+ * Font Awesome icon name displayed on the right side of input
47
60
  */
48
61
  rightIcon?: string;
49
62
  /**
50
- * Right icon name
63
+ * Additional CSS classes applied to right icon container
64
+ */
65
+ rightIconClass?: string;
66
+ /**
67
+ * Size override for right icon. If not provided, uses input size mapping.
68
+ * @deprecated This prop is deprecated and will be removed in a future version.
69
+ * Icons now have a fixed size of "md". This prop will be ignored.
51
70
  */
52
71
  rightIconSize?: IconSize;
53
72
  /**
54
- * Right icon variant
73
+ * Visual style variant for right icon (solid, regular, light, etc.)
55
74
  */
56
75
  rightIconVariant?: IconVariant;
57
76
  /**
58
- * Right icon button vs normal icon
77
+ * Renders right icon as clickable button instead of static icon
78
+ * @default false
59
79
  */
60
80
  rightIconButton?: boolean;
61
81
  /**
62
- * Right icon button variant
82
+ * Button variant for right icon when rightIconButton is true
83
+ * @default 'invisible'
63
84
  */
64
85
  rightIconButtonVariant?: IconButtonVariant;
65
86
  /**
66
- * The input type
87
+ * Accessible label for right icon when clickable. Required for screen reader accessibility.
88
+ */
89
+ rightIconAriaLabel?: string;
90
+ /**
91
+ * Font Awesome icon name displayed as second icon on the right side of input.
92
+ * Priority order: secondRightIcon > rightIcon > valid
93
+ */
94
+ secondRightIcon?: string;
95
+ /**
96
+ * Additional CSS classes applied to second right icon container
97
+ */
98
+ secondRightIconClass?: string;
99
+ /**
100
+ * Visual style variant for second right icon (solid, regular, light, etc.)
101
+ */
102
+ secondRightIconVariant?: IconVariant;
103
+ /**
104
+ * Renders second right icon as clickable button instead of static icon
105
+ * @default false
106
+ */
107
+ secondRightIconButton?: boolean;
108
+ /**
109
+ * Button variant for second right icon when secondRightIconButton is true
110
+ * @default 'invisible'
111
+ */
112
+ secondRightIconButtonVariant?: IconButtonVariant;
113
+ /**
114
+ * Accessible label for second right icon when clickable. Required for screen reader accessibility.
115
+ */
116
+ secondRightIconAriaLabel?: string;
117
+ /**
118
+ * Native HTML input type. Determines keyboard layout and validation behavior
119
+ * @default 'text'
67
120
  */
68
121
  type?: "text" | "password" | "email" | "number" | "tel" | "url";
69
122
  /**
70
- * If set to true, the input is valid
123
+ * Shows success checkmark icon on the right when true. Takes precedence over rightIcon
124
+ * @default false
71
125
  */
72
126
  valid?: boolean;
73
127
  /**
74
- * Input variant
128
+ * Visual presentation style. 'floating-label' moves placeholder above input when focused/filled
129
+ * @default 'normal'
75
130
  */
76
131
  variant?: 'normal' | 'floating-label';
77
132
  /**
78
- * Pattern to validate the input
133
+ * HTML5 pattern attribute for native browser validation
79
134
  */
80
135
  pattern?: string;
81
136
  /**
82
- * Defines the textarea key in a form
137
+ * Native name attribute for form submission and identification
83
138
  */
84
139
  name?: string;
85
-
86
140
  /**
87
- * native readonly input value
141
+ * Native readonly attribute. Prevents user input while keeping field focusable
142
+ * @default false
88
143
  */
89
144
  readonly?: boolean;
90
-
91
145
  /**
92
- * native maxlength input value
146
+ * Native maxlength attribute. Limits maximum number of characters
93
147
  */
94
148
  maxlength?: number;
95
-
96
149
  /**
97
- * right icon class
98
- */
99
- rightIconClass?: string;
100
-
101
- /**
102
- * left icon class
150
+ * Additional CSS classes applied to left icon container
103
151
  */
104
152
  leftIconClass?: string;
105
153
  };
106
154
 
107
155
  interface FzCurrencyInputProps
108
- extends Omit<FzInputProps, "type" | "modelValue"> {
156
+ extends Omit<
157
+ FzInputProps,
158
+ | "type"
159
+ | "modelValue"
160
+ | "rightIcon"
161
+ | "rightIconSize"
162
+ | "rightIconVariant"
163
+ | "rightIconButton"
164
+ | "rightIconButtonVariant"
165
+ | "rightIconAriaLabel"
166
+ | "rightIconClass"
167
+ | "secondRightIcon"
168
+ | "secondRightIconClass"
169
+ | "secondRightIconVariant"
170
+ | "secondRightIconButton"
171
+ | "secondRightIconButtonVariant"
172
+ | "secondRightIconAriaLabel"
173
+ > {
174
+ /**
175
+ * The v-model value.
176
+ *
177
+ * **Type assertion**: This prop accepts `number | string | undefined | null` as input,
178
+ * but the component **always emits** `number | undefined | null` (never `string`).
179
+ * Strings are automatically parsed (Italian format: "1.234,56" → 1234.56) and converted
180
+ * to numbers internally.
181
+ *
182
+ * **nullOnEmpty**: When `nullOnEmpty` is `true`, empty input emits `null` instead of `undefined`.
183
+ *
184
+ * **Deprecation**: String values are deprecated and will be removed in a future version.
185
+ * A console warning is shown when strings are used. Please use `number | undefined | null` instead
186
+ * for type safety and future compatibility.
187
+ *
188
+ * @example
189
+ * ```vue
190
+ * <!-- ✅ Recommended: number | undefined | null -->
191
+ * <script setup>
192
+ * const amount = ref<number | undefined>(undefined);
193
+ * </script>
194
+ * <template>
195
+ * <FzCurrencyInput v-model="amount" />
196
+ * </template>
197
+ *
198
+ * <!-- ✅ With nullOnEmpty: number | null -->
199
+ * <script setup>
200
+ * const amount = ref<number | null>(null);
201
+ * </script>
202
+ * <template>
203
+ * <FzCurrencyInput v-model="amount" :nullOnEmpty="true" />
204
+ * </template>
205
+ *
206
+ * <!-- ⚠️ Deprecated: string (still works but shows warning) -->
207
+ * <script setup>
208
+ * const amount = ref<string>("1234,56");
209
+ * </script>
210
+ * <template>
211
+ * <FzCurrencyInput v-model="amount" />
212
+ * </template>
213
+ * ```
214
+ */
215
+ modelValue?: number | string | undefined | null;
109
216
  /**
110
- * Is set to true, an empty string will be casted to null
217
+ * Converts empty input to null instead of undefined.
218
+ * When true, empty input (v-model undefined) will emit null instead of undefined.
219
+ * @default false
111
220
  */
112
221
  nullOnEmpty?: boolean;
113
222
  /**
114
- * Minimum number of decimal places allowed, set null to allow arbitrary decimal values length
115
- * note that limits from Intl.NumberFormat still apply
116
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#digit_options
223
+ * Converts empty input to 0 instead of undefined.
224
+ * When true, empty input (v-model undefined) will emit 0 instead of undefined.
225
+ * @default false
226
+ */
227
+ zeroOnEmpty?: boolean;
228
+ /**
229
+ * Minimum decimal places in formatted output
230
+ * @default 2
231
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#digit_options
117
232
  */
118
233
  minimumFractionDigits?: number;
119
234
  /**
120
- * Maximum number of decimal places allowed, set null to allow arbitrary decimal values length
121
- * note that limits from Intl.NumberFormat still apply
122
- * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#digit_options
235
+ * Maximum decimal places in formatted output
236
+ * @default 2
237
+ * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#digit_options
123
238
  */
124
239
  maximumFractionDigits?: number;
125
240
  /**
126
- * Minimum number value
241
+ * Minimum allowed value. Values below this are clamped to min
127
242
  */
128
243
  min?: number;
129
244
  /**
130
- * Maximum number value
245
+ * Maximum allowed value. Values above this are clamped to max
131
246
  */
132
247
  max?: number;
133
248
  /**
134
- * Quantized step
249
+ * Step increment for arrow buttons. When forceStep is true, values are rounded to nearest step multiple
250
+ * @default 1
135
251
  */
136
252
  step?: number;
137
253
  /**
138
- * Allow only mutiples of step
254
+ * Enforces quantization: values are automatically rounded to nearest step multiple
255
+ * @default false
139
256
  */
140
257
  forceStep?: boolean;
258
+ /**
259
+ * Custom accessible label for step up button. If not provided, uses default label.
260
+ */
261
+ stepUpAriaLabel?: string;
262
+ /**
263
+ * Custom accessible label for step down button. If not provided, uses default label.
264
+ */
265
+ stepDownAriaLabel?: string;
141
266
  }
142
267
 
143
268
  export { FzInputProps, FzCurrencyInputProps };
@@ -1,71 +1,129 @@
1
- import { computed, ToRefs, Ref } from "vue";
2
- import { FzInputProps } from "./types";
1
+ import { computed, ToRefs, Ref, ComputedRef } from "vue";
2
+ import { FzInputProps, type InputEnvironment } from "./types";
3
3
 
4
+ /**
5
+ * Composable for managing FzInput component styles and computed classes
6
+ *
7
+ * Handles dynamic styling based on props, environment, variant, and state.
8
+ * Returns computed classes for container, label, input, help text, and error messages.
9
+ *
10
+ * @param props - Reactive props from FzInput component
11
+ * @param container - Reference to container DOM element
12
+ * @param model - Reactive model value (string | undefined)
13
+ * @param effectiveEnvironment - Computed effective environment (backoffice | frontoffice)
14
+ * @param isFocused - Reactive flag indicating if input is focused
15
+ * @returns Object containing computed classes and style-related properties
16
+ */
4
17
  export default function useInputStyle(
5
18
  props: ToRefs<FzInputProps>,
6
19
  container: Ref<HTMLElement | null>,
7
- model: Ref<string>
20
+ model: Ref<string | undefined>,
21
+ effectiveEnvironment: ComputedRef<InputEnvironment>,
22
+ isFocused: Ref<boolean>
8
23
  ) {
9
24
  const containerWidth = computed(() =>
10
25
  container.value ? `${container.value.clientWidth}px` : "auto",
11
26
  );
12
27
 
13
- const mapContainerClass = {
14
- sm: "h-28 text-sm",
15
- md: "h-32 text-base",
16
- lg: "h-40 text-lg",
28
+ const mapContainerClass: Record<InputEnvironment, string> = {
29
+ backoffice: "h-32",
30
+ frontoffice: "h-44",
17
31
  };
18
32
 
19
- const staticContainerClass = `flex justify-between w-full items-center px-10 border-1 rounded gap-8 text-left has-[:focus]:border-blue-600 relative`;
33
+ // Common styles: padding 10px, border-radius 4px, border 1px solid grey-300, background white, color black
34
+ const staticContainerClass = `flex justify-between w-full items-center pl-[10px] pr-[10px] rounded border-1 gap-8 text-left relative outline-none`;
20
35
 
21
- const computedContainerClass = computed(() => [
22
- props.variant?.value === 'normal' ? mapContainerClass[props.size?.value!] : 'h-40 pr-6',
23
- evaluateProps(),
24
- ]);
36
+ const computedContainerClass = computed(() => {
37
+ const env = effectiveEnvironment.value;
38
+ return [
39
+ props.variant?.value === 'normal' ? mapContainerClass[env] : mapContainerClass.frontoffice,
40
+ evaluateProps(),
41
+ ];
42
+ });
25
43
 
26
44
  const computedLabelClass = computed(() => [
27
- props.disabled?.value ? "text-grey-300" : "text-core-black",
45
+ "font-normal text-base",
46
+ (props.disabled?.value || props.readonly?.value) ? "text-grey-300" : "text-core-black",
28
47
  ]);
29
48
 
30
- const staticInputClass = `peer w-full bg-transparent border-0 focus:outline-none cursor-[inherit] focus:ring-0 truncate`;
49
+ // Input styles: transparent background (inherits from container), no border, placeholder color grey-300
50
+ const staticInputClass = `peer w-full bg-transparent border-0 outline-none focus:outline-none cursor-[inherit] focus:ring-0 truncate placeholder:text-grey-300 font-normal text-base`;
31
51
 
32
- const textSizeMap = {
33
- xl: 'text-lg',
34
- lg: 'text-base',
35
- md: 'text-sm',
36
- sm: 'text-xs'
37
- }
52
+ // Input text size: 16px for both environments (as per design specs)
53
+ const textSizeMap: Record<InputEnvironment, string> = {
54
+ backoffice: 'text-base',
55
+ frontoffice: 'text-base',
56
+ };
38
57
 
58
+ /**
59
+ * Determines when to show the normal placeholder inside the input.
60
+ *
61
+ * For floating-label variant:
62
+ * - Shows placeholder inside input only when input is empty AND not focused
63
+ * - When focused or has value, placeholder "floats" above as <span>
64
+ *
65
+ * For normal variant:
66
+ * - Always shows placeholder inside input
67
+ */
39
68
  const showNormalPlaceholder = computed(() => {
40
- return !(props.variant?.value === 'floating-label') ||
41
- ((props.variant?.value === 'floating-label') && !model.value)
69
+ if (props.variant?.value !== 'floating-label') {
70
+ return true; // Normal variant: always show placeholder inside
71
+ }
72
+ // Floating-label variant: show placeholder inside only when empty AND not focused
73
+ return !model.value && !isFocused.value;
42
74
  });
43
75
 
44
- const computedInputClass = computed(() => [
45
- props.variant?.value === 'floating-label' ? textSizeMap[props.size?.value] : '',
46
- ]);
76
+ const computedInputClass = computed(() => {
77
+ const env = effectiveEnvironment.value;
78
+ if (props.variant?.value === 'floating-label') {
79
+ return [textSizeMap[env]];
80
+ }
81
+ return [];
82
+ });
47
83
 
84
+ // Help text styles: Inter, 16px, normal, 400, line-height 20px (125%), color grey-500
48
85
  const computedHelpClass = computed(() => [
49
- props.size?.value === "sm" ? "text-xs" : "",
50
- props.size?.value === "md" ? "text-sm" : "",
51
- props.size?.value === "lg" ? "text-base" : "",
52
- props.disabled?.value ? "text-grey-300" : "text-grey-500",
86
+ "font-normal text-base",
87
+ (props.disabled?.value || props.readonly?.value) ? "text-grey-300" : "text-grey-500",
53
88
  ]);
89
+
90
+ // Error text styles: same as helpText (Inter, 16px, normal, 400, line-height 20px) but with core-black color
54
91
  const computedErrorClass = computed(() => [
55
- props.size?.value === "sm" ? "text-xs" : "",
56
- props.size?.value === "md" ? "text-sm" : "",
57
- props.size?.value === "lg" ? "text-base" : "",
58
- props.disabled?.value ? "text-grey-300" : "text-core-black",
92
+ "font-normal text-base",
93
+ (props.disabled?.value || props.readonly?.value) ? "text-grey-300" : "text-core-black",
59
94
  ]);
60
95
 
96
+ /**
97
+ * Helper functions to identify UI states.
98
+ *
99
+ * These functions explicitly describe when each UI representation should be applied,
100
+ * making the component logic more declarative and maintainable.
101
+ * Priority order: error (highest) > disabled/readonly > default
102
+ */
103
+ const isError = (p: typeof props) => !!p.error?.value;
104
+ const isDisabled = (p: typeof props) => !!p.disabled?.value || !!p.readonly?.value;
105
+ const isDefault = (p: typeof props) => !p.error?.value && !p.disabled?.value && !p.readonly?.value;
106
+
107
+ /**
108
+ * Evaluates container styles based on props with priority order:
109
+ * 1. error (highest priority)
110
+ * 2. disabled/readonly (same styling)
111
+ * 3. default
112
+ *
113
+ * Focus states are handled separately:
114
+ * - error+focus: border-semantic-error-300
115
+ * - default+focus: border-blue-600
116
+ */
61
117
  const evaluateProps = () => {
62
118
  switch (true) {
63
- case props.disabled?.value:
119
+ case isError(props):
120
+ return "border-semantic-error-200 has-[:focus]:border-semantic-error-300 bg-core-white text-core-black cursor-text";
121
+
122
+ case isDisabled(props):
64
123
  return "bg-grey-100 border-grey-100 text-grey-300 cursor-not-allowed";
65
- case props.error?.value:
66
- return "border-semantic-error bg-white text-core-black cursor-text";
67
- default:
68
- return "border-grey-300 bg-white text-core-black cursor-text";
124
+
125
+ case isDefault(props):
126
+ return "border-grey-300 has-[:focus]:border-blue-600 bg-core-white text-core-black cursor-text";
69
127
  }
70
128
  };
71
129
 
package/src/utils.ts ADDED
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Utility functions for the Fiscozen Input component library.
3
+ *
4
+ * @module @fiscozen/input/utils
5
+ */
6
+
7
+ import type { InputEnvironment } from "./types";
8
+
9
+ type InputSize = "sm" | "md" | "lg";
10
+
11
+ /**
12
+ * Maps deprecated InputSize to InputEnvironment
13
+ *
14
+ * Used for backward compatibility when size prop is provided instead of environment.
15
+ * Size values map to environments: sm/md → backoffice, lg → frontoffice
16
+ */
17
+ export const sizeToEnvironmentMapping: Record<InputSize, InputEnvironment> = {
18
+ sm: "backoffice",
19
+ md: "backoffice",
20
+ lg: "frontoffice",
21
+ };
22
+
23
+ /**
24
+ * Internal helper function to generate unique IDs with a given prefix.
25
+ *
26
+ * The ID is composed of:
27
+ * - Prefix string (e.g., "fz-input")
28
+ * - Obfuscated timestamp (Date.now() - epoch offset)
29
+ * - Random alphanumeric suffix (5 characters)
30
+ *
31
+ * This strategy ensures uniqueness through:
32
+ * - 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)
35
+ *
36
+ * @param prefix - The prefix to use for the generated ID
37
+ * @returns Unique ID with the specified prefix
38
+ *
39
+ * @internal
40
+ *
41
+ * @example
42
+ * generateId("fz-input") // "fz-input-97123456-a8d3k"
43
+ */
44
+ function generateId(prefix: string): string {
45
+ // Obfuscate timestamp (Sept 13, 2020 offset) for shorter IDs
46
+ 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}`;
50
+ }
51
+
52
+ /**
53
+ * Generates a unique ID for input components.
54
+ *
55
+ * @returns Unique input ID with "fz-input" prefix
56
+ *
57
+ * @example
58
+ * generateInputId() // "fz-input-97123456-a8d3k"
59
+ * generateInputId() // "fz-input-97123457-k2m9p"
60
+ */
61
+ export function generateInputId(): string {
62
+ return generateId("fz-input");
63
+ }
64
+
@@ -0,0 +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"}