@patternfly/elements 2.0.0 → 2.0.2

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 (80) hide show
  1. package/custom-elements.json +130 -123
  2. package/package.json +2 -2
  3. package/pf-accordion/BaseAccordionHeader.d.ts +2 -2
  4. package/pf-accordion/BaseAccordionHeader.js +29 -23
  5. package/pf-accordion/BaseAccordionHeader.js.map +1 -1
  6. package/pf-accordion/BaseAccordionPanel.css +1 -0
  7. package/pf-accordion/BaseAccordionPanel.js +1 -1
  8. package/pf-accordion/pf-accordion-header.js.map +1 -1
  9. package/pf-accordion/pf-accordion-panel.js.map +1 -1
  10. package/pf-accordion/pf-accordion.d.ts +1 -2
  11. package/pf-accordion/pf-accordion.js +1 -2
  12. package/pf-accordion/pf-accordion.js.map +1 -1
  13. package/pf-avatar/BaseAvatar.js.map +1 -1
  14. package/pf-avatar/pf-avatar.d.ts +1 -2
  15. package/pf-avatar/pf-avatar.js +1 -2
  16. package/pf-avatar/pf-avatar.js.map +1 -1
  17. package/pf-badge/pf-badge.js.map +1 -1
  18. package/pf-button/BaseButton.js.map +1 -1
  19. package/pf-button/pf-button.d.ts +6 -8
  20. package/pf-button/pf-button.js +6 -8
  21. package/pf-button/pf-button.js.map +1 -1
  22. package/pf-card/pf-card.d.ts +5 -2
  23. package/pf-card/pf-card.js +5 -2
  24. package/pf-card/pf-card.js.map +1 -1
  25. package/pf-clipboard-copy/pf-clipboard-copy.css +21 -1
  26. package/pf-clipboard-copy/pf-clipboard-copy.d.ts +2 -1
  27. package/pf-clipboard-copy/pf-clipboard-copy.js +13 -10
  28. package/pf-clipboard-copy/pf-clipboard-copy.js.map +1 -1
  29. package/pf-code-block/pf-code-block.d.ts +2 -0
  30. package/pf-code-block/pf-code-block.js +2 -0
  31. package/pf-code-block/pf-code-block.js.map +1 -1
  32. package/pf-icon/BaseIcon.js.map +1 -1
  33. package/pf-icon/pf-icon.d.ts +2 -1
  34. package/pf-icon/pf-icon.js +2 -1
  35. package/pf-icon/pf-icon.js.map +1 -1
  36. package/pf-jump-links/pf-jump-links-item.d.ts +3 -2
  37. package/pf-jump-links/pf-jump-links-item.js +2 -7
  38. package/pf-jump-links/pf-jump-links-item.js.map +1 -1
  39. package/pf-jump-links/pf-jump-links.d.ts +9 -4
  40. package/pf-jump-links/pf-jump-links.js +20 -17
  41. package/pf-jump-links/pf-jump-links.js.map +1 -1
  42. package/pf-label/pf-label.d.ts +2 -1
  43. package/pf-label/pf-label.js +2 -1
  44. package/pf-label/pf-label.js.map +1 -1
  45. package/pf-modal/pf-modal.d.ts +2 -2
  46. package/pf-modal/pf-modal.js +2 -2
  47. package/pf-modal/pf-modal.js.map +1 -1
  48. package/pf-panel/pf-panel.d.ts +5 -1
  49. package/pf-panel/pf-panel.js +5 -1
  50. package/pf-panel/pf-panel.js.map +1 -1
  51. package/pf-progress-stepper/pf-progress-step.js.map +1 -1
  52. package/pf-progress-stepper/pf-progress-stepper.d.ts +1 -1
  53. package/pf-progress-stepper/pf-progress-stepper.js +1 -1
  54. package/pf-progress-stepper/pf-progress-stepper.js.map +1 -1
  55. package/pf-spinner/BaseSpinner.js.map +1 -1
  56. package/pf-spinner/pf-spinner.d.ts +3 -0
  57. package/pf-spinner/pf-spinner.js +3 -0
  58. package/pf-spinner/pf-spinner.js.map +1 -1
  59. package/pf-switch/pf-switch.d.ts +6 -1
  60. package/pf-switch/pf-switch.js +6 -1
  61. package/pf-switch/pf-switch.js.map +1 -1
  62. package/pf-tabs/BaseTabs.js.map +1 -1
  63. package/pf-tabs/pf-tab.d.ts +1 -1
  64. package/pf-tabs/pf-tab.js +1 -1
  65. package/pf-tabs/pf-tab.js.map +1 -1
  66. package/pf-tabs/pf-tabs.d.ts +1 -3
  67. package/pf-tabs/pf-tabs.js +1 -3
  68. package/pf-tabs/pf-tabs.js.map +1 -1
  69. package/pf-tile/pf-tile.d.ts +5 -1
  70. package/pf-tile/pf-tile.js +5 -1
  71. package/pf-tile/pf-tile.js.map +1 -1
  72. package/pf-timestamp/pf-timestamp.d.ts +3 -0
  73. package/pf-timestamp/pf-timestamp.js +3 -0
  74. package/pf-timestamp/pf-timestamp.js.map +1 -1
  75. package/pf-tooltip/BaseTooltip.js.map +1 -1
  76. package/pf-tooltip/pf-tooltip.d.ts +3 -4
  77. package/pf-tooltip/pf-tooltip.js +3 -4
  78. package/pf-tooltip/pf-tooltip.js.map +1 -1
  79. package/pfe.min.js +113 -113
  80. package/pfe.min.js.map +3 -3
@@ -1,7 +1,10 @@
1
1
  import { BaseCard } from './BaseCard.js';
