@design.estate/dees-catalog 3.90.1 → 3.92.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +10399 -4790
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-appui/dees-appui/dees-appui.js +5 -4
- package/dist_ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.js +6 -7
- package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.js +4 -6
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +7 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +16 -2
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +65 -25
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.d.ts +69 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.js +342 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts +48 -3
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.js +128 -39
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js +663 -190
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.js +2 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.d.ts +3 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.js +48 -30
- package/dist_ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +1 -2
- package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-table/styles.js +1 -1
- package/dist_ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.js +9 -9
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.d.ts +1 -1
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +55 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +183 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +412 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +65 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +55 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +589 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.d.ts +21 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.js +41 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.js +215 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.d.ts +58 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.js +126 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +551 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +50 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.js +101 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +424 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +27 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.js +46 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +282 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.d.ts +24 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.js +32 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.js +241 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +28 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +56 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +279 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.d.ts +30 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.js +35 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.js +235 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.d.ts +27 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.js +41 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.js +258 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +35 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.js +162 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +368 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.js +3 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.d.ts +5 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +183 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.d.ts +19 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.js +25 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.js +148 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/harness.demodata.d.ts +22 -0
- package/dist_ts_web/elements/00group-harness/harness.demodata.js +94 -0
- package/dist_ts_web/elements/00group-harness/harness.helpers.d.ts +37 -0
- package/dist_ts_web/elements/00group-harness/harness.helpers.js +221 -0
- package/dist_ts_web/elements/00group-harness/harness.markdown.d.ts +25 -0
- package/dist_ts_web/elements/00group-harness/harness.markdown.js +147 -0
- package/dist_ts_web/elements/00group-harness/harness.styles.d.ts +9 -0
- package/dist_ts_web/elements/00group-harness/harness.styles.js +94 -0
- package/dist_ts_web/elements/00group-harness/index.d.ts +18 -0
- package/dist_ts_web/elements/00group-harness/index.js +22 -0
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +210 -0
- package/dist_ts_web/elements/00group-harness/interfaces.js +11 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +76 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.js +210 -0
- package/dist_ts_web/elements/00group-input/dees-input-code/dees-input-code.js +30 -18
- package/dist_ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.js +73 -46
- package/dist_ts_web/elements/00group-input/dees-input-datepicker/styles.js +15 -16
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.js +2 -4
- package/dist_ts_web/elements/00group-input/dees-input-tags/dees-input-tags.js +36 -15
- package/dist_ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.js +5 -4
- package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.js +10 -89
- package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.js +12 -8
- package/dist_ts_web/elements/00group-layout/dees-chips/dees-chips.js +1 -1
- package/dist_ts_web/elements/00group-layout/dees-pagination/dees-pagination.js +27 -12
- package/dist_ts_web/elements/00group-layout/dees-settings/dees-settings.js +1 -1
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.js +14 -18
- package/dist_ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.js +6 -7
- package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +6 -21
- package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.d.ts +2 -1
- package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.js +10 -4
- package/dist_ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.js +1 -1
- package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +9 -8
- package/dist_ts_web/elements/00group-workspace/dees-workspace/dees-workspace.js +1 -1
- package/dist_ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.js +3 -4
- package/dist_ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.js +8 -78
- package/dist_ts_web/elements/00syntax.d.ts +28 -0
- package/dist_ts_web/elements/00syntax.js +98 -0
- package/dist_ts_web/elements/00theme.js +26 -14
- package/dist_ts_web/elements/index.d.ts +1 -0
- package/dist_ts_web/elements/index.js +2 -1
- package/dist_watch/bundle.js +233948 -0
- package/dist_watch/bundle.js.map +7 -0
- package/dist_watch/index.html +28 -0
- package/package.json +2 -2
- package/readme.hints.md +7 -1
- package/readme.md +116 -9
- package/readme.playbook.md +10 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-appui/dees-appui/dees-appui.ts +4 -3
- package/ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts +5 -6
- package/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts +3 -5
- package/ts_web/elements/00group-button/dees-button/dees-button.demo.ts +15 -1
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +59 -24
- package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.ts +401 -0
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts +132 -38
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts +649 -187
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts +1 -0
- package/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts +45 -30
- package/ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +0 -1
- package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-table/styles.ts +1 -1
- package/ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.ts +9 -9
- package/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +193 -0
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +301 -0
- package/ts_web/elements/00group-harness/dees-harness-chat/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +56 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +514 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.ts +44 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.ts +172 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.ts +129 -0
- package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +498 -0
- package/ts_web/elements/00group-harness/dees-harness-message/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.ts +105 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +342 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.ts +47 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +225 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.ts +32 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.ts +195 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +59 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +222 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.ts +35 -0
- package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.ts +187 -0
- package/ts_web/elements/00group-harness/dees-harness-status/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.ts +43 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.ts +206 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.ts +166 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +315 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/index.ts +2 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +205 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.ts +25 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.ts +96 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/index.ts +1 -0
- package/ts_web/elements/00group-harness/harness.demodata.ts +113 -0
- package/ts_web/elements/00group-harness/harness.helpers.ts +227 -0
- package/ts_web/elements/00group-harness/harness.markdown.ts +151 -0
- package/ts_web/elements/00group-harness/harness.styles.ts +96 -0
- package/ts_web/elements/00group-harness/index.ts +22 -0
- package/ts_web/elements/00group-harness/interfaces.ts +203 -0
- package/ts_web/elements/00group-harness/toolregistry.ts +264 -0
- package/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +29 -17
- package/ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.ts +72 -45
- package/ts_web/elements/00group-input/dees-input-datepicker/styles.ts +14 -15
- package/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +1 -3
- package/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts +35 -14
- package/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts +4 -3
- package/ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.ts +9 -88
- package/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts +11 -7
- package/ts_web/elements/00group-layout/dees-chips/dees-chips.ts +1 -1
- package/ts_web/elements/00group-layout/dees-pagination/dees-pagination.ts +26 -11
- package/ts_web/elements/00group-layout/dees-settings/dees-settings.ts +1 -1
- package/ts_web/elements/00group-layout/dees-stepper/dees-stepper.ts +13 -17
- package/ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.ts +5 -6
- package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +5 -20
- package/ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.ts +10 -3
- package/ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.ts +1 -1
- package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +8 -7
- package/ts_web/elements/00group-workspace/dees-workspace/dees-workspace.ts +1 -1
- package/ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.ts +2 -3
- package/ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.ts +7 -77
- package/ts_web/elements/00syntax.ts +124 -0
- package/ts_web/elements/00theme.ts +25 -13
- package/ts_web/elements/index.ts +1 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency-free line diffing for dees-dataview-codebox: LCS-based
|
|
3
|
+
* before/after comparison, unified-patch parsing, context folding, split
|
|
4
|
+
* pairing, and intraline (word-level) change detection. Pure data — no DOM.
|
|
5
|
+
*/
|
|
6
|
+
const splitLines = (text) => {
|
|
7
|
+
if (!text)
|
|
8
|
+
return [];
|
|
9
|
+
const lines = text.split('\n');
|
|
10
|
+
if (lines.length && lines[lines.length - 1] === '')
|
|
11
|
+
lines.pop();
|
|
12
|
+
return lines;
|
|
13
|
+
};
|
|
14
|
+
/** Cells beyond this budget fall back to a trimmed block-replace diff. */
|
|
15
|
+
const maxLcsCells = 4_000_000;
|
|
16
|
+
/**
|
|
17
|
+
* Line-level diff of two texts. Common prefix/suffix are trimmed first so
|
|
18
|
+
* the O(n*m) LCS table only covers the changed middle; oversized middles
|
|
19
|
+
* degrade gracefully to one remove-block + add-block.
|
|
20
|
+
*/
|
|
21
|
+
export const computeLineDiff = (beforeText, afterText) => {
|
|
22
|
+
const beforeLines = splitLines(beforeText);
|
|
23
|
+
const afterLines = splitLines(afterText);
|
|
24
|
+
let prefixLength = 0;
|
|
25
|
+
while (prefixLength < beforeLines.length
|
|
26
|
+
&& prefixLength < afterLines.length
|
|
27
|
+
&& beforeLines[prefixLength] === afterLines[prefixLength]) {
|
|
28
|
+
prefixLength++;
|
|
29
|
+
}
|
|
30
|
+
let suffixLength = 0;
|
|
31
|
+
while (suffixLength < beforeLines.length - prefixLength
|
|
32
|
+
&& suffixLength < afterLines.length - prefixLength
|
|
33
|
+
&& beforeLines[beforeLines.length - 1 - suffixLength] === afterLines[afterLines.length - 1 - suffixLength]) {
|
|
34
|
+
suffixLength++;
|
|
35
|
+
}
|
|
36
|
+
const beforeMiddle = beforeLines.slice(prefixLength, beforeLines.length - suffixLength);
|
|
37
|
+
const afterMiddle = afterLines.slice(prefixLength, afterLines.length - suffixLength);
|
|
38
|
+
const rows = [];
|
|
39
|
+
for (let index = 0; index < prefixLength; index++) {
|
|
40
|
+
rows.push({ kind: 'context', text: beforeLines[index], oldLine: index + 1, newLine: index + 1 });
|
|
41
|
+
}
|
|
42
|
+
let oldLine = prefixLength + 1;
|
|
43
|
+
let newLine = prefixLength + 1;
|
|
44
|
+
const pushMiddle = (operations) => {
|
|
45
|
+
for (const operation of operations) {
|
|
46
|
+
if (operation.kind === 'context') {
|
|
47
|
+
rows.push({ kind: 'context', text: operation.text, oldLine: oldLine++, newLine: newLine++ });
|
|
48
|
+
}
|
|
49
|
+
else if (operation.kind === 'remove') {
|
|
50
|
+
rows.push({ kind: 'remove', text: operation.text, oldLine: oldLine++ });
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
rows.push({ kind: 'add', text: operation.text, newLine: newLine++ });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
if (beforeMiddle.length * afterMiddle.length > maxLcsCells) {
|
|
58
|
+
pushMiddle([
|
|
59
|
+
...beforeMiddle.map((text) => ({ kind: 'remove', text })),
|
|
60
|
+
...afterMiddle.map((text) => ({ kind: 'add', text })),
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
else if (beforeMiddle.length || afterMiddle.length) {
|
|
64
|
+
// classic LCS table over the trimmed middle
|
|
65
|
+
const rowCount = beforeMiddle.length;
|
|
66
|
+
const columnCount = afterMiddle.length;
|
|
67
|
+
const table = new Uint32Array((rowCount + 1) * (columnCount + 1));
|
|
68
|
+
const cell = (row, column) => table[row * (columnCount + 1) + column];
|
|
69
|
+
for (let row = rowCount - 1; row >= 0; row--) {
|
|
70
|
+
for (let column = columnCount - 1; column >= 0; column--) {
|
|
71
|
+
table[row * (columnCount + 1) + column] = beforeMiddle[row] === afterMiddle[column]
|
|
72
|
+
? cell(row + 1, column + 1) + 1
|
|
73
|
+
: Math.max(cell(row + 1, column), cell(row, column + 1));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const operations = [];
|
|
77
|
+
let row = 0;
|
|
78
|
+
let column = 0;
|
|
79
|
+
while (row < rowCount && column < columnCount) {
|
|
80
|
+
if (beforeMiddle[row] === afterMiddle[column]) {
|
|
81
|
+
operations.push({ kind: 'context', text: beforeMiddle[row] });
|
|
82
|
+
row++;
|
|
83
|
+
column++;
|
|
84
|
+
}
|
|
85
|
+
else if (cell(row + 1, column) >= cell(row, column + 1)) {
|
|
86
|
+
operations.push({ kind: 'remove', text: beforeMiddle[row] });
|
|
87
|
+
row++;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
operations.push({ kind: 'add', text: afterMiddle[column] });
|
|
91
|
+
column++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
while (row < rowCount)
|
|
95
|
+
operations.push({ kind: 'remove', text: beforeMiddle[row++] });
|
|
96
|
+
while (column < columnCount)
|
|
97
|
+
operations.push({ kind: 'add', text: afterMiddle[column++] });
|
|
98
|
+
pushMiddle(operations);
|
|
99
|
+
}
|
|
100
|
+
for (let index = 0; index < suffixLength; index++) {
|
|
101
|
+
rows.push({
|
|
102
|
+
kind: 'context',
|
|
103
|
+
text: beforeLines[beforeLines.length - suffixLength + index],
|
|
104
|
+
oldLine: oldLine++,
|
|
105
|
+
newLine: newLine++,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return annotateIntraline(rows);
|
|
109
|
+
};
|
|
110
|
+
/** Parses a unified diff/patch into rows (file headers skipped, hunks kept). */
|
|
111
|
+
export const parseUnifiedDiff = (patchText) => {
|
|
112
|
+
const rows = [];
|
|
113
|
+
let oldLine = 0;
|
|
114
|
+
let newLine = 0;
|
|
115
|
+
for (const line of patchText.split('\n')) {
|
|
116
|
+
if (line.startsWith('diff ')
|
|
117
|
+
|| line.startsWith('index ')
|
|
118
|
+
|| line.startsWith('+++')
|
|
119
|
+
|| line.startsWith('---')
|
|
120
|
+
|| line.startsWith('\\ No newline')) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const hunkMatch = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@(.*)$/.exec(line);
|
|
124
|
+
if (hunkMatch) {
|
|
125
|
+
oldLine = Number(hunkMatch[1]);
|
|
126
|
+
newLine = Number(hunkMatch[2]);
|
|
127
|
+
rows.push({ kind: 'hunk', text: line });
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (!oldLine && !newLine)
|
|
131
|
+
continue; // outside any hunk
|
|
132
|
+
if (line.startsWith('+')) {
|
|
133
|
+
rows.push({ kind: 'add', text: line.slice(1), newLine: newLine++ });
|
|
134
|
+
}
|
|
135
|
+
else if (line.startsWith('-')) {
|
|
136
|
+
rows.push({ kind: 'remove', text: line.slice(1), oldLine: oldLine++ });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
rows.push({ kind: 'context', text: line.startsWith(' ') ? line.slice(1) : line, oldLine: oldLine++, newLine: newLine++ });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return annotateIntraline(rows);
|
|
143
|
+
};
|
|
144
|
+
const maxIntralineChars = 400;
|
|
145
|
+
/**
|
|
146
|
+
* Word-level segments for balanced remove/add runs (the GitHub-style
|
|
147
|
+
* intraline tint). Only 1:1 paired lines within a run are annotated.
|
|
148
|
+
*/
|
|
149
|
+
const annotateIntraline = (rows) => {
|
|
150
|
+
for (let index = 0; index < rows.length; index++) {
|
|
151
|
+
if (rows[index].kind !== 'remove')
|
|
152
|
+
continue;
|
|
153
|
+
const removeStart = index;
|
|
154
|
+
let removeEnd = index;
|
|
155
|
+
while (removeEnd + 1 < rows.length && rows[removeEnd + 1].kind === 'remove')
|
|
156
|
+
removeEnd++;
|
|
157
|
+
let addEnd = removeEnd;
|
|
158
|
+
while (addEnd + 1 < rows.length && rows[addEnd + 1].kind === 'add')
|
|
159
|
+
addEnd++;
|
|
160
|
+
const removeCount = removeEnd - removeStart + 1;
|
|
161
|
+
const addCount = addEnd - removeEnd;
|
|
162
|
+
if (addCount === removeCount) {
|
|
163
|
+
for (let pairIndex = 0; pairIndex < removeCount; pairIndex++) {
|
|
164
|
+
const removeRow = rows[removeStart + pairIndex];
|
|
165
|
+
const addRow = rows[removeEnd + 1 + pairIndex];
|
|
166
|
+
if (removeRow.text.length <= maxIntralineChars && addRow.text.length <= maxIntralineChars) {
|
|
167
|
+
const [removeSegments, addSegments] = intralineSegments(removeRow.text, addRow.text);
|
|
168
|
+
removeRow.segments = removeSegments;
|
|
169
|
+
addRow.segments = addSegments;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
index = addEnd;
|
|
174
|
+
}
|
|
175
|
+
return rows;
|
|
176
|
+
};
|
|
177
|
+
const tokenizeForIntraline = (text) => {
|
|
178
|
+
return text.match(/(\s+|[A-Za-z0-9_]+|[^\sA-Za-z0-9_]+)/g) ?? [];
|
|
179
|
+
};
|
|
180
|
+
const intralineSegments = (beforeText, afterText) => {
|
|
181
|
+
const beforeTokens = tokenizeForIntraline(beforeText);
|
|
182
|
+
const afterTokens = tokenizeForIntraline(afterText);
|
|
183
|
+
let prefixLength = 0;
|
|
184
|
+
while (prefixLength < beforeTokens.length
|
|
185
|
+
&& prefixLength < afterTokens.length
|
|
186
|
+
&& beforeTokens[prefixLength] === afterTokens[prefixLength]) {
|
|
187
|
+
prefixLength++;
|
|
188
|
+
}
|
|
189
|
+
let suffixLength = 0;
|
|
190
|
+
while (suffixLength < beforeTokens.length - prefixLength
|
|
191
|
+
&& suffixLength < afterTokens.length - prefixLength
|
|
192
|
+
&& beforeTokens[beforeTokens.length - 1 - suffixLength] === afterTokens[afterTokens.length - 1 - suffixLength]) {
|
|
193
|
+
suffixLength++;
|
|
194
|
+
}
|
|
195
|
+
const buildSegments = (tokens) => {
|
|
196
|
+
const prefix = tokens.slice(0, prefixLength).join('');
|
|
197
|
+
const middle = tokens.slice(prefixLength, tokens.length - suffixLength).join('');
|
|
198
|
+
const suffix = tokens.slice(tokens.length - suffixLength).join('');
|
|
199
|
+
const segments = [];
|
|
200
|
+
if (prefix)
|
|
201
|
+
segments.push({ text: prefix, changed: false });
|
|
202
|
+
if (middle)
|
|
203
|
+
segments.push({ text: middle, changed: true });
|
|
204
|
+
if (suffix)
|
|
205
|
+
segments.push({ text: suffix, changed: false });
|
|
206
|
+
return segments.length ? segments : [{ text: tokens.join(''), changed: false }];
|
|
207
|
+
};
|
|
208
|
+
return [buildSegments(beforeTokens), buildSegments(afterTokens)];
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Folds long unchanged context runs so large files read as a review diff:
|
|
212
|
+
* keeps `contextLines` around changes, folds runs longer than
|
|
213
|
+
* `contextLines * 2 + minFoldSize`.
|
|
214
|
+
*/
|
|
215
|
+
export const foldContextRows = (rows, options = {}) => {
|
|
216
|
+
const contextLines = options.contextLines ?? 3;
|
|
217
|
+
const minFoldSize = options.minFoldSize ?? 4;
|
|
218
|
+
const displayRows = [];
|
|
219
|
+
let contextRun = [];
|
|
220
|
+
let seenChange = false;
|
|
221
|
+
const flushRun = (isEnd) => {
|
|
222
|
+
if (!contextRun.length)
|
|
223
|
+
return;
|
|
224
|
+
const keepHead = seenChange ? contextLines : 0;
|
|
225
|
+
const keepTail = isEnd ? 0 : contextLines;
|
|
226
|
+
if (contextRun.length > keepHead + keepTail + minFoldSize) {
|
|
227
|
+
displayRows.push(...contextRun.slice(0, keepHead));
|
|
228
|
+
displayRows.push({ kind: 'fold', rows: contextRun.slice(keepHead, contextRun.length - keepTail) });
|
|
229
|
+
if (keepTail)
|
|
230
|
+
displayRows.push(...contextRun.slice(contextRun.length - keepTail));
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
displayRows.push(...contextRun);
|
|
234
|
+
}
|
|
235
|
+
contextRun = [];
|
|
236
|
+
};
|
|
237
|
+
for (const row of rows) {
|
|
238
|
+
if (row.kind === 'context') {
|
|
239
|
+
contextRun.push(row);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
flushRun(false);
|
|
243
|
+
seenChange = true;
|
|
244
|
+
displayRows.push(row);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
flushRun(true);
|
|
248
|
+
return displayRows;
|
|
249
|
+
};
|
|
250
|
+
/** Pairs rows into side-by-side cells; balanced remove/add runs align 1:1. */
|
|
251
|
+
export const buildSplitRows = (rows) => {
|
|
252
|
+
const splitRows = [];
|
|
253
|
+
let index = 0;
|
|
254
|
+
while (index < rows.length) {
|
|
255
|
+
const row = rows[index];
|
|
256
|
+
if (row.kind === 'hunk') {
|
|
257
|
+
splitRows.push({ kind: 'hunk', text: row.text });
|
|
258
|
+
index++;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (row.kind === 'context') {
|
|
262
|
+
splitRows.push({
|
|
263
|
+
kind: 'pair',
|
|
264
|
+
left: { kind: 'context', text: row.text, line: row.oldLine ?? 0 },
|
|
265
|
+
right: { kind: 'context', text: row.text, line: row.newLine ?? 0 },
|
|
266
|
+
});
|
|
267
|
+
index++;
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
// change block: collect consecutive removes then adds, pair them up
|
|
271
|
+
const removes = [];
|
|
272
|
+
const adds = [];
|
|
273
|
+
while (index < rows.length && rows[index].kind === 'remove')
|
|
274
|
+
removes.push(rows[index++]);
|
|
275
|
+
while (index < rows.length && rows[index].kind === 'add')
|
|
276
|
+
adds.push(rows[index++]);
|
|
277
|
+
const pairCount = Math.max(removes.length, adds.length);
|
|
278
|
+
for (let pairIndex = 0; pairIndex < pairCount; pairIndex++) {
|
|
279
|
+
const removeRow = removes[pairIndex];
|
|
280
|
+
const addRow = adds[pairIndex];
|
|
281
|
+
splitRows.push({
|
|
282
|
+
kind: 'pair',
|
|
283
|
+
left: removeRow
|
|
284
|
+
? { kind: 'remove', text: removeRow.text, line: removeRow.oldLine ?? 0, segments: removeRow.segments }
|
|
285
|
+
: undefined,
|
|
286
|
+
right: addRow
|
|
287
|
+
? { kind: 'add', text: addRow.text, line: addRow.newLine ?? 0, segments: addRow.segments }
|
|
288
|
+
: undefined,
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return splitRows;
|
|
293
|
+
};
|
|
294
|
+
export const diffStats = (rows) => {
|
|
295
|
+
let added = 0;
|
|
296
|
+
let removed = 0;
|
|
297
|
+
for (const row of rows) {
|
|
298
|
+
if (row.kind === 'add')
|
|
299
|
+
added++;
|
|
300
|
+
else if (row.kind === 'remove')
|
|
301
|
+
removed++;
|
|
302
|
+
}
|
|
303
|
+
return { added, removed };
|
|
304
|
+
};
|
|
305
|
+
/** Serializes rows back into a unified diff (for copy-to-clipboard). */
|
|
306
|
+
export const toUnifiedDiff = (rows, options = {}) => {
|
|
307
|
+
const contextLines = options.contextLines ?? 3;
|
|
308
|
+
const lines = [];
|
|
309
|
+
if (options.fileNameBefore || options.fileNameAfter) {
|
|
310
|
+
lines.push(`--- ${options.fileNameBefore ?? 'a'}`);
|
|
311
|
+
lines.push(`+++ ${options.fileNameAfter ?? 'b'}`);
|
|
312
|
+
}
|
|
313
|
+
const hunks = [];
|
|
314
|
+
let currentHunk;
|
|
315
|
+
rows.forEach((row, index) => {
|
|
316
|
+
if (row.kind === 'add' || row.kind === 'remove') {
|
|
317
|
+
const startIndex = Math.max(0, index - contextLines);
|
|
318
|
+
if (currentHunk && startIndex <= currentHunk.endIndex + 1) {
|
|
319
|
+
currentHunk.endIndex = Math.min(rows.length - 1, index + contextLines);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
currentHunk = { startIndex, endIndex: Math.min(rows.length - 1, index + contextLines) };
|
|
323
|
+
hunks.push(currentHunk);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
for (const hunk of hunks) {
|
|
328
|
+
const hunkRows = rows
|
|
329
|
+
.slice(hunk.startIndex, hunk.endIndex + 1)
|
|
330
|
+
.filter((row) => row.kind !== 'hunk');
|
|
331
|
+
const firstOld = hunkRows.find((row) => row.oldLine !== undefined)?.oldLine ?? 0;
|
|
332
|
+
const firstNew = hunkRows.find((row) => row.newLine !== undefined)?.newLine ?? 0;
|
|
333
|
+
const oldCount = hunkRows.filter((row) => row.kind === 'context' || row.kind === 'remove').length;
|
|
334
|
+
const newCount = hunkRows.filter((row) => row.kind === 'context' || row.kind === 'add').length;
|
|
335
|
+
lines.push(`@@ -${firstOld},${oldCount} +${firstNew},${newCount} @@`);
|
|
336
|
+
for (const row of hunkRows) {
|
|
337
|
+
lines.push(`${row.kind === 'add' ? '+' : row.kind === 'remove' ? '-' : ' '}${row.text}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return lines.join('\n');
|
|
341
|
+
};
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJveC5kaWZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2NvZGVib3guZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBZ0RILE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFZLEVBQUU7SUFDNUMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUU5Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsVUFBa0IsRUFBRSxTQUFpQixFQUFjLEVBQUU7SUFDbkYsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV6QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDckIsT0FDRSxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU07V0FDOUIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNO1dBQ2hDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQ3pELENBQUM7UUFDRCxZQUFZLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLE9BQ0UsWUFBWSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWTtXQUM3QyxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxZQUFZO1dBQy9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQzFHLENBQUM7UUFDRCxZQUFZLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsQ0FBQztJQUN4RixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBRXJGLE1BQU0sSUFBSSxHQUFlLEVBQUUsQ0FBQztJQUM1QixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUUvQixNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQXVFLEVBQUUsRUFBRTtRQUM3RixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ25DLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0YsQ0FBQztpQkFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUMzRCxVQUFVLENBQUM7WUFDVCxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvRCxDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNyRCw0Q0FBNEM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLEtBQUssSUFBSSxHQUFHLEdBQUcsUUFBUSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDN0MsS0FBSyxJQUFJLE1BQU0sR0FBRyxXQUFXLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDekQsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQztvQkFDakYsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO29CQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQWdFLEVBQUUsQ0FBQztRQUNuRixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixPQUFPLEdBQUcsR0FBRyxRQUFRLElBQUksTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUQsR0FBRyxFQUFFLENBQUM7Z0JBQ04sTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdELEdBQUcsRUFBRSxDQUFDO1lBQ1IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLEdBQUcsUUFBUTtZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEYsT0FBTyxNQUFNLEdBQUcsV0FBVztZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFD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LE1BQU0sQ0FBQztRQUNsRyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvRixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQztRQUN0RSxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIn0=
|
package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
2
|
import '../../00group-layout/dees-tile/dees-tile.js';
|
|
3
|
+
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
3
4
|
declare global {
|
|
4
5
|
interface HTMLElementTagNameMap {
|
|
5
6
|
'dees-dataview-codebox': DeesDataviewCodebox;
|
|
@@ -9,11 +10,55 @@ export declare class DeesDataviewCodebox extends DeesElement {
|
|
|
9
10
|
static demo: () => TemplateResult<1>;
|
|
10
11
|
static demoGroups: string[];
|
|
11
12
|
accessor progLang: string;
|
|
13
|
+
/** Shown centered in the title bar; empty hides the title. */
|
|
14
|
+
accessor filename: string;
|
|
12
15
|
accessor codeToDisplay: string;
|
|
16
|
+
/**
|
|
17
|
+
* Diff mode inputs: set `codeBefore` (compared against `codeToDisplay` as
|
|
18
|
+
* the after state) OR a pre-computed `unifiedDiff` patch. Either activates
|
|
19
|
+
* diff rendering; `diffView` picks the layout and can force diff mode on
|
|
20
|
+
* its own (e.g. new-file diffs where `codeBefore` is empty).
|
|
21
|
+
*/
|
|
22
|
+
accessor codeBefore: string;
|
|
23
|
+
accessor unifiedDiff: string;
|
|
24
|
+
/** '' = regular code view; 'inline' = unified rows; 'split' = side by side */
|
|
25
|
+
accessor diffView: '' | 'inline' | 'split';
|
|
26
|
+
accessor highlightedCode: string;
|
|
27
|
+
accessor copied: boolean;
|
|
28
|
+
accessor expandedFolds: ReadonlySet<number>;
|
|
29
|
+
accessor highlightVersion: number;
|
|
13
30
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
14
|
-
constructor();
|
|
15
31
|
render(): TemplateResult;
|
|
16
|
-
private
|
|
32
|
+
private renderCode;
|
|
33
|
+
private renderCodeFooter;
|
|
34
|
+
private renderDiffFooter;
|
|
35
|
+
private renderDiff;
|
|
36
|
+
private renderInlineGrid;
|
|
37
|
+
private renderSplitGrid;
|
|
38
|
+
private renderSplitCell;
|
|
39
|
+
private renderFoldRow;
|
|
40
|
+
private renderDiffLine;
|
|
41
|
+
private processedCode;
|
|
17
42
|
private highlightJs;
|
|
18
|
-
|
|
43
|
+
private highlightToken;
|
|
44
|
+
private copiedResetTimeout;
|
|
45
|
+
private diffRows;
|
|
46
|
+
private diffHighlightCache;
|
|
47
|
+
/** Diff mode is active when a diff input or an explicit diffView is set. */
|
|
48
|
+
get isDiffActive(): boolean;
|
|
49
|
+
get effectiveDiffView(): 'inline' | 'split';
|
|
50
|
+
willUpdate(changedProperties: Map<string, any>): void;
|
|
51
|
+
private displayRowsWithFolds;
|
|
52
|
+
updated(changedProperties: Map<string, any>): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Highlights visible diff lines per-line (full-text highlighting cannot be
|
|
55
|
+
* split across rows because hljs spans may cross line boundaries). Results
|
|
56
|
+
* are cached by line text; intraline-segmented rows skip highlighting —
|
|
57
|
+
* their change tint carries the information.
|
|
58
|
+
*/
|
|
59
|
+
private highlightDiffLines;
|
|
60
|
+
private highlightCode;
|
|
61
|
+
private copyCode;
|
|
62
|
+
private copyUnifiedDiff;
|
|
63
|
+
disconnectedCallback(): Promise<void>;
|
|
19
64
|
}
|
package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.js
CHANGED
|
@@ -1,4 +1,79 @@
|
|
|
1
1
|
import { html, cssManager } from '@design.estate/dees-element';
|
|
2
|
+
// Passed via property binding: slotted text cannot carry generics like
|
|
3
|
+
// Promise<User[]> — the HTML parser reads the angle brackets as a tag and
|
|
4
|
+
// truncates the text node.
|
|
5
|
+
const typescriptSample = `interface User {
|
|
6
|
+
id: number;
|
|
7
|
+
name: string;
|
|
8
|
+
email: string;
|
|
9
|
+
isActive: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class UserService {
|
|
13
|
+
private users: User[] = [];
|
|
14
|
+
|
|
15
|
+
constructor(private apiUrl: string) {
|
|
16
|
+
console.log('UserService initialized');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async getUsers(): Promise<User[]> {
|
|
20
|
+
try {
|
|
21
|
+
const response = await fetch(this.apiUrl);
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
return data.users;
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error('Failed to fetch users:', error);
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
addUser(user: User): void {
|
|
31
|
+
this.users.push(user);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Usage example
|
|
36
|
+
const service = new UserService('https://api.example.com/users');
|
|
37
|
+
const users = await service.getUsers();
|
|
38
|
+
console.log('Found users:', users.length);`;
|
|
39
|
+
const diffBefore = `export const greet = (name: string) => {
|
|
40
|
+
const greeting = 'Hello ' + name;
|
|
41
|
+
console.log(greeting);
|
|
42
|
+
return greeting;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const farewell = (name: string) => {
|
|
46
|
+
return 'Goodbye ' + name;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const unusedHelper = () => {
|
|
50
|
+
return 42;
|
|
51
|
+
};`;
|
|
52
|
+
const diffAfter = `export const greet = (name: string, excited = false) => {
|
|
53
|
+
const greeting = \`Hello \${name}\${excited ? '!' : ''}\`;
|
|
54
|
+
console.log(greeting);
|
|
55
|
+
return greeting;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const farewell = (name: string) => {
|
|
59
|
+
return 'Goodbye ' + name;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const wave = () => {
|
|
63
|
+
return '👋';
|
|
64
|
+
};`;
|
|
65
|
+
const longBefore = Array.from({ length: 60 }, (_, i) => `line ${i + 1}: stable content`).join('\n');
|
|
66
|
+
const longAfter = longBefore.replace('line 30: stable content', 'line 30: CHANGED content');
|
|
67
|
+
const unifiedPatchSample = `--- a/src/config.ts
|
|
68
|
+
+++ b/src/config.ts
|
|
69
|
+
@@ -1,6 +1,7 @@
|
|
70
|
+
export const config = {
|
|
71
|
+
- retries: 3,
|
|
72
|
+
+ retries: 5,
|
|
73
|
+
+ timeoutMs: 30_000,
|
|
74
|
+
verbose: false,
|
|
75
|
+
};
|
|
76
|
+
`;
|
|
2
77
|
export const demoFunc = () => html `
|
|
3
78
|
<style>
|
|
4
79
|
.demoWrapper {
|
|
@@ -36,42 +111,11 @@ export const demoFunc = () => html `
|
|
|
36
111
|
<div class="section">
|
|
37
112
|
<div class="section-title">TypeScript Code Example</div>
|
|
38
113
|
<div class="section-description">A comprehensive TypeScript code example with various syntax highlighting.</div>
|
|
39
|
-
<dees-dataview-codebox
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
isActive: boolean;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
class UserService {
|
|
48
|
-
private users: User[] = [];
|
|
49
|
-
|
|
50
|
-
constructor(private apiUrl: string) {
|
|
51
|
-
console.log('UserService initialized');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
async getUsers(): Promise<User[]> {
|
|
55
|
-
try {
|
|
56
|
-
const response = await fetch(this.apiUrl);
|
|
57
|
-
const data = await response.json();
|
|
58
|
-
return data.users;
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.error('Failed to fetch users:', error);
|
|
61
|
-
return [];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
addUser(user: User): void {
|
|
66
|
-
this.users.push(user);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Usage example
|
|
71
|
-
const service = new UserService('https://api.example.com/users');
|
|
72
|
-
const users = await service.getUsers();
|
|
73
|
-
console.log('Found users:', users.length);
|
|
74
|
-
</dees-dataview-codebox>
|
|
114
|
+
<dees-dataview-codebox
|
|
115
|
+
proglang="typescript"
|
|
116
|
+
filename="user.service.ts"
|
|
117
|
+
.codeToDisplay=${typescriptSample}
|
|
118
|
+
></dees-dataview-codebox>
|
|
75
119
|
</div>
|
|
76
120
|
|
|
77
121
|
<div class="section">
|
|
@@ -95,7 +139,7 @@ const fetchData = async (url) => {
|
|
|
95
139
|
|
|
96
140
|
// Modern syntax
|
|
97
141
|
const greet = (name = 'World') => \`Hello, \${name}!\`;
|
|
98
|
-
console.log(greet('
|
|
142
|
+
console.log(greet('design.estate'));
|
|
99
143
|
</dees-dataview-codebox>
|
|
100
144
|
</div>
|
|
101
145
|
|
|
@@ -175,7 +219,7 @@ data = await processor.process_data([{'id': 1}, {'id': 2}])
|
|
|
175
219
|
<div class="section">
|
|
176
220
|
<div class="section-title">JSON Example</div>
|
|
177
221
|
<div class="section-description">JSON configuration with proper formatting.</div>
|
|
178
|
-
<dees-dataview-codebox proglang="json">
|
|
222
|
+
<dees-dataview-codebox proglang="json" filename="package.json">
|
|
179
223
|
{
|
|
180
224
|
"name": "@design.estate/dees-catalog",
|
|
181
225
|
"version": "1.10.7",
|
|
@@ -194,6 +238,51 @@ data = await processor.process_data([{'id': 1}, {'id': 2}])
|
|
|
194
238
|
}
|
|
195
239
|
</dees-dataview-codebox>
|
|
196
240
|
</div>
|
|
241
|
+
<div class="section">
|
|
242
|
+
<div class="section-title">Inline Diff</div>
|
|
243
|
+
<div class="section-description">Line diff computed from before/after code with intraline change tint and context folding.</div>
|
|
244
|
+
<dees-dataview-codebox
|
|
245
|
+
proglang="typescript"
|
|
246
|
+
filename="greeter.ts"
|
|
247
|
+
diffView="inline"
|
|
248
|
+
.codeBefore=${diffBefore}
|
|
249
|
+
.codeToDisplay=${diffAfter}
|
|
250
|
+
></dees-dataview-codebox>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div class="section">
|
|
254
|
+
<div class="section-title">Side-by-Side Diff</div>
|
|
255
|
+
<div class="section-description">The same change rendered split: before on the left, after on the right, filler rows keep hunks aligned.</div>
|
|
256
|
+
<dees-dataview-codebox
|
|
257
|
+
proglang="typescript"
|
|
258
|
+
filename="greeter.ts"
|
|
259
|
+
diffView="split"
|
|
260
|
+
.codeBefore=${diffBefore}
|
|
261
|
+
.codeToDisplay=${diffAfter}
|
|
262
|
+
></dees-dataview-codebox>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<div class="section">
|
|
266
|
+
<div class="section-title">Diff With Folded Context</div>
|
|
267
|
+
<div class="section-description">Unchanged runs collapse to expandable folds so long files read like a review diff.</div>
|
|
268
|
+
<dees-dataview-codebox
|
|
269
|
+
proglang="plaintext"
|
|
270
|
+
filename="big-file.txt"
|
|
271
|
+
diffView="inline"
|
|
272
|
+
.codeBefore=${longBefore}
|
|
273
|
+
.codeToDisplay=${longAfter}
|
|
274
|
+
></dees-dataview-codebox>
|
|
275
|
+
</div>
|
|
276
|
+
|
|
277
|
+
<div class="section">
|
|
278
|
+
<div class="section-title">Unified Patch Input</div>
|
|
279
|
+
<div class="section-description">Pre-computed unified diffs render directly, hunk headers included.</div>
|
|
280
|
+
<dees-dataview-codebox
|
|
281
|
+
proglang="typescript"
|
|
282
|
+
filename="config.ts"
|
|
283
|
+
.unifiedDiff=${unifiedPatchSample}
|
|
284
|
+
></dees-dataview-codebox>
|
|
285
|
+
</div>
|
|
197
286
|
</div>
|
|
198
287
|
`;
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1kYXRhdmlldy1jb2RlYm94LmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUvRCx1RUFBdUU7QUFDdkUsMEVBQTBFO0FBQzFFLDJCQUEyQjtBQUMzQixNQUFNLGdCQUFnQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkNBaUNrQixDQUFDO0FBRTVDLE1BQU0sVUFBVSxHQUFHOzs7Ozs7Ozs7Ozs7R0FZaEIsQ0FBQztBQUVKLE1BQU0sU0FBUyxHQUFHOzs7Ozs7Ozs7Ozs7R0FZZixDQUFDO0FBRUosTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEcsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0FBRTVGLE1BQU0sa0JBQWtCLEdBQUc7Ozs7Ozs7OztDQVMxQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7b0JBUWQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O2VBZ0I3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7O2VBS3hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7eUJBVzlCLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JBbUluQixVQUFVO3lCQUNQLFNBQVM7Ozs7Ozs7Ozs7O3NCQVdaLFVBQVU7eUJBQ1AsU0FBUzs7Ozs7Ozs7Ozs7c0JBV1osVUFBVTt5QkFDUCxTQUFTOzs7Ozs7Ozs7O3VCQVVYLGtCQUFrQjs7OztDQUl4QyxDQUFBIn0=
|