lintje 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/dist-elements/actions.js +1 -5
  2. package/dist-elements/charts.js +1 -5
  3. package/dist-elements/chat.js +1 -6
  4. package/dist-elements/chunks/base-DuuwEY22.js +224 -0
  5. package/dist-elements/chunks/chart-styles-zJy-DGvZ.js +44 -0
  6. package/dist-elements/chunks/controls-IwMNNdZt.js +1 -0
  7. package/dist-elements/chunks/copied-Dx6jfxoK.js +1 -0
  8. package/dist-elements/chunks/date-format-5bii3QLP.js +1 -0
  9. package/dist-elements/chunks/debounce-Dfwdcv-z.js +1 -0
  10. package/dist-elements/chunks/dialog-CuB90unp.js +1 -0
  11. package/dist-elements/chunks/dialog-close-CIwpGpo7.js +1 -0
  12. package/dist-elements/chunks/disclosure-DHZz0V4I.js +22 -0
  13. package/dist-elements/chunks/disclosure-DjLQzn9n.js +1 -0
  14. package/dist-elements/chunks/download-D1wbtARJ.js +13 -0
  15. package/dist-elements/chunks/focus-trap-qYvMiFZF.js +1 -0
  16. package/dist-elements/chunks/frame-resize-observer-BGZg6VbV.js +1 -0
  17. package/dist-elements/chunks/input-CTxDOlLs.js +1 -0
  18. package/dist-elements/chunks/input-fzGBdp-5.js +8 -0
  19. package/dist-elements/chunks/key-CAxrgBxD.js +1 -0
  20. package/dist-elements/chunks/live-message-CYZ-Ch7D.js +1 -0
  21. package/dist-elements/chunks/playback-gEUDw038.js +1 -0
  22. package/dist-elements/chunks/player-Dh7ZHcMF.js +39 -0
  23. package/dist-elements/chunks/prose-DOF7h3je.js +1 -0
  24. package/dist-elements/chunks/sentence-DCIShaRE.js +3 -0
  25. package/dist-elements/chunks/sentence-end-DqHdi7Wb.js +1 -0
  26. package/dist-elements/chunks/stagger-nGiD5JgJ.js +133 -0
  27. package/dist-elements/chunks/transition-DZKyyCQs.js +1 -0
  28. package/dist-elements/content.js +1 -11
  29. package/dist-elements/core.js +1 -1
  30. package/dist-elements/custom-elements.json +121 -96
  31. package/dist-elements/data-types.json +140 -17
  32. package/dist-elements/dev.js +1 -31
  33. package/dist-elements/feedback.js +1 -11
  34. package/dist-elements/filters.js +1 -3
  35. package/dist-elements/forms.js +1 -7
  36. package/dist-elements/frame.js +1 -9
  37. package/dist-elements/guides/dashboard.md +3 -2
  38. package/dist-elements/guides/events.md +12 -2
  39. package/dist-elements/guides/start.md +6 -3
  40. package/dist-elements/inputs.js +1 -21
  41. package/dist-elements/layout.js +1 -4
  42. package/dist-elements/lintje.js +3569 -43561
  43. package/dist-elements/map.js +1 -1
  44. package/dist-elements/overlays.js +1 -5
  45. package/dist-elements/tables.js +1 -9
  46. package/dist-elements/tag/activity-log.js +10 -58
  47. package/dist-elements/tag/ai-label.js +5 -38
  48. package/dist-elements/tag/announcement.js +9 -105
  49. package/dist-elements/tag/app-search.js +22 -173
  50. package/dist-elements/tag/audio-player.js +49 -263
  51. package/dist-elements/tag/badge.js +1 -1
  52. package/dist-elements/tag/breadcrumbs.js +11 -76
  53. package/dist-elements/tag/button.js +1 -1
  54. package/dist-elements/tag/card-list.js +8 -77
  55. package/dist-elements/tag/card.js +36 -171
  56. package/dist-elements/tag/chart.js +457 -2291
  57. package/dist-elements/tag/chat-answer.js +50 -195
  58. package/dist-elements/tag/chat-composer.js +48 -403
  59. package/dist-elements/tag/chat-message.js +13 -75
  60. package/dist-elements/tag/chat-strip.js +20 -100
  61. package/dist-elements/tag/chat-suggestions.js +8 -51
  62. package/dist-elements/tag/chat.js +33 -191
  63. package/dist-elements/tag/checkbox-group.js +6 -46
  64. package/dist-elements/tag/checkbox.js +8 -47
  65. package/dist-elements/tag/code.js +9 -55
  66. package/dist-elements/tag/combobox.js +22 -180
  67. package/dist-elements/tag/conflict-alert.js +12 -67
  68. package/dist-elements/tag/copy-button.js +11 -102
  69. package/dist-elements/tag/data-table.js +302 -1538
  70. package/dist-elements/tag/date-input.js +28 -157
  71. package/dist-elements/tag/date-range.js +30 -231
  72. package/dist-elements/tag/description-list.js +18 -87
  73. package/dist-elements/tag/dialog.js +10 -120
  74. package/dist-elements/tag/document-viewer.js +30 -210
  75. package/dist-elements/tag/drawer.js +10 -86
  76. package/dist-elements/tag/empty-state.js +1 -58
  77. package/dist-elements/tag/error-page.js +13 -90
  78. package/dist-elements/tag/error-summary.js +15 -74
  79. package/dist-elements/tag/expander.js +5 -68
  80. package/dist-elements/tag/explainer.js +6 -61
  81. package/dist-elements/tag/field.js +5 -50
  82. package/dist-elements/tag/file-upload.js +40 -234
  83. package/dist-elements/tag/filter-bar.js +48 -221
  84. package/dist-elements/tag/filter-sheet.js +7 -77
  85. package/dist-elements/tag/filter-zone.js +25 -202
  86. package/dist-elements/tag/find.js +16 -110
  87. package/dist-elements/tag/footer.js +14 -36
  88. package/dist-elements/tag/form-actions.js +3 -103
  89. package/dist-elements/tag/form-section.js +6 -49
  90. package/dist-elements/tag/form.js +5 -291
  91. package/dist-elements/tag/gallery.js +10 -48
  92. package/dist-elements/tag/grid-item.js +1 -1
  93. package/dist-elements/tag/grid.js +1 -1
  94. package/dist-elements/tag/hero.js +7 -50
  95. package/dist-elements/tag/highlight.js +3 -57
  96. package/dist-elements/tag/icon-button.js +1 -1
  97. package/dist-elements/tag/icon.js +1 -1
  98. package/dist-elements/tag/job-list.js +4 -117
  99. package/dist-elements/tag/kpi-row.js +10 -30
  100. package/dist-elements/tag/kpi.js +74 -357
  101. package/dist-elements/tag/level-meter.js +9 -52
  102. package/dist-elements/tag/list.js +36 -225
  103. package/dist-elements/tag/log-viewer.js +101 -707
  104. package/dist-elements/tag/logo.js +27 -82
  105. package/dist-elements/tag/map.js +825 -21851
  106. package/dist-elements/tag/menu-button.js +35 -286
  107. package/dist-elements/tag/modal.js +16 -82
  108. package/dist-elements/tag/multiselect.js +28 -157
  109. package/dist-elements/tag/note.js +3 -22
  110. package/dist-elements/tag/notifications.js +31 -157
  111. package/dist-elements/tag/number-input.js +20 -88
  112. package/dist-elements/tag/page-header.js +17 -178
  113. package/dist-elements/tag/pagination.js +31 -232
  114. package/dist-elements/tag/popover.js +1 -1
  115. package/dist-elements/tag/progress-bar.js +1 -1
  116. package/dist-elements/tag/prose.js +1 -31
  117. package/dist-elements/tag/qr-code.js +6 -878
  118. package/dist-elements/tag/radio-group.js +11 -53
  119. package/dist-elements/tag/range.js +28 -222
  120. package/dist-elements/tag/recording-status.js +10 -82
  121. package/dist-elements/tag/repeater-row.js +1 -1
  122. package/dist-elements/tag/repeater.js +8 -139
  123. package/dist-elements/tag/segmented.js +12 -73
  124. package/dist-elements/tag/select.js +7 -49
  125. package/dist-elements/tag/shell.js +257 -998
  126. package/dist-elements/tag/skeleton.js +1 -1
  127. package/dist-elements/tag/slot-picker.js +13 -56
  128. package/dist-elements/tag/sortable-list.js +19 -193
  129. package/dist-elements/tag/spinner.js +1 -1
  130. package/dist-elements/tag/split-pane.js +10 -155
  131. package/dist-elements/tag/status-dot.js +1 -1
  132. package/dist-elements/tag/stepper.js +18 -118
  133. package/dist-elements/tag/streaming-text.js +14 -94
  134. package/dist-elements/tag/sub-nav.js +27 -141
  135. package/dist-elements/tag/tabs.js +27 -139
  136. package/dist-elements/tag/tag-input.js +32 -215
  137. package/dist-elements/tag/text-editor.js +31 -397
  138. package/dist-elements/tag/text-input.js +21 -110
  139. package/dist-elements/tag/textarea.js +11 -139
  140. package/dist-elements/tag/tile.js +1 -1
  141. package/dist-elements/tag/time-input.js +17 -199
  142. package/dist-elements/tag/toast.js +12 -100
  143. package/dist-elements/tag/toggle.js +6 -39
  144. package/dist-elements/tag/toggletip.js +8 -108
  145. package/dist-elements/tag/token-value.js +2 -72
  146. package/dist-elements/tag/tooltip.js +1 -1
  147. package/dist-elements/tag/transcript.js +31 -278
  148. package/dist-elements/tag/translator.js +7 -80
  149. package/dist-elements/tag/tree-view.js +22 -156
  150. package/dist-elements/tag/user-menu.js +29 -175
  151. package/dist-elements/tag/video-player.js +15 -154
  152. package/dist-elements/tokens.css +24 -8
  153. package/dist-elements/tokens.json +10 -6
  154. package/dist-elements/types/components/charts/chart/chart.d.ts +9 -1
  155. package/dist-elements/types/components/content/log-viewer/log-viewer.d.ts +0 -2
  156. package/dist-elements/types/components/feedback/recording-status/recording-status.d.ts +5 -2
  157. package/dist-elements/types/components/feedback/streaming-text/streaming-text.d.ts +1 -0
  158. package/dist-elements/types/components/forms/repeater/repeater.d.ts +1 -1
  159. package/dist-elements/types/components/forms/stepper/stepper.d.ts +12 -1
  160. package/dist-elements/types/components/frame/notifications/notifications.d.ts +0 -2
  161. package/dist-elements/types/components/inputs/checkbox-group/checkbox-group.d.ts +3 -2
  162. package/dist-elements/types/components/inputs/file-upload/file-upload.d.ts +12 -2
  163. package/dist-elements/types/components/inputs/find/find.d.ts +0 -3
  164. package/dist-elements/types/components/inputs/number-input/number-input.d.ts +3 -2
  165. package/dist-elements/types/components/inputs/range/range.d.ts +1 -0
  166. package/dist-elements/types/components/inputs/shared/input.d.ts +25 -3
  167. package/dist-elements/types/components/inputs/tag-input/tag-input.d.ts +0 -1
  168. package/dist-elements/types/components/map/map/map.d.ts +9 -1
  169. package/dist-elements/types/components/overlays/popover/popover.d.ts +6 -1
  170. package/dist-elements/types/components/shared/charts/map-chart/drawings.d.ts +4 -1
  171. package/dist-elements/types/components/shared/charts/map-chart/leaflet.d.ts +1 -1
  172. package/dist-elements/types/components/shared/charts/map-chart/map-chart.d.ts +5 -2
  173. package/dist-elements/types/components/shared/charts/map-chart/marks.d.ts +15 -4
  174. package/dist-elements/types/components/shared/charts/map-chart/series-style.d.ts +10 -0
  175. package/dist-elements/types/components/shared/charts/pie-chart/pie-chart.d.ts +2 -1
  176. package/dist-elements/types/components/shared/charts/shared/axes.d.ts +5 -3
  177. package/dist-elements/types/components/shared/charts/shared/controller.d.ts +15 -3
  178. package/dist-elements/types/components/shared/charts/shared/mark-select.d.ts +2 -1
  179. package/dist-elements/types/components/shared/charts/shared/runs.d.ts +7 -0
  180. package/dist-elements/types/components/shared/charts/shared/types.d.ts +57 -3
  181. package/dist-elements/types/components/shared/controls.d.ts +2 -0
  182. package/dist-elements/types/components/shared/disclosure.d.ts +2 -2
  183. package/dist-elements/types/components/shared/frame-resize-observer.d.ts +12 -0
  184. package/dist-elements/types/components/shared/live-message.d.ts +17 -0
  185. package/dist-elements/types/components/shared/transition.d.ts +12 -0
  186. package/dist-elements/types/components/tables/card/card.d.ts +0 -5
  187. package/dist-elements/types/components/tables/card-list/card-list.d.ts +2 -5
  188. package/dist-elements/types/components/tables/data-table/data-table.d.ts +8 -5
  189. package/dist-elements/types/components/tables/data-table/filters.d.ts +4 -2
  190. package/dist-elements/types/components/tables/description-list/description-list.d.ts +3 -2
  191. package/dist-elements/types/components/tables/sortable-list/sortable-list.d.ts +1 -1
  192. package/dist-elements/types/core/element.d.ts +5 -2
  193. package/dist-elements/types/core/links.d.ts +2 -0
  194. package/dist-elements/types/core/styles.d.ts +2 -0
  195. package/dist-elements/types/types.d.ts +8 -4
  196. package/package.json +2 -2
  197. package/dist-elements/chunks/base-Bd2pmq86.js +0 -2865
  198. package/dist-elements/chunks/chart-styles-DEd0uIWK.js +0 -108
  199. package/dist-elements/chunks/controls-_4ac1Lpz.js +0 -121
  200. package/dist-elements/chunks/copied-7BXYVkXT.js +0 -4
  201. package/dist-elements/chunks/date-format-DxP9yfDp.js +0 -152
  202. package/dist-elements/chunks/debounce-JXnLMCcF.js +0 -25
  203. package/dist-elements/chunks/dialog-BNbkcAxH.js +0 -28
  204. package/dist-elements/chunks/dialog-close-u75fVEw4.js +0 -4
  205. package/dist-elements/chunks/disclosure-BK-MJsEn.js +0 -4
  206. package/dist-elements/chunks/disclosure-CcTr_FLd.js +0 -64
  207. package/dist-elements/chunks/download-BGe7rpQo.js +0 -103
  208. package/dist-elements/chunks/focus-trap-Cl99vti9.js +0 -73
  209. package/dist-elements/chunks/input-Dg1o0Sfu.js +0 -4
  210. package/dist-elements/chunks/input-KqBT3qWD.js +0 -195
  211. package/dist-elements/chunks/key-D5wy9ZTj.js +0 -4
  212. package/dist-elements/chunks/playback-DZJ_NMXv.js +0 -133
  213. package/dist-elements/chunks/player-BRG7bk_h.js +0 -208
  214. package/dist-elements/chunks/prose-CmKVp5kL.js +0 -4
  215. package/dist-elements/chunks/sentence-DIByCXQV.js +0 -15
  216. package/dist-elements/chunks/sentence-end-8jlqKJ5P.js +0 -8
  217. package/dist-elements/chunks/stagger-DGRHP_We.js +0 -515
