@inriver/inri 1.14.0 → 1.16.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 (120) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +11 -0
  3. package/.eslintrc.js +5 -5
  4. package/azure/pipelines/single-build-release.yml +20 -0
  5. package/azure/pipelines/templates/deployFramework.yml +30 -0
  6. package/azure/pipelines/templates/publishFramwork.yml +39 -0
  7. package/componentProperties.d.ts +8 -8
  8. package/configs/base-eslint-config.js +36 -36
  9. package/configs/base-tailwind-config.js +149 -149
  10. package/i18n.ts +11 -11
  11. package/index.ts +29 -29
  12. package/package.json +7 -2
  13. package/src/components/CAutoBreadcrumbs.vue +72 -72
  14. package/src/components/CBtn.vue +98 -98
  15. package/src/components/CColorPicker.vue +55 -55
  16. package/src/components/CContextMenu.vue +29 -29
  17. package/src/components/CDatePicker.vue +51 -51
  18. package/src/components/CDeleteTileBtn.vue +52 -52
  19. package/src/components/CDialog.vue +253 -253
  20. package/src/components/CDialogCloseBtn.vue +9 -9
  21. package/src/components/CDirtyCheck.vue +68 -68
  22. package/src/components/CDrawer.vue +44 -44
  23. package/src/components/CDrawerButton.vue +91 -91
  24. package/src/components/CExpansionItem.vue +57 -57
  25. package/src/components/CExpansionItemWithCheckbox.vue +41 -41
  26. package/src/components/CFileDropzone.vue +114 -114
  27. package/src/components/CGrid.vue +101 -101
  28. package/src/components/CHeader.vue +10 -10
  29. package/src/components/CHeaderLinks.vue +61 -61
  30. package/src/components/CHeaderMenuLink.vue +51 -51
  31. package/src/components/CHeaderSearch.vue +142 -142
  32. package/src/components/CIconBtn.vue +70 -70
  33. package/src/components/CMenuItem.vue +66 -66
  34. package/src/components/CPageContainer.vue +11 -11
  35. package/src/components/CPageError.vue +24 -24
  36. package/src/components/CPageSpinner.vue +18 -18
  37. package/src/components/CSearch.vue +45 -45
  38. package/src/components/CSection.vue +29 -29
  39. package/src/components/CSectionTitle.vue +8 -8
  40. package/src/components/CSelect.vue +208 -208
  41. package/src/components/CSlideEffect.vue +62 -62
  42. package/src/components/CSpinner.vue +107 -107
  43. package/src/components/CTableActions.vue +16 -16
  44. package/src/components/CTileBtn.vue +178 -178
  45. package/src/components/CTimePicker.vue +42 -42
  46. package/src/components/CToggleGridView.vue +26 -26
  47. package/src/components/CToggleSidebarBtn.vue +19 -19
  48. package/src/components/CTooltip.vue +44 -44
  49. package/src/components/CTreeNode.vue +39 -39
  50. package/src/components/cards/CBannerCard.vue +103 -103
  51. package/src/components/cards/CSmallCard.vue +149 -149
  52. package/src/components/internal-components/ConfirmDialog.vue +78 -78
  53. package/src/composables/useDialog.ts +46 -46
  54. package/src/composables/useDirtyCheck.ts +25 -25
  55. package/src/composables/useDoubleClickListener.ts +28 -28
  56. package/src/composables/useSelectable.ts +62 -62
  57. package/src/composables/useTruncateChips.ts +46 -46
  58. package/src/i18n/de/index.ts +17 -17
  59. package/src/i18n/en/index.ts +84 -84
  60. package/src/i18n/es/index.ts +7 -7
  61. package/src/i18n/fr/index.ts +7 -7
  62. package/src/init/initInriFramework.ts +37 -37
  63. package/src/init/useInriApp.ts +55 -55
  64. package/src/layouts/CLayoutBlank.vue +7 -7
  65. package/src/layouts/CLayoutWithBackButton.vue +50 -50
  66. package/src/layouts/CLayoutWithSidebars.vue +46 -46
  67. package/src/layouts/layout-fragments/CPageAutoBreadcrumbs.vue +6 -6
  68. package/src/layouts/layout-fragments/CPageBackButton.vue +18 -18
  69. package/src/layouts/layout-fragments/CPageBlank.vue +20 -20
  70. package/src/layouts/layout-fragments/CPageFlexCol.vue +5 -5
  71. package/src/layouts/layout-fragments/CPageLeftSidebar.vue +5 -5
  72. package/src/layouts/layout-fragments/CPageMainContent.vue +5 -5
  73. package/src/layouts/layout-fragments/CPageOuterWrapper.vue +5 -5
  74. package/src/layouts/layout-fragments/CPageRightSidebar.vue +5 -5
  75. package/src/layouts/layout-fragments/CPageTitle.vue +34 -34
  76. package/src/plugins/dialog.ts +45 -45
  77. package/src/plugins/errors/ErrorFactories.ts +59 -59
  78. package/src/plugins/errors/Errors.ts +156 -156
  79. package/src/plugins/errors/Exception.ts +6 -6
  80. package/src/plugins/errors/globalErrorHandler.ts +21 -21
  81. package/src/plugins/errors/handleError.ts +34 -34
  82. package/src/plugins/errors/logger.ts +16 -16
  83. package/src/plugins/errors/vueErrorHandler.ts +26 -26
  84. package/src/plugins/globalAppConfig.ts +25 -25
  85. package/src/plugins/i18n.ts +46 -46
  86. package/src/plugins/inriIcons.ts +58 -58
  87. package/src/plugins/inriverQuasarComponentConfigurations.ts +67 -67
  88. package/src/plugins/library.ts +119 -119
  89. package/src/plugins/notify.ts +153 -153
  90. package/src/plugins/quasar-user-options.ts +19 -19
  91. package/src/plugins/validationRules.ts +292 -292
  92. package/src/shims-vue.d.ts +6 -6
  93. package/src/stores/inriStore.ts +54 -54
  94. package/src/stores/interfaceLanguageStore.ts +27 -27
  95. package/src/styles/_css-variables.scss +101 -101
  96. package/src/styles/_reset.scss +67 -67
  97. package/src/styles/_transitions.scss +9 -9
  98. package/src/styles/_utils.scss +15 -15
  99. package/src/styles/components/_breadcrumbs.scss +3 -3
  100. package/src/styles/components/_checkboxes.scss +17 -17
  101. package/src/styles/components/_chips.scss +17 -17
  102. package/src/styles/components/_forms.scss +203 -203
  103. package/src/styles/components/_menu.scss +12 -12
  104. package/src/styles/components/_notifications.scss +24 -24
  105. package/src/styles/components/_q-editor.scss +14 -14
  106. package/src/styles/components/_radio-buttons.scss +17 -17
  107. package/src/styles/components/_tables.scss +92 -92
  108. package/src/styles/components/_tooltips.scss +5 -5
  109. package/src/styles/components/_tree.scss +86 -86
  110. package/src/styles/components/_truncated-chips.scss +39 -39
  111. package/src/styles/main.scss +45 -45
  112. package/src/styles/quasar.variables.scss +50 -50
  113. package/src/styles/tailwind/index.css +2 -2
  114. package/src/typings.d.ts +70 -70
  115. package/src/utils/colorUtils.ts +73 -73
  116. package/src/utils/errorUtils.ts +37 -37
  117. package/src/utils/fileUtils.ts +57 -57
  118. package/src/utils/helpers.ts +6 -6
  119. package/src/utils/routeUtils.ts +23 -23
  120. package/tsconfig.json +34 -34
