optikos 0.3.0 → 0.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.
Files changed (432) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/dist/bind.js +1 -1
  3. package/dist/bind.js.map +4 -4
  4. package/dist/{chunk-5JEXM5S7.js → chunk-2GKIF7A6.js} +2 -2
  5. package/dist/chunk-2HNQ2XRY.js +2 -0
  6. package/dist/chunk-2HNQ2XRY.js.map +7 -0
  7. package/dist/chunk-2QMI2RRB.js +2 -0
  8. package/dist/chunk-2QMI2RRB.js.map +7 -0
  9. package/dist/{chunk-W3H7GTJY.js → chunk-2YRQULDC.js} +2 -2
  10. package/dist/{chunk-ZPPELYNJ.js → chunk-3BG75P7T.js} +2 -2
  11. package/dist/{chunk-GNU4VOOE.js → chunk-3F4MN2BU.js} +2 -2
  12. package/dist/chunk-3FCIZKIN.js +2 -0
  13. package/dist/chunk-3FCIZKIN.js.map +7 -0
  14. package/dist/{chunk-5DJTP53N.js → chunk-3FK52VQX.js} +2 -2
  15. package/dist/chunk-3QRA3XOA.js +2 -0
  16. package/dist/chunk-3QRA3XOA.js.map +7 -0
  17. package/dist/chunk-3TCITFUU.js +2 -0
  18. package/dist/chunk-3TCITFUU.js.map +7 -0
  19. package/dist/chunk-3VDLX7ET.js +2 -0
  20. package/dist/chunk-3VDLX7ET.js.map +7 -0
  21. package/dist/{chunk-3TAW4AKH.js → chunk-4AZ44KV4.js} +2 -2
  22. package/dist/{chunk-TZOQWCVH.js → chunk-4CWYF4O7.js} +2 -2
  23. package/dist/{chunk-REW4LR46.js → chunk-4OB2IM5L.js} +2 -2
  24. package/dist/{chunk-2YZB6XQR.js → chunk-4S3HRFQB.js} +2 -2
  25. package/dist/chunk-5BMG5ZBY.js +2 -0
  26. package/dist/{chunk-KLLAY2IM.js.map → chunk-5BMG5ZBY.js.map} +2 -2
  27. package/dist/chunk-5PWPAN62.js +2 -0
  28. package/dist/chunk-5PWPAN62.js.map +7 -0
  29. package/dist/chunk-5PYJ6FJK.js +2 -0
  30. package/dist/chunk-5PYJ6FJK.js.map +7 -0
  31. package/dist/{chunk-OGRFQTXA.js → chunk-643FOYQB.js} +2 -2
  32. package/dist/{chunk-JOFQJGZK.js → chunk-6BOM5KZR.js} +2 -2
  33. package/dist/chunk-6LJK4QWF.js +2 -0
  34. package/dist/chunk-6LJK4QWF.js.map +7 -0
  35. package/dist/{chunk-JK74QK3M.js → chunk-6PZPBPAD.js} +2 -2
  36. package/dist/chunk-7Y2GHQRB.js +2 -0
  37. package/dist/{chunk-YHEMA56R.js → chunk-AQ3RTHG5.js} +2 -2
  38. package/dist/{chunk-M242VYZA.js → chunk-AT7VFZRB.js} +2 -2
  39. package/dist/{chunk-ZVK4L5GK.js → chunk-BCVOUMJJ.js} +2 -2
  40. package/dist/{chunk-HOF4JGMQ.js → chunk-BIGL3ZVD.js} +2 -2
  41. package/dist/chunk-BJWREA76.js +2 -0
  42. package/dist/chunk-BJWREA76.js.map +7 -0
  43. package/dist/{chunk-ZWNQREWS.js → chunk-BQEFLPDA.js} +2 -2
  44. package/dist/{chunk-ZWNQREWS.js.map → chunk-BQEFLPDA.js.map} +2 -2
  45. package/dist/{chunk-FEHGU6EP.js → chunk-C3MWS7P2.js} +2 -2
  46. package/dist/{chunk-G2KUK6AT.js → chunk-CFGCB37K.js} +2 -2
  47. package/dist/{chunk-JI265XFO.js → chunk-CMV3F6HR.js} +2 -2
  48. package/dist/{chunk-TOLTUOZS.js → chunk-CWIE74NX.js} +2 -2
  49. package/dist/{chunk-4EZJ5FKJ.js → chunk-DIOJGTUN.js} +2 -2
  50. package/dist/chunk-DJUSVBD5.js +2 -0
  51. package/dist/chunk-DJUSVBD5.js.map +7 -0
  52. package/dist/{chunk-HXDTGP2K.js → chunk-DWA45BWR.js} +2 -2
  53. package/dist/chunk-DWTDNKXX.js +2 -0
  54. package/dist/chunk-DWTDNKXX.js.map +7 -0
  55. package/dist/chunk-ESCLDVFS.js +2 -0
  56. package/dist/{chunk-YBAYEU25.js.map → chunk-ESCLDVFS.js.map} +1 -1
  57. package/dist/chunk-EXIADWI7.js +2 -0
  58. package/dist/chunk-EXIADWI7.js.map +7 -0
  59. package/dist/{chunk-5QUY72FX.js → chunk-F4HZUAKM.js} +2 -2
  60. package/dist/chunk-FCJI2JF7.js +3 -0
  61. package/dist/chunk-FCJI2JF7.js.map +7 -0
  62. package/dist/{chunk-Q26YZYTD.js → chunk-FPU53CCV.js} +2 -2
  63. package/dist/{chunk-3S24ZRPK.js → chunk-GEBAYD6N.js} +2 -2
  64. package/dist/{chunk-G2DAD3MQ.js → chunk-GEJKFE4X.js} +2 -2
  65. package/dist/chunk-GFFZTFQH.js +2 -0
  66. package/dist/chunk-GFFZTFQH.js.map +7 -0
  67. package/dist/chunk-GFJRGBQR.js +2 -0
  68. package/dist/chunk-GFJRGBQR.js.map +7 -0
  69. package/dist/chunk-GZIDE5K2.js +2 -0
  70. package/dist/chunk-GZIDE5K2.js.map +7 -0
  71. package/dist/{chunk-5Q76ACVI.js → chunk-H25XXQVH.js} +2 -2
  72. package/dist/chunk-HG7OOHGD.js +2 -0
  73. package/dist/chunk-HG7OOHGD.js.map +7 -0
  74. package/dist/{chunk-2ZUZ5HDL.js → chunk-HLS5FI55.js} +2 -2
  75. package/dist/chunk-HRW25TMU.js +2 -0
  76. package/dist/chunk-HX6TWXTX.js +2 -0
  77. package/dist/chunk-HX6TWXTX.js.map +7 -0
  78. package/dist/chunk-I5A74NMJ.js +2 -0
  79. package/dist/chunk-I5A74NMJ.js.map +7 -0
  80. package/dist/chunk-IUOEPAWG.js +2 -0
  81. package/dist/chunk-IUOEPAWG.js.map +7 -0
  82. package/dist/{chunk-IHE2MQ3W.js → chunk-J5QPFJ7M.js} +2 -2
  83. package/dist/chunk-JE56CJX2.js +2 -0
  84. package/dist/chunk-JE56CJX2.js.map +7 -0
  85. package/dist/chunk-JJLOUMCJ.js +2 -0
  86. package/dist/chunk-JJLOUMCJ.js.map +7 -0
  87. package/dist/chunk-JLKIHXZP.js +3 -0
  88. package/dist/chunk-JLKIHXZP.js.map +7 -0
  89. package/dist/{chunk-5BC72727.js → chunk-JSEI44A7.js} +2 -2
  90. package/dist/chunk-L5SQQFO7.js +2 -0
  91. package/dist/chunk-L5SQQFO7.js.map +7 -0
  92. package/dist/chunk-M2ZRKHE4.js +2 -0
  93. package/dist/chunk-M2ZRKHE4.js.map +7 -0
  94. package/dist/chunk-M7FNPRV4.js +2 -0
  95. package/dist/chunk-M7FNPRV4.js.map +7 -0
  96. package/dist/chunk-MNSDGJKA.js +3 -0
  97. package/dist/chunk-MNSDGJKA.js.map +7 -0
  98. package/dist/{chunk-DBMWS3O5.js → chunk-MQ5BYGFY.js} +2 -2
  99. package/dist/chunk-N2LS4JD6.js +2 -0
  100. package/dist/chunk-N2LS4JD6.js.map +7 -0
  101. package/dist/chunk-NJ5IFOPR.js +4 -0
  102. package/dist/{chunk-XX2MVWFS.js.map → chunk-NJ5IFOPR.js.map} +1 -1
  103. package/dist/{chunk-NXSTUFS7.js → chunk-NNR2FNHG.js} +2 -2
  104. package/dist/chunk-NQV4THNE.js +2 -0
  105. package/dist/{chunk-UXXJOU5J.js.map → chunk-NQV4THNE.js.map} +1 -1
  106. package/dist/{chunk-XHOBNSBO.js → chunk-P4O57S6N.js} +2 -2
  107. package/dist/{chunk-MB3MU6HR.js → chunk-PGVLRMTQ.js} +2 -2
  108. package/dist/chunk-PMOXLQ72.js +2 -0
  109. package/dist/chunk-PMOXLQ72.js.map +7 -0
  110. package/dist/chunk-Q6FY4L2F.js +2 -0
  111. package/dist/chunk-Q6FY4L2F.js.map +7 -0
  112. package/dist/chunk-R32HPK7R.js +2 -0
  113. package/dist/chunk-R32HPK7R.js.map +7 -0
  114. package/dist/{chunk-Z2JBUHKA.js → chunk-RG6SHPHF.js} +2 -2
  115. package/dist/{chunk-EDUMAMK4.js → chunk-S2CMWKVB.js} +2 -2
  116. package/dist/chunk-S4QD5NID.js +2 -0
  117. package/dist/chunk-S4QD5NID.js.map +7 -0
  118. package/dist/chunk-SB4ICXBV.js +2 -0
  119. package/dist/chunk-SB4ICXBV.js.map +7 -0
  120. package/dist/{chunk-23XLG2EM.js → chunk-SEW5OCQF.js} +2 -2
  121. package/dist/chunk-SWCB2GMN.js +2 -0
  122. package/dist/chunk-SWCB2GMN.js.map +7 -0
  123. package/dist/chunk-TQPQ4UEA.js +2 -0
  124. package/dist/chunk-TQPQ4UEA.js.map +7 -0
  125. package/dist/{chunk-Z2Z52GFT.js → chunk-U5L76VVB.js} +2 -2
  126. package/dist/chunk-UDXO3KM3.js +2 -0
  127. package/dist/chunk-UDXO3KM3.js.map +7 -0
  128. package/dist/{chunk-LQRFNQ2N.js → chunk-UQRQH2JW.js} +2 -2
  129. package/dist/chunk-V5G5JECN.js +2 -0
  130. package/dist/chunk-V5G5JECN.js.map +7 -0
  131. package/dist/{chunk-JBLRAM7Z.js → chunk-XFIREDWO.js} +2 -2
  132. package/dist/chunk-XQHATUKN.js +2 -0
  133. package/dist/{chunk-LW2WRUVL.js.map → chunk-XQHATUKN.js.map} +4 -4
  134. package/dist/chunk-XR677UYD.js +2 -0
  135. package/dist/chunk-XR677UYD.js.map +7 -0
  136. package/dist/{chunk-RNN55473.js → chunk-YDX2PCVL.js} +2 -2
  137. package/dist/{chunk-RNN55473.js.map → chunk-YDX2PCVL.js.map} +1 -1
  138. package/dist/chunk-YJTUFK4P.js +2 -0
  139. package/dist/chunk-YLFSCQL3.js +2 -0
  140. package/dist/chunk-YLFSCQL3.js.map +7 -0
  141. package/dist/chunk-YXOKWCYS.js +2 -0
  142. package/dist/chunk-YXOKWCYS.js.map +7 -0
  143. package/dist/{chunk-I4SP6JTU.js → chunk-Z6L55FTN.js} +2 -2
  144. package/dist/{chunk-6VBK2I5B.js → chunk-ZSPJZ3ZH.js} +2 -2
  145. package/dist/components/avatar.js +2 -0
  146. package/dist/components/avatar.js.map +7 -0
  147. package/dist/components/badge.js +1 -1
  148. package/dist/components/breadcrumb.js +1 -1
  149. package/dist/components/button.js +1 -1
  150. package/dist/components/calendar.js +1 -1
  151. package/dist/components/carousel.js +2 -0
  152. package/dist/components/carousel.js.map +7 -0
  153. package/dist/components/cellediting.js +1 -1
  154. package/dist/components/chart.js +2 -0
  155. package/dist/components/chart.js.map +7 -0
  156. package/dist/components/chat.js +1 -1
  157. package/dist/components/checkbox.js +1 -1
  158. package/dist/components/checkboxgroup.js +1 -1
  159. package/dist/components/chip.js +1 -1
  160. package/dist/components/codeviewer.js +1 -1
  161. package/dist/components/combobox.js +1 -1
  162. package/dist/components/commandpalette.js +1 -1
  163. package/dist/components/container.js +1 -1
  164. package/dist/components/dataview.js +1 -1
  165. package/dist/components/datefield.js +1 -1
  166. package/dist/components/daterangefield.js +1 -1
  167. package/dist/components/datetimefield.js +2 -0
  168. package/dist/components/datetimefield.js.map +7 -0
  169. package/dist/components/dial.js +1 -1
  170. package/dist/components/dropdown.js +1 -1
  171. package/dist/components/fieldgroup.js +1 -1
  172. package/dist/components/fieldlist.js +1 -1
  173. package/dist/components/fieldset.js +1 -1
  174. package/dist/components/filterbuilder.js +1 -1
  175. package/dist/components/form.js +1 -1
  176. package/dist/components/formactions.js +1 -1
  177. package/dist/components/formerrors.js +1 -1
  178. package/dist/components/formsection.js +1 -1
  179. package/dist/components/grid.js +1 -1
  180. package/dist/components/gridexport.js +2 -0
  181. package/dist/components/gridexport.js.map +7 -0
  182. package/dist/components/gridstate.js +2 -0
  183. package/dist/components/gridstate.js.map +7 -0
  184. package/dist/components/grouping.js +2 -0
  185. package/dist/components/grouping.js.map +7 -0
  186. package/dist/components/icon.js +1 -1
  187. package/dist/components/image.js +2 -0
  188. package/dist/components/image.js.map +7 -0
  189. package/dist/components/imagecanvas.js +2 -0
  190. package/dist/components/imagecanvas.js.map +7 -0
  191. package/dist/components/imagefield.js +2 -0
  192. package/dist/components/imagefield.js.map +7 -0
  193. package/dist/components/inputgroup.js +1 -1
  194. package/dist/components/label.js +1 -1
  195. package/dist/components/listbox.js +1 -1
  196. package/dist/components/lookupfield.js +1 -1
  197. package/dist/components/maskfield.js +2 -0
  198. package/dist/components/maskfield.js.map +7 -0
  199. package/dist/components/menu.js +1 -1
  200. package/dist/components/messagebox.js +1 -1
  201. package/dist/components/navmenu.js +1 -1
  202. package/dist/components/numberfield.js +1 -1
  203. package/dist/components/pagination.js +1 -1
  204. package/dist/components/panel.js +1 -1
  205. package/dist/components/pickerfield.js +1 -1
  206. package/dist/components/radiogroup.js +1 -1
  207. package/dist/components/rowediting.js +2 -0
  208. package/dist/components/rowediting.js.map +7 -0
  209. package/dist/components/searchgrid.js +1 -1
  210. package/dist/components/secretfield.js +1 -1
  211. package/dist/components/select.js +1 -1
  212. package/dist/components/shortcuts.js +2 -0
  213. package/dist/components/shortcuts.js.map +7 -0
  214. package/dist/components/slider.js +1 -1
  215. package/dist/components/spacer.js +1 -1
  216. package/dist/components/spinner.js +1 -1
  217. package/dist/components/stat.js +2 -0
  218. package/dist/components/stat.js.map +7 -0
  219. package/dist/components/stepform.js +1 -1
  220. package/dist/components/stepper.js +1 -1
  221. package/dist/components/suggestfield.js +1 -1
  222. package/dist/components/table.js +1 -1
  223. package/dist/components/tabs.js +1 -1
  224. package/dist/components/textarea.js +1 -1
  225. package/dist/components/textfield.js +1 -1
  226. package/dist/components/timefield.js +2 -0
  227. package/dist/components/timefield.js.map +7 -0
  228. package/dist/components/timeline.js +2 -0
  229. package/dist/components/timeline.js.map +7 -0
  230. package/dist/components/toast.js +1 -1
  231. package/dist/components/toggle.js +1 -1
  232. package/dist/components/toolbar.js +1 -1
  233. package/dist/components/tree.js +1 -1
  234. package/dist/components/treegrid.js +2 -0
  235. package/dist/components/treegrid.js.map +7 -0
  236. package/dist/components/viewmanager.js +1 -1
  237. package/dist/components/viewport.js +1 -1
  238. package/dist/components/widget.js +1 -1
  239. package/dist/components/window.js +1 -1
  240. package/dist/core.js +1 -1
  241. package/dist/css/avatar.css +68 -0
  242. package/dist/css/base.css +9 -0
  243. package/dist/css/carousel.css +119 -0
  244. package/dist/css/chart.css +168 -0
  245. package/dist/css/core.css +36 -0
  246. package/dist/css/datetimefield.css +15 -0
  247. package/dist/css/grid.css +40 -0
  248. package/dist/css/gridexport.css +35 -0
  249. package/dist/css/grouping.css +49 -0
  250. package/dist/css/image.css +46 -0
  251. package/dist/css/imagecanvas.css +75 -0
  252. package/dist/css/imagefield.css +103 -0
  253. package/dist/css/rowediting.css +39 -0
  254. package/dist/css/shortcuts.css +34 -0
  255. package/dist/css/stat.css +64 -0
  256. package/dist/css/stepform.css +1 -0
  257. package/dist/css/timeline.css +140 -0
  258. package/dist/css/treegrid.css +35 -0
  259. package/dist/css/window.css +2 -2
  260. package/dist/data.js +1 -1
  261. package/dist/dev.js +2 -0
  262. package/dist/dev.js.map +7 -0
  263. package/dist/index.js +16 -5
  264. package/dist/index.js.map +4 -4
  265. package/dist/optikos.css +1111 -21
  266. package/dist/testing.js +2 -0
  267. package/dist/testing.js.map +7 -0
  268. package/dist/themes/dark.css +7 -0
  269. package/dist/types/bind/index.d.ts +1 -1
  270. package/dist/types/bind/viewmodel.d.ts +33 -0
  271. package/dist/types/components/avatar.d.ts +1 -0
  272. package/dist/types/components/base/avatar/avatar.d.ts +22 -0
  273. package/dist/types/components/base/image/image.d.ts +25 -0
  274. package/dist/types/components/base/imagecanvas/imagecanvas.d.ts +39 -0
  275. package/dist/types/components/carousel.d.ts +1 -0
  276. package/dist/types/components/chart.d.ts +1 -0
  277. package/dist/types/components/charts/chart/chart.d.ts +64 -0
  278. package/dist/types/components/charts/stat/stat.d.ts +34 -0
  279. package/dist/types/components/data/cellediting/cellediting.d.ts +3 -0
  280. package/dist/types/components/data/grid/grid.d.ts +37 -0
  281. package/dist/types/components/data/gridexport/gridexport.d.ts +29 -0
  282. package/dist/types/components/data/gridstate/gridstate.d.ts +23 -0
  283. package/dist/types/components/data/grouping/grouping.d.ts +31 -0
  284. package/dist/types/components/data/rowediting/rowediting.d.ts +13 -0
  285. package/dist/types/components/data/searchgrid/searchgrid.d.ts +9 -2
  286. package/dist/types/components/data/timeline/timeline.d.ts +60 -0
  287. package/dist/types/components/data/treegrid/treegrid.d.ts +32 -0
  288. package/dist/types/components/datetimefield.d.ts +1 -0
  289. package/dist/types/components/fields/datetimefield/datetimefield.d.ts +28 -0
  290. package/dist/types/components/fields/imagefield/imagefield.d.ts +48 -0
  291. package/dist/types/components/fields/maskfield/maskfield.d.ts +28 -0
  292. package/dist/types/components/fields/numberfield/numberfield.d.ts +9 -0
  293. package/dist/types/components/fields/pickerfield/pickerfield.d.ts +3 -0
  294. package/dist/types/components/fields/timefield/timefield.d.ts +24 -0
  295. package/dist/types/components/form/fieldlist/fieldlist.d.ts +2 -0
  296. package/dist/types/components/form/form/form.d.ts +5 -0
  297. package/dist/types/components/form/stepform/stepform.d.ts +1 -1
  298. package/dist/types/components/gridexport.d.ts +1 -0
  299. package/dist/types/components/gridstate.d.ts +1 -0
  300. package/dist/types/components/grouping.d.ts +1 -0
  301. package/dist/types/components/image.d.ts +1 -0
  302. package/dist/types/components/imagecanvas.d.ts +1 -0
  303. package/dist/types/components/imagefield.d.ts +1 -0
  304. package/dist/types/components/layout/carousel/carousel.d.ts +58 -0
  305. package/dist/types/components/maskfield.d.ts +1 -0
  306. package/dist/types/components/navigation/navmenu/navmenu.d.ts +2 -0
  307. package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +2 -0
  308. package/dist/types/components/overlays/menu/menu.d.ts +4 -1
  309. package/dist/types/components/overlays/shortcuts/shortcuts.d.ts +27 -0
  310. package/dist/types/components/overlays/window/window.d.ts +14 -1
  311. package/dist/types/components/rowediting.d.ts +1 -0
  312. package/dist/types/components/shortcuts.d.ts +1 -0
  313. package/dist/types/components/stat.d.ts +1 -0
  314. package/dist/types/components/timefield.d.ts +1 -0
  315. package/dist/types/components/timeline.d.ts +1 -0
  316. package/dist/types/components/treegrid.d.ts +1 -0
  317. package/dist/types/core/component.d.ts +7 -0
  318. package/dist/types/core/container.d.ts +10 -1
  319. package/dist/types/core/dev.d.ts +2 -0
  320. package/dist/types/core/field.d.ts +4 -0
  321. package/dist/types/core/i18n.d.ts +2 -0
  322. package/dist/types/core/index.d.ts +4 -1
  323. package/dist/types/core/path.d.ts +2 -0
  324. package/dist/types/core/permission.d.ts +11 -0
  325. package/dist/types/core/state.d.ts +9 -0
  326. package/dist/types/data/column.d.ts +8 -0
  327. package/dist/types/data/index.d.ts +1 -1
  328. package/dist/types/data/model.d.ts +2 -0
  329. package/dist/types/data/store.d.ts +21 -0
  330. package/dist/types/dev/index.d.ts +2 -0
  331. package/dist/types/dev/keys.d.ts +1 -0
  332. package/dist/types/index.d.ts +17 -0
  333. package/dist/types/testing/index.d.ts +25 -0
  334. package/dist/types/themes/color.d.ts +14 -0
  335. package/dist/types/themes/contrast.d.ts +15 -0
  336. package/dist/types/themes/define.d.ts +25 -3
  337. package/dist/types/themes/index.d.ts +3 -1
  338. package/dist/types/themes/seeds.d.ts +11 -0
  339. package/dist/types/ui/ui.d.ts +6 -0
  340. package/dist/ui.js +1 -1
  341. package/package.json +9 -1
  342. package/dist/chunk-2ZRNGG2N.js +0 -2
  343. package/dist/chunk-2ZRNGG2N.js.map +0 -7
  344. package/dist/chunk-4EQEHJB3.js +0 -2
  345. package/dist/chunk-4EQEHJB3.js.map +0 -7
  346. package/dist/chunk-4LZZ244E.js +0 -2
  347. package/dist/chunk-4LZZ244E.js.map +0 -7
  348. package/dist/chunk-4SYIIX5A.js +0 -2
  349. package/dist/chunk-4SYIIX5A.js.map +0 -7
  350. package/dist/chunk-7KMIFXHZ.js +0 -2
  351. package/dist/chunk-7KMIFXHZ.js.map +0 -7
  352. package/dist/chunk-A2NKDOYN.js +0 -2
  353. package/dist/chunk-A2NKDOYN.js.map +0 -7
  354. package/dist/chunk-CKXS375P.js +0 -2
  355. package/dist/chunk-CKXS375P.js.map +0 -7
  356. package/dist/chunk-EJGWCKE4.js +0 -2
  357. package/dist/chunk-EJGWCKE4.js.map +0 -7
  358. package/dist/chunk-ELYARUCN.js +0 -2
  359. package/dist/chunk-EV73ADN2.js +0 -2
  360. package/dist/chunk-EV73ADN2.js.map +0 -7
  361. package/dist/chunk-GD5JGKM7.js +0 -2
  362. package/dist/chunk-GD5JGKM7.js.map +0 -7
  363. package/dist/chunk-GZ7X34QP.js +0 -2
  364. package/dist/chunk-KCEUD232.js +0 -2
  365. package/dist/chunk-KCEUD232.js.map +0 -7
  366. package/dist/chunk-KLLAY2IM.js +0 -2
  367. package/dist/chunk-LBJSMXLV.js +0 -2
  368. package/dist/chunk-LBJSMXLV.js.map +0 -7
  369. package/dist/chunk-LW2WRUVL.js +0 -2
  370. package/dist/chunk-MW3RWBZ7.js +0 -2
  371. package/dist/chunk-MW3RWBZ7.js.map +0 -7
  372. package/dist/chunk-OEAXCCVM.js +0 -2
  373. package/dist/chunk-OEAXCCVM.js.map +0 -7
  374. package/dist/chunk-UB5RYS7T.js +0 -2
  375. package/dist/chunk-UB5RYS7T.js.map +0 -7
  376. package/dist/chunk-UXXJOU5J.js +0 -2
  377. package/dist/chunk-VU3GIDZ3.js +0 -2
  378. package/dist/chunk-VU3GIDZ3.js.map +0 -7
  379. package/dist/chunk-W2BAFOCN.js +0 -3
  380. package/dist/chunk-W2BAFOCN.js.map +0 -7
  381. package/dist/chunk-WFGTQZIQ.js +0 -2
  382. package/dist/chunk-WFGTQZIQ.js.map +0 -7
  383. package/dist/chunk-XX2MVWFS.js +0 -4
  384. package/dist/chunk-XYZ6VZ5T.js +0 -2
  385. package/dist/chunk-YBAYEU25.js +0 -2
  386. package/dist/chunk-YF75HKL6.js +0 -2
  387. package/dist/chunk-YF75HKL6.js.map +0 -7
  388. /package/dist/{chunk-5JEXM5S7.js.map → chunk-2GKIF7A6.js.map} +0 -0
  389. /package/dist/{chunk-W3H7GTJY.js.map → chunk-2YRQULDC.js.map} +0 -0
  390. /package/dist/{chunk-ZPPELYNJ.js.map → chunk-3BG75P7T.js.map} +0 -0
  391. /package/dist/{chunk-GNU4VOOE.js.map → chunk-3F4MN2BU.js.map} +0 -0
  392. /package/dist/{chunk-5DJTP53N.js.map → chunk-3FK52VQX.js.map} +0 -0
  393. /package/dist/{chunk-3TAW4AKH.js.map → chunk-4AZ44KV4.js.map} +0 -0
  394. /package/dist/{chunk-TZOQWCVH.js.map → chunk-4CWYF4O7.js.map} +0 -0
  395. /package/dist/{chunk-REW4LR46.js.map → chunk-4OB2IM5L.js.map} +0 -0
  396. /package/dist/{chunk-2YZB6XQR.js.map → chunk-4S3HRFQB.js.map} +0 -0
  397. /package/dist/{chunk-OGRFQTXA.js.map → chunk-643FOYQB.js.map} +0 -0
  398. /package/dist/{chunk-JOFQJGZK.js.map → chunk-6BOM5KZR.js.map} +0 -0
  399. /package/dist/{chunk-JK74QK3M.js.map → chunk-6PZPBPAD.js.map} +0 -0
  400. /package/dist/{chunk-GZ7X34QP.js.map → chunk-7Y2GHQRB.js.map} +0 -0
  401. /package/dist/{chunk-YHEMA56R.js.map → chunk-AQ3RTHG5.js.map} +0 -0
  402. /package/dist/{chunk-M242VYZA.js.map → chunk-AT7VFZRB.js.map} +0 -0
  403. /package/dist/{chunk-ZVK4L5GK.js.map → chunk-BCVOUMJJ.js.map} +0 -0
  404. /package/dist/{chunk-HOF4JGMQ.js.map → chunk-BIGL3ZVD.js.map} +0 -0
  405. /package/dist/{chunk-FEHGU6EP.js.map → chunk-C3MWS7P2.js.map} +0 -0
  406. /package/dist/{chunk-G2KUK6AT.js.map → chunk-CFGCB37K.js.map} +0 -0
  407. /package/dist/{chunk-JI265XFO.js.map → chunk-CMV3F6HR.js.map} +0 -0
  408. /package/dist/{chunk-TOLTUOZS.js.map → chunk-CWIE74NX.js.map} +0 -0
  409. /package/dist/{chunk-4EZJ5FKJ.js.map → chunk-DIOJGTUN.js.map} +0 -0
  410. /package/dist/{chunk-HXDTGP2K.js.map → chunk-DWA45BWR.js.map} +0 -0
  411. /package/dist/{chunk-5QUY72FX.js.map → chunk-F4HZUAKM.js.map} +0 -0
  412. /package/dist/{chunk-Q26YZYTD.js.map → chunk-FPU53CCV.js.map} +0 -0
  413. /package/dist/{chunk-3S24ZRPK.js.map → chunk-GEBAYD6N.js.map} +0 -0
  414. /package/dist/{chunk-G2DAD3MQ.js.map → chunk-GEJKFE4X.js.map} +0 -0
  415. /package/dist/{chunk-5Q76ACVI.js.map → chunk-H25XXQVH.js.map} +0 -0
  416. /package/dist/{chunk-2ZUZ5HDL.js.map → chunk-HLS5FI55.js.map} +0 -0
  417. /package/dist/{chunk-XYZ6VZ5T.js.map → chunk-HRW25TMU.js.map} +0 -0
  418. /package/dist/{chunk-IHE2MQ3W.js.map → chunk-J5QPFJ7M.js.map} +0 -0
  419. /package/dist/{chunk-5BC72727.js.map → chunk-JSEI44A7.js.map} +0 -0
  420. /package/dist/{chunk-DBMWS3O5.js.map → chunk-MQ5BYGFY.js.map} +0 -0
  421. /package/dist/{chunk-NXSTUFS7.js.map → chunk-NNR2FNHG.js.map} +0 -0
  422. /package/dist/{chunk-XHOBNSBO.js.map → chunk-P4O57S6N.js.map} +0 -0
  423. /package/dist/{chunk-MB3MU6HR.js.map → chunk-PGVLRMTQ.js.map} +0 -0
  424. /package/dist/{chunk-Z2JBUHKA.js.map → chunk-RG6SHPHF.js.map} +0 -0
  425. /package/dist/{chunk-EDUMAMK4.js.map → chunk-S2CMWKVB.js.map} +0 -0
  426. /package/dist/{chunk-23XLG2EM.js.map → chunk-SEW5OCQF.js.map} +0 -0
  427. /package/dist/{chunk-Z2Z52GFT.js.map → chunk-U5L76VVB.js.map} +0 -0
  428. /package/dist/{chunk-LQRFNQ2N.js.map → chunk-UQRQH2JW.js.map} +0 -0
  429. /package/dist/{chunk-JBLRAM7Z.js.map → chunk-XFIREDWO.js.map} +0 -0
  430. /package/dist/{chunk-ELYARUCN.js.map → chunk-YJTUFK4P.js.map} +0 -0
  431. /package/dist/{chunk-I4SP6JTU.js.map → chunk-Z6L55FTN.js.map} +0 -0
  432. /package/dist/{chunk-6VBK2I5B.js.map → chunk-ZSPJZ3ZH.js.map} +0 -0
