@oslokommune/punkt-css 16.26.3 → 17.0.1

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 (76) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/dist/css/components/accordion.css +27 -5
  3. package/dist/css/components/accordion.min.css +1 -1
  4. package/dist/css/components/alert.css +37 -3
  5. package/dist/css/components/alert.min.css +1 -1
  6. package/dist/css/components/calendar.css +4 -0
  7. package/dist/css/components/calendar.min.css +1 -1
  8. package/dist/css/components/combobox.css +82 -0
  9. package/dist/css/components/combobox.min.css +1 -1
  10. package/dist/css/components/datepicker.css +82 -3
  11. package/dist/css/components/datepicker.min.css +1 -1
  12. package/dist/css/components/footer.css +232 -108
  13. package/dist/css/components/footer.min.css +1 -1
  14. package/dist/css/components/header-global.css +287 -0
  15. package/dist/css/components/header-global.min.css +1 -0
  16. package/dist/css/components/header-menu.css +364 -123
  17. package/dist/css/components/header-menu.min.css +1 -1
  18. package/dist/css/components/header-service-mobile.css +71 -22
  19. package/dist/css/components/header-service-mobile.min.css +1 -1
  20. package/dist/css/components/header-service.css +68 -14
  21. package/dist/css/components/header-service.min.css +1 -1
  22. package/dist/css/components/header-shared.css +49 -0
  23. package/dist/css/components/header-shared.min.css +0 -0
  24. package/dist/css/components/inputwrapper.css +58 -4
  25. package/dist/css/components/inputwrapper.min.css +1 -1
  26. package/dist/css/components/modal.css +0 -5
  27. package/dist/css/components/modal.min.css +1 -1
  28. package/dist/css/components/searchinput.css +71 -2
  29. package/dist/css/components/searchinput.min.css +1 -1
  30. package/dist/css/components/textarea.css +41 -0
  31. package/dist/css/components/textarea.min.css +1 -0
  32. package/dist/css/components/textinput.css +126 -6
  33. package/dist/css/components/textinput.min.css +1 -1
  34. package/dist/css/components/timepicker.css +133 -38
  35. package/dist/css/components/timepicker.min.css +1 -1
  36. package/dist/css/elements/button.css +20 -4
  37. package/dist/css/elements/button.min.css +1 -1
  38. package/dist/css/elements/checkbox-radio.css +3 -3
  39. package/dist/css/elements/checkbox-radio.min.css +1 -1
  40. package/dist/css/elements/input.css +121 -6
  41. package/dist/css/elements/input.min.css +1 -1
  42. package/dist/css/elements/select.css +137 -9
  43. package/dist/css/elements/select.min.css +1 -1
  44. package/dist/css/pkt-base.css +438 -5
  45. package/dist/css/pkt-base.min.css +1 -1
  46. package/dist/css/pkt-components.css +1595 -342
  47. package/dist/css/pkt-components.min.css +1 -1
  48. package/dist/css/pkt-docs.css +2081 -362
  49. package/dist/css/pkt-docs.min.css +1 -1
  50. package/dist/css/pkt-elements.css +160 -16
  51. package/dist/css/pkt-elements.min.css +1 -1
  52. package/dist/css/pkt.css +2081 -362
  53. package/dist/css/pkt.min.css +1 -1
  54. package/dist/scss/abstracts/variables/_index.scss +1 -1
  55. package/dist/scss/abstracts/variables/_spacing.scss +1 -0
  56. package/dist/scss/base/_typography.scss +5 -5
  57. package/dist/scss/components/_accordion.scss +7 -11
  58. package/dist/scss/components/_alert.scss +34 -4
  59. package/dist/scss/components/_calendar.scss +3 -0
  60. package/dist/scss/components/_combobox.scss +74 -0
  61. package/dist/scss/components/_datepicker.scss +75 -8
  62. package/dist/scss/components/_footer.scss +149 -123
  63. package/dist/scss/components/_header-global.scss +192 -0
  64. package/dist/scss/components/_header-menu.scss +30 -31
  65. package/dist/scss/components/_header-service-mobile.scss +4 -28
  66. package/dist/scss/components/_header-service.scss +4 -21
  67. package/dist/scss/components/_header-shared.scss +190 -0
  68. package/dist/scss/components/_index.scss +2 -0
  69. package/dist/scss/components/_inputwrapper.scss +62 -6
  70. package/dist/scss/components/_modal.scss +1 -5
  71. package/dist/scss/components/_searchinput.scss +58 -2
  72. package/dist/scss/components/_textarea.scss +48 -0
  73. package/dist/scss/components/_timepicker.scss +95 -34
  74. package/dist/scss/elements/_button.scss +12 -3
  75. package/dist/scss/elements/_input.scss +141 -7
  76. package/package.json +3 -3
