@novu/js 3.5.0-rc.1 → 3.5.0-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
- import { Novu, isSameFilter } from '../chunk-P4YVABAC.mjs';
1
+ import { Novu, DEFAULT_API_VERSION, isSameFilter } from '../chunk-T4OFEC3E.mjs';
2
2
  import { parseMarkdownIntoTokens } from '../chunk-GPV65U5R.mjs';
3
3
  import { __privateAdd, __privateMethod, __privateSet, __privateGet, __spreadProps, __spreadValues, __objRest, __async } from '../chunk-STZMOEWR.mjs';
4
- import { delegateEvents, createComponent, mergeProps, render, Portal as Portal$1, spread, template, insert, memo, effect, className, use, setAttribute, Dynamic } from 'solid-js/web';
4
+ import { createComponent, mergeProps, delegateEvents, render, Portal, spread, template, insert, memo, effect, className, use, setAttribute, Dynamic } from 'solid-js/web';
5
5
  import { createSignal, createContext, useContext, onMount, onCleanup, For, createMemo, createEffect, splitProps, Show, Switch as Switch$1, Match, createResource, Index, batch } from 'solid-js';
6
6
  import { createStore } from 'solid-js/store';
7
7
  import clsx from 'clsx';
8
8
  import { extendTailwindMerge } from 'tailwind-merge';
9
- import { cva } from 'class-variance-authority';
10
9
  import { autoUpdate, offset, flip, shift } from '@floating-ui/dom';
11
10
  import { useFloating } from 'solid-floating-ui';
12
11
  import { Motion as Motion$1 } from 'solid-motionone';
12
+ import { cva } from 'class-variance-authority';
13
13
 
