@semiont/react-ui 0.2.30 → 0.2.31

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 (225) hide show
  1. package/README.md +34 -1
  2. package/dist/{ar-TQSFB35U.mjs → ar-6QTTYSKD.mjs} +44 -2
  3. package/dist/ar-6QTTYSKD.mjs.map +1 -0
  4. package/dist/{bn-525U24T3.mjs → bn-AHD2VP4T.mjs} +44 -2
  5. package/dist/bn-AHD2VP4T.mjs.map +1 -0
  6. package/dist/{chunk-BHAP6MVA.mjs → chunk-GDEHLKCO.mjs} +44 -2
  7. package/dist/chunk-GDEHLKCO.mjs.map +1 -0
  8. package/dist/{chunk-W6E2UESX.mjs → chunk-WHI4ECK4.mjs} +89 -47
  9. package/dist/chunk-WHI4ECK4.mjs.map +1 -0
  10. package/dist/{cs-OYWTGLFM.mjs → cs-WKZ5PTM3.mjs} +44 -2
  11. package/dist/cs-WKZ5PTM3.mjs.map +1 -0
  12. package/dist/{da-BDXG2ITK.mjs → da-JLWQLEH2.mjs} +44 -2
  13. package/dist/da-JLWQLEH2.mjs.map +1 -0
  14. package/dist/{de-NB5JLMES.mjs → de-TOCT63PC.mjs} +44 -2
  15. package/dist/de-TOCT63PC.mjs.map +1 -0
  16. package/dist/{el-3SVXEAJI.mjs → el-2XXDPBHO.mjs} +44 -2
  17. package/dist/el-2XXDPBHO.mjs.map +1 -0
  18. package/dist/{en-DVB4OE2R.mjs → en-OAKDUA6C.mjs} +10 -2
  19. package/dist/{es-YBOFA3W5.mjs → es-VQZSZSKB.mjs} +44 -2
  20. package/dist/es-VQZSZSKB.mjs.map +1 -0
  21. package/dist/{fa-7MU36AMY.mjs → fa-HFYV6XFA.mjs} +44 -2
  22. package/dist/fa-HFYV6XFA.mjs.map +1 -0
  23. package/dist/{fi-PQKJB32G.mjs → fi-GYTT42QN.mjs} +44 -2
  24. package/dist/fi-GYTT42QN.mjs.map +1 -0
  25. package/dist/{fr-U4HK5GM6.mjs → fr-RBOM5A35.mjs} +44 -2
  26. package/dist/fr-RBOM5A35.mjs.map +1 -0
  27. package/dist/{he-F5MNZHAL.mjs → he-KNB7K2AV.mjs} +44 -2
  28. package/dist/he-KNB7K2AV.mjs.map +1 -0
  29. package/dist/{hi-2PHI37ZX.mjs → hi-QJ6E72XH.mjs} +44 -2
  30. package/dist/hi-QJ6E72XH.mjs.map +1 -0
  31. package/dist/{id-JPRBNCGS.mjs → id-EKQVDHC7.mjs} +44 -2
  32. package/dist/id-EKQVDHC7.mjs.map +1 -0
  33. package/dist/index.d.mts +775 -127
  34. package/dist/index.mjs +8786 -2892
  35. package/dist/index.mjs.map +1 -1
  36. package/dist/{it-MRLWI5OS.mjs → it-43QKJZRF.mjs} +44 -2
  37. package/dist/it-43QKJZRF.mjs.map +1 -0
  38. package/dist/{ja-YQ6RPI2T.mjs → ja-SZUXDDO5.mjs} +44 -2
  39. package/dist/ja-SZUXDDO5.mjs.map +1 -0
  40. package/dist/{ko-DUAVCEXX.mjs → ko-HIR2TG2Q.mjs} +44 -2
  41. package/dist/ko-HIR2TG2Q.mjs.map +1 -0
  42. package/dist/{ms-FBHSR4PG.mjs → ms-6EJXSDHO.mjs} +44 -2
  43. package/dist/ms-6EJXSDHO.mjs.map +1 -0
  44. package/dist/{nl-IC2MPZXN.mjs → nl-AAAXD3KD.mjs} +44 -2
  45. package/dist/nl-AAAXD3KD.mjs.map +1 -0
  46. package/dist/{no-LLD43NRM.mjs → no-CEBS75VU.mjs} +44 -2
  47. package/dist/no-CEBS75VU.mjs.map +1 -0
  48. package/dist/{pl-DDOJBR4D.mjs → pl-SIB6PH3I.mjs} +44 -2
  49. package/dist/pl-SIB6PH3I.mjs.map +1 -0
  50. package/dist/{pt-7TFHQRRN.mjs → pt-6BMNSQTQ.mjs} +44 -2
  51. package/dist/pt-6BMNSQTQ.mjs.map +1 -0
  52. package/dist/{ro-P4PJEGDU.mjs → ro-63CZRSZ7.mjs} +44 -2
  53. package/dist/ro-63CZRSZ7.mjs.map +1 -0
  54. package/dist/{sv-LF3VEQD2.mjs → sv-BRAAQGIC.mjs} +44 -2
  55. package/dist/sv-BRAAQGIC.mjs.map +1 -0
  56. package/dist/test-utils.mjs +2 -2
  57. package/dist/{th-YUQAOFXF.mjs → th-DQEDBNDR.mjs} +44 -2
  58. package/dist/th-DQEDBNDR.mjs.map +1 -0
  59. package/dist/{tr-CSIGLMJC.mjs → tr-IR5MEUEU.mjs} +44 -2
  60. package/dist/tr-IR5MEUEU.mjs.map +1 -0
  61. package/dist/{uk-LW3QBKSR.mjs → uk-BVRTOFAO.mjs} +44 -2
  62. package/dist/uk-BVRTOFAO.mjs.map +1 -0
  63. package/dist/{vi-W464Y6ZC.mjs → vi-QRBKNVJA.mjs} +44 -2
  64. package/dist/vi-QRBKNVJA.mjs.map +1 -0
  65. package/dist/{zh-R5XLM3EI.mjs → zh-VQVBROMT.mjs} +44 -2
  66. package/dist/zh-VQVBROMT.mjs.map +1 -0
  67. package/package.json +44 -6
  68. package/public/favicons/android-chrome-192x192.png +0 -0
  69. package/public/favicons/android-chrome-512x512.png +0 -0
  70. package/public/favicons/apple-touch-icon.png +0 -0
  71. package/public/favicons/favicon-128x128.png +0 -0
  72. package/public/favicons/favicon-16x16.png +0 -0
  73. package/public/favicons/favicon-32x32.png +0 -0
  74. package/public/favicons/favicon-48x48.png +0 -0
  75. package/public/favicons/favicon-64x64.png +0 -0
  76. package/public/favicons/favicon-96x96.png +0 -0
  77. package/public/favicons/favicon.ico +0 -0
  78. package/public/favicons/favicon.svg +47 -0
  79. package/public/favicons/site.webmanifest +19 -0
  80. package/src/examples/ButtonUsageExample.tsx +242 -0
  81. package/src/examples/button-css-modules.module.css +164 -0
  82. package/src/examples/button-styled-components.tsx +215 -0
  83. package/src/examples/button-tailwind.css +51 -0
  84. package/src/integrations/css-modules-helper.tsx +223 -0
  85. package/src/integrations/styled-components-theme.ts +405 -0
  86. package/src/integrations/tailwind-plugin.js +224 -0
  87. package/src/styles/base/reset.css +105 -0
  88. package/src/styles/base/utilities.css +465 -0
  89. package/src/styles/components/annotation-entries.css +138 -0
  90. package/src/styles/components/annotations.css +51 -0
  91. package/src/styles/components/auth.css +309 -0
  92. package/src/styles/components/branding.css +131 -0
  93. package/src/styles/components/cards.css +136 -0
  94. package/src/styles/components/collapsible-resource-navigation.css +161 -0
  95. package/src/styles/components/detection-widget.css +499 -0
  96. package/src/styles/components/footer.css +98 -0
  97. package/src/styles/components/header.css +109 -0
  98. package/src/styles/components/left-sidebar.css +138 -0
  99. package/src/styles/components/modals.css +672 -0
  100. package/src/styles/components/navigation-menu.css +59 -0
  101. package/src/styles/components/navigation-tabs.css +474 -0
  102. package/src/styles/components/panel-sections.css +440 -0
  103. package/src/styles/components/panels-base.css +404 -0
  104. package/src/styles/components/panels.css +100 -0
  105. package/src/styles/components/references.css +430 -0
  106. package/src/styles/components/resize-handle.css +110 -0
  107. package/src/styles/components/search-modal.css +463 -0
  108. package/src/styles/components/skip-links.css +101 -0
  109. package/src/styles/components/status-display.css +409 -0
  110. package/src/styles/components/tables.css +199 -0
  111. package/src/styles/components/toast.css +130 -0
  112. package/src/styles/components/toolbar.css +201 -0
  113. package/src/styles/core/badges.css +209 -0
  114. package/src/styles/core/buttons.css +781 -0
  115. package/src/styles/core/checkboxes.css +92 -0
  116. package/src/styles/core/forms.css +254 -0
  117. package/src/styles/core/index.css +43 -0
  118. package/src/styles/core/indicators.css +225 -0
  119. package/src/styles/core/inputs.css +117 -0
  120. package/src/styles/core/progress.css +170 -0
  121. package/src/styles/core/selects.css +135 -0
  122. package/src/styles/core/sliders.css +236 -0
  123. package/src/styles/core/tags.css +203 -0
  124. package/src/styles/core/textareas.css +134 -0
  125. package/src/styles/core/toggles.css +86 -0
  126. package/src/styles/features/admin.css +293 -0
  127. package/src/styles/features/compose.css +192 -0
  128. package/src/styles/features/devops.css +154 -0
  129. package/src/styles/features/entity-tags.css +140 -0
  130. package/src/styles/features/recent-docs.css +97 -0
  131. package/src/styles/features/resource-discovery.css +387 -0
  132. package/src/styles/features/resource-viewer.css +508 -0
  133. package/src/styles/features/resource.css +506 -0
  134. package/src/styles/features/schemas.css +222 -0
  135. package/src/styles/features/static-pages.css +589 -0
  136. package/src/styles/features/welcome.css +81 -0
  137. package/src/styles/index.css +93 -0
  138. package/src/styles/layout/layout.css +85 -0
  139. package/src/styles/motivations/motivation-assessment.css +234 -0
  140. package/src/styles/motivations/motivation-comment.css +245 -0
  141. package/src/styles/motivations/motivation-highlight.css +195 -0
  142. package/src/styles/motivations/motivation-reference.css +210 -0
  143. package/src/styles/motivations/motivation-tag.css +254 -0
  144. package/src/styles/panels/assessment-panel.css +91 -0
  145. package/src/styles/panels/collaboration-panel.css +222 -0
  146. package/src/styles/panels/comments-panel.css +130 -0
  147. package/src/styles/panels/highlight-panel.css +63 -0
  148. package/src/styles/panels/history-panel.css +301 -0
  149. package/src/styles/panels/jsonld-panel.css +41 -0
  150. package/src/styles/panels/references-panel.css +85 -0
  151. package/src/styles/panels/resource-info-panel.css +230 -0
  152. package/src/styles/panels/settings-panel.css +58 -0
  153. package/src/styles/panels/statistics-panel.css +147 -0
  154. package/src/styles/panels/tagging-panel.css +59 -0
  155. package/src/styles/panels/unified-annotations-panel.css +133 -0
  156. package/src/styles/panels/user-panel.css +24 -0
  157. package/src/styles/patterns/errors.css +24 -0
  158. package/src/styles/patterns/loading.css +26 -0
  159. package/src/styles/utilities/contrast.css +443 -0
  160. package/src/styles/utilities/focus-extended.css +539 -0
  161. package/src/styles/utilities/focus.css +108 -0
  162. package/src/styles/utilities/motion-overrides.css +378 -0
  163. package/src/styles/utilities/motion.css +370 -0
  164. package/src/styles/utilities/semantic-indicators.css +321 -0
  165. package/src/styles/variables.css +354 -0
  166. package/translations/ar.json +35 -1
  167. package/translations/bn.json +35 -1
  168. package/translations/cs.json +35 -1
  169. package/translations/da.json +35 -1
  170. package/translations/de.json +35 -1
  171. package/translations/el.json +35 -1
  172. package/translations/en.json +35 -1
  173. package/translations/es.json +35 -1
  174. package/translations/fa.json +35 -1
  175. package/translations/fi.json +35 -1
  176. package/translations/fr.json +35 -1
  177. package/translations/he.json +35 -1
  178. package/translations/hi.json +35 -1
  179. package/translations/id.json +35 -1
  180. package/translations/it.json +35 -1
  181. package/translations/ja.json +35 -1
  182. package/translations/ko.json +35 -1
  183. package/translations/ms.json +35 -1
  184. package/translations/nl.json +35 -1
  185. package/translations/no.json +35 -1
  186. package/translations/pl.json +35 -1
  187. package/translations/pt.json +35 -1
  188. package/translations/ro.json +35 -1
  189. package/translations/sv.json +35 -1
  190. package/translations/th.json +35 -1
  191. package/translations/tr.json +35 -1
  192. package/translations/uk.json +35 -1
  193. package/translations/vi.json +35 -1
  194. package/translations/zh.json +35 -1
  195. package/dist/ar-TQSFB35U.mjs.map +0 -1
  196. package/dist/bn-525U24T3.mjs.map +0 -1
  197. package/dist/chunk-BHAP6MVA.mjs.map +0 -1
  198. package/dist/chunk-W6E2UESX.mjs.map +0 -1
  199. package/dist/cs-OYWTGLFM.mjs.map +0 -1
  200. package/dist/da-BDXG2ITK.mjs.map +0 -1
  201. package/dist/de-NB5JLMES.mjs.map +0 -1
  202. package/dist/el-3SVXEAJI.mjs.map +0 -1
  203. package/dist/es-YBOFA3W5.mjs.map +0 -1
  204. package/dist/fa-7MU36AMY.mjs.map +0 -1
  205. package/dist/fi-PQKJB32G.mjs.map +0 -1
  206. package/dist/fr-U4HK5GM6.mjs.map +0 -1
  207. package/dist/he-F5MNZHAL.mjs.map +0 -1
  208. package/dist/hi-2PHI37ZX.mjs.map +0 -1
  209. package/dist/id-JPRBNCGS.mjs.map +0 -1
  210. package/dist/it-MRLWI5OS.mjs.map +0 -1
  211. package/dist/ja-YQ6RPI2T.mjs.map +0 -1
  212. package/dist/ko-DUAVCEXX.mjs.map +0 -1
  213. package/dist/ms-FBHSR4PG.mjs.map +0 -1
  214. package/dist/nl-IC2MPZXN.mjs.map +0 -1
  215. package/dist/no-LLD43NRM.mjs.map +0 -1
  216. package/dist/pl-DDOJBR4D.mjs.map +0 -1
  217. package/dist/pt-7TFHQRRN.mjs.map +0 -1
  218. package/dist/ro-P4PJEGDU.mjs.map +0 -1
  219. package/dist/sv-LF3VEQD2.mjs.map +0 -1
  220. package/dist/th-YUQAOFXF.mjs.map +0 -1
  221. package/dist/tr-CSIGLMJC.mjs.map +0 -1
  222. package/dist/uk-LW3QBKSR.mjs.map +0 -1
  223. package/dist/vi-W464Y6ZC.mjs.map +0 -1
  224. package/dist/zh-R5XLM3EI.mjs.map +0 -1
  225. /package/dist/{en-DVB4OE2R.mjs.map → en-OAKDUA6C.mjs.map} +0 -0
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Extended Focus Styles
3
+ *
4
+ * Additional focus indicators for specific component variants and states
5
+ * that extend beyond the base focus utilities.
6
+ */
7
+
8
+ /* ========================================
9
+ Action Button Variants
10
+ ======================================== */
11
+
12
+ .semiont-action-button--info:focus-visible,
13
+ .semiont-action-button--warning:focus-visible,
14
+ .semiont-action-button--danger:focus-visible {
15
+ outline: 2px solid var(--semiont-color-primary-500);
16
+ outline-offset: 2px;
17
+ border-radius: 2px;
18
+ }
19
+
20
+ [data-theme="dark"] .semiont-action-button--info:focus-visible,
21
+ [data-theme="dark"] .semiont-action-button--warning:focus-visible,
22
+ [data-theme="dark"] .semiont-action-button--danger:focus-visible {
23
+ outline-color: var(--semiont-color-primary-400);
24
+ }
25
+
26
+ .semiont-action-button--info:focus:not(:focus-visible),
27
+ .semiont-action-button--warning:focus:not(:focus-visible),
28
+ .semiont-action-button--danger:focus:not(:focus-visible) {
29
+ outline: none;
30
+ }
31
+
32
+ /* ========================================
33
+ Button Variants and States
34
+ ======================================== */
35
+
36
+ .semiont-button:focus-visible,
37
+ .semiont-button[data-variant="primary"]:focus-visible,
38
+ .semiont-button[data-variant="secondary"]:focus-visible,
39
+ .semiont-button[data-variant="tertiary"]:focus-visible,
40
+ .semiont-button[data-variant="danger"]:focus-visible,
41
+ .semiont-button[data-variant="warning"]:focus-visible,
42
+ .semiont-button[data-variant="ghost"]:focus-visible,
43
+ .semiont-button[data-size="xs"]:focus-visible,
44
+ .semiont-button[data-size="sm"]:focus-visible,
45
+ .semiont-button[data-size="md"]:focus-visible,
46
+ .semiont-button[data-size="lg"]:focus-visible,
47
+ .semiont-button[data-size="xl"]:focus-visible,
48
+ .semiont-button[data-icon-only="true"]:focus-visible,
49
+ .semiont-button[data-full-width="true"]:focus-visible,
50
+ .semiont-button--flex:focus-visible,
51
+ .semiont-button--full-width:focus-visible,
52
+ .semiont-button--gradient:focus-visible,
53
+ .semiont-button-icon:focus-visible,
54
+ .semiont-button-icon-left:focus-visible,
55
+ .semiont-button-icon-right:focus-visible {
56
+ outline: 2px solid var(--semiont-color-primary-500);
57
+ outline-offset: 2px;
58
+ position: relative;
59
+ z-index: 1;
60
+ }
61
+
62
+ [data-theme="dark"] .semiont-button:focus-visible,
63
+ [data-theme="dark"] .semiont-button[data-variant="primary"]:focus-visible,
64
+ [data-theme="dark"] .semiont-button[data-variant="secondary"]:focus-visible,
65
+ [data-theme="dark"] .semiont-button[data-variant="tertiary"]:focus-visible,
66
+ [data-theme="dark"] .semiont-button[data-variant="danger"]:focus-visible,
67
+ [data-theme="dark"] .semiont-button[data-variant="warning"]:focus-visible,
68
+ [data-theme="dark"] .semiont-button[data-variant="ghost"]:focus-visible,
69
+ [data-theme="dark"] .semiont-button--gradient:focus-visible {
70
+ outline-color: var(--semiont-color-primary-400);
71
+ }
72
+
73
+ .semiont-button:focus:not(:focus-visible),
74
+ .semiont-button[data-variant="primary"]:focus:not(:focus-visible),
75
+ .semiont-button[data-variant="secondary"]:focus:not(:focus-visible),
76
+ .semiont-button[data-variant="tertiary"]:focus:not(:focus-visible),
77
+ .semiont-button[data-variant="danger"]:focus:not(:focus-visible),
78
+ .semiont-button[data-variant="warning"]:focus:not(:focus-visible),
79
+ .semiont-button[data-variant="ghost"]:focus:not(:focus-visible),
80
+ .semiont-button[data-size="sm"]:focus:not(:focus-visible),
81
+ .semiont-button[data-size="md"]:focus:not(:focus-visible),
82
+ .semiont-button[data-size="lg"]:focus:not(:focus-visible),
83
+ .semiont-button[data-full-width="true"]:focus:not(:focus-visible),
84
+ .semiont-button[data-icon-only="true"]:focus:not(:focus-visible),
85
+ .semiont-button--full-width:focus:not(:focus-visible),
86
+ .semiont-button--flex:focus:not(:focus-visible),
87
+ .semiont-button--gradient:focus:not(:focus-visible),
88
+ .semiont-button-icon:focus:not(:focus-visible),
89
+ .semiont-button-icon-left:focus:not(:focus-visible),
90
+ .semiont-button-icon-right:focus:not(:focus-visible) {
91
+ outline: none;
92
+ }
93
+
94
+ /* ========================================
95
+ Panel Components
96
+ ======================================== */
97
+
98
+ .semiont-panel-button:focus-visible,
99
+ .semiont-panel-button-active:focus-visible,
100
+ .semiont-panel-button-full:focus-visible,
101
+ .semiont-panel-button-flex:focus-visible {
102
+ outline: 2px solid var(--semiont-color-primary-500);
103
+ outline-offset: 2px;
104
+ position: relative;
105
+ z-index: 1;
106
+ }
107
+
108
+ [data-theme="dark"] .semiont-panel-button:focus-visible,
109
+ [data-theme="dark"] .semiont-panel-button-active:focus-visible {
110
+ outline-color: var(--semiont-color-primary-400);
111
+ }
112
+
113
+ .semiont-panel-button:focus:not(:focus-visible),
114
+ .semiont-panel-button-active:focus:not(:focus-visible),
115
+ .semiont-panel-button-full:focus:not(:focus-visible),
116
+ .semiont-panel-button-flex:focus:not(:focus-visible) {
117
+ outline: none;
118
+ }
119
+
120
+ /* Panel Inputs */
121
+ .semiont-comments-panel__input:focus-visible,
122
+ .semiont-comments-panel__input-area:focus-visible,
123
+ .semiont-highlight-panel__color--selected:focus-visible,
124
+ .semiont-tagging-panel__input:focus-visible,
125
+ .semiont-assessment-panel__textarea:focus-visible {
126
+ outline: 2px solid var(--semiont-color-primary-500);
127
+ outline-offset: -1px;
128
+ border-color: var(--semiont-color-primary-500);
129
+ }
130
+
131
+ [data-theme="dark"] .semiont-comments-panel__input:focus-visible,
132
+ [data-theme="dark"] .semiont-comments-panel__input-area:focus-visible,
133
+ [data-theme="dark"] .semiont-highlight-panel__color--selected:focus-visible,
134
+ [data-theme="dark"] .semiont-tagging-panel__input:focus-visible,
135
+ [data-theme="dark"] .semiont-assessment-panel__textarea:focus-visible {
136
+ outline-color: var(--semiont-color-primary-400);
137
+ border-color: var(--semiont-color-primary-400);
138
+ }
139
+
140
+ .semiont-comments-panel__input:focus:not(:focus-visible),
141
+ .semiont-comments-panel__input-area:focus:not(:focus-visible),
142
+ .semiont-highlight-panel__color--selected:focus:not(:focus-visible),
143
+ .semiont-tagging-panel__input:focus:not(:focus-visible),
144
+ .semiont-assessment-panel__textarea:focus:not(:focus-visible) {
145
+ outline: none;
146
+ }
147
+
148
+ /* ========================================
149
+ Navigation Components
150
+ ======================================== */
151
+
152
+ .semiont-nav-link--active:focus-visible {
153
+ outline: 2px solid var(--semiont-color-primary-500);
154
+ outline-offset: 2px;
155
+ }
156
+
157
+ [data-theme="dark"] .semiont-nav-link--active:focus-visible {
158
+ outline-color: var(--semiont-color-primary-400);
159
+ }
160
+
161
+ .semiont-nav-link--active:focus:not(:focus-visible) {
162
+ outline: none;
163
+ }
164
+
165
+ /* ========================================
166
+ Chip Components
167
+ ======================================== */
168
+
169
+ .semiont-chip--selectable[data-selected="false"]:focus-visible,
170
+ .semiont-chip--selectable[data-selected="true"]:focus-visible,
171
+ .semiont-chip--selected:focus-visible,
172
+ .semiont-chip[data-selected="true"]:focus-visible,
173
+ .semiont-chip[data-selected="false"]:focus-visible {
174
+ outline: 2px solid var(--semiont-color-primary-500);
175
+ outline-offset: 2px;
176
+ }
177
+
178
+ [data-theme="dark"] .semiont-chip--selectable[data-selected="false"]:focus-visible,
179
+ [data-theme="dark"] .semiont-chip--selectable[data-selected="true"]:focus-visible,
180
+ [data-theme="dark"] .semiont-chip--selected:focus-visible,
181
+ [data-theme="dark"] .semiont-chip[data-selected="true"]:focus-visible,
182
+ [data-theme="dark"] .semiont-chip[data-selected="false"]:focus-visible {
183
+ outline-color: var(--semiont-color-primary-400);
184
+ }
185
+
186
+ /* ========================================
187
+ Form Components
188
+ ======================================== */
189
+
190
+ /* Base form inputs */
191
+ input:focus-visible,
192
+ textarea:focus-visible,
193
+ select:focus-visible,
194
+ input[type="number"]:focus-visible {
195
+ outline: 2px solid var(--semiont-color-primary-500);
196
+ outline-offset: -1px;
197
+ border-color: var(--semiont-color-primary-500);
198
+ }
199
+
200
+ [data-theme="dark"] input:focus-visible,
201
+ [data-theme="dark"] textarea:focus-visible,
202
+ [data-theme="dark"] select:focus-visible {
203
+ outline-color: var(--semiont-color-primary-400);
204
+ border-color: var(--semiont-color-primary-400);
205
+ }
206
+
207
+ input:focus:not(:focus-visible),
208
+ textarea:focus:not(:focus-visible),
209
+ select:focus:not(:focus-visible) {
210
+ outline: none;
211
+ }
212
+
213
+ /* Specific form inputs */
214
+ .semiont-form__upload-input:focus-visible,
215
+ .semiont-language-select:focus-visible,
216
+ .semiont-card__search-input:focus-visible {
217
+ outline: 2px solid var(--semiont-color-primary-500);
218
+ outline-offset: -1px;
219
+ border-color: var(--semiont-color-primary-500);
220
+ }
221
+
222
+ [data-theme="dark"] .semiont-form__upload-input:focus-visible,
223
+ [data-theme="dark"] .semiont-language-select:focus-visible,
224
+ [data-theme="dark"] .semiont-card__search-input:focus-visible {
225
+ outline-color: var(--semiont-color-primary-400);
226
+ border-color: var(--semiont-color-primary-400);
227
+ }
228
+
229
+ .semiont-form__upload-input:focus:not(:focus-visible),
230
+ .semiont-language-select:focus:not(:focus-visible),
231
+ .semiont-card__search-input:focus:not(:focus-visible) {
232
+ outline: none;
233
+ }
234
+
235
+ /* Language select options */
236
+ .semiont-language-select option:focus-visible {
237
+ outline: 2px solid var(--semiont-color-primary-500);
238
+ outline-offset: -1px;
239
+ }
240
+
241
+ [data-theme="dark"] .semiont-language-select option:focus-visible {
242
+ outline-color: var(--semiont-color-primary-400);
243
+ }
244
+
245
+ /* Entity type button (selected state) */
246
+ .semiont-form__entity-type-button[data-selected="true"]:focus-visible {
247
+ outline: 2px solid var(--semiont-color-white);
248
+ outline-offset: 2px;
249
+ box-shadow: 0 0 0 4px var(--semiont-color-primary-700);
250
+ }
251
+
252
+ [data-theme="dark"] .semiont-form__entity-type-button[data-selected="true"]:focus-visible {
253
+ outline-color: var(--semiont-color-white);
254
+ box-shadow: 0 0 0 4px var(--semiont-color-primary-400);
255
+ }
256
+
257
+ /* ========================================
258
+ Modal Components
259
+ ======================================== */
260
+
261
+ .semiont-modal__selection:focus-visible,
262
+ .semiont-modal__selection-label:focus-visible,
263
+ .semiont-modal__close-button:focus-visible {
264
+ outline: 2px solid var(--semiont-color-primary-500);
265
+ outline-offset: 2px;
266
+ position: relative;
267
+ z-index: 1;
268
+ }
269
+
270
+ [data-theme="dark"] .semiont-modal__selection-label:focus-visible,
271
+ [data-theme="dark"] .semiont-modal__close-button:focus-visible {
272
+ outline-color: var(--semiont-color-primary-400);
273
+ }
274
+
275
+ .semiont-modal__selection:focus:not(:focus-visible),
276
+ .semiont-modal__selection-label:focus:not(:focus-visible),
277
+ .semiont-modal__close-button:focus:not(:focus-visible) {
278
+ outline: none;
279
+ }
280
+
281
+ /* ========================================
282
+ Resource & Reference Components
283
+ ======================================== */
284
+
285
+ .semiont-reference-button:focus-visible,
286
+ .semiont-reference-button--full:focus-visible,
287
+ .semiont-reference-button--flex:focus-visible,
288
+ .semiont-resource-button:focus-visible,
289
+ .semiont-resource-button--secondary:focus-visible,
290
+ .semiont-resource-button--archive:focus-visible {
291
+ outline: 2px solid var(--semiont-color-primary-500);
292
+ outline-offset: 2px;
293
+ position: relative;
294
+ z-index: 1;
295
+ }
296
+
297
+ [data-theme="dark"] .semiont-resource-button--secondary:focus-visible,
298
+ [data-theme="dark"] .semiont-resource-button--archive:focus-visible {
299
+ outline-color: var(--semiont-color-primary-400);
300
+ }
301
+
302
+ .semiont-reference-button:focus:not(:focus-visible),
303
+ .semiont-reference-button--full:focus:not(:focus-visible),
304
+ .semiont-reference-button--flex:focus:not(:focus-visible),
305
+ .semiont-resource-button:focus:not(:focus-visible),
306
+ .semiont-resource-button--secondary:focus:not(:focus-visible),
307
+ .semiont-resource-button--archive:focus:not(:focus-visible) {
308
+ outline: none;
309
+ }
310
+
311
+ /* ========================================
312
+ Toolbar Components
313
+ ======================================== */
314
+
315
+ .semiont-toolbar-button:focus-visible,
316
+ .semiont-toolbar-menu-button:focus-visible,
317
+ .semiont-toolbar-menu-button[data-selected="false"]:focus-visible,
318
+ .semiont-toolbar-menu-button[data-selected="true"]:focus-visible,
319
+ .semiont-toolbar-menu-button[data-delete="true"]:focus-visible,
320
+ .semiont-toolbar-menu-button[data-delete="true"][data-selected="false"]:focus-visible,
321
+ .semiont-toolbar-menu-button[data-delete="true"][data-selected="true"]:focus-visible {
322
+ outline: 2px solid var(--semiont-color-primary-500);
323
+ outline-offset: 2px;
324
+ position: relative;
325
+ z-index: 1;
326
+ }
327
+
328
+ [data-theme="dark"] .semiont-toolbar-button:focus-visible,
329
+ [data-theme="dark"] .semiont-toolbar-menu-button:focus-visible,
330
+ [data-theme="dark"] .semiont-toolbar-menu-button[data-selected="false"]:focus-visible,
331
+ [data-theme="dark"] .semiont-toolbar-menu-button[data-selected="true"]:focus-visible,
332
+ [data-theme="dark"] .semiont-toolbar-menu-button[data-delete="true"]:focus-visible,
333
+ [data-theme="dark"] .semiont-toolbar-menu-button[data-delete="true"][data-selected="false"]:focus-visible,
334
+ [data-theme="dark"] .semiont-toolbar-menu-button[data-delete="true"][data-selected="true"]:focus-visible {
335
+ outline-color: var(--semiont-color-primary-400);
336
+ }
337
+
338
+ .semiont-toolbar-button:focus:not(:focus-visible),
339
+ .semiont-toolbar-menu-button:focus:not(:focus-visible),
340
+ .semiont-toolbar-menu-button[data-selected="true"]:focus:not(:focus-visible),
341
+ .semiont-toolbar-menu-button[data-delete="true"]:focus:not(:focus-visible),
342
+ .semiont-toolbar-menu-button[data-selected="false"]:focus:not(:focus-visible),
343
+ .semiont-toolbar-menu-button[data-delete="true"][data-selected="false"]:focus:not(:focus-visible),
344
+ .semiont-toolbar-menu-button[data-delete="true"][data-selected="true"]:focus:not(:focus-visible) {
345
+ outline: none;
346
+ }
347
+
348
+ /* ========================================
349
+ Detection Components
350
+ ======================================== */
351
+
352
+ .semiont-detect-button:focus-visible,
353
+ .semiont-detect-button[data-type="primary"]:focus-visible,
354
+ .semiont-detect-button[data-type="secondary"]:focus-visible,
355
+ .semiont-detect-button[data-type="url"]:focus-visible,
356
+ .semiont-detect-button[data-type="file"]:focus-visible,
357
+ .semiont-detect-widget__button--gradient:focus-visible,
358
+ .semiont-detect-widget__button-icon:focus-visible {
359
+ outline: 2px solid var(--semiont-color-primary-500);
360
+ outline-offset: 2px;
361
+ position: relative;
362
+ z-index: 1;
363
+ }
364
+
365
+ [data-theme="dark"] .semiont-detect-button:focus-visible,
366
+ [data-theme="dark"] .semiont-detect-button[data-type="primary"]:focus-visible,
367
+ [data-theme="dark"] .semiont-detect-button[data-type="secondary"]:focus-visible,
368
+ [data-theme="dark"] .semiont-detect-button[data-type="url"]:focus-visible,
369
+ [data-theme="dark"] .semiont-detect-button[data-type="file"]:focus-visible,
370
+ [data-theme="dark"] .semiont-detect-widget__button--gradient:focus-visible {
371
+ outline-color: var(--semiont-color-primary-400);
372
+ }
373
+
374
+ .semiont-detect-button:focus:not(:focus-visible),
375
+ .semiont-detect-button[data-type="primary"]:focus:not(:focus-visible),
376
+ .semiont-detect-button[data-type="secondary"]:focus:not(:focus-visible),
377
+ .semiont-detect-button[data-type="url"]:focus:not(:focus-visible),
378
+ .semiont-detect-button[data-type="file"]:focus:not(:focus-visible),
379
+ .semiont-detect-widget__button--gradient:focus:not(:focus-visible),
380
+ .semiont-detect-widget__button-icon:focus:not(:focus-visible) {
381
+ outline: none;
382
+ }
383
+
384
+ /* ========================================
385
+ Miscellaneous Components
386
+ ======================================== */
387
+
388
+ /* Provider Items */
389
+ .semiont-provider-item:focus-visible,
390
+ .semiont-provider-item[data-selected="true"]:focus-visible {
391
+ outline: 2px solid var(--semiont-color-primary-500);
392
+ outline-offset: 2px;
393
+ }
394
+
395
+ [data-theme="dark"] .semiont-provider-item:focus-visible,
396
+ [data-theme="dark"] .semiont-provider-item[data-selected="true"]:focus-visible {
397
+ outline-color: var(--semiont-color-primary-400);
398
+ }
399
+
400
+ .semiont-provider-item:focus:not(:focus-visible),
401
+ .semiont-provider-item[data-selected="true"]:focus:not(:focus-visible) {
402
+ outline: none;
403
+ }
404
+
405
+ /* Selection Indicator */
406
+ .semiont-selection-indicator:focus-visible {
407
+ outline: 2px solid var(--semiont-color-amber-500);
408
+ outline-offset: 2px;
409
+ position: relative;
410
+ z-index: 1;
411
+ }
412
+
413
+ [data-theme="dark"] .semiont-selection-indicator:focus-visible {
414
+ outline-color: var(--semiont-color-amber-400);
415
+ }
416
+
417
+ .semiont-selection-indicator:focus:not(:focus-visible) {
418
+ outline: none;
419
+ }
420
+
421
+ /* Signout button */
422
+ .semiont-signout-button:focus-visible {
423
+ outline: 2px solid var(--semiont-color-primary-500);
424
+ outline-offset: 2px;
425
+ position: relative;
426
+ z-index: 1;
427
+ }
428
+
429
+ [data-theme="dark"] .semiont-signout-button:focus-visible {
430
+ outline-color: var(--semiont-color-primary-400);
431
+ }
432
+
433
+ .semiont-signout-button:focus:not(:focus-visible) {
434
+ outline: none;
435
+ }
436
+
437
+ /* Skip links (always visible on focus) */
438
+ .semiont-skip-link:focus,
439
+ .semiont-skip-link-first:focus-visible,
440
+ .semiont-skip-link-last:focus-visible {
441
+ outline: 2px solid var(--semiont-color-primary-500);
442
+ outline-offset: 2px;
443
+ position: relative;
444
+ z-index: 1000;
445
+ }
446
+
447
+ [data-theme="dark"] .semiont-skip-link:focus,
448
+ [data-theme="dark"] .semiont-skip-link-first:focus-visible,
449
+ [data-theme="dark"] .semiont-skip-link-last:focus-visible {
450
+ outline-color: var(--semiont-color-primary-400);
451
+ }
452
+
453
+ /* ========================================
454
+ Table Components (when interactive)
455
+ ======================================== */
456
+
457
+ /* Note: Tables are not usually interactive, only apply focus when tabindex is present */
458
+ .semiont-table-container[tabindex]:focus-visible,
459
+ .semiont-table[tabindex]:focus-visible,
460
+ .semiont-table__head[tabindex]:focus-visible,
461
+ .semiont-table__header[tabindex]:focus-visible,
462
+ .semiont-table__header--actions[tabindex]:focus-visible,
463
+ .semiont-table__body[tabindex]:focus-visible,
464
+ .semiont-table__row[tabindex]:focus-visible,
465
+ .semiont-table__cell[tabindex]:focus-visible,
466
+ .semiont-table__cell--actions[tabindex]:focus-visible,
467
+ .semiont-table__actions[tabindex]:focus-visible {
468
+ outline: 2px solid var(--semiont-color-primary-500);
469
+ outline-offset: 2px;
470
+ position: relative;
471
+ z-index: 1;
472
+ }
473
+
474
+ [data-theme="dark"] .semiont-table__head[tabindex]:focus-visible,
475
+ [data-theme="dark"] .semiont-table__header[tabindex]:focus-visible,
476
+ [data-theme="dark"] .semiont-table__body[tabindex]:focus-visible,
477
+ [data-theme="dark"] .semiont-table__row[tabindex]:focus-visible {
478
+ outline-color: var(--semiont-color-primary-400);
479
+ }
480
+
481
+ .semiont-table-container[tabindex]:focus:not(:focus-visible),
482
+ .semiont-table[tabindex]:focus:not(:focus-visible),
483
+ .semiont-table__head[tabindex]:focus:not(:focus-visible),
484
+ .semiont-table__header[tabindex]:focus:not(:focus-visible),
485
+ .semiont-table__header--actions[tabindex]:focus:not(:focus-visible),
486
+ .semiont-table__body[tabindex]:focus:not(:focus-visible),
487
+ .semiont-table__row[tabindex]:focus:not(:focus-visible),
488
+ .semiont-table__cell[tabindex]:focus:not(:focus-visible),
489
+ .semiont-table__cell--actions[tabindex]:focus:not(:focus-visible),
490
+ .semiont-table__actions[tabindex]:focus:not(:focus-visible) {
491
+ outline: none;
492
+ }
493
+
494
+ /* ========================================
495
+ High Contrast Mode Support
496
+ ======================================== */
497
+
498
+ @media (prefers-contrast: more) {
499
+ /* All interactive elements get stronger focus indicators in high contrast mode */
500
+ .semiont-action-button--info:focus-visible,
501
+ .semiont-action-button--warning:focus-visible,
502
+ .semiont-action-button--danger:focus-visible,
503
+ .semiont-button:focus-visible,
504
+ .semiont-button[data-variant]:focus-visible,
505
+ .semiont-button[data-size]:focus-visible,
506
+ .semiont-button[data-icon-only]:focus-visible,
507
+ .semiont-button[data-full-width]:focus-visible,
508
+ .semiont-button--gradient:focus-visible,
509
+ .semiont-panel-button:focus-visible,
510
+ .semiont-panel-button-active:focus-visible,
511
+ .semiont-panel-button-flex:focus-visible,
512
+ .semiont-nav-link--active:focus-visible,
513
+ .semiont-chip--selectable:focus-visible,
514
+ .semiont-chip--selected:focus-visible,
515
+ .semiont-chip[data-selected]:focus-visible,
516
+ .semiont-detect-button:focus-visible,
517
+ .semiont-detect-widget__button--gradient:focus-visible,
518
+ .semiont-toolbar-button:focus-visible,
519
+ .semiont-toolbar-menu-button:focus-visible,
520
+ .semiont-provider-item:focus-visible,
521
+ .semiont-modal__selection:focus-visible,
522
+ .semiont-modal__close-button:focus-visible,
523
+ .semiont-reference-button:focus-visible,
524
+ .semiont-resource-button:focus-visible,
525
+ .semiont-signout-button:focus-visible,
526
+ .semiont-skip-link:focus,
527
+ input:focus-visible,
528
+ textarea:focus-visible,
529
+ select:focus-visible {
530
+ outline-width: 3px;
531
+ outline-color: currentColor;
532
+ }
533
+ }
534
+
535
+ /* Ensure proper layering for all focus indicators */
536
+ *:focus-visible {
537
+ position: relative;
538
+ z-index: 1;
539
+ }
@@ -0,0 +1,108 @@
1
+ /* Focus Utilities - WCAG 2.1 AA Compliant */
2
+ /* Provides consistent focus indicators for keyboard navigation */
3
+
4
+ /* Base focus visible styles for all interactive elements */
5
+ .semiont-focus-visible:focus-visible {
6
+ outline: 2px solid var(--semiont-color-primary-500);
7
+ outline-offset: 2px;
8
+ position: relative;
9
+ z-index: 1;
10
+ }
11
+
12
+ /* Inset variant for contained elements */
13
+ .semiont-focus-visible--inset:focus-visible {
14
+ outline-offset: -2px;
15
+ }
16
+
17
+ /* Subtle variant for less prominent elements */
18
+ .semiont-focus-visible--subtle:focus-visible {
19
+ outline: 1px solid var(--semiont-color-primary-400);
20
+ outline-offset: 1px;
21
+ }
22
+
23
+ /* Dark theme adjustments */
24
+ [data-theme="dark"] .semiont-focus-visible:focus-visible {
25
+ outline-color: var(--semiont-color-primary-400);
26
+ }
27
+
28
+ [data-theme="dark"] .semiont-focus-visible--subtle:focus-visible {
29
+ outline-color: var(--semiont-color-primary-300);
30
+ }
31
+
32
+ /* High contrast mode support */
33
+ @media (prefers-contrast: more) {
34
+ .semiont-focus-visible:focus-visible {
35
+ outline-width: 3px;
36
+ outline-color: currentColor;
37
+ }
38
+
39
+ .semiont-focus-visible--subtle:focus-visible {
40
+ outline-width: 2px;
41
+ outline-color: currentColor;
42
+ }
43
+ }
44
+
45
+ /* Remove default focus for mouse users, keep for keyboard */
46
+ .semiont-focus-visible:focus:not(:focus-visible) {
47
+ outline: none;
48
+ }
49
+
50
+ /* Global interactive element focus styles */
51
+ /* These apply to all standard interactive elements */
52
+ button:focus-visible,
53
+ a:focus-visible,
54
+ input:focus-visible,
55
+ textarea:focus-visible,
56
+ select:focus-visible,
57
+ [role="button"]:focus-visible,
58
+ [role="link"]:focus-visible,
59
+ [tabindex]:focus-visible {
60
+ outline: 2px solid var(--semiont-color-primary-500);
61
+ outline-offset: 2px;
62
+ }
63
+
64
+ [data-theme="dark"] button:focus-visible,
65
+ [data-theme="dark"] a:focus-visible,
66
+ [data-theme="dark"] input:focus-visible,
67
+ [data-theme="dark"] textarea:focus-visible,
68
+ [data-theme="dark"] select:focus-visible,
69
+ [data-theme="dark"] [role="button"]:focus-visible,
70
+ [data-theme="dark"] [role="link"]:focus-visible,
71
+ [data-theme="dark"] [tabindex]:focus-visible {
72
+ outline-color: var(--semiont-color-primary-400);
73
+ }
74
+
75
+ /* Form fields need special handling */
76
+ input:focus-visible,
77
+ textarea:focus-visible,
78
+ select:focus-visible {
79
+ outline-offset: -1px;
80
+ border-color: var(--semiont-color-primary-500);
81
+ }
82
+
83
+ [data-theme="dark"] input:focus-visible,
84
+ [data-theme="dark"] textarea:focus-visible,
85
+ [data-theme="dark"] select:focus-visible {
86
+ border-color: var(--semiont-color-primary-400);
87
+ }
88
+
89
+ /* Skip link for keyboard navigation */
90
+ .semiont-skip-link {
91
+ position: absolute;
92
+ top: -40px;
93
+ left: 0;
94
+ background: var(--semiont-bg-primary);
95
+ color: var(--semiont-text-primary);
96
+ padding: 8px;
97
+ text-decoration: none;
98
+ z-index: 100;
99
+ }
100
+
101
+ [data-theme="dark"] .semiont-skip-link {
102
+ background: var(--semiont-color-gray-800);
103
+ color: var(--semiont-color-gray-100);
104
+ }
105
+
106
+ .semiont-skip-link:focus {
107
+ top: 0;
108
+ }