lintje 0.1.1 → 0.3.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 (312) hide show
  1. package/README.md +2 -2
  2. package/dist-elements/actions.js +1 -1
  3. package/dist-elements/charts.js +1 -1
  4. package/dist-elements/chunks/{base-rBLTcEIv.js → base-CbmWxUig.js} +538 -337
  5. package/dist-elements/chunks/{controls-B1455oPG.js → controls-DxmnDSBr.js} +6 -0
  6. package/dist-elements/chunks/{date-format-B5DPGjAw.js → date-format-mHtZyBys.js} +28 -2
  7. package/dist-elements/chunks/dialog-DChINFxD.js +28 -0
  8. package/dist-elements/chunks/disclosure-D39vAR5q.js +4 -0
  9. package/dist-elements/chunks/{disclosure-CHasOudX.js → disclosure-DLkXPUpV.js} +10 -10
  10. package/dist-elements/chunks/download-Ct9q2anY.js +206 -0
  11. package/dist-elements/chunks/{focus-trap-w3vCamJ6.js → focus-trap-BwOxE5BX.js} +1 -1
  12. package/dist-elements/chunks/input-CRW_exv_.js +195 -0
  13. package/dist-elements/chunks/{player-Bq9YGnpt.js → player-B8QXJ0Z5.js} +35 -35
  14. package/dist-elements/chunks/{sentence-CLNJOeXz.js → sentence-B19AyZBS.js} +1 -1
  15. package/dist-elements/chunks/{stagger-9hYzxhMG.js → stagger-BHoOgy0g.js} +163 -135
  16. package/dist-elements/core.js +1 -1
  17. package/dist-elements/custom-elements.json +2049 -1329
  18. package/dist-elements/data-types.json +6798 -0
  19. package/dist-elements/feedback.js +2 -1
  20. package/dist-elements/frame.js +0 -2
  21. package/dist-elements/guides/dashboard.md +9 -1
  22. package/dist-elements/guides/events.md +7 -7
  23. package/dist-elements/guides/loading.md +10 -9
  24. package/dist-elements/guides/page-contents.md +110 -0
  25. package/dist-elements/guides/start.md +13 -1
  26. package/dist-elements/inputs.js +3 -1
  27. package/dist-elements/layout.js +1 -1
  28. package/dist-elements/lintje.js +24508 -23210
  29. package/dist-elements/map.js +1 -1
  30. package/dist-elements/overlays.js +2 -2
  31. package/dist-elements/skills/lintje/SKILL.md +1 -1
  32. package/dist-elements/tables.js +1 -1
  33. package/dist-elements/tag/activity-log.js +18 -18
  34. package/dist-elements/tag/ai-label.js +11 -11
  35. package/dist-elements/tag/announcement.js +36 -76
  36. package/dist-elements/tag/app-search.js +50 -50
  37. package/dist-elements/tag/audio-player.js +57 -57
  38. package/dist-elements/tag/badge.js +1 -1
  39. package/dist-elements/tag/breadcrumbs.js +20 -20
  40. package/dist-elements/tag/button.js +1 -1
  41. package/dist-elements/tag/card-list.js +12 -12
  42. package/dist-elements/tag/card.js +51 -56
  43. package/dist-elements/tag/chart.d.ts +1 -0
  44. package/dist-elements/tag/chart.js +2123 -0
  45. package/dist-elements/tag/chat-answer.js +51 -51
  46. package/dist-elements/tag/chat-composer.js +75 -71
  47. package/dist-elements/tag/chat-message.js +13 -13
  48. package/dist-elements/tag/chat-strip.js +22 -22
  49. package/dist-elements/tag/chat-suggestions.js +12 -12
  50. package/dist-elements/tag/chat.js +56 -56
  51. package/dist-elements/tag/checkbox-group.d.ts +1 -0
  52. package/dist-elements/tag/checkbox-group.js +59 -0
  53. package/dist-elements/tag/checkbox.js +4 -4
  54. package/dist-elements/tag/code.js +7 -7
  55. package/dist-elements/tag/combobox.js +18 -18
  56. package/dist-elements/tag/conflict-alert.js +12 -12
  57. package/dist-elements/tag/copy-button.js +17 -17
  58. package/dist-elements/tag/data-table.js +880 -532
  59. package/dist-elements/tag/date-input.js +44 -52
  60. package/dist-elements/tag/date-range.js +42 -42
  61. package/dist-elements/tag/description-list.js +29 -32
  62. package/dist-elements/tag/dialog.d.ts +1 -0
  63. package/dist-elements/tag/dialog.js +144 -0
  64. package/dist-elements/tag/document-viewer.js +29 -29
  65. package/dist-elements/tag/drawer.js +27 -31
  66. package/dist-elements/tag/empty-state.js +19 -30
  67. package/dist-elements/tag/error-page.d.ts +1 -0
  68. package/dist-elements/tag/error-page.js +109 -0
  69. package/dist-elements/tag/error-summary.js +16 -16
  70. package/dist-elements/tag/expander.js +7 -7
  71. package/dist-elements/tag/explainer.js +11 -11
  72. package/dist-elements/tag/field.js +7 -7
  73. package/dist-elements/tag/file-upload.js +32 -32
  74. package/dist-elements/tag/filter-bar.js +57 -57
  75. package/dist-elements/tag/filter-sheet.js +12 -12
  76. package/dist-elements/tag/filter-zone.js +31 -31
  77. package/dist-elements/tag/footer.js +21 -21
  78. package/dist-elements/tag/form-actions.js +30 -26
  79. package/dist-elements/tag/form-section.js +7 -7
  80. package/dist-elements/tag/form.js +12 -12
  81. package/dist-elements/tag/gallery.js +16 -16
  82. package/dist-elements/tag/grid-item.js +1 -1
  83. package/dist-elements/tag/grid.js +1 -1
  84. package/dist-elements/tag/hero.js +12 -12
  85. package/dist-elements/tag/highlight.js +9 -9
  86. package/dist-elements/tag/icon-button.js +1 -1
  87. package/dist-elements/tag/icon.js +1 -1
  88. package/dist-elements/tag/job-list.js +23 -45
  89. package/dist-elements/tag/kpi-row.js +14 -10
  90. package/dist-elements/tag/kpi.js +276 -77
  91. package/dist-elements/tag/level-meter.js +11 -11
  92. package/dist-elements/tag/list.js +63 -63
  93. package/dist-elements/tag/logo.js +34 -34
  94. package/dist-elements/tag/map.d.ts +1 -0
  95. package/dist-elements/tag/map.js +21935 -0
  96. package/dist-elements/tag/menu-button.js +70 -68
  97. package/dist-elements/tag/modal.js +27 -36
  98. package/dist-elements/tag/multiselect.js +33 -33
  99. package/dist-elements/tag/note.js +6 -6
  100. package/dist-elements/tag/notifications.js +36 -36
  101. package/dist-elements/tag/number-input.js +6 -6
  102. package/dist-elements/tag/page-header.js +138 -35
  103. package/dist-elements/tag/pagination.js +54 -49
  104. package/dist-elements/tag/popover.js +1 -1
  105. package/dist-elements/tag/progress-bar.js +1 -1
  106. package/dist-elements/tag/prose.js +6 -6
  107. package/dist-elements/tag/qr-code.js +8 -8
  108. package/dist-elements/tag/radio-group.js +7 -7
  109. package/dist-elements/tag/range.js +28 -28
  110. package/dist-elements/tag/recording-status.js +16 -16
  111. package/dist-elements/tag/repeater.js +10 -10
  112. package/dist-elements/tag/segmented.js +9 -9
  113. package/dist-elements/tag/select.js +6 -6
  114. package/dist-elements/tag/shell.js +356 -339
  115. package/dist-elements/tag/skeleton.js +1 -1
  116. package/dist-elements/tag/slot-picker.d.ts +1 -0
  117. package/dist-elements/tag/slot-picker.js +74 -0
  118. package/dist-elements/tag/sortable-list.js +18 -18
  119. package/dist-elements/tag/spinner.js +1 -1
  120. package/dist-elements/tag/split-pane.js +12 -12
  121. package/dist-elements/tag/status-dot.js +1 -1
  122. package/dist-elements/tag/stepper.js +21 -21
  123. package/dist-elements/tag/streaming-text.js +21 -21
  124. package/dist-elements/tag/sub-nav.js +40 -39
  125. package/dist-elements/tag/tabs.js +38 -38
  126. package/dist-elements/tag/tag-input.js +19 -19
  127. package/dist-elements/tag/text-editor.js +19 -19
  128. package/dist-elements/tag/text-input.js +6 -6
  129. package/dist-elements/tag/textarea.js +16 -16
  130. package/dist-elements/tag/tile.js +1 -1
  131. package/dist-elements/tag/time-input.js +136 -42
  132. package/dist-elements/tag/toast.js +32 -23
  133. package/dist-elements/tag/toggle.js +4 -4
  134. package/dist-elements/tag/toggletip.js +27 -27
  135. package/dist-elements/tag/tooltip.js +1 -1
  136. package/dist-elements/tag/transcript.js +47 -47
  137. package/dist-elements/tag/translator.js +13 -13
  138. package/dist-elements/tag/tree-view.js +20 -20
  139. package/dist-elements/tag/user-menu.js +42 -41
  140. package/dist-elements/tag/video-player.js +21 -21
  141. package/dist-elements/tokens.css +122 -96
  142. package/dist-elements/types/bundle/charts.d.ts +1 -1
  143. package/dist-elements/types/bundle/feedback.d.ts +1 -0
  144. package/dist-elements/types/bundle/frame.d.ts +0 -2
  145. package/dist-elements/types/bundle/index.d.ts +1 -1
  146. package/dist-elements/types/bundle/inputs.d.ts +2 -0
  147. package/dist-elements/types/bundle/map.d.ts +1 -1
  148. package/dist-elements/types/bundle/overlays.d.ts +1 -1
  149. package/dist-elements/types/components/actions/copy-button/copy-button.d.ts +6 -7
  150. package/dist-elements/types/components/actions/menu-button/menu-button.d.ts +13 -15
  151. package/dist-elements/types/components/actions/qr-code/qr-code.d.ts +9 -9
  152. package/dist-elements/types/components/charts/{chart-tile/chart-tile.d.ts → chart/chart.d.ts} +12 -11
  153. package/dist-elements/types/components/charts/kpi/gauge.d.ts +18 -0
  154. package/dist-elements/types/components/charts/kpi/kpi.d.ts +38 -5
  155. package/dist-elements/types/components/charts/kpi-row/kpi-row.d.ts +1 -7
  156. package/dist-elements/types/components/charts/note/note.d.ts +1 -1
  157. package/dist-elements/types/components/chat/chat/chat.d.ts +8 -10
  158. package/dist-elements/types/components/chat/chat-answer/chat-answer.d.ts +8 -9
  159. package/dist-elements/types/components/chat/chat-composer/chat-composer.d.ts +8 -10
  160. package/dist-elements/types/components/chat/chat-message/chat-message.d.ts +6 -7
  161. package/dist-elements/types/components/chat/chat-strip/chat-strip.d.ts +5 -5
  162. package/dist-elements/types/components/chat/chat-suggestions/chat-suggestions.d.ts +9 -10
  163. package/dist-elements/types/components/content/audio-player/audio-player.d.ts +10 -12
  164. package/dist-elements/types/components/content/code/code.d.ts +2 -3
  165. package/dist-elements/types/components/content/document-viewer/document-viewer.d.ts +8 -9
  166. package/dist-elements/types/components/content/gallery/gallery.d.ts +5 -4
  167. package/dist-elements/types/components/content/highlight/highlight.d.ts +4 -3
  168. package/dist-elements/types/components/content/prose/prose.d.ts +2 -3
  169. package/dist-elements/types/components/content/transcript/transcript.d.ts +12 -25
  170. package/dist-elements/types/components/content/translator/translator.d.ts +11 -15
  171. package/dist-elements/types/components/content/video-player/video-player.d.ts +11 -13
  172. package/dist-elements/types/components/feedback/ai-label/ai-label.d.ts +3 -4
  173. package/dist-elements/types/components/feedback/announcement/announcement.d.ts +3 -7
  174. package/dist-elements/types/components/feedback/conflict-alert/conflict-alert.d.ts +3 -4
  175. package/dist-elements/types/components/feedback/empty-state/empty-state.d.ts +5 -8
  176. package/dist-elements/types/components/feedback/error-page/error-page.d.ts +52 -0
  177. package/dist-elements/types/components/feedback/job-list/job-list.d.ts +9 -12
  178. package/dist-elements/types/components/feedback/level-meter/level-meter.d.ts +4 -6
  179. package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -6
  180. package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +10 -7
  181. package/dist-elements/types/components/feedback/toast/toast.d.ts +8 -9
  182. package/dist-elements/types/components/filters/filter-bar/filter-bar.d.ts +9 -4
  183. package/dist-elements/types/components/filters/filter-sheet/filter-sheet.d.ts +5 -5
  184. package/dist-elements/types/components/filters/filter-zone/filter-zone.d.ts +4 -4
  185. package/dist-elements/types/components/forms/error-summary/error-summary.d.ts +5 -6
  186. package/dist-elements/types/components/forms/form/form.d.ts +5 -5
  187. package/dist-elements/types/components/forms/form-actions/form-actions.d.ts +9 -7
  188. package/dist-elements/types/components/forms/form-section/form-section.d.ts +6 -5
  189. package/dist-elements/types/components/forms/repeater/repeater.d.ts +13 -7
  190. package/dist-elements/types/components/forms/stepper/stepper.d.ts +5 -4
  191. package/dist-elements/types/components/frame/app-search/app-search.d.ts +6 -7
  192. package/dist-elements/types/components/frame/breadcrumbs/breadcrumbs.d.ts +2 -2
  193. package/dist-elements/types/components/frame/footer/footer.d.ts +3 -2
  194. package/dist-elements/types/components/frame/hero/hero.d.ts +7 -9
  195. package/dist-elements/types/components/frame/notifications/notifications.d.ts +5 -9
  196. package/dist-elements/types/components/frame/page-header/page-header.d.ts +12 -15
  197. package/dist-elements/types/components/frame/shell/shell.d.ts +14 -13
  198. package/dist-elements/types/components/frame/sub-nav/sub-nav.d.ts +10 -6
  199. package/dist-elements/types/components/frame/user-menu/user-menu.d.ts +11 -10
  200. package/dist-elements/types/components/index.d.ts +16 -14
  201. package/dist-elements/types/components/inputs/checkbox/checkbox.d.ts +4 -4
  202. package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +33 -0
  203. package/dist-elements/types/components/inputs/combobox/combobox.d.ts +12 -6
  204. package/dist-elements/types/components/inputs/date-input/date-format.d.ts +4 -0
  205. package/dist-elements/types/components/inputs/date-input/date-input.d.ts +5 -5
  206. package/dist-elements/types/components/inputs/date-range/date-range.d.ts +11 -6
  207. package/dist-elements/types/components/inputs/field/field.d.ts +5 -3
  208. package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +6 -8
  209. package/dist-elements/types/components/inputs/multiselect/multiselect.d.ts +4 -6
  210. package/dist-elements/types/components/inputs/number-input/number-input.d.ts +8 -7
  211. package/dist-elements/types/components/inputs/radio-group/radio-group.d.ts +2 -4
  212. package/dist-elements/types/components/inputs/range/range.d.ts +5 -6
  213. package/dist-elements/types/components/inputs/segmented/segmented.d.ts +7 -4
  214. package/dist-elements/types/components/inputs/select/select.d.ts +6 -3
  215. package/dist-elements/types/components/inputs/slot-picker/slot-picker.d.ts +42 -0
  216. package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +7 -5
  217. package/dist-elements/types/components/inputs/text-editor/text-editor.d.ts +6 -6
  218. package/dist-elements/types/components/inputs/text-input/text-input.d.ts +11 -6
  219. package/dist-elements/types/components/inputs/textarea/textarea.d.ts +12 -11
  220. package/dist-elements/types/components/inputs/time-input/time-format.d.ts +4 -0
  221. package/dist-elements/types/components/inputs/time-input/time-input.d.ts +25 -7
  222. package/dist-elements/types/components/inputs/toggle/toggle.d.ts +3 -1
  223. package/dist-elements/types/components/layout/expander/expander.d.ts +9 -10
  224. package/dist-elements/types/components/layout/split-pane/split-pane.d.ts +6 -6
  225. package/dist-elements/types/components/layout/tabs/tabs.d.ts +11 -9
  226. package/dist-elements/types/components/map/{map-tile/map-tile.d.ts → map/map.d.ts} +16 -11
  227. package/dist-elements/types/components/overlays/dialog/dialog.d.ts +49 -0
  228. package/dist-elements/types/components/overlays/drawer/drawer.d.ts +6 -5
  229. package/dist-elements/types/components/overlays/modal/modal.d.ts +7 -12
  230. package/dist-elements/types/components/overlays/toggletip/toggletip.d.ts +3 -7
  231. package/dist-elements/types/components/shared/charts/histogram-chart/histogram-chart.d.ts +33 -0
  232. package/dist-elements/types/components/shared/charts/index.d.ts +7 -2
  233. package/dist-elements/types/components/shared/charts/kinds.d.ts +86 -0
  234. package/dist-elements/types/components/shared/charts/line-chart/line-chart.d.ts +2 -2
  235. package/dist-elements/types/components/shared/charts/map-chart/area.d.ts +16 -0
  236. package/dist-elements/types/components/shared/charts/map-chart/drawings.d.ts +6 -2
  237. package/dist-elements/types/components/shared/charts/map-chart/geo.d.ts +6 -0
  238. package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +45 -2
  239. package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +17 -3
  240. package/dist-elements/types/components/shared/charts/map-chart/map-legend.d.ts +26 -0
  241. package/dist-elements/types/components/shared/charts/map-chart/marks.d.ts +47 -0
  242. package/dist-elements/types/components/shared/charts/map-chart/reveal.d.ts +1 -1
  243. package/dist-elements/types/components/shared/charts/scatter-chart/scatter-chart.d.ts +29 -0
  244. package/dist-elements/types/components/shared/charts/shared/axes.d.ts +21 -4
  245. package/dist-elements/types/components/shared/charts/shared/chart-icons.d.ts +4 -3
  246. package/dist-elements/types/components/shared/charts/shared/chart-states.d.ts +8 -19
  247. package/dist-elements/types/components/shared/charts/shared/controller.d.ts +34 -15
  248. package/dist-elements/types/components/shared/charts/shared/types.d.ts +141 -6
  249. package/dist-elements/types/components/shared/charts/stacked-area-chart/stacked-area-chart.d.ts +13 -0
  250. package/dist-elements/types/components/shared/dialog.d.ts +9 -0
  251. package/dist-elements/types/components/shared/overflow.d.ts +58 -0
  252. package/dist-elements/types/components/tables/activity-log/activity-log.d.ts +2 -3
  253. package/dist-elements/types/components/tables/card/card.d.ts +14 -20
  254. package/dist-elements/types/components/tables/card-list/card-list.d.ts +9 -11
  255. package/dist-elements/types/components/tables/data-table/data-table.d.ts +85 -16
  256. package/dist-elements/types/components/tables/data-table/filters.d.ts +13 -4
  257. package/dist-elements/types/components/tables/description-list/description-list.d.ts +12 -11
  258. package/dist-elements/types/components/tables/list/list.d.ts +9 -20
  259. package/dist-elements/types/components/tables/pagination/pagination.d.ts +12 -11
  260. package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +5 -6
  261. package/dist-elements/types/components/tables/tree-view/tree-view.d.ts +4 -4
  262. package/dist-elements/types/core/format.d.ts +5 -2
  263. package/dist-elements/types/core/media.d.ts +2 -2
  264. package/dist-elements/types/core/motion.d.ts +5 -0
  265. package/dist-elements/types/core/print.d.ts +15 -0
  266. package/dist-elements/types/core/shortcuts.d.ts +2 -2
  267. package/dist-elements/types/icons/icon/icon.d.ts +2 -3
  268. package/dist-elements/types/icons/register.d.ts +1 -1
  269. package/dist-elements/types/primitives/badge/badge.d.ts +9 -5
  270. package/dist-elements/types/primitives/button/button.d.ts +12 -9
  271. package/dist-elements/types/primitives/grid/grid.d.ts +3 -3
  272. package/dist-elements/types/primitives/grid-item/grid-item.d.ts +1 -1
  273. package/dist-elements/types/primitives/icon-button/icon-button.d.ts +7 -5
  274. package/dist-elements/types/primitives/index.d.ts +3 -1
  275. package/dist-elements/types/primitives/popover/popover.d.ts +5 -4
  276. package/dist-elements/types/primitives/progress-bar/progress-bar.d.ts +8 -6
  277. package/dist-elements/types/primitives/shared/announcement-block.d.ts +38 -0
  278. package/dist-elements/types/primitives/shared/empty-state-block.d.ts +26 -0
  279. package/dist-elements/types/primitives/shared/place.d.ts +1 -1
  280. package/dist-elements/types/primitives/shared/tone.d.ts +18 -0
  281. package/dist-elements/types/primitives/skeleton/skeleton.d.ts +1 -1
  282. package/dist-elements/types/primitives/spinner/spinner.d.ts +1 -2
  283. package/dist-elements/types/primitives/status-dot/status-dot.d.ts +4 -5
  284. package/dist-elements/types/primitives/tile/tile.d.ts +17 -5
  285. package/dist-elements/types/primitives/tooltip/tooltip.d.ts +8 -6
  286. package/dist-elements/types/types.d.ts +106 -16
  287. package/dist-icons/functioneel-cirkelselectie.svg +1 -0
  288. package/dist-icons/functioneel-kolommen.svg +1 -0
  289. package/dist-icons/functioneel-lasso.svg +1 -0
  290. package/dist-icons/functioneel-punaise-outline.svg +1 -0
  291. package/dist-icons/functioneel-punaise.svg +1 -0
  292. package/dist-icons/functioneel-rechthoekselectie.svg +1 -0
  293. package/dist-icons/functioneel-selectie.svg +1 -0
  294. package/dist-icons/functioneel-trechter.svg +1 -0
  295. package/package.json +1 -1
  296. package/dist-elements/chunks/confirm-dialog-D5EVGuil.js +0 -4
  297. package/dist-elements/chunks/disclosure-Z7Ny17sS.js +0 -4
  298. package/dist-elements/chunks/download-lFooAfD1.js +0 -226
  299. package/dist-elements/chunks/input-jQVTln7H.js +0 -195
  300. package/dist-elements/tag/chart-tile.d.ts +0 -1
  301. package/dist-elements/tag/chart-tile.js +0 -1474
  302. package/dist-elements/tag/confirm-dialog.d.ts +0 -1
  303. package/dist-elements/tag/confirm-dialog.js +0 -118
  304. package/dist-elements/tag/map-tile.d.ts +0 -1
  305. package/dist-elements/tag/map-tile.js +0 -22292
  306. package/dist-elements/tag/session-expiry.d.ts +0 -1
  307. package/dist-elements/tag/session-expiry.js +0 -184
  308. package/dist-elements/tag/shortcuts.d.ts +0 -1
  309. package/dist-elements/tag/shortcuts.js +0 -104
  310. package/dist-elements/types/components/frame/session-expiry/session-expiry.d.ts +0 -55
  311. package/dist-elements/types/components/frame/shortcuts/shortcuts.d.ts +0 -41
  312. package/dist-elements/types/components/overlays/confirm-dialog/confirm-dialog.d.ts +0 -41
