@novu/js 3.16.0 → 3.17.0

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.
@@ -1,4 +1,4 @@
1
- import { Novu, isSameFilter, isBrowser, DEFAULT_API_VERSION, checkNotificationTagFilter, checkNotificationDataFilter } from '../chunk-FBE56J52.mjs';
1
+ import { Novu, isSameFilter, isBrowser, DEFAULT_API_VERSION, checkNotificationTagFilter, checkNotificationDataFilter } from '../chunk-BKA3HRZM.mjs';
2
2
  import { buildSubscriptionIdentifier, parseMarkdownIntoTokens } from '../chunk-4S22IB5W.mjs';
3
3
  import { __spreadProps, __spreadValues, __privateAdd, __privateMethod, __privateSet, __privateGet, __objRest, __async } from '../chunk-STZMOEWR.mjs';
4
4
  import { delegateEvents, createComponent, mergeProps, render, Portal as Portal$1, insert, effect, className, memo, spread, template, Dynamic, use, setAttribute } from 'solid-js/web';
@@ -12,7 +12,7 @@ import { autoUpdate, offset, flip, shift } from '@floating-ui/dom';
12
12
  import { useFloating } from 'solid-floating-ui';
13
13
  import { Motion as Motion$1, Presence } from 'solid-motionone';
14
14
 
