@blokkli/editor 2.0.0-alpha.52 → 2.0.0-alpha.53

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 (373) hide show
  1. package/dist/chunks/tailwindConfig.mjs +3 -3
  2. package/dist/global/types/blockOptions.d.ts +18 -2
  3. package/dist/module.d.mts +2 -2
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +281 -18
  6. package/dist/modules/agent/index.d.mts +1 -1
  7. package/dist/modules/agent/runtime/app/composables/agentProvider.d.ts +1 -0
  8. package/dist/modules/agent/runtime/app/composables/agentProvider.js +7 -0
  9. package/dist/modules/agent/runtime/app/features/agent/Panel/DropHandler/index.d.vue.ts +2 -2
  10. package/dist/modules/agent/runtime/app/features/agent/Panel/DropHandler/index.vue +14 -49
  11. package/dist/modules/agent/runtime/app/features/agent/Panel/DropHandler/index.vue.d.ts +2 -2
  12. package/dist/modules/agent/runtime/app/features/agent/Panel/Feedback/index.d.vue.ts +10 -0
  13. package/dist/modules/agent/runtime/app/features/agent/Panel/Feedback/index.vue +102 -0
  14. package/dist/modules/agent/runtime/app/features/agent/Panel/Feedback/index.vue.d.ts +10 -0
  15. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.vue +8 -5
  16. package/dist/modules/agent/runtime/app/features/agent/Panel/ToolCard/index.d.vue.ts +3 -3
  17. package/dist/modules/agent/runtime/app/features/agent/Panel/ToolCard/index.vue +9 -5
  18. package/dist/modules/agent/runtime/app/features/agent/Panel/ToolCard/index.vue.d.ts +3 -3
  19. package/dist/modules/agent/runtime/app/features/agent/Panel/index.d.vue.ts +7 -0
  20. package/dist/modules/agent/runtime/app/features/agent/Panel/index.vue +16 -2
  21. package/dist/modules/agent/runtime/app/features/agent/Panel/index.vue.d.ts +7 -0
  22. package/dist/modules/agent/runtime/app/features/agent/index.vue +29 -0
  23. package/dist/modules/agent/runtime/app/features/agent/types.d.ts +16 -0
  24. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/Component.vue +3 -1
  25. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/index.d.ts +2 -0
  26. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/index.js +8 -1
  27. package/dist/modules/charts/index.d.mts +1 -1
  28. package/dist/modules/charts/index.mjs +2 -3
  29. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypePicker/index.vue +1 -1
  30. package/dist/modules/charts/runtime/features/charts/Editor/ColorDropdown/index.vue +1 -1
  31. package/dist/modules/drupal/graphql/base/fragment.paragraphsBlokkliEditState.graphql +16 -0
  32. package/dist/modules/drupal/graphql/base/query.pbConfig.graphql +9 -0
  33. package/dist/modules/drupal/graphql/features/agent.graphql +20 -0
  34. package/dist/modules/drupal/graphql/features/publishNew.graphql +14 -0
  35. package/dist/modules/drupal/graphql/features/referenced-entities.graphql +21 -0
  36. package/dist/modules/drupal/graphql/features/textFieldValues.graphql +20 -0
  37. package/dist/modules/drupal/graphql/features/workspace.graphql +23 -0
  38. package/dist/modules/drupal/graphql/mutations/bulk_translate_field_values.graphql +19 -0
  39. package/dist/modules/drupal/graphql/mutations/clear_outdated_translation.graphql +15 -0
  40. package/dist/modules/drupal/graphql/mutations/ignore_analyze.graphql +15 -0
  41. package/dist/modules/drupal/graphql/mutations/request_translation.graphql +10 -0
  42. package/dist/modules/drupal/graphql/mutations/unignore_analyze.graphql +15 -0
  43. package/dist/modules/drupal/index.d.mts +1 -1
  44. package/dist/modules/drupal/index.mjs +16 -0
  45. package/dist/modules/drupal/runtime/adapter/index.js +180 -11
  46. package/dist/modules/iframes/index.d.mts +31 -0
  47. package/dist/modules/iframes/index.mjs +52 -0
  48. package/dist/modules/iframes/runtime/components/BlokkliIframe/index.d.vue.ts +18 -0
  49. package/dist/modules/iframes/runtime/components/BlokkliIframe/index.vue +61 -0
  50. package/dist/modules/iframes/runtime/components/BlokkliIframe/index.vue.d.ts +18 -0
  51. package/dist/modules/iframes/runtime/components/index.d.ts +1 -0
  52. package/dist/modules/iframes/runtime/components/index.js +1 -0
  53. package/dist/modules/iframes/runtime/features/iframes/Editor/index.d.vue.ts +12 -0
  54. package/dist/modules/iframes/runtime/features/iframes/Editor/index.vue +220 -0
  55. package/dist/modules/iframes/runtime/features/iframes/Editor/index.vue.d.ts +12 -0
  56. package/dist/modules/iframes/runtime/types.d.ts +10 -0
  57. package/dist/modules/index.d.mts +1 -1
  58. package/dist/modules/table-of-contents/index.d.mts +1 -1
  59. package/dist/runtime/components/Blocks/NotImplemented/index.vue +57 -0
  60. package/dist/runtime/components/BlokkliEditable.vue +1 -1
  61. package/dist/runtime/editor/adapter/index.d.ts +8 -1
  62. package/dist/runtime/editor/components/Actions/Interactions/index.vue +77 -17
  63. package/dist/runtime/editor/components/Actions/{ItemDropdown.vue → ItemDropdown/index.vue} +9 -10
  64. package/dist/runtime/editor/components/Actions/index.vue +586 -23
  65. package/dist/runtime/editor/components/AnimationCanvas/index.vue +1 -0
  66. package/dist/runtime/editor/components/AppMenu/MenuButton.vue +185 -1
  67. package/dist/runtime/editor/components/AppMenu/index.vue +24 -10
  68. package/dist/runtime/editor/components/ArtboardTooltip/index.d.vue.ts +6 -2
  69. package/dist/runtime/editor/components/ArtboardTooltip/index.vue +223 -3
  70. package/dist/runtime/editor/components/ArtboardTooltip/index.vue.d.ts +6 -2
  71. package/dist/runtime/editor/components/AutoHeight/index.vue +23 -0
  72. package/dist/runtime/editor/components/Banner/Inner.d.vue.ts +30 -0
  73. package/dist/runtime/editor/components/Banner/Inner.vue +32 -0
  74. package/dist/runtime/editor/components/Banner/Inner.vue.d.ts +30 -0
  75. package/dist/runtime/editor/components/Banner/index.d.vue.ts +3 -13
  76. package/dist/runtime/editor/components/Banner/index.vue +2 -14
  77. package/dist/runtime/editor/components/Banner/index.vue.d.ts +3 -13
  78. package/dist/runtime/editor/components/BetaIndicator/index.d.vue.ts +6 -0
  79. package/dist/runtime/editor/components/BetaIndicator/index.vue +16 -0
  80. package/dist/runtime/editor/components/BetaIndicator/index.vue.d.ts +6 -0
  81. package/dist/runtime/editor/components/BlockPreviewItem/index.vue +51 -1
  82. package/dist/runtime/editor/components/BlockPreviewRenderer/index.vue +27 -1
  83. package/dist/runtime/editor/components/BlockProxy/index.vue +148 -1
  84. package/dist/runtime/editor/components/BlokkliRootErrorBoundary.vue +59 -0
  85. package/dist/runtime/editor/components/BundleSelector/index.vue +170 -20
  86. package/dist/runtime/editor/components/Dialog/index.d.vue.ts +2 -0
  87. package/dist/runtime/editor/components/Dialog/index.vue +341 -0
  88. package/dist/runtime/editor/components/Dialog/index.vue.d.ts +2 -0
  89. package/dist/runtime/editor/components/DiffApproval/Highlight/index.vue +117 -0
  90. package/dist/runtime/editor/components/DiffApproval/Toolbar/index.vue +224 -28
  91. package/dist/runtime/editor/components/DiffViewer/DiffValue.d.vue.ts +1 -0
  92. package/dist/runtime/editor/components/DiffViewer/DiffValue.vue +5 -1
  93. package/dist/runtime/editor/components/DiffViewer/DiffValue.vue.d.ts +1 -0
  94. package/dist/runtime/editor/components/DiffViewer/State.vue +319 -0
  95. package/dist/runtime/editor/components/DraggableList.vue +103 -0
  96. package/dist/runtime/editor/components/Dropdown/index.vue +84 -0
  97. package/dist/runtime/editor/components/EditProvider.vue +72 -15
  98. package/dist/runtime/editor/components/FileDropHandler/index.d.vue.ts +23 -0
  99. package/dist/runtime/editor/components/FileDropHandler/index.vue +108 -0
  100. package/dist/runtime/editor/components/FileDropHandler/index.vue.d.ts +23 -0
  101. package/dist/runtime/editor/components/FlexTextarea/index.vue +4 -2
  102. package/dist/runtime/editor/components/Form/Datepicker/index.vue +149 -0
  103. package/dist/runtime/editor/components/Form/Toggle/index.vue +205 -1
  104. package/dist/runtime/editor/components/FormOverlay/index.vue +90 -0
  105. package/dist/runtime/editor/components/Icon/index.vue +6 -0
  106. package/dist/runtime/editor/components/Indicators/index.vue +161 -0
  107. package/dist/runtime/editor/components/InfoBox/index.vue +65 -0
  108. package/dist/runtime/editor/components/Konami/index.vue +119 -0
  109. package/dist/runtime/editor/components/Loading/index.d.vue.ts +6 -3
  110. package/dist/runtime/editor/components/Loading/index.vue +10 -5
  111. package/dist/runtime/editor/components/Loading/index.vue.d.ts +6 -3
  112. package/dist/runtime/editor/components/Messages/index.vue +131 -0
  113. package/dist/runtime/editor/components/NestedEditorOverlay/index.d.vue.ts +1 -0
  114. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue +246 -12
  115. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue.d.ts +1 -0
  116. package/dist/runtime/editor/components/NotEditStateInfo/index.d.vue.ts +3 -0
  117. package/dist/runtime/editor/components/NotEditStateInfo/index.vue +19 -0
  118. package/dist/runtime/editor/components/NotEditStateInfo/index.vue.d.ts +3 -0
  119. package/dist/runtime/editor/components/Overlay/index.vue +84 -0
  120. package/dist/runtime/editor/components/Pagination/index.vue +41 -0
  121. package/dist/runtime/editor/components/PluginConfigForm/index.vue +23 -0
  122. package/dist/runtime/editor/components/PluginConfigFormInline/FilterSelect/index.vue +429 -0
  123. package/dist/runtime/editor/components/PluginConfigFormInline/index.d.vue.ts +22 -0
  124. package/dist/runtime/editor/components/PluginConfigFormInline/index.vue +150 -0
  125. package/dist/runtime/editor/components/PluginConfigFormInline/index.vue.d.ts +22 -0
  126. package/dist/runtime/editor/components/Popup/index.vue +77 -2
  127. package/dist/runtime/editor/components/PreviewProvider.vue +7 -0
  128. package/dist/runtime/editor/components/Resizable/index.vue +90 -1
  129. package/dist/runtime/editor/components/ScaleToFit/index.vue +30 -1
  130. package/dist/runtime/editor/components/SearchOverlay/index.d.vue.ts +43 -0
  131. package/dist/runtime/editor/components/SearchOverlay/index.vue +264 -0
  132. package/dist/runtime/editor/components/SearchOverlay/index.vue.d.ts +43 -0
  133. package/dist/runtime/editor/components/StatusIcon/index.vue +104 -0
  134. package/dist/runtime/editor/components/StatusIndicator/index.d.vue.ts +9 -0
  135. package/dist/runtime/editor/components/StatusIndicator/index.vue +16 -0
  136. package/dist/runtime/editor/components/StatusIndicator/index.vue.d.ts +9 -0
  137. package/dist/runtime/editor/components/SystemRequirements/index.vue +57 -0
  138. package/dist/runtime/editor/components/Tabs/index.d.vue.ts +30 -0
  139. package/dist/runtime/editor/components/Tabs/index.vue +32 -0
  140. package/dist/runtime/editor/components/Tabs/index.vue.d.ts +30 -0
  141. package/dist/runtime/editor/components/Toolbar/index.vue +214 -3
  142. package/dist/runtime/editor/components/Tooltip/Context.d.vue.ts +7 -0
  143. package/dist/runtime/editor/components/Tooltip/Context.vue +13 -0
  144. package/dist/runtime/editor/components/Tooltip/Context.vue.d.ts +7 -0
  145. package/dist/runtime/editor/components/Tooltip/Status.d.vue.ts +8 -0
  146. package/dist/runtime/editor/components/Tooltip/Status.vue +27 -0
  147. package/dist/runtime/editor/components/Tooltip/Status.vue.d.ts +8 -0
  148. package/dist/runtime/editor/components/Tooltip/index.d.vue.ts +27 -0
  149. package/dist/runtime/editor/components/Tooltip/index.vue +40 -0
  150. package/dist/runtime/editor/components/Tooltip/index.vue.d.ts +27 -0
  151. package/dist/runtime/editor/components/index.d.ts +59 -49
  152. package/dist/runtime/editor/components/index.js +59 -98
  153. package/dist/runtime/editor/composables/defineHighlight.d.ts +2 -0
  154. package/dist/runtime/editor/composables/defineHighlight.js +10 -0
  155. package/dist/runtime/editor/composables/index.d.ts +1 -0
  156. package/dist/runtime/editor/composables/index.js +1 -0
  157. package/dist/runtime/editor/composables/useBlockRegistration.js +8 -0
  158. package/dist/runtime/editor/composables/useStickyToolbar.d.ts +1 -0
  159. package/dist/runtime/editor/composables/useStickyToolbar.js +16 -0
  160. package/dist/runtime/editor/css/output.css +1 -1
  161. package/dist/runtime/editor/events/index.d.ts +10 -0
  162. package/dist/runtime/editor/features/add-list/Help/index.vue +193 -0
  163. package/dist/runtime/editor/features/add-list/index.vue +441 -0
  164. package/dist/runtime/editor/features/analyze/Ignored/index.d.vue.ts +7 -0
  165. package/dist/runtime/editor/features/analyze/Ignored/index.vue +35 -0
  166. package/dist/runtime/editor/features/analyze/Ignored/index.vue.d.ts +7 -0
  167. package/dist/runtime/editor/features/analyze/Main.vue +148 -24
  168. package/dist/runtime/editor/features/analyze/Results/Results.d.vue.ts +1 -9
  169. package/dist/runtime/editor/features/analyze/Results/Results.vue +0 -2
  170. package/dist/runtime/editor/features/analyze/Results/Results.vue.d.ts +1 -9
  171. package/dist/runtime/editor/features/analyze/Results/ResultsItem.d.vue.ts +1 -9
  172. package/dist/runtime/editor/features/analyze/Results/ResultsItem.vue +1 -2
  173. package/dist/runtime/editor/features/analyze/Results/ResultsItem.vue.d.ts +1 -9
  174. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodes.d.vue.ts +1 -9
  175. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodes.vue +11 -8
  176. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodes.vue.d.ts +1 -9
  177. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodesTarget.d.vue.ts +3 -10
  178. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodesTarget.vue +63 -25
  179. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodesTarget.vue.d.ts +3 -10
  180. package/dist/runtime/editor/features/analyze/analyzers/altText.js +2 -0
  181. package/dist/runtime/editor/features/analyze/analyzers/headingStructure.js +3 -0
  182. package/dist/runtime/editor/features/analyze/analyzers/helpers/hashString.d.ts +7 -0
  183. package/dist/runtime/editor/features/analyze/analyzers/helpers/hashString.js +8 -0
  184. package/dist/runtime/editor/features/analyze/analyzers/readability.js +6 -12
  185. package/dist/runtime/editor/features/analyze/analyzers/types.d.ts +20 -0
  186. package/dist/runtime/editor/features/analyze/index.vue +458 -0
  187. package/dist/runtime/editor/features/analyze/types.d.ts +12 -0
  188. package/dist/runtime/editor/features/artboard/Overview/index.vue +37 -4
  189. package/dist/runtime/editor/features/artboard/Renderer.vue +79 -9
  190. package/dist/runtime/editor/features/artboard/Scrollbar/index.vue +84 -0
  191. package/dist/runtime/editor/features/block-scheduler/Dialog/index.vue +1 -1
  192. package/dist/runtime/editor/features/block-scheduler/index.vue +114 -0
  193. package/dist/runtime/editor/features/breadcrumbs/index.vue +150 -0
  194. package/dist/runtime/editor/features/changelog/Dialog/index.vue +62 -7
  195. package/dist/runtime/editor/features/changelog/changelog.json +9 -1
  196. package/dist/runtime/editor/features/clipboard/index.vue +153 -1
  197. package/dist/runtime/editor/features/command-palette/Palette/Item/index.vue +39 -16
  198. package/dist/runtime/editor/features/command-palette/Palette/index.vue +24 -130
  199. package/dist/runtime/editor/features/comments/index.vue +235 -0
  200. package/dist/runtime/editor/features/complex-options/index.vue +4 -1
  201. package/dist/runtime/editor/features/debug/Main.vue +1 -1
  202. package/dist/runtime/editor/features/debug/Section/Features.vue +2 -4
  203. package/dist/runtime/editor/features/debug/index.vue +168 -0
  204. package/dist/runtime/editor/features/dev-mode/index.vue +92 -27
  205. package/dist/runtime/editor/features/dragging-overlay/Renderer/index.vue +1 -1
  206. package/dist/runtime/editor/features/dragging-overlay/index.vue +330 -0
  207. package/dist/runtime/editor/features/edit/index.vue +15 -17
  208. package/dist/runtime/editor/features/edit-form/Frame/index.vue +21 -4
  209. package/dist/runtime/editor/features/editable-field/Overlay/Frame/index.d.vue.ts +9 -1
  210. package/dist/runtime/editor/features/editable-field/Overlay/Frame/index.vue +32 -3
  211. package/dist/runtime/editor/features/editable-field/Overlay/Frame/index.vue.d.ts +9 -1
  212. package/dist/runtime/editor/features/editable-field/Overlay/ReadabilityIndicator/ChunkOverlay.vue +77 -0
  213. package/dist/runtime/editor/features/editable-field/Overlay/ReadabilityIndicator/index.vue +55 -56
  214. package/dist/runtime/editor/features/editable-field/Overlay/index.vue +416 -8
  215. package/dist/runtime/editor/features/editable-mask/index.vue +9 -0
  216. package/dist/runtime/editor/features/entity-title/index.vue +40 -56
  217. package/dist/runtime/editor/features/fragments/Dialog/index.vue +90 -0
  218. package/dist/runtime/editor/features/help/Shortcuts/index.vue +71 -0
  219. package/dist/runtime/editor/features/help/index.vue +17 -0
  220. package/dist/runtime/editor/features/highlights/Renderer/fragment.glsl +89 -0
  221. package/dist/runtime/editor/features/highlights/Renderer/index.vue +408 -0
  222. package/dist/runtime/editor/features/highlights/Renderer/vertex.glsl +87 -0
  223. package/dist/runtime/editor/features/highlights/index.d.vue.ts +3 -0
  224. package/dist/runtime/editor/features/highlights/index.vue +20 -0
  225. package/dist/runtime/editor/features/highlights/index.vue.d.ts +3 -0
  226. package/dist/runtime/editor/features/history/List/index.vue +209 -0
  227. package/dist/runtime/editor/features/history/index.vue +0 -1
  228. package/dist/runtime/editor/features/hover/Renderer/index.vue +1 -1
  229. package/dist/runtime/editor/features/hover/Renderer/vertex.glsl +1 -1
  230. package/dist/runtime/editor/features/import-existing/Dialog/index.vue +18 -0
  231. package/dist/runtime/editor/features/media-library/Library/index.vue +10 -30
  232. package/dist/runtime/editor/features/media-library/index.vue +331 -0
  233. package/dist/runtime/editor/features/options/Form/Checkbox/index.vue +1 -1
  234. package/dist/runtime/editor/features/options/Form/Checkboxes/index.vue +1 -1
  235. package/dist/runtime/editor/features/options/Form/ComplexType/index.vue +6 -2
  236. package/dist/runtime/editor/features/options/Form/Item.vue +21 -18
  237. package/dist/runtime/editor/features/options/Form/Radios/index.d.vue.ts +6 -0
  238. package/dist/runtime/editor/features/options/Form/Radios/index.vue +25 -6
  239. package/dist/runtime/editor/features/options/Form/Radios/index.vue.d.ts +6 -0
  240. package/dist/runtime/editor/features/options/Form/index.vue +1 -4
  241. package/dist/runtime/editor/features/options/index.vue +729 -0
  242. package/dist/runtime/editor/features/ownership/Banner/index.vue +9 -8
  243. package/dist/runtime/editor/features/ownership/index.vue +1 -1
  244. package/dist/runtime/editor/features/preview-grant/QrCode/index.vue +8 -3
  245. package/dist/runtime/editor/features/publish/Dialog/Item.vue +18 -20
  246. package/dist/runtime/editor/features/publish/Dialog/index.vue +5 -1
  247. package/dist/runtime/editor/features/publish/index.vue +835 -0
  248. package/dist/runtime/editor/features/publish/types.d.ts +5 -1
  249. package/dist/runtime/editor/features/referenced-entities/List/Item/index.d.vue.ts +4 -0
  250. package/dist/runtime/editor/features/referenced-entities/List/Item/index.vue +81 -0
  251. package/dist/runtime/editor/features/referenced-entities/List/Item/index.vue.d.ts +4 -0
  252. package/dist/runtime/editor/features/referenced-entities/List/index.d.vue.ts +11 -0
  253. package/dist/runtime/editor/features/referenced-entities/List/index.vue +78 -0
  254. package/dist/runtime/editor/features/referenced-entities/List/index.vue.d.ts +11 -0
  255. package/dist/runtime/editor/features/referenced-entities/index.d.vue.ts +3 -0
  256. package/dist/runtime/editor/features/referenced-entities/index.vue +36 -0
  257. package/dist/runtime/editor/features/referenced-entities/index.vue.d.ts +3 -0
  258. package/dist/runtime/editor/features/referenced-entities/types.d.ts +13 -0
  259. package/dist/runtime/editor/features/responsive-preview/Frame/index.vue +188 -0
  260. package/dist/runtime/editor/features/search/Overlay/Results/Page/index.vue +1 -1
  261. package/dist/runtime/editor/features/search/index.vue +511 -0
  262. package/dist/runtime/editor/features/selection/AddButtons/Renderer/index.vue +58 -0
  263. package/dist/runtime/editor/features/selection/index.vue +47 -15
  264. package/dist/runtime/editor/features/settings/Dialog/FeatureSetting/index.vue +23 -0
  265. package/dist/runtime/editor/features/settings/Dialog/index.vue +5 -2
  266. package/dist/runtime/editor/features/settings/index.vue +152 -0
  267. package/dist/runtime/editor/features/structure/List/Item/index.vue +7 -0
  268. package/dist/runtime/editor/features/structure/index.vue +178 -0
  269. package/dist/runtime/editor/features/templates/ManageDialog/Item.vue +3 -3
  270. package/dist/runtime/editor/features/templates/ManageDialog/index.vue +24 -3
  271. package/dist/runtime/editor/features/theme/index.vue +94 -0
  272. package/dist/runtime/editor/features/touch-action-bar/Bar/index.vue +34 -0
  273. package/dist/runtime/editor/features/tour/Overlay/index.vue +243 -13
  274. package/dist/runtime/editor/features/transform/Dialog/index.vue +132 -1
  275. package/dist/runtime/editor/features/translations/Banner/index.d.vue.ts +14 -1
  276. package/dist/runtime/editor/features/translations/Banner/index.vue +139 -12
  277. package/dist/runtime/editor/features/translations/Banner/index.vue.d.ts +14 -1
  278. package/dist/runtime/editor/features/translations/CsvDialog/Export/index.d.vue.ts +3 -0
  279. package/dist/runtime/editor/features/translations/CsvDialog/Export/index.vue +272 -0
  280. package/dist/runtime/editor/features/translations/CsvDialog/Export/index.vue.d.ts +3 -0
  281. package/dist/runtime/editor/features/translations/CsvDialog/Import/index.d.vue.ts +10 -0
  282. package/dist/runtime/editor/features/translations/CsvDialog/Import/index.vue +382 -0
  283. package/dist/runtime/editor/features/translations/CsvDialog/Import/index.vue.d.ts +10 -0
  284. package/dist/runtime/editor/features/translations/CsvDialog/csv.d.ts +22 -0
  285. package/dist/runtime/editor/features/translations/CsvDialog/csv.js +50 -0
  286. package/dist/runtime/editor/features/translations/CsvDialog/index.d.vue.ts +10 -0
  287. package/dist/runtime/editor/features/translations/CsvDialog/index.vue +37 -0
  288. package/dist/runtime/editor/features/translations/CsvDialog/index.vue.d.ts +10 -0
  289. package/dist/runtime/editor/features/translations/CsvDialog/po.d.ts +7 -0
  290. package/dist/runtime/editor/features/translations/CsvDialog/po.js +36 -0
  291. package/dist/runtime/editor/features/translations/SelectionTable/index.d.vue.ts +37 -0
  292. package/dist/runtime/editor/features/translations/SelectionTable/index.vue +102 -0
  293. package/dist/runtime/editor/features/translations/SelectionTable/index.vue.d.ts +37 -0
  294. package/dist/runtime/editor/features/translations/TranslateDialog/index.d.vue.ts +7 -0
  295. package/dist/runtime/editor/features/translations/TranslateDialog/index.vue +294 -0
  296. package/dist/runtime/editor/features/translations/TranslateDialog/index.vue.d.ts +7 -0
  297. package/dist/runtime/editor/features/translations/index.vue +276 -6
  298. package/dist/runtime/editor/features/translations/types.d.ts +47 -0
  299. package/dist/runtime/editor/features/validations/Overlay/index.vue +130 -0
  300. package/dist/runtime/editor/features/validations/index.vue +41 -0
  301. package/dist/runtime/editor/features/{assistant → workspace}/Overlay/index.d.vue.ts +2 -4
  302. package/dist/runtime/editor/features/workspace/Overlay/index.vue +177 -0
  303. package/dist/runtime/editor/features/{assistant → workspace}/Overlay/index.vue.d.ts +2 -4
  304. package/dist/runtime/editor/features/workspace/index.d.vue.ts +3 -0
  305. package/dist/runtime/editor/features/workspace/index.vue +46 -0
  306. package/dist/runtime/editor/features/workspace/index.vue.d.ts +3 -0
  307. package/dist/runtime/editor/features/workspace/types.d.ts +59 -0
  308. package/dist/runtime/editor/features/workspace/types.js +0 -0
  309. package/dist/runtime/editor/icons/svg/spinner.svg +2 -2
  310. package/dist/runtime/editor/plugins/ContextMenu/Menu/index.vue +21 -7
  311. package/dist/runtime/editor/plugins/ContextMenu/index.vue +4 -0
  312. package/dist/runtime/editor/plugins/ItemAction/index.d.vue.ts +9 -2
  313. package/dist/runtime/editor/plugins/ItemAction/index.vue +26 -16
  314. package/dist/runtime/editor/plugins/ItemAction/index.vue.d.ts +9 -2
  315. package/dist/runtime/editor/plugins/Sidebar/Detached/index.vue +24 -26
  316. package/dist/runtime/editor/plugins/Sidebar/index.vue +612 -27
  317. package/dist/runtime/editor/plugins/ToolbarButton/index.d.vue.ts +13 -84
  318. package/dist/runtime/editor/plugins/ToolbarButton/index.vue +36 -22
  319. package/dist/runtime/editor/plugins/ToolbarButton/index.vue.d.ts +13 -84
  320. package/dist/runtime/editor/plugins/ViewOption/index.vue +13 -14
  321. package/dist/runtime/editor/providers/blocks.js +1 -0
  322. package/dist/runtime/editor/providers/cache.d.ts +23 -0
  323. package/dist/runtime/editor/providers/cache.js +29 -0
  324. package/dist/runtime/editor/providers/directive.d.ts +25 -0
  325. package/dist/runtime/editor/providers/directive.js +20 -0
  326. package/dist/runtime/editor/providers/fieldValue.d.ts +5 -5
  327. package/dist/runtime/editor/providers/fieldValue.js +8 -7
  328. package/dist/runtime/editor/providers/plugin.d.ts +14 -0
  329. package/dist/runtime/editor/providers/plugin.js +9 -0
  330. package/dist/runtime/editor/providers/readability.js +1 -1
  331. package/dist/runtime/editor/providers/selection.js +1 -1
  332. package/dist/runtime/editor/providers/state.d.ts +1 -0
  333. package/dist/runtime/editor/providers/state.js +1 -0
  334. package/dist/runtime/editor/providers/texts.js +11 -1
  335. package/dist/runtime/editor/providers/ui.d.ts +11 -0
  336. package/dist/runtime/editor/providers/ui.js +5 -1
  337. package/dist/runtime/editor/translations/de.json +316 -56
  338. package/dist/runtime/editor/translations/fr.json +310 -50
  339. package/dist/runtime/editor/translations/gsw_CH.json +311 -51
  340. package/dist/runtime/editor/translations/it.json +310 -50
  341. package/dist/runtime/editor/types/app.d.ts +2 -0
  342. package/dist/runtime/editor/types/definitions.d.ts +8 -0
  343. package/dist/runtime/editor/types/field.d.ts +1 -0
  344. package/dist/runtime/editor/types/state.d.ts +10 -0
  345. package/dist/runtime/editor/types/ui.d.ts +3 -1
  346. package/dist/runtime/helpers/tw.d.ts +15 -0
  347. package/dist/runtime/helpers/tw.js +3 -0
  348. package/dist/runtime/types/field.d.ts +1 -0
  349. package/dist/shared/{editor.DsGJIlGn.d.mts → editor.BTOBvmaz.d.mts} +20 -3
  350. package/dist/types.d.mts +1 -1
  351. package/package.json +16 -3
  352. package/dist/runtime/editor/features/analyze/Renderer/fragment.glsl +0 -74
  353. package/dist/runtime/editor/features/analyze/Renderer/index.d.vue.ts +0 -24
  354. package/dist/runtime/editor/features/analyze/Renderer/index.vue +0 -330
  355. package/dist/runtime/editor/features/analyze/Renderer/index.vue.d.ts +0 -24
  356. package/dist/runtime/editor/features/analyze/Renderer/vertex.glsl +0 -94
  357. package/dist/runtime/editor/features/assistant/Overlay/ResultMarkup/index.d.vue.ts +0 -7
  358. package/dist/runtime/editor/features/assistant/Overlay/ResultMarkup/index.vue +0 -17
  359. package/dist/runtime/editor/features/assistant/Overlay/ResultMarkup/index.vue.d.ts +0 -7
  360. package/dist/runtime/editor/features/assistant/Overlay/index.vue +0 -108
  361. package/dist/runtime/editor/features/assistant/docs.md +0 -7
  362. package/dist/runtime/editor/features/assistant/index.vue +0 -66
  363. package/dist/runtime/editor/features/assistant/types.d.ts +0 -37
  364. package/dist/runtime/editor/features/media-library/Library/FilterSelect/index.vue +0 -168
  365. package/dist/runtime/editor/providers/fieldValueAdapterTypes.d.ts +0 -13
  366. /package/dist/{runtime/editor/features/assistant → modules/iframes/runtime}/types.js +0 -0
  367. /package/dist/runtime/editor/components/Actions/{ItemDropdown.d.vue.ts → ItemDropdown/index.d.vue.ts} +0 -0
  368. /package/dist/runtime/editor/components/Actions/{ItemDropdown.vue.d.ts → ItemDropdown/index.vue.d.ts} +0 -0
  369. /package/dist/runtime/editor/{features/media-library/Library → components/PluginConfigFormInline}/FilterSelect/index.d.vue.ts +0 -0
  370. /package/dist/runtime/editor/{features/media-library/Library → components/PluginConfigFormInline}/FilterSelect/index.vue.d.ts +0 -0
  371. /package/dist/runtime/editor/features/{assistant → highlights/Renderer}/index.d.vue.ts +0 -0
  372. /package/dist/runtime/editor/features/{assistant → highlights/Renderer}/index.vue.d.ts +0 -0
  373. /package/dist/runtime/editor/{providers/fieldValueAdapterTypes.js → features/referenced-entities/types.js} +0 -0
