@it-enterprise/forcebpm-ui-kit 1.0.2-beta.3 → 1.0.2-beta.30

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 (86) hide show
  1. package/README.md +81 -65
  2. package/index.js +48 -1
  3. package/package.json +35 -15
  4. package/plugin.js +117 -0
  5. package/src/FActionSnackbar.vue +107 -0
  6. package/src/FAvatar.vue +10 -8
  7. package/src/{FConfirmModal.vue → FConfirmDialog.vue} +38 -28
  8. package/src/FContextMenu.vue +87 -0
  9. package/src/FDialog.vue +264 -0
  10. package/src/FLangSwitcher.vue +47 -0
  11. package/src/FNoData.vue +80 -0
  12. package/src/FNotify.vue +257 -0
  13. package/src/FPagination.vue +163 -0
  14. package/src/FPreLoader.vue +105 -0
  15. package/src/FSearchPanel.vue +191 -0
  16. package/src/FShare.vue +134 -0
  17. package/src/FTruncate.vue +121 -0
  18. package/src/FUserGroupPicker.vue +634 -0
  19. package/src/FUserRoles.vue +195 -0
  20. package/src/assets/fonts/ProximaNova-Bold.woff +0 -0
  21. package/src/assets/fonts/ProximaNova-Bold.woff2 +0 -0
  22. package/src/assets/fonts/ProximaNova-Regular.woff +0 -0
  23. package/src/assets/fonts/ProximaNova-Regular.woff2 +0 -0
  24. package/src/assets/fonts/ProximaNova-Semibold.woff +0 -0
  25. package/src/assets/fonts/ProximaNova-Semibold.woff2 +0 -0
  26. package/src/assets/fonts/loadFonts.js +55 -0
  27. package/src/assets/icons/bell-mute.svg +4 -0
  28. package/src/assets/icons/bell.svg +3 -0
  29. package/src/assets/icons/check.svg +3 -0
  30. package/src/assets/icons/checkbox-false.svg +3 -0
  31. package/src/assets/icons/checkbox-true.svg +4 -0
  32. package/src/assets/icons/chevron.svg +3 -0
  33. package/src/assets/icons/color-radio-active.svg +4 -0
  34. package/src/assets/icons/color-radio.svg +3 -0
  35. package/src/assets/icons/ctx-arrow.svg +3 -0
  36. package/src/assets/icons/ctx-delete.svg +6 -0
  37. package/src/assets/icons/ctx-link.svg +5 -0
  38. package/src/assets/icons/ctx-more.svg +5 -0
  39. package/src/assets/icons/ctx-pen.svg +4 -0
  40. package/src/assets/icons/delete.svg +6 -0
  41. package/src/assets/icons/dots.svg +5 -0
  42. package/src/assets/icons/filter.svg +3 -0
  43. package/src/assets/icons/folder.svg +3 -0
  44. package/src/assets/icons/open-envelope.svg +6 -0
  45. package/src/assets/icons/pass-eye-close.svg +3 -0
  46. package/src/assets/icons/pass-eye-open.svg +4 -0
  47. package/src/assets/icons/plus-solid.svg +4 -0
  48. package/src/assets/icons/plus.svg +4 -0
  49. package/src/assets/icons/radio-false.svg +3 -0
  50. package/src/assets/icons/radio-true.svg +4 -0
  51. package/src/assets/icons/search.svg +3 -0
  52. package/src/assets/icons/sort-solid.svg +3 -0
  53. package/src/assets/icons/sort.svg +6 -0
  54. package/src/assets/icons/star-line.svg +3 -0
  55. package/src/assets/icons/star.svg +3 -0
  56. package/src/assets/icons/times.svg +4 -0
  57. package/src/assets/images/0.gif +0 -0
  58. package/src/assets/images/0.svg +4 -0
  59. package/src/assets/images/3.svg +4 -0
  60. package/src/assets/images/4.svg +4 -0
  61. package/src/assets/images/5.svg +4 -0
  62. package/src/assets/scss/buttons.scss +60 -0
  63. package/src/assets/scss/card.scss +11 -0
  64. package/src/assets/scss/expansion.scss +45 -0
  65. package/src/assets/scss/icons.scss +273 -0
  66. package/src/assets/scss/index.scss +10 -0
  67. package/src/assets/scss/input.scss +344 -0
  68. package/src/assets/scss/overlay.scss +69 -0
  69. package/src/assets/scss/skeleton.scss +22 -0
  70. package/src/assets/scss/tables.scss +143 -0
  71. package/src/assets/scss/tabs.scss +42 -0
  72. package/src/assets/scss/utilities.scss +167 -0
  73. package/src/f-date-picker/FDatePicker.vue +322 -0
  74. package/src/f-date-picker/FMenuDatePicker.vue +337 -0
  75. package/src/f-date-picker/FTextFieldDate.vue +498 -0
  76. package/src/f-toolbar/FFilterPanel.vue +62 -0
  77. package/src/f-toolbar/FSortPanel.vue +55 -0
  78. package/src/f-toolbar/FTabPanel.vue +123 -0
  79. package/src/f-toolbar/FToolbar.vue +131 -0
  80. package/src/f-toolbar/FViewerPanel.vue +71 -0
  81. package/src/forcebpmIcon.js +69 -0
  82. package/src/locales/en.json +115 -0
  83. package/src/locales/index.js +7 -0
  84. package/src/locales/ru.json +116 -0
  85. package/src/locales/uk.json +116 -0
  86. package/src/utils/color.js +38 -0
