@finema/core 2.28.0 → 2.30.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.
Files changed (34) hide show
  1. package/README.md +79 -79
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +1 -1
  4. package/dist/runtime/components/Form/FieldWrapper.vue +13 -13
  5. package/dist/runtime/components/Form/Fields.vue +18 -13
  6. package/dist/runtime/components/Form/InputCheckbox/index.vue +18 -18
  7. package/dist/runtime/components/Form/InputDateTime/index.vue +51 -51
  8. package/dist/runtime/components/Form/InputNumber/index.vue +20 -20
  9. package/dist/runtime/components/Form/InputSelectMultiple/index.vue +43 -43
  10. package/dist/runtime/components/Form/InputText/index.vue +3 -0
  11. package/dist/runtime/components/Form/InputTextarea/index.vue +18 -18
  12. package/dist/runtime/components/Form/InputTime/index.vue +106 -0
  13. package/dist/runtime/components/Form/InputTime/index.vue.d.ts +11 -0
  14. package/dist/runtime/components/Form/InputTime/types.d.ts +17 -0
  15. package/dist/runtime/components/Form/InputTime/types.js +0 -0
  16. package/dist/runtime/components/Form/InputToggle/index.vue +17 -17
  17. package/dist/runtime/components/Form/InputUploadDropzone/index.vue +30 -30
  18. package/dist/runtime/components/Form/fileState/EmptyState.vue +21 -21
  19. package/dist/runtime/components/Form/fileState/FailedState.vue +33 -33
  20. package/dist/runtime/components/Form/fileState/LoadingState.vue +24 -24
  21. package/dist/runtime/components/Form/fileState/PreviewModal.vue +23 -23
  22. package/dist/runtime/components/Form/index.vue +5 -5
  23. package/dist/runtime/components/Form/types.d.ts +3 -1
  24. package/dist/runtime/components/Form/types.js +1 -0
  25. package/dist/runtime/components/Image.vue +28 -28
  26. package/dist/runtime/components/Log/index.vue +17 -17
  27. package/dist/runtime/components/Table/ColumnDate.vue +1 -1
  28. package/dist/runtime/components/Table/ColumnDateTime.vue +1 -1
  29. package/dist/runtime/components/Table/ColumnImage.vue +4 -4
  30. package/dist/runtime/components/Table/ColumnText.vue +1 -1
  31. package/dist/runtime/server/tsconfig.json +3 -3
  32. package/dist/runtime/utils/TimeHelper.d.ts +3 -3
  33. package/dist/runtime/utils/TimeHelper.js +6 -6
  34. package/package.json +2 -2
