@blokkli/editor 2.0.0-alpha.62 → 2.0.0-alpha.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/dist/global/types/blockOptions.d.ts +32 -27
  2. package/dist/global/types/colorOptions.d.ts +16 -0
  3. package/dist/module.d.mts +2 -2
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +275 -18
  6. package/dist/modules/agent/index.d.mts +1 -1
  7. package/dist/modules/agent/index.mjs +2 -1
  8. package/dist/modules/agent/runtime/app/components/Attachment/PreviewCsv/index.vue +1 -1
  9. package/dist/modules/agent/runtime/app/components/Conversation/Item/Assistant/index.vue +14 -5
  10. package/dist/modules/agent/runtime/app/features/agent/ConversationsAdmin/ConversationsTab/Item.vue +2 -2
  11. package/dist/modules/agent/runtime/app/features/agent/ConversationsAdmin/RatingsTab/Item.vue +2 -2
  12. package/dist/modules/agent/runtime/app/features/agent/ConversationsAdmin/SplitView/ConversationDetail.vue +2 -2
  13. package/dist/modules/agent/runtime/app/features/agent/ConversationsAdmin/SplitView/index.d.vue.ts +1 -1
  14. package/dist/modules/agent/runtime/app/features/agent/ConversationsAdmin/SplitView/index.vue.d.ts +1 -1
  15. package/dist/modules/agent/runtime/app/features/agent/Panel/Input/Actions/index.vue +1 -1
  16. package/dist/modules/agent/runtime/app/features/agent/Panel/Welcome/index.vue +1 -1
  17. package/dist/modules/agent/runtime/app/features/agent/Transcript/MessageContent.vue +14 -1
  18. package/dist/modules/agent/runtime/app/features/agent/Transcript/index.vue +31 -13
  19. package/dist/modules/agent/runtime/app/features/agent/index.vue +1 -1
  20. package/dist/modules/agent/runtime/app/helpers/linkifyBlockUuids.d.ts +11 -0
  21. package/dist/modules/agent/runtime/app/helpers/linkifyBlockUuids.js +47 -0
  22. package/dist/modules/agent/runtime/app/tools/add_content_search_paragraphs/index.d.ts +1 -1
  23. package/dist/modules/agent/runtime/app/tools/add_fragment/index.d.ts +1 -1
  24. package/dist/modules/agent/runtime/app/tools/add_media_paragraph/index.d.ts +1 -1
  25. package/dist/modules/agent/runtime/app/tools/add_paragraphs/index.d.ts +1 -1
  26. package/dist/modules/agent/runtime/app/tools/add_reusable_paragraph/index.d.ts +1 -1
  27. package/dist/modules/agent/runtime/app/tools/add_template/index.d.ts +1 -1
  28. package/dist/modules/agent/runtime/app/tools/ask_question/Component.vue +1 -1
  29. package/dist/modules/agent/runtime/app/tools/ask_question/index.d.ts +1 -1
  30. package/dist/modules/agent/runtime/app/tools/auto_translate_paragraphs/Component.d.vue.ts +22 -0
  31. package/dist/modules/agent/runtime/app/tools/auto_translate_paragraphs/Component.vue +28 -26
  32. package/dist/modules/agent/runtime/app/tools/auto_translate_paragraphs/Component.vue.d.ts +22 -0
  33. package/dist/modules/agent/runtime/app/tools/auto_translate_paragraphs/index.d.ts +16 -1
  34. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/Component.d.vue.ts +22 -0
  35. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/Component.vue +59 -16
  36. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/Component.vue.d.ts +22 -0
  37. package/dist/modules/agent/runtime/app/tools/delegate_text_rewrite/index.d.ts +15 -0
  38. package/dist/modules/agent/runtime/app/tools/delete_paragraphs/index.d.ts +1 -1
  39. package/dist/modules/agent/runtime/app/tools/detach_reusable_paragraph/index.d.ts +1 -1
  40. package/dist/modules/agent/runtime/app/tools/duplicate_paragraphs/index.d.ts +1 -1
  41. package/dist/modules/agent/runtime/app/tools/fieldDiffApproval.d.ts +85 -15
  42. package/dist/modules/agent/runtime/app/tools/fieldDiffApproval.js +136 -28
  43. package/dist/modules/agent/runtime/app/tools/find_paragraphs/index.d.ts +2 -2
  44. package/dist/modules/agent/runtime/app/tools/get_bundle_info/index.js +6 -2
  45. package/dist/modules/agent/runtime/app/tools/get_content_fields/index.d.ts +3 -3
  46. package/dist/modules/agent/runtime/app/tools/get_paragraph_context/index.d.ts +5 -5
  47. package/dist/modules/agent/runtime/app/tools/get_paragraphs_in_viewport/index.d.ts +1 -1
  48. package/dist/modules/agent/runtime/app/tools/get_referenced_entities/index.d.ts +1 -1
  49. package/dist/modules/agent/runtime/app/tools/go_to_history_index/index.d.ts +1 -1
  50. package/dist/modules/agent/runtime/app/tools/move_paragraphs/index.d.ts +1 -1
  51. package/dist/modules/agent/runtime/app/tools/rearrange_paragraphs/index.d.ts +1 -1
  52. package/dist/modules/agent/runtime/app/tools/replace_content_search_item/index.d.ts +1 -1
  53. package/dist/modules/agent/runtime/app/tools/replace_media_field/index.d.ts +1 -1
  54. package/dist/modules/agent/runtime/app/tools/schemas.d.ts +17 -7
  55. package/dist/modules/agent/runtime/app/tools/schemas.js +29 -12
  56. package/dist/modules/agent/runtime/app/tools/search_text/index.js +1 -1
  57. package/dist/modules/agent/runtime/app/tools/set_paragraph_options/index.d.ts +1 -1
  58. package/dist/modules/agent/runtime/app/tools/swap_paragraphs/index.d.ts +1 -1
  59. package/dist/modules/agent/runtime/app/tools/update_text_fields/Component.d.vue.ts +22 -0
  60. package/dist/modules/agent/runtime/app/tools/update_text_fields/Component.vue +54 -30
  61. package/dist/modules/agent/runtime/app/tools/update_text_fields/Component.vue.d.ts +22 -0
  62. package/dist/modules/agent/runtime/app/tools/update_text_fields/index.d.ts +18 -3
  63. package/dist/modules/agent/runtime/server/classes/FieldStreamParser/index.js +10 -15
  64. package/dist/modules/agent/runtime/server/default-system-prompts/architecture.js +1 -1
  65. package/dist/modules/agent/runtime/server/default-system-prompts/important-rules.js +1 -0
  66. package/dist/modules/agent/runtime/shared/toolParams.d.ts +3 -3
  67. package/dist/modules/agent/runtime/shared/types.d.ts +3 -3
  68. package/dist/modules/charts/index.d.mts +14 -1
  69. package/dist/modules/charts/index.mjs +37 -2
  70. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.d.ts +1 -1
  71. package/dist/modules/charts/runtime/blokkli/tools/chart_schemas.js +12 -5
  72. package/dist/modules/charts/runtime/components/ChartRenderer/index.vue +7 -16
  73. package/dist/modules/charts/runtime/features/charts/Editor/AdvancedConfigPanel/index.vue +1 -1
  74. package/dist/modules/charts/runtime/features/charts/Editor/ChartTypeOptions/Field.vue +19 -9
  75. package/dist/modules/charts/runtime/features/charts/Editor/ColorDropdown/index.vue +7 -77
  76. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/OutputPreviewTable/index.vue +1 -1
  77. package/dist/modules/charts/runtime/features/charts/Editor/CsvImport/csvHelpers.d.ts +1 -1
  78. package/dist/modules/charts/runtime/features/charts/Editor/DataTable/index.vue +16 -8
  79. package/dist/modules/charts/runtime/features/charts/Editor/NumberFormatEditor/index.vue +23 -7
  80. package/dist/modules/charts/runtime/features/charts/Editor/index.vue +5 -6
  81. package/dist/modules/charts/runtime/features/charts/Editor/useChartEditorState.d.ts +1 -1
  82. package/dist/modules/charts/runtime/helpers/index.d.ts +2 -1
  83. package/dist/modules/charts/runtime/helpers/index.js +4 -2
  84. package/dist/modules/drupal/graphql/base/fragment.paragraphsBlokkliEditState.graphql +5 -0
  85. package/dist/modules/drupal/graphql/base/fragment.paragraphsBlokkliMutationResult.graphql +3 -0
  86. package/dist/modules/drupal/index.d.mts +1 -1
  87. package/dist/modules/drupal/runtime/adapter/index.js +5 -1
  88. package/dist/modules/iframes/index.d.mts +1 -1
  89. package/dist/modules/index.d.mts +1 -1
  90. package/dist/modules/readability/index.d.mts +1 -1
  91. package/dist/modules/readability/index.mjs +2 -1
  92. package/dist/modules/table-of-contents/index.d.mts +1 -1
  93. package/dist/runtime/components/Blocks/NotImplemented/index.vue +1 -1
  94. package/dist/runtime/composables/useBlokkliRuntimeConfig.d.ts +50 -0
  95. package/dist/runtime/composables/useBlokkliRuntimeConfig.js +34 -0
  96. package/dist/runtime/editor/adapter/index.d.ts +2 -1
  97. package/dist/runtime/editor/components/Actions/Title/index.vue +1 -1
  98. package/dist/runtime/editor/components/Actions/index.vue +1 -1
  99. package/dist/runtime/editor/components/ArtboardTooltip/index.d.vue.ts +1 -0
  100. package/dist/runtime/editor/components/ArtboardTooltip/index.vue +2 -2
  101. package/dist/runtime/editor/components/ArtboardTooltip/index.vue.d.ts +1 -0
  102. package/dist/runtime/editor/components/Avatar/index.vue +1 -1
  103. package/dist/runtime/editor/components/BlockPreviewItem/index.vue +1 -1
  104. package/dist/runtime/editor/components/BlockPreviewRenderer/index.vue +1 -1
  105. package/dist/runtime/editor/components/BlockProxy/index.vue +1 -1
  106. package/dist/runtime/editor/components/BlokkliRootErrorBoundary.vue +1 -1
  107. package/dist/runtime/editor/components/BundleSelector/index.vue +1 -1
  108. package/dist/runtime/editor/components/ColorDropdown/index.d.vue.ts +26 -0
  109. package/dist/runtime/editor/components/ColorDropdown/index.vue +116 -0
  110. package/dist/runtime/editor/components/ColorDropdown/index.vue.d.ts +26 -0
  111. package/dist/runtime/editor/components/Dialog/index.vue +1 -1
  112. package/dist/runtime/editor/components/DiffApproval/Highlight/Item.d.vue.ts +14 -20
  113. package/dist/runtime/editor/components/DiffApproval/Highlight/Item.vue +97 -52
  114. package/dist/runtime/editor/components/DiffApproval/Highlight/Item.vue.d.ts +14 -20
  115. package/dist/runtime/editor/components/DiffApproval/Highlight/index.d.vue.ts +6 -6
  116. package/dist/runtime/editor/components/DiffApproval/Highlight/index.vue +30 -21
  117. package/dist/runtime/editor/components/DiffApproval/Highlight/index.vue.d.ts +6 -6
  118. package/dist/runtime/editor/components/DiffApproval/Toolbar/index.d.vue.ts +19 -9
  119. package/dist/runtime/editor/components/DiffApproval/Toolbar/index.vue +19 -10
  120. package/dist/runtime/editor/components/DiffApproval/Toolbar/index.vue.d.ts +19 -9
  121. package/dist/runtime/editor/components/DiffApproval/index.d.vue.ts +14 -6
  122. package/dist/runtime/editor/components/DiffApproval/index.vue +62 -35
  123. package/dist/runtime/editor/components/DiffApproval/index.vue.d.ts +14 -6
  124. package/dist/runtime/editor/components/DiffApproval/types.d.ts +32 -0
  125. package/dist/runtime/editor/components/DiffApproval/types.js +20 -0
  126. package/dist/runtime/editor/components/DiffViewer/State.vue +1 -1
  127. package/dist/runtime/editor/components/DraggableList.vue +1 -1
  128. package/dist/runtime/editor/components/Dropdown/index.d.vue.ts +6 -4
  129. package/dist/runtime/editor/components/Dropdown/index.vue +91 -31
  130. package/dist/runtime/editor/components/Dropdown/index.vue.d.ts +6 -4
  131. package/dist/runtime/editor/components/DropdownItem/index.vue +1 -1
  132. package/dist/runtime/editor/components/EditIndicator.vue +1 -1
  133. package/dist/runtime/editor/components/EditProvider.vue +2 -2
  134. package/dist/runtime/editor/components/FileDropHandler/index.vue +1 -1
  135. package/dist/runtime/editor/components/FlexTextarea/index.d.vue.ts +1 -1
  136. package/dist/runtime/editor/components/FlexTextarea/index.vue.d.ts +1 -1
  137. package/dist/runtime/editor/components/Form/RadioTabs/index.vue +1 -1
  138. package/dist/runtime/editor/components/Form/Search/index.d.vue.ts +1 -0
  139. package/dist/runtime/editor/components/Form/Search/index.vue +2 -2
  140. package/dist/runtime/editor/components/Form/Search/index.vue.d.ts +1 -0
  141. package/dist/runtime/editor/components/FormOverlay/index.vue +1 -1
  142. package/dist/runtime/editor/components/Icon/index.vue +1 -1
  143. package/dist/runtime/editor/components/Indicators/index.vue +31 -100
  144. package/dist/runtime/editor/components/Konami/Game/index.vue +1 -1
  145. package/dist/runtime/editor/components/Messages/index.vue +1 -1
  146. package/dist/runtime/editor/components/NestedEditorOverlay/index.d.vue.ts +3 -2
  147. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue +5 -4
  148. package/dist/runtime/editor/components/NestedEditorOverlay/index.vue.d.ts +3 -2
  149. package/dist/runtime/editor/components/Overlay/index.vue +1 -1
  150. package/dist/runtime/editor/components/Pagination/index.vue +1 -1
  151. package/dist/runtime/editor/components/Panel/Section/index.vue +1 -1
  152. package/dist/runtime/editor/components/Panel/Tabs/index.d.vue.ts +1 -1
  153. package/dist/runtime/editor/components/Panel/Tabs/index.vue.d.ts +1 -1
  154. package/dist/runtime/editor/components/PluginConfigForm/index.vue +1 -1
  155. package/dist/runtime/editor/components/PluginConfigFormInline/FilterSelect/index.vue +1 -1
  156. package/dist/runtime/editor/components/PluginConfigFormInline/index.vue +1 -1
  157. package/dist/runtime/editor/components/Popup/index.vue +1 -1
  158. package/dist/runtime/editor/components/PopupHost/index.d.vue.ts +13 -0
  159. package/dist/runtime/editor/components/PopupHost/index.vue +12 -0
  160. package/dist/runtime/editor/components/PopupHost/index.vue.d.ts +13 -0
  161. package/dist/runtime/editor/components/PreviewProvider.vue +3 -2
  162. package/dist/runtime/editor/components/RelativeTime/index.vue +7 -13
  163. package/dist/runtime/editor/components/Resizable/index.vue +1 -1
  164. package/dist/runtime/editor/components/RichText/Editor/index.vue +1 -1
  165. package/dist/runtime/editor/components/ScaleToFit/index.vue +1 -1
  166. package/dist/runtime/editor/components/SearchOverlay/index.vue +1 -1
  167. package/dist/runtime/editor/components/SidebarFloater/index.vue +1 -1
  168. package/dist/runtime/editor/components/StatusIcon/index.vue +1 -1
  169. package/dist/runtime/editor/components/StatusIndicator/index.vue +1 -1
  170. package/dist/runtime/editor/components/SystemRequirements/index.vue +1 -1
  171. package/dist/runtime/editor/components/Tabs/index.d.vue.ts +1 -1
  172. package/dist/runtime/editor/components/Tabs/index.vue.d.ts +1 -1
  173. package/dist/runtime/editor/components/Toolbar/ViewOptions/List/Button/index.vue +2 -1
  174. package/dist/runtime/editor/components/Toolbar/index.vue +1 -1
  175. package/dist/runtime/editor/components/Transition/Collapse/index.vue +1 -1
  176. package/dist/runtime/editor/components/Transition/List/index.vue +1 -1
  177. package/dist/runtime/editor/components/index.d.ts +2 -0
  178. package/dist/runtime/editor/components/index.js +2 -0
  179. package/dist/runtime/editor/composables/defineViewOption.js +5 -1
  180. package/dist/runtime/editor/composables/useStickyToolbar.js +1 -4
  181. package/dist/runtime/editor/css/output.css +1 -1
  182. package/dist/runtime/editor/features/add-list/Help/index.vue +1 -1
  183. package/dist/runtime/editor/features/add-list/index.vue +1 -1
  184. package/dist/runtime/editor/features/analyze/Main.vue +15 -2
  185. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodes.vue +4 -1
  186. package/dist/runtime/editor/features/analyze/Results/ResultsItemNodesTarget.vue +25 -16
  187. package/dist/runtime/editor/features/analyze/analyzers/defaults/validations.d.ts +10 -0
  188. package/dist/runtime/editor/features/analyze/analyzers/defaults/validations.js +39 -0
  189. package/dist/runtime/editor/features/analyze/analyzers/helpers/Context.d.ts +5 -1
  190. package/dist/runtime/editor/features/analyze/analyzers/helpers/Context.js +5 -0
  191. package/dist/runtime/editor/features/analyze/index.vue +1 -2
  192. package/dist/runtime/editor/features/anchors/Overlay/index.vue +11 -5
  193. package/dist/runtime/editor/features/anchors/index.vue +2 -1
  194. package/dist/runtime/editor/features/artboard/Overview/index.vue +1 -1
  195. package/dist/runtime/editor/features/artboard/Renderer.vue +1 -1
  196. package/dist/runtime/editor/features/artboard/Scrollbar/index.vue +1 -1
  197. package/dist/runtime/editor/features/block-scheduler/Dialog/index.vue +1 -1
  198. package/dist/runtime/editor/features/block-transfer/index.vue +1 -1
  199. package/dist/runtime/editor/features/breadcrumbs/index.vue +1 -1
  200. package/dist/runtime/editor/features/changelog/changelog.json +17 -1
  201. package/dist/runtime/editor/features/clipboard/DropElement/index.vue +1 -1
  202. package/dist/runtime/editor/features/comments/AddForm/index.vue +1 -1
  203. package/dist/runtime/editor/features/comments/Comment/Meta/index.vue +1 -1
  204. package/dist/runtime/editor/features/comments/Comment/index.vue +1 -1
  205. package/dist/runtime/editor/features/comments/Thread/index.vue +1 -1
  206. package/dist/runtime/editor/features/complex-options/index.vue +1 -0
  207. package/dist/runtime/editor/features/debug/Main.vue +1 -1
  208. package/dist/runtime/editor/features/dev-mode/index.vue +1 -1
  209. package/dist/runtime/editor/features/dragging-overlay/DragItems/index.vue +1 -1
  210. package/dist/runtime/editor/features/dragging-overlay/index.vue +1 -1
  211. package/dist/runtime/editor/features/droppable-field-edit/Overlay/index.vue +1 -1
  212. package/dist/runtime/editor/features/editable-field/Overlay/Frame/index.vue +1 -1
  213. package/dist/runtime/editor/features/editable-field/Overlay/Plaintext/index.d.vue.ts +1 -5
  214. package/dist/runtime/editor/features/editable-field/Overlay/Plaintext/index.vue.d.ts +1 -5
  215. package/dist/runtime/editor/features/editable-field/Overlay/ReadabilityIndicator/ChunkOverlay.vue +1 -1
  216. package/dist/runtime/editor/features/editable-field/Overlay/index.vue +1 -1
  217. package/dist/runtime/editor/features/editable-mask/index.vue +1 -1
  218. package/dist/runtime/editor/features/entity-title/index.vue +17 -7
  219. package/dist/runtime/editor/features/help/Dialog/index.vue +1 -1
  220. package/dist/runtime/editor/features/help/Shortcuts/index.vue +1 -1
  221. package/dist/runtime/editor/features/history/List/index.vue +1 -1
  222. package/dist/runtime/editor/features/import-existing/Dialog/index.vue +1 -1
  223. package/dist/runtime/editor/features/library/index.vue +1 -0
  224. package/dist/runtime/editor/features/media-library/index.vue +1 -1
  225. package/dist/runtime/editor/features/options/Form/Item.vue +5 -12
  226. package/dist/runtime/editor/features/options/Form/Radios/index.d.vue.ts +5 -4
  227. package/dist/runtime/editor/features/options/Form/Radios/index.vue +8 -5
  228. package/dist/runtime/editor/features/options/Form/Radios/index.vue.d.ts +5 -4
  229. package/dist/runtime/editor/features/options/Form/Text/index.d.vue.ts +4 -0
  230. package/dist/runtime/editor/features/options/Form/Text/index.vue +11 -3
  231. package/dist/runtime/editor/features/options/Form/Text/index.vue.d.ts +4 -0
  232. package/dist/runtime/editor/features/options/index.vue +1 -1
  233. package/dist/runtime/editor/features/publish/Dialog/Item.vue +4 -7
  234. package/dist/runtime/editor/features/publish/Dialog/PublishOption.vue +1 -1
  235. package/dist/runtime/editor/features/publish/Dialog/Violations.d.vue.ts +12 -0
  236. package/dist/runtime/editor/features/publish/Dialog/Violations.vue +117 -0
  237. package/dist/runtime/editor/features/publish/Dialog/Violations.vue.d.ts +12 -0
  238. package/dist/runtime/editor/features/publish/Dialog/index.vue +61 -24
  239. package/dist/runtime/editor/features/publish/index.vue +2 -4
  240. package/dist/runtime/editor/features/publish/types.d.ts +0 -4
  241. package/dist/runtime/editor/features/referenced-entities/List/Item/index.vue +1 -0
  242. package/dist/runtime/editor/features/responsive-preview/Frame/index.vue +1 -1
  243. package/dist/runtime/editor/features/search/index.vue +1 -1
  244. package/dist/runtime/editor/features/selection/AddButtons/Renderer/index.vue +1 -1
  245. package/dist/runtime/editor/features/settings/Dialog/FeatureSetting/index.vue +1 -1
  246. package/dist/runtime/editor/features/settings/index.vue +1 -1
  247. package/dist/runtime/editor/features/structure/List/Item/index.vue +1 -1
  248. package/dist/runtime/editor/features/structure/index.vue +1 -1
  249. package/dist/runtime/editor/features/templates/DialogManageTemplates/Item.vue +1 -0
  250. package/dist/runtime/editor/features/templates/DialogManageTemplates/index.vue +1 -1
  251. package/dist/runtime/editor/features/theme/index.vue +1 -1
  252. package/dist/runtime/editor/features/touch-action-bar/Bar/index.vue +1 -1
  253. package/dist/runtime/editor/features/tour/Overlay/index.vue +1 -1
  254. package/dist/runtime/editor/features/transform/Dialog/index.vue +1 -1
  255. package/dist/runtime/editor/features/translations/SelectionTable/index.vue +1 -1
  256. package/dist/runtime/editor/features/workspace/index.vue +1 -1
  257. package/dist/runtime/editor/helpers/color/index.d.ts +7 -0
  258. package/dist/runtime/editor/helpers/color/index.js +14 -0
  259. package/dist/runtime/editor/helpers/diff/index.d.ts +98 -0
  260. package/dist/runtime/editor/helpers/diff/index.js +262 -0
  261. package/dist/runtime/editor/helpers/injections.d.ts +11 -0
  262. package/dist/runtime/editor/helpers/injections.js +1 -0
  263. package/dist/runtime/editor/helpers/options/index.d.ts +2 -0
  264. package/dist/runtime/editor/helpers/options/index.js +21 -0
  265. package/dist/runtime/editor/plugins/BlockIndicator/index.d.vue.ts +24 -1
  266. package/dist/runtime/editor/plugins/BlockIndicator/index.vue +17 -7
  267. package/dist/runtime/editor/plugins/BlockIndicator/index.vue.d.ts +24 -1
  268. package/dist/runtime/editor/plugins/ItemAction/index.d.vue.ts +1 -0
  269. package/dist/runtime/editor/plugins/ItemAction/index.vue +1 -1
  270. package/dist/runtime/editor/plugins/ItemAction/index.vue.d.ts +1 -0
  271. package/dist/runtime/editor/plugins/Sidebar/Detached/index.d.vue.ts +1 -1
  272. package/dist/runtime/editor/plugins/Sidebar/Detached/index.vue.d.ts +1 -1
  273. package/dist/runtime/editor/plugins/Sidebar/index.d.vue.ts +2 -2
  274. package/dist/runtime/editor/plugins/Sidebar/index.vue +1 -1
  275. package/dist/runtime/editor/plugins/Sidebar/index.vue.d.ts +2 -2
  276. package/dist/runtime/editor/plugins/ToolbarButton/index.vue +1 -1
  277. package/dist/runtime/editor/providers/analyze.js +5 -2
  278. package/dist/runtime/editor/providers/animation.d.ts +2 -0
  279. package/dist/runtime/editor/providers/config.d.ts +3 -1
  280. package/dist/runtime/editor/providers/config.js +46 -15
  281. package/dist/runtime/editor/providers/definition.d.ts +4 -3
  282. package/dist/runtime/editor/providers/definition.js +10 -2
  283. package/dist/runtime/editor/providers/plugin.d.ts +1 -0
  284. package/dist/runtime/editor/providers/state.d.ts +21 -0
  285. package/dist/runtime/editor/providers/state.js +10 -0
  286. package/dist/runtime/editor/translations/de.json +9 -4
  287. package/dist/runtime/editor/translations/fr.json +4 -4
  288. package/dist/runtime/editor/translations/gsw_CH.json +9 -4
  289. package/dist/runtime/editor/translations/it.json +4 -4
  290. package/dist/runtime/editor/types/state.d.ts +7 -0
  291. package/dist/runtime/editor/types/ui.d.ts +1 -0
  292. package/dist/runtime/helpers/colors.d.ts +39 -0
  293. package/dist/runtime/helpers/colors.js +28 -0
  294. package/dist/runtime/types/colors.d.ts +11 -0
  295. package/dist/shared/{editor.D28NbXr3.d.mts → editor.BDyiQvbV.d.mts} +434 -406
  296. package/dist/shared/{editor.Gu7mgJ5Q.mjs → editor.BGemL1Oh.mjs} +146 -146
  297. package/dist/types.d.mts +1 -1
  298. package/package.json +74 -82
  299. package/dist/runtime/editor/features/validations/Overlay/Item.d.vue.ts +0 -7
  300. package/dist/runtime/editor/features/validations/Overlay/Item.vue +0 -36
  301. package/dist/runtime/editor/features/validations/Overlay/Item.vue.d.ts +0 -7
  302. package/dist/runtime/editor/features/validations/Overlay/index.d.vue.ts +0 -7
  303. package/dist/runtime/editor/features/validations/Overlay/index.vue +0 -115
  304. package/dist/runtime/editor/features/validations/Overlay/index.vue.d.ts +0 -7
  305. package/dist/runtime/editor/features/validations/SidebarItem/index.d.vue.ts +0 -10
  306. package/dist/runtime/editor/features/validations/SidebarItem/index.vue +0 -41
  307. package/dist/runtime/editor/features/validations/SidebarItem/index.vue.d.ts +0 -10
  308. package/dist/runtime/editor/features/validations/index.d.vue.ts +0 -3
  309. package/dist/runtime/editor/features/validations/index.vue +0 -91
  310. package/dist/runtime/editor/features/validations/index.vue.d.ts +0 -3
  311. package/dist/runtime/editor/types/config.d.ts +0 -5
  312. /package/dist/runtime/{editor/types/config.js → types/colors.js} +0 -0
