jobdone-shared-files 1.0.49 → 1.0.51

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 (40) hide show
  1. package/ModuleInfo/LayoutNav.vue +251 -251
  2. package/ModuleInfo/logo-with-text.svg +22 -22
  3. package/ModuleInfo/navButton.vue +218 -218
  4. package/ProjectManagement/projectNavbar.vue +363 -363
  5. package/ProjectManagement/projectNavbarV2.vue +2 -2
  6. package/README.md +1 -0
  7. package/autocompleteSelect.vue +487 -465
  8. package/common/directives/collapse.js +12 -12
  9. package/common/directives/popovers.js +10 -10
  10. package/common/directives/selectPlaceholder.js +52 -52
  11. package/common/directives/textareaAutoHeight.js +10 -10
  12. package/common/directives/tooltip.js +10 -10
  13. package/common/format.js +26 -26
  14. package/index.js +14 -14
  15. package/lightboxWithOverview.vue +156 -156
  16. package/package.json +19 -19
  17. package/paginate.vue +141 -141
  18. package/style/css/vue-loading-overlay/index.css +40 -40
  19. package/style/scss/Common/Animation.scss +9 -9
  20. package/style/scss/Common/SelectableTable.scss +36 -36
  21. package/style/scss/Common/Tree.scss +281 -281
  22. package/style/scss/Common/filepond.scss +31 -31
  23. package/style/scss/Common/thumbnail-group.scss +14 -14
  24. package/style/scss/Layout/LayoutBase.scss +1032 -1032
  25. package/style/scss/Layout/LayoutInnerColumn.scss +263 -263
  26. package/style/scss/Layout/LayoutProject.scss +126 -126
  27. package/style/scss/Layout/LayoutSinglePage.scss +17 -17
  28. package/style/scss/Layout/LayoutTwoColumn.scss +60 -60
  29. package/style/scss/Settings/_Mixins.scss +232 -232
  30. package/style/scss/Settings/_MobileVariables.scss +11 -11
  31. package/style/scss/Settings/_bs-variables-dark.scss +70 -70
  32. package/style/scss/Settings/_bs-variables.scss +1743 -1743
  33. package/style/scss/Settings/_color-mode.scss +122 -122
  34. package/style/scss/Settings/_custom-variables.scss +10 -10
  35. package/tagEditor.vue +249 -249
  36. package/tree.vue +71 -71
  37. package/treeItem.vue +358 -358
  38. package/treeItemV2.vue +78 -78
  39. package/treeV2.vue +71 -71
  40. package/vueLoadingOverlay.vue +74 -74
