quasar-ui-danx 0.4.1 → 0.4.3

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 (80) hide show
  1. package/dist/danx.es.js +7234 -6741
  2. package/dist/danx.es.js.map +1 -1
  3. package/dist/danx.umd.js +11 -5
  4. package/dist/danx.umd.js.map +1 -1
  5. package/dist/style.css +1 -1
  6. package/package.json +3 -1
  7. package/src/components/ActionTable/ActionTable.vue +31 -43
  8. package/src/components/ActionTable/Columns/ActionTableColumn.vue +19 -18
  9. package/src/components/ActionTable/Filters/CollapsableFiltersSidebar.vue +15 -14
  10. package/src/components/ActionTable/Filters/{FilterFieldList.vue → FilterList.vue} +26 -26
  11. package/src/components/ActionTable/Filters/FilterableField.vue +28 -31
  12. package/src/components/ActionTable/Filters/index.ts +2 -2
  13. package/src/components/ActionTable/Form/Fields/EditOnClickTextField.vue +71 -0
  14. package/src/components/ActionTable/Form/Fields/FieldLabel.vue +8 -13
  15. package/src/components/ActionTable/Form/Fields/FileUploadButton.vue +34 -33
  16. package/src/components/ActionTable/Form/Fields/MultiFileField.vue +48 -44
  17. package/src/components/ActionTable/Form/Fields/NumberField.vue +60 -59
  18. package/src/components/ActionTable/Form/Fields/SelectField.vue +124 -138
  19. package/src/components/ActionTable/Form/Fields/SelectWithChildrenField.vue +28 -33
  20. package/src/components/ActionTable/Form/Fields/SingleFileField.vue +15 -15
  21. package/src/components/ActionTable/Form/Fields/SliderNumberField.vue +45 -0
  22. package/src/components/ActionTable/Form/Fields/TextField.vue +47 -66
  23. package/src/components/ActionTable/Form/Fields/index.ts +2 -0
  24. package/src/components/ActionTable/Form/RenderedForm.vue +50 -13
  25. package/src/components/ActionTable/Form/Utilities/MaxLengthCounter.vue +17 -0
  26. package/src/components/ActionTable/Form/Utilities/index.ts +1 -0
  27. package/src/components/ActionTable/Form/index.ts +1 -0
  28. package/src/components/ActionTable/Layouts/ActionTableLayout.vue +22 -16
  29. package/src/components/ActionTable/Toolbars/ActionToolbar.vue +11 -11
  30. package/src/components/ActionTable/listControls.ts +104 -166
  31. package/src/components/ActionTable/listHelpers.ts +2 -3
  32. package/src/components/ActionTable/tableColumns.ts +53 -77
  33. package/src/components/AuditHistory/AuditHistoryItemValue.vue +26 -26
  34. package/src/components/PanelsDrawer/PanelsDrawer.vue +17 -4
  35. package/src/components/PanelsDrawer/PanelsDrawerPanels.vue +6 -11
  36. package/src/components/PanelsDrawer/PanelsDrawerTabs.vue +20 -20
  37. package/src/components/Utility/Dialogs/ConfirmActionDialog.vue +39 -0
  38. package/src/components/Utility/Dialogs/ConfirmDialog.vue +57 -117
  39. package/src/components/Utility/Dialogs/DialogLayout.vue +77 -0
  40. package/src/components/Utility/Dialogs/FullscreenCarouselDialog.vue +42 -36
  41. package/src/components/Utility/Dialogs/InfoDialog.vue +40 -80
  42. package/src/components/Utility/Dialogs/index.ts +1 -0
  43. package/src/components/Utility/Files/FilePreview.vue +76 -73
  44. package/src/components/Utility/Layouts/ContentDrawer.vue +24 -31
  45. package/src/components/Utility/Tools/ActionVnode.vue +3 -3
  46. package/src/components/Utility/Tools/RenderVnode.vue +20 -11
  47. package/src/components/Utility/Transitions/MaxHeightTransition.vue +26 -0
  48. package/src/components/Utility/Transitions/index.ts +1 -0
  49. package/src/config/index.ts +36 -31
  50. package/src/helpers/FileUpload.ts +295 -297
  51. package/src/helpers/FlashMessages.ts +80 -71
  52. package/src/helpers/actions.ts +102 -82
  53. package/src/helpers/download.ts +189 -189
  54. package/src/helpers/downloadPdf.ts +55 -52
  55. package/src/helpers/formats.ts +151 -109
  56. package/src/helpers/index.ts +2 -0
  57. package/src/helpers/multiFileUpload.ts +72 -58
  58. package/src/helpers/objectStore.ts +52 -0
  59. package/src/helpers/request.ts +70 -51
  60. package/src/helpers/routes.ts +29 -0
  61. package/src/helpers/storage.ts +7 -3
  62. package/src/helpers/utils.ts +47 -29
  63. package/src/styles/quasar-reset.scss +94 -68
  64. package/src/styles/themes/danx/dialogs.scss +47 -0
  65. package/src/styles/themes/danx/forms.scss +18 -0
  66. package/src/styles/themes/danx/index.scss +4 -0
  67. package/src/types/actions.d.ts +43 -0
  68. package/src/types/config.d.ts +15 -0
  69. package/src/types/controls.d.ts +99 -0
  70. package/src/types/dialogs.d.ts +32 -0
  71. package/src/types/fields.d.ts +20 -0
  72. package/src/types/files.d.ts +54 -0
  73. package/src/types/formats.d.ts +4 -0
  74. package/src/{components/ActionTable/Form/form.d.ts → types/forms.d.ts} +6 -0
  75. package/src/types/index.d.ts +12 -0
  76. package/src/types/requests.d.ts +13 -0
  77. package/src/types/shared.d.ts +15 -0
  78. package/src/types/tables.d.ts +27 -0
  79. package/types/index.d.ts +1 -1
  80. /package/src/components/ActionTable/Filters/{FilterFieldItem.vue → FilterItem.vue} +0 -0