@@ -26,6 +26,15 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
26
26
  * Optional icon to display in the indicator.
27
27
  */
28
28
  icon?: BlokkliIcon;
29
+ /**
30
+ * Keep the indicator visible when the artboard edge is close to the
31
+ * edge of the visible viewport.
32
+ *
33
+ * Instead of moving out of view, the indicator is shifted onto the
34
+ * artboard so that at least the icon remains visible. Only supported
35
+ * for left-positioned indicators.
36
+ */
37
+ sticky?: boolean;
29
38
  }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
30
39
  click: () => any;
31
40
  }, string, import("vue").PublicProps, Readonly<{
@@ -53,9 +62,23 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
53
62
  * Optional icon to display in the indicator.
54
63
  */
55
64
  icon?: BlokkliIcon;
65
+ /**
66
+ * Keep the indicator visible when the artboard edge is close to the
67
+ * edge of the visible viewport.
68
+ *
69
+ * Instead of moving out of view, the indicator is shifted onto the
70
+ * artboard so that at least the icon remains visible. Only supported
71
+ * for left-positioned indicators.
72
+ */
73
+ sticky?: boolean;
56
74
  }> & Readonly<{
57
75
  onClick?: (() => any) | undefined;
58
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
76
+ }>, {
77
+ label: string;
78
+ icon: BlokkliIcon;
79
+ sticky: boolean;
80
+ position: "left" | "right";
81
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
59
82
  default?: (props: {}) => any;
60
83
  }>;
