@descope/web-components-ui 1.0.300 → 1.0.302

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.
Files changed (66) hide show
  1. package/dist/cjs/index.cjs.js +287 -207
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.esm.js +221 -141
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/umd/1612.js +1 -1
  7. package/dist/umd/1621.js +2 -2
  8. package/dist/umd/3951.js +1 -1
  9. package/dist/umd/4024.js +1 -1
  10. package/dist/umd/4052.js +1 -1
  11. package/dist/umd/4746.js +1 -1
  12. package/dist/umd/4978.js +1 -1
  13. package/dist/umd/5806.js +1 -1
  14. package/dist/umd/6770.js +1 -1
  15. package/dist/umd/7056.js +1 -1
  16. package/dist/umd/7531.js +1 -1
  17. package/dist/umd/7911.js +1 -1
  18. package/dist/umd/9092.js +2 -2
  19. package/dist/umd/9314.js +1 -1
  20. package/dist/umd/9423.js +2 -2
  21. package/dist/umd/9562.js +1 -1
  22. package/dist/umd/9927.js +1 -0
  23. package/dist/umd/DescopeDev.js +1 -1
  24. package/dist/umd/descope-button-index-js.js +1 -1
  25. package/dist/umd/descope-divider-index-js.js +1 -1
  26. package/dist/umd/descope-email-field-index-js.js +1 -1
  27. package/dist/umd/descope-enriched-text-index-js.js +1 -0
  28. package/dist/umd/descope-grid-descope-grid-custom-column-index-js.js +1 -1
  29. package/dist/umd/descope-grid-descope-grid-text-column-index-js.js +1 -1
  30. package/dist/umd/descope-link-index-js.js +1 -1
  31. package/dist/umd/descope-text-index-js.js +1 -0
  32. package/dist/umd/descope-user-attribute-index-js.js +1 -1
  33. package/dist/umd/descope-user-auth-method-index-js.js +1 -1
  34. package/dist/umd/index.js +1 -1
  35. package/dist/umd/mapping-fields-descope-mappings-field-index-js.js +1 -1
  36. package/dist/umd/mapping-fields-descope-saml-group-mappings-index-js.js +1 -1
  37. package/package.json +3 -3
  38. package/src/components/descope-divider/DividerClass.js +1 -1
  39. package/src/components/descope-divider/index.js +1 -1
  40. package/src/components/descope-enriched-text/EnrichedTextClass.js +162 -0
  41. package/src/components/descope-enriched-text/consts.js +74 -0
  42. package/src/components/descope-link/LinkClass.js +1 -1
  43. package/src/components/descope-link/index.js +1 -1
  44. package/src/components/descope-text/TextClass.js +62 -0
  45. package/src/components/descope-user-attribute/UserAttributeClass.js +1 -1
  46. package/src/components/descope-user-attribute/index.js +1 -1
  47. package/src/components/descope-user-auth-method/UserAuthMethodClass.js +1 -1
  48. package/src/components/descope-user-auth-method/index.js +1 -1
  49. package/src/components/mapping-fields/descope-mappings-field/MappingsFieldClass.js +1 -1
  50. package/src/components/mapping-fields/descope-mappings-field/index.js +1 -1
  51. package/src/helpers/componentHelpers.js +2 -2
  52. package/src/index.cjs.js +2 -2
  53. package/src/index.d.ts +2 -2
  54. package/src/index.js +2 -2
  55. package/src/theme/components/enrichedText.js +4 -1
  56. package/src/theme/components/text.js +1 -1
  57. package/dist/umd/4569.js +0 -1
  58. package/dist/umd/text-components-descope-enriched-text-index-js.js +0 -1
  59. package/dist/umd/text-components-descope-text-index-js.js +0 -1
  60. package/src/components/text-components/createBaseTextClass.js +0 -26
  61. package/src/components/text-components/descope-enriched-text/EnrichedTextClass.js +0 -106
  62. package/src/components/text-components/descope-enriched-text/helpers.js +0 -41
  63. package/src/components/text-components/descope-text/TextClass.js +0 -34
  64. package/src/components/text-components/hideWhenEmptyMixin.js +0 -17
  65. /package/src/components/{text-components/descope-enriched-text → descope-enriched-text}/index.js +0 -0
  66. /package/src/components/{text-components/descope-text → descope-text}/index.js +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  var merge = require('lodash.merge');