package/README.md CHANGED
@@ -1,79 +1,79 @@
1
- <!--
2
- Get your module up and running quickly.
3
-
4
- Find and replace all on all files (CMD+SHIFT+F):
5
- - Name: Finema UI Kit (Note: package.json has name: @finema/core, consider aligning these)
6
- - Package name: @finema/core
7
- - Description: A comprehensive UI kit for Finema projects.
8
- -->
9
-
10
- # Finema UI Kit
11
-
12
- [![npm version][npm-version-src]][npm-version-href]
13
- [![npm downloads][npm-downloads-src]][npm-downloads-href]
14
- [![License][license-src]][license-href]
15
- [![Nuxt][nuxt-src]][nuxt-href]
16
-
17
- A comprehensive UI kit for building consistent and beautiful user interfaces for Finema projects, designed to integrate seamlessly with Nuxt. This package is named `@finema/core` on npm.
18
-
19
- - [✨ &nbsp;Release Notes](/CHANGELOG.md)
20
- - [📖 &nbsp;Storybook](https://your-storybook-url.com) <!-- Add a link to your Storybook -->
21
- - [đŸ•šī¸ &nbsp;Playground](#playground)
22
-
23
- ## Features
24
-
25
- <!-- Highlight some of the features your UI kit provides here -->
26
- - 🎨 &nbsp;Wide range of customizable components, built for Vue and Nuxt
27
- - 📱 &nbsp;Responsive design out-of-the-box
28
- - â™ŋ &nbsp;Accessibility focused
29
- - đŸ› ī¸ &nbsp;Easy to integrate and use with Nuxt auto-import capabilities
30
-
31
- ## 🚀 Installation
32
-
33
- Install the UI kit in your project using npm or yarn:
34
-
35
- ```bash
36
- npm install @finema/core
37
- ```
38
-
39
- or
40
-
41
- ```bash
42
- yarn add @finema/core
43
- ```
44
-
45
- ## đŸ› ī¸ Available Scripts
46
-
47
- In the project directory, you can run the following scripts:
48
-
49
- - `npm run dev` or `yarn dev`: Runs the playground app in development mode.
50
- - `npm run dev:build` or `yarn dev:build`: Builds the playground app.
51
- - `npm run dev:prepare` or `yarn dev:prepare`: Prepares the development environment.
52
- - `npm run lint` or `yarn lint`: Lints the codebase.
53
- - `npm run test` or `yarn test`: Runs tests.
54
- - `npm run release` or `yarn release`: Creates a new release (lints, tests, builds, publishes).
55
-
56
- ## đŸ•šī¸ Playground
57
-
58
- This project includes a `playground` directory that you can use to test and experiment with the UI components.
59
-
60
- To run the playground:
61
- 1. Navigate to the `playground` directory.
62
- 2. Install dependencies if you haven't already (`npm install` or `yarn install`).
63
- 3. Run `npm run dev` or `yarn dev`.
64
-
65
- ## 🤝 Contributing
66
-
67
- Contributions are welcome! Please refer to the `CONTRIBUTING.md` file for guidelines. (You'll need to create this file).
68
-
69
- <!--
70
- Badge URLs - Keep these at the bottom of the file for better readability
71
- -->
72
- [npm-version-src]: https://img.shields.io/npm/v/@finema/core.svg
73
- [npm-version-href]: https://npmjs.com/package/@finema/core
74
- [npm-downloads-src]: https://img.shields.io/npm/dm/@finema/core.svg
75
- [npm-downloads-href]: https://npmjs.com/package/@finema/core
76
- [license-src]: https://img.shields.io/npm/l/@finema/core.svg
77
- [license-href]: https://npmjs.com/package/@finema/core
78
- [nuxt-src]: https://img.shields.io/badge/Nuxt-00DC82?logo=nuxt.js
79
- [nuxt-href]: https://nuxt.com
1
+ <!--
2
+ Get your module up and running quickly.
3
+
4
+ Find and replace all on all files (CMD+SHIFT+F):
5
+ - Name: Finema UI Kit (Note: package.json has name: @finema/core, consider aligning these)
6
+ - Package name: @finema/core
7
+ - Description: A comprehensive UI kit for Finema projects.
8
+ -->
9
+
10
+ # Finema UI Kit
11
+
12
+ [![npm version][npm-version-src]][npm-version-href]
13
+ [![npm downloads][npm-downloads-src]][npm-downloads-href]
14
+ [![License][license-src]][license-href]
15
+ [![Nuxt][nuxt-src]][nuxt-href]
16
+
17
+ A comprehensive UI kit for building consistent and beautiful user interfaces for Finema projects, designed to integrate seamlessly with Nuxt. This package is named `@finema/core` on npm.
18
+
19
+ - [✨ &nbsp;Release Notes](/CHANGELOG.md)
20
+ - [📖 &nbsp;Storybook](https://your-storybook-url.com) <!-- Add a link to your Storybook -->
21
+ - [đŸ•šī¸ &nbsp;Playground](#playground)
22
+
23
+ ## Features
24
+
25
+ <!-- Highlight some of the features your UI kit provides here -->
26
+ - 🎨 &nbsp;Wide range of customizable components, built for Vue and Nuxt
27
+ - 📱 &nbsp;Responsive design out-of-the-box
28
+ - â™ŋ &nbsp;Accessibility focused
29
+ - đŸ› ī¸ &nbsp;Easy to integrate and use with Nuxt auto-import capabilities
30
+
31
+ ## 🚀 Installation
32
+
33
+ Install the UI kit in your project using npm or yarn:
34
+
35
+ ```bash
36
+ npm install @finema/core
37
+ ```
38
+
39
+ or
40
+
41
+ ```bash
42
+ yarn add @finema/core
43
+ ```
44
+
45
+ ## đŸ› ī¸ Available Scripts
46
+
47
+ In the project directory, you can run the following scripts:
48
+
49
+ - `npm run dev` or `yarn dev`: Runs the playground app in development mode.
50
+ - `npm run dev:build` or `yarn dev:build`: Builds the playground app.
51
+ - `npm run dev:prepare` or `yarn dev:prepare`: Prepares the development environment.
52
+ - `npm run lint` or `yarn lint`: Lints the codebase.
53
+ - `npm run test` or `yarn test`: Runs tests.
54
+ - `npm run release` or `yarn release`: Creates a new release (lints, tests, builds, publishes).
55
+
56
+ ## đŸ•šī¸ Playground
57
+
58
+ This project includes a `playground` directory that you can use to test and experiment with the UI components.
59
+
60
+ To run the playground:
61
+ 1. Navigate to the `playground` directory.
62
+ 2. Install dependencies if you haven't already (`npm install` or `yarn install`).
63
+ 3. Run `npm run dev` or `yarn dev`.
64
+
65
+ ## 🤝 Contributing
66
+
67
+ Contributions are welcome! Please refer to the `CONTRIBUTING.md` file for guidelines. (You'll need to create this file).
68
+
69
+ <!--
70
+ Badge URLs - Keep these at the bottom of the file for better readability
71
+ -->
72
+ [npm-version-src]: https://img.shields.io/npm/v/@finema/core.svg
73
+ [npm-version-href]: https://npmjs.com/package/@finema/core
74
+ [npm-downloads-src]: https://img.shields.io/npm/dm/@finema/core.svg
75
+ [npm-downloads-href]: https://npmjs.com/package/@finema/core
76
+ [license-src]: https://img.shields.io/npm/l/@finema/core.svg
77
+ [license-href]: https://npmjs.com/package/@finema/core
78
+ [nuxt-src]: https://img.shields.io/badge/Nuxt-00DC82?logo=nuxt.js
79
+ [nuxt-href]: https://nuxt.com
package/dist/module.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finema/core",
3
- "version": "2.28.0",
3
+ "version": "2.30.0",
4
4
  "configKey": "core",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
package/dist/module.mjs CHANGED
@@ -4,7 +4,7 @@ import * as lodash from 'lodash-es';
4
4
  import * as theme from '../dist/runtime/theme/index.js';
5
5
 
6
6
  const name = "@finema/core";
7
- const version = "2.28.0";
7
+ const version = "2.30.0";
8
8
 
9
9
  const nuxtAppOptions = {
10
10
  head: {
@@ -1,17 +1,17 @@
1
1
  <template>
2
- <FormField
3
- :label="label"
4
- :name="name"
5
- :description="description"
6
- :hint="hint"
7
- :data-testid="name"
8
- :help="help"
9
- :error="errorMessage"
10
- :required="!!required"
11
- :ui="containerUi"
12
- >
13
- <slot />
14
- </FormField>
2
+ <FormField
3
+ :label="label"
4
+ :name="name"
5
+ :description="description"
6
+ :hint="hint"
7
+ :data-testid="name"
8
+ :help="help"
9
+ :error="errorMessage"
10
+ :required="!!required"
11
+ :ui="containerUi"
12
+ >
13
+ <slot />
14
+ </FormField>
15
15
  </template>
16
16
 
17
17
  <script setup>
@@ -1,22 +1,22 @@
1
1
  <template>
2
- <div
2
+ <div
3
3
  :class="[theme.base({
4
4
  class: [$props.class, ui?.base]
5
- })]"
6
- >
7
- <component
8
- :is="componentMap[option.type]?.component"
9
- v-for="option in options.filter((item) => !item.isHide)"
10
- :key="option.props.name"
11
- :class="option.class"
12
- :form="form"
5
+ })]"
6
+ >
7
+ <component
8
+ :is="componentMap[option.type]?.component"
9
+ v-for="option in options.filter((item) => !item.isHide)"
10
+ :key="option.props.name"
11
+ :class="option.class"
12
+ :form="form"
13
13
  v-bind="{
14
14
  ...getFieldBinding(option),
15
15
  ...componentMap[option.type]?.props
16
- }"
17
- v-on="option.on ?? {}"
18
- />
19
- </div>
16
+ }"
17
+ v-on="option.on ?? {}"
18
+ />
19
+ </div>
20
20
  </template>