@@ -1,8 +1,8 @@
1
- import { $ as e, Bt as t, Gt as n, Ht as r, Kt as i, Z as a, ut as o } from "../chunks/base-rBLTcEIv.js";
2
- import { a as s, i as c, n as l, t as u } from "../chunks/input-jQVTln7H.js";
1
+ import { Yt as e, Zt as t, bt as n, en as r, lt as i, nn as a, st as o } from "../chunks/base-CbmWxUig.js";
2
+ import { a as s, i as c, n as l, t as u } from "../chunks/input-CRW_exv_.js";
3
3
  import { t as d } from "../chunks/debounce-JXnLMCcF.js";
4
4
  //#region src/components/inputs/textarea/textarea.css?inline
5
- var f = "/* The multi-line text field. */\n:host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n/* Plain takes the type of where it stands, past the UI type every element sets on itself, and\n fills the height the surface gives it. */\n:host([variant='plain']) { display: flex; flex-direction: column; font: inherit; }\n/* Below 768 px: the full width, as `stacked`. */\n@media (max-width: 767px) {\n :host { width: 100%; }\n}\n\n/* --- */\n\n/* `rows` lines at least (three by default); grows with its content up to twelve, then scrolls. */\n.lintje-textarea__control {\n display: block;\n width: 100%;\n min-height: calc(var(--lintje-rows, 3) * 1lh + var(--space-4) + 2px);\n max-height: calc(12lh + var(--space-4) + 2px);\n field-sizing: content;\n padding: var(--space-2) 14px;\n border: 1px solid var(--color-border-field);\n border-radius: var(--radius);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font: var(--text-body);\n resize: vertical;\n overflow-y: auto;\n}\n.lintje-textarea__control::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n/* The padding gives back the pixel the 2 px error border takes. */\n.lintje-textarea__control.is-error { border: 2px solid var(--color-error); padding: 7px 13px; }\n/* Disabled wins over read-only, read-only over error. */\n.lintje-textarea__control.is-readonly {\n border: 1px solid var(--color-border-strong);\n padding: var(--space-2) 14px;\n background: var(--color-bg-subtle);\n color: var(--color-text-primary);\n cursor: default;\n}\n.lintje-textarea__control:disabled {\n border: 1px solid var(--color-border-strong);\n padding: var(--space-2) 14px;\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n}\n\n/* Plain: the surface around it is the field, and draws the focus ring around itself, so the\n ring does not sit tight against the text. It keeps growing; the surface decides the height. */\n:host([variant='plain']) .lintje-field { flex: 1; }\n.lintje-textarea__control--plain { flex: 1; }\n.lintje-textarea__control--plain:focus-visible { outline: none; }\n.lintje-textarea__control--plain,\n.lintje-textarea__control--plain.is-readonly,\n.lintje-textarea__control--plain:disabled {\n min-height: calc(var(--lintje-rows, 3) * 1lh);\n max-height: none;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n resize: none;\n}\n.lintje-textarea__control--plain.is-error { padding: 0 0 var(--space-1); border: 0; border-bottom: 2px solid var(--color-error); }\n\n.lintje-textarea__counter {\n align-self: flex-end;\n font: var(--text-meta);\n color: var(--color-text-muted);\n}\n.lintje-textarea__counter.is-over { color: var(--color-error-text); font-weight: 700; }\n", p = new Intl.NumberFormat("nl-NL");
5
+ var f = "/* The multi-line text field. */\n:host { display: block; min-width: 0; }\n:host([hidden]) { display: none; }\n/* Plain takes the type of where it stands, past the UI type every element sets on itself, and\n fills the height the surface gives it. */\n:host([variant='plain']) { display: flex; flex-direction: column; font: inherit; }\n/* Below 768 px: the full width, as `stacked`. */\n@media screen and (max-width: 767px) {\n :host { width: 100%; }\n}\n\n/* --- */\n\n/* `rows` lines at least (three by default); grows with its content up to twelve, then scrolls. */\n.lintje-textarea__control {\n display: block;\n width: 100%;\n min-height: calc(var(--lintje-rows, 3) * 1lh + var(--space-4) + 2px);\n max-height: calc(12lh + var(--space-4) + 2px);\n field-sizing: content;\n padding: var(--space-2) 14px;\n border: 1px solid var(--color-border-field);\n border-radius: var(--radius);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font: var(--text-body);\n resize: vertical;\n overflow-y: auto;\n}\n.lintje-textarea__control::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n/* The padding gives back the pixel the 2 px error border takes. */\n.lintje-textarea__control.is-error { border: 2px solid var(--color-error); padding: 7px 13px; }\n/* Disabled wins over read-only, read-only over error. */\n.lintje-textarea__control.is-readonly {\n border: 1px solid var(--color-border-strong);\n padding: var(--space-2) 14px;\n background: var(--color-bg-subtle);\n color: var(--color-text-primary);\n cursor: default;\n}\n.lintje-textarea__control:disabled {\n border: 1px solid var(--color-border-strong);\n padding: var(--space-2) 14px;\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n}\n\n/* Plain: the surface around it is the field, and draws the focus ring around itself, so the\n ring does not sit tight against the text. It keeps growing; the surface decides the height. */\n:host([variant='plain']) .lintje-field { flex: 1; }\n.lintje-textarea__control--plain { flex: 1; }\n.lintje-textarea__control--plain:focus-visible { outline: none; }\n.lintje-textarea__control--plain,\n.lintje-textarea__control--plain.is-readonly,\n.lintje-textarea__control--plain:disabled {\n min-height: calc(var(--lintje-rows, 3) * 1lh);\n max-height: none;\n padding: 0;\n border: 0;\n background: transparent;\n font: inherit;\n resize: none;\n}\n.lintje-textarea__control--plain.is-error { padding: 0 0 var(--space-1); border: 0; border-bottom: 2px solid var(--color-error); }\n\n.lintje-textarea__counter {\n align-self: flex-end;\n font: var(--text-meta);\n color: var(--color-text-muted);\n}\n.lintje-textarea__counter.is-over { color: var(--color-error-text); font-weight: 700; }\n", p = new Intl.NumberFormat("nl-NL");
6
6
  function m(e, t) {
7
7
  return `${p.format(e)} / ${p.format(t)} tekens`;
8
8
  }
