plugin-ui-for-kzt 0.0.62 → 0.0.64

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 (38) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/dist/components/BaseBadge/BaseBadge.vue.d.ts +1 -1
  3. package/dist/components/BaseButton/BaseButton.vue.d.ts +2 -6
  4. package/dist/components/BaseCalendar/BaseCalendar.vue.d.ts +2 -2
  5. package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +2 -6
  6. package/dist/components/BaseDropdown/BaseDropdown.vue.d.ts +2 -6
  7. package/dist/components/BaseField/BaseField.vue.d.ts +3 -3
  8. package/dist/components/BaseInput/BaseInput.vue.d.ts +2 -2
  9. package/dist/components/BaseInputCalendar/BaseInputCalendar.vue.d.ts +2 -2
  10. package/dist/components/BaseInputCurrency/BaseInputCurrency.vue.d.ts +3 -3
  11. package/dist/components/BaseInputEmail/BaseInputEmail.vue.d.ts +2 -2
  12. package/dist/components/BaseInputPhone/BaseInputPhone.vue.d.ts +2 -2
  13. package/dist/components/BaseOpenedListItem/BaseOpenedListItem.vue.d.ts +2 -6
  14. package/dist/components/BasePagination/BasePagination.vue.d.ts +1 -1
  15. package/dist/components/BaseRadio/BaseRadio.vue.d.ts +2 -6
  16. package/dist/components/BaseSegmentedButtons/BaseSegmentedButtons.vue.d.ts +2 -6
  17. package/dist/components/BaseSelect/BaseSelect.vue.d.ts +5 -13
  18. package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +2 -2
  19. package/dist/components/BaseToggle/BaseToggle.vue.d.ts +2 -6
  20. package/dist/components/BaseTooltip/BaseTooltip.vue.d.ts +1 -1
  21. package/dist/components/BaseUpload/BaseUpload.vue.d.ts +2 -4
  22. package/dist/index.js +1 -1
  23. package/dist/sprite.svg +1 -1
  24. package/dist/store/modal.d.ts +13 -13
  25. package/dist/utils/viewPort.d.ts +5 -0
  26. package/example/App.vue +1 -0
  27. package/package.json +1 -1
  28. package/src/assets/icons/upload-2.svg +7 -0
  29. package/src/assets/icons/upload.svg +3 -3
  30. package/src/components/BaseInputPhone/README.md +78 -0
  31. package/src/components/BaseModal/README.md +88 -0
  32. package/src/components/BaseSiteInput/README.md +76 -0
  33. package/src/components/BaseSwiper/README.md +88 -0
  34. package/src/components/BaseTabs/README.md +110 -0
  35. package/src/components/BaseUpload/BaseUpload.vue +132 -18
  36. package/src/components/BaseUpload/README.md +126 -0
  37. package/src/types/uploadedFile.d.ts +10 -2
  38. package/src/utils/viewPort.ts +50 -0