21
21
 
22
22
  <script setup>
@@ -31,6 +31,7 @@ import FormInputSelect from "./InputSelect/index.vue";
31
31
  import FormInputSelectMultiple from "./InputSelectMultiple/index.vue";
32
32
  import FormInputRadio from "./InputRadio/index.vue";
33
33
  import FormInputDateTime from "./InputDateTime/index.vue";
34
+ import FormInputTime from "./InputTime/index.vue";
34
35
  import FormInputDateTimeRange from "./InputDateTimeRange/index.vue";
35
36
  import FormInputUploadDropzoneAuto from "./InputUploadDropzoneAuto/index.vue";
36
37
  import FormInputUploadDropzone from "./InputUploadDropzone/index.vue";
@@ -103,6 +104,10 @@ const componentMap = {
103
104
  component: FormInputDateTime,
104
105
  props: {}
105
106
  },
107
+ [INPUT_TYPES.TIME]: {
108
+ component: FormInputTime,
109
+ props: {}
110
+ },
106
111
  [INPUT_TYPES.DATE]: {
107
112
  component: FormInputDateTime,
108
113
  props: {
@@ -1,22 +1,22 @@
1
1
  <template>
2
- <FieldWrapper
3
- v-bind="wrapperProps"
4
- label=""
5
- description=""
6
- >
7
- <Checkbox
8
- :model-value="value"
9
- :disabled="wrapperProps.disabled"
10
- :name="name"
11
- :label="label"
12
- :description="description"
13
- :required="required"
14
- :variant="variant"
15
- :indicator="indicator"
16
- :ui="ui"
17
- @update:modelValue="onChange"
18
- />
19
- </FieldWrapper>
2
+ <FieldWrapper
3
+ v-bind="wrapperProps"
4
+ label=""
5
+ description=""
6
+ >
7
+ <Checkbox
8
+ :model-value="value"
9
+ :disabled="wrapperProps.disabled"
10
+ :name="name"
11
+ :label="label"
12
+ :description="description"
13
+ :required="required"
14
+ :variant="variant"
15
+ :indicator="indicator"
16
+ :ui="ui"
17
+ @update:modelValue="onChange"
18
+ />
19
+ </FieldWrapper>
20
20
  </template>
21
21
 
22
22
  <script setup>
@@ -1,60 +1,60 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <Datepicker
4
- :model-value="innerValue"
5
- :disabled="wrapperProps.disabled"
6
- cancel-text="ā¸ĸā¸āš€ā¸Ĩ⏴⏁"
7
- select-text="āš€ā¸Ĩ⏎⏭⏁"
8
- locale="th"
9
- :enable-time-picker="!disabledTime"
10
- :placeholder="wrapperProps.placeholder"
11
- :format="format"
12
- :min-date="minDate"
13
- :max-date="maxDate"
14
- :min-time="minTime"
15
- :max-time="maxTime"
16
- :start-time="startTime"
17
- :required="required"
18
- :flow="['calendar', 'time']"
19
- @update:model-value="onInput"
20
- >
21
- <template
22
- v-if="appConfig.core?.is_thai_year"
23
- #year="{ value }"
24
- >
25
- {{ value + 543 }}
26
- </template>
27
- <template
28
- v-if="appConfig.core?.is_thai_year"
29
- #year-overlay-value="{ value }"
30
- >
31
- {{ value + 543 }}
32
- </template>
33
- <template #dp-input="{ value: innerValue }">
34
- <Input
35
- :trailing-icon="innerValue ? void 0 : 'i-heroicons-calendar-days'"
36
- type="text"
37
- :disabled="wrapperProps.disabled"
38
- :model-value="innerValue"
39
- :placeholder="wrapperProps.placeholder"
40
- :readonly="true"
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <Datepicker
4
+ :model-value="innerValue"
5
+ :disabled="wrapperProps.disabled"
6
+ cancel-text="ā¸ĸā¸āš€ā¸Ĩ⏴⏁"
7
+ select-text="āš€ā¸Ĩ⏎⏭⏁"
8
+ locale="th"
9
+ :enable-time-picker="!disabledTime"
10
+ :placeholder="wrapperProps.placeholder"
11
+ :format="format"
12
+ :min-date="minDate"
13
+ :max-date="maxDate"
14
+ :min-time="minTime"
15
+ :max-time="maxTime"
16
+ :start-time="startTime"
17
+ :required="required"
18
+ :flow="['calendar', 'time']"
19
+ @update:model-value="onInput"
20
+ >
21
+ <template
22
+ v-if="appConfig.core?.is_thai_year"
23
+ #year="{ value }"
24
+ >
25
+ {{ value + 543 }}
26
+ </template>
27
+ <template
28
+ v-if="appConfig.core?.is_thai_year"
29
+ #year-overlay-value="{ value }"
30
+ >
31
+ {{ value + 543 }}
32
+ </template>
33
+ <template #dp-input="{ value: innerValue }">
34
+ <Input
35
+ :trailing-icon="innerValue ? void 0 : 'i-heroicons-calendar-days'"
36
+ type="text"
37
+ :disabled="wrapperProps.disabled"
38
+ :model-value="innerValue"
39
+ :placeholder="wrapperProps.placeholder"
40
+ :readonly="true"
41
41
  :ui="{
42
42
  base: 'cursor-pointer select-none',
43
43
  trailingIcon: 'cursor-pointer'
44
- }"
45
- />
46
- </template>
47
- <template #clear-icon="{ clear }">
48
- <Icon
49
- :name="clearIcon"
44
+ }"
45
+ />
46
+ </template>
47
+ <template #clear-icon="{ clear }">
48
+ <Icon
49
+ :name="clearIcon"
50
50
  :class="theme.clearIcon({
