@iamproperty/components 3.0.0 → 3.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.
Files changed (34) hide show
  1. package/assets/css/core.min.css +1 -1
  2. package/assets/css/core.min.css.map +1 -1
  3. package/assets/css/style.min.css +1 -1
  4. package/assets/css/style.min.css.map +1 -1
  5. package/assets/js/main.js +1 -1
  6. package/assets/js/modules/file-upload.js +48 -0
  7. package/assets/js/modules/form.js +27 -18
  8. package/assets/js/modules/orderablelist.js +122 -0
  9. package/assets/js/scripts.bundle.js +43 -35
  10. package/assets/js/scripts.bundle.js.map +1 -1
  11. package/assets/js/scripts.bundle.min.js +2 -2
  12. package/assets/js/scripts.bundle.min.js.map +1 -1
  13. package/assets/sass/_functions/utilities.scss +0 -107
  14. package/assets/sass/_tests/colours.spec.scss +1 -1
  15. package/assets/sass/components/carousel.scss +1 -1
  16. package/assets/sass/components/nav.scss +42 -0
  17. package/assets/sass/elements/buttons.scss +46 -4
  18. package/assets/sass/elements/card.scss +112 -0
  19. package/assets/sass/elements/container.scss +13 -2
  20. package/assets/sass/elements/forms.scss +68 -0
  21. package/assets/sass/elements/links.scss +2 -1
  22. package/assets/sass/elements/lists.scss +48 -1
  23. package/assets/sass/elements/tables.scss +1 -1
  24. package/assets/sass/foundations/icons.scss +8 -0
  25. package/assets/sass/foundations/root.scss +19 -0
  26. package/assets/ts/main.ts +1 -1
  27. package/dist/components.es.js +88 -74
  28. package/dist/components.umd.js +6 -6
  29. package/dist/style.css +1 -1
  30. package/package.json +2 -2
  31. package/src/components/Accordion/Accordion.vue +1 -1
  32. package/src/components/CardDeck/CardDeck.vue +1 -1
  33. package/src/elements/Card/Card.vue +11 -2
  34. package/src/elements/Input/Input.vue +14 -10
@@ -87,113 +87,6 @@ $utilities: map-merge(
87
87
  );
88
88
  // #endregion
89
89
 
90
- // #region Remove the responsive classes for the spacing utilities
91
- /*
92
- The spacing utilities are useful but could be mis-used. The spacing of elements should be defined via the elements/components CSS.
93
- But at times tweaks/fixes to spacing needs to be made and can prevent the need of duplicate CSS to be created.
94
- However our spacing rules should be consistant across devices and we shouldn't allow device specific 'fixes' to be made
95
- Removing the resposive classes aves around 8kbs
96
- */
97
- $utilities: map-merge(
98
- $utilities,
99
- (
100
- // Padding
101
- "padding": map-merge(
102
- map-get($utilities, "padding"),
103
- (
104
- responsive: false
105
- ),
106
- ),
107
- "padding-x": map-merge(
108
- map-get($utilities, "padding-x"),
109
- (
110
- responsive: false
111
- ),
112
- ),
113
- "padding-y": map-merge(
114
- map-get($utilities, "padding-y"),
115
- (
116
- responsive: false
117
- ),
118
- ),
119
- "padding-top": map-merge(
120
- map-get($utilities, "padding-top"),
121
- (
122
- responsive: false
123
- ),
124
- ),
125
- "padding-end": map-merge(
126
- map-get($utilities, "padding-end"),
127
- (
128
- responsive: false
129
- ),
130
- ),
131
- "padding-bottom": map-merge(
132
- map-get($utilities, "padding-bottom"),
133
- (
134
- responsive: false
135
- ),
136
- ),
137
- "padding-start": map-merge(
138
- map-get($utilities, "padding-start"),
139
- (
140
- responsive: false
141
- ),
142
- ),
143
- // Margin
144
- "margin": map-merge(
145
- map-get($utilities, "margin"),
146
- (
147
- responsive: false
148
- ),
149
- ),
150
- "margin-x": map-merge(
151
- map-get($utilities, "margin-x"),
152
- (
153
- responsive: false
154
- ),
155
- ),
156
- "margin-y": map-merge(
157
- map-get($utilities, "margin-y"),
158
- (
159
- responsive: false
160
- ),
161
- ),
162
- "margin-top": map-merge(
163
- map-get($utilities, "margin-top"),
164
- (
165
- responsive: false
166
- ),
167
- ),
168
- "margin-end": map-merge(
169
- map-get($utilities, "margin-end"),
170
- (
171
- responsive: false
172
- ),
173
- ),
174
- "margin-bottom": map-merge(
175
- map-get($utilities, "margin-bottom"),
176
- (
177
- responsive: false
178
- ),
179
- ),
180
- "margin-start": map-merge(
181
- map-get($utilities, "margin-start"),
182
- (
183
- responsive: false
184
- ),
185
- ),
186
- // Gap
187
- "gap": map-merge(
188
- map-get($utilities, "gap"),
189
- (
190
- responsive: false
191
- ),
192
- ),
193
- )
194
- );
195
- // #endregion
196
-
197
90
  // #region Fonts
