@descope/web-components-ui 1.0.305 → 1.0.306

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[5158],{212:(e,t,n)=>{n.r(t),n.d(t,{EnrichedTextClass:()=>d});var o=n(4569),r=n(4978),s=n(2061),i=n(4567);const c={components:{core:{rules:["block","inline"]},block:{rules:["blockquote","code","heading","list","paragraph","list"]},inline:{rules:["backticks","strikethrough","link","emphasis","strikethrough","newline","text"]}}};var l=n(3346);const a=(0,i.iY)("enriched-text");class h extends((0,l.s)({componentName:a,baseSelector:":host > div"})){#e;constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <style>\n :host {\n display: inline-block;\n }\n :host > slot {\n width: 100%;\n display: inline-block;\n }\n *, *:last-child {\n margin: 0;\n }\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p {\n margin-bottom: 1em;\n }\n a {\n text-decoration: none;\n cursor: pointer;\n }\n a:hover {\n text-decoration: underline;\n }\n blockquote {\n padding: 0 2em;\n }\n </style>\n <slot part="text-wrapper" style="display:none"></slot>\n <div class="content"></div>\n ',this.textSlot=this.shadowRoot.querySelector("slot"),this.#t(),(0,i.P$)(this,this.#n.bind(this))}static get observedAttributes(){return["readonly"]}attributeChangedCallback(e,t,n){super.attributeChangedCallback?.(e,t,n),n!==t&&"readonly"===e&&this.onReadOnlyChange("true"===n)}#o(){if(!this.processor)return;const e=c;this.processor.configure(e||{}),e?.custom?.includes("image")&&(this.processor.renderer.rules.image=this.#e)}#r(){this.#o()}#t(){this.processor=new o.Z,this.#r()}get contentNode(){return this.shadowRoot.querySelector(".content")}#n(){if(!this.processor)return;let e=this.textContent;try{const t=this.processor.parse(this.textContent,{references:void 0});e=this.processor.renderer.render(t,{breaks:!0})}catch(e){console.warn("Not parsing invalid markdown token")}this.contentNode.innerHTML=e}onReadOnlyChange(e){e?this.contentNode.setAttribute("inert",e):this.contentNode.removeAttribute("inert")}}const d=(0,s.qC)((0,r.yk)({mappings:{hostWidth:{selector:()=>":host",property:"width"},hostDirection:{selector:()=>":host",property:"direction"},fontSize:{},fontFamily:{},fontWeight:{},textColor:{property:"color"},textLineHeight:{property:"line-height"},textAlign:{},linkColor:{selector:"a",property:"color"}}}),(0,r.yk)({componentNameOverride:(0,i.iY)("link")}),r.e4,r.Ae)(h);customElements.define(a,d)}}]);
1
+ "use strict";(self.webpackChunk_descope_web_components_ui=self.webpackChunk_descope_web_components_ui||[]).push([[5158],{212:(e,t,n)=>{n.r(t),n.d(t,{EnrichedTextClass:()=>d});var r=n(4569),o=n(4978),s=n(2061),i=n(4567);const l={components:{core:{rules:["block","inline"]},block:{rules:["blockquote","code","heading","list","paragraph","list"]},inline:{rules:["backticks","strikethrough","link","emphasis","strikethrough","newline","text"]}}};var a=n(3346);const h=(0,i.iY)("enriched-text");class c extends((0,a.s)({componentName:h,baseSelector:":host > div"})){#e;constructor(){super(),this.attachShadow({mode:"open"}).innerHTML='\n <style>\n :host {\n display: inline-block;\n }\n :host > slot {\n width: 100%;\n display: inline-block;\n }\n *, *:last-child {\n margin: 0;\n }\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n p {\n margin-bottom: 1em;\n }\n a {\n text-decoration: none;\n cursor: pointer;\n }\n a:hover {\n text-decoration: underline;\n }\n blockquote {\n padding: 0 2em;\n }\n </style>\n <slot part="text-wrapper" style="display:none"></slot>\n <div class="content"></div>\n ',this.textSlot=this.shadowRoot.querySelector("slot"),this.#t(),(0,i.P$)(this,this.#n.bind(this))}static get observedAttributes(){return["readonly","link-target-blank"]}attributeChangedCallback(e,t,n){super.attributeChangedCallback?.(e,t,n),n!==t&&("readonly"===e&&this.onReadOnlyChange("true"===n),"link-target-blank"===e&&this.#t())}#r(){this.linkTargetBlank?this.processor.renderer.rules.link_open=(e,t,n,r,o)=>(e[t].attrSet("target","_blank"),this.#e(e,t,n,r,o)):this.processor.renderer.rules.link_open=this.#e}#o(){if(!this.processor)return;const e=l;this.processor.configure(e||{})}#s(){this.#o()}#i(){this.#e=this.processor.renderer.rules.link_open||((e,t,n,r,o)=>o.renderToken(e,t,n))}#t(){this.processor=new r.Z,this.#i(),this.#s(),this.#r()}get linkTargetBlank(){return"true"===this.getAttribute("link-target-blank")}get contentNode(){return this.shadowRoot.querySelector(".content")}#n(){if(!this.processor)return;let e=this.textContent;try{const t=this.processor.parse(this.textContent,{references:void 0});e=this.processor.renderer.render(t,{breaks:!0})}catch(e){console.warn("Not parsing invalid markdown token")}this.contentNode.innerHTML=e}onReadOnlyChange(e){e?this.contentNode.setAttribute("inert",e):this.contentNode.removeAttribute("inert")}}const d=(0,s.qC)((0,o.yk)({mappings:{hostWidth:{selector:()=>":host",property:"width"},hostDirection:{selector:()=>":host",property:"direction"},fontSize:{},fontFamily:{},fontWeight:{},textColor:{property:"color"},textLineHeight:{property:"line-height"},textAlign:{},linkColor:{selector:"a",property:"color"}}}),(0,o.yk)({componentNameOverride:(0,i.iY)("link")}),o.e4,o.Ae)(c);customElements.define(h,d)}}]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descope/web-components-ui",
3
- "version": "1.0.305",
3
+ "version": "1.0.306",
4
4
  "description": "",
5
5
  "main": "dist/cjs/index.cjs.js",
6
6
  "module": "dist/index.esm.js",
@@ -8,7 +8,7 @@ import { createBaseClass } from '../../baseClasses/createBaseClass';
8
8
  export const componentName = getComponentName('enriched-text');
9
9
 
10
10
  class EnrichedText extends createBaseClass({ componentName, baseSelector: ':host > div' }) {
11
- #origImageRenderer;
11
+ #origLinkRenderer;
12
12
 
13
13
  constructor() {
14
14
  super();
@@ -57,7 +57,7 @@ class EnrichedText extends createBaseClass({ componentName, baseSelector: ':host
57
57
  }
58
58
 
59
59
  static get observedAttributes() {
60
- return ['readonly'];
60
+ return ['readonly', 'link-target-blank'];
61
61
  }
62
62
 
63
63
  attributeChangedCallback(attrName, oldValue, newValue) {
@@ -67,6 +67,23 @@ class EnrichedText extends createBaseClass({ componentName, baseSelector: ':host
67
67
  if (attrName === 'readonly') {
68
68
  this.onReadOnlyChange(newValue === 'true');
69
69
  }
70
+
71
+ if (attrName === 'link-target-blank') {
72
+ this.#initProcessor();
73
+ }
74
+ }
75
+ }
76
+
77
+ #customizeLinkRenderer() {
78
+ if (this.linkTargetBlank) {
79
+ this.processor.renderer.rules.link_open = (tokens, idx, options, env, self) => {
80
+ // Add a new `target` attribute, or replace the value of the existing one.
81
+ tokens[idx].attrSet('target', '_blank');
82
+ // Pass the token to the default renderer.
83
+ return this.#origLinkRenderer(tokens, idx, options, env, self);
84
+ };
85
+ } else {
86
+ this.processor.renderer.rules.link_open = this.#origLinkRenderer;
70
87
  }
71
88
  }
72
89
 
@@ -77,19 +94,27 @@ class EnrichedText extends createBaseClass({ componentName, baseSelector: ':host
77
94
 
78
95
  const customRuleSet = textRuleSet;
79
96
  this.processor.configure(customRuleSet || {});
80
-
81
- if (customRuleSet?.custom?.includes('image')) {
82
- this.processor.renderer.rules.image = this.#origImageRenderer;
83
- }
84
97
  }
85
98
 
86
99
  #updateProcessorRules() {
87
100
  this.#enableCustomRules();
88
101
  }
89
102
 
103
+ #storeOrigRenderers() {
104
+ const defaultLinkRenderer = (tokens, idx, options, _, self) =>
105
+ self.renderToken(tokens, idx, options);
106
+ this.#origLinkRenderer = this.processor.renderer.rules.link_open || defaultLinkRenderer;
107
+ }
108
+
90
109
  #initProcessor() {
91
110
  this.processor = new MarkdownIt();
111
+ this.#storeOrigRenderers();
92
112
  this.#updateProcessorRules();
113
+ this.#customizeLinkRenderer();
114
+ }
115
+
116
+ get linkTargetBlank() {
117
+ return this.getAttribute('link-target-blank') === 'true';
93
118
  }
94
119
 
95
120
  get contentNode() {