51
51
  class: [ui?.clearIcon]
52
- })"
53
- @click.stop="clear"
54
- />
55
- </template>
56
- </Datepicker>
57
- </FieldWrapper>
52
+ })"
53
+ @click.stop="clear"
54
+ />
55
+ </template>
56
+ </Datepicker>
57
+ </FieldWrapper>
58
58
  </template>
59
59
 
60
60
  <script setup>
@@ -1,24 +1,24 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <InputNumber
4
- :model-value="value"
5
- :disabled="wrapperProps.disabled"
6
- :name="name"
7
- :placeholder="wrapperProps.placeholder"
8
- :autofocus="!!autoFocus"
9
- :readonly="readonly"
10
- :orientation="orientation"
11
- :increment-disabled="incrementDisabled"
12
- :decrement-disabled="decrementDisabled"
13
- :min="min"
14
- :max="max"
15
- :step="step"
16
- :disable-wheel-change="disableWheelChange"
17
- :format-options="formatOptions"
18
- :ui="ui"
19
- @update:model-value="onChange"
20
- />
21
- </FieldWrapper>
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <InputNumber
4
+ :model-value="value"
5
+ :disabled="wrapperProps.disabled"
6
+ :name="name"
7
+ :placeholder="wrapperProps.placeholder"
8
+ :autofocus="!!autoFocus"
9
+ :readonly="readonly"
10
+ :orientation="orientation"
11
+ :increment-disabled="incrementDisabled"
12
+ :decrement-disabled="decrementDisabled"
13
+ :min="min"
14
+ :max="max"
15
+ :step="step"
16
+ :disable-wheel-change="disableWheelChange"
17
+ :format-options="formatOptions"
18
+ :ui="ui"
19
+ @update:model-value="onChange"
20
+ />
21
+ </FieldWrapper>
22
22
  </template>
