quasar-ui-danx 0.4.9 → 0.4.12

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 (57) hide show
  1. package/dist/danx.es.js +6509 -6230
  2. package/dist/danx.es.js.map +1 -1
  3. package/dist/danx.umd.js +7 -7
  4. package/dist/danx.umd.js.map +1 -1
  5. package/dist/style.css +1 -1
  6. package/index.d.ts +7 -0
  7. package/index.ts +1 -0
  8. package/package.json +8 -3
  9. package/src/components/ActionTable/ActionMenu.vue +26 -31
  10. package/src/components/ActionTable/ActionTable.vue +4 -1
  11. package/src/components/ActionTable/Columns/ActionTableColumn.vue +14 -6
  12. package/src/components/ActionTable/Columns/ActionTableHeaderColumn.vue +63 -42
  13. package/src/components/ActionTable/Form/ActionForm.vue +55 -0
  14. package/src/components/ActionTable/Form/Fields/EditOnClickTextField.vue +11 -5
  15. package/src/components/ActionTable/Form/Fields/FieldLabel.vue +18 -15
  16. package/src/components/ActionTable/Form/Fields/FileUploadButton.vue +1 -0
  17. package/src/components/ActionTable/Form/Fields/LabelValueBlock.vue +44 -15
  18. package/src/components/ActionTable/Form/Fields/MultiFileField.vue +1 -1
  19. package/src/components/ActionTable/Form/Fields/MultiKeywordField.vue +12 -13
  20. package/src/components/ActionTable/Form/Fields/NumberField.vue +40 -55
  21. package/src/components/ActionTable/Form/Fields/SelectField.vue +4 -3
  22. package/src/components/ActionTable/Form/Fields/TextField.vue +31 -12
  23. package/src/components/ActionTable/Form/RenderedForm.vue +11 -10
  24. package/src/components/ActionTable/Form/index.ts +1 -0
  25. package/src/components/ActionTable/Layouts/ActionTableLayout.vue +3 -3
  26. package/src/components/ActionTable/TableSummaryRow.vue +48 -37
  27. package/src/components/ActionTable/Toolbars/ActionToolbar.vue +2 -2
  28. package/src/components/ActionTable/listControls.ts +3 -2
  29. package/src/components/Utility/Dialogs/FullscreenCarouselDialog.vue +30 -5
  30. package/src/components/Utility/Files/FilePreview.vue +72 -12
  31. package/src/components/Utility/Popovers/PopoverMenu.vue +34 -29
  32. package/src/config/index.ts +2 -1
  33. package/src/helpers/FileUpload.ts +59 -8
  34. package/src/helpers/actions.ts +27 -27
  35. package/src/helpers/download.ts +8 -2
  36. package/src/helpers/formats.ts +79 -9
  37. package/src/helpers/multiFileUpload.ts +6 -4
  38. package/src/helpers/objectStore.ts +14 -17
  39. package/src/helpers/request.ts +12 -0
  40. package/src/helpers/singleFileUpload.ts +63 -55
  41. package/src/helpers/utils.ts +11 -0
  42. package/src/index.ts +1 -0
  43. package/src/styles/danx.scss +5 -0
  44. package/src/styles/index.scss +1 -0
  45. package/src/styles/quasar-reset.scss +2 -0
  46. package/src/styles/themes/danx/action-table.scss +24 -13
  47. package/src/styles/themes/danx/forms.scss +1 -19
  48. package/src/types/actions.d.ts +13 -4
  49. package/src/types/controls.d.ts +4 -4
  50. package/src/types/fields.d.ts +10 -9
  51. package/src/types/files.d.ts +10 -5
  52. package/src/types/index.d.ts +0 -1
  53. package/src/types/requests.d.ts +2 -0
  54. package/src/types/tables.d.ts +28 -22
  55. package/src/{vue-plugin.js → vue-plugin.ts} +5 -4
  56. package/tsconfig.json +1 -0
  57. package/types/index.d.ts +2 -0
@@ -1,4 +1,4 @@
1
- import { reactive, UnwrapNestedRefs } from "vue";
1
+ import { ShallowReactive, shallowReactive } from "vue";
2
2
  import { TypedObject } from "../types";
3
3
 
4
4
  const store = new Map<string, any>();