@@ -1,176 +1,203 @@
1
1
  /*
2
- * Footer element
2
+ * Footer: pkt-footer (sekundær + global) og pkt-footer-simple (kompakt + global)
3
+ *
4
+ * --pkt-footer-bg bakgrunn (default: grå sekundær)
5
+ * --pkt-footer-fg tekstfarge
6
+ * --pkt-footer-link-hover hover-farge på lenker (default: text-action-active)
3
7
  */
4
8
 
5
9
  @use 'sass:map';
6
10
  @use '../abstracts/variables';
7
- @use '../abstracts/mixins/breakpoints' as *;
11
+ @use '../abstracts/mixins/container-queries' as *;
8
12
  @use '../abstracts/mixins/typography';
9
13
 
10
- $-footer-bg-color: var(--pkt-color-surface-strong-dark-blue);
11
- $-footer-color: var(--pkt-color-text-body-default);
12
- $-footer-max-width: map.get(variables.$breakpoints, 'laptop');
13
- $-footer-icon-r-margin: map.get(variables.$spacing, 'size-8');
14
- $-footer-link-b-margin: map.get(variables.$spacing, 'size-16');
14
+ $-footer-content-max-width: 75rem;
15
+
16
+ .pkt-footer,
17
+ .pkt-footer-simple {
18
+ display: block;
19
+ width: 100%;
20
+ container-type: inline-size;
21
+ container-name: pkt-footer;
22
+ }
15
23
 