@@ -32,9 +32,9 @@
32
32
  "
33
33
  />
34
34
 
35
- <div v-if="analyzerStatuses.length > 1" class="bk-analyze-statuses">
35
+ <div v-if="staleAnalyzerStatuses.length > 1" class="bk-analyze-statuses">
36
36
  <div
37
- v-for="analyzer in analyzerStatuses"
37
+ v-for="analyzer in staleAnalyzerStatuses"
38
38
  :key="analyzer.id"
39
39
  class="bk-analyze-status-item"
40
40
  >
@@ -62,24 +62,17 @@
62
62
  :options="categoryOptions"
63
63
  />
64
64
  </div>
65
- <AnalyzeSummary :results="results" />
66
- <Results v-model="activeId" :results="results" />
65
+ <AnalyzeSummary :results="activeResults" />
66
+ <Results :results="activeResults" />
67
+ <IgnoredResults v-if="ignoredResults.length" :results="ignoredResults" />
67
68
  </div>
68
69
  </div>
69
- <Renderer
70
- v-if="results.length && (keepVisible || isShown) && !ui.isApproving.value"
71
- v-model="activeId"
72
- :results
73
- :is-stale
74
- :manual-analyzer-ids
75
- :is-running
76
- :is-shown
77
- />
78
70
  </template>