2
2
  /**
3
- * This element creates a header, body, and footer region in which to place
4
- * content or other components.
3
+ * A card is a square or rectangular container that can contain any kind of content.
4
+ * Cards symbolize units of information, and each one acts as an entry point for
5
+ * users to access more details. For example, in dashboards and catalog views, cards
6
+ * function as a preview of a detailed page. Cards may also be used in data displays
7
+ * like card views, or for positioning content on a page.
5
8
  *
6
9
  * @summary Gives a preview of information in a small layout
7
10
  *
@@ -5,8 +5,11 @@ import { css } from "lit";
5
5
  const style = css `:host{background-color:var(--pf-c-card--BackgroundColor,var(--pf-global--BackgroundColor--100,#fff));box-shadow:var(--pf-c-card--BoxShadow,var(--pf-global--BoxShadow--sm,0 .0625rem .125rem 0 rgba(3,3,3,.12),0 0 .125rem 0 rgba(3,3,3,.06)))}:host([size=compact]){--_pf-c-card__body--FontSize:var(--pf-c-card--size-compact__body--FontSize, var(--pf-global--FontSize--sm, .875rem));--_pf-c-card__footer--FontSize:var(--pf-c-card--size-compact__footer--FontSize, var(--pf-global--spacer--md, 1rem));--_pf-c-card--first-child--PaddingTop:var(--pf-c-card--size-compact--first-child--PaddingTop, var(--pf-global--spacer--lg, 1.5rem));--_pf-c-card--child--PaddingRight:var(--pf-c-card--size-compact--child--PaddingRight, var(--pf-global--spacer--md, 1rem));--_pf-c-card--child--PaddingBottom:var(--pf-c-card--size-compact--child--PaddingBottom, var(--pf-global--spacer--md, 1rem));--_pf-c-card--child--PaddingLeft:var(--pf-c-card--size-compact--child--PaddingLeft, var(--pf-global--spacer--md, 1rem));--_pf-c-card__title--not--last-child--PaddingBottom:var(--pf-c-card--size-compact__title--not--last-child--PaddingBottom, var(--pf-global--spacer--sm, .5rem))}:host([size=large]){--pf-c-card__title--FontSize:var(--pf-c-card--size-large__title--FontSize, var(--pf-global--FontSize--xl, 1.25rem));--_pf-c-card--first-child--PaddingTop:var(--pf-c-card--size-large--first-child--PaddingTop, var(--pf-global--spacer--xl, 2rem));--_pf-c-card--child--PaddingRight:var(--pf-c-card--size-large--child--PaddingRight, var(--pf-global--spacer--xl, 2rem));--_pf-c-card--child--PaddingBottom:var(--pf-c-card--size-large--child--PaddingBottom, var(--pf-global--spacer--xl, 2rem));--_pf-c-card--child--PaddingLeft:var(--pf-c-card--size-large--child--PaddingLeft, var(--pf-global--spacer--xl, 2rem));--_pf-c-card__title--not--last-child--PaddingBottom:var(--pf-c-card--size-large__title--not--last-child--PaddingBottom, var(--pf-global--spacer--lg, 1.5rem))}:host([flat]){--pf-c-card--BoxShadow:none;border:var(--pf-c-card--m-flat--BorderWidth,var(--pf-global--BorderWidth--sm,1px)) solid var(--pf-c-card--m-flat--BorderColor,var(--pf-global--BorderColor--100,#d2d2d2))}:host([plain]){--pf-c-card--BoxShadow:var(--pf-c-card--m-plain--BoxShadow, none);--pf-c-card--BackgroundColor:var(--pf-c-card--m-plain--BackgroundColor, transparent)}:host([rounded]){border-radius:var(--pf-c-card--m-rounded--BorderRadius,var(--pf-global--BorderRadius--sm,3px))}:host([full-height]){height:var(--pf-c-card--m-full-height--Height,100%);--_pf-c-card__body--FullHeight--Flex:1 1 auto}[part=body],[part=footer],[part=header]{padding-inline-start:var(--_pf-c-card--child--PaddingLeft,var(--pf-global--spacer--lg,1.5rem));padding-inline-end:var(--_pf-c-card--child--PaddingRight,var(--pf-global--spacer--lg,1.5rem));padding-block-end:var(--_pf-c-card--child--PaddingBottom,var(--pf-global--spacer--lg,1.5rem))}[part=body]{font-size:var(--_pf-c-card__body--FontSize, var(--pf-global--FontSize--md, 1rem));flex:var(--_pf-c-card__body--FullHeight--Flex,initial)}header{padding-block-start:var(--_pf-c-card--first-child--PaddingTop,var(--pf-global--spacer--lg,1.5rem));padding-block-end:var(--_pf-c-card__title--not--last-child--PaddingBottom,var(--pf-global--spacer--md,1rem))}header ::slotted(*){font-family:var(--pf-c-card__title--FontFamily, var(--pf-global--FontFamily--heading--sans-serif, "RedHatDisplayUpdated", helvetica, arial, sans-serif));font-size:var(--pf-c-card__title--FontSize, var(--pf-global--FontSize--md, 1rem));font-weight:var(--pf-c-card__title--FontWeight,var(--pf-global--FontWeight--bold,700));margin-block:0}[part=footer]{font-size:var(--_pf-c-card__footer--FontSize, var(--pf-global--FontSize--md, 1rem));margin-block-start:auto}`;
6
6
  import { BaseCard } from './BaseCard.js';
7
7
  /**
8
- * This element creates a header, body, and footer region in which to place
9
- * content or other components.
8
+ * A card is a square or rectangular container that can contain any kind of content.
9
+ * Cards symbolize units of information, and each one acts as an entry point for
10
+ * users to access more details. For example, in dashboards and catalog views, cards
11
+ * function as a preview of a detailed page. Cards may also be used in data displays
12
+ * like card views, or for positioning content on a page.
10
13
  *
11
14
  * @summary Gives a preview of information in a small layout
12
15
  *
@@ -1 +1 @@
1
- {"version":3,"file":"pf-card.js","sourceRoot":"","sources":["pf-card.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,QAAQ;IAA7B;;QAWL;;UAEE;QAC0C,YAAO,GAAG,KAAK,CAAC;QAE5D;;SAEC;QACqE,eAAU,GAAG,KAAK,CAAC;QAEzF;;WAEG;QACyC,UAAK,GAAG,KAAK,CAAC;IAC5D,CAAC;;AAxBiB,aAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAQxB;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAA4B;AAKZ;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCAAiB;AAKU;IAArE,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;0CAAoB;AAK7C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qCAAe;AAxB/C,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAyBlB;SAzBY,MAAM","sourcesContent":["import { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport style from './pf-card.css';\nimport { BaseCard } from './BaseCard.js';\n\n/**\n * This element creates a header, body, and footer region in which to place\n * content or other components.\n *\n * @summary Gives a preview of information in a small layout\n *\n * @slot header\n * If this slot is used, we expect a heading level tag (h1, h2, h3, h4, h5, h6).\n * An icon, svg, or use of the icon component are also valid in this region.\n * @slot - Any content that is not designated for the header or footer slot, will go to this slot.\n * @slot footer\n * Use this slot for anything that you want to be stuck to the base of the card.\n *\n * @csspart header - The container for *header* content\n * @csspart body - The container for *body* content\n * @csspart footer - The container for *footer* content\n *\n *\n * @cssproperty {<color>} --pf-c-card--BackgroundColor {@default `#ffffff`}\n * @cssproperty {<color>} --pf-c-card--BoxShadow {@default `0 0.0625rem 0.125rem 0 rgba(3, 3, 3, 0.12), 0 0 0.125rem 0 rgba(3, 3, 3, 0.06)`}\n * @cssproperty {<color>} --pf-c-card--size-compact__body--FontSize {@default `.875rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact__footer--FontSize {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--first-child--PaddingTop {@default `1.5rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingRight {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingBottom {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingLeft {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact__title--not--last-child--PaddingBottom {@default `.5rem`}\n * @cssproperty {<color>} --pf-c-card--size-large__title--FontSize {@default `1.25rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--first-child--PaddingTop {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingRight {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingBottom {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingLeft {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large__title--not--last-child--PaddingBottom {@default `1.5rem`}\n * @cssproperty {<color>} --pf-c-card--m-flat--BorderWidth {@default `1px solid #d2d2d2`}\n * @cssproperty {<color>} --pf-c-card--m-plain--BoxShadow {@default `none`}\n * @cssproperty {<color>} --pf-c-card--m-plain--BackgroundColor {@default `transparent`}\n * @cssproperty {<color>} --pf-c-card--m-rounded--BorderRadius {@default `3px`}\n * @cssproperty {<color>} --pf-c-card--m-full-height--Height {@default `100%`}\n * @cssproperty {<color>} --pf-c-card__title--FontFamily {@default `\"RedHatDisplayUpdated\", helvetica, arial, sans-serif`}\n * @cssproperty {<color>} --pf-c-card__title--FontSize {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card__title--FontWeight {@default `700`}\n */\n@customElement('pf-card')\nexport class PfCard extends BaseCard {\n static readonly styles = [...BaseCard.styles, style];\n\n /**\n * Optionally provide a size for the card and the card contents.\n * The default is set to `undefined` and provides default styles.\n * Compact provides styles which decreases the padding between the sections.\n * Large provides styles which increases the padding between the sections and the font size for the title, header, and footer.\n */\n @property({ reflect: true }) size?: 'compact' | 'large';\n\n /**\n * Optionally apply a border radius for the drop shadow and/or border.\n */\n @property({ type: Boolean, reflect: true }) rounded = false;\n\n /**\n * Optionally allow the card to take up the full height of the parent element.\n */\n @property({ type: Boolean, reflect: true, attribute: 'full-height' }) fullHeight = false;\n\n /**\n * Optionally remove the border on the card container.\n */\n @property({ type: Boolean, reflect: true }) plain = false;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-card': PfCard;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-card.js","sourceRoot":"","sources":["pf-card.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAGtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,QAAQ;IAA7B;;QAWL;;UAEE;QAC0C,YAAO,GAAG,KAAK,CAAC;QAE5D;;SAEC;QACqE,eAAU,GAAG,KAAK,CAAC;QAEzF;;WAEG;QACyC,UAAK,GAAG,KAAK,CAAC;IAC5D,CAAC;;AAxBiB,aAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAQxB;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAA4B;AAKZ;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uCAAiB;AAKU;IAArE,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;0CAAoB;AAK7C;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qCAAe;AAxB/C,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAyBlB;SAzBY,MAAM","sourcesContent":["import { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport style from './pf-card.css';\nimport { BaseCard } from './BaseCard.js';\n\n/**\n * A card is a square or rectangular container that can contain any kind of content.\n * Cards symbolize units of information, and each one acts as an entry point for\n * users to access more details. For example, in dashboards and catalog views, cards\n * function as a preview of a detailed page. Cards may also be used in data displays\n * like card views, or for positioning content on a page.\n *\n * @summary Gives a preview of information in a small layout\n *\n * @slot header\n * If this slot is used, we expect a heading level tag (h1, h2, h3, h4, h5, h6).\n * An icon, svg, or use of the icon component are also valid in this region.\n * @slot - Any content that is not designated for the header or footer slot, will go to this slot.\n * @slot footer\n * Use this slot for anything that you want to be stuck to the base of the card.\n *\n * @csspart header - The container for *header* content\n * @csspart body - The container for *body* content\n * @csspart footer - The container for *footer* content\n *\n *\n * @cssproperty {<color>} --pf-c-card--BackgroundColor {@default `#ffffff`}\n * @cssproperty {<color>} --pf-c-card--BoxShadow {@default `0 0.0625rem 0.125rem 0 rgba(3, 3, 3, 0.12), 0 0 0.125rem 0 rgba(3, 3, 3, 0.06)`}\n * @cssproperty {<color>} --pf-c-card--size-compact__body--FontSize {@default `.875rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact__footer--FontSize {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--first-child--PaddingTop {@default `1.5rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingRight {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingBottom {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact--child--PaddingLeft {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card--size-compact__title--not--last-child--PaddingBottom {@default `.5rem`}\n * @cssproperty {<color>} --pf-c-card--size-large__title--FontSize {@default `1.25rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--first-child--PaddingTop {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingRight {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingBottom {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large--child--PaddingLeft {@default `2rem`}\n * @cssproperty {<color>} --pf-c-card--size-large__title--not--last-child--PaddingBottom {@default `1.5rem`}\n * @cssproperty {<color>} --pf-c-card--m-flat--BorderWidth {@default `1px solid #d2d2d2`}\n * @cssproperty {<color>} --pf-c-card--m-plain--BoxShadow {@default `none`}\n * @cssproperty {<color>} --pf-c-card--m-plain--BackgroundColor {@default `transparent`}\n * @cssproperty {<color>} --pf-c-card--m-rounded--BorderRadius {@default `3px`}\n * @cssproperty {<color>} --pf-c-card--m-full-height--Height {@default `100%`}\n * @cssproperty {<color>} --pf-c-card__title--FontFamily {@default `\"RedHatDisplayUpdated\", helvetica, arial, sans-serif`}\n * @cssproperty {<color>} --pf-c-card__title--FontSize {@default `1rem`}\n * @cssproperty {<color>} --pf-c-card__title--FontWeight {@default `700`}\n */\n@customElement('pf-card')\nexport class PfCard extends BaseCard {\n static readonly styles = [...BaseCard.styles, style];\n\n /**\n * Optionally provide a size for the card and the card contents.\n * The default is set to `undefined` and provides default styles.\n * Compact provides styles which decreases the padding between the sections.\n * Large provides styles which increases the padding between the sections and the font size for the title, header, and footer.\n */\n @property({ reflect: true }) size?: 'compact' | 'large';\n\n /**\n * Optionally apply a border radius for the drop shadow and/or border.\n */\n @property({ type: Boolean, reflect: true }) rounded = false;\n\n /**\n * Optionally allow the card to take up the full height of the parent element.\n */\n @property({ type: Boolean, reflect: true, attribute: 'full-height' }) fullHeight = false;\n\n /**\n * Optionally remove the border on the card container.\n */\n @property({ type: Boolean, reflect: true }) plain = false;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-card': PfCard;\n }\n}\n"]}
@@ -3,15 +3,30 @@
3
3
  flex-direction: column;
4
4
  }
5
5
 
6
- #input-group {
6
+ #input-group,
7
+ #wrapper,
8
+ pf-tooltip,
9
+ pf-button {
7
10
  display: flex;
8
11
  }
9
12
 
13
+ .inline #wrapper {
14
+ display: inline-flex;
15
+ }
16
+
17
+ pf-button {
18
+ height: 100%;
19
+ }
20
+
10
21
  pf-tooltip::part(invoker) {
11
22
  display: flex;
12
23
  height: 100%;
13
24
  }
14
25
 
26
+ :host {
27
+ --pf-icon--size: var(--pf-global--FontSize--md, 1rem);
28
+ }
29
+
15
30
  #input-group > * + * {
16
31
  margin-left: -1px;
17
32
  }
@@ -108,6 +123,11 @@ textarea {
108
123
  white-space: normal;
109
124
  }
110
125
 
126
+ #input-group {
127
+ display: flex;
128
+ height: 100%;
129
+ }
130
+
111
131
  .container:is(.compact, .inline) #input-group {
112
132
  display: contents;
113
133
  }
@@ -3,7 +3,8 @@ import '@patternfly/elements/pf-button/pf-button.js';
3
3
  import '@patternfly/elements/pf-icon/pf-icon.js';
4
4
  import '@patternfly/elements/pf-tooltip/pf-tooltip.js';
5
5
  /**
6
- * Clipboard Copy
6
+ * The clipboard copy component allows users to quickly and easily copy content to their clipboard.
7
+ *
7
8
  * @slot - Place content to copy here, or use the `value` attribute
8
9
  * @slot actions - Place additional action buttons here
9
10
  */
@@ -7,13 +7,14 @@ import { classMap } from 'lit/directives/class-map.js';
7
7
  import { ifDefined } from 'lit/directives/if-defined.js';
8
8
  import { BaseClipboardCopy } from './BaseClipboardCopy.js';
9
9
  import { css } from "lit";