198
91
  $utilities: map-merge(
199
92
  $utilities,
@@ -23,7 +23,7 @@ $test_colors: map-merge((
23
23
  "hover": var(--colour-hover-theme),
24
24
  "active-theme": #b4e6a5,
25
25
  "active": var(--colour-active-theme),
26
- "selected-theme": #b4e6a5,
26
+ "selected-theme": #1ebee6,
27
27
  "selected": var(--colour-selected-theme)
28
28
  ), $test_colors);
29
29
 
@@ -53,7 +53,7 @@ body.js-enabled .carousel__inner::-webkit-scrollbar {
53
53
 
54
54
  // #region carousel controls/pips
55
55
  .carousel:not(.hide-controls) {
56
- padding-bottom: 4.5rem;
56
+ padding-bottom: 4.5rem!important;
57
57
  }
58
58
 
59
59
  .carousel.hide-controls .carousel__controls {
@@ -916,4 +916,46 @@ nav + main > *:first-child {
916
916
  }
917
917
  }
918
918
  }
919
+ // #endregion
920
+
921
+ // #region
922
+
923
+ .nav--just-account {
924
+
925
+ .nav__menu,
926
+ .nav__account-btn {
927
+ display: none!important;
928
+ }
929
+
930
+ @include media-breakpoint-up(md) {
931
+
932
+ .nav__menu,
933
+ .nav__account-btn {
934
+ display: block!important;
935
+ }
936
+ }
937
+
938
+ #showMenu:checked ~ .nav__menu--account {
939
+ height: 100vh;
940
+ overflow: visible;
941
+ overflow-x: auto;
942
+ left: 0;
943
+ pointer-events: none;
944
+ background: transparent;
945
+
946
+ @include media-breakpoint-up(sm) {
947
+
948
+ width: rem(375);
949
+ left: calc(100% - #{rem(375)});
950
+ }
951
+
952
+ > .container:first-child {
953
+ opacity: 0;
954
+ }
955
+ > .container:not(:first-child) {
956
+ pointer-events: all;
957
+ }
958
+ }
959
+ }
960
+
919
961
  // #endregion
@@ -19,7 +19,7 @@
19
19
  border-radius: rem(20);
20
20
  margin-bottom: rem(24);
21
21
  margin-right: rem(16);
22
- transition: background-color .5s, color .5s;
22
+ transition: all .5s, color .5s;
23
23
  height: auto;
24
24
 
25
25
  a:hover &,
@@ -79,6 +79,11 @@
79
79
  &.btn-tag.btn-primary {
80
80
  --btn-bg: var(--colour-warning);
81
81
  }
82
+
83
+ &.btn-admin:not(:hover):not(:focus) {
84
+ background: var(--colour-admin);
85
+ border-color: var(--colour-admin)!important;
86
+ }
82
87
  }
83
88
 
84
89
  input:checked + .btn:not(:hover):not(:focus),
