@novu/js 3.6.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkRN7LHLHM_js = require('../chunk-RN7LHLHM.js');
4
- var chunkERC62PGI_js = require('../chunk-ERC62PGI.js');
3
+ var chunkFDWMGQIF_js = require('../chunk-FDWMGQIF.js');
4
+ var chunkQFZ5WJGI_js = require('../chunk-QFZ5WJGI.js');
5
5
  var chunk7B52C2XE_js = require('../chunk-7B52C2XE.js');
6
6
  var web = require('solid-js/web');
7
7
  var solidJs = require('solid-js');
@@ -17,7 +17,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
17
 
18
18
  var clsx__default = /*#__PURE__*/_interopDefault(clsx);
19
19
 
20
- // _hbh5yyuou:/home/runner/work/novu/novu/packages/js/src/ui/index.directcss
20
+ // _b6ep5vqi5:/home/runner/work/novu/novu/packages/js/src/ui/index.directcss
21
21
  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-12 .nv-notificationList{padding-bottom:3rem}.\\[\\&_\\.nv-notificationList\\]\\:nt-pb-8 .nv-notificationList{padding-bottom:2rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-12 .nv-preferencesContainer{padding-bottom:3rem}.\\[\\&_\\.nv-preferencesContainer\\]\\:nt-pb-8 .nv-preferencesContainer{padding-bottom:2rem}.\\[\\&_svg\\]\\:nt-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:nt-shrink-0 svg{flex-shrink:0}`;
22
22
 
23
23
  // src/ui/config/appearanceKeys.ts
@@ -700,6 +700,330 @@ var useStyle = () => {
700
700
  );
701
701
  return styleFuncMemo();
702
702
  };
703
+ var useTabsDropdown = ({ tabs }) => {
704
+ const [tabsList, setTabsList] = solidJs.createSignal();
705
+ const [visibleTabs, setVisibleTabs] = solidJs.createSignal([]);
706
+ const [dropdownTabs, setDropdownTabs] = solidJs.createSignal([]);
707
+ solidJs.onMount(() => {
708
+ const tabsListEl = tabsList();
709
+ if (!tabsListEl) return;
710
+ const tabsElements = [...tabsListEl.querySelectorAll('[role="tab"]')];
711
+ const observer = new IntersectionObserver(
712
+ (entries) => {
713
+ let visibleTabIds = entries.filter((entry) => entry.isIntersecting && entry.intersectionRatio === 1).map((entry) => entry.target.id);
714
+ if (tabsElements.length === visibleTabIds.length) {
715
+ setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
716
+ observer.disconnect();
717
+ return;
718
+ }
719
+ visibleTabIds = visibleTabIds.slice(0, -1);
720
+ setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
721
+ setDropdownTabs(tabs.filter((tab) => !visibleTabIds.includes(tab.label)));
722
+ observer.disconnect();
723
+ },
724
+ { root: tabsListEl }
725
+ );
726
+ for (const tabElement of tabsElements) {
727
+ observer.observe(tabElement);
728
+ }
729
+ });
730
+ return { dropdownTabs, setTabsList, visibleTabs };
731
+ };
732
+
733
+ // src/ui/helpers/browser.ts
734
+ function requestLock(id, cb) {
735
+ let isFulfilled = false;
736
+ let promiseResolve;
737
+ const promise = new Promise((resolve) => {
738
+ promiseResolve = resolve;
739
+ });
740
+ navigator.locks.request(id, () => {
741
+ if (!isFulfilled) {
742
+ cb(id);
743
+ }
744
+ return promise;
745
+ });
746
+ return () => {
747
+ isFulfilled = true;
748
+ promiseResolve();
749
+ };
750
+ }
751
+ var useBrowserTabsChannel = ({
752
+ channelName,
753
+ onMessage
754
+ }) => {
755
+ const [tabsChannel] = solidJs.createSignal(new BroadcastChannel(channelName));
756
+ const postMessage = (args) => {
757
+ const channel = tabsChannel();
758
+ channel.postMessage(args);
759
+ };
760
+ solidJs.onMount(() => {
761
+ const listener = (event) => {
762
+ onMessage(event.data);
763
+ };
764
+ const channel = tabsChannel();
765
+ channel.addEventListener("message", listener);
766
+ solidJs.onCleanup(() => {
767
+ channel.removeEventListener("message", listener);
768
+ });
769
+ });
770
+ return { postMessage };
771
+ };
772
+
773
+ // src/ui/helpers/useWebSocketEvent.ts
774
+ var useWebSocketEvent = ({
775
+ event: webSocketEvent,
776
+ eventHandler: onMessage
777
+ }) => {
778
+ const novu = useNovu();
779
+ const channelName = `nv_ws_connection:a=${novu.applicationIdentifier}:s=${novu.subscriberId}:e=${webSocketEvent}`;
780
+ const { postMessage } = useBrowserTabsChannel({ channelName, onMessage });
781
+ const updateReadCount = (data) => {
782
+ onMessage(data);
783
+ postMessage(data);
784
+ };
785
+ solidJs.onMount(() => {
786
+ let cleanup;
787
+ const resolveLock = requestLock(channelName, () => {
788
+ cleanup = novu.on(webSocketEvent, updateReadCount);
789
+ });
790
+ solidJs.onCleanup(() => {
791
+ if (cleanup) {
792
+ cleanup();
793
+ }
794
+ resolveLock();
795
+ });
796
+ });
797
+ };
798
+
799
+ // src/notifications/visibility-tracker.ts
800
+ var DEFAULT_OPTIONS = {
801
+ intersectionThreshold: 0.5,
802
+ visibilityDuration: 1e3,
803
+ batchDelay: 500,
804
+ maxBatchSize: 20,
805
+ enabled: true,
806
+ rootMargin: "0px"
807
+ };
808
+ var NotificationVisibilityTracker = class {
809
+ constructor(inboxService, options = {}) {
810
+ this.inboxService = inboxService;
811
+ /*
812
+ * Session-based tracking: notifications marked as seen in current session won't be marked again
813
+ * Only resets when tracker is destroyed (inbox closes)
814
+ */
815
+ this.seenNotifications = /* @__PURE__ */ new Set();
816
+ this.pendingNotifications = /* @__PURE__ */ new Map();
817
+ this.pendingBatch = /* @__PURE__ */ new Set();
818
+ this.batchTimer = null;
819
+ this.visibilityTimer = null;
820
+ this.observer = null;
821
+ this.elementToNotificationMap = /* @__PURE__ */ new WeakMap();
822
+ this.observedElements = /* @__PURE__ */ new Set();
823
+ this.options = chunk7B52C2XE_js.__spreadValues(chunk7B52C2XE_js.__spreadValues({}, DEFAULT_OPTIONS), options);
824
+ this.initializeObserver();
825
+ this.startVisibilityTimer();
826
+ }
827
+ initializeObserver() {
828
+ if (!this.options.enabled || typeof window === "undefined" || !("IntersectionObserver" in window)) {
829
+ return;
830
+ }
831
+ this.observer = new IntersectionObserver((entries) => this.handleIntersection(entries), {
832
+ threshold: this.options.intersectionThreshold,
833
+ rootMargin: this.options.rootMargin
834
+ });
835
+ }
836
+ startVisibilityTimer() {
837
+ if (!this.options.enabled || typeof window === "undefined") {
838
+ return;
839
+ }
840
+ this.checkAllElementsVisibility();
841
+ this.visibilityTimer = window.setInterval(() => {
842
+ this.checkAllElementsVisibility();
843
+ }, 1e3);
844
+ }
845
+ checkAllElementsVisibility() {
846
+ this.observedElements.forEach((element) => {
847
+ const notificationId = this.elementToNotificationMap.get(element);
848
+ if (!notificationId || this.seenNotifications.has(notificationId)) {
849
+ return;
850
+ }
851
+ const rect = element.getBoundingClientRect();
852
+ const isVisible = this.isElementVisible(rect);
853
+ if (isVisible) {
854
+ if (!this.pendingNotifications.has(notificationId)) {
855
+ this.pendingNotifications.set(notificationId, Date.now());
856
+ }
857
+ } else {
858
+ this.pendingNotifications.delete(notificationId);
859
+ }
860
+ });
861
+ this.processVisibleNotifications();
862
+ }
863
+ isElementVisible(rect) {
864
+ const viewportHeight = window.innerHeight || document.documentElement.clientHeight;
865
+ const viewportWidth = window.innerWidth || document.documentElement.clientWidth;
866
+ const verticalInView = rect.top < viewportHeight && rect.bottom > 0;
867
+ const horizontalInView = rect.left < viewportWidth && rect.right > 0;
868
+ if (!verticalInView || !horizontalInView) {
869
+ return false;
870
+ }
871
+ const visibleHeight = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);
872
+ const visibleWidth = Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0);
873
+ const visibleArea = visibleHeight * visibleWidth;
874
+ const totalArea = rect.height * rect.width;
875
+ return totalArea > 0 && visibleArea / totalArea >= this.options.intersectionThreshold;
876
+ }
877
+ handleIntersection(entries) {
878
+ const now = Date.now();
879
+ entries.forEach((entry) => {
880
+ const notificationId = this.elementToNotificationMap.get(entry.target);
881
+ if (!notificationId || this.seenNotifications.has(notificationId)) {
882
+ return;
883
+ }
884
+ if (entry.isIntersecting) {
885
+ this.pendingNotifications.set(notificationId, now);
886
+ } else {
887
+ this.pendingNotifications.delete(notificationId);
888
+ }
889
+ });
890
+ this.processVisibleNotifications();
891
+ }
892
+ processVisibleNotifications() {
893
+ const now = Date.now();
894
+ const notificationsToMark = [];
895
+ this.pendingNotifications.forEach((startTime, notificationId) => {
896
+ if (now - startTime >= this.options.visibilityDuration) {
897
+ notificationsToMark.push(notificationId);
898
+ this.seenNotifications.add(notificationId);
899
+ }
900
+ });
901
+ notificationsToMark.forEach((id) => {
902
+ this.pendingNotifications.delete(id);
903
+ });
904
+ if (notificationsToMark.length > 0) {
905
+ this.addToBatch(notificationsToMark);
906
+ }
907
+ }
908
+ addToBatch(notificationIds) {
909
+ notificationIds.forEach((id) => {
910
+ this.pendingBatch.add(id);
911
+ });
912
+ this.scheduleBatchProcessing();
913
+ }
914
+ scheduleBatchProcessing() {
915
+ if (this.batchTimer !== null) {
916
+ return;
917
+ }
918
+ this.batchTimer = window.setTimeout(() => {
919
+ this.processBatch();
920
+ }, this.options.batchDelay);
921
+ }
922
+ processBatch() {
923
+ return chunk7B52C2XE_js.__async(this, null, function* () {
924
+ this.batchTimer = null;
925
+ const notificationsToSend = Array.from(this.pendingBatch);
926
+ this.pendingBatch.clear();
927
+ if (notificationsToSend.length === 0) {
928
+ return;
929
+ }
930
+ const chunks = this.chunkArray(notificationsToSend, this.options.maxBatchSize);
931
+ try {
932
+ yield Promise.all(chunks.map((chunk) => this.inboxService.markAsSeen({ notificationIds: chunk })));
933
+ } catch (error) {
934
+ notificationsToSend.forEach((id) => {
935
+ this.seenNotifications.delete(id);
936
+ });
937
+ console.error("Failed to mark notifications as seen:", error);
938
+ }
939
+ });
940
+ }
941
+ chunkArray(array, size) {
942
+ const chunks = [];
943
+ for (let i = 0; i < array.length; i += size) {
944
+ chunks.push(array.slice(i, i + size));
945
+ }
946
+ return chunks;
947
+ }
948
+ observe(element, notificationId) {
949
+ if (!this.observer || this.seenNotifications.has(notificationId)) {
950
+ return;
951
+ }
952
+ this.elementToNotificationMap.set(element, notificationId);
953
+ this.observedElements.add(element);
954
+ this.observer.observe(element);
955
+ }
956
+ unobserve(element) {
957
+ if (!this.observer) {
958
+ return;
959
+ }
960
+ const notificationId = this.elementToNotificationMap.get(element);
961
+ if (notificationId) {
962
+ this.pendingNotifications.delete(notificationId);
963
+ this.pendingBatch.delete(notificationId);
964
+ this.elementToNotificationMap.delete(element);
965
+ this.observedElements.delete(element);
966
+ }
967
+ this.observer.unobserve(element);
968
+ }
969
+ destroy() {
970
+ if (this.observer) {
971
+ this.observer.disconnect();
972
+ this.observer = null;
973
+ }
974
+ if (this.batchTimer !== null) {
975
+ window.clearTimeout(this.batchTimer);
976
+ this.batchTimer = null;
977
+ }
978
+ if (this.visibilityTimer !== null) {
979
+ window.clearInterval(this.visibilityTimer);
980
+ this.visibilityTimer = null;
981
+ }
982
+ this.seenNotifications.clear();
983
+ this.pendingNotifications.clear();
984
+ this.pendingBatch.clear();
985
+ this.observedElements.clear();
986
+ }
987
+ // Force process any pending batches (useful for cleanup)
988
+ flush() {
989
+ return chunk7B52C2XE_js.__async(this, null, function* () {
990
+ if (this.batchTimer !== null) {
991
+ window.clearTimeout(this.batchTimer);
992
+ this.batchTimer = null;
993
+ yield this.processBatch();
994
+ }
995
+ });
996
+ }
997
+ };
998
+
999
+ // src/ui/helpers/useNotificationVisibility.ts
1000
+ function useNotificationVisibility() {
1001
+ const novu = useNovu();
1002
+ let tracker = null;
1003
+ solidJs.onMount(() => {
1004
+ tracker = new NotificationVisibilityTracker(novu.notifications.inboxService);
1005
+ solidJs.onCleanup(() => {
1006
+ if (tracker) {
1007
+ tracker.destroy();
1008
+ tracker = null;
1009
+ }
1010
+ });
1011
+ });
1012
+ const observeNotification = (element, notificationId) => {
1013
+ if (tracker) {
1014
+ tracker.observe(element, notificationId);
1015
+ }
1016
+ };
1017
+ const unobserveNotification = (element) => {
1018
+ if (tracker) {
1019
+ tracker.unobserve(element);
1020
+ }
1021
+ };
1022
+ return {
1023
+ observeNotification,
1024
+ unobserveNotification
1025
+ };
1026
+ }
703
1027
 
704
1028
  // src/ui/context/AppearanceContext.tsx
705
1029
  var AppearanceContext = solidJs.createContext(void 0);
@@ -820,72 +1144,6 @@ var useNovuEvent = ({
820
1144
  });
821
1145
  });
822
1146
  };
823
-
824
- // src/ui/helpers/browser.ts
825
- function requestLock(id, cb) {
826
- let isFulfilled = false;
827
- let promiseResolve;
828
- const promise = new Promise((resolve) => {
829
- promiseResolve = resolve;
830
- });
831
- navigator.locks.request(id, () => {
832
- if (!isFulfilled) {
833
- cb(id);
834
- }
835
- return promise;
836
- });
837
- return () => {
838
- isFulfilled = true;
839
- promiseResolve();
840
- };
841
- }
842
- var useBrowserTabsChannel = ({
843
- channelName,
844
- onMessage
845
- }) => {
846
- const [tabsChannel] = solidJs.createSignal(new BroadcastChannel(channelName));
847
- const postMessage = (args) => {
848
- const channel = tabsChannel();
849
- channel.postMessage(args);
850
- };
851
- solidJs.onMount(() => {
852
- const listener = (event) => {
853
- onMessage(event.data);
854
- };
855
- const channel = tabsChannel();
856
- channel.addEventListener("message", listener);
857
- solidJs.onCleanup(() => {
858
- channel.removeEventListener("message", listener);
859
- });
860
- });
861
- return { postMessage };
862
- };
863
-
864
- // src/ui/helpers/useWebSocketEvent.ts
865
- var useWebSocketEvent = ({
866
- event: webSocketEvent,
867
- eventHandler: onMessage
868
- }) => {
869
- const novu = useNovu();
870
- const channelName = `nv_ws_connection:a=${novu.applicationIdentifier}:s=${novu.subscriberId}:e=${webSocketEvent}`;
871
- const { postMessage } = useBrowserTabsChannel({ channelName, onMessage });
872
- const updateReadCount = (data) => {
873
- onMessage(data);
874
- postMessage(data);
875
- };
876
- solidJs.onMount(() => {
877
- let cleanup;
878
- const resolveLock = requestLock(channelName, () => {
879
- cleanup = novu.on(webSocketEvent, updateReadCount);
880
- });
881
- solidJs.onCleanup(() => {
882
- if (cleanup) {
883
- cleanup();
884
- }
885
- resolveLock();
886
- });
887
- });
888
- };
889
1147
  var LocalizationContext = solidJs.createContext(void 0);
890
1148
  var LocalizationProvider = (props) => {
891
1149
  const localization = solidJs.createMemo(() => {
@@ -1081,7 +1339,7 @@ var useInboxContext = () => {
1081
1339
  };
1082
1340
  var NovuContext = solidJs.createContext(void 0);
1083
1341
  function NovuProvider(props) {
1084
- const novu = solidJs.createMemo(() => props.novu || new chunkRN7LHLHM_js.Novu(props.options));
1342
+ const novu = solidJs.createMemo(() => props.novu || new chunkFDWMGQIF_js.Novu(props.options));
1085
1343
  return web.createComponent(NovuContext.Provider, {
1086
1344
  get value() {
1087
1345
  return novu();
@@ -1666,11 +1924,6 @@ var Bell2 = (props) => {
1666
1924
  }
1667
1925
  });
1668
1926
  };
1669
-
1670
- // src/utils/is-browser.ts
1671
- function isBrowser() {
1672
- return typeof window !== "undefined";
1673
- }
1674
1927
  var _tmpl$25 = /* @__PURE__ */ web.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>`);