@@ -1,142 +1,142 @@
1
- <template>
2
- <c-tile-btn
3
- icon="inri-search"
4
- @click="toggleSearch"
5
- />
6
- <div class="bg-grey-lighter h-full flex content-center ">
7
- <transition name="search-transition">
8
- <div
9
- v-if="showSearch"
10
- class="pr-5"
11
- >
12
- <q-select
13
- ref="selectRef"
14
- v-model="selectedVal"
15
- v-bind="$inri.inputDense"
16
- class="w-74"
17
- autofocus
18
- use-input
19
- hide-selected
20
- hide-dropdown-icon
21
- :options="options"
22
- :loading="isLoading"
23
- @filter="filter"
24
- @blur="clearSearch"
25
- @popup-show="onOpen"
26
- @update:model-value="selectItem"
27
- >
28
- <template #append>
29
- <q-icon
30
- v-if="modelValue.length && !isLoading"
31
- name="mdi-close"
32
- color="grey-darker"
33
- class="cursor-pointer"
34
- size="18px"
35
- @click.stop="clearSearch"
36
- />
37
- <q-icon
38
- v-else-if="!isLoading"
39
- name="inri-search"
40
- color="grey-dark"
41
- size="18px"
42
- />
43
- </template>
44
-
45
- <template
46
- v-if="modelValue.length && !isLoading"
47
- #no-option
48
- >
49
- <q-item>
50
- <q-item-section>
51
- No results
52
- </q-item-section>
53
- </q-item>
54
- </template>
55
-
56
- <template #option="{ itemProps, opt }">
57
- <q-item
58
- v-bind="itemProps"
59
- :to="opt"
60
- >
61
- <q-item-section>
62
- {{ opt.meta.title }}
63
- </q-item-section>
64
- </q-item>
65
- </template>
66
- </q-select>
67
- </div>
68
- </transition>
69
- </div>
70
- </template>
71
-
72
- <script setup lang="ts">
73
- import { ref, watch } from 'vue'
74
- import { useRouter } from 'vue-router'
75
-
76
- const emits = defineEmits(['update:modelValue'])
77
-
78
- const props = defineProps({
79
- modelValue: {
80
- type: String,
81
- default: '',
82
- },
83
- options: {
84
- type: Array,
85
- default: undefined,
86
- },
87
- isLoading: Boolean,
88
- })
89
-
90
- const showSearch = ref(false)
91
- const selectedVal = ref(null)
92
- const selectRef = ref()
93
- const router = useRouter()
94
-
95
- watch(() => props.options, () => {
96
- selectRef.value.refresh()
97
- })
98
-
99
- function onOpen () {
100
- // Set first item as selected
101
- selectRef.value.setOptionIndex(-1)
102
- selectRef.value.moveOptionSelection(1, true)
103
- }
104
-
105
- function toggleSearch () {
106
- showSearch.value = !showSearch.value
107
- }
108
-
109
- function clearSearch () {
110
- selectRef.value.updateInputValue('', true, true)
111
- emits('update:modelValue', '')
112
- }
113
-
114
- function filter (val, update) {
115
- update(
116
- () => {
117
- emits('update:modelValue', val)
118
- },
119
- )
120
- }
121
-
122
- function selectItem () {
123
- if (selectedVal.value) {
124
- clearSearch()
125
- showSearch.value = false
126
- router.push(selectedVal.value)
127
- }
128
- }
129
- </script>
130
-
131
- <style>
132
- .search-transition-enter-active,
133
- .search-transition-leave-active {
134
- margin-right: 0;
135
- transition: all 0.2s ease-in-out;
136
- }
137
-
138
- .search-transition-enter-from,
139
- .search-transition-leave-to {
140
- margin-right: -320px;
141
- }
142
- </style>
1
+ <template>
2
+ <c-tile-btn
3
+ icon="inri-search"
4
+ @click="toggleSearch"
5
+ />
6
+ <div class="bg-grey-lighter h-full flex content-center ">
7
+ <transition name="search-transition">
8
+ <div
9
+ v-if="showSearch"
10
+ class="pr-5"
11
+ >
12
+ <q-select
13
+ ref="selectRef"
14
+ v-model="selectedVal"
15
+ v-bind="$inri.inputDense"
16
+ class="w-74"
17
+ autofocus
18
+ use-input
19
+ hide-selected
20
+ hide-dropdown-icon
21
+ :options="options"
22
+ :loading="isLoading"
23
+ @filter="filter"
24
+ @blur="clearSearch"
25
+ @popup-show="onOpen"
26
+ @update:model-value="selectItem"
27
+ >
28
+ <template #append>
29
+ <q-icon
30
+ v-if="modelValue.length && !isLoading"
31
+ name="mdi-close"
32
+ color="grey-darker"
33
+ class="cursor-pointer"
34
+ size="18px"
35
+ @click.stop="clearSearch"
36
+ />
37
+ <q-icon
38
+ v-else-if="!isLoading"
39
+ name="inri-search"
40
+ color="grey-dark"
41
+ size="18px"
42
+ />
43
+ </template>
44
+
45
+ <template
46
+ v-if="modelValue.length && !isLoading"
47
+ #no-option
48
+ >
49
+ <q-item>
50
+ <q-item-section>
51
+ No results
52
+ </q-item-section>
53
+ </q-item>
54
+ </template>
55
+
56
+ <template #option="{ itemProps, opt }">
57
+ <q-item
58
+ v-bind="itemProps"
59
+ :to="opt"
60
+ >
61
+ <q-item-section>
62
+ {{ opt.meta.title }}
63
+ </q-item-section>
64
+ </q-item>
65
+ </template>
66
+ </q-select>
67
+ </div>
68
+ </transition>
69
+ </div>
70
+ </template>
71
+
72
+ <script setup lang="ts">
73
+ import { ref, watch } from 'vue'
74
+ import { useRouter } from 'vue-router'
75
+
76
+ const emits = defineEmits(['update:modelValue'])
77
+
78
+ const props = defineProps({
79
+ modelValue: {
80
+ type: String,
81
+ default: '',
82
+ },
83
+ options: {
84
+ type: Array,
85
+ default: undefined,
86
+ },
87
+ isLoading: Boolean,
88
+ })
89
+
90
+ const showSearch = ref(false)
91
+ const selectedVal = ref(null)
92
+ const selectRef = ref()
93
+ const router = useRouter()
94
+
95
+ watch(() => props.options, () => {
96
+ selectRef.value.refresh()
97
+ })
98
+
99
+ function onOpen () {
100
+ // Set first item as selected
101
+ selectRef.value.setOptionIndex(-1)
102
+ selectRef.value.moveOptionSelection(1, true)
103
+ }
104
+
105
+ function toggleSearch () {
106
+ showSearch.value = !showSearch.value
107
+ }
108
+
109
+ function clearSearch () {
110
+ selectRef.value.updateInputValue('', true, true)
111
+ emits('update:modelValue', '')
112
+ }
113
+
114
+ function filter (val, update) {
115
+ update(
116
+ () => {
117
+ emits('update:modelValue', val)
118
+ },
119
+ )
120
+ }
121
+
122
+ function selectItem () {
123
+ if (selectedVal.value) {
124
+ clearSearch()
125
+ showSearch.value = false
126
+ router.push(selectedVal.value)
127
+ }
128
+ }
129
+ </script>
130
+
131
+ <style>
132
+ .search-transition-enter-active,
133
+ .search-transition-leave-active {
134
+ margin-right: 0;
135
+ transition: all 0.2s ease-in-out;
136
+ }
137
+
138
+ .search-transition-enter-from,
139
+ .search-transition-leave-to {
140
+ margin-right: -320px;
141
+ }
142
+ </style>
@@ -1,70 +1,70 @@
1
- <template>
2
- <q-btn
3
- class="c-icon-btn"
4
- flat
5
- round
6
- :color="color"
7
- :to="to"
8
- :icon="icon"
9
- :aria-label="tooltip || tooltipLeft || tooltipRight"
10
- >
11
- <c-tooltip v-if="tooltip">
12
- {{ tooltip }}
13
- </c-tooltip>
14
-
15
- <c-tooltip
16
- v-if="tooltipLeft"
17
- left
18
- >
19
- {{ tooltipLeft }}
20
- </c-tooltip>
21
-
22
- <c-tooltip
23
- v-if="tooltipRight"
24
- right
25
- >
26
- {{ tooltipRight }}
27
- </c-tooltip>
28
- <slot />
29
- </q-btn>
30
- </template>
31
-
32
- <script setup lang="ts">
33
- defineProps({
34
- color: {
35
- type: String,
36
- default: undefined,
37
- },
38
- to: {
39
- type: [String, Object],
40
- default: undefined,
41
- },
42
- icon: {
43
- type: String,
44
- default: undefined,
45
- },
46
- tooltip: {
47
- type: String,
48
- default: undefined,
49
- },
50
- tooltipLeft: {
51
- type: String,
52
- default: undefined,
53
- },
54
- tooltipRight: {
55
- type: String,
56
- default: undefined,
57
- },
58
- })
59
- </script>
60
-
61
- <style scoped lang="scss">
62
- $size: 32px;
63
-
64
- .c-icon-btn {
65
- height: $size;
66
- width: $size;
67
- min-height: $size;
68
- min-width: $size;
69
- }
70
- </style>
1
+ <template>
2
+ <q-btn
3
+ class="c-icon-btn"
4
+ flat
5
+ round
6
+ :color="color"
7
+ :to="to"
8
+ :icon="icon"
9
+ :aria-label="tooltip || tooltipLeft || tooltipRight"
10
+ >
11
+ <c-tooltip v-if="tooltip">
12
+ {{ tooltip }}
13
+ </c-tooltip>
14
+
15
+ <c-tooltip
16
+ v-if="tooltipLeft"
17
+ left
18
+ >
19
+ {{ tooltipLeft }}
20
+ </c-tooltip>
21
+
22
+ <c-tooltip
23
+ v-if="tooltipRight"
24
+ right
25
+ >
26
+ {{ tooltipRight }}
27
+ </c-tooltip>
28
+ <slot />
29
+ </q-btn>
30
+ </template>
31
+
32
+ <script setup lang="ts">
33
+ defineProps({
34
+ color: {
35
+ type: String,
36
+ default: undefined,
37
+ },
38
+ to: {
39
+ type: [String, Object],
40
+ default: undefined,
41
+ },
42
+ icon: {
43
+ type: String,
44
+ default: undefined,
45
+ },
46
+ tooltip: {
47
+ type: String,
48
+ default: undefined,
49
+ },
50
+ tooltipLeft: {
51
+ type: String,
52
+ default: undefined,
53
+ },
54
+ tooltipRight: {
55
+ type: String,
56
+ default: undefined,
57
+ },
58
+ })
59
+ </script>
60
+
61
+ <style scoped lang="scss">
62
+ $size: 32px;
63
+
64
+ .c-icon-btn {
65
+ height: $size;
66
+ width: $size;
67
+ min-height: $size;
68
+ min-width: $size;
69
+ }
70
+ </style>
@@ -1,66 +1,66 @@
1
- <template>
2
- <q-item
3
- v-close-popup
4
- :clickable="!disable && !isTitle"
5
- :disable="disable"
6
- :to="to"
7
- :class="{
8
- 'is-delete': isDelete,
9
- 'font-weight-bold': isTitle
10
- }"
11
- @click="triggerClick"
12
- >
13
- <q-item-section
14
- v-if="icon && icon.length"
15
- avatar
16
- class="min-w-8"
17
- >
18
- <q-icon
19
- class="inherit-text"
20
- :name="icon"
21
- />
22
- </q-item-section>
23
- <q-item-section>
24
- <template v-if="text">
25
- {{ text }}
26
- </template>
27
- <slot v-else />
28
- </q-item-section>
29
- </q-item>
30
- </template>
31
-
32
- <script setup lang="ts">
33
- defineProps({
34
- icon: {
35
- type: String,
36
- default: undefined,
37
- },
38
- text: {
39
- type: String,
40
- default: undefined,
41
- },
42
- to: {
43
- type: String,
44
- default: undefined,
45
- },
46
- isDelete: Boolean,
47
- isTitle: Boolean,
48
- disable: Boolean,
49
- })
50
-
51
- const emit = defineEmits(['click'])
52
-
53
- function triggerClick (e) {
54
- emit('click', e)
55
- }
56
- </script>
57
-
58
- <style scoped lang="scss">
59
- .is-delete:hover {
60
- background: var(--color-red);
61
-
62
- > * {
63
- color: white;
64
- }
65
- }
66
- </style>
1
+ <template>
2
+ <q-item
3
+ v-close-popup
4
+ :clickable="!disable && !isTitle"
5
+ :disable="disable"
6
+ :to="to"
7
+ :class="{
8
+ 'is-delete': isDelete,
9
+ 'font-weight-bold': isTitle
10
+ }"
11
+ @click="triggerClick"
12
+ >
13
+ <q-item-section
14
+ v-if="icon && icon.length"
15
+ avatar
16
+ class="min-w-8"
17
+ >
18
+ <q-icon
19
+ class="inherit-text"
20
+ :name="icon"
21
+ />
22
+ </q-item-section>
23
+ <q-item-section>
24
+ <template v-if="text">
25
+ {{ text }}
26
+ </template>
27
+ <slot v-else />
28
+ </q-item-section>
29
+ </q-item>
30
+ </template>
31
+
32
+ <script setup lang="ts">
33
+ defineProps({
34
+ icon: {
35
+ type: String,
36
+ default: undefined,
37
+ },
38
+ text: {
39
+ type: String,
40
+ default: undefined,
41
+ },
42
+ to: {
43
+ type: String,
44
+ default: undefined,
45
+ },
46
+ isDelete: Boolean,
47
+ isTitle: Boolean,
48
+ disable: Boolean,
49
+ })
50
+
51
+ const emit = defineEmits(['click'])
52
+
53
+ function triggerClick (e) {
54
+ emit('click', e)
55
+ }
56
+ </script>
57
+
58
+ <style scoped lang="scss">
59
+ .is-delete:hover {
60
+ background: var(--color-red);
61
+
62
+ > * {
63
+ color: white;
64
+ }
65
+ }
66
+ </style>
@@ -1,11 +1,11 @@
1
- <template>
2
- <q-page-container>
3
- <div class="relative">
4
- <q-page class="overflow-hidden">
5
- <router-view v-slot="{ Component }">
6
- <component :is="Component" />
7
- </router-view>
8
- </q-page>
9
- </div>
10
- </q-page-container>
11
- </template>
1
+ <template>
2
+ <q-page-container>
3
+ <div class="relative">
4
+ <q-page class="overflow-hidden">
5
+ <router-view v-slot="{ Component }">
6
+ <component :is="Component" />
7
+ </router-view>
8
+ </q-page>
9
+ </div>
10
+ </q-page-container>
11
+ </template>
@@ -1,24 +1,24 @@
1
- <template>
2
- <div class="h-full flex items-center justify-center">
3
- <h1 class="text-primary text-center mb-20">
4
- {{ error.title }}
5
- <br>
6
- {{ error.msg }}
7
- <br>
8
- <span
9
- v-if="error.isAxiosError"
10
- class="text-grey-dark text-body1"
11
- >
12
- {{ $t('inri.error.error_code', { code: error.status }) }}
13
- </span>
14
- </h1>
15
- </div>
16
- </template>
17
-
18
- <script setup lang="ts">
19
- import { BaseError } from '../plugins/errors/Errors'
20
-
21
- defineProps <{
22
- error: BaseError
23
- }>()
24
- </script>
1
+ <template>
2
+ <div class="h-full flex items-center justify-center">
3
+ <h1 class="text-primary text-center mb-20">
4
+ {{ error.title }}
5
+ <br>
6
+ {{ error.msg }}
7
+ <br>
8
+ <span
9
+ v-if="error.isAxiosError"
10
+ class="text-grey-dark text-body1"
11
+ >
12
+ {{ $t('inri.error.error_code', { code: error.status }) }}
13
+ </span>
14
+ </h1>
15
+ </div>
16
+ </template>
17
+
18
+ <script setup lang="ts">
19
+ import { BaseError } from '../plugins/errors/Errors'
20
+
21
+ defineProps <{
22
+ error: BaseError
23
+ }>()
24
+ </script>
@@ -1,18 +1,18 @@
1
- <template>
2
- <q-inner-loading
3
- :showing="showing || inriStore.state.showPageSpinner"
4
- class="z-max"
5
- >
6
- <c-spinner />
7
- </q-inner-loading>
8
- </template>
9
-
10
- <script setup lang="ts">
11
- import { useInriStore } from '../stores/inriStore'
12
-
13
- defineProps({
14
- showing: Boolean,
15
- })
16
-
17
- const inriStore = useInriStore()
18
- </script>
1
+ <template>
2
+ <q-inner-loading
3
+ :showing="showing || inriStore.state.showPageSpinner"
4
+ class="z-max"
5
+ >
6
+ <c-spinner />
7
+ </q-inner-loading>
8
+ </template>
9
+
10
+ <script setup lang="ts">
11
+ import { useInriStore } from '../stores/inriStore'
12
+
13
+ defineProps({
14
+ showing: Boolean,
15
+ })
16
+
17
+ const inriStore = useInriStore()
18
+ </script>