@@ -6,27 +6,25 @@ const store = new Map<string, any>();
6
6
  /**
7
7
  * Store an object in the object store via type + id
8
8
  * Returns the stored object that should be used instead of the passed object as the returned object is shared across the system
9
- *
10
- * @param {TypedObject} newObject
11
- * @returns {TypedObject}
12
9
  */
13
- export function storeObject<T extends TypedObject>(newObject: T): UnwrapNestedRefs<T> {
10
+ export function storeObject<T extends TypedObject>(newObject: T): ShallowReactive<T> {
14
11
  const id = newObject.id || newObject.name;
15
12
  const type = newObject.__type;
16
- if (!id || !type) return reactive(newObject);
13
+ if (!id || !type) return shallowReactive(newObject);
14
+
15
+ if (!newObject.__timestamp) {
16
+ newObject.__timestamp = newObject.updated_at || 0;
17
+ }
17
18
 
18
19
  const objectKey = `${type}:${id}`;
19
20
 
20
- const oldObject: UnwrapNestedRefs<T> | undefined = store.get(objectKey);
21
+ // Retrieve the existing object if it already exists in the store
22
+ const oldObject = store.get(objectKey);
21
23
 
22
- // Apply all properties from newObject to oldObject then store and return the updated object
23
- if (oldObject) {
24
- const oldTimestamp = oldObject.__timestamp || oldObject.updated_at;
25
- const newTimestamp = newObject.__timestamp || newObject.updated_at;
26
- // If the old object is newer, do not store the new object, just return the old
27
- if (oldTimestamp && newTimestamp && newTimestamp < oldTimestamp) {
28
- return oldObject;
29
- }
24
+ // If an old object exists, and it is newer than the new object, do not store the new object, just return the old
25
+ // @ts-expect-error __timestamp is guaranteed to be set in this case on both old and new
26
+ if (oldObject && newObject.__timestamp <= oldObject.__timestamp) {
27
+ return oldObject;
30
28
  }
31
29
 
32
30
  // Recursively store all the children of the object as well
@@ -41,12 +39,11 @@ export function storeObject<T extends TypedObject>(newObject: T): UnwrapNestedRe
41
39
 
42
40
  // Update the old object with the new object properties
43
41
  if (oldObject) {
44
- // If the new object is newer, apply all properties from the new object to the old object
45
42
  Object.assign(oldObject, newObject);
46
43
  return oldObject;
47
44
  }
48
45
 
49
- const reactiveObject = reactive(newObject);
46
+ const reactiveObject = shallowReactive(newObject);
50
47
  store.set(objectKey, reactiveObject);
51
48
  return reactiveObject;
52
49
  }
@@ -1,6 +1,7 @@
1
1
  import { Ref } from "vue";
2
2
  import { danxOptions } from "../config";
3
3
  import { HttpResponse, RequestApi } from "../types";
4
+ import { sleep } from "./utils";
4
5
 
5
6
  /**
6
7
  * A simple request helper that wraps the fetch API
@@ -70,6 +71,17 @@ export const request: RequestApi = {
70
71
 
71
72
  return result;
72
73
  },
74
+
75
+ async poll(url: string, options, interval, fnUntil) {
76
+ let response;
77
+ do {
78
+ response = await request.call(url, options);
79
+ await sleep(interval);
80
+ } while (!fnUntil(response));
81
+
82
+ return response;
83
+ },
84
+
73
85
  async get(url, options) {
74
86
  return await request.call(url, {
75
87
  method: "get",
@@ -1,60 +1,68 @@
1
1
  import { computed, Ref, ref } from "vue";
2
- import { FileUpload, FileUploadOptions, UploadedFile } from "./FileUpload";
2
+ import { FileUploadOptions, UploadedFile } from "../types";
3
+ import { FileUpload } from "./FileUpload";
4
+ import { FlashMessages } from "./FlashMessages";
3
5
 
4
- interface FileUploadCallbackParams {
5
- file: UploadedFile;
6
- uploadedFile: UploadedFile;
7
- }
6
+ type FileUploadCallback = ((file: UploadedFile | null) => void) | null;
8
7
 
9
8
  export function useSingleFileUpload(options: FileUploadOptions | null = null) {
10
- const uploadedFile: Ref<UploadedFile | null> = ref(null);
11
- const onCompleteCb: Ref<Function | null> = ref(null);
12
- const onFileChangeCb: Ref<Function | null> = ref(null);
13
-
14
- const onFileSelected = (e: any) => {
15
- uploadedFile.value = null;
16
- new FileUpload(e.target?.files[0], options)
17
- .onProgress(({ file }: FileUploadCallbackParams) => {
18
- uploadedFile.value = file;
19
- onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
20
- })
21
- .onComplete(({ uploadedFile: completedFile }: FileUploadCallbackParams) => {
22
- uploadedFile.value = completedFile;
23
- onCompleteCb.value && onCompleteCb.value(uploadedFile.value);
24
- onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
25
- })
26
- .upload();
27
- };
28
-
29
- const onDrop = (e: InputEvent) => {
30
- onFileSelected({ target: { files: e.dataTransfer?.files } });
31
- };
32
-
33
- const isFileUploaded = computed(() => {
34
- return uploadedFile.value && uploadedFile.value.url;
35
- });
36
-
37
- const onFileChange = (cb: Function) => {
38
- onFileChangeCb.value = cb;
39
- };
40
-
41
- const onComplete = (cb: Function) => {
42
- onCompleteCb.value = cb;
43
- };
44
-
45
- const clearUploadedFile = () => {
46
- uploadedFile.value = null;
47
- onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
48
- onCompleteCb.value && onCompleteCb.value(uploadedFile.value);
49
- };
50
-
51
- return {
52
- isFileUploaded,
53
- clearUploadedFile,
54
- onComplete,
55
- onFileChange,
56
- onDrop,
57
- onFileSelected,
58
- uploadedFile
59
- };
9
+ const uploadedFile: Ref<UploadedFile | null | undefined> = ref(null);
10
+ const onCompleteCb: Ref<FileUploadCallback> = ref(null);
11
+ const onFileChangeCb: Ref<FileUploadCallback> = ref(null);
12
+
13
+ const onFileSelected = (e: any) => {
14
+ uploadedFile.value = null;
15
+ new FileUpload(e.target?.files[0], options)
16
+ .prepare()
17
+ .onProgress(({ file }) => {
18
+ if (file) {
19
+ uploadedFile.value = file;
20
+ onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
21
+ }
22
+ })
23
+ .onComplete(({ uploadedFile: completedFile }) => {
24
+ if (completedFile) {
25
+ uploadedFile.value = completedFile;
26
+ onCompleteCb.value && onCompleteCb.value(uploadedFile.value);
27
+ onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
28
+ }
29
+ })
30
+ .onError(({ file, error }) => {
31
+ console.error("Failed to upload", file, error);
32
+ FlashMessages.error(`Failed to upload ${file.name}: ${error}`);
33
+ })
34
+ .upload();
35
+ };
36
+
37
+ const onDrop = (e: InputEvent) => {
38
+ onFileSelected({ target: { files: e.dataTransfer?.files } });
39
+ };
40
+
41
+ const isFileUploaded = computed(() => {
42
+ return uploadedFile.value && uploadedFile.value.url;
43
+ });
44
+
45
+ const onFileChange = (cb: FileUploadCallback) => {
46
+ onFileChangeCb.value = cb;
47
+ };
48
+
49
+ const onComplete = (cb: FileUploadCallback) => {
50
+ onCompleteCb.value = cb;
51
+ };
52
+
53
+ const clearUploadedFile = () => {
54
+ uploadedFile.value = null;
55
+ onFileChangeCb.value && onFileChangeCb.value(uploadedFile.value);
56
+ onCompleteCb.value && onCompleteCb.value(uploadedFile.value);
57
+ };
58
+
59
+ return {
60
+ isFileUploaded,
61
+ clearUploadedFile,
62
+ onComplete,
63
+ onFileChange,
64
+ onDrop,
65
+ onFileSelected,
66
+ uploadedFile
67
+ };
60
68
  }
@@ -1,5 +1,7 @@
1
1
  import { Ref, watch } from "vue";
2
2
 
3
+ export { useDebounceFn } from "@vueuse/core";
4
+
3
5
  /**
4
6
  * Sleep function to be used in conjunction with async await:
5
7
  *
@@ -9,6 +11,15 @@ export function sleep(delay: number) {
9
11
  return new Promise((resolve) => setTimeout(resolve, delay));
10
12
  }
11
13
 
14
+ /**
15
+ * Poll a callback function until the result is true
16
+ */
17
+ export async function pollUntil(callback: () => any, interval = 1000) {
18
+ while (!(await callback())) {
19
+ await sleep(interval);
20
+ }
21
+ }
22
+
12
23
  /**
13
24
  * Wait for a ref to have a value and then resolve the promise
14
25
  */
package/src/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./vue-plugin";
@@ -0,0 +1,5 @@
1
+ .dx-action-table {
2
+ .dx-column-shrink {
3
+ width: 1px;
4
+ }
5
+ }
@@ -5,3 +5,4 @@
5
5
  @import "quasar-reset";
6
6
  @import "general";
7
7
  @import "transitions";
8
+ @import "danx";
@@ -58,6 +58,8 @@
58
58
  .q-field__marginal, .q-field__input, .q-field__label {
59
59
  color: inherit;
60
60
  height: auto;
61
+ min-height: 0;
62
+ line-height: inherit;
61
63
  }
62
64
  }
63
65
  }