15
- // _qj8zj3k96:/home/runner/_work/novu/novu/packages/js/src/ui/index.directcss
15
+ // _gq6z8z4nv:/home/runner/work/novu/novu/packages/js/src/ui/index.directcss
16
16
  var ui_default = `.novu{scrollbar-color:var(--nv-color-secondary-foreground-alpha-300) #0000;:where(*),:where(*) :after,:where(*) :before,:where(*):after,:where(*):before{border:0 solid #e5e7eb;box-sizing:border-box}:where(html,:host){line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;tab-size:4;-webkit-tap-highlight-color:transparent}:where(body){line-height:inherit;margin:0}:where(hr){border-top-width:1px;color:inherit;height:0}:where(abbr:where([title])){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(h1,h2,h3,h4,h5,h6){font-size:inherit;font-weight:inherit}:where(a){color:inherit;text-decoration:inherit}:where(b,strong){font-weight:bolder}:where(code,kbd,samp,pre){font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}:where(small){font-size:80%}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:initial}:where(sub){bottom:-.25em}:where(sup){top:-.5em}:where(table){border-collapse:collapse;border-color:inherit;text-indent:0}:where(button,input,optgroup,select,textarea){color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}:where(button,select){text-transform:none}:where(button,input:where([type=button]),input:where([type=reset]),input:where([type=submit])){-webkit-appearance:button;background-color:initial;background-image:none}:where(:-moz-focusring){outline:auto}:where(:-moz-ui-invalid){box-shadow:none}:where(progress){vertical-align:initial}:where(*)::-webkit-inner-spin-button,:where(*)::-webkit-outer-spin-button{height:auto}:where([type=search]){-webkit-appearance:textfield;outline-offset:-2px}:where(*)::-webkit-search-decoration{-webkit-appearance:none}:where(*)::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(summary){display:list-item}:where(blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre){margin:0}:where(fieldset){margin:0;padding:0}:where(legend){padding:0}:where(ol,ul,menu){list-style:none;margin:0;padding:0}:where(dialog){padding:0}:where(textarea){resize:vertical}:where(input)::placeholder,:where(textarea)::placeholder{color:#9ca3af;opacity:1}:where(button,[role=button]){cursor:pointer}:where(:disabled){cursor:default}:where(img,svg,video,canvas,audio,iframe,embed,object){display:block;vertical-align:middle}:where(img,video){height:auto;max-width:100%}:where([hidden]){display:none}:where(*),:where(*) :after,:where(*) :before,:where(*):after,:where(*):before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }:where(*) ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::-webkit-scrollbar{height:.5rem;width:.5rem}::-webkit-scrollbar-thumb{background-clip:"padding-box";background-color:var(--nv-color-secondary-foreground-alpha-300);border-radius:.25rem}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background-color:initial}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}}.nt-sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.\\!nt-pointer-events-auto{pointer-events:auto!important}.nt-invisible{visibility:hidden}.nt-absolute{position:absolute}.nt-relative{position:relative}.nt-inset-0{inset:0}.nt-inset-2{inset:.5rem}.nt-bottom-0{bottom:0}.nt-left-0{left:0}.nt-left-0\\.5{left:.125rem}.nt-right-0{right:0}.nt-right-3{right:.75rem}.nt-top-0{top:0}.nt-top-0\\.5{top:.125rem}.nt-top-3{top:.75rem}.nt-z-10{z-index:10}.nt-z-\\[-1\\]{z-index:-1}.-nt-m-1{margin:-.25rem}.nt-mx-auto{margin-left:auto;margin-right:auto}.-nt-mt-2{margin-top:-.5rem}.-nt-mt-\\[2px\\]{margin-top:-2px}.nt--mt-\\[50px\\]{margin-top:-50px}.nt-mb-1{margin-bottom:.25rem}.nt-mb-2{margin-bottom:.5rem}.nt-mb-3{margin-bottom:.75rem}.nt-mb-4{margin-bottom:1rem}.nt-mb-\\[0\\.625rem\\]{margin-bottom:.625rem}.nt-ml-1{margin-left:.25rem}.nt-ml-2{margin-left:.5rem}.nt-ml-auto{margin-left:auto}.nt-mr-2{margin-right:.5rem}.nt-mr-auto{margin-right:auto}.nt-mt-1{margin-top:.25rem}.nt-mt-1\\.5{margin-top:.375rem}.nt-mt-auto{margin-top:auto}.nt-block{display:block}.nt-flex{display:flex}.nt-inline-flex{display:inline-flex}.nt-grid{display:grid}.nt-hidden{display:none}.nt-aspect-square{aspect-ratio:1/1}.nt-size-1\\.5{height:.375rem;width:.375rem}.nt-size-2{height:.5rem;width:.5rem}.nt-size-2\\.5{height:.625rem;width:.625rem}.nt-size-3{height:.75rem;width:.75rem}.nt-size-3\\.5{height:.875rem;width:.875rem}.nt-size-4{height:1rem;width:1rem}.nt-size-5{height:1.25rem;width:1.25rem}.nt-size-6{height:1.5rem;width:1.5rem}.nt-size-8{height:2rem;width:2rem}.nt-size-fit{height:-webkit-fit-content;height:fit-content;width:-webkit-fit-content;width:fit-content}.nt-size-full{height:100%;width:100%}.nt-h-2{height:.5rem}.nt-h-3{height:.75rem}.nt-h-3\\.5{height:.875rem}.nt-h-4{height:1rem}.nt-h-5{height:1.25rem}.nt-h-6{height:1.5rem}.nt-h-7{height:1.75rem}.nt-h-8{height:2rem}.nt-h-9{height:2.25rem}.nt-h-\\[600px\\]{height:600px}.nt-h-auto{height:auto}.nt-h-fit{height:-webkit-fit-content;height:fit-content}.nt-h-full{height:100%}.nt-max-h-\\[160px\\]{max-height:160px}.nt-min-h-0{min-height:0}.nt-min-h-\\[272px\\]{min-height:272px}.nt-w-1\\.5{width:.375rem}.nt-w-1\\/3{width:33.333333%}.nt-w-2\\/3{width:66.666667%}.nt-w-5{width:1.25rem}.nt-w-7{width:1.75rem}.nt-w-8{width:2rem}.nt-w-\\[260px\\]{width:260px}.nt-w-\\[350px\\]{width:350px}.nt-w-\\[3px\\]{width:3px}.nt-w-\\[400px\\]{width:400px}.nt-w-\\[60px\\]{width:60px}.nt-w-\\[calc\\(2ch\\+2rem\\)\\]{width:calc(2ch + 2rem)}.nt-w-fit{width:-webkit-fit-content;width:fit-content}.nt-w-full{width:100%}.nt-w-max{width:-webkit-max-content;width:max-content}.nt-min-w-52{min-width:13rem}.nt-min-w-\\[120px\\]{min-width:120px}.nt-min-w-\\[220px\\]{min-width:220px}.nt-min-w-\\[74px\\]{min-width:74px}.nt-max-w-56{max-width:14rem}.nt-max-w-\\[120px\\]{max-width:120px}.nt-max-w-\\[220px\\]{max-width:220px}.nt-flex-1{flex:1 1 0%}.nt-shrink-0{flex-shrink:0}.nt-translate-x-1\\/2{--tw-translate-x:50%}.nt-transform,.nt-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes nt-shimmer{0%{opacity:1}50%{opacity:.6}to{opacity:1}}.nt-animate-shimmer{animation:nt-shimmer 1.5s ease-in-out infinite}@keyframes nt-spin{to{transform:rotate(1turn)}}.nt-animate-spin{animation:nt-spin 1s linear infinite}.nt-cursor-default{cursor:default}.nt-cursor-not-allowed{cursor:not-allowed}.nt-cursor-pointer{cursor:pointer}.nt-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.nt-flex-row{flex-direction:row}.nt-flex-col{flex-direction:column}.nt-flex-wrap{flex-wrap:wrap}.nt-flex-nowrap{flex-wrap:nowrap}.nt-items-start{align-items:flex-start}.nt-items-center{align-items:center}.nt-justify-end{justify-content:flex-end}.nt-justify-center{justify-content:center}.nt-justify-between{justify-content:space-between}.nt-gap-0\\.5{gap:.125rem}.nt-gap-1{gap:.25rem}.nt-gap-1\\.5{gap:.375rem}.nt-gap-2{gap:.5rem}.nt-gap-3{gap:.75rem}.nt-gap-4{gap:1rem}.nt-gap-6{gap:1.5rem}.nt-gap-8{gap:2rem}.nt-self-stretch{align-self:stretch}.nt-overflow-auto{overflow:auto}.nt-overflow-hidden{overflow:hidden}.nt-overflow-y-auto{overflow-y:auto}.nt-overflow-x-hidden{overflow-x:hidden}.nt-truncate{overflow:hidden;text-overflow:ellipsis}.nt-truncate,.nt-whitespace-nowrap{white-space:nowrap}.nt-whitespace-pre-wrap{white-space:pre-wrap}.nt-rounded{border-radius:var(--nv-radius-base)}.nt-rounded-full{border-radius:var(--nv-radius-full)}.nt-rounded-lg{border-radius:var(--nv-radius-lg)}.nt-rounded-md{border-radius:var(--nv-radius-md)}.nt-rounded-sm{border-radius:var(--nv-radius-sm)}.nt-rounded-xl{border-radius:var(--nv-radius-xl)}.nt-rounded-b-lg{border-bottom-left-radius:var(--nv-radius-lg);border-bottom-right-radius:var(--nv-radius-lg)}.nt-border{border-width:1px}.nt-border-b{border-bottom-width:1px}.nt-border-t{border-top-width:1px}.nt-border-background{border-color:var(--nv-color-background)}.nt-border-border{border-color:var(--nv-color-neutral-alpha-100)}.nt-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.nt-border-neutral-alpha-100{border-color:var(--nv-color-neutral-alpha-100)}.nt-border-neutral-alpha-200{border-color:var(--nv-color-neutral-alpha-200)}.nt-border-neutral-alpha-400{border-color:var(--nv-color-neutral-alpha-400)}.nt-border-neutral-alpha-50{border-color:var(--nv-color-neutral-alpha-50)}.nt-border-primary{border-color:var(--nv-color-primary)}.nt-border-t-neutral-alpha-200{border-top-color:var(--nv-color-neutral-alpha-200)}.nt-bg-\\[oklch\\(from_var\\(--nv-color-stripes\\)_l_c_h_\\/_0\\.1\\)\\]{background-color:oklch(from var(--nv-color-stripes) l c h/.1)}.nt-bg-background{background-color:var(--nv-color-background)}.nt-bg-counter{background-color:var(--nv-color-counter)}.nt-bg-foreground{background-color:var(--nv-color-foreground)}.nt-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.nt-bg-neutral-alpha-100{background-color:var(--nv-color-neutral-alpha-100)}.nt-bg-neutral-alpha-25{background-color:var(--nv-color-neutral-alpha-25)}.nt-bg-neutral-alpha-300{background-color:var(--nv-color-neutral-alpha-300)}.nt-bg-neutral-alpha-50{background-color:var(--nv-color-neutral-alpha-50)}.nt-bg-primary{background-color:var(--nv-color-primary)}.nt-bg-primary-alpha-300{background-color:var(--nv-color-primary-alpha-300)}.nt-bg-primary-alpha-400{background-color:var(--nv-color-primary-alpha-400)}.nt-bg-secondary{background-color:var(--nv-color-secondary)}.nt-bg-severity-high{background-color:var(--nv-color-severity-high)}.nt-bg-severity-high-alpha-100{background-color:var(--nv-color-severity-high-alpha-100)}.nt-bg-severity-high-alpha-200{background-color:var(--nv-color-severity-high-alpha-200)}.nt-bg-severity-high-alpha-300{background-color:var(--nv-color-severity-high-alpha-300)}.nt-bg-severity-high-alpha-50{background-color:var(--nv-color-severity-high-alpha-50)}.nt-bg-severity-low{background-color:var(--nv-color-severity-low)}.nt-bg-severity-low-alpha-100{background-color:var(--nv-color-severity-low-alpha-100)}.nt-bg-severity-low-alpha-200{background-color:var(--nv-color-severity-low-alpha-200)}.nt-bg-severity-low-alpha-300{background-color:var(--nv-color-severity-low-alpha-300)}.nt-bg-severity-low-alpha-50{background-color:var(--nv-color-severity-low-alpha-50)}.nt-bg-severity-medium{background-color:var(--nv-color-severity-medium)}.nt-bg-severity-medium-alpha-100{background-color:var(--nv-color-severity-medium-alpha-100)}.nt-bg-severity-medium-alpha-200{background-color:var(--nv-color-severity-medium-alpha-200)}.nt-bg-severity-medium-alpha-300{background-color:var(--nv-color-severity-medium-alpha-300)}.nt-bg-severity-medium-alpha-50{background-color:var(--nv-color-severity-medium-alpha-50)}.nt-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.nt-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.nt-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.nt-from-foreground-alpha-50{--tw-gradient-from:var(--nv-color-foreground-alpha-50) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.nt-from-primary-foreground-alpha-200{--tw-gradient-from:var(--nv-color-primary-foreground-alpha-200) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.nt-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.nt-from-20\\%{--tw-gradient-from-position:20%}.nt-to-background{--tw-gradient-to:var(--nv-color-background) var(--tw-gradient-to-position)}.nt-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.nt-object-cover{object-fit:cover}.nt-p-0{padding:0}.nt-p-0\\.5{padding:.125rem}.nt-p-1{padding:.25rem}.nt-p-2{padding:.5rem}.nt-p-2\\.5{padding:.625rem}.nt-p-3{padding:.75rem}.nt-p-4{padding:1rem}.nt-px-1{padding-left:.25rem;padding-right:.25rem}.nt-px-2{padding-left:.5rem;padding-right:.5rem}.nt-px-3{padding-left:.75rem;padding-right:.75rem}.nt-px-4{padding-left:1rem;padding-right:1rem}.nt-px-8{padding-left:2rem;padding-right:2rem}.nt-px-\\[6px\\]{padding-left:6px;padding-right:6px}.nt-py-1{padding-bottom:.25rem;padding-top:.25rem}.nt-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.nt-py-2{padding-bottom:.5rem;padding-top:.5rem}.nt-py-3{padding-bottom:.75rem;padding-top:.75rem}.nt-py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}.nt-py-4{padding-bottom:1rem;padding-top:1rem}.nt-py-px{padding-bottom:1px;padding-top:1px}.nt-pb-12{padding-bottom:3rem}.nt-pb-2{padding-bottom:.5rem}.nt-pb-\\[0\\.625rem\\]{padding-bottom:.625rem}.nt-pr-0{padding-right:0}.nt-pt-2{padding-top:.5rem}.nt-pt-2\\.5{padding-top:.625rem}.nt-pt-8{padding-top:2rem}.nt-text-left{text-align:left}.nt-text-center{text-align:center}.nt-text-start{text-align:start}.nt-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.nt-text-\\[0\\.8rem\\]{font-size:.8rem}.nt-text-\\[12px\\]{font-size:12px}.nt-text-base{font-size:var(--nv-font-size-base);line-height:var(--nv-line-height-base)}.nt-text-sm{font-size:var(--nv-font-size-sm);line-height:var(--nv-line-height-sm)}.nt-text-xl{font-size:var(--nv-font-size-xl);line-height:var(--nv-line-height-xl)}.nt-text-xs{font-size:var(--nv-font-size-xs);line-height:var(--nv-line-height-xs)}.nt-font-medium{font-weight:500}.nt-font-normal{font-weight:400}.nt-font-semibold{font-weight:600}.nt-italic{font-style:italic}.nt-leading-none{line-height:1}.nt-text-\\[\\#000000\\]{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.nt-text-background{color:var(--nv-color-background)}.nt-text-counter-foreground{color:var(--nv-color-counter-foreground)}.nt-text-foreground{color:var(--nv-color-foreground)}.nt-text-foreground-alpha-300{color:var(--nv-color-foreground-alpha-300)}.nt-text-foreground-alpha-400{color:var(--nv-color-foreground-alpha-400)}.nt-text-foreground-alpha-600{color:var(--nv-color-foreground-alpha-600)}.nt-text-foreground-alpha-700{color:var(--nv-color-foreground-alpha-700)}.nt-text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity,1))}.nt-text-neutral-alpha-500{color:var(--nv-color-neutral-alpha-500)}.nt-text-primary-foreground{color:var(--nv-color-primary-foreground)}.nt-text-secondary-foreground{color:var(--nv-color-secondary-foreground)}.nt-text-stripes{color:var(--nv-color-stripes)}.nt-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.nt-underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.nt-opacity-0{opacity:0}.nt-opacity-20{opacity:.2}.nt-opacity-50{opacity:.5}.nt-shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-\\[0_0_0_0\\.5px_var\\(--nv-color-primary-600\\)\\]{--tw-shadow:0 0 0 0.5px var(--nv-color-primary-600);--tw-shadow-colored:0 0 0 0.5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-\\[0_0_0_0\\.5px_var\\(--nv-color-secondary-600\\)\\]{--tw-shadow:0 0 0 0.5px var(--nv-color-secondary-600);--tw-shadow-colored:0 0 0 0.5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-\\[0_1px_2px_0_rgba\\(10\\,13\\,20\\,0\\.03\\)\\]{--tw-shadow:0 1px 2px 0 #0a0d1408;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-\\[0px_1px_2px_0px_rgba\\(10\\,13\\,20\\,0\\.03\\)\\]{--tw-shadow:0px 1px 2px 0px #0a0d1408;--tw-shadow-colored:0px 1px 2px 0px var(--tw-shadow-color)}.nt-shadow-\\[0px_1px_2px_0px_rgba\\(10\\,13\\,20\\,0\\.03\\)\\],.nt-shadow-dropdown{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-dropdown{--tw-shadow:0px 12px 16px -4px oklch(from var(--nv-color-shadow) l c h/0.08),0px 4px 6px -2px oklch(from var(--nv-color-shadow) l c h/0.03);--tw-shadow-colored:0px 12px 16px -4px var(--tw-shadow-color),0px 4px 6px -2px var(--tw-shadow-color)}.nt-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.nt-shadow-lg,.nt-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.nt-shadow-popover{--tw-shadow:0px 8px 26px 0px oklch(from var(--nv-color-shadow) l c h/0.08),0px 2px 6px 0px oklch(from var(--nv-color-shadow) l c h/0.12);--tw-shadow-colored:0px 8px 26px 0px var(--tw-shadow-color),0px 2px 6px 0px var(--tw-shadow-color)}.nt-shadow-popover,.nt-shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.nt-shadow-tooltip{--tw-shadow:0 5px 20px 0 oklch(from var(--nv-color-shadow) l c h/0.08);--tw-shadow-colored:0 5px 20px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.nt-outline-none{outline:2px solid #0000;outline-offset:2px}.nt-ring-offset-background{--tw-ring-offset-color:var(--nv-color-background)}.nt-backdrop-blur-lg{--tw-backdrop-blur:blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.nt-transition{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nt-transition-\\[width\\]{transition-duration:.15s;transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nt-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nt-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nt-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.nt-duration-100{transition-duration:.1s}.nt-duration-200{transition-duration:.2s}.nt-ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.nt-will-change-\\[width\\]{will-change:width}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.nt-animate-in{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.nt-fade-in{--tw-enter-opacity:0}.nt-slide-in-from-top-2{--tw-enter-translate-y:-0.5rem}.nt-duration-100{animation-duration:.1s}.nt-duration-200{animation-duration:.2s}.nt-ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-foreground\\)_80\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-foreground) 80% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-high\\)_45\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-high) 45% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-high\\)_80\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-high) 80% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-low\\)_45\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-low) 45% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-low\\)_80\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-low) 80% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-medium\\)_45\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-medium) 45% c h)}.\\[--bell-gradient-end\\:oklch\\(from_var\\(--nv-color-severity-medium\\)_80\\%_c_h\\)\\]{--bell-gradient-end:oklch(from var(--nv-color-severity-medium) 80% c h)}.\\[--bell-gradient-start\\:var\\(--nv-color-foreground\\)\\]{--bell-gradient-start:var(--nv-color-foreground)}.\\[--bell-gradient-start\\:var\\(--nv-color-severity-high\\)\\]{--bell-gradient-start:var(--nv-color-severity-high)}.\\[--bell-gradient-start\\:var\\(--nv-color-severity-low\\)\\]{--bell-gradient-start:var(--nv-color-severity-low)}.\\[--bell-gradient-start\\:var\\(--nv-color-severity-medium\\)\\]{--bell-gradient-start:var(--nv-color-severity-medium)}.\\[interpolate-size\\:allow-keywords\\]{interpolate-size:allow-keywords}.\\[line-height\\:16px\\]{line-height:16px}.\\[scrollbar-gutter\\:stable\\]{scrollbar-gutter:stable}.\\[word-break\\:break-word\\]{word-break:break-word}.before\\:nt-absolute:before{content:var(--tw-content);position:absolute}.before\\:nt-inset-0:before{content:var(--tw-content);inset:0}.before\\:-nt-right-\\[calc\\(0\\+var\\(--stripes-size\\)\\)\\]:before{content:var(--tw-content);right:calc(var(--stripes-size)*-1)}.before\\:nt-m-1:before{content:var(--tw-content);margin:.25rem}@keyframes nt-stripes{0%{content:var(--tw-content);transform:translateX(0)}to{content:var(--tw-content);transform:translateX(calc(var(--stripes-size)*-1))}}.before\\:nt-animate-stripes:before{animation:nt-stripes 1s linear infinite paused;content:var(--tw-content)}.before\\:nt-rounded-full:before{border-radius:var(--nv-radius-full);content:var(--tw-content)}.before\\:nt-rounded-md:before{border-radius:var(--nv-radius-md);content:var(--tw-content)}.before\\:nt-rounded-xl:before{border-radius:var(--nv-radius-xl);content:var(--tw-content)}.before\\:nt-border:before{border-width:1px;content:var(--tw-content)}.before\\:nt-border-primary-foreground-alpha-100:before{border-color:var(--nv-color-primary-foreground-alpha-100);content:var(--tw-content)}.before\\:nt-border-secondary-foreground-alpha-100:before{border-color:var(--nv-color-secondary-foreground-alpha-100);content:var(--tw-content)}.before\\:nt-bg-severity-high-alpha-200:before{background-color:var(--nv-color-severity-high-alpha-200);content:var(--tw-content)}.before\\:nt-bg-severity-high-alpha-300:before{background-color:var(--nv-color-severity-high-alpha-300);content:var(--tw-content)}.before\\:nt-bg-severity-low-alpha-200:before{background-color:var(--nv-color-severity-low-alpha-200);content:var(--tw-content)}.before\\:nt-bg-severity-low-alpha-300:before{background-color:var(--nv-color-severity-low-alpha-300);content:var(--tw-content)}.before\\:nt-bg-severity-medium-alpha-200:before{background-color:var(--nv-color-severity-medium-alpha-200);content:var(--tw-content)}.before\\:nt-bg-severity-medium-alpha-300:before{background-color:var(--nv-color-severity-medium-alpha-300);content:var(--tw-content)}.before\\:nt-bg-dev-stripes-gradient:before{background-image:repeating-linear-gradient(135deg,oklch(from var(--nv-color-stripes) l c h/.1) 25%,oklch(from var(--nv-color-stripes) l c h/.1) 50%,oklch(from var(--nv-color-stripes) l c h/.2) 50%,oklch(from var(--nv-color-stripes) l c h/.2) 75%);content:var(--tw-content)}.before\\:nt-bg-\\[length\\:var\\(--stripes-size\\)_var\\(--stripes-size\\)\\]:before{background-size:var(--stripes-size) var(--stripes-size);content:var(--tw-content)}.before\\:nt-content-\\[\\"\\"\\]:before{--tw-content:"";content:var(--tw-content)}.before\\:\\[mask-image\\:linear-gradient\\(transparent_0\\%\\2c black\\)\\]:before{content:var(--tw-content);-webkit-mask-image:linear-gradient(#0000,#000);mask-image:linear-gradient(#0000,#000)}.after\\:nt-absolute:after{content:var(--tw-content);position:absolute}.after\\:nt-inset-0:after{content:var(--tw-content);inset:0}.after\\:-nt-top-12:after{content:var(--tw-content);top:-3rem}.after\\:nt-bottom-0:after{bottom:0;content:var(--tw-content)}.after\\:nt-left-0:after{content:var(--tw-content);left:0}.after\\:nt-left-0\\.5:after{content:var(--tw-content);left:.125rem}.after\\:nt-top-0\\.5:after{content:var(--tw-content);top:.125rem}.after\\:nt-size-3:after{content:var(--tw-content);height:.75rem;width:.75rem}.after\\:nt-h-\\[2px\\]:after{content:var(--tw-content);height:2px}.after\\:nt-w-full:after{content:var(--tw-content);width:100%}.after\\:nt-translate-x-1\\/2:after{--tw-translate-x:50%}.after\\:nt-translate-x-1\\/2:after,.after\\:nt-translate-x-full:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\\:nt-translate-x-full:after{--tw-translate-x:100%}.after\\:nt-rounded-full:after{border-radius:var(--nv-radius-full);content:var(--tw-content)}.after\\:nt-rounded-md:after{border-radius:var(--nv-radius-md);content:var(--tw-content)}.after\\:nt-rounded-xl:after{border-radius:var(--nv-radius-xl);content:var(--tw-content)}.after\\:nt-border-b-2:after{border-bottom-width:2px;content:var(--tw-content)}.after\\:nt-border-background:after{border-color:var(--nv-color-background);content:var(--tw-content)}.after\\:nt-border-b-primary:after{border-bottom-color:var(--nv-color-primary);content:var(--tw-content)}.after\\:nt-border-b-transparent:after{border-bottom-color:#0000;content:var(--tw-content)}.after\\:nt-bg-background:after{background-color:var(--nv-color-background);content:var(--tw-content)}.after\\:nt-bg-\\[linear-gradient\\(180deg\\2c transparent\\2c oklch\\(from_var\\(--nv-color-background\\)_l_c_h_\\/_0\\.9\\)_55\\%\\2c transparent\\)\\]:after{background-image:linear-gradient(180deg,#0000,oklch(from var(--nv-color-background) l c h/.9) 55%,#0000);content:var(--tw-content)}.after\\:nt-bg-\\[linear-gradient\\(180deg\\2c transparent\\2c oklch\\(from_var\\(--nv-color-stripes\\)_l_c_h_\\/_0\\.07\\)_55\\%\\2c transparent\\)\\2c linear-gradient\\(180deg\\2c transparent\\2c oklch\\(from_var\\(--nv-color-background\\)_l_c_h_\\/_0\\.9\\)_55\\%\\2c transparent\\)\\]:after{background-image:linear-gradient(180deg,#0000,oklch(from var(--nv-color-stripes) l c h/.07) 55%,#0000),linear-gradient(180deg,#0000,oklch(from var(--nv-color-background) l c h/.9) 55%,#0000);content:var(--tw-content)}.after\\:nt-bg-gradient-to-b:after{background-image:linear-gradient(to bottom,var(--tw-gradient-stops));content:var(--tw-content)}.after\\:nt-from-primary-foreground-alpha-50:after{content:var(--tw-content);--tw-gradient-from:var(--nv-color-primary-foreground-alpha-50) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.after\\:nt-from-secondary-foreground-alpha-50:after{content:var(--tw-content);--tw-gradient-from:var(--nv-color-secondary-foreground-alpha-50) var(--tw-gradient-from-position);--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.after\\:nt-to-transparent:after{content:var(--tw-content);--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.after\\:nt-opacity-0:after{content:var(--tw-content);opacity:0}.after\\:nt-transition-all:after{content:var(--tw-content);transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.after\\:nt-transition-opacity:after{content:var(--tw-content);transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.after\\:nt-duration-200:after{transition-duration:.2s}.after\\:nt-content-\\[\\"\\"\\]:after,.after\\:nt-content-\\[\\'\\'\\]:after{--tw-content:"";content:var(--tw-content)}.after\\:nt-duration-200:after{animation-duration:.2s;content:var(--tw-content)}.hover\\:nt-bg-neutral-alpha-100:hover{background-color:var(--nv-color-neutral-alpha-100)}.hover\\:nt-bg-neutral-alpha-50:hover{background-color:var(--nv-color-neutral-alpha-50)}.hover\\:nt-bg-primary-600:hover{background-color:var(--nv-color-primary-600)}.hover\\:nt-bg-primary-alpha-25:hover{background-color:var(--nv-color-primary-alpha-25)}.hover\\:nt-bg-primary-alpha-400:hover{background-color:var(--nv-color-primary-alpha-400)}.hover\\:nt-bg-severity-high-alpha-50:hover{background-color:var(--nv-color-severity-high-alpha-50)}.hover\\:nt-bg-severity-low-alpha-50:hover{background-color:var(--nv-color-severity-low-alpha-50)}.hover\\:nt-bg-severity-medium-alpha-50:hover{background-color:var(--nv-color-severity-medium-alpha-50)}.hover\\:nt-text-foreground-alpha-800:hover{color:var(--nv-color-foreground-alpha-800)}.before\\:hover\\:\\[animation-play-state\\:running\\]:hover:before{animation-play-state:running;content:var(--tw-content)}.hover\\:after\\:nt-opacity-100:hover:after{content:var(--tw-content);opacity:1}.focus\\:nt-outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus-visible\\:nt-rounded-lg:focus-visible{border-radius:var(--nv-radius-lg)}.focus-visible\\:nt-rounded-md:focus-visible{border-radius:var(--nv-radius-md)}.focus-visible\\:nt-rounded-xl:focus-visible{border-radius:var(--nv-radius-xl)}.focus-visible\\:nt-bg-neutral-alpha-50:focus-visible{background-color:var(--nv-color-neutral-alpha-50)}.focus-visible\\:nt-outline-none:focus-visible{outline:2px solid #0000;outline-offset:2px}.focus-visible\\:nt-ring-2: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(2px + 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)}.focus-visible\\:nt-ring-primary:focus-visible{--tw-ring-color:var(--nv-color-primary)}.focus-visible\\:nt-ring-ring:focus-visible{--tw-ring-color:var(--nv-color-ring)}.focus-visible\\:nt-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:nt-pointer-events-none:disabled{pointer-events:none}.disabled\\:nt-opacity-20:disabled{opacity:.2}.disabled\\:nt-opacity-50:disabled{opacity:.5}.nt-group:focus-within .group-focus-within\\:nt-opacity-100{opacity:1}.nt-group:hover .group-hover\\:nt-bg-severity-high-alpha-500{background-color:var(--nv-color-severity-high-alpha-500)}.nt-group:hover .group-hover\\:nt-bg-severity-low-alpha-500{background-color:var(--nv-color-severity-low-alpha-500)}.nt-group:hover .group-hover\\:nt-bg-severity-medium-alpha-500{background-color:var(--nv-color-severity-medium-alpha-500)}.nt-group:hover .group-hover\\:nt-opacity-0{opacity:0}.nt-group:hover .group-hover\\:nt-opacity-100{opacity:1}.nt-peer:focus-visible~.peer-focus-visible\\:nt-outline-none{outline:2px solid #0000;outline-offset:2px}.nt-peer:focus-visible~.peer-focus-visible\\:nt-ring-2{--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(2px + 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)}.nt-peer:focus-visible~.peer-focus-visible\\:nt-ring-offset-2{--tw-ring-offset-width:2px}.data-\\[open\\=true\\]\\:nt-rotate-180[data-open=true]{--tw-rotate:180deg}.data-\\[open\\=true\\]\\:nt-rotate-180[data-open=true],.data-\\[open\\=true\\]\\:nt-transform[data-open=true]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[disabled\\]\\:nt-cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\\[checked\\]\\:nt-border-none[data-checked],.data-\\[indeterminate\\]\\:nt-border-none[data-indeterminate]{border-style:none}.data-\\[checked\\]\\:nt-bg-primary[data-checked],.data-\\[indeterminate\\]\\:nt-bg-primary[data-indeterminate]{background-color:var(--nv-color-primary)}.data-\\[checked\\]\\:nt-text-primary-foreground[data-checked]{color:var(--nv-color-primary-foreground)}.data-\\[disabled\\=true\\]\\:nt-text-foreground-alpha-400[data-disabled=true]{color:var(--nv-color-foreground-alpha-400)}.data-\\[disabled\\=true\\]\\:nt-text-foreground-alpha-600[data-disabled=true]{color:var(--nv-color-foreground-alpha-600)}.data-\\[indeterminate\\]\\:nt-text-primary-foreground[data-indeterminate]{color:var(--nv-color-primary-foreground)}.data-\\[state\\=active\\]\\:nt-text-foreground[data-state=active]{color:var(--nv-color-foreground)}.data-\\[disabled\\]\\:nt-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:after\\:nt-border-b-2[data-state=active]:after{border-bottom-width:2px;content:var(--tw-content)}.data-\\[state\\=active\\]\\:after\\:nt-border-primary[data-state=active]:after{border-color:var(--nv-color-primary);content:var(--tw-content)}.data-\\[state\\=active\\]\\:after\\:nt-opacity-100[data-state=active]:after{content:var(--tw-content);opacity:1}.\\[\\&\\:not\\(\\:first-child\\)\\]\\:nt-border-t:not(:first-child){border-top-width:1px}.\\[\\&_\\.nv-notificationList\\]\\:nt-pb-12 .nv-notificationList{padding-bottom:3rem}.\\[\\&_\\.nv-notificationList\\]\\:nt-pb-8 .nv-notificationList{padding-bottom:2rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-12 .nv-preferencesContainer{padding-bottom:3rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-8 .nv-preferencesContainer{padding-bottom:2rem}.\\[\\&_stop\\]\\:nt-transition-\\[stop-color\\] stop{transition-duration:.15s;transition-property:stop-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.\\[\\&_svg\\]\\:nt-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:nt-shrink-0 svg{flex-shrink:0}`;
