@limetech/lime-elements 39.6.0 → 39.7.1
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/CHANGELOG.md +14 -0
- package/dist/cjs/lime-elements.cjs.js +1 -1
- package/dist/cjs/{limel-action-bar_2.cjs.entry.js → limel-action-bar_3.cjs.entry.js} +111 -93
- package/dist/cjs/limel-ai-avatar.cjs.entry.js +1 -1
- package/dist/cjs/limel-breadcrumbs_7.cjs.entry.js +6 -6
- package/dist/cjs/limel-button-group.cjs.entry.js +7 -8
- package/dist/cjs/limel-callout.cjs.entry.js +1 -1
- package/dist/cjs/limel-chart.cjs.entry.js +1 -1
- package/dist/cjs/limel-chip_2.cjs.entry.js +1 -1
- package/dist/cjs/limel-code-diff.cjs.entry.js +1758 -0
- package/dist/cjs/limel-code-editor.cjs.entry.js +2 -2
- package/dist/cjs/limel-collapsible-section.cjs.entry.js +2 -2
- package/dist/cjs/limel-color-picker-palette.cjs.entry.js +2 -2
- package/dist/cjs/limel-color-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-dialog.cjs.entry.js +2 -2
- package/dist/cjs/limel-dock.cjs.entry.js +2 -2
- package/dist/cjs/limel-drag-handle.cjs.entry.js +2 -2
- package/dist/cjs/limel-email-viewer.cjs.entry.js +2 -2
- package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-file-viewer.cjs.entry.js +1 -1
- package/dist/cjs/limel-file.cjs.entry.js +2 -2
- package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +2 -2
- package/dist/cjs/limel-flex-container.cjs.entry.js +1 -1
- package/dist/cjs/limel-form.cjs.entry.js +1 -1
- package/dist/cjs/limel-grid.cjs.entry.js +1 -1
- package/dist/cjs/limel-header.cjs.entry.js +1 -1
- package/dist/cjs/limel-help-content.cjs.entry.js +1 -1
- package/dist/cjs/limel-help.cjs.entry.js +2 -2
- package/dist/cjs/limel-helper-line_2.cjs.entry.js +3 -3
- package/dist/cjs/limel-icon-button.cjs.entry.js +1 -1
- package/dist/cjs/limel-icon.cjs.entry.js +1 -1
- package/dist/cjs/limel-info-tile.cjs.entry.js +2 -2
- package/dist/cjs/limel-linear-progress.cjs.entry.js +1 -1
- package/dist/cjs/limel-list-item.cjs.entry.js +3 -3
- package/dist/cjs/limel-markdown.cjs.entry.js +1 -1
- package/dist/cjs/limel-menu-item-meta.cjs.entry.js +1 -1
- package/dist/cjs/limel-picker.cjs.entry.js +1 -1
- package/dist/cjs/limel-popover_2.cjs.entry.js +2 -2
- package/dist/cjs/limel-portal_3.cjs.entry.js +4 -4
- package/dist/cjs/limel-profile-picture.cjs.entry.js +1 -1
- package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +2 -2
- package/dist/cjs/limel-radio-button-group.cjs.entry.js +1 -1
- package/dist/cjs/limel-radio-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-select.cjs.entry.js +1 -1
- package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
- package/dist/cjs/limel-slider.cjs.entry.js +1 -1
- package/dist/cjs/limel-snackbar.cjs.entry.js +3 -3
- package/dist/cjs/limel-split-button.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-bar.cjs.entry.js +2 -2
- package/dist/cjs/limel-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/limel-table.cjs.entry.js +4 -4
- package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +120 -0
- package/dist/cjs/limel-text-editor.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{translations-BBGWKIVD.js → translations-Bu_0fli7.js} +236 -4
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/button-group/button-group.css +38 -650
- package/dist/collection/components/button-group/button-group.js +6 -7
- package/dist/collection/components/code-diff/code-diff.css +519 -0
- package/dist/collection/components/code-diff/code-diff.js +775 -0
- package/dist/collection/components/code-diff/content-utils.js +49 -0
- package/dist/collection/components/code-diff/diff-engine.js +308 -0
- package/dist/collection/components/code-diff/search-utils.js +41 -0
- package/dist/collection/components/code-diff/syntax-highlighter.js +87 -0
- package/dist/collection/components/code-diff/types.js +1 -0
- package/dist/collection/components/code-editor/code-editor.js +1 -1
- package/dist/collection/components/collapsible-section/collapsible-section.js +1 -1
- package/dist/collection/components/color-picker/color-picker-palette.js +2 -2
- package/dist/collection/components/color-picker/color-picker.js +1 -1
- package/dist/collection/components/date-picker/flatpickr-adapter/flatpickr-adapter.js +1 -1
- package/dist/collection/components/dialog/dialog.js +2 -2
- package/dist/collection/components/dock/dock.js +2 -2
- package/dist/collection/components/drag-handle/drag-handle.js +1 -1
- package/dist/collection/components/email-viewer/email-viewer.js +1 -1
- package/dist/collection/components/file/file.js +1 -1
- package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
- package/dist/collection/components/file-input/file-input.js +1 -1
- package/dist/collection/components/flex-container/flex-container.js +1 -1
- package/dist/collection/components/form/form.js +1 -1
- package/dist/collection/components/grid/grid.js +1 -1
- package/dist/collection/components/header/header.js +1 -1
- package/dist/collection/components/help/help-content.js +1 -1
- package/dist/collection/components/help/help.js +2 -2
- package/dist/collection/components/helper-line/helper-line.js +2 -2
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/icon-button/icon-button.js +1 -1
- package/dist/collection/components/info-tile/info-tile.js +2 -2
- package/dist/collection/components/input-field/input-field.js +1 -1
- package/dist/collection/components/list/list.js +1 -1
- package/dist/collection/components/list-item/list-item.js +2 -2
- package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
- package/dist/collection/components/markdown/markdown.js +1 -1
- package/dist/collection/components/menu/menu.js +1 -1
- package/dist/collection/components/menu-list/menu-list.js +1 -1
- package/dist/collection/components/menu-surface/menu-surface.js +1 -1
- package/dist/collection/components/notched-outline/notched-outline.js +1 -1
- package/dist/collection/components/picker/picker.js +1 -1
- package/dist/collection/components/popover/popover.js +1 -1
- package/dist/collection/components/popover-surface/popover-surface.js +1 -1
- package/dist/collection/components/portal/portal.js +1 -1
- package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
- package/dist/collection/components/radio-button-group/radio-button.js +2 -2
- package/dist/collection/components/select/select.js +1 -1
- package/dist/collection/components/shortcut/shortcut.js +1 -1
- package/dist/collection/components/slider/slider.js +1 -1
- package/dist/collection/components/snackbar/snackbar.js +2 -2
- package/dist/collection/components/spinner/spinner.js +1 -1
- package/dist/collection/components/split-button/split-button.js +2 -2
- package/dist/collection/components/tab-bar/tab-bar.js +2 -2
- package/dist/collection/components/tab-panel/tab-panel.js +1 -1
- package/dist/collection/components/table/table.js +3 -3
- package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +3 -3
- package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +1 -1
- package/dist/collection/components/text-editor/text-editor.js +1 -1
- package/dist/collection/components/tooltip/tooltip-content.js +1 -1
- package/dist/collection/components/tooltip/tooltip.js +2 -2
- package/dist/collection/translations/da.js +29 -0
- package/dist/collection/translations/de.js +29 -0
- package/dist/collection/translations/en.js +29 -0
- package/dist/collection/translations/fi.js +29 -0
- package/dist/collection/translations/fr.js +33 -4
- package/dist/collection/translations/nl.js +29 -0
- package/dist/collection/translations/no.js +29 -0
- package/dist/collection/translations/sv.js +29 -0
- package/dist/esm/lime-elements.js +1 -1
- package/dist/esm/{limel-action-bar_2.entry.js → limel-action-bar_3.entry.js} +110 -93
- package/dist/esm/limel-ai-avatar.entry.js +1 -1
- package/dist/esm/limel-breadcrumbs_7.entry.js +6 -6
- package/dist/esm/limel-button-group.entry.js +7 -8
- package/dist/esm/limel-callout.entry.js +1 -1
- package/dist/esm/limel-chart.entry.js +1 -1
- package/dist/esm/limel-chip_2.entry.js +1 -1
- package/dist/esm/limel-code-diff.entry.js +1756 -0
- package/dist/esm/limel-code-editor.entry.js +2 -2
- package/dist/esm/limel-collapsible-section.entry.js +2 -2
- package/dist/esm/limel-color-picker-palette.entry.js +2 -2
- package/dist/esm/limel-color-picker.entry.js +1 -1
- package/dist/esm/limel-dialog.entry.js +2 -2
- package/dist/esm/limel-dock.entry.js +2 -2
- package/dist/esm/limel-drag-handle.entry.js +2 -2
- package/dist/esm/limel-email-viewer.entry.js +2 -2
- package/dist/esm/limel-file-dropzone_2.entry.js +2 -2
- package/dist/esm/limel-file-viewer.entry.js +1 -1
- package/dist/esm/limel-file.entry.js +2 -2
- package/dist/esm/limel-flatpickr-adapter.entry.js +2 -2
- package/dist/esm/limel-flex-container.entry.js +1 -1
- package/dist/esm/limel-form.entry.js +1 -1
- package/dist/esm/limel-grid.entry.js +1 -1
- package/dist/esm/limel-header.entry.js +1 -1
- package/dist/esm/limel-help-content.entry.js +1 -1
- package/dist/esm/limel-help.entry.js +2 -2
- package/dist/esm/limel-helper-line_2.entry.js +3 -3
- package/dist/esm/limel-icon-button.entry.js +1 -1
- package/dist/esm/limel-icon.entry.js +1 -1
- package/dist/esm/limel-info-tile.entry.js +2 -2
- package/dist/esm/limel-linear-progress.entry.js +1 -1
- package/dist/esm/limel-list-item.entry.js +3 -3
- package/dist/esm/limel-markdown.entry.js +1 -1
- package/dist/esm/limel-menu-item-meta.entry.js +1 -1
- package/dist/esm/limel-picker.entry.js +1 -1
- package/dist/esm/limel-popover_2.entry.js +2 -2
- package/dist/esm/limel-portal_3.entry.js +4 -4
- package/dist/esm/limel-profile-picture.entry.js +1 -1
- package/dist/esm/limel-prosemirror-adapter.entry.js +2 -2
- package/dist/esm/limel-radio-button-group.entry.js +1 -1
- package/dist/esm/limel-radio-button.entry.js +2 -2
- package/dist/esm/limel-select.entry.js +1 -1
- package/dist/esm/limel-shortcut.entry.js +1 -1
- package/dist/esm/limel-slider.entry.js +1 -1
- package/dist/esm/limel-snackbar.entry.js +3 -3
- package/dist/esm/limel-split-button.entry.js +2 -2
- package/dist/esm/limel-tab-bar.entry.js +2 -2
- package/dist/esm/limel-tab-panel.entry.js +1 -1
- package/dist/esm/limel-table.entry.js +4 -4
- package/dist/esm/limel-text-editor-link-menu.entry.js +118 -0
- package/dist/esm/limel-text-editor.entry.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{translations-BHybIZJs.js → translations-DVRaJQvC.js} +236 -4
- package/dist/lime-elements/lime-elements.esm.js +1 -1
- package/dist/lime-elements/{p-58176f7b.entry.js → p-05ff053d.entry.js} +1 -1
- package/dist/lime-elements/{p-7dd4e4bb.entry.js → p-08d1b87a.entry.js} +1 -1
- package/dist/lime-elements/{p-94f78e7a.entry.js → p-0fa2add8.entry.js} +1 -1
- package/dist/lime-elements/{p-40883e25.entry.js → p-1547b9c8.entry.js} +1 -1
- package/dist/lime-elements/{p-16a5f421.entry.js → p-1c244f85.entry.js} +1 -1
- package/dist/lime-elements/{p-ba9d6d42.entry.js → p-21dc4586.entry.js} +1 -1
- package/dist/lime-elements/{p-8e6a36a7.entry.js → p-2292181d.entry.js} +1 -1
- package/dist/lime-elements/{p-889d0000.entry.js → p-26bc957e.entry.js} +1 -1
- package/dist/lime-elements/{p-d4a51f0a.entry.js → p-287c4fb1.entry.js} +1 -1
- package/dist/lime-elements/p-358b277c.entry.js +1 -0
- package/dist/lime-elements/{p-f43e4cb8.entry.js → p-44295cc0.entry.js} +1 -1
- package/dist/lime-elements/{p-78fffaa9.entry.js → p-5178cc39.entry.js} +1 -1
- package/dist/lime-elements/{p-ec5b360a.entry.js → p-518fe33c.entry.js} +2 -2
- package/dist/lime-elements/{p-911db0aa.entry.js → p-53b94806.entry.js} +1 -1
- package/dist/lime-elements/p-5be668d8.entry.js +1 -0
- package/dist/lime-elements/{p-f49e5d8a.entry.js → p-68ffd790.entry.js} +1 -1
- package/dist/lime-elements/{p-fdfecf3d.entry.js → p-6a26ea78.entry.js} +1 -1
- package/dist/lime-elements/{p-5f593160.entry.js → p-6b05db4a.entry.js} +1 -1
- package/dist/lime-elements/p-70e2e60c.entry.js +1 -0
- package/dist/lime-elements/{p-3ad102a1.entry.js → p-756f452c.entry.js} +1 -1
- package/dist/lime-elements/{p-fa6aea91.entry.js → p-8784a57c.entry.js} +1 -1
- package/dist/lime-elements/{p-6d28c7b4.entry.js → p-89dfbd4a.entry.js} +1 -1
- package/dist/lime-elements/{p-5280d11e.entry.js → p-8ec4fdee.entry.js} +1 -1
- package/dist/lime-elements/{p-1b0eec07.entry.js → p-90f8d2ef.entry.js} +1 -1
- package/dist/lime-elements/p-965288d2.entry.js +1 -0
- package/dist/lime-elements/{p-8b77d2a8.entry.js → p-9908b57a.entry.js} +1 -1
- package/dist/lime-elements/{p-2d7a2258.entry.js → p-9e3e4f2c.entry.js} +1 -1
- package/dist/lime-elements/p-DVRaJQvC.js +1 -0
- package/dist/lime-elements/{p-3b18ef34.entry.js → p-a2295fa6.entry.js} +1 -1
- package/dist/lime-elements/{p-14bfd676.entry.js → p-a489f4b0.entry.js} +1 -1
- package/dist/lime-elements/{p-d5e954d4.entry.js → p-aeebf410.entry.js} +1 -1
- package/dist/lime-elements/{p-f4c9301d.entry.js → p-b11751c9.entry.js} +1 -1
- package/dist/lime-elements/{p-a1c1c40d.entry.js → p-b6ccc921.entry.js} +1 -1
- package/dist/lime-elements/{p-60f12574.entry.js → p-b95a42ea.entry.js} +1 -1
- package/dist/lime-elements/{p-8118cd4f.entry.js → p-bb38bb3c.entry.js} +1 -1
- package/dist/lime-elements/{p-d93f1c5f.entry.js → p-c3d565e2.entry.js} +1 -1
- package/dist/lime-elements/{p-a113dc9d.entry.js → p-c3ff8518.entry.js} +1 -1
- package/dist/lime-elements/{p-e00a96bd.entry.js → p-c6b9425b.entry.js} +1 -1
- package/dist/lime-elements/{p-373b7df7.entry.js → p-c6e9af7c.entry.js} +1 -1
- package/dist/lime-elements/{p-7997c118.entry.js → p-ce22f3da.entry.js} +1 -1
- package/dist/lime-elements/{p-8c6dfb19.entry.js → p-d5da5b05.entry.js} +1 -1
- package/dist/lime-elements/{p-b255e8e6.entry.js → p-da4429a8.entry.js} +1 -1
- package/dist/lime-elements/{p-6aa7cd43.entry.js → p-dcf3cc71.entry.js} +1 -1
- package/dist/lime-elements/{p-97f719ae.entry.js → p-de1e5ad9.entry.js} +1 -1
- package/dist/lime-elements/{p-13d0ec04.entry.js → p-eaac5ad2.entry.js} +1 -1
- package/dist/lime-elements/{p-ce178fbd.entry.js → p-ed8129db.entry.js} +1 -1
- package/dist/lime-elements/{p-b92431c8.entry.js → p-ee3afb60.entry.js} +3 -3
- package/dist/lime-elements/{p-8eff8a18.entry.js → p-ef75eed9.entry.js} +1 -1
- package/dist/lime-elements/{p-46b95d7c.entry.js → p-ef9bb368.entry.js} +1 -1
- package/dist/lime-elements/{p-912f53a3.entry.js → p-f70b8487.entry.js} +1 -1
- package/dist/lime-elements/{p-d53b8de5.entry.js → p-f9d5513d.entry.js} +1 -1
- package/dist/lime-elements/{p-bc4b4e46.entry.js → p-fb6c42a6.entry.js} +1 -1
- package/dist/types/components/code-diff/code-diff.d.ts +147 -0
- package/dist/types/components/code-diff/content-utils.d.ts +27 -0
- package/dist/types/components/code-diff/diff-engine.d.ts +36 -0
- package/dist/types/components/code-diff/search-utils.d.ts +30 -0
- package/dist/types/components/code-diff/syntax-highlighter.d.ts +19 -0
- package/dist/types/components/code-diff/types.d.ts +50 -0
- package/dist/types/components.d.ts +175 -0
- package/dist/types/translations/da.d.ts +29 -0
- package/dist/types/translations/de.d.ts +29 -0
- package/dist/types/translations/en.d.ts +29 -0
- package/dist/types/translations/fi.d.ts +29 -0
- package/dist/types/translations/fr.d.ts +29 -0
- package/dist/types/translations/nl.d.ts +29 -0
- package/dist/types/translations/no.d.ts +29 -0
- package/dist/types/translations/sv.d.ts +29 -0
- package/package.json +2 -1
- package/dist/cjs/limel-action-bar-item_2.cjs.entry.js +0 -137
- package/dist/esm/limel-action-bar-item_2.entry.js +0 -134
- package/dist/lime-elements/p-854a3ffe.entry.js +0 -1
- package/dist/lime-elements/p-8f2ac274.entry.js +0 -1
- package/dist/lime-elements/p-BHybIZJs.js +0 -1
- package/dist/lime-elements/p-accc6cc0.entry.js +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for extracting text content from diff structures.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Extract the text content of removed lines from a unified change block.
|
|
6
|
+
*
|
|
7
|
+
* @param lines - consecutive changed lines from a unified diff hunk
|
|
8
|
+
* @returns the removed lines joined by newlines, or empty string if none
|
|
9
|
+
*/
|
|
10
|
+
export function extractRemovedContent(lines) {
|
|
11
|
+
return lines
|
|
12
|
+
.filter((line) => line.type === 'removed')
|
|
13
|
+
.map((line) => line.content)
|
|
14
|
+
.join('\n');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Extract the text content of removed lines from a split change block.
|
|
18
|
+
*
|
|
19
|
+
* @param rows - consecutive changed rows from a split diff hunk
|
|
20
|
+
* @returns the removed lines joined by newlines, or empty string if none
|
|
21
|
+
*/
|
|
22
|
+
export function extractRemovedContentFromSplit(rows) {
|
|
23
|
+
return rows
|
|
24
|
+
.filter((row) => { var _a; return ((_a = row.left) === null || _a === void 0 ? void 0 : _a.type) === 'removed'; })
|
|
25
|
+
.map((row) => row.left.content)
|
|
26
|
+
.join('\n');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Format a screen-reader summary of diff additions and deletions.
|
|
30
|
+
*
|
|
31
|
+
* @param additions - number of added lines
|
|
32
|
+
* @param deletions - number of removed lines
|
|
33
|
+
* @returns human-readable summary string, or null if no changes
|
|
34
|
+
*/
|
|
35
|
+
export function formatDiffSummary(additions, deletions) {
|
|
36
|
+
if (additions === 0 && deletions === 0) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const parts = [];
|
|
40
|
+
if (additions > 0) {
|
|
41
|
+
const suffix = additions === 1 ? '' : 's';
|
|
42
|
+
parts.push(`${additions} addition${suffix}`);
|
|
43
|
+
}
|
|
44
|
+
if (deletions > 0) {
|
|
45
|
+
const suffix = deletions === 1 ? '' : 's';
|
|
46
|
+
parts.push(`${deletions} deletion${suffix}`);
|
|
47
|
+
}
|
|
48
|
+
return `Diff: ${parts.join(', ')}. Use arrow keys to navigate lines.`;
|
|
49
|
+
}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { diffLines, diffWords } from "diff";
|
|
2
|
+
/**
|
|
3
|
+
* Compute a structured diff between two strings.
|
|
4
|
+
*
|
|
5
|
+
* @param oldText - the "before" text
|
|
6
|
+
* @param newText - the "after" text
|
|
7
|
+
* @param contextLines - number of unchanged lines to show around each change
|
|
8
|
+
* @returns a DiffResult with hunks, additions, and deletions counts
|
|
9
|
+
*/
|
|
10
|
+
export function computeDiff(oldText, newText, contextLines = 3) {
|
|
11
|
+
const allLines = buildDiffLines(oldText, newText);
|
|
12
|
+
return groupIntoHunks(allLines, contextLines);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Re-group previously computed flat lines into hunks.
|
|
16
|
+
* Used when expanding collapsed sections without re-diffing.
|
|
17
|
+
*
|
|
18
|
+
* @param allLines - the full flat diff lines from a previous computation
|
|
19
|
+
* @param contextLines - number of context lines around changes
|
|
20
|
+
* @returns a DiffResult with new hunk groupings
|
|
21
|
+
*/
|
|
22
|
+
export function regroupLines(allLines, contextLines) {
|
|
23
|
+
return groupIntoHunks(allLines, contextLines);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build paired rows for split (side-by-side) view from flat diff lines.
|
|
27
|
+
* Context lines appear on both sides. Adjacent removed+added lines
|
|
28
|
+
* are paired into the same row.
|
|
29
|
+
*
|
|
30
|
+
* @param lines - flat diff lines
|
|
31
|
+
* @returns paired rows for split rendering
|
|
32
|
+
*/
|
|
33
|
+
export function buildSplitLines(lines) {
|
|
34
|
+
const rows = [];
|
|
35
|
+
let i = 0;
|
|
36
|
+
while (i < lines.length) {
|
|
37
|
+
const line = lines[i];
|
|
38
|
+
if (line.type === 'context') {
|
|
39
|
+
rows.push({ left: line, right: line });
|
|
40
|
+
i++;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
i = collectAndPairChanges(lines, i, rows);
|
|
44
|
+
}
|
|
45
|
+
return rows;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Collect consecutive removed then added lines starting at `index`,
|
|
49
|
+
* pair them into split rows, and return the new index.
|
|
50
|
+
* @param lines - flat diff lines
|
|
51
|
+
* @param index - starting index
|
|
52
|
+
* @param rows - output array to push paired rows into
|
|
53
|
+
*/
|
|
54
|
+
function collectAndPairChanges(lines, index, rows) {
|
|
55
|
+
const removed = [];
|
|
56
|
+
while (index < lines.length && lines[index].type === 'removed') {
|
|
57
|
+
removed.push(lines[index]);
|
|
58
|
+
index++;
|
|
59
|
+
}
|
|
60
|
+
const added = [];
|
|
61
|
+
while (index < lines.length && lines[index].type === 'added') {
|
|
62
|
+
added.push(lines[index]);
|
|
63
|
+
index++;
|
|
64
|
+
}
|
|
65
|
+
const maxPairs = Math.max(removed.length, added.length);
|
|
66
|
+
for (let j = 0; j < maxPairs; j++) {
|
|
67
|
+
rows.push({
|
|
68
|
+
left: j < removed.length ? removed[j] : undefined,
|
|
69
|
+
right: j < added.length ? added[j] : undefined,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return index;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Normalize values for diffing. If `reformatJson` is true,
|
|
76
|
+
* parse and re-stringify with sorted keys and consistent indentation.
|
|
77
|
+
* @param value
|
|
78
|
+
* @param reformatJson
|
|
79
|
+
*/
|
|
80
|
+
export function normalizeForDiff(value, reformatJson = false) {
|
|
81
|
+
if (typeof value === 'object' && value !== null) {
|
|
82
|
+
return JSON.stringify(sortKeysDeep(value), null, 4);
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === 'string' && reformatJson) {
|
|
85
|
+
try {
|
|
86
|
+
const parsed = JSON.parse(value);
|
|
87
|
+
return JSON.stringify(sortKeysDeep(parsed), null, 4);
|
|
88
|
+
}
|
|
89
|
+
catch (_a) {
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return String(value !== null && value !== void 0 ? value : '');
|
|
94
|
+
}
|
|
95
|
+
function sortKeysDeep(obj) {
|
|
96
|
+
if (Array.isArray(obj)) {
|
|
97
|
+
return obj.map(sortKeysDeep);
|
|
98
|
+
}
|
|
99
|
+
if (obj !== null && typeof obj === 'object') {
|
|
100
|
+
const sorted = {};
|
|
101
|
+
const keys = Object.keys(obj).sort((a, b) => a.localeCompare(b));
|
|
102
|
+
for (const key of keys) {
|
|
103
|
+
sorted[key] = sortKeysDeep(obj[key]);
|
|
104
|
+
}
|
|
105
|
+
return sorted;
|
|
106
|
+
}
|
|
107
|
+
return obj;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Build a flat list of DiffLines from two text strings.
|
|
111
|
+
* @param oldText
|
|
112
|
+
* @param newText
|
|
113
|
+
*/
|
|
114
|
+
function buildDiffLines(oldText, newText) {
|
|
115
|
+
const changes = diffLines(oldText, newText);
|
|
116
|
+
const lines = [];
|
|
117
|
+
let oldLineNum = 1;
|
|
118
|
+
let newLineNum = 1;
|
|
119
|
+
for (const change of changes) {
|
|
120
|
+
const changeLines = splitIntoLines(change.value);
|
|
121
|
+
for (const line of changeLines) {
|
|
122
|
+
if (change.added) {
|
|
123
|
+
lines.push({
|
|
124
|
+
type: 'added',
|
|
125
|
+
content: line,
|
|
126
|
+
newLineNumber: newLineNum++,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
else if (change.removed) {
|
|
130
|
+
lines.push({
|
|
131
|
+
type: 'removed',
|
|
132
|
+
content: line,
|
|
133
|
+
oldLineNumber: oldLineNum++,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
lines.push({
|
|
138
|
+
type: 'context',
|
|
139
|
+
content: line,
|
|
140
|
+
oldLineNumber: oldLineNum++,
|
|
141
|
+
newLineNumber: newLineNum++,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
addWordLevelHighlighting(lines);
|
|
147
|
+
return lines;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Split a string into lines, handling the trailing newline
|
|
151
|
+
* that jsdiff includes in each change value.
|
|
152
|
+
* @param text
|
|
153
|
+
*/
|
|
154
|
+
function splitIntoLines(text) {
|
|
155
|
+
if (!text) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
const lines = text.split('\n');
|
|
159
|
+
// jsdiff includes a trailing newline, producing an empty last element
|
|
160
|
+
if (lines.length > 0 && lines.at(-1) === '') {
|
|
161
|
+
lines.pop();
|
|
162
|
+
}
|
|
163
|
+
return lines;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Pair adjacent removed+added lines and compute word-level diffs
|
|
167
|
+
* to highlight only the specific segments that changed.
|
|
168
|
+
* @param lines
|
|
169
|
+
*/
|
|
170
|
+
function addWordLevelHighlighting(lines) {
|
|
171
|
+
let i = 0;
|
|
172
|
+
while (i < lines.length) {
|
|
173
|
+
// Find consecutive removed lines
|
|
174
|
+
const removedStart = i;
|
|
175
|
+
while (i < lines.length && lines[i].type === 'removed') {
|
|
176
|
+
i++;
|
|
177
|
+
}
|
|
178
|
+
const removedEnd = i;
|
|
179
|
+
// Find consecutive added lines right after
|
|
180
|
+
const addedStart = i;
|
|
181
|
+
while (i < lines.length && lines[i].type === 'added') {
|
|
182
|
+
i++;
|
|
183
|
+
}
|
|
184
|
+
const addedEnd = i;
|
|
185
|
+
const removedCount = removedEnd - removedStart;
|
|
186
|
+
const addedCount = addedEnd - addedStart;
|
|
187
|
+
// Pair them up for word-level highlighting
|
|
188
|
+
if (removedCount > 0 && addedCount > 0) {
|
|
189
|
+
const pairCount = Math.min(removedCount, addedCount);
|
|
190
|
+
for (let j = 0; j < pairCount; j++) {
|
|
191
|
+
const removedLine = lines[removedStart + j];
|
|
192
|
+
const addedLine = lines[addedStart + j];
|
|
193
|
+
const [removedSegments, addedSegments] = computeWordSegments(removedLine.content, addedLine.content);
|
|
194
|
+
removedLine.segments = removedSegments;
|
|
195
|
+
addedLine.segments = addedSegments;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Skip context lines
|
|
199
|
+
if (i === removedStart) {
|
|
200
|
+
i++;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Compute word-level diff segments for a pair of lines.
|
|
206
|
+
* @param oldContent
|
|
207
|
+
* @param newContent
|
|
208
|
+
*/
|
|
209
|
+
function computeWordSegments(oldContent, newContent) {
|
|
210
|
+
const wordChanges = diffWords(oldContent, newContent);
|
|
211
|
+
const removedSegments = [];
|
|
212
|
+
const addedSegments = [];
|
|
213
|
+
for (const change of wordChanges) {
|
|
214
|
+
if (change.added) {
|
|
215
|
+
addedSegments.push({ value: change.value, type: 'added' });
|
|
216
|
+
}
|
|
217
|
+
else if (change.removed) {
|
|
218
|
+
removedSegments.push({ value: change.value, type: 'removed' });
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
removedSegments.push({ value: change.value, type: 'equal' });
|
|
222
|
+
addedSegments.push({ value: change.value, type: 'equal' });
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return [removedSegments, addedSegments];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Group a flat list of diff lines into hunks with context.
|
|
229
|
+
* @param lines
|
|
230
|
+
* @param contextLines
|
|
231
|
+
*/
|
|
232
|
+
function groupIntoHunks(lines, contextLines) {
|
|
233
|
+
if (lines.length === 0) {
|
|
234
|
+
return { hunks: [], additions: 0, deletions: 0, allLines: lines };
|
|
235
|
+
}
|
|
236
|
+
let additions = 0;
|
|
237
|
+
let deletions = 0;
|
|
238
|
+
for (const line of lines) {
|
|
239
|
+
if (line.type === 'added') {
|
|
240
|
+
additions++;
|
|
241
|
+
}
|
|
242
|
+
else if (line.type === 'removed') {
|
|
243
|
+
deletions++;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// If there are no changes, return a single empty result
|
|
247
|
+
if (additions === 0 && deletions === 0) {
|
|
248
|
+
return { hunks: [], additions: 0, deletions: 0, allLines: lines };
|
|
249
|
+
}
|
|
250
|
+
// Find ranges of changed lines with their context
|
|
251
|
+
const changeIndices = [];
|
|
252
|
+
for (const [i, line] of lines.entries()) {
|
|
253
|
+
if (line.type !== 'context') {
|
|
254
|
+
changeIndices.push(i);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Build hunk boundaries
|
|
258
|
+
const hunkBoundaries = buildHunkBoundaries(changeIndices, lines.length, contextLines);
|
|
259
|
+
const hunks = [];
|
|
260
|
+
let prevEnd = 0;
|
|
261
|
+
for (const boundary of hunkBoundaries) {
|
|
262
|
+
const hunkLines = lines.slice(boundary.start, boundary.end);
|
|
263
|
+
const hiddenBefore = boundary.start - prevEnd;
|
|
264
|
+
const collapsedBefore = hiddenBefore > 0 ? hiddenBefore : undefined;
|
|
265
|
+
hunks.push({
|
|
266
|
+
lines: hunkLines,
|
|
267
|
+
collapsedBefore,
|
|
268
|
+
startIndex: boundary.start,
|
|
269
|
+
});
|
|
270
|
+
prevEnd = boundary.end;
|
|
271
|
+
}
|
|
272
|
+
// Calculate collapsed lines after the last hunk
|
|
273
|
+
const lastBoundary = hunkBoundaries.at(-1);
|
|
274
|
+
const collapsedAfter = lastBoundary.end < lines.length
|
|
275
|
+
? lines.length - lastBoundary.end
|
|
276
|
+
: undefined;
|
|
277
|
+
return { hunks, additions, deletions, collapsedAfter, allLines: lines };
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Build the start/end boundaries of each hunk based on change positions.
|
|
281
|
+
* Merges hunks that overlap or are adjacent.
|
|
282
|
+
* @param changeIndices
|
|
283
|
+
* @param totalLines
|
|
284
|
+
* @param contextLines
|
|
285
|
+
*/
|
|
286
|
+
function buildHunkBoundaries(changeIndices, totalLines, contextLines) {
|
|
287
|
+
if (changeIndices.length === 0) {
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
const boundaries = [];
|
|
291
|
+
let currentStart = Math.max(0, changeIndices[0] - contextLines);
|
|
292
|
+
let currentEnd = Math.min(totalLines, changeIndices[0] + contextLines + 1);
|
|
293
|
+
for (let i = 1; i < changeIndices.length; i++) {
|
|
294
|
+
const changeStart = Math.max(0, changeIndices[i] - contextLines);
|
|
295
|
+
const changeEnd = Math.min(totalLines, changeIndices[i] + contextLines + 1);
|
|
296
|
+
if (changeStart <= currentEnd) {
|
|
297
|
+
// Merge overlapping hunks
|
|
298
|
+
currentEnd = Math.max(currentEnd, changeEnd);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
boundaries.push({ start: currentStart, end: currentEnd });
|
|
302
|
+
currentStart = changeStart;
|
|
303
|
+
currentEnd = changeEnd;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
boundaries.push({ start: currentStart, end: currentEnd });
|
|
307
|
+
return boundaries;
|
|
308
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure utility functions for search-within-diff functionality.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Escape special regex characters in a search term so it can
|
|
6
|
+
* be used as a literal pattern in a RegExp constructor.
|
|
7
|
+
*
|
|
8
|
+
* @param term - the raw search string
|
|
9
|
+
* @returns regex-safe string
|
|
10
|
+
*/
|
|
11
|
+
export function escapeRegex(term) {
|
|
12
|
+
return term.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw `\$&`);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Build a case-insensitive regex that captures the search term.
|
|
16
|
+
* Returns `null` when the term is empty.
|
|
17
|
+
*
|
|
18
|
+
* @param term - the raw search string
|
|
19
|
+
* @returns a RegExp with a single capture group, or null
|
|
20
|
+
*/
|
|
21
|
+
export function buildSearchRegex(term) {
|
|
22
|
+
if (!term) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return new RegExp(`(${escapeRegex(term)})`, 'gi');
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Calculate the next match index when navigating forward or backward,
|
|
29
|
+
* wrapping around at the boundaries.
|
|
30
|
+
*
|
|
31
|
+
* @param currentIndex - current zero-based match index
|
|
32
|
+
* @param direction - +1 for next, -1 for previous
|
|
33
|
+
* @param total - total number of matches
|
|
34
|
+
* @returns the new match index
|
|
35
|
+
*/
|
|
36
|
+
export function navigateMatchIndex(currentIndex, direction, total) {
|
|
37
|
+
if (total === 0) {
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
return (currentIndex + direction + total) % total;
|
|
41
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tokenize a text fragment for syntax highlighting.
|
|
3
|
+
* Returns the original text as a single plain token when the
|
|
4
|
+
* language is not supported.
|
|
5
|
+
*
|
|
6
|
+
* @param text - the text to tokenize
|
|
7
|
+
* @param language - the language identifier (e.g. "json")
|
|
8
|
+
* @returns array of syntax tokens
|
|
9
|
+
*/
|
|
10
|
+
export function tokenize(text, language) {
|
|
11
|
+
if (!language || text.length === 0) {
|
|
12
|
+
return [{ value: text, type: 'plain' }];
|
|
13
|
+
}
|
|
14
|
+
if (language === 'json') {
|
|
15
|
+
return tokenizeJson(text);
|
|
16
|
+
}
|
|
17
|
+
return [{ value: text, type: 'plain' }];
|
|
18
|
+
}
|
|
19
|
+
// ─── JSON tokenizer ─────────────────────────────────────────────────
|
|
20
|
+
/**
|
|
21
|
+
* Regex-based JSON tokenizer.
|
|
22
|
+
* Handles partial lines (individual lines of a JSON document).
|
|
23
|
+
*/
|
|
24
|
+
const JSON_PATTERNS = [
|
|
25
|
+
// String literals (keys and values)
|
|
26
|
+
[/"(?:[^"\\]|\\.)*"/, 'string'],
|
|
27
|
+
// Numbers
|
|
28
|
+
[/-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/, 'number'],
|
|
29
|
+
// Booleans
|
|
30
|
+
[/\b(?:true|false)\b/, 'boolean'],
|
|
31
|
+
// Null
|
|
32
|
+
[/\bnull\b/, 'null'],
|
|
33
|
+
// Punctuation
|
|
34
|
+
[/[{}[\]:,]/, 'punctuation'],
|
|
35
|
+
];
|
|
36
|
+
const JSON_REGEX = new RegExp(JSON_PATTERNS.map(([re]) => `(${re.source})`).join('|'), 'g');
|
|
37
|
+
function tokenizeJson(text) {
|
|
38
|
+
const tokens = [];
|
|
39
|
+
let lastIndex = 0;
|
|
40
|
+
JSON_REGEX.lastIndex = 0;
|
|
41
|
+
let match = JSON_REGEX.exec(text);
|
|
42
|
+
while (match !== null) {
|
|
43
|
+
// Plain text before this match
|
|
44
|
+
if (match.index > lastIndex) {
|
|
45
|
+
tokens.push({
|
|
46
|
+
value: text.slice(lastIndex, match.index),
|
|
47
|
+
type: 'plain',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Determine which capture group matched
|
|
51
|
+
const tokenType = getMatchedTokenType(match);
|
|
52
|
+
const value = match[0];
|
|
53
|
+
// Distinguish JSON keys from string values:
|
|
54
|
+
// A key is a string followed by optional whitespace and a colon
|
|
55
|
+
if (tokenType === 'string') {
|
|
56
|
+
const afterMatch = text.slice(match.index + value.length);
|
|
57
|
+
if (/^\s*:/.test(afterMatch)) {
|
|
58
|
+
tokens.push({ value, type: 'key' });
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
tokens.push({ value, type: 'string' });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
tokens.push({ value, type: tokenType });
|
|
66
|
+
}
|
|
67
|
+
lastIndex = match.index + value.length;
|
|
68
|
+
match = JSON_REGEX.exec(text);
|
|
69
|
+
}
|
|
70
|
+
// Remaining plain text
|
|
71
|
+
if (lastIndex < text.length) {
|
|
72
|
+
tokens.push({ value: text.slice(lastIndex), type: 'plain' });
|
|
73
|
+
}
|
|
74
|
+
return tokens;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Determine which pattern matched by checking capture groups.
|
|
78
|
+
* @param match - the regex match result
|
|
79
|
+
*/
|
|
80
|
+
function getMatchedTokenType(match) {
|
|
81
|
+
for (const [index, [, type]] of JSON_PATTERNS.entries()) {
|
|
82
|
+
if (match[index + 1] !== undefined) {
|
|
83
|
+
return type;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return 'plain';
|
|
87
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -250,7 +250,7 @@ export class CodeEditor {
|
|
|
250
250
|
'is-dark-mode': this.isDarkMode(),
|
|
251
251
|
'is-light-mode': !this.isDarkMode(),
|
|
252
252
|
};
|
|
253
|
-
return (h(Host, { key: '
|
|
253
|
+
return (h(Host, { key: 'fd59cdeb74135398c33210af68d6129820c586bd' }, this.renderCopyButton(), h("limel-notched-outline", { key: '41214ae1f04b85a9462f3b71cd03871a7fd0401d', labelId: this.labelId, label: this.label, required: this.required, invalid: this.invalid, disabled: this.disabled, readonly: this.readonly, hasValue: !!this.value, hasFloatingLabel: true }, h("div", { key: '4d5caf3e80e342af2b8ea54411b11348949babd1', slot: "content", class: classList })), this.renderHelperLine()));
|
|
254
254
|
}
|
|
255
255
|
forceRedraw() {
|
|
256
256
|
// eslint-disable-next-line sonarjs/pseudo-random
|
|
@@ -111,7 +111,7 @@ export class CollapsibleSection {
|
|
|
111
111
|
removeEnterClickable(button);
|
|
112
112
|
}
|
|
113
113
|
render() {
|
|
114
|
-
return (h("section", { key: '
|
|
114
|
+
return (h("section", { key: 'a40f48753cc7e5ae281b0e2a169e19510e54cc55', class: `${this.isOpen ? 'open' : ''}`, "aria-invalid": this.invalid, "aria-labelledby": this.header ? this.headingId : null }, h("header", { key: '55784166942971de68e351914a6d96dc77ea75c4' }, h("button", { key: '0432b0b5a4af99b94fea4073de496785c8f87d36', class: "open-close-toggle", onClick: this.onClick, "aria-controls": this.bodyId, "aria-expanded": this.isOpen ? 'true' : 'false', "aria-label": this.getCollapsibleSectionAriaLabel(), type: "button" }), this.renderExpandCollapseSign(), this.renderIcon(), this.renderHeading(), h("div", { key: '11efcd91907a79ed0945749b4672809e466c1e00', class: "divider-line", role: "presentation" }), this.renderHeaderSlot(), this.renderActions()), h("div", { key: '4b74f9d5fc9533eb14180a23e20c402a436b53f7', class: "body", "aria-hidden": String(!this.isOpen), id: this.bodyId, role: "region" }, h("slot", { key: '42c969ae7787768247a41952f9cf6d528ca7d4fd' }))));
|
|
115
115
|
}
|
|
116
116
|
renderHeaderSlot() {
|
|
117
117
|
return h("slot", { name: "header" });
|
|
@@ -39,10 +39,10 @@ export class Palette {
|
|
|
39
39
|
render() {
|
|
40
40
|
const background = this.value ? { '--background': this.value } : {};
|
|
41
41
|
return [
|
|
42
|
-
h("div", { key: '
|
|
42
|
+
h("div", { key: '184f8b9b74ebeb5611aa28ff3b14dbb225118af2', class: "color-picker-palette", style: {
|
|
43
43
|
'--color-picker-column-count': `${this.getColumnCount()}`,
|
|
44
44
|
} }, this.renderSwatches()),
|
|
45
|
-
h("div", { key: '
|
|
45
|
+
h("div", { key: '27b19d8906e5f28c86c27476ebe0287b6043eb66', class: "chosen-color-name" }, h("limel-input-field", { key: 'd055b72d5570bcb085b728eb0cf4698b80a44643', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, invalid: this.invalid, placeholder: this.placeholder, disabled: !this.manualInput }), h("div", { key: '051cc6a16e9659aabb01f4b6b9f0b30036d440b4', class: "chosen-color-preview", style: background })),
|
|
46
46
|
];
|
|
47
47
|
}
|
|
48
48
|
getPalette() {
|
|
@@ -86,7 +86,7 @@ export class ColorPicker {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
render() {
|
|
89
|
-
return (h(Host, { key: '
|
|
89
|
+
return (h(Host, { key: '33ce47843041f982dc448a4f954a434418d376ba' }, this.renderTooltip(), this.renderPickerPalette(), h("limel-input-field", { key: '74e6e705f7633d4a0ebba49352c24592209421d5', label: this.label, helperText: this.helperText, value: this.value, onChange: this.handleChange, required: this.required, readonly: this.readonly, disabled: this.disabled || !this.manualInput, invalid: this.invalid, placeholder: this.placeholder })));
|
|
90
90
|
}
|
|
91
91
|
static get is() { return "limel-color-picker"; }
|
|
92
92
|
static get encapsulation() { return "shadow"; }
|
|
@@ -89,7 +89,7 @@ export class DatePickerCalendar {
|
|
|
89
89
|
this.flatPickrCreated = false;
|
|
90
90
|
}
|
|
91
91
|
render() {
|
|
92
|
-
return (h("div", { key: '
|
|
92
|
+
return (h("div", { key: '95bd84a535e4bcbf91a356e47b2fbaf440daf15d', class: "container", ref: (el) => (this.container = el), style: {
|
|
93
93
|
'--today-label': `"${translate.get('date-picker.today')}"`,
|
|
94
94
|
} }));
|
|
95
95
|
}
|
|
@@ -84,10 +84,10 @@ export class Dialog {
|
|
|
84
84
|
this.mdcDialog.destroy();
|
|
85
85
|
}
|
|
86
86
|
render() {
|
|
87
|
-
return (h("div", { key: '
|
|
87
|
+
return (h("div", { key: '590a7ad1dc1deeab0481f36b9aaeea0aca24d34f', class: {
|
|
88
88
|
'mdc-dialog': true,
|
|
89
89
|
'full-screen': !!this.fullscreen,
|
|
90
|
-
}, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, h("input", { key: '
|
|
90
|
+
}, role: "alertdialog", "aria-modal": "true", "aria-labelledby": 'limel-dialog-title-' + this.id, "aria-describedby": 'limel-dialog-content-' + this.id }, h("input", { key: 'f7a96d6e0f7086ac47791cb895bb78a296e23ec7', hidden: true, id: "initialFocusEl" }), h("div", { key: 'c0755b202346c3b6bcf257d94872c1fb81f49db5', class: "mdc-dialog__container" }, h("div", { key: '6ccc11dae44838539b2e1fa6a074c74a0b76364c', class: "mdc-dialog__surface" }, h("input", { key: 'ae6bdad52ac6e44f25fa0396797f0ec013d27ab9', type: "button", id: "initialFocusElement" }), this.renderHeading(), h("div", { key: '45e3b2e05bed5dc4c8039502b81ca2384821fe6f', class: "mdc-dialog__content", id: 'limel-dialog-content-' + this.id }, h("slot", { key: '64979e861d307be41993ace61a7b0c5a616a6e2c' })), this.renderFooter())), h("div", { key: '0b7c0e8c2d8f0cac26e926a685ba5c985db976f8', class: "mdc-dialog__scrim" })));
|
|
91
91
|
}
|
|
92
92
|
watchHandler(newValue, oldValue) {
|
|
93
93
|
if (oldValue === newValue) {
|
|
@@ -79,11 +79,11 @@ export class Dock {
|
|
|
79
79
|
this.resizeObserver.disconnect();
|
|
80
80
|
}
|
|
81
81
|
render() {
|
|
82
|
-
return (h(Host, { key: '
|
|
82
|
+
return (h(Host, { key: '3a859df9c1fb4b56bb1ba18b846a2da353075b0f', class: {
|
|
83
83
|
dock: true,
|
|
84
84
|
expanded: this.expanded,
|
|
85
85
|
'has-mobile-layout': this.useMobileLayout,
|
|
86
|
-
} }, h("nav", { key: '
|
|
86
|
+
} }, h("nav", { key: '75303da2b5c8f86a4a6e1be7e76811e3dce8a303', "aria-label": this.accessibleLabel }, this.dockItems.map(this.renderDockItem), this.renderSeparator(), this.dockFooterItems.map(this.renderDockItem)), this.renderExpandShrinkToggle()));
|
|
87
87
|
}
|
|
88
88
|
renderExpandShrinkToggle() {
|
|
89
89
|
if (this.useMobileLayout || !this.allowResize) {
|
|
@@ -51,7 +51,7 @@ export class DragHandleComponent {
|
|
|
51
51
|
render() {
|
|
52
52
|
const tooltipLabel = translate.get('drag-handle.drag-to-reorder', this.language);
|
|
53
53
|
const ariaLabel = translate.get('drag-handle.drag-handle', this.language);
|
|
54
|
-
return (h(Host, { key: '
|
|
54
|
+
return (h(Host, { key: 'e83ce402fe42d2b8f457e381ace449847333ddc2' }, h("button", { key: '56956b7efc28c4c72a5d2538026495055ed810ff', "data-drag-handle": true, type: "button", class: "limel-drag-handle", tabindex: -1, "aria-label": ariaLabel, id: this.dragHandleId, onClick: this.handleClick }, h("div", { key: 'e51e6c69aeef13b6edd48f46e12e830cfdd3016c', class: "drag-icon", role: "presentation", "aria-hidden": "true" }, h("div", { key: "1" }), h("div", { key: "2" }), h("div", { key: "3" }), h("div", { key: "4" }), h("div", { key: "5" }), h("div", { key: "6" })), h("limel-tooltip", { key: 'ca44d8fe5178e099976c41a517f95ebfff780bcf', openDirection: this.tooltipOpenDirection, elementId: this.dragHandleId, label: tooltipLabel }))));
|
|
55
55
|
}
|
|
56
56
|
static get is() { return "limel-drag-handle"; }
|
|
57
57
|
static get originalStyleUrls() {
|
|
@@ -61,7 +61,7 @@ export class EmailViewer {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
render() {
|
|
64
|
-
return (h(Host, { key: '
|
|
64
|
+
return (h(Host, { key: 'b37cad79c4d85f9cef78ef741d882d5384c039db' }, h("div", { key: '89e9fa6c9c39234ec9268d93837f0b27f328d046', class: "email", part: "email" }, this.renderHeaders(), this.renderRemoteImageBanner(), h("section", { key: '01f4c97918464218bc0d4ab4e79214027993360d' }, this.renderAttachments(), this.renderBody()))));
|
|
65
65
|
}
|
|
66
66
|
renderHeaders() {
|
|
67
67
|
const headerFields = [
|
|
@@ -89,7 +89,7 @@ export class File {
|
|
|
89
89
|
};
|
|
90
90
|
}
|
|
91
91
|
render() {
|
|
92
|
-
return (h(Host, { key: '
|
|
92
|
+
return (h(Host, { key: '09d8f61392d489c41a083edb516b680f481d7b55' }, h("limel-file-dropzone", { key: '36812196ad3a91ce98ec13df0e26927fbe67b4a4', disabled: this.disabled || this.readonly || !!this.value, accept: this.accept, onFilesSelected: this.handleNewFiles }, this.renderChipset()), this.renderDragAndDropTip()));
|
|
93
93
|
}
|
|
94
94
|
renderDragAndDropTip() {
|
|
95
95
|
if (this.value || this.disabled || this.readonly) {
|
|
@@ -90,7 +90,7 @@ export class FileDropzone {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
render() {
|
|
93
|
-
return (h(Host, { key: '
|
|
93
|
+
return (h(Host, { key: '70e5213cc5470868f2442b908d9ffd39466edbac', onDrop: this.handleDrop, onDragOver: this.handleDragOver, onDragLeave: this.handleDragLeave }, h("slot", { key: '4d886da6bfad382dc9c579ad17ea73d62ccdf1d3' }), this.renderOnDragLayout()));
|
|
94
94
|
}
|
|
95
95
|
static get is() { return "limel-file-dropzone"; }
|
|
96
96
|
static get encapsulation() { return "shadow"; }
|
|
@@ -71,7 +71,7 @@ export class FileInput {
|
|
|
71
71
|
this.fileInput = this.element.shadowRoot.getElementById(this.fileInputId);
|
|
72
72
|
}
|
|
73
73
|
render() {
|
|
74
|
-
return (h(Host, { key: '
|
|
74
|
+
return (h(Host, { key: '4ec87952fba90e1fff07a60b977edd1980e33738', onClick: this.handleClick, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown }, h("input", { key: '2fdc5fbb81294f85ad02a175b0720f53ad13c4f0', hidden: true, id: this.fileInputId, onChange: this.handleFileChange, type: "file", accept: this.accept, disabled: this.disabled, multiple: this.multiple }), h("slot", { key: 'd72890dd7c622c71e6b46217891d88f770607bda' })));
|
|
75
75
|
}
|
|
76
76
|
handleKeyDown(event) {
|
|
77
77
|
if (event.code === 'Tab' ||
|
|
@@ -31,7 +31,7 @@ export class FlexContainer {
|
|
|
31
31
|
console.warn('limel-flex-container is deprecated, please use CSS instead: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox');
|
|
32
32
|
}
|
|
33
33
|
render() {
|
|
34
|
-
return h("slot", { key: '
|
|
34
|
+
return h("slot", { key: 'f308350023b1ced85d78be3fe3f2365cb30aeabd' });
|
|
35
35
|
}
|
|
36
36
|
static get is() { return "limel-flex-container"; }
|
|
37
37
|
static get encapsulation() { return "shadow"; }
|
|
@@ -72,7 +72,7 @@ export class Form {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
render() {
|
|
75
|
-
return h("div", { key: '
|
|
75
|
+
return h("div", { key: '338235611cd3fd70cb5f0ce1728917bd648cb573', class: "root" });
|
|
76
76
|
}
|
|
77
77
|
reactRender() {
|
|
78
78
|
if (!this.root) {
|