4
4
  var Color = require('color');
5
- var markdownit = require('markdown-it');
5
+ var remarkable = require('remarkable');
6
6
 
7
7
  const DESCOPE_PREFIX = 'descope';
8
8
  const CSS_SELECTOR_SPECIFIER_MULTIPLY = 3;
@@ -95,13 +95,13 @@ const observeChildren = (ele, callback) => {
95
95
 
96
96
  const observer = new MutationObserver((mutationsList) => {
97
97
  mutationsList.forEach((mutation) => {
98
- if (mutation.type === 'childList') {
98
+ if (mutation.type === 'childList' || mutation.type === 'characterData') {
99
99
  callback(mutation);
100
100
  }
101
101
  });
102
102
  });
103
103
 
104
- observer.observe(ele, { childList: true });
104
+ observer.observe(ele, { childList: true, characterData: true, subtree: true });
105
105
  };
106
106
 
107
107
  const createSyncAttrsCb =
@@ -4417,50 +4417,39 @@ var notpImage = /*#__PURE__*/Object.freeze({
4417
4417
  vars: vars$s
4418
4418
  });
4419
4419
 
4420
- const hideWhenEmptyMixin = (superclass) =>
4421
- class HideWhenEmptyMixinClass extends superclass {
4422
- get hideWhenEmpty() {
4423
- return this.getAttribute('hide-when-empty') === 'true';
4424
- }
4425
-
4426
- init() {
4427
- super.init();
4428
-
4429
- observeChildren(this, () => {
4430
- const hasChildren = !!this.childNodes.length;
4431
- this.style.display = !hasChildren && this.hideWhenEmpty ? 'none' : '';
4432
- });
4433
- }
4434
- };
4435
-
4436
- const createBaseTextClass = (componentName) => {
4437
- class BaseText extends createBaseClass({ componentName, baseSelector: ':host > slot' }) {
4438
- constructor() {
4439
- super();
4420
+ const componentName$A = getComponentName('text');
4440
4421
 
4441
- this.attachShadow({ mode: 'open' }).innerHTML = `
4442
- <style>
4443
- :host {
4444
- display: inline-block;
4445
- }
4446
- :host > slot {
4447
- width: 100%;
4448
- display: inline-block;
4449
- }
4450
- </style>
4451
- <slot part="text-wrapper"></slot>
4452
- `;
4422
+ class RawText extends createBaseClass({ componentName: componentName$A, baseSelector: ':host > slot' }) {
4423
+ constructor() {
4424
+ super();
4453
4425
 
4454
- this.textSlot = this.shadowRoot.querySelector('slot');
4455
- }
4426
+ this.attachShadow({ mode: 'open' }).innerHTML = `
4427
+ <style>
4428
+ :host {
4429
+ display: inline-block;
4430
+ }
4431
+ :host > slot {
4432
+ width: 100%;
4433
+ display: inline-block;
4434
+ }
4435
+ </style>
4436
+ <slot part="text-wrapper"></slot>
4437
+ `;
4456
4438
  }
4457
4439
 
4458
- return BaseText;
4459
- };
4440
+ get hideWhenEmpty() {
4441
+ return this.getAttribute('hide-when-empty') === 'true';
4442
+ }
4460
4443
 
4461
- const componentName$A = getComponentName('text');
4444
+ init() {
4445
+ super.init();
4462
4446
 
4463
- const BaseTextClass = createBaseTextClass(componentName$A);
4447
+ observeChildren(this, () => {
4448
+ const hasChildren = !!this.childNodes.length;
4449
+ this.style.display = !hasChildren && this.hideWhenEmpty ? 'none' : '';
4450
+ });
4451
+ }
4452
+ }
4464
4453
 
4465
4454
  const TextClass = compose(
4466
4455
  createStyleMixin({
@@ -4483,9 +4472,8 @@ const TextClass = compose(
4483
4472
  },
4484
4473
  }),
4485
4474
  draggableMixin,
4486
- componentNameValidationMixin,
4487
- hideWhenEmptyMixin
4488
- )(BaseTextClass);
4475
+ componentNameValidationMixin
4476
+ )(RawText);
4489
4477
 
4490
4478
  const globalRefs$j = getThemeRefs(globals);
4491
4479
  const vars$r = TextClass.cssVarList;
@@ -4577,115 +4565,217 @@ var text$3 = /*#__PURE__*/Object.freeze({
4577
4565
  vars: vars$r
4578
4566
  });
4579
4567
 
4580
- const customEleMap = {
4581
- a: 'descope-link',
4568
+ const ruleSet = {
4569
+ custom: ['image'],
4570
+ core: [
4571
+ 'block',
4572
+ 'inline',
4573
+ 'abbr', // Parse abbreviation definitions, i.e. `*[abbr]: description`
4574
+ 'abbr2', // Enclose abbreviations in <abbr> tags
4575
+ 'references',
4576
+ 'footnote_tail',
4577
+ 'replacements', // Simple typographical replacements
4578
+ 'smartquotes', // Convert straight quotation marks to typographic ones
4579
+ ],
4580
+ inline: [
4581
+ 'text',
4582
+ 'newline', // Proceess '\n'
4583
+ 'backticks', // Parse backticks
4584
+ 'del', // Process ~~deleted text~~
4585
+ 'emphasis', // Process *this* and _that_
4586
+ 'sub', // Process ~subscript~
4587
+ 'sup', // Process ^superscript^
4588
+ 'links', // Process [links](<to> "stuff")
4589
+ 'escape', // Proceess escaped chars and hardbreaks
4590
+ 'ins', // Process ++inserted text++
4591
+ 'mark', // Process ==highlighted text==
4592
+ 'footnote_inline', // Process inline footnotes (^[...])
4593
+ 'footnote_ref', // Process footnote references ([^...])
4594
+ 'autolink', // Process autolinks '<protocol:...>'
4595
+ 'htmltag', // Process html tags
4596
+ 'entity', // Process html entity - &#123;, &#xAF;, &quot;, ...
4597
+ ],
4598
+ block: [
4599
+ 'code', // Code block (4 spaces padded)
4600
+ 'fences', // fences (``` lang, ~~~ lang)
4601
+ 'blockquote', // Block quotes
4602
+ 'list',
4603
+ 'heading', // heading (#, ##, ...)
4604
+ 'paragraph',
4605
+ 'hr', // Horizontal rule
4606
+ 'footnote', // Process footnote reference list
4607
+ 'lheading', // lheading (---, ===)
4608
+ 'htmlblock', // HTML block
4609
+ 'table', // GFM table, non-standard
4610
+ 'deflist', // Definition lists
4611
+ ],
4582
4612
  };
4583
4613
 
4584
- const getTokenTag = (token) => customEleMap[token.tag] || token.tag;
4614
+ const textRuleSet = {
4615
+ core: ['block', 'inline'],
4616
+ inline: [
4617
+ 'text',
4618
+ 'newline', // Proceess '\n'
4619
+ 'backticks', // Parse backticks
4620
+ 'del', // Process ~~deleted text~~
4621
+ 'emphasis', // Process *this* and _that_
4622
+ 'sub', // Process ~subscript~
4623
+ 'sup', // Process ^superscript^
4624
+ 'links', // Process [links](<to> "stuff")
4625
+ 'escape', // Proceess escaped chars and hardbreaks
4626
+ 'ins', // Process ++inserted text++
4627
+ 'footnote_inline', // Process inline footnotes (^[...])
4628
+ 'footnote_ref', // Process footnote references ([^...])
4629
+ 'autolink', // Process autolinks '<protocol:...>'
4630
+ ],
4631
+ block: [
4632
+ 'code', // Code block (4 spaces padded)
4633
+ 'fences', // fences (``` lang, ~~~ lang)
4634
+ 'blockquote', // Block quotes
4635
+ 'list',
4636
+ 'heading', // heading (#, ##, ...)
4637
+ 'paragraph',
4638
+ 'footnote', // Process footnote reference list
4639
+ 'htmlblock', // HTML block
4640
+ ],
4641
+ };
4585
4642
 
4586
- const isImageToken = (token) => token?.children?.[0].type === 'image';
4643
+ const componentName$z = getComponentName('enriched-text');
4587
4644
 
4588
- const enrichTokens = (tokens) =>
4589
- tokens.map((token) => {
4590
- const tag = getTokenTag(token);
4645
+ let EnrichedText$2 = class EnrichedText extends createBaseClass({ componentName: componentName$z, baseSelector: ':host > div' }) {
4646
+ #origImageRenderer;
4591
4647
 
4592
- if (isImageToken(token)) {
4593
- token.children[0].attrs.push(['style', 'width:100%']);
4594
- return {
4595
- ...token,
4596
- tag,
4597
- };
4598
- }
4648
+ constructor() {
4649
+ super();
4599
4650
 
4600
- if (token?.children?.length > 0) {
4601
- return {
4602
- ...token,
4603
- tag,
4604
- children: enrichTokens(token.children),
4605
- };
4606
- }
4651
+ this.attachShadow({ mode: 'open' }).innerHTML = `
4652
+ <style>
4653
+ :host {
4654
+ display: inline-block;
4655
+ }
4656
+ :host > slot {
4657
+ width: 100%;
4658
+ display: inline-block;
4659
+ }
4660
+ *, *:last-child {
4661
+ margin: 0;
4662
+ }
4663
+ h1,
4664
+ h2,
4665
+ h3,
4666
+ h4,
4667
+ h5,
4668
+ h6,
4669
+ p {
4670
+ margin-bottom: 1em;
4671
+ }
4672
+ a {
4673
+ text-decoration: none;
4674
+ cursor: pointer;
4675
+ }
4676
+ a:hover {
4677
+ text-decoration: underline;
4678
+ }
4679
+ blockquote {
4680
+ padding: 0 2em;
4681
+ }
4682
+ </style>
4683
+ <slot part="text-wrapper" style="display:none"></slot>
4684
+ <div class="content"></div>
4685
+ `;
4607
4686
 
4608
- return {
4609
- ...token,
4610
- tag,
4611
- };
4612
- });
4687
+ this.textSlot = this.shadowRoot.querySelector('slot');
4613
4688
 
4614
- const onClipboardCopy = (e) => {
4615
- const selection = document.getSelection().toString();
4616
- const clipdata = e.clipboardData || window.clipboardData;
4617
- clipdata.setData('text/plain', selection);
4618
- clipdata.setData('text/html', selection);
4619
- e.preventDefault();
4620
- };
4689
+ this.#initProcessor();
4621
4690
 
4622
- const componentName$z = getComponentName('enriched-text');
4691
+ observeChildren(this, this.#parseChildren.bind(this));
4692
+ }
4693
+
4694
+ static get observedAttributes() {
4695
+ return ['readonly'];
4696
+ }
4623
4697
 
4624
- const BaseEnrichedTextClass = createBaseTextClass(componentName$z);
4698
+ attributeChangedCallback(attrName, oldValue, newValue) {
4699
+ super.attributeChangedCallback?.(attrName, oldValue, newValue);
4625
4700
 
4626
- const EnrichedTextMixin = (superclass) =>
4627
- class EnrichedTextMixinClass extends superclass {
4628
- static get observedAttributes() {
4629
- return ['disabled-rules', 'line-break', 'readonly'];
4701
+ if (newValue !== oldValue) {
4702
+ if (attrName === 'readonly') {
4703
+ this.onReadOnlyChange(newValue === 'true');
4704
+ }
4630
4705
  }
4706
+ }
4631
4707
 
4632
- get lineBreak() {
4633
- return this.getAttribute('line-break');
4708
+ #disableAllRules() {
4709
+ if (!this.processor) {
4710
+ return;
4634
4711
  }
4635
4712
 
4636
- get disabledRules() {
4637
- return (this.getAttribute('disabled-rules') || '').split(',').filter(Boolean);
4638
- }
4713
+ ruleSet?.core && this.processor.core.ruler.disable(ruleSet.core);
4714
+ ruleSet?.inline && this.processor.inline.ruler.disable(ruleSet.inline);
4715
+ ruleSet?.block && this.processor.block.ruler.disable(ruleSet.block);
4639
4716
 
4640
- init() {
4641
- super.init();
4642
- this.#initProcessor();
4643
- this.textSlot.addEventListener('slotchange', this.#parseChildren.bind(this));
4717
+ this.processor.renderer.rules.image = () => {
4718
+ return '';
4719
+ };
4720
+ }
4721
+
4722
+ #enableCustomRules() {
4723
+ if (!this.processor) {
4724
+ return;
4644
4725
  }
4645
4726
 
4646
- attributeChangedCallback(attrName, oldValue, newValue) {
4647
- super.attributeChangedCallback?.(attrName, oldValue, newValue);
4727
+ const customRuleSet = textRuleSet;
4648
4728
 
4649
- if (attrName === 'disabled-rules') {
4650
- if (newValue !== oldValue) {
4651
- this.#initProcessor(newValue);
4652
- this.#parseChildren();
4653
- }
4654
- }
4729
+ customRuleSet?.core && this.processor?.core.ruler.enable(customRuleSet?.core);
4730
+ customRuleSet?.inline && this.processor?.inline.ruler.enable(customRuleSet?.inline);
4731
+ customRuleSet?.block && this.processor?.block.ruler.enable(customRuleSet?.block);
4655
4732
 
4656
- if (attrName === 'readonly') {
4657
- this.onReadOnlyChange(newValue !== null);
4658
- }
4733
+ if (customRuleSet?.custom?.includes('image')) {
4734
+ this.processor.renderer.rules.image = this.#origImageRenderer;
4659
4735
  }
4736
+ }
4660
4737
 
4661
- #initProcessor() {
4662
- this.processor = markdownit({ breaks: this.lineBreak }).disable(this.disabledRules);
4663
- }
4738
+ #updateProcessorRules() {
4739
+ this.#disableAllRules();
4740
+ this.#enableCustomRules();
4741
+ }
4664
4742
 
4665
- #parseChildren() {
4666
- const node = this.textSlot.assignedNodes({ flatten: true })?.[0];
4743
+ #initProcessor() {
4744
+ this.processor = new remarkable.Remarkable();
4745
+ this.#origImageRenderer = this.processor.renderer.rules.image;
4746
+ this.#updateProcessorRules();
4747
+ }
4667
4748
 
4668
- if (node && node.nodeType === Node.TEXT_NODE) {
4669
- const tokens = this.processor.parse(node.textContent, { references: undefined });
4670
- const result = this.processor.renderer.render(enrichTokens(tokens), {
4671
- breaks: this.lineBreak,
4672
- });
4749
+ get contentNode() {
4750
+ return this.shadowRoot.querySelector('.content');
4751
+ }
4673
4752
 
4674
- if (result !== node.textContent) {
4675
- const span = document.createElement('div');
4676
- span.classList.add('enriched-text');
4677
- // eslint-disable-next-line no-use-before-define
4678
- span.innerHTML = `${getStyleReset()}${result}`;
4679
- span.addEventListener('copy', onClipboardCopy);
4680
- node.parentNode.replaceChild(span, node);
4681
- }
4682
- }
4753
+ #parseChildren() {
4754
+ if (!this.processor) {
4755
+ return;
4683
4756
  }
4684
4757
 
4685
- onReadOnlyChange(val) {
4686
- this.setAttribute('inert', val);
4758
+ let html = this.textContent;
4759
+
4760
+ try {
4761
+ const tokens = this.processor.parse(this.textContent);
4762
+ html = this.processor.renderer.render(tokens, { breaks: true });
4763
+ } catch (e) {
4764
+ // eslint-disable-next-line no-console
4765
+ console.warn('Not parsing invalid markdown token');
4687
4766
  }
4688
- };
4767
+
4768
+ this.contentNode.innerHTML = html;
4769
+ }
4770
+
4771
+ onReadOnlyChange(isReadOnly) {
4772
+ if (isReadOnly) {
4773
+ this.setAttribute('inert', isReadOnly);
4774
+ } else {
4775
+ this.removeAttribute('inert');
4776
+ }
4777
+ }
4778
+ };
4689
4779
 
4690
4780
  const EnrichedTextClass = compose(
4691
4781
  createStyleMixin({
@@ -4697,27 +4787,82 @@ const EnrichedTextClass = compose(
4697
4787
  fontWeight: {},
4698
4788
  textColor: { property: 'color' },
4699
4789
  textLineHeight: { property: 'line-height' },
4700
- marginReset: { selector: '*', property: 'margin' },
4701
4790
  textAlign: {},
4791
+ linkColor: { selector: 'a', property: 'color' },
4702
4792
  },
4703
4793
  }),
4794
+ createStyleMixin({ componentNameOverride: getComponentName('link') }),
4704
4795
  draggableMixin,
4705
- componentNameValidationMixin,
4706
- EnrichedTextMixin,
4707
- hideWhenEmptyMixin
4708
- )(BaseEnrichedTextClass);
4709
-
4710
- function getStyleReset() {
4711
- return `
4712
- <style>
4713
- .enriched-text > * { margin:0 }
4714
- .enriched-text > *:not(:only-child):not(:last-child) {
4715
- margin-bottom: var(${EnrichedTextClass.cssVarList.textLineHeight})
4716
- }
4717
- </style>
4718
- `;
4796
+ componentNameValidationMixin
4797
+ )(EnrichedText$2);
4798
+
4799
+ const componentName$y = getComponentName('link');
4800
+
4801
+ class RawLink extends createBaseClass({ componentName: componentName$y, baseSelector: ':host a' }) {
4802
+ constructor() {
4803
+ super();
4804
+
4805
+ this.attachShadow({ mode: 'open' }).innerHTML = `
4806
+ <style>
4807
+ :host {
4808
+ display: inline-block;
4809
+ }
4810
+ :host a {
4811
+ display: inline;
4812
+ text-decoration: none;
4813
+ }
4814
+ :host a:hover {
4815
+ text-decoration: underline;
4816
+ }
4817
+ </style>
4818
+ <div>
4819
+ <descope-text>
4820
+ <a>
4821
+ <slot></slot>
4822
+ </a>
4823
+ </descope-text>
4824
+ </div>
4825
+ `;
4826
+
4827
+ forwardAttrs(this, this.shadowRoot.querySelector('a'), {
4828
+ includeAttrs: ['href', 'target', 'tooltip'],
4829
+ mapAttrs: {
4830
+ tooltip: 'title',
4831
+ },
4832
+ });
4833
+
4834
+ forwardAttrs(this, this.shadowRoot.querySelector('descope-text'), {
4835
+ includeAttrs: ['mode', 'variant'],
4836
+ });
4837
+ }
4719
4838
  }
4720
4839
 
4840
+ const selectors$2 = {
4841
+ host: { selector: () => ':host' },
4842
+ anchor: {},
4843
+ wrapper: { selector: () => ':host > div' },
4844
+ text: { selector: () => TextClass.componentName },
4845
+ };
4846
+
4847
+ const { anchor, text: text$1, host: host$h, wrapper: wrapper$1 } = selectors$2;
4848
+
4849
+ const LinkClass = compose(
4850
+ createStyleMixin({
4851
+ mappings: {
4852
+ hostWidth: { ...host$h, property: 'width' },
4853
+ hostDirection: { ...text$1, property: 'direction' },
4854
+ textAlign: wrapper$1,
4855
+ textColor: [
4856
+ { ...anchor, property: 'color' },
4857
+ { ...text$1, property: TextClass.cssVarList.textColor },
4858
+ ],
4859
+ cursor: anchor,
4860
+ },
4861
+ }),
4862
+ draggableMixin,
4863
+ componentNameValidationMixin
4864
+ )(RawLink);
4865
+
4721
4866
  const globalRefs$i = getThemeRefs(globals);
4722
4867
  const vars$q = EnrichedTextClass.cssVarList;
4723
4868
 
@@ -4732,6 +4877,8 @@ const EnrichedText = {
4732
4877
  [vars$q.textAlign]: 'left',
4733
4878
  [vars$q.textColor]: globalRefs$i.colors.surface.dark,
4734
4879
 
4880
+ [vars$q.linkColor]: `var(${LinkClass.cssVarList.textColor})`,
4881
+
4735
4882
  mode: {
4736
4883
  primary: {
4737
4884
  [vars$q.textColor]: globalRefs$i.colors.surface.contrast,
@@ -4802,73 +4949,6 @@ var EnrichedText$1 = /*#__PURE__*/Object.freeze({
4802
4949
  vars: vars$q
4803
4950
  });
4804
4951
 
4805
- const componentName$y = getComponentName('link');
4806
-
4807
- class RawLink extends createBaseClass({ componentName: componentName$y, baseSelector: ':host a' }) {
4808
- constructor() {
4809
- super();
4810
-
4811
- this.attachShadow({ mode: 'open' }).innerHTML = `
4812
- <style>
4813
- :host {
4814
- display: inline-block;
4815
- }
4816
- :host a {
4817
- display: inline;
4818
- text-decoration: none;
4819
- }
4820
- :host a:hover {
4821
- text-decoration: underline;
4822
- }
4823
- </style>
4824
- <div>
4825
- <descope-text>
4826
- <a>
4827
- <slot></slot>
4828
- </a>
4829
- </descope-text>
4830
- </div>
4831
- `;
4832
-
4833
- forwardAttrs(this, this.shadowRoot.querySelector('a'), {
4834
- includeAttrs: ['href', 'target', 'tooltip'],
4835
- mapAttrs: {
4836
- tooltip: 'title',
4837
- },
4838
- });
4839
-
4840
- forwardAttrs(this, this.shadowRoot.querySelector('descope-text'), {
4841
- includeAttrs: ['mode', 'variant'],
4842
- });
4843
- }
4844
- }
4845
-
4846
- const selectors$2 = {
4847
- host: { selector: () => ':host' },
4848
- anchor: {},
4849
- wrapper: { selector: () => ':host > div' },
4850
- text: { selector: () => TextClass.componentName },
4851
- };
4852
-
4853
- const { anchor, text: text$1, host: host$h, wrapper: wrapper$1 } = selectors$2;
4854
-
4855
- const LinkClass = compose(
4856
- createStyleMixin({
4857
- mappings: {
4858
- hostWidth: { ...host$h, property: 'width' },
4859
- hostDirection: { ...text$1, property: 'direction' },
4860
- textAlign: wrapper$1,
4861
- textColor: [
4862
- { ...anchor, property: 'color' },
4863
- { ...text$1, property: TextClass.cssVarList.textColor },
4864
- ],
4865
- cursor: anchor,
4866
- },
4867
- }),
4868
- draggableMixin,
4869
- componentNameValidationMixin
4870
- )(RawLink);
4871
-
4872
4952
  const globalRefs$h = getThemeRefs(globals);
4873
4953
  const vars$p = LinkClass.cssVarList;
4874
4954