@brightspot/ui 1.0.1-4 → 1.0.1-wc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +4 -33
  2. package/custom-elements.json +214 -0
  3. package/dist/LucideDynamicLoader.d.ts +5 -0
  4. package/dist/LucideDynamicLoader.d.ts.map +1 -0
  5. package/dist/LucideDynamicLoader.js +2 -1
  6. package/dist/LucideDynamicLoader.js.map +1 -0
  7. package/dist/LucideDynamicLoader.ts +1 -1
  8. package/dist/components/widget/Widget.css +118 -0
  9. package/dist/components/widget/Widget.d.ts +90 -0
  10. package/dist/components/widget/Widget.d.ts.map +1 -0
  11. package/dist/components/widget/Widget.js +195 -0
  12. package/dist/components/widget/Widget.js.map +1 -0
  13. package/dist/components/widget/WidgetUtils.d.ts +14 -0
  14. package/dist/components/widget/WidgetUtils.d.ts.map +1 -0
  15. package/dist/components/widget/WidgetUtils.js +42 -0
  16. package/dist/components/widget/WidgetUtils.js.map +1 -0
  17. package/dist/global.d.ts +14 -0
  18. package/dist/storybook/assets/{Badge.stories-BTUP8EEA.js → Badge.stories-BVaCGD8W.js} +3 -7
  19. package/dist/storybook/assets/{Button.stories-Cr7Qwtjy.js → Button.stories-C0BmUO4_.js} +1 -1
  20. package/dist/storybook/assets/Color-64QXVMR3-zezFbyuS.js +1 -0
  21. package/dist/storybook/assets/{Colors.stories-DTkJ49c0.js → Colors.stories-CYFhcW5P.js} +2 -2
  22. package/dist/storybook/assets/{Heading.stories-DAeD9lW6.js → Heading.stories-8LPqm3WW.js} +1 -1
  23. package/dist/storybook/assets/{Icon.stories-cnRmIS9M.js → Icon.stories-CpupdzrH.js} +1592 -9552
  24. package/dist/storybook/assets/Loader.stories-D0mnY_Z0.js +3 -0
  25. package/dist/storybook/assets/{ScrollShadow.stories-DPlCRYP5.js → ScrollShadow.stories-BB4wF3c9.js} +1 -1
  26. package/dist/storybook/assets/Widget-CRTwFkFc.css +1 -0
  27. package/dist/storybook/assets/Widget.stories-yw3AloF5.js +323 -0
  28. package/dist/storybook/assets/WithTooltip-SK46ZJ2J-bOrMS36j.js +825 -0
  29. package/dist/storybook/assets/formatter-OMEEQ6HG-D2EXmNwo.js +1 -0
  30. package/dist/storybook/assets/iframe-BdHEYpHD.css +1 -0
  31. package/dist/storybook/assets/iframe-C5bTYo4K.js +1077 -0
  32. package/dist/storybook/assets/index-BLdw66Ec.js +1 -0
  33. package/dist/storybook/assets/syntaxhighlighter-CAVLW7PM-yrojVZDo.js +6 -0
  34. package/dist/storybook/iframe.html +4 -4
  35. package/dist/storybook/index.html +2 -13
  36. package/dist/storybook/index.json +1 -1
  37. package/dist/storybook/project.json +1 -1
  38. package/dist/storybook/sb-addons/docs-1/manager-bundle.js +1 -149
  39. package/dist/storybook/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +158 -323
  40. package/dist/storybook/sb-manager/globals-runtime.js +79814 -65954
  41. package/dist/storybook/sb-manager/globals.js +7 -16
  42. package/dist/storybook/sb-manager/runtime.js +15451 -9508
  43. package/dist/storybook/vite-inject-mocker-entry.js +1 -17
  44. package/dist/tailwind-plugin-badge.d.ts +2 -0
  45. package/dist/tailwind-plugin-badge.d.ts.map +1 -0
  46. package/dist/tailwind-plugin-badge.js +4 -3
  47. package/dist/tailwind-plugin-badge.js.map +1 -0
  48. package/dist/tailwind-plugin-badge.ts +4 -4
  49. package/dist/tailwind-plugin-button.d.ts +2 -0
  50. package/dist/tailwind-plugin-button.d.ts.map +1 -0
  51. package/dist/tailwind-plugin-button.js +2 -5
  52. package/dist/tailwind-plugin-button.js.map +1 -0
  53. package/dist/tailwind-plugin-button.ts +8 -21
  54. package/dist/tailwind-plugin-heading.d.ts +2 -0
  55. package/dist/tailwind-plugin-heading.d.ts.map +1 -0
  56. package/dist/tailwind-plugin-heading.js +1 -0
  57. package/dist/tailwind-plugin-heading.js.map +1 -0
  58. package/dist/tailwind-plugin-icon.d.ts +2 -0
  59. package/dist/tailwind-plugin-icon.d.ts.map +1 -0
  60. package/dist/tailwind-plugin-icon.js +6 -5
  61. package/dist/tailwind-plugin-icon.js.map +1 -0
  62. package/dist/tailwind-plugin-icon.ts +14 -23
  63. package/dist/tailwind-plugin-loader.d.ts +2 -0
  64. package/dist/tailwind-plugin-loader.d.ts.map +1 -0
  65. package/dist/tailwind-plugin-loader.js +1 -0
  66. package/dist/tailwind-plugin-loader.js.map +1 -0
  67. package/dist/tailwind-plugin-scroll-shadow.d.ts +2 -0
  68. package/dist/tailwind-plugin-scroll-shadow.d.ts.map +1 -0
  69. package/dist/tailwind-plugin-scroll-shadow.js +16 -1
  70. package/dist/tailwind-plugin-scroll-shadow.js.map +1 -0
  71. package/dist/tailwind-plugin-scroll-shadow.ts +33 -22
  72. package/dist/tailwind-plugin-theme.d.ts +2 -0
  73. package/dist/tailwind-plugin-theme.d.ts.map +1 -0
  74. package/dist/tailwind-plugin-theme.js +2 -3
  75. package/dist/tailwind-plugin-theme.js.map +1 -0
  76. package/dist/tailwind-plugin-theme.ts +4 -15
  77. package/dist/tailwind.config.d.ts +693 -0
  78. package/dist/tailwind.config.d.ts.map +1 -0
  79. package/dist/tailwind.config.js +2 -4
  80. package/dist/tailwind.config.js.map +1 -0
  81. package/dist/tailwind.config.ts +2 -6
  82. package/dist/util/string.d.ts +3 -0
  83. package/dist/util/string.d.ts.map +1 -0
  84. package/dist/util/string.js +2 -1
  85. package/dist/util/string.js.map +1 -0
  86. package/dist/util/svg.d.ts +3 -0
  87. package/dist/util/svg.d.ts.map +1 -0
  88. package/dist/util/svg.js +1 -0
  89. package/dist/util/svg.js.map +1 -0
  90. package/dist/utils/EventEmitterMixin.d.ts +62 -0
  91. package/dist/utils/EventEmitterMixin.d.ts.map +1 -0
  92. package/dist/utils/EventEmitterMixin.js +74 -0
  93. package/dist/utils/EventEmitterMixin.js.map +1 -0
  94. package/package.json +34 -17
  95. package/dist/storybook/assets/Color-AVL7NMMY-FwGGzq-S.js +0 -1
  96. package/dist/storybook/assets/DocsRenderer-PQXLIZUC-czZuJbjz.js +0 -1286
  97. package/dist/storybook/assets/Loader.stories-i7TFXki_.js +0 -7
  98. package/dist/storybook/assets/iframe-CgQYHqh5.css +0 -1
  99. package/dist/storybook/assets/iframe-KLSeZXhG.js +0 -1059
  100. package/dist/storybook/assets/index-Du6pvkZG.js +0 -1
  101. package/dist/storybook/sb-manager/globals-module-info.js +0 -797