@@ -96,9 +101,9 @@ details[open] > summary.btn:first-child {
96
101
 
97
102
  input:checked + .btn-tertiary:not(:hover):not(:focus):not(:active),
98
103
  input:checked + .btn-tag:not(.btn-primary):not(.btn-secondary):not(:hover):not(:focus):not(:active) {
99
- background: var(--btn-tertiary-bg);
100
- border-color: var(--btn-hover-text);
101
- color: var(--btn-tertiary-hover-text);
104
+ background: var(--colour-selected);
105
+ border-color: var(--colour-selected)!important;
106
+ color: var(--colour-primary);
102
107
  }
103
108
 
104
109
 
@@ -205,6 +210,43 @@ input:checked + .btn-tag:not(.btn-primary):not(.btn-secondary):not(:hover):not(:
205
210
  width: 100%;
206
211
  }
207
212
  }
213
+
214
+ .btn-group--admin {
215
+
216
+ position: relative;
217
+
218
+ &:before {
219
+ content: "";
220
+ width: calc(100% - 2px);
221
+ height: rem(48);
222
+ background-color: var(--colour-admin)!important;
223
+ position: absolute;
224
+ top: 0;
225
+ left: 0;
226
+ z-index: 0;
227
+ border-radius: 0.5rem!important;
228
+ }
229
+
230
+ > .btn:not(:hover):not(:focus) {
231
+ border-radius: 0.5rem!important;
232
+ background: var(--colour-admin);
233
+
234
+ border-color: var(--colour-admin)!important;
235
+ }
236
+
237
+ > .btn:is(:hover, :focus) {
238
+ border-radius: 0.5rem!important;
239
+ background: var(--colour-selected);
240
+
241
+ border-color: var(--colour-admin)!important;
242
+ color: var(--colour-primary);
243
+ }
244
+
245
+ > input:checked + .btn-tertiary:not(:hover):not(:focus):not(:active) {
246
+ border-color: var(--colour-admin)!important;
247
+
248
+ }
249
+ }
208
250
  // #endregion
209
251
 
210
252
  @import "../../../node_modules/bootstrap/scss/_button-group.scss";
@@ -84,6 +84,26 @@ a.card {
84
84
  }
85
85
  }
86
86
 
87
+ .card-banner {
88
+ padding: 0.5rem;
89
+
90
+ &__tag {
91
+
92
+ position: absolute;
93
+ top: 0;
94
+ left: 0;
95
+ background-color: var(--colour-secondary);
96
+ font-size: rem(14);
97
+ font-weight: bold;
98
+ aspect-ratio: 1;
99
+ padding: 0.75rem;
100
+ border-radius: 50%;
101
+ transform: translate(-0.25rem,-1.25rem) rotate(-25deg);
102
+ box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)!important;
103
+
104
+ }
105
+ }
106
+
87
107
  .card-body {
88
108
 
89
109
  color: var(--colour-body);
@@ -175,3 +195,95 @@ a.card {
175
195
  }
176
196
  }
177
197
  // #endregion
198
+
199
+ // #region Small cards
200
+ .card--small {
201
+
202
+ display: flex;
203
+ flex-direction: row;
204
+ align-items: center;
205
+ padding-inline: 0.5rem;
206
+
207
+ .card-header__wrapper,
208
+ .card-body > *:not(.card-title) {
209
+ display: none;
210
+ }
211
+
212
+ .card-body,
213
+ .card-footer {
214
+ padding: 0.5rem;
215
+ }
216
+
217
+ .card-title {
218
+ margin: 0;
219
+ }
220
+
221
+ .btn {
222
+ margin-right: 0;
223
+ white-space: nowrap;
224
+
225
+ &:not(.btn--link) {
226
+ padding: 0.5em 1em
227
+ }
228
+ }
229
+
230
+ &:not([target="_blank"]) .btn-primary:not(.btn--link):after {
231
+
232
+ content: "";
233
+ height: 1em;
234
+ width: 1em;
235
+ margin-left: 0.5em;
236
+ margin-right: -0.5em;
237
+ display: inline-block;
238
+ vertical-align: baseline;
239
+ margin-bottom: -0.15em;
240
+
241
+ mask-image: var(--icon-arrow);
242
+ mask-size: 100% 100%;
243
+ mask-repeat: no-repeat;
244
+ mask-position: 0 0;
245
+
246
+ -webkit-mask-image: var(--icon-arrow);
247
+ -webkit-mask-size: 100% 100%;
248
+ -webkit-mask-repeat: no-repeat;
249
+ -webkit-mask-position: 0 0;
250
+ background-color: currentColor;
251
+ }
252
+
253
+
254
+ @include media-breakpoint-up(md) {
255
+
256
+ flex-wrap: wrap;
257
+ .card-footer {
258
+ min-width: 100%;
259
+ text-align: right;
260
+ }
261
+ }
262
+ }
263
+
264
+ .card--danger,
265
+ .card--warning,
266
+ .card--success {
267
+ position: relative;
268
+ padding-left: 1.5rem;
269
+
270
+ &:after {
271
+
272
+ content: "";
273
+ height: 100%;
274
+ width: 1rem;
275
+ background: var(--colour-danger);
276
+ display: block;
277
+ position: absolute;
278
+ top: 0;
279
+ left: 0;
280
+ }
281
+ }
282
+
283
+ .card--warning:after {
284
+ background: var(--colour-warning);
285
+ }
286
+ .card--success:after {
287
+ background: var(--colour-success);
288
+ }
289
+ // #endregion
@@ -15,12 +15,11 @@
15
15
  max-width: rem(1440);
