@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.
- package/dist/cjs/{chunk-6I5A5OGE.js → chunk-SP44ETLM.js} +231 -25
- package/dist/{esm/inbox-service-CEMMLHsX.d.mts → cjs/inbox-service-CGCuuYnv.d.ts} +52 -3
- package/dist/cjs/index.d.ts +16 -3
- package/dist/cjs/index.js +10 -10
- package/dist/cjs/internal/index.d.ts +1 -1
- package/dist/{esm/novu-BlonRpYH.d.mts → cjs/novu-CmNBco-0.d.ts} +10 -1
- package/dist/cjs/themes/index.d.ts +3 -3
- package/dist/{esm/types-B29Y1SQy.d.mts → cjs/types-BF6zvyj6.d.ts} +27 -6
- package/dist/cjs/ui/index.d.ts +56 -8
- package/dist/cjs/ui/index.js +959 -208
- package/dist/esm/{chunk-FBE56J52.mjs → chunk-BKA3HRZM.mjs} +231 -25
- package/dist/{cjs/inbox-service-CEMMLHsX.d.ts → esm/inbox-service-CGCuuYnv.d.mts} +52 -3
- package/dist/esm/index.d.mts +16 -3
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/internal/index.d.mts +1 -1
- package/dist/{cjs/novu-ChPiHuXt.d.ts → esm/novu-CFYEiYN8.d.mts} +10 -1
- package/dist/esm/themes/index.d.mts +3 -3
- package/dist/{cjs/types-CPxEgcM4.d.ts → esm/types-CJKmgwu6.d.mts} +27 -6
- package/dist/esm/ui/index.d.mts +56 -8
- package/dist/esm/ui/index.mjs +952 -201
- package/dist/novu.min.js +16 -16
- package/dist/novu.min.js.gz +0 -0
- package/package.json +1 -1
package/dist/esm/ui/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Novu, isSameFilter, isBrowser, DEFAULT_API_VERSION, checkNotificationTagFilter, checkNotificationDataFilter } from '../chunk-
|
|
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
|
-
//
|
|
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
|
|
1468
|
+
var _a2;
|
|
1457
1469
|
if (!data) {
|
|
1458
1470
|
return;
|
|
1459
1471
|
}
|
|
1460
|
-
const
|
|
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 (
|
|
1466
|
-
|
|
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
|
-
|
|
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
|
|
1850
|
-
|
|
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,
|
|
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/
|
|
9395
|
-
var
|
|
9396
|
-
var
|
|
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/
|
|
9399
|
-
var _tmpl$
|
|
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>
|
|
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
|
|
9406
|
-
var
|
|
9407
|
-
var
|
|
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.
|
|
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 :
|
|
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]
|
|
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
|
|
9474
|
+
const timeoutIdRef = {
|
|
9447
9475
|
current: null
|
|
9448
9476
|
};
|
|
9449
9477
|
onCleanup(() => {
|
|
9450
|
-
if (
|
|
9451
|
-
|
|
9452
|
-
|
|
9478
|
+
if (timeoutIdRef.current !== null) {
|
|
9479
|
+
clearTimeout(timeoutIdRef.current);
|
|
9480
|
+
timeoutIdRef.current = null;
|
|
9453
9481
|
}
|
|
9454
9482
|
});
|
|
9455
9483
|
const startPolling = () => {
|
|
9456
|
-
|
|
9457
|
-
|
|
9458
|
-
|
|
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
|
-
|
|
9462
|
-
|
|
9463
|
-
|
|
9464
|
-
|
|
9465
|
-
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
if (
|
|
9469
|
-
|
|
9470
|
-
|
|
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
|
-
|
|
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
|
-
|
|
9478
|
-
|
|
9479
|
-
|
|
9480
|
-
|
|
9481
|
-
|
|
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
|
|
9505
|
-
const result = yield
|
|
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:
|
|
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
|
-
(
|
|
9545
|
+
(_f = props.onConnectError) == null ? void 0 : _f.call(props, result.error);
|
|
9516
9546
|
return;
|
|
9517
9547
|
}
|
|
9518
|
-
if ((
|
|
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$
|
|
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$
|
|
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(
|
|
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$
|
|
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
|
|
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
|
|
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
|
|
9834
|
+
var POLL_INTERVAL_MS = 2500;
|
|
9728
9835
|
var POLL_TIMEOUT_MS2 = 12e4;
|
|
9729
|
-
var
|
|
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.
|
|
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 :
|
|
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 === "
|
|
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 === "
|
|
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("
|
|
9924
|
+
(_d = props.onLinkError) == null ? void 0 : _d.call(props, new Error("MS Teams OAuth timed out. Please try again."));
|
|
9810
9925
|
}
|
|
9811
|
-
}),
|
|
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
|
|
9951
|
+
const result = yield generateLinkUserOAuthUrl({
|
|
9832
9952
|
integrationIdentifier: integrationIdentifier(),
|
|
9833
9953
|
connectionIdentifier: connectionIdentifier(),
|
|
9834
|
-
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
|
-
(
|
|
9959
|
+
(_f = props.onLinkError) == null ? void 0 : _f.call(props, result.error);
|
|
9842
9960
|
return;
|
|
9843
9961
|
}
|
|
9844
|
-
if ((
|
|
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: "
|
|
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$
|
|
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: "
|
|
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(
|
|
10023
|
+
return createComponent(MsTeamsColored, {
|
|
9903
10024
|
get ["class"]() {
|
|
9904
10025
|
return style({
|
|
9905
|
-
key: "
|
|
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: "
|
|
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$
|
|
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: "
|
|
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$
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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
|
|
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
|
|
10138
|
+
const integrationIdentifier = () => props.integrationIdentifier;
|
|
10139
|
+
const connectionMode = () => {
|
|
10009
10140
|
var _a;
|
|
10010
|
-
|
|
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
|
|
10015
|
-
|
|
10016
|
-
|
|
10017
|
-
|
|
10018
|
-
|
|
10019
|
-
|
|
10020
|
-
|
|
10021
|
-
|
|
10022
|
-
|
|
10023
|
-
|
|
10024
|
-
|
|
10025
|
-
|
|
10026
|
-
|
|
10027
|
-
|
|
10028
|
-
|
|
10029
|
-
|
|
10030
|
-
|
|
10031
|
-
|
|
10032
|
-
|
|
10033
|
-
|
|
10034
|
-
|
|
10035
|
-
|
|
10036
|
-
|
|
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
|
|
10042
|
-
|
|
10043
|
-
|
|
10044
|
-
|
|
10045
|
-
|
|
10046
|
-
|
|
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
|
-
|
|
10049
|
-
const
|
|
10050
|
-
|
|
10051
|
-
|
|
10052
|
-
|
|
10053
|
-
|
|
10054
|
-
|
|
10055
|
-
|
|
10056
|
-
|
|
10057
|
-
|
|
10058
|
-
|
|
10059
|
-
|
|
10060
|
-
|
|
10061
|
-
|
|
10062
|
-
|
|
10063
|
-
|
|
10064
|
-
|
|
10065
|
-
|
|
10066
|
-
|
|
10067
|
-
|
|
10068
|
-
|
|
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$
|
|
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$
|
|
10849
|
+
var _el$ = _tmpl$93();
|
|
10101
10850
|
spread(_el$, props, true, true);
|
|
10102
10851
|
return _el$;
|
|
10103
10852
|
})();
|
|
10104
10853
|
}
|
|
10105
|
-
var _tmpl$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
10271
|
-
var _tmpl$
|
|
10272
|
-
var _tmpl$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
11323
|
+
return _tmpl$98();
|
|
10575
11324
|
};
|
|
10576
|
-
var _tmpl$
|
|
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$
|
|
11327
|
+
return _tmpl$99();
|
|
10579
11328
|
};
|
|
10580
|
-
var _tmpl$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
10737
|
-
var _tmpl$
|
|
10738
|
-
var _tmpl$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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$
|
|
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() {
|