61
84
  type __VLS_WithSlots<T, S> = T & {
@@ -95,6 +95,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
95
95
  onClick?: ((items: RenderedFieldListItem[]) => any) | undefined;
96
96
  }>, {
97
97
  keyCode: string;
98
+ description: string;
98
99
  disabled: boolean | string;
99
100
  icon: BlokkliIcon;
100
101
  active: boolean;
@@ -70,7 +70,7 @@ const uuids = computed(() => selection.uuids.value);
70
70
  const props = defineProps({
71
71
  id: { type: String, required: true },
72
72
  title: { type: String, required: true },
73
- description: { type: String, required: false },
73
+ description: { type: String, required: false, default: void 0 },
74
74
  disabled: { type: [Boolean, String], required: false, default: false },
75
75
  active: { type: Boolean, required: false, default: void 0 },
76
76
  keyCode: { type: String, required: false, default: void 0 },
@@ -95,6 +95,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
95
95
  onClick?: ((items: RenderedFieldListItem[]) => any) | undefined;
96
96
  }>, {
97
97
  keyCode: string;
98
+ description: string;
98
99
  disabled: boolean | string;
99
100
  icon: BlokkliIcon;
100
101
  active: boolean;
@@ -34,8 +34,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
34
34
  width: number;
35
35
  height: number;
36
36
  };
37
- minHeight: number;
38
37
  minWidth: number;
38
+ minHeight: number;
39
39
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
40
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
41
41
  declare const _default: typeof __VLS_export;
@@ -34,8 +34,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
34
34
  width: number;
35
35
  height: number;
36
36
  };
37
- minHeight: number;
38
37
  minWidth: number;
38
+ minHeight: number;
39
39
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
40
40
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
41
41
  declare const _default: typeof __VLS_export;
@@ -200,9 +200,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
200
200
  width: number;
201
201
  height: number;
202
202
  };