@@ -1,50 +1,69 @@
1
- import { ref, Ref } from "vue";
1
+ import { Ref } from "vue";
2
+ import { danxOptions } from "../config";
3
+ import { AnyObject } from "../types";
2
4
 
3
- interface RequestOptions {
4
- baseUrl: string;
5
- }
6
-
7
- const requestOptions: Ref<RequestOptions> = ref({
8
- baseUrl: ""
9
- });
10
5
  /**
11
6
  * A simple request helper that wraps the fetch API
12
7
  * to make GET and POST requests easier w/ JSON payloads
13
8
  */
14
9
  export const request = {
15
- configure(options: RequestOptions) {
16
- requestOptions.value = options;
17
- },
10
+ url(url: string) {
11
+ if (url.startsWith("http")) {
12
+ return url;
13
+ }
14
+ return (danxOptions.value.request?.baseUrl || "").replace(/\/$/, "") + "/" + url;
15
+ },
16
+
17
+ async call(url: string, options: RequestInit): Promise<object> {
18
+ try {
19
+ const response = await fetch(request.url(url), options);
20
+ const result = await response.json();
21
+
22
+ if (response.status === 401) {
23
+ const onUnauthorized = danxOptions.value.request?.onUnauthorized;
24
+ return onUnauthorized ? onUnauthorized(response) : {
25
+ error: true,
26
+ message: "Unauthorized"
27
+ };
28
+ }
18
29
 
19
- url(url: string) {
20
- if (url.startsWith("http")) {
21
- return url;
22
- }
23
- return requestOptions.value.baseUrl + url;
24
- },
30
+ if (response.status > 400) {
31
+ if (result.exception && !result.error) {
32
+ result.error = true;
33
+ }
34
+ }
25
35
 
26
- async get(url: string, options = {}): Promise<object> {
27
- return fetch(request.url(url), {
28
- method: "get",
29
- headers: {
30
- Accept: "application/json",
31
- "Content-Type": "application/json"
32
- },
33
- ...options
34
- }).then((r) => r.json());
35
- },
36
+ return result;
37
+ } catch (error: any) {
38
+ return {
39
+ error: error.message || "An error occurred fetching the data"
40
+ };
41
+ }
42
+ },
43
+ async get(url: string, options: RequestInit = {}): Promise<object> {
44
+ return await request.call(url, {
45
+ method: "get",
46
+ headers: {
47
+ Accept: "application/json",
48
+ "Content-Type": "application/json",
49
+ ...danxOptions.value.request?.headers
50
+ },
51
+ ...options
52
+ });
53
+ },
36
54
 
37
- async post(url: string, data = {}, options = {}) {
38
- return fetch(request.url(url), {
39
- method: "post",
40
- body: JSON.stringify(data),
41
- headers: {
42
- Accept: "application/json",
43
- "Content-Type": "application/json"
44
- },
45
- ...options
46
- }).then((r) => r.json());
47
- }
55
+ async post(url: string, data: AnyObject = {}, options: RequestInit = {}) {
56
+ return request.call(url, {
57
+ method: "post",
58
+ body: JSON.stringify(data),
59
+ headers: {
60
+ Accept: "application/json",
61
+ "Content-Type": "application/json",
62
+ ...danxOptions.value.request?.headers
63
+ },
64
+ ...options
65
+ });
66
+ }
48
67
  };