@@ -20,9 +20,9 @@ var _ = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("f
20
20
  }
21
21
  static {
22
22
  this.styles = [
23
- e,
24
- r(u),
25
- r(f)
23
+ i,
24
+ t(u),
25
+ t(f)
26
26
  ];
27
27
  }
28
28
  static {
@@ -96,7 +96,7 @@ var _ = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("f
96
96
  hintId: this.hintId,
97
97
  errorId: this.errorId
98
98
  });
99
- return [e === n ? "" : e, this.counterShown ? this.counterId : ""].filter(Boolean).join(" ") || n;
99
+ return [e === r ? "" : e, this.counterShown ? this.counterId : ""].filter(Boolean).join(" ") || r;
100
100
  }
101
101
  get counterShown() {
102
102
  return !!this.maxlength && !this.disabled;
@@ -108,10 +108,10 @@ var _ = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("f
108
108
  }, !this.#n || this.#r);
109
109
  if (!this.counterShown) return e;
110
110
  let t = this.maxlength, n = this.value.length;
111
- return i`${e}<span
111
+ return a`${e}<span
112
112
  id=${this.counterId}
113
113
  part="counter"
114
- class=${a({
114
+ class=${o({
115
115
  "lintje-textarea__counter": !0,
116
116
  "is-over": n > t
117
117
  })}
@@ -121,24 +121,24 @@ var _ = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("f
121
121
  }
122
122
  render() {
123
123
  let e = this.message;
124
- return i`<div class="lintje-field">
124
+ return a`<div class="lintje-field">
125
125
  ${this.renderLabel(this.controlId)}
126
126
  <textarea
127
127
  id=${this.controlId}
128
- class=${a({
128
+ class=${o({
129
129
  "lintje-textarea__control": !0,
130
130
  "lintje-textarea__control--plain": this.variant === "plain",
131
131
  "is-error": !!e,
132
132
  "is-readonly": this.readonly
133
133
  })}
134
134
  rows=${this.rows}
135
- ${o({ "--lintje-rows": this.rows })}
135
+ ${n({ "--lintje-rows": this.rows })}
136
136
  .value=${this.value}
137
- placeholder=${this.placeholder || n}
137
+ placeholder=${this.placeholder || r}
138
138
  aria-labelledby=${this.labelId}
139
139
  aria-describedby=${this.describedBy}
140
- aria-invalid=${e ? "true" : n}
141
- aria-required=${this.required ? "true" : n}
140
+ aria-invalid=${e ? "true" : r}
141
+ aria-required=${this.required ? "true" : r}
142
142
  ?required=${this.required}
143
143
  ?readonly=${this.readonly}
144
144
  ?disabled=${this.disabled}
@@ -150,6 +150,6 @@ var _ = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("f
150
150
  </div>`;
151
151
  }
152
152
  };
153
- t("lintje-textarea", v);
153
+ e("lintje-textarea", v);
154
154
  //#endregion
155
155
  export { v as LintjeTextarea, g as counterSpeaks, m as counterText, h as limitMessage };
@@ -1 +1 @@
1
- export { x as LintjeTile } from "../chunks/base-rBLTcEIv.js";
1
+ export { w as LintjeTile } from "../chunks/base-CbmWxUig.js";
@@ -1,57 +1,65 @@
1
- import { $ as e, Bt as t, Gt as n, Ht as r, Kt as i, Z as a, et as o, f as s } from "../chunks/base-rBLTcEIv.js";
2
- import { r as c, t as l } from "../chunks/input-jQVTln7H.js";
1
+ import { Yt as e, Zt as t, en as n, et as r, lt as i, m as a, nn as o, st as s, ut as c } from "../chunks/base-CbmWxUig.js";
2
+ import { r as l, t as u } from "../chunks/input-CRW_exv_.js";
3
3
  //#region src/components/inputs/time-input/time-input.css?inline
4
- var u = ":host {\n display: block;\n min-width: 0;\n width: 120px;\n}\n:host([hidden]) { display: none; }\n:host([stacked]) {\n width: 100%;\n --h-control: var(--h-touch);\n}\n@media (max-width: 767px) {\n :host {\n width: 100%;\n --h-control: var(--h-touch);\n }\n}\n\n/* --- */\n\n.lintje-time-input { position: relative; display: flex; align-items: center; }\n.lintje-time-input__control {\n width: 100%; height: var(--h-control);\n padding: 0 var(--space-10) 0 14px;\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font-size: 1rem;\n font-variant-numeric: tabular-nums;\n border-radius: var(--radius);\n}\n.lintje-time-input__control::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-time-input__control.is-error { border: 2px solid var(--color-error); }\n/* Disabled wins over error: after it, the whole border back to 1 px strong. */\n.lintje-time-input__control:disabled {\n border: 1px solid var(--color-border-strong);\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n}\n/* A sign, not a button: the pointer goes through it to the field. */\n.lintje-time-input__icon {\n position: absolute; right: var(--space-3);\n color: var(--color-text-muted);\n pointer-events: none;\n}\n.lintje-time-input__control:disabled + .lintje-time-input__icon { color: var(--color-text-disabled); }\n", d = 1440, f = /^(\d{1,2})[:.](\d{2})$/, p = /^\d{1,4}$/, m = /^(\d{2}):(\d{2})$/, h = (e) => String(e).padStart(2, "0");
5
- function g(e, t) {
6
- return !Number.isInteger(e) || !Number.isInteger(t) || e < 0 || e > 23 || t < 0 || t > 59 ? null : `${h(e)}:${h(t)}`;
4
+ var d = "/* The time input: a text field with a list button, and the list in a `lintje-popover`. */\n:host {\n display: block;\n min-width: 0;\n width: 120px;\n}\n:host([hidden]) { display: none; }\n:host([stacked]) {\n width: 100%;\n --h-control: var(--h-touch);\n}\n@media screen and (max-width: 767px) {\n :host {\n width: 100%;\n --h-control: var(--h-touch);\n }\n}\n\n/* --- */\n\n/* --- The field ----------------------------------------------------------- */\n.lintje-time-input { position: relative; display: flex; align-items: center; }\n.lintje-time-input__control {\n width: 100%; height: var(--h-control);\n padding: 0 calc(var(--h-control) - 2px + var(--space-2)) 0 14px;\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n color: var(--color-text-primary);\n font-size: 1rem;\n font-variant-numeric: tabular-nums;\n border-radius: var(--radius);\n}\n.lintje-time-input__control::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-time-input__control.is-error { border: 2px solid var(--color-error); }\n/* Disabled wins over error: after it, the whole border back to 1 px strong. */\n.lintje-time-input__control:disabled {\n border: 1px solid var(--color-border-strong);\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n}\n\n.lintje-time-input__toggle {\n position: absolute; top: 1px; right: 1px;\n width: calc(var(--h-control) - 2px); height: calc(var(--h-control) - 2px);\n display: flex; align-items: center; justify-content: center;\n border-left: 1px solid var(--color-border-default);\n background: transparent;\n color: var(--color-accent-text);\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n/* A transparent hit area reaches the target height, never to the left where the typing part is. */\n.lintje-time-input__toggle::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) min(0px, calc(100% - var(--h-target)))\n min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n/* The button steps in past the 2 px error border; a disabled field has 1 px again. */\n.lintje-time-input__control.is-error:not(:disabled) + .lintje-time-input__toggle {\n top: 2px; right: 2px;\n width: calc(var(--h-control) - 4px); height: calc(var(--h-control) - 4px);\n}\n.lintje-time-input__toggle:hover:not(:disabled) { background: var(--color-bg-selected); }\n.lintje-time-input__toggle:disabled { color: var(--color-text-disabled); cursor: not-allowed; }\n\n/* --- The list ------------------------------------------------------------ */\n/* A dense list (`--h-option`): at most seven rows in view, then it scrolls. */\n.lintje-time-input__panel { padding: var(--space-1) 0; }\n.lintje-time-input__list {\n max-height: calc(7 * var(--h-option));\n overflow-y: auto;\n font: var(--text-ui);\n}\n.lintje-time-input__option {\n display: flex; align-items: center;\n width: 100%;\n min-height: var(--h-option);\n padding: 0 14px;\n background: transparent;\n color: var(--color-text-primary);\n font-variant-numeric: tabular-nums;\n cursor: pointer;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-time-input__option:hover { background: var(--color-bg-subtle); }\n.lintje-time-input__option.is-selected { background: var(--color-bg-selected); font-weight: 700; }\n/* The fill alone is about 1.1:1, so the focus ring stands inside the row. */\n.lintje-time-input__option:focus-visible {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: calc(var(--focus-width) * -1);\n}\n\n/* Forced colours drop fills: the chosen row takes an edge inside the row, so none changes size. */\n@media (forced-colors: active) {\n .lintje-time-input__option.is-selected { outline: 2px solid Highlight; outline-offset: -2px; }\n .lintje-time-input__option:focus-visible { outline-color: Highlight; }\n}\n", f = 1440, p = /^(\d{1,2})[:.](\d{2})$/, m = /^\d{1,4}$/, h = /^(\d{2}):(\d{2})$/, g = (e) => String(e).padStart(2, "0");
5
+ function _(e, t) {
6
+ return !Number.isInteger(e) || !Number.isInteger(t) || e < 0 || e > 23 || t < 0 || t > 59 ? null : `${g(e)}:${g(t)}`;
7
7
  }
8
- function _(e) {
9
- let t = e ? m.exec(e) : null;
8
+ function v(e) {
9
+ let t = e ? h.exec(e) : null;
10
10
  if (!t) return null;
11
11
  let [n, r] = [Number(t[1]), Number(t[2])];
12
- return g(n, r) ? n * 60 + r : null;
13
- }
14
- var v = (e) => _(e) !== null;
15
- function y(e) {
16
- let t = (e % d + d) % d;
17
- return `${h(Math.floor(t / 60))}:${h(t % 60)}`;
12
+ return _(n, r) ? n * 60 + r : null;
18
13
  }
14
+ var y = (e) => v(e) !== null;
19
15
  function b(e) {
16
+ let t = (e % f + f) % f;
17
+ return `${g(Math.floor(t / 60))}:${g(t % 60)}`;
18
+ }
19
+ function x(e) {
20
20
  let t = e.trim();
21
21
  if (t === "") return { kind: "empty" };
22
- let n, r, i = f.exec(t);
22
+ let n, r, i = p.exec(t);
23
23
  if (i) n = Number(i[1]), r = Number(i[2]);
24
- else if (p.test(t)) {
24
+ else if (m.test(t)) {
25
25
  let e = t.length <= 2 ? `${t}00` : t;
26
26
  n = Number(e.slice(0, -2)), r = Number(e.slice(-2));
27
27
  } else return { kind: "invalid" };
28
- let a = g(n, r);
28
+ let a = _(n, r);
29
29
  return a ? {
30
30
  kind: "ok",
31
31
  time: a
32
32
  } : { kind: "invalid" };
33
33
  }
34
- function x(e, t) {
35
- return y((_(e) ?? 0) + t);
34
+ function S(e, t) {
35
+ return b((v(e) ?? 0) + t);
36
36
  }
37
- function S(e, t = /* @__PURE__ */ new Date()) {
37
+ function C(e, t = /* @__PURE__ */ new Date()) {
38
38
  let n = t.getHours() * 60 + t.getMinutes(), r = e > 0 ? e : 1;
39
- return y(Math.round(n / r) * r);
39
+ return b(Math.round(n / r) * r);
40
+ }
41
+ function w(e, t, n) {
42
+ return y(t) && e < t ? t : y(n) && e > n ? n : e;
40
43
  }
41
- function C(e, t, n) {
42
- return v(t) && e < t ? t : v(n) && e > n ? n : e;
44
+ function T(e, t, n = 15) {
45
+ let r = n >= 1 ? Math.floor(n) : 1, i = v(e) ?? 0, a = v(t) ?? 1439, o = [];
46
+ for (let e = i; e <= a; e += r) o.push(b(e));
47
+ return o;
48
+ }
49
+ function E(e, t) {
50
+ return e.find((e) => e >= t) ?? e[e.length - 1] ?? "";
43
51
  }
44
52
  //#endregion
45
53
  //#region src/components/inputs/time-input/time-input.ts
46
- var w = class extends c {
54
+ var D = class extends l {
47
55
  constructor(...e) {
48
- super(...e), this.value = null, this.step = 15, this.placeholder = "", this.stacked = !1, this.hint = "uu:mm", this.text = "", this.problem = "";
56
+ super(...e), this.value = null, this.step = 15, this.placeholder = "", this.stacked = !1, this.open = !1, this.hint = "uu:mm", this.text = "", this.problem = "", this.focusTime = "";
49
57
  }
50
58
  static {
51
59
  this.styles = [
52
- e,
53
- r(l),
54
- r(u)
60
+ i,
61
+ t(u),
62
+ t(d)
55
63
  ];
56
64
  }
57
65
  static {
@@ -65,8 +73,13 @@ var w = class extends c {
65
73
  type: Boolean,
66
74
  reflect: !0
67
75
  },
76
+ open: {
77
+ type: Boolean,
78
+ reflect: !0
79
+ },
68
80
  text: { state: !0 },
69
- problem: { state: !0 }
81
+ problem: { state: !0 },
82
+ focusTime: { state: !0 }
70
83
  };
71
84
  }
72
85
  get message() {
@@ -75,17 +88,20 @@ var w = class extends c {
75
88
  get footMessage() {
76
89
  return this.message;
77
90
  }
91
+ get times() {
92
+ return T(this.min, this.max, this.step);
93
+ }
78
94
  willUpdate(e) {
79
- super.willUpdate(e), e.has("value") && (this.text = v(this.value) ? this.value : "", this.problem = "");
95
+ super.willUpdate(e), e.has("value") && (this.text = y(this.value) ? this.value : "", this.problem = "");
80
96
  }
81
97
  outOfBounds(e) {
82
- return v(this.min) && e < this.min ? `Kies een tijd op of na ${this.min}` : v(this.max) && e > this.max ? `Kies een tijd op of voor ${this.max}` : "";
98
+ return y(this.min) && e < this.min ? `Kies een tijd op of na ${this.min}` : y(this.max) && e > this.max ? `Kies een tijd op of voor ${this.max}` : "";
83
99
  }
84
100
  choose(e) {
85
101
  this.problem = "", this.text = e ?? "", e !== this.value && (this.value = e, this.commit(e));
86
102
  }
87
103
  onChange(e) {
88
- let t = e.target.value, n = b(t);
104
+ let t = e.target.value, n = x(t);
89
105
  if (n.kind === "empty") return this.choose(null);
90
106
  if (this.text = t, n.kind === "invalid") {
91
107
  this.problem = "Vul een tijd in als uu:mm";
@@ -95,6 +111,10 @@ var w = class extends c {
95
111
  r ? this.problem = r : this.choose(n.time);
96
112
  }
97
113
  onKeydown(e) {
114
+ if (e.altKey && e.key === "ArrowDown") {
115
+ e.preventDefault(), this.openList();
116
+ return;
117
+ }
98
118
  let t = {
99
119
  ArrowUp: 1,
100
120
  ArrowDown: -1,
@@ -103,12 +123,72 @@ var w = class extends c {
103
123
  }[e.key];
104
124
  if (t === void 0) return;
105
125
  e.preventDefault();
106
- let n = b(e.target.value), r = n.kind === "ok" ? n.time : this.value, i = r === null ? S(this.step) : x(r, t);
107
- this.choose(C(i, this.min, this.max));
126
+ let n = x(e.target.value), r = n.kind === "ok" ? n.time : this.value, i = r === null ? C(this.step) : S(r, t);
127
+ this.choose(w(i, this.min, this.max));
128
+ }
129
+ openList() {
130
+ if (this.disabled) return;
131
+ let e = this.times;
132
+ e.length && (this.focusTime = E(e, this.value ?? C(this.step)), this.open = !0, this.focusOption("center"));
133
+ }
134
+ toggle() {
135
+ this.open ? this.open = !1 : this.openList();
136
+ }
137
+ async focusOption(e = "nearest") {
138
+ await this.updateComplete;
139
+ let t = this.renderRoot.querySelector(".lintje-time-input__option[tabindex=\"0\"]");
140
+ t?.focus({ preventScroll: !0 }), t?.scrollIntoView?.({ block: e });
141
+ }
142
+ onPopoverClose(e) {
143
+ e.stopPropagation(), this.open = !1, e.detail?.reason === "escape" && this.renderRoot.querySelector(".lintje-time-input__toggle")?.focus();
144
+ }
145
+ onFocusOut(e) {
146
+ let t = e.relatedTarget;
147
+ this.open && t && !this.renderRoot.contains(t) && !r(this, t) && (this.open = !1);
148
+ }
149
+ pick(e) {
150
+ this.choose(e), this.open = !1, this.renderRoot.querySelector(".lintje-time-input__control")?.focus();
151
+ }
152
+ onListKeydown(e) {
153
+ let t = this.times, n = Math.max(1, Math.round(60 / this.step)), r = {
154
+ ArrowDown: 1,
155
+ ArrowUp: -1,
156
+ PageDown: n,
157
+ PageUp: -n,
158
+ Home: -t.length,
159
+ End: t.length
160
+ }[e.key];
161
+ if (r === void 0) return;
162
+ e.preventDefault();
163
+ let i = t.indexOf(this.focusTime), a = Math.min(t.length - 1, Math.max(0, i + r));
164
+ this.focusTime = t[a], this.focusOption();
165
+ }
166
+ renderList() {
167
+ return o`<div class="lintje-time-input__panel"><div
168
+ class="lintje-time-input__list"
169
+ role="listbox"
170
+ tabindex="-1"
171
+ aria-label="Tijden"
172
+ @keydown=${this.onListKeydown}
173
+ >
174
+ ${this.times.map((e) => o`<button
175
+ type="button"
176
+ role="option"
177
+ class=${s({
178
+ "lintje-time-input__option": !0,
179
+ "is-selected": e === this.value
180
+ })}
181
+ tabindex=${e === this.focusTime ? "0" : "-1"}
182
+ aria-selected=${e === this.value ? "true" : "false"}
183
+ @click=${() => this.pick(e)}
184
+ >
185
+ ${e}
186
+ </button>`)}
187
+ </div></div>`;
108
188
  }
109
189
  render() {
110
190
  let e = this.message;
111
- return i`<div class="lintje-field">
191
+ return o`<div class="lintje-field" @focusout=${this.onFocusOut}>
112
192
  ${this.renderLabel(this.controlId)}
113
193
  <div class="lintje-time-input">
114
194
  <input
@@ -116,11 +196,11 @@ var w = class extends c {
116
196
  id=${this.controlId}
117
197
  inputmode="numeric"
118
198
  autocomplete="off"
119
- class=${a({
199
+ class=${s({
120
200
  "lintje-time-input__control": !0,
121
201
  "is-error": !!e
122
202
  })}
123
- .value=${s(this.text)}
203
+ .value=${a(this.text)}
124
204
  placeholder=${this.placeholder || n}
125
205
  aria-labelledby=${this.labelId}
126
206
  aria-describedby=${this.describedBy}
@@ -130,15 +210,29 @@ var w = class extends c {
130
210
  @change=${this.onChange}
131
211
  @keydown=${this.onKeydown}
132
212
  />
133
- ${o("functioneel-klok", {
134
- size: 18,
135
- className: "lintje-time-input__icon"
136
- })}
213
+ <button
214
+ type="button"
215
+ class="lintje-time-input__toggle"
216
+ aria-label="Tijden openen"
217
+ aria-haspopup="listbox"
218
+ aria-expanded=${this.open ? "true" : "false"}
219
+ ?disabled=${this.disabled}
220
+ @click=${this.toggle}
221
+ >
222
+ ${c("functioneel-klok", { size: 18 })}
223
+ </button>
137
224
  </div>
225
+ <lintje-popover
226
+ ?open=${this.open && !this.disabled}
227
+ match-width
228
+ @lintje-close=${this.onPopoverClose}
229
+ >
230
+ ${this.open ? this.renderList() : n}
231
+ </lintje-popover>
138
232
  ${this.renderFoot()}
139
233
  </div>`;
140
234
  }
141
235
  };
142
- t("lintje-time-input", w);
236
+ e("lintje-time-input", D);
143
237
  //#endregion
144
- export { w as LintjeTimeInput };
238
+ export { D as LintjeTimeInput };
@@ -1,8 +1,13 @@
1
- import { $ as e, Bt as t, Gt as n, H as r, Ht as i, Kt as a, U as o, W as s, et as c, zt as l } from "../chunks/base-rBLTcEIv.js";
2
- import "../chunks/focus-trap-w3vCamJ6.js";
1
+ import { $ as e, J as t, Jt as n, Q as r, Yt as i, Z as a, Zt as o, en as s, lt as c, nn as l, nt as u, ut as d } from "../chunks/base-CbmWxUig.js";
2
+ import "../chunks/focus-trap-BwOxE5BX.js";
3
3
  //#region src/components/feedback/toast/toast.css?inline
4
- var u = ":host {\n display: contents;\n}\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-toast {\n position: fixed;\n right: var(--space-6);\n bottom: var(--space-6);\n z-index: 70;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n padding: var(--space-4) var(--space-5);\n min-width: 320px;\n max-width: 480px;\n font: var(--text-ui);\n box-shadow: var(--shadow-popover);\n animation: lintje-rise var(--dur-toast) var(--ease-in-motion);\n}\n.lintje-toast--ok { background: var(--color-success-bg); color: var(--color-text-primary); }\n.lintje-toast--error { background: var(--color-error-bg); color: var(--color-text-primary); }\n\n.lintje-toast__icon { flex: none; display: flex; }\n.lintje-toast--ok .lintje-toast__icon { color: var(--color-success-line); }\n.lintje-toast--error .lintje-toast__icon { color: var(--color-error-line); }\n\n.lintje-toast__text { flex: 1; }\n.lintje-toast__action { position: relative; font-weight: 700; text-decoration: underline; color: var(--color-link-on-status); flex: none; }\n/* The close and the action reach the target height through a transparent hit area; the gap\n between them keeps the hit areas apart. */\n.lintje-toast__close {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n color: var(--color-text-muted);\n display: flex; align-items: center; justify-content: center; flex: none;\n}\n.lintje-toast__close::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-toast__action::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n\n@media (max-width: 767px) {\n .lintje-toast { left: var(--space-4); right: var(--space-4); bottom: var(--space-4); min-width: 0; max-width: none; }\n}\n\n/* Forced colours: the fill and shadow are dropped, so the toast takes a CanvasText line. */\n@media (forced-colors: active) {\n .lintje-toast { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n", d = 6e3;
5
- function f(e) {
4
+ var f = ":host {\n display: contents;\n}\n\n/* ------------------------------------------------------------------------ */\n\n.lintje-toast {\n position: fixed;\n right: var(--space-6);\n bottom: var(--space-6);\n z-index: 70;\n display: flex;\n align-items: center;\n gap: var(--space-3);\n padding: var(--space-4) var(--space-5);\n min-width: 320px;\n max-width: 480px;\n font: var(--text-ui);\n box-shadow: var(--shadow-popover);\n animation: lintje-rise var(--dur-toast) var(--ease-in-motion);\n}\n.lintje-toast--ok { background: var(--color-success-bg); color: var(--color-text-primary); }\n.lintje-toast--error { background: var(--color-error-bg); color: var(--color-text-primary); }\n\n.lintje-toast__icon { flex: none; display: flex; }\n.lintje-toast--ok .lintje-toast__icon { color: var(--color-success-line); }\n.lintje-toast--error .lintje-toast__icon { color: var(--color-error-line); }\n\n.lintje-toast--info { background: var(--color-info-bg); color: var(--color-text-primary); }\n.lintje-toast--info .lintje-toast__icon { color: var(--color-info-line); }\n.lintje-toast--warning { background: var(--color-attention-bg); color: var(--color-text-primary); }\n.lintje-toast--warning .lintje-toast__icon { color: var(--color-attention-line); }\n\n.lintje-toast__text { flex: 1; }\n.lintje-toast__action { position: relative; font-weight: 700; text-decoration: underline; color: var(--color-link-on-status); flex: none; }\n/* The close and the action reach the target height through a transparent hit area; the gap\n between them keeps the hit areas apart. */\n.lintje-toast__close {\n position: relative;\n width: var(--h-icon-button); height: var(--h-icon-button);\n color: var(--color-text-muted);\n display: flex; align-items: center; justify-content: center; flex: none;\n}\n.lintje-toast__close::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2));\n}\n.lintje-toast__action::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n\n@media screen and (max-width: 767px) {\n .lintje-toast { left: var(--space-4); right: var(--space-4); bottom: var(--space-4); min-width: 0; max-width: none; }\n}\n\n/* Forced colours: the fill and shadow are dropped, so the toast takes a CanvasText line. */\n@media (forced-colors: active) {\n .lintje-toast { outline: 1px solid CanvasText; outline-offset: -1px; }\n}\n", p = 6e3, m = {
5
+ ok: "success",
6
+ error: "error",
7
+ info: "info",
8
+ warning: "attention"
9
+ };
10
+ function h(e) {
6
11
  for (let t = e.getRootNode();;) {
7
12
  let e = t.querySelector?.("main");
8
13
  if (e) return e;
@@ -10,9 +15,13 @@ function f(e) {
10
15
  t = t.host.getRootNode();
11
16
  }
12
17
  }
13
- var p = class extends l {
18
+ var g = class extends n {
14
19
  static {
15
- this.styles = [e, i(u)];
20
+ this.styles = [
21
+ c,
22
+ o(f),
23
+ o(u)
24
+ ];
16
25
  }
17
26
  static {
18
27
  this.properties = {
@@ -33,18 +42,18 @@ var p = class extends l {
33
42
  #o;
34
43
  #s;
35
44
  constructor() {
36
- super(), this.kind = "ok", this.filled = !1, this.#e = !1, this.#t = !1, this.#n = 0, this.#r = 0, this.#i = null, this.#a = (e) => {
37
- e.key === "Escape" && s(this) && this.#u();
45
+ super(), this.kind = "ok", this.filled = !1, this.#e = !1, this.#t = !1, this.#n = 0, this.#r = 0, this.#i = null, this.#a = (t) => {
46
+ t.key === "Escape" && e(this) && this.#u();
38
47
  }, this.#o = () => {
39
- let e = o(this);
40
- e || (this.#i = r()), this.#l("focus", e);
48
+ let e = r(this);
49
+ e || (this.#i = a()), this.#l("focus", e);
41
50
  }, this.#s = (e) => {
42
51
  let t = e.relatedTarget;
43
52
  (!t || t !== this && !this.contains(t)) && this.#l("focus", !1);
44
53
  }, this.addEventListener("focusout", this.#s);
45
54
  }
46
55
  connectedCallback() {
47
- super.connectedCallback(), document.addEventListener("keydown", this.#a), document.addEventListener("focusin", this.#o), this.#i = r(), this.#c(), !this.filled && !this.#r && (this.#r = requestAnimationFrame(() => {
56
+ super.connectedCallback(), document.addEventListener("keydown", this.#a), document.addEventListener("focusin", this.#o), this.#i = a(), this.#c(), !this.filled && !this.#r && (this.#r = requestAnimationFrame(() => {
48
57
  this.#r = 0, this.filled = !0;
49
58
  }));
50
59
  }
@@ -55,52 +64,52 @@ var p = class extends l {
55
64
  (e.has("kind") || e.has("action")) && this.#c();
56
65
  }
57
66
  #c() {
58
- clearTimeout(this.#n), !(this.kind === "error" || this.action || this.#e || this.#t) && (this.#n = window.setTimeout(() => this.#u(), d));
67
+ clearTimeout(this.#n), !(this.kind === "error" || this.kind === "warning" || this.action || this.#e || this.#t) && (this.#n = window.setTimeout(() => this.#u(), p));
59
68
  }
60
69
  #l(e, t) {
61
70
  let n = this.#e || this.#t;
62
71
  e === "pointer" ? this.#e = t : this.#t = t, this.#e || this.#t ? clearTimeout(this.#n) : n && this.#c();
63
72
  }
64
73
  #u() {
65
- if (o(this)) {
74
+ if (r(this)) {
66
75
  let e = this.#i;
67
- (e?.isConnected && e !== document.body ? e : f(this))?.focus();
76
+ (e?.isConnected && e !== document.body ? e : h(this))?.focus();
68
77
  }
69
78
  this.emit("lintje-close");
70
79
  }
71
80
  render() {
72
- return a`<div
81
+ return l`<div
73
82
  class="lintje-toast lintje-toast--${this.kind}"
74
83
  role="status"
75
84
  aria-live="polite"
76
85
  @mouseenter=${() => this.#l("pointer", !0)}
77
86
  @mouseleave=${() => this.#l("pointer", !1)}
78
87
  >
79
- ${this.filled ? this.content() : n}
88
+ ${this.filled ? this.content() : s}
80
89
  </div>`;
81
90
  }
82
91
  content() {
83
- return a`<span class="lintje-toast__icon" aria-hidden="true"
84
- >${c(this.kind === "ok" ? "functioneel-cirkel-vinkje" : "functioneel-foutmelding", { size: 16 })}</span
92
+ return l`<span class="lintje-toast__icon" aria-hidden="true"
93
+ >${d(t[m[this.kind]], { size: 16 })}</span
85
94
  >
86
95
  <span class="lintje-toast__text"><slot></slot></span>
87
- ${this.action ? a`<button
96
+ ${this.action ? l`<button
88
97
  type="button"
89
98
  class="lintje-toast__action"
90
99
  @click=${() => this.emit("lintje-action")}
91
100
  >
92
101
  ${this.action}
93
- </button>` : n}
102
+ </button>` : s}
94
103
  <button
95
104
  type="button"
96
105
  class="lintje-toast__close"
97
106
  aria-label="Melding sluiten"
98
107
  @click=${() => this.#u()}
99
108
  >
100
- ${c("functioneel-kruis", { size: 16 })}
109
+ ${d("functioneel-kruis", { size: 16 })}
101
110
  </button>`;
102
111
  }
103
112
  };
104
- t("lintje-toast", p);
113
+ i("lintje-toast", g);
105
114
  //#endregion
106
- export { p as LintjeToast };
115
+ export { g as LintjeToast };
@@ -1,12 +1,12 @@
1
- import { $ as e, Bt as t, Gt as n, Ht as r, Kt as i, Z as a } from "../chunks/base-rBLTcEIv.js";
2
- import { r as o, t as s } from "../chunks/input-jQVTln7H.js";
1
+ import { Yt as e, Zt as t, en as n, lt as r, nn as i, st as a } from "../chunks/base-CbmWxUig.js";
2
+ import { r as o, t as s } from "../chunks/input-CRW_exv_.js";
3
3
  //#region src/components/inputs/toggle/toggle.ts
4
4
  var c = class extends o {
5
5
  constructor(...e) {
6
6
  super(...e), this.checked = !1;
7
7
  }
8
8
  static {
9
- this.styles = [e, r(s)];
9
+ this.styles = [r, t(s)];
10
10
  }
11
11
  static {
12
12
  this.properties = { checked: {
@@ -50,6 +50,6 @@ var c = class extends o {
50
50
  </div>`;
51
51
  }
52
52
  };
53
- t("lintje-toggle", c);
53
+ e("lintje-toggle", c);
54
54
  //#endregion
55
55
  export { c as LintjeToggle };
@@ -1,12 +1,12 @@
1
- import { $ as e, Bt as t, G as n, Gt as r, Ht as i, Kt as a, R as o, W as s, Z as c, et as l, j as u, ut as d, z as f, zt as p } from "../chunks/base-rBLTcEIv.js";
2
- import "../chunks/focus-trap-w3vCamJ6.js";
1
+ import { $ as e, G as t, Jt as n, L as r, W as i, Yt as a, Zt as o, bt as s, en as c, et as l, lt as u, nn as d, st as f, ut as p } from "../chunks/base-CbmWxUig.js";
2
+ import "../chunks/focus-trap-BwOxE5BX.js";
3
3
  //#region src/components/overlays/toggletip/toggletip.css?inline
4
- var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what stands here is the popover. */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* Closed, the `role=\"status\"` region is empty and `.visually-hidden`, never `display: none`:\n a region that appeared together with its text would not be announced. */\n\n/* Fixed to the viewport, so a scrolling tile or table cannot cut it off. It stands on the\n popover's layer (85): above a modal's or a drawer's scrim, under the tooltip (90). */\n.lintje-toggletip__popover.is-open {\n position: fixed;\n z-index: 85;\n min-width: min(12rem, calc(100vw - 2 * var(--space-2)));\n max-width: min(20rem, calc(100vw - 2 * var(--space-2)));\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-popover);\n border-radius: var(--radius);\n box-shadow: var(--shadow-popover);\n font: var(--text-small);\n color: var(--color-text-primary);\n text-align: start;\n white-space: normal;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n", h = 4, g = 0, _ = class extends p {
4
+ var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what stands here is the popover. */\n:host {\n display: inline-flex;\n vertical-align: middle;\n}\n:host([hidden]) { display: none; }\n\n/* ------------------------------------------------------------------------ */\n\n/* Closed, the `role=\"status\"` region is empty and `.visually-hidden`, never `display: none`:\n a region that appeared together with its text would not be announced. */\n\n/* Fixed to the viewport, so a scrolling tile or table cannot cut it off. It stands on the\n popover's layer (85): above a modal's or a drawer's scrim, under the tooltip (90). */\n.lintje-toggletip__popover.is-open {\n position: fixed;\n z-index: 85;\n min-width: min(12rem, calc(100vw - 2 * var(--space-2)));\n max-width: min(20rem, calc(100vw - 2 * var(--space-2)));\n padding: var(--space-3) var(--space-4);\n background: var(--color-bg-surface);\n border: 1px solid var(--color-border-popover);\n border-radius: var(--radius);\n box-shadow: var(--shadow-popover);\n font: var(--text-small);\n color: var(--color-text-primary);\n text-align: start;\n white-space: normal;\n animation: lintje-popover-in var(--dur-popover) var(--ease-in-motion);\n}\n", h = 4, g = 0, _ = class extends n {
5
5
  static {
6
6
  this.styles = [
7
- e,
8
- i(u),
9
- i(m)
7
+ u,
8
+ o(r),
9
+ o(m)
10
10
  ];
11
11
  }
12
12
  static {
@@ -32,14 +32,14 @@ var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what s
32
32
  constructor() {
33
33
  super(), this.label = "Toelichting", this.placement = "bottom-start", this.open = !1, this.spot = null, this.popoverId = `lintje-toggletip-${++g}`, this.reflowFrame = 0, this.onOutsideClick = (e) => {
34
34
  this.open && !e.composedPath().includes(this) && this.setOpen(!1);
35
- }, this.onEscape = (e) => {
36
- if (!this.open || e.key !== "Escape" || !s(this)) return;
37
- e.stopPropagation();
38
- let t = e.composedPath().includes(this);
39
- this.setOpen(!1), t && this.trigger?.focus();
35
+ }, this.onEscape = (t) => {
36
+ if (!this.open || t.key !== "Escape" || !e(this)) return;
37
+ t.stopPropagation();
38
+ let n = t.composedPath().includes(this);
39
+ this.setOpen(!1), n && this.trigger?.focus();
40
40
  }, this.onFocusout = (e) => {
41
41
  let t = e.relatedTarget;
42
- this.open && t && (n(t, this) || n(this, t) || this.setOpen(!1));
42
+ this.open && t && (l(t, this) || l(this, t) || this.setOpen(!1));
43
43
  }, this.onReflow = () => {
44
44
  this.open && !this.reflowFrame && (this.reflowFrame = requestAnimationFrame(() => {
45
45
  this.reflowFrame = 0, this.measure();
@@ -56,13 +56,13 @@ var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what s
56
56
  document.removeEventListener("mousedown", this.onOutsideClick), document.removeEventListener("keydown", this.onEscape, !0), window.removeEventListener("scroll", this.onReflow, { capture: !0 }), window.removeEventListener("resize", this.onReflow), this.reflowFrame && cancelAnimationFrame(this.reflowFrame), this.reflowFrame = 0, super.disconnectedCallback();
57
57
  }
58
58
  measure() {
59
- let e = this.trigger, t = this.renderRoot.querySelector(".lintje-toggletip__popover");
60
- if (!e || !t) return;
61
- let n = {
62
- width: t.offsetWidth,
63
- height: t.offsetHeight
64
- }, r = o(e.getBoundingClientRect(), n, f(), this.placement, h), i = this.spot;
65
- i && i.top === r.top && i.bottom === r.bottom && i.left === r.left || (this.spot = r);
59
+ let e = this.trigger, n = this.renderRoot.querySelector(".lintje-toggletip__popover");
60
+ if (!e || !n) return;
61
+ let r = {
62
+ width: n.offsetWidth,
63
+ height: n.offsetHeight
64
+ }, a = i(e.getBoundingClientRect(), r, t(), this.placement, h), o = this.spot;
65
+ o && o.top === a.top && o.bottom === a.bottom && o.left === a.left || (this.spot = a);
66
66
  }
67
67
  willUpdate(e) {
68
68
  super.willUpdate(e), e.has("open") && !this.open && (this.spot = null);
@@ -83,10 +83,10 @@ var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what s
83
83
  };
84
84
  }
85
85
  render() {
86
- let e = l("functioneel-info", { size: 16 }), t = e === r;
87
- return a`<button
86
+ let e = p("functioneel-info", { size: 16 }), t = e === c;
87
+ return d`<button
88
88
  type="button"
89
- class=${c({
89
+ class=${f({
90
90
  "lintje-icon-button": !0,
91
91
  "lintje-icon-button--flat": !0,
92
92
  "lintje-icon-button--text": t,
@@ -98,22 +98,22 @@ var m = "/* The trigger is the icon button's drawing (`icon-button.css`); what s
98
98
  aria-controls=${this.popoverId}
99
99
  @click=${() => this.setOpen(!this.open)}
100
100
  >
101
- ${t ? a`<span class="lintje-icon-button__label">${this.label}</span>` : e}
101
+ ${t ? d`<span class="lintje-icon-button__label">${this.label}</span>` : e}
102
102
  </button>
103
103
  <div
104
104
  id=${this.popoverId}
105
- class=${c({
105
+ class=${f({
106
106
  "lintje-toggletip__popover": !0,
107
107
  "is-open": this.open,
108
108
  "visually-hidden": !this.open
109
109
  })}
110
110
  role="status"
111
- ${d(this.open ? this.spotStyle() : {})}
111
+ ${s(this.open ? this.spotStyle() : {})}
112
112
  >
113
- ${this.open ? a`<slot></slot>` : r}
113
+ ${this.open ? d`<slot></slot>` : c}
114
114
  </div>`;
115
115
  }
116
116
  };
117
- t("lintje-toggletip", _);
117
+ a("lintje-toggletip", _);
118
118
  //#endregion
119
119
  export { _ as LintjeToggletip };
@@ -1 +1 @@
1
- export { M as LintjeTooltip, N as TOOLTIP_DELAY, P as TOOLTIP_LINGER } from "../chunks/base-rBLTcEIv.js";
1
+ export { R as LintjeTooltip, z as TOOLTIP_DELAY, B as TOOLTIP_LINGER } from "../chunks/base-CbmWxUig.js";