@@ -0,0 +1,126 @@
1
+ # BaseUpload
2
+
3
+ Компонент для загрузки файлов с поддержкой drag & drop, предпросмотра изображений и обрезки (crop).
4
+
5
+ ## Использование
6
+
7
+ ```vue
8
+ <template>
9
+ <BaseUpload
10
+ :accepted-formats="['.pdf', '.docx', '.jpg', '.png']"
11
+ :multiple="true"
12
+ :max-file-size="25 * 1024 * 1024"
13
+ title="Перетащите или кликните для загрузки"
14
+ subtitle="Допустимый формат файлов: pdf, docx, jpeg до 25 MB"
15
+ @update:files="onFilesUpdate"
16
+ @download-file="onDownload"
17
+ @remove-file="onRemove"
18
+ />
19
+ </template>
20
+ ```
21
+
22
+ ## Пропсы
23
+
24
+ | Пропс | Тип | По умолчанию | Обязательный | Описание |
25
+ |------------------|------------------|--------------------|:------------:|--------------------------------------------------------------------------|
26
+ | `acceptedFormats`| `string[]` | — | Да | Список допустимых расширений файлов, например `['.pdf', '.jpg', '.png']` |
27
+ | `title` | `string` | — | Да | Заголовок зоны загрузки |
28
+ | `subtitle` | `string` | — | Да | Подзаголовок / описание зоны загрузки |
29
+ | `multiple` | `boolean` | `true` | Нет | Разрешить загрузку нескольких файлов одновременно |
30
+ | `maxFileSize` | `number` | `26214400` (25 MB) | Нет | Максимальный допустимый размер файла в байтах |
31
+ | `enableCrop` | `boolean` | `false` | Нет | Включить обрезку изображений перед загрузкой |
32
+ | `cropTexts` | `CropTexts` | — | Нет | Тексты кнопок модального окна обрезки (`cancel`, `confirm`) |
33
+ | `files` | `UploadedFile[]` | — | Нет | Начальный список файлов (для внешнего управления состоянием) |
34
+
35
+ ### Тип `CropTexts`
36
+
37
+ ```ts
38
+ interface CropTexts {
39
+ cancel?: string;
40
+ confirm?: string;
41
+ }
42
+ ```
43
+
44
+ ### Тип `UploadedFile`
45
+
46
+ ```ts
47
+ interface UploadedFile {
48
+ name: string;
49
+ size: number;
50
+ file: File;
51
+ }
52
+ ```
53
+
54
+ ## События
55
+
56
+ | Событие | Payload | Описание |
57
+ |-----------------|--------------------|--------------------------------------------------------------------------------------------|
58
+ | `update:files` | `UploadedFile[]` | Вызывается при добавлении файла. Передаёт актуальный список всех загруженных файлов |
59
+ | `download-file` | `UploadedFile` | Вызывается при клике на скачивание файла, у которого нет локального объекта `File` (ранее загруженные с сервера файлы) |
60
+ | `remove-file` | `UploadedFile` | Вызывается при удалении файла, у которого нет `lastModified` (серверный файл) |
61
+
62
+ ## Слоты
63
+
64
+ | Слот | Описание |
65
+ |---------------|---------------------------------------|
66
+ | `title` | Переопределяет заголовок зоны загрузки |
67
+ | `description` | Переопределяет описание зоны загрузки |
68
+
69
+ ```vue
70
+ <BaseUpload :accepted-formats="['.png']" title="" subtitle="">
71
+ <template #title>Загрузите аватар</template>
72
+ <template #description>PNG, до 5 MB</template>
73
+ </BaseUpload>
74
+ ```
75
+
76
+ ## Поведение
77
+
78
+ - **Drag & Drop** — файлы можно перетаскивать в зону загрузки. При наведении зона подсвечивается синим.
79
+ - **Медиафайлы** (`.jpg`, `.jpeg`, `.png`, `.svg`) — отображаются в виде сетки миниатюр с кнопками предпросмотра (zoom) и удаления.
80
+ - **Остальные файлы** — отображаются в виде списка с именем, размером и кнопками скачивания и удаления.
81
+ - **Одиночный режим** (`multiple: false`) — при загрузке нового файла предыдущий заменяется автоматически.
82
+ - **Обрезка** (`enableCrop: true`) — перед добавлением изображения открывается модальное окно `CropModal`.
83
+ - **Валидация** — проверяется расширение файла и его размер. При ошибке под зоной загрузки отображается сообщение.
84
+ - **Внешнее управление** — при передаче пропса `files` список файлов синхронизируется с внешним состоянием через `watch`.
85
+
86
+ ## Примеры
87
+
88
+ ### Только изображения с обрезкой
89
+
90
+ ```vue
91
+ <BaseUpload
92
+ :accepted-formats="['.jpg', '.jpeg', '.png']"
93
+ :enable-crop="true"
94
+ :crop-texts="{ cancel: 'Отмена', confirm: 'Обрезать' }"
95
+ title="Загрузите фото"
96
+ subtitle="JPG, PNG до 5 MB"
97
+ @update:files="files = $event"
98
+ />
99
+ ```
100
+
101
+ ### Загрузка одного документа
102
+
103
+ ```vue
104
+ <BaseUpload
105
+ :accepted-formats="['.pdf', '.docx']"
106
+ :multiple="false"
107
+ :max-file-size="10 * 1024 * 1024"
108
+ title="Прикрепите документ"
109
+ subtitle="PDF или DOCX до 10 MB"
110
+ @update:files="files = $event"
111
+ />
112
+ ```
113
+
114
+ ### С внешним управлением файлами
115
+
116
+ ```vue
117
+ <BaseUpload
118
+ :accepted-formats="['.pdf']"
119
+ :files="initialFiles"
120
+ title="Загрузите файлы"
121
+ subtitle="PDF до 25 MB"
122
+ @update:files="onUpdate"
123
+ @download-file="onDownload"
124
+ @remove-file="onRemove"
125
+ />
126
+ ```
@@ -15,7 +15,15 @@ export interface IpropsUpload {
15
15
  maxFileSize?: number; // Максимальный размер файла в байтах
16
16
  enableCrop?: boolean; // Включить функциональность кропа для изображений
17
17
  cropTexts?: CropTexts; // Тексты для кнопок в модальном окне кропа
18
- onUpload?: (files: UploadedFile[]) => void; // Callback при загрузке файлов
19
- onError?: (error: string) => void; // Callback при ошибке загрузки
20
18
  files?: UploadedFile[];
19
+ texts?: {
20
+ instructions: string // 'Перетащите или кликните для загрузки'
21
+ allowableFormats: string; // 'Допустимый формат файлов: {formats}'
22
+ upload?: string; // 'Загрузить фото'
23
+ photo?: string; // 'Загрузить фото'
24
+ documents?: string; // 'Документы'
25
+ loadMore?: string; // 'Загрузить ещё'
26
+ errorFormat?: string; // used in error template
27
+ errorSize?: string; // used in error template
28
+ }
21
29
  }