49
68
 
50
69
  /**
@@ -55,25 +74,25 @@ export const request = {
55
74
  *
56
75
  */
57
76
  export async function fetchResourceListWithSelected(fetchFn: (filter: object) => Promise<any[]>, list: Ref, id: string, filter: object): Promise<void> {
58
- // First make sure we have the selected record, so we can always add it to the list
59
- let selectedResource;
60
- if (id) {
61
- selectedResource = list.value.find((c: { id: string }) => c.id === id) || (await fetchFn({ id }))[0];
62
- }
77
+ // First make sure we have the selected record, so we can always add it to the list
78
+ let selectedResource;
79
+ if (id) {
80
+ selectedResource = list.value.find((c: { id: string }) => c.id === id) || (await fetchFn({ id }))[0];
81
+ }
63
82
 
64
- // Get the filtered campaign list
65
- list.value = await fetchFn(filter);
83
+ // Get the filtered campaign list
84
+ list.value = await fetchFn(filter);
66
85
 
67
- // If our selected campaign is not in the filtered list, add it
68
- if (selectedResource && !list.value.find((c: { id: string }) => c.id === id)) {
69
- list.value.push(selectedResource);
70
- }
86
+ // If our selected campaign is not in the filtered list, add it
87
+ if (selectedResource && !list.value.find((c: { id: string }) => c.id === id)) {
88
+ list.value.push(selectedResource);
89
+ }
71
90
  }
72
91
 
73
92
  /**
74
93
  * Returns the value of the URL parameter (if it is set)
75
94
  */
76
95
  export function getUrlParam(key: string, url?: string) {
77
- const params = new URLSearchParams(url?.replace(/.*\?/, "") || window.location.search);
78
- return params.get(key);
96
+ const params = new URLSearchParams(url?.replace(/.*\?/, "") || window.location.search);
97
+ return params.get(key);
79
98
  }
@@ -0,0 +1,29 @@
1
+ import { ActionTargetItem, AnyObject, ListControlsPagination } from "../types";
2
+ import { downloadFile } from "./downloadPdf";
3
+ import { request } from "./request";
4
+
5
+ export function useActionRoutes(baseUrl: string) {
6
+ return {
7
+ list(pager: ListControlsPagination) {
8
+ return request.post(`${baseUrl}/list`, pager);
9
+ },
10
+ summary(filter: AnyObject) {
11
+ return request.post(`${baseUrl}/summary`, { filter });
12
+ },
13
+ details(target: ActionTargetItem) {
14
+ return request.get(`${baseUrl}/${target.id}/details`);
15
+ },
16
+ fieldOptions() {
17
+ return request.get(`${baseUrl}/field-options`);
18
+ },
19
+ applyAction(action: string, target: ActionTargetItem | null, data: object) {
20
+ return request.post(`${baseUrl}/${target ? target.id : "new"}/apply-action`, { action, data });
21
+ },
22
+ batchAction(action: string, targets: ActionTargetItem[], data: object) {
23
+ return request.post(`${baseUrl}/batch-action`, { action, filter: { id: targets.map(r => r.id) }, data });
24
+ },
25
+ export(filter: AnyObject, name?: string) {
26
+ return downloadFile(`${baseUrl}/export`, name || "export.csv", { filter });
27
+ }
28
+ };
29
+ }
@@ -1,8 +1,12 @@
1
1
  export function setItem(key: string, value: any) {
2
- localStorage.setItem(key, JSON.stringify(value));
2
+ localStorage.setItem(key, JSON.stringify(value));
3
3
  }
4
4
 
5
5
  export function getItem(key: string, defaultValue: any = null) {
6
- const item = localStorage.getItem(key);
7
- return item ? JSON.parse(item) : defaultValue;
6
+ const item = localStorage.getItem(key);
7
+ try {
8
+ return item ? JSON.parse(item) : defaultValue;
9
+ } catch (e) {
10
+ return undefined;
11
+ }
8
12
  }