package/dist/optikos.css CHANGED
@@ -61,6 +61,15 @@
61
61
  --op-color-warning-soft: #fcecc9;
62
62
  --op-color-info: #1f5fa8;
63
63
  --op-color-info-soft: #dfeaf8;
64
+
65
+ /* categorical series colors (charts, avatars): distinct for color-blind eyes, 3:1 or more on the surface; the first one, unless a theme sets it, is its primary */
66
+ --op-chart-2: #b45309;
67
+ --op-chart-3: #1e7a4d;
68
+ --op-chart-4: #7e3fa8;
69
+ --op-chart-5: #0e7490;
70
+ --op-chart-6: #b3261e;
71
+ --op-chart-7: #8a6d00;
72
+ --op-chart-8: #5b6676;
64
73
  --op-color-focus: #2f7bd6;
65
74
  --op-color-disabled-fg: #9aa4b2;
66
75
  --op-color-disabled-bg: #eef1f5;
@@ -266,6 +275,42 @@
266
275
  outline: var(--op-focus-width) solid var(--op-color-focus);
267
276
  outline-offset: var(--op-focus-offset);
268
277
  }
278
+
279
+ /* print: the page, not the application chrome (Grid has printGrid for what its virtual list does not render) */
280
+ @media print {
281
+ .op-no-print,
282
+ .op-layer,
283
+ .op-navmenu,
284
+ .op-formactions,
285
+ .op-pagination,
286
+ .op-toast,
287
+ .op-mask,
288
+ .op-tabs__list,
289
+ .op-viewport > .op-toolbar,
290
+ .op-button {
291
+ display: none !important;
292
+ }
293
+ .op-viewport,
294
+ .op-viewport > *,
295
+ .op-panel,
296
+ .op-form {
297
+ position: static !important;
298
+ overflow: visible !important;
299
+ block-size: auto !important;
300
+ box-shadow: none !important;
301
+ }
302
+ .op-field,
303
+ .op-panel,
304
+ .op-fieldset {
305
+ break-inside: avoid;
306
+ }
307
+ .op-field__control input,
308
+ .op-field__control textarea {
309
+ border-color: transparent;
310
+ background: none;
311
+ padding-inline: 0;
312
+ }
313
+ }
269
314
  }
