@fremtind/jokul 0.69.2 → 0.71.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 (154) hide show
  1. package/build/build-stats.html +1 -1
  2. package/build/cjs/components/breadcrumb/stories/Breadcrumb.stories.cjs +1 -1
  3. package/build/cjs/components/breadcrumb/stories/Breadcrumb.stories.cjs.map +1 -1
  4. package/build/cjs/components/button/stories/Button.visual.stories.cjs +2 -0
  5. package/build/cjs/components/button/stories/Button.visual.stories.cjs.map +1 -0
  6. package/build/cjs/components/button/stories/Button.visual.stories.d.cts +12 -0
  7. package/build/cjs/components/file/File.cjs +2 -0
  8. package/build/cjs/components/file/File.cjs.map +1 -0
  9. package/build/cjs/components/file/File.d.cts +3 -0
  10. package/build/cjs/components/file/index.cjs +2 -0
  11. package/build/cjs/components/file/index.cjs.map +1 -0
  12. package/build/cjs/components/file/index.d.cts +2 -0
  13. package/build/cjs/components/file/stories/File.stories.cjs +2 -0
  14. package/build/cjs/components/file/stories/File.stories.cjs.map +1 -0
  15. package/build/cjs/components/file/stories/File.stories.d.cts +33 -0
  16. package/build/cjs/components/file/types.cjs +2 -0
  17. package/build/cjs/components/file/types.cjs.map +1 -0
  18. package/build/cjs/components/file/types.d.cts +12 -0
  19. package/build/cjs/components/file-input/FileInput.cjs.map +1 -1
  20. package/build/cjs/components/file-input/FileInput.d.cts +1 -24
  21. package/build/cjs/components/file-input/index.cjs +1 -1
  22. package/build/cjs/components/file-input/index.d.cts +2 -3
  23. package/build/cjs/components/file-input/internal/Dropzone.cjs +1 -1
  24. package/build/cjs/components/file-input/internal/Dropzone.cjs.map +1 -1
  25. package/build/cjs/components/file-input/internal/Input.cjs +1 -1
  26. package/build/cjs/components/file-input/internal/Input.cjs.map +1 -1
  27. package/build/cjs/components/file-input/internal/fileInputContext.cjs.map +1 -1
  28. package/build/cjs/components/file-input/internal/fileInputContext.d.cts +3 -3
  29. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs +2 -0
  30. package/build/cjs/components/file-input/internal/validateFileInputFiles.cjs.map +1 -0
  31. package/build/cjs/components/file-input/internal/validateFileInputFiles.d.cts +2 -0
  32. package/build/cjs/components/file-input/stories/FileInput.stories.cjs +1 -1
  33. package/build/cjs/components/file-input/stories/FileInput.stories.cjs.map +1 -1
  34. package/build/cjs/components/file-input/types.cjs +1 -1
  35. package/build/cjs/components/file-input/types.d.cts +29 -5
  36. package/build/cjs/components/index.cjs +1 -1
  37. package/build/cjs/components/link/stories/Link.stories.cjs +1 -1
  38. package/build/cjs/components/link/stories/Link.stories.cjs.map +1 -1
  39. package/build/cjs/components/link/stories/Link.stories.d.cts +2 -0
  40. package/build/cjs/components/text-area/BaseTextArea.cjs +1 -1
  41. package/build/cjs/components/text-area/BaseTextArea.cjs.map +1 -1
  42. package/build/cjs/index.cjs +1 -1
  43. package/build/es/components/breadcrumb/stories/Breadcrumb.stories.js +1 -1
  44. package/build/es/components/breadcrumb/stories/Breadcrumb.stories.js.map +1 -1
  45. package/build/es/components/button/stories/Button.visual.stories.d.ts +12 -0
  46. package/build/es/components/button/stories/Button.visual.stories.js +2 -0
  47. package/build/es/components/button/stories/Button.visual.stories.js.map +1 -0
  48. package/build/es/components/file/File.d.ts +3 -0
  49. package/build/es/components/file/File.js +2 -0
  50. package/build/es/components/file/File.js.map +1 -0
  51. package/build/es/components/file/index.d.ts +2 -0
  52. package/build/es/components/file/index.js +2 -0
  53. package/build/es/components/file/index.js.map +1 -0
  54. package/build/es/components/file/stories/File.stories.d.ts +33 -0
  55. package/build/es/components/file/stories/File.stories.js +2 -0
  56. package/build/es/components/file/stories/File.stories.js.map +1 -0
  57. package/build/es/components/file/types.d.ts +12 -0
  58. package/build/es/components/file/types.js +2 -0
  59. package/build/es/components/file/types.js.map +1 -0
  60. package/build/es/components/file-input/FileInput.d.ts +1 -24
  61. package/build/es/components/file-input/FileInput.js.map +1 -1
  62. package/build/es/components/file-input/index.d.ts +2 -3
  63. package/build/es/components/file-input/index.js +1 -1
  64. package/build/es/components/file-input/internal/Dropzone.js +1 -1
  65. package/build/es/components/file-input/internal/Dropzone.js.map +1 -1
  66. package/build/es/components/file-input/internal/Input.js +1 -1
  67. package/build/es/components/file-input/internal/Input.js.map +1 -1
  68. package/build/es/components/file-input/internal/fileInputContext.d.ts +3 -3
  69. package/build/es/components/file-input/internal/fileInputContext.js.map +1 -1
  70. package/build/es/components/file-input/internal/validateFileInputFiles.d.ts +2 -0
  71. package/build/es/components/file-input/internal/{validateFile.js → validateFileInputFiles.js} +2 -2
  72. package/build/es/components/file-input/internal/validateFileInputFiles.js.map +1 -0
  73. package/build/es/components/file-input/stories/FileInput.stories.js +1 -1
  74. package/build/es/components/file-input/stories/FileInput.stories.js.map +1 -1
  75. package/build/es/components/file-input/types.d.ts +29 -5
  76. package/build/es/components/file-input/types.js +1 -1
  77. package/build/es/components/index.js +1 -1
  78. package/build/es/components/link/stories/Link.stories.d.ts +2 -0
  79. package/build/es/components/link/stories/Link.stories.js +1 -1
  80. package/build/es/components/link/stories/Link.stories.js.map +1 -1
  81. package/build/es/components/text-area/BaseTextArea.js +1 -1
  82. package/build/es/components/text-area/BaseTextArea.js.map +1 -1
  83. package/build/es/index.js +1 -1
  84. package/build/jokul.css +1 -1
  85. package/package.json +13 -4
  86. package/styles/components/checkbox/checkbox.css +4 -4
  87. package/styles/components/checkbox/checkbox.min.css +1 -1
  88. package/styles/components/checkbox-panel/checkbox-panel.css +2 -2
  89. package/styles/components/checkbox-panel/checkbox-panel.min.css +1 -1
  90. package/styles/components/countdown/countdown.css +2 -2
  91. package/styles/components/countdown/countdown.min.css +1 -1
  92. package/styles/components/feedback/feedback.css +2 -2
  93. package/styles/components/feedback/feedback.min.css +1 -1
  94. package/styles/components/file/_index.scss +3 -0
  95. package/styles/components/file/file.css +144 -0
  96. package/styles/components/file/file.min.css +1 -0
  97. package/styles/components/file/file.scss +164 -0
  98. package/styles/components/file-input/_index.scss +1 -0
  99. package/styles/components/file-input/file-input.css +512 -129
  100. package/styles/components/file-input/file-input.min.css +1 -1
  101. package/styles/components/file-input/file-input.scss +1 -1
  102. package/styles/components/input-group/input-group.css +2 -2
  103. package/styles/components/input-group/input-group.min.css +1 -1
  104. package/styles/components/link/link.css +4 -3
  105. package/styles/components/link/link.min.css +1 -1
  106. package/styles/components/link/link.scss +4 -3
  107. package/styles/components/loader/loader.css +6 -6
  108. package/styles/components/loader/loader.min.css +1 -1
  109. package/styles/components/loader/skeleton-loader.css +5 -5
  110. package/styles/components/loader/skeleton-loader.min.css +1 -1
  111. package/styles/components/message/message.css +2 -2
  112. package/styles/components/message/message.min.css +1 -1
  113. package/styles/components/progress-bar/progress-bar.css +1 -1
  114. package/styles/components/progress-bar/progress-bar.min.css +1 -1
  115. package/styles/components/radio-button/radio-button.css +2 -2
  116. package/styles/components/radio-button/radio-button.min.css +1 -1
  117. package/styles/components/radio-panel/radio-panel.css +2 -2
  118. package/styles/components/radio-panel/radio-panel.min.css +1 -1
  119. package/styles/components/system-message/system-message.css +2 -2
  120. package/styles/components/system-message/system-message.min.css +1 -1
  121. package/styles/components/toast/toast.css +4 -4
  122. package/styles/components/toast/toast.min.css +1 -1
  123. package/styles/styles.css +40 -39
  124. package/styles/styles.min.css +1 -1
  125. package/build/cjs/components/file-input/File.cjs +0 -2
  126. package/build/cjs/components/file-input/File.cjs.map +0 -1
  127. package/build/cjs/components/file-input/File.d.cts +0 -14
  128. package/build/cjs/components/file-input/internal/Thumbnail.cjs +0 -2
  129. package/build/cjs/components/file-input/internal/Thumbnail.cjs.map +0 -1
  130. package/build/cjs/components/file-input/internal/Thumbnail.d.cts +0 -11
  131. package/build/cjs/components/file-input/internal/validateFile.cjs +0 -2
  132. package/build/cjs/components/file-input/internal/validateFile.cjs.map +0 -1
  133. package/build/cjs/components/file-input/internal/validateFile.d.cts +0 -2
  134. package/build/cjs/components/file-input/stories/File.stories.cjs +0 -2
  135. package/build/cjs/components/file-input/stories/File.stories.cjs.map +0 -1
  136. package/build/cjs/components/file-input/stories/File.stories.d.cts +0 -17
  137. package/build/cjs/components/file-input/stories/fileBytes.cjs +0 -2
  138. package/build/cjs/components/file-input/stories/fileBytes.cjs.map +0 -1
  139. package/build/cjs/components/file-input/stories/fileBytes.d.cts +0 -2
  140. package/build/es/components/file-input/File.d.ts +0 -14
  141. package/build/es/components/file-input/File.js +0 -2
  142. package/build/es/components/file-input/File.js.map +0 -1
  143. package/build/es/components/file-input/internal/Thumbnail.d.ts +0 -11
  144. package/build/es/components/file-input/internal/Thumbnail.js +0 -2
  145. package/build/es/components/file-input/internal/Thumbnail.js.map +0 -1
  146. package/build/es/components/file-input/internal/validateFile.d.ts +0 -2
  147. package/build/es/components/file-input/internal/validateFile.js.map +0 -1
  148. package/build/es/components/file-input/stories/File.stories.d.ts +0 -17
  149. package/build/es/components/file-input/stories/File.stories.js +0 -2
  150. package/build/es/components/file-input/stories/File.stories.js.map +0 -1
  151. package/build/es/components/file-input/stories/fileBytes.d.ts +0 -2
  152. package/build/es/components/file-input/stories/fileBytes.js +0 -2
  153. package/build/es/components/file-input/stories/fileBytes.js.map +0 -1
  154. package/styles/components/file-input/_file.scss +0 -176