1675
1928
  var ArrowUpRight = (props) => {
1676
1929
  return (() => {
@@ -2121,7 +2374,7 @@ var Footer = () => {
2121
2374
  });
2122
2375
  };
2123
2376
  function getCurrentDomain() {
2124
- if (isBrowser()) {
2377
+ if (chunkFDWMGQIF_js.isBrowser()) {
2125
2378
  return window.location.hostname;
2126
2379
  }
2127
2380
  return "";
@@ -2133,7 +2386,7 @@ function getCurlCommand() {
2133
2386
  return "";
2134
2387
  }
2135
2388
  const DEFAULT_BACKEND_URL = typeof window !== "undefined" && window.NOVU_LOCAL_BACKEND_URL || "https://api.novu.co";
2136
- return `curl -X POST ${DEFAULT_BACKEND_URL}/${chunkRN7LHLHM_js.DEFAULT_API_VERSION}/events/trigger -H 'Authorization: Keyless ${identifier}' -H 'Content-Type: application/json' -d '{
2389
+ return `curl -X POST ${DEFAULT_BACKEND_URL}/${chunkFDWMGQIF_js.DEFAULT_API_VERSION}/events/trigger -H 'Authorization: Keyless ${identifier}' -H 'Content-Type: application/json' -d '{
2137
2390
  "name": "hello-world",
2138
2391
  "to": {
2139
2392
  "subscriberId": "keyless-subscriber-id"
@@ -3292,7 +3545,7 @@ var useNotificationsInfiniteScroll = (props) => {
3292
3545
  );
3293
3546
  solidJs.onMount(() => {
3294
3547
  const listener = ({ data: data2 }) => {
3295
- if (!data2 || !chunkRN7LHLHM_js.isSameFilter(filter, data2.filter)) {
3548
+ if (!data2 || !chunkFDWMGQIF_js.isSameFilter(filter, data2.filter)) {
3296
3549
  return;
3297
3550
  }
3298
3551
  mutate({ data: data2.notifications, hasMore: data2.hasMore });
@@ -3302,7 +3555,7 @@ var useNotificationsInfiniteScroll = (props) => {
3302
3555
  });
3303
3556
  solidJs.createEffect(() => chunk7B52C2XE_js.__async(void 0, null, function* () {
3304
3557
  const newFilter = chunk7B52C2XE_js.__spreadValues({}, props.options());
3305
- if (chunkRN7LHLHM_js.isSameFilter(filter, newFilter)) {
3558
+ if (chunkFDWMGQIF_js.isSameFilter(filter, newFilter)) {
3306
3559
  return;
3307
3560
  }
3308
3561
  novu.notifications.clearCache();
@@ -4618,35 +4871,6 @@ var PreferencesHeader = (props) => {
4618
4871
  return _el$;
4619
4872
  })();
4620
4873
  };
4621
- var useTabsDropdown = ({ tabs }) => {
4622
- const [tabsList, setTabsList] = solidJs.createSignal();
4623
- const [visibleTabs, setVisibleTabs] = solidJs.createSignal([]);
4624
- const [dropdownTabs, setDropdownTabs] = solidJs.createSignal([]);
4625
- solidJs.onMount(() => {
4626
- const tabsListEl = tabsList();
4627
- if (!tabsListEl) return;
4628
- const tabsElements = [...tabsListEl.querySelectorAll('[role="tab"]')];
4629
- const observer = new IntersectionObserver(
4630
- (entries) => {
4631
- let visibleTabIds = entries.filter((entry) => entry.isIntersecting && entry.intersectionRatio === 1).map((entry) => entry.target.id);
4632
- if (tabsElements.length === visibleTabIds.length) {
4633
- setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
4634
- observer.disconnect();
4635
- return;
4636
- }
4637
- visibleTabIds = visibleTabIds.slice(0, -1);
4638
- setVisibleTabs(tabs.filter((tab) => visibleTabIds.includes(tab.label)));
4639
- setDropdownTabs(tabs.filter((tab) => !visibleTabIds.includes(tab.label)));
4640
- observer.disconnect();
4641
- },
4642
- { root: tabsListEl }
4643
- );
4644
- for (const tabElement of tabsElements) {
4645
- observer.observe(tabElement);
4646
- }
4647
- });
4648
- return { dropdownTabs, setTabsList, visibleTabs };
4649
- };
4650
4874
  var _tmpl$60 = /* @__PURE__ */ web.template(`<strong>`);
4651
4875
  var _tmpl$216 = /* @__PURE__ */ web.template(`<p>`);
4652
4876
  var Bold = (props) => {
@@ -4662,7 +4886,7 @@ var Text = (props) => props.children;
4662
4886
  var Markdown = (props) => {
4663
4887
  const [local, rest] = solidJs.splitProps(props, ["class", "children", "appearanceKey", "strongAppearanceKey"]);
4664
4888
  const style = useStyle();
4665
- const tokens = solidJs.createMemo(() => chunkERC62PGI_js.parseMarkdownIntoTokens(local.children));
4889
+ const tokens = solidJs.createMemo(() => chunkQFZ5WJGI_js.parseMarkdownIntoTokens(local.children));
4666
4890
  return (() => {
4667
4891
  var _el$2 = _tmpl$216();
4668
4892
  web.spread(_el$2, web.mergeProps({
@@ -6084,6 +6308,10 @@ var NotificationList = (props) => {
6084
6308
  setLimit
6085
6309
  } = useInboxContext();
6086
6310
  const ids = solidJs.createMemo(() => data().map((n) => n.id));
6311
+ const {
6312
+ observeNotification,
6313
+ unobserveNotification
6314
+ } = useNotificationVisibility();
6087
6315
  let notificationListElement;
6088
6316
  solidJs.createEffect(() => {
6089
6317
  setLimit(props.limit || DEFAULT_LIMIT);
@@ -6127,29 +6355,55 @@ var NotificationList = (props) => {
6127
6355
  },
6128
6356
  children: (_, index) => {
6129
6357
  const notification = () => data()[index()];
6130
- return web.createComponent(Notification, {
6131
- get notification() {
6132
- return notification();
6133
- },
6134
- get renderNotification() {
6135
- return props.renderNotification;
6136
- },
6137
- get renderSubject() {
6138
- return props.renderSubject;
6139
- },
6140
- get renderBody() {
6141
- return props.renderBody;
6142
- },
6143
- get onNotificationClick() {
6144
- return props.onNotificationClick;
6145
- },
6146
- get onPrimaryActionClick() {
6147
- return props.onPrimaryActionClick;
6148
- },
6149
- get onSecondaryActionClick() {
6150
- return props.onSecondaryActionClick;
6151
- }
6152
- });
6358
+ return (() => {
6359
+ var _el$4 = _tmpl$70();
6360
+ web.use((el) => {
6361
+ observeNotification(el, notification().id);
6362
+ const observer = new MutationObserver((mutations) => {
6363
+ mutations.forEach((mutation) => {
6364
+ mutation.removedNodes.forEach((node) => {
6365
+ if (node === el) {
6366
+ unobserveNotification(el);
6367
+ observer.disconnect();
6368
+ }
6369
+ });
6370
+ });
6371
+ });
6372
+ if (el.parentElement) {
6373
+ observer.observe(el.parentElement, {
6374
+ childList: true
6375
+ });
6376
+ }
6377
+ solidJs.onCleanup(() => {
6378
+ observer.disconnect();
6379
+ unobserveNotification(el);
6380
+ });
6381
+ }, _el$4);
6382
+ web.insert(_el$4, web.createComponent(Notification, {
6383
+ get notification() {
6384
+ return notification();
6385
+ },
6386
+ get renderNotification() {
6387
+ return props.renderNotification;
6388
+ },
6389
+ get renderSubject() {
6390
+ return props.renderSubject;
6391
+ },
6392
+ get renderBody() {
6393
+ return props.renderBody;
6394
+ },
6395
+ get onNotificationClick() {
6396
+ return props.onNotificationClick;
6397
+ },
6398
+ get onPrimaryActionClick() {
6399
+ return props.onPrimaryActionClick;
6400
+ },
6401
+ get onSecondaryActionClick() {
6402
+ return props.onSecondaryActionClick;
6403
+ }
6404
+ }));
6405
+ return _el$4;
6406
+ })();
6153
6407
  }
6154
6408
  }), web.createComponent(solidJs.Show, {
6155
6409
  get when() {