270
315
 
271
316
  @layer optikos {
@@ -448,6 +493,75 @@
448
493
  }
449
494
  }
450
495
 
496
+ @layer optikos {
497
+ :root {
498
+ --op-avatar-size: 2.25rem;
499
+ --op-avatar-dot: 0.625rem;
500
+ --op-avatar-size-sm: 1.5rem;
501
+ --op-avatar-size-lg: 3rem;
502
+ --op-avatar-size-xl: 4.5rem;
503
+ --op-avatar-ring: 2px;
504
+ }
505
+ .op-avatar {
506
+ position: relative;
507
+ display: inline-flex;
508
+ align-items: center;
509
+ justify-content: center;
510
+ flex: none;
511
+ inline-size: var(--op-avatar-size);
512
+ block-size: var(--op-avatar-size);
513
+ background: var(--op-avatar-c, var(--op-chart-1, var(--op-color-primary)));
514
+ color: var(--op-color-surface);
515
+ font-family: var(--op-font-family);
516
+ font-size: calc(var(--op-avatar-size) * 0.4);
517
+ font-weight: 600;
518
+ line-height: 1;
519
+ user-select: none;
520
+ }
521
+ .op-avatar--circle {
522
+ border-radius: 50%;
523
+ }
524
+ .op-avatar--square {
525
+ border-radius: var(--op-avatar-radius, var(--op-radius));
526
+ }
527
+ .op-avatar--sm {
528
+ --op-avatar-size: var(--op-avatar-size-sm);
529
+ }
530
+ .op-avatar--lg {
531
+ --op-avatar-size: var(--op-avatar-size-lg);
532
+ }
533
+ .op-avatar--xl {
534
+ --op-avatar-size: var(--op-avatar-size-xl);
535
+ }
536
+ .op-avatar__img {
537
+ position: absolute;
538
+ inset: 0;
539
+ inline-size: 100%;
540
+ block-size: 100%;
541
+ object-fit: cover;
542
+ border-radius: inherit;
543
+ }
544
+ .op-avatar__status {
545
+ position: absolute;
546
+ inset-block-end: 0;
547
+ inset-inline-end: 0;
548
+ inline-size: var(--op-avatar-dot);
549
+ block-size: var(--op-avatar-dot);
550
+ border-radius: 50%;
551
+ background: var(--op-color-fg-muted);
552
+ box-shadow: 0 0 0 var(--op-avatar-ring) var(--op-color-surface);
553
+ }
554
+ .op-avatar__status.is-online {
555
+ background: var(--op-color-success);
556
+ }
557
+ .op-avatar__status.is-away {
558
+ background: var(--op-color-warning);
559
+ }
560
+ .op-avatar__status.is-busy {
561
+ background: var(--op-color-danger);
562
+ }
563
+ }
564
+
451
565
  @layer optikos {
452
566
  :root {
453
567
  --op-badge-dot-size: 0.5rem;
@@ -784,6 +898,129 @@
784
898
  }
785
899
  }