79
71
 
80
72
  <script setup>
81
73
  import {
82
74
  computed,
75
+ ref,
83
76
  useBlokkli,
84
77
  useState,
85
78
  onMounted,
@@ -87,8 +80,8 @@ import {
87
80
  watch
88
81
  } from "#imports";
89
82
  import Results from "./Results/Results.vue";
83
+ import IgnoredResults from "./Ignored/index.vue";
90
84
  import AnalyzeSummary from "./Summary/index.vue";
91
- import Renderer from "./Renderer/index.vue";
92
85
  import { useAnalyzeHelper } from "./helper";
93
86
  import {
94
87
  FormSelect,
@@ -96,13 +89,27 @@ import {
96
89
  RelativeTime
97
90
  } from "#blokkli/editor/components";
98
91
  import { renderCycle } from "#blokkli/editor/helpers/vue";
92
+ import { defineHighlight, onBlokkliEvent } from "#blokkli/editor/composables";
93
+ import { falsy } from "#blokkli/helpers";
99
94
  const props = defineProps({
100
95
  langcode: { type: String, required: true },
101
96
  analyze: { type: Object, required: true },
102
97
  isShown: { type: Boolean, required: true }
103
98
  });
104
99
  const ALL = "ALL";
105
- const { $t, ui, state, directive, dom, storage } = useBlokkli();
100
+ const {
101
+ $t,
102
+ ui,
103
+ state,
104
+ directive,
105
+ dom,
106
+ storage,
107
+ element,
108
+ blocks,
109
+ eventBus,
110
+ readability,
111
+ adapter
112
+ } = useBlokkli();
106
113
  const { getCategoryLabel } = useAnalyzeHelper();
107
114
  const refreshKey = computed(() => {
108
115
  return `dom:${dom.settleKey.value}_directive:${directive.settleKey.value}_state:${state.refreshKey.value}`;
@@ -120,12 +127,83 @@ const manualResults = useState(
120
127
  "blokkli:analyze:manual",
121
128
  () => []
122
129
  );
123
- const activeId = useState(() => "");
130
+ const activeId = ui.activeHighlightId;
124
131
  const lastRun = useState(() => 0);
125
132
  const lastRunKey = useState(() => "");
126
133
  const selectedCategory = useState(() => ALL);
127
134
  const keepVisible = storage.use("analyze:keepVisible", true);
128
135
  const providerRootElement = ui.providerElement;
136
+ function getIgnoredFromState() {
137
+ try {
138
+ return new Set(state.getMappedState().ignoredAnalyzeIdentifiers);
139
+ } catch {
140
+ return /* @__PURE__ */ new Set();
141
+ }
142
+ }
143
+ const ignoredIdentifiers = ref(getIgnoredFromState());
144
+ defineHighlight(() => {
145
+ if (!keepVisible.value && !props.isShown) {
146
+ return;
147
+ }
148
+ if (ui.isApproving.value) {
149
+ return;
150
+ }
151
+ const highlights = [];
152
+ for (const result of activeResults.value) {
153
+ if (result.status !== "incomplete" && result.status !== "violation") {
154
+ continue;
155
+ }
156
+ for (const node of result.nodes) {
157
+ if (!node) {
158
+ continue;
159
+ }
160
+ for (const target of node.targets) {
161
+ if (!target) {
162
+ continue;
163
+ }
164
+ let targetElement = null;
165
+ let targetUuid = node.uuid;
166
+ if (typeof target.target === "string") {
167
+ targetElement = element.query(
168
+ ui.providerElement,
169
+ target.target,
170
+ "Find analyze highlight target element."
171
+ );
172
+ } else if (target.target instanceof HTMLElement) {
173
+ targetElement = target.target;
174
+ } else if ("uuid" in target.target) {
175
+ targetUuid = target.target.uuid;
176
+ const item = blocks.getBlock(target.target.uuid);
177
+ if (item) {
178
+ targetElement = dom.getDragElement(item) ?? null;
179
+ }
180
+ }
181
+ if (targetElement) {
182
+ const id = result.id + "_____" + target.globalIndex;
183
+ let label = result.title;
184
+ if (node.score != null) {
185
+ const scoreLabel = readability.analyzer.value.scoreLabel;
186
+ label += ` \xB7 ${scoreLabel} ${readability.formatScore(node.score)}`;
187
+ }
188
+ highlights.push({
189
+ id,
190
+ element: targetElement,
191
+ uuid: targetUuid,
192
+ color: result.status === "violation" ? "red" : "yellow",
193
+ icon: "bk_mdi_speed",
194
+ label,
195
+ description: $t("analyzeShowDetails", "Show details"),
196
+ onClick: () => {
197
+ activeId.value = activeId.value === id ? "" : id;
198
+ eventBus.emit("sidebar:open", "analyze");
199
+ }
200
+ });
201
+ }
202
+ }
203
+ }
204
+ }
205
+ return highlights;
206
+ });
129
207
  const continuousAnalyzers = computed(
130
208
  () => props.analyze.analyzers.value.filter((a) => a.continuous)
131
209
  );
@@ -162,9 +240,11 @@ const allResults = computed(() => {
162
240
  mappedTargets.push({ target, globalIndex: currentIndex });
163
241
  currentIndex++;
164
242
  }
243
+ const ignored = !!node.identifier && ignoredIdentifiers.value.has(result.id + ":" + node.identifier);
165
244
  mappedNodes.push({
166
245
  ...node,
167
- targets: mappedTargets
246
+ targets: mappedTargets,
247
+ ignored
168
248
  });
169
249
  }
170
250
  mappedResults.push({
@@ -181,8 +261,24 @@ const results = computed(() => {
181
261
  }
182
262
  return allResults.value.filter((v) => v.category === selectedCategory.value);
183
263
  });
264
+ function filterResultsByIgnored(items, wantIgnored) {
265
+ const filtered = [];
266
+ for (const result of items) {
267
+ const nodes = result.nodes.filter((n) => n.ignored === wantIgnored);
268
+ if (nodes.length) {
269
+ filtered.push({ ...result, nodes });
270
+ }
271
+ }
272
+ return filtered;
273
+ }
274
+ const activeResults = computed(
275
+ () => filterResultsByIgnored(results.value, false)
276
+ );
277
+ const ignoredResults = computed(
278
+ () => filterResultsByIgnored(allResults.value, true)
279
+ );
184
280
  watch(
185
- allResults,
281
+ activeResults,
186
282
  (v) => {
187
283
  let count = 0;
188
284
  for (const r of v) {
@@ -222,12 +318,15 @@ const staleMessage = computed(() => {
222
318
  }
223
319
  return "";
224
320
  });
225
- const analyzerStatuses = computed(() => {
321
+ const staleAnalyzerStatuses = computed(() => {
226
322
  if (!hasRunOnce.value) {
227
323
  return [];
228
324
  }
229
325
  return props.analyze.analyzers.value.map((analyzer) => {
230
- const status = analyzer.continuous ? $t("analyzeStatusUpToDate", "Up-to-date") : isStale.value ? $t("analyzeStatusStale", "Stale") : $t("analyzeStatusUpToDate", "Up-to-date");
326
+ if (analyzer.continuous || !isStale.value) {
327
+ return;
328
+ }
329
+ const status = $t("analyzeStatusStale", "Stale");
231
330
  const title = typeof analyzer.label === "function" ? analyzer.label(ui.interfaceLanguage.value, $t) : analyzer.label;
232
331
  return {
233
332
  id: analyzer.id,
@@ -235,11 +334,8 @@ const analyzerStatuses = computed(() => {
235
334
  status,
236
335
  isStale: !analyzer.continuous && isStale.value
237
336
  };
238
- });
337
+ }).filter(falsy);
239
338
  });
240
- const manualAnalyzerIds = computed(
241
- () => new Set(manualAnalyzers.value.map((a) => a.id))
242
- );
243
339
  let refreshTimeout = null;
244
340
  watch(refreshKey, () => {
245
341
  if (!hasContinuousAnalyzers.value) {
@@ -388,6 +484,34 @@ const categoryOptions = computed(() => {
388
484
  ...categories
389
485
  ];
390
486
  });
487
+ async function ignoreNode(resultId, identifier) {
488
+ const key = resultId + ":" + identifier;
489
+ if (adapter.ignoreAnalyzeIdentifiers) {
490
+ await state.mutateWithLoadingState(
491
+ () => adapter.ignoreAnalyzeIdentifiers([key]),
492
+ false
493
+ );
494
+ ignoredIdentifiers.value = getIgnoredFromState();
495
+ }
496
+ }
497
+ async function unignoreNode(resultId, identifier) {
498
+ const key = resultId + ":" + identifier;
499
+ if (adapter.unignoreAnalyzeIdentifiers) {
500
+ await state.mutateWithLoadingState(
501
+ () => adapter.unignoreAnalyzeIdentifiers([key]),
502
+ false
503
+ );
504
+ ignoredIdentifiers.value = getIgnoredFromState();
505
+ }
506
+ }
507
+ onBlokkliEvent("analyze:ignore", (e) => ignoreNode(e.resultId, e.identifier));
508
+ onBlokkliEvent(
509
+ "analyze:unignore",
510
+ (e) => unignoreNode(e.resultId, e.identifier)
511
+ );
512
+ onBlokkliEvent("state:reloaded", () => {
513
+ ignoredIdentifiers.value = getIgnoredFromState();
514
+ });
391
515
  onMounted(async () => {
392
516
  await props.analyze.ensureInitialized();
393
517
  if (hasContinuousAnalyzers.value) {
@@ -2,14 +2,6 @@ import type { AnalyzeResultMapped } from '../analyzers/types.js';
2
2
  type __VLS_Props = {
3
3
  results: AnalyzeResultMapped[];
4
4
  };
5
- type __VLS_ModelProps = {
6
- modelValue?: string;
7
- };
8
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
9
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
- "update:modelValue": (value: string) => any;
11
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
12
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
13
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
6
  declare const _default: typeof __VLS_export;
15
7
  export default _default;
@@ -25,7 +25,6 @@
25
25
  v-for="result in group.results"
26
26
  v-bind="result"
27
27
  :key="group.group + result.id"
28
- v-model="activeId"
29
28
  />
30
29
  </li>
31
30
  </ul>
@@ -41,7 +40,6 @@ const props = defineProps({
41
40
  results: { type: Array, required: true }
42
41
  });
43
42
  const { $t } = useBlokkli();
44
- const activeId = defineModel({ type: String, ...{ default: "" } });
45
43
  const groupOrder = {
46
44
  problems: 1,
47
45
  success: 2,
@@ -2,14 +2,6 @@ import type { AnalyzeResultMapped } from '../analyzers/types.js';
2
2
  type __VLS_Props = {
3
3
  results: AnalyzeResultMapped[];
4
4
  };
5
- type __VLS_ModelProps = {
6
- modelValue?: string;
7
- };
8
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
9
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
- "update:modelValue": (value: string) => any;
11
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
12
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
13
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
6
  declare const _default: typeof __VLS_export;
15
7
  export default _default;
@@ -10,14 +10,6 @@ type __VLS_Props = {
10
10
  plugin: string;
11
11
  nodes: AnalyzeNodeMapped[];
12
12
  };
13
- type __VLS_ModelProps = {
14
- modelValue?: string;
15
- };
16
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
- "update:modelValue": (value: string) => any;
19
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
20
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
21
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
14
  declare const _default: typeof __VLS_export;
23
15
  export default _default;
@@ -15,7 +15,7 @@
15
15
  {{ descriptionMapped }}
16
16
  </p>
17
17
 
18
- <ResultsItemNodes v-model="activeId" :nodes :result-id="id" />
18
+ <ResultsItemNodes :nodes :result-id="id" />
19
19
  </div>
20
20
  </template>
21
21
 
@@ -36,7 +36,6 @@ const props = defineProps({
36
36
  plugin: { type: String, required: true },
37
37
  nodes: { type: Array, required: true }
38
38
  });
39
- const activeId = defineModel({ type: String, ...{ default: "" } });
40
39
  const { getCategoryLabel } = useAnalyzeHelper();
41
40
  const { $t } = useBlokkli();
42
41
  const categoryLabel = computed(() => {
@@ -10,14 +10,6 @@ type __VLS_Props = {
10
10
  plugin: string;
11
11
  nodes: AnalyzeNodeMapped[];
12
12
  };
13
- type __VLS_ModelProps = {
14
- modelValue?: string;
15
- };
16
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
17
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
18
- "update:modelValue": (value: string) => any;
19
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
20
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
21
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
13
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
14
  declare const _default: typeof __VLS_export;
23
15
  export default _default;
@@ -3,14 +3,6 @@ type __VLS_Props = {
3
3
  resultId: string;
4
4
  nodes: AnalyzeNodeMapped[];
5
5
  };
6
- type __VLS_ModelProps = {
7
- modelValue?: string;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- "update:modelValue": (value: string) => any;
12
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
13
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
14
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
7
  declare const _default: typeof __VLS_export;
16
8
  export default _default;
@@ -25,7 +25,7 @@
25
25
  <ResultsItemNodesTarget
26
26
  v-for="(target, k) in node.targets"
27
27
  :key="i + '_' + j + '_' + k"
28
- v-model="activeId"
28
+ :node
29
29
  :target
30
30
  :result-id
31
31
  />
@@ -45,10 +45,9 @@ const props = defineProps({
45
45
  resultId: { type: String, required: true },
46
46
  nodes: { type: Array, required: true }
47
47
  });
48
- const activeId = defineModel({ type: String, ...{ default: "" } });
49
48
  const shouldRender = ref(false);
50
49
  const isOpen = ref(false);
51
- const { $t } = useBlokkli();
50
+ const { $t, ui } = useBlokkli();
52
51
  const isSingle = computed(
53
52
  () => props.nodes.length === 1 && props.nodes[0]?.targets.length === 1
54
53
  );
@@ -71,10 +70,14 @@ const grouped = computed(() => {
71
70
  };
72
71
  });
73
72
  });
74
- watch(activeId, (id) => {
75
- const resultId = id.split("_____")[0];
76
- if (resultId === props.resultId) {
77
- isOpen.value = true;
73
+ watch(
74
+ () => ui.activeHighlightId.value,
75
+ (id) => {
76
+ const resultId = id.split("_____")[0];
77
+ if (resultId === props.resultId) {
78
+ shouldRender.value = true;
79
+ isOpen.value = true;
80
+ }
78
81
  }
79
- });
82
+ );
80
83
  </script>
@@ -3,14 +3,6 @@ type __VLS_Props = {
3
3
  resultId: string;
4
4
  nodes: AnalyzeNodeMapped[];
5
5
  };
6
- type __VLS_ModelProps = {
7
- modelValue?: string;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- "update:modelValue": (value: string) => any;
12
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
13
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
14
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
7
  declare const _default: typeof __VLS_export;
16
8
  export default _default;
@@ -1,16 +1,9 @@
1
- import type { AnalyzeNodeTargetMapped } from '#blokkli/analyzer/types';
1
+ import type { AnalyzeNodeMapped, AnalyzeNodeTargetMapped } from '#blokkli/analyzer/types';
2
2
  type __VLS_Props = {
3
3
  resultId: string;
4
+ node: AnalyzeNodeMapped;
4
5
  target: AnalyzeNodeTargetMapped;
5
6
  };
6
- type __VLS_ModelProps = {
7
- modelValue?: string;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- "update:modelValue": (value: string) => any;
12
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
13
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
14
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
8
  declare const _default: typeof __VLS_export;
16
9
  export default _default;
@@ -1,31 +1,65 @@
1
1
  <template>
2
2
  <div
3
- class="bk-analyze-results-item-nodes-target"
3
+ class="bk-analyze-results-item-nodes-target _bk_relative _bk_flex _bk_items-center _bk_gap-5 _bk_pr-5"
4
4
  :class="{
5
- 'bk-is-focused': isFocused
5
+ '_bk_bg-accent-700': isFocused
6
6
  }"
7
7
  >
8
- <div>
9
- <button ref="elButton" @click.prevent="onClick">
10
- <Icon name="bk_mdi_visibility-fill" />
11
- <span>{{ getLabel() }}</span>
12
- </button>
13
- </div>
8
+ <button
9
+ ref="elButton"
10
+ class="_bk_flex-1 _bk_min-w-0 _bk_text-mono-600 _bk_flex _bk_items-center _bk_gap-5 _bk_hover:underline _bk_underline-offset-[3px] _bk_py-[7px] _bk_px-10 _bk_hover:text-accent-700 _bk_scroll-mt-50"
11
+ :class="{
12
+ '_bk_!text-accent-50': isFocused
13
+ }"
14
+ @click.prevent="onClick"
15
+ >
16
+ <div v-if="node.score != null && node.scoreLabel">
17
+ <span class="bk-pill _bk_shrink-0">{{ node.score.toFixed(1) }}</span>
18
+ </div>
19
+ <span class="_bk_truncate _bk_w-full _bk_inline-block _bk_font-mono">{{
20
+ getLabel()
21
+ }}</span>
22
+ </button>
23
+ <button
24
+ v-if="node.identifier"
25
+ class="_bk_shrink-0 _bk_size-25 _bk_flex _bk_items-center _bk_justify-center _bk_rounded _bk_group/tooltip _bk_relative"
26
+ :class="
27
+ isFocused ? '_bk_text-accent-200 _bk_hover:text-accent-700 _bk_hover:bg-white' : '_bk_text-mono-500 _bk_hover:bg-accent-700 _bk_hover:text-accent-50'
28
+ "
29
+ @click.prevent="
30
+ eventBus.emit(node.ignored ? 'analyze:unignore' : 'analyze:ignore', {
31
+ resultId,
32
+ identifier: node.identifier
33
+ })
34
+ "
35
+ >
36
+ <Icon
37
+ :name="node.ignored ? 'bk_mdi_visibility' : 'bk_mdi_visibility_off'"
38
+ class="_bk_size-15"
39
+ />
40
+ <Tooltip
41
+ placement="center-before"
42
+ small
43
+ :label="
44
+ node.ignored ? $t('analyzeUnignore', 'Restore') : $t('analyzeIgnore', 'Ignore')
45
+ "
46
+ />
47
+ </button>
14
48
  </div>
15
49
  </template>
16
50
 
17
51
  <script setup>
18
- import { Icon } from "#blokkli/editor/components";
19
52
  import { computed, useBlokkli, useTemplateRef, watch } from "#imports";
20
53
  import { renderCycle } from "#blokkli/editor/helpers/vue";
54
+ import { Icon, Tooltip } from "#blokkli/editor/components";
21
55
  const props = defineProps({
22
56
  resultId: { type: String, required: true },
57
+ node: { type: Object, required: true },
23
58
  target: { type: Object, required: true }
24
59
  });
25
- const { eventBus, dom, blocks, element } = useBlokkli();
26
- const activeId = defineModel({ type: String, ...{ default: "" } });
60
+ const { $t, ui, eventBus, dom, blocks, element } = useBlokkli();
27
61
  const activeIndex = computed(() => {
28
- const index = activeId.value.split("_____")[1];
62
+ const index = ui.activeHighlightId.value.split("_____")[1];
29
63
  if (index === void 0) {
30
64
  return -1;
31
65
  }
@@ -90,7 +124,7 @@ function findClosestUuid(element2) {
90
124
  }
91
125
  async function onClick() {
92
126
  if (activeIndex.value === props.target.globalIndex) {
93
- activeId.value = "";
127
+ ui.activeHighlightId.value = "";
94
128
  return;
95
129
  }
96
130
  const element2 = getElement();
@@ -107,17 +141,21 @@ async function onClick() {
107
141
  eventBus.emit("scrollIntoView", {
108
142
  element: element2
109
143
  });
110
- activeId.value = props.resultId + "_____" + props.target.globalIndex;
144
+ ui.activeHighlightId.value = props.resultId + "_____" + props.target.globalIndex;
111
145
  }
112
- watch(isFocused, (isFocused2) => {
113
- if (!isFocused2) {
114
- return;
115
- }
116
- if (elButton.value) {
117
- elButton.value.scrollIntoView({
118
- behavior: "smooth",
119
- block: "nearest"
120
- });
121
- }
122
- });
146
+ watch(
147
+ isFocused,
148
+ (isFocused2) => {
149
+ if (!isFocused2) {
150
+ return;
151
+ }
152
+ if (elButton.value) {
153
+ elButton.value.scrollIntoView({
154
+ behavior: "smooth",
155
+ block: "nearest"
156
+ });
157
+ }
158
+ },
159
+ { immediate: true }
160
+ );
123
161
  </script>
@@ -1,16 +1,9 @@
1
- import type { AnalyzeNodeTargetMapped } from '#blokkli/analyzer/types';
1
+ import type { AnalyzeNodeMapped, AnalyzeNodeTargetMapped } from '#blokkli/analyzer/types';
2
2
  type __VLS_Props = {
3
3
  resultId: string;
4
+ node: AnalyzeNodeMapped;
4
5
  target: AnalyzeNodeTargetMapped;
5
6
  };
6
- type __VLS_ModelProps = {
7
- modelValue?: string;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- "update:modelValue": (value: string) => any;
12
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
13
- "onUpdate:modelValue"?: ((value: string) => any) | undefined;
14
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
8
  declare const _default: typeof __VLS_export;
16
9
  export default _default;
@@ -1,4 +1,5 @@
1
1
  import { defineAnalyzer } from "#blokkli/analyzer";
2
+ import { hashString } from "#blokkli/analyzer/helpers/hashString";
2
3
  export default defineAnalyzer(() => {
3
4
  return {
4
5
  id: "blokkli:image-alt-text",
@@ -50,6 +51,7 @@ export default defineAnalyzer(() => {
50
51
  "Image without alt text"
51
52
  ),
52
53
  impact: "serious",
54
+ identifier: hashString(img.src),
53
55
  targets: img.element
54
56
  }))
55
57
  });
@@ -1,5 +1,6 @@
1
1
  import { falsy } from "#blokkli/helpers";
2
2
  import { defineAnalyzer } from "./defineAnalyzer.js";
3
+ import { hashString } from "./helpers/hashString.js";
3
4
  export default defineAnalyzer(() => {
4
5
  return {
5
6
  id: "blokkli:heading-structure",
@@ -36,6 +37,7 @@ export default defineAnalyzer(() => {
36
37
  impact: "serious",
37
38
  nodes: h1Elements.map((h) => ({
38
39
  description: h.text,
40
+ identifier: hashString(h.level + ":" + h.text),
39
41
  targets: h.element
40
42
  }))
41
43
  });
@@ -80,6 +82,7 @@ export default defineAnalyzer(() => {
80
82
  nodes: orderIssues.map(({ current, previous }) => ({
81
83
  description: `${previous.element.tagName} \u2192 ${current.element.tagName}: "${current.text}"`,
82
84
  impact: "moderate",
85
+ identifier: hashString(current.level + ":" + current.text),
83
86
  targets: current.element
84
87
  }))
85
88
  });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Simple string hash (djb2 variant). Returns a base-36 encoded 32-bit integer.
3
+ *
4
+ * Used to create content-based identifiers for analyze nodes so that ignored
5
+ * findings reappear when the underlying content changes.
6
+ */
7
+ export declare function hashString(input: string): string;
@@ -0,0 +1,8 @@
1
+ export function hashString(input) {
2
+ let hash = 0;
3
+ for (let i = 0; i < input.length; i++) {
4
+ hash = (hash << 5) - hash + input.charCodeAt(i);
5
+ hash |= 0;
6
+ }
7
+ return hash.toString(36);
8
+ }