16
16
  }
17
17
 
18
- .container {
18
+ .container:not(.container-xs-breakout) {
19
19
  padding-left: 0;
20
20
  padding-right: 0;
21
21
  padding-bottom: 0;
22
22
  padding-top: 0;
23
- content-visiblity: unset!important; /* We only want to delay the painting of top level containers */
24
23
  }
25
24
 
26
25
  &[class*="bg-"] {
@@ -45,6 +44,18 @@
45
44
  clear: both;
46
45
  content: "";
47
46
  }
47
+
48
+ &.container-xs-breakout {
49
+ margin-left: -1.25rem;
50
+ margin-right: -1.25rem;
51
+ width: calc(100% + 2.5rem);
52
+
53
+ @include media-breakpoint-up(sm) {
54
+ margin-left: auto;
55
+ margin-right: auto;
56
+ width: 100%;
57
+ }
58
+ }
48
59
  }
49
60
  // #endregion
50
61
 
@@ -192,3 +192,71 @@ select[multiple]::-webkit-scrollbar-thumb {
192
192
  }
193
193
 
194
194
  // #endregion
195
+
196
+
197
+ // #region large upload field
198
+
199
+ .form-control__wrapper.form-control--lrg-file {
200
+ aspect-ratio: 4/2;
201
+ border: 1px dashed var(--colour-selected);
202
+ position: relative;
203
+
204
+ .icon {
205
+ position: absolute;
206
+ top: 50%;
207
+ left:50%;
208
+ transform: translate(-50%,calc(-50% - 1rem));
209
+ color: var(--colour-muted);
210
+ font-size: 5rem;
211
+ height: 1em;
212
+ width: 1em;
213
+ pointer-events: none;
214
+ }
215
+
216
+ > label {
217
+
218
+ position: absolute;
219
+ top: calc(50% + 2rem);
220
+ left:50%;
221
+ transform: translate(-50%,-50%);
222
+ width: 100%;
223
+ text-align: center;
224
+ }
225
+
226
+ > input {
227
+ position: absolute;
228
+ top: 0;
229
+ left: 0;
230
+ height: 100%;
231
+ width: 100%;
232
+ opacity: 0;
233
+ }
234
+
235
+ .file-uploaded & {
236
+ border: 3px solid var(--colour-success);
237
+ border-radius: 50%;
238
+ aspect-ratio: 1;
239
+ margin-inline: auto;
240
+ max-width: 10rem;
241
+
242
+ > label {
243
+ content: "File uploaded";
244
+ }
245
+ }
246
+ }
247
+
248
+ .file-upload__add {
249
+ display: none;
250
+
251
+ .file-uploaded & {
252
+ display: block;
253
+ margin-inline: auto;
254
+ color: var(--colour-muted);
255
+ font-size: rem(14);
256
+ text-align: center;
257
+ margin-top: -1rem;
258
+ margin-bottom: 1rem;
259
+ cursor: pointer;
260
+ }
261
+ }
262
+ // #endrgion
@@ -43,7 +43,8 @@ a,
43
43
  @include var (color, --colour-active);