786
900
 
901
+ @layer optikos {
902
+ :root {
903
+ --op-image-icon-size: 2em;
904
+ }
905
+ .op-image {
906
+ position: relative;
907
+ display: block;
908
+ overflow: hidden;
909
+ background: var(--op-image-bg, var(--op-color-surface-2));
910
+ color: var(--op-color-fg-muted);
911
+ min-inline-size: 0;
912
+ }
913
+ .op-image--rounded {
914
+ border-radius: var(--op-image-radius, var(--op-radius));
915
+ }
916
+ .op-image__fallback {
917
+ position: absolute;
918
+ inset: 0;
919
+ display: flex;
920
+ align-items: center;
921
+ justify-content: center;
922
+ font-size: var(--op-image-icon-size);
923
+ }
924
+ .op-image__img {
925
+ position: absolute;
926
+ inset: 0;
927
+ inline-size: 100%;
928
+ block-size: 100%;
929
+ opacity: 0;
930
+ transition: opacity var(--op-duration) var(--op-easing);
931
+ }
932
+ .op-image.has-image .op-image__img {
933
+ opacity: 1;
934
+ }
935
+ .op-image--cover .op-image__img {
936
+ object-fit: cover;
937
+ }
938
+ .op-image--contain .op-image__img {
939
+ object-fit: contain;
940
+ }
941
+ @media (prefers-reduced-motion: reduce) {
942
+ .op-image__img {
943
+ transition: none;
944
+ }
945
+ }
946
+ }
947
+
948
+ @layer optikos {
949
+ .op-imagecanvas {
950
+ position: relative;
951
+ overflow: hidden;
952
+ aspect-ratio: 4 / 3;
953
+ background: var(--op-imagecanvas-bg, var(--op-color-surface-2));
954
+ border-radius: var(--op-imagecanvas-radius, var(--op-radius));
955
+ font-family: var(--op-font-family);
956
+ }
957
+ .op-imagecanvas__stage {
958
+ position: absolute;
959
+ inset: 0;
960
+ overflow: hidden;
961
+ touch-action: none;
962
+ }
963
+ .op-imagecanvas.is-zoomed .op-imagecanvas__stage {
964
+ cursor: grab;
965
+ }
966
+ .op-imagecanvas.is-dragging .op-imagecanvas__stage {
967
+ cursor: grabbing;
968
+ }
969
+ .op-imagecanvas__stage:focus-visible {
970
+ outline: var(--op-focus-width) solid var(--op-color-focus);
971
+ outline-offset: calc(var(--op-focus-width) * -1);
972
+ }
973
+ .op-imagecanvas__img {
974
+ display: block;
975
+ inline-size: 100%;
976
+ block-size: 100%;
977
+ user-select: none;
978
+ transition: transform var(--op-duration) var(--op-easing);
979
+ }
980
+ .op-imagecanvas.is-dragging .op-imagecanvas__img {
981
+ transition: none;
982
+ }
983
+ .op-imagecanvas.is-error .op-imagecanvas__img {
984
+ visibility: hidden;
985
+ }
986
+ .op-imagecanvas__status {
987
+ position: absolute;
988
+ inset: 0;
989
+ display: grid;
990
+ place-items: center;
991
+ padding: var(--op-space-3);
992
+ color: var(--op-color-fg-muted);
993
+ font-size: var(--op-font-size-sm);
994
+ text-align: center;
995
+ pointer-events: none;
996
+ }
997
+ .op-imagecanvas__tools {
998
+ position: absolute;
999
+ inset-block-end: var(--op-space-2);
1000
+ inset-inline-end: var(--op-space-2);
1001
+ display: flex;
1002
+ gap: var(--op-border-width);
1003
+ overflow: hidden;
1004
+ border-radius: var(--op-radius);
1005
+ box-shadow: var(--op-shadow);
1006
+ }
1007
+ .op-imagecanvas__tool {
1008
+ display: inline-flex;
1009
+ padding: var(--op-space-2);
1010
+ color: var(--op-imagecanvas-tools-fg, var(--op-color-fg));
1011
+ background: var(--op-imagecanvas-tools-bg, var(--op-color-surface));
1012
+ border: 0;
1013
+ cursor: pointer;
1014
+ }
1015
+ .op-imagecanvas__tool:hover {
1016
+ background: var(--op-color-primary-soft);
1017
+ }
1018
+ .op-imagecanvas__tool:focus-visible {
1019
+ outline: var(--op-focus-width) solid var(--op-color-focus);
1020
+ outline-offset: calc(var(--op-focus-width) * -1);
1021
+ }
1022
+ }
1023
+
787
1024
  @layer optikos {
788
1025
  .op-label {
789
1026
  color: var(--op-label-fg, var(--op-color-fg));
@@ -797,6 +1034,240 @@
797
1034
  }
798
1035
  }