10
- const styles = css `.container{display:flex;flex-direction:column}#input-group{display:flex}pf-tooltip::part(invoker){display:flex;height:100%}#input-group>*+*{margin-left:-1px}input{color:var(--pf-c-form-control--Color,var(--pf-global--Color--100,var(--pf-global--Color--dark-100,#151515)));width:var(--pf-c-form-control--Width);padding:var(--pf-c-form-control--PaddingTop,calc(var(--pf-global--spacer--form-element,.375rem) - var(--pf-global--BorderWidth--sm,1px))) var(--pf-c-form-control--PaddingRight,var(--pf-c-form-control--inset--base,var(--pf-global--spacer--sm,.5rem))) var(--pf-c-form-control--PaddingBottom,calc(var(--pf-global--spacer--form-element,.375rem) - var(--pf-global--BorderWidth--sm,1px))) var(--pf-c-form-control--PaddingLeft,var(--pf-c-form-control--inset--base,var(--pf-global--spacer--sm,.5rem)));font-size:var(--pf-c-form-control--FontSize);line-height:var(--pf-c-form-control--LineHeight);background-color:var(--pf-c-form-control--BackgroundColor);background-repeat:no-repeat;border:var(--pf-c-form-control--BorderWidth,var(--pf-global--BorderWidth--sm,1px)) solid;border-color:var(--pf-c-form-control--BorderTopColor,var(--pf-global--BorderColor--300,#f0f0f0)) var(--pf-c-form-control--BorderRightColor,var(--pf-global--BorderColor--300,#f0f0f0)) var(--pf-c-form-control--BorderBottomColor,var(--pf-global--BorderColor--200,#8a8d90)) var(--pf-c-form-control--BorderLeftColor,var(--pf-global--BorderColor--300,#f0f0f0));border-radius:var(--pf-c-form-control--BorderRadius,0);margin:0;appearance:none;height:var(--pf-c-form-control--Height,calc(var(--pf-c-form-control--FontSize) * var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth) * 2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom)),36px);text-overflow:ellipsis;flex:1 1 auto}input[disabled]{background-color:var(--pf-c-form-control--readonly--BackgroundColor,var(--pf-global--disabled-color--300,#f0f0f0))}textarea{display:flex;flex:1 1 auto;padding:var(--pf-c-clipboard-copy__expandable-content--PaddingTop,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingRight,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingBottom,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingLeft,var(--pf-global--spacer--md,1rem));word-wrap:break-word;background-color:var(--pf-c-clipboard-copy__expandable-content--BackgroundColor,var(--pf-global--BackgroundColor--light-100,#fff));background-clip:padding-box;border:solid var(--pf-c-clipboard-copy__expandable-content--BorderColor,var(--pf-global--BorderColor--100,#d2d2d2));border-width:var(--pf-c-clipboard-copy__expandable-content--BorderTopWidth,0) var(--pf-c-clipboard-copy__expandable-content--BorderRightWidth,var(--pf-global--BorderWidth--sm,1px)) var(--pf-c-clipboard-copy__expandable-content--BorderBottomWidth,var(--pf-global--BorderWidth--sm,1px)) var(--pf-c-clipboard-copy__expandable-content--BorderLeftWidth,var(--pf-global--BorderWidth--sm,1px));box-shadow:var(--pf-c-clipboard-copy__expandable-content--BoxShadow);margin:0;color:inherit;font-family:inherit}.container.code textarea{font-family:var(--pf-global--FontFamily--monospace,\n var(--pf-global--FontFamily--redhat--monospace,\n "RedHatMono",\n "Liberation Mono",\n consolas,\n "SFMono-Regular",\n menlo,\n monaco,\n "Courier New",\n monospace))}.container.expanded #expand-button pf-icon{rotate:90deg}.container.inline{display:inline;background-color:var(--pf-c-clipboard-copy--m-inline--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0));padding-block-start:var(--pf-c-clipboard-copy--m-inline--PaddingTop,0px);padding-block-end:var(--pf-c-clipboard-copy--m-inline--PaddingBottom,0px);padding-inline-start:var(--pf-c-clipboard-copy--m-inline--PaddingLeft,var(--pf-global--spacer--xs,0.25rem));word-break:break-word;white-space:normal}.container:is(.compact,.inline) #input-group{display:contents}.container:is(.compact,.inline) pf-tooltip,.container:is(.compact,.inline) pf-tooltip::part(invoker){display:inline-flex}.container:is(.compact,.inline) #input-group{background-color:var(--pf-c-button--m-plain--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0))}.container.compact.block{display:block;background-color:var(--pf-c-clipboard-copy--m-inline--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0))}.container:is(.compact,.inline) #copy-button,.container:is(.compact,.inline) slot[name=actions]::slotted(*){--pf-c-button--PaddingTop:var(--pf-c-clipboard-copy__actions-item--button--PaddingTop,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingRight:var(--pf-c-clipboard-copy__actions-item--button--PaddingRight,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingBottom:var(--pf-c-clipboard-copy__actions-item--button--PaddingBottom,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingLeft:var(--pf-c-clipboard-copy__actions-item--button--PaddingLeft,\n var(--pf-global--spacer--sm, 0.5rem));margin-block-start:calc(-1 * var(--pf-c-button--PaddingTop));margin-block-end:calc(-1 * var(--pf-c-button--PaddingBottom))}`;
10
+ const styles = css `.container{display:flex;flex-direction:column}#input-group,#wrapper,pf-button,pf-tooltip{display:flex}.inline #wrapper{display:inline-flex}pf-button{height:100%}pf-tooltip::part(invoker){display:flex;height:100%}:host{--pf-icon--size:var(--pf-global--FontSize--md, 1rem)}#input-group>*+*{margin-left:-1px}input{color:var(--pf-c-form-control--Color,var(--pf-global--Color--100,var(--pf-global--Color--dark-100,#151515)));width:var(--pf-c-form-control--Width);padding:var(--pf-c-form-control--PaddingTop,calc(var(--pf-global--spacer--form-element,.375rem) - var(--pf-global--BorderWidth--sm,1px))) var(--pf-c-form-control--PaddingRight,var(--pf-c-form-control--inset--base,var(--pf-global--spacer--sm,.5rem))) var(--pf-c-form-control--PaddingBottom,calc(var(--pf-global--spacer--form-element,.375rem) - var(--pf-global--BorderWidth--sm,1px))) var(--pf-c-form-control--PaddingLeft,var(--pf-c-form-control--inset--base,var(--pf-global--spacer--sm,.5rem)));font-size:var(--pf-c-form-control--FontSize);line-height:var(--pf-c-form-control--LineHeight);background-color:var(--pf-c-form-control--BackgroundColor);background-repeat:no-repeat;border:var(--pf-c-form-control--BorderWidth,var(--pf-global--BorderWidth--sm,1px)) solid;border-color:var(--pf-c-form-control--BorderTopColor,var(--pf-global--BorderColor--300,#f0f0f0)) var(--pf-c-form-control--BorderRightColor,var(--pf-global--BorderColor--300,#f0f0f0)) var(--pf-c-form-control--BorderBottomColor,var(--pf-global--BorderColor--200,#8a8d90)) var(--pf-c-form-control--BorderLeftColor,var(--pf-global--BorderColor--300,#f0f0f0));border-radius:var(--pf-c-form-control--BorderRadius,0);margin:0;appearance:none;height:var(--pf-c-form-control--Height,calc(var(--pf-c-form-control--FontSize) * var(--pf-c-form-control--LineHeight) + var(--pf-c-form-control--BorderWidth) * 2 + var(--pf-c-form-control--PaddingTop) + var(--pf-c-form-control--PaddingBottom)),36px);text-overflow:ellipsis;flex:1 1 auto}input[disabled]{background-color:var(--pf-c-form-control--readonly--BackgroundColor,var(--pf-global--disabled-color--300,#f0f0f0))}textarea{display:flex;flex:1 1 auto;padding:var(--pf-c-clipboard-copy__expandable-content--PaddingTop,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingRight,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingBottom,var(--pf-global--spacer--md,1rem)) var(--pf-c-clipboard-copy__expandable-content--PaddingLeft,var(--pf-global--spacer--md,1rem));word-wrap:break-word;background-color:var(--pf-c-clipboard-copy__expandable-content--BackgroundColor,var(--pf-global--BackgroundColor--light-100,#fff));background-clip:padding-box;border:solid var(--pf-c-clipboard-copy__expandable-content--BorderColor,var(--pf-global--BorderColor--100,#d2d2d2));border-width:var(--pf-c-clipboard-copy__expandable-content--BorderTopWidth,0) var(--pf-c-clipboard-copy__expandable-content--BorderRightWidth,var(--pf-global--BorderWidth--sm,1px)) var(--pf-c-clipboard-copy__expandable-content--BorderBottomWidth,var(--pf-global--BorderWidth--sm,1px)) var(--pf-c-clipboard-copy__expandable-content--BorderLeftWidth,var(--pf-global--BorderWidth--sm,1px));box-shadow:var(--pf-c-clipboard-copy__expandable-content--BoxShadow);margin:0;color:inherit;font-family:inherit}.container.code textarea{font-family:var(--pf-global--FontFamily--monospace,\n var(--pf-global--FontFamily--redhat--monospace,\n "RedHatMono",\n "Liberation Mono",\n consolas,\n "SFMono-Regular",\n menlo,\n monaco,\n "Courier New",\n monospace))}.container.expanded #expand-button pf-icon{rotate:90deg}.container.inline{display:inline;background-color:var(--pf-c-clipboard-copy--m-inline--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0));padding-block-start:var(--pf-c-clipboard-copy--m-inline--PaddingTop,0px);padding-block-end:var(--pf-c-clipboard-copy--m-inline--PaddingBottom,0px);padding-inline-start:var(--pf-c-clipboard-copy--m-inline--PaddingLeft,var(--pf-global--spacer--xs,0.25rem));word-break:break-word;white-space:normal}#input-group{display:flex;height:100%}.container:is(.compact,.inline) #input-group{display:contents}.container:is(.compact,.inline) pf-tooltip,.container:is(.compact,.inline) pf-tooltip::part(invoker){display:inline-flex}.container:is(.compact,.inline) #input-group{background-color:var(--pf-c-button--m-plain--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0))}.container.compact.block{display:block;background-color:var(--pf-c-clipboard-copy--m-inline--BackgroundColor,var(--pf-global--BackgroundColor--200,#f0f0f0))}.container:is(.compact,.inline) #copy-button,.container:is(.compact,.inline) slot[name=actions]::slotted(*){--pf-c-button--PaddingTop:var(--pf-c-clipboard-copy__actions-item--button--PaddingTop,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingRight:var(--pf-c-clipboard-copy__actions-item--button--PaddingRight,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingBottom:var(--pf-c-clipboard-copy__actions-item--button--PaddingBottom,\n var(--pf-global--spacer--xs, 0.25rem));--pf-c-button--PaddingLeft:var(--pf-c-clipboard-copy__actions-item--button--PaddingLeft,\n var(--pf-global--spacer--sm, 0.5rem));margin-block-start:calc(-1 * var(--pf-c-button--PaddingTop));margin-block-end:calc(-1 * var(--pf-c-button--PaddingBottom))}`;
11
11
  import '@patternfly/elements/pf-button/pf-button.js';
12
12
  import '@patternfly/elements/pf-icon/pf-icon.js';
13
13
  import '@patternfly/elements/pf-tooltip/pf-tooltip.js';
14
14
  const sleep = (ms) => new Promise(r => setTimeout(r, ms));
15
15
  /**
16
- * Clipboard Copy
16
+ * The clipboard copy component allows users to quickly and easily copy content to their clipboard.
17
+ *
17
18
  * @slot - Place content to copy here, or use the `value` attribute
18
19
  * @slot actions - Place additional action buttons here
19
20
  */
