fokus-styles 2.4.0 → 2.6.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 (212) hide show
  1. package/dist/css/components.css +561 -83
  2. package/dist/css/components.min.css +1 -1
  3. package/dist/css/fokus-components.css +561 -83
  4. package/dist/css/fokus-components.min.css +1 -1
  5. package/dist/css/fokus-rtl.css +697 -83
  6. package/dist/css/fokus-rtl.min.css +1 -1
  7. package/dist/css/fokus-utilities.css +136 -0
  8. package/dist/css/fokus-utilities.min.css +1 -1
  9. package/dist/css/fokus.css +996 -258
  10. package/dist/css/fokus.min.css +1 -1
  11. package/dist/css/forms.css +300 -176
  12. package/dist/css/forms.min.css +1 -1
  13. package/dist/css/helpers.css +136 -0
  14. package/dist/css/helpers.min.css +1 -1
  15. package/dist/js/fokus.js +270 -25
  16. package/dist/js/fokus.min.js +18 -18
  17. package/package.json +17 -15
  18. package/packages/fokus-components/scss/components/_alerts.scss +128 -6
  19. package/packages/fokus-components/scss/components/_badges.scss +26 -10
  20. package/packages/fokus-components/scss/components/_index.scss +1 -0
  21. package/packages/fokus-components/scss/components/_popover.scss +131 -21
  22. package/packages/fokus-components/scss/components/_responsive.scss +23 -0
  23. package/packages/fokus-components/scss/components/_tag.scss +37 -14
  24. package/packages/fokus-components/scss/components/_toasts.scss +156 -11
  25. package/packages/fokus-components/scss/components/_tooltips.scss +70 -18
  26. package/packages/fokus-components/scss/forms/_check-radio-switch.scss +313 -215
  27. package/packages/fokus-components/scss/forms/_forms.scss +16 -0
  28. package/packages/fokus-js/js/carousel.d.ts +4 -0
  29. package/packages/fokus-js/js/carousel.js +8 -0
  30. package/packages/fokus-js/js/core/positioning.js +18 -9
  31. package/packages/fokus-js/js/dropdown.d.ts +4 -0
  32. package/packages/fokus-js/js/dropdown.js +7 -0
  33. package/packages/fokus-js/js/popover.js +26 -1
  34. package/packages/fokus-js/js/tabs.d.ts +3 -0
  35. package/packages/fokus-js/js/tabs.js +5 -0
  36. package/packages/fokus-js/js/tag.js +17 -0
  37. package/packages/fokus-js/js/toast.js +77 -3
  38. package/packages/fokus-js/js/tooltip.d.ts +8 -1
  39. package/packages/fokus-js/js/tooltip.js +106 -13
  40. package/packages/fokus-utilities/scss/utilities/_api.scss +48 -0
  41. package/CHANGELOG.md +0 -910
  42. package/dist/css/components.css.map +0 -1
  43. package/dist/css/components.min.css.map +0 -1
  44. package/dist/css/fokus-components.css.map +0 -1
  45. package/dist/css/fokus-components.min.css.map +0 -1
  46. package/dist/css/fokus-core.css.map +0 -1
  47. package/dist/css/fokus-core.min.css.map +0 -1
  48. package/dist/css/fokus-dark.css.map +0 -1
  49. package/dist/css/fokus-dark.min.css.map +0 -1
  50. package/dist/css/fokus-rtl.css.map +0 -1
  51. package/dist/css/fokus-rtl.min.css.map +0 -1
  52. package/dist/css/fokus-utilities.css.map +0 -1
  53. package/dist/css/fokus-utilities.min.css.map +0 -1
  54. package/dist/css/fokus.css.map +0 -1
  55. package/dist/css/fokus.min.css.map +0 -1
  56. package/dist/css/fonts.css.map +0 -1
  57. package/dist/css/fonts.min.css.map +0 -1
  58. package/dist/css/forms.css.map +0 -1
  59. package/dist/css/forms.min.css.map +0 -1
  60. package/dist/css/helpers.css.map +0 -1
  61. package/dist/css/helpers.min.css.map +0 -1
  62. package/dist/css/layout.css.map +0 -1
  63. package/dist/css/layout.min.css.map +0 -1
  64. package/dist/js/fokus.js.map +0 -7
  65. package/dist/js/fokus.min.js.map +0 -7
  66. package/docs/README.md +0 -86
  67. package/docs/comparison.md +0 -124
  68. package/docs/components/accordion.md +0 -104
  69. package/docs/components/alert-dialog.md +0 -99
  70. package/docs/components/alert.md +0 -59
  71. package/docs/components/avatar.md +0 -13
  72. package/docs/components/badge.md +0 -82
  73. package/docs/components/breadcrumb.md +0 -93
  74. package/docs/components/button-group.md +0 -13
  75. package/docs/components/button.md +0 -98
  76. package/docs/components/card.md +0 -111
  77. package/docs/components/carousel.md +0 -167
  78. package/docs/components/checkbox.md +0 -97
  79. package/docs/components/close-button.md +0 -13
  80. package/docs/components/code.md +0 -13
  81. package/docs/components/collapse.md +0 -78
  82. package/docs/components/combobox.md +0 -123
  83. package/docs/components/command-palette.md +0 -131
  84. package/docs/components/datatable.md +0 -173
  85. package/docs/components/datepicker.md +0 -137
  86. package/docs/components/divider.md +0 -57
  87. package/docs/components/dropdown.md +0 -103
  88. package/docs/components/empty-state.md +0 -65
  89. package/docs/components/file-upload-advanced.md +0 -116
  90. package/docs/components/file-upload.md +0 -93
  91. package/docs/components/icon-link.md +0 -13
  92. package/docs/components/input-group.md +0 -73
  93. package/docs/components/input.md +0 -90
  94. package/docs/components/list-group.md +0 -13
  95. package/docs/components/modal.md +0 -120
  96. package/docs/components/navbar.md +0 -74
  97. package/docs/components/nested-menu.md +0 -90
  98. package/docs/components/notification-center.md +0 -116
  99. package/docs/components/offcanvas.md +0 -102
  100. package/docs/components/pagination.md +0 -145
  101. package/docs/components/placeholder.md +0 -13
  102. package/docs/components/popover.md +0 -105
  103. package/docs/components/progress.md +0 -126
  104. package/docs/components/radio.md +0 -70
  105. package/docs/components/range.md +0 -83
  106. package/docs/components/rating.md +0 -91
  107. package/docs/components/ratio.md +0 -13
  108. package/docs/components/scrollspy.md +0 -13
  109. package/docs/components/segmented-control.md +0 -82
  110. package/docs/components/select.md +0 -89
  111. package/docs/components/skeleton.md +0 -70
  112. package/docs/components/stepper.md +0 -107
  113. package/docs/components/switch.md +0 -75
  114. package/docs/components/table.md +0 -90
  115. package/docs/components/tabs.md +0 -104
  116. package/docs/components/tag.md +0 -129
  117. package/docs/components/tile.md +0 -112
  118. package/docs/components/timeline.md +0 -78
  119. package/docs/components/toast.md +0 -95
  120. package/docs/components/tooltip.md +0 -77
  121. package/docs/components/tree-view.md +0 -118
  122. package/docs/contributing/contributing.md +0 -18
  123. package/docs/getting-started/installation.md +0 -70
  124. package/docs/getting-started/usage.md +0 -105
  125. package/docs/guides/accessibility.md +0 -102
  126. package/docs/guides/charts.md +0 -73
  127. package/docs/guides/dark-mode.md +0 -90
  128. package/docs/guides/icons.md +0 -99
  129. package/docs/guides/javascript-api.md +0 -9
  130. package/docs/guides/layout-advanced.md +0 -118
  131. package/docs/guides/migration-clarus-to-fokus.md +0 -48
  132. package/docs/guides/migration-external.md +0 -123
  133. package/docs/guides/migration-v1.md +0 -63
  134. package/docs/guides/print.md +0 -30
  135. package/docs/guides/rtl-and-system-preferences.md +0 -28
  136. package/docs/guides/theming.md +0 -140
  137. package/docs/guides/utility-api.md +0 -9
  138. package/docs/prompts/prompt-plan.md +0 -45
  139. package/docs/reference/accessibility-matrix.md +0 -77
  140. package/docs/reference/browser-support.md +0 -75
  141. package/docs/reference/contrast-report.md +0 -50
  142. package/docs/reference/definitions.md +0 -864
  143. package/docs/reference/design-tokens.md +0 -194
  144. package/docs/reference/scss-architecture.md +0 -227
  145. package/docs/reference/size-baseline.json +0 -34
  146. package/docs/reference/stability.md +0 -89
  147. package/docs/showcase.md +0 -25
  148. package/mockup/README.md +0 -41
  149. package/mockup/assets/carousel-planning.png +0 -0
  150. package/mockup/assets/carousel-workspace.png +0 -0
  151. package/mockup/assets/example-theme.css +0 -8
  152. package/mockup/assets/example-theme.js +0 -11
  153. package/mockup/assets/showcase-contracts.js +0 -84
  154. package/mockup/assets/showcase.css +0 -91
  155. package/mockup/assets/showcase.js +0 -724
  156. package/mockup/content-data.html +0 -9
  157. package/mockup/examples/accordion-tabs-toast.html +0 -149
  158. package/mockup/examples/alert-dialog.html +0 -84
  159. package/mockup/examples/alerts.html +0 -41
  160. package/mockup/examples/badges-alerts.html +0 -77
  161. package/mockup/examples/buttons.html +0 -58
  162. package/mockup/examples/cards.html +0 -132
  163. package/mockup/examples/carousel.html +0 -126
  164. package/mockup/examples/charts.html +0 -102
  165. package/mockup/examples/check-radio-switch.html +0 -144
  166. package/mockup/examples/collapse.html +0 -69
  167. package/mockup/examples/combobox.html +0 -60
  168. package/mockup/examples/command-palette.html +0 -64
  169. package/mockup/examples/datatable.html +0 -113
  170. package/mockup/examples/datepicker.html +0 -62
  171. package/mockup/examples/divider.html +0 -45
  172. package/mockup/examples/dropdown-tooltip.html +0 -77
  173. package/mockup/examples/empty-state.html +0 -56
  174. package/mockup/examples/file-drop.html +0 -74
  175. package/mockup/examples/file-upload-advanced.html +0 -68
  176. package/mockup/examples/forms-advanced.html +0 -77
  177. package/mockup/examples/hover-card.html +0 -86
  178. package/mockup/examples/icons.html +0 -157
  179. package/mockup/examples/input-group.html +0 -74
  180. package/mockup/examples/js-foundation.html +0 -215
  181. package/mockup/examples/layout.html +0 -134
  182. package/mockup/examples/modal-select.html +0 -127
  183. package/mockup/examples/nested-menu.html +0 -73
  184. package/mockup/examples/notification-center.html +0 -86
  185. package/mockup/examples/offcanvas-popover.html +0 -133
  186. package/mockup/examples/pagination-breadcrumbs.html +0 -92
  187. package/mockup/examples/range.html +0 -69
  188. package/mockup/examples/rating.html +0 -103
  189. package/mockup/examples/segmented-control.html +0 -96
  190. package/mockup/examples/skeletons.html +0 -82
  191. package/mockup/examples/spinner-progress.html +0 -130
  192. package/mockup/examples/stepper.html +0 -119
  193. package/mockup/examples/tables-navbar.html +0 -89
  194. package/mockup/examples/tag.html +0 -105
  195. package/mockup/examples/theming.html +0 -68
  196. package/mockup/examples/tile.html +0 -107
  197. package/mockup/examples/timeline.html +0 -108
  198. package/mockup/examples/tree-view.html +0 -68
  199. package/mockup/feedback-actions.html +0 -9
  200. package/mockup/forms.html +0 -13
  201. package/mockup/foundations.html +0 -7
  202. package/mockup/kitchen-sink.html +0 -696
  203. package/mockup/navigation-disclosure.html +0 -11
  204. package/mockup/overlays-commands.html +0 -12
  205. package/mockup/templates/README.md +0 -20
  206. package/mockup/templates/admin.html +0 -334
  207. package/mockup/templates/auth.html +0 -234
  208. package/mockup/templates/dashboard.html +0 -442
  209. package/mockup/templates/landing.html +0 -397
  210. package/packages/fokus-icons/package.json +0 -46
  211. package/scripts/migrate-fokus-map.json +0 -1366
  212. package/scripts/migrate-fokus.mjs +0 -97