package/treeItem.vue CHANGED
@@ -1,359 +1,359 @@
1
- <template>
2
- <li class="tree-item" :class="[itemClass]">
3
- <div class="card flex-row d-flex input-group flex-nowrap">
4
- <button type="button" class="btn text-primary border-end px-1" :disabled="!item.children || item.children.length == 0" data-bs-toggle="collapse" :data-bs-target="'#collapse-'+item.id">
5
- <span class="material-icons">arrow_drop_down</span>
6
- <slot name="icon-start"></slot>
7
- </button>
8
- <div class="btn-title d-flex text-start rounded-0 flex-grow-1"
9
- :for="item.id" @click="clickItem(item)">
10
- <div class="btn btn-text border-start">{{item.title}}</div>
11
- <slot name="icon" :item="item">
12
- <div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
13
- <span class="material-icons icon-18"></span>
14
- </div>
15
- </slot>
16
- </div>
17
- </div>
18
- <template v-if="item.children">
19
- <ul :id="'collapse-'+item.id" class="content-children show" v-collapse>
20
- <TreeItem class="children-box" v-for="(subItem, subIndex) in item.children"
21
- :key="subItem.id"
22
- :item="subItem"
23
- :index="subIndex"
24
- :click-item="clickItem"
25
- :active-id="activeId"
26
- :tree-item-class="treeItemClass">
27
- <template v-slot:icon-start>
28
- <slot name="icon-start"></slot>
29
- </template>
30
- <template v-slot:icon="slotProps">
31
- <slot name="icon" :item="slotProps.item">
32
- <div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
33
- <span class="material-icons icon-18"></span>
34
- </div>
35
- </slot>
36
- </template>
37
- </TreeItem>
38
- </ul>
39
- </template>
40
- </li>
41
- </template>
42
-
43
- <script>
44
- import { ref, computed } from 'vue';
45
- import collapse from './common/directives/collapse';
46
- export default {
47
- name: 'TreeItem',
48
- props: {
49
- item: {
50
- type: Object,
51
- required: true
52
- },
53
- index: {
54
- type: Number,
55
- required: true
56
- },
57
- clickItem: {
58
- type: Function
59
- },
60
- activeId: {
61
- type: String,
62
- required: true
63
- },
64
- treeItemClass: {
65
- type: Array,
66
- default: function () {
67
- return [];
68
- }
69
- }
70
- },
71
- directives: {
72
- collapse
73
- },
74
- setup(props, { emit }) {
75
- const itemClass = computed(() => {
76
- var classList = [...props.treeItemClass];
77
- if (props.activeId === props.item.id) {
78
- classList.push('active');
79
- }
80
- return classList;
81
- });
82
- return {
83
- itemClass: itemClass
84
- };
85
- }
86
- }
87
- </script>
88
-
89
- <style scoped lang="scss">
90
- @import "../bootstrap/scss/functions";
91
- @import "./style/scss/Settings/bs-variables";
92
- @import "../bootstrap/scss/mixins";
93
- @import "./style/scss/Settings/Mixins";
94
-
95
- li {
96
- list-style-type: none;
97
- }
98
-
99
- // 基本 sizes
100
- .tree-item {
101
- .btn {
102
- --bs-btn-padding-x: 0.75em;
103
- --bs-btn-padding-y: 0.375em;
104
- --bs-btn-font-size: 1em;
105
- }
106
-
107
- .card {
108
- --bs-card-spacer-y: 1em;
109
- --bs-card-spacer-x: 1em;
110
- --bs-card-title-spacer-y: 0.5em;
111
- --bs-card-cap-padding-y: 0.5em;
112
- --bs-card-cap-padding-x: 1em;
113
- --bs-card-img-overlay-padding: 1em;
114
- --bs-card-group-margin: 0.75em;
115
- }
116
-
117
- .material-icons {
118
- font-size: 1.5em;
119
-
120
- &.icon-14 {
121
- font-size: 0.875em;
122
- }
123
-
124
- &.icon-18 {
125
- font-size: 1.125em;
126
- }
127
-
128
- &.icon-28 {
129
- font-size: 1.75em;
130
- }
131
-
132
- &.icon-32 {
133
- font-size: 2em;
134
- }
135
- }
136
- }
137
-
138
- // hover效果與優化
139
- // firefox 暫不支援 has
140
- .tree-item:has([data-bs-toggle="collapse"]:hover) + .collapse {
141
- will-change: height;
142
- }
143
-
144
- .tree-item:hover > .card,
145
- .tree-item .card:focus-within {
146
- background-color: lighten( $primary, 32% );
147
- border-color: rgba( $primary, .4 );
148
- }
149
-
150
- .tree-item{
151
- .btn-title .material-icons:before {
152
- content: "\e836";
153
- display: inline-block;
154
- font-family: inherit;
155
- }
156
-
157
- // active效果
158
- &.active {
159
- > .card {
160
- background-color: lighten( $primary, 30% );
161
- border-color: rgba( $primary, .5 );
162
- }
163
- > .card .btn-title .material-icons:before {
164
- content: "\e837";
165
- }
166
- .btn-title {
167
- color: $primary;
168
- }
169
- }
170
- }
171
-
172
- .btn-title {
173
- cursor: pointer;
174
- .btn {
175
- border-radius: 0;
176
-
177
- &:focus, &:active {
178
- border-color: transparent;
179
- }
180
- }
181
-
182
- .btn-text {
183
- width: 100%;
184
- text-align: left;
185
- overflow-wrap: anywhere;
186
- }
187
- }
188
-
189
-
190
- // 刪除子層標示 UI
191
- .tree-item:has(.btn.text-danger:hover) {
192
- .card {
193
- background-color: lighten( $danger, 43% );
194
- border-color: rgba( $danger, .5 );
195
-
196
- .btn {
197
- color: $danger;
198
- }
199
- }
200
- }
201
- // 刪除子層標示 UI (含子層)
202
- // .tree-child:has(.btn.text-danger:hover){
203
- // .card, + .content-children .card{
204
- // background-color: lighten( $danger, 43% );
205
- // border-color: rgba( $danger, .5 );
206
- // .btn{
207
- // color: $danger;
208
- // }
209
- // }
210
- // }
211
-
212
- .btn-no-children {
213
- cursor: auto;
214
-
215
- &:focus {
216
- border-color: transparent;
217
- }
218
- }
219
-
220
- // 基本 style
221
- $card-margin: .2em;
222
- $line-padding: .7em;
223
-
224
- .tree-item {
225
- display: flex;
226
- flex-direction: column;
227
- width: 100%;
228
- margin-top: $card-margin;
229
-
230
- .card {
231
- position: relative;
232
- flex-grow: 1;
233
- transition: $transition-base;
234
- }
235
- }
236
-
237
- .col-action {
238
- @include flex-center;
239
- width: 2.8rem;
240
- }
241
-
242
-
243
- // 開合 style
244
- .btn[data-bs-toggle="collapse"] {
245
- .material-icons {
246
- transition: $transition-base;
247
- }
248
-
249
- &[aria-expanded="false"] .material-icons {
250
- transform: rotate(-90deg);
251
- }
252
-
253
- &:disabled, &.disabled {
254
- border-color: transparent;
255
- }
256
- }
257
-
258
- // 畫線 style
259
- .content-children {
260
- padding-left: 1.5rem;
261
- --tree-border-color: #fff;
262
- position: relative;
263
-
264
- &:before {
265
- content: "";
266
- position: absolute;
267
- display: block;
268
- left: -$line-padding;
269
- bottom: 24px;
270
- width: 1px;
271
- height: 100%;
272
- z-index: 1;
273
- background-color: var(--tree-border-color);
274
- }
275
- // // line color
276
- &:before, .tree-item .card:before, .tree-item .card:after {
277
- background-color: var(--tree-border-color);
278
- }
279
- }
280
-
281
- .tree-item {
282
- &:last-child > .content-children:before {
283
- display: none;
284
- }
285
-
286
- .card {
287
- position: relative;
288
-
289
- &:before, &:after {
290
- content: "";
291
- position: absolute;
292
- left: calc(-#{$line-padding} - #{$border-width});
293
- z-index: 1;
294
- }
295
-
296
- &:before {
297
- bottom: 50%;
298
- width: 1px;
299
- height: calc(100% + #{$card-margin}*2 + #{$border-width}*2);
300
- }
301
-
302
- &:after {
303
- top: 0;
304
- bottom: 0;
305
- width: $line-padding;
306
- height: 1px;
307
- margin: auto;
308
- }
309
- }
310
-
311
- &:nth-child(1) > .card:before {
312
- height: calc(50% + #{$card-margin} + #{$border-width});
313
- }
314
- }
315
-
316
-
317
- // 小版本
318
- .tree-item-sm {
319
- > .card {
320
- font-size: 86%;
321
- }
322
-
323
- .content-children {
324
- padding-left: 1rem;
325
- }
326
-
327
- .content-children:before {
328
- left: -10px;
329
- bottom: 19px;
330
- }
331
- }
332
- // .tree-item-sm + .content-children{
333
- // > .children-box{
334
- // padding-left: 1rem;
335
- // }
336
- // }
337
-
338
-
339
- // 白背景版本
340
- .tree-item-in-white {
341
- .content-children {
342
- --tree-border-color: var(--bs-border-color);
343
- }
344
-
345
- .card {
346
- --bs-card-bg: var(--gray-100);
347
- --bs-card-border-color: var(--bs-border-color);
348
- }
349
-
350
- &:hover > .card,
351
- .card:focus-within {
352
- background-color: $white;
353
- }
354
- // active效果
355
- &.active .card {
356
- background-color: $white;
357
- }
358
- }
1
+ <template>
2
+ <li class="tree-item" :class="[itemClass]">
3
+ <div class="card flex-row d-flex input-group flex-nowrap">
4
+ <button type="button" class="btn text-primary border-end px-1" :disabled="!item.children || item.children.length == 0" data-bs-toggle="collapse" :data-bs-target="'#collapse-'+item.id">
5
+ <span class="material-icons">arrow_drop_down</span>
6
+ <slot name="icon-start"></slot>
7
+ </button>
8
+ <div class="btn-title d-flex text-start rounded-0 flex-grow-1"
9
+ :for="item.id" @click="clickItem(item)">
10
+ <div class="btn btn-text border-start">{{item.title}}</div>
11
+ <slot name="icon" :item="item">
12
+ <div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
13
+ <span class="material-icons icon-18"></span>
14
+ </div>
15
+ </slot>
16
+ </div>
17
+ </div>
18
+ <template v-if="item.children">
19
+ <ul :id="'collapse-'+item.id" class="content-children show" v-collapse>
20
+ <TreeItem class="children-box" v-for="(subItem, subIndex) in item.children"
21
+ :key="subItem.id"
22
+ :item="subItem"
23
+ :index="subIndex"
24
+ :click-item="clickItem"
25
+ :active-id="activeId"
26
+ :tree-item-class="treeItemClass">
27
+ <template v-slot:icon-start>
28
+ <slot name="icon-start"></slot>
29
+ </template>
30
+ <template v-slot:icon="slotProps">
31
+ <slot name="icon" :item="slotProps.item">
32
+ <div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
33
+ <span class="material-icons icon-18"></span>
34
+ </div>
35
+ </slot>
36
+ </template>
37
+ </TreeItem>
38
+ </ul>
39
+ </template>
40
+ </li>
41
+ </template>
42
+
43
+ <script>
44
+ import { ref, computed } from 'vue';
45
+ import collapse from './common/directives/collapse';
46
+ export default {
47
+ name: 'TreeItem',
48
+ props: {
49
+ item: {
50
+ type: Object,
51
+ required: true
52
+ },
53
+ index: {
54
+ type: Number,
55
+ required: true
56
+ },
57
+ clickItem: {
58
+ type: Function
59
+ },
60
+ activeId: {
61
+ type: String,
62
+ required: true
63
+ },
64
+ treeItemClass: {
65
+ type: Array,
66
+ default: function () {
67
+ return [];
68
+ }
69
+ }
70
+ },
71
+ directives: {
72
+ collapse
73
+ },
74
+ setup(props, { emit }) {
75
+ const itemClass = computed(() => {
76
+ var classList = [...props.treeItemClass];
77
+ if (props.activeId === props.item.id) {
78
+ classList.push('active');
79
+ }
80
+ return classList;
81
+ });
82
+ return {
83
+ itemClass: itemClass
84
+ };
85
+ }
86
+ }
87
+ </script>
88
+
89
+ <style scoped lang="scss">
90
+ @import "../bootstrap/scss/functions";
91
+ @import "./style/scss/Settings/bs-variables";
92
+ @import "../bootstrap/scss/mixins";
93
+ @import "./style/scss/Settings/Mixins";
94
+
95
+ li {
96
+ list-style-type: none;
97
+ }
98
+
99
+ // 基本 sizes
100
+ .tree-item {
101
+ .btn {
102
+ --bs-btn-padding-x: 0.75em;
103
+ --bs-btn-padding-y: 0.375em;
104
+ --bs-btn-font-size: 1em;
105
+ }
106
+
107
+ .card {
108
+ --bs-card-spacer-y: 1em;
109
+ --bs-card-spacer-x: 1em;
110
+ --bs-card-title-spacer-y: 0.5em;
111
+ --bs-card-cap-padding-y: 0.5em;
112
+ --bs-card-cap-padding-x: 1em;
113
+ --bs-card-img-overlay-padding: 1em;
114
+ --bs-card-group-margin: 0.75em;
115
+ }
116
+
117
+ .material-icons {
118
+ font-size: 1.5em;
119
+
120
+ &.icon-14 {
121
+ font-size: 0.875em;
122
+ }
123
+
124
+ &.icon-18 {
125
+ font-size: 1.125em;
126
+ }
127
+
128
+ &.icon-28 {
129
+ font-size: 1.75em;
130
+ }
131
+
132
+ &.icon-32 {
133
+ font-size: 2em;
134
+ }
135
+ }
136
+ }
137
+
138
+ // hover效果與優化
139
+ // firefox 暫不支援 has
140
+ .tree-item:has([data-bs-toggle="collapse"]:hover) + .collapse {
141
+ will-change: height;
142
+ }
143
+
144
+ .tree-item:hover > .card,
145
+ .tree-item .card:focus-within {
146
+ background-color: lighten( $primary, 32% );
147
+ border-color: rgba( $primary, .4 );
148
+ }
149
+
150
+ .tree-item{
151
+ .btn-title .material-icons:before {
152
+ content: "\e836";
153
+ display: inline-block;
154
+ font-family: inherit;
155
+ }
156
+
157
+ // active效果
158
+ &.active {
159
+ > .card {
160
+ background-color: lighten( $primary, 30% );
161
+ border-color: rgba( $primary, .5 );
162
+ }
163
+ > .card .btn-title .material-icons:before {
164
+ content: "\e837";
165
+ }
166
+ .btn-title {
167
+ color: $primary;
168
+ }
169
+ }
170
+ }
171
+
172
+ .btn-title {
173
+ cursor: pointer;
174
+ .btn {
175
+ border-radius: 0;
176
+
177
+ &:focus, &:active {
178
+ border-color: transparent;
179
+ }
180
+ }
181
+
182
+ .btn-text {
183
+ width: 100%;
184
+ text-align: left;
185
+ overflow-wrap: anywhere;
186
+ }
187
+ }
188
+
189
+
190
+ // 刪除子層標示 UI
191
+ .tree-item:has(.btn.text-danger:hover) {
192
+ .card {
193
+ background-color: lighten( $danger, 43% );
194
+ border-color: rgba( $danger, .5 );
195
+
196
+ .btn {
197
+ color: $danger;
198
+ }
199
+ }
200
+ }
201
+ // 刪除子層標示 UI (含子層)
202
+ // .tree-child:has(.btn.text-danger:hover){
203
+ // .card, + .content-children .card{
204
+ // background-color: lighten( $danger, 43% );
205
+ // border-color: rgba( $danger, .5 );
206
+ // .btn{
207
+ // color: $danger;
208
+ // }
209
+ // }
210
+ // }
211
+
212
+ .btn-no-children {
213
+ cursor: auto;
214
+
215
+ &:focus {
216
+ border-color: transparent;
217
+ }
218
+ }
219
+
220
+ // 基本 style
221
+ $card-margin: .2em;
222
+ $line-padding: .7em;
223
+
224
+ .tree-item {
225
+ display: flex;
226
+ flex-direction: column;
227
+ width: 100%;
228
+ margin-top: $card-margin;
229
+
230
+ .card {
231
+ position: relative;
232
+ flex-grow: 1;
233
+ transition: $transition-base;
234
+ }
235
+ }
236
+
237
+ .col-action {
238
+ @include flex-center;
239
+ width: 2.8rem;
240
+ }
241
+
242
+
243
+ // 開合 style
244
+ .btn[data-bs-toggle="collapse"] {
245
+ .material-icons {
246
+ transition: $transition-base;
247
+ }
248
+
249
+ &[aria-expanded="false"] .material-icons {
250
+ transform: rotate(-90deg);
251
+ }
252
+
253
+ &:disabled, &.disabled {
254
+ border-color: transparent;
255
+ }
256
+ }
257
+
258
+ // 畫線 style
259
+ .content-children {
260
+ padding-left: 1.5rem;
261
+ --tree-border-color: #fff;
262
+ position: relative;
263
+
264
+ &:before {
265
+ content: "";
266
+ position: absolute;
267
+ display: block;
268
+ left: -$line-padding;
269
+ bottom: 24px;
270
+ width: 1px;
271
+ height: 100%;
272
+ z-index: 1;
273
+ background-color: var(--tree-border-color);
274
+ }
275
+ // // line color
276
+ &:before, .tree-item .card:before, .tree-item .card:after {
277
+ background-color: var(--tree-border-color);
278
+ }
279
+ }
280
+
281
+ .tree-item {
282
+ &:last-child > .content-children:before {
283
+ display: none;
284
+ }
285
+
286
+ .card {
287
+ position: relative;
288
+
289
+ &:before, &:after {
290
+ content: "";
291
+ position: absolute;
292
+ left: calc(-#{$line-padding} - #{$border-width});
293
+ z-index: 1;
294
+ }
295
+
296
+ &:before {
297
+ bottom: 50%;
298
+ width: 1px;
299
+ height: calc(100% + #{$card-margin}*2 + #{$border-width}*2);
300
+ }
301
+
302
+ &:after {
303
+ top: 0;
304
+ bottom: 0;
305
+ width: $line-padding;
306
+ height: 1px;
307
+ margin: auto;
308
+ }
309
+ }
310
+
311
+ &:nth-child(1) > .card:before {
312
+ height: calc(50% + #{$card-margin} + #{$border-width});
313
+ }
314
+ }
315
+
316
+
317
+ // 小版本
318
+ .tree-item-sm {
319
+ > .card {
320
+ font-size: 86%;
321
+ }
322
+
323
+ .content-children {
324
+ padding-left: 1rem;
325
+ }
326
+
327
+ .content-children:before {
328
+ left: -10px;
329
+ bottom: 19px;
330
+ }
331
+ }
332
+ // .tree-item-sm + .content-children{
333
+ // > .children-box{
334
+ // padding-left: 1rem;
335
+ // }
336
+ // }
337
+
338
+
339
+ // 白背景版本
340
+ .tree-item-in-white {
341
+ .content-children {
342
+ --tree-border-color: var(--bs-border-color);
343
+ }
344
+
345
+ .card {
346
+ --bs-card-bg: var(--gray-100);
347
+ --bs-card-border-color: var(--bs-border-color);
348
+ }
349
+
350
+ &:hover > .card,
351
+ .card:focus-within {
352
+ background-color: $white;
353
+ }
354
+ // active效果
355
+ &.active .card {
356
+ background-color: $white;
357
+ }
358
+ }
359
359
  </style>