sprintify-ui 0.0.5 → 0.0.7

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 (41) hide show
  1. package/README.md +13 -0
  2. package/dist/sprintify-ui.es.js +8969 -7917
  3. package/dist/types/src/components/BaseApp.vue.d.ts +48 -0
  4. package/dist/types/src/components/BaseAppDialogs.vue.d.ts +80 -0
  5. package/dist/types/src/components/BaseAppNotifications.vue.d.ts +44 -0
  6. package/dist/types/src/components/BaseAutocomplete.vue.d.ts +7 -7
  7. package/dist/types/src/components/BaseAutocompleteFetch.vue.d.ts +7 -7
  8. package/dist/types/src/components/BaseBelongsTo.vue.d.ts +4 -4
  9. package/dist/types/src/components/BaseDataIterator.vue.d.ts +4 -4
  10. package/dist/types/src/components/BaseDataTable.vue.d.ts +4 -4
  11. package/dist/types/src/components/BaseFileUploader.vue.d.ts +20 -1
  12. package/dist/types/src/components/BaseInput.vue.d.ts +4 -4
  13. package/dist/types/src/components/BaseLoadingCover.vue.d.ts +4 -4
  14. package/dist/types/src/components/BasePassword.vue.d.ts +1 -1
  15. package/dist/types/src/components/BaseSelect.vue.d.ts +1 -1
  16. package/dist/types/src/components/BaseTextarea.vue.d.ts +4 -4
  17. package/dist/types/src/components/BaseTextareaAutoresize.vue.d.ts +1 -1
  18. package/dist/types/src/components/index.d.ts +9 -1
  19. package/dist/types/src/index.d.ts +10 -4
  20. package/dist/types/src/stores/dialogs.d.ts +9 -0
  21. package/dist/types/src/stores/notifications.d.ts +10 -0
  22. package/dist/types/src/stores/systemAlerts.d.ts +9 -0
  23. package/dist/types/src/types/types.d.ts +58 -0
  24. package/package.json +1 -1
  25. package/src/components/BaseApp.vue +15 -0
  26. package/src/components/BaseAppDialogs.vue +113 -0
  27. package/src/components/BaseAppNotifications.vue +73 -0
  28. package/src/components/BaseDataTable.vue +4 -4
  29. package/src/components/BaseDatePicker.vue +5 -6
  30. package/src/components/BaseDateSelect.vue +1 -1
  31. package/src/components/BaseDialog.vue +1 -0
  32. package/src/components/BaseFileUploader.vue +5 -1
  33. package/src/components/BaseInputLabel.vue +3 -3
  34. package/src/components/index.ts +16 -1
  35. package/src/index.ts +21 -14
  36. package/src/stores/dialogs.ts +45 -0
  37. package/src/stores/notifications.ts +47 -0
  38. package/src/stores/systemAlerts.ts +33 -0
  39. package/src/types/types.ts +67 -0
  40. package/dist/types/src/components/BaseLoadingPage.vue.d.ts +0 -2
  41. package/src/components/BaseLoadingPage.vue +0 -19