16
24
  .pkt-footer {
17
- padding: map.get(variables.$spacing, 'size-40') map.get(variables.$spacing, 'size-24');
18
- background-color: $-footer-bg-color;
19
- color: $-footer-color;
20
- display: flex;
21
- align-items: center;
22
-
23
- @include typography.get-text('pkt-txt-18-light');
24
- @include bp('laptop-up') {
25
- padding: map.get(variables.$spacing, 'size-56') map.get(variables.$spacing, 'size-24');
26
- justify-content: center;
27
- }
25
+ &__band {
26
+ background-color: var(--pkt-footer-bg, var(--pkt-color-background-subtle, #f9f9f9));
27
+ color: var(--pkt-footer-fg, var(--pkt-color-text-body-default, #2a2859));
28
28
 
29
- &__container {
30
- max-width: $-footer-max-width;
31
- }
29
+ @include typography.get-text('pkt-txt-16-light');
32
30
 
33
- &__title {
34
- margin-bottom: map.get(variables.$spacing, 'size-32');
35
- margin-top: 0;
36
- color: $-footer-color;
37
- @include typography.get-text('pkt-txt-24-medium');
38
- }
31
+ @include cq('pkt-footer', $cq-bp-tablet-big) {
32
+ @include typography.get-text('pkt-txt-18-light');
33
+ }
39
34
 
40
- // tekstfelt
41
- &__text:last-child {
42
- margin-bottom: 0;
43
- margin-top: map.get(variables.$spacing, 'size-32');
44
- }
35
+ &--global {
36
+ --pkt-footer-bg: var(--pkt-color-surface-strong-dark-blue, #2a2859);
37
+ --pkt-footer-fg: var(--pkt-color-text-body-light, #fff);
38
+ --pkt-footer-link-hover: var(--pkt-color-brand-blue-1000, #6fe9ff);
39
+ }
45
40
 
46
- &__text:not(:last-child) {
47
- margin-bottom: map.get(variables.$spacing, 'size-32');
48
- margin-top: 0;
49
- }
41
+ a {
42
+ color: inherit;
43
+ text-decoration: underline;
44
+ text-underline-position: from-font;
50
45
 
51
- // Lenkelisten
52
- &__list {
53
- padding: 0;
54
- margin: 0;
55
- list-style: none;
56
- }
46
+ &:hover {
47
+ // !important fordi grunnstilene våre er altfor spesifikke...
48
+ color: var(--pkt-footer-link-hover, var(--pkt-color-text-action-active, currentColor)) !important;
49
+ }
50
+ }
51
+
52
+ h2 {
53
+ margin: 0 0 map.get(variables.$spacing, 'size-16');
54
+ color: inherit;
57
55
 
58
- &__list-item {
59
- word-break: break-word;
56
+ @include typography.get-text('pkt-txt-20-medium');
57
+
58
+ @include cq('pkt-footer', $cq-bp-tablet) {
59
+ @include typography.get-text('pkt-txt-22-medium');
60
+ }
60
61
 
61
- &:not(:last-child) {
62
- margin-bottom: $-footer-link-b-margin;
62
+ @include cq('pkt-footer', $cq-bp-tablet-big) {
63
+ @include typography.get-text('pkt-txt-24-medium');
64
+ }
63
65
  }
64
66
 
65
- @include bp('laptop-up') {
66
- margin-bottom: 0;
67
+ p {
68
+ margin: 0 0 map.get(variables.$spacing, 'size-16');
67
69
  }
68
70
  }
69
71
 
70
- &__link {
71
- display: flex;
72
- text-decoration: none !important;
72
+ &__inner {
73
+ max-width: $-footer-content-max-width;
74
+ margin: 0 auto;
75
+ padding: map.get(variables.$spacing, 'size-52') map.get(variables.$spacing, 'size-16');
73
76
 
74
- &:hover .pkt-footer__link-icon {
75
- --fg-color: currentColor;
77
+ @include cq('pkt-footer', $cq-bp-tablet) {
78
+ padding: map.get(variables.$spacing, 'size-52') map.get(variables.$spacing, 'size-32');
76
79
  }
77
- }
78
80
 
79
- &__link-icon {
80
- --fg-color: currentColor;
81
- width: 24px;
82
- height: 24px;
83
- margin-right: $-footer-icon-r-margin;
84
- flex-shrink: 0;
85
-
86
- @include bp('laptop-up') {
87
- margin-top: 0;
81
+ &--compact {
82
+ padding-top: map.get(variables.$spacing, 'size-32');
83
+ padding-bottom: map.get(variables.$spacing, 'size-32');
88
84
  }
89
85
  }
90
86
 
91
- // Social media ikoner og språklenke
92
- &__social {
93
- display: flex;
94
- flex-direction: row;
95
- justify-content: space-between;
96
- align-items: flex-start;
87
+ &__sections {
88
+ display: grid;
89
+ grid-template-columns: 1fr;
97
90
  gap: map.get(variables.$spacing, 'size-32');
98
- margin-top: map.get(variables.$spacing, 'size-40');
99
91
 
100
- &:hover .pkt-footer__link-icon {
101
- --fg-color: currentColor;
102
- }
103
-
104
- @include bp('laptop-up') {
105
- align-items: flex-end;
106
- justify-content: end;
92
+ @include cq('pkt-footer', $cq-bp-tablet) {
93
+ grid-template-columns: repeat(3, 1fr);
94
+ column-gap: map.get(variables.$spacing, 'size-32');
95
+ row-gap: map.get(variables.$spacing, 'size-52');
107
96
  }
97
+ }
108
98
 
109
- &-language {
110
- @include bp('laptop-up') {
111
- justify-self: flex-start;
112
- }
113
- }
99
+ &__link-list {
100
+ list-style: none;
101
+ margin: 0;
102
+ padding: 0;
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: map.get(variables.$spacing, 'size-16');
114
106
 
115
- &-icon {
116
- --fg-color: currentColor;
117
- width: 24px;
118
- height: 24px;
107
+ > li {
108
+ word-break: break-word;
119
109
  }
110
+ }
120
111
 
121
- &-icon-link:not(:last-child) {
122
- margin-right: map.get(variables.$spacing, 'size-16');
123
- }
112
+ &__link-domain {
113
+ white-space: nowrap;
124
114
  }
125
- }
126
115
 
127
- // Simple footer
116
+ &__bottom {
117
+ display: flex;
118
+ justify-content: space-between;
119
+ align-items: center;
120
+ gap: map.get(variables.$spacing, 'size-32');
121
+ margin-top: map.get(variables.$spacing, 'size-16');
128
122
 
129
- .pkt-footer-simple {
130
- padding: map.get(variables.$spacing, 'size-32') map.get(variables.$spacing, 'size-24');
131
- background-color: $-footer-bg-color;
132
- color: $-footer-color;
133
- display: flex;
134
- align-items: center;
135
-
136
- @include typography.get-text('pkt-txt-18-light');
137
- @include bp('laptop-up') {
138
- justify-content: center;
123
+ @include cq('pkt-footer', $cq-bp-tablet) {
124
+ grid-column: -2 / -1;
125
+ margin-top: 0;
126
+ }
139
127
  }
140
128
 
141
- &__container {
142
- max-width: $-footer-max-width;
129
+ &__sections + &__bottom {
130
+ margin-top: map.get(variables.$spacing, 'size-32');
143
131
  }
144
132
 
145
- // Lenkelisten
146
- &__list {
147
- padding: 0;
148
- margin: 0;
133
+ &__bottom-links {
149
134
  list-style: none;
135
+ margin: 0;
136
+ padding: 0;
137
+ display: flex;
138
+ flex-wrap: wrap;
139
+ gap: map.get(variables.$spacing, 'size-16') map.get(variables.$spacing, 'size-32');
150
140
  }
151
141
 
152
- &__list-item {
153
- @include bp('laptop-up') {
154
- display: inline-flex;
142
+ &__some {
143
+ list-style: none;
144
+ margin: 0;
145
+ padding: 0;
146
+ display: flex;
147
+ align-items: center;
148
+ gap: map.get(variables.$spacing, 'size-16');
149
+
150
+ @include cq('pkt-footer', $cq-bp-tablet) {
151
+ gap: map.get(variables.$spacing, 'size-24');
155
152
  }
156
153
 
157
- &:not(:last-child) {
158
- margin-bottom: $-footer-link-b-margin;
154
+ a {
155
+ display: inline-flex;
159
156
 
160
- @include bp('laptop-up') {
161
- margin-bottom: 0;
162
- margin-right: map.get(variables.$spacing, 'size-32');
157
+ &:has(.pkt-footer__some-icon) {
158
+ text-decoration: none;
163
159
  }
164
160
  }
165
161
  }
166
162
 
167
- &__link {
163
+ &__some-icon {
164
+ --fg-color: currentColor;
165
+ width: 2rem;
166
+ height: 2rem;
167
+ }
168
+
169
+ &__sections + &__consent {
170
+ margin-top: map.get(variables.$spacing, 'size-32');
171
+ }
172
+ }
173
+
174
+ .pkt-footer-simple {
175
+ &__list {
176
+ list-style: none;
177
+ margin: 0;
178
+ padding: 0;
168
179
  display: flex;
169
- text-decoration: none !important;
180
+ flex-direction: column;
181
+ gap: map.get(variables.$spacing, 'size-16');
182
+
183
+ @include cq('pkt-footer', $cq-bp-tablet) {
184
+ flex-direction: row;
185
+ flex-wrap: wrap;
186
+ justify-content: center;
187
+ gap: map.get(variables.$spacing, 'size-16') map.get(variables.$spacing, 'size-32');
188
+ }
189
+ }
190
+
191
+ @at-root a#{&}__link {
192
+ display: inline-flex;
170
193
  align-items: flex-start;
194
+ gap: map.get(variables.$spacing, 'size-8');
195
+ color: inherit;
196
+ text-decoration: none;
171
197
 
172
- &:hover .pkt-footer__link-icon {
173
- --fg-color: currentColor;
198
+ &:hover {
199
+ text-decoration: underline;
200
+ text-underline-position: from-font;
174
201
  }
175
202
  }
176
203
 
@@ -178,11 +205,10 @@ $-footer-link-b-margin: map.get(variables.$spacing, 'size-16');
178
205
  --fg-color: currentColor;
179
206
  width: 24px;
180
207
  height: 24px;
181
- margin-right: $-footer-icon-r-margin;
182
208
  flex-shrink: 0;
209
+ }
183
210
 
184
- @include bp('laptop-up') {
185
- margin-top: 0;
186
- }
211
+ &__link-domain {
212
+ white-space: nowrap;
187
213
  }
188
214
  }
@@ -0,0 +1,192 @@
1
+ /*
2
+ * HeaderGlobal component
3
+ */
4
+
5
+ @use 'sass:map';
6
+ @use '../abstracts/variables';
7
+ @use '../abstracts/mixins/breakpoints' as *;
8
+ @use '../abstracts/mixins/' as *;
9
+ @use 'header-shared' as shared;
10
+
11
+ .pkt-header-global-spacer {
12
+ height: map.get(variables.$spacing, 'size-104');
13
+
14
+ &--tablet {
15
+ height: map.get(variables.$spacing, 'size-88');
16
+ }
17
+
18
+ &--mobile {
19
+ height: map.get(variables.$spacing, 'size-88');
20
+ }
21
+
22
+ &--mobile#{&}--has-user {
23
+ height: calc(#{map.get(variables.$spacing, 'size-88')} + #{map.get(variables.$spacing, 'size-56')});
24
+ }
25
+ }
26
+
27
+ .pkt-header-global {
28
+ @include shared.header-chrome;
29
+ @include shared.header-grid('pkt-header-global', map.get(variables.$spacing, 'size-88'));
30
+
31
+ &__logo-area {
32
+ align-items: center;
33
+ display: inline-flex;
34
+ padding-left: map.get(variables.$spacing, 'size-32');
35
+
36
+ .pkt-header-global--tablet & {
37
+ padding-left: map.get(variables.$spacing, 'size-16');
38
+ }
39
+
40
+ .pkt-header-global--mobile & {
41
+ padding-left: map.get(variables.$spacing, 'size-8');
42
+ }
43
+ }
44
+
45
+ &__content,
46
+ &__user {
47
+ align-items: center;
48
+ display: inline-flex;
49
+ min-width: 0;
50
+ }
51
+
52
+ &__content {
53
+ column-gap: map.get(variables.$spacing, 'size-24');
54
+
55
+ .pkt-header-global--tablet & {
56
+ column-gap: map.get(variables.$spacing, 'size-8');
57
+ }
58
+
59
+ .pkt-header-global--mobile & {
60
+ column-gap: map.get(variables.$spacing, 'size-8');
61
+ padding-right: map.get(variables.$spacing, 'size-8');
62
+ }
63
+ }
64
+
65
+ &__menu-toggle,
66
+ &__contact {
67
+ flex: 0 0 auto;
68
+ }
69
+
70
+ &__user {
71
+ justify-self: end;
72
+ padding-right: map.get(variables.$spacing, 'size-32');
73
+
74
+ .pkt-header-global--tablet:not(.pkt-header-global--mobile) & {
75
+ padding-right: map.get(variables.$spacing, 'size-16');
76
+ }
77
+ }
78
+
79
+ &__user-container {
80
+ position: relative;
81
+ flex: 0 0 auto;
82
+
83
+ &.is-open {
84
+ z-index: 100;
85
+ }
86
+ }
87
+
88
+ @include shared.header-logo(3.2rem);
89
+
90
+ &__search {
91
+ flex: 0 1 auto;
92
+ width: 22rem;
93
+ max-width: 100%;
94
+ min-width: 0;
95
+
96
+ .pkt-searchinput,
97
+ .pkt-searchinput__field {
98
+ width: 100%;
99
+ }
100
+ }
101
+
102
+ &__contact {
103
+ flex: 0 0 auto;
104
+ white-space: nowrap;
105
+ }
106
+
107
+ &__user-button {
108
+ max-width: 20rem;
109
+
110
+ .pkt-btn__text {
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ min-width: 0;
115
+ flex: 1 1 auto;
116
+ }
117
+ }
118
+
119
+ &__user-menu {
120
+ position: absolute;
121
+ right: 0;
122
+ width: max(15.5rem, 100%);
123
+ max-width: min(32rem, 90vw);
124
+
125
+ &.is-open {
126
+ z-index: 100;
127
+ }
128
+ }
129
+
130
+ &__search-toggle {
131
+ &,
132
+ & button {
133
+ flex: 0 0 auto;
134
+ border-radius: 50%;
135
+ }
136
+ }
137
+
138
+ &--mobile &__menu-toggle {
139
+ &,
140
+ & button {
141
+ border-radius: 50%;
142
+ }
143
+ }
144
+
145
+ &__menu,
146
+ &__search-panel {
147
+ position: fixed;
148
+ top: max(0px, calc(var(--pkt-header-global-top, 0px) + #{map.get(variables.$spacing, 'size-104')}));
149
+ left: 0;
150
+ right: 0;
151
+ bottom: 0;
152
+ z-index: 90;
153
+ background-color: rgba(0, 0, 0, 0.55);
154
+ overflow-y: auto;
155
+ overscroll-behavior: contain;
156
+ -webkit-overflow-scrolling: touch;
157
+
158
+ &--tablet,
159
+ &--mobile {
160
+ top: max(0px, calc(var(--pkt-header-global-top, 0px) + #{map.get(variables.$spacing, 'size-88')}));
161
+ }
162
+ }
163
+
164
+ &__menu .pkt-header-menu {
165
+ width: min(var(--pkt-header-global-width, 100%), 75rem);
166
+ margin: 0 0 0
167
+ calc(var(--pkt-header-global-left, 0px) + max(0px, (var(--pkt-header-global-width, 100%) - 75rem) / 2));
168
+ box-shadow:
169
+ 0px 4px 6px -1px rgba(0, 0, 0, 0.1),
170
+ 0px 2px 4px -2px rgba(0, 0, 0, 0.1);
171
+ }
172
+
173
+ &__search-panel-inner {
174
+ margin-left: var(--pkt-header-global-left, 0px);
175
+ width: var(--pkt-header-global-width, 100%);
176
+ background-color: var(--pkt-color-background-default);
177
+ border-bottom: 1px solid var(--pkt-color-border-subtle);
178
+ box-shadow:
179
+ 0px 4px 6px -1px rgba(0, 0, 0, 0.1),
180
+ 0px 2px 4px -2px rgba(0, 0, 0, 0.1);
181
+ padding: map.get(variables.$spacing, 'size-16');
182
+
183
+ .pkt-searchinput,
184
+ .pkt-searchinput__field {
185
+ width: 100%;
186
+ }
187
+ }
188
+ }
189
+
190
+ .pkt-header-global.pkt-header-global--mobile {
191
+ @include shared.header-mobile-user-bar('pkt-header-global');
192
+ }