203
- minHeight: number;
204
- minWidth: number;
205
203
  tourText: string;
204
+ minWidth: number;
205
+ minHeight: number;
206
206
  region: SidebarRegion;
207
207
  tooltipTitle: string;
208
208
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -309,7 +309,7 @@ export default {
309
309
  };
310
310
  </script>
311
311
 
312
- <style>/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
312
+ <style>/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
313
313
  .bk-html-root {
314
314
  --bk-sidebar-width-right: 280px;
315
315
  --bk-toolbar-left-width: 50px;
@@ -200,9 +200,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
200
200
  width: number;
201
201
  height: number;
202
202
  };
203
- minHeight: number;
204
- minWidth: number;
205
203
  tourText: string;
204
+ minWidth: number;
205
+ minHeight: number;
206
206
  region: SidebarRegion;
207
207
  tooltipTitle: string;
208
208
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -109,7 +109,7 @@ defineOptions({
109
109
  });
110
110
  </script>
111
111
 
112
- <style>/*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
112
+ <style>/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
113
113
  .bk .bk-toolbar-button {
114
114
  display: flex;
115
115
  height: 40px;
@@ -1,12 +1,15 @@
1
1
  import { ref } from "#imports";
2
2
  import { AnalyzerContext } from "../features/analyze/analyzers/helpers/Context.js";
3
3
  import { normalizeToArray } from "../features/analyze/analyzers/helpers/normalizeArray.js";
4
+ import { validationsAnalyzer } from "../features/analyze/analyzers/defaults/validations.js";
5
+ const DEFAULT_ANALYZERS = [validationsAnalyzer];
4
6
  export default function analyzeProvider(adapters, state, ui, context, $t, readability) {
5
7
  const analyzers = ref([]);
6
8
  const isInitialized = ref(false);
7
9
  let initPromise = null;
8
10
  async function doInit() {
9
11
  const fetched = await adapters.getAggregated("getAnalyzers");
12
+ const all = [...DEFAULT_ANALYZERS, ...fetched];
10
13
  const initCtx = new AnalyzerContext(
11
14
  context.value.language,
12
15
  ui.interfaceLanguage.value,
@@ -17,13 +20,13 @@ export default function analyzeProvider(adapters, state, ui, context, $t, readab
17
20
  readability
18
21
  );
19
22
  await Promise.all(
20
- fetched.map(async (analyzer) => {
23
+ all.map(async (analyzer) => {
21
24
  if (analyzer.init) {
22
25
  await analyzer.init(initCtx);
23
26
  }
24
27
  })
25
28
  );
26
- analyzers.value = fetched;
29
+ analyzers.value = all;
27
30
  isInitialized.value = true;
28
31
  }
29
32
  function ensureInitialized() {
@@ -50,6 +50,8 @@ export type Renderer<T = RectangleBufferCollector<any>> = {
50
50
  *
51
51
  * Renderers are checked from highest to lowest zIndex.
52
52
  * @param coord - Mouse coordinates in screen and artboard space
53
+ * @param coord.mouse - Coordinates in screen space
54
+ * @param coord.mouseArtboard - Coordinates in artboard space
53
55
  * @returns True to claim the click and stop propagation, false/undefined to continue
54
56
  */
