@aquera/nile-elements 0.1.67-beta-1.6 → 0.1.67-beta-1.7
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/demo/index.html +11 -5
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +81 -12
- package/dist/nile-avatar/nile-avatar.test.cjs.js +1 -1
- package/dist/nile-avatar/nile-avatar.test.cjs.js.map +1 -1
- package/dist/nile-avatar/nile-avatar.test.esm.js +1 -1
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.esm.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.test.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.test.esm.js +1 -1
- package/dist/nile-button/index.cjs.js +1 -1
- package/dist/nile-button/index.esm.js +1 -1
- package/dist/nile-button/nile-button.cjs.js +1 -1
- package/dist/nile-button/nile-button.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.esm.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js +1 -1
- package/dist/nile-button/nile-button.test.cjs.js.map +1 -1
- package/dist/nile-button/nile-button.test.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.test.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.test.esm.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js +1 -1
- package/dist/nile-chip/nile-chip.test.cjs.js.map +1 -1
- package/dist/nile-chip/nile-chip.test.esm.js +1 -1
- package/dist/nile-dialog/index.cjs.js +1 -1
- package/dist/nile-dialog/index.esm.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.cjs.js.map +1 -1
- package/dist/nile-dialog/nile-dialog.esm.js +2 -2
- package/dist/nile-dialog/nile-dialog.test.cjs.js +1 -1
- package/dist/nile-dialog/nile-dialog.test.cjs.js.map +1 -1
- package/dist/nile-dialog/nile-dialog.test.esm.js +1 -1
- package/dist/nile-drawer/index.cjs.js +1 -1
- package/dist/nile-drawer/index.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.cjs.js.map +1 -1
- package/dist/nile-drawer/nile-drawer.esm.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js +1 -1
- package/dist/nile-drawer/nile-drawer.test.cjs.js.map +1 -1
- package/dist/nile-drawer/nile-drawer.test.esm.js +1 -1
- package/dist/nile-icon/icons/svg/format_clear.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/format_clear.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/format_clear.esm.js +1 -0
- package/dist/nile-icon/icons/svg/format_list_bulleted.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/format_list_bulleted.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/format_list_bulleted.esm.js +1 -0
- package/dist/nile-icon/icons/svg/format_list_numbered.cjs.js +2 -0
- package/dist/nile-icon/icons/svg/format_list_numbered.cjs.js.map +1 -0
- package/dist/nile-icon/icons/svg/format_list_numbered.esm.js +1 -0
- package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
- package/dist/nile-icon/icons/svg/index.esm.js +1 -1
- package/dist/nile-icon/index.cjs.js +1 -1
- package/dist/nile-icon/index.cjs.js.map +1 -1
- package/dist/nile-icon/index.esm.js +2 -2
- package/dist/nile-icon/nile-icon.test.cjs.js +1 -1
- package/dist/nile-icon/nile-icon.test.cjs.js.map +1 -1
- package/dist/nile-icon/nile-icon.test.esm.js +1 -1
- package/dist/nile-icon-button/index.cjs.js +1 -1
- package/dist/nile-icon-button/index.esm.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
- package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
- package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
- package/dist/nile-input/index.cjs.js +1 -1
- package/dist/nile-input/index.esm.js +1 -1
- package/dist/nile-input/nile-input.cjs.js +1 -1
- package/dist/nile-input/nile-input.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.esm.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js +1 -1
- package/dist/nile-input/nile-input.test.cjs.js.map +1 -1
- package/dist/nile-input/nile-input.test.esm.js +1 -1
- package/dist/nile-menu-item/index.cjs.js +1 -1
- package/dist/nile-menu-item/index.esm.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
- package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
- package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
- package/dist/nile-option/index.cjs.js +1 -1
- package/dist/nile-option/index.esm.js +1 -1
- package/dist/nile-option/nile-option.cjs.js +1 -1
- package/dist/nile-option/nile-option.cjs.js.map +1 -1
- package/dist/nile-option/nile-option.esm.js +1 -1
- package/dist/nile-rich-text-editor/index.cjs.js +1 -1
- package/dist/nile-rich-text-editor/index.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +3 -5
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-color.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-color.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rte-color.esm.js +54 -1
- package/dist/nile-rich-text-editor/nile-rte-link.cjs.js +2 -0
- package/dist/nile-rich-text-editor/nile-rte-link.cjs.js.map +1 -0
- package/dist/nile-rich-text-editor/nile-rte-link.esm.js +19 -0
- package/dist/nile-rich-text-editor/utils.cjs.js +1 -1
- package/dist/nile-rich-text-editor/utils.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/utils.esm.js +1 -1
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +1 -1
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js +1 -1
- package/dist/nile-select/nile-select.test.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.test.esm.js +1 -1
- package/dist/nile-tab/index.cjs.js +1 -1
- package/dist/nile-tab/index.esm.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js +1 -1
- package/dist/nile-tab/nile-tab.cjs.js.map +1 -1
- package/dist/nile-tab/nile-tab.esm.js +1 -1
- package/dist/nile-tab-group/index.cjs.js +1 -1
- package/dist/nile-tab-group/index.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.cjs.js.map +1 -1
- package/dist/nile-tab-group/nile-tab-group.esm.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.cjs.js.map +1 -1
- package/dist/nile-tab-group/nile-tab-group.test.esm.js +1 -1
- package/dist/nile-tag/index.cjs.js +1 -1
- package/dist/nile-tag/index.esm.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js +1 -1
- package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
- package/dist/nile-tag/nile-tag.esm.js +1 -1
- package/dist/nile-toast/index.cjs.js +1 -1
- package/dist/nile-toast/index.esm.js +1 -1
- package/dist/nile-toast/nile-toast.cjs.js +1 -1
- package/dist/nile-toast/nile-toast.cjs.js.map +1 -1
- package/dist/nile-toast/nile-toast.esm.js +1 -1
- package/dist/nile-tree/index.cjs.js +1 -1
- package/dist/nile-tree/index.esm.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js +1 -1
- package/dist/nile-tree/nile-tree.cjs.js.map +1 -1
- package/dist/nile-tree/nile-tree.esm.js +1 -1
- package/dist/nile-tree-item/index.cjs.js +1 -1
- package/dist/nile-tree-item/index.esm.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js +1 -1
- package/dist/nile-tree-item/nile-tree-item.cjs.js.map +1 -1
- package/dist/nile-tree-item/nile-tree-item.esm.js +1 -1
- package/dist/nile-virtual-select/index.cjs.js +1 -1
- package/dist/nile-virtual-select/index.esm.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +1 -1
- package/dist/src/nile-icon/icons/svg/format_clear.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/format_clear.js +5 -0
- package/dist/src/nile-icon/icons/svg/format_clear.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/format_list_bulleted.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/format_list_bulleted.js +5 -0
- package/dist/src/nile-icon/icons/svg/format_list_bulleted.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/format_list_numbered.d.ts +5 -0
- package/dist/src/nile-icon/icons/svg/format_list_numbered.js +5 -0
- package/dist/src/nile-icon/icons/svg/format_list_numbered.js.map +1 -0
- package/dist/src/nile-icon/icons/svg/index.d.ts +3 -0
- package/dist/src/nile-icon/icons/svg/index.js +3 -0
- package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +3 -5
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +18 -78
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-color.d.ts +11 -3
- package/dist/src/nile-rich-text-editor/nile-rte-color.js +171 -6
- package/dist/src/nile-rich-text-editor/nile-rte-color.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-link.d.ts +19 -0
- package/dist/src/nile-rich-text-editor/nile-rte-link.js +172 -0
- package/dist/src/nile-rich-text-editor/nile-rte-link.js.map +1 -0
- package/dist/src/nile-rich-text-editor/sanatize.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/sanatize.js +40 -0
- package/dist/src/nile-rich-text-editor/sanatize.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-icon/icons/svg/format_clear.ts +5 -0
- package/src/nile-icon/icons/svg/format_list_bulleted.ts +5 -0
- package/src/nile-icon/icons/svg/format_list_numbered.ts +5 -0
- package/src/nile-icon/icons/svg/index.ts +3 -0
- package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +3 -5
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +26 -80
- package/src/nile-rich-text-editor/nile-rte-color.ts +182 -6
- package/src/nile-rich-text-editor/nile-rte-link.ts +161 -0
- package/vscode-html-custom-data.json +33 -3
@@ -1,2 +1,2 @@
|
|
1
|
-
System.register(["lit"],function(_export,_context){"use strict";var e,_templateObject,r;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){e=_lit.css;}],execute:function execute(){_export("s",r=e(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n
|
1
|
+
System.register(["lit"],function(_export,_context){"use strict";var e,_templateObject,r;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){e=_lit.css;}],execute:function execute(){_export("s",r=e(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n \n\n nile-rich-text-editor { position: relative; display: block; font-family: inherit; }\n\n \nnile-rte-toolbar-item > nile-button::part(base) {\n \n width:32px; height:32px; padding:0px 6px;\n border: none;\n}\n \n \n\n\n .toolbar, nile-rte-toolbar {\n display:flex; align-items:center; gap:6px; padding:8px; \n border:1px solid #e5e7eb; border-bottom:none; border-radius:8px 8px 0 0; background:#fff;\n }\n\n nile-rte-toolbar-item > button, .toolbar button, nile-rte-toolbar button {\n border:1px solid #e5e7eb; background:#fff; border-radius:6px;\n cursor:pointer;\n }\n\n \n /* Ensure clicks hit the button (not nested icon internals) */\n nile-rte-toolbar-item > button nile-icon { pointer-events:none; }\n\n nile-rte-toolbar-item > button.active { border-color:#2563eb; background:#eff6ff; }\n nile-rte-select select { height:32px; border:1px solid #e5e7eb; border-radius:6px; background:#fff; }\n nile-rte-color input[type=\"color\"] { height:32px; width:36px; border:1px solid #e5e7eb; padding:0; border-radius:6px; background:#fff; }\n nile-rte-divider { width:1px; height:20px; background:#e5e7eb; display:inline-block; margin:0 4px; }\n\n .editor p { margin:1em 0; }\n .editor h1, .preview h1 { font-size:2em, all: revert; display: block;\nfont-size: 2em;\nmargin-top: 0.67em;\nmargin-bottom: 0.67em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold; }\n .editor h2, .preview h2 { all: revert;\tdisplay: block;\nfont-size: 1.5em;\nmargin-top: 0.83em;\nmargin-bottom: 0.83em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold;}\n .editor h3 { font-size:1.17em }\n .editor h4 { font-size:1em }\n .editor h5 { font-size:0.83em }\n .editor h6 { font-size:0.67em }\n\n .editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none; white-space: pre-wrap;\n tab-size: 4; \n -moz-tab-size: 4; }\n nile-rte-preview { display:block; margin-top:10px; padding:10px; border:1px dashed #cbd5e1; border-radius:8px; background:#fafafa; }\n\n .rte-color-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* border: 1px solid var(--nile-color-border, #d9d9d9); */\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n border:none;\n \n\n}\nnile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\n}\n.rte-color-trigger .glyph-stack {\n display: grid; /* stack vertically */\n grid-auto-rows: max-content; \n align-items: center;\n justify-items: center;\n line-height: 1;\n}\n\n.rte-color-trigger .glyph {\n font-size: 14px;\n line-height: 1;\n margin-bottom: 2px; \n}\n\n.rte-color-trigger .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n background: currentColor; \n}\n\n \n.rte-color-trigger .swatch-box {\n width: 18px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0.35);\n background: currentColor; /* overridden via JS */\n}\n\n"]))));}};});
|
2
2
|
//# sourceMappingURL=nile-rich-text-editor.css.cjs.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.css.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"sourcesContent":["// rte-styles.ts\nimport { css } from 'lit';\n\nexport const styles = css`\n
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.css.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"sourcesContent":["// rte-styles.ts\nimport { css } from 'lit';\n\nexport const styles = css`\n \n\n nile-rich-text-editor { position: relative; display: block; font-family: inherit; }\n\n \nnile-rte-toolbar-item > nile-button::part(base) {\n \n width:32px; height:32px; padding:0px 6px;\n border: none;\n}\n \n \n\n\n .toolbar, nile-rte-toolbar {\n display:flex; align-items:center; gap:6px; padding:8px; \n border:1px solid #e5e7eb; border-bottom:none; border-radius:8px 8px 0 0; background:#fff;\n }\n\n nile-rte-toolbar-item > button, .toolbar button, nile-rte-toolbar button {\n border:1px solid #e5e7eb; background:#fff; border-radius:6px;\n cursor:pointer;\n }\n\n \n /* Ensure clicks hit the button (not nested icon internals) */\n nile-rte-toolbar-item > button nile-icon { pointer-events:none; }\n\n nile-rte-toolbar-item > button.active { border-color:#2563eb; background:#eff6ff; }\n nile-rte-select select { height:32px; border:1px solid #e5e7eb; border-radius:6px; background:#fff; }\n nile-rte-color input[type=\"color\"] { height:32px; width:36px; border:1px solid #e5e7eb; padding:0; border-radius:6px; background:#fff; }\n nile-rte-divider { width:1px; height:20px; background:#e5e7eb; display:inline-block; margin:0 4px; }\n\n .editor p { margin:1em 0; }\n .editor h1, .preview h1 { font-size:2em, all: revert; display: block;\nfont-size: 2em;\nmargin-top: 0.67em;\nmargin-bottom: 0.67em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold; }\n .editor h2, .preview h2 { all: revert;\tdisplay: block;\nfont-size: 1.5em;\nmargin-top: 0.83em;\nmargin-bottom: 0.83em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold;}\n .editor h3 { font-size:1.17em }\n .editor h4 { font-size:1em }\n .editor h5 { font-size:0.83em }\n .editor h6 { font-size:0.67em }\n\n .editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none; white-space: pre-wrap;\n tab-size: 4; \n -moz-tab-size: 4; }\n nile-rte-preview { display:block; margin-top:10px; padding:10px; border:1px dashed #cbd5e1; border-radius:8px; background:#fafafa; }\n\n .rte-color-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n /* border: 1px solid var(--nile-color-border, #d9d9d9); */\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n border:none;\n \n\n}\nnile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\n}\n.rte-color-trigger .glyph-stack {\n display: grid; /* stack vertically */\n grid-auto-rows: max-content; \n align-items: center;\n justify-items: center;\n line-height: 1;\n}\n\n.rte-color-trigger .glyph {\n font-size: 14px;\n line-height: 1;\n margin-bottom: 2px; \n}\n\n.rte-color-trigger .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n background: currentColor; \n}\n\n \n.rte-color-trigger .swatch-box {\n width: 18px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0.35);\n background: currentColor; /* overridden via JS */\n}\n\n`;\n\nexport default [styles];"],"names":["styles","css","_templateObject","_taggedTemplateLiteral"],"mappings":"oTAGaA,CAAAA,CAASC,CAAG,CAAAC,eAAA,GAAAA,eAAA,CAAAC,sBAAA"}
|
@@ -1,7 +1,5 @@
|
|
1
1
|
import{css as e}from"lit";const r=e`
|
2
|
-
|
3
|
-
all: revert;
|
4
|
-
}
|
2
|
+
|
5
3
|
|
6
4
|
nile-rich-text-editor { position: relative; display: block; font-family: inherit; }
|
7
5
|
|
@@ -35,14 +33,14 @@ nile-rte-toolbar-item > nile-button::part(base) {
|
|
35
33
|
nile-rte-divider { width:1px; height:20px; background:#e5e7eb; display:inline-block; margin:0 4px; }
|
36
34
|
|
37
35
|
.editor p { margin:1em 0; }
|
38
|
-
.editor h1 { font-size:2em, all: revert; display: block;
|
36
|
+
.editor h1, .preview h1 { font-size:2em, all: revert; display: block;
|
39
37
|
font-size: 2em;
|
40
38
|
margin-top: 0.67em;
|
41
39
|
margin-bottom: 0.67em;
|
42
40
|
margin-left: 0;
|
43
41
|
margin-right: 0;
|
44
42
|
font-weight: bold; }
|
45
|
-
.editor h2 { all: revert; display: block;
|
43
|
+
.editor h2, .preview h2 { all: revert; display: block;
|
46
44
|
font-size: 1.5em;
|
47
45
|
margin-top: 0.83em;
|
48
46
|
margin-bottom: 0.83em;
|
@@ -1 +1 @@
|
|
1
|
-
import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as e,customElement as n}from"lit/decorators.js";import"./nile-rte-toolbar.esm.js";import"./nile-rte-toolbar-item.esm.js";import"./nile-rte-select.esm.js";import"./nile-rte-color.esm.js";import"./nile-rte-divider.esm.js";import"./nile-rte-preview.esm.js";import"./nile-rte-mentions.esm.js";import{s as o,a as r,b as h,c as l,d as c,i as a,t as u,n as d,e as f,r as m}from"./utils.esm.js";import{s as p}from"./nile-rich-text-editor.css.esm.js";const b={bold:"format_bold",italic:"format_italic",underline:"format_underline",link:"link_2",left:"format_align_left",center:"format_align_middle",right:"format_align_right",justify:"format_align_justify",ul:"format_list_bulleted",ol:"format_list_numbered",clear:"error"};let g=class extends i{constructor(){super(...arguments),this.value="",this.mentions={},this.content="",this.previewEl=null,this.toolbarEl=null,this.lastRange=null,this.buttonMap=new Map,this.headingSelect=null,this.fontSelect=null,this.colorInput=null,this.bgColorInput=null,this.colorSwatchEl=null,this.bgSwatchEl=null,this.mentionsEl=null,this.onEditorKeydown=t=>{if("Tab"!==t.key)return;t.preventDefault(),this.focusAndRestore();const i=window.getSelection();if(!i||0===i.rangeCount)return;const s=i.getRangeAt(0);if(t.shiftKey){if(s.collapsed&&s.startContainer.nodeType===Node.TEXT_NODE){const t=s.startContainer,e=s.startOffset,n=t.data.slice(0,e),o=n.replace(/(\t|[ \u00a0]{2})$/,"");if(o.length!==n.length){t.data=o+t.data.slice(e);const s=document.createRange();s.setStart(t,o.length),s.collapse(!0),i.removeAllRanges(),i.addRange(s),this.updateContent(),this.updateToolbarState()}}return}s.deleteContents();const e=document.createTextNode("\t");s.insertNode(e);const n=document.createRange();n.setStartAfter(e),n.collapse(!0),i.removeAllRanges(),i.addRange(n),this.updateContent(),this.updateToolbarState()},this.onSelectionChange=()=>{if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);this.editorEl.contains(i.commonAncestorContainer)&&(this.lastRange=i.cloneRange(),this.updateToolbarState())}}createRenderRoot(){return this}shouldUpdate(){return!1}injectCss(t){if(this.querySelector("style[data-rte-style]"))return;const i=document.createElement("style");i.setAttribute("data-rte-style","true"),i.textContent=t,this.insertBefore(i,this.firstChild)}connectedCallback(){super.connectedCallback(),this.injectCss(p.cssText),this.toolbarEl=this.querySelector("nile-rte-toolbar"),this.previewEl=this.querySelector("nile-rte-preview"),this.ensureEditor(),this.value&&!this.editorEl.innerHTML.trim()&&(this.editorEl.innerHTML=this.value),this.content=this.editorEl.innerHTML,this.toolbarEl&&this.wireAuthoredToolbar(this.toolbarEl),this.mentionsEl=this.querySelector("nile-rte-mentions"),this.mentionsEl&&(this.mentionsEl.attach?.(this.editorEl,this),this.mentionsEl.setExternalConfig?.(this.mentions)),this.wireEditor(),this.updateToolbarState(),this.syncPreview(),document.addEventListener("selectionchange",this.onSelectionChange,!0)}disconnectedCallback(){document.removeEventListener("selectionchange",this.onSelectionChange,!0),this.mentionsEl&&this.mentionsEl.detach&&this.mentionsEl.detach(),super.disconnectedCallback()}ensureEditor(){if(this.editorEl=this.querySelector(".editor"),!this.editorEl){const t=document.createElement("article");t.className="editor",t.setAttribute("contenteditable","true"),this.toolbarEl?.nextSibling?this.insertBefore(t,this.toolbarEl.nextSibling):this.previewEl?this.insertBefore(t,this.previewEl):this.appendChild(t),this.editorEl=t}this.editorEl.innerHTML.trim()||(this.editorEl.innerHTML="<p><br></p>"),this.ensureAtLeastOneParagraph()}wireEditor(){this.editorEl.addEventListener("input",(()=>{this.ensureAtLeastOneParagraph(),this.updateContent()})),this.editorEl.addEventListener("mouseup",(()=>this.saveSelection())),this.editorEl.addEventListener("keyup",(()=>this.saveSelection())),this.editorEl.addEventListener("keydown",this.onEditorKeydown)}wireAuthoredToolbar(t){this.buttonMap.clear(),this.headingSelect=null,this.fontSelect=null,this.colorInput=null,Array.from(t.children).forEach((t=>{const i=t.tagName.toLowerCase();if("nile-rte-select"!==i||"align"!==t.getAttribute("type")){if("nile-rte-toolbar-item"===i){let i=t.querySelector(":scope > nile-button");const s=t.getAttribute("name")||"",e=t.getAttribute("label")||s,n=t.getAttribute("icon"),o=t.innerHTML.trim().length>0;if(i||(i=document.createElement("nile-button"),i.variant="tertiary",i.size="small"),n)i.innerHTML=`<nile-icon name="${n}" aria-label="${e}"></nile-icon>`,t.innerHTML="";else if(o)i.innerHTML=t.innerHTML,t.innerHTML="";else{const n=b[s];n?i.innerHTML=`<nile-icon name="${n}" size="20" color="black" aria-label="${e}"></nile-icon>`:i.textContent=e||s,t.innerHTML=""}i.isConnected||t.appendChild(i),i.setAttribute("aria-label",e),i.addEventListener("mousedown",(t=>t.preventDefault())),i.addEventListener("click",(()=>this.onToolbarCommand(s)));const r=this.buttonMap.get(s)??[];return r.push(i),void this.buttonMap.set(s,r)}if("nile-rte-select"!==i){if("nile-rte-color"===i){const i=t.getAttribute("label")??"Text color",s=t.getAttribute("value")??"#000000",e=t.getAttribute("mode")??"text";let n=t.querySelector(':scope > input[type="color"]');n||(n=document.createElement("input"),n.type="color",n.style.position="absolute",n.style.opacity="0",n.style.pointerEvents="none",t.appendChild(n)),n.title=i,n.value=s;let o=t.querySelector(":scope > nile-button");if(!o){const s=document.createElement("nile-button");s.variant="ghost",s.className="rte-color-trigger",s.setAttribute("aria-label",i),s.innerHTML="background"===e?'<span class="swatch-box" aria-hidden="true"></span>':'\n <span class="glyph-stack" aria-hidden="true">\n <span class="glyph">A</span>\n <span class="underline"></span>\n </span>\n ',t.appendChild(s),o=s}const r=o.querySelector(".underline"),h=o.querySelector(".swatch-box");"background"===e?(this.bgColorInput=n,this.bgSwatchEl=h,this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=n.value)):(this.colorInput=n,this.colorSwatchEl=r,this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=n.value)),o.addEventListener("click",(t=>{t.preventDefault(),this.focusAndRestore(),n.click()})),n.addEventListener("input",(()=>{this.focusAndRestore(),"background"===e?(l(this.editorEl,n.value),this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=n.value)):(c(this.editorEl,n.value),this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=n.value)),this.updateContent(),this.updateToolbarState()})),o.addEventListener("mousedown",(t=>t.preventDefault())),n.addEventListener("mousedown",(t=>t.preventDefault()))}}else{const i=t.getAttribute("type")||"";t.addEventListener("change",(t=>{this.focusAndRestore();const s=t.detail;"heading"===i?r(this.editorEl,s):"font"===i&&h(this.editorEl,s),this.updateContent(),this.updateToolbarState()}))}}else t.addEventListener("change",(t=>{this.focusAndRestore();const i=t.detail;o(this.editorEl,i),this.updateContent(),this.updateToolbarState()}))}))}saveSelection(){const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}insertList(t){if(this.restoreSelection(),!this.lastRange)return;const i=document.createElement(t),s=this.lastRange.extractContents(),e=document.createElement("div");e.appendChild(s),Array.from(e.childNodes).forEach((t=>{if(t.nodeType===Node.TEXT_NODE&&!t.textContent?.trim())return;const s=document.createElement("li");s.appendChild(t),i.appendChild(s)})),this.lastRange.insertNode(i),this.afterListEdit(i)}afterListEdit(t){const i=document.createRange();i.setStartAfter(t),i.collapse(!0);const s=window.getSelection();s?.removeAllRanges(),s?.addRange(i),this.saveSelection(),this.updateContent(),this.updateToolbarState()}ensureAtLeastOneParagraph(){const t=this.editorEl;if(!t)return;const i=""===(t.textContent??"").replace(/\u200B/g,"").trim();if(0===t.childNodes.length||i)return void(t.innerHTML="<p><br></p>");if(!t.querySelector("p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre")){const i=document.createElement("p");for(;t.firstChild;)i.appendChild(t.firstChild);return i.hasChildNodes()||i.appendChild(document.createElement("br")),void t.appendChild(i)}t.querySelectorAll("p").forEach((t=>{""===(t.textContent??"").replace(/\u200B/g,"")&&(t.innerHTML.toLowerCase().includes("<br")||(t.innerHTML="<br>"))}))}onToolbarCommand(t){switch(this.focusAndRestore(),t){case"bold":u(this.editorEl,"strong");break;case"italic":u(this.editorEl,"em");break;case"underline":u(this.editorEl,"u");break;case"left":o(this.editorEl,"left");break;case"center":o(this.editorEl,"center");break;case"right":o(this.editorEl,"right");break;case"justify":o(this.editorEl,"justify");break;case"ul":this.insertList("ul");break;case"ol":this.insertList("ol");break;case"link":a(this.editorEl);break;case"clear":const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=[];for(;t.nextNode();){const s=t.currentNode;s.removeAttribute("style"),["B","STRONG","I","EM","U","SPAN","FONT"].includes(s.tagName)&&i.push(s)}for(const t of i){for(;t.firstChild;)t.parentNode?.insertBefore(t.firstChild,t);t.remove()}this.ensureAtLeastOneParagraph()}this.updateContent(),this.updateToolbarState()}setBtnActive(t,i){const s=this.buttonMap.get(t);if(s)for(const t of s)t.toggleAttribute("data-active",!!i)}updateToolbarState(){if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);if(!this.editorEl.contains(i.commonAncestorContainer))return;const s=d(i.startContainer)||this.editorEl,e=getComputedStyle(s),n=f(i.startContainer,this.editorEl)||this.editorEl,o=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("strong"===i||"b"===i)return!0;const s=getComputedStyle(t).fontWeight;if(parseInt(s,10)>=600)return!0}t=t.parentNode}return!1})(),r=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("em"===i||"i"===i)return!0;if("italic"===getComputedStyle(t).fontStyle)return!0}t=t.parentNode}return!1})(),h=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=getComputedStyle(t).textDecorationLine;if(i&&i.includes("underline"))return!0;if("u"===t.tagName.toLowerCase())return!0}t=t.parentNode}return!1})(),l=!!s.closest("a"),c=n.style.textAlign||getComputedStyle(n).textAlign||"start",a="start"===c?"left":c,u=!!s.closest("li")&&s.closest("ul,ol")?.tagName.toLowerCase()||"";if(this.setBtnActive("bold",o),this.setBtnActive("italic",r),this.setBtnActive("underline",h),this.setBtnActive("link",l),this.setBtnActive("left","left"===a&&!["center","right","justify"].includes(a)),this.setBtnActive("center","center"===a),this.setBtnActive("right","right"===a),this.setBtnActive("justify","justify"===a),this.setBtnActive("ul","ul"===u),this.setBtnActive("ol","ol"===u),this.headingSelect){const t=n.tagName.toLowerCase(),i=["h1","h2","h3"].includes(t)?t:"p";this.headingSelect.value!==i&&(this.headingSelect.value=i)}if(this.fontSelect){const t=(e.fontFamily||"").replace(/["']/g,"").split(",")[0].trim().toLowerCase();if(t)for(const i of Array.from(this.fontSelect.options))if(i.value.toLowerCase()===t){this.fontSelect.value=i.value;break}}if(this.colorInput){const t=m(e.color);t&&this.colorInput.value.toLowerCase()!==t.toLowerCase()&&(this.colorInput.value=t),this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=this.colorInput.value)}if(this.bgColorInput){const t=getComputedStyle(s).backgroundColor;if(t&&!/transparent|rgba\(\s*0\s*,\s*0\s*,\s*0\s*,\s*0\s*\)/i.test(t)){const i=m(t);i&&this.bgColorInput.value.toLowerCase()!==i.toLowerCase()&&(this.bgColorInput.value=i)}this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=this.bgColorInput.value)}}syncPreview(){this.updateContent()}updateContent(){if(!this.editorEl)return;this.ensureAtLeastOneParagraph();const t=this.editorEl.cloneNode(!0),i=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),s=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT),e=["font-weight","font-style","text-decoration","color","background-color","font-size","font-family","text-align","line-height","letter-spacing","white-space","vertical-align"];for(;i.nextNode()&&s.nextNode();){const t=i.currentNode,n=s.currentNode,o=window.getComputedStyle(t),r=e.map((t=>`${t}:${o.getPropertyValue(t)}`)).join(";");r.trim()&&n.setAttribute("style",r)}this.content=t.innerHTML,this.previewEl&&(this.previewEl.innerHTML=this.content),this.dispatchEvent(new CustomEvent("content-changed",{detail:{content:this.content},bubbles:!0,composed:!0}))}};t([s({type:String})],g.prototype,"value",void 0),t([s({attribute:"mentions",converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const e=i[t];Array.isArray(e)&&(s[t]=e.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)).map((t=>({key:t.key,label:t.label}))))}return s}catch{return{}}},toAttribute:t=>JSON.stringify(t)}})],g.prototype,"mentions",void 0),t([e()],g.prototype,"content",void 0),g=t([n("nile-rich-text-editor")],g);export{g as N};
|
1
|
+
import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as e,customElement as n}from"lit/decorators.js";import"./nile-rte-toolbar.esm.js";import"./nile-rte-toolbar-item.esm.js";import"./nile-rte-select.esm.js";import"./nile-rte-color.esm.js";import"./nile-rte-divider.esm.js";import"./nile-rte-preview.esm.js";import"./nile-rte-mentions.esm.js";import"./nile-rte-link.esm.js";import{s as r,a as o,b as h,c as l,d as c,t as a,n as u,e as f,r as d}from"./utils.esm.js";import{s as m}from"./nile-rich-text-editor.css.esm.js";const b={bold:"format_bold",italic:"format_italic",underline:"format_underline",link:"link_2",left:"format_align_left",center:"format_align_middle",right:"format_align_right",justify:"format_align_justify",ul:"format_list_bulleted",ol:"format_list_numbered",clear:"format_clear"};let p=class extends i{constructor(){super(...arguments),this.value="",this.mentions={},this.content="",this.previewEl=null,this.toolbarEl=null,this.lastRange=null,this.buttonMap=new Map,this.headingSelect=null,this.fontSelect=null,this.colorInput=null,this.bgColorInput=null,this.colorSwatchEl=null,this.bgSwatchEl=null,this.mentionsEl=null,this.onEditorKeydown=t=>{if("Tab"!==t.key)return;t.preventDefault(),this.focusAndRestore();const i=window.getSelection();if(!i||0===i.rangeCount)return;const s=i.getRangeAt(0);if(t.shiftKey){if(s.collapsed&&s.startContainer.nodeType===Node.TEXT_NODE){const t=s.startContainer,e=s.startOffset,n=t.data.slice(0,e),r=n.replace(/(\t|[ \u00a0]{2})$/,"");if(r.length!==n.length){t.data=r+t.data.slice(e);const s=document.createRange();s.setStart(t,r.length),s.collapse(!0),i.removeAllRanges(),i.addRange(s),this.updateContent(),this.updateToolbarState()}}return}s.deleteContents();const e=document.createTextNode("\t");s.insertNode(e);const n=document.createRange();n.setStartAfter(e),n.collapse(!0),i.removeAllRanges(),i.addRange(n),this.updateContent(),this.updateToolbarState()},this.onSelectionChange=()=>{if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);this.editorEl.contains(i.commonAncestorContainer)&&(this.lastRange=i.cloneRange(),this.updateToolbarState())}}createRenderRoot(){return this}shouldUpdate(){return!1}injectCss(t){if(this.querySelector("style[data-rte-style]"))return;const i=document.createElement("style");i.setAttribute("data-rte-style","true"),i.textContent=t,this.insertBefore(i,this.firstChild)}connectedCallback(){super.connectedCallback(),this.injectCss(m.cssText),this.toolbarEl=this.querySelector("nile-rte-toolbar"),this.previewEl=this.querySelector("nile-rte-preview"),this.ensureEditor(),this.value&&!this.editorEl.innerHTML.trim()&&(this.editorEl.innerHTML=this.value),this.content=this.editorEl.innerHTML,this.toolbarEl&&this.wireAuthoredToolbar(this.toolbarEl),this.mentionsEl=this.querySelector("nile-rte-mentions"),this.mentionsEl&&(this.mentionsEl.attach?.(this.editorEl,this),this.mentionsEl.setExternalConfig?.(this.mentions)),this.wireEditor(),this.updateToolbarState(),this.syncPreview(),document.addEventListener("selectionchange",this.onSelectionChange,!0)}disconnectedCallback(){document.removeEventListener("selectionchange",this.onSelectionChange,!0),this.mentionsEl&&this.mentionsEl.detach&&this.mentionsEl.detach(),super.disconnectedCallback()}ensureEditor(){if(this.editorEl=this.querySelector(".editor"),!this.editorEl){const t=document.createElement("article");t.className="editor",t.setAttribute("contenteditable","true"),this.toolbarEl?.nextSibling?this.insertBefore(t,this.toolbarEl.nextSibling):this.previewEl?this.insertBefore(t,this.previewEl):this.appendChild(t),this.editorEl=t}this.editorEl.innerHTML.trim()||(this.editorEl.innerHTML="<p><br></p>"),this.ensureAtLeastOneParagraph()}wireEditor(){this.editorEl.addEventListener("input",(()=>{this.ensureAtLeastOneParagraph(),this.updateContent()})),this.editorEl.addEventListener("mouseup",(()=>this.saveSelection())),this.editorEl.addEventListener("keyup",(()=>this.saveSelection())),this.editorEl.addEventListener("keydown",this.onEditorKeydown)}wireAuthoredToolbar(t){this.buttonMap.clear(),this.headingSelect=null,this.fontSelect=null,this.colorInput=null,Array.from(t.children).forEach((t=>{const i=t.tagName.toLowerCase();if("nile-rte-select"!==i||"align"!==t.getAttribute("type")){if("nile-rte-link"===i)return t.editorEl=this.editorEl,void t.addEventListener("link-changed",(()=>{this.updateContent(),this.updateToolbarState()}));if("nile-rte-toolbar-item"===i){let i=t.querySelector(":scope > nile-button");const s=t.getAttribute("name")||"",e=t.getAttribute("label")||s,n=t.getAttribute("icon"),r=t.innerHTML.trim().length>0;if(i||(i=document.createElement("nile-button"),i.variant="tertiary",i.size="small"),n)i.innerHTML=`<nile-icon name="${n}" aria-label="${e}"></nile-icon>`,t.innerHTML="";else if(r)i.innerHTML=t.innerHTML,t.innerHTML="";else{const n=b[s];n?i.innerHTML=`<nile-icon name="${n}" size="20" color="black" aria-label="${e}"></nile-icon>`:i.textContent=e||s,t.innerHTML=""}i.isConnected||t.appendChild(i),i.setAttribute("aria-label",e),i.addEventListener("mousedown",(t=>t.preventDefault())),i.addEventListener("click",(()=>this.onToolbarCommand(s)));const o=this.buttonMap.get(s)??[];return o.push(i),void this.buttonMap.set(s,o)}if("nile-rte-select"!==i)"nile-rte-color"!==i||t.addEventListener("change",(t=>{this.focusAndRestore();const{mode:i,value:s}=t.detail;"backColor"===i?l(this.editorEl,s):c(this.editorEl,s),this.updateContent(),this.updateToolbarState()}));else{const i=t.getAttribute("type")||"";t.addEventListener("change",(t=>{this.focusAndRestore();const s=t.detail;"heading"===i?o(this.editorEl,s):"font"===i&&h(this.editorEl,s),this.updateContent(),this.updateToolbarState()}))}}else t.addEventListener("change",(t=>{this.focusAndRestore();const i=t.detail;r(this.editorEl,i),this.updateContent(),this.updateToolbarState()}))}))}saveSelection(){const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}insertList(t){if(this.restoreSelection(),!this.lastRange)return;const i=document.createElement(t),s=this.lastRange.extractContents(),e=document.createElement("div");e.appendChild(s),Array.from(e.childNodes).forEach((t=>{if(t.nodeType===Node.TEXT_NODE&&!t.textContent?.trim())return;const s=document.createElement("li");s.appendChild(t),i.appendChild(s)})),this.lastRange.insertNode(i),this.afterListEdit(i)}afterListEdit(t){const i=document.createRange();i.setStartAfter(t),i.collapse(!0);const s=window.getSelection();s?.removeAllRanges(),s?.addRange(i),this.saveSelection(),this.updateContent(),this.updateToolbarState()}ensureAtLeastOneParagraph(){const t=this.editorEl;if(!t)return;const i=""===(t.textContent??"").replace(/\u200B/g,"").trim();if(0===t.childNodes.length||i)return void(t.innerHTML="<p><br></p>");if(!t.querySelector("p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre")){const i=document.createElement("p");for(;t.firstChild;)i.appendChild(t.firstChild);return i.hasChildNodes()||i.appendChild(document.createElement("br")),void t.appendChild(i)}t.querySelectorAll("p").forEach((t=>{""===(t.textContent??"").replace(/\u200B/g,"")&&(t.innerHTML.toLowerCase().includes("<br")||(t.innerHTML="<br>"))}))}onToolbarCommand(t){switch(this.focusAndRestore(),t){case"bold":a(this.editorEl,"strong");break;case"italic":a(this.editorEl,"em");break;case"underline":a(this.editorEl,"u");break;case"left":r(this.editorEl,"left");break;case"center":r(this.editorEl,"center");break;case"right":r(this.editorEl,"right");break;case"justify":r(this.editorEl,"justify");break;case"ul":this.insertList("ul");break;case"ol":this.insertList("ol");break;case"link":break;case"clear":const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=[];for(;t.nextNode();){const s=t.currentNode;s.removeAttribute("style"),["B","STRONG","I","EM","U","SPAN","FONT"].includes(s.tagName)&&i.push(s)}for(const t of i){for(;t.firstChild;)t.parentNode?.insertBefore(t.firstChild,t);t.remove()}this.ensureAtLeastOneParagraph()}this.updateContent(),this.updateToolbarState()}setBtnActive(t,i){const s=this.buttonMap.get(t);if(s)for(const t of s)t.toggleAttribute("data-active",!!i)}updateToolbarState(){if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);if(!this.editorEl.contains(i.commonAncestorContainer))return;const s=u(i.startContainer)||this.editorEl,e=getComputedStyle(s),n=f(i.startContainer,this.editorEl)||this.editorEl,r=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("strong"===i||"b"===i)return!0;const s=getComputedStyle(t).fontWeight;if(parseInt(s,10)>=600)return!0}t=t.parentNode}return!1})(),o=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("em"===i||"i"===i)return!0;if("italic"===getComputedStyle(t).fontStyle)return!0}t=t.parentNode}return!1})(),h=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=getComputedStyle(t).textDecorationLine;if(i&&i.includes("underline"))return!0;if("u"===t.tagName.toLowerCase())return!0}t=t.parentNode}return!1})(),l=!!s.closest("a"),c=n.style.textAlign||getComputedStyle(n).textAlign||"start",a="start"===c?"left":c,m=!!s.closest("li")&&s.closest("ul,ol")?.tagName.toLowerCase()||"";if(this.setBtnActive("bold",r),this.setBtnActive("italic",o),this.setBtnActive("underline",h),this.setBtnActive("link",l),this.setBtnActive("left","left"===a&&!["center","right","justify"].includes(a)),this.setBtnActive("center","center"===a),this.setBtnActive("right","right"===a),this.setBtnActive("justify","justify"===a),this.setBtnActive("ul","ul"===m),this.setBtnActive("ol","ol"===m),this.headingSelect){const t=n.tagName.toLowerCase(),i=["h1","h2","h3"].includes(t)?t:"p";this.headingSelect.value!==i&&(this.headingSelect.value=i)}if(this.fontSelect){const t=(e.fontFamily||"").replace(/["']/g,"").split(",")[0].trim().toLowerCase();if(t)for(const i of Array.from(this.fontSelect.options))if(i.value.toLowerCase()===t){this.fontSelect.value=i.value;break}}if(this.colorInput){const t=d(e.color);t&&this.colorInput.value.toLowerCase()!==t.toLowerCase()&&(this.colorInput.value=t),this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=this.colorInput.value)}if(this.bgColorInput){const t=getComputedStyle(s).backgroundColor;if(t&&!/transparent|rgba\(\s*0\s*,\s*0\s*,\s*0\s*,\s*0\s*\)/i.test(t)){const i=d(t);i&&this.bgColorInput.value.toLowerCase()!==i.toLowerCase()&&(this.bgColorInput.value=i)}this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=this.bgColorInput.value)}}syncPreview(){this.updateContent()}updateContent(){if(!this.editorEl)return;this.ensureAtLeastOneParagraph();const t=this.editorEl.cloneNode(!0),i=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),s=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT),e=["font-weight","font-style","text-decoration","color","background-color","font-size","font-family","text-align","line-height","letter-spacing","white-space","vertical-align"];for(;i.nextNode()&&s.nextNode();){const t=i.currentNode,n=s.currentNode,r=window.getComputedStyle(t),o=e.map((t=>`${t}:${r.getPropertyValue(t)}`)).join(";");o.trim()&&n.setAttribute("style",o)}this.content=t.innerHTML,this.previewEl&&(this.previewEl.innerHTML=this.content),this.dispatchEvent(new CustomEvent("content-changed",{detail:{content:this.content},bubbles:!0,composed:!0}))}};t([s({type:String})],p.prototype,"value",void 0),t([s({attribute:"mentions",converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const e=i[t];Array.isArray(e)&&(s[t]=e.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)).map((t=>({key:t.key,label:t.label}))))}return s}catch{return{}}},toAttribute:t=>JSON.stringify(t)}})],p.prototype,"mentions",void 0),t([e()],p.prototype,"content",void 0),p=t([n("nile-rich-text-editor")],p);export{p as N};
|
@@ -1,2 +1,2 @@
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js"],function(_export,_context){"use strict";var t,r,o,e,i;function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){t=_tslib.__decorate;},function(_lit){r=_lit.LitElement;},function(_litDecoratorsJs){o=_litDecoratorsJs.property;e=_litDecoratorsJs.customElement;}],execute:function execute(){i=/*#__PURE__*/function(_r){function i(){var _this;_classCallCheck(this,i);_this=_callSuper(this,i,arguments),_this.type="foreColor",_this.label="Text Color",_this.value="#000000";return _this;}_inherits(i,_r);return _createClass(i,[{key:"createRenderRoot",value:function createRenderRoot(){return this;}},{key:"shouldUpdate",value:function shouldUpdate(){return!1;}}]);}(r);t([o({type:String})],i.prototype,"type",void 0),t([o({type:String})],i.prototype,"label",void 0),t([o({type:String})],i.prototype,"value",void 0),i=t([e("nile-rte-color")],i);}};});
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js"],function(_export,_context){"use strict";var t,s,n,i,e,o,_templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,_templateObject6,_templateObject7,a;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread();}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r);}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r);}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _superPropGet(t,o,e,r){var p=_get(_getPrototypeOf(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var p=_superPropBase(e,t);if(p){var n=Object.getOwnPropertyDescriptor(p,t);return n.get?n.get.call(arguments.length<3?e:r):n.value;}},_get.apply(null,arguments);}function _superPropBase(t,o){for(;!{}.hasOwnProperty.call(t,o)&&null!==(t=_getPrototypeOf(t)););return t;}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){t=_tslib.__decorate;},function(_lit){s=_lit.LitElement;n=_lit.html;},function(_litDecoratorsJs){i=_litDecoratorsJs.property;e=_litDecoratorsJs.state;o=_litDecoratorsJs.customElement;}],execute:function execute(){a=/*#__PURE__*/function(_s){function a(){var _this;_classCallCheck(this,a);_this=_callSuper(this,a,arguments),_this.mode="foreColor",_this.label="Text Color",_this.value="#000000",_this.palette=["#000000","#444444","#666666","#999999","#cccccc","#eeeeee","#ffffff","#d32f2f","#f44336","#ff9800","#ffeb3b","#4caf50","#2196f3","#3f51b5","#9c27b0","#03a9f4","#00bcd4","#009688","#8bc34a","#cddc39","#ffc107","#ff5722"],_this.recentColors=[],_this.pickCustom=function(){return _this.inputEl.click();};return _this;}_inherits(a,_s);return _createClass(a,[{key:"createRenderRoot",value:function createRenderRoot(){return this;}},{key:"connectedCallback",value:function connectedCallback(){var _this2=this;_superPropGet(a,"connectedCallback",this,3)([]),this.injectCss("\n nile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\n }\n\n .glyph-stack { display:grid; align-items:center; justify-items:center; line-height:1; }\n .glyph { font-size:14px; margin-bottom:2px; }\n .underline { width:18px; height:3px; border-radius:2px; }\n .swatch-box { width:18px; height:16px; border-radius:4px; border:1px solid rgba(0,0,0,0.35); }\n\n nile-popover::part(popover) {\n min-width: 225px;\n height: 250px;\n padding: 0px;\n gap: 0px;\n }\n\n .swatch-dropdown {\n height: 245px;\n width: 275px;\n padding: 12px;\n background: #fff;\n border-radius: 8px;\n box-sizing: border-box;\n overflow-y: auto;\n }\n\n .section { margin-bottom: 12px; }\n .title { font-size: 13px; font-weight: 600; margin-bottom: 8px; color:#111; }\n\n .swatches {\n display: grid;\n grid-template-columns: repeat(auto-fill, 24px);\n gap: 8px;\n }\n\n .swatch {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n border: 1px solid rgba(0,0,0,0.25);\n cursor: pointer;\n position: relative;\n background-clip: content-box;\n }\n\n .swatch.add {\n display:flex;\n align-items:center;\n justify-content:center;\n font-weight:bold;\n font-size:16px;\n background:#fff;\n }\n\n .checkmark {\n position: absolute;\n top: 50%; left: 50%;\n transform: translate(-50%,-50%);\n font-size: 13px;\n color: white;\n text-shadow: 0 0 2px rgba(0,0,0,0.6);\n }\n "),this.inputEl=document.createElement("input"),this.inputEl.type="color",this.inputEl.style.position="absolute",this.inputEl.style.opacity="0",this.inputEl.style.pointerEvents="none",this.inputEl.value=this.value,this.appendChild(this.inputEl),this.inputEl.addEventListener("input",function(){return _this2.setColor(_this2.inputEl.value);});}},{key:"injectCss",value:function injectCss(t){if(this.querySelector("style[data-rte-color-style]"))return;var s=document.createElement("style");s.setAttribute("data-rte-color-style","true"),s.textContent=t,this.insertBefore(s,this.firstChild);}},{key:"setColor",value:function setColor(t){this.value=t,this.recentColors=[t].concat(_toConsumableArray(this.recentColors.filter(function(s){return s!==t;}))).slice(0,8),this.dispatchEvent(new CustomEvent("change",{detail:{mode:this.mode,value:t},bubbles:!0,composed:!0}));}},{key:"render",value:function render(){var _this3=this;return n(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n <nile-popover placement=\"bottom-start\" distance=\"6\" .arrow=",">\n <nile-button\n slot=\"anchor\"\n variant=\"ghost\"\n size=\"small\"\n aria-label=","\n class=\"rte-color-trigger\"\n >\n ","\n </nile-button>\n\n <div part=\"base\" class=\"swatch-dropdown\">\n <div class=\"section\">\n <div class=\"title\">Default</div>\n <div class=\"swatches\">\n ","\n </div>\n </div>\n\n ","\n\n <div class=\"section\">\n <div class=\"title\">Custom</div>\n <div class=\"swatches\">\n <button class=\"swatch add\" @click=",">+</button>\n <nile-icon name=\"eyedropper\"></nile-icon>\n </div>\n </div>\n </div>\n </nile-popover>\n "])),!1,this.label,"backColor"===this.mode?n(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["<span class=\"swatch-box\" style=\"background:","\"></span>"])),this.value):n(_templateObject3||(_templateObject3=_taggedTemplateLiteral(["\n <span class=\"glyph-stack\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\" style=\"background:","\"></span>\n </span>\n "])),this.value),this.palette.map(function(t){return n(_templateObject4||(_templateObject4=_taggedTemplateLiteral(["\n <button class=\"swatch\" style=\"background:","\"\n @click=","\n title=",">\n ","\n </button>\n "])),t,function(){return _this3.setColor(t);},t,_this3.value===t?n(_templateObject5||(_templateObject5=_taggedTemplateLiteral(["<span class=\"checkmark\">\u2713</span>"]))):"");}),this.recentColors.length>0?n(_templateObject6||(_templateObject6=_taggedTemplateLiteral(["\n <div class=\"section\">\n <div class=\"title\">Recently Used</div>\n <div class=\"swatches\">\n ","\n </div>\n </div>\n "])),this.recentColors.map(function(t){return n(_templateObject7||(_templateObject7=_taggedTemplateLiteral(["\n <button class=\"swatch\" style=\"background:","\"\n @click=","\n title=","></button>\n "])),t,function(){return _this3.setColor(t);},t);})):"",this.pickCustom);}}]);}(s);t([i({type:String})],a.prototype,"mode",void 0),t([i({type:String})],a.prototype,"label",void 0),t([i({type:String})],a.prototype,"value",void 0),t([i({type:Array})],a.prototype,"palette",void 0),t([e()],a.prototype,"recentColors",void 0),a=t([o("nile-rte-color")],a);}};});
|
2
2
|
//# sourceMappingURL=nile-rte-color.cjs.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-rte-color.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-color.ts"],"sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('nile-rte-color')\nexport class NileRteColor extends LitElement {\n protected createRenderRoot() { return this; }\n protected shouldUpdate() { return false; }\n\n /** 'foreColor' (reserved for future: 'backColor') */\n @property({ type: String }) type = 'foreColor';\n @property({ type: String }) label = 'Text Color';\n @property({ type: String }) value = '#000000';\n}\ndeclare global { interface HTMLElementTagNameMap { 'nile-rte-color': NileRteColor; } }\n"],"names":["NileRteColor","_r","i","this","type","label","value","_this","_inherits","_createClass","key","createRenderRoot","shouldUpdate","LitElement","__decorate","property","String","prototype","customElement"],"mappings":"gyFAIaA,CAAN,uBAAAC,EAAA,EAAA,SAAAC,EAAA,uEAKuBC,KAAAA,CAAIC,IAAAA,CAAG,WACPD,CAAAA,KAAAA,CAAKE,KAAG,CAAA,YAAA,CACRF,KAAAA,CAAKG,KAAAA,CAAG,SACrC,QAAAC,KAAA,EAPWC,SAAA,CAAAN,CAAA,CAAAD,EAAA,SAAAQ,YAAA,CAAAP,CAAA,GAAAQ,GAAA,oBAAAJ,KAAA,UAAAK,gBAAAA,CAAAA,CAAqB,CAAA,MAAOR,KAAO,EACnC,GAAAO,GAAA,gBAAAJ,KAAA,UAAAM,YAAAA,CAAAA,CAAAA,CAAiB,OAAO,CAAQ,EAAA,MAFVC,CAA3B,EAKuBC,CAAA,CAAA,CAA3BC,CAAS,CAAA,CAAEX,IAAMY,CAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAA6BhB,EAAAiB,SAAA,CAAA,MAAA,CAAA,IAAA,EACnBH,CAAAA,CAAAA,CAAAA,CAAA,CAA3BC,CAAAA,CAAS,CAAEX,IAAAA,CAAMY,UAA+BhB,CAAAiB,CAAAA,SAAAA,CAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CACrBH,CAAA,CAAA,CAA3BC,CAAS,CAAA,CAAEX,KAAMY,MAA4BhB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAiB,SAAA,CAAA,OAAA,CAAA,IAAA,EAPnCjB,CAAAA,CAAAA,CAAAA,CAAYc,CAAA,CAAA,CADxBI,EAAc,gBACFlB,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA"}
|
1
|
+
{"version":3,"file":"nile-rte-color.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-color.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n@customElement('nile-rte-color')\nexport class NileRteColor extends LitElement {\n protected createRenderRoot() { return this; }\n\n /** Whether this is text color or background color */\n @property({ type: String }) mode: 'foreColor' | 'backColor' = 'foreColor';\n @property({ type: String }) label = 'Text Color';\n @property({ type: String }) value = '#000000';\n\n /** Default palette, user can override via property or attribute */\n @property({ type: Array })\n palette: string[] = [\n '#000000','#444444','#666666','#999999','#cccccc','#eeeeee','#ffffff',\n '#d32f2f','#f44336','#ff9800','#ffeb3b','#4caf50','#2196f3','#3f51b5','#9c27b0',\n '#03a9f4','#00bcd4','#009688','#8bc34a','#cddc39','#ffc107','#ff5722'\n ];\n\n @state() private recentColors: string[] = [];\n private inputEl!: HTMLInputElement;\n\n connectedCallback() {\n super.connectedCallback();\n\n // Inject styles once\n this.injectCss(`\n nile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\n }\n\n .glyph-stack { display:grid; align-items:center; justify-items:center; line-height:1; }\n .glyph { font-size:14px; margin-bottom:2px; }\n .underline { width:18px; height:3px; border-radius:2px; }\n .swatch-box { width:18px; height:16px; border-radius:4px; border:1px solid rgba(0,0,0,0.35); }\n\n nile-popover::part(popover) {\n min-width: 225px;\n height: 250px;\n padding: 0px;\n gap: 0px;\n }\n\n .swatch-dropdown {\n height: 245px;\n width: 275px;\n padding: 12px;\n background: #fff;\n border-radius: 8px;\n box-sizing: border-box;\n overflow-y: auto;\n }\n\n .section { margin-bottom: 12px; }\n .title { font-size: 13px; font-weight: 600; margin-bottom: 8px; color:#111; }\n\n .swatches {\n display: grid;\n grid-template-columns: repeat(auto-fill, 24px);\n gap: 8px;\n }\n\n .swatch {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n border: 1px solid rgba(0,0,0,0.25);\n cursor: pointer;\n position: relative;\n background-clip: content-box;\n }\n\n .swatch.add {\n display:flex;\n align-items:center;\n justify-content:center;\n font-weight:bold;\n font-size:16px;\n background:#fff;\n }\n\n .checkmark {\n position: absolute;\n top: 50%; left: 50%;\n transform: translate(-50%,-50%);\n font-size: 13px;\n color: white;\n text-shadow: 0 0 2px rgba(0,0,0,0.6);\n }\n `);\n\n // hidden native color input\n this.inputEl = document.createElement('input');\n this.inputEl.type = 'color';\n this.inputEl.style.position = 'absolute';\n this.inputEl.style.opacity = '0';\n this.inputEl.style.pointerEvents = 'none';\n this.inputEl.value = this.value;\n this.appendChild(this.inputEl);\n\n this.inputEl.addEventListener('input', () => this.setColor(this.inputEl.value));\n }\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-color-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-color-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n private setColor(color: string) {\n this.value = color;\n this.recentColors = [color, ...this.recentColors.filter(c => c !== color)].slice(0, 8);\n\n this.dispatchEvent(new CustomEvent('change', {\n detail: { mode: this.mode, value: color },\n bubbles: true,\n composed: true\n }));\n }\n\n private pickCustom = () => this.inputEl.click();\n\n render() {\n return html`\n <nile-popover placement=\"bottom-start\" distance=\"6\" .arrow=${false}>\n <nile-button\n slot=\"anchor\"\n variant=\"ghost\"\n size=\"small\"\n aria-label=${this.label}\n class=\"rte-color-trigger\"\n >\n ${this.mode === 'backColor'\n ? html`<span class=\"swatch-box\" style=\"background:${this.value}\"></span>`\n : html`\n <span class=\"glyph-stack\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\" style=\"background:${this.value}\"></span>\n </span>\n `}\n </nile-button>\n\n <div part=\"base\" class=\"swatch-dropdown\">\n <div class=\"section\">\n <div class=\"title\">Default</div>\n <div class=\"swatches\">\n ${this.palette.map(c => html`\n <button class=\"swatch\" style=\"background:${c}\"\n @click=${() => this.setColor(c)}\n title=${c}>\n ${this.value === c ? html`<span class=\"checkmark\">✓</span>` : ''}\n </button>\n `)}\n </div>\n </div>\n\n ${this.recentColors.length > 0 ? html`\n <div class=\"section\">\n <div class=\"title\">Recently Used</div>\n <div class=\"swatches\">\n ${this.recentColors.map(c => html`\n <button class=\"swatch\" style=\"background:${c}\"\n @click=${() => this.setColor(c)}\n title=${c}></button>\n `)}\n </div>\n </div>\n ` : ''}\n\n <div class=\"section\">\n <div class=\"title\">Custom</div>\n <div class=\"swatches\">\n <button class=\"swatch add\" @click=${this.pickCustom}>+</button>\n <nile-icon name=\"eyedropper\"></nile-icon>\n </div>\n </div>\n </div>\n </nile-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-color': NileRteColor;\n }\n}\n"],"names":["NileRteColor","a","this","mode","label","value","palette","recentColors","pickCustom","inputEl","click","_this","_inherits","_s","_createClass","key","createRenderRoot","connectedCallback","super","injectCss","document","createElement","type","style","position","opacity","pointerEvents","appendChild","addEventListener","setColor","cssText","querySelector","setAttribute","textContent","insertBefore","firstChild","color","filter","c","slice","dispatchEvent","CustomEvent","detail","bubbles","composed","render","html","_templateObject","_taggedTemplateLiteral","_templateObject2","_templateObject3","map","_templateObject4","_templateObject5","length","_templateObject6","_templateObject7","__decorate","LitElement","property","String","prototype","Array","state","customElement"],"mappings":"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"}
|
@@ -1 +1,54 @@
|
|
1
|
-
import{__decorate as t}from"tslib";import{LitElement as
|
1
|
+
import{__decorate as t}from"tslib";import{LitElement as s,html as n}from"lit";import{property as i,state as e,customElement as o}from"lit/decorators.js";let a=class extends s{constructor(){super(...arguments),this.mode="foreColor",this.label="Text Color",this.value="#000000",this.palette=["#000000","#444444","#666666","#999999","#cccccc","#eeeeee","#ffffff","#d32f2f","#f44336","#ff9800","#ffeb3b","#4caf50","#2196f3","#3f51b5","#9c27b0","#03a9f4","#00bcd4","#009688","#8bc34a","#cddc39","#ffc107","#ff5722"],this.recentColors=[],this.pickCustom=()=>this.inputEl.click()}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.injectCss("\n nile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\n }\n\n .glyph-stack { display:grid; align-items:center; justify-items:center; line-height:1; }\n .glyph { font-size:14px; margin-bottom:2px; }\n .underline { width:18px; height:3px; border-radius:2px; }\n .swatch-box { width:18px; height:16px; border-radius:4px; border:1px solid rgba(0,0,0,0.35); }\n\n nile-popover::part(popover) {\n min-width: 225px;\n height: 250px;\n padding: 0px;\n gap: 0px;\n }\n\n .swatch-dropdown {\n height: 245px;\n width: 275px;\n padding: 12px;\n background: #fff;\n border-radius: 8px;\n box-sizing: border-box;\n overflow-y: auto;\n }\n\n .section { margin-bottom: 12px; }\n .title { font-size: 13px; font-weight: 600; margin-bottom: 8px; color:#111; }\n\n .swatches {\n display: grid;\n grid-template-columns: repeat(auto-fill, 24px);\n gap: 8px;\n }\n\n .swatch {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n border: 1px solid rgba(0,0,0,0.25);\n cursor: pointer;\n position: relative;\n background-clip: content-box;\n }\n\n .swatch.add {\n display:flex;\n align-items:center;\n justify-content:center;\n font-weight:bold;\n font-size:16px;\n background:#fff;\n }\n\n .checkmark {\n position: absolute;\n top: 50%; left: 50%;\n transform: translate(-50%,-50%);\n font-size: 13px;\n color: white;\n text-shadow: 0 0 2px rgba(0,0,0,0.6);\n }\n "),this.inputEl=document.createElement("input"),this.inputEl.type="color",this.inputEl.style.position="absolute",this.inputEl.style.opacity="0",this.inputEl.style.pointerEvents="none",this.inputEl.value=this.value,this.appendChild(this.inputEl),this.inputEl.addEventListener("input",(()=>this.setColor(this.inputEl.value)))}injectCss(t){if(this.querySelector("style[data-rte-color-style]"))return;const s=document.createElement("style");s.setAttribute("data-rte-color-style","true"),s.textContent=t,this.insertBefore(s,this.firstChild)}setColor(t){this.value=t,this.recentColors=[t,...this.recentColors.filter((s=>s!==t))].slice(0,8),this.dispatchEvent(new CustomEvent("change",{detail:{mode:this.mode,value:t},bubbles:!0,composed:!0}))}render(){return n`
|
2
|
+
<nile-popover placement="bottom-start" distance="6" .arrow=${!1}>
|
3
|
+
<nile-button
|
4
|
+
slot="anchor"
|
5
|
+
variant="ghost"
|
6
|
+
size="small"
|
7
|
+
aria-label=${this.label}
|
8
|
+
class="rte-color-trigger"
|
9
|
+
>
|
10
|
+
${"backColor"===this.mode?n`<span class="swatch-box" style="background:${this.value}"></span>`:n`
|
11
|
+
<span class="glyph-stack">
|
12
|
+
<span class="glyph">A</span>
|
13
|
+
<span class="underline" style="background:${this.value}"></span>
|
14
|
+
</span>
|
15
|
+
`}
|
16
|
+
</nile-button>
|
17
|
+
|
18
|
+
<div part="base" class="swatch-dropdown">
|
19
|
+
<div class="section">
|
20
|
+
<div class="title">Default</div>
|
21
|
+
<div class="swatches">
|
22
|
+
${this.palette.map((t=>n`
|
23
|
+
<button class="swatch" style="background:${t}"
|
24
|
+
@click=${()=>this.setColor(t)}
|
25
|
+
title=${t}>
|
26
|
+
${this.value===t?n`<span class="checkmark">✓</span>`:""}
|
27
|
+
</button>
|
28
|
+
`))}
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
|
32
|
+
${this.recentColors.length>0?n`
|
33
|
+
<div class="section">
|
34
|
+
<div class="title">Recently Used</div>
|
35
|
+
<div class="swatches">
|
36
|
+
${this.recentColors.map((t=>n`
|
37
|
+
<button class="swatch" style="background:${t}"
|
38
|
+
@click=${()=>this.setColor(t)}
|
39
|
+
title=${t}></button>
|
40
|
+
`))}
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
`:""}
|
44
|
+
|
45
|
+
<div class="section">
|
46
|
+
<div class="title">Custom</div>
|
47
|
+
<div class="swatches">
|
48
|
+
<button class="swatch add" @click=${this.pickCustom}>+</button>
|
49
|
+
<nile-icon name="eyedropper"></nile-icon>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
</div>
|
53
|
+
</nile-popover>
|
54
|
+
`}};t([i({type:String})],a.prototype,"mode",void 0),t([i({type:String})],a.prototype,"label",void 0),t([i({type:String})],a.prototype,"value",void 0),t([i({type:Array})],a.prototype,"palette",void 0),t([e()],a.prototype,"recentColors",void 0),a=t([o("nile-rte-color")],a);
|
@@ -0,0 +1,2 @@
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js"],function(_export,_context){"use strict";var t,n,e,i,r,s,_templateObject,o;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _superPropGet(t,o,e,r){var p=_get(_getPrototypeOf(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var p=_superPropBase(e,t);if(p){var n=Object.getOwnPropertyDescriptor(p,t);return n.get?n.get.call(arguments.length<3?e:r):n.value;}},_get.apply(null,arguments);}function _superPropBase(t,o){for(;!{}.hasOwnProperty.call(t,o)&&null!==(t=_getPrototypeOf(t)););return t;}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){t=_tslib.__decorate;},function(_lit){n=_lit.LitElement;e=_lit.html;},function(_litDecoratorsJs){i=_litDecoratorsJs.property;r=_litDecoratorsJs.state;s=_litDecoratorsJs.customElement;}],execute:function execute(){o=/*#__PURE__*/function(_n){function o(){var _this;_classCallCheck(this,o);_this=_callSuper(this,o,arguments),_this.placeholder="https://",_this.linkValue="",_this.selectionRange=null;return _this;}_inherits(o,_n);return _createClass(o,[{key:"createRenderRoot",value:function createRenderRoot(){return this;}},{key:"connectedCallback",value:function connectedCallback(){_superPropGet(o,"connectedCallback",this,3)([]),this.injectCss("\n nile-rte-link nile-button.rte-link-trigger::part(base) {\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 6px;\n }\n .link-popup {\n display: flex;\n gap: 6px;\n padding: 6px 8px;\n align-items: center;\n background: white;\n }\n .link-input {\n flex: 1;\n padding: 6px 8px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 4px;\n }\n nile-popover.rte-link-popover::part(popover) {\n min-width: 250px;\n height: 44px;\n padding: 0px;\n gap: 0px;\n }\n ");}},{key:"injectCss",value:function injectCss(t){if(this.querySelector("style[data-rte-link-style]"))return;var n=document.createElement("style");n.setAttribute("data-rte-link-style","true"),n.textContent=t,this.insertBefore(n,this.firstChild);}},{key:"onOpen",value:function onOpen(){var _e,_this2=this;if(!this.editorEl)return;var t=document.getSelection();if(!t||0===t.rangeCount)return;this.selectionRange=t.getRangeAt(0).cloneRange();var n=t.anchorNode,e=null;for(;n&&n!==this.editorEl;){if(n instanceof HTMLAnchorElement){e=n;break;}n=n.parentNode;}this.linkValue=((_e=e)===null||_e===void 0?void 0:_e.href)||"",setTimeout(function(){var _this2$querySelector;(_this2$querySelector=_this2.querySelector(".link-input"))===null||_this2$querySelector===void 0||_this2$querySelector.focus();},0);}},{key:"onApply",value:function onApply(){if(!this.editorEl||!this.selectionRange)return;var t=this.linkValue.trim();if(!t)return;var n=document.getSelection();if(!n)return;n.removeAllRanges(),n.addRange(this.selectionRange);var e=this.selectionRange.startContainer,i=null;for(;e&&e!==this.editorEl;){if(e instanceof HTMLAnchorElement){i=e;break;}e=e.parentNode;}if(i)i.href=t;else{var _n2=document.createElement("a");if(_n2.href=t,this.selectionRange.collapsed)_n2.textContent=t,this.selectionRange.insertNode(_n2);else try{this.selectionRange.surroundContents(_n2);}catch(_unused){var _t=this.selectionRange.extractContents();_n2.appendChild(_t),this.selectionRange.insertNode(_n2);}}this.emit(t);var r=this.querySelector("nile-popover");r&&(r.isShow=!1);}},{key:"emit",value:function emit(t){this.dispatchEvent(new CustomEvent("link-changed",{detail:{href:t},bubbles:!0,composed:!0}));}},{key:"render",value:function render(){var _this3=this;return e(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n <nile-popover placement=\"bottom-start\" class=\"rte-link-popover\" distance=\"10\" .arrow=",">\n <nile-button class=\"rte-link-trigger\" slot=\"anchor\" variant=\"tertiary\" size=\"small\" @click=",">\n <nile-icon name=\"link_2\" aria-label=\"Insert/Edit Link\"></nile-icon>\n </nile-button>\n\n <div class=\"link-popup\">\n <input\n class=\"link-input\"\n type=\"text\"\n placeholder=\"Type or paste link here\"\n .value=","\n @input=","\n @keydown=","\n />\n <nile-button @click=",">Apply</nile-button>\n </div>\n </nile-popover>\n "])),!1,function(){return _this3.onOpen();},this.linkValue,function(t){return _this3.linkValue=t.target.value;},function(t){if("Enter"===t.key&&_this3.onApply(),"Escape"===t.key){var _t2=_this3.querySelector("nile-popover");_t2&&(_t2.isShow=!1);}},function(){return _this3.onApply();});}}]);}(n);t([i({attribute:!1})],o.prototype,"editorEl",void 0),t([i({type:String})],o.prototype,"placeholder",void 0),t([r()],o.prototype,"linkValue",void 0),o=t([s("nile-rte-link")],o);}};});
|
2
|
+
//# sourceMappingURL=nile-rte-link.cjs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"nile-rte-link.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-link.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n@customElement('nile-rte-link')\nexport class NileRteLink extends LitElement {\n protected createRenderRoot() { return this; }\n\n @property({ attribute: false }) editorEl!: HTMLElement;\n @property({ type: String }) placeholder = 'https://';\n\n @state() private linkValue = '';\n private selectionRange: Range | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n this.injectCss(`\n nile-rte-link nile-button.rte-link-trigger::part(base) {\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 6px;\n }\n .link-popup {\n display: flex;\n gap: 6px;\n padding: 6px 8px;\n align-items: center;\n background: white;\n }\n .link-input {\n flex: 1;\n padding: 6px 8px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 4px;\n }\n nile-popover.rte-link-popover::part(popover) {\n min-width: 250px;\n height: 44px;\n padding: 0px;\n gap: 0px;\n }\n `);\n }\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-link-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-link-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n private onOpen() {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n\n this.selectionRange = sel.getRangeAt(0).cloneRange();\n\n // Pre-fill with existing href if selection inside <a>\n let n: Node | null = sel.anchorNode;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLAnchorElement) { a = n; break; }\n n = n.parentNode;\n }\n this.linkValue = a?.href || '';\n\n setTimeout(() => {\n this.querySelector<HTMLInputElement>('.link-input')?.focus();\n }, 0);\n }\n\n private onApply() {\n if (!this.editorEl || !this.selectionRange) return;\n const url = this.linkValue.trim();\n if (!url) return;\n\n const sel = document.getSelection();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this.selectionRange);\n\n // Check for existing <a>\n let n: Node | null = this.selectionRange.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLAnchorElement) { a = n; break; }\n n = n.parentNode;\n }\n\n if (a) {\n a.href = url;\n } else {\n const link = document.createElement('a');\n link.href = url;\n if (this.selectionRange.collapsed) {\n link.textContent = url;\n this.selectionRange.insertNode(link);\n } else {\n try {\n this.selectionRange.surroundContents(link);\n } catch {\n const frag = this.selectionRange.extractContents();\n link.appendChild(frag);\n this.selectionRange.insertNode(link);\n }\n }\n }\n\n this.emit(url);\n\n // Close the popover by toggling `open`\n const pop = this.querySelector('nile-popover');\n if (pop) (pop as any).isShow = false;\n }\n\n private emit(href: string) {\n this.dispatchEvent(new CustomEvent('link-changed', {\n detail: { href },\n bubbles: true,\n composed: true\n }));\n }\n\n render() {\n return html`\n <nile-popover placement=\"bottom-start\" class=\"rte-link-popover\" distance=\"10\" .arrow=${false}>\n <nile-button class=\"rte-link-trigger\" slot=\"anchor\" variant=\"tertiary\" size=\"small\" @click=${() => this.onOpen()}>\n <nile-icon name=\"link_2\" aria-label=\"Insert/Edit Link\"></nile-icon>\n </nile-button>\n\n <div class=\"link-popup\">\n <input\n class=\"link-input\"\n type=\"text\"\n placeholder=\"Type or paste link here\"\n .value=${this.linkValue}\n @input=${(e: any) => this.linkValue = e.target.value}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter') this.onApply();\n if (e.key === 'Escape') {\n const pop = this.querySelector('nile-popover');\n if (pop) (pop as any).isShow = false;\n }\n }}\n />\n <nile-button @click=${() => this.onApply()}>Apply</nile-button>\n </div>\n </nile-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-link': NileRteLink;\n }\n}\n"],"names":["NileRteLink","o","constructor","this","placeholder","linkValue","selectionRange","_this","_inherits","_n","_createClass","key","value","createRenderRoot","connectedCallback","super","injectCss","cssText","querySelector","style","document","createElement","setAttribute","textContent","insertBefore","firstChild","onOpen","editorEl","sel","getSelection","rangeCount","getRangeAt","cloneRange","n","anchorNode","a","HTMLAnchorElement","parentNode","href","setTimeout","_this2$querySelector","focus","onApply","url","trim","removeAllRanges","addRange","startContainer","link","collapsed","insertNode","surroundContents","_unused","frag","extractContents","appendChild","emit","pop","isShow","dispatchEvent","CustomEvent","detail","bubbles","composed","render","html","_templateObject","_taggedTemplateLiteral","e","target","LitElement","__decorate","property","attribute","prototype","type","String","state","customElement"],"mappings":"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"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import{__decorate as t}from"tslib";import{LitElement as n,html as e}from"lit";import{property as i,state as r,customElement as s}from"lit/decorators.js";let o=class extends n{constructor(){super(...arguments),this.placeholder="https://",this.linkValue="",this.selectionRange=null}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.injectCss("\n nile-rte-link nile-button.rte-link-trigger::part(base) {\n width: 32px;\n height: 32px;\n padding: 0;\n border: none;\n border-radius: 6px;\n }\n .link-popup {\n display: flex;\n gap: 6px;\n padding: 6px 8px;\n align-items: center;\n background: white;\n }\n .link-input {\n flex: 1;\n padding: 6px 8px;\n font-size: 14px;\n border: 1px solid #ccc;\n border-radius: 4px;\n }\n nile-popover.rte-link-popover::part(popover) {\n min-width: 250px;\n height: 44px;\n padding: 0px;\n gap: 0px;\n }\n ")}injectCss(t){if(this.querySelector("style[data-rte-link-style]"))return;const n=document.createElement("style");n.setAttribute("data-rte-link-style","true"),n.textContent=t,this.insertBefore(n,this.firstChild)}onOpen(){if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;this.selectionRange=t.getRangeAt(0).cloneRange();let n=t.anchorNode,e=null;for(;n&&n!==this.editorEl;){if(n instanceof HTMLAnchorElement){e=n;break}n=n.parentNode}this.linkValue=e?.href||"",setTimeout((()=>{this.querySelector(".link-input")?.focus()}),0)}onApply(){if(!this.editorEl||!this.selectionRange)return;const t=this.linkValue.trim();if(!t)return;const n=document.getSelection();if(!n)return;n.removeAllRanges(),n.addRange(this.selectionRange);let e=this.selectionRange.startContainer,i=null;for(;e&&e!==this.editorEl;){if(e instanceof HTMLAnchorElement){i=e;break}e=e.parentNode}if(i)i.href=t;else{const n=document.createElement("a");if(n.href=t,this.selectionRange.collapsed)n.textContent=t,this.selectionRange.insertNode(n);else try{this.selectionRange.surroundContents(n)}catch{const t=this.selectionRange.extractContents();n.appendChild(t),this.selectionRange.insertNode(n)}}this.emit(t);const r=this.querySelector("nile-popover");r&&(r.isShow=!1)}emit(t){this.dispatchEvent(new CustomEvent("link-changed",{detail:{href:t},bubbles:!0,composed:!0}))}render(){return e`
|
2
|
+
<nile-popover placement="bottom-start" class="rte-link-popover" distance="10" .arrow=${!1}>
|
3
|
+
<nile-button class="rte-link-trigger" slot="anchor" variant="tertiary" size="small" @click=${()=>this.onOpen()}>
|
4
|
+
<nile-icon name="link_2" aria-label="Insert/Edit Link"></nile-icon>
|
5
|
+
</nile-button>
|
6
|
+
|
7
|
+
<div class="link-popup">
|
8
|
+
<input
|
9
|
+
class="link-input"
|
10
|
+
type="text"
|
11
|
+
placeholder="Type or paste link here"
|
12
|
+
.value=${this.linkValue}
|
13
|
+
@input=${t=>this.linkValue=t.target.value}
|
14
|
+
@keydown=${t=>{if("Enter"===t.key&&this.onApply(),"Escape"===t.key){const t=this.querySelector("nile-popover");t&&(t.isShow=!1)}}}
|
15
|
+
/>
|
16
|
+
<nile-button @click=${()=>this.onApply()}>Apply</nile-button>
|
17
|
+
</div>
|
18
|
+
</nile-popover>
|
19
|
+
`}};t([i({attribute:!1})],o.prototype,"editorEl",void 0),t([i({type:String})],o.prototype,"placeholder",void 0),t([r()],o.prototype,"linkValue",void 0),o=t([s("nile-rte-link")],o);
|
@@ -1,2 +1,2 @@
|
|
1
|
-
System.register([],function(_export,_context){"use strict";function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1;}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r;}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return;}finally{if(o)throw n;}}return a;}}function _arrayWithHoles(r){if(Array.isArray(r))return r;}function n(n,t){for(;n&&n!==t;){var _n;if(n instanceof HTMLElement){var _t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===_t||"list-item"===_t)return n;}n=((_n=n)===null||_n===void 0?void 0:_n.parentNode)||null;}return t;}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n;}function o(n){var t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return"#".concat(Number(t[1]).toString(16).padStart(2,"0")).concat(Number(t[2]).toString(16).padStart(2,"0")).concat(Number(t[3]).toString(16).padStart(2,"0"));}function e(n,t,o){var e=document.createElement(t);o&&Object.entries(o).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),n=_ref2[0],t=_ref2[1];return e.setAttribute(n,t);});try{n.surroundContents(e);}catch(_unused){var _t2=n.extractContents();e.appendChild(_t2),n.insertNode(e);}}function c(n,t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var r=c.getRangeAt(0);if(r.collapsed){var _n2=document.createElement(t);o&&Object.entries(o).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),t=_ref4[0],o=_ref4[1];return _n2.setAttribute(t,o);}),_n2.appendChild(document.createTextNode("")),r.insertNode(_n2);var _e=document.createRange();return _e.setStart(_n2.firstChild,1),_e.collapse(!0),c.removeAllRanges(),void c.addRange(_e);}var u=r.startContainer,
|
1
|
+
System.register([],function(_export,_context){"use strict";function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1;}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r;}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return;}finally{if(o)throw n;}}return a;}}function _arrayWithHoles(r){if(Array.isArray(r))return r;}function n(n,t){for(;n&&n!==t;){var _n;if(n instanceof HTMLElement){var _t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===_t||"list-item"===_t)return n;}n=((_n=n)===null||_n===void 0?void 0:_n.parentNode)||null;}return t;}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n;}function o(n){var t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return"#".concat(Number(t[1]).toString(16).padStart(2,"0")).concat(Number(t[2]).toString(16).padStart(2,"0")).concat(Number(t[3]).toString(16).padStart(2,"0"));}function e(n,t,o){var e=document.createElement(t);o&&Object.entries(o).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),n=_ref2[0],t=_ref2[1];return e.setAttribute(n,t);});try{n.surroundContents(e);}catch(_unused){var _t2=n.extractContents();e.appendChild(_t2),n.insertNode(e);}}function c(n,t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var r=c.getRangeAt(0);if(r.collapsed){var _n2=document.createElement(t);o&&Object.entries(o).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),t=_ref4[0],o=_ref4[1];return _n2.setAttribute(t,o);}),_n2.appendChild(document.createTextNode("")),r.insertNode(_n2);var _e=document.createRange();return _e.setStart(_n2.firstChild,1),_e.collapse(!0),c.removeAllRanges(),void c.addRange(_e);}var u=r.startContainer,s=null;for(;u&&u!==n;){if(u instanceof HTMLElement&&u.tagName.toLowerCase()===t){s=u;break;}u=u.parentNode;}s?function(n){var t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n);}}(s):e(r,t,o);}function r(t,o){var e=document.getSelection();if(!e||0===e.rangeCount)return;var c=n(e.getRangeAt(0).startContainer,t);if(!c)return;if(c.tagName.toLowerCase()===o)return;var r=document.createElement(o);for(;c.firstChild;)r.appendChild(c.firstChild);c.replaceWith(r);var u=document.createRange();u.selectNodeContents(r),u.collapse(!0),e.removeAllRanges(),e.addRange(u);}function u(t,o){var e=document.getSelection();if(!e||0===e.rangeCount)return;var c=n(e.getRangeAt(0).startContainer,t);c&&(c.style.textAlign="justify"===o?"justify":o);}function s(n,t){var o=document.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0);if(c.collapsed){var _n3=document.createElement("span");_n3.style.fontFamily=t,_n3.appendChild(document.createTextNode("")),c.insertNode(_n3);var _e2=document.createRange();return _e2.setStart(_n3.firstChild,1),_e2.collapse(!0),o.removeAllRanges(),void o.addRange(_e2);}e(c,"span",{style:"font-family:".concat(t)});}function i(n,t,o){for(;t&&t!==n;){if(t instanceof HTMLSpanElement&&t.hasAttribute(o))return t;t=t.parentNode;}return null;}function f(n,t,o,e){var c=window.getSelection();if(!c||0===c.rangeCount)return;var r=c.getRangeAt(0);if(!n.contains(r.commonAncestorContainer))return;var u=r.cloneRange();if(u.collapsed){var _r=i(n,u.startContainer,e);if(_r)return _r.style[t]=o,void a(n,e,t);var _s=document.createElement("span");_s.setAttribute(e,"1"),_s.style[t]=o,_s.appendChild(document.createTextNode("")),u.insertNode(_s);var _f=document.createRange();return _f.setStart(_s.firstChild,1),_f.collapse(!0),c.removeAllRanges(),c.addRange(_f),void a(n,e,t);}var s=i(n,u.startContainer,e),f=i(n,u.endContainer,e);if(s&&s===f){if(function(n,t){var o=document.createRange();return o.selectNodeContents(t),n.compareBoundaryPoints(Range.START_TO_START,o)<=0&&n.compareBoundaryPoints(Range.END_TO_END,o)>=0;}(u,s))s.style[t]=o;else{var _n4=function(n,t,o,e,c){var r=n.style[e],u=document.createRange();u.setStart(n,0),u.setEnd(t.startContainer,t.startOffset);var s=document.createRange();s.setStart(t.endContainer,t.endOffset),s.setEnd(n,n.childNodes.length);var i=document.createDocumentFragment(),f=function f(n){var t=document.createElement("span");return t.setAttribute(o,"1"),t.style[e]=n,t;};if(d(u)){var _n5=f(r);_n5.appendChild(u.cloneContents()),i.appendChild(_n5);}var a=f(c);if(a.appendChild(t.cloneContents()),i.appendChild(a),d(s)){var _n6=f(r);_n6.appendChild(s.cloneContents()),i.appendChild(_n6);}return n.replaceWith(i),a;}(s,u,e,t,o),_c=window.getSelection(),_r2=document.createRange();_r2.selectNodeContents(_n4),_c!==null&&_c!==void 0&&_c.removeAllRanges(),_c===null||_c===void 0?void 0:_c.addRange(_r2);}return void a(n,e,t);}var m=function(){var n=u.commonAncestorContainer;for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n;}(),l=document.createTreeWalker(m||n,NodeFilter.SHOW_TEXT,{acceptNode:function acceptNode(n){if(!n.nodeValue||!n.nodeValue.trim())return NodeFilter.FILTER_REJECT;var t=document.createRange();t.selectNodeContents(n);return u.compareBoundaryPoints(Range.END_TO_START,t)<0&&u.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT;}}),p=[];var H;for(;H=l.nextNode();)p.push(H);p.forEach(function(c){var r=0,s=c.length;c===u.startContainer&&(r=u.startOffset),c===u.endContainer&&(s=u.endOffset),r>0&&(c=c.splitText(r)),s<c.length&&c.splitText(s);var f=i(n,c,e);if(f)return void(f.style[t]=o);var d=document.createElement("span");d.setAttribute(e,"1"),d.style[t]=o;c.parentElement.replaceChild(d,c),d.appendChild(c);}),a(n,e,t),c.removeAllRanges(),c.addRange(u);}function d(n){if(n.collapsed)return!1;return(n.cloneContents().textContent||"").length>0;}function a(n,t,o){var e=Array.from(n.querySelectorAll("span[".concat(t,"]"))),c=function c(n){return n.style[o];};e.forEach(function(n){Array.from(n.querySelectorAll("span[".concat(t,"]"))).forEach(function(t){if(c(t)===c(n)){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove();}});var o=n.previousSibling;if(o instanceof HTMLSpanElement&&o.hasAttribute(t)&&c(o)===c(n)){for(;n.firstChild;)o.appendChild(n.firstChild);return void n.remove();}var e=n.nextSibling;if(e instanceof HTMLSpanElement&&e.hasAttribute(t)&&c(e)===c(n)){for(;e.firstChild;)n.appendChild(e.firstChild);e.remove();}});}function m(n,t){f(n,"color",t,"data-rte-color");}function l(n,t){f(n,"backgroundColor",t,"data-rte-bg");}_export({a:r,b:s,c:l,d:m,e:n,n:t,r:o,s:u,t:c});return{setters:[],execute:function execute(){}};});
|
2
2
|
//# sourceMappingURL=utils.cjs.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n\n \nfunction enclosingStyledSpan(\n editor: HTMLElement,\n node: Node | null,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n): HTMLSpanElement | null {\n while (node && node !== editor) {\n if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\n\n \nfunction applyInlineStyle(\n editor: HTMLElement,\n cssProp: 'color' | 'backgroundColor',\n value: string,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const r0 = sel.getRangeAt(0);\n if (!editor.contains(r0.commonAncestorContainer)) return;\n\n const range = r0.cloneRange();\n\n \n if (range.collapsed) {\n const enclosing = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n if (enclosing) {\n (enclosing.style as any)[cssProp] = value;\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = value;\n s.appendChild(document.createTextNode('\\u200B')); \n range.insertNode(s);\n\n \n const caret = document.createRange();\n caret.setStart(s.firstChild!, 1);\n caret.collapse(true);\n sel.removeAllRanges(); sel.addRange(caret);\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n const rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);\n if (leftEdge && leftEdge === rightEdge) {\n \n if (rangeCoversWholeNode(range, leftEdge)) {\n (leftEdge.style as any)[cssProp] = value;\n } else {\n \n const mid = splitAndRecolorWithinSpan(\n leftEdge,\n range,\n dataAttr,\n cssProp,\n value\n );\n \n \n const sel = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(mid);\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const commonEl = (() => {\n let n: Node | null = range.commonAncestorContainer;\n while (n && !(n instanceof HTMLElement)) n = n.parentNode;\n return n as HTMLElement | null;\n })();\n\n const walker = document.createTreeWalker(\n commonEl || editor,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: (n) => {\n if (!n.nodeValue || !n.nodeValue.trim()) return NodeFilter.FILTER_REJECT;\n const nodeRange = document.createRange();\n nodeRange.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, nodeRange) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, nodeRange) > 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n }\n );\n\n const toProcess: Text[] = [];\n let t: Node | null;\n while ((t = walker.nextNode())) toProcess.push(t as Text);\n\n toProcess.forEach((text) => {\n \n let start = 0, end = text.length;\n if (text === range.startContainer) start = range.startOffset;\n if (text === range.endContainer) end = range.endOffset;\n if (start > 0) text = text.splitText(start);\n if (end < text.length) text.splitText(end);\n\n // If this slice already sits in a styled span → update it, don’t nest.\n const existing = enclosingStyledSpan(editor, text, dataAttr);\n if (existing) {\n (existing.style as any)[cssProp] = value;\n return;\n }\n\n // Create a new, single-purpose span\n const span = document.createElement('span');\n span.setAttribute(dataAttr, '1');\n (span.style as any)[cssProp] = value;\n const parent = text.parentElement!;\n parent.replaceChild(span, text);\n span.appendChild(text);\n });\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n\n // restore selection\n sel.removeAllRanges(); sel.addRange(range);\n}\n\n // Is the range covering the entire node's contents?\nfunction rangeCoversWholeNode(range: Range, node: Node): boolean {\n const all = document.createRange();\n all.selectNodeContents(node);\n return (\n range.compareBoundaryPoints(Range.START_TO_START, all) <= 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, all) >= 0\n );\n}\n\nfunction hasRangeContent(r: Range): boolean {\n if (r.collapsed) return false;\n const text = r.cloneContents().textContent || '';\n return text.length > 0;\n}\n\n// Split one styled span into [left][middle][right]; recolor only middle\nfunction splitAndRecolorWithinSpan(\n span: HTMLSpanElement,\n range: Range,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor',\n newValue: string\n): HTMLSpanElement {\n const oldValue = (span.style as any)[cssProp];\n\n const left = document.createRange();\n left.setStart(span, 0);\n left.setEnd(range.startContainer, range.startOffset);\n\n const right = document.createRange();\n right.setStart(range.endContainer, range.endOffset);\n right.setEnd(span, span.childNodes.length);\n\n // Build replacement fragment\n const frag = document.createDocumentFragment();\n\n // helper to make a styled clone shell\n const makeShell = (val: string) => {\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = val;\n return s;\n };\n\n if (hasRangeContent(left)) {\n const sLeft = makeShell(oldValue);\n sLeft.appendChild(left.cloneContents());\n frag.appendChild(sLeft);\n }\n\n const mid = makeShell(newValue);\n mid.appendChild(range.cloneContents());\n frag.appendChild(mid);\n\n if (hasRangeContent(right)) {\n const sRight = makeShell(oldValue);\n sRight.appendChild(right.cloneContents());\n frag.appendChild(sRight);\n }\n\n // Replace original span\n span.replaceWith(frag);\n return mid; // return the middle span so caller can restore selection\n}\n\n\nfunction mergeAdjacentStyledSpans(\n root: HTMLElement,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor'\n) {\n const spans = Array.from(root.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n\n const valOf = (el: HTMLElement) => (el.style as any)[cssProp];\n\n spans.forEach((s) => {\n \n const nested = Array.from(s.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n nested.forEach((child) => {\n if (valOf(child) === valOf(s)) {\n while (child.firstChild) s.insertBefore(child.firstChild, child);\n child.remove();\n }\n });\n\n \n const prev = s.previousSibling;\n if (prev instanceof HTMLSpanElement &&\n prev.hasAttribute(dataAttr) &&\n valOf(prev) === valOf(s)) {\n while (s.firstChild) prev.appendChild(s.firstChild);\n s.remove();\n return; // s is gone, next checks not needed\n }\n\n // 3) Merge with next sibling if identical\n const next = s.nextSibling;\n if (next instanceof HTMLSpanElement &&\n next.hasAttribute(dataAttr) &&\n valOf(next) === valOf(s)) {\n while (next.firstChild) s.appendChild(next.firstChild);\n next.remove();\n }\n });\n}\n\n\nexport function setForeColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'color', hex, 'data-rte-color');\n}\nexport function setBackColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');\n}\n\n\n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","enclosingStyledSpan","editor","dataAttr","HTMLSpanElement","hasAttribute","applyInlineStyle","cssProp","value","window","r0","contains","commonAncestorContainer","cloneRange","enclosing","mergeAdjacentStyledSpans","s","caret","leftEdge","rightEdge","endContainer","all","compareBoundaryPoints","Range","START_TO_START","END_TO_END","rangeCoversWholeNode","mid","newValue","oldValue","left","setEnd","startOffset","right","endOffset","childNodes","length","createDocumentFragment","makeShell","val","hasRangeContent","sLeft","cloneContents","sRight","splitAndRecolorWithinSpan","commonEl","walker","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","nodeValue","trim","FILTER_REJECT","nodeRange","END_TO_START","START_TO_END","FILTER_ACCEPT","toProcess","t","nextNode","push","text","start","end","splitText","existing","parentElement","replaceChild","textContent","spans","Array","from","querySelectorAll","valOf","el","child","remove","prev","previousSibling","next","nextSibling","setForeColor","hex","setBackColor","insertOrEditLink","href","_r3","a","HTMLAnchorElement","url","prompt","link","setStartAfter","_unused2"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n\n \nfunction enclosingStyledSpan(\n editor: HTMLElement,\n node: Node | null,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n): HTMLSpanElement | null {\n while (node && node !== editor) {\n if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\n\n \nfunction applyInlineStyle(\n editor: HTMLElement,\n cssProp: 'color' | 'backgroundColor',\n value: string,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const r0 = sel.getRangeAt(0);\n if (!editor.contains(r0.commonAncestorContainer)) return;\n\n const range = r0.cloneRange();\n\n \n if (range.collapsed) {\n const enclosing = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n if (enclosing) {\n (enclosing.style as any)[cssProp] = value;\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = value;\n s.appendChild(document.createTextNode('\\u200B')); \n range.insertNode(s);\n\n \n const caret = document.createRange();\n caret.setStart(s.firstChild!, 1);\n caret.collapse(true);\n sel.removeAllRanges(); sel.addRange(caret);\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n const rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);\n if (leftEdge && leftEdge === rightEdge) {\n \n if (rangeCoversWholeNode(range, leftEdge)) {\n (leftEdge.style as any)[cssProp] = value;\n } else {\n \n const mid = splitAndRecolorWithinSpan(\n leftEdge,\n range,\n dataAttr,\n cssProp,\n value\n );\n \n \n const sel = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(mid);\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const commonEl = (() => {\n let n: Node | null = range.commonAncestorContainer;\n while (n && !(n instanceof HTMLElement)) n = n.parentNode;\n return n as HTMLElement | null;\n })();\n\n const walker = document.createTreeWalker(\n commonEl || editor,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: (n) => {\n if (!n.nodeValue || !n.nodeValue.trim()) return NodeFilter.FILTER_REJECT;\n const nodeRange = document.createRange();\n nodeRange.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, nodeRange) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, nodeRange) > 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n }\n );\n\n const toProcess: Text[] = [];\n let t: Node | null;\n while ((t = walker.nextNode())) toProcess.push(t as Text);\n\n toProcess.forEach((text) => {\n \n let start = 0, end = text.length;\n if (text === range.startContainer) start = range.startOffset;\n if (text === range.endContainer) end = range.endOffset;\n if (start > 0) text = text.splitText(start);\n if (end < text.length) text.splitText(end);\n\n // If this slice already sits in a styled span → update it, don’t nest.\n const existing = enclosingStyledSpan(editor, text, dataAttr);\n if (existing) {\n (existing.style as any)[cssProp] = value;\n return;\n }\n\n // Create a new, single-purpose span\n const span = document.createElement('span');\n span.setAttribute(dataAttr, '1');\n (span.style as any)[cssProp] = value;\n const parent = text.parentElement!;\n parent.replaceChild(span, text);\n span.appendChild(text);\n });\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n\n // restore selection\n sel.removeAllRanges(); sel.addRange(range);\n}\n\n // Is the range covering the entire node's contents?\nfunction rangeCoversWholeNode(range: Range, node: Node): boolean {\n const all = document.createRange();\n all.selectNodeContents(node);\n return (\n range.compareBoundaryPoints(Range.START_TO_START, all) <= 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, all) >= 0\n );\n}\n\nfunction hasRangeContent(r: Range): boolean {\n if (r.collapsed) return false;\n const text = r.cloneContents().textContent || '';\n return text.length > 0;\n}\n\n// Split one styled span into [left][middle][right]; recolor only middle\nfunction splitAndRecolorWithinSpan(\n span: HTMLSpanElement,\n range: Range,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor',\n newValue: string\n): HTMLSpanElement {\n const oldValue = (span.style as any)[cssProp];\n\n const left = document.createRange();\n left.setStart(span, 0);\n left.setEnd(range.startContainer, range.startOffset);\n\n const right = document.createRange();\n right.setStart(range.endContainer, range.endOffset);\n right.setEnd(span, span.childNodes.length);\n\n // Build replacement fragment\n const frag = document.createDocumentFragment();\n\n // helper to make a styled clone shell\n const makeShell = (val: string) => {\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = val;\n return s;\n };\n\n if (hasRangeContent(left)) {\n const sLeft = makeShell(oldValue);\n sLeft.appendChild(left.cloneContents());\n frag.appendChild(sLeft);\n }\n\n const mid = makeShell(newValue);\n mid.appendChild(range.cloneContents());\n frag.appendChild(mid);\n\n if (hasRangeContent(right)) {\n const sRight = makeShell(oldValue);\n sRight.appendChild(right.cloneContents());\n frag.appendChild(sRight);\n }\n\n // Replace original span\n span.replaceWith(frag);\n return mid; // return the middle span so caller can restore selection\n}\n\n\nfunction mergeAdjacentStyledSpans(\n root: HTMLElement,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor'\n) {\n const spans = Array.from(root.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n\n const valOf = (el: HTMLElement) => (el.style as any)[cssProp];\n\n spans.forEach((s) => {\n \n const nested = Array.from(s.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n nested.forEach((child) => {\n if (valOf(child) === valOf(s)) {\n while (child.firstChild) s.insertBefore(child.firstChild, child);\n child.remove();\n }\n });\n\n \n const prev = s.previousSibling;\n if (prev instanceof HTMLSpanElement &&\n prev.hasAttribute(dataAttr) &&\n valOf(prev) === valOf(s)) {\n while (s.firstChild) prev.appendChild(s.firstChild);\n s.remove();\n return; // s is gone, next checks not needed\n }\n\n // 3) Merge with next sibling if identical\n const next = s.nextSibling;\n if (next instanceof HTMLSpanElement &&\n next.hasAttribute(dataAttr) &&\n valOf(next) === valOf(s)) {\n while (next.firstChild) s.appendChild(next.firstChild);\n next.remove();\n }\n });\n}\n\n\nexport function setForeColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'color', hex, 'data-rte-color');\n}\nexport function setBackColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');\n}\n\n\n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","enclosingStyledSpan","editor","dataAttr","HTMLSpanElement","hasAttribute","applyInlineStyle","cssProp","value","window","r0","contains","commonAncestorContainer","cloneRange","enclosing","mergeAdjacentStyledSpans","s","caret","leftEdge","rightEdge","endContainer","all","compareBoundaryPoints","Range","START_TO_START","END_TO_END","rangeCoversWholeNode","mid","newValue","oldValue","left","setEnd","startOffset","right","endOffset","childNodes","length","createDocumentFragment","makeShell","val","hasRangeContent","sLeft","cloneContents","sRight","splitAndRecolorWithinSpan","commonEl","walker","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","nodeValue","trim","FILTER_REJECT","nodeRange","END_TO_START","START_TO_END","FILTER_ACCEPT","toProcess","t","nextNode","push","text","start","end","splitText","existing","parentElement","replaceChild","textContent","spans","Array","from","querySelectorAll","valOf","el","child","remove","prev","previousSibling","next","nextSibling","setForeColor","hex","setBackColor"],"mappings":"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"}
|