@@ -1,113 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - DataTable</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/components.css">
11
- <link rel="stylesheet" href="../../dist/css/forms.css">
12
- <link rel="stylesheet" href="../../dist/css/helpers.css">
13
- <style>
14
- .theme-panel {
15
- padding: 24px;
16
- }
17
-
18
- html[data-theme="dark"] .theme-panel {
19
- color: var(--fs-color-text);
20
- background-color: var(--fs-color-surface);
21
- }
22
-
23
- section {
24
- max-width: 560px;
25
- margin-bottom: 24px;
26
- }
27
-
28
- .demo-actions {
29
- display: flex;
30
- gap: 8px;
31
- margin-top: 12px;
32
- }
33
- </style>
34
- <link rel="stylesheet" href="../assets/example-theme.css">
35
- <script src="../assets/example-theme.js"></script>
36
- </head>
37
- <body>
38
-
39
- <div class="theme-panel">
40
- <section>
41
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-1">DataTable — ordene por coluna, filtre e pagine (5 linhas/página)</p>
42
- <div class="fs-datatable" id="datatable-claro" data-fs="datatable" data-fs-page-size="5">
43
- <div class="fs-datatable-toolbar">
44
- <input type="search" class="fs-form-control" data-fs-datatable-filter placeholder="Filtrar por nome ou framework…">
45
- </div>
46
- <table class="fs-table fs-table-striped fs-table-hover">
47
- <thead>
48
- <tr>
49
- <th scope="col" data-fs-sort="name">Nome</th>
50
- <th scope="col" data-fs-sort="framework">Framework</th>
51
- <th scope="col" data-fs-sort="year">Lançamento</th>
52
- </tr>
53
- </thead>
54
- <tbody>
55
- <tr><td>Ana</td><td>Fokus Styles</td><td>2026</td></tr>
56
- <tr><td>Bruno</td><td>Cirrus UI</td><td>2018</td></tr>
57
- <tr><td>Carla</td><td>UIkit</td><td>2013</td></tr>
58
- <tr><td>Diego</td><td>Bulma</td><td>2016</td></tr>
59
- <tr><td>Elisa</td><td>Foundation</td><td>2011</td></tr>
60
- <tr><td>Fábio</td><td>Materialize</td><td>2014</td></tr>
61
- <tr><td>Giulia</td><td>Pure.css</td><td>2013</td></tr>
62
- <tr><td>Hugo</td><td>Milligram</td><td>2015</td></tr>
63
- <tr><td>Iris</td><td>Spectre.css</td><td>2017</td></tr>
64
- <tr><td>João</td><td>Tachyons</td><td>2014</td></tr>
65
- <tr><td>Karina</td><td>Picnic CSS</td><td>2016</td></tr>
66
- <tr><td>Lucas</td><td>Almost Flat</td><td>2013</td></tr>
67
- </tbody>
68
- </table>
69
- <div class="fs-empty-state" data-fs-datatable-empty hidden>
70
- <div class="fs-empty-state-icon" aria-hidden="true"><svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg></div>
71
- <p class="fs-empty-state-title">Nenhum resultado encontrado.</p>
72
- </div>
73
- <div class="fs-datatable-loading" data-fs-datatable-loading hidden>
74
- <div class="fs-skeleton fs-skeleton-text" style="width: 100%; height: 20px; margin-bottom: 8px;"></div>
75
- <div class="fs-skeleton fs-skeleton-text" style="width: 100%; height: 20px; margin-bottom: 8px;"></div>
76
- <div class="fs-skeleton fs-skeleton-text" style="width: 100%; height: 20px;"></div>
77
- </div>
78
- <div class="fs-empty-state" data-fs-datatable-error hidden>
79
- <div class="fs-empty-state-icon" aria-hidden="true"><svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/></svg></div>
80
- <p class="fs-empty-state-title">Falha ao carregar dados</p>
81
- <p class="fs-empty-state-text" data-fs-datatable-error-message></p>
82
- </div>
83
- </div>
84
- <div class="demo-actions">
85
- <button type="button" class="fs-btn fs-btn-sm" data-demo-action="loading" data-demo-target="datatable-claro">Simular carregando</button>
86
- <button type="button" class="fs-btn fs-btn-sm" data-demo-action="error" data-demo-target="datatable-claro">Simular erro</button>
87
- <button type="button" class="fs-btn fs-btn-sm" data-demo-action="reset" data-demo-target="datatable-claro">Normal</button>
88
- </div>
89
- </section>
90
- </div>
91
-
92
-
93
-
94
- <!-- SCRIPTS IMPORT -->
95
- <script src="../../dist/js/fokus.js"></script>
96
- <script>
97
- // Só pro mockup: os botões abaixo demonstram setLoading()/setError(),
98
- // que na vida real seriam chamados ao redor de uma requisição real.
99
- document.querySelectorAll("[data-demo-action]").forEach((btn) => {
100
- btn.addEventListener("click", () => {
101
- const instance = FokusStyles.DataTable.getInstance(document.getElementById(btn.dataset.demoTarget));
102
- if (btn.dataset.demoAction === "loading") instance.setLoading(true);
103
- else if (btn.dataset.demoAction === "error") instance.setError("Não foi possível conectar ao servidor.");
104
- else {
105
- instance.setLoading(false);
106
- instance.setError(null);
107
- }
108
- });
109
- });
110
- </script>
111
-
112
- </body>
113
- </html>
@@ -1,62 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Datepicker &amp; Timepicker</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/components.css">
11
- <link rel="stylesheet" href="../../dist/css/forms.css">
12
- <link rel="stylesheet" href="../../dist/css/helpers.css">
13
- <style>
14
- .theme-panel {
15
- padding: 24px;
16
- }
17
-
18
- html[data-theme="dark"] .theme-panel {
19
- color: var(--fs-color-text);
20
- background-color: var(--fs-color-surface);
21
- }
22
-
23
- section {
24
- max-width: 320px;
25
- margin-bottom: 24px;
26
- }
27
- </style>
28
- <link rel="stylesheet" href="../assets/example-theme.css">
29
- <script src="../assets/example-theme.js"></script>
30
- </head>
31
- <body>
32
-
33
- <div class="theme-panel">
34
- <section>
35
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-1">Datepicker — calendário customizado (JS)</p>
36
- <label for="datepicker-claro" class="fs-form-label">Data de entrega</label>
37
- <div class="fs-datepicker">
38
- <input type="text" class="fs-form-control" id="datepicker-claro" data-fs="datepicker" data-fs-target="#datepicker-claro-panel" placeholder="dd/mm/aaaa" value="15/07/2026">
39
- </div>
40
- <div id="datepicker-claro-panel"></div>
41
- </section>
42
-
43
- <section>
44
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-1">Date nativo — <code>&lt;input type="date"&gt;</code> estilizado (CSS-only)</p>
45
- <label for="native-date-claro" class="fs-form-label">Data de nascimento</label>
46
- <input type="date" class="fs-form-control" id="native-date-claro">
47
- </section>
48
-
49
- <section>
50
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-1">Time nativo — <code>&lt;input type="time"&gt;</code> estilizado (CSS-only)</p>
51
- <label for="native-time-claro" class="fs-form-label">Horário preferido</label>
52
- <input type="time" class="fs-form-control" id="native-time-claro">
53
- </section>
54
- </div>
55
-
56
-
57
-
58
- <!-- SCRIPTS IMPORT -->
59
- <script src="../../dist/js/fokus.js"></script>
60
-
61
- </body>
62
- </html>
@@ -1,45 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Divider</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/components.css">
11
- <link rel="stylesheet" href="../../dist/css/helpers.css">
12
- <style>
13
- .theme-panel {
14
- padding: 24px;
15
- background-color: var(--fs-color-subtle);
16
- }
17
-
18
- html[data-theme="dark"] .theme-panel {
19
- color: var(--fs-color-text);
20
- background-color: var(--fs-color-surface);
21
- }
22
-
23
- .theme-panel {
24
- max-width: 360px;
25
- }
26
- </style>
27
- <link rel="stylesheet" href="../assets/example-theme.css">
28
- <script src="../assets/example-theme.js"></script>
29
- </head>
30
- <body>
31
- <div class="theme-panel">
32
- <p class="fs-u-mb-0">Texto acima do divisor simples.</p>
33
- <hr class="fs-divider">
34
- <p class="fs-u-mb-0">Texto abaixo.</p>
35
-
36
- <div class="fs-divider"><span class="fs-divider-label">ou</span></div>
37
-
38
- <p class="fs-u-mb-0">Continue com e-mail e senha.</p>
39
-
40
- <div class="fs-divider"><span class="fs-divider-label">Seção 3</span></div>
41
- </div>
42
-
43
-
44
- </body>
45
- </html>
@@ -1,77 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Dropdown &amp; Tooltip</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/components.css">
11
- <link rel="stylesheet" href="../../dist/css/helpers.css">
12
- <style>
13
- .theme-panel {
14
- padding: 24px;
15
- }
16
-
17
- html[data-theme="dark"] .theme-panel {
18
- color: var(--fs-color-text);
19
- background-color: var(--fs-color-surface);
20
- }
21
-
22
- section {
23
- margin-bottom: 24px;
24
- }
25
- </style>
26
- <link rel="stylesheet" href="../assets/example-theme.css">
27
- <script src="../assets/example-theme.js"></script>
28
- </head>
29
- <body>
30
-
31
- <div class="theme-panel">
32
- <section>
33
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mt-3 fs-u-mb-1">Dropdown — auto-init via data-fs, posicionamento, foco e teclado (setas, Escape, clique fora)</p>
34
- <p class="fs-u-fs-xs fs-u-mb-2">Alinhamento padrão (<code class="fs-u-font-mono">data-align="start"</code>, borda esquerda do menu = borda esquerda do botão):</p>
35
- <div class="fs-dropdown fs-u-mr-4">
36
- <button type="button" class="fs-btn fs-btn-primary fs-dropdown-toggle" data-fs="dropdown" data-fs-target="#menu-claro">
37
- Opções
38
- </button>
39
- <div class="fs-dropdown-menu" id="menu-claro">
40
- <span class="fs-dropdown-header">Conta</span>
41
- <a href="#" class="fs-dropdown-item">Perfil</a>
42
- <a href="#" class="fs-dropdown-item">Configurações</a>
43
- <div class="fs-dropdown-divider"></div>
44
- <a href="#" class="fs-dropdown-item is-disabled">Item desabilitado</a>
45
- <button type="button" class="fs-dropdown-item">Sair</button>
46
- </div>
47
- </div>
48
-
49
- <p class="fs-u-fs-xs fs-u-mb-2 fs-u-mt-3"><code class="fs-u-font-mono">data-align="end"</code> (borda direita do menu = borda direita do botão):</p>
50
- <div class="fs-dropdown" style="margin-left: 300px;">
51
- <button type="button" class="fs-btn fs-btn-primary fs-dropdown-toggle" data-fs="dropdown" data-fs-target="#menu-claro-end" data-align="end">
52
- Opções (end)
53
- </button>
54
- <div class="fs-dropdown-menu" id="menu-claro-end">
55
- <a href="#" class="fs-dropdown-item">Perfil</a>
56
- <a href="#" class="fs-dropdown-item">Configurações</a>
57
- <button type="button" class="fs-dropdown-item">Sair</button>
58
- </div>
59
- </div>
60
- </section>
61
-
62
- <section>
63
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-1">Tooltip — auto-init via data-fs, show/hide por hover/foco, 4 posicionamentos</p>
64
- <button type="button" class="fs-btn fs-u-mr-2" data-fs="tooltip" data-placement="top" title="Tooltip no topo">Top</button>
65
- <button type="button" class="fs-btn fs-u-mr-2" data-fs="tooltip" data-placement="bottom" title="Tooltip embaixo">Bottom</button>
66
- <button type="button" class="fs-btn fs-u-mr-2" data-fs="tooltip" data-placement="left" title="Tooltip à esquerda">Left</button>
67
- <button type="button" class="fs-btn" data-fs="tooltip" data-placement="right" title="Tooltip à direita">Right</button>
68
- </section>
69
- </div>
70
-
71
-
72
-
73
- <!-- SCRIPTS IMPORT -->
74
- <script src="../../dist/js/fokus.js"></script>
75
-
76
- </body>
77
- </html>
@@ -1,56 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Empty State</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/components.css">
11
- <link rel="stylesheet" href="../../dist/css/helpers.css">
12
- <style>
13
- .theme-panel {
14
- display: flex;
15
- gap: 24px;
16
- padding: 24px;
17
- background-color: var(--fs-color-subtle);
18
- }
19
-
20
- html[data-theme="dark"] .theme-panel {
21
- color: var(--fs-color-text);
22
- background-color: var(--fs-color-surface);
23
- }
24
-
25
- .card-like {
26
- width: 320px;
27
- background-color: var(--fs-color-surface);
28
- border-radius: var(--fs-radius-md);
29
- }
30
- </style>
31
- <link rel="stylesheet" href="../assets/example-theme.css">
32
- <script src="../assets/example-theme.js"></script>
33
- </head>
34
- <body>
35
- <div class="theme-panel">
36
- <div class="card-like">
37
- <div class="fs-empty-state">
38
- <div class="fs-empty-state-icon" aria-hidden="true"><svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m21 21-4.34-4.34"/><circle cx="11" cy="11" r="8"/></svg></div>
39
- <h3 class="fs-empty-state-title">Nenhum resultado encontrado</h3>
40
- <p class="fs-empty-state-text">Tente ajustar os filtros ou buscar por outro termo.</p>
41
- <button type="button" class="fs-btn fs-btn-primary">Limpar filtros</button>
42
- </div>
43
- </div>
44
-
45
- <div class="card-like">
46
- <div class="fs-empty-state">
47
- <div class="fs-empty-state-icon" aria-hidden="true"><svg class="fs-icon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 16 12 14 15 10 15 8 12 2 12"/><path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"/></svg></div>
48
- <h3 class="fs-empty-state-title">Caixa de entrada vazia</h3>
49
- <p class="fs-empty-state-text">Novas mensagens aparecerão aqui.</p>
50
- </div>
51
- </div>
52
- </div>
53
-
54
-
55
- </body>
56
- </html>
@@ -1,74 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - File Input Drag-and-Drop</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/forms.css">
11
- <link rel="stylesheet" href="../../dist/css/helpers.css">
12
- <style>
13
- .theme-panel {
14
- display: flex;
15
- flex-direction: column;
16
- gap: 16px;
17
- padding: 24px;
18
- background-color: var(--fs-color-subtle);
19
- }
20
-
21
- html[data-theme="dark"] .theme-panel {
22
- color: var(--fs-color-text);
23
- background-color: var(--fs-color-surface);
24
- }
25
-
26
- .theme-panel > div {
27
- max-width: 360px;
28
- }
29
-
30
- #resultado {
31
- font-size: 0.85rem;
32
- color: var(--fs-color-muted);
33
- }
34
- </style>
35
- <link rel="stylesheet" href="../assets/example-theme.css">
36
- <script src="../assets/example-theme.js"></script>
37
- </head>
38
- <body>
39
- <div class="theme-panel">
40
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-0">Arraste um arquivo para a área abaixo (ou clique)</p>
41
- <div class="fs-file-upload">
42
- <input type="file" class="fs-file-input" id="arquivo-1">
43
- <label for="arquivo-1" class="fs-file-label fs-file-label-dropzone" data-fs="file-drop">
44
- <span>Arraste um arquivo aqui</span>
45
- <span class="fs-file-dropzone-hint">ou clique para escolher</span>
46
- </label>
47
- </div>
48
- <p id="resultado">Nenhum arquivo selecionado.</p>
49
-
50
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-0">Botão padrão (mesma funcionalidade, sem o visual de dropzone)</p>
51
- <div class="fs-file-upload">
52
- <input type="file" class="fs-file-input" id="arquivo-2">
53
- <label for="arquivo-2" class="fs-file-label" data-fs="file-drop">Escolher arquivo</label>
54
- </div>
55
-
56
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mb-0">Desabilitado</p>
57
- <div class="fs-file-upload">
58
- <input type="file" class="fs-file-input" id="arquivo-3" disabled>
59
- <label for="arquivo-3" class="fs-file-label fs-file-label-dropzone" data-fs="file-drop">
60
- <span>Desabilitado</span>
61
- </label>
62
- </div>
63
- </div>
64
-
65
-
66
- <script src="../../dist/js/fokus.js"></script>
67
- <script>
68
- document.getElementById("arquivo-1").addEventListener("change", (event) => {
69
- const file = event.target.files[0];
70
- document.getElementById("resultado").textContent = file ? `Selecionado: ${file.name}` : "Nenhum arquivo selecionado.";
71
- });
72
- </script>
73
- </body>
74
- </html>
@@ -1,68 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Upload avançado</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/forms.css">
11
- <link rel="stylesheet" href="../../dist/css/components.css">
12
- <link rel="stylesheet" href="../../dist/css/helpers.css">
13
- <style>
14
- .theme-panel {
15
- padding: 24px;
16
- }
17
-
18
- html[data-theme="dark"] .theme-panel {
19
- color: var(--fs-color-text);
20
- background-color: var(--fs-color-surface);
21
- }
22
-
23
- .upload-demo {
24
- max-width: 360px;
25
- }
26
- </style>
27
- <link rel="stylesheet" href="../assets/example-theme.css">
28
- <script src="../assets/example-theme.js"></script>
29
- </head>
30
- <body>
31
-
32
- <div class="theme-panel">
33
- <div class="fs-file-upload upload-demo" data-fs="file-upload-advanced" id="upload-claro">
34
- <input type="file" class="fs-file-input" id="anexos-claro" multiple>
35
- <label for="anexos-claro" class="fs-file-label fs-file-label-dropzone" data-fs="file-drop">
36
- Arraste arquivos ou clique para escolher
37
- <span class="fs-file-dropzone-hint">Vários arquivos, até 5MB cada</span>
38
- </label>
39
- </div>
40
- <button type="button" class="fs-btn fs-u-mt-2" data-simulate="upload-claro">Simular progresso do 1º arquivo</button>
41
- </div>
42
-
43
-
44
-
45
- <script src="../../dist/js/fokus.js"></script>
46
- <script>
47
- // Demonstra a API `setProgress`/`setError` sem depender de um backend
48
- // real — um `setInterval` simula um upload progressivo no 1º arquivo
49
- // selecionado, só pra exercitar a barra de progresso do mockup.
50
- document.querySelectorAll("[data-simulate]").forEach((button) => {
51
- button.addEventListener("click", () => {
52
- const rootEl = document.getElementById(button.getAttribute("data-simulate"));
53
- const upload = FokusStyles.FileUploadAdvanced.getInstance(rootEl);
54
- const firstItem = rootEl.querySelector(".fs-file-upload-item");
55
- if (!firstItem) return;
56
-
57
- const id = firstItem.getAttribute("data-file-id");
58
- let progress = 0;
59
- const interval = setInterval(() => {
60
- progress += 20;
61
- upload.setProgress(id, progress);
62
- if (progress >= 100) clearInterval(interval);
63
- }, 200);
64
- });
65
- });
66
- </script>
67
- </body>
68
- </html>
@@ -1,77 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Mockup - Formulários Avançados</title>
7
-
8
- <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../../dist/css/fonts.css">
10
- <link rel="stylesheet" href="../../dist/css/forms.css">
11
- <link rel="stylesheet" href="../../dist/css/helpers.css">
12
- <style>
13
- .theme-panel {
14
- padding: 24px;
15
- }
16
-
17
- html[data-theme="dark"] .theme-panel {
18
- color: var(--fs-color-text);
19
- background-color: var(--fs-color-surface);
20
- }
21
- </style>
22
- <link rel="stylesheet" href="../assets/example-theme.css">
23
- <script src="../assets/example-theme.js"></script>
24
- </head>
25
- <body>
26
-
27
- <div class="theme-panel">
28
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mt-3 fs-u-mb-1">Validação - .is-valid / .is-invalid</p>
29
- <div class="fs-form-row fs-u-gap-x-2">
30
- <div class="fs-form-col">
31
- <label for="input-valid" class="fs-form-label fs-form-size-md">E-mail</label>
32
- <input type="email" class="fs-form-control fs-form-size-xxl is-valid" id="input-valid" value="jorge@fokus.dev">
33
- <span class="fs-valid-feedback fs-form-size-xxl">E-mail válido.</span>
34
- </div>
35
- <div class="fs-form-col">
36
- <label for="input-invalid" class="fs-form-label fs-form-size-md">E-mail</label>
37
- <input type="email" class="fs-form-control fs-form-size-xxl is-invalid" id="input-invalid" value="jorge@fokus">
38
- <span class="fs-invalid-feedback fs-form-size-xxl">Informe um e-mail válido.</span>
39
- </div>
40
- </div>
41
-
42
- <p class="fs-u-fs-sm fs-u-fw-medium fs-u-mt-3 fs-u-mb-1">Upload de arquivo estilizado</p>
43
- <div class="fs-form-row fs-u-gap-x-2">
44
- <div class="fs-form-col">
45
- <span class="fs-form-label fs-form-size-md">Padrão</span>
46
- <div class="fs-file-upload">
47
- <input type="file" class="fs-file-input" id="file-default">
48
- <label for="file-default" class="fs-file-label">Escolher arquivo</label>
49
- </div>
50
- </div>
51
- <div class="fs-form-col">
52
- <span class="fs-form-label fs-form-size-md">Tamanhos</span>
53
- <div class="fs-form-row fs-u-gap-x-2">
54
- <div class="fs-file-upload">
55
- <input type="file" class="fs-file-input" id="file-sm">
56
- <label for="file-sm" class="fs-file-label fs-file-label-sm">Small</label>
57
- </div>
58
- <div class="fs-file-upload">
59
- <input type="file" class="fs-file-input" id="file-lg">
60
- <label for="file-lg" class="fs-file-label fs-file-label-lg">Large</label>
61
- </div>
62
- </div>
63
- </div>
64
- <div class="fs-form-col">
65
- <span class="fs-form-label fs-form-size-md">Desabilitado</span>
66
- <div class="fs-file-upload">
67
- <input type="file" class="fs-file-input" id="file-disabled" disabled>
68
- <label for="file-disabled" class="fs-file-label">Escolher arquivo</label>
69
- </div>
70
- </div>
71
- </div>
72
- </div>
73
-
74
-
75
-
76
- </body>
77
- </html>