55
57
  onClick?: (coord: {
@@ -1,8 +1,10 @@
1
1
  import { type ComputedRef } from '#imports';
2
- import type { ColorOption } from '../types/config.js';
2
+ import type { ColorOption } from '#blokkli/types/colors';
3
3
  export type ConfigProvider = {
4
4
  colorOptions: ComputedRef<ColorOption[]>;
5
5
  getColorOption: (id: string) => ColorOption | undefined;
6
6
  getColorHex: (id: string) => string;
7
+ isColorEnabled: (id: string) => boolean;
8
+ canonicalColorId: (option: ColorOption) => string;
7
9
  };
8
10
  export default function (): ConfigProvider;
@@ -1,18 +1,49 @@
1
- import { computed } from "#imports";
1
+ import { computed, useAppConfig } from "#imports";
2
2
  import { colorOptions as moduleColorOptions } from "#blokkli-build/editor-config";
3
+ import {
4
+ canonicalColorId,
5
+ findColorOption,
6
+ isColorIdValid
7
+ } from "#blokkli/helpers/colors";
8
+ import { useBlokkliRuntimeConfig } from "../../composables/useBlokkliRuntimeConfig.js";
3
9
  export default function() {
4
- const colorOptions = computed(
5
- () => Object.entries(moduleColorOptions).map(([id, entry]) => ({
6
- id,
7
- hex: entry.hex,
8
- label: entry.label
9
- }))
10
- );
11
- function getColorOption(id) {
12
- return colorOptions.value.find((c) => c.id === id);
13
- }
14
- function getColorHex(id) {
15
- return getColorOption(id)?.hex || "#888888";
16
- }
17
- return { colorOptions, getColorOption, getColorHex };
10
+ const appConfig = useAppConfig();
11
+ const { resolveColorHex } = useBlokkliRuntimeConfig();
12
+ const colorOptions = computed(() => {
13
+ const overrides = appConfig.blokkli?.colorOptions ?? {};
14
+ const result = [];
15
+ for (const [id, entry] of Object.entries(moduleColorOptions)) {
16
+ if (overrides[id] === null) continue;
17
+ if ("shades" in entry) {
18
+ const shades = [];
19
+ for (const [shadeId, declaredHex] of Object.entries(entry.shades)) {
20
+ const value = overrides[`${id}.${shadeId}`];
21
+ if (value === null) continue;
22
+ shades.push({
23
+ id: shadeId,
24
+ hex: typeof value === "string" ? value : declaredHex,
25
+ isMain: shadeId === entry.mainShade
26
+ });
27
+ }
28
+ if (shades.length === 0) continue;
29
+ const main = shades.find((s) => s.isMain) ?? shades[0];
30
+ result.push({ id, hex: main.hex, label: entry.label, shades });
31
+ } else {
32
+ const value = overrides[id];
33
+ result.push({
34
+ id,
35
+ hex: typeof value === "string" ? value : entry.hex,
36
+ label: entry.label
37
+ });
38
+ }
39
+ }
40
+ return result;
41
+ });
42
+ return {
43
+ colorOptions,
44
+ getColorOption: (id) => findColorOption(id, colorOptions.value),
45
+ getColorHex: resolveColorHex,
46
+ isColorEnabled: (id) => isColorIdValid(id, colorOptions.value),
47
+ canonicalColorId
48
+ };
18
49
  }
@@ -3,7 +3,7 @@ import type { BlockDefinition, FragmentDefinition, ProviderDefinition } from '#b
3
3
  import type { ValidFieldListTypes, BlockBundleWithNested, ValidProviderTypes } from '#blokkli-build/generated-types';
4
4
  import type { DeepReadonly } from 'vue';
5
5
  import type { BlockDefinitionOptionsInput } from '../../types/definitions.js';
6
- import type { RuntimeBlockOptionArray } from '../../../global/types/blockOptions.js';
6
+ import type { DefinitionString, RuntimeBlockOptionArray } from '../../../global/types/blockOptions.js';
7
7
  import type { RenderedFieldListItem } from '../types/field.js';
8
8
  export type DefinitionProvider = {
9
9
  /**
@@ -14,7 +14,7 @@ export type DefinitionProvider = {
14
14
  * 2. Parent bundle specific (e.g., bundle__parent:accordion)
15
15
  * 3. Default bundle definition
16
16
  *
17
- * @param bundle - The block bundle name
17
+ * @param bundleOrBlock - The block bundle name, or a rendered field list item
18
18
  * @param fieldListType - The field list type context
19
19
  * @param parentBundle - Optional parent block bundle for nested blocks
20
20
  * @returns The block definition, or undefined if not found
@@ -95,5 +95,6 @@ export type DefinitionProvider = {
95
95
  * Block bundles that can be added automatically without showing the form.
96
96
  */
97
97
  bundlesWithAutoAdd: ComputedRef<string[]>;
98
+ resolveDefinitionString: (definitionString: DefinitionString) => string;
98
99
  };
99
- export default function (providerType: ValidProviderTypes): DefinitionProvider;
100
+ export default function (providerType: ValidProviderTypes, interfaceLanguage: ComputedRef<string>): DefinitionProvider;
@@ -1,7 +1,8 @@
1
1
  import { computed, ref, readonly } from "#imports";
2
2
  import definitions from "#blokkli-build/definitions";
3
3
  import { OPTIONS } from "#blokkli-build/runtime-options";
4
- export default function(providerType) {
4
+ import { resolveDefinitionString as resolveDefinitionStringBase } from "../helpers/options/index.js";
5
+ export default function(providerType, interfaceLanguage) {
5
6
  const blocks = ref(definitions.blocks);
6
7
  const fragments = ref(definitions.fragments);
7
8
  const providers = ref(definitions.providers);
@@ -114,6 +115,12 @@ export default function(providerType) {
114
115
  return addBehaviour === "no-form" || addBehaviour.startsWith("editable:");
115
116
  }).map((v) => v.bundle);
116
117
  });
118
+ function resolveDefinitionString(definitionString) {
119
+ return resolveDefinitionStringBase(
120
+ definitionString,
121
+ interfaceLanguage.value
122
+ );
123
+ }
117
124
  return {
118
125
  getBlockDefinition,
119
126
  getFragmentDefinition,
@@ -126,7 +133,8 @@ export default function(providerType) {
126
133
  globalOptions: readonly(allGlobalOptions),
127
134
  runtimeOptions: readonly(runtimeOptions),
128
135
  renderKey: readonly(renderKey),
129
- bundlesWithAutoAdd
136
+ bundlesWithAutoAdd,
137
+ resolveDefinitionString
130
138
  };
131
139
  }
132
140
  if (import.meta.hot) {
@@ -47,6 +47,7 @@ export type ViewOption = {
47
47
  keyCode?: string;
48
48
  tourText?: string;
49
49
  weight?: number;
50
+ default?: boolean;
50
51
  };
51
52
  type ViewOptionFunction = PluginAddFunction<ViewOption>;
52
53
  type PluginFunctionMap = {
@@ -78,6 +78,14 @@ export type StateProvider = {
78
78
  * -1 indicates no mutations, 0+ indicates active mutation index.
79
79
  */
80
80
  currentMutationIndex: Readonly<Ref<number>>;
81
+ /**
82
+ * Unix timestamp (in seconds) of when the edit state was last changed, or
83
+ * `null` if there are no changes yet. Updates after every mutation.
84
+ *
85
+ * Distinct from `publishOptions.lastChanged`, which is the published entity's
86
+ * change time.
87
+ */
88
+ lastChanged: Readonly<Ref<number | null>>;
81
89
  /**
82
90
  * Validation violations for the current state.
83
91
  *
@@ -95,6 +103,19 @@ export type StateProvider = {
95
103
  * @returns True if successful, false if failed
96
104
  */
97
105
  mutateWithLoadingState: MutateWithLoadingStateFunction;
106
+ /**
107
+ * Apply the raw state returned by a mutation as the current editor state.
108
+ *
109
+ * Use this when a caller has invoked an adapter mutation directly (bypassing
110
+ * {@link mutateWithLoadingState}) and wants to push the response's `state`
111
+ * payload into the editor without an extra round-trip. The caller is
112
+ * responsible for only invoking this when the response belongs to the
113
+ * current edit state.
114
+ *
115
+ * @param rawState - The `state` field from a {@link MutationResponseLike}
116
+ * response, or `null`/`undefined` to no-op.
117
+ */
118
+ applyMutationState: (rawState: unknown) => void;
98
119
  /**
99
120
  * Current edit mode.
100
121
  *
@@ -49,6 +49,7 @@ export default async function(eventBus, adapter, context, $t, providerKey, permi
49
49
  });
50
50
  const currentMutationIndex = ref(-1);
51
51
  const isLoading = ref(false);
52
+ const lastChanged = ref(null);
52
53
  const entity = ref({
53
54
  label: "",
54
55
  status: false,
@@ -135,6 +136,7 @@ export default async function(eventBus, adapter, context, $t, providerKey, permi
135
136
  entity.value.label = context2?.entity?.label;
136
137
  entity.value.status = context2?.entity?.status;
137
138
  entity.value.bundleLabel = context2?.entity?.bundleLabel || "";
139
+ lastChanged.value = context2?.lastChanged ?? null;
138
140
  updatePublishOptions(mapPublishOptions(context2));
139
141
  translation.value.isTranslatable = !!context2?.translationState?.isTranslatable;
140
142
  translation.value.translations = context2?.translationState?.translations?.filter(falsy) || [];
@@ -370,6 +372,12 @@ export default async function(eventBus, adapter, context, $t, providerKey, permi
370
372
  function setOverrideState(state) {
371
373
  setContext(state, true);
372
374
  }
375
+ function applyMutationState(rawState) {
376
+ if (!rawState) {
377
+ return;
378
+ }
379
+ setContext(adapter.mapState(rawState));
380
+ }
373
381
  function clearOverrideState() {
374
382
  if (!_mappedState) {
375
383
  throw new Error("Missing previous state.");
@@ -390,7 +398,9 @@ export default async function(eventBus, adapter, context, $t, providerKey, permi
390
398
  mutations,
391
399
  violations,
392
400
  currentMutationIndex,
401
+ lastChanged: readonly(lastChanged),
393
402
  mutateWithLoadingState,
403
+ applyMutationState,
394
404
  editMode,
395
405
  canEdit,
396
406
  isLoading: readonly(isLoading),
@@ -291,6 +291,9 @@
291
291
  "analyzerReadabiliyOkTitle": "Text könnte einfacher sein",
292
292
  "analyzerReadabiliyShorterSentences": "Verwenden Sie kürzere Sätze und einfachere Formulierungen.",
293
293
  "analyzerReadabiliyTitle": "Probleme bei Lesbarkeit",
294
+ "analyzerValidationsDescription": "Validierungsfehler für den aktuellen Stand der Seite.",
295
+ "analyzerValidationsLabel": "Validierungen",
296
+ "analyzerValidationsPassDescription": "Keine Validierungsfehler für den aktuellen Stand der Seite.",
294
297
  "arrowLeft": "Pfeil links",
295
298
  "arrowRight": "Pfeil rechts",
296
299
  "artboard": "Vorschau",
@@ -534,6 +537,7 @@
534
537
  "deleteConversation": "Konversation löschen",
535
538
  "deleteError": "Das Element konnte nicht entfernt werden.",
536
539
  "deleteNoPermission": "Löschen aufgrund fehlender Berechtigung nicht möglich.",
540
+ "deleted": "gelöscht",
537
541
  "description": "Beschreibung",
538
542
  "diffBefore": "Vorher",
539
543
  "diffModeInline": "Hervorgehoben",
@@ -581,6 +585,7 @@
581
585
  "editableFieldFullscreen": "Vollbild",
582
586
  "editableFieldTranslateTooltip": "Den aktuellen Text automatisch übersetzen.",
583
587
  "editingDisabled": "Bearbeiten ist für diesen Blocktyp deaktiviert.",
588
+ "entityTitleLastChanged": "Zuletzt geändert",
584
589
  "entityTitleTourText": "<p>Zeigt den Titel und Status der aktuellen Seite an.</p><p>Klicken Sie auf den Titel um das Bearbeitungsformular anzuzeigen.</p>",
585
590
  "entityTitleTourTitle": "Seite",
586
591
  "errorCapturedMessage": "Fehler in «@label»: @errorMessage",
@@ -672,6 +677,7 @@
672
677
  "libraryPlaceDialogTitle": "Block aus Bibliothek hinzufügen",
673
678
  "link": "Link",
674
679
  "loading": "Wird geladen",
680
+ "mainColor": "Hauptfarbe",
675
681
  "manageSchedule": "Planung verwalten",
676
682
  "manageScheduling": "Planung verwalten",
677
683
  "maskTourText": "Wechseln Sie zwischen Anzeigen und Verbergen nicht bearbeitbarer Teile der Seite.",
@@ -764,6 +770,8 @@
764
770
  "publishSuccess": "Änderungen erfolgreich publiziert.",
765
771
  "publishSuccessfullyPublished": "Erfolgreich veröffentlicht",
766
772
  "publishSuccessfullySaved": "Erfolgreich gespeichert",
773
+ "publishValidationErrorsDescription": "Beheben Sie die folgenden Probleme und publizieren Sie erneut.",
774
+ "publishValidationErrorsTitle": "Publikation nicht möglich: Validierungsfehler",
767
775
  "publishWillBePublished": "Wird publiziert",
768
776
  "publishWillBeScheduled": "Wird geplant",
769
777
  "qrCode": "QR-Code",
@@ -776,6 +784,7 @@
776
784
  "relatedContent": "Verwandte Inhalte",
777
785
  "relatedContentNoEntitiesFound": "Keine verwandten Inhalte gefunden",
778
786
  "relatedContentTooltip": "Inhalte wie Seiten oder Bilder, die von diesem Block referenziert oder verlinkt werden.",
787
+ "relativeTimeJustNow": "gerade eben",
779
788
  "remove": "Entfernen",
780
789
  "replaceField": "@field ersetzen",
781
790
  "reply": "Antworten",
@@ -929,10 +938,6 @@
929
938
  "translationsTranslateNoTexts": "Keine übersetzbaren Texte auf dieser Seite gefunden.",
930
939
  "undo": "Rückgängig",
931
940
  "unexpectedMutationError": "Ein unerwarteter Fehler ist aufgetreten",
932
- "userDeleted": "[gelöscht]",
933
- "validationsNoneFound": "Keine Validierungsfehler gefunden.",
934
- "validationsToolbarLabel": "Validierungen",
935
- "validationsTourText": "Zeigt Validierungsfehler für Inhalte auf der aktuellen Seite an.",
936
941
  "video": "Video",
937
942
  "viewBannerReviewText": "Sie können Kommentare ansehen und hinzufügen, aber keine Inhalte bearbeiten.",
938
943
  "viewBannerReviewTitle": "Sie befinden sich im Review-Modus.",
@@ -94,9 +94,11 @@
94
94
  "commentsMarkAsUnresolved": "Marquer comme non résolu",
95
95
  "commentsShowResolved": "Afficher les résolus",
96
96
  "deleteError": "L'élément n'a pas pu être supprimé.",
97
+ "deleted": "supprimé",
97
98
  "duplicate": "Dupliquer",
98
99
  "duplicateError": "Les éléments n'ont pas pu être dupliqués.",
99
100
  "edit": "Modifier",
101
+ "entityTitleLastChanged": "Dernière modification",
100
102
  "exitDescription": "Fermer l’éditeur sans publier",
101
103
  "failedToConvert": "L'élément n'a pas pu être converti.",
102
104
  "failedToTransform": "The action \"@name\" could not be executed.",
@@ -149,6 +151,7 @@
149
151
  "readabilityTooShort": "Trop court",
150
152
  "readabilityTooShortTooltip": "Le texte nécessite au moins @count mots pour l'analyse de lisibilité.",
151
153
  "readabilityTooltipDescription": "@label mesure la facilité de lecture du texte.",
154
+ "relativeTimeJustNow": "à l'instant",
152
155
  "revertDialogLead": "Cela supprimera toutes les modifications et restaurera l’état actuellement publié. Cette action est irréversible.",
153
156
  "revertDialogSubmit": "Annuler les modifications",
154
157
  "revertDialogTitle": "Annuler les modifications de façon irréversible",
@@ -163,8 +166,5 @@
163
166
  "settingsDialogTitle": "Paramètres",
164
167
  "settingsMenuDescription": "Paramètres personnels pour l’éditeur",
165
168
  "structureToolbarLabel": "Structure",
166
- "translationsBatchTranslateMenuDescription": "Traduire tous les éléments",
167
- "userDeleted": "[supprimé]",
168
- "validationsNoneFound": "Aucune erreur de validation trouvée.",
169
- "validationsToolbarLabel": "Validations"
169
+ "translationsBatchTranslateMenuDescription": "Traduire tous les éléments"
170
170
  }
@@ -291,6 +291,9 @@
291
291
  "analyzerReadabiliyOkTitle": "Teggscht chönnt eifacher si",
292
292
  "analyzerReadabiliyShorterSentences": "Bruch chürzeri Sätz und eifacheri Formulierige.",
293
293
  "analyzerReadabiliyTitle": "Läsbarkeitsproblem im Teggscht",
294
+ "analyzerValidationsDescription": "Validierungsfehler für den aktuellen Stand der Seite.",
295
+ "analyzerValidationsLabel": "Validierungen",
296
+ "analyzerValidationsPassDescription": "Keine Validierungsfehler für den aktuellen Stand der Seite.",
294
297
  "arrowLeft": "Pfeil links",
295
298
  "arrowRight": "Pfeil rechts",
296
299
  "artboard": "Zeichenflächi",
@@ -534,6 +537,7 @@
534
537
  "deleteConversation": "Konversation löschen",
535
538
  "deleteError": "Dr Block het nid chönne glöscht wärde.",
536
539
  "deleteNoPermission": "Lösche ufgrund fählender Berächtigung nid möglich.",
540
+ "deleted": "glöscht",
537
541
  "description": "Beschreibung",
538
542
  "diffBefore": "Vorhär",
539
543
  "diffModeInline": "Inline",
@@ -581,6 +585,7 @@
581
585
  "editableFieldFullscreen": "Vollbild",
582
586
  "editableFieldTranslateTooltip": "Den aktuellen Text automatisch übersetzen.",
583
587
  "editingDisabled": "Bearbeiten ist für diesen Blocktyp deaktiviert.",
588
+ "entityTitleLastChanged": "Zletscht gänderet",
584
589
  "entityTitleTourText": "<p>Zeigt dr Titel und Status vo dr aktuälle Sitte aa.</p><p>Klick uf dr Titel zum s'Sitte-Bearbeitsformular z'öffne.</p>",
585
590
  "entityTitleTourTitle": "Sitte",
586
591
  "errorCapturedMessage": "Fähler in «@label»: @errorMessage",
@@ -672,6 +677,7 @@
672
677
  "libraryPlaceDialogTitle": "Block us dr Bibliothek drzuefüege",
673
678
  "link": "Link",
674
679
  "loading": "Wird geladen",
680
+ "mainColor": "Hauptfarbe",
675
681
  "manageSchedule": "Planung verwalte...",
676
682
  "manageScheduling": "Planung verwalten",
677
683
  "maskTourText": "Wächsle zwüsche Aazeige oder Verstecke vo nid-bearbeitbare Teile vo dr Sitte.",
@@ -764,6 +770,8 @@
764
770
  "publishSuccess": "Änderige erfolgriich publiziert.",
765
771
  "publishSuccessfullyPublished": "Erfolgriich veröffentlicht",
766
772
  "publishSuccessfullySaved": "Erfolgriich gspeicheret",
773
+ "publishValidationErrorsDescription": "Beheben Sie die folgenden Probleme und publizieren Sie erneut.",
774
+ "publishValidationErrorsTitle": "Publikation nicht möglich: Validierungsfehler",
767
775
  "publishWillBePublished": "Würd publiziert",
768
776
  "publishWillBeScheduled": "Würd plant",
769
777
  "qrCode": "QR-Code",
@@ -776,6 +784,7 @@
776
784
  "relatedContent": "Verwandte Inhalte",
777
785
  "relatedContentNoEntitiesFound": "Keine verwandten Inhalte gefunden",
778
786
  "relatedContentTooltip": "Inhalte wie Seiten oder Bilder, die von diesem Block referenziert oder verlinkt werden.",
787
+ "relativeTimeJustNow": "grad ebe",
779
788
  "remove": "Entfernen",
780
789
  "replaceField": "@field ersetzen",
781
790
  "reply": "Antworten",
@@ -929,10 +938,6 @@
929
938
  "translationsTranslateNoTexts": "Keine übersetzbaren Texte auf dieser Seite gefunden.",
930
939
  "undo": "Rückgängig",
931
940
  "unexpectedMutationError": "Es isch e unerwartete Fähler ufträte.",
932
- "userDeleted": "[glöscht]",
933
- "validationsNoneFound": "Keini Validierigsfähler gfunde.",
934
- "validationsToolbarLabel": "Validierige",
935
- "validationsTourText": "Lueg Validierigsfähler für Inhalt oder Struktur uf dr aktuälle Sitte aa.",
936
941
  "video": "Video",
937
942
  "viewBannerReviewText": "Du chasch Kommentär aaluege und drzuefüege, aber kän Inhalt bearbeite.",
938
943
  "viewBannerReviewTitle": "Du bisch im Review-Modus.",
@@ -94,9 +94,11 @@
94
94
  "commentsMarkAsUnresolved": "Segna come non risolto",
95
95
  "commentsShowResolved": "Mostra risolti",
96
96
  "deleteError": "L'elemento non può essere rimosso.",
97
+ "deleted": "eliminato",
97
98
  "duplicate": "Duplica",
98
99
  "duplicateError": "Gli elementi non possono essere duplicati.",
99
100
  "edit": "Modifica",
101
+ "entityTitleLastChanged": "Ultima modifica",
100
102
  "exitDescription": "Chiudi l'editor senza pubblicare",
101
103
  "failedToConvert": "L'elemento non può essere convertito.",
102
104
  "failedToTransform": "The action \"@name\" could not be executed.",
@@ -149,6 +151,7 @@
149
151
  "readabilityTooShort": "Troppo breve",
150
152
  "readabilityTooShortTooltip": "Il testo necessita di almeno @count parole per l'analisi della leggibilità.",
151
153
  "readabilityTooltipDescription": "@label misura quanto è facile leggere il testo.",
154
+ "relativeTimeJustNow": "proprio ora",
152
155
  "revertDialogLead": "Questo eliminerà tutte le modifiche e ripristinerà lo stato attualmente pubblicato. Questa azione non può essere annullata.",
153
156
  "revertDialogSubmit": "Scarta modifiche",
154
157
  "revertDialogTitle": "Scarta irrevocabilmente le modifiche",
@@ -163,8 +166,5 @@
163
166
  "settingsDialogTitle": "Impostazioni",
164
167
  "settingsMenuDescription": "Impostazioni personali per l'editor",
165
168
  "structureToolbarLabel": "Struttura",
166
- "translationsBatchTranslateMenuDescription": "Traduci tutti gli elementi",
167
- "userDeleted": "[eliminato]",
168
- "validationsNoneFound": "Nessun errore di validazione trovato.",
169
- "validationsToolbarLabel": "Validazioni"
169
+ "translationsBatchTranslateMenuDescription": "Traduci tutti gli elementi"
170
170
  }
@@ -50,6 +50,13 @@ export interface MappedState {
50
50
  mutations: MutationItem[];
51
51
  currentUserIsOwner: boolean;
52
52
  ownerName: string;
53
+ /**
54
+ * Unix timestamp (in seconds) of when the edit state was last changed.
55
+ *
56
+ * This is the edit state's own `changed` time (it bumps on every mutation),
57
+ * distinct from `publishOptions.lastChanged`, which is the published entity's.
58
+ */
59
+ lastChanged?: number;
53
60
  ownerId?: string;
54
61
  mutatedState?: {
55
62
  mutatedOptions?: any;
@@ -43,5 +43,6 @@ export type BlockIndicator = {
43
43
  uuid: string;
44
44
  element: HTMLElement;
45
45
  position: 'left' | 'right';
46
+ sticky?: boolean;
46
47
  };
47
48
  export type Placement = 'above-before' | 'above-left' | 'above-center' | 'above-right' | 'above-after' | 'below-before' | 'below-left' | 'below-center' | 'below-right' | 'below-after' | 'top-before' | 'top-after' | 'center-before' | 'center-after' | 'bottom-before' | 'bottom-after';
@@ -0,0 +1,39 @@
1
+ import type { ColorOption } from '../types/colors.js';
2
+ /**
3
+ * Pure runtime helpers for color identity and id validation. No Vue/Nuxt
4
+ * deps — safe to import from any layer (runtime components, editor
5
+ * providers, agent tools, tests).
6
+ *
7
+ * Id space:
8
+ * - Flat color: `<base>` (no dot)
9
+ * - Ramped color: `<base>.<shade>` (shade-qualified)
10
+ *
11
+ * The bare `<base>` form for a ramped color is NOT a valid color id anywhere
12
+ * in the system. Everything that emits ids — the editor's `ColorDropdown`,
13
+ * the chart helpers (`getColorIdAtIndex`), the agent's `chartColorEnum` —
14
+ * uses the canonical shade-qualified form.
15
+ *
16
+ * Hex resolution at runtime goes through
17
+ * `useBlokkliRuntimeConfig().resolveColorHex(id)`, which reads the merged
18
+ * view directly from `app.config.blokkli.colorOptions`. No merge function
19
+ * lives here — Nuxt's app.config layer already handles override merging.
20
+ */
21
+ export declare const FALLBACK_HEX = "#888888";
22
+ export declare function parseColorId(id: string): {
23
+ baseId: string;
24
+ shadeId: string | undefined;
25
+ };
26
+ /**
27
+ * Canonical id for a color option:
28
+ * - Flat color: the bare id.
29
+ * - Ramped color: `<base>.<mainShade>`. Falls back to the first declared
30
+ * shade if none is marked `isMain`.
31
+ */
32
+ export declare function canonicalColorId(option: ColorOption): string;
33
+ export declare function findColorOption(id: string, options: ColorOption[]): ColorOption | undefined;
34
+ /**
35
+ * Strict id validity: bare for flat colors, `<base>.<shade>` for ramped
36
+ * colors with the shade actually declared. Bare ids for ramped colors and
37
+ * shade-qualified ids for flat colors both return false.
38
+ */
39
+ export declare function isColorIdValid(id: string, options: ColorOption[]): boolean;