@@ -59,14 +60,16 @@ let PfClipboardCopy = class PfClipboardCopy extends BaseClipboardCopy {
59
60
  return html `
60
61
  <div class="container ${classMap({ code, expanded, inline, compact, block, })}">
61
62
  <div id="input-group">
62
- <pf-button id="expand-button"
63
- plain
64
- variant="control"
65
- label="EXPAND"
66
- ?inert="${!expandable}"
67
- @click="${__classPrivateFieldGet(this, _PfClipboardCopy_instances, "m", _PfClipboardCopy_onClick)}">
68
- <pf-icon icon="chevron-right"></pf-icon>
69
- </pf-button>
63
+ <div id="wrapper">
64
+ <pf-button id="expand-button"
65
+ plain
66
+ variant="control"
67
+ label="EXPAND"
68
+ ?inert="${!expandable}"
69
+ @click="${__classPrivateFieldGet(this, _PfClipboardCopy_instances, "m", _PfClipboardCopy_onClick)}">
70
+ <pf-icon icon="chevron-right"></pf-icon>
71
+ </pf-button>
72
+ </div>
70
73
  <span ?hidden="${!(inline || compact)}">${this.value}</span>
71
74
  <input
72
75
  ?hidden="${inline || compact}"
@@ -1 +1 @@
1
- {"version":3,"file":"pf-clipboard-copy.js","sourceRoot":"","sources":["pf-clipboard-copy.ts"],"names":[],"mappings":"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","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { BaseClipboardCopy } from './BaseClipboardCopy.js';\n\nimport styles from './pf-clipboard-copy.css';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\nimport '@patternfly/elements/pf-icon/pf-icon.js';\nimport '@patternfly/elements/pf-tooltip/pf-tooltip.js';\n\nconst sleep = (ms?: number) => new Promise(r => setTimeout(r, ms));\n\n/**\n * Clipboard Copy\n * @slot - Place content to copy here, or use the `value` attribute\n * @slot actions - Place additional action buttons here\n */\n@customElement('pf-clipboard-copy')\nexport class PfClipboardCopy extends BaseClipboardCopy {\n static readonly styles = [...BaseClipboardCopy.styles, styles];\n\n static shadowRootOptions: ShadowRootInit = { ...BaseClipboardCopy.shadowRootOptions, delegatesFocus: true };\n\n @property({ attribute: 'click-tip' }) clickTip = 'Copied';\n\n @property({ attribute: 'hover-tip' }) hoverTip = 'Copy';\n\n @property({ attribute: 'text-label' }) textAriaLabel = 'Copyable input';\n\n @property({ attribute: 'toggle-label' }) toggleAriaLabel = 'Show content';\n\n @property({ type: Number, attribute: 'entry-delay' }) entryDelay = 300;\n\n @property({ type: Number, attribute: 'exit-delay' }) exitDelay = 1500;\n\n @property({ type: Boolean, reflect: true }) block = false;\n\n @property({ type: Boolean, reflect: true }) code = false;\n\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Implies not `inline`.\n */\n @property({ type: Boolean, reflect: true }) expandable = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /**\n * Implies not expandable. Overrules `expandable`.\n */\n @property({ type: Boolean, reflect: true }) inline = false;\n\n @property({ type: Boolean, reflect: true }) compact = false;\n\n @property() override value = '';\n\n #copied = false;\n\n #mo = new MutationObserver(() => this.#onMutation());\n\n connectedCallback() {\n super.connectedCallback();\n this.#mo.observe(this, { characterData: true });\n this.#onMutation();\n }\n\n /**\n * @todo fix the collapsed whitespace between the end of the \"inline-compact\" variant and the text node.\n * This demonstrates the collapsed whitespace issue.\n * The extra space between the closing slot tag and the closing template literal results in a collapsed whitespace.\n */\n render() {\n const { expanded, expandable, inline, compact, code, block, readonly } = this;\n return html`\n <div class=\"container ${classMap({ code, expanded, inline, compact, block, })}\">\n <div id=\"input-group\">\n <pf-button id=\"expand-button\"\n plain\n variant=\"control\"\n label=\"EXPAND\"\n ?inert=\"${!expandable}\"\n @click=\"${this.#onClick}\">\n <pf-icon icon=\"chevron-right\"></pf-icon>\n </pf-button>\n <span ?hidden=\"${!(inline || compact)}\">${this.value}</span>\n <input\n ?hidden=\"${inline || compact}\"\n ?disabled=\"${expanded || readonly}\"\n .value=\"${this.value}\"\n @input=\"${this.#onChange}\"\n aria-label=\"${this.textAriaLabel}\">\n <pf-tooltip>\n <pf-button id=\"copy-button\"\n plain\n variant=\"${ifDefined(!(inline || compact) ? 'control' : undefined)}\"\n label=\"${this.hoverTip}\"\n size=\"lg\"\n @click=\"${this.copy}\">\n <pf-icon icon=\"copy\"></pf-icon>\n </pf-button>\n <span slot=\"content\">${this.#copied ? this.clickTip : this.hoverTip}</span>\n </pf-tooltip>\n <slot name=\"actions\"></slot>\n </div>\n <textarea .value=\"${this.value}\"\n .disabled=\"${this.readonly}\"\n ?hidden=\"${!(expandable && expanded)}\"\n @input=\"${this.#onChange}\">\n </textarea>\n </div>\n `;\n }\n\n #onClick() {\n this.expanded = !this.expanded;\n }\n\n #onChange(e: Event) {\n const { value } = e.target as HTMLInputElement || HTMLTextAreaElement;\n this.value = value;\n }\n\n #onMutation() {\n if (this.childNodes.length > 0) {\n this.value = this.getAttribute('value') ?? this.#dedent(Array.from(this.childNodes, child =>\n (child instanceof Element || child instanceof Text) ? (child.textContent ?? '') : '')\n .join(''));\n }\n }\n\n #dedent(str: string): string {\n const stripped = str.replace(/^\\n/, '');\n const match = stripped.match(/^\\s+/);\n return match ? stripped.replace(new RegExp(`^${match[0]}`, 'gm'), '') : str;\n }\n\n override async copy() {\n await super.copy();\n await sleep(this.entryDelay);\n this.#copied = true;\n this.requestUpdate();\n await sleep(this.exitDelay);\n this.#copied = false;\n this.requestUpdate();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-clipboard-copy': PfClipboardCopy;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-clipboard-copy.js","sourceRoot":"","sources":["pf-clipboard-copy.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;;;AAI3D,OAAO,6CAA6C,CAAC;AACrD,OAAO,yCAAyC,CAAC;AACjD,OAAO,+CAA+C,CAAC;AAEvD,MAAM,KAAK,GAAG,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAEnE;;;;;GAKG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,iBAAiB;IAA/C;;;QAKiC,aAAQ,GAAG,QAAQ,CAAC;QAEpB,aAAQ,GAAG,MAAM,CAAC;QAEjB,kBAAa,GAAG,gBAAgB,CAAC;QAE/B,oBAAe,GAAG,cAAc,CAAC;QAEpB,eAAU,GAAG,GAAG,CAAC;QAElB,cAAS,GAAG,IAAI,CAAC;QAE1B,UAAK,GAAG,KAAK,CAAC;QAEd,SAAI,GAAG,KAAK,CAAC;QAEb,aAAQ,GAAG,KAAK,CAAC;QAE7D;;WAEG;QACyC,eAAU,GAAG,KAAK,CAAC;QAEnB,aAAQ,GAAG,KAAK,CAAC;QAE7D;;WAEG;QACyC,WAAM,GAAG,KAAK,CAAC;QAEf,YAAO,GAAG,KAAK,CAAC;QAEvC,UAAK,GAAG,EAAE,CAAC;QAEhC,kCAAU,KAAK,EAAC;QAEhB,8BAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC,uBAAA,IAAI,+DAAY,MAAhB,IAAI,CAAc,CAAC,EAAC;IAyFvD,CAAC;IAvFC,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,uBAAA,IAAI,2BAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,uBAAA,IAAI,+DAAY,MAAhB,IAAI,CAAc,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC9E,OAAO,IAAI,CAAA;8BACe,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC;;;;;;;kCAOjD,CAAC,UAAU;kCACX,uBAAA,IAAI,4DAAS;;;;2BAIpB,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK;;yBAErC,MAAM,IAAI,OAAO;2BACf,QAAQ,IAAI,QAAQ;wBACvB,IAAI,CAAC,KAAK;wBACV,uBAAA,IAAI,6DAAU;4BACV,IAAI,CAAC,aAAa;;;;mCAIX,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;iCACzD,IAAI,CAAC,QAAQ;;kCAEZ,IAAI,CAAC,IAAI;;;mCAGR,uBAAA,IAAI,+BAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;;;;4BAInD,IAAI,CAAC,KAAK;+BACP,IAAI,CAAC,QAAQ;6BACf,CAAC,CAAC,UAAU,IAAI,QAAQ,CAAC;4BAC1B,uBAAA,IAAI,6DAAU;;;KAGrC,CAAC;IACJ,CAAC;IAyBQ,KAAK,CAAC,IAAI;QACjB,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,uBAAA,IAAI,2BAAW,IAAI,MAAA,CAAC;QACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,uBAAA,IAAI,2BAAW,KAAK,MAAA,CAAC;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;;;IA9BC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,CAAC,iEAES,CAAQ;IAChB,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,MAA0B,IAAI,mBAAmB,CAAC;IACtE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,CAAC;IAGC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,uBAAA,IAAI,2DAAQ,MAAZ,IAAI,EAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAC1F,CAAC,KAAK,YAAY,OAAO,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACpF,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;KACd;AACH,CAAC,6DAEO,GAAW;IACjB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9E,CAAC;AAtHe,sBAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExD,iCAAiB,GAAmB,EAAE,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAEtE;IAArC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;iDAAqB;AAEpB;IAArC,QAAQ,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;iDAAmB;AAEjB;IAAtC,QAAQ,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;sDAAkC;AAE/B;IAAxC,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;wDAAkC;AAEpB;IAArD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;mDAAkB;AAElB;IAApD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;kDAAkB;AAE1B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8CAAe;AAEd;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAc;AAEb;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAkB;AAKjB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAoB;AAEnB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAkB;AAKjB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAgB;AAEf;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAAiB;AAEhD;IAAX,QAAQ,EAAE;8CAAqB;AArCrB,eAAe;IAD3B,aAAa,CAAC,mBAAmB,CAAC;GACtB,eAAe,CAkI3B;SAlIY,eAAe","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { BaseClipboardCopy } from './BaseClipboardCopy.js';\n\nimport styles from './pf-clipboard-copy.css';\n\nimport '@patternfly/elements/pf-button/pf-button.js';\nimport '@patternfly/elements/pf-icon/pf-icon.js';\nimport '@patternfly/elements/pf-tooltip/pf-tooltip.js';\n\nconst sleep = (ms?: number) => new Promise(r => setTimeout(r, ms));\n\n/**\n * The clipboard copy component allows users to quickly and easily copy content to their clipboard.\n *\n * @slot - Place content to copy here, or use the `value` attribute\n * @slot actions - Place additional action buttons here\n */\n@customElement('pf-clipboard-copy')\nexport class PfClipboardCopy extends BaseClipboardCopy {\n static readonly styles = [...BaseClipboardCopy.styles, styles];\n\n static shadowRootOptions: ShadowRootInit = { ...BaseClipboardCopy.shadowRootOptions, delegatesFocus: true };\n\n @property({ attribute: 'click-tip' }) clickTip = 'Copied';\n\n @property({ attribute: 'hover-tip' }) hoverTip = 'Copy';\n\n @property({ attribute: 'text-label' }) textAriaLabel = 'Copyable input';\n\n @property({ attribute: 'toggle-label' }) toggleAriaLabel = 'Show content';\n\n @property({ type: Number, attribute: 'entry-delay' }) entryDelay = 300;\n\n @property({ type: Number, attribute: 'exit-delay' }) exitDelay = 1500;\n\n @property({ type: Boolean, reflect: true }) block = false;\n\n @property({ type: Boolean, reflect: true }) code = false;\n\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n /**\n * Implies not `inline`.\n */\n @property({ type: Boolean, reflect: true }) expandable = false;\n\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /**\n * Implies not expandable. Overrules `expandable`.\n */\n @property({ type: Boolean, reflect: true }) inline = false;\n\n @property({ type: Boolean, reflect: true }) compact = false;\n\n @property() override value = '';\n\n #copied = false;\n\n #mo = new MutationObserver(() => this.#onMutation());\n\n connectedCallback() {\n super.connectedCallback();\n this.#mo.observe(this, { characterData: true });\n this.#onMutation();\n }\n\n /**\n * @todo fix the collapsed whitespace between the end of the \"inline-compact\" variant and the text node.\n * This demonstrates the collapsed whitespace issue.\n * The extra space between the closing slot tag and the closing template literal results in a collapsed whitespace.\n */\n render() {\n const { expanded, expandable, inline, compact, code, block, readonly } = this;\n return html`\n <div class=\"container ${classMap({ code, expanded, inline, compact, block, })}\">\n <div id=\"input-group\">\n <div id=\"wrapper\">\n <pf-button id=\"expand-button\"\n plain\n variant=\"control\"\n label=\"EXPAND\"\n ?inert=\"${!expandable}\"\n @click=\"${this.#onClick}\">\n <pf-icon icon=\"chevron-right\"></pf-icon>\n </pf-button>\n </div>\n <span ?hidden=\"${!(inline || compact)}\">${this.value}</span>\n <input\n ?hidden=\"${inline || compact}\"\n ?disabled=\"${expanded || readonly}\"\n .value=\"${this.value}\"\n @input=\"${this.#onChange}\"\n aria-label=\"${this.textAriaLabel}\">\n <pf-tooltip>\n <pf-button id=\"copy-button\"\n plain\n variant=\"${ifDefined(!(inline || compact) ? 'control' : undefined)}\"\n label=\"${this.hoverTip}\"\n size=\"lg\"\n @click=\"${this.copy}\">\n <pf-icon icon=\"copy\"></pf-icon>\n </pf-button>\n <span slot=\"content\">${this.#copied ? this.clickTip : this.hoverTip}</span>\n </pf-tooltip>\n <slot name=\"actions\"></slot>\n </div>\n <textarea .value=\"${this.value}\"\n .disabled=\"${this.readonly}\"\n ?hidden=\"${!(expandable && expanded)}\"\n @input=\"${this.#onChange}\">\n </textarea>\n </div>\n `;\n }\n\n #onClick() {\n this.expanded = !this.expanded;\n }\n\n #onChange(e: Event) {\n const { value } = e.target as HTMLInputElement || HTMLTextAreaElement;\n this.value = value;\n }\n\n #onMutation() {\n if (this.childNodes.length > 0) {\n this.value = this.getAttribute('value') ?? this.#dedent(Array.from(this.childNodes, child =>\n (child instanceof Element || child instanceof Text) ? (child.textContent ?? '') : '')\n .join(''));\n }\n }\n\n #dedent(str: string): string {\n const stripped = str.replace(/^\\n/, '');\n const match = stripped.match(/^\\s+/);\n return match ? stripped.replace(new RegExp(`^${match[0]}`, 'gm'), '') : str;\n }\n\n override async copy() {\n await super.copy();\n await sleep(this.entryDelay);\n this.#copied = true;\n this.requestUpdate();\n await sleep(this.exitDelay);\n this.#copied = false;\n this.requestUpdate();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-clipboard-copy': PfClipboardCopy;\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  import { BaseCodeBlock } from './BaseCodeBlock.js';
2
2
  /**
3
+ * A code block is a component that contains 2 or more lines of read-only code. The code in a code block can be copied to the clipboard.
4
+ *
3
5
  * @slot code
4
6
  * The slot to put the code in
5
7
  * @slot expandable-code
@@ -8,6 +8,8 @@ import { BaseCodeBlock } from './BaseCodeBlock.js';
8
8
  import { css } from "lit";
9
9
  const styles = css `:host{background-color:var(--pf-c-code-block--BackgroundColor,#f0f0f0);font-size:var(--pf-c-code-block__pre--FontSize, .875rem);font-family:var(--pf-c-code-block__pre--FontFamily, "Liberation Mono", consolas, "SFMono-Regular", menlo, monaco, "Courier New", monospace)}#container{padding-top:var(--pf-c-code-block__content--PaddingTop,1rem);padding-right:var(--pf-c-code-block__content--PaddingRight,1rem);padding-bottom:var(--pf-c-code-block__content--PaddingBottom,1rem);padding-left:var(--pf-c-code-block__content--PaddingLeft,1rem)}#header{border-bottom:var(--pf-c-code-block__header--BorderBottomWidth,1px) solid var(--pf-c-code-block__header--BorderBottomColor,#d2d2d2)}#container{margin:0}pre{margin:0}slot[name=actions]{display:flex;justify-content:end}#expanded{display:inline}button{display:flex;background:0 0;border:none;padding:6px 16px 6px 0;color:#06c;cursor:pointer;font-size:16px}button svg{color:#151515;margin-right:12px;transition:.2s ease-in 0s}.expanded button svg{transform:rotate(-90deg)}`;
10
10
  /**
11
+ * A code block is a component that contains 2 or more lines of read-only code. The code in a code block can be copied to the clipboard.
12
+ *
11
13
  * @slot code
12
14
  * The slot to put the code in
13
15
  * @slot expandable-code
@@ -1 +1 @@
1
- {"version":3,"file":"pf-code-block.js","sourceRoot":"","sources":["pf-code-block.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;;AAGnD;;;;;;;;;;;;;;;;;;;GAmBG;AAGI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,aAAa;IAAvC;;;QAGuC,aAAQ,GAAG,KAAK,CAAC;IA+B/D,CAAC;IArBU,MAAM;QACb,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAA;;;;;;mCAMoB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;kCACvB,IAAI,CAAC,OAAO;qBACzB,CAAC,QAAQ,KAAK,uBAAA,IAAI,gEAAiB;2BAC7B,CAAC,uBAAA,IAAI,gEAAiB;yBACxB,uBAAA,IAAI,mDAAQ;gCACL,IAAI,CAAC,QAAQ;;;YAGjC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;;;KAGjD,CAAC;IACJ,CAAC;;;IA3BC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,CAAC;IAGC,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;AACtE,CAAC;AAVe,kBAAM,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEf;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAkB;AAHlD,WAAW;IADvB,aAAa,CAAC,eAAe,CAAC;GAClB,WAAW,CAkCvB;SAlCY,WAAW","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { BaseCodeBlock } from './BaseCodeBlock.js';\nimport styles from './pf-code-block.css';\n\n/**\n * @slot code\n * The slot to put the code in\n * @slot expandable-code\n * The slot to put the code in that should be revealed when the \"Show more\" button is\n * clicked to expand the code-block\n * @slot actions\n * Contains the actions for the code-block. For example, copy to clipboard.\n * @attr {boolean} expanded {@default `false`}\n * Indicates if the code-block has been expanded\n * @cssprop {<color>} --pf-c-code-block--BackgroundColor {@default `#f0f0f0`}\n * @cssprop {<length>} --pf-c-code-block__header--BorderBottomWidth {@default `1px`}\n * @cssprop {<color>} --pf-c-code-block__header--BorderBottomColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingTop {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingRight {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingBottom {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingLeft {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__pre--FontSize {@default `0.875rem`}\n * @cssprop {<string>} --pf-c-code-block__pre--FontFamily {@default `\"Liberation Mono\", consolas, \"SFMono-Regular\", menlo, monaco, \"Courier New\", monospace`}\n */\n\n@customElement('pf-code-block')\nexport class PfCodeBlock extends BaseCodeBlock {\n static readonly styles = [...BaseCodeBlock.styles, styles];\n\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n #toggle() {\n this.expanded = !this.expanded;\n }\n\n get #expandedContent(): string {\n return this.querySelector('script[data-expand]')?.textContent ?? '';\n }\n\n override render() {\n const { expanded } = this;\n return html`\n <div id=\"header\">\n <div id=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div id=\"container\" class=\"${classMap({ expanded })}\">\n <pre><code id=\"content\">${this.content}</code><code id=\"code-block-expand\"\n ?hidden=\"${!expanded}\">${this.#expandedContent}</code></pre>\n <button ?hidden=\"${!this.#expandedContent}\"\n @click=${this.#toggle}\n aria-expanded=${this.expanded}\n aria-controls=\"code-block-expand\">\n <svg fill=\"currentColor\" height=\"1em\" width=\"1em\" viewBox=\"0 0 256 512\" aria-hidden=\"true\" role=\"img\" style=\"vertical-align: -0.125em;\"><path d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"></path></svg>\n ${!this.expanded ? 'Show more' : 'Show less'}\n </button>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-code-block': PfCodeBlock;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-code-block.js","sourceRoot":"","sources":["pf-code-block.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;;;AAGnD;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGI,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,aAAa;IAAvC;;;QAGuC,aAAQ,GAAG,KAAK,CAAC;IA+B/D,CAAC;IArBU,MAAM;QACb,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAA;;;;;;mCAMoB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;kCACvB,IAAI,CAAC,OAAO;qBACzB,CAAC,QAAQ,KAAK,uBAAA,IAAI,gEAAiB;2BAC7B,CAAC,uBAAA,IAAI,gEAAiB;yBACxB,uBAAA,IAAI,mDAAQ;gCACL,IAAI,CAAC,QAAQ;;;YAGjC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW;;;KAGjD,CAAC;IACJ,CAAC;;;IA3BC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,CAAC;IAGC,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;AACtE,CAAC;AAVe,kBAAM,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEf;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAkB;AAHlD,WAAW;IADvB,aAAa,CAAC,eAAe,CAAC;GAClB,WAAW,CAkCvB;SAlCY,WAAW","sourcesContent":["import { html } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { BaseCodeBlock } from './BaseCodeBlock.js';\nimport styles from './pf-code-block.css';\n\n/**\n * A code block is a component that contains 2 or more lines of read-only code. The code in a code block can be copied to the clipboard.\n *\n * @slot code\n * The slot to put the code in\n * @slot expandable-code\n * The slot to put the code in that should be revealed when the \"Show more\" button is\n * clicked to expand the code-block\n * @slot actions\n * Contains the actions for the code-block. For example, copy to clipboard.\n * @attr {boolean} expanded {@default `false`}\n * Indicates if the code-block has been expanded\n * @cssprop {<color>} --pf-c-code-block--BackgroundColor {@default `#f0f0f0`}\n * @cssprop {<length>} --pf-c-code-block__header--BorderBottomWidth {@default `1px`}\n * @cssprop {<color>} --pf-c-code-block__header--BorderBottomColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingTop {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingRight {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingBottom {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__content--PaddingLeft {@default `1rem`}\n * @cssprop {<length>} --pf-c-code-block__pre--FontSize {@default `0.875rem`}\n * @cssprop {<string>} --pf-c-code-block__pre--FontFamily {@default `\"Liberation Mono\", consolas, \"SFMono-Regular\", menlo, monaco, \"Courier New\", monospace`}\n */\n\n@customElement('pf-code-block')\nexport class PfCodeBlock extends BaseCodeBlock {\n static readonly styles = [...BaseCodeBlock.styles, styles];\n\n @property({ type: Boolean, reflect: true }) expanded = false;\n\n #toggle() {\n this.expanded = !this.expanded;\n }\n\n get #expandedContent(): string {\n return this.querySelector('script[data-expand]')?.textContent ?? '';\n }\n\n override render() {\n const { expanded } = this;\n return html`\n <div id=\"header\">\n <div id=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div id=\"container\" class=\"${classMap({ expanded })}\">\n <pre><code id=\"content\">${this.content}</code><code id=\"code-block-expand\"\n ?hidden=\"${!expanded}\">${this.#expandedContent}</code></pre>\n <button ?hidden=\"${!this.#expandedContent}\"\n @click=${this.#toggle}\n aria-expanded=${this.expanded}\n aria-controls=\"code-block-expand\">\n <svg fill=\"currentColor\" height=\"1em\" width=\"1em\" viewBox=\"0 0 256 512\" aria-hidden=\"true\" role=\"img\" style=\"vertical-align: -0.125em;\"><path d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"></path></svg>\n ${!this.expanded ? 'Show more' : 'Show less'}\n </button>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-code-block': PfCodeBlock;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyValues } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport style from './BaseIcon.css';\n\nexport type URLGetter = (set: string, icon: string) => URL;\n\n/** requestIdleCallback when available, requestAnimationFrame when not */\nconst ric = window.requestIdleCallback ?? window.requestAnimationFrame;\n\n/** Fired when an icon fails to load */\nclass IconLoadError extends ErrorEvent {\n constructor(\n pathname: string,\n /** The original error when importing the icon module */\n public originalError: Error\n ) {\n super('error', { message: `Could not load icon at ${pathname}` });\n }\n}\n\n/**\n * Icon component lazy-loads icons and allows custom icon sets\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\nexport abstract class BaseIcon extends LitElement {\n public static readonly styles = [style];\n\n public static addIconSet(setName: string, getter: typeof BaseIcon['getIconUrl']) {\n if (typeof getter !== 'function') {\n Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);\n } else {\n this.getters.set(setName, getter);\n for (const instance of this.instances) {\n instance.load();\n }\n }\n }\n\n public static getIconUrl: URLGetter = (set: string, icon: string) =>\n new URL(`./icons/${set}/${icon}.js`, import.meta.url);\n\n private static onIntersect: IntersectionObserverCallback = records =>\n records.forEach(({ isIntersecting, target }) => {\n const icon = target as BaseIcon;\n icon.#intersecting = isIntersecting;\n ric(() => {\n if (icon.#intersecting) {\n icon.load();\n }\n });\n });\n\n private static io = new IntersectionObserver(this.onIntersect);\n\n private static getters = new Map<string, URLGetter>();\n\n private static instances = new Set<BaseIcon>();\n\n declare public static defaultIconSet: string;\n\n /** Icon set */\n @property() set = this.#class.defaultIconSet;\n\n /** Icon name */\n @property({ reflect: true }) icon = '';\n\n /** Size of the icon */\n abstract size: string;\n\n /**\n * Controls how eager the element will be to load the icon data\n * - `eager`: eagerly load the icon, blocking the main thread\n * - `idle`: wait for the browser to attain an idle state before loading\n * - `lazy` (default): wait for the element to enter the viewport before loading\n */\n @property() loading?: 'idle'|'lazy'|'eager' = 'lazy';\n\n /** Icon content. Any value that lit can render */\n @state() private content?: unknown;\n\n #intersecting = false;\n\n #logger = new Logger(this);\n\n get #class(): typeof BaseIcon {\n return this.constructor as typeof BaseIcon;\n }\n\n #lazyLoad() {\n this.#class.io.observe(this);\n if (this.#intersecting) {\n this.load();\n }\n }\n\n #iconChanged() {\n switch (this.loading) {\n case 'idle': return void ric(() => this.load());\n case 'lazy': return void this.#lazyLoad();\n case 'eager': return void this.load();\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#class.instances.add(this);\n }\n\n willUpdate(changed: PropertyValues<this>) {\n if (changed.has('icon')) {\n this.#iconChanged();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#class.instances.delete(this);\n }\n\n render() {\n const content = this.content ?? ''; /* eslint-disable indent */\n return html`\n <div id=\"container\" aria-hidden=\"true\">${content\n }<span part=\"fallback\" ?hidden=${!!content}>\n <slot></slot>\n </span>\n </div>\n `;/* eslint-enable indent */\n }\n\n protected async load() {\n const { set, icon, } = this;\n const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;\n let pathname = 'UNKNOWN ICON';\n if (set && icon) {\n try {\n ({ pathname } = getter(set, icon));\n const mod = await import(pathname);\n this.content = mod.default instanceof Node ? mod.default.cloneNode(true) : mod.default;\n await this.updateComplete;\n this.dispatchEvent(new Event('load', { bubbles: true }));\n } catch (error: unknown) {\n const event = new IconLoadError(pathname, error as Error);\n this.#logger.error((error as IconLoadError).message);\n this.dispatchEvent(event);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"BaseIcon.js","sourceRoot":"","sources":["BaseIcon.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyValues } from 'lit';\n\nimport { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators/property.js';\nimport { state } from 'lit/decorators/state.js';\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\n\nimport style from './BaseIcon.css';\n\nexport type URLGetter = (set: string, icon: string) => URL;\n\n/** requestIdleCallback when available, requestAnimationFrame when not */\nconst ric = window.requestIdleCallback ?? window.requestAnimationFrame;\n\n/** Fired when an icon fails to load */\nclass IconLoadError extends ErrorEvent {\n constructor(\n pathname: string,\n /** The original error when importing the icon module */\n public originalError: Error\n ) {\n super('error', { message: `Could not load icon at ${pathname}` });\n }\n}\n\n/**\n * Icon component lazy-loads icons and allows custom icon sets\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\nexport abstract class BaseIcon extends LitElement {\n public static readonly styles = [style];\n\n public static addIconSet(setName: string, getter: typeof BaseIcon['getIconUrl']) {\n if (typeof getter !== 'function') {\n Logger.warn(`[${this.name}.addIconSet(setName, getter)]: getter must be a function`);\n } else {\n this.getters.set(setName, getter);\n for (const instance of this.instances) {\n instance.load();\n }\n }\n }\n\n public static getIconUrl: URLGetter = (set: string, icon: string) =>\n new URL(`./icons/${set}/${icon}.js`, import.meta.url);\n\n private static onIntersect: IntersectionObserverCallback = records =>\n records.forEach(({ isIntersecting, target }) => {\n const icon = target as BaseIcon;\n icon.#intersecting = isIntersecting;\n ric(() => {\n if (icon.#intersecting) {\n icon.load();\n }\n });\n });\n\n private static io = new IntersectionObserver(this.onIntersect);\n\n private static getters = new Map<string, URLGetter>();\n\n private static instances = new Set<BaseIcon>();\n\n declare public static defaultIconSet: string;\n\n /** Icon set */\n @property() set = this.#class.defaultIconSet;\n\n /** Icon name */\n @property({ reflect: true }) icon = '';\n\n /** Size of the icon */\n abstract size: string;\n\n /**\n * Controls how eager the element will be to load the icon data\n * - `eager`: eagerly load the icon, blocking the main thread\n * - `idle`: wait for the browser to attain an idle state before loading\n * - `lazy` (default): wait for the element to enter the viewport before loading\n */\n @property() loading?: 'idle' | 'lazy' | 'eager' = 'lazy';\n\n /** Icon content. Any value that lit can render */\n @state() private content?: unknown;\n\n #intersecting = false;\n\n #logger = new Logger(this);\n\n get #class(): typeof BaseIcon {\n return this.constructor as typeof BaseIcon;\n }\n\n #lazyLoad() {\n this.#class.io.observe(this);\n if (this.#intersecting) {\n this.load();\n }\n }\n\n #iconChanged() {\n switch (this.loading) {\n case 'idle': return void ric(() => this.load());\n case 'lazy': return void this.#lazyLoad();\n case 'eager': return void this.load();\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.#class.instances.add(this);\n }\n\n willUpdate(changed: PropertyValues<this>) {\n if (changed.has('icon')) {\n this.#iconChanged();\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.#class.instances.delete(this);\n }\n\n render() {\n const content = this.content ?? ''; /* eslint-disable indent */\n return html`\n <div id=\"container\" aria-hidden=\"true\">${content\n }<span part=\"fallback\" ?hidden=${!!content}>\n <slot></slot>\n </span>\n </div>\n `;/* eslint-enable indent */\n }\n\n protected async load() {\n const { set, icon, } = this;\n const getter = this.#class.getters.get(set) ?? this.#class.getIconUrl;\n let pathname = 'UNKNOWN ICON';\n if (set && icon) {\n try {\n ({ pathname } = getter(set, icon));\n const mod = await import(pathname);\n this.content = mod.default instanceof Node ? mod.default.cloneNode(true) : mod.default;\n await this.updateComplete;\n this.dispatchEvent(new Event('load', { bubbles: true }));\n } catch (error: unknown) {\n const event = new IconLoadError(pathname, error as Error);\n this.#logger.error((error as IconLoadError).message);\n this.dispatchEvent(event);\n }\n }\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { BaseIcon } from './BaseIcon.js';
2
2
  /**
3
- * PatternFly Icon component lazy-loads icons and allows custom icon sets
3
+ * An icon component is a container that allows for icons of varying dimensions to
4
+ * seamlessly replace each other without shifting surrounding content.
4
5
  *
5
6
  * @slot - Slotted content is used as a fallback in case the icon doesn't load
6
7
  * @fires load - Fired when an icon is loaded and rendered
@@ -5,7 +5,8 @@ import { property } from 'lit/decorators/property.js';
5
5
  import { css } from "lit";
6
6
  const style = css `:host([size=sm]) #container{--_size:var(--pf-global--icon--FontSize--sm, 10px)}:host([size=md]) #container{--_size:var(--pf-global--icon--FontSize--md, 18px)}:host([size=lg]) #container{--_size:var(--pf-global--icon--FontSize--lg, 24px)}:host([size=xl]) #container{--_size:var(--pf-global--icon--FontSize--xl, 54px)}#container,svg{width:var(--pf-icon--size,var(--_size));height:var(--pf-icon--size,var(--_size));min-width:var(--pf-icon--size,var(--_size));min-height:var(--pf-icon--size,var(--_size))}`;
7
7
  /**
8
- * PatternFly Icon component lazy-loads icons and allows custom icon sets
8
+ * An icon component is a container that allows for icons of varying dimensions to
9
+ * seamlessly replace each other without shifting surrounding content.
9
10
  *
10
11
  * @slot - Slotted content is used as a fallback in case the icon doesn't load
11
12
  * @fires load - Fired when an icon is loaded and rendered
@@ -1 +1 @@
1
- {"version":3,"file":"pf-icon.js","sourceRoot":"","sources":["pf-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAItD;;;;;;;GAOG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,QAAQ;IAA7B;;QAKL,uBAAuB;QACM,SAAI,GAAwB,IAAI,CAAC;IAChE,CAAC;;AANwB,aAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE9C,qBAAc,GAAG,KAAK,CAAC;AAGR;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAAkC;AANnD,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAOlB;SAPY,MAAM","sourcesContent":["import { BaseIcon } from './BaseIcon.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport style from './pf-icon.css';\n\n/**\n * PatternFly Icon component lazy-loads icons and allows custom icon sets\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\n@customElement('pf-icon')\nexport class PfIcon extends BaseIcon {\n public static readonly styles = [...BaseIcon.styles, style];\n\n public static defaultIconSet = 'fas';\n\n /** Size of the icon */\n @property({ reflect: true }) size: 'sm'|'md'|'lg'|'xl' = 'sm';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-icon': PfIcon;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-icon.js","sourceRoot":"","sources":["pf-icon.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;;;AAItD;;;;;;;;GAQG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,QAAQ;IAA7B;;QAKL,uBAAuB;QACM,SAAI,GAA8B,IAAI,CAAC;IACtE,CAAC;;AANwB,aAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE9C,qBAAc,GAAG,KAAK,CAAC;AAGR;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oCAAwC;AANzD,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAOlB;SAPY,MAAM","sourcesContent":["import { BaseIcon } from './BaseIcon.js';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport style from './pf-icon.css';\n\n/**\n * An icon component is a container that allows for icons of varying dimensions to\n * seamlessly replace each other without shifting surrounding content.\n *\n * @slot - Slotted content is used as a fallback in case the icon doesn't load\n * @fires load - Fired when an icon is loaded and rendered\n * @fires error - Fired when an icon fails to load\n * @csspart fallback - Container for the fallback (i.e. slotted) content\n */\n@customElement('pf-icon')\nexport class PfIcon extends BaseIcon {\n public static readonly styles = [...BaseIcon.styles, style];\n\n public static defaultIconSet = 'fas';\n\n /** Size of the icon */\n @property({ reflect: true }) size: 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-icon': PfIcon;\n }\n}\n"]}
@@ -10,12 +10,13 @@ import { LitElement } from 'lit';
10
10
  export declare class PfJumpLinksItem extends LitElement {
11
11
  #private;
12
12
  static readonly styles: import("lit").CSSResult[];
13
- link: HTMLAnchorElement;
13
+ static readonly shadowRootOptions: ShadowRootInit;
14
+ /** Whether this item is active. */
14
15
  active: boolean;
16
+ /** hypertext reference for this link */
15
17
  href?: string;
16
18
  connectedCallback(): void;
17
19
  render(): import("lit-html").TemplateResult<1>;
18
- focus(): void;
19
20
  private activeChanged;
20
21
  }
21
22
  declare global {
@@ -3,7 +3,6 @@ import { __classPrivateFieldGet, __decorate } from "tslib";
3
3
  import { html, LitElement } from 'lit';
4
4
  import { customElement } from 'lit/decorators/custom-element.js';
5
5
  import { property } from 'lit/decorators/property.js';
6
- import { query } from 'lit/decorators/query.js';
7
6
  import { ifDefined } from 'lit/directives/if-defined.js';
8
7
  import { InternalsController } from '@patternfly/pfe-core/controllers/internals-controller.js';
9
8
  import { css } from "lit";
@@ -21,6 +20,7 @@ let PfJumpLinksItem = class PfJumpLinksItem extends LitElement {
21
20
  constructor() {
22
21
  super(...arguments);
23
22
  _PfJumpLinksItem_instances.add(this);
23
+ /** Whether this item is active. */
24
24
  this.active = false;
25
25
  _PfJumpLinksItem_internals.set(this, new InternalsController(this, {
26
26
  role: 'listitem'
@@ -38,9 +38,6 @@ let PfJumpLinksItem = class PfJumpLinksItem extends LitElement {
38
38
  <slot name="subsection"></slot>
39
39
  `;
40
40
  }
41
- focus() {
42
- this.link.focus();
43
- }
44
41
  activeChanged() {
45
42
  __classPrivateFieldGet(this, _PfJumpLinksItem_internals, "f").ariaCurrent = this.active ? 'location' : null;
46
43
  }
@@ -51,9 +48,7 @@ _PfJumpLinksItem_internals = new WeakMap(), _PfJumpLinksItem_instances = new Wea
51
48
  this.dispatchEvent(new Event('focus', { bubbles: true }));
52
49
  };
53
50
  PfJumpLinksItem.styles = [style];
54
- __decorate([
55
- query('a')
56
- ], PfJumpLinksItem.prototype, "link", void 0);
51
+ PfJumpLinksItem.shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true };
57
52
  __decorate([
58
53
  observed('activeChanged'),
59
54
  property({ type: Boolean, reflect: true })
@@ -1 +1 @@
1
- {"version":3,"file":"pf-jump-links-item.js","sourceRoot":"","sources":["pf-jump-links-item.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;;;AAI/F,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAEvE;;;;;;;GAOG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAAxC;;;QAKuC,WAAM,GAAG,KAAK,CAAC;QAI3D,qCAAa,IAAI,mBAAmB,CAAC,IAAI,EAAE;YACzC,IAAI,EAAE,UAAU;SACjB,CAAC,EAAC;IA+BL,CAAC;IA7BU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;iBACE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,uBAAA,IAAI,4DAAS,aAAa,uBAAA,IAAI,4DAAS;;;;KAIpF,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAEO,aAAa;QACnB,uBAAA,IAAI,kCAAW,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;;;IAGC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;IAGC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAxCe,sBAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AAErB;IAAX,KAAK,CAAC,GAAG,CAAC;6CAAyB;AAEQ;IAD3C,QAAQ,CAAC,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAgB;AAE9B;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAe;AAPhC,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CA0C3B;SA1CY,eAAe","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\n\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { InternalsController } from '@patternfly/pfe-core/controllers/internals-controller.js';\n\nimport style from './pf-jump-links-item.css';\n\nimport { observed } from '@patternfly/pfe-core/decorators/observed.js';\n\n/**\n * @cssprop --pf-c-jump-links__link--PaddingTop -- padding around the link\n * @cssprop --pf-c-jump-links__link--PaddingRight\n * @cssprop --pf-c-jump-links__link--PaddingBottom\n * @cssprop --pf-c-jump-links__link--PaddingLeft\n * @cssprop --pf-c-jump-links__link--OutlineOffset\n * @cssprop --pf-c-jump-links__link-text--Color\n */\n@customElement('pf-jump-links-item')\nexport class PfJumpLinksItem extends LitElement {\n static readonly styles = [style];\n\n @query('a') link!:HTMLAnchorElement;\n @observed('activeChanged')\n @property({ type: Boolean, reflect: true }) active = false;\n\n @property({ reflect: true }) href?: string;\n\n #internals = new InternalsController(this, {\n role: 'listitem'\n });\n\n override connectedCallback() {\n super.connectedCallback();\n this.activeChanged();\n }\n\n render() {\n return html`\n <a href=\"${ifDefined(this.href)}\" @focus=\"${this.#onFocus}\" @click=\"${this.#onClick}\">\n <slot></slot>\n </a>\n <slot name=\"subsection\"></slot>\n `;\n }\n\n focus(): void {\n this.link.focus();\n }\n\n private activeChanged() {\n this.#internals.ariaCurrent = this.active ? 'location' : null;\n }\n\n #onClick() {\n this.dispatchEvent(new Event('select', { bubbles: true }));\n }\n\n #onFocus() {\n this.dispatchEvent(new Event('focus', { bubbles: true }));\n }\n}\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-jump-links-item': PfJumpLinksItem;\n }\n}\n"]}
1
+ {"version":3,"file":"pf-jump-links-item.js","sourceRoot":"","sources":["pf-jump-links-item.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0DAA0D,CAAC;;;AAI/F,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAEvE;;;;;;;GAOG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;IAAxC;;;QAKL,mCAAmC;QAES,WAAM,GAAG,KAAK,CAAC;QAK3D,qCAAa,IAAI,mBAAmB,CAAC,IAAI,EAAE;YACzC,IAAI,EAAE,UAAU;SACjB,CAAC,EAAC;IA2BL,CAAC;IAzBU,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;iBACE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,uBAAA,IAAI,4DAAS,aAAa,uBAAA,IAAI,4DAAS;;;;KAIpF,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,uBAAA,IAAI,kCAAW,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;;;IAGC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;IAGC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC;AAvCe,sBAAM,GAAG,CAAC,KAAK,CAAC,CAAC;AAEjB,iCAAiB,GAAmB,EAAE,GAAG,UAAU,CAAC,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AAIlE;IAD3C,QAAQ,CAAC,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAgB;AAG9B;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;6CAAe;AAVhC,eAAe;IAD3B,aAAa,CAAC,oBAAoB,CAAC;GACvB,eAAe,CAyC3B;SAzCY,eAAe","sourcesContent":["import { html, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\n\nimport { ifDefined } from 'lit/directives/if-defined.js';\n\nimport { InternalsController } from '@patternfly/pfe-core/controllers/internals-controller.js';\n\nimport style from './pf-jump-links-item.css';\n\nimport { observed } from '@patternfly/pfe-core/decorators/observed.js';\n\n/**\n * @cssprop --pf-c-jump-links__link--PaddingTop -- padding around the link\n * @cssprop --pf-c-jump-links__link--PaddingRight\n * @cssprop --pf-c-jump-links__link--PaddingBottom\n * @cssprop --pf-c-jump-links__link--PaddingLeft\n * @cssprop --pf-c-jump-links__link--OutlineOffset\n * @cssprop --pf-c-jump-links__link-text--Color\n */\n@customElement('pf-jump-links-item')\nexport class PfJumpLinksItem extends LitElement {\n static readonly styles = [style];\n\n static readonly shadowRootOptions: ShadowRootInit = { ...LitElement.shadowRootOptions, delegatesFocus: true };\n\n /** Whether this item is active. */\n @observed('activeChanged')\n @property({ type: Boolean, reflect: true }) active = false;\n\n /** hypertext reference for this link */\n @property({ reflect: true }) href?: string;\n\n #internals = new InternalsController(this, {\n role: 'listitem'\n });\n\n override connectedCallback() {\n super.connectedCallback();\n this.activeChanged();\n }\n\n render() {\n return html`\n <a href=\"${ifDefined(this.href)}\" @focus=\"${this.#onFocus}\" @click=\"${this.#onClick}\">\n <slot></slot>\n </a>\n <slot name=\"subsection\"></slot>\n `;\n }\n\n private activeChanged() {\n this.#internals.ariaCurrent = this.active ? 'location' : null;\n }\n\n #onClick() {\n this.dispatchEvent(new Event('select', { bubbles: true }));\n }\n\n #onFocus() {\n this.dispatchEvent(new Event('focus', { bubbles: true }));\n }\n}\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-jump-links-item': PfJumpLinksItem;\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import { LitElement } from 'lit';
2
- import './pf-jump-links-item.js';
3
2
  import '@patternfly/elements/pf-icon/pf-icon.js';
4
- import { PfJumpLinksItem } from './pf-jump-links-item.js';
3
+ import './pf-jump-links-item.js';
5
4
  /**
6
- * **Jump links** allow users to navigate to sections within a page.
5
+ * Jump links allow users to navigate to sections within a page.
6
+ *
7
7
  * @fires toggle - when the `expanded` disclosure widget is toggled
8
8
  * @slot - Place pf-jump-links-items here
9
9
  *
@@ -52,12 +52,17 @@ import { PfJumpLinksItem } from './pf-jump-links-item.js';
52
52
  export declare class PfJumpLinks extends LitElement {
53
53
  #private;
54
54
  static readonly styles: import("lit").CSSResult[];
55
- _items: PfJumpLinksItem[];
55
+ /** Whether the element features a disclosure widget around the nav items */
56
56
  expandable: boolean;
57
+ /** Whether the expandable element's disclosure widget is expanded */
57
58
  expanded: boolean;
59
+ /** Whether the layout of children is vertical or horizontal. */
58
60
  vertical: boolean;
61
+ /** Whether to center children. */
59
62
  centered: boolean;
63
+ /** Offset to add to the scroll position, potentially for a masthead which content scrolls under. */
60
64
  offset: number;
65
+ /** Label to add to nav element. */
61
66
  label?: string;
62
67
  connectedCallback(): void;
63
68
  updated(changed: Map<string, unknown>): void;
@@ -1,18 +1,17 @@
1
- var _PfJumpLinks_instances, _PfJumpLinks_items, _PfJumpLinks_init, _PfJumpLinks_rovingTabindexController, _PfJumpLinks_spy, _PfJumpLinks_onSlotchange, _PfJumpLinks_onSelect, _PfJumpLinks_onToggle;
1
+ var _PfJumpLinks_instances, _PfJumpLinks_initialized, _PfJumpLinks_rovingTabindexController, _PfJumpLinks_spy, _PfJumpLinks_updateItems, _PfJumpLinks_onSelect, _PfJumpLinks_onToggle;
2
2
  import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
3
3
  import { html, LitElement } from 'lit';
4
4
  import { customElement } from 'lit/decorators/custom-element.js';
5
5
  import { property } from 'lit/decorators/property.js';
6
- import { queryAssignedElements } from 'lit/decorators/query-assigned-elements.js';
7
6
  import { ScrollSpyController } from '@patternfly/pfe-core/controllers/scroll-spy-controller.js';
8
7
  import { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';
9
- import './pf-jump-links-item.js';
10
8
  import '@patternfly/elements/pf-icon/pf-icon.js';
9
+ import './pf-jump-links-item.js';
11
10
  import { css } from "lit";
12
11
  const style = css `[hidden]{display:none!important}:host{display:block}#container{display:flex;flex-wrap:wrap;font-family:var(--pf-global--FontFamily--sans-serif, "RedHatTextUpdated", "Overpass", overpass, helvetica, arial, sans-serif);font-size:var(--pf-global--FontSize--md, 16px);font-weight:var(--pf-global--FontWeight--normal,400)}slot{position:relative;display:var(--pf-c-jump-links__list--Display,flex);flex-direction:var(--pf-c-jump-links__list--FlexDirection,row);padding-block-start:var(--pf-c-jump-links__list--PaddingTop,0);padding-inline-end:var(--pf-c-jump-links__list--PaddingRight,var(--pf-global--spacer--md,1rem));padding-block-end:var(--pf-c-jump-links__list--PaddingBottom,0);padding-inline-start:var(--pf-c-jump-links__list--PaddingLeft,var(--pf-global--spacer--md,1rem));visibility:var(--pf-c-jump-links__list--Visibility,visible)}slot::before{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;content:"";border:solid var(--pf-c-jump-links__list--before--BorderColor,var(--pf-global--BorderColor--100,#d2d2d2));border-width:var(--pf-c-jump-links__list--before--BorderTopWidth,var(--pf-global--BorderWidth--sm,1px)) var(--pf-c-jump-links__list--before--BorderRightWidth,0) var(--pf-c-jump-links__list--before--BorderBottomWidth,0) var(--pf-c-jump-links__list--before--BorderLeftWidth,0)}:host([vertical]) #container{--pf-c-jump-links__list--PaddingTop:var(--pf-c-jump-links--m-vertical__list--PaddingTop,\n var(--pf-global--spacer--md, 1rem));--pf-c-jump-links__list--PaddingRight:var(--pf-c-jump-links--m-vertical__list--PaddingRight, 0);--pf-c-jump-links__list--PaddingBottom:var(--pf-c-jump-links--m-vertical__list--PaddingBottom\n var(--pf-global--spacer--md, 1rem));--pf-c-jump-links__list--PaddingLeft:var(--pf-c-jump-links--m-vertical__list--PaddingLeft, 0);--pf-c-jump-links__list--before--BorderTopWidth:var(--pf-c-jump-links--m-vertical__list--before--BorderTopWidth, 0);--pf-c-jump-links__list--before--BorderLeftWidth:var(--pf-c-jump-links--m-vertical__list--before--BorderLeftWidth, \n var(--pf-global--BorderWidth--sm, 1px));--pf-c-jump-links__item--m-current__link--before--BorderTopWidth:var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderTopWidth, 0);--pf-c-jump-links__item--m-current__link--before--BorderLeftWidth:var(--pf-c-jump-links--m-vertical__item--m-current__link--before--BorderLeftWidth,\n var(--pf-global--BorderWidth--lg, 3px));--pf-c-jump-links__list--FlexDirection:var(--pf-c-jump-links--m-vertical__list--FlexDirection, column)}:host([centered]) #container{justify-content:center}:host([centered]) #label{text-align:center}:host(:not([expandable])) #label{display:block;width:100%;margin-block-end:var(--pf-c-jump-links__label--MarginBottom,var(--pf-global--spacer--md,1rem))}:host([expandable]){--pf-c-jump-links--m-expanded__toggle--MarginBottom:calc(var(--pf-c-jump-links__toggle--MarginBottom--base,\n calc(-1 * var(--pf-global--spacer--form-element, 0.375rem))\n ) + var(--pf-global--spacer--md, 1rem))}summary{display:block;margin-block-start:var(--pf-c-jump-links__toggle--MarginTop,calc(-1 * var(--pf-global--spacer--form-element,0.375rem)));margin-block-end:var(--pf-c-jump-links__toggle--MarginBottom,var(--pf-c-jump-links__toggle--MarginBottom--base,calc(-1 * var(--pf-global--spacer--form-element,0.375rem))));margin-inline-start:var(--pf-c-jump-links__toggle--MarginLeft);color:var(--pf-c-jump-links__toggle-text--Color,var(--pf-global--Color--100,#151515));padding:var(--pf-c-button--PaddingTop,var(--pf-global--spacer--form-element,.375rem)) var(--pf-c-button--PaddingRight,var(--pf-global--spacer--md,1rem)) var(--pf-c-button--PaddingBottom,var(--pf-global--spacer--form-element,.375rem)) var(--pf-c-button--PaddingLeft,var(--pf-global--spacer--md,1rem))}summary pf-icon{rotate:var(--pf-c-jump-links__toggle-icon--Rotate,0);transition:var(--pf-c-jump-links__toggle-icon--Transition,\n var(--pf-global--Transition, all 250ms cubic-bezier(.42, 0, .58, 1)))}summary span{margin-inline-start:var(--pf-c-jump-links__toggle-text--MarginLeft,var(--pf-global--spacer--md,1rem))}:host([expanded]) #container{--pf-c-jump-links__toggle--MarginBottom:var(--pf-c-jump-links--m-expanded__toggle--MarginBottom,\n calc(var(--pf-c-jump-links__toggle--MarginBottom--base,\n calc(-1 * var(--pf-global--spacer--form-element, 0.375rem))) +\n var(--pf-global--spacer--md, 1rem)));--pf-c-jump-links__toggle-icon--Rotate:var(--pf-c-jump-links--m-expanded__toggle-icon--Rotate,\n 90deg);--pf-c-jump-links__toggle-icon--Color:var(--pf-c-jump-links--m-expanded__toggle-icon--Color,\n var(--pf-global--Color--100, #151515));--pf-c-jump-links__toggle-icon--Rotate:90deg}`;
13
- import { PfJumpLinksItem } from './pf-jump-links-item.js';
14
12
  /**
15
- * **Jump links** allow users to navigate to sections within a page.
13
+ * Jump links allow users to navigate to sections within a page.
14
+ *
16
15
  * @fires toggle - when the `expanded` disclosure widget is toggled
17
16
  * @slot - Place pf-jump-links-items here
18
17
  *
@@ -62,13 +61,17 @@ let PfJumpLinks = class PfJumpLinks extends LitElement {
62
61
  constructor() {
63
62
  super(...arguments);
64
63
  _PfJumpLinks_instances.add(this);
64
+ /** Whether the element features a disclosure widget around the nav items */
65
65
  this.expandable = false;
66
+ /** Whether the expandable element's disclosure widget is expanded */
66
67
  this.expanded = false;
68
+ /** Whether the layout of children is vertical or horizontal. */
67
69
  this.vertical = false;
70
+ /** Whether to center children. */
68
71
  this.centered = false;
72
+ /** Offset to add to the scroll position, potentially for a masthead which content scrolls under. */
69
73
  this.offset = 0;
70
- _PfJumpLinks_items.set(this, void 0);
71
- _PfJumpLinks_init.set(this, false);
74
+ _PfJumpLinks_initialized.set(this, false);
72
75
  _PfJumpLinks_rovingTabindexController.set(this, new RovingTabindexController(this));
73
76
  _PfJumpLinks_spy.set(this, new ScrollSpyController(this, {
74
77
  rootMargin: `${this.offset}px 0px 0px 0px`,
@@ -92,23 +95,26 @@ let PfJumpLinks = class PfJumpLinks extends LitElement {
92
95
  <pf-icon icon="chevron-right"></pf-icon>
93
96
  <span id="label">${this.label}</span>
94
97
  </summary>
95
- <slot role="listbox" @slotchange="${__classPrivateFieldGet(this, _PfJumpLinks_instances, "m", _PfJumpLinks_onSlotchange)}"></slot>
98
+ <slot role="listbox" @slotchange="${__classPrivateFieldGet(this, _PfJumpLinks_instances, "m", _PfJumpLinks_updateItems)}"></slot>
96
99
  </details>` : html `
97
100
  <span id="label">${this.label}</span>
98
- <slot role="listbox" @slotchange="${__classPrivateFieldGet(this, _PfJumpLinks_instances, "m", _PfJumpLinks_onSlotchange)}"></slot>`}
101
+ <slot role="listbox" @slotchange="${__classPrivateFieldGet(this, _PfJumpLinks_instances, "m", _PfJumpLinks_updateItems)}"></slot>`}
99
102
  </nav>
100
103
  `;
101
104
  }
102
105
  };
103
- _PfJumpLinks_items = new WeakMap(), _PfJumpLinks_init = new WeakMap(), _PfJumpLinks_rovingTabindexController = new WeakMap(), _PfJumpLinks_spy = new WeakMap(), _PfJumpLinks_instances = new WeakSet(), _PfJumpLinks_onSlotchange = function _PfJumpLinks_onSlotchange() {
104
- __classPrivateFieldSet(this, _PfJumpLinks_items, this._items, "f");
105
- const items = __classPrivateFieldGet(this, _PfJumpLinks_items, "f")?.map(item => item.link);
106
- if (__classPrivateFieldGet(this, _PfJumpLinks_init, "f")) {
106
+ _PfJumpLinks_initialized = new WeakMap(), _PfJumpLinks_rovingTabindexController = new WeakMap(), _PfJumpLinks_spy = new WeakMap(), _PfJumpLinks_instances = new WeakSet(), _PfJumpLinks_updateItems = function _PfJumpLinks_updateItems() {
107
+ const items = Array.from(this.querySelectorAll(':is(pf-jump-links-item, pf-jump-links-list)'))
108
+ .flatMap(i => [
109
+ ...i.shadowRoot?.querySelectorAll('a') ?? [],
110
+ ...i.querySelectorAll('a') ?? [],
111
+ ]);
112
+ if (__classPrivateFieldGet(this, _PfJumpLinks_initialized, "f")) {
107
113
  __classPrivateFieldGet(this, _PfJumpLinks_rovingTabindexController, "f").updateItems(items);
108
114
  }
109
115
  else {
110
116
  __classPrivateFieldGet(this, _PfJumpLinks_rovingTabindexController, "f").initItems(items);
111
- __classPrivateFieldSet(this, _PfJumpLinks_init, true, "f");
117
+ __classPrivateFieldSet(this, _PfJumpLinks_initialized, true, "f");
112
118
  }
113
119
  }, _PfJumpLinks_onSelect = async function _PfJumpLinks_onSelect(event) {
114
120
  __classPrivateFieldGet(this, _PfJumpLinks_spy, "f").setActive(event.target);
@@ -119,9 +125,6 @@ _PfJumpLinks_items = new WeakMap(), _PfJumpLinks_init = new WeakMap(), _PfJumpLi
119
125
  this.dispatchEvent(new Event('toggle'));
120
126
  };
121
127
  PfJumpLinks.styles = [style];
122
- __decorate([
123
- queryAssignedElements()
124
- ], PfJumpLinks.prototype, "_items", void 0);
125
128
  __decorate([
126
129
  property({ reflect: true, type: Boolean })
127
130
  ], PfJumpLinks.prototype, "expandable", void 0);