@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,39 +1,39 @@
1
- <template>
2
- <div
3
- class="flex flex-1 no-wrap items-center"
4
- :title="text"
5
- >
6
- <span class="truncate flex-1">{{ text }}</span>
7
- <span
8
- v-if="showCount"
9
- class="text-body2 font-bold bg-white rounded-full border border-green ml-1 px-2 h-6 min-w-6 flex items-center justify-center"
10
- >
11
- {{ count }}
12
- </span>
13
-
14
- <!-- Used for context menus -->
15
- <slot />
16
- </div>
17
- </template>
18
-
19
- <script setup lang="ts">
20
- import { computed } from 'vue'
21
-
22
- const props = defineProps({
23
- text: {
24
- type: String,
25
- default: undefined,
26
- },
27
- count: {
28
- type: [String, Number],
29
- default: undefined,
30
- },
31
- hideZeroCount: {
32
- type: Boolean,
33
- default: false,
34
- },
35
- })
36
-
37
- // If we want to hide the chip when the count is 0 then hide if null/undefined/0. Else only hide if null/undefined.
38
- const showCount = computed(() => props.hideZeroCount ? props.count : (props.count !== null && props.count !== undefined))
39
- </script>
1
+ <template>
2
+ <div
3
+ class="flex flex-1 no-wrap items-center"
4
+ :title="text"
5
+ >
6
+ <span class="truncate flex-1">{{ text }}</span>
7
+ <span
8
+ v-if="showCount"
9
+ class="text-body2 font-bold bg-white rounded-full border border-green ml-1 px-2 h-6 min-w-6 flex items-center justify-center"
10
+ >
11
+ {{ count }}
12
+ </span>
13
+
14
+ <!-- Used for context menus -->
15
+ <slot />
16
+ </div>
17
+ </template>
18
+
19
+ <script setup lang="ts">
20
+ import { computed } from 'vue'
21
+
22
+ const props = defineProps({
23
+ text: {
24
+ type: String,
25
+ default: undefined,
26
+ },
27
+ count: {
28
+ type: [String, Number],
29
+ default: undefined,
30
+ },
31
+ hideZeroCount: {
32
+ type: Boolean,
33
+ default: false,
34
+ },
35
+ })
36
+
37
+ // If we want to hide the chip when the count is 0 then hide if null/undefined/0. Else only hide if null/undefined.
38
+ const showCount = computed(() => props.hideZeroCount ? props.count : (props.count !== null && props.count !== undefined))
39
+ </script>
@@ -1,103 +1,103 @@
1
- <template>
2
- <component
3
- :is="to ? 'router-link' : 'div'"
4
- :to="to"
5
- class="block p-5 h-[220px] relative group cursor-pointer no-underline"
6
- :class="[`bg-${color}`, specialModifierClasses.card]"
7
- >
8
- <c-slide-effect :parent-color="color" />
9
-
10
- <c-context-menu
11
- class="absolute right-2 top-3"
12
- :class="specialModifierClasses.contextMenu"
13
- >
14
- <c-menu-item>
15
- menu item
16
- </c-menu-item>
17
- </c-context-menu>
18
-
19
- <div
20
- class="relative"
21
- :class="specialModifierClasses.text"
22
- >
23
- <div
24
- class="mt-16 text-grey-darker"
25
- :class="specialModifierClasses.text"
26
- >
27
- {{ title1 }}
28
- </div>
29
- <div class="text-h1 leading-none mb-4">
30
- {{ title2 }}
31
- </div>
32
- <div class="line-clamp-2">
33
- {{ description }}
34
- </div>
35
- </div>
36
- </component>
37
- </template>
38
-
39
- <script setup>
40
- import { computed } from 'vue'
41
- import { getRelatedColors } from '../../utils/colorUtils'
42
-
43
- const props = defineProps({
44
- color: {
45
- type: String,
46
- default: 'secondary',
47
- },
48
- title1: {
49
- type: String,
50
- default: '',
51
- },
52
- title2: {
53
- type: String,
54
- default: '',
55
- },
56
- description: {
57
- type: String,
58
- default: '',
59
- },
60
- to: {
61
- type: [String, Object],
62
- default: undefined,
63
- },
64
- })
65
-
66
- const specialModifierClasses = computed(() => {
67
- const color = props.color
68
- const relatedColors = getRelatedColors(color)
69
-
70
- if (color === 'primary' || color === 'secondary' || color === 'accent') {
71
- return {
72
- card: '',
73
- contextMenu: 'text-' + relatedColors.onAltColor,
74
- text: 'text-' + relatedColors.onColor,
75
- }
76
- } else if (color === 'surface') {
77
- return {
78
- card: 'border border-surface-border',
79
- contextMenu: 'text-' + relatedColors.onColor,
80
- text: 'text-' + relatedColors.onColor,
81
- }
82
- } else if (color === 'white') {
83
- return {
84
- card: 'border border-grey',
85
- contextMenu: 'text-grey-darkest',
86
- text: 'text-grey-darkest',
87
- }
88
- } else if (color === 'black') {
89
- return {
90
- card: '',
91
- contextMenu: 'text-white',
92
- text: 'text-white',
93
- }
94
- }
95
-
96
- // Default for the rest
97
- return {
98
- card: '',
99
- contextMenu: 'text-white',
100
- text: 'text-grey-darkest',
101
- }
102
- })
103
- </script>
1
+ <template>
2
+ <component
3
+ :is="to ? 'router-link' : 'div'"
4
+ :to="to"
5
+ class="block p-5 h-[220px] relative group cursor-pointer no-underline"
6
+ :class="[`bg-${color}`, specialModifierClasses.card]"
7
+ >
8
+ <c-slide-effect :parent-color="color" />
9
+
10
+ <c-context-menu
11
+ class="absolute right-2 top-3"
12
+ :class="specialModifierClasses.contextMenu"
13
+ >
14
+ <c-menu-item>
15
+ menu item
16
+ </c-menu-item>
17
+ </c-context-menu>
18
+
19
+ <div
20
+ class="relative"
21
+ :class="specialModifierClasses.text"
22
+ >
23
+ <div
24
+ class="mt-16 text-grey-darker"
25
+ :class="specialModifierClasses.text"
26
+ >
27
+ {{ title1 }}
28
+ </div>
29
+ <div class="text-h1 leading-none mb-4">
30
+ {{ title2 }}
31
+ </div>
32
+ <div class="line-clamp-2">
33
+ {{ description }}
34
+ </div>
35
+ </div>
36
+ </component>
37
+ </template>
38
+
39
+ <script setup>
40
+ import { computed } from 'vue'
41
+ import { getRelatedColors } from '../../utils/colorUtils'
42
+
43
+ const props = defineProps({
44
+ color: {
45
+ type: String,
46
+ default: 'secondary',
47
+ },
48
+ title1: {
49
+ type: String,
50
+ default: '',
51
+ },
52
+ title2: {
53
+ type: String,
54
+ default: '',
55
+ },
56
+ description: {
57
+ type: String,
58
+ default: '',
59
+ },
60
+ to: {
61
+ type: [String, Object],
62
+ default: undefined,
63
+ },
64
+ })
65
+
66
+ const specialModifierClasses = computed(() => {
67
+ const color = props.color
68
+ const relatedColors = getRelatedColors(color)
69
+
70
+ if (color === 'primary' || color === 'secondary' || color === 'accent') {
71
+ return {
72
+ card: '',
73
+ contextMenu: 'text-' + relatedColors.onAltColor,
74
+ text: 'text-' + relatedColors.onColor,
75
+ }
76
+ } else if (color === 'surface') {
77
+ return {
78
+ card: 'border border-surface-border',
79
+ contextMenu: 'text-' + relatedColors.onColor,
80
+ text: 'text-' + relatedColors.onColor,
81
+ }
82
+ } else if (color === 'white') {
83
+ return {
84
+ card: 'border border-grey',
85
+ contextMenu: 'text-grey-darkest',
86
+ text: 'text-grey-darkest',
87
+ }
88
+ } else if (color === 'black') {
89
+ return {
90
+ card: '',
91
+ contextMenu: 'text-white',
92
+ text: 'text-white',
93
+ }
94
+ }
95
+
96
+ // Default for the rest
97
+ return {
98
+ card: '',
99
+ contextMenu: 'text-white',
100
+ text: 'text-grey-darkest',
101
+ }
102
+ })
103
+ </script>
@@ -1,149 +1,149 @@
1
- <template>
2
- <div
3
- ref="card"
4
- class="c-small-card"
5
- @mouseover="isHoveredOver = true"
6
- @mouseleave="isHoveredOver = false"
7
- @click="$emit('click', $event)"
8
- >
9
- <div
10
- class="content flex items-center justify-center"
11
- :class="[
12
- `bg-${backgroundColor}`,
13
- selected ? 'is-selected' : ''
14
- ]"
15
- >
16
- <img
17
- v-if="imageSrc"
18
- :src="imageSrc"
19
- class="image"
20
- >
21
-
22
- <q-icon
23
- v-else
24
- :name="icon"
25
- :style="`font-size: ${iconSize}px`"
26
- :class="iconClass"
27
- />
28
-
29
- <transition name="fade">
30
- <c-context-menu
31
- v-if="$slots['context-menu-items']"
32
- v-show="isHoveredOver"
33
- class="absolute right-0 top-0"
34
- @click.stop
35
- >
36
- <slot name="context-menu-items" />
37
- </c-context-menu>
38
- </transition>
39
- </div>
40
-
41
- <div
42
- v-if="text"
43
- class="text mt-8px line-clamp-2 break-words"
44
- :class="{ 'font-semibold': selected }"
45
- :title="text"
46
- >
47
- {{ text }}
48
- </div>
49
-
50
- <div
51
- v-if="description"
52
- class="description"
53
- >
54
- {{ description }}
55
- </div>
56
- </div>
57
- </template>
58
-
59
- <script setup lang="ts">
60
- import { ref } from 'vue'
61
- import { useDoubleClickListener } from '../../composables/useDoubleClickListener'
62
-
63
- const emit = defineEmits(['click', 'double-click'])
64
- const card = ref<HTMLDivElement>()
65
-
66
- const isHoveredOver = ref(false)
67
-
68
- useDoubleClickListener(card, () => {
69
- emit('double-click')
70
- })
71
-
72
- defineProps({
73
- imageSrc: {
74
- type: String,
75
- default: undefined,
76
- },
77
- text: {
78
- type: String,
79
- default: undefined,
80
- },
81
- description: {
82
- type: String,
83
- default: undefined,
84
- },
85
- selected: {
86
- type: Boolean,
87
- default: false,
88
- },
89
- icon: {
90
- type: String,
91
- default: undefined,
92
- },
93
- iconClass: {
94
- type: String,
95
- default: undefined,
96
- },
97
- iconSize: {
98
- type: [String, Number],
99
- default: 18,
100
- },
101
- backgroundColor: {
102
- type: String,
103
- default: 'grey-lighter',
104
- },
105
- })
106
- </script>
107
-
108
- <style scoped lang="scss">
109
- .c-small-card {
110
- width: var(--small-card-image-size);
111
- min-height: 100px;
112
-
113
- &:hover {
114
- cursor: pointer;
115
-
116
- .content {
117
- box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
118
- }
119
- }
120
-
121
- .content {
122
- position: relative;
123
- width: var(--small-card-image-size);
124
- height: var(--small-card-image-size);
125
- transition: box-shadow 0.2s ease-in-out;
126
- }
127
-
128
- .image {
129
- width: var(--small-card-image-size);
130
- height: var(--small-card-image-size);
131
- object-fit: cover;
132
- }
133
- }
134
-
135
- .is-selected {
136
- outline: 2px solid var(--q-accent);
137
- outline-offset: -2px;
138
- box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
139
-
140
- &::before {
141
- content: "";
142
- width: 100%;
143
- height: 100%;
144
- background: var(--q-accent);
145
- opacity: 0.1;
146
- position: absolute;
147
- }
148
- }
149
- </style>
1
+ <template>
2
+ <div
3
+ ref="card"
4
+ class="c-small-card"
5
+ @mouseover="isHoveredOver = true"
6
+ @mouseleave="isHoveredOver = false"
7
+ @click="$emit('click', $event)"
8
+ >
9
+ <div
10
+ class="content flex items-center justify-center"
11
+ :class="[
12
+ `bg-${backgroundColor}`,
13
+ selected ? 'is-selected' : ''
14
+ ]"
15
+ >
16
+ <img
17
+ v-if="imageSrc"
18
+ :src="imageSrc"
19
+ class="image"
20
+ >
21
+
22
+ <q-icon
23
+ v-else
24
+ :name="icon"
25
+ :style="`font-size: ${iconSize}px`"
26
+ :class="iconClass"
27
+ />
28
+
29
+ <transition name="fade">
30
+ <c-context-menu
31
+ v-if="$slots['context-menu-items']"
32
+ v-show="isHoveredOver"
33
+ class="absolute right-0 top-0"
34
+ @click.stop
35
+ >
36
+ <slot name="context-menu-items" />
37
+ </c-context-menu>
38
+ </transition>
39
+ </div>
40
+
41
+ <div
42
+ v-if="text"
43
+ class="text mt-8px line-clamp-2 break-words"
44
+ :class="{ 'font-semibold': selected }"
45
+ :title="text"
46
+ >
47
+ {{ text }}
48
+ </div>
49
+
50
+ <div
51
+ v-if="description"
52
+ class="description"
53
+ >
54
+ {{ description }}
55
+ </div>
56
+ </div>
57
+ </template>
58
+
59
+ <script setup lang="ts">
60
+ import { ref } from 'vue'
61
+ import { useDoubleClickListener } from '../../composables/useDoubleClickListener'
62
+
63
+ const emit = defineEmits(['click', 'double-click'])
64
+ const card = ref<HTMLDivElement>()
65
+
66
+ const isHoveredOver = ref(false)
67
+
68
+ useDoubleClickListener(card, () => {
69
+ emit('double-click')
70
+ })
71
+
72
+ defineProps({
73
+ imageSrc: {
74
+ type: String,
75
+ default: undefined,
76
+ },
77
+ text: {
78
+ type: String,
79
+ default: undefined,
80
+ },
81
+ description: {
82
+ type: String,
83
+ default: undefined,
84
+ },
85
+ selected: {
86
+ type: Boolean,
87
+ default: false,
88
+ },
89
+ icon: {
90
+ type: String,
91
+ default: undefined,
92
+ },
93
+ iconClass: {
94
+ type: String,
95
+ default: undefined,
96
+ },
97
+ iconSize: {
98
+ type: [String, Number],
99
+ default: 18,
100
+ },
101
+ backgroundColor: {
102
+ type: String,
103
+ default: 'grey-lighter',
104
+ },
105
+ })
106
+ </script>
107
+
108
+ <style scoped lang="scss">
109
+ .c-small-card {
110
+ width: var(--small-card-image-size);
111
+ min-height: 100px;
112
+
113
+ &:hover {
114
+ cursor: pointer;
115
+
116
+ .content {
117
+ box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
118
+ }
119
+ }
120
+
121
+ .content {
122
+ position: relative;
123
+ width: var(--small-card-image-size);
124
+ height: var(--small-card-image-size);
125
+ transition: box-shadow 0.2s ease-in-out;
126
+ }
127
+
128
+ .image {
129
+ width: var(--small-card-image-size);
130
+ height: var(--small-card-image-size);
131
+ object-fit: cover;
132
+ }
133
+ }
134
+
135
+ .is-selected {
136
+ outline: 2px solid var(--q-accent);
137
+ outline-offset: -2px;
138
+ box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
139
+
140
+ &::before {
141
+ content: "";
142
+ width: 100%;
143
+ height: 100%;
144
+ background: var(--q-accent);
145
+ opacity: 0.1;
146
+ position: absolute;
147
+ }
148
+ }
149
+ </style>