@@ -0,0 +1,3 @@
1
+ import{x as r}from"./iframe-C5bTYo4K.js";import"./preload-helper-PPVm8Dsz.js";const o=()=>r` <div class=${["before:btu-loader","before:size-[--Loader-size]"].join(" ")}></div> `,d={title:"Components/Loader",component:"btu-loader",tags:["autodocs"],parameters:{docs:{subtitle:`To avoid changing the markup, btu-loaders work by assigning the "--tw-content" property of a pseudo element the SVG data as a URI for it's background image. Loaders come with light & dark styles and are extrinsically sized. If you need to reference the default loader size for your container, you can do so with: var(--Loader-size)`},controls:{expanded:!0}},render:a=>o(),argTypes:{},args:{}},e={args:{}};e.parameters={...e.parameters,docs:{...e.parameters?.docs,source:{originalSource:`{
2
+ args: {}
3
+ }`,...e.parameters?.docs?.source}}};const n=["Default"];export{e as Default,n as __namedExportsOrder,d as default};
@@ -1,4 +1,4 @@
1
- import{x as a}from"./iframe-KLSeZXhG.js";import"./preload-helper-PPVm8Dsz.js";const l=({theme:e="btu-scrollshadow-25"})=>{const r=new Array(100).fill(0).map((s,t)=>`Item ${t+1}`);return a`
1
+ import{x as a}from"./iframe-C5bTYo4K.js";import"./preload-helper-PPVm8Dsz.js";const l=({theme:e="btu-scrollshadow-25"})=>{const r=new Array(100).fill(0).map((s,t)=>`Item ${t+1}`);return a`
2
2
  <style>
3
3
  :root {
4
4
  --can-scroll: ;
@@ -0,0 +1 @@
1
+ .Widget{--Widget-padding: var(--gap-l);--space: 1.5rem;grid-template-columns:[fullbleed-start] var(--space) [content-start] 1fr auto [content-end] var(--space) [fullbleed-end]}.Widget>*:not(.ContentEdit-preview){grid-column:content-start / content-end}.Widget-title .Label{display:inline-flex}.Widget-controls.is-locked{display:none!important}.Widget:not(.is-collapsible):has(.Widget-controls:not(:empty))>.Widget-title{padding-inline-end:.5rem;grid-column:fullbleed-start / span 2}.Widget:not(.is-collapsible) .Widget-controls{padding-inline-end:var(--space);grid-column:span 2 / fullbleed-end;grid-row:1}.Admin-main .Widget:not(.is-collapsible) .Widget-controls:has(>button:not(.FormFilter-icon)){margin-top:-3.35rem;background-color:var(--btu-theme-white)}.Widget-actionsToggle{--button-bg-gradient: none;--button-color: ;--button-text-color: ;--button-pressed: initial;--button-fill-none: initial;--button-padding-xs: .25rem .5rem;--button-padding-sm: .5rem .875rem;--button-padding-md: .625rem 1rem;--button-padding-lg: .625rem 1.125rem;--button-padding-xl: .75rem 1.25rem;--button-padding-2xl: 1rem 1.75rem;--button-font-size: .875rem;--button-line-height: 1.25rem;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;background:var(--button-bg-gradient),var(--button-pressed-color, var(--button-disabled-color, var(--button-color)));border-radius:var(--button-border-radius, .5rem);color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)));padding:var(--button-padding-sm);font-size:var(--button-font-size);line-height:var(--button-line-height);font-weight:600;position:relative;height:var(--button-size-sm, auto);width:var(--button-size-sm, auto)}.Widget-actionsToggle[aria-pressed=true]{--button-pressed: }.Widget-actionsToggle:disabled{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-actionsToggle[disabled]{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-actionsToggle{text-decoration:none}.Widget-actionsToggle:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-actionsToggle:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-actionsToggle{--button-padding-xs: .25rem;--button-padding-sm: .5rem;--button-padding-md: .625rem;--button-padding-lg: .75rem;--button-padding-xl: .875rem;--button-padding-2xl: 1rem;--button-icon-font-size: 0px;--button-icon-line-height: 1;--button-font-size: var(--button-icon-font-size);--button-line-height: var(--button-icon-line-height);--button-size-xs: 1.75rem;--button-size-sm: 2.25rem;--button-size-md: 2.5rem;--button-size-lg: 2.75rem;--button-size-xl: 3rem;--button-size-2xl: 3.5rem;overflow:hidden;gap:0;--button-fill-none: ;background-color:var(--button-pressed-color, var(--button-fill-none-color));color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-fill-none-text-color)))}.Widget-actionsToggle{--button-bg-gradient: var(--button-fill-none, none);--button-color: oklch(var(--btu-theme-gray-100));--button-text-color: oklch(var(--btu-theme-gray-700));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--button-outline-color: oklch(var(--btu-theme-gray-300));--button-disabled-color-fill: oklch(var(--btu-theme-gray-100));--button-disabled-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-white));--button-disabled-text-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-gray-400));--button-pressed-color: var(--button-pressed) var(--button-disabled-color, oklch(var(--btu-theme-primary-50)));--button-pressed-text-color: var(--button-pressed) var(--button-disabled-text-color, oklch(var(--btu-theme-primary-800)))}.Widget-actionsToggle:hover{--button-color: oklch(var(--btu-theme-gray-200));--button-fill-none-color: oklch(var(--btu-theme-gray-200));--button-fill-none-text-color: oklch(var(--btu-theme-gray-900))}.Widget-actionsToggle:focus{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-actionsToggle.is-focused{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-actionsToggle{font-size:var(--button-icon-font-size, .875rem);line-height:var(--button-icon-line-height, 1.25rem);padding:var(--button-padding-sm);width:var(--button-size-sm, auto);height:var(--button-size-sm, auto)}.Widget-actionsToggle:before{font-family:lucide;direction:ltr;display:inline-flex;font-feature-settings:"liga" 0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:var(--Icon-size);font-style:normal;font-weight:400;letter-spacing:normal;line-height:var(--Icon-size);text-transform:none;white-space:nowrap;word-wrap:normal;vertical-align:top;--tw-content: "";content:var(--tw-content);--Icon-size: 1.25rem}.Widget-actionsList{z-index:10000}.Widget-actions.is-open .Widget-actionsToggle{--button-pressed: }.Widget :is(.widget-urls.is-readOnly,.widget-urlsRepeatable.is-readOnly,.ContentEditSites-owner.is-readOnly,.ContentEditSites-access.is-readOnly){pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.75}.Widget .is-readOnly .UrlsWidget-itemLabel a,.widget .is-readOnly .RCIG-title:after,.widget .is-readOnly .ContentSummary-info,.widget .is-readOnly .ContentSelector-edit{pointer-events:auto;cursor:pointer}.Widget.is-collapsible .Widget-title:has(.Widget-expand:focus-visible){--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000);--tw-ring-inset: inset;--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-600) / var(--tw-ring-opacity, 1));--tw-ring-offset-width: 4px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-100) / 1)}.Widget-heading{padding-top:.5rem;padding-bottom:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:oklch(var(--btu-theme-gray-900) / var(--tw-text-opacity, 1))}.Widget-restoreButton{--button-bg-gradient: none;--button-color: ;--button-text-color: ;--button-pressed: initial;--button-fill-none: initial;--button-padding-xs: .25rem .5rem;--button-padding-sm: .5rem .875rem;--button-padding-md: .625rem 1rem;--button-padding-lg: .625rem 1.125rem;--button-padding-xl: .75rem 1.25rem;--button-padding-2xl: 1rem 1.75rem;--button-font-size: .875rem;--button-line-height: 1.25rem;display:inline-flex;cursor:pointer;align-items:center;justify-content:center;gap:.5rem;background:var(--button-bg-gradient),var(--button-pressed-color, var(--button-disabled-color, var(--button-color)));border-radius:var(--button-border-radius, .5rem);color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)));padding:var(--button-padding-sm);font-size:var(--button-font-size);line-height:var(--button-line-height);font-weight:600;position:relative;height:var(--button-size-sm, auto);width:var(--button-size-sm, auto)}.Widget-restoreButton[aria-pressed=true]{--button-pressed: }.Widget-restoreButton:disabled{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-restoreButton[disabled]{--button-bg-gradient: none;--button-disabled-color: var(--button-disabled-color-fill-none, var(--button-disabled-color-fill, oklch(var(--btu-theme-gray-100))));--button-disabled-text-color: var(--button-disabled-text-color-fill-none, var(--button-text-color, oklch(var(--btu-theme-gray-400))));pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.Widget-restoreButton{text-decoration:none}.Widget-restoreButton:focus{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-restoreButton:hover{color:var(--button-pressed-text-color, var(--button-disabled-text-color, var(--button-text-color)))}.Widget-restoreButton{--button-padding-xs: .25rem;--button-padding-sm: .5rem;--button-padding-md: .625rem;--button-padding-lg: .75rem;--button-padding-xl: .875rem;--button-padding-2xl: 1rem;--button-icon-font-size: 0px;--button-icon-line-height: 1;--button-font-size: var(--button-icon-font-size);--button-line-height: var(--button-icon-line-height);--button-size-xs: 1.75rem;--button-size-sm: 2.25rem;--button-size-md: 2.5rem;--button-size-lg: 2.75rem;--button-size-xl: 3rem;--button-size-2xl: 3.5rem;overflow:hidden;gap:0;--button-bg-gradient: var(--button-fill-none, none);--button-color: oklch(var(--btu-theme-gray-100));--button-text-color: oklch(var(--btu-theme-gray-700));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--button-outline-color: oklch(var(--btu-theme-gray-300));--button-disabled-color-fill: oklch(var(--btu-theme-gray-100));--button-disabled-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-white));--button-disabled-text-color-fill-none: var(--button-fill-none) oklch(var(--btu-theme-gray-400));--button-pressed-color: var(--button-pressed) var(--button-disabled-color, oklch(var(--btu-theme-primary-50)));--button-pressed-text-color: var(--button-pressed) var(--button-disabled-text-color, oklch(var(--btu-theme-primary-800)))}.Widget-restoreButton:hover{--button-color: oklch(var(--btu-theme-gray-200));--button-fill-none-color: oklch(var(--btu-theme-gray-200));--button-fill-none-text-color: oklch(var(--btu-theme-gray-900))}.Widget-restoreButton:focus{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-restoreButton.is-focused{--button-color: oklch(var(--btu-theme-gray-100));--button-fill-none-color: transparent;--button-fill-none-text-color: oklch(var(--btu-theme-gray-700));--tw-ring-opacity: 1;--tw-ring-color: oklch(var(--btu-theme-primary-100));--tw-ring-offset-width: 1px;--tw-ring-offset-color: oklch(var(--btu-theme-primary-800))}.Widget-restoreButton:before{font-family:lucide;direction:ltr;display:inline-flex;font-feature-settings:"liga" 0;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:var(--Icon-size);font-style:normal;font-weight:400;letter-spacing:normal;line-height:var(--Icon-size);text-transform:none;white-space:nowrap;word-wrap:normal;vertical-align:top;--tw-content: "";content:var(--tw-content);--Icon-size: 1.25rem}.Widget-filters,.Widget-filter{display:flex;align-items:center;justify-content:space-between}.Widget-filters{position:relative;padding-top:.75rem}.Widget-filters:before{position:absolute;inset:-.75rem -1rem;border-bottom-width:1px;--tw-border-opacity: 1;border-bottom-color:oklch(var(--btu-theme-gray-200) / var(--tw-border-opacity, 1));content:var(--tw-content);--tw-bg-opacity: 1;background-color:oklch(var(--btu-theme-gray-50) / var(--tw-bg-opacity, 1))}.Widget-filter{z-index:0;flex-direction:row-reverse}.Widget-filterLabel{font-size:.875rem;line-height:1.25rem;font-weight:500}.Widget.is-collapsed>div,.Widget.is-collapsed>table{display:none}
@@ -0,0 +1,323 @@
1
+ import{f as E,u as C,x as g,i as $,g as S}from"./iframe-C5bTYo4K.js";import"./preload-helper-PPVm8Dsz.js";const T=e=>(t,i)=>{i!==void 0?i.addInitializer((()=>{customElements.define(e,t)})):customElements.define(e,t)};const M={attribute:!0,type:String,converter:C,reflect:!1,hasChanged:E},W=(e=M,t,i)=>{const{kind:n,metadata:s}=i;let a=globalThis.litPropertyMetadata.get(s);if(a===void 0&&globalThis.litPropertyMetadata.set(s,a=new Map),n==="setter"&&((e=Object.create(e)).wrapped=!0),a.set(i.name,e),n==="accessor"){const{name:r}=i;return{set(l){const d=t.get.call(this);t.set.call(this,l),this.requestUpdate(r,d,e)},init(l){return l!==void 0&&this.C(r,void 0,e,l),l}}}if(n==="setter"){const{name:r}=i;return function(l){const d=this[r];t.call(this,l),this.requestUpdate(r,d,e)}}throw Error("Unsupported decorator location: "+n)};function p(e){return(t,i)=>typeof i=="object"?W(e,t,i):((n,s,a)=>{const r=s.hasOwnProperty(a);return s.constructor.createProperty(a,n),r?Object.getOwnPropertyDescriptor(s,a):void 0})(e,t,i)}function I(e){return p({...e,state:!0,attribute:!1})}const L=e=>{class t extends e{connectedCallback(){super.connectedCallback(),Promise.resolve().then(()=>this.emit("btu-brightspot-element-connected",{}),n=>this.emit("btu-brightspot-element-error",{error:n}))}disconnectedCallback(){super.disconnectedCallback(),this.emit("btu-brightspot-element-disconnected")}emit(n,s){return this.dispatchEvent(new CustomEvent(n,{bubbles:!0,cancelable:!1,composed:!0,detail:s}))}}return t};function v(e,t){const i=e.closest(".ContentEdit")||e.closest("btu-widget");if(!i)return null;let n,s;if(i.classList.contains("ContentEdit")){if(n=i.getAttribute("data-type-id"),s=e.getAttribute(t),!n||!s)return null}else if(i instanceof HTMLElement&&(n=i.getAttribute("widgetid"),s=i.getAttribute("internalname"),!n||!s))return null;return n&&s?`BSP.ContentEdit.widgetCollapsed.${n}.${s}`:null}function O(e){return function(...t){if(t[0]instanceof KeyboardEvent){const i=t[0];!i.ctrlKey&&!i.shiftKey&&!i.altKey&&!i.metaKey&&e.apply(i.target,t)}}}var k=Object.defineProperty,D=Object.getOwnPropertyDescriptor,c=(e,t,i,n)=>{for(var s=n>1?void 0:n?D(t,i):t,a=e.length-1,r;a>=0;a--)(r=e[a])&&(s=(n?r(t,i,s):r(s))||s);return n&&s&&k(t,i,s),s};const y=window.localStorage,f=window.BRIGHTSPOT?.ui?.tooltips?.collapse||"Collapse",x=window.BRIGHTSPOT?.ui?.tooltips?.expand||"Expand";let o=class extends L($){constructor(){super(...arguments),this._collapsed=!1,this.collapsible=!1,this.invalid=!1}set collapsed(e){this._collapsed=e;const t=v(this,"data-internal-name");t&&(e?y.setItem(t,"1"):y.removeItem(t)),this.requestUpdate(),this.emit("btu-widget-toggle")}get collapsed(){return this._collapsed}connectedCallback(){super.connectedCallback();const e=v(this,"data-internal-name");this.collapsed=!!(e&&y.getItem(e))}createRenderRoot(){return this}firstUpdated(){this.emit("btu-widget-ready"),this.invalid=this.querySelector(".Message.is-error")!=null,(!this.collapsible||this.invalid)&&(this.collapsed=!1);const e=this.querySelector(".Widget-title"),t=this.firstChild;t instanceof Element&&!t.classList.contains("Widget-title")&&e&&this.insertBefore(e,t),this.querySelectorAll(":scope > :not(.Widget-title, script, select)").forEach(i=>{i.toggleAttribute("hidden",this.collapsed&&!this.invalid)})}_collapsibleTemplate(){return g`<h2
2
+ class="Widget-title ${this.invalid?"text-error-600":""} btu-heading-5 sticky top-0 z-10 cursor-pointer overflow-x-clip text-ellipsis whitespace-nowrap border-b border-b-gray-200 bg-white px-[--space] py-3.5 text-gray-900 [grid-column:fullbleed-start_/_fullbleed-end] hover:bg-gray-100 focus:ring-0"
3
+ @click="${()=>this.collapsed=!this.collapsed}"
4
+ >
5
+ <div
6
+ class="Widget-expand ${this.invalid?"after:btu-icon after:btu-icon-circle-alert after:text-error-600":""} relative inline-flex w-full items-center gap-2 focus:ring-0"
7
+ role="button"
8
+ tabindex="0"
9
+ aria-expanded=${!this.collapsed}
10
+ title=${this.collapsed?x:f}
11
+ @keydown=${O(e=>{e instanceof KeyboardEvent&&(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.collapsed=!this.collapsed)})}
12
+ >
13
+ ${this.heading}
14
+ <ul
15
+ class="Widget-controls sticky top-0 z-[11] order-2 ms-auto flex items-center gap-2 border-b-0 border-b-gray-200 bg-inherit empty:hidden"
16
+ aria-hidden="true"
17
+ >
18
+ <li
19
+ class="Widget-collapse btu-button btu-button-text-hidden btu-button-fill-none btu-button-gray btu-button-sm before:btu-icon before:btu-icon-chevron-up ${this.collapsed?"before:rotate-180":""} before:transition-transform"
20
+ title="${this.collapsed?x:f}"
21
+ ></li>
22
+ </ul>
23
+ </div>
24
+ </h2>`}render(){return this.classList.add("widget","Widget","relative","grid","bg-white"),this.classList.toggle("is-collapsible",this.collapsible),this.classList.toggle("is-collapsed",this.collapsed),this.collapsed&&this.classList.add("overflow-clip","border-b-0","pb-0"),this.classList.toggle("is-error",this.invalid),this.querySelectorAll(":scope > :not(.Widget-title, script, select)").forEach(e=>{e.toggleAttribute("hidden",this.collapsed)}),this.collapsible?(this.classList.add("h-[min-content]"),this._collapsibleTemplate()):g`<h2 class="Widget-title ${this.invalid?"text-error-600":""}">${this.heading}</h2>`}};c([p({type:Boolean})],o.prototype,"collapsible",2);c([p({type:String})],o.prototype,"heading",2);c([p({type:String})],o.prototype,"internalname",2);c([I()],o.prototype,"invalid",2);c([p({type:String})],o.prototype,"widgetid",2);c([p({type:Boolean})],o.prototype,"collapsed",1);o=c([T("btu-widget")],o);const{events:P,args:_,argTypes:B,template:q}=S("btu-widget"),N={title:"Components/Widget",component:"btu-widget",tags:["autodocs"],parameters:{actions:{handles:P}},args:{..._,heading:"Widget Title",internalname:"example",widgetid:"demo"},argTypes:B,render:e=>q(e,g`
25
+ <div class="p-6">
26
+ <p class="text-gray-700">This is the widget content. It can contain any HTML elements.</p>
27
+ </div>
28
+ `)},u={args:{},parameters:{docs:{description:{story:"Basic widget with a title. Non-collapsible by default, displays content statically."}}}},b={args:{collapsible:!0,heading:"Collapsible Widget"},parameters:{docs:{description:{story:"Collapsible widget with expand/collapse button. Click the title or press Enter/Space on the expand button to toggle. State persists in localStorage."}}}},m={args:{collapsible:!0,heading:"Widget with Error",internalname:"errorWidget",widgetid:"error-001"},render:e=>g`
29
+ <btu-widget
30
+ ?collapsible=${e.collapsible}
31
+ .heading=${e.heading}
32
+ .internalname=${e.internalname}
33
+ .widgetid=${e.widgetid}
34
+ >
35
+ <div class="space-y-4 p-6">
36
+ <div class="Message is-error bg-error-50 border-error-200 rounded border p-4">
37
+ <p class="text-error-700 font-medium">Error: This field is required</p>
38
+ </div>
39
+ <div>
40
+ <label class="mb-1 block text-sm font-medium text-gray-700">Required Field</label>
41
+ <input
42
+ type="text"
43
+ class="border-error-600 focus:ring-error focus:border-error w-full rounded border px-3 py-2 focus:ring-2"
44
+ />
45
+ </div>
46
+ </div>
47
+ </btu-widget>
48
+ `,parameters:{docs:{description:{story:"Widget automatically expands when it contains error messages (elements with `.Message.is-error` class). The title text turns red and displays an error icon."}}}},h={args:{collapsible:!0,heading:"Publishing Tools"},render:()=>g`
49
+ <div class="space-y-4">
50
+ <btu-widget collapsible heading="Metadata" internalname="metadata" widgetid="pub-001">
51
+ <div class="p-6">
52
+ <p class="text-gray-700">Edit page metadata and SEO settings.</p>
53
+ </div>
54
+ </btu-widget>
55
+
56
+ <btu-widget collapsible heading="Tags & Categories" internalname="tags" widgetid="pub-002">
57
+ <div class="p-6">
58
+ <p class="text-gray-700">Manage content tags and categories.</p>
59
+ </div>
60
+ </btu-widget>
61
+
62
+ <btu-widget collapsible heading="Scheduling" internalname="scheduling" widgetid="pub-003">
63
+ <div class="p-6">
64
+ <p class="text-gray-700">Set publish date and expiration settings.</p>
65
+ </div>
66
+ </btu-widget>
67
+
68
+ <btu-widget collapsible heading="Permissions" internalname="permissions" widgetid="pub-004">
69
+ <div class="p-6">
70
+ <p class="text-gray-700">Configure access control and permissions.</p>
71
+ </div>
72
+ </btu-widget>
73
+ </div>
74
+ `,parameters:{docs:{description:{story:"Multiple collapsible widgets stacked vertically, simulating a right rail or sidebar layout. Each widget maintains independent collapse state."}}}},w={args:{collapsible:!0,heading:"Widget with Event Monitoring",internalname:"eventDemo",widgetid:"events-001"},render:e=>{const t=`widget-${Math.random().toString(36).substr(2,9)}`,i=`log-${t}`,n=(s,a)=>{const r=document.getElementById(i);if(!r)return;const l=new Date().toLocaleTimeString(),d=document.createElement("div");for(d.className="border-l-4 border-primary-500 bg-primary-50 px-4 py-2 mb-2",d.innerHTML=`
75
+ <div class="flex items-center justify-between">
76
+ <span class="font-semibold text-primary-900">${s}</span>
77
+ <span class="text-xs text-primary-700">${l}</span>
78
+ </div>
79
+ ${a?`<pre class="text-xs text-primary-800 mt-1">${JSON.stringify(a,null,2)}</pre>`:""}
80
+ `,r.insertBefore(d,r.firstChild);r.children.length>10;)r.removeChild(r.lastChild)};return setTimeout(()=>{const s=document.getElementById(t);s&&(s.addEventListener("btu-widget-ready",(a=>{n("btu-widget-ready",{timestamp:new Date().toISOString()})})),s.addEventListener("btu-widget-toggle",(a=>{const r=a.target;n("btu-widget-toggle",{collapsed:r.collapsed,timestamp:new Date().toISOString()})})))},0),g`
81
+ <div class="space-y-4">
82
+ <div class="rounded-lg border border-gray-200 bg-gray-50 p-4">
83
+ <h3 class="mb-2 text-sm font-semibold text-gray-900">Event Log</h3>
84
+ <p class="mb-3 text-xs text-gray-600">
85
+ Events emitted by the widget will appear here in real-time. Try collapsing/expanding the widget below.
86
+ </p>
87
+ <div id="${i}" class="max-h-96 space-y-2 overflow-y-auto"></div>
88
+ <div class="mt-3 text-xs text-gray-500">
89
+ <strong>Events:</strong>
90
+ <ul class="ml-2 mt-1 list-inside list-disc">
91
+ <li><code>btu-widget-ready</code> - Fired after widget first render</li>
92
+ <li><code>btu-widget-toggle</code> - Fired when collapse state changes</li>
93
+ </ul>
94
+ </div>
95
+ </div>
96
+
97
+ <btu-widget
98
+ id="${t}"
99
+ ?collapsible=${e.collapsible}
100
+ .heading=${e.heading}
101
+ .internalname=${e.internalname}
102
+ .widgetid=${e.widgetid}
103
+ >
104
+ <div class="p-6">
105
+ <p class="mb-4 text-gray-700">
106
+ This widget demonstrates event emission. Open the browser console to see all events, or watch the event
107
+ log above.
108
+ </p>
109
+ <div class="rounded border border-blue-200 bg-blue-50 p-3">
110
+ <p class="text-sm text-blue-900">
111
+ <strong>Try this:</strong> Click the collapse/expand button multiple times and watch the
112
+ <code class="rounded bg-blue-100 px-1">btu-widget-toggle</code>
113
+ events appear in the log above.
114
+ </p>
115
+ </div>
116
+ </div>
117
+ </btu-widget>
118
+ </div>
119
+ `},parameters:{docs:{description:{story:`
120
+ Widget event emission demonstration. The widget emits two custom events:
121
+
122
+ - **btu-widget-ready**: Fired once after the widget's first render and initialization
123
+ - **btu-widget-toggle**: Fired whenever the collapse state changes (only for collapsible widgets)
124
+
125
+ All events bubble up through the DOM and can be listened to on the widget element or any parent element.
126
+ `}}}};u.parameters={...u.parameters,docs:{...u.parameters?.docs,source:{originalSource:`{
127
+ args: {},
128
+ parameters: {
129
+ docs: {
130
+ description: {
131
+ story: 'Basic widget with a title. Non-collapsible by default, displays content statically.'
132
+ }
133
+ }
134
+ }
135
+ }`,...u.parameters?.docs?.source}}};b.parameters={...b.parameters,docs:{...b.parameters?.docs,source:{originalSource:`{
136
+ args: {
137
+ collapsible: true,
138
+ heading: 'Collapsible Widget'
139
+ },
140
+ parameters: {
141
+ docs: {
142
+ description: {
143
+ story: 'Collapsible widget with expand/collapse button. Click the title or press Enter/Space on the expand button to toggle. State persists in localStorage.'
144
+ }
145
+ }
146
+ }
147
+ }`,...b.parameters?.docs?.source}}};m.parameters={...m.parameters,docs:{...m.parameters?.docs,source:{originalSource:`{
148
+ args: {
149
+ collapsible: true,
150
+ heading: 'Widget with Error',
151
+ internalname: 'errorWidget',
152
+ widgetid: 'error-001'
153
+ },
154
+ render: args => html\`
155
+ <btu-widget
156
+ ?collapsible=\${args.collapsible}
157
+ .heading=\${args.heading}
158
+ .internalname=\${args.internalname}
159
+ .widgetid=\${args.widgetid}
160
+ >
161
+ <div class="space-y-4 p-6">
162
+ <div class="Message is-error bg-error-50 border-error-200 rounded border p-4">
163
+ <p class="text-error-700 font-medium">Error: This field is required</p>
164
+ </div>
165
+ <div>
166
+ <label class="mb-1 block text-sm font-medium text-gray-700">Required Field</label>
167
+ <input
168
+ type="text"
169
+ class="border-error-600 focus:ring-error focus:border-error w-full rounded border px-3 py-2 focus:ring-2"
170
+ />
171
+ </div>
172
+ </div>
173
+ </btu-widget>
174
+ \`,
175
+ parameters: {
176
+ docs: {
177
+ description: {
178
+ story: 'Widget automatically expands when it contains error messages (elements with \`.Message.is-error\` class). The title text turns red and displays an error icon.'
179
+ }
180
+ }
181
+ }
182
+ }`,...m.parameters?.docs?.source}}};h.parameters={...h.parameters,docs:{...h.parameters?.docs,source:{originalSource:`{
183
+ args: {
184
+ collapsible: true,
185
+ heading: 'Publishing Tools'
186
+ },
187
+ render: () => html\`
188
+ <div class="space-y-4">
189
+ <btu-widget collapsible heading="Metadata" internalname="metadata" widgetid="pub-001">
190
+ <div class="p-6">
191
+ <p class="text-gray-700">Edit page metadata and SEO settings.</p>
192
+ </div>
193
+ </btu-widget>
194
+
195
+ <btu-widget collapsible heading="Tags & Categories" internalname="tags" widgetid="pub-002">
196
+ <div class="p-6">
197
+ <p class="text-gray-700">Manage content tags and categories.</p>
198
+ </div>
199
+ </btu-widget>
200
+
201
+ <btu-widget collapsible heading="Scheduling" internalname="scheduling" widgetid="pub-003">
202
+ <div class="p-6">
203
+ <p class="text-gray-700">Set publish date and expiration settings.</p>
204
+ </div>
205
+ </btu-widget>
206
+
207
+ <btu-widget collapsible heading="Permissions" internalname="permissions" widgetid="pub-004">
208
+ <div class="p-6">
209
+ <p class="text-gray-700">Configure access control and permissions.</p>
210
+ </div>
211
+ </btu-widget>
212
+ </div>
213
+ \`,
214
+ parameters: {
215
+ docs: {
216
+ description: {
217
+ story: 'Multiple collapsible widgets stacked vertically, simulating a right rail or sidebar layout. Each widget maintains independent collapse state.'
218
+ }
219
+ }
220
+ }
221
+ }`,...h.parameters?.docs?.source}}};w.parameters={...w.parameters,docs:{...w.parameters?.docs,source:{originalSource:`{
222
+ args: {
223
+ collapsible: true,
224
+ heading: 'Widget with Event Monitoring',
225
+ internalname: 'eventDemo',
226
+ widgetid: 'events-001'
227
+ },
228
+ render: args => {
229
+ // Create a unique ID for this story instance
230
+ const widgetId = \`widget-\${Math.random().toString(36).substr(2, 9)}\`;
231
+ const logId = \`log-\${widgetId}\`;
232
+ const addLogEntry = (eventName: string, detail?: any) => {
233
+ const logContainer = document.getElementById(logId);
234
+ if (!logContainer) return;
235
+ const timestamp = new Date().toLocaleTimeString();
236
+ const entry = document.createElement('div');
237
+ entry.className = 'border-l-4 border-primary-500 bg-primary-50 px-4 py-2 mb-2';
238
+ entry.innerHTML = \`
239
+ <div class="flex items-center justify-between">
240
+ <span class="font-semibold text-primary-900">\${eventName}</span>
241
+ <span class="text-xs text-primary-700">\${timestamp}</span>
242
+ </div>
243
+ \${detail ? \`<pre class="text-xs text-primary-800 mt-1">\${JSON.stringify(detail, null, 2)}</pre>\` : ''}
244
+ \`;
245
+ logContainer.insertBefore(entry, logContainer.firstChild);
246
+
247
+ // Keep only last 10 entries
248
+ while (logContainer.children.length > 10) {
249
+ logContainer.removeChild(logContainer.lastChild!);
250
+ }
251
+ };
252
+ setTimeout(() => {
253
+ const widget = document.getElementById(widgetId);
254
+ if (!widget) return;
255
+ widget.addEventListener('btu-widget-ready', ((e: CustomEvent) => {
256
+ addLogEntry('btu-widget-ready', {
257
+ timestamp: new Date().toISOString()
258
+ });
259
+ }) as EventListener);
260
+ widget.addEventListener('btu-widget-toggle', ((e: CustomEvent) => {
261
+ const widgetElement = e.target as any;
262
+ addLogEntry('btu-widget-toggle', {
263
+ collapsed: widgetElement.collapsed,
264
+ timestamp: new Date().toISOString()
265
+ });
266
+ }) as EventListener);
267
+ }, 0);
268
+ return html\`
269
+ <div class="space-y-4">
270
+ <div class="rounded-lg border border-gray-200 bg-gray-50 p-4">
271
+ <h3 class="mb-2 text-sm font-semibold text-gray-900">Event Log</h3>
272
+ <p class="mb-3 text-xs text-gray-600">
273
+ Events emitted by the widget will appear here in real-time. Try collapsing/expanding the widget below.
274
+ </p>
275
+ <div id="\${logId}" class="max-h-96 space-y-2 overflow-y-auto"></div>
276
+ <div class="mt-3 text-xs text-gray-500">
277
+ <strong>Events:</strong>
278
+ <ul class="ml-2 mt-1 list-inside list-disc">
279
+ <li><code>btu-widget-ready</code> - Fired after widget first render</li>
280
+ <li><code>btu-widget-toggle</code> - Fired when collapse state changes</li>
281
+ </ul>
282
+ </div>
283
+ </div>
284
+
285
+ <btu-widget
286
+ id="\${widgetId}"
287
+ ?collapsible=\${args.collapsible}
288
+ .heading=\${args.heading}
289
+ .internalname=\${args.internalname}
290
+ .widgetid=\${args.widgetid}
291
+ >
292
+ <div class="p-6">
293
+ <p class="mb-4 text-gray-700">
294
+ This widget demonstrates event emission. Open the browser console to see all events, or watch the event
295
+ log above.
296
+ </p>
297
+ <div class="rounded border border-blue-200 bg-blue-50 p-3">
298
+ <p class="text-sm text-blue-900">
299
+ <strong>Try this:</strong> Click the collapse/expand button multiple times and watch the
300
+ <code class="rounded bg-blue-100 px-1">btu-widget-toggle</code>
301
+ events appear in the log above.
302
+ </p>
303
+ </div>
304
+ </div>
305
+ </btu-widget>
306
+ </div>
307
+ \`;
308
+ },
309
+ parameters: {
310
+ docs: {
311
+ description: {
312
+ story: \`
313
+ Widget event emission demonstration. The widget emits two custom events:
314
+
315
+ - **btu-widget-ready**: Fired once after the widget's first render and initialization
316
+ - **btu-widget-toggle**: Fired whenever the collapse state changes (only for collapsible widgets)
317
+
318
+ All events bubble up through the DOM and can be listened to on the widget element or any parent element.
319
+ \`
320
+ }
321
+ }
322
+ }
323
+ }`,...w.parameters?.docs?.source}}};const K=["Default","Collapsible","WithErrorMessage","MultipleWidgets","EventEmission"];export{b as Collapsible,u as Default,w as EventEmission,h as MultipleWidgets,m as WithErrorMessage,K as __namedExportsOrder,N as default};