@design.estate/dees-catalog 3.91.0 → 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 +10381 -4788
- 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 +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 +1 -1
- package/readme.hints.md +7 -1
- package/readme.md +110 -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 +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
|
@@ -63,6 +63,9 @@ let DeesButton = (() => {
|
|
|
63
63
|
let _status_decorators;
|
|
64
64
|
let _status_initializers = [];
|
|
65
65
|
let _status_extraInitializers = [];
|
|
66
|
+
let _shape_decorators;
|
|
67
|
+
let _shape_initializers = [];
|
|
68
|
+
let _shape_extraInitializers = [];
|
|
66
69
|
let _insideForm_decorators;
|
|
67
70
|
let _insideForm_initializers = [];
|
|
68
71
|
let _insideForm_extraInitializers = [];
|
|
@@ -99,6 +102,9 @@ let DeesButton = (() => {
|
|
|
99
102
|
_status_decorators = [property({
|
|
100
103
|
type: String
|
|
101
104
|
})];
|
|
105
|
+
_shape_decorators = [property({
|
|
106
|
+
type: String
|
|
107
|
+
})];
|
|
102
108
|
_insideForm_decorators = [property({
|
|
103
109
|
type: Boolean,
|
|
104
110
|
reflect: true
|
|
@@ -112,6 +118,7 @@ let DeesButton = (() => {
|
|
|
112
118
|
__esDecorate(this, null, _type_decorators, { kind: "accessor", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
|
|
113
119
|
__esDecorate(this, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
|
|
114
120
|
__esDecorate(this, null, _status_decorators, { kind: "accessor", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
|
|
121
|
+
__esDecorate(this, null, _shape_decorators, { kind: "accessor", name: "shape", static: false, private: false, access: { has: obj => "shape" in obj, get: obj => obj.shape, set: (obj, value) => { obj.shape = value; } }, metadata: _metadata }, _shape_initializers, _shape_extraInitializers);
|
|
115
122
|
__esDecorate(this, null, _insideForm_decorators, { kind: "accessor", name: "insideForm", static: false, private: false, access: { has: obj => "insideForm" in obj, get: obj => obj.insideForm, set: (obj, value) => { obj.insideForm = value; } }, metadata: _metadata }, _insideForm_initializers, _insideForm_extraInitializers);
|
|
116
123
|
__esDecorate(this, null, _icon_decorators, { kind: "accessor", name: "icon", static: false, private: false, access: { has: obj => "icon" in obj, get: obj => obj.icon, set: (obj, value) => { obj.icon = value; } }, metadata: _metadata }, _icon_initializers, _icon_extraInitializers);
|
|
117
124
|
__esDecorate(this, null, _iconPosition_decorators, { kind: "accessor", name: "iconPosition", static: false, private: false, access: { has: obj => "iconPosition" in obj, get: obj => obj.iconPosition, set: (obj, value) => { obj.iconPosition = value; } }, metadata: _metadata }, _iconPosition_initializers, _iconPosition_extraInitializers);
|
|
@@ -121,7 +128,7 @@ let DeesButton = (() => {
|
|
|
121
128
|
}
|
|
122
129
|
static demo = demoFunc;
|
|
123
130
|
static demoGroups = ['Button'];
|
|
124
|
-
#text_accessor_storage = __runInitializers(this, _text_initializers,
|
|
131
|
+
#text_accessor_storage = __runInitializers(this, _text_initializers, '');
|
|
125
132
|
get text() { return this.#text_accessor_storage; }
|
|
126
133
|
set text(value) { this.#text_accessor_storage = value; }
|
|
127
134
|
#eventDetailData_accessor_storage = (__runInitializers(this, _text_extraInitializers), __runInitializers(this, _eventDetailData_initializers, void 0));
|
|
@@ -142,7 +149,15 @@ let DeesButton = (() => {
|
|
|
142
149
|
#status_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, _status_initializers, 'normal'));
|
|
143
150
|
get status() { return this.#status_accessor_storage; }
|
|
144
151
|
set status(value) { this.#status_accessor_storage = value; }
|
|
145
|
-
#
|
|
152
|
+
#shape_accessor_storage = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _shape_initializers, 'squircle'));
|
|
153
|
+
/**
|
|
154
|
+
* Corner treatment. 'squircle' (default) is the standard rounded rect for
|
|
155
|
+
* controls that align with fields and other rectangular siblings; 'pill'
|
|
156
|
+
* is the capsule for standalone/floating actions (chips, toolbar pills).
|
|
157
|
+
*/
|
|
158
|
+
get shape() { return this.#shape_accessor_storage; }
|
|
159
|
+
set shape(value) { this.#shape_accessor_storage = value; }
|
|
160
|
+
#insideForm_accessor_storage = (__runInitializers(this, _shape_extraInitializers), __runInitializers(this, _insideForm_initializers, false));
|
|
146
161
|
get insideForm() { return this.#insideForm_accessor_storage; }
|
|
147
162
|
set insideForm(value) { this.#insideForm_accessor_storage = value; }
|
|
148
163
|
#icon_accessor_storage = (__runInitializers(this, _insideForm_extraInitializers), __runInitializers(this, _icon_initializers, void 0));
|
|
@@ -171,20 +186,20 @@ let DeesButton = (() => {
|
|
|
171
186
|
box-sizing: border-box;
|
|
172
187
|
font-family: inherit;
|
|
173
188
|
/* status faces: solid in bright mode, tinted in dark (gobright overrides below) */
|
|
174
|
-
--button-pending-bg:
|
|
175
|
-
--button-pending-fg:
|
|
176
|
-
--button-success-bg:
|
|
177
|
-
--button-success-fg:
|
|
178
|
-
--button-error-bg:
|
|
179
|
-
--button-error-fg:
|
|
189
|
+
--button-pending-bg: color-mix(in srgb, var(--dees-color-accent-primary) 20%, transparent);
|
|
190
|
+
--button-pending-fg: var(--dees-color-accent-primary);
|
|
191
|
+
--button-success-bg: color-mix(in srgb, var(--dees-color-accent-success) 20%, transparent);
|
|
192
|
+
--button-success-fg: var(--dees-color-accent-success);
|
|
193
|
+
--button-error-bg: color-mix(in srgb, var(--dees-color-accent-error) 20%, transparent);
|
|
194
|
+
--button-error-fg: var(--dees-color-accent-error);
|
|
180
195
|
}
|
|
181
196
|
:host([gobright]) {
|
|
182
|
-
--button-pending-bg:
|
|
183
|
-
--button-pending-fg:
|
|
184
|
-
--button-success-bg:
|
|
185
|
-
--button-success-fg:
|
|
186
|
-
--button-error-bg:
|
|
187
|
-
--button-error-fg:
|
|
197
|
+
--button-pending-bg: var(--dees-color-accent-primary);
|
|
198
|
+
--button-pending-fg: var(--dees-color-on-accent);
|
|
199
|
+
--button-success-bg: var(--dees-color-accent-success);
|
|
200
|
+
--button-success-fg: var(--dees-color-on-accent);
|
|
201
|
+
--button-error-bg: var(--dees-color-accent-error);
|
|
202
|
+
--button-error-fg: var(--dees-color-on-accent);
|
|
188
203
|
}
|
|
189
204
|
:host([hidden]) {
|
|
190
205
|
display: none;
|
|
@@ -227,12 +242,21 @@ let DeesButton = (() => {
|
|
|
227
242
|
gap: var(--dees-spacing-sm);
|
|
228
243
|
}
|
|
229
244
|
|
|
245
|
+
/* Shape variants. The default squircle rect aligns with fields and other
|
|
246
|
+
rectangular siblings; pill is the capsule for standalone/floating
|
|
247
|
+
actions. Capsules keep corner-shape round — superellipse smoothing
|
|
248
|
+
would distort the semicircular end caps. */
|
|
249
|
+
.button.shape-pill {
|
|
250
|
+
border-radius: var(--dees-radius-full);
|
|
251
|
+
corner-shape: round;
|
|
252
|
+
}
|
|
253
|
+
|
|
230
254
|
/* Size variants.
|
|
231
|
-
The default sits at the standard control height (lg
|
|
232
|
-
lines up with text fields, dropdowns and the segmented control
|
|
233
|
-
placed alongside them (inline controls share the same height).
|
|
234
|
-
sm (
|
|
235
|
-
CTA. */
|
|
255
|
+
The default sits at the standard control height (control-height-lg) so
|
|
256
|
+
a button lines up with text fields, dropdowns and the segmented control
|
|
257
|
+
when placed alongside them (inline controls share the same height).
|
|
258
|
+
sm (control-height-sm) is the compact toolbar/table size; lg
|
|
259
|
+
(control-height-xl) is the prominent CTA. */
|
|
236
260
|
.button.size-default {
|
|
237
261
|
height: var(--dees-control-height-lg);
|
|
238
262
|
padding: 0 var(--dees-spacing-lg);
|
|
@@ -521,11 +545,12 @@ let DeesButton = (() => {
|
|
|
521
545
|
const rightIcon = this.iconPosition === 'right' && this.icon
|
|
522
546
|
? html `<dees-icon .icon=${this.icon}></dees-icon>`
|
|
523
547
|
: '';
|
|
524
|
-
//
|
|
525
|
-
|
|
548
|
+
// No placeholder label: a button without text renders icon-only.
|
|
549
|
+
// size-icon additionally suppresses text to keep its square geometry.
|
|
550
|
+
const showText = Boolean(this.text) && !(actualSize === 'icon' && this.icon);
|
|
526
551
|
return html `
|
|
527
552
|
<div
|
|
528
|
-
class="button ${this.isHidden ? 'hidden' : ''} ${actualType} size-${actualSize} ${this.status} ${this.disabled
|
|
553
|
+
class="button ${this.isHidden ? 'hidden' : ''} ${actualType} size-${actualSize} shape-${this.shape} ${this.status} ${this.disabled
|
|
529
554
|
? 'disabled'
|
|
530
555
|
: ''}"
|
|
531
556
|
@click="${this.dispatchClick}"
|
|
@@ -538,7 +563,7 @@ let DeesButton = (() => {
|
|
|
538
563
|
></dees-spinner>
|
|
539
564
|
`}
|
|
540
565
|
${leftIcon}
|
|
541
|
-
${
|
|
566
|
+
${showText ? html `<div class="textbox">${this.text}</div>` : ''}
|
|
542
567
|
${rightIcon}
|
|
543
568
|
</div>
|
|
544
569
|
`;
|
|
@@ -565,4 +590,4 @@ let DeesButton = (() => {
|
|
|
565
590
|
return DeesButton = _classThis;
|
|
566
591
|
})();
|
|
567
592
|
export { DeesButton };
|
|
568
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
593
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1idXR0b24vZGVlcy1idXR0b24vZGVlcy1idXR0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsSUFBSSxFQUNKLFdBQVcsRUFDWCxRQUFRLEVBRVIsVUFBVSxFQUNWLEdBQUcsRUFFSCxTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztJQVN6QyxVQUFVOzRCQUR0QixhQUFhLENBQUMsYUFBYSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBQW5CLFNBQVEsV0FBVzs7OztnQ0FJeEMsUUFBUSxDQUFDO29CQUNSLE9BQU8sRUFBRSxJQUFJO29CQUNiLFVBQVU7d0JBQ1IsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRixDQUFDOzJDQUdELFFBQVEsRUFBRTtvQ0FHVixRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE9BQU87b0JBQ2IsT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQztvQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE9BQU87aUJBQ2QsQ0FBQztnQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztnQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztrQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztpQ0FR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
|
|
@@ -0,0 +1,69 @@
|
|
|
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
|
+
export type TDiffRowKind = 'context' | 'add' | 'remove' | 'hunk';
|
|
7
|
+
export interface IDiffSegment {
|
|
8
|
+
text: string;
|
|
9
|
+
changed: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface IDiffRow {
|
|
12
|
+
kind: TDiffRowKind;
|
|
13
|
+
text: string;
|
|
14
|
+
/** 1-based line number on the before side (context/remove) */
|
|
15
|
+
oldLine?: number;
|
|
16
|
+
/** 1-based line number on the after side (context/add) */
|
|
17
|
+
newLine?: number;
|
|
18
|
+
/** intraline segments for paired single-line changes */
|
|
19
|
+
segments?: IDiffSegment[];
|
|
20
|
+
}
|
|
21
|
+
export interface IDiffFold {
|
|
22
|
+
kind: 'fold';
|
|
23
|
+
rows: IDiffRow[];
|
|
24
|
+
/** stable ordinal among folds; expansion state is keyed by this */
|
|
25
|
+
ordinal?: number;
|
|
26
|
+
}
|
|
27
|
+
export type TDiffDisplayRow = IDiffRow | IDiffFold;
|
|
28
|
+
export interface ISplitCell {
|
|
29
|
+
kind: 'context' | 'add' | 'remove';
|
|
30
|
+
text: string;
|
|
31
|
+
line: number;
|
|
32
|
+
segments?: IDiffSegment[];
|
|
33
|
+
}
|
|
34
|
+
export interface ISplitRow {
|
|
35
|
+
kind: 'pair' | 'hunk';
|
|
36
|
+
text?: string;
|
|
37
|
+
left?: ISplitCell;
|
|
38
|
+
right?: ISplitCell;
|
|
39
|
+
}
|
|
40
|
+
export interface IDiffStats {
|
|
41
|
+
added: number;
|
|
42
|
+
removed: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Line-level diff of two texts. Common prefix/suffix are trimmed first so
|
|
46
|
+
* the O(n*m) LCS table only covers the changed middle; oversized middles
|
|
47
|
+
* degrade gracefully to one remove-block + add-block.
|
|
48
|
+
*/
|
|
49
|
+
export declare const computeLineDiff: (beforeText: string, afterText: string) => IDiffRow[];
|
|
50
|
+
/** Parses a unified diff/patch into rows (file headers skipped, hunks kept). */
|
|
51
|
+
export declare const parseUnifiedDiff: (patchText: string) => IDiffRow[];
|
|
52
|
+
/**
|
|
53
|
+
* Folds long unchanged context runs so large files read as a review diff:
|
|
54
|
+
* keeps `contextLines` around changes, folds runs longer than
|
|
55
|
+
* `contextLines * 2 + minFoldSize`.
|
|
56
|
+
*/
|
|
57
|
+
export declare const foldContextRows: (rows: IDiffRow[], options?: {
|
|
58
|
+
contextLines?: number;
|
|
59
|
+
minFoldSize?: number;
|
|
60
|
+
}) => TDiffDisplayRow[];
|
|
61
|
+
/** Pairs rows into side-by-side cells; balanced remove/add runs align 1:1. */
|
|
62
|
+
export declare const buildSplitRows: (rows: Array<IDiffRow>) => ISplitRow[];
|
|
63
|
+
export declare const diffStats: (rows: Array<IDiffRow>) => IDiffStats;
|
|
64
|
+
/** Serializes rows back into a unified diff (for copy-to-clipboard). */
|
|
65
|
+
export declare const toUnifiedDiff: (rows: IDiffRow[], options?: {
|
|
66
|
+
contextLines?: number;
|
|
67
|
+
fileNameBefore?: string;
|
|
68
|
+
fileNameAfter?: string;
|
|
69
|
+
}) => string;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWJveC5kaWZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1jb2RlYm94L2NvZGVib3guZGlmZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBZ0RILE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFZLEVBQUU7SUFDNUMsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ2hFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsMEVBQTBFO0FBQzFFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUU5Qjs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsVUFBa0IsRUFBRSxTQUFpQixFQUFjLEVBQUU7SUFDbkYsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV6QyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDckIsT0FDRSxZQUFZLEdBQUcsV0FBVyxDQUFDLE1BQU07V0FDOUIsWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNO1dBQ2hDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQ3pELENBQUM7UUFDRCxZQUFZLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBQ0QsSUFBSSxZQUFZLEdBQUcsQ0FBQyxD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LEdBQUcsR0FBRyxRQUFRLElBQUksTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO1lBQzlDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUQsR0FBRyxFQUFFLENBQUM7Z0JBQ04sTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdELEdBQUcsRUFBRSxDQUFDO1lBQ1IsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNLEVBQUUsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLEdBQUcsUUFBUTtZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEYsT0FBTyxNQUFNLEdBQUcsV0FBVztZQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFD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LE1BQU0sQ0FBQztRQUNsRyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUMvRixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sUUFBUSxJQUFJLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQztRQUN0RSxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsQ0FBQyxDQUFDIn0=
|