14
- // _vl50ob9im:/Users/dimagrossman/projects/novu/packages/js/src/ui/index.directcss
15
- 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-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-mx-auto{margin-left:auto;margin-right:auto}.nt-mb-2{margin-bottom:.5rem}.nt-mb-4{margin-bottom:1rem}.nt-mb-\\[0\\.625rem\\]{margin-bottom:.625rem}.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-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-8{height:2rem;width:2rem}.nt-size-fit{height:fit-content;width:fit-content}.nt-size-full{height:100%;width:100%}.nt-h-2{height:.5rem}.nt-h-3{height:.75rem}.nt-h-4{height:1rem}.nt-h-5{height:1.25rem}.nt-h-7{height:1.75rem}.nt-h-8{height:2rem}.nt-h-9{height:2.25rem}.nt-h-\\[600px\\]{height:600px}.nt-h-fit{height:fit-content}.nt-h-full{height:100%}.nt-min-h-0{min-height:0}.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-\\[400px\\]{width:400px}.nt-w-\\[60px\\]{width:60px}.nt-w-\\[calc\\(2ch\\+2rem\\)\\]{width:calc(2ch + 2rem)}.nt-w-fit{width:fit-content}.nt-w-full{width:100%}.nt-w-max{width:max-content}.nt-min-w-52{min-width:13rem}.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))}.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-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-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-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-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-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-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-2{padding-bottom:.5rem}.nt-pb-\\[0\\.625rem\\]{padding-bottom:.625rem}.nt-pr-0{padding-right:0}.nt-pt-2\\.5{padding-top:.625rem}.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-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-leading-none{line-height: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-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-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-\\[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-tooltip{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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)}.nt-outline-none{outline:2px solid #0000;outline-offset:2px}.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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-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-backdrop-filter;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,text-decoration-color,fill,stroke;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)}@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)}.\\[interpolate-size\\:allow-keywords\\]{interpolate-size:allow-keywords}.\\[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)}@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-lg:before{border-radius:var(--nv-radius-lg);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-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-lg:after{border-radius:var(--nv-radius-lg);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-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,.nt-group:hover .group-hover\\:nt-opacity-100{opacity:1}.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\\=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-\\[state\\=active\\]\\:nt-text-foreground[data-state=active]{color:var(--nv-color-foreground)}.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-4 .nv-notificationList{padding-bottom:1rem}.\\[\\&_\\.nv-notificationList\\]\\:nt-pb-8 .nv-notificationList{padding-bottom:2rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-4 .nv-preferencesContainer{padding-bottom:1rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-8 .nv-preferencesContainer{padding-bottom:2rem}.\\[\\&_svg\\]\\:nt-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:nt-shrink-0 svg{flex-shrink:0}`;
14
+ // _gl34gdy6p:/Users/dimagrossman/projects/novu/packages/js/src/ui/index.directcss
15
+ 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-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-mx-auto{margin-left:auto;margin-right:auto}.nt--mt-\\[50px\\]{margin-top:-50px}.nt-mb-1{margin-bottom:.25rem}.nt-mb-2{margin-bottom:.5rem}.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-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-8{height:2rem;width:2rem}.nt-size-fit{height:fit-content;width:fit-content}.nt-size-full{height:100%;width:100%}.nt-h-2{height:.5rem}.nt-h-3{height:.75rem}.nt-h-4{height:1rem}.nt-h-5{height:1.25rem}.nt-h-7{height:1.75rem}.nt-h-8{height:2rem}.nt-h-9{height:2.25rem}.nt-h-\\[600px\\]{height:600px}.nt-h-fit{height:fit-content}.nt-h-full{height:100%}.nt-min-h-0{min-height:0}.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-\\[400px\\]{width:400px}.nt-w-\\[60px\\]{width:60px}.nt-w-\\[calc\\(2ch\\+2rem\\)\\]{width:calc(2ch + 2rem)}.nt-w-fit{width:fit-content}.nt-w-full{width:100%}.nt-w-max{width:max-content}.nt-min-w-52{min-width:13rem}.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))}.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-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-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-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-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-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-2{padding-bottom:.5rem}.nt-pb-\\[0\\.625rem\\]{padding-bottom:.625rem}.nt-pr-0{padding-right:0}.nt-pt-2\\.5{padding-top:.625rem}.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-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-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{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-\\[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-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-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-backdrop-filter;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,text-decoration-color,fill,stroke;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)}@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)}.\\[interpolate-size\\:allow-keywords\\]{interpolate-size:allow-keywords}.\\[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)}@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-lg:before{border-radius:var(--nv-radius-lg);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-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-lg:after{border-radius:var(--nv-radius-lg);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-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,.nt-group:hover .group-hover\\:nt-opacity-100{opacity:1}.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\\=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-\\[state\\=active\\]\\:nt-text-foreground[data-state=active]{color:var(--nv-color-foreground)}.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-4 .nv-notificationList{padding-bottom:1rem}.\\[\\&_\\.nv-notificationList\\]\\:nt-pb-8 .nv-notificationList{padding-bottom:2rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-4 .nv-preferencesContainer{padding-bottom:1rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-8 .nv-preferencesContainer{padding-bottom:2rem}.\\[\\&_svg\\]\\:nt-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:nt-shrink-0 svg{flex-shrink:0}`;
16
16
 
17
17
  // src/ui/config/appearanceKeys.ts
18
18
  var appearanceKeys = [
@@ -76,6 +76,7 @@ var appearanceKeys = [
76
76
  // General
77
77
  "root",
78
78
  "bellIcon",
79
+ "lockIcon",
79
80
  "bellContainer",
80
81
  "bellDot",
81
82
  "preferences__button",
@@ -693,14 +694,6 @@ var useStyle = () => {
693
694
  );
694
695
  return styleFuncMemo();
695
696
  };
696
- function useUncontrolledState(props) {
697
- const [uncontrolledValue, setUncontrolledValue] = createSignal(!!props.fallbackValue);
698
- if (props.value !== void 0) {
699
- const accessor = () => !!props.value;
700
- return [accessor, setUncontrolledValue];
701
- }
702
- return [uncontrolledValue, setUncontrolledValue];
703
- }
704
697
 
705
698
  // src/ui/context/AppearanceContext.tsx
706
699
  var AppearanceContext = createContext(void 0);
@@ -967,6 +960,8 @@ var InboxProvider = (props) => {
967
960
  const [maxSnoozeDurationHours, setMaxSnoozeDurationHours] = createSignal(0);
968
961
  const isSnoozeEnabled = createMemo(() => maxSnoozeDurationHours() > 0);
969
962
  const [preferencesFilter, setPreferencesFilter] = createSignal(props.preferencesFilter);
963
+ const [isKeyless, setIsKeyless] = createSignal(false);
964
+ const [applicationIdentifier, setApplicationIdentifier] = createSignal(null);
970
965
  const [preferenceGroups, setPreferenceGroups] = createSignal(props.preferenceGroups);
971
966
  const setNewStatus = (newStatus) => {
972
967
  setStatus(newStatus);
@@ -1028,12 +1023,16 @@ var InboxProvider = (props) => {
1028
1023
  eventHandler: ({
1029
1024
  data
1030
1025
  }) => {
1026
+ var _a2;
1031
1027
  if (!data) {
1032
1028
  return;
1033
1029
  }
1030
+ const identifier = window.localStorage.getItem("novu_keyless_application_identifier");
1034
1031
  setHideBranding(data.removeNovuBranding);
1035
1032
  setIsDevelopmentMode(data.isDevelopmentMode);
1036
1033
  setMaxSnoozeDurationHours(data.maxSnoozeDurationHours);
1034
+ setIsKeyless(!data.applicationIdentifier || !!(identifier == null ? void 0 : identifier.startsWith("pk_keyless_")));
1035
+ setApplicationIdentifier((_a2 = data.applicationIdentifier) != null ? _a2 : null);
1037
1036
  }
1038
1037
  });
1039
1038
  return createComponent(InboxContext.Provider, {
@@ -1054,7 +1053,9 @@ var InboxProvider = (props) => {
1054
1053
  preferenceGroups,
1055
1054
  isDevelopmentMode,
1056
1055
  maxSnoozeDurationHours,
1057
- isSnoozeEnabled
1056
+ isSnoozeEnabled,
1057
+ isKeyless,
1058
+ applicationIdentifier
1058
1059
  },
1059
1060
  get children() {
1060
1061
  return props.children;
@@ -1155,32 +1156,33 @@ var CountProvider = (props) => {
1155
1156
  setTotalUnreadCount(data.totalUnreadCount);
1156
1157
  }
1157
1158
  });
1158
- const updateNewNotificationCountsOrCache = (notification, tags) => {
1159
+ const updateNewNotificationCountsOrCache = (notification, tags, data) => {
1159
1160
  const notificationsCache = novu.notifications.cache;
1160
1161
  const limitValue = limit();
1161
- const tabFilter = __spreadProps(__spreadValues({}, filter()), {
1162
+ const tabSpecificFilterForCache = __spreadProps(__spreadValues({}, filter()), {
1162
1163
  tags,
1164
+ data,
1163
1165
  after: void 0,
1164
1166
  limit: limitValue
1165
1167
  });
1166
- const hasEmptyCache = !notificationsCache.has(tabFilter);
1168
+ const hasEmptyCache = !notificationsCache.has(tabSpecificFilterForCache);
1167
1169
  if (!isOpened() && hasEmptyCache) {
1168
1170
  return;
1169
1171
  }
1170
- const cachedData = notificationsCache.getAll(tabFilter) || {
1172
+ const cachedData = notificationsCache.getAll(tabSpecificFilterForCache) || {
1171
1173
  hasMore: false,
1172
- filter: tabFilter,
1174
+ filter: tabSpecificFilterForCache,
1173
1175
  notifications: []
1174
1176
  };
1175
1177
  const hasLessThenMinAmount = ((cachedData == null ? void 0 : cachedData.notifications.length) || 0) < MIN_AMOUNT_OF_NOTIFICATIONS;
1176
1178
  if (hasLessThenMinAmount) {
1177
- notificationsCache.update(tabFilter, __spreadProps(__spreadValues({}, cachedData), {
1179
+ notificationsCache.update(tabSpecificFilterForCache, __spreadProps(__spreadValues({}, cachedData), {
1178
1180
  notifications: [notification, ...cachedData.notifications]
1179
1181
  }));
1180
1182
  return;
1181
1183
  }
1182
1184
  setNewNotificationCounts((oldMap) => {
1183
- const key = createKey(tags, tabFilter.data);
1185
+ const key = createKey(tags, data);
1184
1186
  const newMap = new Map(oldMap);
1185
1187
  newMap.set(key, (oldMap.get(key) || 0) + 1);
1186
1188
  return newMap;
@@ -1191,32 +1193,49 @@ var CountProvider = (props) => {
1191
1193
  eventHandler: (_0) => __async(void 0, [_0], function* ({
1192
1194
  result: notification
1193
1195
  }) {
1196
+ var _a;
1194
1197
  if (filter().archived || filter().snoozed) {
1195
1198
  return;
1196
1199
  }
1197
- const tagsMap = tabs().reduce((acc, tab) => {
1198
- var _a;
1199
- const tags = getTagsFromTab(tab);
1200
- const tagsKey = createKey(tags, (_a = tab.filter) == null ? void 0 : _a.data);
1201
- acc.set(tagsKey, tags);
1202
- return acc;
1203
- }, /* @__PURE__ */ new Map());
1204
- const uniqueTags = Array.from(tagsMap.values());
1205
- if (uniqueTags.length > 0) {
1206
- for (let i = 0; i < uniqueTags.length; i += 1) {
1207
- const tags = uniqueTags[i];
1208
- const allNotifications = tags.length === 0;
1209
- const includesAtLeastOneTag = tags.some((tag) => {
1210
- var _a;
1211
- return (_a = notification.tags) == null ? void 0 : _a.includes(tag);
1212
- });
1213
- if (!allNotifications && !includesAtLeastOneTag) {
1214
- continue;
1200
+ const currentTabs = tabs();
1201
+ function checkNotificationDataAgainstTabData(notificationData, tabFilterData) {
1202
+ if (!tabFilterData || Object.keys(tabFilterData).length === 0) {
1203
+ return true;
1204
+ }
1205
+ if (!notificationData) {
1206
+ return false;
1207
+ }
1208
+ return Object.entries(tabFilterData).every(([key, filterValue]) => {
1209
+ const notifValue = notificationData[key];
1210
+ if (notifValue === void 0 && filterValue !== void 0) {
1211
+ return false;
1212
+ }
1213
+ if (Array.isArray(filterValue)) {
1214
+ if (Array.isArray(notifValue)) {
1215
+ if (filterValue.length !== notifValue.length) return false;
1216
+ const sortedFilterValue = [...filterValue].sort();
1217
+ const sortedNotifValue = [...notifValue].sort();
1218
+ return sortedFilterValue.every((val, index) => val === sortedNotifValue[index]);
1219
+ } else {
1220
+ return filterValue.includes(notifValue);
1221
+ }
1222
+ } else {
1223
+ return notifValue === filterValue;
1224
+ }
1225
+ });
1226
+ }
1227
+ if (currentTabs.length > 0) {
1228
+ for (const tab of currentTabs) {
1229
+ const tabTags = getTagsFromTab(tab);
1230
+ const tabDataFilterCriteria = (_a = tab.filter) == null ? void 0 : _a.data;
1231
+ const matchesTagFilter = tabTags.length === 0 || notification.tags && tabTags.some((tag) => notification.tags.includes(tag));
1232
+ const matchesDataFilterCriteria = checkNotificationDataAgainstTabData(notification.data, tabDataFilterCriteria);
1233
+ if (matchesTagFilter && matchesDataFilterCriteria) {
1234
+ updateNewNotificationCountsOrCache(notification, tabTags, tabDataFilterCriteria);
1215
1235
  }
1216
- updateNewNotificationCountsOrCache(notification, tags);
1217
1236
  }
1218
1237
  } else {
1219
- updateNewNotificationCountsOrCache(notification, []);
1238
+ updateNewNotificationCountsOrCache(notification, [], void 0);
1220
1239
  }
1221
1240
  })
1222
1241
  });
@@ -1642,248 +1661,125 @@ var Bell2 = (props) => {
1642
1661
  function isBrowser() {
1643
1662
  return typeof window !== "undefined";
1644
1663
  }
1645
-
1646
- // src/ui/components/elements/Footer.tsx
1647
- var _tmpl$25 = /* @__PURE__ */ template(`<span class="nt-z-10 nt-text-xs nt-text-stripes">Development mode`);
1648
- var _tmpl$26 = /* @__PURE__ */ template(`<span class="nt-z-10 nt-text-xs">\u2022`);
1649
- var _tmpl$32 = /* @__PURE__ */ template(`<a target=_blank class="nt-z-10 nt-flex nt-items-center nt-gap-1 nt-justify-center"><span class=nt-text-xs>Inbox by</span><span class=nt-text-xs>Novu`);
1650
- var _tmpl$42 = /* @__PURE__ */ template(`<div>`);
1651
- var stripes = `before:nt-content-[""] before:nt-absolute before:nt-inset-0 before:-nt-right-[calc(0+var(--stripes-size))] before:[mask-image:linear-gradient(transparent_0%,black)] before:nt-bg-dev-stripes-gradient before:nt-bg-[length:var(--stripes-size)_var(--stripes-size)] before:nt-animate-stripes before:hover:[animation-play-state:running]`;
1652
- var commonAfter = 'after:nt-content-[""] after:nt-absolute after:nt-inset-0 after:-nt-top-12';
1653
- var devModeGradient = `${commonAfter} after:nt-bg-[linear-gradient(180deg,transparent,oklch(from_var(--nv-color-stripes)_l_c_h_/_0.07)_55%,transparent),linear-gradient(180deg,transparent,oklch(from_var(--nv-color-background)_l_c_h_/_0.9)_55%,transparent)]`;
1654
- var prodModeGradient = `${commonAfter} after:nt-bg-[linear-gradient(180deg,transparent,oklch(from_var(--nv-color-background)_l_c_h_/_0.9)_55%,transparent)]`;
1655
- var Footer = () => {
1656
- const {
1657
- hideBranding,
1658
- isDevelopmentMode
1659
- } = useInboxContext();
1660
- return createComponent(Show, {
1661
- get when() {
1662
- return !hideBranding() || isDevelopmentMode();
1663
- },
1664
- get children() {
1665
- var _el$ = _tmpl$42();
1666
- _el$.style.setProperty("--stripes-size", "15px");
1667
- insert(_el$, createComponent(Show, {
1668
- get when() {
1669
- return isDevelopmentMode();
1670
- },
1671
- get children() {
1672
- return _tmpl$25();
1673
- }
1674
- }), null);
1675
- insert(_el$, createComponent(Show, {
1676
- get when() {
1677
- return memo(() => !!isDevelopmentMode())() && !hideBranding();
1678
- },
1679
- get children() {
1680
- return _tmpl$26();
1681
- }
1682
- }), null);
1683
- insert(_el$, createComponent(Show, {
1684
- get when() {
1685
- return !hideBranding();
1686
- },
1687
- get children() {
1688
- var _el$4 = _tmpl$32(), _el$5 = _el$4.firstChild, _el$6 = _el$5.nextSibling;
1689
- insert(_el$4, createComponent(Novu2, {
1690
- "class": "nt-size-2.5"
1691
- }), _el$6);
1692
- effect(() => setAttribute(_el$4, "href", `https://go.novu.co/powered?ref=${getCurrentDomain()}`));
1693
- return _el$4;
1694
- }
1695
- }), null);
1696
- effect(() => className(_el$, cn(`nt-relative nt-flex nt-shrink-0 nt-justify-center nt-items-center nt-gap-1 nt-mt-auto nt-py-3 nt-text-foreground-alpha-400`, {
1697
- [stripes]: isDevelopmentMode(),
1698
- [devModeGradient]: isDevelopmentMode(),
1699
- "nt-bg-[oklch(from_var(--nv-color-stripes)_l_c_h_/_0.1)]": isDevelopmentMode(),
1700
- [prodModeGradient]: !isDevelopmentMode()
1701
- })));
1702
- return _el$;
1703
- }
1704
- });
1705
- };
1706
- function getCurrentDomain() {
1707
- if (isBrowser()) {
1708
- return window.location.hostname;
1709
- }
1710
- return "";
1711
- }
1712
- var _tmpl$27 = /* @__PURE__ */ template(`<button>`);
1713
- var buttonVariants = cva(cn('nt-inline-flex nt-gap-4 nt-items-center nt-justify-center nt-whitespace-nowrap nt-text-sm nt-font-medium nt-transition-colors disabled:nt-pointer-events-none disabled:nt-opacity-50 after:nt-absolute after:nt-content-[""] before:nt-content-[""] before:nt-absolute [&_svg]:nt-pointer-events-none [&_svg]:nt-shrink-0', `focus-visible:nt-outline-none focus-visible:nt-ring-2 focus-visible:nt-rounded-md focus-visible:nt-ring-ring focus-visible:nt-ring-offset-2`), {
1714
- variants: {
1715
- variant: {
1716
- default: "nt-bg-gradient-to-b nt-from-20% nt-from-primary-foreground-alpha-200 nt-to-transparent nt-bg-primary nt-text-primary-foreground nt-shadow-[0_0_0_0.5px_var(--nv-color-primary-600)] nt-relative before:nt-absolute before:nt-inset-0 before:nt-border before:nt-border-primary-foreground-alpha-100 after:nt-absolute after:nt-inset-0 after:nt-opacity-0 hover:after:nt-opacity-100 after:nt-transition-opacity after:nt-bg-gradient-to-b after:nt-from-primary-foreground-alpha-50 after:nt-to-transparent",
1717
- secondary: "nt-bg-secondary nt-text-secondary-foreground nt-shadow-[0_0_0_0.5px_var(--nv-color-secondary-600)] nt-relative before:nt-absolute before:nt-inset-0 before:nt-border before:nt-border-secondary-foreground-alpha-100 after:nt-absolute after:nt-inset-0 after:nt-opacity-0 hover:after:nt-opacity-100 after:nt-transition-opacity after:nt-bg-gradient-to-b after:nt-from-secondary-foreground-alpha-50 after:nt-to-transparent",
1718
- ghost: "hover:nt-bg-neutral-alpha-100 nt-text-foreground-alpha-600 hover:nt-text-foreground-alpha-800",
1719
- unstyled: ""
1720
- },
1721
- size: {
1722
- none: "",
1723
- iconSm: "nt-p-1 nt-rounded-md after:nt-rounded-md before:nt-rounded-md focus-visible:nt-rounded-md",
1724
- icon: "nt-p-2.5 nt-rounded-xl before:nt-rounded-xl after:nt-rounded-xl focus-visible:nt-rounded-xl",
1725
- default: "nt-px-2 nt-py-1 nt-rounded-lg focus-visible:nt-rounded-lg before:nt-rounded-lg after:nt-rounded-lg",
1726
- sm: "nt-px-1 nt-py-px nt-rounded-md nt-text-xs nt-px-1 before:nt-rounded-md focus-visible:nt-rounded-md after:nt-rounded-md",
1727
- lg: "nt-px-8 nt-py-2 nt-text-base before:nt-rounded-lg after:nt-rounded-lg focus-visible:nt-rounded-lg"
1728
- }
1729
- },
1730
- defaultVariants: {
1731
- variant: "default",
1732
- size: "default"
1733
- }
1734
- });
1735
- var Button = (props) => {
1736
- const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
1737
- const style = useStyle();
1738
- return (() => {
1739
- var _el$ = _tmpl$27();
1740
- spread(_el$, mergeProps({
1741
- get ["data-variant"]() {
1742
- return props.variant;
1743
- },
1744
- get ["data-size"]() {
1745
- return props.size;
1746
- },
1747
- get ["class"]() {
1748
- return style(local.appearanceKey || "button", cn(buttonVariants({
1749
- variant: props.variant,
1750
- size: props.size
1751
- }), local.class));
1752
- }
1753
- }, rest), false, false);
1754
- return _el$;
1755
- })();
1756
- };
1757
- var _tmpl$28 = /* @__PURE__ */ template(`<button>`);
1758
- var PopoverClose = (props) => {
1759
- const {
1760
- onClose
1761
- } = usePopover();
1762
- const style = useStyle();
1763
- const [local, rest] = splitProps(props, ["onClick", "asChild", "appearanceKey", "class"]);
1764
- const handleClick = (e) => {
1765
- if (typeof local.onClick === "function") {
1766
- local.onClick(e);
1767
- }
1768
- onClose();
1769
- };
1770
- if (local.asChild) {
1771
- return createComponent(Dynamic, mergeProps({
1772
- get component() {
1773
- return local.asChild;
1774
- },
1775
- onClick: handleClick
1776
- }, rest));
1777
- }
1664
+ var _tmpl$25 = /* @__PURE__ */ template(`<svg width=6 height=6 viewBox="0 0 6 6"fill=none xmlns=http://www.w3.org/2000/svg><path d="M5.00175 1.70402L0.705765 6L0 5.29424L4.29548 0.998253H0.509608V0H6V5.49039H5.00175V1.70402Z"fill=currentColor>`);
1665
+ var ArrowUpRight = (props) => {
1778
1666
  return (() => {
1779
- var _el$ = _tmpl$28();
1780
- _el$.$$click = handleClick;
1781
- spread(_el$, mergeProps({
1782
- get ["class"]() {
1783
- return style(local.appearanceKey || "popoverClose", local.class);
1784
- }
1785
- }, rest), false, false);
1667
+ var _el$ = _tmpl$25();
1668
+ spread(_el$, props, true, true);
1786
1669
  return _el$;
1787
1670
  })();
1788
1671
  };
1789
- delegateEvents(["click"]);
1790
- var _tmpl$29 = /* @__PURE__ */ template(`<div>`);
1791
- var Portal = (props) => {
1792
- const appearance = useAppearance();
1793
- let currentElement;
1794
- return [(() => {
1795
- var _el$ = _tmpl$29();
1796
- use((el) => {
1797
- currentElement = el;
1798
- }, _el$);
1799
- _el$.style.setProperty("display", "none");
1800
- return _el$;
1801
- })(), createComponent(Portal$1, mergeProps({
1802
- get mount() {
1803
- return closestNovuRootParent(currentElement, appearance.id());
1804
- }
1805
- }, props))];
1806
- };
1807
- var closestNovuRootParent = (el, id) => {
1808
- let element = el;
1809
- while (element && element.id !== `novu-root-${id}`) {
1810
- element = element.parentElement;
1811
- }
1812
- if (element && element.id === `novu-root-${id}`) {
1813
- return element;
1814
- }
1815
- return void 0;
1816
- };
1817
- var PopoverContext = createContext(void 0);
1818
- function PopoverRoot(props) {
1672
+ var TooltipContext = createContext(void 0);
1673
+ function TooltipRoot(props) {
1819
1674
  var _a;
1820
- const [uncontrolledIsOpen, setUncontrolledIsOpen] = createSignal((_a = props.open) != null ? _a : false);
1821
- const onOpenChange = () => {
1822
- var _a2;
1823
- return (_a2 = props.onOpenChange) != null ? _a2 : setUncontrolledIsOpen;
1824
- };
1825
- const open = () => {
1826
- var _a2;
1827
- return (_a2 = props.open) != null ? _a2 : uncontrolledIsOpen();
1828
- };
1829
1675
  const [reference, setReference] = createSignal(null);
1830
1676
  const [floating, setFloating] = createSignal(null);
1677
+ const {
1678
+ animations
1679
+ } = useAppearance();
1680
+ const defaultAnimationDuration = 0.2;
1681
+ const actualAnimationDuration = () => {
1682
+ var _a2;
1683
+ return (_a2 = props.animationDuration) != null ? _a2 : defaultAnimationDuration;
1684
+ };
1685
+ const effectiveAnimationDuration = createMemo(() => animations() ? actualAnimationDuration() : 0);
1831
1686
  const position = useFloating(reference, floating, {
1832
- strategy: "absolute",
1833
- placement: props.placement,
1687
+ placement: props.placement || "top",
1688
+ strategy: "fixed",
1834
1689
  whileElementsMounted: autoUpdate,
1835
1690
  middleware: [offset(10), flip({
1836
- fallbackPlacements: props.fallbackPlacements
1691
+ fallbackPlacements: props.fallbackPlacements || ["bottom"]
1837
1692
  }), shift()]
1838
1693
  });
1839
- const floatingStyles = createMemo(() => {
1840
- var _a2, _b;
1841
- return {
1842
- position: position.strategy,
1843
- top: `${(_a2 = position.y) != null ? _a2 : 0}px`,
1844
- left: `${(_b = position.x) != null ? _b : 0}px`
1845
- };
1694
+ const [uncontrolledOpen, setUncontrolledOpen] = createSignal((_a = props.open) != null ? _a : false);
1695
+ const openAccessor = createMemo(() => {
1696
+ return props.open !== void 0 ? !!props.open : uncontrolledOpen();
1846
1697
  });
1847
- const onClose = () => {
1848
- onOpenChange()(false);
1849
- };
1850
- const onToggle = () => {
1851
- onOpenChange()((prev) => !prev);
1698
+ const setOpenSetter = (valueOrFn) => {
1699
+ if (props.open === void 0) {
1700
+ setUncontrolledOpen(valueOrFn);
1701
+ }
1852
1702
  };
1853
- return createComponent(PopoverContext.Provider, {
1703
+ const [shouldRenderTooltip, setShouldRenderTooltip] = createSignal(openAccessor());
1704
+ let renderTimeoutId;
1705
+ createEffect(() => {
1706
+ const isOpen = openAccessor();
1707
+ if (renderTimeoutId) {
1708
+ clearTimeout(renderTimeoutId);
1709
+ renderTimeoutId = void 0;
1710
+ }
1711
+ if (isOpen) {
1712
+ setShouldRenderTooltip(true);
1713
+ } else if (effectiveAnimationDuration() > 0) {
1714
+ renderTimeoutId = window.setTimeout(() => {
1715
+ setShouldRenderTooltip(false);
1716
+ }, effectiveAnimationDuration() * 1e3);
1717
+ } else {
1718
+ setShouldRenderTooltip(false);
1719
+ }
1720
+ });
1721
+ createEffect(() => {
1722
+ if (openAccessor()) {
1723
+ setShouldRenderTooltip(true);
1724
+ }
1725
+ });
1726
+ return createComponent(TooltipContext.Provider, {
1854
1727
  value: {
1855
- onToggle,
1856
- onClose,
1857
1728
  reference,
1858
1729
  setReference,
1859
1730
  floating,
1860
1731
  setFloating,
1861
- open,
1862
- floatingStyles
1732
+ open: openAccessor,
1733
+ shouldRender: shouldRenderTooltip,
1734
+ setOpen: setOpenSetter,
1735
+ floatingStyles: () => {
1736
+ var _a2, _b;
1737
+ return {
1738
+ position: position.strategy,
1739
+ top: `${(_a2 = position.y) != null ? _a2 : 0}px`,
1740
+ left: `${(_b = position.x) != null ? _b : 0}px`
1741
+ };
1742
+ },
1743
+ effectiveAnimationDuration
1863
1744
  },
1864
1745
  get children() {
1865
1746
  return props.children;
1866
1747
  }
1867
1748
  });
1868
1749
  }
1869
- function usePopover() {
1870
- const context = useContext(PopoverContext);
1750
+ function useTooltip() {
1751
+ const context = useContext(TooltipContext);
1871
1752
  if (!context) {
1872
- throw new Error("usePopover must be used within Popover.Root component");
1753
+ throw new Error("useTooltip must be used within Tooltip.Root component");
1873
1754
  }
1874
1755
  return context;
1875
1756
  }
1757
+ var Motion = new Proxy(Motion$1, {
1758
+ get: (_, tag) => (props) => {
1759
+ const {
1760
+ animations
1761
+ } = useAppearance();
1762
+ return createComponent(Motion$1, mergeProps(props, {
1763
+ tag,
1764
+ get transition() {
1765
+ return animations() ? props.transition : {
1766
+ duration: 0
1767
+ };
1768
+ }
1769
+ }));
1770
+ }
1771
+ });
1876
1772
 
1877
- // src/ui/components/primitives/Popover/PopoverContent.tsx
1878
- var _tmpl$30 = /* @__PURE__ */ template(`<div>`);
1879
- var popoverContentVariants = () => cn("nt-w-[400px] nt-h-[600px] nt-rounded-xl nt-bg-background", "nt-shadow-popover nt-animate-in nt-slide-in-from-top-2 nt-fade-in nt-cursor-default nt-flex nt-flex-col nt-overflow-hidden nt-border nt-border-border nt-z-10");
1880
- var PopoverContentBody = (props) => {
1773
+ // src/ui/components/primitives/Tooltip/TooltipContent.tsx
1774
+ var tooltipContentVariants = () => "nt-bg-foreground nt-p-2 nt-shadow-tooltip nt-rounded-lg nt-text-background nt-text-xs";
1775
+ var TooltipContentBody = (props) => {
1881
1776
  const {
1882
1777
  open,
1883
1778
  setFloating,
1884
1779
  floating,
1885
- floatingStyles
1886
- } = usePopover();
1780
+ floatingStyles,
1781
+ effectiveAnimationDuration
1782
+ } = useTooltip();
1887
1783
  const {
1888
1784
  setActive,
1889
1785
  removeActive
@@ -1892,80 +1788,72 @@ var PopoverContentBody = (props) => {
1892
1788
  const style = useStyle();
1893
1789
  onMount(() => {
1894
1790
  const floatingEl = floating();
1895
- setActive(floatingEl);
1791
+ if (floatingEl) setActive(floatingEl);
1896
1792
  onCleanup(() => {
1897
- removeActive(floatingEl);
1793
+ if (floatingEl) removeActive(floatingEl);
1898
1794
  });
1899
1795
  });
1900
- return (() => {
1901
- var _el$ = _tmpl$30();
1902
- use(setFloating, _el$);
1903
- spread(_el$, mergeProps({
1904
- get ["class"]() {
1905
- return style(local.appearanceKey || "popoverContent", cn(popoverContentVariants(), local.class));
1906
- },
1907
- get style() {
1908
- return floatingStyles();
1909
- },
1910
- get ["data-open"]() {
1911
- return open();
1912
- }
1913
- }, rest), false, false);
1914
- return _el$;
1915
- })();
1796
+ return createComponent(Motion.div, mergeProps({
1797
+ initial: {
1798
+ opacity: 0,
1799
+ scale: 0.95
1800
+ },
1801
+ get animate() {
1802
+ return open() ? {
1803
+ opacity: 1,
1804
+ scale: 1
1805
+ } : {
1806
+ opacity: 0,
1807
+ scale: 0.95
1808
+ };
1809
+ },
1810
+ get transition() {
1811
+ return {
1812
+ duration: effectiveAnimationDuration(),
1813
+ easing: "ease-in-out"
1814
+ };
1815
+ },
1816
+ ref: setFloating,
1817
+ get ["class"]() {
1818
+ return memo(() => !!local.class)() ? local.class : style(local.appearanceKey || "tooltipContent", tooltipContentVariants());
1819
+ },
1820
+ get style() {
1821
+ return __spreadProps(__spreadValues({}, floatingStyles()), {
1822
+ "z-index": 99999
1823
+ });
1824
+ }
1825
+ }, rest, {
1826
+ get children() {
1827
+ return props.children;
1828
+ }
1829
+ }));
1916
1830
  };
1917
- var PopoverContent = (props) => {
1918
- const {
1919
- open,
1920
- onClose,
1921
- reference,
1922
- floating
1923
- } = usePopover();
1831
+ var TooltipContent = (props) => {
1924
1832
  const {
1925
- active
1926
- } = useFocusManager();
1833
+ shouldRender
1834
+ } = useTooltip();
1927
1835
  const {
1928
1836
  container
1929
1837
  } = useAppearance();
1930
- const handleClickOutside = (e) => {
1931
- var _a, _b;
1932
- if ((_a = reference()) == null ? void 0 : _a.contains(e.target)) {
1933
- return;
1934
- }
1935
- const containerElement = container();
1936
- if (active() !== floating() || ((_b = floating()) == null ? void 0 : _b.contains(e.target)) || containerElement && e.target.shadowRoot === containerElement) {
1937
- return;
1938
- }
1939
- onClose();
1940
- };
1941
- const handleEscapeKey = (e) => {
1942
- if (active() !== floating()) {
1943
- return;
1944
- }
1945
- if (e instanceof KeyboardEvent && e.key === "Escape") {
1946
- onClose();
1947
- }
1948
- };
1949
- onMount(() => {
1950
- var _a;
1951
- document.body.addEventListener("click", handleClickOutside);
1952
- (_a = container()) == null ? void 0 : _a.addEventListener("click", handleClickOutside);
1953
- document.body.addEventListener("keydown", handleEscapeKey);
1954
- });
1955
- onCleanup(() => {
1838
+ const portalContainer = () => {
1956
1839
  var _a;
1957
- document.body.removeEventListener("click", handleClickOutside);
1958
- (_a = container()) == null ? void 0 : _a.removeEventListener("click", handleClickOutside);
1959
- document.body.removeEventListener("keydown", handleEscapeKey);
1960
- });
1840
+ return (_a = container()) != null ? _a : document.body;
1841
+ };
1961
1842
  return createComponent(Show, {
1962
1843
  get when() {
1963
- return open();
1844
+ return shouldRender();
1964
1845
  },
1965
1846
  get children() {
1966
1847
  return createComponent(Portal, {
1848
+ get mount() {
1849
+ return portalContainer();
1850
+ },
1967
1851
  get children() {
1968
- return createComponent(PopoverContentBody, props);
1852
+ return createComponent(Root, {
1853
+ get children() {
1854
+ return createComponent(TooltipContentBody, props);
1855
+ }
1856
+ });
1969
1857
  }
1970
1858
  });
1971
1859
  }
@@ -1982,22 +1870,28 @@ function mergeRefs(...refs) {
1982
1870
  return chain(refs);
1983
1871
  }
1984
1872
 
1985
- // src/ui/components/primitives/Popover/PopoverTrigger.tsx
1986
- var _tmpl$31 = /* @__PURE__ */ template(`<button>`);
1987
- var PopoverTrigger = (props) => {
1873
+ // src/ui/components/primitives/Tooltip/TooltipTrigger.tsx
1874
+ var _tmpl$26 = /* @__PURE__ */ template(`<button>`);
1875
+ var TooltipTrigger = (props) => {
1988
1876
  const {
1989
1877
  setReference,
1990
- onToggle
1991
- } = usePopover();
1878
+ setOpen
1879
+ } = useTooltip();
1992
1880
  const style = useStyle();
1993
- const [local, rest] = splitProps(props, ["appearanceKey", "asChild", "onClick", "ref"]);
1994
- const handleClick = (e) => {
1995
- if (typeof local.onClick === "function") {
1996
- local.onClick(e);
1881
+ const [local, rest] = splitProps(props, ["appearanceKey", "asChild", "onClick", "onMouseEnter", "onMouseLeave", "ref"]);
1882
+ const handleMouseEnter = (e) => {
1883
+ if (typeof local.onMouseEnter === "function") {
1884
+ local.onMouseEnter(e);
1997
1885
  }
1998
- onToggle();
1886
+ setOpen(true);
1999
1887
  };
2000
1888
  const ref = createMemo(() => local.ref ? mergeRefs(setReference, local.ref) : setReference);
1889
+ const handleMouseLeave = (e) => {
1890
+ if (typeof local.onMouseLeave === "function") {
1891
+ local.onMouseLeave(e);
1892
+ }
1893
+ setOpen(false);
1894
+ };
2001
1895
  if (local.asChild) {
2002
1896
  return createComponent(Dynamic, mergeProps({
2003
1897
  get component() {
@@ -2007,244 +1901,329 @@ var PopoverTrigger = (props) => {
2007
1901
  var _ref$ = ref();
2008
1902
  typeof _ref$ === "function" && _ref$(r$);
2009
1903
  },
2010
- onClick: handleClick
1904
+ onMouseEnter: handleMouseEnter,
1905
+ onMouseLeave: handleMouseLeave
2011
1906
  }, rest));
2012
1907
  }
2013
1908
  return (() => {
2014
- var _el$ = _tmpl$31();
2015
- _el$.$$click = handleClick;
1909
+ var _el$ = _tmpl$26();
1910
+ _el$.addEventListener("mouseleave", () => {
1911
+ setOpen(false);
1912
+ });
1913
+ _el$.addEventListener("mouseenter", () => {
1914
+ setOpen(true);
1915
+ });
2016
1916
  var _ref$2 = ref();
2017
1917
  typeof _ref$2 === "function" && use(_ref$2, _el$);
2018
1918
  spread(_el$, mergeProps({
2019
1919
  get ["class"]() {
2020
- return style(local.appearanceKey || "dropdownTrigger");
1920
+ return style(local.appearanceKey || "tooltipTrigger");
2021
1921
  }
2022
1922
  }, rest), false, true);
2023
1923
  insert(_el$, () => props.children);
2024
1924
  return _el$;
2025
1925
  })();
2026
1926
  };
2027
- delegateEvents(["click"]);
2028
1927
 
2029
- // src/ui/components/primitives/Popover/index.ts
2030
- var Popover = {
2031
- Root: PopoverRoot,
2032
- /**
2033
- * Popover.Trigger renders a `button` and has no default styling.
2034
- */
2035
- Trigger: PopoverTrigger,
1928
+ // src/ui/components/primitives/Tooltip/index.ts
1929
+ var Tooltip = {
1930
+ Root: TooltipRoot,
2036
1931
  /**
2037
- * Popover.Content renders a `div` and has popover specific styling.
1932
+ * Tooltip.Trigger renders a `button` and has no default styling.
2038
1933
  */
2039
- Content: PopoverContent,
1934
+ Trigger: TooltipTrigger,
2040
1935
  /**
2041
- * Popover.Close renders a `button` and has no styling.
2042
- * Closes the popover when clicked.
2043
- * `onClick` function is propagated.
1936
+ * Tooltip.Content renders a `div` and has popover specific styling.
2044
1937
  */
2045
- Close: PopoverClose
1938
+ Content: TooltipContent
2046
1939
  };
2047
- var dropdownContentVariants = () => "nt-p-1 nt-text-sm nt-min-w-52 nt-shadow-dropdown nt-h-fit nt-min-w-52 nt-w-max";
2048
- var DropdownContent = (props) => {
2049
- const [local, rest] = splitProps(props, ["appearanceKey", "class"]);
2050
- return createComponent(Popover.Content, mergeProps({
2051
- get appearanceKey() {
2052
- return local.appearanceKey || "dropdownContent";
1940
+
1941
+ // src/ui/components/primitives/CopyToClipboard.tsx
1942
+ var _tmpl$27 = /* @__PURE__ */ template(`<button type=button>`);
1943
+ function CopyToClipboard(props) {
1944
+ const [isCopied, setIsCopied] = createSignal(false);
1945
+ const style = useStyle();
1946
+ let timeoutId;
1947
+ const defaultTooltipText = "Copied!";
1948
+ const defaultTooltipDuration = 2e3;
1949
+ function handleCopy() {
1950
+ return __async(this, null, function* () {
1951
+ var _a;
1952
+ if (timeoutId) {
1953
+ clearTimeout(timeoutId);
1954
+ }
1955
+ try {
1956
+ yield navigator.clipboard.writeText(props.textToCopy);
1957
+ setIsCopied(true);
1958
+ timeoutId = window.setTimeout(() => {
1959
+ setIsCopied(false);
1960
+ timeoutId = void 0;
1961
+ }, (_a = props.tooltipDuration) != null ? _a : defaultTooltipDuration);
1962
+ } catch (err) {
1963
+ console.error("Failed to copy text: ", err);
1964
+ }
1965
+ });
1966
+ }
1967
+ return createComponent(Tooltip.Root, {
1968
+ get open() {
1969
+ return isCopied();
2053
1970
  },
2054
- get ["class"]() {
2055
- return cn(dropdownContentVariants(), local.class);
1971
+ placement: "top",
1972
+ animationDuration: 0.15,
1973
+ get children() {
1974
+ return [createComponent(Tooltip.Trigger, {
1975
+ asChild: (triggerProps) => (() => {
1976
+ var _el$ = _tmpl$27();
1977
+ spread(_el$, mergeProps(triggerProps, {
1978
+ "onClick": handleCopy,
1979
+ get ["class"]() {
1980
+ return style("button", "nt-cursor-pointer");
1981
+ }
1982
+ }), false, true);
1983
+ insert(_el$, () => props.children);
1984
+ return _el$;
1985
+ })()
1986
+ }), createComponent(Tooltip.Content, {
1987
+ get children() {
1988
+ var _a;
1989
+ return (_a = props.tooltipText) != null ? _a : defaultTooltipText;
1990
+ }
1991
+ })];
2056
1992
  }
2057
- }, rest));
2058
- };
2059
- var dropdownItemVariants = () => "focus:nt-outline-none nt-flex nt-items-center nt-gap-1.5 nt-text-sm nt-rounded-lg nt-items-center hover:nt-bg-neutral-alpha-50 focus-visible:nt-bg-neutral-alpha-50 nt-py-1 nt-px-2";
2060
- var DropdownItem = (props) => {
2061
- const [local, rest] = splitProps(props, ["appearanceKey", "onClick", "class", "asChild"]);
1993
+ });
1994
+ }
1995
+
1996
+ // src/ui/components/elements/Footer.tsx
1997
+ var _tmpl$28 = /* @__PURE__ */ template(`<span class="nt-z-10 nt-text-xs nt-text-stripes">`);
1998
+ var _tmpl$29 = /* @__PURE__ */ template(`<span class="nt-z-10 nt-text-xs">\u2022`);
1999
+ var _tmpl$32 = /* @__PURE__ */ template(`<a target=_blank class="nt-z-10 nt-flex nt-items-center nt-gap-1 nt-justify-center"><span class=nt-text-xs>Inbox by</span><span class=nt-text-xs>Novu`);
2000
+ var _tmpl$42 = /* @__PURE__ */ template(`<span class=nt-underline>Copy cURL`);
2001
+ var _tmpl$52 = /* @__PURE__ */ template(`<div class="nt-z-10 nt-flex nt-items-center nt-gap-1 nt-text-xs nt-text-secondary-foreground"><a href="https://go.novu.co/keyless?utm_campaign=footer-get_api_key"class="nt-underline nt-flex nt-items-center nt-gap-0.5"target=_blank rel="noopener noreferrer">Get API key</a><span>\u2022</span><span>\u2022</span><button type=button class=nt-underline>Send notification`);
2002
+ var _tmpl$62 = /* @__PURE__ */ template(`<div><div class="nt-flex nt-items-center nt-gap-1">`);
2003
+ var _tmpl$72 = /* @__PURE__ */ template(`<a href="https://go.novu.co/keyless?utm_campaign=keyless-mode"target=_blank rel="noopener noreferrer">Keyless mode`);
2004
+ var _tmpl$82 = /* @__PURE__ */ template(`<br>`);
2005
+ var stripes = `before:nt-content-[""] before:nt-absolute before:nt-inset-0 before:-nt-right-[calc(0+var(--stripes-size))] before:[mask-image:linear-gradient(transparent_0%,black)] before:nt-bg-dev-stripes-gradient before:nt-bg-[length:var(--stripes-size)_var(--stripes-size)] before:nt-animate-stripes before:hover:[animation-play-state:running]`;
2006
+ var commonAfter = 'after:nt-content-[""] after:nt-absolute after:nt-inset-0 after:-nt-top-12';
2007
+ var devModeGradient = `${commonAfter} after:nt-bg-[linear-gradient(180deg,transparent,oklch(from_var(--nv-color-stripes)_l_c_h_/_0.07)_55%,transparent),linear-gradient(180deg,transparent,oklch(from_var(--nv-color-background)_l_c_h_/_0.9)_55%,transparent)]`;
2008
+ var prodModeGradient = `${commonAfter} after:nt-bg-[linear-gradient(180deg,transparent,oklch(from_var(--nv-color-background)_l_c_h_/_0.9)_55%,transparent)]`;
2009
+ var Footer = () => {
2062
2010
  const {
2063
- onClose
2064
- } = usePopover();
2065
- const handleClick = (e) => {
2066
- if (typeof local.onClick === "function") {
2067
- local.onClick(e);
2068
- }
2069
- onClose();
2070
- };
2071
- if (local.asChild) {
2072
- return createComponent(Dynamic, mergeProps({
2073
- get component() {
2074
- return local.asChild;
2075
- },
2076
- onClick: handleClick
2077
- }, rest));
2011
+ hideBranding,
2012
+ isDevelopmentMode,
2013
+ isKeyless
2014
+ } = useInboxContext();
2015
+ const novu = useNovu();
2016
+ function handleTriggerHelloWorld() {
2017
+ return __async(this, null, function* () {
2018
+ try {
2019
+ yield novu.notifications.triggerHelloWorldEvent();
2020
+ } catch (error) {
2021
+ console.error("Failed to send Hello World from UI via novu.notifications:", error);
2022
+ }
2023
+ });
2078
2024
  }
2079
- return createComponent(Popover.Close, mergeProps({
2080
- get appearanceKey() {
2081
- return local.appearanceKey || "dropdownItem";
2082
- },
2083
- get ["class"]() {
2084
- return cn(dropdownItemVariants(), local.class);
2025
+ return createComponent(Show, {
2026
+ get when() {
2027
+ return !hideBranding() || isDevelopmentMode();
2085
2028
  },
2086
- onClick: (e) => {
2087
- if (typeof local.onClick === "function") {
2088
- local.onClick(e);
2089
- }
2090
- onClose();
2091
- }
2092
- }, rest));
2093
- };
2094
- var DropdownRoot = (props) => {
2095
- return createComponent(Popover.Root, mergeProps({
2096
- placement: "bottom",
2097
- fallbackPlacements: ["top"]
2098
- }, props));
2099
- };
2100
- var dropdownTriggerButtonVariants = () => `nt-relative nt-transition nt-outline-none focus-visible:nt-outline-nonefocus-visible:nt-ring-2 focus-visible:nt-ring-primary focus-visible:nt-ring-offset-2`;
2101
- var DropdownTrigger = (props) => {
2102
- const style = useStyle();
2103
- const [local, rest] = splitProps(props, ["appearanceKey", "class"]);
2104
- return createComponent(Popover.Trigger, mergeProps({
2105
- get ["class"]() {
2106
- return style(local.appearanceKey || "dropdownTrigger", cn(dropdownTriggerButtonVariants(), local.class));
2107
- }
2108
- }, rest));
2109
- };
2110
-
2111
- // src/ui/components/primitives/Dropdown/index.ts
2112
- var Dropdown = {
2113
- Root: DropdownRoot,
2114
- /**
2115
- * Dropdown.Trigger renders a `button` and has no default styling.
2116
- */
2117
- Trigger: DropdownTrigger,
2118
- /**
2119
- * Dropdown.Content renders a `Popover.Content` by default.
2120
- */
2121
- Content: DropdownContent,
2122
- /**
2123
- * Dropdown.Close renders a `Popover.Close` by default.
2124
- */
2125
- Close: Popover.Close,
2126
- /**
2127
- * Dropdown.Item renders a `Popover.Close` with dropdown specific styling.
2128
- * Closes the popover when clicked.
2129
- * `onClick` function is propagated.
2130
- */
2131
- Item: DropdownItem
2132
- };
2133
- var Motion = new Proxy(Motion$1, {
2134
- get: (_, tag) => (props) => {
2135
- const {
2136
- animations
2137
- } = useAppearance();
2138
- return createComponent(Motion$1, mergeProps(props, {
2139
- tag,
2140
- get transition() {
2141
- return animations() ? props.transition : {
2142
- duration: 0
2143
- };
2144
- }
2145
- }));
2146
- }
2147
- });
2148
- var useKeyboardNavigation = ({
2149
- activeTab,
2150
- setActiveTab,
2151
- tabsContainer
2152
- }) => {
2153
- const { container } = useAppearance();
2154
- const [keyboardNavigation, setKeyboardNavigation] = createSignal(false);
2155
- const getRoot = () => {
2156
- const containerElement = container();
2157
- return containerElement instanceof ShadowRoot ? containerElement : document;
2158
- };
2159
- createEffect(() => {
2160
- const root = getRoot();
2161
- const handleTabKey = (event) => {
2162
- var _a;
2163
- if (!(event instanceof KeyboardEvent) || event.key !== "Tab") {
2164
- return;
2165
- }
2166
- const tabs = (_a = tabsContainer()) == null ? void 0 : _a.querySelectorAll('[role="tab"]');
2167
- if (!tabs || !root.activeElement) {
2168
- return;
2169
- }
2170
- setKeyboardNavigation(Array.from(tabs).includes(root.activeElement));
2171
- };
2172
- root.addEventListener("keyup", handleTabKey);
2173
- return onCleanup(() => root.removeEventListener("keyup", handleTabKey));
2174
- });
2175
- createEffect(() => {
2176
- const root = getRoot();
2177
- const handleArrowKeys = (event) => {
2178
- var _a, _b;
2179
- if (!keyboardNavigation() || !(event instanceof KeyboardEvent) || event.key !== "ArrowLeft" && event.key !== "ArrowRight") {
2180
- return;
2181
- }
2182
- const tabElements = Array.from((_b = (_a = tabsContainer()) == null ? void 0 : _a.querySelectorAll('[role="tab"]')) != null ? _b : []);
2183
- const tabIds = tabElements.map((tab) => tab.id);
2184
- const currentIndex = tabIds.indexOf(activeTab());
2185
- const { length } = tabIds;
2186
- let activeIndex = currentIndex;
2187
- let newTab = activeTab();
2188
- if (event.key === "ArrowLeft") {
2189
- activeIndex = currentIndex === 0 ? length - 1 : currentIndex - 1;
2190
- newTab = tabIds[activeIndex];
2191
- } else if (event.key === "ArrowRight") {
2192
- activeIndex = currentIndex === length - 1 ? 0 : currentIndex + 1;
2193
- newTab = tabIds[activeIndex];
2194
- }
2195
- tabElements[activeIndex].focus();
2196
- setActiveTab(newTab);
2197
- };
2198
- root.addEventListener("keydown", handleArrowKeys);
2199
- return onCleanup(() => root.removeEventListener("keydown", handleArrowKeys));
2029
+ get children() {
2030
+ var _el$ = _tmpl$62(), _el$2 = _el$.firstChild;
2031
+ _el$.style.setProperty("--stripes-size", "15px");
2032
+ insert(_el$2, createComponent(Show, {
2033
+ get when() {
2034
+ return isDevelopmentMode();
2035
+ },
2036
+ get children() {
2037
+ var _el$3 = _tmpl$28();
2038
+ insert(_el$3, (() => {
2039
+ var _c$ = memo(() => !!isKeyless());
2040
+ return () => _c$() ? createComponent(Tooltip.Root, {
2041
+ get children() {
2042
+ return [createComponent(Tooltip.Trigger, {
2043
+ "class": "",
2044
+ get children() {
2045
+ return _tmpl$72();
2046
+ }
2047
+ }), createComponent(Tooltip.Content, {
2048
+ get children() {
2049
+ return ["Temporary <Inbox />. All data will expire in 24 hours.", _tmpl$82(), "Connect API key to persist."];
2050
+ }
2051
+ })];
2052
+ }
2053
+ }) : "Development mode";
2054
+ })());
2055
+ return _el$3;
2056
+ }
2057
+ }), null);
2058
+ insert(_el$2, createComponent(Show, {
2059
+ get when() {
2060
+ return memo(() => !!isDevelopmentMode())() && !hideBranding();
2061
+ },
2062
+ get children() {
2063
+ return _tmpl$29();
2064
+ }
2065
+ }), null);
2066
+ insert(_el$2, createComponent(Show, {
2067
+ get when() {
2068
+ return !hideBranding();
2069
+ },
2070
+ get children() {
2071
+ var _el$5 = _tmpl$32(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling;
2072
+ insert(_el$5, createComponent(Novu2, {
2073
+ "class": "nt-size-2.5"
2074
+ }), _el$7);
2075
+ effect(() => setAttribute(_el$5, "href", `https://go.novu.co/powered?ref=${getCurrentDomain()}`));
2076
+ return _el$5;
2077
+ }
2078
+ }), null);
2079
+ insert(_el$, createComponent(Show, {
2080
+ get when() {
2081
+ return isKeyless();
2082
+ },
2083
+ get children() {
2084
+ var _el$8 = _tmpl$52(), _el$9 = _el$8.firstChild; _el$9.firstChild; var _el$11 = _el$9.nextSibling, _el$13 = _el$11.nextSibling, _el$14 = _el$13.nextSibling;
2085
+ insert(_el$9, createComponent(ArrowUpRight, {
2086
+ "class": "nt-ml-1"
2087
+ }), null);
2088
+ insert(_el$8, createComponent(CopyToClipboard, {
2089
+ get textToCopy() {
2090
+ return getCurlCommand();
2091
+ },
2092
+ get children() {
2093
+ return _tmpl$42();
2094
+ }
2095
+ }), _el$13);
2096
+ _el$14.$$click = (e) => {
2097
+ e.preventDefault();
2098
+ handleTriggerHelloWorld();
2099
+ };
2100
+ return _el$8;
2101
+ }
2102
+ }), null);
2103
+ effect(() => className(_el$, cn(`nt-relative nt-flex nt-shrink-0 nt-flex-col nt-justify-center nt-items-center nt-gap-1 nt-mt-auto nt-py-3 nt-text-foreground-alpha-400`, {
2104
+ [stripes]: isDevelopmentMode(),
2105
+ [devModeGradient]: isDevelopmentMode(),
2106
+ "nt-bg-[oklch(from_var(--nv-color-stripes)_l_c_h_/_0.1)]": isDevelopmentMode(),
2107
+ [prodModeGradient]: !isDevelopmentMode()
2108
+ })));
2109
+ return _el$;
2110
+ }
2200
2111
  });
2201
2112
  };
2202
-
2203
- // src/ui/components/primitives/Tabs/TabsRoot.tsx
2204
- var _tmpl$33 = /* @__PURE__ */ template(`<div>`);
2205
- var TabsContext = createContext(void 0);
2206
- var useTabsContext = () => {
2207
- const context = useContext(TabsContext);
2208
- if (!context) {
2209
- throw new Error("useTabsContext must be used within an TabsContext.Provider");
2113
+ function getCurrentDomain() {
2114
+ if (isBrowser()) {
2115
+ return window.location.hostname;
2210
2116
  }
2211
- return context;
2117
+ return "";
2118
+ }
2119
+ function getCurlCommand() {
2120
+ const identifier = window.localStorage.getItem("novu_keyless_application_identifier");
2121
+ if (!identifier) {
2122
+ console.error("Novu application identifier not found for cURL command.");
2123
+ return "";
2124
+ }
2125
+ const DEFAULT_BACKEND_URL = typeof window !== "undefined" && window.NOVU_LOCAL_BACKEND_URL || "https://api.novu.co";
2126
+ return `curl -X POST ${DEFAULT_BACKEND_URL}/${DEFAULT_API_VERSION}/events/trigger -H 'Authorization: Keyless ${identifier}' -H 'Content-Type: application/json' -d '{
2127
+ "name": "hello-world",
2128
+ "to": {
2129
+ "subscriberId": "keyless-subscriber-id"
2130
+ },
2131
+ "payload": {
2132
+ "body": "New From Keyless Environment",
2133
+ "subject": "Hello World!"
2134
+ }
2135
+ }'`;
2136
+ }
2137
+ delegateEvents(["click"]);
2138
+ var _tmpl$30 = /* @__PURE__ */ template(`<button>`);
2139
+ var buttonVariants = cva(cn('nt-inline-flex nt-gap-4 nt-items-center nt-justify-center nt-whitespace-nowrap nt-text-sm nt-font-medium nt-transition-colors disabled:nt-pointer-events-none disabled:nt-opacity-50 after:nt-absolute after:nt-content-[""] before:nt-content-[""] before:nt-absolute [&_svg]:nt-pointer-events-none [&_svg]:nt-shrink-0', `focus-visible:nt-outline-none focus-visible:nt-ring-2 focus-visible:nt-rounded-md focus-visible:nt-ring-ring focus-visible:nt-ring-offset-2`), {
2140
+ variants: {
2141
+ variant: {
2142
+ default: "nt-bg-gradient-to-b nt-from-20% nt-from-primary-foreground-alpha-200 nt-to-transparent nt-bg-primary nt-text-primary-foreground nt-shadow-[0_0_0_0.5px_var(--nv-color-primary-600)] nt-relative before:nt-absolute before:nt-inset-0 before:nt-border before:nt-border-primary-foreground-alpha-100 after:nt-absolute after:nt-inset-0 after:nt-opacity-0 hover:after:nt-opacity-100 after:nt-transition-opacity after:nt-bg-gradient-to-b after:nt-from-primary-foreground-alpha-50 after:nt-to-transparent",
2143
+ secondary: "nt-bg-secondary nt-text-secondary-foreground nt-shadow-[0_0_0_0.5px_var(--nv-color-secondary-600)] nt-relative before:nt-absolute before:nt-inset-0 before:nt-border before:nt-border-secondary-foreground-alpha-100 after:nt-absolute after:nt-inset-0 after:nt-opacity-0 hover:after:nt-opacity-100 after:nt-transition-opacity after:nt-bg-gradient-to-b after:nt-from-secondary-foreground-alpha-50 after:nt-to-transparent",
2144
+ ghost: "hover:nt-bg-neutral-alpha-100 nt-text-foreground-alpha-600 hover:nt-text-foreground-alpha-800",
2145
+ unstyled: ""
2146
+ },
2147
+ size: {
2148
+ none: "",
2149
+ iconSm: "nt-p-1 nt-rounded-md after:nt-rounded-md before:nt-rounded-md focus-visible:nt-rounded-md",
2150
+ icon: "nt-p-2.5 nt-rounded-xl before:nt-rounded-xl after:nt-rounded-xl focus-visible:nt-rounded-xl",
2151
+ default: "nt-px-2 nt-py-1 nt-rounded-lg focus-visible:nt-rounded-lg before:nt-rounded-lg after:nt-rounded-lg",
2152
+ sm: "nt-px-1 nt-py-px nt-rounded-md nt-text-xs nt-px-1 before:nt-rounded-md focus-visible:nt-rounded-md after:nt-rounded-md",
2153
+ lg: "nt-px-8 nt-py-2 nt-text-base before:nt-rounded-lg after:nt-rounded-lg focus-visible:nt-rounded-lg"
2154
+ }
2155
+ },
2156
+ defaultVariants: {
2157
+ variant: "default",
2158
+ size: "default"
2159
+ }
2160
+ });
2161
+ var Button = (props) => {
2162
+ const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
2163
+ const style = useStyle();
2164
+ return (() => {
2165
+ var _el$ = _tmpl$30();
2166
+ spread(_el$, mergeProps({
2167
+ get ["data-variant"]() {
2168
+ return props.variant;
2169
+ },
2170
+ get ["data-size"]() {
2171
+ return props.size;
2172
+ },
2173
+ get ["class"]() {
2174
+ return style(local.appearanceKey || "button", cn(buttonVariants({
2175
+ variant: props.variant,
2176
+ size: props.size
2177
+ }), local.class));
2178
+ }
2179
+ }, rest), false, false);
2180
+ return _el$;
2181
+ })();
2212
2182
  };
2213
- var tabsRootVariants = () => "nt-flex nt-flex-col";
2214
- var TabsRoot = (props) => {
2215
- var _a;
2216
- const [local, rest] = splitProps(props, ["defaultValue", "value", "class", "appearanceKey", "onChange", "children"]);
2217
- const [tabsContainer, setTabsContainer] = createSignal();
2218
- const [visibleTabs, setVisibleTabs] = createSignal([]);
2219
- const [activeTab, setActiveTab] = createSignal((_a = local.defaultValue) != null ? _a : "");
2183
+ var _tmpl$31 = /* @__PURE__ */ template(`<div>`);
2184
+ var _tmpl$210 = /* @__PURE__ */ template(`<div><span>`);
2185
+ var DatePickerContext = createContext({
2186
+ currentDate: () => /* @__PURE__ */ new Date(),
2187
+ setCurrentDate: () => {
2188
+ },
2189
+ viewMonth: () => /* @__PURE__ */ new Date(),
2190
+ setViewMonth: () => {
2191
+ },
2192
+ selectedDate: () => null,
2193
+ setSelectedDate: () => {
2194
+ },
2195
+ maxDays: () => 0
2196
+ });
2197
+ var useDatePicker = () => useContext(DatePickerContext);
2198
+ var DatePicker = (props) => {
2199
+ const [local, rest] = splitProps(props, ["children", "value", "onDateChange", "class", "maxDays"]);
2220
2200
  const style = useStyle();
2221
- useKeyboardNavigation({
2222
- tabsContainer,
2223
- activeTab,
2224
- setActiveTab
2225
- });
2226
- createEffect(() => {
2227
- if (local.value) {
2228
- setActiveTab(local.value);
2201
+ const today = /* @__PURE__ */ new Date();
2202
+ today.setHours(0, 0, 0, 0);
2203
+ const [currentDate, setCurrentDate] = createSignal(today);
2204
+ const [viewMonth, setViewMonth] = createSignal(today);
2205
+ const [selectedDate, setSelectedDate] = createSignal(local.value ? new Date(local.value) : null);
2206
+ const handleDateSelect = (date) => {
2207
+ setSelectedDate(date);
2208
+ if (local.onDateChange) {
2209
+ local.onDateChange(date);
2229
2210
  }
2230
- });
2231
- createEffect(() => {
2232
- var _a2;
2233
- (_a2 = local.onChange) == null ? void 0 : _a2.call(local, activeTab());
2234
- });
2235
- return createComponent(TabsContext.Provider, {
2211
+ };
2212
+ return createComponent(DatePickerContext.Provider, {
2236
2213
  value: {
2237
- activeTab,
2238
- setActiveTab,
2239
- visibleTabs,
2240
- setVisibleTabs
2214
+ currentDate,
2215
+ setCurrentDate,
2216
+ viewMonth,
2217
+ setViewMonth,
2218
+ selectedDate,
2219
+ setSelectedDate: handleDateSelect,
2220
+ maxDays: () => props.maxDays
2241
2221
  },
2242
2222
  get children() {
2243
- var _el$ = _tmpl$33();
2244
- use(setTabsContainer, _el$);
2223
+ var _el$ = _tmpl$31();
2245
2224
  spread(_el$, mergeProps({
2246
2225
  get ["class"]() {
2247
- return style(local.appearanceKey || "tabsRoot", cn(tabsRootVariants(), local.class));
2226
+ return style("datePicker", cn("nt-p-2", local.class));
2248
2227
  }
2249
2228
  }, rest), false, true);
2250
2229
  insert(_el$, () => local.children);
@@ -2252,31 +2231,726 @@ var TabsRoot = (props) => {
2252
2231
  }
2253
2232
  });
2254
2233
  };
2255
-
2256
- // src/ui/components/primitives/Tabs/TabsContent.tsx
2257
- var _tmpl$34 = /* @__PURE__ */ template(`<div role=tabpanel>`);
2258
- var TabsContent = (props) => {
2259
- const [local, rest] = splitProps(props, ["value", "class", "appearanceKey", "children"]);
2234
+ var DatePickerHeader = (props) => {
2235
+ const [local, rest] = splitProps(props, ["class", "appearanceKey", "children"]);
2260
2236
  const style = useStyle();
2261
2237
  const {
2262
- activeTab
2263
- } = useTabsContext();
2264
- return createComponent(Show, {
2265
- get when() {
2266
- return activeTab() === local.value;
2267
- },
2268
- get children() {
2269
- var _el$ = _tmpl$34();
2270
- spread(_el$, mergeProps({
2271
- get ["class"]() {
2272
- return memo(() => !!local.class)() ? local.class : style(local.appearanceKey || "tabsContent", activeTab() === local.value ? "nt-block" : "nt-hidden");
2273
- },
2274
- get id() {
2275
- return `tabpanel-${local.value}`;
2276
- },
2277
- get ["aria-labelledby"]() {
2278
- return local.value;
2279
- },
2238
+ viewMonth,
2239
+ setViewMonth,
2240
+ currentDate,
2241
+ maxDays
2242
+ } = useDatePicker();
2243
+ useAppearance();
2244
+ const prevIconClass = style("datePickerControlPrevTrigger__icon", "nt-size-4 nt-text-foreground-alpha-700", {
2245
+ iconKey: "arrowLeft"
2246
+ });
2247
+ const nextIconClass = style("datePickerControlNextTrigger__icon", "nt-size-4 nt-text-foreground-alpha-700", {
2248
+ iconKey: "arrowRight"
2249
+ });
2250
+ const handlePrevMonth = () => {
2251
+ const date = new Date(viewMonth());
2252
+ date.setMonth(date.getMonth() - 1);
2253
+ const currentMonth = currentDate();
2254
+ if (date.getFullYear() < currentMonth.getFullYear() || date.getFullYear() === currentMonth.getFullYear() && date.getMonth() < currentMonth.getMonth()) {
2255
+ return;
2256
+ }
2257
+ setViewMonth(date);
2258
+ };
2259
+ const handleNextMonth = () => {
2260
+ const date = new Date(viewMonth());
2261
+ date.setMonth(date.getMonth() + 1);
2262
+ const maxDaysValue = maxDays();
2263
+ if (maxDaysValue > 0) {
2264
+ const maxDate = new Date(currentDate());
2265
+ maxDate.setDate(maxDate.getDate() + maxDaysValue);
2266
+ if (date.getFullYear() > maxDate.getFullYear() || date.getFullYear() === maxDate.getFullYear() && date.getMonth() > maxDate.getMonth()) {
2267
+ return;
2268
+ }
2269
+ }
2270
+ setViewMonth(date);
2271
+ };
2272
+ const isPrevDisabled = () => {
2273
+ const current = currentDate();
2274
+ const view = viewMonth();
2275
+ return view.getFullYear() === current.getFullYear() && view.getMonth() === current.getMonth();
2276
+ };
2277
+ const isNextDisabled = () => {
2278
+ const maxDaysValue = maxDays();
2279
+ if (maxDaysValue === 0) return false;
2280
+ const view = viewMonth();
2281
+ const maxDate = new Date(currentDate());
2282
+ maxDate.setDate(maxDate.getDate() + maxDaysValue);
2283
+ return view.getFullYear() === maxDate.getFullYear() && view.getMonth() === maxDate.getMonth();
2284
+ };
2285
+ return (() => {
2286
+ var _el$2 = _tmpl$210(), _el$3 = _el$2.firstChild;
2287
+ spread(_el$2, mergeProps({
2288
+ get ["class"]() {
2289
+ return style(local.appearanceKey || "datePickerControl", cn("nt-flex nt-items-center nt-justify-between nt-gap-1.5 nt-h-7 nt-p-1 nt-mb-2 nt-rounded-lg nt-bg-background", local.class));
2290
+ }
2291
+ }, rest), false, true);
2292
+ insert(_el$2, createComponent(Button, {
2293
+ appearanceKey: "datePickerControlPrevTrigger",
2294
+ variant: "ghost",
2295
+ onClick: (e) => {
2296
+ e.stopPropagation();
2297
+ handlePrevMonth();
2298
+ },
2299
+ get disabled() {
2300
+ return isPrevDisabled();
2301
+ },
2302
+ "class": "nt-flex nt-justify-center nt-items-center nt-gap-0.5 nt-w-5 nt-h-5 nt-p-0 nt-rounded-md nt-bg-background nt-shadow-[0px_1px_2px_0px_rgba(10,13,20,0.03)]",
2303
+ get children() {
2304
+ return createComponent(IconRendererWrapper, {
2305
+ iconKey: "arrowLeft",
2306
+ "class": prevIconClass,
2307
+ get fallback() {
2308
+ return createComponent(ArrowLeft, {
2309
+ "class": prevIconClass
2310
+ });
2311
+ }
2312
+ });
2313
+ }
2314
+ }), _el$3);
2315
+ insert(_el$3, () => viewMonth().toLocaleDateString("en-US", {
2316
+ month: "long",
2317
+ year: "numeric"
2318
+ }));
2319
+ insert(_el$2, createComponent(Button, {
2320
+ appearanceKey: "datePickerControlNextTrigger",
2321
+ variant: "ghost",
2322
+ onClick: (e) => {
2323
+ e.stopPropagation();
2324
+ handleNextMonth();
2325
+ },
2326
+ get disabled() {
2327
+ return isNextDisabled();
2328
+ },
2329
+ "class": "nt-flex nt-justify-center nt-items-center nt-gap-0.5 nt-w-5 nt-h-5 nt-p-0 nt-rounded-md nt-bg-background nt-shadow-[0px_1px_2px_0px_rgba(10,13,20,0.03)]",
2330
+ get children() {
2331
+ return createComponent(IconRendererWrapper, {
2332
+ iconKey: "arrowRight",
2333
+ "class": nextIconClass,
2334
+ get fallback() {
2335
+ return createComponent(ArrowRight, {
2336
+ "class": nextIconClass
2337
+ });
2338
+ }
2339
+ });
2340
+ }
2341
+ }), null);
2342
+ effect(() => className(_el$3, style("datePickerHeaderMonth", "nt-text-sm nt-font-medium nt-text-foreground-alpha-700")));
2343
+ return _el$2;
2344
+ })();
2345
+ };
2346
+ var DatePickerGridCellTrigger = (props) => {
2347
+ const [local, rest] = splitProps(props, ["class", "appearanceKey", "date"]);
2348
+ const {
2349
+ selectedDate,
2350
+ viewMonth,
2351
+ setSelectedDate,
2352
+ currentDate,
2353
+ maxDays
2354
+ } = useDatePicker();
2355
+ const {
2356
+ t
2357
+ } = useLocalization();
2358
+ const isCurrentMonth = props.date.getMonth() === viewMonth().getMonth();
2359
+ const isPastDate = () => {
2360
+ const today = currentDate();
2361
+ return props.date < today;
2362
+ };
2363
+ const isFutureDate = () => {
2364
+ const maxDaysValue = maxDays();
2365
+ if (maxDaysValue === 0) return false;
2366
+ const maxDate = new Date(currentDate());
2367
+ maxDate.setDate(maxDate.getDate() + maxDaysValue);
2368
+ return props.date > maxDate;
2369
+ };
2370
+ const isDisabled = !isCurrentMonth || isPastDate() || isFutureDate();
2371
+ const isExceedingLimit = () => {
2372
+ return isCurrentMonth && isFutureDate();
2373
+ };
2374
+ const buttonElement = createComponent(Button, mergeProps({
2375
+ appearanceKey: "datePickerCalendarDay__button",
2376
+ variant: "ghost",
2377
+ disabled: isDisabled,
2378
+ onClick: (e) => {
2379
+ e.stopPropagation();
2380
+ setSelectedDate(local.date);
2381
+ },
2382
+ get ["class"]() {
2383
+ var _a;
2384
+ return cn("nt-size-8 nt-w-full nt-rounded-md nt-flex nt-items-center nt-justify-center", {
2385
+ "nt-text-muted-foreground disabled:nt-opacity-20": !isCurrentMonth || isPastDate(),
2386
+ "nt-text-foreground-alpha-700": isCurrentMonth && !isPastDate() && !isFutureDate()
2387
+ }, {
2388
+ "nt-bg-primary-alpha-300 hover:nt-bg-primary-alpha-400": ((_a = selectedDate()) == null ? void 0 : _a.toDateString()) === local.date.toDateString()
2389
+ });
2390
+ }
2391
+ }, rest, {
2392
+ get children() {
2393
+ return local.date.getDate();
2394
+ }
2395
+ }));
2396
+ if (isExceedingLimit()) {
2397
+ return createComponent(Tooltip.Root, {
2398
+ get children() {
2399
+ return [createComponent(Tooltip.Trigger, {
2400
+ children: buttonElement
2401
+ }), createComponent(Tooltip.Content, {
2402
+ get children() {
2403
+ return t("snooze.datePicker.exceedingLimitTooltip", {
2404
+ days: maxDays()
2405
+ });
2406
+ }
2407
+ })];
2408
+ }
2409
+ });
2410
+ }
2411
+ return buttonElement;
2412
+ };
2413
+ var DatePickerCalendar = (props) => {
2414
+ const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
2415
+ const style = useStyle();
2416
+ const {
2417
+ viewMonth
2418
+ } = useDatePicker();
2419
+ const getDaysInMonth = () => {
2420
+ const year = viewMonth().getFullYear();
2421
+ const month = viewMonth().getMonth();
2422
+ const firstDay = new Date(year, month, 1);
2423
+ const daysInMonth = new Date(year, month + 1, 0).getDate();
2424
+ const startingDay = firstDay.getDay();
2425
+ const days = [];
2426
+ for (let i = 0; i < startingDay; i += 1) {
2427
+ const prevMonthDay = new Date(year, month, -i);
2428
+ days.unshift(prevMonthDay);
2429
+ }
2430
+ for (let i = 1; i <= daysInMonth; i += 1) {
2431
+ days.push(new Date(year, month, i));
2432
+ }
2433
+ const remainingCells = 7 - days.length % 7;
2434
+ if (remainingCells < 7) {
2435
+ for (let i = 1; i <= remainingCells; i += 1) {
2436
+ days.push(new Date(year, month + 1, i));
2437
+ }
2438
+ }
2439
+ return days;
2440
+ };
2441
+ return (() => {
2442
+ var _el$8 = _tmpl$31();
2443
+ _el$8.$$click = (e) => e.stopPropagation();
2444
+ spread(_el$8, mergeProps({
2445
+ get ["class"]() {
2446
+ return style(local.appearanceKey || "datePickerCalendar", cn("nt-grid nt-grid-cols-7 nt-gap-1", local.class));
2447
+ }
2448
+ }, rest), false, true);
2449
+ insert(_el$8, () => getDaysInMonth().map((date) => {
2450
+ return createComponent(DatePickerGridCellTrigger, {
2451
+ date
2452
+ });
2453
+ }));
2454
+ return _el$8;
2455
+ })();
2456
+ };
2457
+ delegateEvents(["click"]);
2458
+ var _tmpl$33 = /* @__PURE__ */ template(`<button>`);
2459
+ var PopoverClose = (props) => {
2460
+ const {
2461
+ onClose
2462
+ } = usePopover();
2463
+ const style = useStyle();
2464
+ const [local, rest] = splitProps(props, ["onClick", "asChild", "appearanceKey", "class"]);
2465
+ const handleClick = (e) => {
2466
+ if (typeof local.onClick === "function") {
2467
+ local.onClick(e);
2468
+ }
2469
+ onClose();
2470
+ };
2471
+ if (local.asChild) {
2472
+ return createComponent(Dynamic, mergeProps({
2473
+ get component() {
2474
+ return local.asChild;
2475
+ },
2476
+ onClick: handleClick
2477
+ }, rest));
2478
+ }
2479
+ return (() => {
2480
+ var _el$ = _tmpl$33();
2481
+ _el$.$$click = handleClick;
2482
+ spread(_el$, mergeProps({
2483
+ get ["class"]() {
2484
+ return style(local.appearanceKey || "popoverClose", local.class);
2485
+ }
2486
+ }, rest), false, false);
2487
+ return _el$;
2488
+ })();
2489
+ };
2490
+ delegateEvents(["click"]);
2491
+ var _tmpl$34 = /* @__PURE__ */ template(`<div>`);
2492
+ var Portal2 = (props) => {
2493
+ const appearance = useAppearance();
2494
+ let currentElement;
2495
+ return [(() => {
2496
+ var _el$ = _tmpl$34();
2497
+ use((el) => {
2498
+ currentElement = el;
2499
+ }, _el$);
2500
+ _el$.style.setProperty("display", "none");
2501
+ return _el$;
2502
+ })(), createComponent(Portal, mergeProps({
2503
+ get mount() {
2504
+ return closestNovuRootParent(currentElement, appearance.id());
2505
+ }
2506
+ }, props))];
2507
+ };
2508
+ var closestNovuRootParent = (el, id) => {
2509
+ let element = el;
2510
+ while (element && element.id !== `novu-root-${id}`) {
2511
+ element = element.parentElement;
2512
+ }
2513
+ if (element && element.id === `novu-root-${id}`) {
2514
+ return element;
2515
+ }
2516
+ return void 0;
2517
+ };
2518
+ var PopoverContext = createContext(void 0);
2519
+ function PopoverRoot(props) {
2520
+ var _a;
2521
+ const [uncontrolledIsOpen, setUncontrolledIsOpen] = createSignal((_a = props.open) != null ? _a : false);
2522
+ const onOpenChange = () => {
2523
+ var _a2;
2524
+ return (_a2 = props.onOpenChange) != null ? _a2 : setUncontrolledIsOpen;
2525
+ };
2526
+ const open = () => {
2527
+ var _a2;
2528
+ return (_a2 = props.open) != null ? _a2 : uncontrolledIsOpen();
2529
+ };
2530
+ const [reference, setReference] = createSignal(null);
2531
+ const [floating, setFloating] = createSignal(null);
2532
+ const position = useFloating(reference, floating, {
2533
+ strategy: "absolute",
2534
+ placement: props.placement,
2535
+ whileElementsMounted: autoUpdate,
2536
+ middleware: [offset(10), flip({
2537
+ fallbackPlacements: props.fallbackPlacements
2538
+ }), shift()]
2539
+ });
2540
+ const floatingStyles = createMemo(() => {
2541
+ var _a2, _b;
2542
+ return {
2543
+ position: position.strategy,
2544
+ top: `${(_a2 = position.y) != null ? _a2 : 0}px`,
2545
+ left: `${(_b = position.x) != null ? _b : 0}px`
2546
+ };
2547
+ });
2548
+ const onClose = () => {
2549
+ onOpenChange()(false);
2550
+ };
2551
+ const onToggle = () => {
2552
+ onOpenChange()((prev) => !prev);
2553
+ };
2554
+ return createComponent(PopoverContext.Provider, {
2555
+ value: {
2556
+ onToggle,
2557
+ onClose,
2558
+ reference,
2559
+ setReference,
2560
+ floating,
2561
+ setFloating,
2562
+ open,
2563
+ floatingStyles
2564
+ },
2565
+ get children() {
2566
+ return props.children;
2567
+ }
2568
+ });
2569
+ }
2570
+ function usePopover() {
2571
+ const context = useContext(PopoverContext);
2572
+ if (!context) {
2573
+ throw new Error("usePopover must be used within Popover.Root component");
2574
+ }
2575
+ return context;
2576
+ }
2577
+
2578
+ // src/ui/components/primitives/Popover/PopoverContent.tsx
2579
+ var _tmpl$35 = /* @__PURE__ */ template(`<div>`);
2580
+ var popoverContentVariants = () => cn("nt-w-[400px] nt-h-[600px] nt-rounded-xl nt-bg-background", "nt-shadow-popover nt-animate-in nt-slide-in-from-top-2 nt-fade-in nt-cursor-default nt-flex nt-flex-col nt-overflow-hidden nt-border nt-border-border nt-z-10");
2581
+ var PopoverContentBody = (props) => {
2582
+ const {
2583
+ open,
2584
+ setFloating,
2585
+ floating,
2586
+ floatingStyles
2587
+ } = usePopover();
2588
+ const {
2589
+ setActive,
2590
+ removeActive
2591
+ } = useFocusManager();
2592
+ const [local, rest] = splitProps(props, ["class", "appearanceKey", "style"]);
2593
+ const style = useStyle();
2594
+ onMount(() => {
2595
+ const floatingEl = floating();
2596
+ setActive(floatingEl);
2597
+ onCleanup(() => {
2598
+ removeActive(floatingEl);
2599
+ });
2600
+ });
2601
+ return (() => {
2602
+ var _el$ = _tmpl$35();
2603
+ use(setFloating, _el$);
2604
+ spread(_el$, mergeProps({
2605
+ get ["class"]() {
2606
+ return style(local.appearanceKey || "popoverContent", cn(popoverContentVariants(), local.class));
2607
+ },
2608
+ get style() {
2609
+ return floatingStyles();
2610
+ },
2611
+ get ["data-open"]() {
2612
+ return open();
2613
+ }
2614
+ }, rest), false, false);
2615
+ return _el$;
2616
+ })();
2617
+ };
2618
+ var PopoverContent = (props) => {
2619
+ const {
2620
+ open,
2621
+ onClose,
2622
+ reference,
2623
+ floating
2624
+ } = usePopover();
2625
+ const {
2626
+ active
2627
+ } = useFocusManager();
2628
+ const {
2629
+ container
2630
+ } = useAppearance();
2631
+ const handleClickOutside = (e) => {
2632
+ var _a, _b;
2633
+ if ((_a = reference()) == null ? void 0 : _a.contains(e.target)) {
2634
+ return;
2635
+ }
2636
+ const containerElement = container();
2637
+ if (active() !== floating() || ((_b = floating()) == null ? void 0 : _b.contains(e.target)) || containerElement && e.target.shadowRoot === containerElement) {
2638
+ return;
2639
+ }
2640
+ onClose();
2641
+ };
2642
+ const handleEscapeKey = (e) => {
2643
+ if (active() !== floating()) {
2644
+ return;
2645
+ }
2646
+ if (e instanceof KeyboardEvent && e.key === "Escape") {
2647
+ onClose();
2648
+ }
2649
+ };
2650
+ onMount(() => {
2651
+ var _a;
2652
+ document.body.addEventListener("click", handleClickOutside);
2653
+ (_a = container()) == null ? void 0 : _a.addEventListener("click", handleClickOutside);
2654
+ document.body.addEventListener("keydown", handleEscapeKey);
2655
+ });
2656
+ onCleanup(() => {
2657
+ var _a;
2658
+ document.body.removeEventListener("click", handleClickOutside);
2659
+ (_a = container()) == null ? void 0 : _a.removeEventListener("click", handleClickOutside);
2660
+ document.body.removeEventListener("keydown", handleEscapeKey);
2661
+ });
2662
+ return createComponent(Show, {
2663
+ get when() {
2664
+ return open();
2665
+ },
2666
+ get children() {
2667
+ return createComponent(Portal2, {
2668
+ get children() {
2669
+ return createComponent(PopoverContentBody, props);
2670
+ }
2671
+ });
2672
+ }
2673
+ });
2674
+ };
2675
+ var _tmpl$36 = /* @__PURE__ */ template(`<button>`);
2676
+ var PopoverTrigger = (props) => {
2677
+ const {
2678
+ setReference,
2679
+ onToggle
2680
+ } = usePopover();
2681
+ const style = useStyle();
2682
+ const [local, rest] = splitProps(props, ["appearanceKey", "asChild", "onClick", "ref"]);
2683
+ const handleClick = (e) => {
2684
+ if (typeof local.onClick === "function") {
2685
+ local.onClick(e);
2686
+ }
2687
+ onToggle();
2688
+ };
2689
+ const ref = createMemo(() => local.ref ? mergeRefs(setReference, local.ref) : setReference);
2690
+ if (local.asChild) {
2691
+ return createComponent(Dynamic, mergeProps({
2692
+ get component() {
2693
+ return local.asChild;
2694
+ },
2695
+ ref(r$) {
2696
+ var _ref$ = ref();
2697
+ typeof _ref$ === "function" && _ref$(r$);
2698
+ },
2699
+ onClick: handleClick
2700
+ }, rest));
2701
+ }
2702
+ return (() => {
2703
+ var _el$ = _tmpl$36();
2704
+ _el$.$$click = handleClick;
2705
+ var _ref$2 = ref();
2706
+ typeof _ref$2 === "function" && use(_ref$2, _el$);
2707
+ spread(_el$, mergeProps({
2708
+ get ["class"]() {
2709
+ return style(local.appearanceKey || "dropdownTrigger");
2710
+ }
2711
+ }, rest), false, true);
2712
+ insert(_el$, () => props.children);
2713
+ return _el$;
2714
+ })();
2715
+ };
2716
+ delegateEvents(["click"]);
2717
+
2718
+ // src/ui/components/primitives/Popover/index.ts
2719
+ var Popover = {
2720
+ Root: PopoverRoot,
2721
+ /**
2722
+ * Popover.Trigger renders a `button` and has no default styling.
2723
+ */
2724
+ Trigger: PopoverTrigger,
2725
+ /**
2726
+ * Popover.Content renders a `div` and has popover specific styling.
2727
+ */
2728
+ Content: PopoverContent,
2729
+ /**
2730
+ * Popover.Close renders a `button` and has no styling.
2731
+ * Closes the popover when clicked.
2732
+ * `onClick` function is propagated.
2733
+ */
2734
+ Close: PopoverClose
2735
+ };
2736
+ var dropdownContentVariants = () => "nt-p-1 nt-text-sm nt-min-w-52 nt-shadow-dropdown nt-h-fit nt-min-w-52 nt-w-max";
2737
+ var DropdownContent = (props) => {
2738
+ const [local, rest] = splitProps(props, ["appearanceKey", "class"]);
2739
+ return createComponent(Popover.Content, mergeProps({
2740
+ get appearanceKey() {
2741
+ return local.appearanceKey || "dropdownContent";
2742
+ },
2743
+ get ["class"]() {
2744
+ return cn(dropdownContentVariants(), local.class);
2745
+ }
2746
+ }, rest));
2747
+ };
2748
+ var dropdownItemVariants = () => "focus:nt-outline-none nt-flex nt-items-center nt-gap-1.5 nt-text-sm nt-rounded-lg nt-items-center hover:nt-bg-neutral-alpha-50 focus-visible:nt-bg-neutral-alpha-50 nt-py-1 nt-px-2";
2749
+ var DropdownItem = (props) => {
2750
+ const [local, rest] = splitProps(props, ["appearanceKey", "onClick", "class", "asChild"]);
2751
+ const {
2752
+ onClose
2753
+ } = usePopover();
2754
+ const handleClick = (e) => {
2755
+ if (typeof local.onClick === "function") {
2756
+ local.onClick(e);
2757
+ }
2758
+ onClose();
2759
+ };
2760
+ if (local.asChild) {
2761
+ return createComponent(Dynamic, mergeProps({
2762
+ get component() {
2763
+ return local.asChild;
2764
+ },
2765
+ onClick: handleClick
2766
+ }, rest));
2767
+ }
2768
+ return createComponent(Popover.Close, mergeProps({
2769
+ get appearanceKey() {
2770
+ return local.appearanceKey || "dropdownItem";
2771
+ },
2772
+ get ["class"]() {
2773
+ return cn(dropdownItemVariants(), local.class);
2774
+ },
2775
+ onClick: (e) => {
2776
+ if (typeof local.onClick === "function") {
2777
+ local.onClick(e);
2778
+ }
2779
+ onClose();
2780
+ }
2781
+ }, rest));
2782
+ };
2783
+ var DropdownRoot = (props) => {
2784
+ return createComponent(Popover.Root, mergeProps({
2785
+ placement: "bottom",
2786
+ fallbackPlacements: ["top"]
2787
+ }, props));
2788
+ };
2789
+ var dropdownTriggerButtonVariants = () => `nt-relative nt-transition nt-outline-none focus-visible:nt-outline-nonefocus-visible:nt-ring-2 focus-visible:nt-ring-primary focus-visible:nt-ring-offset-2`;
2790
+ var DropdownTrigger = (props) => {
2791
+ const style = useStyle();
2792
+ const [local, rest] = splitProps(props, ["appearanceKey", "class"]);
2793
+ return createComponent(Popover.Trigger, mergeProps({
2794
+ get ["class"]() {
2795
+ return style(local.appearanceKey || "dropdownTrigger", cn(dropdownTriggerButtonVariants(), local.class));
2796
+ }
2797
+ }, rest));
2798
+ };
2799
+
2800
+ // src/ui/components/primitives/Dropdown/index.ts
2801
+ var Dropdown = {
2802
+ Root: DropdownRoot,
2803
+ /**
2804
+ * Dropdown.Trigger renders a `button` and has no default styling.
2805
+ */
2806
+ Trigger: DropdownTrigger,
2807
+ /**
2808
+ * Dropdown.Content renders a `Popover.Content` by default.
2809
+ */
2810
+ Content: DropdownContent,
2811
+ /**
2812
+ * Dropdown.Close renders a `Popover.Close` by default.
2813
+ */
2814
+ Close: Popover.Close,
2815
+ /**
2816
+ * Dropdown.Item renders a `Popover.Close` with dropdown specific styling.
2817
+ * Closes the popover when clicked.
2818
+ * `onClick` function is propagated.
2819
+ */
2820
+ Item: DropdownItem
2821
+ };
2822
+ var useKeyboardNavigation = ({
2823
+ activeTab,
2824
+ setActiveTab,
2825
+ tabsContainer
2826
+ }) => {
2827
+ const { container } = useAppearance();
2828
+ const [keyboardNavigation, setKeyboardNavigation] = createSignal(false);
2829
+ const getRoot = () => {
2830
+ const containerElement = container();
2831
+ return containerElement instanceof ShadowRoot ? containerElement : document;
2832
+ };
2833
+ createEffect(() => {
2834
+ const root = getRoot();
2835
+ const handleTabKey = (event) => {
2836
+ var _a;
2837
+ if (!(event instanceof KeyboardEvent) || event.key !== "Tab") {
2838
+ return;
2839
+ }
2840
+ const tabs = (_a = tabsContainer()) == null ? void 0 : _a.querySelectorAll('[role="tab"]');
2841
+ if (!tabs || !root.activeElement) {
2842
+ return;
2843
+ }
2844
+ setKeyboardNavigation(Array.from(tabs).includes(root.activeElement));
2845
+ };
2846
+ root.addEventListener("keyup", handleTabKey);
2847
+ return onCleanup(() => root.removeEventListener("keyup", handleTabKey));
2848
+ });
2849
+ createEffect(() => {
2850
+ const root = getRoot();
2851
+ const handleArrowKeys = (event) => {
2852
+ var _a, _b;
2853
+ if (!keyboardNavigation() || !(event instanceof KeyboardEvent) || event.key !== "ArrowLeft" && event.key !== "ArrowRight") {
2854
+ return;
2855
+ }
2856
+ const tabElements = Array.from((_b = (_a = tabsContainer()) == null ? void 0 : _a.querySelectorAll('[role="tab"]')) != null ? _b : []);
2857
+ const tabIds = tabElements.map((tab) => tab.id);
2858
+ const currentIndex = tabIds.indexOf(activeTab());
2859
+ const { length } = tabIds;
2860
+ let activeIndex = currentIndex;
2861
+ let newTab = activeTab();
2862
+ if (event.key === "ArrowLeft") {
2863
+ activeIndex = currentIndex === 0 ? length - 1 : currentIndex - 1;
2864
+ newTab = tabIds[activeIndex];
2865
+ } else if (event.key === "ArrowRight") {
2866
+ activeIndex = currentIndex === length - 1 ? 0 : currentIndex + 1;
2867
+ newTab = tabIds[activeIndex];
2868
+ }
2869
+ tabElements[activeIndex].focus();
2870
+ setActiveTab(newTab);
2871
+ };
2872
+ root.addEventListener("keydown", handleArrowKeys);
2873
+ return onCleanup(() => root.removeEventListener("keydown", handleArrowKeys));
2874
+ });
2875
+ };
2876
+
2877
+ // src/ui/components/primitives/Tabs/TabsRoot.tsx
2878
+ var _tmpl$37 = /* @__PURE__ */ template(`<div>`);
2879
+ var TabsContext = createContext(void 0);
2880
+ var useTabsContext = () => {
2881
+ const context = useContext(TabsContext);
2882
+ if (!context) {
2883
+ throw new Error("useTabsContext must be used within an TabsContext.Provider");
2884
+ }
2885
+ return context;
2886
+ };
2887
+ var tabsRootVariants = () => "nt-flex nt-flex-col";
2888
+ var TabsRoot = (props) => {
2889
+ var _a;
2890
+ const [local, rest] = splitProps(props, ["defaultValue", "value", "class", "appearanceKey", "onChange", "children"]);
2891
+ const [tabsContainer, setTabsContainer] = createSignal();
2892
+ const [visibleTabs, setVisibleTabs] = createSignal([]);
2893
+ const [activeTab, setActiveTab] = createSignal((_a = local.defaultValue) != null ? _a : "");
2894
+ const style = useStyle();
2895
+ useKeyboardNavigation({
2896
+ tabsContainer,
2897
+ activeTab,
2898
+ setActiveTab
2899
+ });
2900
+ createEffect(() => {
2901
+ if (local.value) {
2902
+ setActiveTab(local.value);
2903
+ }
2904
+ });
2905
+ createEffect(() => {
2906
+ var _a2;
2907
+ (_a2 = local.onChange) == null ? void 0 : _a2.call(local, activeTab());
2908
+ });
2909
+ return createComponent(TabsContext.Provider, {
2910
+ value: {
2911
+ activeTab,
2912
+ setActiveTab,
2913
+ visibleTabs,
2914
+ setVisibleTabs
2915
+ },
2916
+ get children() {
2917
+ var _el$ = _tmpl$37();
2918
+ use(setTabsContainer, _el$);
2919
+ spread(_el$, mergeProps({
2920
+ get ["class"]() {
2921
+ return style(local.appearanceKey || "tabsRoot", cn(tabsRootVariants(), local.class));
2922
+ }
2923
+ }, rest), false, true);
2924
+ insert(_el$, () => local.children);
2925
+ return _el$;
2926
+ }
2927
+ });
2928
+ };
2929
+
2930
+ // src/ui/components/primitives/Tabs/TabsContent.tsx
2931
+ var _tmpl$38 = /* @__PURE__ */ template(`<div role=tabpanel>`);
2932
+ var TabsContent = (props) => {
2933
+ const [local, rest] = splitProps(props, ["value", "class", "appearanceKey", "children"]);
2934
+ const style = useStyle();
2935
+ const {
2936
+ activeTab
2937
+ } = useTabsContext();
2938
+ return createComponent(Show, {
2939
+ get when() {
2940
+ return activeTab() === local.value;
2941
+ },
2942
+ get children() {
2943
+ var _el$ = _tmpl$38();
2944
+ spread(_el$, mergeProps({
2945
+ get ["class"]() {
2946
+ return memo(() => !!local.class)() ? local.class : style(local.appearanceKey || "tabsContent", activeTab() === local.value ? "nt-block" : "nt-hidden");
2947
+ },
2948
+ get id() {
2949
+ return `tabpanel-${local.value}`;
2950
+ },
2951
+ get ["aria-labelledby"]() {
2952
+ return local.value;
2953
+ },
2280
2954
  get ["data-state"]() {
2281
2955
  return activeTab() === local.value ? "active" : "inactive";
2282
2956
  }
@@ -2286,14 +2960,14 @@ var TabsContent = (props) => {
2286
2960
  }
2287
2961
  });
2288
2962
  };
2289
- var _tmpl$35 = /* @__PURE__ */ template(`<div role=tablist>`);
2290
- var _tmpl$210 = /* @__PURE__ */ template(`<div class="nt-relative nt-z-[-1]">`);
2963
+ var _tmpl$39 = /* @__PURE__ */ template(`<div role=tablist>`);
2964
+ var _tmpl$211 = /* @__PURE__ */ template(`<div class="nt-relative nt-z-[-1]">`);
2291
2965
  var tabsListVariants = () => "nt-flex nt-gap-6";
2292
2966
  var TabsList = (props) => {
2293
2967
  const [local, rest] = splitProps(props, ["class", "appearanceKey", "ref", "children"]);
2294
2968
  const style = useStyle();
2295
2969
  return [(() => {
2296
- var _el$ = _tmpl$35();
2970
+ var _el$ = _tmpl$39();
2297
2971
  var _ref$ = local.ref;
2298
2972
  typeof _ref$ === "function" ? use(_ref$, _el$) : local.ref = _el$;
2299
2973
  spread(_el$, mergeProps({
@@ -2303,7 +2977,7 @@ var TabsList = (props) => {
2303
2977
  }, rest), false, true);
2304
2978
  insert(_el$, () => local.children);
2305
2979
  return _el$;
2306
- })(), _tmpl$210()];
2980
+ })(), _tmpl$211()];
2307
2981
  };
2308
2982
  var tabsTriggerVariants = () => cn("nt-relative nt-transition nt-outline-none nt-text-foreground-alpha-600 nt-pb-[0.625rem]", `after:nt-absolute after:nt-content-[''] after:nt-bottom-0 after:nt-left-0 after:nt-w-full after:nt-h-[2px]`, "after:nt-transition-opacity after:nt-duration-200", "data-[state=active]:after:nt-border-b-2 data-[state=active]:after:nt-border-primary data-[state=active]:after:nt-opacity-100", "data-[state=active]:nt-text-foreground after:nt-border-b-transparent after:nt-opacity-0", "focus-visible:nt-outline-none focus-visible:nt-rounded-lg focus-visible:nt-ring-2 focus-visible:nt-ring-ring focus-visible:nt-ring-offset-2");
2309
2983
  var TabsTrigger = (props) => {
@@ -2374,8 +3048,8 @@ var inboxFilterLocalizationKeys = {
2374
3048
  archived: "inbox.filters.labels.archived",
2375
3049
  snoozed: "inbox.filters.labels.snoozed"
2376
3050
  };
2377
- var _tmpl$36 = /* @__PURE__ */ template(`<span><span>`);
2378
- var _tmpl$211 = /* @__PURE__ */ template(`<span>`);
3051
+ var _tmpl$40 = /* @__PURE__ */ template(`<span><span>`);
3052
+ var _tmpl$212 = /* @__PURE__ */ template(`<span>`);
2379
3053
  var cases = [{
2380
3054
  status: "unreadRead" /* UNREAD_READ */,
2381
3055
  iconKey: "unread",
@@ -2443,7 +3117,7 @@ var StatusItem = (props) => {
2443
3117
  },
2444
3118
  get children() {
2445
3119
  return [(() => {
2446
- var _el$ = _tmpl$36(), _el$2 = _el$.firstChild;
3120
+ var _el$ = _tmpl$40(), _el$2 = _el$.firstChild;
2447
3121
  insert(_el$, createComponent(IconRendererWrapper, {
2448
3122
  get iconKey() {
2449
3123
  return props.iconKey;
@@ -2451,7 +3125,7 @@ var StatusItem = (props) => {
2451
3125
  "class": itemIconClass,
2452
3126
  get fallback() {
2453
3127
  return (() => {
2454
- var _el$3 = _tmpl$211();
3128
+ var _el$3 = _tmpl$212();
2455
3129
  className(_el$3, itemIconClass);
2456
3130
  insert(_el$3, () => props.icon());
2457
3131
  return _el$3;
@@ -2492,7 +3166,7 @@ var StatusItem = (props) => {
2492
3166
  };
2493
3167
 
2494
3168
  // src/ui/components/elements/InboxStatus/InboxStatusDropdown.tsx
2495
- var _tmpl$37 = /* @__PURE__ */ template(`<span>`);
3169
+ var _tmpl$41 = /* @__PURE__ */ template(`<span>`);
2496
3170
  var StatusDropdown = () => {
2497
3171
  const style = useStyle();
2498
3172
  const {
@@ -2520,7 +3194,7 @@ var StatusDropdown = () => {
2520
3194
  }, triggerProps, {
2521
3195
  get children() {
2522
3196
  return [(() => {
2523
- var _el$ = _tmpl$37();
3197
+ var _el$ = _tmpl$41();
2524
3198
  insert(_el$, () => t(inboxFilterLocalizationKeys[status()]));
2525
3199
  effect((_p$) => {
2526
3200
  var _v$ = inboxFilterLocalizationKeys[status()], _v$2 = style("inboxStatus__title", "nt-text-base");
@@ -2678,7 +3352,7 @@ var useReadAll = (props) => {
2678
3352
  };
2679
3353
 
2680
3354
  // src/ui/components/elements/Header/MoreActionsOptions.tsx
2681
- var _tmpl$38 = /* @__PURE__ */ template(`<span>`);
3355
+ var _tmpl$43 = /* @__PURE__ */ template(`<span>`);
2682
3356
  var iconKeyToComponentMap = {
2683
3357
  markAsRead: MarkAsRead,
2684
3358
  markAsArchived: MarkAsArchived,
@@ -2748,7 +3422,7 @@ var ActionsItem = (props) => {
2748
3422
  });
2749
3423
  }
2750
3424
  }), (() => {
2751
- var _el$ = _tmpl$38();
3425
+ var _el$ = _tmpl$43();
2752
3426
  insert(_el$, () => t(props.localizationKey));
2753
3427
  effect((_p$) => {
2754
3428
  var _v$ = props.localizationKey, _v$2 = style("moreActions__dropdownItemLabel", "nt-leading-none");
@@ -2814,14 +3488,14 @@ var MoreActionsDropdown = () => {
2814
3488
  };
2815
3489
 
2816
3490
  // src/ui/components/elements/Header/ActionsContainer.tsx
2817
- var _tmpl$39 = /* @__PURE__ */ template(`<div>`);
3491
+ var _tmpl$44 = /* @__PURE__ */ template(`<div>`);
2818
3492
  var ActionsContainer = (props) => {
2819
3493
  const style = useStyle();
2820
3494
  const cogsIconClass = style("icon", "nt-size-5", {
2821
3495
  iconKey: "cogs"
2822
3496
  });
2823
3497
  return (() => {
2824
- var _el$ = _tmpl$39();
3498
+ var _el$ = _tmpl$44();
2825
3499
  insert(_el$, createComponent(MoreActionsDropdown, {}), null);
2826
3500
  insert(_el$, createComponent(Show, {
2827
3501
  get when() {
@@ -2853,11 +3527,11 @@ var ActionsContainer = (props) => {
2853
3527
  };
2854
3528
 
2855
3529
  // src/ui/components/elements/Header/Header.tsx
2856
- var _tmpl$40 = /* @__PURE__ */ template(`<div>`);
3530
+ var _tmpl$45 = /* @__PURE__ */ template(`<div>`);
2857
3531
  var Header = (props) => {
2858
3532
  const style = useStyle();
2859
3533
  return (() => {
2860
- var _el$ = _tmpl$40();
3534
+ var _el$ = _tmpl$45();
2861
3535
  insert(_el$, createComponent(StatusDropdown, {}), null);
2862
3536
  insert(_el$, createComponent(ActionsContainer, {
2863
3537
  get showPreferences() {
@@ -2868,7 +3542,7 @@ var Header = (props) => {
2868
3542
  return _el$;
2869
3543
  })();
2870
3544
  };
2871
- var _tmpl$41 = /* @__PURE__ */ template(`<div>`);
3545
+ var _tmpl$46 = /* @__PURE__ */ template(`<div>`);
2872
3546
  var Root = (props) => {
2873
3547
  const [_, rest] = splitProps(props, ["class"]);
2874
3548
  const {
@@ -2884,7 +3558,7 @@ var Root = (props) => {
2884
3558
  },
2885
3559
  children: new Comment(" Powered by Novu - https://novu.co ")
2886
3560
  }), (() => {
2887
- var _el$ = _tmpl$41();
3561
+ var _el$ = _tmpl$46();
2888
3562
  spread(_el$, mergeProps({
2889
3563
  get id() {
2890
3564
  return `novu-root-${id()}`;
@@ -2896,15 +3570,15 @@ var Root = (props) => {
2896
3570
  return _el$;
2897
3571
  })()];
2898
3572
  };
2899
- var _tmpl$43 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 14 14"><path fill=currentColor d="M2.8 8.575V5.162a2.362 2.362 0 1 1 4.725 0v3.675a1.313 1.313 0 1 0 2.625 0V5.335a1.575 1.575 0 1 1 1.05 0v3.502a2.362 2.362 0 1 1-4.725 0V5.162a1.312 1.312 0 1 0-2.625 0v3.413h1.575l-2.1 2.625-2.1-2.625H2.8Z"></path><path fill=url(#a) d="M2.8 8.575V5.162a2.362 2.362 0 1 1 4.725 0v3.675a1.313 1.313 0 1 0 2.625 0V5.335a1.575 1.575 0 1 1 1.05 0v3.502a2.362 2.362 0 1 1-4.725 0V5.162a1.312 1.312 0 1 0-2.625 0v3.413h1.575l-2.1 2.625-2.1-2.625H2.8Z"></path><defs><linearGradient id=a x1=1.225 x2=12.251 y1=6.722 y2=6.779 gradientUnits=userSpaceOnUse><stop stop-color=currentColor></stop><stop offset=1 stop-color=currentColor>`);
3573
+ var _tmpl$47 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 14 14"><path fill=currentColor d="M2.8 8.575V5.162a2.362 2.362 0 1 1 4.725 0v3.675a1.313 1.313 0 1 0 2.625 0V5.335a1.575 1.575 0 1 1 1.05 0v3.502a2.362 2.362 0 1 1-4.725 0V5.162a1.312 1.312 0 1 0-2.625 0v3.413h1.575l-2.1 2.625-2.1-2.625H2.8Z"></path><path fill=url(#a) d="M2.8 8.575V5.162a2.362 2.362 0 1 1 4.725 0v3.675a1.313 1.313 0 1 0 2.625 0V5.335a1.575 1.575 0 1 1 1.05 0v3.502a2.362 2.362 0 1 1-4.725 0V5.162a1.312 1.312 0 1 0-2.625 0v3.413h1.575l-2.1 2.625-2.1-2.625H2.8Z"></path><defs><linearGradient id=a x1=1.225 x2=12.251 y1=6.722 y2=6.779 gradientUnits=userSpaceOnUse><stop stop-color=currentColor></stop><stop offset=1 stop-color=currentColor>`);
2900
3574
  var RouteFill = (props) => {
2901
3575
  return (() => {
2902
- var _el$ = _tmpl$43();
3576
+ var _el$ = _tmpl$47();
2903
3577
  spread(_el$, props, true, true);
2904
3578
  return _el$;
2905
3579
  })();
2906
3580
  };
2907
- var _tmpl$44 = /* @__PURE__ */ template(`<div><div>`);
3581
+ var _tmpl$48 = /* @__PURE__ */ template(`<div><div>`);
2908
3582
  var isInterpolateSizeSupported = () => {
2909
3583
  return CSS.supports("interpolate-size", "allow-keywords");
2910
3584
  };
@@ -2937,7 +3611,7 @@ var Collapsible = (props) => {
2937
3611
  return props.open ? `${scrollHeight()}px` : "0px";
2938
3612
  };
2939
3613
  return (() => {
2940
- var _el$ = _tmpl$44(), _el$2 = _el$.firstChild;
3614
+ var _el$ = _tmpl$48(), _el$2 = _el$.firstChild;
2941
3615
  spread(_el$, mergeProps({
2942
3616
  get ["class"]() {
2943
3617
  return style("collapsible", props.class);
@@ -2957,7 +3631,7 @@ var Collapsible = (props) => {
2957
3631
  return _el$;
2958
3632
  })();
2959
3633
  };
2960
- var _tmpl$45 = /* @__PURE__ */ template(`<label><input type=checkbox class=nt-sr-only><div>`);
3634
+ var _tmpl$49 = /* @__PURE__ */ template(`<label><input type=checkbox class=nt-sr-only><div>`);
2961
3635
  var Switch = (props) => {
2962
3636
  const style = useStyle();
2963
3637
  const handleChange = () => {
@@ -2983,7 +3657,7 @@ var Switch = (props) => {
2983
3657
  const state = () => props.state;
2984
3658
  const disabled = () => props.disabled;
2985
3659
  return (() => {
2986
- var _el$ = _tmpl$45(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
3660
+ var _el$ = _tmpl$49(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
2987
3661
  _el$2.addEventListener("change", handleChange);
2988
3662
  effect((_p$) => {
2989
3663
  var _v$ = style("channelSwitch", cn("nt-relative nt-inline-flex nt-cursor-pointer nt-items-center", {
@@ -3009,7 +3683,7 @@ var Switch = (props) => {
3009
3683
  };
3010
3684
 
3011
3685
  // src/ui/components/elements/Preferences/ChannelRow.tsx
3012
- var _tmpl$46 = /* @__PURE__ */ template(`<div><div><div></div><span></span></div><div>`);
3686
+ var _tmpl$50 = /* @__PURE__ */ template(`<div><div><div></div><span></span></div><div>`);
3013
3687
  var ChannelRow = (props) => {
3014
3688
  const style = useStyle();
3015
3689
  const updatePreference = (enabled) => __async(void 0, null, function* () {
@@ -3023,7 +3697,7 @@ var ChannelRow = (props) => {
3023
3697
  const state = () => props.channel.state;
3024
3698
  const channel = () => props.channel.channel;
3025
3699
  return (() => {
3026
- var _el$ = _tmpl$46(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling;
3700
+ var _el$ = _tmpl$50(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.nextSibling, _el$5 = _el$2.nextSibling;
3027
3701
  insert(_el$3, createComponent(ChannelIcon, {
3028
3702
  appearanceKey: "channel__icon",
3029
3703
  get channel() {
@@ -3146,8 +3820,8 @@ var getLabel = (channel) => {
3146
3820
  };
3147
3821
 
3148
3822
  // src/ui/components/elements/Preferences/PreferencesRow.tsx
3149
- var _tmpl$47 = /* @__PURE__ */ template(`<div>`);
3150
- var _tmpl$212 = /* @__PURE__ */ template(`<div><div><div><div><span></span></div></div><span>`);
3823
+ var _tmpl$51 = /* @__PURE__ */ template(`<div>`);
3824
+ var _tmpl$213 = /* @__PURE__ */ template(`<div><div><div><div><span></span></div></div><span>`);
3151
3825
  var _tmpl$310 = /* @__PURE__ */ template(`<span>`);
3152
3826
  var iconKeyToComponentMap2 = {
3153
3827
  cogs: Cogs,
@@ -3181,7 +3855,7 @@ var PreferencesRow = (props) => {
3181
3855
  return channels().length > 0;
3182
3856
  },
3183
3857
  get children() {
3184
- var _el$ = _tmpl$212(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$3.nextSibling;
3858
+ var _el$ = _tmpl$213(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$4.firstChild, _el$6 = _el$3.nextSibling;
3185
3859
  _el$2.$$click = () => {
3186
3860
  setIsOpenChannels((prev) => !prev);
3187
3861
  };
@@ -3229,7 +3903,7 @@ var PreferencesRow = (props) => {
3229
3903
  return isOpenChannels();
3230
3904
  },
3231
3905
  get children() {
3232
- var _el$7 = _tmpl$47();
3906
+ var _el$7 = _tmpl$51();
3233
3907
  insert(_el$7, createComponent(Index, {
3234
3908
  get each() {
3235
3909
  return channels();
@@ -3302,19 +3976,19 @@ var WorkflowDescription = (props) => {
3302
3976
  return channels.map((c, index) => [c, memo(() => index < channels.length - 1 && ", ")]);
3303
3977
  };
3304
3978
  return (() => {
3305
- var _el$9 = _tmpl$47();
3979
+ var _el$9 = _tmpl$51();
3306
3980
  insert(_el$9, channelNames);
3307
3981
  effect(() => className(_el$9, style(props.appearanceKey, cn("nt-text-sm nt-text-foreground-alpha-600 nt-text-start", props.class))));
3308
3982
  return _el$9;
3309
3983
  })();
3310
3984
  };
3311
3985
  delegateEvents(["click"]);
3312
- var _tmpl$48 = /* @__PURE__ */ template(`<div>`);
3313
- var _tmpl$213 = /* @__PURE__ */ template(`<div><div></div><div>`);
3986
+ var _tmpl$53 = /* @__PURE__ */ template(`<div>`);
3987
+ var _tmpl$214 = /* @__PURE__ */ template(`<div><div></div><div>`);
3314
3988
  var SkeletonText = (props) => {
3315
3989
  const style = useStyle();
3316
3990
  return (() => {
3317
- var _el$ = _tmpl$48();
3991
+ var _el$ = _tmpl$53();
3318
3992
  effect(() => className(_el$, style(props.appearanceKey, cn("nt-w-full nt-h-3 nt-rounded nt-bg-gradient-to-r nt-from-foreground-alpha-50 nt-to-transparent", props.class))));
3319
3993
  return _el$;
3320
3994
  })();
@@ -3322,7 +3996,7 @@ var SkeletonText = (props) => {
3322
3996
  var SkeletonAvatar = (props) => {
3323
3997
  const style = useStyle();
3324
3998
  return (() => {
3325
- var _el$2 = _tmpl$48();
3999
+ var _el$2 = _tmpl$53();
3326
4000
  effect(() => className(_el$2, style(props.appearanceKey, cn("nt-size-8 nt-rounded-lg nt-bg-gradient-to-r nt-from-foreground-alpha-50 nt-to-transparent", props.class))));
3327
4001
  return _el$2;
3328
4002
  })();
@@ -3330,7 +4004,7 @@ var SkeletonAvatar = (props) => {
3330
4004
  var SkeletonSwitch = (props) => {
3331
4005
  const style = useStyle();
3332
4006
  return (() => {
3333
- var _el$3 = _tmpl$213(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
4007
+ var _el$3 = _tmpl$214(), _el$4 = _el$3.firstChild, _el$5 = _el$4.nextSibling;
3334
4008
  effect((_p$) => {
3335
4009
  var _v$ = style(props.appearanceKey, cn("nt-relative nt-inline-flex nt-items-center", props.class)), _v$2 = style(props.appearanceKey, "nt-h-4 nt-w-7 nt-rounded-full nt-bg-gradient-to-r nt-from-foreground-alpha-50 nt-to-transparent"), _v$3 = style(props.thumbAppearanceKey, "nt-absolute nt-top-0.5 nt-left-0.5 nt-size-3 nt-rounded-full nt-bg-background nt-shadow");
3336
4010
  _v$ !== _p$.e && className(_el$3, _p$.e = _v$);
@@ -3347,7 +4021,7 @@ var SkeletonSwitch = (props) => {
3347
4021
  };
3348
4022
 
3349
4023
  // src/ui/components/elements/Preferences/PreferencesListSkeleton.tsx
3350
- var _tmpl$49 = /* @__PURE__ */ template(`<div>`);
4024
+ var _tmpl$54 = /* @__PURE__ */ template(`<div>`);
3351
4025
  var channelIcons = [InApp, Email, Sms, Push, Chat];
3352
4026
  var PreferencesListSkeleton = (props) => {
3353
4027
  const style = useStyle();
@@ -3355,7 +4029,7 @@ var PreferencesListSkeleton = (props) => {
3355
4029
  t
3356
4030
  } = useLocalization();
3357
4031
  return (() => {
3358
- var _el$ = _tmpl$49();
4032
+ var _el$ = _tmpl$54();
3359
4033
  insert(_el$, createComponent(Motion.div, {
3360
4034
  get animate() {
3361
4035
  return {
@@ -3397,7 +4071,7 @@ var PreferencesListSkeleton = (props) => {
3397
4071
  return style("preferencesList__skeletonIcon", "nt-size-8 nt-p-2 nt-rounded-lg nt-bg-neutral-alpha-100");
3398
4072
  }
3399
4073
  }), (() => {
3400
- var _el$3 = _tmpl$49();
4074
+ var _el$3 = _tmpl$54();
3401
4075
  insert(_el$3, createComponent(SkeletonText, {
3402
4076
  appearanceKey: "notificationList__skeletonText",
3403
4077
  "class": "nt-h-2 nt-w-1/3 nt-bg-neutral-alpha-50 nt-rounded"
@@ -3415,7 +4089,7 @@ var PreferencesListSkeleton = (props) => {
3415
4089
  }
3416
4090
  });
3417
4091
  })), (() => {
3418
- var _el$2 = _tmpl$49();
4092
+ var _el$2 = _tmpl$54();
3419
4093
  effect(() => className(_el$2, style("notificationListEmptyNoticeOverlay", "nt-absolute nt-size-full nt-z-10 nt-inset-0 nt-bg-gradient-to-b nt-from-transparent nt-to-background")));
3420
4094
  return _el$2;
3421
4095
  })()];
@@ -3501,26 +4175,26 @@ var DefaultPreferences = (props) => {
3501
4175
  }
3502
4176
  });
3503
4177
  };
3504
- var _tmpl$50 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 14 14"><path fill=currentColor d="M5.95 1.75c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H4.9v1.05h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V7H4.9v3.15h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V11.2h-3.15a.525.525 0 0 1-.525-.525V4.9H2.8a.525.525 0 0 1-.525-.525v-2.1c0-.29.235-.525.525-.525h3.15Zm4.725 8.4h-2.1v1.05h2.1v-1.05Zm0-4.2h-2.1V7h2.1V5.95ZM5.425 2.8h-2.1v1.05h2.1V2.8Z"></path><path fill=url(#a) d="M5.95 1.75c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H4.9v1.05h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V7H4.9v3.15h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V11.2h-3.15a.525.525 0 0 1-.525-.525V4.9H2.8a.525.525 0 0 1-.525-.525v-2.1c0-.29.235-.525.525-.525h3.15Zm4.725 8.4h-2.1v1.05h2.1v-1.05Zm0-4.2h-2.1V7h2.1V5.95ZM5.425 2.8h-2.1v1.05h2.1V2.8Z"></path><defs><linearGradient id=a x1=2.275 x2=11.725 y1=6.982 y2=7.018 gradientUnits=userSpaceOnUse><stop stop-color=currentColor></stop><stop offset=1 stop-color=currentColor>`);
4178
+ var _tmpl$55 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 14 14"><path fill=currentColor d="M5.95 1.75c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H4.9v1.05h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V7H4.9v3.15h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V11.2h-3.15a.525.525 0 0 1-.525-.525V4.9H2.8a.525.525 0 0 1-.525-.525v-2.1c0-.29.235-.525.525-.525h3.15Zm4.725 8.4h-2.1v1.05h2.1v-1.05Zm0-4.2h-2.1V7h2.1V5.95ZM5.425 2.8h-2.1v1.05h2.1V2.8Z"></path><path fill=url(#a) d="M5.95 1.75c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H4.9v1.05h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V7H4.9v3.15h2.625v-.525c0-.29.235-.525.525-.525h3.15c.29 0 .525.235.525.525v2.1c0 .29-.235.525-.525.525H8.05a.525.525 0 0 1-.525-.525V11.2h-3.15a.525.525 0 0 1-.525-.525V4.9H2.8a.525.525 0 0 1-.525-.525v-2.1c0-.29.235-.525.525-.525h3.15Zm4.725 8.4h-2.1v1.05h2.1v-1.05Zm0-4.2h-2.1V7h2.1V5.95ZM5.425 2.8h-2.1v1.05h2.1V2.8Z"></path><defs><linearGradient id=a x1=2.275 x2=11.725 y1=6.982 y2=7.018 gradientUnits=userSpaceOnUse><stop stop-color=currentColor></stop><stop offset=1 stop-color=currentColor>`);
3505
4179
  var NodeTree = (props) => {
3506
4180
  return (() => {
3507
- var _el$ = _tmpl$50();
4181
+ var _el$ = _tmpl$55();
3508
4182
  spread(_el$, props, true, true);
3509
4183
  return _el$;
3510
4184
  })();
3511
4185
  };
3512
- var _tmpl$51 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path fill=currentColor d="M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10Zm0-1a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm.5-4.75V9.5H9v1H7v-1h.5V8.25H7v-1h1.5ZM8.75 6a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z">`);
4186
+ var _tmpl$56 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg fill=none viewBox="0 0 16 16"><path fill=currentColor d="M8 13A5 5 0 1 1 8 3a5 5 0 0 1 0 10Zm0-1a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm.5-4.75V9.5H9v1H7v-1h.5V8.25H7v-1h1.5ZM8.75 6a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z">`);
3513
4187
  var Info = (props) => {
3514
4188
  return (() => {
3515
- var _el$ = _tmpl$51();
4189
+ var _el$ = _tmpl$56();
3516
4190
  spread(_el$, props, true, true);
3517
4191
  return _el$;
3518
4192
  })();
3519
4193
  };
3520
4194
 
3521
4195
  // src/ui/components/elements/Preferences/GroupedPreferencesRow.tsx
3522
- var _tmpl$52 = /* @__PURE__ */ template(`<div><div><span data-localization=preferences.group.info></span></div><div>`);
3523
- var _tmpl$214 = /* @__PURE__ */ template(`<div><div><div><span></span></div><div><span>`);
4196
+ var _tmpl$57 = /* @__PURE__ */ template(`<div><div><span data-localization=preferences.group.info></span></div><div>`);
4197
+ var _tmpl$215 = /* @__PURE__ */ template(`<div><div><div><span></span></div><div><span>`);
3524
4198
  var GroupedPreferencesRow = (props) => {
3525
4199
  const style = useStyle();
3526
4200
  const {
@@ -3585,7 +4259,7 @@ var GroupedPreferencesRow = (props) => {
3585
4259
  return Object.keys(uniqueChannels()).length > 0;
3586
4260
  },
3587
4261
  get children() {
3588
- var _el$ = _tmpl$214(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild;
4262
+ var _el$ = _tmpl$215(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$3.firstChild, _el$5 = _el$3.nextSibling, _el$6 = _el$5.firstChild;
3589
4263
  _el$2.$$click = () => {
3590
4264
  setIsOpened((prev) => !prev);
3591
4265
  };
@@ -3619,7 +4293,7 @@ var GroupedPreferencesRow = (props) => {
3619
4293
  return isOpened();
3620
4294
  },
3621
4295
  get children() {
3622
- var _el$7 = _tmpl$52(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$10 = _el$8.nextSibling;
4296
+ var _el$7 = _tmpl$57(), _el$8 = _el$7.firstChild, _el$9 = _el$8.firstChild, _el$10 = _el$8.nextSibling;
3623
4297
  insert(_el$8, createComponent(Index, {
3624
4298
  get each() {
3625
4299
  return Object.keys(uniqueChannels());
@@ -3743,7 +4417,7 @@ var GroupedPreferences = (props) => {
3743
4417
  };
3744
4418
 
3745
4419
  // src/ui/components/elements/Preferences/Preferences.tsx
3746
- var _tmpl$53 = /* @__PURE__ */ template(`<div>`);
4420
+ var _tmpl$58 = /* @__PURE__ */ template(`<div>`);
3747
4421
  var Preferences = () => {
3748
4422
  var _a;
3749
4423
  const novu = useNovu();
@@ -3830,7 +4504,7 @@ var Preferences = () => {
3830
4504
  })) != null ? _c : [];
3831
4505
  });
3832
4506
  return (() => {
3833
- var _el$ = _tmpl$53();
4507
+ var _el$ = _tmpl$58();
3834
4508
  insert(_el$, createComponent(PreferencesRow, {
3835
4509
  iconKey: "cogs",
3836
4510
  get preference() {
@@ -3869,648 +4543,188 @@ var Preferences = () => {
3869
4543
  });
3870
4544
  },
3871
4545
  get children() {
3872
- return createComponent(GroupedPreferences, {
3873
- get groups() {
3874
- return groupedPreferences();
3875
- },
3876
- get loading() {
3877
- return loading();
3878
- },
3879
- updatePreference,
3880
- bulkUpdatePreferences
3881
- });
3882
- }
3883
- }), null);
3884
- effect(() => className(_el$, style("preferencesContainer", "nt-px-3 nt-py-4 nt-flex nt-flex-col nt-gap-1 nt-overflow-y-auto nt-h-full nt-pr-0 [scrollbar-gutter:stable]")));
3885
- return _el$;
3886
- })();
3887
- };
3888
- var _tmpl$54 = /* @__PURE__ */ template(`<div><div data-localization=preferences.title>`);
3889
- var PreferencesHeader = (props) => {
3890
- const style = useStyle();
3891
- const {
3892
- t
3893
- } = useLocalization();
3894
- const arrowLeftIconClass = style("preferencesHeader__back__button__icon", "nt-size-4", {
3895
- iconKey: "arrowLeft"
3896
- });
3897
- return (() => {
3898
- var _el$ = _tmpl$54(), _el$2 = _el$.firstChild;
3899
- insert(_el$, createComponent(Show, {
3900
- get when() {
3901
- return props.navigateToNotifications;
3902
- },
3903
- children: (navigateToNotifications) => createComponent(Button, {
3904
- appearanceKey: "preferencesHeader__back__button",
3905
- "class": "nt-text-foreground-alpha-600",
3906
- variant: "unstyled",
3907
- size: "none",
3908
- get onClick() {
3909
- return navigateToNotifications();
3910
- },
3911
- get children() {
3912
- return createComponent(IconRendererWrapper, {
3913
- iconKey: "arrowLeft",
3914
- "class": arrowLeftIconClass,
3915
- get fallback() {
3916
- return createComponent(ArrowLeft, {
3917
- "class": arrowLeftIconClass
3918
- });
3919
- }
3920
- });
3921
- }
3922
- })
3923
- }), _el$2);
3924
- insert(_el$2, () => t("preferences.title"));
3925
- effect((_p$) => {
3926
- var _v$ = style("preferencesHeader", "nt-flex nt-bg-neutral-alpha-25 nt-shrink-0 nt-border-b nt-border-border nt-items-center nt-py-3.5 nt-px-4 nt-gap-2"), _v$2 = style("preferencesHeader__title", "nt-text-base nt-font-medium");
3927
- _v$ !== _p$.e && className(_el$, _p$.e = _v$);
3928
- _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
3929
- return _p$;
3930
- }, {
3931
- e: void 0,
3932
- t: void 0
3933
- });
3934
- return _el$;
3935
- })();
3936
- };
3937
- var useTabsDropdown = ({ tabs }) => {
3938
- const [tabsList, setTabsList] = createSignal();
3939
- const [visibleTabs, setVisibleTabs] = createSignal([]);
3940
- const [dropdownTabs, setDropdownTabs] = createSignal([]);
3941
- onMount(() => {
3942
- const tabsListEl = tabsList();
3943
- if (!tabsListEl) return;
3944
- const tabsElements = [...tabsListEl.querySelectorAll('[role="tab"]')];
3945
- const observer = new IntersectionObserver(
3946
- (entries) => {
3947
- let visibleTabIds = entries.filter((entry) => entry.isIntersecting && entry.intersectionRatio === 1).map((entry) => entry.target.id);
3948
- if (tabsElements.length === visibleTabIds.length) {
3949
- setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
3950
- observer.disconnect();
3951
- return;
3952
- }
3953
- visibleTabIds = visibleTabIds.slice(0, -1);
3954
- setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
3955
- setDropdownTabs(tabs.filter((tab) => !visibleTabIds.includes(tab.label)));
3956
- observer.disconnect();
3957
- },
3958
- { root: tabsListEl }
3959
- );
3960
- for (const tabElement of tabsElements) {
3961
- observer.observe(tabElement);
3962
- }
3963
- });
3964
- return { dropdownTabs, setTabsList, visibleTabs };
3965
- };
3966
- var _tmpl$55 = /* @__PURE__ */ template(`<strong>`);
3967
- var _tmpl$215 = /* @__PURE__ */ template(`<p>`);
3968
- var Bold = (props) => {
3969
- const style = useStyle();
3970
- return (() => {
3971
- var _el$ = _tmpl$55();
3972
- insert(_el$, () => props.children);
3973
- effect(() => className(_el$, style(props.appearanceKey || "strong", "nt-font-semibold")));
3974
- return _el$;
3975
- })();
3976
- };
3977
- var Text = (props) => props.children;
3978
- var Markdown = (props) => {
3979
- const [local, rest] = splitProps(props, ["class", "children", "appearanceKey", "strongAppearanceKey"]);
3980
- const style = useStyle();
3981
- const tokens = createMemo(() => parseMarkdownIntoTokens(local.children));
3982
- return (() => {
3983
- var _el$2 = _tmpl$215();
3984
- spread(_el$2, mergeProps({
3985
- get ["class"]() {
3986
- return style(local.appearanceKey, cn(local.class));
3987
- }
3988
- }, rest), false, true);
3989
- insert(_el$2, createComponent(For, {
3990
- get each() {
3991
- return tokens();
3992
- },
3993
- children: (token) => {
3994
- if (token.type === "bold") {
3995
- return createComponent(Bold, {
3996
- get appearanceKey() {
3997
- return local.strongAppearanceKey;
3998
- },
3999
- get children() {
4000
- return token.content;
4001
- }
4002
- });
4003
- } else {
4004
- return createComponent(Text, {
4005
- get children() {
4006
- return token.content;
4007
- }
4008
- });
4009
- }
4010
- }
4011
- }));
4012
- return _el$2;
4013
- })();
4014
- };
4015
- var Markdown_default = Markdown;
4016
- var _tmpl$56 = /* @__PURE__ */ template(`<span>`);
4017
- var badgeVariants = cva(cn("nt-inline-flex nt-flex-row nt-gap-1 nt-items-center"), {
4018
- variants: {
4019
- variant: {
4020
- secondary: "nt-bg-neutral-alpha-50"
4021
- },
4022
- size: {
4023
- default: "nt-px-1 nt-py-px nt-rounded-sm nt-text-xs nt-px-1"
4024
- }
4025
- },
4026
- defaultVariants: {
4027
- variant: "secondary",
4028
- size: "default"
4029
- }
4030
- });
4031
- var Badge = (props) => {
4032
- const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
4033
- const style = useStyle();
4034
- return (() => {
4035
- var _el$ = _tmpl$56();
4036
- spread(_el$, mergeProps({
4037
- get ["data-variant"]() {
4038
- return props.variant;
4039
- },
4040
- get ["data-size"]() {
4041
- return props.size;
4042
- },
4043
- get ["class"]() {
4044
- return style(local.appearanceKey || "badge", cn(badgeVariants({
4045
- variant: props.variant,
4046
- size: props.size
4047
- }), local.class));
4048
- }
4049
- }, rest), false, false);
4050
- return _el$;
4051
- })();
4052
- };
4053
- var TooltipContext = createContext(void 0);
4054
- function TooltipRoot(props) {
4055
- const [reference, setReference] = createSignal(null);
4056
- const [floating, setFloating] = createSignal(null);
4057
- const position = useFloating(reference, floating, {
4058
- placement: props.placement || "top",
4059
- strategy: "fixed",
4060
- whileElementsMounted: autoUpdate,
4061
- middleware: [offset(10), flip({
4062
- fallbackPlacements: props.fallbackPlacements || ["bottom"]
4063
- }), shift()]
4064
- });
4065
- const [isOpen, setIsOpen] = useUncontrolledState({
4066
- value: props.open,
4067
- fallbackValue: false
4068
- });
4069
- return createComponent(TooltipContext.Provider, {
4070
- value: {
4071
- reference,
4072
- setReference,
4073
- floating,
4074
- setFloating,
4075
- open: isOpen,
4076
- setOpen: setIsOpen,
4077
- floatingStyles: () => {
4078
- var _a, _b;
4079
- return {
4080
- position: position.strategy,
4081
- top: `${(_a = position.y) != null ? _a : 0}px`,
4082
- left: `${(_b = position.x) != null ? _b : 0}px`
4083
- };
4084
- }
4085
- },
4086
- get children() {
4087
- return props.children;
4088
- }
4089
- });
4090
- }
4091
- function useTooltip() {
4092
- const context = useContext(TooltipContext);
4093
- if (!context) {
4094
- throw new Error("useTooltip must be used within Tooltip.Root component");
4095
- }
4096
- return context;
4097
- }
4098
-
4099
- // src/ui/components/primitives/Tooltip/TooltipContent.tsx
4100
- var _tmpl$57 = /* @__PURE__ */ template(`<div>`);
4101
- var tooltipContentVariants = () => "nt-bg-foreground nt-p-2 nt-shadow-tooltip nt-rounded-lg nt-text-background nt-text-xs";
4102
- var TooltipContentBody = (props) => {
4103
- const {
4104
- open,
4105
- setFloating,
4106
- floating,
4107
- floatingStyles
4108
- } = useTooltip();
4109
- const {
4110
- setActive,
4111
- removeActive
4112
- } = useFocusManager();
4113
- const [local, rest] = splitProps(props, ["class", "appearanceKey", "style"]);
4114
- const style = useStyle();
4115
- onMount(() => {
4116
- const floatingEl = floating();
4117
- setActive(floatingEl);
4118
- onCleanup(() => {
4119
- removeActive(floatingEl);
4120
- });
4121
- });
4122
- return (() => {
4123
- var _el$ = _tmpl$57();
4124
- use(setFloating, _el$);
4125
- spread(_el$, mergeProps({
4126
- get ["class"]() {
4127
- return memo(() => !!local.class)() ? local.class : style(local.appearanceKey || "tooltipContent", tooltipContentVariants());
4128
- },
4129
- get style() {
4130
- return __spreadProps(__spreadValues({}, floatingStyles()), {
4131
- "z-index": 99999
4546
+ return createComponent(GroupedPreferences, {
4547
+ get groups() {
4548
+ return groupedPreferences();
4549
+ },
4550
+ get loading() {
4551
+ return loading();
4552
+ },
4553
+ updatePreference,
4554
+ bulkUpdatePreferences
4132
4555
  });
4133
- },
4134
- get ["data-open"]() {
4135
- return open();
4136
4556
  }
4137
- }, rest), false, false);
4557
+ }), null);
4558
+ effect(() => className(_el$, style("preferencesContainer", "nt-px-3 nt-py-4 nt-flex nt-flex-col nt-gap-1 nt-overflow-y-auto nt-h-full nt-pr-0 [scrollbar-gutter:stable]")));
4138
4559
  return _el$;
4139
4560
  })();
4140
4561
  };
4141
- var TooltipContent = (props) => {
4142
- const {
4143
- open
4144
- } = useTooltip();
4562
+ var _tmpl$59 = /* @__PURE__ */ template(`<div><div data-localization=preferences.title>`);
4563
+ var PreferencesHeader = (props) => {
4564
+ const style = useStyle();
4145
4565
  const {
4146
- container
4147
- } = useAppearance();
4148
- const portalContainer = () => {
4149
- var _a;
4150
- return (_a = container()) != null ? _a : document.body;
4151
- };
4152
- return createComponent(Show, {
4153
- get when() {
4154
- return open();
4155
- },
4156
- get children() {
4157
- return createComponent(Portal$1, {
4158
- get mount() {
4159
- return portalContainer();
4566
+ t
4567
+ } = useLocalization();
4568
+ const arrowLeftIconClass = style("preferencesHeader__back__button__icon", "nt-size-4", {
4569
+ iconKey: "arrowLeft"
4570
+ });
4571
+ return (() => {
4572
+ var _el$ = _tmpl$59(), _el$2 = _el$.firstChild;
4573
+ insert(_el$, createComponent(Show, {
4574
+ get when() {
4575
+ return props.navigateToNotifications;
4576
+ },
4577
+ children: (navigateToNotifications) => createComponent(Button, {
4578
+ appearanceKey: "preferencesHeader__back__button",
4579
+ "class": "nt-text-foreground-alpha-600",
4580
+ variant: "unstyled",
4581
+ size: "none",
4582
+ get onClick() {
4583
+ return navigateToNotifications();
4160
4584
  },
4161
4585
  get children() {
4162
- return createComponent(Root, {
4163
- get children() {
4164
- return createComponent(TooltipContentBody, props);
4586
+ return createComponent(IconRendererWrapper, {
4587
+ iconKey: "arrowLeft",
4588
+ "class": arrowLeftIconClass,
4589
+ get fallback() {
4590
+ return createComponent(ArrowLeft, {
4591
+ "class": arrowLeftIconClass
4592
+ });
4165
4593
  }
4166
4594
  });
4167
4595
  }
4168
- });
4169
- }
4170
- });
4171
- };
4172
- var _tmpl$58 = /* @__PURE__ */ template(`<button>`);
4173
- var TooltipTrigger = (props) => {
4174
- const {
4175
- setReference,
4176
- setOpen
4177
- } = useTooltip();
4178
- const style = useStyle();
4179
- const [local, rest] = splitProps(props, ["appearanceKey", "asChild", "onClick", "onMouseEnter", "onMouseLeave", "ref"]);
4180
- const handleMouseEnter = (e) => {
4181
- if (typeof local.onMouseEnter === "function") {
4182
- local.onMouseEnter(e);
4183
- }
4184
- setOpen(true);
4185
- };
4186
- const ref = createMemo(() => local.ref ? mergeRefs(setReference, local.ref) : setReference);
4187
- const handleMouseLeave = (e) => {
4188
- if (typeof local.onMouseLeave === "function") {
4189
- local.onMouseLeave(e);
4190
- }
4191
- setOpen(false);
4192
- };
4193
- if (local.asChild) {
4194
- return createComponent(Dynamic, mergeProps({
4195
- get component() {
4196
- return local.asChild;
4197
- },
4198
- ref(r$) {
4199
- var _ref$ = ref();
4200
- typeof _ref$ === "function" && _ref$(r$);
4201
- },
4202
- onMouseEnter: handleMouseEnter,
4203
- onMouseLeave: handleMouseLeave
4204
- }, rest));
4205
- }
4206
- return (() => {
4207
- var _el$ = _tmpl$58();
4208
- _el$.addEventListener("mouseleave", () => {
4209
- setOpen(false);
4210
- });
4211
- _el$.addEventListener("mouseenter", () => {
4212
- setOpen(true);
4596
+ })
4597
+ }), _el$2);
4598
+ insert(_el$2, () => t("preferences.title"));
4599
+ effect((_p$) => {
4600
+ var _v$ = style("preferencesHeader", "nt-flex nt-bg-neutral-alpha-25 nt-shrink-0 nt-border-b nt-border-border nt-items-center nt-py-3.5 nt-px-4 nt-gap-2"), _v$2 = style("preferencesHeader__title", "nt-text-base nt-font-medium");
4601
+ _v$ !== _p$.e && className(_el$, _p$.e = _v$);
4602
+ _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
4603
+ return _p$;
4604
+ }, {
4605
+ e: void 0,
4606
+ t: void 0
4213
4607
  });
4214
- var _ref$2 = ref();
4215
- typeof _ref$2 === "function" && use(_ref$2, _el$);
4216
- spread(_el$, mergeProps({
4217
- get ["class"]() {
4218
- return style(local.appearanceKey || "tooltipTrigger");
4219
- }
4220
- }, rest), false, true);
4221
- insert(_el$, () => props.children);
4222
4608
  return _el$;
4223
4609
  })();
4224
4610
  };
4225
-
4226
- // src/ui/components/primitives/Tooltip/index.ts
4227
- var Tooltip = {
4228
- Root: TooltipRoot,
4229
- /**
4230
- * Tooltip.Trigger renders a `button` and has no default styling.
4231
- */
4232
- Trigger: TooltipTrigger,
4233
- /**
4234
- * Tooltip.Content renders a `div` and has popover specific styling.
4235
- */
4236
- Content: TooltipContent
4237
- };
4238
- var _tmpl$59 = /* @__PURE__ */ template(`<div>`);
4239
- var _tmpl$216 = /* @__PURE__ */ template(`<div><span>`);
4240
- var DatePickerContext = createContext({
4241
- currentDate: () => /* @__PURE__ */ new Date(),
4242
- setCurrentDate: () => {
4243
- },
4244
- viewMonth: () => /* @__PURE__ */ new Date(),
4245
- setViewMonth: () => {
4246
- },
4247
- selectedDate: () => null,
4248
- setSelectedDate: () => {
4249
- },
4250
- maxDays: () => 0
4251
- });
4252
- var useDatePicker = () => useContext(DatePickerContext);
4253
- var DatePicker = (props) => {
4254
- const [local, rest] = splitProps(props, ["children", "value", "onDateChange", "class", "maxDays"]);
4255
- const style = useStyle();
4256
- const today = /* @__PURE__ */ new Date();
4257
- today.setHours(0, 0, 0, 0);
4258
- const [currentDate, setCurrentDate] = createSignal(today);
4259
- const [viewMonth, setViewMonth] = createSignal(today);
4260
- const [selectedDate, setSelectedDate] = createSignal(local.value ? new Date(local.value) : null);
4261
- const handleDateSelect = (date) => {
4262
- setSelectedDate(date);
4263
- if (local.onDateChange) {
4264
- local.onDateChange(date);
4265
- }
4266
- };
4267
- return createComponent(DatePickerContext.Provider, {
4268
- value: {
4269
- currentDate,
4270
- setCurrentDate,
4271
- viewMonth,
4272
- setViewMonth,
4273
- selectedDate,
4274
- setSelectedDate: handleDateSelect,
4275
- maxDays: () => props.maxDays
4276
- },
4277
- get children() {
4278
- var _el$ = _tmpl$59();
4279
- spread(_el$, mergeProps({
4280
- get ["class"]() {
4281
- return style("datePicker", cn("nt-p-2", local.class));
4611
+ var useTabsDropdown = ({ tabs }) => {
4612
+ const [tabsList, setTabsList] = createSignal();
4613
+ const [visibleTabs, setVisibleTabs] = createSignal([]);
4614
+ const [dropdownTabs, setDropdownTabs] = createSignal([]);
4615
+ onMount(() => {
4616
+ const tabsListEl = tabsList();
4617
+ if (!tabsListEl) return;
4618
+ const tabsElements = [...tabsListEl.querySelectorAll('[role="tab"]')];
4619
+ const observer = new IntersectionObserver(
4620
+ (entries) => {
4621
+ let visibleTabIds = entries.filter((entry) => entry.isIntersecting && entry.intersectionRatio === 1).map((entry) => entry.target.id);
4622
+ if (tabsElements.length === visibleTabIds.length) {
4623
+ setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
4624
+ observer.disconnect();
4625
+ return;
4282
4626
  }
4283
- }, rest), false, true);
4284
- insert(_el$, () => local.children);
4285
- return _el$;
4627
+ visibleTabIds = visibleTabIds.slice(0, -1);
4628
+ setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
4629
+ setDropdownTabs(tabs.filter((tab) => !visibleTabIds.includes(tab.label)));
4630
+ observer.disconnect();
4631
+ },
4632
+ { root: tabsListEl }
4633
+ );
4634
+ for (const tabElement of tabsElements) {
4635
+ observer.observe(tabElement);
4286
4636
  }
4287
4637
  });
4288
- };
4289
- var DatePickerHeader = (props) => {
4290
- const [local, rest] = splitProps(props, ["class", "appearanceKey", "children"]);
4291
- const style = useStyle();
4292
- const {
4293
- viewMonth,
4294
- setViewMonth,
4295
- currentDate,
4296
- maxDays
4297
- } = useDatePicker();
4298
- useAppearance();
4299
- const prevIconClass = style("datePickerControlPrevTrigger__icon", "nt-size-4 nt-text-foreground-alpha-700", {
4300
- iconKey: "arrowLeft"
4301
- });
4302
- const nextIconClass = style("datePickerControlNextTrigger__icon", "nt-size-4 nt-text-foreground-alpha-700", {
4303
- iconKey: "arrowRight"
4304
- });
4305
- const handlePrevMonth = () => {
4306
- const date = new Date(viewMonth());
4307
- date.setMonth(date.getMonth() - 1);
4308
- const currentMonth = currentDate();
4309
- if (date.getFullYear() < currentMonth.getFullYear() || date.getFullYear() === currentMonth.getFullYear() && date.getMonth() < currentMonth.getMonth()) {
4310
- return;
4311
- }
4312
- setViewMonth(date);
4313
- };
4314
- const handleNextMonth = () => {
4315
- const date = new Date(viewMonth());
4316
- date.setMonth(date.getMonth() + 1);
4317
- const maxDaysValue = maxDays();
4318
- if (maxDaysValue > 0) {
4319
- const maxDate = new Date(currentDate());
4320
- maxDate.setDate(maxDate.getDate() + maxDaysValue);
4321
- if (date.getFullYear() > maxDate.getFullYear() || date.getFullYear() === maxDate.getFullYear() && date.getMonth() > maxDate.getMonth()) {
4322
- return;
4323
- }
4324
- }
4325
- setViewMonth(date);
4326
- };
4327
- const isPrevDisabled = () => {
4328
- const current = currentDate();
4329
- const view = viewMonth();
4330
- return view.getFullYear() === current.getFullYear() && view.getMonth() === current.getMonth();
4331
- };
4332
- const isNextDisabled = () => {
4333
- const maxDaysValue = maxDays();
4334
- if (maxDaysValue === 0) return false;
4335
- const view = viewMonth();
4336
- const maxDate = new Date(currentDate());
4337
- maxDate.setDate(maxDate.getDate() + maxDaysValue);
4338
- return view.getFullYear() === maxDate.getFullYear() && view.getMonth() === maxDate.getMonth();
4339
- };
4638
+ return { dropdownTabs, setTabsList, visibleTabs };
4639
+ };
4640
+ var _tmpl$60 = /* @__PURE__ */ template(`<strong>`);
4641
+ var _tmpl$216 = /* @__PURE__ */ template(`<p>`);
4642
+ var Bold = (props) => {
4643
+ const style = useStyle();
4644
+ return (() => {
4645
+ var _el$ = _tmpl$60();
4646
+ insert(_el$, () => props.children);
4647
+ effect(() => className(_el$, style(props.appearanceKey || "strong", "nt-font-semibold")));
4648
+ return _el$;
4649
+ })();
4650
+ };
4651
+ var Text = (props) => props.children;
4652
+ var Markdown = (props) => {
4653
+ const [local, rest] = splitProps(props, ["class", "children", "appearanceKey", "strongAppearanceKey"]);
4654
+ const style = useStyle();
4655
+ const tokens = createMemo(() => parseMarkdownIntoTokens(local.children));
4340
4656
  return (() => {
4341
- var _el$2 = _tmpl$216(), _el$3 = _el$2.firstChild;
4657
+ var _el$2 = _tmpl$216();
4342
4658
  spread(_el$2, mergeProps({
4343
4659
  get ["class"]() {
4344
- return style(local.appearanceKey || "datePickerControl", cn("nt-flex nt-items-center nt-justify-between nt-gap-1.5 nt-h-7 nt-p-1 nt-mb-2 nt-rounded-lg nt-bg-background", local.class));
4660
+ return style(local.appearanceKey, cn(local.class));
4345
4661
  }
4346
4662
  }, rest), false, true);
4347
- insert(_el$2, createComponent(Button, {
4348
- appearanceKey: "datePickerControlPrevTrigger",
4349
- variant: "ghost",
4350
- onClick: (e) => {
4351
- e.stopPropagation();
4352
- handlePrevMonth();
4353
- },
4354
- get disabled() {
4355
- return isPrevDisabled();
4663
+ insert(_el$2, createComponent(For, {
4664
+ get each() {
4665
+ return tokens();
4356
4666
  },
4357
- "class": "nt-flex nt-justify-center nt-items-center nt-gap-0.5 nt-w-5 nt-h-5 nt-p-0 nt-rounded-md nt-bg-background nt-shadow-[0px_1px_2px_0px_rgba(10,13,20,0.03)]",
4358
- get children() {
4359
- return createComponent(IconRendererWrapper, {
4360
- iconKey: "arrowLeft",
4361
- "class": prevIconClass,
4362
- get fallback() {
4363
- return createComponent(ArrowLeft, {
4364
- "class": prevIconClass
4365
- });
4366
- }
4367
- });
4667
+ children: (token) => {
4668
+ if (token.type === "bold") {
4669
+ return createComponent(Bold, {
4670
+ get appearanceKey() {
4671
+ return local.strongAppearanceKey;
4672
+ },
4673
+ get children() {
4674
+ return token.content;
4675
+ }
4676
+ });
4677
+ } else {
4678
+ return createComponent(Text, {
4679
+ get children() {
4680
+ return token.content;
4681
+ }
4682
+ });
4683
+ }
4368
4684
  }
4369
- }), _el$3);
4370
- insert(_el$3, () => viewMonth().toLocaleDateString("en-US", {
4371
- month: "long",
4372
- year: "numeric"
4373
4685
  }));
4374
- insert(_el$2, createComponent(Button, {
4375
- appearanceKey: "datePickerControlNextTrigger",
4376
- variant: "ghost",
4377
- onClick: (e) => {
4378
- e.stopPropagation();
4379
- handleNextMonth();
4380
- },
4381
- get disabled() {
4382
- return isNextDisabled();
4383
- },
4384
- "class": "nt-flex nt-justify-center nt-items-center nt-gap-0.5 nt-w-5 nt-h-5 nt-p-0 nt-rounded-md nt-bg-background nt-shadow-[0px_1px_2px_0px_rgba(10,13,20,0.03)]",
4385
- get children() {
4386
- return createComponent(IconRendererWrapper, {
4387
- iconKey: "arrowRight",
4388
- "class": nextIconClass,
4389
- get fallback() {
4390
- return createComponent(ArrowRight, {
4391
- "class": nextIconClass
4392
- });
4393
- }
4394
- });
4395
- }
4396
- }), null);
4397
- effect(() => className(_el$3, style("datePickerHeaderMonth", "nt-text-sm nt-font-medium nt-text-foreground-alpha-700")));
4398
4686
  return _el$2;
4399
4687
  })();
4400
4688
  };
4401
- var DatePickerGridCellTrigger = (props) => {
4402
- const [local, rest] = splitProps(props, ["class", "appearanceKey", "date"]);
4403
- const {
4404
- selectedDate,
4405
- viewMonth,
4406
- setSelectedDate,
4407
- currentDate,
4408
- maxDays
4409
- } = useDatePicker();
4410
- const {
4411
- t
4412
- } = useLocalization();
4413
- const isCurrentMonth = props.date.getMonth() === viewMonth().getMonth();
4414
- const isPastDate = () => {
4415
- const today = currentDate();
4416
- return props.date < today;
4417
- };
4418
- const isFutureDate = () => {
4419
- const maxDaysValue = maxDays();
4420
- if (maxDaysValue === 0) return false;
4421
- const maxDate = new Date(currentDate());
4422
- maxDate.setDate(maxDate.getDate() + maxDaysValue);
4423
- return props.date > maxDate;
4424
- };
4425
- const isDisabled = !isCurrentMonth || isPastDate() || isFutureDate();
4426
- const isExceedingLimit = () => {
4427
- return isCurrentMonth && isFutureDate();
4428
- };
4429
- const buttonElement = createComponent(Button, mergeProps({
4430
- appearanceKey: "datePickerCalendarDay__button",
4431
- variant: "ghost",
4432
- disabled: isDisabled,
4433
- onClick: (e) => {
4434
- e.stopPropagation();
4435
- setSelectedDate(local.date);
4689
+ var Markdown_default = Markdown;
4690
+ var _tmpl$61 = /* @__PURE__ */ template(`<span>`);
4691
+ var badgeVariants = cva(cn("nt-inline-flex nt-flex-row nt-gap-1 nt-items-center"), {
4692
+ variants: {
4693
+ variant: {
4694
+ secondary: "nt-bg-neutral-alpha-50"
4436
4695
  },
4437
- get ["class"]() {
4438
- var _a;
4439
- return cn("nt-size-8 nt-w-full nt-rounded-md nt-flex nt-items-center nt-justify-center", {
4440
- "nt-text-muted-foreground disabled:nt-opacity-20": !isCurrentMonth || isPastDate(),
4441
- "nt-text-foreground-alpha-700": isCurrentMonth && !isPastDate() && !isFutureDate()
4442
- }, {
4443
- "nt-bg-primary-alpha-300 hover:nt-bg-primary-alpha-400": ((_a = selectedDate()) == null ? void 0 : _a.toDateString()) === local.date.toDateString()
4444
- });
4445
- }
4446
- }, rest, {
4447
- get children() {
4448
- return local.date.getDate();
4696
+ size: {
4697
+ default: "nt-px-1 nt-py-px nt-rounded-sm nt-text-xs nt-px-1"
4449
4698
  }
4450
- }));
4451
- if (isExceedingLimit()) {
4452
- return createComponent(Tooltip.Root, {
4453
- get children() {
4454
- return [createComponent(Tooltip.Trigger, {
4455
- children: buttonElement
4456
- }), createComponent(Tooltip.Content, {
4457
- get children() {
4458
- return t("snooze.datePicker.exceedingLimitTooltip", {
4459
- days: maxDays()
4460
- });
4461
- }
4462
- })];
4463
- }
4464
- });
4699
+ },
4700
+ defaultVariants: {
4701
+ variant: "secondary",
4702
+ size: "default"
4465
4703
  }
4466
- return buttonElement;
4467
- };
4468
- var DatePickerCalendar = (props) => {
4704
+ });
4705
+ var Badge = (props) => {
4469
4706
  const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
4470
4707
  const style = useStyle();
4471
- const {
4472
- viewMonth
4473
- } = useDatePicker();
4474
- const getDaysInMonth = () => {
4475
- const year = viewMonth().getFullYear();
4476
- const month = viewMonth().getMonth();
4477
- const firstDay = new Date(year, month, 1);
4478
- const daysInMonth = new Date(year, month + 1, 0).getDate();
4479
- const startingDay = firstDay.getDay();
4480
- const days = [];
4481
- for (let i = 0; i < startingDay; i += 1) {
4482
- const prevMonthDay = new Date(year, month, -i);
4483
- days.unshift(prevMonthDay);
4484
- }
4485
- for (let i = 1; i <= daysInMonth; i += 1) {
4486
- days.push(new Date(year, month, i));
4487
- }
4488
- const remainingCells = 7 - days.length % 7;
4489
- if (remainingCells < 7) {
4490
- for (let i = 1; i <= remainingCells; i += 1) {
4491
- days.push(new Date(year, month + 1, i));
4492
- }
4493
- }
4494
- return days;
4495
- };
4496
4708
  return (() => {
4497
- var _el$8 = _tmpl$59();
4498
- _el$8.$$click = (e) => e.stopPropagation();
4499
- spread(_el$8, mergeProps({
4709
+ var _el$ = _tmpl$61();
4710
+ spread(_el$, mergeProps({
4711
+ get ["data-variant"]() {
4712
+ return props.variant;
4713
+ },
4714
+ get ["data-size"]() {
4715
+ return props.size;
4716
+ },
4500
4717
  get ["class"]() {
4501
- return style(local.appearanceKey || "datePickerCalendar", cn("nt-grid nt-grid-cols-7 nt-gap-1", local.class));
4718
+ return style(local.appearanceKey || "badge", cn(badgeVariants({
4719
+ variant: props.variant,
4720
+ size: props.size
4721
+ }), local.class));
4502
4722
  }
4503
- }, rest), false, true);
4504
- insert(_el$8, () => getDaysInMonth().map((date) => {
4505
- return createComponent(DatePickerGridCellTrigger, {
4506
- date
4507
- });
4508
- }));
4509
- return _el$8;
4723
+ }, rest), false, false);
4724
+ return _el$;
4510
4725
  })();
4511
4726
  };
4512
- delegateEvents(["click"]);
4513
- var _tmpl$60 = /* @__PURE__ */ template(`<input>`);
4727
+ var _tmpl$63 = /* @__PURE__ */ template(`<input>`);
4514
4728
  var inputVariants = cva(cn(`focus-visible:nt-outline-none focus-visible:nt-ring-2 focus-visible:nt-rounded-md focus-visible:nt-ring-ring focus-visible:nt-ring-offset-2`), {
4515
4729
  variants: {
4516
4730
  variant: {
@@ -4530,7 +4744,7 @@ var Input = (props) => {
4530
4744
  const [local, rest] = splitProps(props, ["class", "appearanceKey"]);
4531
4745
  const style = useStyle();
4532
4746
  return (() => {
4533
- var _el$ = _tmpl$60();
4747
+ var _el$ = _tmpl$63();
4534
4748
  spread(_el$, mergeProps({
4535
4749
  get ["data-variant"]() {
4536
4750
  return props.variant;
@@ -4550,7 +4764,7 @@ var Input = (props) => {
4550
4764
  };
4551
4765
 
4552
4766
  // src/ui/components/primitives/TimePicker.tsx
4553
- var _tmpl$61 = /* @__PURE__ */ template(`<div><span>:</span><select><option value=AM>AM</option><option value=PM>PM`);
4767
+ var _tmpl$64 = /* @__PURE__ */ template(`<div><span>:</span><select><option value=AM>AM</option><option value=PM>PM`);
4554
4768
  var TimePicker = (props) => {
4555
4769
  const [local, rest] = splitProps(props, ["value", "onChange", "class", "appearanceKey"]);
4556
4770
  const style = useStyle();
@@ -4590,7 +4804,7 @@ var TimePicker = (props) => {
4590
4804
  }
4591
4805
  };
4592
4806
  return (() => {
4593
- var _el$ = _tmpl$61(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
4807
+ var _el$ = _tmpl$64(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
4594
4808
  _el$.$$click = (e) => e.stopPropagation();
4595
4809
  spread(_el$, mergeProps({
4596
4810
  get ["class"]() {
@@ -4678,7 +4892,7 @@ var enforceMinMax = (el) => {
4678
4892
  delegateEvents(["click"]);
4679
4893
 
4680
4894
  // src/ui/components/Notification/SnoozeDateTimePicker.tsx
4681
- var _tmpl$62 = /* @__PURE__ */ template(`<div><div><p></p></div><div>`);
4895
+ var _tmpl$65 = /* @__PURE__ */ template(`<div><div><p></p></div><div>`);
4682
4896
  var fiveMinutesFromNow = () => {
4683
4897
  const futureTime = new Date(Date.now() + 5 * 60 * 1e3);
4684
4898
  const hours = futureTime.getHours();
@@ -4775,7 +4989,7 @@ var SnoozeDateTimePicker = (props) => {
4775
4989
  return t("snooze.datePicker.noDateSelectedTooltip");
4776
4990
  });
4777
4991
  return (() => {
4778
- var _el$ = _tmpl$62(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling;
4992
+ var _el$ = _tmpl$65(), _el$2 = _el$.firstChild, _el$3 = _el$2.firstChild, _el$4 = _el$2.nextSibling;
4779
4993
  _el$.$$click = (e) => e.stopPropagation();
4780
4994
  insert(_el$, createComponent(DatePicker, {
4781
4995
  onDateChange: (date) => setSelectedDate(date),
@@ -4860,7 +5074,7 @@ var SnoozeDateTimePicker = (props) => {
4860
5074
  delegateEvents(["click"]);
4861
5075
 
4862
5076
  // src/ui/components/Notification/NotificationActions.tsx
4863
- var _tmpl$63 = /* @__PURE__ */ template(`<div><span>`);
5077
+ var _tmpl$66 = /* @__PURE__ */ template(`<div><span>`);
4864
5078
  var _tmpl$217 = /* @__PURE__ */ template(`<span>`);
4865
5079
  var SNOOZE_PRESETS = [{
4866
5080
  key: "snooze.options.anHourFromNow",
@@ -4907,7 +5121,7 @@ var SnoozeDropdownItem = (props) => {
4907
5121
  iconKey: "clock"
4908
5122
  });
4909
5123
  const content = [(() => {
4910
- var _el$ = _tmpl$63(), _el$2 = _el$.firstChild;
5124
+ var _el$ = _tmpl$66(), _el$2 = _el$.firstChild;
4911
5125
  insert(_el$, createComponent(IconRendererWrapper, {
4912
5126
  iconKey: "clock",
4913
5127
  "class": snoozeItemIconClass,
@@ -5304,7 +5518,7 @@ var renderNotificationActions = (notification, status) => {
5304
5518
  };
5305
5519
 
5306
5520
  // src/ui/components/Notification/DefaultNotification.tsx
5307
- var _tmpl$64 = /* @__PURE__ */ template(`<img>`);
5521
+ var _tmpl$67 = /* @__PURE__ */ template(`<img>`);
5308
5522
  var _tmpl$218 = /* @__PURE__ */ template(`<div>`);
5309
5523
  var _tmpl$311 = /* @__PURE__ */ template(`<span>`);
5310
5524
  var _tmpl$410 = /* @__PURE__ */ template(`<a><div><div></div><div></div><div>`);
@@ -5396,7 +5610,7 @@ var DefaultNotification = (props) => {
5396
5610
  })();
5397
5611
  },
5398
5612
  get children() {
5399
- var _el$2 = _tmpl$64();
5613
+ var _el$2 = _tmpl$67();
5400
5614
  effect((_p$) => {
5401
5615
  var _v$ = style("notificationImage", "nt-size-8 nt-rounded-lg nt-object-cover nt-aspect-square"), _v$2 = props.notification.avatar;
5402
5616
  _v$ !== _p$.e && className(_el$2, _p$.e = _v$);
@@ -5647,14 +5861,30 @@ var NewMessagesCta = (props) => {
5647
5861
  }
5648
5862
  });
5649
5863
  };
5650
- var _tmpl$65 = /* @__PURE__ */ template(`<div>`);
5864
+ var _tmpl$68 = /* @__PURE__ */ template(`<svg xmlns=http://www.w3.org/2000/svg viewBox="0 0 16 16"fill=none><path fill=currentColor d="M12.1675 2.04492L11.5308 2.68164L11.1069 3.10645L12.9614 4.96094L12.7495 5.17383L10.894 3.31836L10.4692 3.74219L9.40967 4.80273L8.98486 5.22754L9.40967 5.65137L10.5747 6.81738L10.3628 7.03027L9.19775 5.86328L8.77295 5.43945L6.35889 7.85352L6.62744 8.26172C7.00257 8.83177 7.18147 9.50559 7.14111 10.1816L7.10986 10.4707C7.00656 11.1451 6.68818 11.7654 6.20557 12.2402L5.98877 12.4346C5.46027 12.8661 4.80786 13.1133 4.13135 13.1426L3.84033 13.1416C3.0614 13.1032 2.3236 12.7769 1.771 12.2266H1.77002C1.28602 11.744 0.974717 11.1186 0.877441 10.4473L0.849121 10.1572C0.814077 9.47419 1.00158 8.80051 1.38037 8.2373L1.55518 8.00293C2.04954 7.39769 2.75121 6.99767 3.52393 6.88086C4.29677 6.76406 5.0856 6.93884 5.73682 7.37109L6.146 7.64258L6.49268 7.29492L11.9546 1.83203L12.1675 2.04492ZM4.00537 7.10645C3.71967 7.11042 3.4363 7.15732 3.16553 7.24512L2.89893 7.34668C2.63748 7.46146 2.39532 7.61469 2.18018 7.80078L1.97803 7.99316C1.52375 8.46356 1.2476 9.0739 1.18994 9.71973L1.17822 9.99805C1.18392 10.6519 1.41417 11.2812 1.82568 11.7822L2.01318 11.9883C2.47551 12.4506 3.0805 12.7377 3.7251 12.8066L4.00342 12.8232C4.75062 12.8297 5.4708 12.5425 6.0083 12.0234L6.44775 11.5986L6.40186 11.5527C6.44537 11.4885 6.48869 11.4241 6.52686 11.3564L6.65479 11.1016C6.76956 10.84 6.84411 10.563 6.87646 10.2803L6.89404 9.99609C6.89801 9.71049 6.85899 9.42635 6.77881 9.15332L6.68506 8.88379C6.5776 8.61923 6.4315 8.3726 6.25146 8.15234L6.06006 7.94141C5.85804 7.73939 5.62719 7.56844 5.37549 7.43555L5.1167 7.31543C4.76396 7.17222 4.38604 7.10121 4.00537 7.10645Z"stroke=#525866 stroke-width=1.2>`);
5865
+ function Key(props) {
5866
+ return (() => {
5867
+ var _el$ = _tmpl$68();
5868
+ spread(_el$, props, true, true);
5869
+ return _el$;
5870
+ })();
5871
+ }
5872
+
5873
+ // src/ui/components/Notification/NotificationListSkeleton.tsx
5874
+ var _tmpl$69 = /* @__PURE__ */ template(`<div>`);
5875
+ var _tmpl$219 = /* @__PURE__ */ template(`<p data-localization=notifications.emptyNotice>`);
5876
+ var _tmpl$312 = /* @__PURE__ */ template(`<div><p>Trigger your notification. No setup needed.</p><p>Temporary &lt;Inbox />. All data will expire in 24 hours. Connect API key to persists messages, enable
5877
+ preferences, and connect email.</p><div><div>`);
5651
5878
  var NotificationListSkeleton = (props) => {
5652
5879
  const style = useStyle();
5653
5880
  const {
5654
5881
  t
5655
5882
  } = useLocalization();
5883
+ const {
5884
+ isKeyless
5885
+ } = useInboxContext();
5656
5886
  return (() => {
5657
- var _el$ = _tmpl$65();
5887
+ var _el$ = _tmpl$69();
5658
5888
  insert(_el$, createComponent(Motion.div, {
5659
5889
  get animate() {
5660
5890
  return {
@@ -5693,7 +5923,7 @@ var NotificationListSkeleton = (props) => {
5693
5923
  appearanceKey: "notificationList__skeletonAvatar",
5694
5924
  "class": "nt-w-8 nt-h-8 nt-rounded-full nt-bg-neutral-alpha-100"
5695
5925
  }), (() => {
5696
- var _el$3 = _tmpl$65();
5926
+ var _el$3 = _tmpl$69();
5697
5927
  insert(_el$3, createComponent(SkeletonText, {
5698
5928
  appearanceKey: "notificationList__skeletonText",
5699
5929
  "class": "nt-h-2 nt-w-1/3 nt-bg-neutral-alpha-50 nt-rounded"
@@ -5707,7 +5937,7 @@ var NotificationListSkeleton = (props) => {
5707
5937
  })()];
5708
5938
  }
5709
5939
  }))), (() => {
5710
- var _el$2 = _tmpl$65();
5940
+ var _el$2 = _tmpl$69();
5711
5941
  effect(() => className(_el$2, style("notificationListEmptyNoticeOverlay", "nt-absolute nt-size-full nt-z-10 nt-inset-0 nt-bg-gradient-to-b nt-from-transparent nt-to-background")));
5712
5942
  return _el$2;
5713
5943
  })()];
@@ -5739,9 +5969,12 @@ var NotificationListSkeleton = (props) => {
5739
5969
  get ["class"]() {
5740
5970
  return style("notificationListEmptyNotice", "nt-text-center");
5741
5971
  },
5742
- "data-localization": "notifications.emptyNotice",
5743
5972
  get children() {
5744
- return t("notifications.emptyNotice");
5973
+ return memo(() => !!isKeyless())() ? createComponent(KeylessEmptyState, {}) : (() => {
5974
+ var _el$4 = _tmpl$219();
5975
+ insert(_el$4, () => t("notifications.emptyNotice"));
5976
+ return _el$4;
5977
+ })();
5745
5978
  }
5746
5979
  });
5747
5980
  }
@@ -5750,10 +5983,69 @@ var NotificationListSkeleton = (props) => {
5750
5983
  return _el$;
5751
5984
  })();
5752
5985
  };
5986
+ function KeylessEmptyState() {
5987
+ const style = useStyle();
5988
+ const novu = useNovu();
5989
+ return (() => {
5990
+ var _el$5 = _tmpl$312(), _el$6 = _el$5.firstChild, _el$7 = _el$6.nextSibling, _el$8 = _el$7.nextSibling, _el$9 = _el$8.firstChild;
5991
+ insert(_el$8, createComponent(Button, {
5992
+ variant: "secondary",
5993
+ size: "sm",
5994
+ get ["class"]() {
5995
+ return style(
5996
+ "notificationListEmptyNotice",
5997
+ // eslint-disable-next-line max-len
5998
+ "nt-h-8 nt-px-4 nt-flex nt-items-center nt-justify-center nt-gap-2 nt-bg-white nt-border nt-border-neutral-alpha-100 nt-shadow-sm nt-text-[12px] nt-font-medium"
5999
+ );
6000
+ },
6001
+ onClick: () => window.open("https://go.novu.co/keyless?utm_campaign=empty-state-get_api_key", "_blank", "noopener noreferrer"),
6002
+ get children() {
6003
+ return [createComponent(Key, {
6004
+ get ["class"]() {
6005
+ return style("lockIcon", "nt-size-4 nt-mr-2");
6006
+ }
6007
+ }), "Get API key"];
6008
+ }
6009
+ }), _el$9);
6010
+ insert(_el$9, createComponent(Button, {
6011
+ variant: "default",
6012
+ size: "sm",
6013
+ get ["class"]() {
6014
+ return style(
6015
+ "notificationListEmptyNotice",
6016
+ // eslint-disable-next-line max-len
6017
+ "nt-h-8 nt-px-4 nt-flex nt-items-center nt-justify-center nt-gap-2 nt-bg-neutral-900 nt-text-white nt-shadow-sm nt-text-[12px] nt-font-medium"
6018
+ );
6019
+ },
6020
+ onClick: () => novu.notifications.triggerHelloWorldEvent(),
6021
+ get children() {
6022
+ return [createComponent(Bell, {
6023
+ get ["class"]() {
6024
+ return style("bellIcon", "nt-size-4 nt-mr-2");
6025
+ }
6026
+ }), "Send 'Hello World!'"];
6027
+ }
6028
+ }));
6029
+ effect((_p$) => {
6030
+ var _v$ = style("notificationListEmptyNotice", "nt--mt-[50px]"), _v$2 = style("strong", "nt-text-[#000000] nt-mb-1"), _v$3 = style("notificationListEmptyNotice", "nt-mb-4"), _v$4 = style("notificationListEmptyNotice", "nt-flex nt-gap-4 nt-justify-center");
6031
+ _v$ !== _p$.e && className(_el$5, _p$.e = _v$);
6032
+ _v$2 !== _p$.t && className(_el$6, _p$.t = _v$2);
6033
+ _v$3 !== _p$.a && className(_el$7, _p$.a = _v$3);
6034
+ _v$4 !== _p$.o && className(_el$8, _p$.o = _v$4);
6035
+ return _p$;
6036
+ }, {
6037
+ e: void 0,
6038
+ t: void 0,
6039
+ a: void 0,
6040
+ o: void 0
6041
+ });
6042
+ return _el$5;
6043
+ })();
6044
+ }
5753
6045
 
5754
6046
  // src/ui/components/Notification/NotificationList.tsx
5755
- var _tmpl$66 = /* @__PURE__ */ template(`<div>`);
5756
- var _tmpl$219 = /* @__PURE__ */ template(`<div><div>`);
6047
+ var _tmpl$70 = /* @__PURE__ */ template(`<div>`);
6048
+ var _tmpl$220 = /* @__PURE__ */ template(`<div><div>`);
5757
6049
  var NotificationList = (props) => {
5758
6050
  var _a, _b, _c, _d;
5759
6051
  const options = createMemo(() => __spreadProps(__spreadValues({}, props.filter), {
@@ -5797,7 +6089,7 @@ var NotificationList = (props) => {
5797
6089
  });
5798
6090
  });
5799
6091
  return (() => {
5800
- var _el$ = _tmpl$219(), _el$2 = _el$.firstChild;
6092
+ var _el$ = _tmpl$220(), _el$2 = _el$.firstChild;
5801
6093
  insert(_el$, createComponent(NewMessagesCta, {
5802
6094
  get count() {
5803
6095
  return count();
@@ -5854,7 +6146,7 @@ var NotificationList = (props) => {
5854
6146
  return !end();
5855
6147
  },
5856
6148
  get children() {
5857
- var _el$3 = _tmpl$66();
6149
+ var _el$3 = _tmpl$70();
5858
6150
  use(setEl, _el$3);
5859
6151
  insert(_el$3, createComponent(NotificationListSkeleton, {
5860
6152
  loading: true
@@ -5876,13 +6168,13 @@ var NotificationList = (props) => {
5876
6168
  return _el$;
5877
6169
  })();
5878
6170
  };
5879
- var _tmpl$67 = /* @__PURE__ */ template(`<span>`);
6171
+ var _tmpl$71 = /* @__PURE__ */ template(`<span>`);
5880
6172
  var getDisplayCount = (count) => count >= 100 ? "99+" : count;
5881
6173
  var InboxTabUnreadNotificationsCount = (props) => {
5882
6174
  const style = useStyle();
5883
6175
  const displayCount = createMemo(() => getDisplayCount(props.count));
5884
6176
  return (() => {
5885
- var _el$ = _tmpl$67();
6177
+ var _el$ = _tmpl$71();
5886
6178
  insert(_el$, displayCount);
5887
6179
  effect(() => className(_el$, style("notificationsTabsTriggerCount", "nt-rounded-full nt-bg-counter nt-px-[6px] nt-text-counter-foreground nt-text-sm")));
5888
6180
  return _el$;
@@ -5909,7 +6201,7 @@ var InboxTab = (props) => {
5909
6201
  },
5910
6202
  get children() {
5911
6203
  return [(() => {
5912
- var _el$2 = _tmpl$67();
6204
+ var _el$2 = _tmpl$71();
5913
6205
  insert(_el$2, () => props.label);
5914
6206
  effect(() => className(_el$2, style("notificationsTabsTriggerLabel", "nt-text-sm nt-font-medium")));
5915
6207
  return _el$2;
@@ -5949,7 +6241,7 @@ var InboxDropdownTab = (props) => {
5949
6241
  },
5950
6242
  get children() {
5951
6243
  return [(() => {
5952
- var _el$3 = _tmpl$67();
6244
+ var _el$3 = _tmpl$71();
5953
6245
  insert(_el$3, () => props.label);
5954
6246
  effect(() => className(_el$3, style("moreTabs__dropdownItemLabel", "nt-mr-auto")));
5955
6247
  return _el$3;
@@ -6150,7 +6442,7 @@ var InboxTabs = (props) => {
6150
6442
  };
6151
6443
 
6152
6444
  // src/ui/components/Inbox.tsx
6153
- var _tmpl$68 = /* @__PURE__ */ template(`<div>`);
6445
+ var _tmpl$73 = /* @__PURE__ */ template(`<div>`);
6154
6446
  var InboxPage = /* @__PURE__ */ function(InboxPage2) {
6155
6447
  InboxPage2["Notifications"] = "notifications";
6156
6448
  InboxPage2["Preferences"] = "preferences";
@@ -6175,7 +6467,7 @@ var InboxContent = (props) => {
6175
6467
  };
6176
6468
  });
6177
6469
  return (() => {
6178
- var _el$ = _tmpl$68();
6470
+ var _el$ = _tmpl$73();
6179
6471
  insert(_el$, createComponent(Switch$1, {
6180
6472
  get children() {
6181
6473
  return [createComponent(Match, {
@@ -6484,7 +6776,7 @@ var Renderer = (props) => {
6484
6776
  portalDivElement.style.height = "100%";
6485
6777
  }
6486
6778
  });
6487
- return createComponent(Portal$1, {
6779
+ return createComponent(Portal, {
6488
6780
  mount: node,
6489
6781
  ref: (el) => {
6490
6782
  portalDivElement = el;