17
17
 
18
18
  // src/ui/config/appearanceKeys.ts
@@ -346,12 +346,20 @@ var linkSlackUserAppearanceKeys = [
346
346
  "linkSlackUserButtonIcon",
347
347
  "linkSlackUserButtonLabel"
348
348
  ];
349
+ var linkMsTeamsUserAppearanceKeys = [
350
+ "linkMsTeamsUserContainer",
351
+ "linkMsTeamsUserButton",
352
+ "linkMsTeamsUserButtonContainer",
353
+ "linkMsTeamsUserButtonIcon",
354
+ "linkMsTeamsUserButtonLabel"
355
+ ];
349
356
  var appearanceKeys = [
350
357
  ...commonAppearanceKeys,
351
358
  ...inboxAppearanceKeys,
352
359
  ...subscriptionAppearanceKeys,
353
360
  ...connectChatAppearanceKeys,
354
361
  ...linkSlackUserAppearanceKeys,
362
+ ...linkMsTeamsUserAppearanceKeys,
355
363
  ...channelConnectButtonAppearanceKeys
356
364
  ];
357
365
  var commonLocalization = {
@@ -1351,6 +1359,10 @@ function useLocalization() {
1351
1359
 
1352
1360
  // src/ui/context/InboxContext.tsx
1353
1361
  var InboxContext = createContext(void 0);
1362
+ var KEYLESS_APPLICATION_IDENTIFIER_PREFIX = "pk_keyless_";
1363
+ function isKeylessApplicationIdentifier(applicationIdentifier) {
1364
+ return !!(applicationIdentifier == null ? void 0 : applicationIdentifier.startsWith(KEYLESS_APPLICATION_IDENTIFIER_PREFIX));
1365
+ }
1354
1366
  var STATUS_TO_FILTER = {
1355
1367
  ["unreadRead" /* UNREAD_READ */]: {
1356
1368
  archived: false,
@@ -1453,20 +1465,22 @@ var InboxProvider = (props) => {
1453
1465
  eventHandler: ({
1454
1466
  data
1455
1467
  }) => {
1456
- var _a2, _b2;
1468
+ var _a2;
1457
1469
  if (!data) {
1458
1470
  return;
1459
1471
  }
1460
- const identifier = window.localStorage.getItem("novu_keyless_application_identifier");
1472
+ const storedKeylessIdentifier = window.localStorage.getItem("novu_keyless_application_identifier");
1461
1473
  setHideBranding(data.removeNovuBranding);
1462
1474
  setIsDevelopmentMode(data.isDevelopmentMode);
1463
1475
  setMaxSnoozeDurationHours(data.maxSnoozeDurationHours);
1464
1476
  setContextKeys(data.contextKeys);
1465
- if (data.isDevelopmentMode && !props.applicationIdentifier) {
1466
- setIsKeyless(!data.applicationIdentifier || !!(identifier == null ? void 0 : identifier.startsWith("pk_keyless_")));
1477
+ if (!props.applicationIdentifier) {
1478
+ const keylessActive = isKeylessApplicationIdentifier(data.applicationIdentifier) || isKeylessApplicationIdentifier(storedKeylessIdentifier);
1479
+ setIsKeyless(keylessActive);
1467
1480
  setApplicationIdentifier((_a2 = data.applicationIdentifier) != null ? _a2 : null);
1468
1481
  } else {
1469
- setApplicationIdentifier((_b2 = props.applicationIdentifier) != null ? _b2 : null);
1482
+ setIsKeyless(false);
1483
+ setApplicationIdentifier(props.applicationIdentifier);
1470
1484
  }
1471
1485
  }
1472
1486
  });
@@ -1846,11 +1860,8 @@ var useChannelConnection = (options) => {
1846
1860
  return null;
1847
1861
  }
1848
1862
  }));
1849
- const connect = (args) => __async(null, null, function* () {
1850
- setLoading(true);
1851
- const response = yield novuAccessor().channelConnections.generateOAuthUrl(args);
1852
- setLoading(false);
1853
- return response;
1863
+ const generateConnectOAuthUrl = (args) => __async(null, null, function* () {
1864
+ return novuAccessor().channelConnections.generateConnectOAuthUrl(args);
1854
1865
  });
1855
1866
  const disconnect = (identifier) => __async(null, null, function* () {
1856
1867
  setLoading(true);
@@ -1911,7 +1922,7 @@ var useChannelConnection = (options) => {
1911
1922
  createEffect(() => {
1912
1923
  setLoading(connection.loading);
1913
1924
  });
1914
- return { connection, loading, mutate, refetch, connect, disconnect };
1925
+ return { connection, loading, mutate, refetch, generateConnectOAuthUrl, disconnect };
1915
1926
  };
1916
1927
  var _tmpl$ = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=currentColor viewBox="0 0 24 24"><path d="M18.364 5.636 16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364">`);
1917
1928
  function Loader(props) {
@@ -6749,7 +6760,7 @@ var ConnectChat = (props) => {
6749
6760
  const {
6750
6761
  connection,
6751
6762
  loading,
6752
- connect,
6763
+ generateConnectOAuthUrl: connect,
6753
6764
  disconnect
6754
6765
  } = useChannelConnection({
6755
6766
  integrationIdentifier: props.integrationIdentifier,
@@ -9390,104 +9401,122 @@ var Inbox = (props) => {
9390
9401
  }
9391
9402
  });
9392
9403
  };
9404
+ var _tmpl$88 = /* @__PURE__ */ template(`<svg width=16 height=16 viewBox="0 0 32 32"fill=none xmlns=http://www.w3.org/2000/svg><path fill=#7B83EB d="M16.901 10.757a4.589 4.589 0 1 0 0-9.177 4.589 4.589 0 0 0 0 9.177Z"></path><path fill=#000 d="M16.578 7.151h-4.156l.02.092.002.008.022.084a4.593 4.593 0 0 0 5.423 3.316V8.462a1.315 1.315 0 0 0-1.311-1.31Z"opacity=.1></path><path fill=#000 d="M15.593 8.135h-2.835a4.59 4.59 0 0 0 4.146 2.622V9.445a1.315 1.315 0 0 0-1.31-1.31Z"opacity=.2></path><path fill=#5059C9 d="M27.223 11.084a3.441 3.441 0 1 0 0-6.883 3.441 3.441 0 0 0 0 6.883ZM30.18 12.067h-7.73a.63.63 0 0 0-.629.63v7.973a5.035 5.035 0 0 0 3.9 4.999 4.922 4.922 0 0 0 5.933-4.814v-7.313a1.475 1.475 0 0 0-1.475-1.475Z"></path><path fill=#7B83EB d="M24.77 13.542v9.34a7.861 7.861 0 0 1-14.67 3.933 7.06 7.06 0 0 1-.49-.983 8.228 8.228 0 0 1-.325-.983 8.103 8.103 0 0 1-.246-1.966v-9.34a1.473 1.473 0 0 1 1.475-1.476h12.782a1.473 1.473 0 0 1 1.474 1.475Z"></path><path fill=#000 d="M15.593 8.135h-2.835a4.59 4.59 0 0 0 4.146 2.622V9.445a1.315 1.315 0 0 0-1.31-1.31Z"opacity=.2></path><path fill=#000 d="M17.888 12.067v12.457a1.298 1.298 0 0 1-1.023 1.269.952.952 0 0 1-.285.04H9.61a8.228 8.228 0 0 1-.325-.984 8.103 8.103 0 0 1-.246-1.966v-9.34a1.473 1.473 0 0 1 1.475-1.476h7.374Z"opacity=.1></path><path fill=#000 d="M16.905 12.067v13.44a.953.953 0 0 1-.04.286 1.298 1.298 0 0 1-1.268 1.022h-5.496a7.06 7.06 0 0 1-.492-.983 8.228 8.228 0 0 1-.324-.983 8.103 8.103 0 0 1-.246-1.966v-9.34a1.473 1.473 0 0 1 1.475-1.476h6.39Z"opacity=.2></path><path fill=#000 d="M16.905 12.067v11.474a1.314 1.314 0 0 1-1.308 1.308H9.285a8.103 8.103 0 0 1-.246-1.966v-9.34a1.473 1.473 0 0 1 1.475-1.476h6.39Z"opacity=.2></path><path fill=#000 d="M10.514 12.067a1.472 1.472 0 0 0-1.475 1.475v9.34c.001.664.084 1.324.246 1.967h5.329a1.314 1.314 0 0 0 1.307-1.308V12.067h-5.407Z"opacity=.2></path><path fill=#4B53BC d="M1.498 8.135h13.11a1.31 1.31 0 0 1 1.31 1.31v13.11a1.31 1.31 0 0 1-1.31 1.311H1.498a1.31 1.31 0 0 1-1.31-1.31V9.445a1.31 1.31 0 0 1 1.31-1.311Z"></path><path fill=#fff d="M11.967 13.027h-2.94v7.885H7.098v-7.885H4.141V11.09h7.826v1.937Z">`);
9405
+ var MsTeamsColored = (props) => {
9406
+ return (() => {
9407
+ var _el$ = _tmpl$88();
9408
+ spread(_el$, props, true, true);
9409
+ return _el$;
9410
+ })();
9411
+ };
9393
9412
 
9394
- // src/ui/components/slack-constants.ts
9395
- var DEFAULT_CONNECTION_IDENTIFIER = "chconn-slack-default";
9396
- var DEFAULT_INTEGRATION_IDENTIFIER = "slack";
9413
+ // src/ui/components/constants.ts
9414
+ var DEFAULT_MSTEAMS_CONNECTION_IDENTIFIER = "chconn-msteams-default";
9415
+ var DEFAULT_SLACK_CONNECTION_IDENTIFIER = "chconn-slack-default";
9416
+ function buildDefaultConnectionIdentifier(prefix, subscriberId) {
9417
+ if (!subscriberId) {
9418
+ return prefix;
9419
+ }
9420
+ return `${prefix}-${subscriberId}`;
9421
+ }
9397
9422
 
9398
- // src/ui/components/slack-connect-button/SlackConnectButton.tsx
9399
- var _tmpl$88 = /* @__PURE__ */ template(`<span>`);
9423
+ // src/ui/components/msteams-connect-button/MsTeamsConnectButton.tsx
9424
+ var _tmpl$89 = /* @__PURE__ */ template(`<span>`);
9400
9425
  var _tmpl$228 = /* @__PURE__ */ template(`<div>`);
9401
9426
  var _tmpl$318 = /* @__PURE__ */ template(`<code>context`);
9402
- var _tmpl$414 = /* @__PURE__ */ template(`<code>SlackConnectButton`);
9427
+ var _tmpl$414 = /* @__PURE__ */ template(`<code>MsTeamsConnectButton`);
9403
9428
  var _tmpl$512 = /* @__PURE__ */ template(`<code>NovuProvider`);
9404
9429
  var _tmpl$611 = /* @__PURE__ */ template(`<code>connectionMode="shared"`);
9405
- var POLL_INTERVAL_MS = 2500;
9406
- var POLL_TIMEOUT_MS = 12e4;
9407
- var SlackConnectButton = (props) => {
9430
+ var POLL_INITIAL_INTERVAL_MS = 2500;
9431
+ var POLL_MAX_INTERVAL_MS = 3e4;
9432
+ var POLL_BACKOFF_FACTOR = 1.5;
9433
+ var POLL_TIMEOUT_MS = 3e5;
9434
+ var MsTeamsConnectButton = (props) => {
9408
9435
  const style = useStyle();
9409
9436
  const novuAccessor = useNovu();
9410
- const integrationIdentifier = () => {
9437
+ const integrationIdentifier = () => props.integrationIdentifier;
9438
+ const connectionMode = () => {
9439
+ var _a;
9440
+ return (_a = props.connectionMode) != null ? _a : "subscriber";
9441
+ };
9442
+ const resolvedContext = () => {
9443
+ var _a;
9444
+ return (_a = props.context) != null ? _a : novuAccessor().context;
9445
+ };
9446
+ const resolvedSubscriberId = () => {
9411
9447
  var _a;
9412
- return (_a = props.integrationIdentifier) != null ? _a : DEFAULT_INTEGRATION_IDENTIFIER;
9448
+ return connectionMode() === "subscriber" ? (_a = props.subscriberId) != null ? _a : novuAccessor().subscriberId : void 0;
9413
9449
  };
9414
9450
  const connectionIdentifier = () => {
9415
9451
  var _a;
9416
- return (_a = props.connectionIdentifier) != null ? _a : DEFAULT_CONNECTION_IDENTIFIER;
9452
+ return (_a = props.connectionIdentifier) != null ? _a : buildDefaultConnectionIdentifier(DEFAULT_MSTEAMS_CONNECTION_IDENTIFIER, resolvedSubscriberId());
9417
9453
  };
9418
9454
  const {
9419
9455
  connection,
9420
9456
  loading,
9421
- connect,
9422
9457
  disconnect,
9423
- mutate
9458
+ mutate,
9459
+ generateConnectOAuthUrl
9424
9460
  } = useChannelConnection({
9425
9461
  integrationIdentifier: integrationIdentifier(),
9426
9462
  connectionIdentifier: connectionIdentifier(),
9427
9463
  subscriberId: props.subscriberId
9428
9464
  });
9429
9465
  const [actionLoading, setActionLoading] = createSignal(false);
9430
- const connectionMode = () => {
9431
- var _a;
9432
- return (_a = props.connectionMode) != null ? _a : "subscriber";
9433
- };
9434
- const resolvedContext = () => {
9435
- var _a;
9436
- return (_a = props.context) != null ? _a : novuAccessor().context;
9437
- };
9438
9466
  const isMisconfigured = createMemo(() => connectionMode() === "shared" && !resolvedContext());
9439
9467
  createEffect(() => {
9440
9468
  if (isMisconfigured()) {
9441
- console.warn('[Novu] SlackConnectButton: "context" is required when connectionMode is "shared". Provide it via the context prop on SlackConnectButton or on NovuProvider.');
9469
+ console.warn('[Novu] MsTeamsConnectButton: "context" is required when connectionMode is "shared". Provide it via the context prop on MsTeamsConnectButton or on NovuProvider.');
9442
9470
  }
9443
9471
  });
9444
9472
  const isConnected = () => !!connection();
9445
9473
  const isLoading = () => loading() || actionLoading();
9446
- const intervalIdRef = {
9474
+ const timeoutIdRef = {
9447
9475
  current: null
9448
9476
  };
9449
9477
  onCleanup(() => {
9450
- if (intervalIdRef.current !== null) {
9451
- clearInterval(intervalIdRef.current);
9452
- intervalIdRef.current = null;
9478
+ if (timeoutIdRef.current !== null) {
9479
+ clearTimeout(timeoutIdRef.current);
9480
+ timeoutIdRef.current = null;
9453
9481
  }
9454
9482
  });
9455
9483
  const startPolling = () => {
9456
- if (intervalIdRef.current !== null) {
9457
- clearInterval(intervalIdRef.current);
9458
- intervalIdRef.current = null;
9484
+ const connId = connectionIdentifier();
9485
+ if (timeoutIdRef.current !== null) {
9486
+ clearTimeout(timeoutIdRef.current);
9487
+ timeoutIdRef.current = null;
9459
9488
  }
9460
9489
  const startedAt = Date.now();
9461
- intervalIdRef.current = setInterval(() => __async(null, null, function* () {
9462
- var _a, _b;
9463
- try {
9464
- const response = yield novuAccessor().channelConnections.get({
9465
- identifier: connectionIdentifier()
9466
- });
9467
- if (response.data) {
9468
- if (intervalIdRef.current !== null) {
9469
- clearInterval(intervalIdRef.current);
9470
- intervalIdRef.current = null;
9490
+ const schedulePoll = (intervalMs) => {
9491
+ timeoutIdRef.current = setTimeout(() => __async(null, null, function* () {
9492
+ var _a, _b;
9493
+ try {
9494
+ const response = yield novuAccessor().channelConnections.get({
9495
+ identifier: connId
9496
+ });
9497
+ if (response.data) {
9498
+ timeoutIdRef.current = null;
9499
+ setActionLoading(false);
9500
+ mutate(response.data);
9501
+ (_a = props.onConnectSuccess) == null ? void 0 : _a.call(props, connId);
9502
+ return;
9471
9503
  }
9504
+ } catch (e) {
9505
+ }
9506
+ if (Date.now() - startedAt >= POLL_TIMEOUT_MS) {
9507
+ timeoutIdRef.current = null;
9472
9508
  setActionLoading(false);
9473
- mutate(response.data);
9474
- (_a = props.onConnectSuccess) == null ? void 0 : _a.call(props, connectionIdentifier());
9509
+ (_b = props.onConnectError) == null ? void 0 : _b.call(props, new Error("MS Teams OAuth timed out. Please try again."));
9475
9510
  return;
9476
9511
  }
9477
- } catch (e) {
9478
- }
9479
- if (Date.now() - startedAt >= POLL_TIMEOUT_MS) {
9480
- if (intervalIdRef.current !== null) {
9481
- clearInterval(intervalIdRef.current);
9482
- intervalIdRef.current = null;
9483
- }
9484
- setActionLoading(false);
9485
- (_b = props.onConnectError) == null ? void 0 : _b.call(props, new Error("Slack OAuth timed out. Please try again."));
9486
- }
9487
- }), POLL_INTERVAL_MS);
9512
+ const nextInterval = Math.min(intervalMs * POLL_BACKOFF_FACTOR, POLL_MAX_INTERVAL_MS);
9513
+ schedulePoll(nextInterval);
9514
+ }), intervalMs);
9515
+ };
9516
+ schedulePoll(POLL_INITIAL_INTERVAL_MS);
9488
9517
  };
9489
9518
  const handleClick = () => __async(null, null, function* () {
9490
- var _a, _b, _c, _d, _e, _f;
9519
+ var _a, _b, _c, _d, _e, _f, _g, _h;
9491
9520
  if (isConnected()) {
9492
9521
  const identifier = (_a = connection()) == null ? void 0 : _a.identifier;
9493
9522
  if (!identifier) return;
@@ -9501,28 +9530,32 @@ var SlackConnectButton = (props) => {
9501
9530
  setActionLoading(true);
9502
9531
  const mode = connectionMode();
9503
9532
  const ctx = resolvedContext();
9504
- const resolvedSubscriberId = mode === "subscriber" ? (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId : void 0;
9505
- const result = yield connect({
9533
+ const resolvedSubscriberId2 = mode === "subscriber" ? (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId : void 0;
9534
+ const result = yield generateConnectOAuthUrl({
9506
9535
  integrationIdentifier: integrationIdentifier(),
9507
9536
  connectionIdentifier: connectionIdentifier(),
9508
- subscriberId: resolvedSubscriberId,
9537
+ subscriberId: resolvedSubscriberId2,
9509
9538
  context: ctx,
9510
9539
  scope: props.scope,
9511
- connectionMode: mode
9540
+ connectionMode: mode,
9541
+ autoLinkUser: mode === "subscriber" ? (_e = props.autoLinkUser) != null ? _e : true : false
9512
9542
  });
9513
9543
  if (result.error) {
9514
9544
  setActionLoading(false);
9515
- (_e = props.onConnectError) == null ? void 0 : _e.call(props, result.error);
9545
+ (_f = props.onConnectError) == null ? void 0 : _f.call(props, result.error);
9516
9546
  return;
9517
9547
  }
9518
- if ((_f = result.data) == null ? void 0 : _f.url) {
9548
+ if ((_g = result.data) == null ? void 0 : _g.url) {
9519
9549
  window.open(result.data.url, "_blank", "noopener,noreferrer");
9520
9550
  startPolling();
9551
+ } else {
9552
+ setActionLoading(false);
9553
+ (_h = props.onConnectError) == null ? void 0 : _h.call(props, new Error("OAuth URL was not returned. Please try again."));
9521
9554
  }
9522
9555
  }
9523
9556
  });
9524
9557
  const buttonContent = () => (() => {
9525
- var _el$ = _tmpl$88();
9558
+ var _el$ = _tmpl$89();
9526
9559
  insert(_el$, createComponent(Motion.span, {
9527
9560
  initial: {
9528
9561
  opacity: 1
@@ -9552,7 +9585,7 @@ var SlackConnectButton = (props) => {
9552
9585
  },
9553
9586
  get fallback() {
9554
9587
  return (() => {
9555
- var _el$3 = _tmpl$88();
9588
+ var _el$3 = _tmpl$89();
9556
9589
  insert(_el$3, createComponent(CheckCircleFill, {
9557
9590
  "class": "nt-size-full"
9558
9591
  }));
@@ -9580,7 +9613,7 @@ var SlackConnectButton = (props) => {
9580
9613
  });
9581
9614
  },
9582
9615
  get fallback() {
9583
- return createComponent(SlackColored, {
9616
+ return createComponent(MsTeamsColored, {
9584
9617
  get ["class"]() {
9585
9618
  return style({
9586
9619
  key: "channelConnectButtonIcon",
@@ -9594,10 +9627,10 @@ var SlackConnectButton = (props) => {
9594
9627
  });
9595
9628
  }
9596
9629
  })), (() => {
9597
- var _el$2 = _tmpl$88();
9630
+ var _el$2 = _tmpl$89();
9598
9631
  insert(_el$2, () => {
9599
9632
  var _a, _b;
9600
- return isConnected() ? (_a = props.connectedLabel) != null ? _a : "Connected" : (_b = props.connectLabel) != null ? _b : "Connect Slack";
9633
+ return isConnected() ? (_a = props.connectedLabel) != null ? _a : "Connected" : (_b = props.connectLabel) != null ? _b : "Connect MS Teams";
9601
9634
  });
9602
9635
  effect(() => className(_el$2, style({
9603
9636
  key: "channelConnectButtonLabel",
@@ -9722,21 +9755,103 @@ var SlackConnectButton = (props) => {
9722
9755
  }
9723
9756
  });
9724
9757
  };
9725
- var _tmpl$89 = /* @__PURE__ */ template(`<span>`);
9758
+ var useChannelEndpoint = (options) => {
9759
+ const novuAccessor = useNovu();
9760
+ const [loading, setLoading] = createSignal(true);
9761
+ const [endpoint, { mutate, refetch }] = createResource(options, (_0) => __async(null, [_0], function* ({ endpointIdentifier }) {
9762
+ var _a;
9763
+ try {
9764
+ if (!endpointIdentifier) {
9765
+ return null;
9766
+ }
9767
+ const response = yield novuAccessor().channelEndpoints.get({
9768
+ identifier: endpointIdentifier
9769
+ });
9770
+ return (_a = response.data) != null ? _a : null;
9771
+ } catch (e) {
9772
+ return null;
9773
+ }
9774
+ }));
9775
+ const generateLinkUserOAuthUrl = (args) => __async(null, null, function* () {
9776
+ return novuAccessor().channelEndpoints.generateLinkUserOAuthUrl(args);
9777
+ });
9778
+ const create = (args) => __async(null, null, function* () {
9779
+ setLoading(true);
9780
+ const response = yield novuAccessor().channelEndpoints.create(args);
9781
+ if (response.data) {
9782
+ mutate(response.data);
9783
+ }
9784
+ setLoading(false);
9785
+ return response;
9786
+ });
9787
+ const remove = (identifier) => __async(null, null, function* () {
9788
+ setLoading(true);
9789
+ const response = yield novuAccessor().channelEndpoints.delete({ identifier });
9790
+ if (!response.error) {
9791
+ mutate(null);
9792
+ }
9793
+ setLoading(false);
9794
+ return response;
9795
+ });
9796
+ onMount(() => {
9797
+ const currentNovu = novuAccessor();
9798
+ const cleanupCreatePending = currentNovu.on("channel-endpoint.create.pending", () => {
9799
+ setLoading(true);
9800
+ });
9801
+ const cleanupCreateResolved = currentNovu.on("channel-endpoint.create.resolved", ({ data }) => {
9802
+ mutate(data != null ? data : null);
9803
+ setLoading(false);
9804
+ });
9805
+ const cleanupDeletePending = currentNovu.on("channel-endpoint.delete.pending", ({ args }) => {
9806
+ if (!args || args.identifier !== options.endpointIdentifier) {
9807
+ return;
9808
+ }
9809
+ setLoading(true);
9810
+ });
9811
+ const cleanupDeleteResolved = currentNovu.on("channel-endpoint.delete.resolved", ({ args }) => {
9812
+ if (!args || args.identifier !== options.endpointIdentifier) {
9813
+ return;
9814
+ }
9815
+ mutate(null);
9816
+ setLoading(false);
9817
+ });
9818
+ onCleanup(() => {
9819
+ cleanupCreatePending();
9820
+ cleanupCreateResolved();
9821
+ cleanupDeletePending();
9822
+ cleanupDeleteResolved();
9823
+ });
9824
+ });
9825
+ createEffect(() => {
9826
+ setLoading(endpoint.loading);
9827
+ });
9828
+ return { endpoint, loading, mutate, refetch, generateLinkUserOAuthUrl, create, remove };
9829
+ };
9830
+
9831
+ // src/ui/components/msteams-link-user/MsTeamsLinkUser.tsx
9832
+ var _tmpl$90 = /* @__PURE__ */ template(`<span>`);
9726
9833
  var _tmpl$229 = /* @__PURE__ */ template(`<div>`);
9727
- var POLL_INTERVAL_MS2 = 2500;
9834
+ var POLL_INTERVAL_MS = 2500;
9728
9835
  var POLL_TIMEOUT_MS2 = 12e4;
9729
- var SlackLinkUser = (props) => {
9836
+ var MsTeamsLinkUser = (props) => {
9730
9837
  const style = useStyle();
9731
9838
  const novuAccessor = useNovu();
9732
- const integrationIdentifier = () => {
9839
+ const integrationIdentifier = () => props.integrationIdentifier;
9840
+ const resolvedSubscriberId = () => {
9733
9841
  var _a;
9734
- return (_a = props.integrationIdentifier) != null ? _a : DEFAULT_INTEGRATION_IDENTIFIER;
9842
+ return (_a = props.subscriberId) != null ? _a : novuAccessor().subscriberId;
9735
9843
  };
9736
9844
  const connectionIdentifier = () => {
9737
9845
  var _a;
9738
- return (_a = props.connectionIdentifier) != null ? _a : DEFAULT_CONNECTION_IDENTIFIER;
9846
+ return (_a = props.connectionIdentifier) != null ? _a : buildDefaultConnectionIdentifier(DEFAULT_MSTEAMS_CONNECTION_IDENTIFIER, resolvedSubscriberId());
9739
9847
  };
9848
+ const {
9849
+ generateLinkUserOAuthUrl
9850
+ } = useChannelEndpoint({
9851
+ integrationIdentifier: integrationIdentifier(),
9852
+ connectionIdentifier: connectionIdentifier(),
9853
+ subscriberId: props.subscriberId
9854
+ });
9740
9855
  const [endpoint, setEndpoint] = createSignal(null);
9741
9856
  const [loading, setLoading] = createSignal(true);
9742
9857
  const [actionLoading, setActionLoading] = createSignal(false);
@@ -9760,7 +9875,7 @@ var SlackLinkUser = (props) => {
9760
9875
  integrationIdentifier: intId,
9761
9876
  connectionIdentifier: connId
9762
9877
  });
9763
- const existing = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "slack_user")) != null ? _b : null;
9878
+ const existing = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "ms_teams_user")) != null ? _b : null;
9764
9879
  setEndpoint(existing);
9765
9880
  } catch (e) {
9766
9881
  setEndpoint(null);
@@ -9791,7 +9906,7 @@ var SlackLinkUser = (props) => {
9791
9906
  integrationIdentifier: integrationIdentifier(),
9792
9907
  connectionIdentifier: connectionIdentifier()
9793
9908
  });
9794
- const found = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "slack_user")) != null ? _b : null;
9909
+ const found = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "ms_teams_user")) != null ? _b : null;
9795
9910
  if (found) {
9796
9911
  clearInterval(pollingIntervalId);
9797
9912
  setActionLoading(false);
@@ -9806,12 +9921,12 @@ var SlackLinkUser = (props) => {
9806
9921
  if (Date.now() - startedAt >= POLL_TIMEOUT_MS2) {
9807
9922
  clearInterval(pollingIntervalId);
9808
9923
  setActionLoading(false);
9809
- (_d = props.onLinkError) == null ? void 0 : _d.call(props, new Error("Slack OAuth timed out. Please try again."));
9924
+ (_d = props.onLinkError) == null ? void 0 : _d.call(props, new Error("MS Teams OAuth timed out. Please try again."));
9810
9925
  }
9811
- }), POLL_INTERVAL_MS2);
9926
+ }), POLL_INTERVAL_MS);
9812
9927
  };
9813
9928
  const handleClick = () => __async(null, null, function* () {
9814
- var _a, _b, _c, _d, _e, _f;
9929
+ var _a, _b, _c, _d, _e, _f, _g, _h;
9815
9930
  if (isLinked()) {
9816
9931
  const identifier = (_a = endpoint()) == null ? void 0 : _a.identifier;
9817
9932
  if (!identifier) return;
@@ -9827,23 +9942,29 @@ var SlackLinkUser = (props) => {
9827
9942
  (_c = props.onUnlinkSuccess) == null ? void 0 : _c.call(props);
9828
9943
  }
9829
9944
  } else {
9945
+ const resolvedSubscriberId2 = (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId;
9946
+ if (!resolvedSubscriberId2) {
9947
+ (_e = props.onLinkError) == null ? void 0 : _e.call(props, new Error("subscriberId is required to link an MS Teams user"));
9948
+ return;
9949
+ }
9830
9950
  setActionLoading(true);
9831
- const result = yield novuAccessor().channelConnections.generateOAuthUrl({
9951
+ const result = yield generateLinkUserOAuthUrl({
9832
9952
  integrationIdentifier: integrationIdentifier(),
9833
9953
  connectionIdentifier: connectionIdentifier(),
9834
- subscriberId: (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId,
9835
- context: props.context,
9836
- mode: "link_user",
9837
- userScope: ["identity.basic"]
9954
+ subscriberId: resolvedSubscriberId2,
9955
+ context: props.context
9838
9956
  });
9839
9957
  if (result.error) {
9840
9958
  setActionLoading(false);
9841
- (_e = props.onLinkError) == null ? void 0 : _e.call(props, result.error);
9959
+ (_f = props.onLinkError) == null ? void 0 : _f.call(props, result.error);
9842
9960
  return;
9843
9961
  }
9844
- if ((_f = result.data) == null ? void 0 : _f.url) {
9962
+ if ((_g = result.data) == null ? void 0 : _g.url) {
9845
9963
  window.open(result.data.url, "_blank", "noopener,noreferrer");
9846
9964
  startPolling();
9965
+ } else {
9966
+ setActionLoading(false);
9967
+ (_h = props.onLinkError) == null ? void 0 : _h.call(props, new Error("OAuth URL was not returned. Please try again."));
9847
9968
  }
9848
9969
  }
9849
9970
  });
@@ -9852,7 +9973,7 @@ var SlackLinkUser = (props) => {
9852
9973
  insert(_el$, createComponent(Button, {
9853
9974
  get ["class"]() {
9854
9975
  return style({
9855
- key: "linkSlackUserButton",
9976
+ key: "linkMsTeamsUserButton",
9856
9977
  className: "nt-transition-[width] nt-duration-800 nt-will-change-[width]",
9857
9978
  context: {
9858
9979
  linked: isLinked()
@@ -9865,7 +9986,7 @@ var SlackLinkUser = (props) => {
9865
9986
  return isLoading();
9866
9987
  },
9867
9988
  get children() {
9868
- var _el$2 = _tmpl$89();
9989
+ var _el$2 = _tmpl$90();
9869
9990
  insert(_el$2, createComponent(Motion.span, {
9870
9991
  initial: {
9871
9992
  opacity: 1
@@ -9890,7 +10011,7 @@ var SlackLinkUser = (props) => {
9890
10011
  iconKey: "channelConnect",
9891
10012
  get ["class"]() {
9892
10013
  return style({
9893
- key: "linkSlackUserButtonIcon",
10014
+ key: "linkMsTeamsUserButtonIcon",
9894
10015
  className: "nt-size-4 nt-shrink-0",
9895
10016
  iconKey: "channelConnect",
9896
10017
  context: {
@@ -9899,10 +10020,10 @@ var SlackLinkUser = (props) => {
9899
10020
  });
9900
10021
  },
9901
10022
  get fallback() {
9902
- return createComponent(SlackColored, {
10023
+ return createComponent(MsTeamsColored, {
9903
10024
  get ["class"]() {
9904
10025
  return style({
9905
- key: "linkSlackUserButtonIcon",
10026
+ key: "linkMsTeamsUserButtonIcon",
9906
10027
  className: "nt-size-4 nt-shrink-0",
9907
10028
  iconKey: "channelConnect",
9908
10029
  context: {
@@ -9919,7 +10040,7 @@ var SlackLinkUser = (props) => {
9919
10040
  iconKey: "channelConnected",
9920
10041
  get ["class"]() {
9921
10042
  return style({
9922
- key: "linkSlackUserButtonIcon",
10043
+ key: "linkMsTeamsUserButtonIcon",
9923
10044
  className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
9924
10045
  iconKey: "channelConnected",
9925
10046
  context: {
@@ -9929,12 +10050,12 @@ var SlackLinkUser = (props) => {
9929
10050
  },
9930
10051
  get fallback() {
9931
10052
  return (() => {
9932
- var _el$4 = _tmpl$89();
10053
+ var _el$4 = _tmpl$90();
9933
10054
  insert(_el$4, createComponent(CheckCircleFill, {
9934
10055
  "class": "nt-size-full"
9935
10056
  }));
9936
10057
  effect(() => className(_el$4, style({
9937
- key: "linkSlackUserButtonIcon",
10058
+ key: "linkMsTeamsUserButtonIcon",
9938
10059
  className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
9939
10060
  iconKey: "channelConnected",
9940
10061
  context: {
@@ -9947,13 +10068,13 @@ var SlackLinkUser = (props) => {
9947
10068
  });
9948
10069
  }
9949
10070
  }), (() => {
9950
- var _el$3 = _tmpl$89();
10071
+ var _el$3 = _tmpl$90();
9951
10072
  insert(_el$3, () => {
9952
10073
  var _a, _b;
9953
- return isLinked() ? (_a = props.unlinkLabel) != null ? _a : "Unlink" : (_b = props.linkLabel) != null ? _b : "Link User";
10074
+ return isLinked() ? (_a = props.unlinkLabel) != null ? _a : "Unlink" : (_b = props.linkLabel) != null ? _b : "Link Teams User";
9954
10075
  });
9955
10076
  effect(() => className(_el$3, style({
9956
- key: "linkSlackUserButtonLabel",
10077
+ key: "linkMsTeamsUserButtonLabel",
9957
10078
  className: "[line-height:16px]",
9958
10079
  context: {
9959
10080
  linked: isLinked()
@@ -9984,7 +10105,7 @@ var SlackLinkUser = (props) => {
9984
10105
  }
9985
10106
  }), null);
9986
10107
  effect(() => className(_el$2, style({
9987
- key: "linkSlackUserButtonContainer",
10108
+ key: "linkMsTeamsUserButtonContainer",
9988
10109
  className: "nt-relative nt-overflow-hidden nt-inline-flex nt-items-center nt-justify-center nt-gap-1",
9989
10110
  context: {
9990
10111
  linked: isLinked()
@@ -9994,7 +10115,7 @@ var SlackLinkUser = (props) => {
9994
10115
  }
9995
10116
  }));
9996
10117
  effect(() => className(_el$, style({
9997
- key: "linkSlackUserContainer",
10118
+ key: "linkMsTeamsUserContainer",
9998
10119
  className: "nt-flex nt-items-center nt-gap-2",
9999
10120
  context: {
10000
10121
  linked: isLinked()
@@ -10003,69 +10124,697 @@ var SlackLinkUser = (props) => {
10003
10124
  return _el$;
10004
10125
  })();
10005
10126
  };
10006
- var useSubscription = (options) => {
10127
+ var _tmpl$91 = /* @__PURE__ */ template(`<span>`);
10128
+ var _tmpl$230 = /* @__PURE__ */ template(`<div>`);
10129
+ var _tmpl$319 = /* @__PURE__ */ template(`<code>context`);
10130
+ var _tmpl$415 = /* @__PURE__ */ template(`<code>SlackConnectButton`);
10131
+ var _tmpl$513 = /* @__PURE__ */ template(`<code>NovuProvider`);
10132
+ var _tmpl$612 = /* @__PURE__ */ template(`<code>connectionMode="shared"`);
10133
+ var POLL_INTERVAL_MS2 = 2500;
10134
+ var POLL_TIMEOUT_MS3 = 12e4;
10135
+ var SlackConnectButton = (props) => {
10136
+ const style = useStyle();
10007
10137
  const novuAccessor = useNovu();
10008
- const identifier = () => {
10138
+ const integrationIdentifier = () => props.integrationIdentifier;
10139
+ const connectionMode = () => {
10009
10140
  var _a;
10010
- const subscriberId = novuAccessor().subscriberId;
10011
- const contextKey = novuAccessor().contextKey;
10012
- return (_a = options.identifier) != null ? _a : buildSubscriptionIdentifier({ topicKey: options.topicKey, subscriberId, contextKey });
10141
+ return (_a = props.connectionMode) != null ? _a : "subscriber";
10013
10142
  };
10014
- const [loading, setLoading] = createSignal(true);
10015
- const [subscription, { mutate, refetch }] = createResource(
10016
- options || {},
10017
- (_0) => __async(null, [_0], function* ({ topicKey, identifier: identifier2, workflowIds, tags }) {
10018
- try {
10019
- const response = yield novuAccessor().subscriptions.get({
10020
- topicKey,
10021
- identifier: identifier2,
10022
- workflowIds,
10023
- tags
10024
- });
10025
- return response.data;
10026
- } catch (error) {
10027
- console.error("Error fetching subscription:", error);
10028
- throw error;
10029
- }
10030
- })
10031
- );
10032
- const create = (args) => __async(null, null, function* () {
10033
- setLoading(true);
10034
- const response = yield novuAccessor().subscriptions.create(args);
10035
- if (response.data) {
10036
- mutate(response.data);
10143
+ const resolvedContext = () => {
10144
+ var _a;
10145
+ return (_a = props.context) != null ? _a : novuAccessor().context;
10146
+ };
10147
+ const resolvedSubscriberId = () => {
10148
+ var _a;
10149
+ return connectionMode() === "subscriber" ? (_a = props.subscriberId) != null ? _a : novuAccessor().subscriberId : void 0;
10150
+ };
10151
+ const connectionIdentifier = () => {
10152
+ var _a;
10153
+ return (_a = props.connectionIdentifier) != null ? _a : buildDefaultConnectionIdentifier(DEFAULT_SLACK_CONNECTION_IDENTIFIER, resolvedSubscriberId());
10154
+ };
10155
+ const {
10156
+ connection,
10157
+ loading,
10158
+ disconnect,
10159
+ mutate,
10160
+ generateConnectOAuthUrl
10161
+ } = useChannelConnection({
10162
+ integrationIdentifier: integrationIdentifier(),
10163
+ connectionIdentifier: connectionIdentifier(),
10164
+ subscriberId: props.subscriberId
10165
+ });
10166
+ const [actionLoading, setActionLoading] = createSignal(false);
10167
+ const isMisconfigured = createMemo(() => connectionMode() === "shared" && !resolvedContext());
10168
+ createEffect(() => {
10169
+ if (isMisconfigured()) {
10170
+ console.warn('[Novu] SlackConnectButton: "context" is required when connectionMode is "shared". Provide it via the context prop on SlackConnectButton or on NovuProvider.');
10037
10171
  }
10038
- setLoading(false);
10039
- return response;
10040
10172
  });
10041
- const remove = (args) => __async(null, null, function* () {
10042
- setLoading(true);
10043
- const response = "subscription" in args ? yield novuAccessor().subscriptions.delete({ subscription: args.subscription }) : yield novuAccessor().subscriptions.delete({ topicKey: args.topicKey, subscriptionId: args.subscriptionId });
10044
- mutate(null);
10045
- setLoading(false);
10046
- return response;
10173
+ const isConnected = () => !!connection();
10174
+ const isLoading = () => loading() || actionLoading();
10175
+ const intervalIdRef = {
10176
+ current: null
10177
+ };
10178
+ onCleanup(() => {
10179
+ if (intervalIdRef.current !== null) {
10180
+ clearInterval(intervalIdRef.current);
10181
+ intervalIdRef.current = null;
10182
+ }
10047
10183
  });
10048
- onMount(() => {
10049
- const listener = ({ data }) => {
10050
- if (!data || data.topicKey !== options.topicKey || data.identifier !== identifier()) {
10051
- return;
10052
- }
10053
- mutate(data);
10054
- setLoading(false);
10055
- };
10056
- const currentNovu = novuAccessor();
10057
- const cleanupCreatePending = currentNovu.on("subscription.create.pending", ({ args }) => {
10058
- if (!args || args.topicKey !== options.topicKey || args.identifier !== identifier()) {
10059
- return;
10060
- }
10061
- setLoading(true);
10062
- });
10063
- const cleanupCreate = currentNovu.on("subscription.create.resolved", listener);
10064
- const cleanupUpdate = currentNovu.on("subscription.update.resolved", listener);
10065
- const cleanupDeletePending = currentNovu.on("subscription.delete.pending", ({ args }) => {
10066
- var _a, _b;
10067
- const subscriptionId = (_a = subscription()) == null ? void 0 : _a.id;
10068
- const subscriptionIdentifier = (_b = subscription()) == null ? void 0 : _b.identifier;
10184
+ const startPolling = () => {
10185
+ const connId = connectionIdentifier();
10186
+ if (intervalIdRef.current !== null) {
10187
+ clearInterval(intervalIdRef.current);
10188
+ intervalIdRef.current = null;
10189
+ }
10190
+ const startedAt = Date.now();
10191
+ intervalIdRef.current = setInterval(() => __async(null, null, function* () {
10192
+ var _a, _b;
10193
+ try {
10194
+ const response = yield novuAccessor().channelConnections.get({
10195
+ identifier: connId
10196
+ });
10197
+ if (response.data) {
10198
+ if (intervalIdRef.current !== null) {
10199
+ clearInterval(intervalIdRef.current);
10200
+ intervalIdRef.current = null;
10201
+ }
10202
+ setActionLoading(false);
10203
+ mutate(response.data);
10204
+ (_a = props.onConnectSuccess) == null ? void 0 : _a.call(props, connId);
10205
+ return;
10206
+ }
10207
+ } catch (e) {
10208
+ }
10209
+ if (Date.now() - startedAt >= POLL_TIMEOUT_MS3) {
10210
+ if (intervalIdRef.current !== null) {
10211
+ clearInterval(intervalIdRef.current);
10212
+ intervalIdRef.current = null;
10213
+ }
10214
+ setActionLoading(false);
10215
+ (_b = props.onConnectError) == null ? void 0 : _b.call(props, new Error("Slack OAuth timed out. Please try again."));
10216
+ }
10217
+ }), POLL_INTERVAL_MS2);
10218
+ };
10219
+ const handleClick = () => __async(null, null, function* () {
10220
+ var _a, _b, _c, _d, _e, _f, _g, _h;
10221
+ if (isConnected()) {
10222
+ const identifier = (_a = connection()) == null ? void 0 : _a.identifier;
10223
+ if (!identifier) return;
10224
+ const result = yield disconnect(identifier);
10225
+ if (result.error) {
10226
+ (_b = props.onDisconnectError) == null ? void 0 : _b.call(props, result.error);
10227
+ } else {
10228
+ (_c = props.onDisconnectSuccess) == null ? void 0 : _c.call(props);
10229
+ }
10230
+ } else {
10231
+ setActionLoading(true);
10232
+ const mode = connectionMode();
10233
+ const ctx = resolvedContext();
10234
+ const resolvedSubscriberId2 = mode === "subscriber" ? (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId : void 0;
10235
+ const result = yield generateConnectOAuthUrl({
10236
+ integrationIdentifier: integrationIdentifier(),
10237
+ connectionIdentifier: connectionIdentifier(),
10238
+ subscriberId: resolvedSubscriberId2,
10239
+ context: ctx,
10240
+ scope: props.scope,
10241
+ connectionMode: mode,
10242
+ autoLinkUser: mode === "subscriber" ? (_e = props.autoLinkUser) != null ? _e : true : false
10243
+ });
10244
+ if (result.error) {
10245
+ setActionLoading(false);
10246
+ (_f = props.onConnectError) == null ? void 0 : _f.call(props, result.error);
10247
+ return;
10248
+ }
10249
+ if ((_g = result.data) == null ? void 0 : _g.url) {
10250
+ window.open(result.data.url, "_blank", "noopener,noreferrer");
10251
+ startPolling();
10252
+ } else {
10253
+ setActionLoading(false);
10254
+ (_h = props.onConnectError) == null ? void 0 : _h.call(props, new Error("OAuth URL was not returned. Please try again."));
10255
+ }
10256
+ }
10257
+ });
10258
+ const buttonContent = () => (() => {
10259
+ var _el$ = _tmpl$91();
10260
+ insert(_el$, createComponent(Motion.span, {
10261
+ initial: {
10262
+ opacity: 1
10263
+ },
10264
+ get animate() {
10265
+ return {
10266
+ opacity: actionLoading() ? 0 : 1
10267
+ };
10268
+ },
10269
+ transition: {
10270
+ easing: "ease-in-out",
10271
+ duration: 0.2
10272
+ },
10273
+ "class": "nt-inline-flex nt-items-center nt-gap-1",
10274
+ get children() {
10275
+ return [memo(() => memo(() => !!isConnected())() ? createComponent(IconRendererWrapper, {
10276
+ iconKey: "channelConnected",
10277
+ get ["class"]() {
10278
+ return style({
10279
+ key: "channelConnectButtonIcon",
10280
+ className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
10281
+ iconKey: "channelConnected",
10282
+ context: {
10283
+ connected: true
10284
+ }
10285
+ });
10286
+ },
10287
+ get fallback() {
10288
+ return (() => {
10289
+ var _el$3 = _tmpl$91();
10290
+ insert(_el$3, createComponent(CheckCircleFill, {
10291
+ "class": "nt-size-full"
10292
+ }));
10293
+ effect(() => className(_el$3, style({
10294
+ key: "channelConnectButtonIcon",
10295
+ className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
10296
+ iconKey: "channelConnected",
10297
+ context: {
10298
+ connected: true
10299
+ }
10300
+ })));
10301
+ return _el$3;
10302
+ })();
10303
+ }
10304
+ }) : createComponent(IconRendererWrapper, {
10305
+ iconKey: "channelConnect",
10306
+ get ["class"]() {
10307
+ return style({
10308
+ key: "channelConnectButtonIcon",
10309
+ className: "nt-size-4 nt-shrink-0",
10310
+ iconKey: "channelConnect",
10311
+ context: {
10312
+ connected: false
10313
+ }
10314
+ });
10315
+ },
10316
+ get fallback() {
10317
+ return createComponent(SlackColored, {
10318
+ get ["class"]() {
10319
+ return style({
10320
+ key: "channelConnectButtonIcon",
10321
+ className: "nt-size-4 nt-shrink-0",
10322
+ iconKey: "channelConnect",
10323
+ context: {
10324
+ connected: false
10325
+ }
10326
+ });
10327
+ }
10328
+ });
10329
+ }
10330
+ })), (() => {
10331
+ var _el$2 = _tmpl$91();
10332
+ insert(_el$2, () => {
10333
+ var _a, _b;
10334
+ return isConnected() ? (_a = props.connectedLabel) != null ? _a : "Connected" : (_b = props.connectLabel) != null ? _b : "Connect Slack";
10335
+ });
10336
+ effect(() => className(_el$2, style({
10337
+ key: "channelConnectButtonLabel",
10338
+ className: "[line-height:16px]",
10339
+ context: {
10340
+ connected: isConnected()
10341
+ }
10342
+ })));
10343
+ return _el$2;
10344
+ })()];
10345
+ }
10346
+ }), null);
10347
+ insert(_el$, createComponent(Motion.span, {
10348
+ initial: {
10349
+ opacity: 0
10350
+ },
10351
+ get animate() {
10352
+ return {
10353
+ opacity: actionLoading() ? 1 : 0
10354
+ };
10355
+ },
10356
+ transition: {
10357
+ easing: "ease-in-out",
10358
+ duration: 0.2
10359
+ },
10360
+ "class": "nt-absolute nt-left-0 nt-inline-flex nt-items-center",
10361
+ get children() {
10362
+ return createComponent(Loader, {
10363
+ "class": "nt-text-foreground-alpha-600 nt-size-3.5 nt-animate-spin"
10364
+ });
10365
+ }
10366
+ }), null);
10367
+ effect(() => className(_el$, style({
10368
+ key: "channelConnectButtonInner",
10369
+ className: "nt-relative nt-overflow-hidden nt-inline-flex nt-items-center nt-justify-center nt-gap-1",
10370
+ context: {
10371
+ connected: isConnected()
10372
+ }
10373
+ })));
10374
+ return _el$;
10375
+ })();
10376
+ return createComponent(Show, {
10377
+ get when() {
10378
+ return !loading();
10379
+ },
10380
+ get fallback() {
10381
+ return createComponent(Loader, {
10382
+ "class": "nt-text-foreground-alpha-600 nt-size-4 nt-animate-spin"
10383
+ });
10384
+ },
10385
+ get children() {
10386
+ var _el$4 = _tmpl$230();
10387
+ insert(_el$4, createComponent(Show, {
10388
+ get when() {
10389
+ return !isMisconfigured();
10390
+ },
10391
+ get fallback() {
10392
+ return createComponent(Tooltip.Root, {
10393
+ get children() {
10394
+ return [createComponent(Tooltip.Trigger, {
10395
+ asChild: (triggerProps) => createComponent(Button, mergeProps({
10396
+ get ["class"]() {
10397
+ return style({
10398
+ key: "channelConnectButton",
10399
+ className: "nt-transition-[width] nt-duration-800 nt-will-change-[width] !nt-pointer-events-auto",
10400
+ context: {
10401
+ connected: false
10402
+ }
10403
+ });
10404
+ },
10405
+ variant: "secondary",
10406
+ disabled: true
10407
+ }, triggerProps, {
10408
+ get children() {
10409
+ return buttonContent();
10410
+ }
10411
+ }))
10412
+ }), createComponent(Tooltip.Content, {
10413
+ get ["class"]() {
10414
+ return style({
10415
+ key: "channelConnectButtonMisconfiguredTooltip",
10416
+ className: "nt-bg-foreground nt-p-2 nt-shadow-tooltip nt-rounded-lg nt-text-background nt-text-xs nt-max-w-[220px]"
10417
+ });
10418
+ },
10419
+ get children() {
10420
+ return ["Missing context \u2014 provide a ", _tmpl$319(), " prop on ", _tmpl$415(), " or", " ", _tmpl$513(), " when using ", _tmpl$612()];
10421
+ }
10422
+ })];
10423
+ }
10424
+ });
10425
+ },
10426
+ get children() {
10427
+ return createComponent(Button, {
10428
+ get ["class"]() {
10429
+ return style({
10430
+ key: "channelConnectButton",
10431
+ className: "nt-transition-[width] nt-duration-800 nt-will-change-[width]",
10432
+ context: {
10433
+ connected: isConnected()
10434
+ }
10435
+ });
10436
+ },
10437
+ variant: "secondary",
10438
+ onClick: handleClick,
10439
+ get disabled() {
10440
+ return isLoading();
10441
+ },
10442
+ get children() {
10443
+ return buttonContent();
10444
+ }
10445
+ });
10446
+ }
10447
+ }));
10448
+ effect(() => className(_el$4, style({
10449
+ key: "channelConnectButtonContainer",
10450
+ className: "nt-flex nt-items-center nt-gap-2",
10451
+ context: {
10452
+ connected: isConnected()
10453
+ }
10454
+ })));
10455
+ return _el$4;
10456
+ }
10457
+ });
10458
+ };
10459
+ var _tmpl$92 = /* @__PURE__ */ template(`<span>`);
10460
+ var _tmpl$231 = /* @__PURE__ */ template(`<div>`);
10461
+ var POLL_INTERVAL_MS3 = 2500;
10462
+ var POLL_TIMEOUT_MS4 = 12e4;
10463
+ var SlackLinkUser = (props) => {
10464
+ const style = useStyle();
10465
+ const novuAccessor = useNovu();
10466
+ const integrationIdentifier = () => props.integrationIdentifier;
10467
+ const resolvedSubscriberId = () => {
10468
+ var _a;
10469
+ return (_a = props.subscriberId) != null ? _a : novuAccessor().subscriberId;
10470
+ };
10471
+ const connectionIdentifier = () => {
10472
+ var _a;
10473
+ return (_a = props.connectionIdentifier) != null ? _a : buildDefaultConnectionIdentifier(DEFAULT_SLACK_CONNECTION_IDENTIFIER, resolvedSubscriberId());
10474
+ };
10475
+ const {
10476
+ generateLinkUserOAuthUrl
10477
+ } = useChannelEndpoint({
10478
+ integrationIdentifier: integrationIdentifier(),
10479
+ connectionIdentifier: connectionIdentifier(),
10480
+ subscriberId: props.subscriberId
10481
+ });
10482
+ const [endpoint, setEndpoint] = createSignal(null);
10483
+ const [loading, setLoading] = createSignal(true);
10484
+ const [actionLoading, setActionLoading] = createSignal(false);
10485
+ let pollingIntervalId;
10486
+ onCleanup(() => {
10487
+ clearInterval(pollingIntervalId);
10488
+ });
10489
+ const isLinked = () => !!endpoint();
10490
+ const isLoading = () => loading() || actionLoading();
10491
+ createResource(() => ({
10492
+ integrationIdentifier: integrationIdentifier(),
10493
+ connectionIdentifier: connectionIdentifier()
10494
+ }), (_0) => __async(null, [_0], function* ({
10495
+ integrationIdentifier: intId,
10496
+ connectionIdentifier: connId
10497
+ }) {
10498
+ var _a, _b;
10499
+ setLoading(true);
10500
+ try {
10501
+ const response = yield novuAccessor().channelEndpoints.list({
10502
+ integrationIdentifier: intId,
10503
+ connectionIdentifier: connId
10504
+ });
10505
+ const existing = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "slack_user")) != null ? _b : null;
10506
+ setEndpoint(existing);
10507
+ } catch (e) {
10508
+ setEndpoint(null);
10509
+ } finally {
10510
+ setLoading(false);
10511
+ }
10512
+ }));
10513
+ onMount(() => {
10514
+ const currentNovu = novuAccessor();
10515
+ const cleanupDelete = currentNovu.on("channel-endpoint.delete.resolved", ({
10516
+ args
10517
+ }) => {
10518
+ var _a;
10519
+ if ((args == null ? void 0 : args.identifier) && args.identifier === ((_a = endpoint()) == null ? void 0 : _a.identifier)) {
10520
+ setEndpoint(null);
10521
+ }
10522
+ });
10523
+ onCleanup(() => {
10524
+ cleanupDelete();
10525
+ });
10526
+ });
10527
+ const startPolling = () => {
10528
+ const startedAt = Date.now();
10529
+ pollingIntervalId = setInterval(() => __async(null, null, function* () {
10530
+ var _a, _b, _c, _d;
10531
+ try {
10532
+ const response = yield novuAccessor().channelEndpoints.list({
10533
+ integrationIdentifier: integrationIdentifier(),
10534
+ connectionIdentifier: connectionIdentifier()
10535
+ });
10536
+ const found = (_b = (_a = response.data) == null ? void 0 : _a.find((ep) => ep.type === "slack_user")) != null ? _b : null;
10537
+ if (found) {
10538
+ clearInterval(pollingIntervalId);
10539
+ setActionLoading(false);
10540
+ setEndpoint(found);
10541
+ (_c = props.onLinkSuccess) == null ? void 0 : _c.call(props, {
10542
+ identifier: found.identifier
10543
+ });
10544
+ return;
10545
+ }
10546
+ } catch (e) {
10547
+ }
10548
+ if (Date.now() - startedAt >= POLL_TIMEOUT_MS4) {
10549
+ clearInterval(pollingIntervalId);
10550
+ setActionLoading(false);
10551
+ (_d = props.onLinkError) == null ? void 0 : _d.call(props, new Error("Slack OAuth timed out. Please try again."));
10552
+ }
10553
+ }), POLL_INTERVAL_MS3);
10554
+ };
10555
+ const handleClick = () => __async(null, null, function* () {
10556
+ var _a, _b, _c, _d, _e, _f, _g, _h;
10557
+ if (isLinked()) {
10558
+ const identifier = (_a = endpoint()) == null ? void 0 : _a.identifier;
10559
+ if (!identifier) return;
10560
+ setActionLoading(true);
10561
+ const result = yield novuAccessor().channelEndpoints.delete({
10562
+ identifier
10563
+ });
10564
+ setActionLoading(false);
10565
+ if (result.error) {
10566
+ (_b = props.onUnlinkError) == null ? void 0 : _b.call(props, result.error);
10567
+ } else {
10568
+ setEndpoint(null);
10569
+ (_c = props.onUnlinkSuccess) == null ? void 0 : _c.call(props);
10570
+ }
10571
+ } else {
10572
+ const resolvedSubscriberId2 = (_d = props.subscriberId) != null ? _d : novuAccessor().subscriberId;
10573
+ if (!resolvedSubscriberId2) {
10574
+ (_e = props.onLinkError) == null ? void 0 : _e.call(props, new Error("subscriberId is required to link a Slack user"));
10575
+ return;
10576
+ }
10577
+ setActionLoading(true);
10578
+ const result = yield generateLinkUserOAuthUrl({
10579
+ integrationIdentifier: integrationIdentifier(),
10580
+ connectionIdentifier: connectionIdentifier(),
10581
+ subscriberId: resolvedSubscriberId2,
10582
+ context: props.context,
10583
+ userScope: ["identity.basic"]
10584
+ });
10585
+ if (result.error) {
10586
+ setActionLoading(false);
10587
+ (_f = props.onLinkError) == null ? void 0 : _f.call(props, result.error);
10588
+ return;
10589
+ }
10590
+ if ((_g = result.data) == null ? void 0 : _g.url) {
10591
+ window.open(result.data.url, "_blank", "noopener,noreferrer");
10592
+ startPolling();
10593
+ } else {
10594
+ setActionLoading(false);
10595
+ (_h = props.onLinkError) == null ? void 0 : _h.call(props, new Error("OAuth URL was not returned. Please try again."));
10596
+ }
10597
+ }
10598
+ });
10599
+ return (() => {
10600
+ var _el$ = _tmpl$231();
10601
+ insert(_el$, createComponent(Button, {
10602
+ get ["class"]() {
10603
+ return style({
10604
+ key: "linkSlackUserButton",
10605
+ className: "nt-transition-[width] nt-duration-800 nt-will-change-[width]",
10606
+ context: {
10607
+ linked: isLinked()
10608
+ }
10609
+ });
10610
+ },
10611
+ variant: "secondary",
10612
+ onClick: handleClick,
10613
+ get disabled() {
10614
+ return isLoading();
10615
+ },
10616
+ get children() {
10617
+ var _el$2 = _tmpl$92();
10618
+ insert(_el$2, createComponent(Motion.span, {
10619
+ initial: {
10620
+ opacity: 1
10621
+ },
10622
+ get animate() {
10623
+ return {
10624
+ opacity: isLoading() ? 0 : 1
10625
+ };
10626
+ },
10627
+ transition: {
10628
+ easing: "ease-in-out",
10629
+ duration: 0.2
10630
+ },
10631
+ "class": "nt-inline-flex nt-items-center nt-gap-1",
10632
+ get children() {
10633
+ return [createComponent(Show, {
10634
+ get when() {
10635
+ return isLinked();
10636
+ },
10637
+ get fallback() {
10638
+ return createComponent(IconRendererWrapper, {
10639
+ iconKey: "channelConnect",
10640
+ get ["class"]() {
10641
+ return style({
10642
+ key: "linkSlackUserButtonIcon",
10643
+ className: "nt-size-4 nt-shrink-0",
10644
+ iconKey: "channelConnect",
10645
+ context: {
10646
+ linked: false
10647
+ }
10648
+ });
10649
+ },
10650
+ get fallback() {
10651
+ return createComponent(SlackColored, {
10652
+ get ["class"]() {
10653
+ return style({
10654
+ key: "linkSlackUserButtonIcon",
10655
+ className: "nt-size-4 nt-shrink-0",
10656
+ iconKey: "channelConnect",
10657
+ context: {
10658
+ linked: false
10659
+ }
10660
+ });
10661
+ }
10662
+ });
10663
+ }
10664
+ });
10665
+ },
10666
+ get children() {
10667
+ return createComponent(IconRendererWrapper, {
10668
+ iconKey: "channelConnected",
10669
+ get ["class"]() {
10670
+ return style({
10671
+ key: "linkSlackUserButtonIcon",
10672
+ className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
10673
+ iconKey: "channelConnected",
10674
+ context: {
10675
+ linked: true
10676
+ }
10677
+ });
10678
+ },
10679
+ get fallback() {
10680
+ return (() => {
10681
+ var _el$4 = _tmpl$92();
10682
+ insert(_el$4, createComponent(CheckCircleFill, {
10683
+ "class": "nt-size-full"
10684
+ }));
10685
+ effect(() => className(_el$4, style({
10686
+ key: "linkSlackUserButtonIcon",
10687
+ className: "nt-inline-flex nt-items-center nt-justify-center nt-size-4 nt-shrink-0 nt-rounded-full nt-bg-white nt-shadow-[0_1px_2px_0_rgba(10,13,20,0.03)]",
10688
+ iconKey: "channelConnected",
10689
+ context: {
10690
+ linked: true
10691
+ }
10692
+ })));
10693
+ return _el$4;
10694
+ })();
10695
+ }
10696
+ });
10697
+ }
10698
+ }), (() => {
10699
+ var _el$3 = _tmpl$92();
10700
+ insert(_el$3, () => {
10701
+ var _a, _b;
10702
+ return isLinked() ? (_a = props.unlinkLabel) != null ? _a : "Unlink" : (_b = props.linkLabel) != null ? _b : "Link User";
10703
+ });
10704
+ effect(() => className(_el$3, style({
10705
+ key: "linkSlackUserButtonLabel",
10706
+ className: "[line-height:16px]",
10707
+ context: {
10708
+ linked: isLinked()
10709
+ }
10710
+ })));
10711
+ return _el$3;
10712
+ })()];
10713
+ }
10714
+ }), null);
10715
+ insert(_el$2, createComponent(Motion.span, {
10716
+ initial: {
10717
+ opacity: 1
10718
+ },
10719
+ get animate() {
10720
+ return {
10721
+ opacity: isLoading() ? 1 : 0
10722
+ };
10723
+ },
10724
+ transition: {
10725
+ easing: "ease-in-out",
10726
+ duration: 0.2
10727
+ },
10728
+ "class": "nt-absolute nt-left-0 nt-inline-flex nt-items-center",
10729
+ get children() {
10730
+ return createComponent(Loader, {
10731
+ "class": "nt-text-foreground-alpha-600 nt-size-3.5 nt-animate-spin"
10732
+ });
10733
+ }
10734
+ }), null);
10735
+ effect(() => className(_el$2, style({
10736
+ key: "linkSlackUserButtonContainer",
10737
+ className: "nt-relative nt-overflow-hidden nt-inline-flex nt-items-center nt-justify-center nt-gap-1",
10738
+ context: {
10739
+ linked: isLinked()
10740
+ }
10741
+ })));
10742
+ return _el$2;
10743
+ }
10744
+ }));
10745
+ effect(() => className(_el$, style({
10746
+ key: "linkSlackUserContainer",
10747
+ className: "nt-flex nt-items-center nt-gap-2",
10748
+ context: {
10749
+ linked: isLinked()
10750
+ }
10751
+ })));
10752
+ return _el$;
10753
+ })();
10754
+ };
10755
+ var useSubscription = (options) => {
10756
+ const novuAccessor = useNovu();
10757
+ const identifier = () => {
10758
+ var _a;
10759
+ const subscriberId = novuAccessor().subscriberId;
10760
+ const contextKey = novuAccessor().contextKey;
10761
+ return (_a = options.identifier) != null ? _a : buildSubscriptionIdentifier({ topicKey: options.topicKey, subscriberId, contextKey });
10762
+ };
10763
+ const [loading, setLoading] = createSignal(true);
10764
+ const [subscription, { mutate, refetch }] = createResource(
10765
+ options || {},
10766
+ (_0) => __async(null, [_0], function* ({ topicKey, identifier: identifier2, workflowIds, tags }) {
10767
+ try {
10768
+ const response = yield novuAccessor().subscriptions.get({
10769
+ topicKey,
10770
+ identifier: identifier2,
10771
+ workflowIds,
10772
+ tags
10773
+ });
10774
+ return response.data;
10775
+ } catch (error) {
10776
+ console.error("Error fetching subscription:", error);
10777
+ throw error;
10778
+ }
10779
+ })
10780
+ );
10781
+ const create = (args) => __async(null, null, function* () {
10782
+ setLoading(true);
10783
+ const response = yield novuAccessor().subscriptions.create(args);
10784
+ if (response.data) {
10785
+ mutate(response.data);
10786
+ }
10787
+ setLoading(false);
10788
+ return response;
10789
+ });
10790
+ const remove = (args) => __async(null, null, function* () {
10791
+ setLoading(true);
10792
+ const response = "subscription" in args ? yield novuAccessor().subscriptions.delete({ subscription: args.subscription }) : yield novuAccessor().subscriptions.delete({ topicKey: args.topicKey, subscriptionId: args.subscriptionId });
10793
+ mutate(null);
10794
+ setLoading(false);
10795
+ return response;
10796
+ });
10797
+ onMount(() => {
10798
+ const listener = ({ data }) => {
10799
+ if (!data || data.topicKey !== options.topicKey || data.identifier !== identifier()) {
10800
+ return;
10801
+ }
10802
+ mutate(data);
10803
+ setLoading(false);
10804
+ };
10805
+ const currentNovu = novuAccessor();
10806
+ const cleanupCreatePending = currentNovu.on("subscription.create.pending", ({ args }) => {
10807
+ if (!args || args.topicKey !== options.topicKey || args.identifier !== identifier()) {
10808
+ return;
10809
+ }
10810
+ setLoading(true);
10811
+ });
10812
+ const cleanupCreate = currentNovu.on("subscription.create.resolved", listener);
10813
+ const cleanupUpdate = currentNovu.on("subscription.update.resolved", listener);
10814
+ const cleanupDeletePending = currentNovu.on("subscription.delete.pending", ({ args }) => {
10815
+ var _a, _b;
10816
+ const subscriptionId = (_a = subscription()) == null ? void 0 : _a.id;
10817
+ const subscriptionIdentifier = (_b = subscription()) == null ? void 0 : _b.identifier;
10069
10818
  if (!args || "subscriptionId" in args && args.subscriptionId !== subscriptionId && args.subscriptionId !== subscriptionIdentifier || "subscription" in args && args.subscription.id !== subscriptionId && args.subscription.identifier !== subscriptionIdentifier) {
10070
10819
  return;
10071
10820
  }
@@ -10094,25 +10843,25 @@ var useSubscription = (options) => {
10094
10843
  });
10095
10844
  return { subscription, loading, mutate, refetch, create, remove };
10096
10845
  };
10097
- var _tmpl$90 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path fill=currentColor d="M9.237 12.088c0 .362-.128.71-.357.965-.23.255-.541.398-.866.398s-.637-.143-.866-.398a1.45 1.45 0 0 1-.357-.965zM11.23 4.373a.39.39 0 0 1 .53.57l-7.402 6.903a.39.39 0 0 1-.531-.57zM11.058 6.652q.015.162.015.327v.4A4.37 4.37 0 0 0 12 10.097l.142.177c.16.2.2.487.1.732a.61.61 0 0 1-.557.402H5.96zM8.014 2.55c.338 0 .612.305.612.682v.41c.53.119 1.011.392 1.404.775L4.215 9.84c.478-.707.74-1.57.74-2.46v-.4c0-1.648 1.052-3.023 2.448-3.338v-.409c0-.377.273-.681.61-.681">`);
10846
+ var _tmpl$93 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path fill=currentColor d="M9.237 12.088c0 .362-.128.71-.357.965-.23.255-.541.398-.866.398s-.637-.143-.866-.398a1.45 1.45 0 0 1-.357-.965zM11.23 4.373a.39.39 0 0 1 .53.57l-7.402 6.903a.39.39 0 0 1-.531-.57zM11.058 6.652q.015.162.015.327v.4A4.37 4.37 0 0 0 12 10.097l.142.177c.16.2.2.487.1.732a.61.61 0 0 1-.557.402H5.96zM8.014 2.55c.338 0 .612.305.612.682v.41c.53.119 1.011.392 1.404.775L4.215 9.84c.478-.707.74-1.57.74-2.46v-.4c0-1.648 1.052-3.023 2.448-3.338v-.409c0-.377.273-.681.61-.681">`);
10098
10847
  function BellCross(props) {
10099
10848
  return (() => {
10100
- var _el$ = _tmpl$90();
10849
+ var _el$ = _tmpl$93();
10101
10850
  spread(_el$, props, true, true);
10102
10851
  return _el$;
10103
10852
  })();
10104
10853
  }
10105
- var _tmpl$91 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=1.1 d="M7.206 12.5c.08.152.196.278.336.366a.86.86 0 0 0 .916 0 .96.96 0 0 0 .336-.366m.58-6.5h2.75M10.75 4.5v3m.918 1.732q.156.227.338.431.091.11.113.257a.54.54 0 0 1-.033.282.5.5 0 0 1-.17.217.43.43 0 0 1-.25.08H4.334a.43.43 0 0 1-.25-.08.5.5 0 0 1-.17-.217.54.54 0 0 1 .081-.539C4.604 8.978 5.25 8.25 5.25 6c0-.515.121-1.02.352-1.47.231-.448.564-.824.967-1.092a2.6 2.6 0 0 1 1.333-.436c.471-.018.94.096 1.358.332">`);
10854
+ var _tmpl$94 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path stroke=currentColor stroke-linecap=round stroke-linejoin=round stroke-width=1.1 d="M7.206 12.5c.08.152.196.278.336.366a.86.86 0 0 0 .916 0 .96.96 0 0 0 .336-.366m.58-6.5h2.75M10.75 4.5v3m.918 1.732q.156.227.338.431.091.11.113.257a.54.54 0 0 1-.033.282.5.5 0 0 1-.17.217.43.43 0 0 1-.25.08H4.334a.43.43 0 0 1-.25-.08.5.5 0 0 1-.17-.217.54.54 0 0 1 .081-.539C4.604 8.978 5.25 8.25 5.25 6c0-.515.121-1.02.352-1.47.231-.448.564-.824.967-1.092a2.6 2.6 0 0 1 1.333-.436c.471-.018.94.096 1.358.332">`);
10106
10855
  function BellPlus(props) {
10107
10856
  return (() => {
10108
- var _el$ = _tmpl$91();
10857
+ var _el$ = _tmpl$94();
10109
10858
  spread(_el$, props, true, true);
10110
10859
  return _el$;
10111
10860
  })();
10112
10861
  }
10113
10862
 
10114
10863
  // src/ui/components/subscription/SubscriptionButton.tsx
10115
- var _tmpl$92 = /* @__PURE__ */ template(`<span><span>`);
10864
+ var _tmpl$95 = /* @__PURE__ */ template(`<span><span>`);
10116
10865
  var iconKeyToComponentMap3 = {
10117
10866
  bellCross: BellCross,
10118
10867
  bellPlus: BellPlus
@@ -10146,7 +10895,7 @@ var SubscriptionButton = (props) => {
10146
10895
  return props.loading;
10147
10896
  },
10148
10897
  get children() {
10149
- var _el$ = _tmpl$92(), _el$2 = _el$.firstChild;
10898
+ var _el$ = _tmpl$95(), _el$2 = _el$.firstChild;
10150
10899
  insert(_el$, createComponent(Motion.span, {
10151
10900
  initial: {
10152
10901
  opacity: 1
@@ -10267,9 +11016,9 @@ var SubscriptionButton = (props) => {
10267
11016
  }
10268
11017
  });
10269
11018
  };
10270
- var _tmpl$93 = /* @__PURE__ */ template(`<div>`);
10271
- var _tmpl$230 = /* @__PURE__ */ template(`<div><div><div><span></span></div><div><span>`);
10272
- var _tmpl$319 = /* @__PURE__ */ template(`<div><label>`);
11019
+ var _tmpl$96 = /* @__PURE__ */ template(`<div>`);
11020
+ var _tmpl$232 = /* @__PURE__ */ template(`<div><div><div><span></span></div><div><span>`);
11021
+ var _tmpl$320 = /* @__PURE__ */ template(`<div><label>`);
10273
11022
  var SubscriptionPreferenceGroupRow = (props) => {
10274
11023
  const style = useStyle();
10275
11024
  const {
@@ -10314,7 +11063,7 @@ var SubscriptionPreferenceGroupRow = (props) => {
10314
11063
  return preference.enabled;
10315
11064
  };
10316
11065
  return (() => {
10317
- var _el$ = _tmpl$230(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild;
11066
+ var _el$ = _tmpl$232(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild;
10318
11067
  _el$2.$$click = () => {
10319
11068
  setIsOpened((prev) => !prev);
10320
11069
  };
@@ -10380,13 +11129,13 @@ var SubscriptionPreferenceGroupRow = (props) => {
10380
11129
  return isOpened();
10381
11130
  },
10382
11131
  get children() {
10383
- var _el$7 = _tmpl$93();
11132
+ var _el$7 = _tmpl$96();
10384
11133
  insert(_el$7, createComponent(For, {
10385
11134
  get each() {
10386
11135
  return preferences();
10387
11136
  },
10388
11137
  children: (el) => (() => {
10389
- var _el$8 = _tmpl$319(), _el$9 = _el$8.firstChild;
11138
+ var _el$8 = _tmpl$320(), _el$9 = _el$8.firstChild;
10390
11139
  insert(_el$9, () => {
10391
11140
  var _a;
10392
11141
  return (_a = el.label) != null ? _a : t(el.preference.workflow.identifier);
@@ -10508,7 +11257,7 @@ var SubscriptionPreferenceGroupRow = (props) => {
10508
11257
  })();
10509
11258
  };
10510
11259
  delegateEvents(["click"]);
10511
- var _tmpl$94 = /* @__PURE__ */ template(`<div><label>`);
11260
+ var _tmpl$97 = /* @__PURE__ */ template(`<div><label>`);
10512
11261
  var SubscriptionPreferenceRow = (props) => {
10513
11262
  const style = useStyle();
10514
11263
  const {
@@ -10524,7 +11273,7 @@ var SubscriptionPreferenceRow = (props) => {
10524
11273
  return preference().enabled;
10525
11274
  };
10526
11275
  return (() => {
10527
- var _el$ = _tmpl$94(), _el$2 = _el$.firstChild;
11276
+ var _el$ = _tmpl$97(), _el$2 = _el$.firstChild;
10528
11277
  insert(_el$2, () => {
10529
11278
  var _a;
10530
11279
  return (_a = props.preference.label) != null ? _a : t(preference().workflow.identifier);
@@ -10569,19 +11318,19 @@ var SubscriptionPreferenceRow = (props) => {
10569
11318
  return _el$;
10570
11319
  })();
10571
11320
  };
10572
- var _tmpl$95 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg width=138 height=100 fill=none viewBox="0 0 138 100"><rect width=131.1 height=33.1 x=3.025 y=.45 stroke=#e1e4ea stroke-dasharray="10 2.7"stroke-width=.9 rx=3.55></rect><rect width=123.1 height=25.1 x=7.025 y=4.45 fill=#fff rx=1.55></rect><rect width=123.1 height=25.1 x=7.025 y=4.45 stroke=#f2f2f2 stroke-width=.9 rx=1.55></rect><g clip-path=url(#a)><path stroke=#cacfd8 stroke-linecap=round stroke-linejoin=round stroke-width=1.08 d="m66.7 17 1.25 1.25 2.5-2.5M72.74 17a4.167 4.167 0 1 1-8.333 0 4.167 4.167 0 0 1 8.334 0"></path></g><g filter=url(#b)><g clip-path=url(#c)><rect width=132 height=29 x=1.724 y=67.207 fill=#fcfcfc rx=4 transform="rotate(-4 1.724 67.207)"></rect><path fill=#f4f4f4 d="M10.402 76.625a4 4 0 0 1 3.711-4.27l9.976-.697a4 4 0 0 1 4.27 3.711l.627 8.978a4 4 0 0 1-3.711 4.27l-9.976.697a4 4 0 0 1-4.27-3.71z"></path><path fill=#e4e4e4 d="M19.345 75.498c-.316.022-.55.319-.527.664l.027.374c-1.28.38-2.172 1.706-2.067 3.214l.026.367a3.97 3.97 0 0 1-.69 2.546l-.12.171a.67.67 0 0 0-.049.677.57.57 0 0 0 .546.332l6.84-.479a.57.57 0 0 0 .495-.404.67.67 0 0 0-.141-.664l-.143-.152a3.96 3.96 0 0 1-1.038-2.426l-.026-.366c-.105-1.508-1.173-2.699-2.493-2.896l-.026-.374c-.025-.345-.299-.606-.614-.584m1.479 9.555c.197-.248.294-.575.271-.906l-1.14.08-1.14.08c.023.331.165.64.395.86.23.218.53.328.832.307.303-.021.584-.172.782-.42"></path><rect width=27 height=3 x=36.373 y=75.311 fill=url(#d) rx=1.5 transform="rotate(-4 36.373 75.31)"></rect><rect width=59 height=3 x=36.722 y=80.299 fill=url(#e) rx=1.5 transform="rotate(-4 36.722 80.299)"></rect><rect width=59 height=3 x=36.722 y=80.299 fill=url(#f) rx=1.5 transform="rotate(-4 36.722 80.299)"></rect></g><rect width=132 height=29 x=1.724 y=67.207 stroke=#e6e6e6 stroke-opacity=.5 stroke-width=.6 rx=4 transform="rotate(-4 1.724 67.207)"></rect></g><path stroke=#e1e4ea stroke-linejoin=bevel d="M68.596 37v23.614"></path><defs><linearGradient id=d x1=29.846 x2=67.676 y1=76.586 y2=76.586 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=e x1=22.458 x2=105.123 y1=81.574 y2=81.574 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=f x1=22.458 x2=105.123 y1=81.574 y2=81.574 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><clipPath id=a><path fill=#fff d="M63.575 12h10v10h-10z"></path></clipPath><clipPath id=c><rect width=132 height=29 x=1.724 y=67.207 fill=#fff rx=4 transform="rotate(-4 1.724 67.207)"></rect></clipPath><filter id=b width=137.15 height=41.586 x=0 y=57.969 color-interpolation-filters=sRGB filterUnits=userSpaceOnUse><feFlood flood-opacity=0 result=BackgroundImageFix></feFlood><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=1.693></feOffset><feGaussianBlur stdDeviation=.847></feGaussianBlur><feColorMatrix values="0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0.02 0"></feColorMatrix><feBlend in2=BackgroundImageFix result=effect1_dropShadow_4908_18899></feBlend><feBlend in=SourceGraphic in2=effect1_dropShadow_4908_18899 result=shape></feBlend><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=-2></feOffset><feComposite in2=hardAlpha k2=-1 k3=1 operator=arithmetic></feComposite><feColorMatrix values="0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 1 0"></feColorMatrix><feBlend in2=shape result=effect2_innerShadow_4908_18899>`);
11321
+ var _tmpl$98 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg width=138 height=100 fill=none viewBox="0 0 138 100"><rect width=131.1 height=33.1 x=3.025 y=.45 stroke=#e1e4ea stroke-dasharray="10 2.7"stroke-width=.9 rx=3.55></rect><rect width=123.1 height=25.1 x=7.025 y=4.45 fill=#fff rx=1.55></rect><rect width=123.1 height=25.1 x=7.025 y=4.45 stroke=#f2f2f2 stroke-width=.9 rx=1.55></rect><g clip-path=url(#a)><path stroke=#cacfd8 stroke-linecap=round stroke-linejoin=round stroke-width=1.08 d="m66.7 17 1.25 1.25 2.5-2.5M72.74 17a4.167 4.167 0 1 1-8.333 0 4.167 4.167 0 0 1 8.334 0"></path></g><g filter=url(#b)><g clip-path=url(#c)><rect width=132 height=29 x=1.724 y=67.207 fill=#fcfcfc rx=4 transform="rotate(-4 1.724 67.207)"></rect><path fill=#f4f4f4 d="M10.402 76.625a4 4 0 0 1 3.711-4.27l9.976-.697a4 4 0 0 1 4.27 3.711l.627 8.978a4 4 0 0 1-3.711 4.27l-9.976.697a4 4 0 0 1-4.27-3.71z"></path><path fill=#e4e4e4 d="M19.345 75.498c-.316.022-.55.319-.527.664l.027.374c-1.28.38-2.172 1.706-2.067 3.214l.026.367a3.97 3.97 0 0 1-.69 2.546l-.12.171a.67.67 0 0 0-.049.677.57.57 0 0 0 .546.332l6.84-.479a.57.57 0 0 0 .495-.404.67.67 0 0 0-.141-.664l-.143-.152a3.96 3.96 0 0 1-1.038-2.426l-.026-.366c-.105-1.508-1.173-2.699-2.493-2.896l-.026-.374c-.025-.345-.299-.606-.614-.584m1.479 9.555c.197-.248.294-.575.271-.906l-1.14.08-1.14.08c.023.331.165.64.395.86.23.218.53.328.832.307.303-.021.584-.172.782-.42"></path><rect width=27 height=3 x=36.373 y=75.311 fill=url(#d) rx=1.5 transform="rotate(-4 36.373 75.31)"></rect><rect width=59 height=3 x=36.722 y=80.299 fill=url(#e) rx=1.5 transform="rotate(-4 36.722 80.299)"></rect><rect width=59 height=3 x=36.722 y=80.299 fill=url(#f) rx=1.5 transform="rotate(-4 36.722 80.299)"></rect></g><rect width=132 height=29 x=1.724 y=67.207 stroke=#e6e6e6 stroke-opacity=.5 stroke-width=.6 rx=4 transform="rotate(-4 1.724 67.207)"></rect></g><path stroke=#e1e4ea stroke-linejoin=bevel d="M68.596 37v23.614"></path><defs><linearGradient id=d x1=29.846 x2=67.676 y1=76.586 y2=76.586 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=e x1=22.458 x2=105.123 y1=81.574 y2=81.574 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=f x1=22.458 x2=105.123 y1=81.574 y2=81.574 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><clipPath id=a><path fill=#fff d="M63.575 12h10v10h-10z"></path></clipPath><clipPath id=c><rect width=132 height=29 x=1.724 y=67.207 fill=#fff rx=4 transform="rotate(-4 1.724 67.207)"></rect></clipPath><filter id=b width=137.15 height=41.586 x=0 y=57.969 color-interpolation-filters=sRGB filterUnits=userSpaceOnUse><feFlood flood-opacity=0 result=BackgroundImageFix></feFlood><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=1.693></feOffset><feGaussianBlur stdDeviation=.847></feGaussianBlur><feColorMatrix values="0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0.02 0"></feColorMatrix><feBlend in2=BackgroundImageFix result=effect1_dropShadow_4908_18899></feBlend><feBlend in=SourceGraphic in2=effect1_dropShadow_4908_18899 result=shape></feBlend><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=-2></feOffset><feComposite in2=hardAlpha k2=-1 k3=1 operator=arithmetic></feComposite><feColorMatrix values="0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 1 0"></feColorMatrix><feBlend in2=shape result=effect2_innerShadow_4908_18899>`);
10573
11322
  var EmptyState = () => {
10574
- return _tmpl$95();
11323
+ return _tmpl$98();
10575
11324
  };
10576
- var _tmpl$96 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg width=136 height=88 fill=none viewBox="0 0 136 88"><g filter=url(#a)><g clip-path=url(#b)><rect width=132 height=29 x=1.993 y=.301 fill=#fcfcfc rx=4></rect><path fill=#f4f4f4 d="M9.993 10.3a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v9a4 4 0 0 1-4 4h-10a4 4 0 0 1-4-4z"></path><path fill=#e4e4e4 d="M18.993 9.8c-.316 0-.572.28-.572.626v.375c-1.303.289-2.285 1.55-2.285 3.062v.367c0 .918-.31 1.805-.866 2.493l-.133.162a.67.67 0 0 0-.094.672.57.57 0 0 0 .521.369h6.857a.57.57 0 0 0 .522-.37.67.67 0 0 0-.095-.671l-.132-.162a3.96 3.96 0 0 1-.866-2.492v-.368c0-1.511-.982-2.773-2.286-3.062v-.375c0-.346-.255-.625-.571-.625m.809 9.636c.214-.235.334-.553.334-.885H17.85c0 .332.12.65.334.885s.505.365.809.365c.303 0 .594-.131.809-.365"></path><rect width=27 height=3 x=35.993 y=10.801 fill=url(#c) rx=1.5></rect><rect width=59 height=3 x=35.993 y=15.801 fill=url(#d) rx=1.5></rect><rect width=59 height=3 x=35.993 y=15.801 fill=url(#e) rx=1.5></rect></g><rect width=132 height=29 x=1.993 y=.301 stroke=#e6e6e6 stroke-opacity=.5 stroke-width=.6 rx=4></rect></g><rect width=131.1 height=33.1 x=2.443 y=53.751 stroke=#e1e4ea stroke-dasharray="10 2.7"stroke-width=.9 rx=3.55></rect><rect width=123.1 height=25.1 x=6.443 y=57.751 fill=#fff rx=1.55></rect><rect width=123.1 height=25.1 x=6.443 y=57.751 stroke=#f2f2f2 stroke-width=.9 rx=1.55></rect><path fill=#cacfd8 d="M68.743 71.145v.784a2.25 2.25 0 0 0-3 2.122h-.75a3 3 0 0 1 3.75-2.906m-.75-.47a2.25 2.25 0 1 1-.001-4.498 2.25 2.25 0 0 1 .001 4.499m0-.75a1.5 1.5 0 1 0 0-2.999 1.5 1.5 0 0 0 0 3m2.47 2.25-.686-.685.53-.53 1.591 1.59-1.59 1.592-.531-.53.686-.686h-1.345v-.75z"></path><path stroke=#e1e4ea stroke-linejoin=bevel d="M67.993 50.3v-18"></path><defs><linearGradient id=c x1=29.466 x2=67.295 y1=12.076 y2=12.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=d x1=21.729 x2=104.394 y1=17.076 y2=17.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=e x1=21.729 x2=104.394 y1=17.076 y2=17.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><clipPath id=b><rect width=132 height=29 x=1.993 y=.301 fill=#fff rx=4></rect></clipPath><filter id=a width=135.986 height=32.988 x=0 y=0 color-interpolation-filters=sRGB filterUnits=userSpaceOnUse><feFlood flood-opacity=0 result=BackgroundImageFix></feFlood><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=1.693></feOffset><feGaussianBlur stdDeviation=.847></feGaussianBlur><feColorMatrix values="0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0.02 0"></feColorMatrix><feBlend in2=BackgroundImageFix result=effect1_dropShadow_4850_12317></feBlend><feBlend in=SourceGraphic in2=effect1_dropShadow_4850_12317 result=shape></feBlend><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=-2></feOffset><feComposite in2=hardAlpha k2=-1 k3=1 operator=arithmetic></feComposite><feColorMatrix values="0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 1 0"></feColorMatrix><feBlend in2=shape result=effect2_innerShadow_4850_12317>`);
11325
+ var _tmpl$99 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg width=136 height=88 fill=none viewBox="0 0 136 88"><g filter=url(#a)><g clip-path=url(#b)><rect width=132 height=29 x=1.993 y=.301 fill=#fcfcfc rx=4></rect><path fill=#f4f4f4 d="M9.993 10.3a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v9a4 4 0 0 1-4 4h-10a4 4 0 0 1-4-4z"></path><path fill=#e4e4e4 d="M18.993 9.8c-.316 0-.572.28-.572.626v.375c-1.303.289-2.285 1.55-2.285 3.062v.367c0 .918-.31 1.805-.866 2.493l-.133.162a.67.67 0 0 0-.094.672.57.57 0 0 0 .521.369h6.857a.57.57 0 0 0 .522-.37.67.67 0 0 0-.095-.671l-.132-.162a3.96 3.96 0 0 1-.866-2.492v-.368c0-1.511-.982-2.773-2.286-3.062v-.375c0-.346-.255-.625-.571-.625m.809 9.636c.214-.235.334-.553.334-.885H17.85c0 .332.12.65.334.885s.505.365.809.365c.303 0 .594-.131.809-.365"></path><rect width=27 height=3 x=35.993 y=10.801 fill=url(#c) rx=1.5></rect><rect width=59 height=3 x=35.993 y=15.801 fill=url(#d) rx=1.5></rect><rect width=59 height=3 x=35.993 y=15.801 fill=url(#e) rx=1.5></rect></g><rect width=132 height=29 x=1.993 y=.301 stroke=#e6e6e6 stroke-opacity=.5 stroke-width=.6 rx=4></rect></g><rect width=131.1 height=33.1 x=2.443 y=53.751 stroke=#e1e4ea stroke-dasharray="10 2.7"stroke-width=.9 rx=3.55></rect><rect width=123.1 height=25.1 x=6.443 y=57.751 fill=#fff rx=1.55></rect><rect width=123.1 height=25.1 x=6.443 y=57.751 stroke=#f2f2f2 stroke-width=.9 rx=1.55></rect><path fill=#cacfd8 d="M68.743 71.145v.784a2.25 2.25 0 0 0-3 2.122h-.75a3 3 0 0 1 3.75-2.906m-.75-.47a2.25 2.25 0 1 1-.001-4.498 2.25 2.25 0 0 1 .001 4.499m0-.75a1.5 1.5 0 1 0 0-2.999 1.5 1.5 0 0 0 0 3m2.47 2.25-.686-.685.53-.53 1.591 1.59-1.59 1.592-.531-.53.686-.686h-1.345v-.75z"></path><path stroke=#e1e4ea stroke-linejoin=bevel d="M67.993 50.3v-18"></path><defs><linearGradient id=c x1=29.466 x2=67.295 y1=12.076 y2=12.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=d x1=21.729 x2=104.394 y1=17.076 y2=17.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><linearGradient id=e x1=21.729 x2=104.394 y1=17.076 y2=17.076 gradientUnits=userSpaceOnUse><stop stop-color=#e4e4e4></stop><stop offset=.48 stop-color=#f1f1f1></stop><stop offset=.992 stop-color=#fcfcfc stop-opacity=.75></stop></linearGradient><clipPath id=b><rect width=132 height=29 x=1.993 y=.301 fill=#fff rx=4></rect></clipPath><filter id=a width=135.986 height=32.988 x=0 y=0 color-interpolation-filters=sRGB filterUnits=userSpaceOnUse><feFlood flood-opacity=0 result=BackgroundImageFix></feFlood><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=1.693></feOffset><feGaussianBlur stdDeviation=.847></feGaussianBlur><feColorMatrix values="0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0 0.917008 0 0 0 0.02 0"></feColorMatrix><feBlend in2=BackgroundImageFix result=effect1_dropShadow_4850_12317></feBlend><feBlend in=SourceGraphic in2=effect1_dropShadow_4850_12317 result=shape></feBlend><feColorMatrix in=SourceAlpha result=hardAlpha values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"></feColorMatrix><feOffset dy=-2></feOffset><feComposite in2=hardAlpha k2=-1 k3=1 operator=arithmetic></feComposite><feColorMatrix values="0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 0 0.975488 0 0 0 1 0"></feColorMatrix><feBlend in2=shape result=effect2_innerShadow_4850_12317>`);
10577
11326
  var NotSubscribedState = () => {
10578
- return _tmpl$96();
11327
+ return _tmpl$99();
10579
11328
  };
10580
- var _tmpl$97 = /* @__PURE__ */ template(`<div><div></div><div></div><div>`);
11329
+ var _tmpl$100 = /* @__PURE__ */ template(`<div><div></div><div></div><div>`);
10581
11330
  var SubscriptionPreferencesListSkeleton = () => {
10582
11331
  const style = useStyle();
10583
11332
  return (() => {
10584
- var _el$ = _tmpl$97(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling;
11333
+ var _el$ = _tmpl$100(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling;
10585
11334
  insert(_el$2, createComponent(SkeletonText, {
10586
11335
  appearanceKey: "notificationList__skeletonText",
10587
11336
  "class": "nt-h-3.5 nt-w-1/3 nt-bg-neutral-alpha-50 nt-rounded-sm nt-animate-shimmer"
@@ -10636,7 +11385,7 @@ var SubscriptionPreferencesListSkeleton = () => {
10636
11385
  };
10637
11386
 
10638
11387
  // src/ui/components/subscription/SubscriptionPreferencesFallback.tsx
10639
- var _tmpl$98 = /* @__PURE__ */ template(`<div><div><span></span><span>`);
11388
+ var _tmpl$101 = /* @__PURE__ */ template(`<div><div><span></span><span>`);
10640
11389
  var SubscriptionPreferencesFallback = (props) => {
10641
11390
  const style = useStyle();
10642
11391
  const {
@@ -10654,7 +11403,7 @@ var SubscriptionPreferencesFallback = (props) => {
10654
11403
  return createComponent(SubscriptionPreferencesListSkeleton, {});
10655
11404
  },
10656
11405
  get children() {
10657
- var _el$ = _tmpl$98(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
11406
+ var _el$ = _tmpl$101(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling;
10658
11407
  insert(_el$, createComponent(Show, {
10659
11408
  get when() {
10660
11409
  return hasEmptyPreferences();
@@ -10733,9 +11482,9 @@ var SubscriptionPreferencesFallback = (props) => {
10733
11482
  };
10734
11483
 
10735
11484
  // src/ui/components/subscription/SubscriptionPreferences.tsx
10736
- var _tmpl$99 = /* @__PURE__ */ template(`<div class=nt-max-w-56>`);
10737
- var _tmpl$231 = /* @__PURE__ */ template(`<div><p>`);
10738
- var _tmpl$320 = /* @__PURE__ */ template(`<div>`);
11485
+ var _tmpl$102 = /* @__PURE__ */ template(`<div class=nt-max-w-56>`);
11486
+ var _tmpl$233 = /* @__PURE__ */ template(`<div><p>`);
11487
+ var _tmpl$321 = /* @__PURE__ */ template(`<div>`);
10739
11488
  var SubscriptionPreferences = (props) => {
10740
11489
  const style = useStyle();
10741
11490
  const {
@@ -10832,7 +11581,7 @@ var SubscriptionPreferences = (props) => {
10832
11581
  });
10833
11582
  });
10834
11583
  return (() => {
10835
- var _el$ = _tmpl$320();
11584
+ var _el$ = _tmpl$321();
10836
11585
  insert(_el$, createComponent(Show, {
10837
11586
  get when() {
10838
11587
  return !props.renderPreferences;
@@ -10851,7 +11600,7 @@ var SubscriptionPreferences = (props) => {
10851
11600
  },
10852
11601
  get children() {
10853
11602
  return [(() => {
10854
- var _el$2 = _tmpl$231(), _el$3 = _el$2.firstChild;
11603
+ var _el$2 = _tmpl$233(), _el$3 = _el$2.firstChild;
10855
11604
  insert(_el$3, () => t("subscription.preferences.header"));
10856
11605
  insert(_el$2, createComponent(Tooltip.Root, {
10857
11606
  get children() {
@@ -10875,7 +11624,7 @@ var SubscriptionPreferences = (props) => {
10875
11624
  }), createComponent(Tooltip.Content, {
10876
11625
  "data-localization": "subscription.preferences.headerInfo",
10877
11626
  get children() {
10878
- var _el$4 = _tmpl$99();
11627
+ var _el$4 = _tmpl$102();
10879
11628
  insert(_el$4, () => t("subscription.preferences.headerInfo"));
10880
11629
  return _el$4;
10881
11630
  }
@@ -10906,7 +11655,7 @@ var SubscriptionPreferences = (props) => {
10906
11655
  });
10907
11656
  return _el$2;
10908
11657
  })(), (() => {
10909
- var _el$5 = _tmpl$320();
11658
+ var _el$5 = _tmpl$321();
10910
11659
  insert(_el$5, createComponent(Show, {
10911
11660
  get when() {
10912
11661
  var _a, _b, _c, _d;
@@ -10927,7 +11676,7 @@ var SubscriptionPreferences = (props) => {
10927
11676
  });
10928
11677
  },
10929
11678
  get children() {
10930
- var _el$6 = _tmpl$320();
11679
+ var _el$6 = _tmpl$321();
10931
11680
  insert(_el$6, createComponent(Index, {
10932
11681
  get each() {
10933
11682
  return groupedPreferences();
@@ -11178,7 +11927,7 @@ var SubscriptionCog = (props) => {
11178
11927
  };
11179
11928
 
11180
11929
  // src/ui/components/subscription/Subscription.tsx
11181
- var _tmpl$100 = /* @__PURE__ */ template(`<div>`);
11930
+ var _tmpl$103 = /* @__PURE__ */ template(`<div>`);
11182
11931
  function extractWorkflowIds(preferences) {
11183
11932
  var _a;
11184
11933
  const ids = [];
@@ -11257,7 +12006,7 @@ var Subscription = (props) => {
11257
12006
  }
11258
12007
  };
11259
12008
  return (() => {
11260
- var _el$ = _tmpl$100();
12009
+ var _el$ = _tmpl$103();
11261
12010
  insert(_el$, createComponent(SubscriptionButton, {
11262
12011
  get subscription() {
11263
12012
  return subscription();
@@ -11536,10 +12285,12 @@ var novuComponents = {
11536
12285
  SubscriptionPreferences: SubscriptionPreferencesWrapper,
11537
12286
  ConnectChat,
11538
12287
  SlackLinkUser,
11539
- SlackConnectButton
12288
+ SlackConnectButton,
12289
+ MsTeamsLinkUser,
12290
+ MsTeamsConnectButton
11540
12291
  };
11541
12292
  var SUBSCRIPTION_COMPONENTS = ["Subscription", "SubscriptionButton", "SubscriptionPreferences"];
11542
- var CHANNEL_COMPONENTS = ["ConnectChat", "SlackLinkUser", "SlackConnectButton"];
12293
+ var CHANNEL_COMPONENTS = ["ConnectChat", "SlackLinkUser", "SlackConnectButton", "MsTeamsLinkUser", "MsTeamsConnectButton"];
11543
12294
  var InboxComponentsRenderer = (props) => {
11544
12295
  return createComponent(Show, {
11545
12296
  get when() {