@@ -6,72 +6,90 @@ import { Ref, watch } from "vue";
6
6
  * eg: await sleep(5000);
7
7
  */
8
8
  export function sleep(delay: number) {
9
- return new Promise((resolve) => setTimeout(resolve, delay));
9
+ return new Promise((resolve) => setTimeout(resolve, delay));
10
10
  }
11
11
 
12
12
  /**
13
13
  * Wait for a ref to have a value and then resolve the promise
14
14
  */
15
15
  export function waitForRef(ref: Ref, value: any) {
16
- return new Promise<void>((resolve) => {
17
- watch(ref, (newValue) => {
18
- if (newValue === value) {
19
- resolve();
20
- }
21
- });
22
- });
16
+ return new Promise<void>((resolve) => {
17
+ watch(ref, (newValue) => {
18
+ if (newValue === value) {
19
+ resolve();
20
+ }
21
+ });
22
+ });
23
23
  }
24
24
 
25
25
  /**
26
26
  * Returns a number that is constrained to the given range.
27
27
  */
28
28
  export function minmax(min: number, max: number, value: number) {
29
- return Math.max(min, Math.min(max, value));
29
+ return Math.max(min, Math.min(max, value));
30
30
  }
31
31
 
32
32
  /**
33
33
  * Convert meters to miles
34
34
  */
35
35
  export function metersToMiles(meters: number) {
36
- return meters * 0.000621371;
36
+ return meters * 0.000621371;
37
37
  }
38
38
 
39
39
  /**
40
40
  * Convert miles to meters
41
41
  */
42
42
  export function milesToMeters(miles: number) {
43
- return miles / 0.000621371;
43
+ return miles / 0.000621371;
44
44
  }
45
45
 
46
46
  /**
47
47
  * Parses a string for Lat and Long coords
48
48
  */
49
49
  export function parseCoords(location: string) {
50
- const latLong = location.split(",");
50
+ const latLong = location.split(",");
51
51
 
52
- if (latLong.length === 2) {
53
- const lat = parseFloat(latLong[0].trim());
54
- const lng = parseFloat(latLong[1].trim());
52
+ if (latLong.length === 2) {
53
+ const lat = parseFloat(latLong[0].trim());
54
+ const lng = parseFloat(latLong[1].trim());
55
55
 
56
- if (!isNaN(lat) && !isNaN(lng)) {
57
- return {
58
- lat,
59
- lng
60
- };
61
- }
62
- }
56
+ if (!isNaN(lat) && !isNaN(lng)) {
57
+ return {
58
+ lat,
59
+ lng
60
+ };
61
+ }
62
+ }
63
63
 
64
- return null;
64
+ return null;
65
65
  }
66
66
 
67
67
  /**
68
68
  * Increment a name by adding a number to the end of it or incrementing the number if it already exists
69
69
  */
70
70
  export function incrementName(name: string) {
71
- name = (name || "New Item").trim();
72
- const match = name.match(/(\d+)$/);
73
- if (match) {
74
- return name.replace(/\d+$/, (match: string) => "" + (parseInt(match) + 1));
75
- }
76
- return `${name} 1`;
71
+ name = (name || "New Item").trim();
72
+ const match = name.match(/(\d+)$/);
73
+ if (match) {
74
+ return name.replace(/\d+$/, (match: string) => "" + (parseInt(match) + 1));
75
+ }
76
+ return `${name} 1`;
77
+ }
78
+
79
+ /**
80
+ * Check if a string is a valid JSON object. If an object is passed, always return true
81
+ */
82
+ export function isJSON(string: string | object) {
83
+ if (!string) {
84
+ return false;
85
+ }
86
+ if (typeof string === "object") {
87
+ return true;
88
+ }
89
+ try {
90
+ JSON.parse(string);
91
+ return true;
92
+ } catch (e) {
93
+ return false;
94
+ }
77
95
  }