23
23
 
24
24
  <script setup>
@@ -1,57 +1,57 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <SelectMenu
4
- :model-value="value"
5
- :items="options"
6
- multiple
7
- :placeholder="wrapperProps.placeholder"
8
- :disabled="wrapperProps.disabled"
9
- :loading="loading"
10
- :search-input="searchInput"
11
- :selected-icon="selectedIcon"
12
- value-key="value"
13
- label-key="label"
14
- :icon="icon"
15
- :ui="ui"
16
- :ignore-filter="!!$attrs.onSearch"
17
- @update:model-value="onChange"
18
- @update:searchTerm="onSearch"
19
- >
20
- <template #default="{ modelValue }">
21
- <div
22
- v-if="!ArrayHelper.isEmpty(value)"
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <SelectMenu
4
+ :model-value="value"
5
+ :items="options"
6
+ multiple
7
+ :placeholder="wrapperProps.placeholder"
8
+ :disabled="wrapperProps.disabled"
9
+ :loading="loading"
10
+ :search-input="searchInput"
11
+ :selected-icon="selectedIcon"
12
+ value-key="value"
13
+ label-key="label"
14
+ :icon="icon"
15
+ :ui="ui"
16
+ :ignore-filter="!!$attrs.onSearch"
17
+ @update:model-value="onChange"
18
+ @update:searchTerm="onSearch"
19
+ >
20
+ <template #default="{ modelValue }">
21
+ <div
22
+ v-if="!ArrayHelper.isEmpty(value)"
23
23
  :class="theme.tagsWrapper({