799
1036
 
1037
+ @layer optikos {
1038
+ :root {
1039
+ --op-chart-line-width: 2px;
1040
+ --op-chart-font-size: 0.75rem;
1041
+ --op-chart-area-opacity: 0.18;
1042
+ --op-chart-tip-width: 11rem;
1043
+ --op-chart-swatch: 0.625rem;
1044
+ --op-chart-total-size: 1.125rem;
1045
+ --op-chart-bar-radius: 2px;
1046
+ }
1047
+ .op-chart {
1048
+ display: flex;
1049
+ flex-direction: column;
1050
+ gap: var(--op-space-2);
1051
+ min-inline-size: 0;
1052
+ font-family: var(--op-font-family);
1053
+ color: var(--op-chart-fg, var(--op-color-fg));
1054
+ }
1055
+ .op-chart__plot {
1056
+ position: relative;
1057
+ }
1058
+ .op-chart__svg {
1059
+ display: block;
1060
+ inline-size: 100%;
1061
+ overflow: visible;
1062
+ touch-action: pan-y;
1063
+ }
1064
+ .op-chart__svg:focus-visible {
1065
+ outline: var(--op-focus-width) solid var(--op-color-focus);
1066
+ outline-offset: var(--op-focus-offset);
1067
+ }
1068
+ .op-chart__grid line {
1069
+ stroke: var(--op-chart-grid, var(--op-color-border));
1070
+ stroke-width: var(--op-border-width);
1071
+ }
1072
+ .op-chart__grid .op-chart__axis {
1073
+ stroke: var(--op-color-border-strong);
1074
+ }
1075
+ .op-chart__tick,
1076
+ .op-chart__empty {
1077
+ fill: var(--op-color-fg-muted);
1078
+ font-size: var(--op-chart-font-size);
1079
+ }
1080
+ .op-chart__total {
1081
+ fill: var(--op-chart-fg, var(--op-color-fg));
1082
+ font-size: var(--op-chart-total-size);
1083
+ font-weight: 600;
1084
+ }
1085
+ .op-chart__series {
1086
+ --op-chart-c: var(--op-chart-1, var(--op-color-primary));
1087
+ }
1088
+ .op-chart__bar {
1089
+ fill: var(--op-chart-c);
1090
+ }
1091
+ .op-chart__line {
1092
+ fill: none;
1093
+ stroke: var(--op-chart-c);
1094
+ stroke-width: var(--op-chart-line-width);
1095
+ stroke-linejoin: round;
1096
+ stroke-linecap: round;
1097
+ }
1098
+ .op-chart__area {
1099
+ fill: var(--op-chart-c);
1100
+ fill-opacity: var(--op-chart-area-opacity);
1101
+ stroke: none;
1102
+ }
1103
+ .op-chart__dot {
1104
+ fill: var(--op-color-surface);
1105
+ stroke: var(--op-chart-c);
1106
+ stroke-width: var(--op-chart-line-width);
1107
+ }
1108
+ .op-chart--sparkline .op-chart__dot {
1109
+ fill: var(--op-chart-c);
1110
+ }
1111
+ .op-chart__slice {
1112
+ fill: var(--op-chart-c);
1113
+ stroke: var(--op-color-surface);
1114
+ stroke-width: var(--op-chart-line-width);
1115
+ transition: opacity var(--op-duration) var(--op-easing);
1116
+ }
1117
+ .op-chart__svg:has(.is-active) .op-chart__slice:not(.is-active) {
1118
+ opacity: 0.55;
1119
+ }
1120
+ .op-chart__hit {
1121
+ fill: transparent;
1122
+ }
1123
+ .op-chart__guide {
1124
+ stroke: var(--op-color-border-strong);
1125
+ stroke-width: var(--op-border-width);
1126
+ visibility: hidden;
1127
+ }
1128
+ .op-chart__guide.is-on {
1129
+ visibility: visible;
1130
+ }
1131
+ .op-chart__tip {
1132
+ position: absolute;
1133
+ inset-block-start: 0;
1134
+ z-index: 1;
1135
+ inline-size: max-content;
1136
+ max-inline-size: var(--op-chart-tip-width);
1137
+ padding: var(--op-space-2) var(--op-space-3);
1138
+ transform: translateX(var(--op-space-3));
1139
+ background: var(--op-color-surface);
1140
+ color: var(--op-color-fg);
1141
+ border: var(--op-border-width) solid var(--op-color-border);
1142
+ border-radius: var(--op-radius);
1143
+ box-shadow: var(--op-shadow);
1144
+ font-size: var(--op-chart-font-size);
1145
+ pointer-events: none;
1146
+ }
1147
+ .op-chart__tip.is-left {
1148
+ transform: translateX(calc(-100% - var(--op-space-3)));
1149
+ }
1150
+ .op-chart__tip-head {
1151
+ font-weight: 600;
1152
+ margin-block-end: var(--op-space-1);
1153
+ }
1154
+ .op-chart__tip-row {
1155
+ display: flex;
1156
+ align-items: center;
1157
+ gap: var(--op-space-2);
1158
+ }
1159
+ .op-chart__tip-row b {
1160
+ margin-inline-start: auto;
1161
+ padding-inline-start: var(--op-space-3);
1162
+ font-variant-numeric: tabular-nums;
1163
+ }
1164
+ .op-chart__legend {
1165
+ display: flex;
1166
+ flex-wrap: wrap;
1167
+ gap: var(--op-space-1) var(--op-space-3);
1168
+ }
1169
+ .op-chart__key {
1170
+ display: inline-flex;
1171
+ align-items: center;
1172
+ gap: var(--op-space-2);
1173
+ padding: 0;
1174
+ border: 0;
1175
+ background: none;
1176
+ font: inherit;
1177
+ font-size: var(--op-chart-font-size);
1178
+ color: var(--op-color-fg);
1179
+ cursor: pointer;
1180
+ }
1181
+ .op-chart__key.is-off {
1182
+ color: var(--op-color-fg-muted);
1183
+ text-decoration: line-through;
1184
+ }
1185
+ .op-chart__key:focus-visible {
1186
+ outline: var(--op-focus-width) solid var(--op-color-focus);
1187
+ outline-offset: var(--op-focus-offset);
1188
+ }
1189
+ .op-chart__swatch {
1190
+ inline-size: var(--op-chart-swatch);
1191
+ block-size: var(--op-chart-swatch);
1192
+ border-radius: var(--op-chart-bar-radius);
1193
+ background: var(--op-chart-c);
1194
+ flex: none;
1195
+ }
1196
+ .op-chart__key.is-off .op-chart__swatch {
1197
+ opacity: 0.35;
1198
+ }
1199
+ @media (prefers-reduced-motion: reduce) {
1200
+ .op-chart__slice {
1201
+ transition: none;
1202
+ }
1203
+ }
1204
+ }
1205
+
1206
+ @layer optikos {
1207
+ :root {
1208
+ --op-stat-value-size: 1.75rem;
1209
+ --op-stat-spark-width: 6rem;
1210
+ }
1211
+ .op-stat {
1212
+ position: relative;
1213
+ display: flex;
1214
+ flex-direction: column;
1215
+ gap: var(--op-space-1);
1216
+ padding: var(--op-space-4);
1217
+ background: var(--op-stat-bg, var(--op-color-surface));
1218
+ color: var(--op-color-fg);
1219
+ border: var(--op-border-width) solid var(--op-color-border);
1220
+ border-radius: var(--op-stat-radius, var(--op-radius));
1221
+ font-family: var(--op-font-family);
1222
+ min-inline-size: 0;
1223
+ }
1224
+ .op-stat__label {
1225
+ display: flex;
1226
+ align-items: center;
1227
+ gap: var(--op-space-2);
1228
+ color: var(--op-color-fg-muted);
1229
+ font-size: var(--op-font-size-sm);
1230
+ }
1231
+ .op-stat__row {
1232
+ display: flex;
1233
+ align-items: baseline;
1234
+ flex-wrap: wrap;
1235
+ gap: var(--op-space-2);
1236
+ }
1237
+ .op-stat__value {
1238
+ font-size: var(--op-stat-value-size);
1239
+ font-weight: 600;
1240
+ line-height: 1.1;
1241
+ font-variant-numeric: tabular-nums;
1242
+ }
1243
+ .op-stat__delta {
1244
+ display: inline-flex;
1245
+ align-items: center;
1246
+ gap: var(--op-space-1);
1247
+ font-size: var(--op-font-size-sm);
1248
+ font-weight: 600;
1249
+ }
1250
+ .op-stat__delta.is-good {
1251
+ color: var(--op-color-success);
1252
+ }
1253
+ .op-stat__delta.is-bad {
1254
+ color: var(--op-color-danger);
1255
+ }
1256
+ .op-stat__delta.is-flat {
1257
+ color: var(--op-color-fg-muted);
1258
+ }
1259
+ .op-stat__caption {
1260
+ color: var(--op-color-fg-muted);
1261
+ font-size: var(--op-font-size-sm);
1262
+ }
1263
+ .op-stat__spark {
1264
+ position: absolute;
1265
+ inset-block-end: var(--op-space-3);
1266
+ inset-inline-end: var(--op-space-4);
1267
+ inline-size: var(--op-stat-spark-width);
1268
+ }
1269
+ }
1270
+
800
1271
  @layer optikos {
801
1272
  :root {
802
1273
  --op-chat-max-width: 75%;
@@ -1259,6 +1730,7 @@
1259
1730
  --op-grid-action-idle-opacity: 0.45;
1260
1731
  --op-grid-action-disabled-opacity: 0.3;
1261
1732
  --op-grid-selected-bar-width: 0.125rem;
1733
+ --op-grid-lock-shadow-size: 0.375rem;
1262
1734
  }
1263
1735
  .op-grid {
1264
1736
  --_border: var(--op-grid-border, var(--op-color-border));
@@ -1624,6 +2096,131 @@
1624
2096
  .op-grid__colgroup ~ .op-grid__colitem {
1625
2097
  padding-inline-start: var(--op-space-4);
1626
2098
  }
2099
+
2100
+ /* locked columns: body cells stick, header cells are shifted by the scroll (the header scrolls by script, not natively) */
2101
+ .op-grid__cell.is-locked {
2102
+ z-index: 1;
2103
+ background: var(--op-grid-bg, var(--op-color-surface));
2104
+ }
2105
+ .op-grid__body-row .is-locked-start {
2106
+ position: sticky;
2107
+ inset-inline-start: var(--_lock);
2108
+ }
2109
+ .op-grid__body-row .is-locked-end {
2110
+ position: sticky;
2111
+ inset-inline-end: var(--_lock);
2112
+ }
2113
+ .op-grid__hcell.is-locked {
2114
+ position: relative;
2115
+ background: var(--op-grid-header-bg, var(--op-color-surface-2));
2116
+ }
2117
+ .op-grid__hcell.is-locked-start {
2118
+ inset-inline-start: var(--op-grid-scroll-x);
2119
+ }
2120
+ .op-grid__hcell.is-locked-end {
2121
+ inset-inline-start: calc(-1 * var(--op-grid-scroll-end));
2122
+ }
2123
+ .op-grid__body-row:hover .is-locked {
2124
+ background: var(--op-grid-row-hover-bg, var(--op-color-hover));
2125
+ }
2126
+ .op-grid--striped .op-grid__body-row.is-odd .is-locked {
2127
+ background: var(--op-grid-row-stripe-bg, var(--op-color-surface-2));
2128
+ }
2129
+ .op-grid__body-row.is-selected .is-locked {
2130
+ background: var(--op-grid-row-selected-bg, var(--op-color-selected));
2131
+ }
2132
+ .op-grid.is-scrolled-start .is-lock-edge.is-locked-start {
2133
+ box-shadow: var(--op-grid-lock-shadow-size) 0 var(--op-grid-lock-shadow-size) calc(-1 * var(--op-grid-lock-shadow-size)) var(--op-color-border-strong);
2134
+ }
2135
+ .op-grid.is-scrolled-end .is-lock-edge.is-locked-end {
2136
+ box-shadow: calc(-1 * var(--op-grid-lock-shadow-size)) 0 var(--op-grid-lock-shadow-size) calc(-1 * var(--op-grid-lock-shadow-size)) var(--op-color-border-strong);
2137
+ }
2138
+ }
2139
+
2140
+ @layer optikos {
2141
+ .op-print-sheet {
2142
+ display: none;
2143
+ }
2144
+ @media print {
2145
+ html.op-printing body > *:not(.op-print-sheet) {
2146
+ display: none !important;
2147
+ }
2148
+ html.op-printing .op-print-sheet {
2149
+ display: block;
2150
+ font-family: var(--op-font-family);
2151
+ color: var(--op-color-fg);
2152
+ }
2153
+ .op-print-sheet table {
2154
+ inline-size: 100%;
2155
+ border-collapse: collapse;
2156
+ font-size: var(--op-font-size-sm);
2157
+ }
2158
+ .op-print-sheet thead {
2159
+ display: table-header-group;
2160
+ }
2161
+ .op-print-sheet tr {
2162
+ break-inside: avoid;
2163
+ }
2164
+ .op-print-sheet th,
2165
+ .op-print-sheet td {
2166
+ padding: var(--op-space-1) var(--op-space-2);
2167
+ border-block-end: var(--op-border-width) solid var(--op-color-border);
2168
+ text-align: start;
2169
+ }
2170
+ .op-print-sheet th {
2171
+ border-block-end-color: var(--op-color-fg);
2172
+ }
2173
+ }
2174
+ }
2175
+
2176
+ @layer optikos {
2177
+ .op-grid__row--group {
2178
+ display: flex;
2179
+ background: var(--op-grid-group-bg, var(--op-color-surface-2));
2180
+ font-weight: var(--op-font-weight-bold);
2181
+ cursor: pointer;
2182
+ }
2183
+ .op-grid__row--group .op-grid__cell {
2184
+ flex: none;
2185
+ }
2186
+ .op-grid__row--group .op-grid__cell.is-group-label {
2187
+ flex: 1;
2188
+ gap: var(--op-space-2);
2189
+ }
2190
+ .op-grid__row--group .op-grid__cell:not(.is-group-label):not(.op-grid__selcell) {
2191
+ display: none;
2192
+ }
2193
+ .op-grid__twist {
2194
+ display: inline-flex;
2195
+ transition: transform var(--op-duration) var(--op-easing);
2196
+ }
2197
+ .op-grid__row--group[aria-expanded='false'] .op-grid__twist {
2198
+ transform: rotate(-90deg);
2199
+ }
2200
+ .op-grid__group-count {
2201
+ color: var(--op-color-fg-muted);
2202
+ font-weight: normal;
2203
+ }
2204
+ .op-grid__row--total {
2205
+ font-weight: var(--op-font-weight-bold);
2206
+ background: var(--op-grid-total-bg, var(--op-color-surface-2));
2207
+ cursor: default;
2208
+ }
2209
+ .op-grid__row--total.is-grand-total {
2210
+ border-block-start: var(--op-border-width) solid var(--op-color-border-strong);
2211
+ }
2212
+ .op-grid__row--total:hover {
2213
+ background: var(--op-grid-total-bg, var(--op-color-surface-2));
2214
+ }
2215
+ .op-grid__body-row.is-grouped > .op-grid__cell:first-child:not(.op-grid__selcell),
2216
+ .op-grid__body-row.is-grouped > .op-grid__selcell + .op-grid__cell {
2217
+ padding-inline-start: calc(var(--op-grid-cell-padding-x, var(--op-control-padding-x)) + var(--op-grid-indent, var(--op-space-4)));
2218
+ }
2219
+ @media (prefers-reduced-motion: reduce) {
2220
+ .op-grid__twist {
2221
+ transition: none;
2222
+ }
2223
+ }
1627
2224
  }
1628
2225
 
1629
2226
  @layer optikos {
@@ -1650,6 +2247,46 @@
1650
2247
  }
1651
2248
  }