@@ -1,19 +1,30 @@
1
+ .dx-action-table {
2
+ .dx-column-shrink {
3
+ width: 1px;
4
+ }
5
+
6
+ // Make sure the checkbox column is left aligned and always the same size
7
+ thead > tr:first-child > th:first-child, tbody > tr:not(.dx-table-summary-tr) > td:first-child {
8
+ @apply text-left w-[1px] pl-4;
9
+ }
10
+ }
11
+
1
12
  .dx-table-summary-tr {
2
- @apply bg-gray-100;
13
+ @apply bg-gray-100;
3
14
 
4
- &.has-selection {
5
- @apply bg-blue-600 text-white;
6
- }
15
+ &.has-selection {
16
+ @apply bg-blue-600 text-white;
17
+ }
7
18
 
8
- &.is-loading {
9
- @apply opacity-50;
10
- }
19
+ &.is-loading {
20
+ @apply opacity-50;
21
+ }
11
22
 
12
- .dx-table-summary-td {
13
- @apply font-bold bg-gray-100 pl-5;
23
+ .dx-table-summary-td {
24
+ @apply font-bold bg-gray-100 pl-5;
14
25
 
15
- &.has-selection {
16
- @apply bg-blue-600 text-white pl-4;
17
- }
18
- }
26
+ &.has-selection {
27
+ @apply bg-blue-600 text-white pl-4;
28
+ }
29
+ }
19
30
  }