@@ -1,80 +1,106 @@
1
1
  .danx-app {
2
- .q-tab {
3
- text-transform: capitalize
4
- }
5
-
6
- .q-table__card {
7
- background: inherit;
8
- color: inherit;
9
- }
10
-
11
- .q-checkbox__inner {
12
- color: inherit;
13
- }
14
-
15
- .q-toolbar {
16
- min-height: 0;
17
- padding: 0;
18
- }
19
-
20
- .q-notification__actions {
21
- color: inherit;
22
- }
23
-
24
- .q-date {
25
- min-width: 100px;
26
-
27
- .q-date__view {
28
- min-height: 0;
29
- }
30
- }
31
-
32
- .q-field {
33
- &.q-field--auto-height {
34
- .q-field__control {
35
- min-height: 0;
36
-
37
- .q-field__native {
38
- min-height: 0;
39
- color: inherit;
40
- }
41
- }
42
-
43
- }
44
-
45
- &.q-field--labeled {
46
- .q-field__control-container {
47
- padding-top: 1.1rem;
48
- }
49
- }
50
-
51
- .q-field__marginal, .q-field__input, .q-field__label {
52
- color: inherit;
53
- }
54
- }
2
+ .q-tab {
3
+ text-transform: capitalize
4
+ }
5
+
6
+ .q-table__card {
7
+ background: inherit;
8
+ color: inherit;
9
+ }
10
+
11
+ .q-checkbox__inner {
12
+ color: inherit;
13
+ }
14
+
15
+ .q-toolbar {
16
+ min-height: 0;
17
+ padding: 0;
18
+ flex-shrink: 0;
19
+ }
20
+
21
+ .q-notification__actions {
22
+ color: inherit;
23
+ }
24
+
25
+ .q-date {
26
+ min-width: 100px;
27
+
28
+ .q-date__view {
29
+ min-height: 0;
30
+ }
31
+ }
32
+
33
+ .q-field {
34
+ &.q-field--auto-height {
35
+ .q-field__control {
36
+ min-height: 0;
37
+
38
+ .q-field__native {
39
+ min-height: 0;
40
+ color: inherit;
41
+ }
42
+ }
43
+
44
+ }
45
+
46
+ &.q-field--labeled {
47
+ .q-field__control-container {
48
+ padding-top: 1.1rem;
49
+ }
50
+
51
+ &.q-textarea {
52
+ .q-field__control-container {
53
+ padding-bottom: 1.1rem;
54
+ }
55
+ }
56
+ }
57
+
58
+ .q-field__marginal, .q-field__input, .q-field__label {
59
+ color: inherit;
60
+ }
61
+ }
62
+ }
63
+
64
+ .q-btn {
65
+ text-transform: inherit;
66
+ @apply bg-inherit text-inherit min-h-[auto] p-2;
67
+
68
+ &:before {
69
+ @apply shadow-none;
70
+ }
55
71
  }
56
72
 
57
73
  .q-item {
58
- min-height: 0;
74
+ min-height: 0;
59
75
  }
60
76
 
61
77
  .q-tab-panels {
62
- overflow: visible;
63
- background: inherit;
78
+ overflow: visible;
79
+ background: inherit;
80
+
81
+ .q-panel {
82
+ overflow: visible;
64
83
 
65
- .q-panel {
66
- overflow: visible;
84
+ &.scroll {
85
+ overflow: auto;
86
+ }
67
87
 
68
- &.scroll {
69
- overflow: auto;
70
- }
88
+ .q-tab-panel {
89
+ padding: 0;
90
+ }
91
+ }
71
92
 
72
- .q-tab-panel {
73
- padding: 0;
74
- }
75
- }
93
+ &.overflow-y-auto {
94
+ overflow-y: auto;
95
+ }
96
+ }
97
+
98
+ .dx-dialog {
99
+ .q-card__section--vert {
100
+ @apply p-0;
101
+ }
102
+ }
76
103
 
77
- &.overflow-y-auto {
78
- overflow-y: auto;
79
- }
104
+ .q-banner {
105
+ @apply min-h-[auto];
80
106
  }