@@ -1,392 +1,31 @@
1
- import { Yt as e, Zt as t, en as n, et as r, lt as i, nn as a, st as o } from "../chunks/base-Bd2pmq86.js";
2
- import { n as s } from "../chunks/input-KqBT3qWD.js";
3
- import { t as c } from "../chunks/input-Dg1o0Sfu.js";
4
- import { t as l } from "../chunks/prose-CmKVp5kL.js";
5
- import "./text-input.js";
6
- //#region src/components/inputs/text-editor/text-editor.css?inline
7
- var u = "/* The text editor: a frame with the toolbar on top and the editing surface under it. */\n:host {\n display: block;\n min-width: 0;\n}\n:host([hidden]) { display: none; }\n\n/* --- */\n\n/* 1 px field border; with the focus in the surface the ring goes round the whole frame. */\n.lintje-text-editor {\n display: flex; flex-direction: column;\n min-width: 0;\n border: 1px solid var(--color-border-field);\n background: var(--color-bg-surface);\n}\n.lintje-text-editor:has(.lintje-text-editor__surface:focus-visible) {\n outline: var(--focus-width) solid var(--color-focus);\n outline-offset: var(--focus-offset);\n}\n.lintje-text-editor.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-text-editor.is-disabled { border: 1px solid var(--color-border-strong); }\n\n/* --- The toolbar --------------------------------------------------------- */\n/* The row gap keeps the buttons' hit areas from overlapping. */\n.lintje-text-editor__toolbar {\n display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-1);\n padding: var(--space-1);\n background: var(--color-bg-page);\n border-bottom: 1px solid var(--color-border-default);\n}\n/* A transparent hit area, above and below only, reaches the target height. */\n.lintje-text-editor__tool {\n position: relative;\n flex: none;\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: inline-flex; align-items: center; justify-content: center;\n border: 1px solid transparent;\n background: transparent;\n color: var(--color-text-primary);\n font-size: 1rem;\n transition: background var(--dur-hover) var(--ease-in-motion);\n}\n.lintje-text-editor__tool::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n.lintje-text-editor__tool--bold,\n.lintje-text-editor__tool--heading { font-weight: 700; }\n.lintje-text-editor__tool--italic { font-style: italic; }\n/* The text fallback while an icon has no file. */\n.lintje-text-editor__tool--word {\n width: auto; min-width: var(--h-icon-button);\n padding: 0 var(--space-2);\n font-size: 0.875rem; font-weight: 700;\n}\n.lintje-text-editor__tool:hover:not(:disabled):not(.is-idle) { background: var(--color-bg-subtle); }\n/* The border keeps an edge in dark. */\n.lintje-text-editor__tool.is-pressed {\n background: var(--color-action-primary);\n color: var(--color-action-primary-text);\n border-color: var(--color-action-primary-border);\n}\n.lintje-text-editor__tool.is-pressed:hover:not(:disabled) { background: var(--color-action-primary); }\n.lintje-text-editor__tool.is-idle,\n.lintje-text-editor__tool:disabled { color: var(--color-text-disabled); cursor: not-allowed; }\n\n/* --- The surface --------------------------------------------------------- */\n.lintje-text-editor__surface {\n min-height: 132px;\n padding: var(--space-3);\n overflow-wrap: anywhere;\n}\n/* The ring is the frame's, not the surface's. */\n.lintje-text-editor__surface:focus-visible { outline: none; }\n.lintje-text-editor.is-disabled .lintje-text-editor__surface {\n background: var(--color-bg-subtle);\n color: var(--color-text-disabled);\n cursor: not-allowed;\n}\n/* The prose sheet colours its headings itself. */\n.lintje-text-editor.is-disabled .lintje-text-editor__surface * { color: inherit; }\n\n/* --- The link field ------------------------------------------------------ */\n.lintje-text-editor__link { width: 280px; max-width: 100%; padding: var(--space-4); }\n\n/* Below 768 px the toolbar scrolls sideways; at 48 px high the hit areas stay whole. */\n@media screen and (max-width: 767px) {\n .lintje-text-editor__toolbar { flex-wrap: nowrap; overflow-x: auto; }\n}\n\n/* Forced colours drop the fill: the border turns Highlight, 2 px inside the fixed box. */\n@media (forced-colors: active) {\n .lintje-text-editor__tool.is-pressed { border: 2px solid Highlight; }\n}\n", d = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
8
- function f(e) {
9
- let t = (e ?? "").replace(/\p{Cc}/gu, "").trim();
10
- if (!t) return null;
11
- let n = /^([a-z][a-z0-9+.-]*):/i.exec(t);
12
- return n && ![
13
- "http",
14
- "https",
15
- "mailto",
16
- "tel"
17
- ].includes(n[1].toLowerCase()) ? null : t.replace(/ /g, "%20").replace(/\(/g, "%28").replace(/\)/g, "%29");
18
- }
19
- var p = /[\\`*_{}[\]()#+\-.!>~|]/;
20
- function m(e) {
21
- let t = "", n = 0;
22
- for (; n < e.length;) {
23
- let r = e[n];
24
- if (r === "\\" && p.test(e[n + 1] ?? "")) t += d(e[n + 1]), n += 2;
25
- else if (r === "\n") t += "<br>", n += 1;
26
- else {
27
- if (e.startsWith("**", n)) {
28
- let r = h(e, "**", n + 2);
29
- if (r > n + 2) {
30
- t += `<strong>${m(e.slice(n + 2, r))}</strong>`, n = r + 2;
31
- continue;
32
- }
33
- }
34
- if (r === "*" || r === "_") {
35
- let i = h(e, r, n + 1);
36
- if (i > n + 1) {
37
- t += `<em>${m(e.slice(n + 1, i))}</em>`, n = i + 1;
38
- continue;
39
- }
40
- }
41
- if (r === "[") {
42
- let r = /^\[((?:\\.|[^\]\\])+)\]\(([^()\s]+)\)/.exec(e.slice(n));
43
- if (r) {
44
- let e = f(r[2]), i = m(r[1]);
45
- t += e ? `<a href="${d(e)}">${i}</a>` : i, n += r[0].length;
46
- continue;
47
- }
48
- }
49
- t += d(r), n += 1;
50
- }
51
- }
52
- return t;
53
- }
54
- function h(e, t, n) {
55
- for (let r = n; r < e.length; r++) if (e[r] === "\\") r += 1;
56
- else {
57
- if (t === "**" && e.startsWith("**", r)) return r;
58
- if (t.length === 1 && e[r] === t) {
59
- if (t === "*" && e[r + 1] === "*") {
60
- let t = h(e, "**", r + 2);
61
- if (t === -1) return -1;
62
- r = t + 1;
63
- continue;
64
- }
65
- return r;
66
- }
67
- }
68
- return -1;
69
- }
70
- var g = /^#{1,6}\s+(.*)$/, _ = /^[-*]\s+(.*)$/;
71
- function v(e) {
72
- let t = (e ?? "").replace(/\r\n?/g, "\n").split("\n"), n = [], r = [], i = [], a = () => {
73
- r.length && n.push(`<p>${m(r.join("\n"))}</p>`), r = [];
74
- }, o = () => {
75
- i.length && n.push(`<ul>${i.map((e) => `<li>${e}</li>`).join("")}</ul>`), i = [];
76
- };
77
- for (let e of t) {
78
- let t = e.trimEnd(), s = g.exec(t), c = _.exec(t);
79
- t.trim() === "" ? (a(), o()) : s ? (a(), o(), n.push(`<h3>${m(s[1].trim())}</h3>`)) : c ? (a(), i.push(m(c[1].trim()))) : (o(), r.push(t.trim()));
80
- }
81
- return a(), o(), n.join("");
82
- }
83
- var y = (e) => e.replace(/([\\*_[\]])/g, "\\$1"), b = (e) => e.replace(/^(\s*)(#|[-*+](?=\s))/, "$1\\$2"), x = /* @__PURE__ */ new Set(/* @__PURE__ */ "ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGCAPTION.FIGURE.FOOTER.FORM.HEADER.HR.MAIN.NAV.P.PRE.SECTION.TABLE.TBODY.THEAD.TFOOT.TR.TD.TH".split(".")), S = /* @__PURE__ */ new Set([
84
- "H1",
85
- "H2",
86
- "H3",
87
- "H4",
88
- "H5",
89
- "H6"
90
- ]), C = /* @__PURE__ */ new Set(["UL", "OL"]), w = /* @__PURE__ */ new Set([
91
- "SCRIPT",
92
- "STYLE",
93
- "TEMPLATE",
94
- "NOSCRIPT",
95
- "IFRAME",
96
- "OBJECT",
97
- "SVG",
98
- "HEAD"
99
- ]), T = (e) => e.nodeType === 1, E = (e) => T(e) && (x.has(e.tagName) || S.has(e.tagName) || C.has(e.tagName) || e.tagName === "LI");
100
- function D(e) {
101
- let t = e.style?.fontWeight ?? "", n = e.style?.fontStyle ?? "";
102
- return {
103
- bold: t === "" ? void 0 : t === "bold" || Number(t) >= 600,
104
- italic: n === "" ? void 0 : n === "italic" || n === "oblique"
105
- };
106
- }
107
- function O(e, t) {
108
- let n = /^(\s*)([\s\S]*?)(\s*)$/.exec(e);
109
- return n[2] ? `${n[1]}${t}${n[2]}${t}${n[3]}` : e;
110
- }
111
- function k(e) {
112
- if (e.nodeType === 3) return y((e.textContent ?? "").replace(/\s+/g, " "));
113
- if (!T(e) || w.has(e.tagName)) return "";
114
- if (e.tagName === "BR") return "\n";
115
- if (e.tagName === "IMG") return y(e.getAttribute("alt") ?? "");
116
- let t = [...e.childNodes].map(k).join(""), n = e.tagName, r = D(e), i = r.bold ?? (n === "B" || n === "STRONG"), a = r.italic ?? (n === "I" || n === "EM");
117
- if (n === "A") {
118
- let n = f(e.getAttribute("href"));
119
- n && t.trim() && (t = `[${t.trim()}](${n})`);
120
- }
121
- return a && (t = O(t, "_")), i && (t = O(t, "**")), t;
122
- }
123
- var A = (e) => e.split("\n").map((e) => e.replace(/ {2,}/g, " ").trim()).join("\n").replace(/^\n+|\n+$/g, "");
124
- function j(e, t) {
125
- let n = [], r = () => {
126
- let e = A(n.map(k).join(""));
127
- e && t.push({
128
- kind: "p",
129
- text: e
130
- }), n = [];
131
- };
132
- for (let i of e.childNodes) {
133
- if (T(i) && w.has(i.tagName)) continue;
134
- if (!E(i)) {
135
- n.push(i);
136
- continue;
137
- }
138
- r();
139
- let e = i;
140
- if (S.has(e.tagName)) {
141
- let n = A(k(e).replace(/\n/g, " ")).replace(/\*\*/g, "");
142
- n && t.push({
143
- kind: "h",
144
- text: n
145
- });
146
- } else if (C.has(e.tagName) || e.tagName === "LI") for (let n of e.tagName === "LI" ? [e] : e.querySelectorAll("li")) {
147
- let e = A([...n.childNodes].filter((e) => !(T(e) && C.has(e.tagName))).map((e) => E(e) ? ` ${k(e)} ` : k(e)).join(""));
148
- e && t.push({
149
- kind: "li",
150
- text: e.replace(/\n/g, " ")
151
- });
152
- }
153
- else j(e, t);
154
- }
155
- return r(), t;
156
- }
157
- function M(e) {
158
- let t = [], n = null;
159
- for (let r of j(e, [])) n && t.push(n === "li" && r.kind === "li" ? "\n" : "\n\n"), r.kind === "h" ? t.push(`### ${r.text}`) : r.kind === "li" ? t.push(`- ${r.text}`) : t.push(r.text.split("\n").map(b).join("\n")), n = r.kind;
160
- return t.join("");
161
- }
162
- function N(e) {
163
- return v(M(new DOMParser().parseFromString(e, "text/html").body));
164
- }
165
- //#endregion
166
- //#region src/components/inputs/text-editor/text-editor.ts
167
- var P = [
168
- {
169
- format: "bold",
170
- label: "Vet",
171
- text: "B"
172
- },
173
- {
174
- format: "italic",
175
- label: "Cursief",
176
- text: "I"
177
- },
178
- {
179
- format: "heading",
180
- label: "Kop",
181
- text: "H"
182
- },
183
- {
184
- format: "list",
185
- label: "Opsomming",
186
- text: "Opsomming"
187
- },
188
- {
189
- format: "link",
190
- label: "Link",
191
- text: "Link"
192
- }
193
- ], F = {
194
- bold: ["B", "STRONG"],
195
- italic: ["I", "EM"],
196
- heading: [
197
- "H1",
198
- "H2",
199
- "H3",
200
- "H4",
201
- "H5",
202
- "H6"
203
- ],
204
- list: ["UL", "LI"],
205
- link: ["A"]
206
- };
207
- function I(e, t) {
208
- typeof document.execCommand == "function" && document.execCommand(e, !1, t);
209
- }
210
- function L(e, t) {
211
- let { startContainer: n, startOffset: r, endContainer: i, endOffset: a } = t;
212
- e.setBaseAndExtent(n, r, i, a);
213
- }
214
- function R(e) {
215
- let { startContainer: t, startOffset: n } = e;
216
- if (e.collapsed || t.nodeType !== 3 || n < (t.textContent ?? "").length) return t;
217
- let r = document.createTreeWalker(e.commonAncestorContainer, NodeFilter.SHOW_TEXT);
218
- return r.currentNode = t, r.nextNode() ?? t;
219
- }
220
- var z = class extends s {
221
- constructor(...e) {
222
- super(...e), this.value = "", this.active = /* @__PURE__ */ new Set(), this.collapsed = !0, this.toolIndex = 0, this.linkOpen = !1, this.linkError = "", this.shown = null, this.range = null, this.onSelectionChange = () => {
223
- let e = this.surface, t = this.selectedRange();
224
- e && t && e.contains(t.commonAncestorContainer) && (this.range = t.cloneRange(), this.collapsed = t.collapsed, this.active = this.formatsAt(R(t)));
225
- };
226
- }
227
- static {
228
- this.styles = [
229
- i,
230
- t(c),
231
- t(l),
232
- t(u)
233
- ];
234
- }
235
- static {
236
- this.properties = {
237
- value: { type: String },
238
- active: { state: !0 },
239
- collapsed: { state: !0 },
240
- toolIndex: { state: !0 },
241
- linkOpen: { state: !0 },
242
- linkError: { state: !0 }
243
- };
244
- }
245
- get surface() {
246
- return this.renderRoot.querySelector(".lintje-text-editor__surface");
247
- }
248
- selection() {
249
- return this.renderRoot.getSelection?.() ?? document.getSelection();
250
- }
251
- selectedRange() {
252
- let e = this.selection();
253
- if (!e?.rangeCount) return null;
254
- let t;
255
- try {
256
- t = e.getComposedRanges?.({ shadowRoots: [this.renderRoot] })[0];
257
- } catch {}
258
- if (!t) return e.getRangeAt(0);
259
- let n = document.createRange();
260
- return n.setStart(t.startContainer, t.startOffset), n.setEnd(t.endContainer, t.endOffset), n;
261
- }
262
- connectedCallback() {
263
- super.connectedCallback(), document.addEventListener("selectionchange", this.onSelectionChange);
264
- }
265
- disconnectedCallback() {
266
- document.removeEventListener("selectionchange", this.onSelectionChange), super.disconnectedCallback();
267
- }
268
- formatsAt(e) {
269
- let t = /* @__PURE__ */ new Set(), n = this.surface;
270
- for (let r = e; r && r !== n; r = r.parentNode) {
271
- if (r.nodeType !== 1) continue;
272
- let e = r.tagName;
273
- for (let n of P) F[n.format].includes(e) && t.add(n.format);
274
- }
275
- return t;
276
- }
277
- updated(e) {
278
- super.updated(e);
279
- let t = this.surface;
280
- t && this.value !== this.shown && (t.innerHTML = v(this.value), this.shown = this.value);
281
- }
282
- settle(e) {
283
- let t = this.surface;
284
- if (!t) return;
285
- let n = M(t), r = v(n);
286
- e && t.innerHTML !== r && (t.innerHTML = r), this.shown = n, n !== this.value && (this.value = n, this.commit(n));
287
- }
288
- onFocusOut(e) {
289
- if (this.disabled) return;
290
- let t = e.relatedTarget, n = t !== null && this.renderRoot.contains(t);
291
- (e.target === this.surface || !n) && this.settle(!n);
292
- }
293
- restore() {
294
- let e = this.surface, t = this.selection();
295
- e && (e.focus(), this.range && t && L(t, this.range));
296
- }
297
- apply(e) {
298
- if (!this.disabled) {
299
- if (e === "link") return this.link();
300
- this.restore(), I("defaultParagraphSeparator", "p"), e === "bold" && I("bold"), e === "italic" && I("italic"), e === "list" && I("insertUnorderedList"), e === "heading" && I("formatBlock", this.active.has("heading") ? "<p>" : "<h3>"), this.onSelectionChange();
301
- }
302
- }
303
- link() {
304
- if (this.active.has("link")) {
305
- this.restore();
306
- let e = this.selection(), t = this.range ? R(this.range) : null;
307
- for (; t && t.tagName !== "A";) t = t.parentNode;
308
- if (t && e) {
309
- let n = document.createRange();
310
- n.selectNodeContents(t), L(e, n);
311
- }
312
- I("unlink"), this.onSelectionChange();
313
- } else this.collapsed || (this.linkError = "", this.linkOpen = !0, this.updateComplete.then(() => this.renderRoot.querySelector(".lintje-text-editor__link-field")?.shadowRoot?.querySelector("input")?.focus()));
314
- }
315
- onLinkChange(e) {
316
- e.stopPropagation();
317
- let t = f(e.detail);
318
- t ? (this.linkOpen = !1, this.restore(), I("createLink", t), this.onSelectionChange()) : this.linkError = "Vul een webadres in, zoals https://www.rijksoverheid.nl";
319
- }
320
- onLinkKeydown(e) {
321
- e.key === "Enter" && !e.isComposing && e.preventDefault();
322
- }
323
- onLinkFocusOut(e) {
324
- let t = e.relatedTarget, n = e.currentTarget;
325
- this.linkOpen && t && !r(t, n) && !r(this, t) && (this.linkOpen = !1);
326
- }
327
- onLinkClose(e) {
328
- e.stopPropagation(), this.linkOpen = !1, this.restore();
329
- }
330
- onSurfaceKeydown(e) {
331
- if (!(e.ctrlKey || e.metaKey) || e.altKey) return;
332
- let t = {
333
- b: "bold",
334
- i: "italic",
335
- k: "link"
336
- }[e.key.toLowerCase()];
337
- t && (e.preventDefault(), this.apply(t));
338
- }
339
- onPaste(e) {
340
- let t = e.clipboardData;
341
- if (!t) return;
342
- e.preventDefault();
343
- let n = t.getData("text/html");
344
- n ? I("insertHTML", N(n)) : I("insertText", t.getData("text/plain"));
345
- }
346
- onToolbarKeydown(e) {
347
- let t = P.length - 1, n = {
348
- ArrowRight: this.toolIndex === t ? 0 : this.toolIndex + 1,
349
- ArrowLeft: this.toolIndex === 0 ? t : this.toolIndex - 1,
350
- Home: 0,
351
- End: t
352
- }[e.key];
353
- n !== void 0 && (e.preventDefault(), this.toolIndex = n, this.updateComplete.then(() => {
354
- this.renderRoot.querySelectorAll(".lintje-text-editor__tool")[n]?.focus();
355
- }));
356
- }
357
- renderTool(e, t) {
358
- let r = this.active.has(e.format), i = e.format === "link" && this.collapsed && !r;
359
- return a`<button
1
+ import{$t as e,Zt as t,dt as n,in as r,lt as i,nn as a,nt as o}from"../chunks/base-DuuwEY22.js";import{n as s}from"../chunks/input-fzGBdp-5.js";import{t as c}from"../chunks/input-CTxDOlLs.js";import{t as l}from"../chunks/prose-DOF7h3je.js";import"./text-input.js";var u=`:host{min-width:0;display:block}:host([hidden]){display:none}.lintje-text-editor{border:1px solid var(--color-border-field);background:var(--color-bg-surface);flex-direction:column;min-width:0;display:flex}.lintje-text-editor:has(.lintje-text-editor__surface:focus-visible){outline:var(--focus-width) solid var(--color-focus);outline-offset:var(--focus-offset)}.lintje-text-editor.is-error{border:2px solid var(--color-error)}.lintje-text-editor.is-disabled{border:1px solid var(--color-border-strong)}.lintje-text-editor__toolbar{gap:var(--space-2) var(--space-1);padding:var(--space-1);background:var(--color-bg-page);border-bottom:1px solid var(--color-border-default);flex-wrap:wrap;display:flex}.lintje-text-editor__tool{width:var(--h-icon-button);height:var(--h-icon-button);color:var(--color-text-primary);transition:background var(--dur-hover) var(--ease-in-motion);background:0 0;border:1px solid #0000;flex:none;justify-content:center;align-items:center;font-size:1rem;display:inline-flex;position:relative}.lintje-text-editor__tool:after{content:"";inset:min(0px, calc((100% - var(--h-target)) / 2)) 0;position:absolute}.lintje-text-editor__tool--bold,.lintje-text-editor__tool--heading{font-weight:700}.lintje-text-editor__tool--italic{font-style:italic}.lintje-text-editor__tool--word{width:auto;min-width:var(--h-icon-button);padding:0 var(--space-2);font-size:.875rem;font-weight:700}.lintje-text-editor__tool:hover:not(:disabled):not(.is-idle){background:var(--color-bg-subtle)}.lintje-text-editor__tool.is-pressed{background:var(--color-action-primary);color:var(--color-action-primary-text);border-color:var(--color-action-primary-border)}.lintje-text-editor__tool.is-pressed:hover:not(:disabled){background:var(--color-action-primary)}.lintje-text-editor__tool.is-idle,.lintje-text-editor__tool:disabled{color:var(--color-text-disabled);cursor:not-allowed}.lintje-text-editor__surface{min-height:132px;padding:var(--space-3);overflow-wrap:anywhere}.lintje-text-editor__surface:focus-visible{outline:none}.lintje-text-editor.is-disabled .lintje-text-editor__surface{background:var(--color-bg-subtle);color:var(--color-text-disabled);cursor:not-allowed}.lintje-text-editor.is-disabled .lintje-text-editor__surface *{color:inherit}.lintje-text-editor__link{width:280px;max-width:100%;padding:var(--space-4)}@media screen and (width<=767px){.lintje-text-editor__toolbar{flex-wrap:nowrap;overflow-x:auto}}@media (forced-colors:active){.lintje-text-editor__tool.is-pressed{border:2px solid highlight}}`,d=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`);function f(e){let t=(e??``).replace(/\p{Cc}/gu,``).trim();if(!t)return null;let n=/^([a-z][a-z0-9+.-]*):/i.exec(t);return n&&![`http`,`https`,`mailto`,`tel`].includes(n[1].toLowerCase())?null:t.replace(/ /g,`%20`).replace(/\(/g,`%28`).replace(/\)/g,`%29`)}var p=/[\\`*_{}[\]()#+\-.!>~|]/;function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];if(r===`\\`&&p.test(e[n+1]??``))t+=d(e[n+1]),n+=2;else if(r===`
2
+ `)t+=`<br>`,n+=1;else{if(e.startsWith(`**`,n)){let r=h(e,`**`,n+2);if(r>n+2){t+=`<strong>${m(e.slice(n+2,r))}</strong>`,n=r+2;continue}}if(r===`*`||r===`_`){let i=h(e,r,n+1);if(i>n+1){t+=`<em>${m(e.slice(n+1,i))}</em>`,n=i+1;continue}}if(r===`[`){let r=/^\[((?:\\.|[^\]\\])+)\]\(([^()\s]+)\)/.exec(e.slice(n));if(r){let e=f(r[2]),i=m(r[1]);t+=e?`<a href="${d(e)}">${i}</a>`:i,n+=r[0].length;continue}}t+=d(r),n+=1}}return t}function h(e,t,n){for(let r=n;r<e.length;r++)if(e[r]===`\\`)r+=1;else{if(t===`**`&&e.startsWith(`**`,r))return r;if(t.length===1&&e[r]===t){if(t===`*`&&e[r+1]===`*`){let t=h(e,`**`,r+2);if(t===-1)return-1;r=t+1;continue}return r}}return-1}var g=/^#{1,6}\s+(.*)$/,_=/^[-*]\s+(.*)$/;function v(e){let t=(e??``).replace(/\r\n?/g,`
3
+ `).split(`
4
+ `),n=[],r=[],i=[],a=()=>{r.length&&n.push(`<p>${m(r.join(`
5
+ `))}</p>`),r=[]},o=()=>{i.length&&n.push(`<ul>${i.map(e=>`<li>${e}</li>`).join(``)}</ul>`),i=[]};for(let e of t){let t=e.trimEnd(),s=g.exec(t),c=_.exec(t);t.trim()===``?(a(),o()):s?(a(),o(),n.push(`<h3>${m(s[1].trim())}</h3>`)):c?(a(),i.push(m(c[1].trim()))):(o(),r.push(t.trim()))}return a(),o(),n.join(``)}var y=e=>e.replace(/([\\*_[\]])/g,`\\$1`),b=e=>e.replace(/^(\s*)(#|[-*+](?=\s))/,`$1\\$2`),x=/* @__PURE__ */ new Set(/* @__PURE__ */ `ADDRESS.ARTICLE.ASIDE.BLOCKQUOTE.DD.DIV.DL.DT.FIGCAPTION.FIGURE.FOOTER.FORM.HEADER.HR.MAIN.NAV.P.PRE.SECTION.TABLE.TBODY.THEAD.TFOOT.TR.TD.TH`.split(`.`)),S=/* @__PURE__ */ new Set([`H1`,`H2`,`H3`,`H4`,`H5`,`H6`]),C=/* @__PURE__ */ new Set([`UL`,`OL`]),w=/* @__PURE__ */ new Set([`SCRIPT`,`STYLE`,`TEMPLATE`,`NOSCRIPT`,`IFRAME`,`OBJECT`,`SVG`,`HEAD`]),T=e=>e.nodeType===1,E=e=>T(e)&&(x.has(e.tagName)||S.has(e.tagName)||C.has(e.tagName)||e.tagName===`LI`);function D(e){let t=e.style?.fontWeight??``,n=e.style?.fontStyle??``;return{bold:t===``?void 0:t===`bold`||Number(t)>=600,italic:n===``?void 0:n===`italic`||n===`oblique`}}function O(e,t){let n=/^(\s*)([\s\S]*?)(\s*)$/.exec(e);return n[2]?`${n[1]}${t}${n[2]}${t}${n[3]}`:e}function k(e){if(e.nodeType===3)return y((e.textContent??``).replace(/\s+/g,` `));if(!T(e)||w.has(e.tagName))return``;if(e.tagName===`BR`)return`
6
+ `;if(e.tagName===`IMG`)return y(e.getAttribute(`alt`)??``);let t=[...e.childNodes].map(k).join(``),n=e.tagName,r=D(e),i=r.bold??(n===`B`||n===`STRONG`),a=r.italic??(n===`I`||n===`EM`);if(n===`A`){let n=f(e.getAttribute(`href`));n&&t.trim()&&(t=`[${t.trim()}](${n})`)}return a&&(t=O(t,`_`)),i&&(t=O(t,`**`)),t}var A=e=>e.split(`
7
+ `).map(e=>e.replace(/ {2,}/g,` `).trim()).join(`
8
+ `).replace(/^\n+|\n+$/g,``);function j(e,t){let n=[],r=()=>{let e=A(n.map(k).join(``));e&&t.push({kind:`p`,text:e}),n=[]};for(let i of e.childNodes){if(T(i)&&w.has(i.tagName))continue;if(!E(i)){n.push(i);continue}r();let e=i;if(S.has(e.tagName)){let n=A(k(e).replace(/\n/g,` `)).replace(/\*\*/g,``);n&&t.push({kind:`h`,text:n})}else if(C.has(e.tagName)||e.tagName===`LI`)for(let n of e.tagName===`LI`?[e]:e.querySelectorAll(`li`)){let e=A([...n.childNodes].filter(e=>!(T(e)&&C.has(e.tagName))).map(e=>E(e)?` ${k(e)} `:k(e)).join(``));e&&t.push({kind:`li`,text:e.replace(/\n/g,` `)})}else j(e,t)}return r(),t}function M(e){let t=[],n=null;for(let r of j(e,[]))n&&t.push(n===`li`&&r.kind===`li`?`
9
+ `:`
10
+
11
+ `),r.kind===`h`?t.push(`### ${r.text}`):r.kind===`li`?t.push(`- ${r.text}`):t.push(r.text.split(`
12
+ `).map(b).join(`
13
+ `)),n=r.kind;return t.join(``)}function N(e){return v(M(new DOMParser().parseFromString(e,`text/html`).body))}var P=[{format:`bold`,label:`Vet`,text:`B`},{format:`italic`,label:`Cursief`,text:`I`},{format:`heading`,label:`Kop`,text:`H`},{format:`list`,label:`Opsomming`,text:`Opsomming`},{format:`link`,label:`Link`,text:`Link`}],F={bold:[`B`,`STRONG`],italic:[`I`,`EM`],heading:[`H1`,`H2`,`H3`,`H4`,`H5`,`H6`],list:[`UL`,`LI`],link:[`A`]};function I(e,t){typeof document.execCommand==`function`&&document.execCommand(e,!1,t)}function L(e,t){let{startContainer:n,startOffset:r,endContainer:i,endOffset:a}=t;e.setBaseAndExtent(n,r,i,a)}function R(e){let{startContainer:t,startOffset:n}=e;if(e.collapsed||t.nodeType!==3||n<(t.textContent??``).length)return t;let r=document.createTreeWalker(e.commonAncestorContainer,NodeFilter.SHOW_TEXT);return r.currentNode=t,r.nextNode()??t}var z=class extends s{constructor(...e){super(...e),this.value=``,this.active=/* @__PURE__ */ new Set,this.collapsed=!0,this.toolIndex=0,this.linkOpen=!1,this.linkError=``,this.shown=null,this.range=null,this.onSelectionChange=()=>{let e=this.surface,t=this.selectedRange();e&&t&&e.contains(t.commonAncestorContainer)&&(this.range=t.cloneRange(),this.collapsed=t.collapsed,this.active=this.formatsAt(R(t)))}}static{this.styles=[n,e(c),e(l),e(u)]}static{this.properties={value:{type:String},active:{state:!0},collapsed:{state:!0},toolIndex:{state:!0},linkOpen:{state:!0},linkError:{state:!0}}}get surface(){return this.renderRoot.querySelector(`.lintje-text-editor__surface`)}selection(){return this.renderRoot.getSelection?.()??document.getSelection()}selectedRange(){let e=this.selection();if(!e?.rangeCount)return null;let t;try{t=e.getComposedRanges?.({shadowRoots:[this.renderRoot]})[0]}catch{}if(!t)return e.getRangeAt(0);let n=document.createRange();return n.setStart(t.startContainer,t.startOffset),n.setEnd(t.endContainer,t.endOffset),n}connectedCallback(){super.connectedCallback(),document.addEventListener(`selectionchange`,this.onSelectionChange)}disconnectedCallback(){document.removeEventListener(`selectionchange`,this.onSelectionChange),super.disconnectedCallback()}formatsAt(e){let t=/* @__PURE__ */ new Set,n=this.surface;for(let r=e;r&&r!==n;r=r.parentNode){if(r.nodeType!==1)continue;let e=r.tagName;for(let n of P)F[n.format].includes(e)&&t.add(n.format)}return t}updated(e){super.updated(e);let t=this.surface;t&&this.value!==this.shown&&(t.innerHTML=v(this.value),this.shown=this.value)}settle(e){let t=this.surface;if(!t)return;let n=M(t),r=v(n);e&&t.innerHTML!==r&&(t.innerHTML=r),this.shown=n,n!==this.value&&(this.value=n,this.commit(n))}onFocusOut(e){if(this.disabled)return;let t=e.relatedTarget,n=t!==null&&this.renderRoot.contains(t);(e.target===this.surface||!n)&&this.settle(!n)}restore(){let e=this.surface,t=this.selection();e&&(e.focus(),this.range&&t&&L(t,this.range))}apply(e){if(!this.disabled){if(e===`link`)return this.link();this.restore(),I(`defaultParagraphSeparator`,`p`),e===`bold`&&I(`bold`),e===`italic`&&I(`italic`),e===`list`&&I(`insertUnorderedList`),e===`heading`&&I(`formatBlock`,this.active.has(`heading`)?`<p>`:`<h3>`),this.onSelectionChange()}}link(){if(this.active.has(`link`)){this.restore();let e=this.selection(),t=this.range?R(this.range):null;for(;t&&t.tagName!==`A`;)t=t.parentNode;if(t&&e){let n=document.createRange();n.selectNodeContents(t),L(e,n)}I(`unlink`),this.onSelectionChange()}else this.collapsed||(this.linkError=``,this.linkOpen=!0,this.updateComplete.then(()=>this.renderRoot.querySelector(`.lintje-text-editor__link-field`)?.shadowRoot?.querySelector(`input`)?.focus()))}onLinkChange(e){e.stopPropagation();let t=f(e.detail);t?(this.linkOpen=!1,this.restore(),I(`createLink`,t),this.onSelectionChange()):this.linkError=`Vul een webadres in, zoals https://www.rijksoverheid.nl`}onLinkKeydown(e){e.key===`Enter`&&!e.isComposing&&e.preventDefault()}onLinkFocusOut(e){let t=e.relatedTarget,n=e.currentTarget;this.linkOpen&&t&&!o(t,n)&&!o(this,t)&&(this.linkOpen=!1)}onLinkClose(e){e.stopPropagation(),this.linkOpen=!1,e.detail?.reason!==`focus`&&this.restore()}onSurfaceKeydown(e){if(!(e.ctrlKey||e.metaKey)||e.altKey)return;let t={b:`bold`,i:`italic`,k:`link`}[e.key.toLowerCase()];t&&(e.preventDefault(),this.apply(t))}onPaste(e){let t=e.clipboardData;if(!t)return;e.preventDefault();let n=t.getData(`text/html`);n?I(`insertHTML`,N(n)):I(`insertText`,t.getData(`text/plain`))}onToolbarKeydown(e){let t=P.length-1,n={ArrowRight:this.toolIndex===t?0:this.toolIndex+1,ArrowLeft:this.toolIndex===0?t:this.toolIndex-1,Home:0,End:t}[e.key];n!==void 0&&(e.preventDefault(),this.toolIndex=n,this.updateComplete.then(()=>{this.renderRoot.querySelectorAll(`.lintje-text-editor__tool`)[n]?.focus()}))}renderTool(e,t){let n=this.active.has(e.format),o=e.format===`link`&&this.collapsed&&!n;return r`<button
360
14
  type="button"
361
- class=${o({
362
- "lintje-text-editor__tool": !0,
363
- [`lintje-text-editor__tool--${e.format}`]: !0,
364
- "lintje-text-editor__tool--word": e.text.length > 1,
365
- "is-pressed": r,
366
- "is-idle": i
367
- })}
368
- tabindex=${t === this.toolIndex ? "0" : "-1"}
15
+ class=${i({"lintje-text-editor__tool":!0,[`lintje-text-editor__tool--${e.format}`]:!0,"lintje-text-editor__tool--word":e.text.length>1,"is-pressed":n,"is-idle":o})}
16
+ tabindex=${t===this.toolIndex?`0`:`-1`}
369
17
  aria-label=${e.label}
370
- aria-pressed=${r ? "true" : "false"}
371
- aria-disabled=${i ? "true" : n}
18
+ aria-pressed=${n?`true`:`false`}
19
+ aria-disabled=${o?`true`:a}
372
20
  ?disabled=${this.disabled}
373
- @mousedown=${(e) => e.preventDefault()}
374
- @click=${() => {
375
- this.toolIndex = t, this.apply(e.format);
376
- }}
21
+ @mousedown=${e=>e.preventDefault()}
22
+ @click=${()=>{this.toolIndex=t,this.apply(e.format)}}
377
23
  >
378
24
  ${e.text}
379
- </button>`;
380
- }
381
- render() {
382
- return a`<div class="lintje-field" @focusout=${this.onFocusOut}>
25
+ </button>`}render(){return r`<div class="lintje-field" @focusout=${this.onFocusOut}>
383
26
  ${this.renderLabel()}
384
27
  <div
385
- class=${o({
386
- "lintje-text-editor": !0,
387
- "is-error": !!this.error,
388
- "is-disabled": this.disabled
389
- })}
28
+ class=${i({"lintje-text-editor":!0,"is-error":!!this.error,"is-disabled":this.disabled})}
390
29
  >
391
30
  <div
392
31
  class="lintje-text-editor__toolbar"
@@ -394,7 +33,7 @@ var z = class extends s {
394
33
  aria-label="Opmaak"
395
34
  @keydown=${this.onToolbarKeydown}
396
35
  >
397
- ${P.map((e, t) => this.renderTool(e, t))}
36
+ ${P.map((e,t)=>this.renderTool(e,t))}
398
37
  </div>
399
38
  <lintje-popover
400
39
  ?open=${this.linkOpen}
@@ -404,16 +43,16 @@ var z = class extends s {
404
43
  @lintje-close=${this.onLinkClose}
405
44
  @focusout=${this.onLinkFocusOut}
406
45
  >
407
- ${this.linkOpen ? a`<div class="lintje-text-editor__link" @keydown=${this.onLinkKeydown}>
46
+ ${this.linkOpen?r`<div class="lintje-text-editor__link" @keydown=${this.onLinkKeydown}>
408
47
  <lintje-text-input
409
48
  class="lintje-text-editor__link-field"
410
49
  label="Adres van de link"
411
50
  placeholder="https://"
412
51
  hint="Enter plaatst de link"
413
- error=${this.linkError || n}
52
+ error=${this.linkError||a}
414
53
  @lintje-change=${this.onLinkChange}
415
54
  ></lintje-text-input>
416
- </div>` : n}
55
+ </div>`:a}
417
56
  </lintje-popover>
418
57
  <div
419
58
  id=${this.controlId}
@@ -422,19 +61,14 @@ var z = class extends s {
422
61
  aria-multiline="true"
423
62
  aria-labelledby=${this.labelId}
424
63
  aria-describedby=${this.describedBy}
425
- aria-invalid=${this.error ? "true" : n}
426
- aria-required=${this.required ? "true" : n}
427
- aria-disabled=${this.disabled ? "true" : n}
428
- contenteditable=${this.disabled ? "false" : "true"}
429
- tabindex=${this.disabled ? "-1" : "0"}
64
+ aria-invalid=${this.error?`true`:a}
65
+ aria-required=${this.required?`true`:a}
66
+ aria-disabled=${this.disabled?`true`:a}
67
+ contenteditable=${this.disabled?`false`:`true`}
68
+ tabindex=${this.disabled?`-1`:`0`}
430
69
  @keydown=${this.onSurfaceKeydown}
431
70
  @paste=${this.onPaste}
432
71
  ></div>
433
72
  </div>
434
73
  ${this.renderFoot()}
435
- </div>`;
436
- }
437
- };
438
- e("lintje-text-editor", z);
439
- //#endregion
440
- export { z as LintjeTextEditor };
74
+ </div>`}};t(`lintje-text-editor`,z);export{z as LintjeTextEditor};
@@ -1,113 +1,29 @@
1
- import { Yt as e, Zt as t, en as n, lt as r, nn as i, st as a, ut as o } from "../chunks/base-Bd2pmq86.js";
2
- import { i as s, t as c } from "../chunks/input-KqBT3qWD.js";
3
- import { t as l } from "../chunks/input-Dg1o0Sfu.js";
4
- import { t as u } from "../chunks/debounce-JXnLMCcF.js";
5
- //#region src/components/inputs/text-input/text-input.css?inline
6
- var d = "/* The text field. */\n\n/* --- Text field ----------------------------------------------------------- */\n.lintje-text-input { position: relative; display: flex; align-items: center; }\n.lintje-text-input__control {\n width: 100%; height: var(--h-control);\n padding: 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 border-radius: var(--radius);\n}\n.lintje-text-input__control::placeholder { color: var(--color-text-placeholder); opacity: 1; }\n.lintje-text-input__control.is-error { border: 2px solid var(--color-error); }\n/* Read-only: the subtle surface, the strong border, the text still primary. */\n.lintje-text-input__control.is-readonly {\n border: 1px solid var(--color-border-strong);\n background: var(--color-bg-subtle);\n color: var(--color-text-primary);\n cursor: default;\n}\n.lintje-text-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.lintje-text-input--clearable .lintje-text-input__control {\n padding-right: calc(var(--h-icon-button) + var(--space-1));\n}\n/* The hit area reaches the target height above and below only: sideways it would cover the text. */\n.lintje-text-input__clear {\n position: absolute; right: var(--space-1);\n width: var(--h-icon-button); height: var(--h-icon-button);\n display: flex; align-items: center; justify-content: center;\n color: var(--color-text-muted);\n}\n.lintje-text-input__clear:hover { color: var(--color-text-primary); }\n.lintje-text-input__clear::after {\n content: '';\n position: absolute;\n inset: min(0px, calc((100% - var(--h-target)) / 2)) 0;\n}\n\n/* --- Search ---------------------------------------------------------------- */\n/* The browser's own clear button and decoration go: the field draws its own cross. */\n.lintje-text-input--search .lintje-text-input__control { padding-left: var(--space-10); }\n.lintje-text-input__search {\n position: absolute; left: var(--space-3);\n color: var(--color-text-muted);\n pointer-events: none;\n}\n.lintje-text-input__control::-webkit-search-cancel-button,\n.lintje-text-input__control::-webkit-search-decoration { appearance: none; }\n\n/* --- Password -------------------------------------------------------------- */\n.lintje-text-input--password .lintje-text-input__control { border-right: 0; }\n.lintje-text-input__reveal { flex: none; --h-button: var(--h-control); }\n", f = class extends c {
7
- constructor(...e) {
8
- super(...e), this.value = "", this.placeholder = "", this.clearable = !1, this.stacked = !1, this.type = "text", this.commitOn = "change", this.autocomplete = "", this.revealed = !1, this.typing = new u(this), this.#e = "", this.#t = !1;
9
- }
10
- static {
11
- this.styles = [
12
- r,
13
- t(l),
14
- t(d)
15
- ];
16
- }
17
- static {
18
- this.properties = {
19
- value: { type: String },
20
- placeholder: { type: String },
21
- clearable: { type: Boolean },
22
- stacked: {
23
- type: Boolean,
24
- reflect: !0
25
- },
26
- type: { type: String },
27
- commitOn: {
28
- type: String,
29
- attribute: "commit"
30
- },
31
- autocomplete: { type: String },
32
- revealed: { state: !0 }
33
- };
34
- }
35
- #e;
36
- #t;
37
- get formValue() {
38
- return this.value;
39
- }
40
- willUpdate(e) {
41
- super.willUpdate(e), e.has("value") && !this.#t && (this.#e = this.value), this.#t = !1;
42
- }
43
- send(e) {
44
- e !== this.#e && (this.#e = e, this.commit(e));
45
- }
46
- onInput(e) {
47
- this.readonly || (this.#t = !0, this.value = e.target.value, this.commitOn === "input" && this.typing.schedule(() => this.send(this.value)));
48
- }
49
- change(e) {
50
- this.readonly || (this.#t = !0, this.value = e.target.value, this.commitOn === "input" ? this.typing.flush() : this.send(this.value));
51
- }
52
- onKeydown(e) {
53
- e.key === "Enter" && this.commitOn === "input" && !this.readonly && (this.#t = !0, this.value = e.target.value, this.typing.flush()), this.submitOnEnter(e, () => this.change(e)), e.key === "Escape" && this.type === "search" && this.value !== "" && !this.readonly && (e.preventDefault(), e.stopPropagation(), this.clear());
54
- }
55
- clear() {
56
- this.readonly || (this.typing.cancel(), this.value = "", this.send(""), this.nativeControl?.focus());
57
- }
58
- reveal() {
59
- this.revealed = !this.revealed;
60
- }
61
- renderFoot() {
62
- let e = this.error ?? "", t = {
63
- hintId: this.hintId,
64
- errorId: this.errorId
65
- };
66
- return this.type === "search" ? i`${e ? s(void 0, e, t) : n}<span
1
+ import{$t as e,Zt as t,dt as n,ft as r,in as i,lt as a,nn as o}from"../chunks/base-DuuwEY22.js";import{i as s,t as c}from"../chunks/input-fzGBdp-5.js";import{t as l}from"../chunks/input-CTxDOlLs.js";import{t as u}from"../chunks/debounce-Dfwdcv-z.js";var d=`.lintje-text-input{align-items:center;display:flex;position:relative}.lintje-text-input__control{width:100%;height:var(--h-control);border:1px solid var(--color-border-field);background:var(--color-bg-surface);color:var(--color-text-primary);border-radius:var(--radius);padding:0 14px;font-size:1rem}.lintje-text-input__control::placeholder{color:var(--color-text-placeholder);opacity:1}.lintje-text-input__control.is-error{border:2px solid var(--color-error)}.lintje-text-input__control.is-readonly{border:1px solid var(--color-border-strong);background:var(--color-bg-subtle);color:var(--color-text-primary);cursor:default}.lintje-text-input__control:disabled{border:1px solid var(--color-border-strong);background:var(--color-bg-subtle);color:var(--color-text-disabled);cursor:not-allowed}.lintje-text-input--clearable .lintje-text-input__control{padding-right:calc(var(--h-icon-button) + var(--space-1))}.lintje-text-input__clear{right:var(--space-1);width:var(--h-icon-button);height:var(--h-icon-button);color:var(--color-text-muted);justify-content:center;align-items:center;display:flex;position:absolute}.lintje-text-input__clear:hover{color:var(--color-text-primary)}.lintje-text-input__clear:after{content:"";inset:min(0px, calc((100% - var(--h-target)) / 2)) 0;position:absolute}.lintje-text-input--search .lintje-text-input__control{padding-left:var(--space-10)}.lintje-text-input__search{left:var(--space-3);color:var(--color-text-muted);pointer-events:none;position:absolute}.lintje-text-input__control::-webkit-search-cancel-button,.lintje-text-input__control::-webkit-search-decoration{appearance:none}.lintje-text-input--password .lintje-text-input__control{border-right:0}.lintje-text-input__reveal{--h-button:var(--h-control);flex:none}`,f=class extends c{constructor(...e){super(...e),this.value=``,this.placeholder=``,this.clearable=!1,this.stacked=!1,this.type=`text`,this.commitOn=`change`,this.autocomplete=``,this.revealed=!1,this.typing=new u(this),this.#e=``,this.#t=!1}static{this.styles=[n,e(l),e(d)]}static{this.properties={value:{type:String},placeholder:{type:String},clearable:{type:Boolean},stacked:{type:Boolean,reflect:!0},type:{type:String},commitOn:{type:String,attribute:`commit`},autocomplete:{type:String},revealed:{state:!0}}}#e;#t;get formValue(){return this.value}willUpdate(e){super.willUpdate(e),e.has(`value`)&&!this.#t&&(this.#e=this.value),this.#t=!1}send(e){e!==this.#e&&(this.#e=e,this.commit(e))}onInput(e){this.readonly||(this.#t=!0,this.value=e.target.value,this.commitOn===`input`&&this.typing.schedule(()=>this.send(this.value)))}change(e){this.readonly||(this.#t=!0,this.value=e.target.value,this.commitOn===`input`?this.typing.flush():this.send(this.value))}onKeydown(e){e.key===`Enter`&&this.commitOn===`input`&&!this.readonly&&(this.#t=!0,this.value=e.target.value,this.typing.flush()),this.submitOnEnter(e,()=>this.change(e)),e.key===`Escape`&&this.type===`search`&&this.value!==``&&!this.readonly&&(e.preventDefault(),e.stopPropagation(),this.clear())}clear(){this.readonly||(this.typing.cancel(),this.value=``,this.send(``),this.nativeControl?.focus())}reveal(){this.revealed=!this.revealed}renderFoot(){let e=this.error??``,t={hintId:this.hintId,errorId:this.errorId};return this.type===`search`?i`${e?s(void 0,e,t):o}<span
67
2
  id=${this.hintId}
68
3
  class="lintje-field__hint"
69
4
  aria-live="polite"
70
- ?hidden=${!this.hint || !!e}
71
- >${this.hint ?? ""}</span
72
- >` : s(this.hint, e, t);
73
- }
74
- get inputType() {
75
- return this.type === "password" ? this.revealed ? "text" : "password" : this.type === "search" || this.type === "email" ? this.type : "text";
76
- }
77
- render() {
78
- let e = this.type === "search", t = this.type === "password", r = (this.clearable || e) && !t && this.value !== "" && !this.disabled && !this.readonly;
79
- return i`<div class="lintje-field">
5
+ ?hidden=${!this.hint||!!e}
6
+ >${this.hint??``}</span
7
+ >${this.renderReset()}`:i`${s(this.hint,e,t)}${this.renderReset()}`}get inputType(){return this.type===`password`?this.revealed?`text`:`password`:this.type===`search`||this.type===`email`?this.type:`text`}render(){let e=this.type===`search`,t=this.type===`password`,n=(this.clearable||e)&&!t&&this.value!==``&&!this.disabled&&!this.readonly;return i`<div class="lintje-field">
80
8
  ${this.renderLabel(this.controlId)}
81
9
  <div
82
- class=${a({
83
- "lintje-text-input": !0,
84
- "lintje-text-input--clearable": r,
85
- "lintje-text-input--search": e,
86
- "lintje-text-input--password": t
87
- })}
10
+ class=${a({"lintje-text-input":!0,"lintje-text-input--clearable":n,"lintje-text-input--search":e,"lintje-text-input--password":t})}
88
11
  >
89
- ${e ? o("functioneel-zoek", {
90
- size: 18,
91
- className: "lintje-text-input__search"
92
- }) : n}
12
+ ${e?r(`functioneel-zoek`,{size:18,className:`lintje-text-input__search`}):o}
93
13
  <input
94
14
  type=${this.inputType}
95
15
  id=${this.controlId}
96
- class=${a({
97
- "lintje-text-input__control": !0,
98
- "is-error": !!this.error,
99
- "is-readonly": this.readonly
100
- })}
16
+ class=${a({"lintje-text-input__control":!0,"is-error":!!this.error,"is-readonly":this.readonly})}
101
17
  .value=${this.value}
102
18
  placeholder=${this.placeholder}
103
- role=${e ? "searchbox" : n}
104
- inputmode=${this.type === "email" ? "email" : n}
105
- enterkeyhint=${e ? "search" : n}
106
- autocomplete=${this.autocomplete || n}
19
+ role=${e?`searchbox`:o}
20
+ inputmode=${this.type===`email`?`email`:o}
21
+ enterkeyhint=${e?`search`:o}
22
+ autocomplete=${this.autocomplete||o}
107
23
  aria-labelledby=${this.labelId}
108
24
  aria-describedby=${this.describedBy}
109
- aria-invalid=${this.error ? "true" : n}
110
- aria-required=${this.required ? "true" : n}
25
+ aria-invalid=${this.error?`true`:o}
26
+ aria-required=${this.required?`true`:o}
111
27
  ?required=${this.required}
112
28
  ?readonly=${this.readonly}
113
29
  ?disabled=${this.disabled}
@@ -115,27 +31,22 @@ var d = "/* The text field. */\n\n/* --- Text field ----------------------------
115
31
  @change=${this.change}
116
32
  @keydown=${this.onKeydown}
117
33
  />
118
- ${r ? i`<button
34
+ ${n?i`<button
119
35
  type="button"
120
36
  class="lintje-text-input__clear"
121
37
  aria-label="Wissen"
122
- @mousedown=${(e) => e.preventDefault()}
38
+ @mousedown=${e=>e.preventDefault()}
123
39
  @click=${this.clear}
124
40
  >
125
- ${o("functioneel-kruis", { size: 16 })}
126
- </button>` : n}
127
- ${t ? i`<lintje-button
41
+ ${r(`functioneel-kruis`,{size:16})}
42
+ </button>`:o}
43
+ ${t?i`<lintje-button
128
44
  class="lintje-text-input__reveal"
129
45
  variant="secondary"
130
46
  ?disabled=${this.disabled}
131
47
  @click=${this.reveal}
132
- >${this.revealed ? "Verbergen" : "Tonen"}</lintje-button
133
- >` : n}
48
+ >${this.revealed?`Verbergen`:`Tonen`}</lintje-button
49
+ >`:o}
134
50
  </div>
135
51
  ${this.renderFoot()}
136
- </div>`;
137
- }
138
- };
139
- e("lintje-text-input", f);
140
- //#endregion
141
- export { f as LintjeTextInput };
52
+ </div>`}};t(`lintje-text-input`,f);export{f as LintjeTextInput};