@@ -1,5 +1,5 @@
1
1
  .dx-field-label {
2
- @apply text-xs block mb-1.5;
2
+ @apply text-xs mb-1.5 flex items-center space-x-1;
3
3
 
4
4
  .dx-field-required {
5
5
  @apply text-red-900 ml-0.5 bottom-1 relative;
@@ -10,22 +10,4 @@
10
10
  .q-field__label {
11
11
  @apply text-sm text-gray-700;
12
12
  }
13
-
14
- &.dx-number-field {
15
- &.dx-prepend-label {
16
- @apply text-xs text-black font-normal;
17
- }
18
-
19
- &.dx-no-prepend-label {
20
- @apply w-32;
21
-
22
- .q-field__native {
23
- @apply bg-white text-right;
24
- }
25
-
26
- .q-field__prepend {
27
- padding: 0;
28
- }
29
- }
30
- }
31
13
  }
@@ -18,17 +18,17 @@ export interface ActionTargetItem extends TypedObject {
18
18
  export type ActionTarget = ActionTargetItem[] | ActionTargetItem | null;
19
19
 
20
20
  export interface ActionOptions {
21
- name?: string;
21
+ name: string;
22
22
  alias?: string;
23
23
  label?: string;
24
+ icon?: string | object;
25
+ iconClass?: string | object;
24
26
  menu?: boolean;
25
27
  batch?: boolean;
26
28
  category?: string;
27
29
  class?: string;
28
30
  debounce?: number;
29
- isApplying?: boolean;
30
31
  optimistic?: boolean | ((action: ActionOptions, target: ActionTargetItem | null, input: any) => void);
31
- trigger?: (target?: ActionTarget, input?: any) => Promise<any>;
32
32
  vnode?: ((target: ActionTarget) => VNode) | any;
33
33
  enabled?: (target: object) => boolean;
34
34
  batchEnabled?: (targets: object[]) => boolean;
@@ -39,5 +39,14 @@ export interface ActionOptions {
39
39
  onBatchSuccess?: (result: any, targets: ActionTargetItem[], input: any) => any;
40
40
  onError?: (result: any, targets: ActionTarget, input: any) => any;
41
41
  onFinish?: (result: any, targets: ActionTarget, input: any) => any;
42
- __type?: string;
42
+ }
43
+
44
+ export interface ActionOptionsPartial extends ActionOptions {
45
+ name?: string;
46
+ }
47
+
48
+ export interface ResourceAction extends ActionOptions {
49
+ isApplying: boolean;
50
+ trigger: (target?: ActionTarget, input?: any) => Promise<any>;
51
+ __type: string;
43
52
  }
@@ -25,17 +25,17 @@ export interface FilterGroup {
25
25
  export interface ListControlsRoutes {
26
26
  list(pager?: ListControlsPagination): Promise<ActionTargetItem[]>;
27
27
 
28
- summary?(filter?: ListControlsFilter): Promise<object>;
28
+ summary?(filter?: ListControlsFilter): Promise<AnyObject>;
29
29
 
30
30
  details?(target: ActionTargetItem): Promise<ActionTargetItem>;
31
31
 
32
32
  more?(pager: ListControlsPagination): Promise<ActionTargetItem[]>;
33
33
 
34
- fieldOptions?(filter?: AnyObject): Promise<object>;
34
+ fieldOptions?(filter?: AnyObject): Promise<AnyObject>;
35
35
 
36
- applyAction?(action: string, target: ActionTargetItem | null, data: object): Promise<object>;
36
+ applyAction?(action: string, target: ActionTargetItem | null, data?: object): Promise<AnyObject>;
37
37
 
38
- batchAction?(action: string, targets: ActionTargetItem[], data: object): Promise<object>;
38
+ batchAction?(action: string, targets: ActionTargetItem[], data: object): Promise<AnyObject>;
39
39
 
40
40
  export?(filter?: ListControlsFilter, name?: string): Promise<void>;
41
41
  }
@@ -1,15 +1,16 @@
1
1
  import { QInputProps } from "quasar";
2
- import { FormField } from "./forms";
3
2
 
4
3
  export interface TextFieldProps {
5
- modelValue?: string,
6
- field?: FormField,
7
- type?: QInputProps["type"],
8
- label?: string,
9
- labelClass?: string,
10
- parentClass?: string,
11
- inputClass?: string,
12
- allowOverMax?: boolean,
4
+ modelValue?: string | number;
5
+ type?: QInputProps["type"];
6
+ label?: string;
7
+ required?: boolean;
8
+ requiredLabel?: string;
9
+ prependLabel?: boolean;
10
+ placeholder?: string;
11
+ labelClass?: string | object;
12
+ inputClass?: string | object;
13
+ allowOverMax?: boolean;
13
14
  maxLength?: number;
14
15
  autogrow?: boolean;
15
16
  noLabel?: boolean;
@@ -1,7 +1,10 @@
1
+ import { AnyObject, TypedObject } from "src/types/shared";
2
+
1
3
  export interface FileUploadOptions {
2
4
  directory?: string,
3
5
  createPresignedUpload?: ((path: string, name: string, mime?: string) => Promise<UploadedFile>) | null;
4
6
  completePresignedUpload?: ((fileId: string) => Promise<UploadedFile>) | null;
7
+ refreshFile?: ((fileId: string) => Promise<UploadedFile>) | null;
5
8
  }
6
9
 
7
10
  export interface XHRFileUpload {
@@ -12,11 +15,12 @@ export interface XHRFileUpload {
12
15
  body?: FormData | UploadedFile | string;
13
16
  }
14
17
 
15
- export interface UploadedFile {
16
- id: string,
18
+ export interface UploadedFile extends TypedObject {
19
+ id: string;
17
20
  resource_id?: string;
18
- name: string,
19
- size: number,
21
+ name: string;
22
+ filename?: string;
23
+ size: number;
20
24
  type: string;
21
25
  mimeType?: string;
22
26
  mime?: string;
@@ -27,6 +31,7 @@ export interface UploadedFile {
27
31
  thumb?: UploadedFile;
28
32
  optimized?: UploadedFile;
29
33
  transcodes?: UploadedFile[];
34
+ meta?: AnyObject;
30
35
  }
31
36
 
32
37
  export interface FileUploadCompleteCallbackParams {
@@ -44,7 +49,7 @@ export interface FileUploadProgressCallbackParams {
44
49
  }
45
50
 
46
51
  export interface FileUploadErrorCallbackParams {
47
- e: InputEvent;
52
+ e: InputEvent | ProgressEvent;
48
53
  file: UploadedFile;
49
54
  error: any;
50
55
  }
@@ -9,4 +9,3 @@ export * from "./forms";
9
9
  export * from "./requests";
10
10
  export * from "./shared";
11
11
  export * from "./tables";
12
-
@@ -10,6 +10,8 @@ export interface RequestApi {
10
10
  get(url: string, options?: RequestCallOptions): Promise<any>;
11
11
 
12
12
  post(url: string, data?: object, options?: RequestCallOptions): Promise<any>;
13
+
14
+ poll(url: string, options?: RequestCallOptions, interval: number, fnUntil: (response) => boolean): Promise<any>;
13
15
  }
14
16
 
15
17
  export interface HttpResponse {
@@ -2,26 +2,32 @@ import { VNode } from "vue";
2
2
  import { ActionOptions } from "./actions";
3
3
 
4
4
  export interface TableColumn {
5
- actionMenu?: ActionOptions[],
6
- align?: string,
7
- category?: string,
8
- class?: string | object,
9
- field?: string,
10
- format?: (value: any, options: any) => any,
11
- innerClass?: string | object,
12
- style?: string | object,
13
- headerStyle?: string | object,
14
- isSavingRow?: boolean | (() => boolean),
15
- label: string,
16
- maxWidth?: number,
17
- minWidth?: number,
18
- name: string,
19
- onClick?: (target: any) => void,
20
- required?: boolean,
21
- resizeable?: boolean,
22
- sortable?: boolean,
23
- sortBy?: string,
24
- sortByExpression?: string,
25
- titleColumns?: () => string[],
26
- vnode?: () => VNode | any,
5
+ actionMenu?: ActionOptions[];
6
+ align?: string;
7
+ category?: string;
8
+ class?: string | object;
9
+ field?: string;
10
+ format?: (value: any, options: any) => any;
11
+ hideContent?: boolean;
12
+ shrink?: boolean;
13
+ headerClass?: string | object;
14
+ summaryClass?: string | object;
15
+ columnClass?: string | object;
16
+ innerClass?: string | object;
17
+ style?: string | object;
18
+ headerStyle?: string | object;
19
+ isSavingRow?: boolean | (() => boolean);
20
+ label: string;
21
+ width?: number;
22
+ maxWidth?: number;
23
+ minWidth?: number;
24
+ name: string;
25
+ onClick?: (target: any) => void;
26
+ required?: boolean;
27
+ resizeable?: boolean;
28
+ sortable?: boolean;
29
+ sortBy?: string;
30
+ sortByExpression?: string;
31
+ titleColumns?: () => string[];
32
+ vnode?: (row?) => VNode | any;
27
33
  }
@@ -3,15 +3,16 @@ export * from "./helpers";
3
3
  export * from "./components";
4
4
  export * from "./svg";
5
5
 
6
+ // eslint-disable-next-line import/extensions
6
7
  import packageJson from "../package.json";
7
8
 
8
9
  const { version } = packageJson;
9
10
 
10
- function install(app) {
11
- console.log(`Installing Danx UI ${version}... Nothing to do really.`);
11
+ function install() {
12
+ console.log(`Installing Danx UI ${version}... Nothing to do really.`);
12
13
  }
13
14
 
14
15
  export {
15
- version,
16
- install
16
+ version,
17
+ install
17
18
  };
package/tsconfig.json CHANGED
@@ -25,6 +25,7 @@
25
25
  "forceConsistentCasingInFileNames": true,
26
26
  // Resolve modules using Node.js style
27
27
  "moduleResolution": "node",
28
+ "resolveJsonModule": true,
28
29
  // Allow default imports from modules with no default export
29
30
  "allowSyntheticDefaultImports": true,
30
31
  // Enables experimental support for decorators
package/types/index.d.ts CHANGED
@@ -1 +1,3 @@
1
+ declare module "quasar-ui-danx";
1
2
  export * from "../src/types";
3
+ export * from "../src";