@@ -0,0 +1,50 @@
1
+ import { readonly, ref } from 'vue';
2
+
3
+ export const breakpoints = {
4
+ mobile: 768,
5
+ desktop: 1200,
6
+ };
7
+
8
+ const isMobileRef = ref<boolean>(false);
9
+
10
+ if (typeof window !== 'undefined') {
11
+ const mobileQuery = window.matchMedia(`(max-width: ${breakpoints.mobile}px)`);
12
+ const apply = (queryOrEvent: MediaQueryList | MediaQueryListEvent) =>
13
+ (isMobileRef.value =
14
+ 'matches' in queryOrEvent
15
+ ? queryOrEvent.matches
16
+ : // @ts-ignore
17
+ ((queryOrEvent as MediaQueryListEvent).currentTarget?.matches ??
18
+ false));
19
+
20
+ apply(mobileQuery);
21
+ mobileQuery.addEventListener?.('change', apply);
22
+ mobileQuery.addListener?.(apply);
23
+
24
+ // HMR cleanup
25
+ const cleanup = () => {
26
+ mobileQuery.removeEventListener?.('change', apply);
27
+ mobileQuery.removeListener?.(apply);
28
+ };
29
+
30
+ const webpackHot = (
31
+ import.meta as ImportMeta & {
32
+ webpackHot?: { dispose: (callback: () => void) => void };
33
+ }
34
+ )?.webpackHot;
35
+ if (webpackHot) {
36
+ webpackHot.dispose(cleanup);
37
+ } else {
38
+ const modAny =
39
+ typeof module !== 'undefined'
40
+ ? (module as NodeModule & {
41
+ hot?: { dispose: (callback: () => void) => void };
42
+ })
43
+ : undefined;
44
+ if (modAny?.hot) {
45
+ modAny.hot.dispose(cleanup);
46
+ }
47
+ }
48
+ }
49
+
50
+ export const isMobile = readonly(isMobileRef);