@design.estate/dees-catalog 3.91.0 → 3.93.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 +10531 -4765
- 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 +6 -0
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +14 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +49 -24
- 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-harness/dees-harness-chat/dees-harness-chat.d.ts +64 -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 +294 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +485 -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 +234121 -0
- package/dist_watch/bundle.js.map +7 -0
- package/dist_watch/index.html +28 -0
- package/package.json +1 -1
- package/readme.hints.md +7 -1
- package/readme.md +112 -0
- 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 +13 -0
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +42 -22
- 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-harness/dees-harness-chat/dees-harness-chat.demo.ts +306 -0
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +363 -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,401 @@
|
|
|
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
|
+
|
|
7
|
+
export type TDiffRowKind = 'context' | 'add' | 'remove' | 'hunk';
|
|
8
|
+
|
|
9
|
+
export interface IDiffSegment {
|
|
10
|
+
text: string;
|
|
11
|
+
changed: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface IDiffRow {
|
|
15
|
+
kind: TDiffRowKind;
|
|
16
|
+
text: string;
|
|
17
|
+
/** 1-based line number on the before side (context/remove) */
|
|
18
|
+
oldLine?: number;
|
|
19
|
+
/** 1-based line number on the after side (context/add) */
|
|
20
|
+
newLine?: number;
|
|
21
|
+
/** intraline segments for paired single-line changes */
|
|
22
|
+
segments?: IDiffSegment[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IDiffFold {
|
|
26
|
+
kind: 'fold';
|
|
27
|
+
rows: IDiffRow[];
|
|
28
|
+
/** stable ordinal among folds; expansion state is keyed by this */
|
|
29
|
+
ordinal?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export type TDiffDisplayRow = IDiffRow | IDiffFold;
|
|
33
|
+
|
|
34
|
+
export interface ISplitCell {
|
|
35
|
+
kind: 'context' | 'add' | 'remove';
|
|
36
|
+
text: string;
|
|
37
|
+
line: number;
|
|
38
|
+
segments?: IDiffSegment[];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ISplitRow {
|
|
42
|
+
kind: 'pair' | 'hunk';
|
|
43
|
+
text?: string;
|
|
44
|
+
left?: ISplitCell;
|
|
45
|
+
right?: ISplitCell;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface IDiffStats {
|
|
49
|
+
added: number;
|
|
50
|
+
removed: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const splitLines = (text: string): string[] => {
|
|
54
|
+
if (!text) return [];
|
|
55
|
+
const lines = text.split('\n');
|
|
56
|
+
if (lines.length && lines[lines.length - 1] === '') lines.pop();
|
|
57
|
+
return lines;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/** Cells beyond this budget fall back to a trimmed block-replace diff. */
|
|
61
|
+
const maxLcsCells = 4_000_000;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Line-level diff of two texts. Common prefix/suffix are trimmed first so
|
|
65
|
+
* the O(n*m) LCS table only covers the changed middle; oversized middles
|
|
66
|
+
* degrade gracefully to one remove-block + add-block.
|
|
67
|
+
*/
|
|
68
|
+
export const computeLineDiff = (beforeText: string, afterText: string): IDiffRow[] => {
|
|
69
|
+
const beforeLines = splitLines(beforeText);
|
|
70
|
+
const afterLines = splitLines(afterText);
|
|
71
|
+
|
|
72
|
+
let prefixLength = 0;
|
|
73
|
+
while (
|
|
74
|
+
prefixLength < beforeLines.length
|
|
75
|
+
&& prefixLength < afterLines.length
|
|
76
|
+
&& beforeLines[prefixLength] === afterLines[prefixLength]
|
|
77
|
+
) {
|
|
78
|
+
prefixLength++;
|
|
79
|
+
}
|
|
80
|
+
let suffixLength = 0;
|
|
81
|
+
while (
|
|
82
|
+
suffixLength < beforeLines.length - prefixLength
|
|
83
|
+
&& suffixLength < afterLines.length - prefixLength
|
|
84
|
+
&& beforeLines[beforeLines.length - 1 - suffixLength] === afterLines[afterLines.length - 1 - suffixLength]
|
|
85
|
+
) {
|
|
86
|
+
suffixLength++;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const beforeMiddle = beforeLines.slice(prefixLength, beforeLines.length - suffixLength);
|
|
90
|
+
const afterMiddle = afterLines.slice(prefixLength, afterLines.length - suffixLength);
|
|
91
|
+
|
|
92
|
+
const rows: IDiffRow[] = [];
|
|
93
|
+
for (let index = 0; index < prefixLength; index++) {
|
|
94
|
+
rows.push({ kind: 'context', text: beforeLines[index], oldLine: index + 1, newLine: index + 1 });
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let oldLine = prefixLength + 1;
|
|
98
|
+
let newLine = prefixLength + 1;
|
|
99
|
+
|
|
100
|
+
const pushMiddle = (operations: Array<{ kind: 'context' | 'add' | 'remove'; text: string }>) => {
|
|
101
|
+
for (const operation of operations) {
|
|
102
|
+
if (operation.kind === 'context') {
|
|
103
|
+
rows.push({ kind: 'context', text: operation.text, oldLine: oldLine++, newLine: newLine++ });
|
|
104
|
+
} else if (operation.kind === 'remove') {
|
|
105
|
+
rows.push({ kind: 'remove', text: operation.text, oldLine: oldLine++ });
|
|
106
|
+
} else {
|
|
107
|
+
rows.push({ kind: 'add', text: operation.text, newLine: newLine++ });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
if (beforeMiddle.length * afterMiddle.length > maxLcsCells) {
|
|
113
|
+
pushMiddle([
|
|
114
|
+
...beforeMiddle.map((text) => ({ kind: 'remove' as const, text })),
|
|
115
|
+
...afterMiddle.map((text) => ({ kind: 'add' as const, text })),
|
|
116
|
+
]);
|
|
117
|
+
} else if (beforeMiddle.length || afterMiddle.length) {
|
|
118
|
+
// classic LCS table over the trimmed middle
|
|
119
|
+
const rowCount = beforeMiddle.length;
|
|
120
|
+
const columnCount = afterMiddle.length;
|
|
121
|
+
const table = new Uint32Array((rowCount + 1) * (columnCount + 1));
|
|
122
|
+
const cell = (row: number, column: number) => table[row * (columnCount + 1) + column];
|
|
123
|
+
for (let row = rowCount - 1; row >= 0; row--) {
|
|
124
|
+
for (let column = columnCount - 1; column >= 0; column--) {
|
|
125
|
+
table[row * (columnCount + 1) + column] = beforeMiddle[row] === afterMiddle[column]
|
|
126
|
+
? cell(row + 1, column + 1) + 1
|
|
127
|
+
: Math.max(cell(row + 1, column), cell(row, column + 1));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const operations: Array<{ kind: 'context' | 'add' | 'remove'; text: string }> = [];
|
|
131
|
+
let row = 0;
|
|
132
|
+
let column = 0;
|
|
133
|
+
while (row < rowCount && column < columnCount) {
|
|
134
|
+
if (beforeMiddle[row] === afterMiddle[column]) {
|
|
135
|
+
operations.push({ kind: 'context', text: beforeMiddle[row] });
|
|
136
|
+
row++;
|
|
137
|
+
column++;
|
|
138
|
+
} else if (cell(row + 1, column) >= cell(row, column + 1)) {
|
|
139
|
+
operations.push({ kind: 'remove', text: beforeMiddle[row] });
|
|
140
|
+
row++;
|
|
141
|
+
} else {
|
|
142
|
+
operations.push({ kind: 'add', text: afterMiddle[column] });
|
|
143
|
+
column++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
while (row < rowCount) operations.push({ kind: 'remove', text: beforeMiddle[row++] });
|
|
147
|
+
while (column < columnCount) operations.push({ kind: 'add', text: afterMiddle[column++] });
|
|
148
|
+
pushMiddle(operations);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
for (let index = 0; index < suffixLength; index++) {
|
|
152
|
+
rows.push({
|
|
153
|
+
kind: 'context',
|
|
154
|
+
text: beforeLines[beforeLines.length - suffixLength + index],
|
|
155
|
+
oldLine: oldLine++,
|
|
156
|
+
newLine: newLine++,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return annotateIntraline(rows);
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/** Parses a unified diff/patch into rows (file headers skipped, hunks kept). */
|
|
164
|
+
export const parseUnifiedDiff = (patchText: string): IDiffRow[] => {
|
|
165
|
+
const rows: IDiffRow[] = [];
|
|
166
|
+
let oldLine = 0;
|
|
167
|
+
let newLine = 0;
|
|
168
|
+
for (const line of patchText.split('\n')) {
|
|
169
|
+
if (
|
|
170
|
+
line.startsWith('diff ')
|
|
171
|
+
|| line.startsWith('index ')
|
|
172
|
+
|| line.startsWith('+++')
|
|
173
|
+
|| line.startsWith('---')
|
|
174
|
+
|| line.startsWith('\\ No newline')
|
|
175
|
+
) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const hunkMatch = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@(.*)$/.exec(line);
|
|
179
|
+
if (hunkMatch) {
|
|
180
|
+
oldLine = Number(hunkMatch[1]);
|
|
181
|
+
newLine = Number(hunkMatch[2]);
|
|
182
|
+
rows.push({ kind: 'hunk', text: line });
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (!oldLine && !newLine) continue; // outside any hunk
|
|
186
|
+
if (line.startsWith('+')) {
|
|
187
|
+
rows.push({ kind: 'add', text: line.slice(1), newLine: newLine++ });
|
|
188
|
+
} else if (line.startsWith('-')) {
|
|
189
|
+
rows.push({ kind: 'remove', text: line.slice(1), oldLine: oldLine++ });
|
|
190
|
+
} else {
|
|
191
|
+
rows.push({ kind: 'context', text: line.startsWith(' ') ? line.slice(1) : line, oldLine: oldLine++, newLine: newLine++ });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return annotateIntraline(rows);
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
const maxIntralineChars = 400;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Word-level segments for balanced remove/add runs (the GitHub-style
|
|
201
|
+
* intraline tint). Only 1:1 paired lines within a run are annotated.
|
|
202
|
+
*/
|
|
203
|
+
const annotateIntraline = (rows: IDiffRow[]): IDiffRow[] => {
|
|
204
|
+
for (let index = 0; index < rows.length; index++) {
|
|
205
|
+
if (rows[index].kind !== 'remove') continue;
|
|
206
|
+
const removeStart = index;
|
|
207
|
+
let removeEnd = index;
|
|
208
|
+
while (removeEnd + 1 < rows.length && rows[removeEnd + 1].kind === 'remove') removeEnd++;
|
|
209
|
+
let addEnd = removeEnd;
|
|
210
|
+
while (addEnd + 1 < rows.length && rows[addEnd + 1].kind === 'add') addEnd++;
|
|
211
|
+
const removeCount = removeEnd - removeStart + 1;
|
|
212
|
+
const addCount = addEnd - removeEnd;
|
|
213
|
+
if (addCount === removeCount) {
|
|
214
|
+
for (let pairIndex = 0; pairIndex < removeCount; pairIndex++) {
|
|
215
|
+
const removeRow = rows[removeStart + pairIndex];
|
|
216
|
+
const addRow = rows[removeEnd + 1 + pairIndex];
|
|
217
|
+
if (removeRow.text.length <= maxIntralineChars && addRow.text.length <= maxIntralineChars) {
|
|
218
|
+
const [removeSegments, addSegments] = intralineSegments(removeRow.text, addRow.text);
|
|
219
|
+
removeRow.segments = removeSegments;
|
|
220
|
+
addRow.segments = addSegments;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
index = addEnd;
|
|
225
|
+
}
|
|
226
|
+
return rows;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
const tokenizeForIntraline = (text: string): string[] => {
|
|
230
|
+
return text.match(/(\s+|[A-Za-z0-9_]+|[^\sA-Za-z0-9_]+)/g) ?? [];
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
const intralineSegments = (beforeText: string, afterText: string): [IDiffSegment[], IDiffSegment[]] => {
|
|
234
|
+
const beforeTokens = tokenizeForIntraline(beforeText);
|
|
235
|
+
const afterTokens = tokenizeForIntraline(afterText);
|
|
236
|
+
let prefixLength = 0;
|
|
237
|
+
while (
|
|
238
|
+
prefixLength < beforeTokens.length
|
|
239
|
+
&& prefixLength < afterTokens.length
|
|
240
|
+
&& beforeTokens[prefixLength] === afterTokens[prefixLength]
|
|
241
|
+
) {
|
|
242
|
+
prefixLength++;
|
|
243
|
+
}
|
|
244
|
+
let suffixLength = 0;
|
|
245
|
+
while (
|
|
246
|
+
suffixLength < beforeTokens.length - prefixLength
|
|
247
|
+
&& suffixLength < afterTokens.length - prefixLength
|
|
248
|
+
&& beforeTokens[beforeTokens.length - 1 - suffixLength] === afterTokens[afterTokens.length - 1 - suffixLength]
|
|
249
|
+
) {
|
|
250
|
+
suffixLength++;
|
|
251
|
+
}
|
|
252
|
+
const buildSegments = (tokens: string[]): IDiffSegment[] => {
|
|
253
|
+
const prefix = tokens.slice(0, prefixLength).join('');
|
|
254
|
+
const middle = tokens.slice(prefixLength, tokens.length - suffixLength).join('');
|
|
255
|
+
const suffix = tokens.slice(tokens.length - suffixLength).join('');
|
|
256
|
+
const segments: IDiffSegment[] = [];
|
|
257
|
+
if (prefix) segments.push({ text: prefix, changed: false });
|
|
258
|
+
if (middle) segments.push({ text: middle, changed: true });
|
|
259
|
+
if (suffix) segments.push({ text: suffix, changed: false });
|
|
260
|
+
return segments.length ? segments : [{ text: tokens.join(''), changed: false }];
|
|
261
|
+
};
|
|
262
|
+
return [buildSegments(beforeTokens), buildSegments(afterTokens)];
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Folds long unchanged context runs so large files read as a review diff:
|
|
267
|
+
* keeps `contextLines` around changes, folds runs longer than
|
|
268
|
+
* `contextLines * 2 + minFoldSize`.
|
|
269
|
+
*/
|
|
270
|
+
export const foldContextRows = (
|
|
271
|
+
rows: IDiffRow[],
|
|
272
|
+
options: { contextLines?: number; minFoldSize?: number } = {},
|
|
273
|
+
): TDiffDisplayRow[] => {
|
|
274
|
+
const contextLines = options.contextLines ?? 3;
|
|
275
|
+
const minFoldSize = options.minFoldSize ?? 4;
|
|
276
|
+
const displayRows: TDiffDisplayRow[] = [];
|
|
277
|
+
let contextRun: IDiffRow[] = [];
|
|
278
|
+
let seenChange = false;
|
|
279
|
+
|
|
280
|
+
const flushRun = (isEnd: boolean) => {
|
|
281
|
+
if (!contextRun.length) return;
|
|
282
|
+
const keepHead = seenChange ? contextLines : 0;
|
|
283
|
+
const keepTail = isEnd ? 0 : contextLines;
|
|
284
|
+
if (contextRun.length > keepHead + keepTail + minFoldSize) {
|
|
285
|
+
displayRows.push(...contextRun.slice(0, keepHead));
|
|
286
|
+
displayRows.push({ kind: 'fold', rows: contextRun.slice(keepHead, contextRun.length - keepTail) });
|
|
287
|
+
if (keepTail) displayRows.push(...contextRun.slice(contextRun.length - keepTail));
|
|
288
|
+
} else {
|
|
289
|
+
displayRows.push(...contextRun);
|
|
290
|
+
}
|
|
291
|
+
contextRun = [];
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
for (const row of rows) {
|
|
295
|
+
if (row.kind === 'context') {
|
|
296
|
+
contextRun.push(row);
|
|
297
|
+
} else {
|
|
298
|
+
flushRun(false);
|
|
299
|
+
seenChange = true;
|
|
300
|
+
displayRows.push(row);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
flushRun(true);
|
|
304
|
+
return displayRows;
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
/** Pairs rows into side-by-side cells; balanced remove/add runs align 1:1. */
|
|
308
|
+
export const buildSplitRows = (rows: Array<IDiffRow>): ISplitRow[] => {
|
|
309
|
+
const splitRows: ISplitRow[] = [];
|
|
310
|
+
let index = 0;
|
|
311
|
+
while (index < rows.length) {
|
|
312
|
+
const row = rows[index];
|
|
313
|
+
if (row.kind === 'hunk') {
|
|
314
|
+
splitRows.push({ kind: 'hunk', text: row.text });
|
|
315
|
+
index++;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
if (row.kind === 'context') {
|
|
319
|
+
splitRows.push({
|
|
320
|
+
kind: 'pair',
|
|
321
|
+
left: { kind: 'context', text: row.text, line: row.oldLine ?? 0 },
|
|
322
|
+
right: { kind: 'context', text: row.text, line: row.newLine ?? 0 },
|
|
323
|
+
});
|
|
324
|
+
index++;
|
|
325
|
+
continue;
|
|
326
|
+
}
|
|
327
|
+
// change block: collect consecutive removes then adds, pair them up
|
|
328
|
+
const removes: IDiffRow[] = [];
|
|
329
|
+
const adds: IDiffRow[] = [];
|
|
330
|
+
while (index < rows.length && rows[index].kind === 'remove') removes.push(rows[index++]);
|
|
331
|
+
while (index < rows.length && rows[index].kind === 'add') adds.push(rows[index++]);
|
|
332
|
+
const pairCount = Math.max(removes.length, adds.length);
|
|
333
|
+
for (let pairIndex = 0; pairIndex < pairCount; pairIndex++) {
|
|
334
|
+
const removeRow = removes[pairIndex];
|
|
335
|
+
const addRow = adds[pairIndex];
|
|
336
|
+
splitRows.push({
|
|
337
|
+
kind: 'pair',
|
|
338
|
+
left: removeRow
|
|
339
|
+
? { kind: 'remove', text: removeRow.text, line: removeRow.oldLine ?? 0, segments: removeRow.segments }
|
|
340
|
+
: undefined,
|
|
341
|
+
right: addRow
|
|
342
|
+
? { kind: 'add', text: addRow.text, line: addRow.newLine ?? 0, segments: addRow.segments }
|
|
343
|
+
: undefined,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return splitRows;
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
export const diffStats = (rows: Array<IDiffRow>): IDiffStats => {
|
|
351
|
+
let added = 0;
|
|
352
|
+
let removed = 0;
|
|
353
|
+
for (const row of rows) {
|
|
354
|
+
if (row.kind === 'add') added++;
|
|
355
|
+
else if (row.kind === 'remove') removed++;
|
|
356
|
+
}
|
|
357
|
+
return { added, removed };
|
|
358
|
+
};
|
|
359
|
+
|
|
360
|
+
/** Serializes rows back into a unified diff (for copy-to-clipboard). */
|
|
361
|
+
export const toUnifiedDiff = (
|
|
362
|
+
rows: IDiffRow[],
|
|
363
|
+
options: { contextLines?: number; fileNameBefore?: string; fileNameAfter?: string } = {},
|
|
364
|
+
): string => {
|
|
365
|
+
const contextLines = options.contextLines ?? 3;
|
|
366
|
+
const lines: string[] = [];
|
|
367
|
+
if (options.fileNameBefore || options.fileNameAfter) {
|
|
368
|
+
lines.push(`--- ${options.fileNameBefore ?? 'a'}`);
|
|
369
|
+
lines.push(`+++ ${options.fileNameAfter ?? 'b'}`);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
interface IHunk { startIndex: number; endIndex: number; }
|
|
373
|
+
const hunks: IHunk[] = [];
|
|
374
|
+
let currentHunk: IHunk | undefined;
|
|
375
|
+
rows.forEach((row, index) => {
|
|
376
|
+
if (row.kind === 'add' || row.kind === 'remove') {
|
|
377
|
+
const startIndex = Math.max(0, index - contextLines);
|
|
378
|
+
if (currentHunk && startIndex <= currentHunk.endIndex + 1) {
|
|
379
|
+
currentHunk.endIndex = Math.min(rows.length - 1, index + contextLines);
|
|
380
|
+
} else {
|
|
381
|
+
currentHunk = { startIndex, endIndex: Math.min(rows.length - 1, index + contextLines) };
|
|
382
|
+
hunks.push(currentHunk);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
for (const hunk of hunks) {
|
|
388
|
+
const hunkRows = rows
|
|
389
|
+
.slice(hunk.startIndex, hunk.endIndex + 1)
|
|
390
|
+
.filter((row) => row.kind !== 'hunk');
|
|
391
|
+
const firstOld = hunkRows.find((row) => row.oldLine !== undefined)?.oldLine ?? 0;
|
|
392
|
+
const firstNew = hunkRows.find((row) => row.newLine !== undefined)?.newLine ?? 0;
|
|
393
|
+
const oldCount = hunkRows.filter((row) => row.kind === 'context' || row.kind === 'remove').length;
|
|
394
|
+
const newCount = hunkRows.filter((row) => row.kind === 'context' || row.kind === 'add').length;
|
|
395
|
+
lines.push(`@@ -${firstOld},${oldCount} +${firstNew},${newCount} @@`);
|
|
396
|
+
for (const row of hunkRows) {
|
|
397
|
+
lines.push(`${row.kind === 'add' ? '+' : row.kind === 'remove' ? '-' : ' '}${row.text}`);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return lines.join('\n');
|
|
401
|
+
};
|
package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts
CHANGED
|
@@ -1,5 +1,85 @@
|
|
|
1
1
|
import { html, cssManager } from '@design.estate/dees-element';
|
|
2
2
|
|
|
3
|
+
// Passed via property binding: slotted text cannot carry generics like
|
|
4
|
+
// Promise<User[]> — the HTML parser reads the angle brackets as a tag and
|
|
5
|
+
// truncates the text node.
|
|
6
|
+
const typescriptSample = `interface User {
|
|
7
|
+
id: number;
|
|
8
|
+
name: string;
|
|
9
|
+
email: string;
|
|
10
|
+
isActive: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
class UserService {
|
|
14
|
+
private users: User[] = [];
|
|
15
|
+
|
|
16
|
+
constructor(private apiUrl: string) {
|
|
17
|
+
console.log('UserService initialized');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async getUsers(): Promise<User[]> {
|
|
21
|
+
try {
|
|
22
|
+
const response = await fetch(this.apiUrl);
|
|
23
|
+
const data = await response.json();
|
|
24
|
+
return data.users;
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.error('Failed to fetch users:', error);
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
addUser(user: User): void {
|
|
32
|
+
this.users.push(user);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Usage example
|
|
37
|
+
const service = new UserService('https://api.example.com/users');
|
|
38
|
+
const users = await service.getUsers();
|
|
39
|
+
console.log('Found users:', users.length);`;
|
|
40
|
+
|
|
41
|
+
const diffBefore = `export const greet = (name: string) => {
|
|
42
|
+
const greeting = 'Hello ' + name;
|
|
43
|
+
console.log(greeting);
|
|
44
|
+
return greeting;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const farewell = (name: string) => {
|
|
48
|
+
return 'Goodbye ' + name;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const unusedHelper = () => {
|
|
52
|
+
return 42;
|
|
53
|
+
};`;
|
|
54
|
+
|
|
55
|
+
const diffAfter = `export const greet = (name: string, excited = false) => {
|
|
56
|
+
const greeting = \`Hello \${name}\${excited ? '!' : ''}\`;
|
|
57
|
+
console.log(greeting);
|
|
58
|
+
return greeting;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export const farewell = (name: string) => {
|
|
62
|
+
return 'Goodbye ' + name;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export const wave = () => {
|
|
66
|
+
return '👋';
|
|
67
|
+
};`;
|
|
68
|
+
|
|
69
|
+
const longBefore = Array.from({ length: 60 }, (_, i) => `line ${i + 1}: stable content`).join('\n');
|
|
70
|
+
const longAfter = longBefore.replace('line 30: stable content', 'line 30: CHANGED content');
|
|
71
|
+
|
|
72
|
+
const unifiedPatchSample = `--- a/src/config.ts
|
|
73
|
+
+++ b/src/config.ts
|
|
74
|
+
@@ -1,6 +1,7 @@
|
|
75
|
+
export const config = {
|
|
76
|
+
- retries: 3,
|
|
77
|
+
+ retries: 5,
|
|
78
|
+
+ timeoutMs: 30_000,
|
|
79
|
+
verbose: false,
|
|
80
|
+
};
|
|
81
|
+
`;
|
|
82
|
+
|
|
3
83
|
export const demoFunc = () => html`
|
|
4
84
|
<style>
|
|
5
85
|
.demoWrapper {
|
|
@@ -37,42 +117,11 @@ export const demoFunc = () => html`
|
|
|
37
117
|
<div class="section">
|
|
38
118
|
<div class="section-title">TypeScript Code Example</div>
|
|
39
119
|
<div class="section-description">A comprehensive TypeScript code example with various syntax highlighting.</div>
|
|
40
|
-
<dees-dataview-codebox
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
isActive: boolean;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
class UserService {
|
|
49
|
-
private users: User[] = [];
|
|
50
|
-
|
|
51
|
-
constructor(private apiUrl: string) {
|
|
52
|
-
console.log('UserService initialized');
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
async getUsers(): Promise<User[]> {
|
|
56
|
-
try {
|
|
57
|
-
const response = await fetch(this.apiUrl);
|
|
58
|
-
const data = await response.json();
|
|
59
|
-
return data.users;
|
|
60
|
-
} catch (error) {
|
|
61
|
-
console.error('Failed to fetch users:', error);
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
addUser(user: User): void {
|
|
67
|
-
this.users.push(user);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Usage example
|
|
72
|
-
const service = new UserService('https://api.example.com/users');
|
|
73
|
-
const users = await service.getUsers();
|
|
74
|
-
console.log('Found users:', users.length);
|
|
75
|
-
</dees-dataview-codebox>
|
|
120
|
+
<dees-dataview-codebox
|
|
121
|
+
proglang="typescript"
|
|
122
|
+
filename="user.service.ts"
|
|
123
|
+
.codeToDisplay=${typescriptSample}
|
|
124
|
+
></dees-dataview-codebox>
|
|
76
125
|
</div>
|
|
77
126
|
|
|
78
127
|
<div class="section">
|
|
@@ -96,7 +145,7 @@ const fetchData = async (url) => {
|
|
|
96
145
|
|
|
97
146
|
// Modern syntax
|
|
98
147
|
const greet = (name = 'World') => \`Hello, \${name}!\`;
|
|
99
|
-
console.log(greet('
|
|
148
|
+
console.log(greet('design.estate'));
|
|
100
149
|
</dees-dataview-codebox>
|
|
101
150
|
</div>
|
|
102
151
|
|
|
@@ -176,7 +225,7 @@ data = await processor.process_data([{'id': 1}, {'id': 2}])
|
|
|
176
225
|
<div class="section">
|
|
177
226
|
<div class="section-title">JSON Example</div>
|
|
178
227
|
<div class="section-description">JSON configuration with proper formatting.</div>
|
|
179
|
-
<dees-dataview-codebox proglang="json">
|
|
228
|
+
<dees-dataview-codebox proglang="json" filename="package.json">
|
|
180
229
|
{
|
|
181
230
|
"name": "@design.estate/dees-catalog",
|
|
182
231
|
"version": "1.10.7",
|
|
@@ -195,5 +244,50 @@ data = await processor.process_data([{'id': 1}, {'id': 2}])
|
|
|
195
244
|
}
|
|
196
245
|
</dees-dataview-codebox>
|
|
197
246
|
</div>
|
|
247
|
+
<div class="section">
|
|
248
|
+
<div class="section-title">Inline Diff</div>
|
|
249
|
+
<div class="section-description">Line diff computed from before/after code with intraline change tint and context folding.</div>
|
|
250
|
+
<dees-dataview-codebox
|
|
251
|
+
proglang="typescript"
|
|
252
|
+
filename="greeter.ts"
|
|
253
|
+
diffView="inline"
|
|
254
|
+
.codeBefore=${diffBefore}
|
|
255
|
+
.codeToDisplay=${diffAfter}
|
|
256
|
+
></dees-dataview-codebox>
|
|
257
|
+
</div>
|
|
258
|
+
|
|
259
|
+
<div class="section">
|
|
260
|
+
<div class="section-title">Side-by-Side Diff</div>
|
|
261
|
+
<div class="section-description">The same change rendered split: before on the left, after on the right, filler rows keep hunks aligned.</div>
|
|
262
|
+
<dees-dataview-codebox
|
|
263
|
+
proglang="typescript"
|
|
264
|
+
filename="greeter.ts"
|
|
265
|
+
diffView="split"
|
|
266
|
+
.codeBefore=${diffBefore}
|
|
267
|
+
.codeToDisplay=${diffAfter}
|
|
268
|
+
></dees-dataview-codebox>
|
|
269
|
+
</div>
|
|
270
|
+
|
|
271
|
+
<div class="section">
|
|
272
|
+
<div class="section-title">Diff With Folded Context</div>
|
|
273
|
+
<div class="section-description">Unchanged runs collapse to expandable folds so long files read like a review diff.</div>
|
|
274
|
+
<dees-dataview-codebox
|
|
275
|
+
proglang="plaintext"
|
|
276
|
+
filename="big-file.txt"
|
|
277
|
+
diffView="inline"
|
|
278
|
+
.codeBefore=${longBefore}
|
|
279
|
+
.codeToDisplay=${longAfter}
|
|
280
|
+
></dees-dataview-codebox>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<div class="section">
|
|
284
|
+
<div class="section-title">Unified Patch Input</div>
|
|
285
|
+
<div class="section-description">Pre-computed unified diffs render directly, hunk headers included.</div>
|
|
286
|
+
<dees-dataview-codebox
|
|
287
|
+
proglang="typescript"
|
|
288
|
+
filename="config.ts"
|
|
289
|
+
.unifiedDiff=${unifiedPatchSample}
|
|
290
|
+
></dees-dataview-codebox>
|
|
291
|
+
</div>
|
|
198
292
|
</div>
|
|
199
293
|
`
|