@@ -6,9 +6,9 @@ declare const _default: {
6
6
  $props: Partial<{
7
7
  required: boolean;
8
8
  type: string;
9
+ name: string;
9
10
  placeholder: string;
10
11
  disabled: boolean;
11
- name: string;
12
12
  autocomplete: boolean;
13
13
  preventSubmit: boolean;
14
14
  rows: number;
@@ -51,7 +51,7 @@ declare const _default: {
51
51
  };
52
52
  }>> & {
53
53
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
54
- } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "required" | "type" | "placeholder" | "disabled" | "name" | "autocomplete" | "preventSubmit" | "rows">;
54
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, "required" | "type" | "name" | "placeholder" | "disabled" | "autocomplete" | "preventSubmit" | "rows">;
55
55
  $attrs: {
56
56
  [x: string]: unknown;
57
57
  };
@@ -107,9 +107,9 @@ declare const _default: {
107
107
  }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], string, {
108
108
  required: boolean;
109
109
  type: string;
110
+ name: string;
110
111
  placeholder: string;
111
112
  disabled: boolean;
112
- name: string;
113
113
  autocomplete: boolean;
114
114
  preventSubmit: boolean;
115
115
  rows: number;
@@ -218,9 +218,9 @@ declare const _default: {
218
218
  }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", {
219
219
  required: boolean;
220
220
  type: string;
221
+ name: string;
221
222
  placeholder: string;
222
223
  disabled: boolean;
223
- name: string;
224
224
  autocomplete: boolean;
225
225
  preventSubmit: boolean;
226
226
  rows: number;
@@ -19,7 +19,7 @@ declare const _default: import("vue").DefineComponent<{
19
19
  onKeyDown(event: any): void;
20
20
  onKeyUp(event: any): void;
21
21
  onFocus(event: any): void;
22
- }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("input" | "update:modelValue" | "focus" | "submit")[], "input" | "update:modelValue" | "focus" | "submit", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
+ }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("input" | "submit" | "update:modelValue" | "focus")[], "input" | "submit" | "update:modelValue" | "focus", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
23
23
  modelValue: {
24
24
  default: string;
25
25
  type: StringConstructor;
@@ -1,4 +1,7 @@
1
1
  import BaseAlert from './BaseAlert.vue';
2
+ import BaseApp from './BaseApp.vue';
3
+ import BaseAppDialogs from './BaseAppDialogs.vue';
4
+ import BaseAppNotifications from './BaseAppNotifications.vue';
2
5
  import BaseAutocomplete from './BaseAutocomplete.vue';
3
6
  import BaseAutocompleteFetch from './BaseAutocompleteFetch.vue';
4
7
  import BaseAvatar from './BaseAvatar.vue';
@@ -16,10 +19,15 @@ import BaseDataIterator from './BaseDataIterator.vue';
16
19
  import BaseDataTable from './BaseDataTable.vue';
17
20
  import BaseDatePicker from './BaseDatePicker.vue';
18
21
  import BaseDateSelect from './BaseDateSelect.vue';
22
+ import BaseDescriptionList from './BaseDescriptionList.vue';
23
+ import BaseDescriptionListItem from './BaseDescriptionListItem.vue';
24
+ import BaseDialog from './BaseDialog.vue';
25
+ import BaseFilePicker from './BaseFilePicker.vue';
26
+ import BaseFileUploader from './BaseFileUploader.vue';
19
27
  import { Icon as BaseIcon } from '@iconify/vue';
20
28
  import BaseLoadingCover from './BaseLoadingCover.vue';
21
29
  import BaseMenu from './BaseMenu.vue';
22
30
  import BaseMenuItem from './BaseMenuItem.vue';
23
31
  import BaseTable from './BaseTable.vue';
24
32
  import BaseTableColumn from './BaseTableColumn.vue';
25
- export { BaseAlert, BaseAutocomplete, BaseAutocompleteFetch, BaseAvatar, BaseBadge, BaseBelongsTo, BaseBoolean, BaseBreadcrumbs, BaseButton, BaseCard, BaseCardRow, BaseClipboard, BaseContainer, BaseCounter, BaseDataIterator, BaseDataTable, BaseDatePicker, BaseDateSelect, BaseIcon, BaseLoadingCover, BaseMenu, BaseMenuItem, BaseTable, BaseTableColumn, };
33
+ export { BaseAlert, BaseApp, BaseAppDialogs, BaseAppNotifications, BaseAutocomplete, BaseAutocompleteFetch, BaseAvatar, BaseBadge, BaseBelongsTo, BaseBoolean, BaseBreadcrumbs, BaseButton, BaseCard, BaseCardRow, BaseClipboard, BaseContainer, BaseCounter, BaseDataIterator, BaseDataTable, BaseDatePicker, BaseDateSelect, BaseDescriptionList, BaseDescriptionListItem, BaseDialog, BaseFilePicker, BaseFileUploader, BaseIcon, BaseLoadingCover, BaseMenu, BaseMenuItem, BaseTable, BaseTableColumn, };
@@ -1,6 +1,9 @@
1
1
  import { AxiosInstance } from 'axios';
2
2
  import { App } from 'vue';
3
3
  import { I18n } from 'vue-i18n';
4
+ import { useDialogsStore } from './stores/dialogs';
5
+ import { useNotificationsStore } from './stores/notifications';
6
+ import { useSystemAlertStore } from './stores/systemAlerts';
4
7
  declare const messages: {
5
8
  en: {
6
9
  sui: {
@@ -116,14 +119,14 @@ declare const messages: {
116
119
  };
117
120
  };
118
121
  import './assets/main.css';
119
- interface SprintifyUIConfig {
122
+ export interface Options {
120
123
  i18n?: I18n<typeof messages, {}, {}, string, true>;
121
124
  http?: AxiosInstance;
122
125
  upload_url?: string;
123
126
  formatQueryString?: (params: Record<string, any>) => string;
124
127
  parseQueryString?: (params: string) => Record<string, any>;
125
128
  }
126
- declare const pluginConfig: {
129
+ declare const config: {
127
130
  i18n: I18n<{
128
131
  en: {
129
132
  sui: {
@@ -243,7 +246,7 @@ declare const pluginConfig: {
243
246
  formatQueryString(params: Record<string, any>): string;
244
247
  parseQueryString(params: string): Record<string, any>;
245
248
  };
246
- declare function install(app: App, config?: SprintifyUIConfig): void;
249
+ declare function install(app: App, options?: Options): void;
247
250
  declare const _default: {
248
251
  install: typeof install;
249
252
  };
@@ -252,4 +255,7 @@ export * from './components';
252
255
  export * from './constants';
253
256
  export * from './utils';
254
257
  export { messages };
255
- export { pluginConfig as config };
258
+ export { config };
259
+ export { useDialogsStore };
260
+ export { useNotificationsStore };
261
+ export { useSystemAlertStore };
@@ -0,0 +1,9 @@
1
+ import { Dialog, DialogOptions } from '../types/types';
2
+ export declare const useDialogsStore: import("pinia").StoreDefinition<"dialogs", {
3
+ count: number;
4
+ dialogs: Dialog[];
5
+ }, {}, {
6
+ push(options: DialogOptions): void;
7
+ remove(dialog: Dialog): void;
8
+ clear(): void;
9
+ }>;
@@ -0,0 +1,10 @@
1
+ import { Notification, NotificationOptions } from '../types/types';
2
+ export declare const useNotificationsStore: import("pinia").StoreDefinition<"notifications", {
3
+ count: number;
4
+ notifications: Notification[];
5
+ timeouts: Record<number, number>;
6
+ }, {}, {
7
+ push(options: NotificationOptions): void;
8
+ remove(notification: Notification): void;
9
+ clear(): void;
10
+ }>;
@@ -0,0 +1,9 @@
1
+ import { SystemAlert, SystemAlertOptions } from '../types/types';
2
+ export declare const useSystemAlertStore: import("pinia").StoreDefinition<"systemAlerts", {
3
+ count: number;
4
+ systemAlerts: SystemAlert[];
5
+ }, {}, {
6
+ push(systemAlert: SystemAlertOptions): void;
7
+ remove(systemAlert: SystemAlert): void;
8
+ clear(): void;
9
+ }>;
@@ -86,3 +86,61 @@ export interface BaseTableColumn {
86
86
  thAttrs: (column: BaseTableColumn) => Record<string, any>;
87
87
  tdAttrs: (row: Row, column: BaseTableColumn) => Record<string, any>;
88
88
  }
89
+ /**
90
+ * System alert
91
+ */
92
+ export interface SystemAlertOptions {
93
+ color?: 'info' | 'success' | 'danger' | 'warning';
94
+ message: string;
95
+ to?: RouteLocationRaw;
96
+ action?: () => void;
97
+ closable?: boolean;
98
+ }
99
+ export interface SystemAlert {
100
+ id: number;
101
+ color: 'info' | 'success' | 'danger' | 'warning';
102
+ message: string;
103
+ to?: RouteLocationRaw;
104
+ action?: () => void;
105
+ closable: boolean;
106
+ }
107
+ /**
108
+ * Dialog
109
+ */
110
+ export interface DialogOptions {
111
+ color?: 'info' | 'success' | 'danger' | 'warning';
112
+ title: string;
113
+ message: string;
114
+ confirmText?: string;
115
+ cancelText?: string;
116
+ closeOnOutsideClick?: boolean;
117
+ onConfirm?: () => void;
118
+ onCancel?: () => void;
119
+ }
120
+ export interface Dialog {
121
+ id: number;
122
+ color: 'info' | 'success' | 'danger' | 'warning';
123
+ title: string;
124
+ message: string;
125
+ confirmText: string;
126
+ cancelText: string;
127
+ closeOnOutsideClick: boolean;
128
+ onConfirm: () => void;
129
+ onCancel: () => void;
130
+ }
131
+ /**
132
+ * Notification
133
+ */
134
+ export interface NotificationOptions {
135
+ title: string;
136
+ text: string;
137
+ color?: 'info' | 'success' | 'danger' | 'warning';
138
+ duration?: number;
139
+ }
140
+ export interface Notification {
141
+ id: number;
142
+ title: string;
143
+ text: string;
144
+ color: 'info' | 'success' | 'danger' | 'warning';
145
+ duration: number;
146
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sprintify-ui",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "scripts": {
5
5
  "build": "rimraf dist && vue-tsc && vite build",
6
6
  "docs:dev": "vitepress dev docs",
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <div class="min-h-full">
3
+ <slot />
4
+
5
+ <!-- Notifications
6
+ <BaseAppNotifications />-->
7
+
8
+ <!-- Dialogs -->
9
+ <BaseAppDialogs />
10
+ </div>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import BaseAppDialogs from './BaseAppDialogs.vue';
15
+ </script>
@@ -0,0 +1,113 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <Transition
4
+ appear
5
+ enter-active-class="duration-300 ease-out"
6
+ enter-from-class="opacity-0"
7
+ enter-to-class="opacity-100"
8
+ leave-active-class="duration-200 ease-in"
9
+ leave-from-class="opacity-100"
10
+ leave-to-class="opacity-0"
11
+ >
12
+ <div
13
+ v-if="dialogs.length"
14
+ class="fixed inset-0 z-20 h-full w-full bg-black bg-opacity-60"
15
+ />
16
+ </Transition>
17
+
18
+ <TransitionGroup
19
+ appear
20
+ enter-active-class="duration-300 ease-out"
21
+ enter-from-class="translate-y-10 opacity-0"
22
+ enter-to-class="translate-y-0 opacity-100"
23
+ leave-active-class="duration-200 ease-in"
24
+ leave-from-class="translate-y-0 opacity-100"
25
+ leave-to-class="translate-y-10 opacity-0"
26
+ tag="div"
27
+ >
28
+ <div
29
+ v-for="dialog in dialogs"
30
+ :key="dialog.id"
31
+ scroll-lock-target
32
+ class="fixed inset-0 z-20 transform overflow-y-auto"
33
+ >
34
+ <div
35
+ class="flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0"
36
+ >
37
+ <div
38
+ class="fixed inset-0 h-full w-full"
39
+ @click="
40
+ dialog.closeOnOutsideClick
41
+ ? cancel(dialog)
42
+ : refuseAnimation(dialog)
43
+ "
44
+ />
45
+ <BaseDialog
46
+ :class="animationClasses[dialog.id] ?? ''"
47
+ :color="dialog.color"
48
+ :title="dialog.title"
49
+ :message="dialog.message"
50
+ :confirm-text="dialog.confirmText"
51
+ :cancel-text="dialog.cancelText"
52
+ @cancel="cancel(dialog)"
53
+ @confirm="confirm(dialog)"
54
+ />
55
+ </div>
56
+ </div>
57
+ </TransitionGroup>
58
+ </Teleport>
59
+ </template>
60
+
61
+ <script lang="ts" setup>
62
+ import { Ref } from 'vue';
63
+ import { Dialog } from '@/types/types';
64
+ import BaseDialog from './BaseDialog.vue';
65
+ import { useDialogsStore } from '@/stores/dialogs';
66
+ import { disableScroll, enableScroll } from '@/utils/scrollPreventer';
67
+
68
+ const dialogStore = useDialogsStore();
69
+
70
+ const dialogs = computed(() => {
71
+ console.log(dialogStore.dialogs);
72
+
73
+ return dialogStore.dialogs;
74
+ });
75
+
76
+ function confirm(dialog: Dialog) {
77
+ dialog.onConfirm();
78
+ remove(dialog);
79
+ }
80
+
81
+ function cancel(dialog: Dialog) {
82
+ dialog.onCancel();
83
+ remove(dialog);
84
+ }
85
+
86
+ function remove(dialog: Dialog) {
87
+ dialogStore.remove(dialog);
88
+ }
89
+
90
+ const animationClasses = ref({}) as Ref<Record<string, string>>;
91
+
92
+ function refuseAnimation(dialog: Dialog) {
93
+ animationClasses.value[dialog.id] = '';
94
+ setTimeout(() => {
95
+ animationClasses.value[dialog.id] = 'animate-shake';
96
+ });
97
+ }
98
+
99
+ watch(
100
+ () => dialogs.value.length,
101
+ () => {
102
+ if (dialogs.value.length == 0) {
103
+ enableScroll();
104
+ } else {
105
+ disableScroll();
106
+ }
107
+ }
108
+ );
109
+
110
+ defineExpose({
111
+ dialogs,
112
+ });
113
+ </script>
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <div
4
+ class="pointer-events-none fixed inset-0 flex items-end justify-end p-6 md:p-8"
5
+ >
6
+ <div class="w-full max-w-sm">
7
+ <TransitionGroup
8
+ enter-active-class="transition duration-300 ease-out transform"
9
+ enter-from-class="sm:translate-y-0 sm:translate-x-4 translate-y-2 opacity-0"
10
+ enter-to-class="sm:translate-x-0 translate-y-0 opacity-100"
11
+ leave-active-class="transition duration-100 ease-in"
12
+ leave-from-class="sm:translate-x-0 translate-y-0 opacity-100"
13
+ leave-to-class="sm:translate-y-0 sm:translate-x-4 translate-y-2 opacity-0"
14
+ >
15
+ <div v-for="notification in notifications" :key="notification.id">
16
+ <div
17
+ class="mx-auto mt-4 flex w-full max-w-sm overflow-hidden rounded-lg bg-white shadow-xl"
18
+ >
19
+ <div
20
+ class="flex w-12 items-center justify-center"
21
+ :class="{
22
+ 'bg-blue-500': notification.color == 'info',
23
+ 'bg-red-500': notification.color == 'danger',
24
+ 'bg-yellow-500': notification.color == 'warning',
25
+ 'bg-green-500': notification.color == 'success',
26
+ }"
27
+ >
28
+ <svg
29
+ class="h-6 w-6 fill-current text-white"
30
+ viewBox="0 0 40 40"
31
+ xmlns="http://www.w3.org/2000/svg"
32
+ >
33
+ <path
34
+ d="M20 3.33331C10.8 3.33331 3.33337 10.8 3.33337 20C3.33337 29.2 10.8 36.6666 20 36.6666C29.2 36.6666 36.6667 29.2 36.6667 20C36.6667 10.8 29.2 3.33331 20 3.33331ZM21.6667 28.3333H18.3334V25H21.6667V28.3333ZM21.6667 21.6666H18.3334V11.6666H21.6667V21.6666Z"
35
+ />
36
+ </svg>
37
+ </div>
38
+
39
+ <div class="-mx-3 px-4 pt-2 pb-3">
40
+ <div class="mx-3">
41
+ <h3
42
+ class="mb-1 font-semibold leading-tight"
43
+ :class="{
44
+ 'text-blue-500': notification.color == 'info',
45
+ 'text-red-500': notification.color == 'danger',
46
+ 'text-yellow-500': notification.color == 'warning',
47
+ 'text-green-500': notification.color == 'success',
48
+ }"
49
+ >
50
+ {{ notification.title }}
51
+ </h3>
52
+ <p class="text-sm leading-tight text-slate-600">
53
+ {{ notification.text }}
54
+ </p>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </TransitionGroup>
60
+ </div>
61
+ </div>
62
+ </Teleport>
63
+ </template>
64
+
65
+ <script lang="ts" setup>
66
+ import { useNotificationsStore } from '@/index';
67
+
68
+ const notificationsStore = useNotificationsStore();
69
+
70
+ const notifications = computed(() => {
71
+ return notificationsStore.notifications;
72
+ });
73
+ </script>
@@ -166,7 +166,7 @@ import {
166
166
  DataTableQuery,
167
167
  MenuItemInterface,
168
168
  } from '@/types/types';
169
- //import { useDialogsStore } from '../stores/dialogs';
169
+ import { useDialogsStore } from '@/stores/dialogs';
170
170
  //import { useNotificationsStore } from '../stores/notifications';
171
171
  import BaseDataIterator from './BaseDataIterator.vue';
172
172
  import { isArray } from 'lodash';
@@ -182,7 +182,7 @@ const i18n = useI18n();
182
182
 
183
183
  const http = config.http;
184
184
 
185
- //const dialogs = useDialogsStore();
185
+ const dialogs = useDialogsStore();
186
186
  //const notifications = useNotificationsStore();
187
187
 
188
188
  const table = ref(null) as Ref<null | InstanceType<typeof BaseTable>>;
@@ -384,14 +384,14 @@ const canDelete = (row: CollectionItem): boolean => {
384
384
  };
385
385
 
386
386
  function onDeleteClick(row: CollectionItem) {
387
- /* dialogs.push({
387
+ dialogs.push({
388
388
  title: i18n.t('sui.delete_record') + '?',
389
389
  message: i18n.t('sui.delete_record_description'),
390
390
  color: 'danger',
391
391
  closeOnOutsideClick: false,
392
392
  confirmText: i18n.t('sui.yes_delete'),
393
393
  onConfirm: () => onDelete(row),
394
- }); */
394
+ });
395
395
  }
396
396
 
397
397
  const onDelete = (row: CollectionItem) => {
@@ -38,7 +38,6 @@ import { PropType, Ref } from 'vue';
38
38
  import Pikaday from 'pikaday';
39
39
  import { capitalize, padStart } from 'lodash';
40
40
  import { DateTime, Info } from 'luxon';
41
- import { config } from '@/index';
42
41
 
43
42
  const props = defineProps({
44
43
  modelValue: {
@@ -54,7 +53,7 @@ const props = defineProps({
54
53
  type: Boolean,
55
54
  },
56
55
  inputClass: {
57
- default: '',
56
+ default: 'border-slate-300',
58
57
  type: String,
59
58
  },
60
59
  minDate: {
@@ -77,17 +76,17 @@ const i18n = useI18n();
77
76
 
78
77
  const datepicker = ref(null) as Ref<HTMLInputElement | null>;
79
78
 
80
- const months = Info.months('long', { locale: config.i18n.global.locale }).map(
81
- (m) => capitalize(m)
79
+ const months = Info.months('long', { locale: i18n.locale.value }).map((m) =>
80
+ capitalize(m)
82
81
  );
83
82
  const weekdays = arrayRotate(
84
- Info.weekdays('long', { locale: config.i18n.global.locale }).map((m) =>
83
+ Info.weekdays('long', { locale: i18n.locale.value }).map((m) =>
85
84
  capitalize(m)
86
85
  ),
87
86
  true
88
87
  );
89
88
  const weekdaysShort = arrayRotate(
90
- Info.weekdays('short', { locale: config.i18n.global.locale }).map((m) =>
89
+ Info.weekdays('short', { locale: i18n.locale.value }).map((m) =>
91
90
  capitalize(m)
92
91
  ),
93
92
  true
@@ -115,7 +115,7 @@ const props = defineProps({
115
115
  type: Number,
116
116
  },
117
117
  inputClass: {
118
- default: '',
118
+ default: 'border-slate-300',
119
119
  type: String,
120
120
  },
121
121
  });
@@ -76,6 +76,7 @@
76
76
 
77
77
  <script lang="ts" setup>
78
78
  import { PropType } from 'vue';
79
+ import { Icon as BaseIcon } from '@iconify/vue';
79
80
 
80
81
  defineProps({
81
82
  color: {
@@ -43,6 +43,10 @@ const i18n = useI18n();
43
43
  //const notifications = useNotificationsStore();
44
44
 
45
45
  const props = defineProps({
46
+ url: {
47
+ default: undefined,
48
+ type: String,
49
+ },
46
50
  disabled: {
47
51
  default: false,
48
52
  type: Boolean,
@@ -131,7 +135,7 @@ async function onPictureUpload(file: File) {
131
135
  uploading.value = true;
132
136
  emit('upload:start');
133
137
 
134
- const response = await http.post(config.upload_url, formData);
138
+ const response = await http.post(props.url ?? config.upload_url, formData);
135
139
 
136
140
  const payload = response.data as UploadedFile;
137
141
  payload.original_file = file;
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <label :class="classes"
3
- >{{ label }}<span v-if="required" class="text-red-600"> *</span></label
4
- >
2
+ <label :class="classes">
3
+ {{ label }}<span v-if="required" class="text-red-600"> *</span>
4
+ </label>
5
5
  </template>
6
6
 
7
7
  <script lang="ts">
@@ -1,4 +1,7 @@
1
1
  import BaseAlert from './BaseAlert.vue';
2
+ import BaseApp from './BaseApp.vue';
3
+ import BaseAppDialogs from './BaseAppDialogs.vue';
4
+ import BaseAppNotifications from './BaseAppNotifications.vue';
2
5
  import BaseAutocomplete from './BaseAutocomplete.vue';
3
6
  import BaseAutocompleteFetch from './BaseAutocompleteFetch.vue';
4
7
  import BaseAvatar from './BaseAvatar.vue';
@@ -16,7 +19,11 @@ import BaseDataIterator from './BaseDataIterator.vue';
16
19
  import BaseDataTable from './BaseDataTable.vue';
17
20
  import BaseDatePicker from './BaseDatePicker.vue';
18
21
  import BaseDateSelect from './BaseDateSelect.vue';
19
-
22
+ import BaseDescriptionList from './BaseDescriptionList.vue';
23
+ import BaseDescriptionListItem from './BaseDescriptionListItem.vue';
24
+ import BaseDialog from './BaseDialog.vue';
25
+ import BaseFilePicker from './BaseFilePicker.vue';
26
+ import BaseFileUploader from './BaseFileUploader.vue';
20
27
  import { Icon as BaseIcon } from '@iconify/vue';
21
28
  import BaseLoadingCover from './BaseLoadingCover.vue';
22
29
  import BaseMenu from './BaseMenu.vue';
@@ -26,6 +33,9 @@ import BaseTableColumn from './BaseTableColumn.vue';
26
33
 
27
34
  export {
28
35
  BaseAlert,
36
+ BaseApp,
37
+ BaseAppDialogs,
38
+ BaseAppNotifications,
29
39
  BaseAutocomplete,
30
40
  BaseAutocompleteFetch,
31
41
  BaseAvatar,
@@ -43,6 +53,11 @@ export {
43
53
  BaseDataTable,
44
54
  BaseDatePicker,
45
55
  BaseDateSelect,
56
+ BaseDescriptionList,
57
+ BaseDescriptionListItem,
58
+ BaseDialog,
59
+ BaseFilePicker,
60
+ BaseFileUploader,
46
61
  BaseIcon,
47
62
  BaseLoadingCover,
48
63
  BaseMenu,