@@ -0,0 +1,47 @@
1
+ .dx-dialog {
2
+ .dx-dialog-card {
3
+ @apply overflow-hidden;
4
+ }
5
+
6
+ .dx-dialog-title {
7
+ @apply pl-6 pr-10 border-b border-gray-300 font-normal;
8
+ }
9
+
10
+ .dx-dialog-subtitle {
11
+ @apply mt-1 text-sm;
12
+ }
13
+
14
+ .dx-dialog-content {
15
+ @apply px-6 bg-gray-100;
16
+ }
17
+
18
+ .dx-dialog-actions {
19
+ @apply px-6 py-4 border-t border-gray-300;
20
+ }
21
+
22
+ .dx-dialog-button {
23
+ & + .dx-dialog-button {
24
+ @apply ml-4;
25
+ }
26
+ }
27
+
28
+ .dx-close-button {
29
+ @apply p-4 text-black;
30
+ }
31
+
32
+ .dx-dialog-button-confirm .dx-dialog-button {
33
+ @apply bg-blue-600 text-white;
34
+ }
35
+
36
+ .dx-dialog-button-cancel {
37
+ @apply flex-grow;
38
+ }
39
+
40
+ &.dx-info-dialog {
41
+ .dx-dialog-actions {
42
+ & > .flex-grow {
43
+ @apply text-right;
44
+ }
45
+ }
46
+ }
47
+ }
@@ -2,4 +2,22 @@
2
2
  .q-field__label {
3
3
  @apply text-sm text-gray-700;
4
4
  }
5
+
6
+ &.dx-number-field {
7
+ &.dx-prepend-label {
8
+ @apply text-xs text-black font-normal;
9
+ }
10
+
11
+ &.dx-no-prepend-label {
12
+ @apply w-32;
13
+
14
+ .q-field__native {
15
+ @apply bg-white text-right;
16
+ }
17
+
18
+ .q-field__prepend {
19
+ padding: 0;
20
+ }
21
+ }
22
+ }
5
23
  }
@@ -1,3 +1,7 @@
1
1
  @import "action-table";
2
2
  @import "buttons";
3
+ @import "dialogs";
4
+ @import "forms";
5
+ @import "panels";
6
+ @import "sidebar";
3
7
  @import "toolbar";
@@ -0,0 +1,43 @@
1
+ import { VNode } from "vue";
2
+ import { TypedObject } from "./shared";
3
+
4
+ export interface ActionPanel {
5
+ name: string | number;
6
+ label: string;
7
+ category?: string;
8
+ class?: string | object;
9
+ enabled?: boolean | (() => boolean);
10
+ tabVnode?: (activePanel: string | number) => VNode | any;
11
+ vnode: (activePanel: string) => VNode | any;
12
+ }
13
+
14
+ export interface ActionTargetItem extends TypedObject {
15
+ isSaving?: boolean;
16
+ }
17
+
18
+ export type ActionTarget = ActionTargetItem[] | ActionTargetItem | null;
19
+
20
+ export interface ActionOptions {
21
+ name?: string;
22
+ alias?: string;
23
+ label?: string;
24
+ menu?: boolean;
25
+ batch?: boolean;
26
+ category?: string;
27
+ class?: string;
28
+ debounce?: number;
29
+ isApplying?: boolean;
30
+ optimistic?: boolean | ((action: ActionOptions, target: ActionTargetItem | null, input: any) => void);
31
+ trigger?: (target?: ActionTarget, input?: any) => Promise<any>;
32
+ vnode?: ((target: ActionTarget) => VNode) | any;
33
+ enabled?: (target: object) => boolean;
34
+ batchEnabled?: (targets: object[]) => boolean;
35
+ onAction?: (action: string | null | undefined, target: ActionTargetItem | null, input: any) => Promise<any> | void;
36
+ onBatchAction?: (action: string | null | undefined, targets: ActionTargetItem[], input: any) => Promise<any>;
37
+ onStart?: (action: ActionOptions | null, targets: ActionTarget, input: any) => boolean;
38
+ onSuccess?: (result: any, targets: ActionTarget, input: any) => any;
39
+ onBatchSuccess?: (result: any, targets: ActionTargetItem[], input: any) => any;
40
+ onError?: (result: any, targets: ActionTarget, input: any) => any;
41
+ onFinish?: (result: any, targets: ActionTarget, input: any) => any;
42
+ __type?: string;
43
+ }
@@ -0,0 +1,15 @@
1
+ import { QNotifyCreateOptions } from "quasar";
2
+ import { FileUploadOptions } from "./files";
3
+ import { RequestOptions } from "./requests";
4
+
5
+ export interface DanxOptions {
6
+ tinyMceApiKey?: string;
7
+ fileUpload?: FileUploadOptions;
8
+ request?: RequestOptions,
9
+ flashMessages?: {
10
+ default?: QNotifyCreateOptions;
11
+ success?: QNotifyCreateOptions;
12
+ warning?: QNotifyCreateOptions;
13
+ error?: QNotifyCreateOptions;
14
+ };
15
+ }