@@ -1,3 +1,4 @@
1
+ @charset "UTF-8";
1
2
  /**
2
3
  * Do not edit directly
3
4
  * Generated on Wed, 18 Dec 2024 12:25:37 GMT
@@ -5,199 +6,581 @@
5
6
  :root,
6
7
  [data-layout-density=comfortable],
7
8
  [data-density=comfortable] {
8
- --jkl-file-padding: calc(var(--jkl-unit-10) * 3);
9
- --jkl-file-thumbnail-size: calc(var(--jkl-unit-10) * 8);
10
- --jkl-file-gap: calc(var(--jkl-unit-10) * 2);
11
- --jkl-file-font-size: 1.25rem;
12
- --jkl-file-line-height: calc(var(--jkl-unit-10) * 4);
9
+ --jkl-file-padding: 0.5rem;
10
+ --jkl-file-thumbnail-width: calc(var(--jkl-unit-10) * 7);
11
+ --jkl-file-thumbnail-max-height: 120px;
12
+ --jkl-file-thumbnail-aspect-ratio: 1;
13
+ --jkl-file-gap: 0.5rem calc(var(--jkl-unit-10) * 2);
14
+ --jkl-file-button-width: calc(var(--jkl-unit-10) * 5);
13
15
  }
14
16
 
15
17
  [data-layout-density=compact],
16
18
  [data-density=compact] {
17
- --jkl-file-padding: 0.75rem;
18
- --jkl-file-thumbnail-size: 2.75rem;
19
- --jkl-file-gap: 0.5rem;
20
- --jkl-file-font-size: calc(var(--jkl-unit-10) * 2);
21
- --jkl-file-line-height: calc(var(--jkl-unit-10) * 3);
19
+ --jkl-file-padding: 0.5rem;
20
+ --jkl-file-thumbnail-width: calc(var(--jkl-unit-10) * 5);
21
+ --jkl-file-thumbnail-max-height: 80px;
22
+ --jkl-file-thumbnail-aspect-ratio: 1;
23
+ --jkl-file-gap: calc(var(--jkl-unit-10) * 0.5) 0.5rem;
24
+ --jkl-file-button-width: calc(var(--jkl-unit-10) * 4);
22
25
  }
23
26
 
24
27
  .jkl-file {
25
28
  --text-color: var(--jkl-color-text-default);
29
+ --border: 1px solid var(--jkl-color-border-separator);
30
+ --border-radius: 2px;
31
+ --bg: transparent;
32
+ }
33
+ .jkl-file__content {
26
34
  transition-timing-function: ease;
27
35
  transition-duration: 100ms;
28
36
  transition-property: background-color, border-color, color;
29
37
  color: var(--jkl-color-text-default);
30
- margin: 0;
31
- min-width: 15rem;
38
+ padding: var(--jkl-file-padding);
39
+ border: var(--border);
40
+ border-radius: var(--border-radius);
41
+ background: var(--bg);
42
+ display: grid;
43
+ grid-template-columns: var(--jkl-file-thumbnail-width) 1fr var(--jkl-file-button-width);
44
+ grid-template-areas: "image text button";
45
+ gap: var(--jkl-file-gap);
46
+ align-items: center;
47
+ height: fit-content;
48
+ }
49
+ .jkl-file__content__name {
50
+ font-size: 1rem;
51
+ line-height: 1.5rem;
52
+ font-weight: 400;
53
+ --jkl-icon-weight: 300;
54
+ --jkl-icon-size: 1.25rem;
55
+ --jkl-icon-opsz: 20;
56
+ grid-area: text;
57
+ word-break: break-word;
58
+ }
59
+ .jkl-file__content__name__size {
60
+ word-break: keep-all;
61
+ }
62
+ .jkl-file__content__delete {
63
+ aspect-ratio: 1;
64
+ grid-area: button;
65
+ }
66
+ .jkl-file__content__thumbnail {
67
+ width: 100%;
68
+ aspect-ratio: var(--jkl-file-thumbnail-aspect-ratio);
69
+ object-fit: cover;
70
+ max-height: var(--jkl-file-thumbnail-max-height);
71
+ grid-area: image;
72
+ position: relative;
32
73
  display: flex;
33
- flex-flow: nowrap row;
74
+ align-items: center;
75
+ justify-content: center;
76
+ background: var(--jkl-color-background-container-low);
77
+ border-radius: 2px;
78
+ overflow: hidden;
79
+ container-type: inline-size;
80
+ }
81
+ .jkl-file__content__thumbnail img {
82
+ z-index: 0;
83
+ }
84
+ .jkl-file__content__thumbnail img[src] {
85
+ width: 100%;
86
+ height: 100%;
87
+ object-fit: cover;
88
+ }
89
+ .jkl-file__content__thumbnail::before, .jkl-file__content__thumbnail::after {
90
+ position: absolute;
91
+ z-index: 1;
92
+ }
93
+ .jkl-file[class*=card] {
94
+ --jkl-file-thumbnail-width: 100%;
95
+ --jkl-file-thumbnail-aspect-ratio: 16/9;
96
+ }
97
+ .jkl-file[class*=card] .jkl-file__content {
98
+ grid-template-columns: 1fr var(--jkl-file-button-width);
99
+ grid-template-rows: var(--jkl-file-thumbnail-max-height) auto;
100
+ grid-template-areas: "image image" "text button";
101
+ }
102
+ .jkl-file:not([data-state*=loading]) .jkl-file__content__thumbnail:not(:has(img[src]))::before {
34
103
  font-size: 1rem;
35
104
  line-height: 1.5rem;
36
105
  font-weight: 400;
37
106
  --jkl-icon-weight: 300;
38
107
  --jkl-icon-size: 1.25rem;
39
108
  --jkl-icon-opsz: 20;
109
+ content: attr(data-filetype);
110
+ }
111
+ .jkl-file[data-state=loading]:not(:has(.jkl-file__support-label)) .jkl-file__content__thumbnail img {
112
+ opacity: 0.25;
113
+ }
114
+ .jkl-file[data-state=loading]:not(:has(.jkl-file__support-label)) .jkl-file__content__thumbnail::after {
115
+ --scale: scale(0.3, 0.3);
116
+ --scale-end: scale(0.1, 0.1);
117
+ --rotation: 45deg;
118
+ content: ""/"Laster opp";
119
+ height: 100%;
120
+ min-height: 24px;
121
+ max-height: 2lh;
122
+ aspect-ratio: 1;
123
+ background: var(--text-color);
124
+ transform: var(--scale) rotate(var(--rotation));
125
+ animation: pulse 2500ms linear forwards infinite;
126
+ }
127
+ @keyframes pulse {
128
+ from {
129
+ transform: var(--scale) rotate(var(--rotation));
130
+ }
131
+ 50% {
132
+ transform: var(--scale-end) rotate(calc(var(--rotation) + 0.5turn));
133
+ }
134
+ to {
135
+ transform: var(--scale) rotate(calc(var(--rotation) + 1turn));
136
+ }
40
137
  }
41
- .jkl-file {
42
- outline: 0;
43
- border-style: none;
44
- outline-style: none;
138
+ .jkl-file[data-state=error] {
139
+ --bg: var(--jkl-color-functional-error);
140
+ }
141
+ .jkl-file[data-state=error], .jkl-file[data-state=error] a, .jkl-file[data-state=error] a:hover, .jkl-file[data-state=error] button, .jkl-file[data-state=error] span {
142
+ --text-color: var(--jkl-color-text-on-alert);
143
+ --link-color: var(--text-color);
144
+ --jkl-color-border-action: currentColor;
145
+ }
146
+
147
+ .jkl-link {
148
+ --link-color: var(--jkl-color-text-default);
149
+ color: var(--link-color);
150
+ outline: none;
151
+ text-decoration: none;
152
+ transition-timing-function: ease;
153
+ transition-duration: 75ms;
154
+ transition-property: color;
155
+ }
156
+ .jkl-link__content {
157
+ text-decoration: underline;
158
+ text-underline-offset: 0.08lh;
159
+ text-decoration-thickness: 0.05em;
160
+ text-decoration-color: rgba(from currentcolor r g b/0.7);
161
+ }
162
+ .jkl-link__icon {
163
+ margin-inline-start: 0.2em;
164
+ margin-block-start: -0.1em;
165
+ vertical-align: middle;
166
+ }
167
+ .jkl-link--external::after, .jkl-link[target=_blank]::after {
168
+ --jkl-icon-fill: 0;
169
+ --jkl-icon-size: 1em;
170
+ --jkl-icon-opsz: 20;
171
+ content: "\e89e";
172
+ margin-block-start: -0.1em;
173
+ padding-inline-start: 0.2em;
174
+ vertical-align: middle;
175
+ font-family: "Fremtind Material Symbols", Arial, Helvetica, sans-serif;
176
+ font-variation-settings: "FILL" var(--jkl-icon-fill, 0), "GRAD" var(--jkl-icon-grade, 0), "opsz" var(--jkl-icon-opsz, 24);
177
+ font-feature-settings: "liga";
178
+ -webkit-font-feature-settings: "liga";
179
+ font-size: var(--jkl-icon-size, 1.5rem);
180
+ font-weight: var(--jkl-icon-weight, 300);
181
+ line-height: 1;
182
+ display: inline-block;
183
+ -webkit-font-smoothing: antialiased;
184
+ transition-timing-function: ease;
185
+ transition-duration: 150ms;
186
+ transition-property: font-variation-settings, transform;
187
+ display: inline;
45
188
  }
46
- .jkl-file:active, .jkl-file:hover, .jkl-file:focus {
47
- outline: 0;
48
- outline-style: none;
189
+ .jkl-link:hover:not(:focus) {
190
+ --link-color: var(--jkl-color-text-subdued);
191
+ }
192
+ .jkl-link:focus-visible {
193
+ outline: 3px solid var(--jkl-color-border-action);
194
+ outline-offset: 0;
49
195
  }
50
196
  @media screen and (forced-colors: active) {
51
- .jkl-file {
197
+ .jkl-link {
52
198
  outline: revert;
53
- border-style: revert;
54
- outline-style: revert;
199
+ text-decoration: revert;
55
200
  }
56
- .jkl-file:active, .jkl-file:hover, .jkl-file:focus {
57
- outline: revert;
58
- outline-style: revert;
201
+ }
202
+
203
+ :root,
204
+ [data-layout-density=comfortable],
205
+ [data-density=comfortable] {
206
+ --jkl-button-padding-block: 0.5rem;
207
+ --jkl-button-padding-text: calc(var(--jkl-unit-10) * 3);
208
+ --jkl-button-padding-icon: calc(var(--jkl-unit-10) * 2);
209
+ --jkl-button-padding-icon-button: 0.5rem;
210
+ --jkl-button-teritary-padding-icon: calc(var(--jkl-unit-10) * 0.5);
211
+ --jkl-button-font-size: 1.125rem;
212
+ --jkl-button-line-height: 1.75rem;
213
+ }
214
+ @media (min-width: 680px) {
215
+ :root,
216
+ [data-layout-density=comfortable],
217
+ [data-density=comfortable] {
218
+ --jkl-button-font-size: 1.25rem;
219
+ --jkl-button-line-height: 2rem;
59
220
  }
60
221
  }
61
- .jkl-file__content {
62
- display: flex;
63
- flex-basis: 100%;
64
- gap: 1em;
65
- background-color: var(--jkl-color-background-container-high);
66
- padding: var(--jkl-file-padding);
67
- border-radius: 0.125rem;
68
- box-shadow: 0 0 5px 0 rgba(0, 0, 0, 0.05);
69
- color: var(--text-color);
222
+
223
+ [data-layout-density=compact],
224
+ [data-density=compact] {
225
+ --jkl-button-padding-block: calc(var(--jkl-unit-10) * 0.5);
226
+ --jkl-button-padding-text: calc(var(--jkl-unit-10) * 1.5);
227
+ --jkl-button-padding-icon: 0.5rem;
228
+ --jkl-button-padding-icon-button: calc(var(--jkl-unit-10) * 0.5);
229
+ --jkl-button-teritary-padding-icon: calc(var(--jkl-unit-10) * 0.25);
230
+ --jkl-button-padding-ghost-inline: calc(var(--jkl-unit-10) * 0.5);
231
+ --jkl-button-font-size: 1rem;
232
+ --jkl-button-line-height: 1.5rem;
233
+ }
234
+ @media (min-width: 680px) {
235
+ [data-layout-density=compact],
236
+ [data-density=compact] {
237
+ --jkl-button-font-size: 1rem;
238
+ --jkl-button-line-height: 1.5rem;
239
+ --jkl-button-icon-weight: 500;
240
+ }
70
241
  }
71
- .jkl-file__content--error {
72
- background-color: var(--jkl-color-background-alert-error);
242
+
243
+ .jkl-button {
244
+ --jkl-icon-weight: var(--jkl-button-icon-weight, initial);
245
+ --text-color: var(--jkl-color-text-default);
246
+ --background-color: transparent;
247
+ --border-radius: 0;
248
+ --border-width: 0.0625rem;
249
+ display: inline-block;
250
+ font-weight: 700;
251
+ font-size: var(--jkl-button-font-size);
252
+ line-height: var(--jkl-button-line-height);
253
+ cursor: pointer;
254
+ user-select: none;
255
+ background: var(--background-color);
256
+ color: var(--text-color);
257
+ border: unset;
258
+ text-decoration: none;
259
+ -webkit-tap-highlight-color: transparent;
260
+ border-radius: var(--border-radius);
261
+ padding-inline: var(--jkl-button-padding-text);
262
+ padding-block: var(--jkl-button-padding-block);
263
+ position: relative;
264
+ overflow: hidden;
265
+ max-width: 100%;
266
+ animation: a 0.3s linear;
267
+ transition-timing-function: ease;
268
+ transition-duration: 150ms;
269
+ transition-property: background-color;
73
270
  }
74
- .jkl-file__content--warning {
75
- background-color: var(--jkl-color-background-alert-warning);
271
+ .jkl-button:has(.jkl-icon:first-child) {
272
+ padding-inline-start: var(--jkl-button-padding-icon);
76
273
  }
77
- .jkl-file__content--error, .jkl-file__content--warning {
78
- --text-color: var(--jkl-color-text-on-alert);
274
+ .jkl-button:has(.jkl-icon:last-child) {
275
+ padding-inline-end: var(--jkl-button-padding-icon);
79
276
  }
80
- .jkl-file__content--error .jkl-form-support-label, .jkl-file__content--warning .jkl-form-support-label {
81
- --color: var(--jkl-color-text-on-alert);
277
+ .jkl-button:has(.jkl-icon:first-child):has(.jkl-icon:last-child) {
278
+ padding-inline: var(--jkl-button-padding-icon-button);
82
279
  }
83
- .jkl-file__content:not(div) {
84
- cursor: pointer;
85
- text-decoration: none;
86
- color: var(--jkl-color-text-default);
280
+ .jkl-button__label {
281
+ transition-timing-function: ease;
282
+ transition-duration: 250ms;
283
+ transition-property: translate;
284
+ width: 100%;
285
+ display: flex;
286
+ flex-direction: row;
287
+ align-items: center;
288
+ gap: calc(var(--jkl-unit-10) * 0.25);
289
+ pointer-events: none;
87
290
  }
88
- .jkl-file__content:not(div):hover ~ .jkl-file__description {
89
- --jkl-icon-weight: 500;
90
- font-weight: 700;
91
- letter-spacing: -0.014em;
291
+ .jkl-button__loader {
292
+ transition-timing-function: ease;
293
+ transition-duration: 250ms;
294
+ transition-property: opacity, translate;
295
+ position: absolute;
296
+ top: 50%;
297
+ left: 50%;
298
+ translate: -50% 350%;
299
+ opacity: 0;
300
+ pointer-events: none;
301
+ }
302
+ .jkl-button__text {
303
+ width: 100%;
304
+ max-width: 100%;
305
+ overflow: hidden;
306
+ white-space: nowrap;
307
+ text-overflow: ellipsis;
308
+ }
309
+ .jkl-button[data-loading=true] .jkl-button__label {
310
+ translate: 0 -120%;
311
+ }
312
+ .jkl-button[data-loading=true] .jkl-button__loader {
313
+ translate: -50% -50%;
314
+ opacity: 1;
92
315
  }
93
- .jkl-file__content:not(div):focus-visible {
316
+ .jkl-button:focus-visible {
94
317
  outline: 3px solid var(--jkl-color-border-action);
95
- outline-offset: 0;
318
+ outline-offset: 3px;
319
+ }
320
+ .jkl-button:hover {
321
+ background-color: color-mix(in srgb, var(--background-color), var(--text-color) 15%);
322
+ }
323
+ .jkl-button--primary, .jkl-button--secondary, .jkl-button--ghost {
324
+ --border-radius: 999px;
325
+ }
326
+ .jkl-button--primary {
327
+ --background-color: var(--jkl-color-background-action);
328
+ --text-color: var(--jkl-color-text-on-action);
329
+ }
330
+ .jkl-button--secondary {
331
+ border: var(--border-width) solid var(--text-color);
332
+ }
333
+ .jkl-button--tertiary {
334
+ border-bottom: var(--border-width) solid var(--text-color);
335
+ padding-inline: var(--jkl-button-teritary-padding-icon);
336
+ }
337
+ .jkl-button--tertiary:has(.jkl-icon:first-child) {
338
+ padding-inline: var(--jkl-button-teritary-padding-icon) calc(var(--jkl-button-teritary-padding-icon) * 2);
339
+ }
340
+ .jkl-button--tertiary:has(.jkl-icon:last-child) {
341
+ padding-inline: calc(var(--jkl-button-teritary-padding-icon) * 2) var(--jkl-button-teritary-padding-icon);
342
+ }
343
+
344
+ .jkl-loader {
345
+ display: flex;
346
+ }
347
+ .jkl-loader--inline {
348
+ display: inline-flex;
349
+ }
350
+ .jkl-loader__dot {
351
+ display: block;
352
+ transform-origin: center;
353
+ background-color: currentColor;
354
+ height: 0.9em;
355
+ width: 0.9em;
356
+ animation: 2500ms linear infinite;
357
+ }
358
+ .jkl-loader__dot--left {
359
+ animation-name: jkl-loader-left-spin-udx0y8t;
360
+ margin-right: 1.71em;
361
+ }
362
+ .jkl-loader__dot--middle {
363
+ animation-name: jkl-loader-middle-spin-udx0y9j;
364
+ margin-right: 1.9em;
365
+ }
366
+ .jkl-loader__dot--right {
367
+ animation-name: jkl-loader-right-spin-udx0y9q;
96
368
  }
97
369
  @media screen and (forced-colors: active) {
98
- .jkl-file__content:not(div) {
99
- outline: revert;
100
- border: 0.125rem solid LinkText;
370
+ .jkl-loader__dot {
371
+ background-color: CanvasText;
101
372
  }
102
373
  }
103
- .jkl-file__delete.jkl-icon-button {
104
- padding: 0 var(--jkl-unit-30);
105
- align-items: stretch;
374
+ .jkl-button .jkl-loader > .jkl-loader__dot, .jkl-loader--medium > .jkl-loader__dot {
375
+ height: 0.35em;
376
+ width: 0.35em;
106
377
  }
107
- .jkl-file__delete.jkl-icon-button {
108
- outline: 0;
109
- border-style: none;
110
- outline-style: none;
378
+ .jkl-button .jkl-loader > .jkl-loader__dot--left, .jkl-loader--medium > .jkl-loader__dot--left {
379
+ margin-right: 0.585em;
111
380
  }
112
- .jkl-file__delete.jkl-icon-button:active, .jkl-file__delete.jkl-icon-button:hover, .jkl-file__delete.jkl-icon-button:focus {
113
- outline: 0;
114
- outline-style: none;
381
+ .jkl-button .jkl-loader > .jkl-loader__dot--middle, .jkl-loader--medium > .jkl-loader__dot--middle {
382
+ margin-right: 0.65em;
115
383
  }
116
- @media screen and (forced-colors: active) {
117
- .jkl-file__delete.jkl-icon-button {
118
- outline: revert;
119
- border-style: revert;
120
- outline-style: revert;
384
+ .jkl-loader--small > .jkl-loader__dot {
385
+ height: 0.25em;
386
+ width: 0.25em;
387
+ }
388
+ .jkl-loader--small > .jkl-loader__dot--left {
389
+ margin-right: 0.27em;
390
+ }
391
+ .jkl-loader--small > .jkl-loader__dot--middle {
392
+ margin-right: 0.3em;
393
+ }
394
+
395
+ @keyframes jkl-loader-left-spin-udx0y8t {
396
+ 0% {
397
+ transform: rotate(0) scale(0);
121
398
  }
122
- .jkl-file__delete.jkl-icon-button:active, .jkl-file__delete.jkl-icon-button:hover, .jkl-file__delete.jkl-icon-button:focus {
123
- outline: revert;
124
- outline-style: revert;
399
+ 30% {
400
+ transform: rotate(90deg) scale(1);
401
+ }
402
+ 70% {
403
+ transform: rotate(180deg) scale(0);
404
+ }
405
+ 100% {
406
+ transform: rotate(180deg) scale(0);
125
407
  }
126
408
  }
127
- .jkl-file__delete.jkl-icon-button:focus-visible {
128
- outline: 3px solid var(--jkl-color-border-action);
129
- outline-offset: 0;
409
+ @keyframes jkl-loader-middle-spin-udx0y9j {
410
+ 0% {
411
+ transform: rotate(20deg) scale(0);
412
+ }
413
+ 10% {
414
+ transform: rotate(20deg) scale(0);
415
+ }
416
+ 40% {
417
+ transform: rotate(110deg) scale(1.4);
418
+ }
419
+ 85% {
420
+ transform: rotate(200deg) scale(0);
421
+ }
422
+ 100% {
423
+ transform: rotate(200deg) scale(0);
424
+ }
425
+ }
426
+ @keyframes jkl-loader-right-spin-udx0y9q {
427
+ 0% {
428
+ transform: rotate(40deg) scale(0);
429
+ }
430
+ 20% {
431
+ transform: rotate(40deg) scale(0);
432
+ }
433
+ 50% {
434
+ transform: rotate(130deg) scale(1);
435
+ }
436
+ 100% {
437
+ transform: rotate(220deg) scale(0);
438
+ }
439
+ }
440
+ @media screen and (prefers-color-scheme: light) {
441
+ :root {
442
+ --jkl-skeleton-element-color: #e0dbd4;
443
+ --jkl-skeleton-sweeper-color: #f9f9f9;
444
+ }
445
+ }
446
+ [data-theme=light] {
447
+ --jkl-skeleton-element-color: #e0dbd4;
448
+ --jkl-skeleton-sweeper-color: #f9f9f9;
449
+ }
450
+
451
+ @media screen and (prefers-color-scheme: dark) {
452
+ :root {
453
+ --jkl-skeleton-element-color: #636060;
454
+ --jkl-skeleton-sweeper-color: #1b1917;
455
+ }
130
456
  }
131
- .jkl-file__delete.jkl-icon-button:hover {
132
- background-color: var(--jkl-color-background-interactive-hover);
457
+ [data-theme=dark] {
458
+ --jkl-skeleton-element-color: #636060;
459
+ --jkl-skeleton-sweeper-color: #1b1917;
133
460
  }
134
- .jkl-file__thumbnail-wrapper {
461
+
462
+ .jkl-skeleton-animation {
463
+ --jkl-skeleton-sweep-duration: 3s;
135
464
  position: relative;
465
+ overflow: hidden;
136
466
  }
137
- .jkl-file__thumbnail-wrapper > :nth-child(2) {
467
+ .jkl-skeleton-animation::after {
468
+ content: " ";
138
469
  position: absolute;
139
- inset: 0;
140
- margin: auto;
141
- width: 80%;
142
- }
143
- .jkl-file__thumbnail {
144
- width: var(--jkl-file-thumbnail-size);
145
- height: var(--jkl-file-thumbnail-size);
146
- flex: 0 0 var(--jkl-file-thumbnail-size);
147
- display: flex;
148
- justify-content: center;
149
- align-items: center;
150
- object-fit: contain;
151
- opacity: 1;
152
- border-radius: 0.25rem;
153
- color: var(--jkl-color-text-subdued);
154
- transition-timing-function: ease;
155
- transition-duration: 150ms;
156
- transition-property: opacity;
470
+ top: 0;
471
+ bottom: 0;
472
+ width: 12.5rem;
473
+ background: linear-gradient(89.17deg, rgba(249, 249, 249, 0) 0.8%, var(--jkl-skeleton-sweeper-color) 50.09%, rgba(249, 249, 249, 0) 96.31%);
474
+ animation: var(--jkl-skeleton-sweep-duration) ease infinite jkl-sweep-udx0ya5;
157
475
  }
158
- .jkl-file__thumbnail--selected {
159
- opacity: 0.7;
476
+ @media (width >= 0) and (max-width: 679px) {
477
+ .jkl-skeleton-animation {
478
+ width: 9.375rem;
479
+ }
160
480
  }
161
- .jkl-file__thumbnail--uploading {
162
- opacity: 0.4;
481
+ @media screen and (prefers-reduced-motion: reduce) {
482
+ .jkl-skeleton-animation::after {
483
+ background: none;
484
+ }
163
485
  }
164
- .jkl-file__thumbnail:not(img) {
165
- background: var(--jkl-color-background-container-low);
486
+ @media screen and (forced-colors: active) {
487
+ .jkl-skeleton-animation::after {
488
+ animation: none;
489
+ }
490
+ }
491
+ .jkl-skeleton-animation--compact::after {
492
+ width: 9.375rem;
166
493
  }
167
- .jkl-file__file-info {
494
+
495
+ .jkl-skeleton-element {
496
+ border-radius: 0.125rem;
497
+ background-color: var(--jkl-skeleton-element-color);
498
+ }
499
+ .jkl-skeleton-element--circle {
500
+ border-radius: 50%;
501
+ }
502
+ @media screen and (forced-colors: active) {
503
+ .jkl-skeleton-element {
504
+ border: 1px solid CanvasText;
505
+ animation: 2s ease infinite jkl-blink-udx0yay;
506
+ }
507
+ }
508
+
509
+ .jkl-skeleton-input {
168
510
  display: flex;
169
511
  flex-direction: column;
170
- flex: 1 1 auto;
171
- overflow-wrap: break-word;
172
- gap: var(--jkl-unit-10);
512
+ gap: 0.75rem;
173
513
  }
174
- .jkl-file__title {
175
- font-size: 1rem;
176
- line-height: 1.5rem;
177
- font-weight: 700;
178
- --jkl-icon-weight: 500;
179
- --jkl-icon-size: 1.25rem;
180
- --jkl-icon-opsz: 20;
181
- overflow-wrap: anywhere;
514
+ .jkl-skeleton-input__checkbox {
515
+ display: flex;
516
+ flex-direction: row;
517
+ flex-wrap: nowrap;
518
+ gap: 0.5rem;
182
519
  }
183
- .jkl-file__name, .jkl-file__description {
184
- font-size: var(--jkl-file-font-size);
185
- line-height: var(--jkl-file-line-height);
520
+ @media (width >= 0) and (max-width: 679px) {
521
+ .jkl-skeleton-input {
522
+ gap: 0.5rem;
523
+ }
186
524
  }
187
- .jkl-file__name {
188
- font-weight: 700;
525
+ .jkl-skeleton-input--compact::after {
526
+ gap: 0.5rem;
189
527
  }
190
- .jkl-file__description {
528
+
529
+ .jkl-skeleton-table {
191
530
  display: flex;
192
- flex-wrap: nowrap;
193
- gap: calc(var(--jkl-unit-10) * 1.5);
194
- align-items: center;
195
- justify-content: flex-start;
531
+ flex-direction: column;
196
532
  }
197
- .jkl-file__support-label {
198
- margin: 0;
533
+ .jkl-skeleton-table__header, .jkl-skeleton-table__row {
534
+ display: flex;
535
+ flex-direction: row;
536
+ justify-content: space-between;
537
+ border-bottom: solid 1px var(--jkl-skeleton-element-color);
538
+ }
539
+ .jkl-skeleton-table__header {
540
+ padding: 0.75rem 0.5rem;
541
+ }
542
+ .jkl-skeleton-table__row {
543
+ padding: 1rem 0.5rem;
544
+ }
545
+ @media (width >= 0) and (max-width: 679px) {
546
+ .jkl-skeleton-table__header {
547
+ padding: 0.5rem 0.25rem;
548
+ }
549
+ .jkl-skeleton-table__row {
550
+ padding: 0.75rem 0.25rem;
551
+ }
552
+ }
553
+ .jkl-skeleton-table--compact::after__header {
554
+ padding: 0.5rem 0.25rem;
555
+ }
556
+ .jkl-skeleton-table--compact::after__row {
557
+ padding: 0.75rem 0.25rem;
558
+ }
559
+ @media screen and (forced-colors: active) {
560
+ .jkl-skeleton-table {
561
+ animation: 2s ease-in-out infinite jkl-blink-udx0yay;
562
+ }
199
563
  }
200
564
 
565
+ @keyframes jkl-sweep-udx0ya5 {
566
+ 0% {
567
+ transform: translateX(calc(0vw - 200px));
568
+ }
569
+ 80%, 100% {
570
+ transform: translateX(calc(100vw + 400px));
571
+ }
572
+ }
573
+ @keyframes jkl-blink-udx0yay {
574
+ 0% {
575
+ opacity: 1;
576
+ }
577
+ 40%, 50% {
578
+ opacity: 0.3;
579
+ }
580
+ 70%, 100% {
581
+ opacity: 1;
582
+ }
583
+ }
201
584
  :root,
202
585
  [data-layout-density=comfortable],
203
586
  [data-density=comfortable] {