@3squared/forge-ui-3 0.1.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.
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@3squared/forge-ui-3",
3
+ "repository": "https://github.com/3Squared/ForgeUI",
4
+ "description": "ForgeUI 3 is Vue 3 UI Library which combines a variety of popular packages to create a consistent UI for your application.",
5
+ "version": "0.1.0",
6
+ "license": "MIT",
7
+ "contributors": [
8
+ {
9
+ "name": "Jacob Minor",
10
+ "email": "jacob.minor@3squared.com"
11
+ }
12
+ ],
13
+ "main": "./dist/esm/forge-ui-3.mjs",
14
+ "module": "./dist/esm/forge-ui-3.mjs",
15
+ "types": "./dist/types/index.d.ts",
16
+ "files": [
17
+ "dist/*",
18
+ "src/styles/*"
19
+ ],
20
+ "scripts": {
21
+ "dev": "vite",
22
+ "test": "cypress run --component --headed --browser chrome && vitest run --coverage && node ./scripts/merge.js",
23
+ "test:component": "cypress open --component --browser chrome",
24
+ "test:unit": "vitest --ui --coverage",
25
+ "build": "vue-tsc && vite build",
26
+ "preview": "vite preview"
27
+ },
28
+ "dependencies": {
29
+ "@azure/abort-controller": "^1.0.0",
30
+ "@azure/storage-blob": "^12.17.0",
31
+ "@popperjs/core": "^2.11.8",
32
+ "@iconify/vue": "^4.1.1",
33
+ "@vee-validate/zod": "^4.11.8",
34
+ "@vueuse/components": "^10.6.1",
35
+ "bootstrap": "5.3.2",
36
+ "primevue": "^3.48.1",
37
+ "vee-validate": "^4.11.8",
38
+ "vue": "^3.4.14",
39
+ "vue-multiselect": "^3.0.0-beta.3",
40
+ "zod": "^3.22.4"
41
+ },
42
+ "devDependencies": {
43
+ "@cypress/code-coverage": "3.12.26",
44
+ "@vitejs/plugin-vue": "5.0.4",
45
+ "@vitest/coverage-v8": "1.3.1",
46
+ "@vitest/ui": "1.3.1",
47
+ "cypress": "13.6.6",
48
+ "cypress-real-events": "1.12.0",
49
+ "vite-bundle-visualizer": "1.0.1",
50
+ "sass": "1.71.1",
51
+ "typescript": "5.3.3",
52
+ "unplugin-vue-components": "0.26.0",
53
+ "vite": "5.1.4",
54
+ "vite-plugin-istanbul": "5.0.0",
55
+ "vitest": "1.3.1",
56
+ "vue-tsc": "2.0.4"
57
+ },
58
+ "nyc": {
59
+ "all": true,
60
+ "report-dir": "coverage/cypress",
61
+ "include": "*",
62
+ "exclude": "**/*.cy.ts",
63
+ "extension": [
64
+ ".js",
65
+ ".cjs",
66
+ ".mjs",
67
+ ".ts",
68
+ ".tsx",
69
+ ".jsx",
70
+ ".vue"
71
+ ],
72
+ "reporter": [
73
+ "json",
74
+ "cobertura"
75
+ ]
76
+ },
77
+ "publishConfig": {
78
+ "access": "public"
79
+ }
80
+ }
@@ -0,0 +1,4 @@
1
+ .alert-icon {
2
+ height: 1.5rem;
3
+ width: 1.5rem;
4
+ }
@@ -0,0 +1,20 @@
1
+ .badge-xl {
2
+ font-size: 1.5rem;
3
+ min-width: 3rem;
4
+ height: 3rem;
5
+ line-height: 3rem;
6
+ }
7
+
8
+ .badge-lg {
9
+ font-size: 1.125rem;
10
+ min-width: 2.25rem;
11
+ height: 2.25rem;
12
+ line-height: 2.25rem;
13
+ }
14
+
15
+ @each $color, $value in $base-colors {
16
+ .badge-#{$color} {
17
+ background-color: map-get($theme-colors, $color);
18
+ color: white;
19
+ }
20
+ }
@@ -0,0 +1,17 @@
1
+ @each $color, $value in $base-colors {
2
+ .btn.btn-text-#{$color}{
3
+ &:hover, &:active:focus {
4
+ background-color: map-get($subtle-colors, '#{$color}-subtle');
5
+ }
6
+ }
7
+
8
+ .badge.button-badge-#{$color} {
9
+ background-color: white;
10
+ color: map-get($theme-colors, $color);
11
+
12
+ &.outlined {
13
+ background-color: map-get($theme-colors, $color);
14
+ color: white;
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,8 @@
1
+ .datepicker-panel {
2
+ min-width: 350px;
3
+ width: 350px
4
+ }
5
+
6
+ .p-datepicker-trigger {
7
+ display: none !important;
8
+ }
@@ -0,0 +1,3 @@
1
+ .modal-open {
2
+ background-color: rgba($modal-backdrop-bg, $modal-backdrop-opacity);
3
+ }
@@ -0,0 +1,11 @@
1
+ .item {
2
+ background-color: white;
3
+
4
+ &:hover {
5
+ background-color: $primary-light;
6
+ }
7
+ }
8
+
9
+ .dropdown-input {
10
+ min-width: 200px;
11
+ }
@@ -0,0 +1,35 @@
1
+ .file-container {
2
+ max-height: 500px;
3
+ overflow-y: auto;
4
+ border: var(--bs-border-width) dashed var(--bs-border-color);
5
+ border-radius: 0.25rem;
6
+ }
7
+
8
+ .preview-button {
9
+ position: absolute;
10
+ left: 0;
11
+ top: 0;
12
+ width: 100%;
13
+ height: 100%;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ opacity: 0;
18
+ border: none;
19
+ padding: 0;
20
+ color: white;
21
+
22
+ &:hover {
23
+ opacity: 1;
24
+ cursor: pointer;
25
+ background-color: rgba(0, 0, 0, .5);
26
+ }
27
+ }
28
+
29
+ .mask {
30
+ background-color: rgba(0, 0, 0, .9)
31
+ }
32
+
33
+ .preview {
34
+ background-color: rgba(255, 255, 255, .9)
35
+ }
@@ -0,0 +1,13 @@
1
+ .forge-loader {
2
+ position: absolute;
3
+ height: 100%;
4
+ width: 100%;
5
+ background-color: #fff;
6
+ opacity: 0.7;
7
+ display: flex;
8
+ justify-content: center;
9
+ align-items: center;
10
+ top: 0;
11
+ left: 0;
12
+ z-index: 1000;
13
+ }
@@ -0,0 +1,9 @@
1
+ .alternating-item-list {
2
+ & .item:nth-child(odd) {
3
+ background-color: $gray-200;
4
+ }
5
+
6
+ & .close-icon {
7
+ fill: $gray-700;
8
+ }
9
+ }
@@ -0,0 +1,305 @@
1
+ @import 'vue-multiselect/dist/vue-multiselect.css';
2
+
3
+ .multiselect {
4
+ cursor: pointer;
5
+ box-sizing: content-box;
6
+ display: block;
7
+ position: relative;
8
+ width: 100%;
9
+ min-height: 31px !important;
10
+ text-align: left;
11
+ color: #35495e;
12
+
13
+ &.is-invalid {
14
+
15
+ .multiselect__select {
16
+ right: 25px;
17
+ z-index: 10;
18
+ }
19
+
20
+ .multiselect__clear-icon {
21
+ right: 50px;
22
+ z-index: 10;
23
+ }
24
+
25
+ .multiselect__tags,
26
+ .multiselect__tags:hover,
27
+ &:not(.multiselect--disabled):not(.multiselect--active) .multiselect__tags:hover {
28
+ @extend .is-invalid;
29
+ @extend .form-control;
30
+ }
31
+ }
32
+ }
33
+
34
+ .multiselect,
35
+ .multiselect__input,
36
+ .multiselect__single {
37
+ font-family: inherit;
38
+ font-size: 14px !important;
39
+ font-weight: 400;
40
+ touch-action: manipulation;
41
+ }
42
+
43
+ .multiselect__input:hover,
44
+ .multiselect__single:hover {
45
+ font-size: 14px;
46
+ border-color: $input-border-color;
47
+ }
48
+
49
+ .multiselect__input:focus,
50
+ .multiselect__single:focus {
51
+ font-size: 14px;
52
+ border-color: $input-border-color;
53
+ outline: none;
54
+ }
55
+
56
+ .multiselect__input,
57
+ .multiselect__single {
58
+ position: relative;
59
+ display: inline-block;
60
+ min-height: 20px;
61
+ line-height: 21px;
62
+ border: none;
63
+ border-radius: 5px;
64
+ background: #fff;
65
+ padding: 0 0 0 5px;
66
+ width: calc(100%);
67
+ transition: border 0.1s ease;
68
+ box-sizing: border-box;
69
+ margin-top: 3px !important;
70
+ margin-bottom: 3px !important;
71
+ vertical-align: top;
72
+ }
73
+
74
+ .multiselect--left .multiselect__content-wrapper {
75
+ right: 0;
76
+ }
77
+
78
+ .multiselect--showClearSelection .multiselect__tags {
79
+ padding: 2px 35px 0 2px !important;
80
+ }
81
+
82
+ @each $color, $value in $theme-colors {
83
+ .forge-multiselect-#{$color} {
84
+ .multiselect,
85
+ .multiselect__input,
86
+ .multiselect__single {
87
+ font-family: inherit;
88
+ font-size: 14px !important;
89
+ font-weight: 400;
90
+ touch-action: manipulation;
91
+ margin: 0 !important;
92
+ }
93
+
94
+ .multiselect__placeholder {
95
+ color: #000000;
96
+ display: inline-block;
97
+ margin-bottom: 0;
98
+ padding-left: 5px;
99
+ padding-top: 0;
100
+ font-weight: 400;
101
+ }
102
+
103
+ .multiselect__select {
104
+ line-height: 16px;
105
+ display: block;
106
+ position: absolute;
107
+ box-sizing: border-box;
108
+ width: 25px;
109
+ height: 25px;
110
+ right: 1px;
111
+ top: 4px;
112
+ padding: unset;
113
+ margin: 0;
114
+ margin-top: auto;
115
+ margin-bottom: auto;
116
+ text-decoration: none;
117
+ text-align: center;
118
+ cursor: pointer;
119
+ transition: transform 0.2s ease;
120
+ }
121
+
122
+ .multiselect__select:before {
123
+ position: relative;
124
+ right: 0;
125
+ top: 65%;
126
+ color: $gray-700;
127
+ margin-top: 3px;
128
+ border-style: solid;
129
+ border-width: 5px 5px 0 5px;
130
+ border-color: #999999 transparent transparent transparent;
131
+ content: "";
132
+ }
133
+
134
+ .multiselect__tags {
135
+ min-height: 31px;
136
+ display: block;
137
+ padding: 3px 26px 0 3px;
138
+ border-radius: 5px;
139
+ border: 1px solid $input-border-color;
140
+ background: #fff;
141
+ }
142
+
143
+ .multiselect__content-wrapper {
144
+ position: absolute;
145
+ display: block;
146
+ background: #fff;
147
+ width: unset !important;
148
+ min-width: 100%;
149
+ font-weight: initial;
150
+ min-height: unset;
151
+ overflow: auto;
152
+ border: $input-border-width solid $input-border-color;
153
+ z-index: 50;
154
+ -webkit-overflow-scrolling: touch;
155
+ }
156
+
157
+ .multiselect__tag {
158
+ background: $value;
159
+ position: relative;
160
+ display: inline-block;
161
+ padding: 4px 26px 4px 8px;
162
+ border-radius: 0;
163
+ color: #fff;
164
+ line-height: 1;
165
+ margin: 2.5px;
166
+ white-space: normal;
167
+ overflow: hidden;
168
+ max-width: 100%;
169
+ text-overflow: ellipsis;
170
+ font-weight: 400;
171
+ z-index: 2;
172
+ }
173
+
174
+ .multiselect__option {
175
+ display: block;
176
+ padding: 5px;
177
+ min-height: 26px;
178
+ line-height: 21px;
179
+ text-decoration: none;
180
+ text-transform: none;
181
+ vertical-align: middle;
182
+ position: relative;
183
+ cursor: pointer;
184
+ white-space: nowrap;
185
+ }
186
+
187
+ .multiselect__option:after {
188
+ top: 0;
189
+ right: 0;
190
+ position: absolute;
191
+ line-height: 21px;
192
+ padding-right: 12px;
193
+ padding-left: 20px;
194
+ font-size: 14px;
195
+ }
196
+
197
+ .multiselect__option--selected {
198
+ background: white;
199
+ color: black;
200
+ font-weight: normal;
201
+ }
202
+
203
+ .multiselect__option--selected:after {
204
+ content: "";
205
+ color: silver;
206
+ }
207
+
208
+ .multiselect__option--selected.multiselect__option--highlight {
209
+ background: lightgray;
210
+ color: black;
211
+ }
212
+
213
+ .multiselect__option--selected.multiselect__option--highlight:after {
214
+ background: lightgray;
215
+ content: "";
216
+ color: #fff;
217
+ }
218
+
219
+ .multiselect__option--highlight {
220
+ background: lightgray;
221
+ outline: none;
222
+ color: black;
223
+ }
224
+
225
+ .multiselect__option--highlight:after {
226
+ content: "";
227
+ background: gray;
228
+ color: white;
229
+ }
230
+
231
+ .multiselect__option--checkbox {
232
+ accent-color: $value;
233
+ }
234
+
235
+ .multiselect__tag-icon {
236
+ cursor: pointer;
237
+ margin-left: 7px;
238
+ position: absolute;
239
+ right: 0;
240
+ top: 0;
241
+ bottom: 0;
242
+ font-weight: 400;
243
+ font-style: initial;
244
+ width: 22px;
245
+ text-align: center;
246
+ line-height: 21px;
247
+ transition: all 0.2s ease;
248
+ border-radius: 0;
249
+ border-left: 1px solid #ffffff
250
+ }
251
+
252
+ .multiselect__tag-icon:after {
253
+ content: "×";
254
+ color: #ffffff;
255
+ font-size: 14px;
256
+ }
257
+
258
+ .multiselect__tag-icon:focus,
259
+ .multiselect__tag-icon:hover {
260
+ background: none;
261
+ }
262
+
263
+ .multiselect__tag-icon:focus:after,
264
+ .multiselect__tag-icon:hover:after {
265
+ color: #ff0000;
266
+ }
267
+
268
+ .multiselect__clear-icon {
269
+ cursor: pointer;
270
+ position: absolute;
271
+ right: 20px;
272
+ top: 1px;
273
+ bottom: 0;
274
+ font-weight: 400;
275
+ font-style: initial;
276
+ width: 22px;
277
+ text-align: center;
278
+ line-height: 21px;
279
+ transition: all 0.2s ease;
280
+ border-radius: 0;
281
+ z-index: 1;
282
+ }
283
+
284
+ .multiselect__clear-icon:after {
285
+ content: "×";
286
+ color: $gray-800;
287
+ font-size: 14px;
288
+ }
289
+
290
+ .multiselect__clear-icon:focus,
291
+ .multiselect__clear-icon:hover {
292
+ background: none;
293
+ }
294
+
295
+ .multiselect__clear-icon:focus:after,
296
+ .multiselect__clear-icon:hover:after {
297
+ color: #ff0000;
298
+ }
299
+ }
300
+ }
301
+
302
+ .filter-header-multiselect__check-icon {
303
+ top: 1px;
304
+ left: 1px;
305
+ }
@@ -0,0 +1,32 @@
1
+ @mixin widgetSize($sizeMultipler) {
2
+ $height: 100px;
3
+ $width: 100px;
4
+ height: $height * $sizeMultipler;
5
+ width: $width * $sizeMultipler;
6
+ }
7
+
8
+ .widget {
9
+ &--sm {
10
+ @include widgetSize(1);
11
+
12
+ .value {
13
+ font-size: 3em;
14
+ }
15
+ }
16
+
17
+ &--md {
18
+ @include widgetSize(2);
19
+
20
+ .value {
21
+ font-size: 4em;
22
+ }
23
+ }
24
+
25
+ &--lg {
26
+ @include widgetSize(3);
27
+
28
+ .value {
29
+ font-size: 5em;
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,27 @@
1
+ .step {
2
+ @extend .border, .fs-5, .rounded-circle;
3
+ height: 50px;
4
+ width: 50px;
5
+ background-color: white;
6
+
7
+ &.inactive {
8
+ background-color: $gray-300;
9
+ border-color: $gray-300;
10
+ }
11
+
12
+ }
13
+
14
+ .line {
15
+ position: relative;
16
+
17
+ &::before {
18
+ display: block;
19
+ content: "";
20
+ width: 99%;
21
+ z-index: -1;
22
+ border-bottom: $gray-300 1px solid;
23
+ position: absolute;
24
+ margin: 0;
25
+ top: 30%;
26
+ }
27
+ }
@@ -0,0 +1,44 @@
1
+ table.table-lg {
2
+ // stylelint-disable-next-line selector-max-universal
3
+ > :not(caption) > * > * {
4
+ padding: 1rem 1rem;
5
+ }
6
+ }
7
+
8
+ .table-spinner {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ z-index: 2;
13
+ }
14
+
15
+ .table-overlay {
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ width: 100%;
20
+ height: 100%;
21
+ }
22
+
23
+ .sticky-header {
24
+ position: sticky;
25
+ top: 0;
26
+ z-index: 2;
27
+ }
28
+
29
+ .bg-clip-padding {
30
+ background-clip: padding-box;
31
+ }
32
+
33
+ .filter-input {
34
+ flex: 1 1 auto;
35
+ width: 1%;
36
+ }
37
+
38
+ [data-pc-section="headercheckbox.icon"], [data-pc-section="rowcheckbox.icon"] {
39
+ display: none;
40
+ }
41
+
42
+ [data-pc-name="rowradiobutton"] > [data-pc-section="input"] {
43
+ @extend .form-check-input;
44
+ }
@@ -0,0 +1,63 @@
1
+ @function getHoverColour($color) {
2
+ @if $color == danger {
3
+ @return #F9D9D5;
4
+ } @else if $color == warning {
5
+ @return #FFEFCF;
6
+ } @else if $color == success {
7
+ @return #C3E7D5;
8
+ } @else if $color == secondary {
9
+ @return #E5E5E5;
10
+ } @else {
11
+ @return #B9D5E7;
12
+ }
13
+ }
14
+
15
+ @each $color, $value in $base-colors {
16
+ .tile-#{$color} {
17
+ @if $color == secondary {
18
+ background-color: map-get($base-colors, "light") !important;
19
+ border-color: black !important;
20
+ } @else {
21
+ background-color: map-get($subtle-colors, $color + "-subtle") !important;
22
+ border-color: map-get($base-colors, $color) !important;
23
+ }
24
+
25
+ color: $black !important;
26
+ text-align: start !important;
27
+ border: none;
28
+ }
29
+
30
+ .btn.btn-#{$color}.tile-#{$color} {
31
+ &:hover {
32
+ background-color: getHoverColour($color) !important;
33
+ }
34
+
35
+ &:active {
36
+ background-color: map-get($subtle-colors, $color + "-subtle") !important;
37
+ }
38
+
39
+ &.tile-bar-left, &.tile-bar-top {
40
+ border-color: map-get($base-colors, $color) !important
41
+ }
42
+
43
+ &:focus {
44
+ @if $color == secondary {
45
+ background-color: map-get($base-colors, "light") !important;
46
+ } @else {
47
+ background-color: map-get($subtle-colors, $color + "-subtle") !important;
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ .tile-bar-top {
54
+ @extend .rounded-top;
55
+ border: none !important;
56
+ border-top: 8px solid !important;
57
+ }
58
+
59
+ .tile-bar-left {
60
+ @extend .rounded-start;
61
+ border: none !important;
62
+ border-left: 8px solid !important;
63
+ }
@@ -0,0 +1,8 @@
1
+ .toast-icon {
2
+ height: 30px;
3
+ width: 30px;
4
+ }
5
+
6
+ .toast-close-icon {
7
+ font-size: 0.6rem;
8
+ }