24
24
  class: [ui?.tagsWrapper]
25
- })"
26
- >
27
- <div
28
- v-for="_value in ArrayHelper.toArray(modelValue)"
29
- :key="_value"
25
+ })"
26
+ >
27
+ <div
28
+ v-for="_value in ArrayHelper.toArray(modelValue)"
29
+ :key="_value"
30
30
  :class="theme.tagsItem({
31
31
  class: [ui?.tagsItem]
32
- })"
33
- >
34
- <div
32
+ })"
33
+ >
34
+ <div
35
35
  :class="theme.tagsItemText({
36
36
  class: [ui?.tagsItemText]
37
- })"
38
- >
39
- {{ options.find((item) => item.value === _value)?.label || _value }}
40
- <Icon
37
+ })"
38
+ >
39
+ {{ options.find((item) => item.value === _value)?.label || _value }}
40
+ <Icon
41
41
  :name="theme.tagsItemDeleteIcon({
42
42
  class: [ui?.tagsItemDeleteIcon]
43
- })"
43
+ })"
44
44
  :class="theme.tagsItemDelete({
45
45
  class: [ui?.tagsItemDelete]
46
- })"
47
- @click.stop="handleDelete(_value)"
48
- />
49
- </div>
50
- </div>
51
- </div>
52
- </template>
53
- </SelectMenu>
54
- </FieldWrapper>
46
+ })"
47
+ @click.stop="handleDelete(_value)"
48
+ />
49
+ </div>
50
+ </div>
51
+ </div>
52
+ </template>
53
+ </SelectMenu>
54
+ </FieldWrapper>
55
55
  </template>
56
56
 
57
57
  <script setup>
@@ -177,6 +177,9 @@ const onKeydown = (event) => {
177
177
  scrollToSelectedSuggestion();
178
178
  break;
179
179
  case "Enter":
180
+ if (selectedSuggestionIndex.value === -1) {
181
+ return;
182
+ }
180
183
  event.preventDefault();
181
184
  if (selectedSuggestionIndex.value >= 0) {
182
185
  selectSuggestion(filteredSuggestions.value[selectedSuggestionIndex.value], selectedSuggestionIndex.value);
@@ -1,22 +1,22 @@
1
1
  <template>
2
- <FieldWrapper v-bind="wrapperProps">
3
- <Textarea
4
- :model-value="value"
5
- :disabled="wrapperProps.disabled"
6
- :name="name"
7
- :resize="resize"
8
- :placeholder="wrapperProps.placeholder"
9
- :autofocus="!!autoFocus"
10
- :autoresize="autoresize"
11
- :rows="rows"
12
- :maxrows="maxrows"
13
- :loading="loading"
14
- :loading-icon="loadingIcon"
15
- :readonly="readonly"
16
- :ui="ui"
17
- @update:model-value="onChange"
18
- />
19
- </FieldWrapper>
2
+ <FieldWrapper v-bind="wrapperProps">
3
+ <Textarea
4
+ :model-value="value"
5
+ :disabled="wrapperProps.disabled"
6
+ :name="name"
7
+ :resize="resize"
8
+ :placeholder="wrapperProps.placeholder"
9
+ :autofocus="!!autoFocus"
10
+ :autoresize="autoresize"
11
+ :rows="rows"
12
+ :maxrows="maxrows"
13
+ :loading="loading"
14
+ :loading-icon="loadingIcon"
15
+ :readonly="readonly"
16
+ :ui="ui"
17
+ @update:model-value="onChange"
18
+ />
19
+ </FieldWrapper>
20
20
  </template>
21
21
 
22
22
  <script setup>