44
44
  }
45
45
 
46
- &[target="_blank"]:after {
46
+ &[target="_blank"]:not(.card):after,
47
+ &.card[target="_blank"] .btn:after {
47
48
 
48
49
  content: "";
49
50
  height: 1em;
@@ -50,7 +50,7 @@
50
50
 
51
51
  &.tick--incomplete:before {
52
52
 
53
- background: currentColor;
53
+ background: var(--colour-admin);
54
54
  mask-image: none;
55
55
  -webkit-mask-image: none;
56
56
  border-radius: 50%;
@@ -110,4 +110,51 @@
110
110
  text-transform: uppercase;
111
111
  }
112
112
  }
113
+ }
114
+
115
+ .orderable-list {
116
+
117
+ margin-left: 3.5rem;
118
+ counter-reset: countItem;
119
+ padding-left: 0;
120
+
121
+ li {
122
+ position: relative;
123
+ list-style: none;
124
+ --spread: 0.75rem;
125
+ box-shadow: 0 2px var(--spread) 0 rgba(154, 154, 154, 0.25);
126
+ padding: 1rem;
127
+ margin-bottom: 1rem;
128
+ border-radius: 0.5rem;
129
+ cursor: grab;
130
+ }
131
+
132
+ li:before {
133
+ content: "";
134
+ --gradient-direction: 180deg;
135
+ background-color: var(--colour-info);
136
+ background-image: linear-gradient(var(--gradient-direction), var(--colour-secondary) 0, transparent 100%) !important;
137
+ height: 100%;
138
+ width: 2.5rem;
139
+ display: inline-block;
140
+ position: absolute;
141
+ top: 0;
142
+ right: calc(100% + 1rem);
143
+ border-radius: 0.5rem;
144
+ }
145
+
146
+ li:after {
147
+ counter-increment: countItem; /* Increment the value of section counter by 1 */
148
+ content: counter(countItem);
149
+ height: 2rem;
150
+ width: 2.5rem;
151
+ line-height: 2rem;
152
+ font-size: rem(20);
153
+ font-weight: bold;
154
+ display: inline-block;
155
+ position: absolute;
156
+ top: calc(50% - 1rem);
157
+ right: calc(100% + 1rem);
158
+ text-align: center;
159
+ }
113
160
  }
@@ -99,7 +99,7 @@ table.border-0 {
99
99
 
100
100
  // #region Tables are only stacked on mobile
101
101
  @media screen and (max-width: 36em) {
102
- .table__wrapper:not(.table-fullwidth) {
102
+ .table__wrapper:not(.table-fullwidth):not(.client-table) {
103
103
 
104
104
  overflow: hidden;
105
105
 
@@ -26,6 +26,14 @@
26
26
  & + .icon {
27
27
  margin-inline-start: 1rem;
28
28
  }
29
+
30
+ &[class*="fs-"] {
31
+ width: 1.5em;
32
+ height: 1.5em;
33
+ vertical-align: text-top;
34
+ margin-top: -0.15em;
35
+ margin-inline: 0.25em;
36
+ }
29
37
  }
30
38
 
31
39
  @include inline-text(){
@@ -104,4 +104,23 @@
104
104
 
105
105
  --colour-underline: white;
106
106
  }
107
+ }
108
+
109
+
110
+
111
+ @include media-breakpoint-up(md) {
112
+
113
+ .invert-colours-md {
114
+
115
+ @if $compatible != "true" {
116
+
117
+ @include invert-colours();
118
+ }
119
+ color: white;
120
+ --colour-underline: white;
121
+ }
122
+
123
+ [class*="bg-"].bg-md-transparent {
124
+ background: transparent!important;
125
+ }
107
126
  }
package/assets/ts/main.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  import * as helpers from '../js/modules/helpers'
4
4
  import nav from '../js/modules/nav'
5
5
  import table from '../js/modules/table'
6
- import accordion from './modules/accordion'
6
+ import accordion from '../js/modules/accordion'
7
7
  import testimonial from '../js/modules/testimonial'
8
8
  import carousel from '../js/modules/carousel'
9
9
  import form from '../js/modules/form'