1652
2249
 
2250
+ @layer optikos {
2251
+ .op-grid__body-row.is-row-editing {
2252
+ z-index: 2;
2253
+ background: var(--op-grid-row-selected-bg, var(--op-color-selected));
2254
+ }
2255
+ .op-grid__rowbar {
2256
+ position: absolute;
2257
+ z-index: 1;
2258
+ inset-block-start: 100%;
2259
+ inset-inline-start: var(--op-grid-scroll-x);
2260
+ display: flex;
2261
+ gap: var(--op-space-2);
2262
+ padding: var(--op-space-2);
2263
+ background: var(--op-color-surface);
2264
+ border: var(--op-border-width) solid var(--op-color-border-strong);
2265
+ border-block-start: 0;
2266
+ border-end-start-radius: var(--op-radius);
2267
+ border-end-end-radius: var(--op-radius);
2268
+ box-shadow: var(--op-shadow);
2269
+ }
2270
+ .op-grid__rowbtn {
2271
+ padding: var(--op-space-1) var(--op-space-3);
2272
+ color: var(--op-color-fg);
2273
+ background: var(--op-color-surface);
2274
+ border: var(--op-border-width) solid var(--op-color-border-strong);
2275
+ border-radius: var(--op-radius);
2276
+ font: inherit;
2277
+ cursor: pointer;
2278
+ }
2279
+ .op-grid__rowbtn.is-primary {
2280
+ color: var(--op-color-primary-fg);
2281
+ background: var(--op-color-primary);
2282
+ border-color: var(--op-color-primary);
2283
+ }
2284
+ .op-grid__rowbtn:focus-visible {
2285
+ outline: var(--op-focus-width) solid var(--op-color-focus);
2286
+ outline-offset: var(--op-focus-offset);
2287
+ }
2288
+ }
2289
+
1653
2290
  @layer optikos {
1654
2291
  :root {
1655
2292
  --op-searchgrid-gap: var(--op-space-3);
@@ -1695,33 +2332,174 @@
1695
2332
  color: var(--op-color-fg);
1696
2333
  font-size: var(--op-font-size);
1697
2334
  }
1698
- .op-table caption {
1699
- padding: var(--op-space-2);
1700
- text-align: start;
2335
+ .op-table caption {
2336
+ padding: var(--op-space-2);
2337
+ text-align: start;
2338
+ color: var(--op-color-fg-muted);
2339
+ }
2340
+ .op-table th,
2341
+ .op-table td {
2342
+ padding: var(--op-table-cell-padding-y, var(--op-space-2)) var(--op-table-cell-padding-x, var(--op-space-3));
2343
+ text-align: start;
2344
+ border-block-end: var(--op-border-width) solid var(--op-table-border, var(--op-color-border));
2345
+ }
2346
+ .op-table th {
2347
+ background: var(--op-table-header-bg, var(--op-color-surface-2));
2348
+ font-weight: var(--op-font-weight-bold);
2349
+ }
2350
+ .op-table--striped tbody tr:nth-child(even) {
2351
+ background: var(--op-table-stripe-bg, var(--op-color-surface-2));
2352
+ }
2353
+ .op-table .op-table__cell--right {
2354
+ text-align: end;
2355
+ }
2356
+ .op-table .op-table__cell--center {
2357
+ text-align: center;
2358
+ }
2359
+ .op-table__empty td {
2360
+ text-align: center;
2361
+ color: var(--op-color-fg-muted);
2362
+ }
2363
+ }
2364
+
2365
+ @layer optikos {
2366
+ :root {
2367
+ --op-timeline-marker: 0.875rem;
2368
+ --op-timeline-when-width: 8rem;
2369
+ --op-timeline-lane-width: 8rem;
2370
+ --op-timeline-bar-height: 1.75rem;
2371
+ --op-timeline-line: 2px;
2372
+ }
2373
+ .op-timeline {
2374
+ font-family: var(--op-font-family);
2375
+ color: var(--op-color-fg);
2376
+ min-inline-size: 0;
2377
+ }
2378
+ .op-timeline--list {
2379
+ display: flex;
2380
+ flex-direction: column;
2381
+ }
2382
+ .op-timeline__item {
2383
+ --op-timeline-c: var(--op-color-border-strong);
2384
+ display: grid;
2385
+ grid-template-columns: var(--op-timeline-when-width) var(--op-timeline-marker) 1fr;
2386
+ gap: var(--op-space-3);
2387
+ padding-block-end: var(--op-space-4);
2388
+ border-radius: var(--op-radius);
2389
+ }
2390
+ .op-timeline__item:focus-visible,
2391
+ .op-timeline__bar:focus-visible {
2392
+ outline: var(--op-focus-width) solid var(--op-color-focus);
2393
+ outline-offset: var(--op-focus-offset);
2394
+ }
2395
+ .op-timeline__item.is-success { --op-timeline-c: var(--op-color-success); }
2396
+ .op-timeline__item.is-warning { --op-timeline-c: var(--op-color-warning); }
2397
+ .op-timeline__item.is-danger { --op-timeline-c: var(--op-color-danger); }
2398
+ .op-timeline__item.is-info { --op-timeline-c: var(--op-color-info); }
2399
+ .op-timeline__when {
2400
+ color: var(--op-color-fg-muted);
2401
+ font-size: var(--op-font-size-sm);
2402
+ text-align: end;
2403
+ padding-block-start: var(--op-space-1);
2404
+ }
2405
+ .op-timeline__marker {
2406
+ position: relative;
2407
+ display: flex;
2408
+ align-items: center;
2409
+ justify-content: center;
2410
+ inline-size: var(--op-timeline-marker);
2411
+ block-size: var(--op-timeline-marker);
2412
+ margin-block-start: var(--op-space-1);
2413
+ border-radius: 50%;
2414
+ background: var(--op-timeline-c);
2415
+ color: var(--op-color-surface);
2416
+ font-size: var(--op-font-size-sm);
2417
+ }
2418
+ .op-timeline__marker::after {
2419
+ content: '';
2420
+ position: absolute;
2421
+ inset-block-start: 100%;
2422
+ inset-inline-start: calc(50% - var(--op-timeline-line) / 2);
2423
+ block-size: calc(100% + var(--op-space-5));
2424
+ inline-size: var(--op-timeline-line);
2425
+ background: var(--op-color-border);
2426
+ }
2427
+ .op-timeline__item:last-child .op-timeline__marker::after {
2428
+ display: none;
2429
+ }
2430
+ .op-timeline__title {
2431
+ font-weight: 600;
2432
+ }
2433
+ .op-timeline__text {
1701
2434
  color: var(--op-color-fg-muted);
2435
+ font-size: var(--op-font-size-sm);
1702
2436
  }
1703
- .op-table th,
1704
- .op-table td {
1705
- padding: var(--op-table-cell-padding-y, var(--op-space-2)) var(--op-table-cell-padding-x, var(--op-space-3));
1706
- text-align: start;
1707
- border-block-end: var(--op-border-width) solid var(--op-table-border, var(--op-color-border));
2437
+
2438
+ .op-timeline__axis,
2439
+ .op-timeline__lane,
2440
+ .op-timeline__nowrow {
2441
+ display: grid;
2442
+ grid-template-columns: var(--op-timeline-lane-width) 1fr;
2443
+ gap: var(--op-space-2);
2444
+ align-items: center;
1708
2445
  }
1709
- .op-table th {
1710
- background: var(--op-table-header-bg, var(--op-color-surface-2));
1711
- font-weight: var(--op-font-weight-bold);
2446
+ .op-timeline__lane {
2447
+ border-block-start: var(--op-border-width) solid var(--op-color-border);
2448
+ padding-block: var(--op-space-1);
1712
2449
  }
1713
- .op-table--striped tbody tr:nth-child(even) {
1714
- background: var(--op-table-stripe-bg, var(--op-color-surface-2));
2450
+ .op-timeline__lane-name {
2451
+ font-size: var(--op-font-size-sm);
2452
+ overflow: hidden;
2453
+ text-overflow: ellipsis;
2454
+ white-space: nowrap;
1715
2455
  }
1716
- .op-table .op-table__cell--right {
1717
- text-align: end;
2456
+ .op-timeline__track {
2457
+ position: relative;
2458
+ block-size: var(--op-timeline-bar-height);
1718
2459
  }
1719
- .op-table .op-table__cell--center {
1720
- text-align: center;
2460
+ .op-timeline__axis .op-timeline__track {
2461
+ block-size: auto;
2462
+ min-block-size: var(--op-space-4);
1721
2463
  }
1722
- .op-table__empty td {
1723
- text-align: center;
2464
+ .op-timeline__tick {
2465
+ position: absolute;
1724
2466
  color: var(--op-color-fg-muted);
2467
+ font-size: var(--op-font-size-sm);
2468
+ white-space: nowrap;
2469
+ }
2470
+ .op-timeline__bar {
2471
+ --op-timeline-c: var(--op-color-primary);
2472
+ position: absolute;
2473
+ inset-block: 0;
2474
+ display: flex;
2475
+ align-items: center;
2476
+ gap: var(--op-space-1);
2477
+ padding-inline: var(--op-space-2);
2478
+ overflow: hidden;
2479
+ background: var(--op-timeline-c);
2480
+ color: var(--op-color-primary-fg);
2481
+ border-radius: var(--op-radius);
2482
+ font-size: var(--op-font-size-sm);
2483
+ cursor: pointer;
2484
+ }
2485
+ .op-timeline__bar.is-success { --op-timeline-c: var(--op-color-success); color: var(--op-color-surface); }
2486
+ .op-timeline__bar.is-warning { --op-timeline-c: var(--op-color-warning); color: var(--op-color-surface); }
2487
+ .op-timeline__bar.is-danger { --op-timeline-c: var(--op-color-danger); color: var(--op-color-danger-fg); }
2488
+ .op-timeline__bar.is-info { --op-timeline-c: var(--op-color-info); color: var(--op-color-surface); }
2489
+ .op-timeline__bar-text {
2490
+ overflow: hidden;
2491
+ text-overflow: ellipsis;
2492
+ white-space: nowrap;
2493
+ }
2494
+ .op-timeline__nowrow {
2495
+ block-size: 0;
2496
+ }
2497
+ .op-timeline__now {
2498
+ position: absolute;
2499
+ inset-block: calc(-1 * var(--op-space-6)) 0;
2500
+ inline-size: var(--op-timeline-line);
2501
+ background: var(--op-color-danger);
2502
+ pointer-events: none;
1725
2503
  }
1726
2504
  }
1727
2505
 
@@ -1820,6 +2598,42 @@
1820
2598
  }
1821
2599
  }
1822
2600
 
2601
+ @layer optikos {
2602
+ :root {
2603
+ --op-grid-indent: 1.25rem;
2604
+ --op-grid-expander-size: 1.25rem;
2605
+ }
2606
+ .op-grid--tree .op-grid__cell:has(> .op-grid__expander) {
2607
+ padding-inline-start: calc(var(--op-grid-cell-padding-x, var(--op-control-padding-x)) + var(--_depth, 0) * var(--op-grid-indent));
2608
+ }
2609
+ .op-grid__expander {
2610
+ display: inline-flex;
2611
+ flex: none;
2612
+ align-items: center;
2613
+ justify-content: center;
2614
+ inline-size: var(--op-grid-expander-size);
2615
+ block-size: var(--op-grid-expander-size);
2616
+ margin-inline-end: var(--op-space-1);
2617
+ color: var(--op-color-fg-muted);
2618
+ cursor: pointer;
2619
+ transition: transform var(--op-duration) var(--op-easing);
2620
+ }
2621
+ .op-grid__body-row[aria-expanded='false'] .op-grid__expander:not(.is-leaf) {
2622
+ transform: rotate(-90deg);
2623
+ }
2624
+ .op-grid__expander.is-leaf {
2625
+ cursor: default;
2626
+ }
2627
+ .op-grid__expander.is-loading {
2628
+ cursor: progress;
2629
+ }
2630
+ @media (prefers-reduced-motion: reduce) {
2631
+ .op-grid__expander {
2632
+ transition: none;
2633
+ }
2634
+ }
2635
+ }
2636
+
1823
2637
  @layer optikos {
1824
2638
  :root {
1825
2639
  --op-calendar-day-size: 2.25rem;
@@ -2007,6 +2821,22 @@
2007
2821
  }
2008
2822
  }
2009
2823
 
2824
+ @layer optikos {
2825
+ .op-datetimefield__parts {
2826
+ display: flex;
2827
+ gap: var(--op-datetimefield-gap, var(--op-space-2));
2828
+ }
2829
+ .op-datetimefield__parts > .op-field {
2830
+ margin: 0;
2831
+ }
2832
+ .op-datetimefield__parts > .op-field:first-child {
2833
+ flex: 1 1 60%;
2834
+ }
2835
+ .op-datetimefield__parts > .op-field:last-child {
2836
+ flex: 1 1 40%;
2837
+ }
2838
+ }
2839
+
2010
2840
  @layer optikos {
2011
2841
  :root {
2012
2842
  --op-dial-spacing: 0.75rem;
@@ -2211,6 +3041,110 @@
2211
3041
  }
2212
3042
  }
2213
3043
 
3044
+ @layer optikos {
3045
+ :root {
3046
+ --op-imagefield-thumb-size: 4rem;
3047
+ --op-imagefield-remove-icon: 0.875rem;
3048
+ }
3049
+ .op-imagefield__box {
3050
+ display: flex;
3051
+ flex-direction: column;
3052
+ gap: var(--op-space-2);
3053
+ }
3054
+ .op-imagefield__picker {
3055
+ display: none;
3056
+ }
3057
+ .op-imagefield__zone {
3058
+ display: flex;
3059
+ flex-direction: column;
3060
+ align-items: center;
3061
+ justify-content: center;
3062
+ gap: var(--op-space-2);
3063
+ padding: var(--op-space-4);
3064
+ min-block-size: calc(var(--op-imagefield-thumb-size) * 1.5);
3065
+ box-sizing: border-box;
3066
+ color: var(--op-color-fg-muted);
3067
+ background: var(--op-imagefield-zone-bg, var(--op-color-surface));
3068
+ border: var(--op-border-width) dashed var(--op-imagefield-zone-border, var(--op-color-border-strong));
3069
+ border-radius: var(--op-imagefield-radius, var(--op-radius));
3070
+ font: inherit;
3071
+ font-size: var(--op-font-size-sm);
3072
+ text-align: center;
3073
+ cursor: pointer;
3074
+ }
3075
+ .op-imagefield__zone[hidden] {
3076
+ display: none;
3077
+ }
3078
+ .op-imagefield__zone:hover:not(:disabled),
3079
+ .op-imagefield.is-dragover .op-imagefield__zone {
3080
+ background: var(--op-imagefield-zone-hover-bg, var(--op-color-primary-soft));
3081
+ border-color: var(--op-color-primary);
3082
+ }
3083
+ .op-imagefield__zone:focus-visible,
3084
+ .op-imagefield__remove:focus-visible {
3085
+ outline: var(--op-focus-width) solid var(--op-color-focus);
3086
+ outline-offset: var(--op-focus-offset);
3087
+ }
3088
+ .op-imagefield__zone:disabled {
3089
+ cursor: not-allowed;
3090
+ opacity: 0.6;
3091
+ }
3092
+ .op-imagefield.is-invalid .op-imagefield__zone {
3093
+ border-color: var(--op-color-danger);
3094
+ }
3095
+ .op-imagefield__list {
3096
+ display: flex;
3097
+ flex-wrap: wrap;
3098
+ gap: var(--op-space-2);
3099
+ }
3100
+ .op-imagefield__list:empty {
3101
+ display: none;
3102
+ }
3103
+ .op-imagefield__item {
3104
+ position: relative;
3105
+ inline-size: var(--op-imagefield-thumb-size);
3106
+ }
3107
+ .op-imagefield__img {
3108
+ display: block;
3109
+ inline-size: 100%;
3110
+ aspect-ratio: 1;
3111
+ object-fit: cover;
3112
+ background: var(--op-color-surface-2, var(--op-color-bg));
3113
+ border: var(--op-border-width) solid var(--op-color-border);
3114
+ border-radius: var(--op-imagefield-radius, var(--op-radius));
3115
+ }
3116
+ .op-imagefield__name {
3117
+ display: block;
3118
+ overflow: hidden;
3119
+ color: var(--op-color-fg-muted);
3120
+ font-size: var(--op-font-size-sm);
3121
+ text-overflow: ellipsis;
3122
+ white-space: nowrap;
3123
+ }
3124
+ .op-imagefield__remove {
3125
+ position: absolute;
3126
+ inset-block-start: var(--op-space-1);
3127
+ inset-inline-end: var(--op-space-1);
3128
+ display: inline-flex;
3129
+ padding: var(--op-space-1);
3130
+ color: var(--op-color-fg);
3131
+ background: var(--op-color-surface);
3132
+ border: var(--op-border-width) solid var(--op-color-border-strong);
3133
+ border-radius: 50%;
3134
+ cursor: pointer;
3135
+ }
3136
+ .op-imagefield__remove[hidden] {
3137
+ display: none;
3138
+ }
3139
+ .op-imagefield__remove:hover:not(:disabled) {
3140
+ color: var(--op-color-danger);
3141
+ }
3142
+ .op-imagefield__remove .op-icon {
3143
+ inline-size: var(--op-imagefield-remove-icon);
3144
+ block-size: var(--op-imagefield-remove-icon);
3145
+ }
3146
+ }
3147
+
2214
3148
  @layer optikos {
2215
3149
  :root {
2216
3150
  --op-listbox-max-height: 15rem;
@@ -3047,6 +3981,7 @@
3047
3981
  .op-stepform__review-list dd {
3048
3982
  margin: 0;
3049
3983
  overflow-wrap: anywhere;
3984
+ white-space: pre-line; /* FieldList: one line per row */
3050
3985
  }
3051
3986
  /* a step's general message (its validate returned a string) */
3052
3987
  .op-stepform__note {
@@ -3059,6 +3994,126 @@
3059
3994
  }
3060
3995
  }
3061
3996
 
3997
+ @layer optikos {
3998
+ :root {
3999
+ --op-carousel-dot-size: 0.5rem;
4000
+ --op-carousel-gap: 0rem;
4001
+ }
4002
+ .op-carousel {
4003
+ display: flex;
4004
+ flex-direction: column;
4005
+ gap: var(--op-space-2);
4006
+ min-inline-size: 0;
4007
+ font-family: var(--op-font-family);
4008
+ }
4009
+ .op-carousel__viewport {
4010
+ position: relative;
4011
+ }
4012
+ .op-carousel__track {
4013
+ position: relative;
4014
+ display: flex;
4015
+ gap: var(--op-carousel-gap);
4016
+ overflow-x: auto;
4017
+ scroll-snap-type: x mandatory;
4018
+ scroll-behavior: smooth;
4019
+ scrollbar-width: none;
4020
+ border-radius: var(--op-carousel-radius, var(--op-radius));
4021
+ }
4022
+ .op-carousel__track::-webkit-scrollbar {
4023
+ display: none;
4024
+ }
4025
+ .op-carousel__track:focus-visible {
4026
+ outline: var(--op-focus-width) solid var(--op-color-focus);
4027
+ outline-offset: var(--op-focus-offset);
4028
+ }
4029
+ .op-carousel__track > * {
4030
+ flex: 0 0 calc((100% - (var(--op-carousel-per-view, 1) - 1) * var(--op-carousel-gap)) / var(--op-carousel-per-view, 1));
4031
+ min-inline-size: 0;
4032
+ scroll-snap-align: start;
4033
+ }
4034
+ .op-carousel__prev,
4035
+ .op-carousel__next {
4036
+ position: absolute;
4037
+ inset-block-start: 50%;
4038
+ translate: 0 -50%;
4039
+ display: inline-flex;
4040
+ padding: var(--op-space-2);
4041
+ color: var(--op-carousel-arrow-fg, var(--op-color-fg));
4042
+ background: var(--op-carousel-arrow-bg, var(--op-color-surface));
4043
+ border: var(--op-border-width) solid var(--op-color-border);
4044
+ border-radius: 50%;
4045
+ box-shadow: var(--op-shadow);
4046
+ cursor: pointer;
4047
+ }
4048
+ .op-carousel__prev {
4049
+ inset-inline-start: var(--op-space-2);
4050
+ }
4051
+ .op-carousel__next {
4052
+ inset-inline-end: var(--op-space-2);
4053
+ }
4054
+ [dir='rtl'] .op-carousel__prev .op-icon,
4055
+ [dir='rtl'] .op-carousel__next .op-icon {
4056
+ scale: -1 1;
4057
+ }
4058
+ .op-carousel__prev:disabled,
4059
+ .op-carousel__next:disabled {
4060
+ opacity: 0.4;
4061
+ cursor: default;
4062
+ }
4063
+ .op-carousel__bar {
4064
+ display: flex;
4065
+ align-items: center;
4066
+ justify-content: center;
4067
+ gap: var(--op-space-3);
4068
+ }
4069
+ .op-carousel__bar:not(:has(:not([hidden]))) {
4070
+ display: none;
4071
+ }
4072
+ .op-carousel__dots {
4073
+ display: flex;
4074
+ gap: var(--op-space-1);
4075
+ }
4076
+ .op-carousel__dot {
4077
+ inline-size: var(--op-carousel-dot-size);
4078
+ block-size: var(--op-carousel-dot-size);
4079
+ padding: 0;
4080
+ background: var(--op-carousel-dot-bg, var(--op-color-border-strong));
4081
+ border: 0;
4082
+ border-radius: 50%;
4083
+ cursor: pointer;
4084
+ }
4085
+ .op-carousel__dot[aria-current] {
4086
+ background: var(--op-carousel-dot-active-bg, var(--op-color-primary));
4087
+ }
4088
+ .op-carousel__toggle {
4089
+ display: inline-flex;
4090
+ padding: var(--op-space-1);
4091
+ color: var(--op-color-fg);
4092
+ background: none;
4093
+ border: 0;
4094
+ border-radius: var(--op-radius);
4095
+ cursor: pointer;
4096
+ }
4097
+ .op-carousel__prev:focus-visible,
4098
+ .op-carousel__next:focus-visible,
4099
+ .op-carousel__dot:focus-visible,
4100
+ .op-carousel__toggle:focus-visible {
4101
+ outline: var(--op-focus-width) solid var(--op-color-focus);
4102
+ outline-offset: var(--op-focus-offset);
4103
+ }
4104
+ .op-carousel__prev[hidden],
4105
+ .op-carousel__next[hidden],
4106
+ .op-carousel__toggle[hidden],
4107
+ .op-carousel__dots[hidden] {
4108
+ display: none;
4109
+ }
4110
+ @media (prefers-reduced-motion: reduce) {
4111
+ .op-carousel__track {
4112
+ scroll-behavior: auto;
4113
+ }
4114
+ }
4115
+ }
4116
+
3062
4117
  @layer optikos {
3063
4118
  .op-container {
3064
4119
  min-width: 0;
@@ -3947,6 +5002,41 @@
3947
5002
  }
3948
5003
  }
3949
5004
 
5005
+ @layer optikos {
5006
+ .op-shortcuts {
5007
+ display: flex;
5008
+ flex-direction: column;
5009
+ gap: var(--op-space-1);
5010
+ padding: var(--op-space-3) var(--op-space-4);
5011
+ font-family: var(--op-font-family);
5012
+ }
5013
+ .op-shortcuts__group {
5014
+ margin: var(--op-space-3) 0 var(--op-space-1);
5015
+ color: var(--op-color-fg-muted);
5016
+ font-size: var(--op-font-size-sm);
5017
+ font-weight: 600;
5018
+ text-transform: uppercase;
5019
+ }
5020
+ .op-shortcuts__group:first-child {
5021
+ margin-block-start: 0;
5022
+ }
5023
+ .op-shortcuts__row {
5024
+ display: flex;
5025
+ justify-content: space-between;
5026
+ gap: var(--op-space-4);
5027
+ padding-block: var(--op-space-1);
5028
+ }
5029
+ .op-shortcuts__kbd {
5030
+ padding: 0 var(--op-space-2);
5031
+ background: var(--op-color-surface-2);
5032
+ border: var(--op-border-width) solid var(--op-color-border);
5033
+ border-radius: var(--op-radius);
5034
+ font-family: inherit;
5035
+ font-size: var(--op-font-size-sm);
5036
+ white-space: nowrap;
5037
+ }
5038
+ }
5039
+
3950
5040
  @layer optikos {
3951
5041
  :root {
3952
5042
  --op-toast-width: 22rem;
@@ -4196,6 +5286,7 @@
4196
5286
  @layer optikos {
4197
5287
  :root {
4198
5288
  --op-window-width: 28rem;
5289
+ --op-window-max-height: 85dvh;
4199
5290
  }
4200
5291
  .op-window-backdrop {
4201
5292
  position: fixed;
@@ -4210,8 +5301,7 @@
4210
5301
  position: fixed;
4211
5302
  inline-size: var(--op-window-width);
4212
5303
  max-inline-size: calc(100vw - var(--op-space-4));
4213
- max-block-size: calc(100vh - var(--op-space-4));
4214
- max-block-size: calc(100dvh - var(--op-space-4));
5304
+ max-block-size: var(--op-window-max-height);
4215
5305
  background: var(--op-window-bg, var(--op-color-surface));
4216
5306
  border-radius: var(--op-window-radius, var(--op-radius-lg));
4217
5307
  box-shadow: var(--op-window-shadow, var(--op-shadow-lg));