fokus-styles 2.0.0 → 2.4.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/CHANGELOG.md +19 -0
- package/README.md +4 -3
- package/dist/css/components.css +532 -2
- package/dist/css/components.css.map +1 -1
- package/dist/css/components.min.css +1 -1
- package/dist/css/components.min.css.map +1 -1
- package/dist/css/fokus-components.css +4072 -0
- package/dist/css/fokus-components.css.map +1 -0
- package/dist/css/fokus-components.min.css +2 -0
- package/dist/css/fokus-components.min.css.map +1 -0
- package/dist/css/fokus-core.css +1585 -0
- package/dist/css/fokus-core.css.map +1 -0
- package/dist/css/fokus-core.min.css +2 -0
- package/dist/css/fokus-core.min.css.map +1 -0
- package/dist/css/fokus-dark.css +314 -0
- package/dist/css/fokus-dark.css.map +1 -0
- package/dist/css/fokus-dark.min.css +2 -0
- package/dist/css/fokus-dark.min.css.map +1 -0
- package/dist/css/fokus-rtl.css +8552 -0
- package/dist/css/fokus-rtl.css.map +1 -0
- package/dist/css/fokus-rtl.min.css +2 -0
- package/dist/css/fokus-rtl.min.css.map +1 -0
- package/dist/css/fokus-utilities.css +4198 -0
- package/dist/css/fokus-utilities.css.map +1 -0
- package/dist/css/fokus-utilities.min.css +2 -0
- package/dist/css/fokus-utilities.min.css.map +1 -0
- package/dist/css/fokus.css +1361 -53
- package/dist/css/fokus.css.map +1 -1
- package/dist/css/fokus.min.css +1 -1
- package/dist/css/fokus.min.css.map +1 -1
- package/dist/css/forms.css +137 -2
- package/dist/css/forms.css.map +1 -1
- package/dist/css/forms.min.css +1 -1
- package/dist/css/forms.min.css.map +1 -1
- package/dist/css/helpers.css +398 -2
- package/dist/css/helpers.css.map +1 -1
- package/dist/css/helpers.min.css +1 -1
- package/dist/css/helpers.min.css.map +1 -1
- package/dist/css/layout.css +582 -2
- package/dist/css/layout.css.map +1 -1
- package/dist/css/layout.min.css +1 -1
- package/dist/css/layout.min.css.map +1 -1
- package/dist/js/fokus.js +347 -12
- package/dist/js/fokus.js.map +4 -4
- package/dist/js/fokus.min.js +17 -17
- package/dist/js/fokus.min.js.map +4 -4
- package/docs/components/accordion.md +3 -0
- package/docs/components/avatar.md +13 -0
- package/docs/components/button-group.md +13 -0
- package/docs/components/close-button.md +13 -0
- package/docs/components/code.md +13 -0
- package/docs/components/icon-link.md +13 -0
- package/docs/components/list-group.md +13 -0
- package/docs/components/modal.md +3 -0
- package/docs/components/navbar.md +3 -0
- package/docs/components/pagination.md +3 -0
- package/docs/components/placeholder.md +13 -0
- package/docs/components/ratio.md +13 -0
- package/docs/components/scrollspy.md +13 -0
- package/docs/components/skeleton.md +3 -0
- package/docs/components/table.md +3 -0
- package/docs/guides/javascript-api.md +9 -0
- package/docs/guides/rtl-and-system-preferences.md +28 -0
- package/docs/guides/utility-api.md +9 -0
- package/docs/reference/size-baseline.json +13 -13
- package/mockup/assets/example-theme.css +3 -1
- package/mockup/assets/example-theme.js +2 -0
- package/mockup/assets/showcase-contracts.js +2 -2
- package/mockup/assets/showcase.css +4 -2
- package/mockup/assets/showcase.js +2 -0
- package/mockup/examples/js-foundation.html +25 -0
- package/mockup/examples/tables-navbar.html +12 -8
- package/mockup/examples/theming.html +2 -1
- package/mockup/foundations.html +2 -2
- package/package.json +15 -1
- package/packages/fokus-cli/bin/fokus.mjs +18 -1
- package/packages/fokus-cli/lib/build.mjs +12 -2
- package/packages/fokus-components/scss/components/_accordion.scss +19 -0
- package/packages/fokus-components/scss/components/_avatar.scss +22 -0
- package/packages/fokus-components/scss/components/_button-group.scss +14 -0
- package/packages/fokus-components/scss/components/_close-button.scss +22 -0
- package/packages/fokus-components/scss/components/_code.scss +19 -0
- package/packages/fokus-components/scss/components/_icon-link.scss +8 -0
- package/packages/fokus-components/scss/components/_index.scss +10 -0
- package/packages/fokus-components/scss/components/_list-group.scss +26 -0
- package/packages/fokus-components/scss/components/_modal.scss +36 -0
- package/packages/fokus-components/scss/components/_navbar.scss +48 -0
- package/packages/fokus-components/scss/components/_offcanvas.scss +19 -0
- package/packages/fokus-components/scss/components/_pagination.scss +10 -0
- package/packages/fokus-components/scss/components/_placeholder.scss +13 -0
- package/packages/fokus-components/scss/components/_progress.scss +8 -0
- package/packages/fokus-components/scss/components/_ratio.scss +10 -0
- package/packages/fokus-components/scss/components/_scrollspy.scss +5 -0
- package/packages/fokus-components/scss/components/_skeleton.scss +19 -0
- package/packages/fokus-components/scss/components/_spinner.scss +9 -53
- package/packages/fokus-components/scss/components/_tables.scss +20 -0
- package/packages/fokus-components/scss/forms/_forms.scss +29 -0
- package/packages/fokus-core/scss/base/_accessibility.scss +59 -0
- package/packages/fokus-core/scss/base/_index.scss +1 -0
- package/packages/fokus-core/scss/layout/_grid.scss +18 -0
- package/packages/fokus-core/scss/settings/_config.scss +43 -0
- package/packages/fokus-core/scss/settings/_index.scss +1 -0
- package/packages/fokus-core/scss/themes/_dark.scss +38 -2
- package/packages/fokus-core/scss/tokens/_root.scss +25 -0
- package/packages/fokus-core/scss/tools/_mixins.scss +8 -0
- package/packages/fokus-js/js/accordion.js +7 -1
- package/packages/fokus-js/js/core/focus.js +20 -0
- package/packages/fokus-js/js/core/overlay.d.ts +2 -0
- package/packages/fokus-js/js/core/overlay.js +10 -0
- package/packages/fokus-js/js/core/register.js +4 -2
- package/packages/fokus-js/js/focus-trap.d.ts +3 -0
- package/packages/fokus-js/js/focus-trap.js +1 -0
- package/packages/fokus-js/js/fokus.d.ts +7 -0
- package/packages/fokus-js/js/fokus.js +7 -0
- package/packages/fokus-js/js/form-validation.d.ts +7 -0
- package/packages/fokus-js/js/form-validation.js +20 -0
- package/packages/fokus-js/js/modal.js +16 -2
- package/packages/fokus-js/js/navbar.d.ts +10 -0
- package/packages/fokus-js/js/navbar.js +27 -0
- package/packages/fokus-js/js/offcanvas.d.ts +4 -0
- package/packages/fokus-js/js/offcanvas.js +16 -2
- package/packages/fokus-js/js/pagination.d.ts +7 -0
- package/packages/fokus-js/js/pagination.js +38 -0
- package/packages/fokus-js/js/scrollspy.d.ts +7 -0
- package/packages/fokus-js/js/scrollspy.js +26 -0
- package/packages/fokus-js/js/spinner.d.ts +9 -0
- package/packages/fokus-js/js/spinner.js +18 -0
- package/packages/fokus-js/js/theme.d.ts +9 -0
- package/packages/fokus-js/js/theme.js +19 -0
- package/packages/fokus-js/js/toast.js +4 -0
- package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
- package/packages/fokus-utilities/scss/utilities/_index.scss +2 -0
- package/packages/fokus-utilities/scss/utilities/_states.scss +19 -0
- package/packages/fokus-utilities/scss/utilities/_visibility.scss +24 -0
- package/scss/entries/core-entry.scss +5 -0
- package/scss/entries/dark-entry.scss +3 -0
- package/scss/entries/rtl-entry.scss +11 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.0] - 2026-09-07
|
|
4
|
+
|
|
5
|
+
- adiciona preset `fokus-rtl.css` e export `fokus-styles/rtl.css`;
|
|
6
|
+
- amplia tokens para `prefers-contrast: more` e regras de `forced-colors: active`;
|
|
7
|
+
- documenta RTL, alto contraste, foco e preferências de movimento/cor do sistema.
|
|
8
|
+
|
|
9
|
+
## [2.3.0] - 2026-09-07
|
|
10
|
+
|
|
11
|
+
- adiciona registro compartilhado de overlays, evitando múltiplos Modal/Offcanvas concorrentes;
|
|
12
|
+
- amplia o contrato TypeScript do núcleo de overlay;
|
|
13
|
+
- mantém o gerenciamento de foco, `inert`, scroll lock e eventos `fs:*` coordenados entre componentes.
|
|
14
|
+
|
|
15
|
+
## [2.2.0] - 2026-09-07
|
|
16
|
+
|
|
17
|
+
- adiciona Utility API Sass configurável para cores, espaçamento, sizing e variantes responsivas;
|
|
18
|
+
- adiciona tokens de configuração para presets e inclusão seletiva de famílias de utilitários;
|
|
19
|
+
- adiciona `Spinner`, `Pagination` dinâmica e fallback de Scrollspy sem `IntersectionObserver`;
|
|
20
|
+
- adiciona suporte a `inert`/`aria-hidden` no focus trap e estilos do spinner com redução de movimento.
|
|
21
|
+
|
|
3
22
|
## Unreleased
|
|
4
23
|
|
|
5
24
|
- refina o Carousel com tokens locais, controles compactos, indicadores em
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ profissionais, e é distribuído publicamente como produto para qualquer
|
|
|
24
24
|
desenvolvedor que precise construir interfaces consistentes sem carregar
|
|
25
25
|
React, Vue, Angular, jQuery ou qualquer outra dependência de runtime.
|
|
26
26
|
|
|
27
|
-
> **Status:** `2.
|
|
27
|
+
> **Status:** `2.1.0`. O Fokus Styles consolida CSS, JavaScript, ícones, React
|
|
28
28
|
> e CLI em um único pacote npm. O foco atual é consolidar o núcleo CSS e os componentes
|
|
29
29
|
> essenciais antes de ampliar o catálogo. O framework já possui componentes
|
|
30
30
|
> avançados, mas eles são tratados como extensões e não definem o caminho
|
|
@@ -67,8 +67,9 @@ Ou direto via CDN (jsDelivr/unpkg), sem instalar nada:
|
|
|
67
67
|
<script src="https://cdn.jsdelivr.net/npm/fokus-styles/dist/js/fokus.js"></script>
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
O CSS também é distribuído em arquivos separados (`
|
|
71
|
-
`components.css`, `
|
|
70
|
+
O CSS também é distribuído em arquivos separados (`fokus-core.css`,
|
|
71
|
+
`fokus-components.css`, `fokus-utilities.css`, `fokus-dark.css`, além de
|
|
72
|
+
`layout.css`, `forms.css`, `components.css`, `helpers.css`), e o ponto de entrada Sass está disponível para
|
|
72
73
|
compilar com suas próprias variáveis. Detalhes em
|
|
73
74
|
[Instalação](docs/getting-started/installation.md) e
|
|
74
75
|
[Formas de uso](docs/getting-started/usage.md).
|
package/dist/css/components.css
CHANGED
|
@@ -48,12 +48,28 @@
|
|
|
48
48
|
--fs-control-padding-x-lg: 16px;
|
|
49
49
|
--fs-focus-width: 2px;
|
|
50
50
|
--fs-focus-offset: 2px;
|
|
51
|
+
--fs-focus-color: var(--fs-color-primary);
|
|
52
|
+
--fs-focus-ring-size: 3px;
|
|
53
|
+
--fs-focus-ring-color: color-mix(in srgb, var(--fs-focus-color) 22%, transparent);
|
|
51
54
|
--fs-focus-ring-alpha: 22%;
|
|
52
55
|
--fs-transition-fast: 150ms;
|
|
53
56
|
--fs-transition-normal: 220ms;
|
|
57
|
+
--fs-motion-duration-fast: var(--fs-transition-fast);
|
|
58
|
+
--fs-motion-duration-normal: var(--fs-transition-normal);
|
|
59
|
+
--fs-motion-ease-standard: var(--fs-ease-standard);
|
|
54
60
|
--fs-ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
55
61
|
--fs-border-width: 1px;
|
|
56
62
|
--fs-disabled-opacity: 0.5;
|
|
63
|
+
--fs-safe-area-top: env(safe-area-inset-top, 0px);
|
|
64
|
+
--fs-safe-area-right: env(safe-area-inset-right, 0px);
|
|
65
|
+
--fs-safe-area-bottom: env(safe-area-inset-bottom, 0px);
|
|
66
|
+
--fs-safe-area-left: env(safe-area-inset-left, 0px);
|
|
67
|
+
--fs-component-control-height: var(--fs-control-height);
|
|
68
|
+
--fs-component-overlay-backdrop: rgb(0 0 0 / 55%);
|
|
69
|
+
--fs-component-panel-radius: var(--fs-radius-md);
|
|
70
|
+
--fs-component-panel-shadow: var(--fs-shadow-lg);
|
|
71
|
+
--fs-contrast-border-width: var(--fs-border-width);
|
|
72
|
+
--fs-contrast-focus-width: var(--fs-focus-width);
|
|
57
73
|
--fs-cq-sm: 320px;
|
|
58
74
|
--fs-cq-md: 480px;
|
|
59
75
|
--fs-cq-lg: 640px;
|
|
@@ -132,6 +148,14 @@
|
|
|
132
148
|
--fs-feedback-info-bg: oklch(96.4918490239% 0.0173174767 286.0707018324deg);
|
|
133
149
|
}
|
|
134
150
|
}
|
|
151
|
+
@media (prefers-contrast: more) {
|
|
152
|
+
:root {
|
|
153
|
+
--fs-contrast-border-width: 2px;
|
|
154
|
+
--fs-contrast-focus-width: 3px;
|
|
155
|
+
--fs-focus-width: var(--fs-contrast-focus-width);
|
|
156
|
+
--fs-border-width: var(--fs-contrast-border-width);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
135
159
|
}
|
|
136
160
|
@layer tokens {
|
|
137
161
|
:root {
|
|
@@ -243,6 +267,59 @@
|
|
|
243
267
|
}
|
|
244
268
|
}
|
|
245
269
|
}
|
|
270
|
+
/* stylelint-disable property-no-deprecated, selector-not-notation */
|
|
271
|
+
@layer reset {
|
|
272
|
+
:focus-visible {
|
|
273
|
+
outline: var(--fs-focus-width) solid var(--fs-focus-color);
|
|
274
|
+
outline-offset: var(--fs-focus-offset);
|
|
275
|
+
}
|
|
276
|
+
@media (forced-colors: active) {
|
|
277
|
+
:focus-visible {
|
|
278
|
+
outline: 2px solid CanvasText;
|
|
279
|
+
outline-offset: 2px;
|
|
280
|
+
}
|
|
281
|
+
button,
|
|
282
|
+
[role=button],
|
|
283
|
+
input,
|
|
284
|
+
select,
|
|
285
|
+
textarea,
|
|
286
|
+
.fs-btn {
|
|
287
|
+
border-color: ButtonText;
|
|
288
|
+
forced-color-adjust: auto;
|
|
289
|
+
}
|
|
290
|
+
.fs-u-focus-ring:focus-visible {
|
|
291
|
+
outline: 3px solid Highlight;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
@layer utilities {
|
|
296
|
+
.fs-u-visually-hidden:not(:focus):not(:focus-within),
|
|
297
|
+
.fs-u-visually-hidden-focusable:not(:focus):not(:focus-within) {
|
|
298
|
+
position: absolute !important;
|
|
299
|
+
width: 1px !important;
|
|
300
|
+
height: 1px !important;
|
|
301
|
+
padding: 0 !important;
|
|
302
|
+
margin: -1px !important;
|
|
303
|
+
overflow: hidden !important;
|
|
304
|
+
clip-path: inset(50%) !important;
|
|
305
|
+
white-space: nowrap !important;
|
|
306
|
+
border: 0 !important;
|
|
307
|
+
}
|
|
308
|
+
.fs-skip-link {
|
|
309
|
+
position: fixed;
|
|
310
|
+
z-index: 1000;
|
|
311
|
+
inset-block-start: var(--fs-space-2);
|
|
312
|
+
inset-inline-start: var(--fs-space-2);
|
|
313
|
+
transform: translateY(-200%);
|
|
314
|
+
padding: var(--fs-space-2) var(--fs-space-3);
|
|
315
|
+
color: var(--fs-color-on-primary);
|
|
316
|
+
background: var(--fs-color-primary);
|
|
317
|
+
border-radius: var(--fs-radius-sm);
|
|
318
|
+
}
|
|
319
|
+
.fs-skip-link:focus {
|
|
320
|
+
transform: translateY(0);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
246
323
|
@layer components {
|
|
247
324
|
.fs-btn {
|
|
248
325
|
--fs-btn-color: var(--fs-color-text-primary);
|
|
@@ -847,6 +924,23 @@
|
|
|
847
924
|
.fs-table-responsive {
|
|
848
925
|
overflow-x: auto;
|
|
849
926
|
}
|
|
927
|
+
.fs-table-caption {
|
|
928
|
+
caption-side: top;
|
|
929
|
+
padding: var(--fs-space-2) 0;
|
|
930
|
+
color: var(--fs-color-muted);
|
|
931
|
+
text-align: start;
|
|
932
|
+
}
|
|
933
|
+
.fs-table-empty {
|
|
934
|
+
padding: var(--fs-space-5);
|
|
935
|
+
color: var(--fs-color-muted);
|
|
936
|
+
text-align: center;
|
|
937
|
+
}
|
|
938
|
+
@media (width < 640px) {
|
|
939
|
+
.fs-table-priority th:nth-child(n+4),
|
|
940
|
+
.fs-table-priority td:nth-child(n+4) {
|
|
941
|
+
display: none;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
850
944
|
}
|
|
851
945
|
@layer components {
|
|
852
946
|
.fs-navbar {
|
|
@@ -873,6 +967,47 @@
|
|
|
873
967
|
padding: 0;
|
|
874
968
|
list-style: none;
|
|
875
969
|
}
|
|
970
|
+
.fs-navbar-toggler {
|
|
971
|
+
display: inline-flex;
|
|
972
|
+
align-items: center;
|
|
973
|
+
justify-content: center;
|
|
974
|
+
min-width: 44px;
|
|
975
|
+
min-height: 44px;
|
|
976
|
+
padding: 8px;
|
|
977
|
+
color: var(--fs-color-text);
|
|
978
|
+
background: transparent;
|
|
979
|
+
border: 1px solid var(--fs-color-border);
|
|
980
|
+
border-radius: var(--fs-radius-sm);
|
|
981
|
+
cursor: pointer;
|
|
982
|
+
}
|
|
983
|
+
.fs-navbar-collapse {
|
|
984
|
+
flex-basis: 100%;
|
|
985
|
+
width: 100%;
|
|
986
|
+
}
|
|
987
|
+
.fs-navbar-collapse:not(.is-open) {
|
|
988
|
+
display: none;
|
|
989
|
+
}
|
|
990
|
+
.fs-navbar-collapse.is-open .fs-navbar-nav {
|
|
991
|
+
flex-direction: column;
|
|
992
|
+
align-items: stretch;
|
|
993
|
+
}
|
|
994
|
+
@media (width >= 768px) {
|
|
995
|
+
.fs-navbar-toggler {
|
|
996
|
+
display: none;
|
|
997
|
+
}
|
|
998
|
+
.fs-navbar-collapse,
|
|
999
|
+
.fs-navbar-collapse:not(.is-open),
|
|
1000
|
+
.fs-navbar-collapse[hidden] {
|
|
1001
|
+
display: flex;
|
|
1002
|
+
flex: 1 1 auto;
|
|
1003
|
+
align-items: center;
|
|
1004
|
+
justify-content: flex-end;
|
|
1005
|
+
width: auto;
|
|
1006
|
+
}
|
|
1007
|
+
.fs-navbar-collapse .fs-navbar-nav {
|
|
1008
|
+
flex-direction: row;
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
876
1011
|
.fs-nav-link {
|
|
877
1012
|
display: inline-flex;
|
|
878
1013
|
align-items: center;
|
|
@@ -1286,6 +1421,13 @@
|
|
|
1286
1421
|
.fs-modal-dialog.fs-modal-lg {
|
|
1287
1422
|
max-width: 720px;
|
|
1288
1423
|
}
|
|
1424
|
+
.fs-modal-dialog.fs-modal-xl {
|
|
1425
|
+
max-width: 1140px;
|
|
1426
|
+
}
|
|
1427
|
+
.fs-modal-dialog.fs-modal-fullscreen {
|
|
1428
|
+
max-width: none;
|
|
1429
|
+
height: 100%;
|
|
1430
|
+
}
|
|
1289
1431
|
.fs-modal-content {
|
|
1290
1432
|
display: flex;
|
|
1291
1433
|
flex-direction: column;
|
|
@@ -1312,6 +1454,28 @@
|
|
|
1312
1454
|
padding: 20px;
|
|
1313
1455
|
overflow-y: auto;
|
|
1314
1456
|
}
|
|
1457
|
+
.fs-modal-scrollable .fs-modal-content {
|
|
1458
|
+
overflow: hidden;
|
|
1459
|
+
}
|
|
1460
|
+
.fs-modal-scrollable .fs-modal-body {
|
|
1461
|
+
overflow-y: auto;
|
|
1462
|
+
}
|
|
1463
|
+
@media (width < 640px) {
|
|
1464
|
+
.fs-modal {
|
|
1465
|
+
align-items: flex-end;
|
|
1466
|
+
padding: 0;
|
|
1467
|
+
}
|
|
1468
|
+
.fs-modal-dialog,
|
|
1469
|
+
.fs-modal-dialog.fs-modal-sm,
|
|
1470
|
+
.fs-modal-dialog.fs-modal-lg,
|
|
1471
|
+
.fs-modal-dialog.fs-modal-xl {
|
|
1472
|
+
max-width: none;
|
|
1473
|
+
}
|
|
1474
|
+
.fs-modal-content {
|
|
1475
|
+
max-height: calc(100dvh - var(--fs-safe-area-top));
|
|
1476
|
+
border-radius: var(--fs-radius-md) var(--fs-radius-md) 0 0;
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1315
1479
|
.fs-modal-footer {
|
|
1316
1480
|
display: flex;
|
|
1317
1481
|
align-items: center;
|
|
@@ -1675,6 +1839,22 @@
|
|
|
1675
1839
|
padding: 16px 20px;
|
|
1676
1840
|
border-top: 1px solid var(--fs-color-border);
|
|
1677
1841
|
}
|
|
1842
|
+
.fs-offcanvas-responsive {
|
|
1843
|
+
width: min(100%, 420px);
|
|
1844
|
+
}
|
|
1845
|
+
@media (width >= 1024px) {
|
|
1846
|
+
.fs-offcanvas-lg {
|
|
1847
|
+
position: static;
|
|
1848
|
+
width: auto;
|
|
1849
|
+
height: auto;
|
|
1850
|
+
visibility: visible;
|
|
1851
|
+
transform: none;
|
|
1852
|
+
box-shadow: none;
|
|
1853
|
+
}
|
|
1854
|
+
.fs-offcanvas-lg + .fs-offcanvas-backdrop {
|
|
1855
|
+
display: none;
|
|
1856
|
+
}
|
|
1857
|
+
}
|
|
1678
1858
|
@media (prefers-reduced-motion: reduce) {
|
|
1679
1859
|
.fs-offcanvas,
|
|
1680
1860
|
.fs-offcanvas-backdrop {
|
|
@@ -1703,6 +1883,16 @@
|
|
|
1703
1883
|
border-bottom-right-radius: var(--fs-radius-md);
|
|
1704
1884
|
border-bottom-left-radius: var(--fs-radius-md);
|
|
1705
1885
|
}
|
|
1886
|
+
.fs-accordion-flush .fs-accordion-item {
|
|
1887
|
+
border-inline: 0;
|
|
1888
|
+
border-radius: 0;
|
|
1889
|
+
}
|
|
1890
|
+
.fs-accordion-flush .fs-accordion-item:first-child {
|
|
1891
|
+
border-block-start: 0;
|
|
1892
|
+
}
|
|
1893
|
+
.fs-accordion-always-open .fs-accordion-button[aria-expanded=true]::after {
|
|
1894
|
+
transform: rotate(-135deg);
|
|
1895
|
+
}
|
|
1706
1896
|
.fs-accordion-header {
|
|
1707
1897
|
margin: 0;
|
|
1708
1898
|
}
|
|
@@ -1751,6 +1941,11 @@
|
|
|
1751
1941
|
border-top: 1px solid var(--fs-color-border);
|
|
1752
1942
|
background-color: var(--fs-color-surface-raised);
|
|
1753
1943
|
}
|
|
1944
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1945
|
+
.fs-accordion-button::after {
|
|
1946
|
+
transition: none;
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1754
1949
|
}
|
|
1755
1950
|
@layer components {
|
|
1756
1951
|
.fs-tabs {
|
|
@@ -2012,6 +2207,14 @@
|
|
|
2012
2207
|
padding: 0;
|
|
2013
2208
|
list-style: none;
|
|
2014
2209
|
}
|
|
2210
|
+
.fs-pagination-scroll {
|
|
2211
|
+
max-width: 100%;
|
|
2212
|
+
overflow-x: auto;
|
|
2213
|
+
padding-block: 2px;
|
|
2214
|
+
}
|
|
2215
|
+
.fs-pagination-scroll .fs-pagination {
|
|
2216
|
+
width: max-content;
|
|
2217
|
+
}
|
|
2015
2218
|
.fs-page-link {
|
|
2016
2219
|
display: inline-flex;
|
|
2017
2220
|
align-items: center;
|
|
@@ -2240,6 +2443,9 @@
|
|
|
2240
2443
|
--fs-progress-bar-bg: var(--fs-color-info);
|
|
2241
2444
|
--fs-progress-color: #ffffff;
|
|
2242
2445
|
}
|
|
2446
|
+
.fs-spinner[data-fs-loading=false] {
|
|
2447
|
+
display: none;
|
|
2448
|
+
}
|
|
2243
2449
|
.fs-progress-sm {
|
|
2244
2450
|
--fs-progress-height: 4px;
|
|
2245
2451
|
}
|
|
@@ -2965,6 +3171,22 @@
|
|
|
2965
3171
|
.fs-skeleton-rect {
|
|
2966
3172
|
border-radius: var(--fs-radius-md);
|
|
2967
3173
|
}
|
|
3174
|
+
.fs-skeleton-card {
|
|
3175
|
+
display: grid;
|
|
3176
|
+
gap: var(--fs-space-3);
|
|
3177
|
+
min-height: 10rem;
|
|
3178
|
+
padding: var(--fs-space-4);
|
|
3179
|
+
border-radius: var(--fs-radius-md);
|
|
3180
|
+
}
|
|
3181
|
+
.fs-skeleton-table {
|
|
3182
|
+
height: 1.25rem;
|
|
3183
|
+
margin-block-end: var(--fs-space-2);
|
|
3184
|
+
}
|
|
3185
|
+
.fs-skeleton-avatar {
|
|
3186
|
+
width: 2.5rem;
|
|
3187
|
+
height: 2.5rem;
|
|
3188
|
+
border-radius: 50%;
|
|
3189
|
+
}
|
|
2968
3190
|
@keyframes fokus-skeleton-pulse {
|
|
2969
3191
|
0%, 100% {
|
|
2970
3192
|
opacity: 1;
|
|
@@ -3352,6 +3574,280 @@
|
|
|
3352
3574
|
font-size: 1rem;
|
|
3353
3575
|
}
|
|
3354
3576
|
}
|
|
3577
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3578
|
+
@layer components {
|
|
3579
|
+
.fs-avatar {
|
|
3580
|
+
display: inline-flex;
|
|
3581
|
+
flex: 0 0 auto;
|
|
3582
|
+
align-items: center;
|
|
3583
|
+
justify-content: center;
|
|
3584
|
+
width: 2.5rem;
|
|
3585
|
+
height: 2.5rem;
|
|
3586
|
+
overflow: hidden;
|
|
3587
|
+
color: var(--fs-color-on-primary);
|
|
3588
|
+
font-weight: 600;
|
|
3589
|
+
background: var(--fs-color-primary);
|
|
3590
|
+
border-radius: 50%;
|
|
3591
|
+
object-fit: cover;
|
|
3592
|
+
}
|
|
3593
|
+
.fs-avatar-sm {
|
|
3594
|
+
width: 2rem;
|
|
3595
|
+
height: 2rem;
|
|
3596
|
+
font-size: 0.8125rem;
|
|
3597
|
+
}
|
|
3598
|
+
.fs-avatar-lg {
|
|
3599
|
+
width: 3.5rem;
|
|
3600
|
+
height: 3.5rem;
|
|
3601
|
+
font-size: 1.25rem;
|
|
3602
|
+
}
|
|
3603
|
+
.fs-avatar-square {
|
|
3604
|
+
border-radius: var(--fs-radius-md);
|
|
3605
|
+
}
|
|
3606
|
+
.fs-avatar img {
|
|
3607
|
+
width: 100%;
|
|
3608
|
+
height: 100%;
|
|
3609
|
+
object-fit: cover;
|
|
3610
|
+
}
|
|
3611
|
+
}
|
|
3612
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3613
|
+
@layer components {
|
|
3614
|
+
.fs-button-group {
|
|
3615
|
+
display: inline-flex;
|
|
3616
|
+
vertical-align: middle;
|
|
3617
|
+
}
|
|
3618
|
+
.fs-button-group > .fs-btn {
|
|
3619
|
+
border-radius: 0;
|
|
3620
|
+
}
|
|
3621
|
+
.fs-button-group > .fs-btn:first-child {
|
|
3622
|
+
border-start-start-radius: var(--fs-radius-sm);
|
|
3623
|
+
border-end-start-radius: var(--fs-radius-sm);
|
|
3624
|
+
}
|
|
3625
|
+
.fs-button-group > .fs-btn:last-child {
|
|
3626
|
+
border-start-end-radius: var(--fs-radius-sm);
|
|
3627
|
+
border-end-end-radius: var(--fs-radius-sm);
|
|
3628
|
+
}
|
|
3629
|
+
.fs-button-group > .fs-btn + .fs-btn {
|
|
3630
|
+
margin-inline-start: -1px;
|
|
3631
|
+
}
|
|
3632
|
+
.fs-button-group-vertical {
|
|
3633
|
+
flex-direction: column;
|
|
3634
|
+
align-items: flex-start;
|
|
3635
|
+
}
|
|
3636
|
+
.fs-button-group-vertical > .fs-btn {
|
|
3637
|
+
width: 100%;
|
|
3638
|
+
}
|
|
3639
|
+
}
|
|
3640
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3641
|
+
@layer components {
|
|
3642
|
+
.fs-close {
|
|
3643
|
+
display: inline-grid;
|
|
3644
|
+
width: 2rem;
|
|
3645
|
+
height: 2rem;
|
|
3646
|
+
place-items: center;
|
|
3647
|
+
padding: 0;
|
|
3648
|
+
color: currentcolor;
|
|
3649
|
+
font-size: 1.5rem;
|
|
3650
|
+
line-height: 1;
|
|
3651
|
+
background: transparent;
|
|
3652
|
+
border: 0;
|
|
3653
|
+
border-radius: 50%;
|
|
3654
|
+
cursor: pointer;
|
|
3655
|
+
opacity: 0.72;
|
|
3656
|
+
}
|
|
3657
|
+
.fs-close::before {
|
|
3658
|
+
content: "×";
|
|
3659
|
+
}
|
|
3660
|
+
.fs-close:hover {
|
|
3661
|
+
opacity: 1;
|
|
3662
|
+
background: var(--fs-color-subtle);
|
|
3663
|
+
}
|
|
3664
|
+
.fs-close:focus-visible {
|
|
3665
|
+
outline: var(--fs-focus-width) solid var(--fs-focus-color);
|
|
3666
|
+
outline-offset: var(--fs-focus-offset);
|
|
3667
|
+
}
|
|
3668
|
+
}
|
|
3669
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3670
|
+
@layer components {
|
|
3671
|
+
.fs-list-group {
|
|
3672
|
+
display: flex;
|
|
3673
|
+
flex-direction: column;
|
|
3674
|
+
padding: 0;
|
|
3675
|
+
margin: 0;
|
|
3676
|
+
list-style: none;
|
|
3677
|
+
border: 1px solid var(--fs-color-border);
|
|
3678
|
+
border-radius: var(--fs-radius-md);
|
|
3679
|
+
}
|
|
3680
|
+
.fs-list-group-item {
|
|
3681
|
+
position: relative;
|
|
3682
|
+
display: block;
|
|
3683
|
+
padding: var(--fs-space-3) var(--fs-space-4);
|
|
3684
|
+
color: var(--fs-color-text);
|
|
3685
|
+
background: var(--fs-color-surface);
|
|
3686
|
+
border-block-end: 1px solid var(--fs-color-border);
|
|
3687
|
+
}
|
|
3688
|
+
.fs-list-group-item:last-child {
|
|
3689
|
+
border-block-end: 0;
|
|
3690
|
+
}
|
|
3691
|
+
button.fs-list-group-item, a.fs-list-group-item {
|
|
3692
|
+
width: 100%;
|
|
3693
|
+
text-align: start;
|
|
3694
|
+
cursor: pointer;
|
|
3695
|
+
}
|
|
3696
|
+
.fs-list-group-item:hover {
|
|
3697
|
+
background: var(--fs-color-subtle);
|
|
3698
|
+
}
|
|
3699
|
+
.fs-list-group-item.is-active {
|
|
3700
|
+
color: var(--fs-color-on-primary);
|
|
3701
|
+
background: var(--fs-color-primary);
|
|
3702
|
+
}
|
|
3703
|
+
}
|
|
3704
|
+
@layer components {
|
|
3705
|
+
.fs-code {
|
|
3706
|
+
padding: 0.125em 0.35em;
|
|
3707
|
+
color: var(--fs-color-danger);
|
|
3708
|
+
background: var(--fs-color-subtle);
|
|
3709
|
+
border-radius: var(--fs-radius-sm);
|
|
3710
|
+
}
|
|
3711
|
+
.fs-pre {
|
|
3712
|
+
display: block;
|
|
3713
|
+
max-width: 100%;
|
|
3714
|
+
padding: var(--fs-space-4);
|
|
3715
|
+
overflow: auto;
|
|
3716
|
+
color: var(--fs-color-text);
|
|
3717
|
+
background: var(--fs-color-subtle);
|
|
3718
|
+
border: 1px solid var(--fs-color-border);
|
|
3719
|
+
border-radius: var(--fs-radius-md);
|
|
3720
|
+
}
|
|
3721
|
+
}
|
|
3722
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3723
|
+
@layer components {
|
|
3724
|
+
.fs-ratio {
|
|
3725
|
+
position: relative;
|
|
3726
|
+
width: 100%;
|
|
3727
|
+
}
|
|
3728
|
+
.fs-ratio::before {
|
|
3729
|
+
display: block;
|
|
3730
|
+
padding-top: var(--fs-ratio, 56.25%);
|
|
3731
|
+
content: "";
|
|
3732
|
+
}
|
|
3733
|
+
.fs-ratio > * {
|
|
3734
|
+
position: absolute;
|
|
3735
|
+
inset: 0;
|
|
3736
|
+
width: 100%;
|
|
3737
|
+
height: 100%;
|
|
3738
|
+
object-fit: cover;
|
|
3739
|
+
}
|
|
3740
|
+
.fs-ratio-1x1 {
|
|
3741
|
+
--fs-ratio: 100%;
|
|
3742
|
+
}
|
|
3743
|
+
.fs-ratio-4x3 {
|
|
3744
|
+
--fs-ratio: 75%;
|
|
3745
|
+
}
|
|
3746
|
+
.fs-ratio-16x9 {
|
|
3747
|
+
--fs-ratio: 56.25%;
|
|
3748
|
+
}
|
|
3749
|
+
.fs-ratio-21x9 {
|
|
3750
|
+
--fs-ratio: 42.857%;
|
|
3751
|
+
}
|
|
3752
|
+
}
|
|
3753
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3754
|
+
@layer components {
|
|
3755
|
+
.fs-icon-link {
|
|
3756
|
+
display: inline-flex;
|
|
3757
|
+
gap: 0.5em;
|
|
3758
|
+
align-items: center;
|
|
3759
|
+
}
|
|
3760
|
+
.fs-icon-link svg {
|
|
3761
|
+
width: 1em;
|
|
3762
|
+
height: 1em;
|
|
3763
|
+
flex: 0 0 auto;
|
|
3764
|
+
}
|
|
3765
|
+
.fs-icon-link:hover svg {
|
|
3766
|
+
transform: translateX(0.15em);
|
|
3767
|
+
}
|
|
3768
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3769
|
+
.fs-icon-link svg {
|
|
3770
|
+
transition: none;
|
|
3771
|
+
}
|
|
3772
|
+
}
|
|
3773
|
+
}
|
|
3774
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3775
|
+
@layer components {
|
|
3776
|
+
.fs-placeholder {
|
|
3777
|
+
display: inline-block;
|
|
3778
|
+
min-height: 1em;
|
|
3779
|
+
vertical-align: middle;
|
|
3780
|
+
cursor: wait;
|
|
3781
|
+
background: currentcolor;
|
|
3782
|
+
opacity: 0.18;
|
|
3783
|
+
}
|
|
3784
|
+
.fs-placeholder-glow {
|
|
3785
|
+
animation: fs-placeholder-glow 1.5s ease-in-out infinite;
|
|
3786
|
+
}
|
|
3787
|
+
.fs-placeholder-wave {
|
|
3788
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent), currentcolor;
|
|
3789
|
+
background-size: 200% 100%;
|
|
3790
|
+
animation: fs-placeholder-wave 1.5s linear infinite;
|
|
3791
|
+
}
|
|
3792
|
+
.fs-placeholder-btn {
|
|
3793
|
+
width: 6rem;
|
|
3794
|
+
height: 2.5rem;
|
|
3795
|
+
border-radius: var(--fs-radius-sm);
|
|
3796
|
+
}
|
|
3797
|
+
@keyframes fs-placeholder-glow {
|
|
3798
|
+
50% {
|
|
3799
|
+
opacity: 0.08;
|
|
3800
|
+
}
|
|
3801
|
+
}
|
|
3802
|
+
@keyframes fs-placeholder-wave {
|
|
3803
|
+
to {
|
|
3804
|
+
background-position: -200% 0;
|
|
3805
|
+
}
|
|
3806
|
+
}
|
|
3807
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3808
|
+
.fs-placeholder-glow, .fs-placeholder-wave {
|
|
3809
|
+
animation: none;
|
|
3810
|
+
}
|
|
3811
|
+
}
|
|
3812
|
+
}
|
|
3813
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3814
|
+
@layer components {
|
|
3815
|
+
.fs-progress {
|
|
3816
|
+
display: flex;
|
|
3817
|
+
height: 0.75rem;
|
|
3818
|
+
overflow: hidden;
|
|
3819
|
+
background: var(--fs-color-subtle);
|
|
3820
|
+
border-radius: 999px;
|
|
3821
|
+
}
|
|
3822
|
+
.fs-progress-bar {
|
|
3823
|
+
display: flex;
|
|
3824
|
+
align-items: center;
|
|
3825
|
+
justify-content: center;
|
|
3826
|
+
color: var(--fs-color-on-primary);
|
|
3827
|
+
background: var(--fs-color-primary);
|
|
3828
|
+
transition: width var(--fs-motion-duration-normal) var(--fs-motion-ease-standard);
|
|
3829
|
+
}
|
|
3830
|
+
.fs-progress-bar-striped {
|
|
3831
|
+
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%);
|
|
3832
|
+
background-size: 1rem 1rem;
|
|
3833
|
+
}
|
|
3834
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3835
|
+
.fs-progress-bar {
|
|
3836
|
+
transition: none;
|
|
3837
|
+
}
|
|
3838
|
+
}
|
|
3839
|
+
}
|
|
3840
|
+
/* stylelint-disable declaration-block-single-line-max-declarations */
|
|
3841
|
+
@layer components {
|
|
3842
|
+
[data-fs-scrollspy] .is-active {
|
|
3843
|
+
color: var(--fs-color-primary);
|
|
3844
|
+
font-weight: 600;
|
|
3845
|
+
}
|
|
3846
|
+
.fs-scrollspy-nav {
|
|
3847
|
+
position: sticky;
|
|
3848
|
+
inset-block-start: var(--fs-space-4);
|
|
3849
|
+
}
|
|
3850
|
+
}
|
|
3355
3851
|
@layer tokens {
|
|
3356
3852
|
[data-fs-brand=violet] {
|
|
3357
3853
|
--fs-color-primary: #6d28d9;
|
|
@@ -3447,7 +3943,8 @@
|
|
|
3447
3943
|
}
|
|
3448
3944
|
}
|
|
3449
3945
|
@layer tokens {
|
|
3450
|
-
[data-theme=dark]
|
|
3946
|
+
[data-theme=dark],
|
|
3947
|
+
[data-fs-theme=dark] {
|
|
3451
3948
|
--fs-color-text: #f1f3f4;
|
|
3452
3949
|
--fs-color-muted: #bdc1c6;
|
|
3453
3950
|
--fs-color-border: #3c4043;
|
|
@@ -3494,7 +3991,8 @@
|
|
|
3494
3991
|
--fs-feedback-info-bg: rgb(35.0058091619, 49.6887857769, 78.5757788254);
|
|
3495
3992
|
}
|
|
3496
3993
|
@supports (color: oklch(0% 0 0deg)) {
|
|
3497
|
-
[data-theme=dark]
|
|
3994
|
+
[data-theme=dark],
|
|
3995
|
+
[data-fs-theme=dark] {
|
|
3498
3996
|
--fs-color-text: oklch(96.2913383165% 0.002529697 228.7848682695deg);
|
|
3499
3997
|
--fs-color-muted: oklch(80.9268110646% 0.0083071608 253.8653061211deg);
|
|
3500
3998
|
--fs-color-border: oklch(36.8827622528% 0.0074489239 240.018838067deg);
|
|
@@ -3538,5 +4036,37 @@
|
|
|
3538
4036
|
--fs-feedback-info-bg: oklch(31.7574919059% 0.0556228738 263.0598185246deg);
|
|
3539
4037
|
}
|
|
3540
4038
|
}
|
|
4039
|
+
@media (prefers-color-scheme: dark) {
|
|
4040
|
+
[data-fs-theme=auto] {
|
|
4041
|
+
--fs-color-text: #f1f3f4;
|
|
4042
|
+
--fs-color-muted: #bdc1c6;
|
|
4043
|
+
--fs-color-border: #3c4043;
|
|
4044
|
+
--fs-color-surface: #202124;
|
|
4045
|
+
--fs-color-subtle: #2b2c2f;
|
|
4046
|
+
--fs-color-bg-surface: var(--fs-color-surface);
|
|
4047
|
+
--fs-color-bg-subtle: var(--fs-color-subtle);
|
|
4048
|
+
--fs-color-surface-raised: var(--fs-color-surface);
|
|
4049
|
+
--fs-color-surface-interactive: var(--fs-color-subtle);
|
|
4050
|
+
--fs-color-text-primary: var(--fs-color-text);
|
|
4051
|
+
--fs-color-text-muted: var(--fs-color-muted);
|
|
4052
|
+
--fs-color-border-default: var(--fs-color-border);
|
|
4053
|
+
--fs-color-focus: var(--fs-color-primary);
|
|
4054
|
+
--fs-tooltip-bg: #f8fafc;
|
|
4055
|
+
--fs-tooltip-text: #1e293b;
|
|
4056
|
+
}
|
|
4057
|
+
}
|
|
4058
|
+
@media (forced-colors: active) {
|
|
4059
|
+
:root,
|
|
4060
|
+
[data-theme=dark],
|
|
4061
|
+
[data-fs-theme=light],
|
|
4062
|
+
[data-fs-theme=dark],
|
|
4063
|
+
[data-fs-theme=auto] {
|
|
4064
|
+
--fs-color-border: CanvasText;
|
|
4065
|
+
--fs-color-text: CanvasText;
|
|
4066
|
+
--fs-color-surface: Canvas;
|
|
4067
|
+
--fs-color-subtle: Canvas;
|
|
4068
|
+
--fs-focus-color: Highlight;
|
|
4069
|
+
}
|
|
4070
|
+
}
|
|
3541
4071
|
}
|
|
3542
4072
|
/*# sourceMappingURL=components.css.map */
|