package/src/FShare.vue ADDED
@@ -0,0 +1,134 @@
1
+ <script setup>
2
+ // FShare
3
+ import { ref, onBeforeMount, onBeforeUnmount, inject } from 'vue'
4
+
5
+ const props = defineProps({
6
+ buttons: {
7
+ type: Array,
8
+ default: () => []
9
+ }
10
+ })
11
+ const modelValue = ref(false)
12
+ const dataObj = ref(null)
13
+
14
+ // Inject emitter and events from plugin
15
+ const emitter = inject('fbpm-emitter', null)
16
+ const events = inject('fbpm-events', {})
17
+
18
+ const open = params => {
19
+ dataObj.value = params
20
+ modelValue.value = true
21
+ }
22
+
23
+ const close = () => {
24
+ dataObj.value = null
25
+ modelValue.value = false
26
+ }
27
+
28
+ const applyMethod = method => {
29
+ method(dataObj.value)
30
+ close()
31
+ }
32
+
33
+ onBeforeMount(() => {
34
+ if (emitter && events.share) {
35
+ emitter.on(events.share, open)
36
+ }
37
+ })
38
+
39
+ onBeforeUnmount(() => {
40
+ if (emitter && events.share) {
41
+ emitter.off(events.share, open)
42
+ }
43
+ })
44
+ </script>
45
+ <template>
46
+ <v-dialog v-model="modelValue" min-width="350" content-class="f-dialog">
47
+ <!-- Header -->
48
+ <div class="f-dialog-header">
49
+ <!-- Title -->
50
+ <div class="f-dialog-header-title">{{ $t('buttons.share') }}</div>
51
+ <v-tooltip offset="10" :text="$t('buttons.close')">
52
+ <template #activator="{ props: tooltipProps }">
53
+ <v-btn v-bind="tooltipProps" variant="text" size="32" class="f-dialog-header-action f-dialog-header-action-close" @click="close">
54
+ <FIcon icon="times" size="18" color="fields-light" />
55
+ </v-btn>
56
+ </template>
57
+ </v-tooltip>
58
+ </div>
59
+
60
+ <!-- Body -->
61
+ <div class="f-dialog-body">
62
+ <div class="share-wrap">
63
+ <template v-for="(btn, idx) in props.buttons">
64
+ <v-btn v-if="!btn.hide" :key="idx" variant="text" class="share-btn" color="subTitle" @click="applyMethod(btn.action)">
65
+ <FIcon :icon="btn.icon" size="24" :color="btn.color" />
66
+ <!-- <FHtmlContent :data="btn.name" /> -->
67
+ <span v-if="btn.name" class="share-btn-name">{{ btn.name }}</span>
68
+ </v-btn>
69
+ </template>
70
+ </div>
71
+ </div>
72
+ </v-dialog>
73
+ </template>
74
+ <style lang="scss" scoped>
75
+ :deep(.f-dialog) {
76
+ background: rgb(var(--v-theme-background));
77
+ box-shadow: 0px 4px 20px 0px rgb(var(--v-theme-title));
78
+ border-radius: 5.8px;
79
+ display: flex;
80
+ flex-direction: column;
81
+ max-height: 90vh; // Limit for the entire dialog
82
+ width: auto;
83
+ .f-dialog-header {
84
+ flex-shrink: 0; // Header does not shrink
85
+ display: flex;
86
+ align-items: center;
87
+ justify-content: space-between;
88
+ background: rgb(var(--v-theme-title-dark));
89
+ border-top-left-radius: 5px;
90
+ border-top-right-radius: 5px;
91
+
92
+ .f-dialog-header-title {
93
+ font-size: 1.15em;
94
+ line-height: 1.25em;
95
+ font-weight: 600;
96
+ color: rgb(var(--v-theme-fields-light));
97
+ padding: 12px 0px 10px 20px;
98
+ }
99
+ }
100
+ .f-dialog-body {
101
+ display: flex;
102
+ flex-direction: column;
103
+ flex: 1;
104
+ min-height: 0; // Important for flexbox to work with overflow
105
+ .share-wrap {
106
+ display: flex;
107
+ flex-wrap: wrap;
108
+ gap: 12px;
109
+ padding: 16px;
110
+ justify-content: center;
111
+ height: 90px;
112
+ }
113
+ .share-btn .v-btn__content {
114
+ display: flex;
115
+ align-items: center;
116
+ flex-direction: column;
117
+ width: 100px;
118
+ }
119
+ .share-btn-name {
120
+ width: 100px;
121
+ text-wrap: initial;
122
+ }
123
+ }
124
+ }
125
+
126
+ .v-theme--dark {
127
+ :deep(.f-dialog) {
128
+ box-shadow: var(--f-box-shadow);
129
+ .f-dialog-header {
130
+ border-bottom: 1px solid rgb(var(--v-theme-line));
131
+ }
132
+ }
133
+ }
134
+ </style>
@@ -0,0 +1,121 @@
1
+ <script setup>
2
+ // FTruncate
3
+ import { ref, useTemplateRef, watch, useAttrs } from 'vue'
4
+ import { useElementSize } from '@vueuse/core'
5
+
6
+ const props = defineProps({
7
+ text: {
8
+ type: [String, Number],
9
+ default: ''
10
+ },
11
+ textClass: {
12
+ type: String,
13
+ default: ''
14
+ },
15
+ textStyle: {
16
+ type: String,
17
+ default: ''
18
+ },
19
+ lines: {
20
+ type: [String, Number],
21
+ default: 1,
22
+ validator: value => {
23
+ const num = Number(value)
24
+ return Number.isInteger(num) && num > 0
25
+ }
26
+ },
27
+ isHtml: {
28
+ type: Boolean,
29
+ default: false
30
+ }
31
+ })
32
+
33
+ const truncateRef = useTemplateRef('truncate-text')
34
+ const { width } = useElementSize(truncateRef)
35
+ const disabled = ref(true)
36
+ const menu = ref(false)
37
+ const attrs = useAttrs()
38
+ const isMouseLeave = ref(true)
39
+
40
+ const mouseoverHandler = () => {
41
+ if (isMouseLeave.value) isMouseLeave.value = false
42
+ if (disabled.value) return
43
+ setTimeout(() => {
44
+ if (isMouseLeave.value) return
45
+ menu.value = true
46
+ }, attrs['open-delay'] || 300)
47
+ }
48
+
49
+ const mouseleaveHandler = () => {
50
+ if (disabled.value) return
51
+ menu.value = false
52
+ isMouseLeave.value = true
53
+ }
54
+
55
+ watch(
56
+ [() => width.value, () => props.text],
57
+ () => {
58
+ if (!truncateRef.value) return
59
+
60
+ const element = truncateRef.value
61
+ const style = window.getComputedStyle(element)
62
+ const lineHeight = parseFloat(style.lineHeight)
63
+ const maxHeight = lineHeight * Number(props.lines)
64
+
65
+ // Checking if text needs to be truncated
66
+ disabled.value = element.scrollHeight <= Math.round(maxHeight) + 1
67
+ },
68
+ { immediate: true }
69
+ )
70
+ </script>
71
+
72
+ <template>
73
+ <v-menu
74
+ v-model="menu"
75
+ open-on-hover
76
+ z-index="1005"
77
+ offset="0, 6"
78
+ location="right"
79
+ max-height="500px"
80
+ content-class="f-truncate-menu-content"
81
+ :disabled="disabled"
82
+ >
83
+ <template #activator="{ props: activatorProps }">
84
+ <div
85
+ v-bind="activatorProps"
86
+ ref="truncate-text"
87
+ class="f-truncate"
88
+ :class="textClass"
89
+ :style="`-webkit-line-clamp: ${lines}; ${textStyle}`"
90
+ @mouseenter="mouseoverHandler"
91
+ @mouseleave="mouseleaveHandler"
92
+ >
93
+ <FHtmlContent v-if="isHtml" :data="text" />
94
+ <template v-else>{{ text }}</template>
95
+ </div>
96
+ </template>
97
+
98
+ <FHtmlContent v-if="isHtml" :data="text" />
99
+ <div v-else>{{ text }}</div>
100
+ </v-menu>
101
+ </template>
102
+
103
+ <style lang="scss" scoped>
104
+ .f-truncate {
105
+ line-height: 1.1em;
106
+ display: block;
107
+ overflow: hidden;
108
+ text-overflow: ellipsis;
109
+ display: -webkit-box;
110
+ -webkit-box-orient: vertical;
111
+ cursor: inherit;
112
+ }
113
+ :deep(.f-truncate-menu-content) {
114
+ background: rgb(var(--v-theme-background));
115
+ line-height: 1em;
116
+ font-size: 0.9em;
117
+ color: rgb(var(--v-theme-subTitle));
118
+ padding: 8px;
119
+ overflow: auto;
120
+ }
121
+ </style>