@nubisco/ui 5.30.0 → 5.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/{ActionGroup-BepLbLUB.js → ActionGroup-BTCKhtoQ.js} +1 -1
  2. package/dist/{ActionGroup-CPJcdC_x.cjs → ActionGroup-Bke1hEXW.cjs} +1 -1
  3. package/dist/{AiProvider-CkzXTd_m.js → AiProvider-CxXzqmaL.js} +1 -1
  4. package/dist/{AiProvider-ueSRHZ4d.cjs → AiProvider-DvvTdjjT.cjs} +1 -1
  5. package/dist/{BackToTop-Bep47dq4.cjs → BackToTop-D4D0gP59.cjs} +1 -1
  6. package/dist/{BackToTop-DwInsaIf.js → BackToTop-DppeK48m.js} +1 -1
  7. package/dist/{BlueprintControls-OPbXEOlE.js → BlueprintControls-BIhfK4EB.js} +1 -1
  8. package/dist/{BlueprintControls-DqzA7vVR.cjs → BlueprintControls-D7DPd3is.cjs} +1 -1
  9. package/dist/{Board-CoxZg27T.cjs → Board-DjY5EzND.cjs} +1 -1
  10. package/dist/{Board-CTjk-pTy.js → Board-cRf01JoK.js} +1 -1
  11. package/dist/{BriefingDestination-Md4A2sPI.cjs → BriefingDestination-CIK7YFt-.cjs} +1 -1
  12. package/dist/{BriefingDestination-D_IHVo71.js → BriefingDestination-Qij0wR7I.js} +1 -1
  13. package/dist/{Button-Cq9dEeHz.js → Button-BHlNXmBr.js} +1 -1
  14. package/dist/{Button-CbQyG-jg.cjs → Button-bQHEUhzc.cjs} +1 -1
  15. package/dist/Card-B4NIRb5n.cjs +1 -0
  16. package/dist/Card-C74PaCx8.js +82 -0
  17. package/dist/{Confirm-9xk3l58e.cjs → Confirm-BVFOXvHm.cjs} +1 -1
  18. package/dist/{Confirm-CpufclnJ.js → Confirm-BmUz2b8D.js} +2 -2
  19. package/dist/{CopyButton-rEPzSx4v.cjs → CopyButton-CAcov6fU.cjs} +1 -1
  20. package/dist/{CopyButton-DRpVCGXL.js → CopyButton-D0NGQFK0.js} +1 -1
  21. package/dist/{DataTable-OfThpfks.cjs → DataTable--thiOouM.cjs} +1 -1
  22. package/dist/{DataTable-7mjrUxT9.js → DataTable-x8lKfQRr.js} +1 -1
  23. package/dist/{FileUploader-CBymiita.cjs → FileUploader-BAvu2PvH.cjs} +1 -1
  24. package/dist/{FileUploader-C9UH-Z55.js → FileUploader-DESyfs_1.js} +2 -2
  25. package/dist/{Modal-Dffb6fJW.cjs → Modal-Cm0afrVz.cjs} +1 -1
  26. package/dist/{Modal-BrnJwgh5.js → Modal-Cy_ukbdF.js} +1 -1
  27. package/dist/{NotificationCenter-_v_X9zLG.cjs → NotificationCenter-bmTyLvkL.cjs} +1 -1
  28. package/dist/{NotificationCenter-DMIqGkxv.js → NotificationCenter-xEyb8Bjj.js} +1 -1
  29. package/dist/{Pagination-D5By9-m3.js → Pagination-CdYqrQbM.js} +1 -1
  30. package/dist/{Pagination-DX4XgQZM.cjs → Pagination-DjkCQOqi.cjs} +1 -1
  31. package/dist/{Shell-CxZZhH9l.cjs → Shell-BwfS4LOy.cjs} +1 -1
  32. package/dist/{Shell-qpPhxpqT.js → Shell-Div0nPH6.js} +1 -1
  33. package/dist/{TableOfContents-VZjSntV4.js → TableOfContents-BYtgdAbp.js} +1 -1
  34. package/dist/{TableOfContents-DigLeDNO.cjs → TableOfContents-DEc2LBKP.cjs} +1 -1
  35. package/dist/{Video-B-RuZL-9.cjs → Video-C1BIM2vN.cjs} +1 -1
  36. package/dist/{Video-C6KUqrBg.js → Video-CKnOZgqI.js} +1 -1
  37. package/dist/{Walkthrough-BO9mRfuC.cjs → Walkthrough-DNeWYW_3.cjs} +1 -1
  38. package/dist/{Walkthrough-BA-MrcaO.js → Walkthrough-s0pVivDn.js} +1 -1
  39. package/dist/all.cjs +1 -1
  40. package/dist/all.mjs +20 -20
  41. package/dist/components/ActionGroup.cjs +1 -1
  42. package/dist/components/ActionGroup.mjs +1 -1
  43. package/dist/components/AiProvider.cjs +1 -1
  44. package/dist/components/AiProvider.mjs +1 -1
  45. package/dist/components/BackToTop.cjs +1 -1
  46. package/dist/components/BackToTop.mjs +1 -1
  47. package/dist/components/BlueprintControls.cjs +1 -1
  48. package/dist/components/BlueprintControls.mjs +1 -1
  49. package/dist/components/Board.cjs +1 -1
  50. package/dist/components/Board.mjs +1 -1
  51. package/dist/components/BriefingDestination.cjs +1 -1
  52. package/dist/components/BriefingDestination.mjs +1 -1
  53. package/dist/components/Button.cjs +1 -1
  54. package/dist/components/Button.mjs +1 -1
  55. package/dist/components/Button.vue.d.ts.map +1 -1
  56. package/dist/components/Card.cjs +1 -1
  57. package/dist/components/Card.mjs +1 -1
  58. package/dist/components/Card.vue.d.ts.map +1 -1
  59. package/dist/components/Confirm.cjs +1 -1
  60. package/dist/components/Confirm.mjs +1 -1
  61. package/dist/components/CopyButton.cjs +1 -1
  62. package/dist/components/CopyButton.mjs +1 -1
  63. package/dist/components/DataTable.cjs +1 -1
  64. package/dist/components/DataTable.mjs +1 -1
  65. package/dist/components/FileUploader.cjs +1 -1
  66. package/dist/components/FileUploader.mjs +1 -1
  67. package/dist/components/FileUploader.vue.d.ts.map +1 -1
  68. package/dist/components/Modal.cjs +1 -1
  69. package/dist/components/Modal.mjs +1 -1
  70. package/dist/components/NotificationCenter.cjs +1 -1
  71. package/dist/components/NotificationCenter.mjs +1 -1
  72. package/dist/components/Pagination.cjs +1 -1
  73. package/dist/components/Pagination.mjs +1 -1
  74. package/dist/components/Shell.cjs +1 -1
  75. package/dist/components/Shell.mjs +1 -1
  76. package/dist/components/Shell.vue.d.ts.map +1 -1
  77. package/dist/components/TableOfContents.cjs +1 -1
  78. package/dist/components/TableOfContents.mjs +1 -1
  79. package/dist/components/Video.cjs +1 -1
  80. package/dist/components/Video.mjs +1 -1
  81. package/dist/components/Walkthrough.cjs +1 -1
  82. package/dist/components/Walkthrough.mjs +1 -1
  83. package/dist/components/labs/Spreadsheet.d.ts +8 -0
  84. package/dist/components/labs/Spreadsheet.vue.d.ts +1 -0
  85. package/dist/components/labs/Spreadsheet.vue.d.ts.map +1 -1
  86. package/dist/composables/useConfirm.composable.cjs +1 -1
  87. package/dist/composables/useConfirm.composable.mjs +2 -2
  88. package/dist/index.cjs +1 -1
  89. package/dist/index.mjs +20 -20
  90. package/dist/main-8_dE3Ta1.cjs +4 -0
  91. package/dist/{main-3k7sSIY5.js → main-B7CVGoiq.js} +510 -412
  92. package/dist/styles/Button.css +1 -1
  93. package/dist/styles/Card.css +1 -1
  94. package/dist/styles/FileUploader.css +1 -1
  95. package/dist/styles/Shell.css +1 -1
  96. package/dist/styles/main.css +1 -1
  97. package/dist/ui.css +5 -5
  98. package/package.json +1 -1
  99. package/src/styles/_reset.scss +6 -1
  100. package/src/styles/_theme-api.scss +21 -0
  101. package/src/styles/_theme.scss +43 -3
  102. package/src/styles/logic/_ink.scss +34 -0
  103. package/dist/Card-BqIF-svL.js +0 -78
  104. package/dist/Card-Xmv6oz9a.cjs +0 -1
  105. package/dist/main-DmyKNXAy.cjs +0 -4
@@ -190,11 +190,32 @@ $a11y-roles:
190
190
  @if map.keys($dark) != () or $dark != () {
191
191
  .dark[data-nb-theme='#{$id}'],
192
192
  .dark [data-nb-theme='#{$id}'] {
193
+ @include _ink-reset($dark);
193
194
  @include _emit($dark, $palette);
194
195
  }
195
196
  }
196
197
  }
197
198
 
199
+ /// The variants whose ink the dark theme lifts toward white.
200
+ $_ink-variants: primary, secondary, success, info, warning, danger;
201
+
202
+ /// Turns the dark ink lift off for every variant a theme gives its own dark
203
+ /// colour.
204
+ ///
205
+ /// The library's dark lift (`--nb-c-<variant>-ink-lift`, see
206
+ /// `logic/_ink.scss`) is sized for the library's own dark colours. A theme that
207
+ /// picks a dark colour has picked it for contrast already (every category accent
208
+ /// clears AA on all four dark layers), and lifting it further would only wash it
209
+ /// out. Emitted before the theme's own keys, so a theme that does want a lift
210
+ /// can still pass `primary-ink-lift` and win.
211
+ @mixin _ink-reset($tokens) {
212
+ @each $variant in $_ink-variants {
213
+ @if map.has-key($tokens, $variant) {
214
+ --nb-c-#{$variant}-ink-lift: 0%;
215
+ }
216
+ }
217
+ }
218
+
198
219
  /// Whether a string is safe to use as a theme id.
199
220
  @function _valid-id($id) {
200
221
  $allowed: 'abcdefghijklmnopqrstuvwxyz0123456789-';
@@ -636,9 +636,11 @@
636
636
  --nb-shell-menu-color: var(--nb-shell-chrome-color);
637
637
  --nb-shell-menu-border: var(--nb-shell-chrome-border);
638
638
  --nb-shell-body-bg: var(--nb-shell-chrome-bg);
639
- // The page ground behind the main region. Kept separate from the chrome:
640
- // a branded topbar usually sits above an unbranded page.
641
- --nb-shell-main-bg: var(--nb-c-surface);
639
+ // --nb-shell-main-bg, the page ground behind the main region, is
640
+ // deliberately NOT declared here. Its default is the main region's own
641
+ // layer-0 surface, and that can only be resolved on the element (see
642
+ // `.nb-shell__main` in Shell.vue): declared at :root it froze to layer 1.
643
+ // A product still overrides it on :root as before, to any value.
642
644
  --nb-shell-inspector-width: calc(var(--nb-base-unit) * 70); // 560px
643
645
  --nb-shell-inspector-expanded-width: 50vw;
644
646
  // Ceiling for a visible inspector, whatever set its width (a size preset,
@@ -885,6 +887,44 @@
885
887
  --nb-c-secondary-hover: #{colors.get-color('nouveau-gray', 650)};
886
888
  --nb-c-secondary-active: #{colors.get-color('nouveau-gray', 600)};
887
889
 
890
+ // Readable foregrounds for the fills this block moves. A colour and its
891
+ // `-a11y` travel together (the rule `_theme-api.scss` enforces for named
892
+ // themes), and here they had come apart: the dark primary hover and
893
+ // active, info and danger kept the white chosen for their LIGHT step and
894
+ // measured 3.01 to 3.82:1. color-contrast() picks whichever of white and
895
+ // near-black reads better, exactly as the light ramp does.
896
+ --nb-c-primary-hover-a11y: #{colors.color-contrast(
897
+ colors.get-color('grape-hyacinth', 350)
898
+ )};
899
+ --nb-c-primary-active-a11y: #{colors.color-contrast(
900
+ colors.get-color('grape-hyacinth', 300)
901
+ )};
902
+ --nb-c-success-a11y: #{colors.color-contrast(
903
+ colors.get-color('emerald-reflection', 500)
904
+ )};
905
+ --nb-c-info-a11y: #{colors.color-contrast(
906
+ colors.get-color('the-blues-brothers', 400)
907
+ )};
908
+ --nb-c-warning-a11y: #{colors.color-contrast(
909
+ colors.get-color('phoenix-flames', 400)
910
+ )};
911
+ --nb-c-danger-a11y: #{colors.color-contrast(
912
+ colors.get-color('chicken-comb', 400)
913
+ )};
914
+
915
+ // Ink lift: how far each semantic colour moves toward white when it is
916
+ // drawn as text or an outline straight onto a dark layer (an outlined
917
+ // button, a drop-zone label). See `logic/_ink.scss`. Each value is the
918
+ // smallest whole lift that clears WCAG AA on all four dark layers and on
919
+ // the 14% pressed wash, plus two points of margin. The light theme
920
+ // declares none, so ink there is the colour itself.
921
+ --nb-c-primary-ink-lift: 48%;
922
+ --nb-c-secondary-ink-lift: 56%;
923
+ --nb-c-success-ink-lift: 21%;
924
+ --nb-c-info-ink-lift: 43%;
925
+ --nb-c-warning-ink-lift: 6%;
926
+ --nb-c-danger-ink-lift: 46%;
927
+
888
928
  // Component states
889
929
  --nb-c-component-inactive: #{colors.get-color('nouveau-gray', 500)};
890
930
  --nb-c-component-active: #{colors.get-color('nouveau-gray', 400)};
@@ -0,0 +1,34 @@
1
+ /// A semantic colour drawn as ink: text, an outline or an icon set directly on a
2
+ /// surface, with no fill of its own behind it.
3
+ ///
4
+ /// The semantic colours (`--nb-c-primary`, `--nb-c-secondary`, ...) are picked
5
+ /// first as FILLS, with their `-a11y` foreground on top. Drawn straight onto a
6
+ /// surface they are a different pair, and in the dark theme several of them do
7
+ /// not survive it: the dark secondary is a mid grey chosen to carry white text,
8
+ /// and as the label of an outlined button it measured 1.21:1 to 2.15:1 against
9
+ /// the four dark layers.
10
+ ///
11
+ /// So ink lifts the colour toward white by `--nb-c-<variant>-ink-lift`. The
12
+ /// light theme does not declare the lift, so the fallback of 0% returns the
13
+ /// colour unchanged and light mode is pixel-identical. The dark theme declares
14
+ /// one per variant, each the smallest lift that clears WCAG AA (4.5:1) on all
15
+ /// four dark layers and on the 14% wash an outlined button paints when pressed.
16
+ /// `tests/inkContrast.test.ts` measures it.
17
+ ///
18
+ /// The mix is resolved on the element that paints, not at `:root`, so a product
19
+ /// that re-points `--nb-c-primary` (on `:root` or on a themed subtree) gets ITS
20
+ /// primary lifted, never the library's. A named theme that sets its own dark
21
+ /// colour for a variant resets that variant's lift to 0%, because it chose that
22
+ /// colour for contrast already (see `theme()` in `_theme-api.scss`).
23
+ ///
24
+ /// @param {String} $variant - primary, secondary, success, info, warning or danger
25
+ /// @return {String} a `color-mix()` expression
26
+ /// @access public
27
+ /// @group @nubisco/colors
28
+ @function ink($variant) {
29
+ @return color-mix(
30
+ in srgb,
31
+ var(--nb-c-#{$variant}),
32
+ var(--nb-c-white) var(--nb-c-#{$variant}-ink-lift, 0%)
33
+ );
34
+ }
@@ -1,78 +0,0 @@
1
- import { t as e } from "./_plugin-vue_export-helper-O4QQSku4.js";
2
- import { t } from "./Icon-rREAqsu0.js";
3
- import { computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, mergeProps as u, openBlock as d, renderSlot as f, resolveDynamicComponent as p, toDisplayString as m, withCtx as h } from "vue";
4
- //#region src/components/Card.vue?vue&type=script&setup=true&lang.ts
5
- var g = {
6
- key: 0,
7
- class: "nb-card__icon"
8
- }, _ = { class: "nb-card__head" }, v = { class: "nb-card__title" }, y = {
9
- key: 0,
10
- class: "nb-card__subtitle"
11
- }, b = {
12
- key: 1,
13
- class: "nb-card__body"
14
- }, x = {
15
- key: 2,
16
- class: "nb-card__footer"
17
- }, S = /* @__PURE__ */ e(/* @__PURE__ */ l({
18
- __name: "Card",
19
- props: {
20
- title: { default: "" },
21
- subtitle: { default: "" },
22
- icon: { default: void 0 },
23
- href: { default: void 0 },
24
- target: { default: void 0 },
25
- clickable: {
26
- type: Boolean,
27
- default: !1
28
- },
29
- selected: {
30
- type: Boolean,
31
- default: !1
32
- },
33
- disabled: {
34
- type: Boolean,
35
- default: !1
36
- }
37
- },
38
- emits: ["select"],
39
- setup(e, { emit: l }) {
40
- let S = e, C = l, w = n(() => !!S.href && !S.disabled), T = n(() => (w.value || S.clickable) && !S.disabled), E = n(() => w.value ? "a" : (S.clickable, "div")), D = n(() => w.value ? {
41
- href: S.href,
42
- target: S.target,
43
- rel: S.target === "_blank" ? "noopener" : void 0
44
- } : S.clickable && !S.disabled ? {
45
- role: "button",
46
- tabindex: 0,
47
- "aria-pressed": S.selected ? !0 : void 0
48
- } : {});
49
- function O() {
50
- !S.clickable || S.disabled || w.value || C("select");
51
- }
52
- function k(e) {
53
- !S.clickable || S.disabled || w.value || e.key !== "Enter" && e.key !== " " || (e.preventDefault(), C("select"));
54
- }
55
- return (n, l) => (d(), r(p(E.value), u({ class: ["nb-card", {
56
- "nb-card--interactive": T.value,
57
- "nb-card--selected": e.selected,
58
- "nb-card--disabled": e.disabled
59
- }] }, D.value, {
60
- onClick: O,
61
- onKeydown: k
62
- }), {
63
- default: h(() => [
64
- e.icon || n.$slots.icon ? (d(), a("div", g, [f(n.$slots, "icon", {}, () => [c(t, {
65
- name: e.icon,
66
- size: 20,
67
- "aria-hidden": "true"
68
- }, null, 8, ["name"])], !0)])) : i("", !0),
69
- o("div", _, [o("span", v, [f(n.$slots, "title", {}, () => [s(m(e.title), 1)], !0)]), e.subtitle || n.$slots.subtitle ? (d(), a("span", y, [f(n.$slots, "subtitle", {}, () => [s(m(e.subtitle), 1)], !0)])) : i("", !0)]),
70
- n.$slots.default ? (d(), a("div", b, [f(n.$slots, "default", {}, void 0, !0)])) : i("", !0),
71
- n.$slots.footer ? (d(), a("div", x, [f(n.$slots, "footer", {}, void 0, !0)])) : i("", !0)
72
- ]),
73
- _: 3
74
- }, 16, ["class"]));
75
- }
76
- }), [["__scopeId", "data-v-2a7f84df"]]);
77
- //#endregion
78
- export { S as t };
@@ -1 +0,0 @@
1
- require(`./chunk-D-qHiVGv.cjs`);const e=require(`./_plugin-vue_export-helper-tagjRzOz.cjs`),t=require(`./Icon-C8R_r_In.cjs`);let n=require(`vue`);var r={key:0,class:`nb-card__icon`},i={class:`nb-card__head`},a={class:`nb-card__title`},o={key:0,class:`nb-card__subtitle`},s={key:1,class:`nb-card__body`},c={key:2,class:`nb-card__footer`},l=(0,n.defineComponent)({__name:`Card`,props:{title:{default:``},subtitle:{default:``},icon:{default:void 0},href:{default:void 0},target:{default:void 0},clickable:{type:Boolean,default:!1},selected:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:[`select`],setup(e,{emit:l}){let u=e,d=l,f=(0,n.computed)(()=>!!u.href&&!u.disabled),p=(0,n.computed)(()=>(f.value||u.clickable)&&!u.disabled),m=(0,n.computed)(()=>f.value?`a`:(u.clickable,`div`)),h=(0,n.computed)(()=>f.value?{href:u.href,target:u.target,rel:u.target===`_blank`?`noopener`:void 0}:u.clickable&&!u.disabled?{role:`button`,tabindex:0,"aria-pressed":u.selected?!0:void 0}:{});function g(){!u.clickable||u.disabled||f.value||d(`select`)}function _(e){!u.clickable||u.disabled||f.value||e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),d(`select`))}return(l,u)=>((0,n.openBlock)(),(0,n.createBlock)((0,n.resolveDynamicComponent)(m.value),(0,n.mergeProps)({class:[`nb-card`,{"nb-card--interactive":p.value,"nb-card--selected":e.selected,"nb-card--disabled":e.disabled}]},h.value,{onClick:g,onKeydown:_}),{default:(0,n.withCtx)(()=>[e.icon||l.$slots.icon?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,r,[(0,n.renderSlot)(l.$slots,`icon`,{},()=>[(0,n.createVNode)(t.t,{name:e.icon,size:20,"aria-hidden":`true`},null,8,[`name`])],!0)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,i,[(0,n.createElementVNode)(`span`,a,[(0,n.renderSlot)(l.$slots,`title`,{},()=>[(0,n.createTextVNode)((0,n.toDisplayString)(e.title),1)],!0)]),e.subtitle||l.$slots.subtitle?((0,n.openBlock)(),(0,n.createElementBlock)(`span`,o,[(0,n.renderSlot)(l.$slots,`subtitle`,{},()=>[(0,n.createTextVNode)((0,n.toDisplayString)(e.subtitle),1)],!0)])):(0,n.createCommentVNode)(``,!0)]),l.$slots.default?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,s,[(0,n.renderSlot)(l.$slots,`default`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0),l.$slots.footer?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,c,[(0,n.renderSlot)(l.$slots,`footer`,{},void 0,!0)])):(0,n.createCommentVNode)(``,!0)]),_:3},16,[`class`]))}}),u=e.t(l,[[`__scopeId`,`data-v-2a7f84df`]]);Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
@@ -1,4 +0,0 @@
1
- const e=require(`./chunk-D-qHiVGv.cjs`),t=require(`./composables/useReducedMotion.composable.cjs`),n=require(`./utils/tourTarget.helper.cjs`),r=require(`./composables/useCommandPalette.composable.cjs`),i=require(`./_plugin-vue_export-helper-tagjRzOz.cjs`);let a=require(`vue`);var o=e.t({default:()=>s});function s(e){e.directive(`nb-context-menu`,{mounted(e,t){let n=e=>{e.preventDefault(),typeof t.value==`function`&&t.value({x:e.clientX,y:e.clientY})};e.__nbContextMenuHandler__=n,e.addEventListener(`contextmenu`,n)},updated(e,t){e.__nbContextMenuHandler__&&e.removeEventListener(`contextmenu`,e.__nbContextMenuHandler__);let n=e=>{e.preventDefault(),typeof t.value==`function`&&t.value({x:e.clientX,y:e.clientY})};e.__nbContextMenuHandler__=n,e.addEventListener(`contextmenu`,n)},unmounted(e){e.__nbContextMenuHandler__&&(e.removeEventListener(`contextmenu`,e.__nbContextMenuHandler__),delete e.__nbContextMenuHandler__)}})}var c=e.t({devWarn:()=>C,renderTooltipContent:()=>T}),l=new Set([`span`,`div`,`p`,`b`,`strong`,`em`,`i`,`u`,`s`,`small`,`code`,`kbd`,`br`,`ul`,`ol`,`li`]),u=new Set([`br`]),d=new Set([`class`,`style`,`dir`,`lang`]),f=e=>e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`),p=new Set(`color.background-color.font-family.font-size.font-style.font-variant.font-weight.letter-spacing.line-height.text-align.text-decoration.text-transform.white-space.word-break.overflow-wrap.opacity.display.flex-direction.align-items.justify-content.gap.margin.margin-top.margin-right.margin-bottom.margin-left.padding.padding-top.padding-right.padding-bottom.padding-left.max-width.min-width.border-radius`.split(`.`)),m=/url\(|image-set\(|expression\(|javascript:|@import|\\/i,h=/^[A-Za-z_-][A-Za-z0-9_-]*$/,g=e=>e.split(`;`).map(e=>{let t=e.indexOf(`:`);if(t<0)return``;let n=e.slice(0,t).trim().toLowerCase(),r=e.slice(t+1).trim();return!n||!r?``:p.has(n)?m.test(r)?(C(`style-value:${n}`,`The value of "${n}" was dropped: tooltip content may not load a resource or call a CSS function that does.`),``):`${n}: ${r}`:(C(`style:${n}`,`"${n}" is not an allowed tooltip content style property and was dropped.`),``)}).filter(Boolean).join(`; `),_=e=>e.split(/\s+/).filter(e=>e?h.test(e)?!0:(C(`class:${e}`,`"${e}" is not a valid class token for tooltip content and was dropped.`),!1):!1).join(` `),v=(e,t)=>e===`style`?g(t):e===`class`?_(t):t,ee=new Set([`b`,`strong`,`em`,`i`,`u`,`s`,`small`,`code`,`kbd`,`br`,`p`]),y={"<":`&lt;`,">":`&gt;`,'"':`&quot;`,"'":`&#039;`},b=e=>e.replace(/&(?!(?:[a-zA-Z][a-zA-Z0-9]{1,10}|#\d{1,7}|#[xX][0-9a-fA-F]{1,6});)/g,`&amp;`).replace(/[<>"']/g,e=>y[e]),x=e=>e.split(/(<[^<>]*>)/g).map(e=>{if(e.startsWith(`<`)&&e.endsWith(`>`)){let t=/^<\s*(\/?)\s*([a-zA-Z][a-zA-Z0-9]*)\s*\/?\s*>$/.exec(e),n=t?.[2]?.toLowerCase();return n&&ee.has(n)?`<${t[1]}${n}>`:(n&&C(`string-tag:${n}`,`<${n}> is not allowed in a tooltip string and was shown as text. Use the structured content form for anything richer.`),b(e))}return b(e).replace(/\n/g,`<br>`)}).join(``),S=new Set,C=(e,t)=>{typeof process<`u`&&process.env.NODE_ENV===`production`||S.has(e)||(S.add(e),console.warn(`[nb-tooltip] ${t}`))},w=e=>{if(Array.isArray(e))return e.map(e=>w(e)).join(``);if(!e||typeof e!=`object`||!e.component)return``;let{component:t,props:n={},children:r,content:i}=e,a=r===void 0?i:r,o=Array.isArray(a)?w(a):a===void 0?``:x(String(a)),s=String(t).toLowerCase();if(!l.has(s))return C(`tag:${s}`,`<${s}> is not allowed in tooltip content and was dropped. Allowed tags: ${[...l].join(`, `)}.`),o;let c=Object.entries(n).filter(([e])=>d.has(e)?!0:(C(`prop:${e}`,`"${e}" is not an allowed tooltip content prop and was dropped. Allowed props: ${[...d].join(`, `)}.`),!1)).map(([e,t])=>[e,v(e,String(t))]).filter(([,e])=>e!==``).map(([e,t])=>`${e}="${f(t)}"`).join(` `),p=`<${s}${c?` ${c}`:``}>`;return u.has(s)?p:`${p}${o}</${s}>`},T=e=>e?typeof e==`string`?x(e):Array.isArray(e)?w(e):``:``,E=e.t({default:()=>Ue,dismissAllTooltips:()=>tt}),D=e=>e.status??e.flavor??`default`,O=e=>e.chipClass??e.classExtra,k=new Set,te=0,ne=()=>`nb-tooltip-${++te}`,re=900,A=4e3,ie=500,j=0,M=(e,t)=>{if(!e)return!1;let n=Date.now()-e;return n>=0&&n<t},N=!1,P=()=>{if(N||typeof document>`u`)return;N=!0;let e=e=>{if(k.size===0)return;let t=e?.target;t instanceof Element&&t.closest(`.nb-tooltip`)||et(`dismiss`)};document.addEventListener(`pointerdown`,()=>{j=Date.now()},!0),document.addEventListener(`dragstart`,()=>e(),!0),document.addEventListener(`keydown`,t=>{t.key===`Escape`&&e()},!0),document.addEventListener(`pointerdown`,e,!0),window.addEventListener(`blur`,e),document.addEventListener(`mouseleave`,e)},ae=200,oe=1e3,se=2,ce=e=>{let t=e.tooltipElement;if(!t)return!1;if(t.__hovered__)return!0;try{return t.isConnected&&t.matches(`:hover`)}catch{return!1}},F=e=>{if(!e.isConnected)return!1;if(ce(e)||e.__trigger__===`focus`&&e.contains(document.activeElement)||e.__trigger__===`touch`&&M(e.__lastTouchAt__,A))return!0;try{return e.matches(`:hover`)}catch{return!0}},I=e=>{clearTimeout(e.__watchdogTimer__),e.__watchdogTimer__=void 0,e.__watchdogMisses__=0},le=e=>{I(e);let t=()=>{if(!e.__chips__?.size){I(e);return}if(F(e))e.__watchdogMisses__=0;else{if(e.__watchdogMisses__=(e.__watchdogMisses__??0)+1,!e.isConnected){X(e,!0,`program`);return}if(e.__watchdogMisses__>=se){Je(e,`dismiss`);return}}e.__watchdogTimer__=setTimeout(t,oe)};e.__watchdogTimer__=setTimeout(t,oe)},L=new Set,R=null,ue=e=>`${Math.round(e.top)}:${Math.round(e.left)}:${Math.round(e.width)}:${Math.round(e.height)}`,de=e=>{if(typeof getComputedStyle!=`function`)return!1;let t;try{t=getComputedStyle(e)}catch{return!1}let n=`${t.overflow} ${t.overflowX} ${t.overflowY}`;return/hidden|scroll|auto|clip|overlay/.test(n)},fe=e=>{let t=[],n=e.parentElement;for(;n&&n!==document.body&&n!==document.documentElement;)de(n)&&t.push(n),n=n.parentElement;return t},z=e=>!(e.width===0&&e.height===0&&e.top===0&&e.left===0),B=(e,t)=>{if(!e.isConnected)return!1;if(!z(t))return!0;if(t.width===0||t.height===0||!(t.bottom>0&&t.right>0&&t.top<window.innerHeight&&t.left<window.innerWidth))return!1;for(let n of e.__clippers__??[]){if(!n.isConnected)continue;let e=n.getBoundingClientRect();if(z(e)&&(t.bottom<=e.top||t.top>=e.bottom||t.right<=e.left||t.left>=e.right))return!1}return!0},V=e=>{let t=e.tooltipElement;if(!t||!e.__chips__?.size){L.delete(e);return}let n=e.getBoundingClientRect();if(!B(e,n)){e.__offscreenReported__||(e.__offscreenReported__=!0,Je(e,`dismiss`));return}e.__offscreenReported__=!1,e.__lastRect__=ue(n),e.__side__!==`cursor`&&Z(e,t,e.__requestedSide__??e.__side__)},H=()=>{G();for(let e of Array.from(L))V(e)},pe=100,me=320,U=0,W=0,G=()=>{W=Date.now()+me},K=()=>{if(L.size===0){R=null;return}let e=Date.now();if(e>=W&&e-U<pe){R=requestAnimationFrame(K);return}U=e;for(let e of Array.from(L)){if(!e.tooltipElement){L.delete(e);continue}ue(e.getBoundingClientRect())!==e.__lastRect__&&(G(),V(e))}R=requestAnimationFrame(K)},q=!1,he=e=>{L.add(e),e.__lastRect__=void 0,e.__clippers__=fe(e),!(typeof window>`u`)&&(q||(q=!0,document.addEventListener(`scroll`,H,{capture:!0,passive:!0}),window.addEventListener(`resize`,H,{passive:!0})),R===null&&typeof requestAnimationFrame==`function`&&(R=requestAnimationFrame(K)))},J=e=>{L.delete(e),e.__lastRect__=void 0,e.__clippers__=void 0,!(L.size>0||typeof window>`u`)&&(q&&(q=!1,document.removeEventListener(`scroll`,H,{capture:!0}),window.removeEventListener(`resize`,H)),R!==null&&typeof cancelAnimationFrame==`function`&&(cancelAnimationFrame(R),R=null))},ge=(e,n,r)=>{if(e.__chips__?.delete(n),clearTimeout(n.__removeTimer__),n.__removeTimer__=void 0,r||t.prefersReducedMotion()){n.remove();return}n.style.animation=`tooltipDisappear ${ae}ms ease-in-out forwards`,n.__removeTimer__=setTimeout(()=>{n.__removeTimer__=void 0,n.remove()},ae)},_e=(e,t)=>{if(J(e),e.__trigger__=void 0,e.__side__=void 0,e.__chips__)for(let n of Array.from(e.__chips__))ge(e,n,t);e.tooltipElement=void 0,e.__lastContent__=void 0,I(e)},ve=`a[href], button, input, select, textarea, summary, [tabindex]`,ye=`data-nb-tooltip-anchor`,be=(e,t)=>{let n=t.target;if(!(n instanceof Element)||n===e)return!0;let r=n.closest(`[${ye}]`);return r===null||r===e},xe=`button, a[href], [role="button"], [role="tab"], [role="menuitem"], input, select, textarea, label`,Se=e=>{let t=e.closest(xe);return!t||t.disabled===!0?!1:t.getAttribute(`aria-disabled`)!==`true`},Y=e=>{if(!e)return``;if(typeof e==`string`)return e.replace(/<[^>]*>/g,` `).replace(/&nbsp;/g,` `).replace(/&amp;/g,`&`).replace(/&lt;/g,`<`).replace(/&gt;/g,`>`).replace(/&quot;/g,`"`).replace(/&#039;/g,`'`).replace(/\s+/g,` `).trim();if(Array.isArray(e))return e.map(e=>Y(e)).filter(Boolean).join(` `);if(typeof e==`object`){let t=e;return Y(t.children??t.content)}return``},Ce=e=>[Y(e.header),Y(e.body),Y(e.tip)].filter(Boolean).join(`. `),we=e=>{if(e.hasAttribute(`aria-labelledby`)||e.hasAttribute(`aria-label`)&&!e.__ownsAriaLabel__||e.hasAttribute(`title`)||(e.textContent??``).trim().length>0)return!0;let t=e.querySelector(`img[alt]`);return!!t&&(t.getAttribute(`alt`)??``).trim().length>0},Te=(e,t)=>{let n=t.aria??`auto`;return n===`auto`?we(e)?`description`:`label`:n},Ee=(e,t)=>{if(!t||Te(e,t)!==`label`){e.__ownsAriaLabel__&&=(e.removeAttribute(`aria-label`),!1),e.__ownsRole__&&=(e.removeAttribute(`role`),!1);return}let n=Ce(t);n&&(e.setAttribute(`aria-label`,n),e.__ownsAriaLabel__=!0,!e.__ownsRole__&&!e.hasAttribute(`role`)&&!e.matches(ve)&&(e.setAttribute(`role`,`img`),e.__ownsRole__=!0))},De=(e,t)=>{let n=!!t?.focusable;if(n&&!e.__ownsTabIndex__){if(e.matches(ve)||e.hasAttribute(`tabindex`))return;e.setAttribute(`tabindex`,`0`),e.__ownsTabIndex__=!0;return}!n&&e.__ownsTabIndex__&&(e.removeAttribute(`tabindex`),e.__ownsTabIndex__=!1)},Oe=(e,t)=>{e.__prevDescribedBy__=e.getAttribute(`aria-describedby`);let n=[e.__prevDescribedBy__,t].filter(Boolean).join(` `);e.setAttribute(`aria-describedby`,n)},ke=e=>{e.__prevDescribedBy__!==void 0&&(e.__prevDescribedBy__?e.setAttribute(`aria-describedby`,e.__prevDescribedBy__):e.removeAttribute(`aria-describedby`),e.__prevDescribedBy__=void 0)},Ae=`nb-tooltip-description`,je=e=>!!e&&!!(e.body||e.header||e.tip),Me=(e,t)=>{if(typeof document>`u`)return;let n=t&&je(t)&&Te(e,t)===`description`?Ce(t):``;if(!n){Ne(e);return}let r=e.__descNode__;r||(r=document.createElement(`span`),r.className=Ae,r.id=ne(),r.setAttribute(`role`,`tooltip`),document.body.appendChild(r),e.__descNode__=r,Oe(e,r.id)),e.__descText__!==n&&(r.textContent=n,e.__descText__=n)},Ne=e=>{e.__descNode__&&(ke(e),e.__descNode__.remove(),e.__descNode__=void 0,e.__descText__=void 0)},Pe=(e,t)=>{if(je(t)){e.__prevTitle__===void 0&&e.hasAttribute(`title`)&&(e.__prevTitle__=e.getAttribute(`title`)??``,e.removeAttribute(`title`));return}Fe(e)},Fe=e=>{e.__prevTitle__!==void 0&&(e.hasAttribute(`title`)||e.setAttribute(`title`,e.__prevTitle__),e.__prevTitle__=void 0)},Ie=(e,t)=>{Pe(e,t),Ee(e,t),Me(e,t)},Le=e=>e.disabled===!0?!0:!!e.closest?.(`fieldset[disabled]`)&&!e.closest?.(`fieldset[disabled] > legend:first-of-type`),Re=(e,t,n)=>t>=e.left&&t<=e.right&&n>=e.top&&n<=e.bottom,ze=e=>{let t=e.__proxyHost__;t&&(e.__proxyMove__&&t.removeEventListener(`mousemove`,e.__proxyMove__),e.__proxyLeave__&&t.removeEventListener(`mouseleave`,e.__proxyLeave__),e.__proxyHost__=void 0,e.__proxyMove__=void 0,e.__proxyLeave__=void 0,e.__proxyInside__=!1)},Be=e=>{let t=e.__tooltipBinding__&&Le(e)?e.parentElement:null;e.__proxyHost__!==t&&(ze(e),t&&(e.__proxyMove__=(t=>{let n=t;if(n.buttons)return;let r=e.getBoundingClientRect();if(z(r)?Re(r,n.clientX,n.clientY):t.target===e||e.contains(t.target)){e.__mouseX__=n.clientX,e.__mouseY__=n.clientY,e.__proxyInside__?e.__tooltipBinding__?.followCursor&&Z(e,e.tooltipElement,e.__requestedSide__):(e.__proxyInside__=!0,e.__showTooltip__?.(`pointer`));return}e.__proxyInside__&&(e.__proxyInside__=!1,e.__hideTooltip__?.(void 0,`pointer`))}),e.__proxyLeave__=(()=>{e.__proxyInside__&&(e.__proxyInside__=!1,e.__hideTooltip__?.(void 0,`pointer`))}),t.addEventListener(`mousemove`,e.__proxyMove__),t.addEventListener(`mouseleave`,e.__proxyLeave__),e.__proxyHost__=t))},Ve=e=>{e.onOpenChange||C(`controlled-no-handler`,"a tooltip was given `open` but no `onOpenChange`, so nothing the user does (hover, blur, Escape) can change it. Either handle `onOpenChange` or drop `open` and let the directive own visibility.")},He=(e,t)=>{if(!t)return;let n=t.open===void 0?e.__openState__===void 0&&t.defaultOpen?!0:void 0:t.open;n!==void 0&&n!==(e.__openState__===!0||!!e.__showTimer__)&&(n?e.__showTooltip__?.(`program`):e.__hideTooltip__?.(0,`program`))},Ue=e=>{P();let t=e.config.globalProperties.$router;t&&t.beforeEach(()=>{k.forEach(e=>e?.__hideTooltip__?.(0,`program`)),k.clear()}),e.directive(`nb-tooltip`,{mounted(e,t){e.__showTooltip__=(t=`pointer`)=>{let n=e.__tooltipBinding__;if(n){if(n.open!==void 0&&t!==`program`){Ve(n),n.onOpenChange?.(!0,t);return}clearTimeout(e.__hideTimer__),e.__hideTimer__=void 0,qe(e,n,t)}},e.__hideTooltip__=(t=e.__tooltipBinding__?.hideDelay??150,n=`dismiss`)=>{let r=e.__tooltipBinding__;if(r?.open!==void 0&&n!==`program`){Ve(r),r.onOpenChange?.(!1,n);return}if(clearTimeout(e.__hideTimer__),t<=0){e.__hideTimer__=void 0,X(e,!0,n);return}e.__hideTimer__=setTimeout(()=>{e.__hideTimer__=void 0,X(e,t<=0,n)},t)},e.__mouseMove__=t=>{e.__mouseX__=t.clientX,e.__mouseY__=t.clientY,e.__tooltipBinding__?.followCursor&&Z(e,e.tooltipElement,e.__tooltipBinding__?.position)},e.__tooltipBinding__=t.value,e.__showHandler__=t=>{if(M(e.__lastTouchAt__,re))return;let n=t;n.buttons||(typeof n.clientX==`number`&&(n.clientX||n.clientY)&&(e.__mouseX__=n.clientX,e.__mouseY__=n.clientY),e.__showTooltip__?.(`pointer`))},e.__hideHandler__=()=>e.__hideTooltip__?.(void 0,`pointer`),e.__focusHandler__=t=>{M(j,ie)||be(e,t)&&e.__showTooltip__?.(`focus`)},e.__blurHandler__=()=>e.__hideTooltip__?.(void 0,`focus`),e.__touchHandler__=t=>{e.__tooltipBinding__?.touch!==!1&&be(e,t)&&(e.__lastTouchAt__=Date.now(),!Se(e)&&(e.__showTooltip__?.(`touch`),e.__hideTooltip__?.(A,`touch`)))},De(e,t.value),Ie(e,t.value),e.setAttribute(ye,``),e.addEventListener(`mouseenter`,e.__showHandler__),e.addEventListener(`mouseleave`,e.__hideHandler__),e.addEventListener(`mousemove`,e.__mouseMove__),e.addEventListener(`focusin`,e.__focusHandler__),e.addEventListener(`focusout`,e.__blurHandler__),e.addEventListener(`touchstart`,e.__touchHandler__,{passive:!0}),Be(e),He(e,t.value)},updated(e,t){let n=e.__tooltipBinding__;if(e.__tooltipBinding__=t.value,!t.value){Ie(e,void 0),De(e,void 0),X(e,!0);return}if(n!==t.value&&(Ie(e,t.value),De(e,t.value)),Be(e),He(e,t.value),!e.tooltipElement||n===t.value)return;let r=Ke(t.value);r!==e.__lastContent__&&(e.__lastContent__=r,Ye(e,t.value))},unmounted(e){clearTimeout(e.__showTimer__),e.__showTimer__=void 0,clearTimeout(e.__hideTimer__),e.__hideTimer__=void 0,X(e,!0),k.delete(e),e.__showHandler__&&e.removeEventListener(`mouseenter`,e.__showHandler__),e.__hideHandler__&&e.removeEventListener(`mouseleave`,e.__hideHandler__),e.__focusHandler__&&e.removeEventListener(`focusin`,e.__focusHandler__),e.__blurHandler__&&e.removeEventListener(`focusout`,e.__blurHandler__),e.__touchHandler__&&e.removeEventListener(`touchstart`,e.__touchHandler__),Ne(e),Fe(e),e.__ownsAriaLabel__&&=(e.removeAttribute(`aria-label`),!1),e.__ownsTabIndex__&&=(e.removeAttribute(`tabindex`),!1),e.__ownsRole__&&=(e.removeAttribute(`role`),!1),e.removeAttribute(ye),ze(e),e.__mouseMove__&&e.removeEventListener(`mousemove`,e.__mouseMove__),J(e)}})},We=({header:e=``,body:t=``,tip:n=``})=>`<div class="nb-tooltip-content"><div class="nb-tooltip-header">${T(e)}</div><div class="nb-tooltip-body">${T(t)}</div><div class="nb-tooltip-tip">${T(n)}</div></div>`,Ge=(e,t,n)=>[`nb-tooltip`,`nb-tooltip-${e}`,t?`nb-tooltip-flavor-${t}`:``,n||``].filter(Boolean).join(` `),Ke=e=>`${e.position??``}|${D(e)}|${O(e)??``}|${We(e)}`,qe=(e,n,r=`pointer`)=>{let{header:i,body:a,tip:o,delay:s=400,animationTime:c=300,position:l,overflowOnly:u}=n,d=D(n),f=O(n);if(clearTimeout(e.__showTimer__),e.__showTimer__=void 0,_e(e,!0),u){let t=e.getBoundingClientRect();if(!(Math.round(t.width)<Math.round(e.scrollWidth)))return}if(!(a||i||o))return;let p=r===`pointer`?s:0,m=t.prefersReducedMotion();e.__showTimer__=setTimeout(()=>{if(e.__showTimer__=void 0,!e.isConnected)return;let t=r===`pointer`?l??`cursor`:l&&l!==`cursor`?l:`top`;for(let t of Array.from(L))t!==e&&Je(t,`superseded`);let s=document.createElement(`span`);s.className=Ge(t,d,f),s.innerHTML=We({header:i,body:a,tip:o}),s.addEventListener(`mouseenter`,()=>{s.__hovered__=!0,clearTimeout(e.__hideTimer__),e.__hideTimer__=void 0,e.__watchdogMisses__=0}),s.addEventListener(`mouseleave`,()=>{s.__hovered__=!1,e.__hideTooltip__?.()}),m?s.style.opacity=`1`:(s.style.transition=`opacity ${c}ms ease-in-out`,s.style.animation=`tooltipAppear ${c}ms ease-in-out forwards`),s.setAttribute(`aria-hidden`,`true`),e.__trigger__=r,e.tooltipElement=s,(e.__chips__??=new Set).add(s),e.__lastContent__=Ke(n),k.add(e),document.body.appendChild(s),e.__requestedSide__=t,e.__side__=t,Z(e,s,t),he(e),le(e);let u=e.__openState__===!0;e.__openState__=!0,u||n.onOpenChange?.(!0,r)},p)},Je=(e,t,n=!0)=>{if(e.__hideTooltip__){e.__hideTooltip__(n?0:void 0,t);return}X(e,n,t)},X=(e,t=!1,n=`dismiss`)=>{clearTimeout(e.__showTimer__),e.__showTimer__=void 0;let r=e.__openState__===!0;_e(e,t),k.delete(e),e.__requestedSide__=void 0,r&&(e.__openState__=!1,e.__tooltipBinding__?.onOpenChange?.(!1,n))},Ye=(e,t)=>{let{header:n,body:r,tip:i,position:a}=t,o=D(t),s=O(t),c=e.__requestedSide__??e.__side__??a,l=e.tooltipElement;l&&(l.innerHTML=We({header:n,body:r,tip:i}),l.className=Ge(e.__side__??c??`cursor`,o,s),Z(e,l,c))};function Xe(e,t,n,r,i,a,o){switch(e){case`top`:return{top:t.top-(r+i*2),left:t.left+t.width/2-(n/2+i/2)};case`bottom`:return{top:t.bottom+i,left:t.left+t.width/2-(n/2+i/2)};case`left`:return{top:t.top+t.height/2-r/2,left:t.left-(n+i*2)};case`right`:return{top:t.top+t.height/2-r/2,left:t.right+i};default:return{top:o+Ze,left:a+Ze}}}var Ze=14;function Qe(e,t,n,r,i){return t>=i&&e>=i&&t+n<=window.innerWidth-i&&e+r<=window.innerHeight-i}var $e={top:[`bottom`,`right`,`left`],bottom:[`top`,`right`,`left`],left:[`right`,`top`,`bottom`],right:[`left`,`top`,`bottom`],cursor:[]},Z=(e,t,n)=>{if(!t)return;let r=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=i.width||0,o=i.height||0,s=e.__mouseX__??0,c=e.__mouseY__??0,l=n??`cursor`,u=e=>Xe(e,r,a,o,4,s,c),d=u(l),f=l;if(a>0&&o>0&&!Qe(d.top,d.left,a,o,16))for(let e of $e[l]){let t=u(e);if(Qe(t.top,t.left,a,o,16)){d=t,f=e;break}}let{top:p,left:m}=d;if(a>0&&o>0){let e=window.innerWidth-a-16,t=window.innerHeight-o-16;m>e&&(m=e),m<16&&(m=16),p>t&&(p=t),p<16&&(p=16)}if(f!==`cursor`){for(let e of[`top`,`bottom`,`left`,`right`])t.classList.remove(`nb-tooltip-${e}`);t.classList.add(`nb-tooltip-${f}`)}if(e.__side__=f,a>0&&o>0&&f!==`cursor`){let e=r.left+r.width/2,n=r.top+r.height/2;if(f===`top`||f===`bottom`){let n=Math.max(8,Math.min(a-8,e-m))/a*100;t.style.setProperty(`--nb-tooltip-arrow-offset`,`${n}%`)}else{let e=Math.max(8,Math.min(o-8,n-p))/o*100;t.style.setProperty(`--nb-tooltip-arrow-offset`,`${e}%`)}}t.style.top=`${p}px`,t.style.left=`${m}px`};function et(e){for(let t of Array.from(k))t.__hideTooltip__?.(0,e);let t=new Set;for(let e of Array.from(k))for(let n of e.__chips__??[])t.add(n);document.querySelectorAll(`span.nb-tooltip`).forEach(e=>{t.has(e)||e.remove()})}function tt(){for(let e of Array.from(k))e.__hideTooltip__?.(0,`program`);k.clear();for(let e of Array.from(L))J(e);document.querySelectorAll(`span.nb-tooltip`).forEach(e=>e.remove())}var nt=e.t({default:()=>it});function rt(e,t){let r=t.value;if(r==null||r===``){e.removeAttribute(n.TOUR_STEP_ATTRIBUTE);return}e.setAttribute(n.TOUR_STEP_ATTRIBUTE,String(r))}var it=e=>{e.directive(`nb-tour-step`,{mounted:rt,updated:rt,unmounted(e){e.removeAttribute(n.TOUR_STEP_ATTRIBUTE)}})},at=Object.assign({"./ContextMenu.directive.ts":o,"./ToolTip.content.ts":c,"./ToolTip.directive.ts":E,"./TourStep.directive.ts":nt}),ot={install(e){Object.values(at).forEach(t=>{typeof t.default==`function`&&t.default(e)})}},st={install(e){let t=r.createCommandPaletteState();e.provide(r.NB_COMMAND_PALETTE_KEY,t)}},ct={key:0,class:`nb-spreadsheet__toolbar`},lt={key:0,class:`nb-spreadsheet__corner`,style:{gridRow:1,gridColumn:1}},ut=[`onClick`],dt={class:`nb-spreadsheet__header-label`},ft={key:0,class:`nb-spreadsheet__sort`,"aria-hidden":`true`},pt=[`onMousedown`],mt=[`title`,`data-cell`,`data-row`,`data-col`,`onMousedown`,`onMouseenter`,`onDblclick`],ht=[`inputmode`],gt=44,Q=32,$=28,_t=(0,a.defineComponent)({__name:`Spreadsheet`,props:{columns:{},rows:{},cellAttrs:{},computed:{},resizable:{type:Boolean,default:!0},rowReorderable:{type:Boolean,default:!1},showGutter:{type:Boolean,default:!0},windowRows:{default:80},locale:{default:`pt-PT`}},emits:[`commit`,`change`,`selection`,`focus`,`row-reorder`],setup(e,{expose:t,emit:n}){let r=e,i=n,o=(0,a.useTemplateRef)(`scrollerRef`),s=(0,a.useTemplateRef)(`editorRef`),c=(0,a.ref)({}),l=(0,a.ref)(null),u=(0,a.ref)(null),d=(0,a.ref)(null),f=(0,a.ref)(!1),p=(0,a.ref)(null),m=(0,a.ref)(0),h=(0,a.ref)([]),g=(0,a.ref)([]),_=(0,a.computed)(()=>{let e=r.columns.filter(e=>e.pinned===`left`),t=r.columns.filter(e=>e.pinned===`right`),n=r.columns.filter(e=>!e.pinned);return[...e,...n,...t]});function v(e){return c.value[e.id]??e.width??120}let ee=(0,a.computed)(()=>({gridTemplateColumns:(r.showGutter?`${gt}px `:``)+_.value.map(e=>`${v(e)}px`).join(` `)})),y=(0,a.computed)(()=>{let e=r.rows.filter(e=>!e.pinned);if(!l.value)return e;let t=r.columns.find(e=>e.id===l.value.columnId);if(!t)return e;let n=l.value.direction===`asc`?1:-1,i=(e,t)=>e==null&&t==null?0:e==null?-1:t==null?1:typeof e==`number`&&typeof t==`number`?(e-t)*n:String(e).localeCompare(String(t))*n;return[...e].sort((e,n)=>i(e.values[t.id],n.values[t.id]))}),b=(0,a.computed)(()=>r.rows.filter(e=>e.pinned===`top`)),x=(0,a.computed)(()=>r.rows.filter(e=>e.pinned===`bottom`)),S=(0,a.computed)(()=>{let e=Math.max(1,Math.ceil((o.value?.clientHeight??600)/$)),t=Math.max(10,Math.floor(r.windowRows/4)),n=Math.floor(m.value/$)-b.value.length-t,i=Math.max(0,n),a=Math.min(y.value.length,i+e+t*2),s=b.value.map((e,t)=>({...e,__virtualIndex:t,gutterLabel:``})),c=y.value.slice(i,a).map((e,t)=>({...e,__virtualIndex:i+t+b.value.length})),l=x.value.map((e,t)=>({...e,__virtualIndex:b.value.length+y.value.length+t,gutterLabel:``}));return[...s,...c,...l]});function C(e,t){if(t==null||t===``)return``;if(e.type===`number`){let e=typeof t==`number`?t:Number(t);return Number.isFinite(e)?new Intl.NumberFormat(r.locale,{maximumFractionDigits:4}).format(e):String(t)}if(e.type===`date`){let e=t instanceof Date?t:new Date(t);return Number.isNaN(e.getTime())?String(t):new Intl.DateTimeFormat(r.locale).format(e)}return String(t)}function w(e,t){if(t===``)return null;if(e.type===`number`){let e=t.replace(/\s/g,``).replace(`,`,`.`),n=Number(e);if(!Number.isFinite(n))throw Error(`Invalid number`);return n}if(e.type===`date`){let e=new Date(t);if(Number.isNaN(e.getTime()))throw Error(`Invalid date`);return e.toISOString().slice(0,10)}return t}function T(e,t){let n=r.rows.find(t=>t.id===e);if(!n)return;let i=n.values[t];if(i!==void 0)return i;if(r.computed)return r.computed(e,t,T)}function E(e,t){return r.cellAttrs?r.cellAttrs(e.id,t.id,e,t)??{}:{}}function D(e,t){let n=E(e,t);if(n.display!==void 0)return n.display;let r=T(e.id,t.id);return t.format?t.format(r,e):C(t,r)}function O(e,t){let n=E(e,t),r=u.value?.rowId===e.id&&u.value?.columnId===t.id,i=N(e.id,t.id);return{[`nb-spreadsheet__cell--${t.align??(t.type===`number`||t.type===`date`?`right`:`left`)}`]:!0,"nb-spreadsheet__cell--focused":r,"nb-spreadsheet__cell--selected":i,"nb-spreadsheet__cell--readonly":k(e,t),"nb-spreadsheet__cell--computed":!!n.computed||!!e.computed,"nb-spreadsheet__cell--pinned-top":e.pinned===`top`,"nb-spreadsheet__cell--pinned-bottom":e.pinned===`bottom`,[n.className??``]:!!n.className,[e.className??``]:!!e.className}}function k(e,t){if(e.computed||t.readOnly)return!0;let n=E(e,t);return!!n.readOnly||!!n.computed}function te(e,t){return E(e,t).tooltip??``}function ne(e){return{"nb-spreadsheet__header--sortable":!!e.sortable,"nb-spreadsheet__header--pinned-left":e.pinned===`left`,"nb-spreadsheet__header--pinned-right":e.pinned===`right`}}function re(e){if(e.pinned!==`left`)return 0;let t=r.showGutter?gt:0;for(let n of _.value){if(n.id===e.id)break;n.pinned===`left`&&(t+=v(n))}return t}function A(e){if(e.pinned!==`right`)return 0;let t=0,n=[..._.value].reverse();for(let r of n){if(r.id===e.id)break;r.pinned===`right`&&(t+=v(r))}return t}function ie(e,t){let n=(r.showGutter?2:1)+t,i={};return e.pinned===`left`?(i.position=`sticky`,i.left=`${re(e)}px`,i.zIndex=`3`):e.pinned===`right`&&(i.position=`sticky`,i.right=`${A(e)}px`,i.zIndex=`3`),{gridRow:1,gridColumn:n,...i}}function j(e,t,n,i){let a=(r.showGutter?2:1)+i,o=n+2,s={};return t.pinned===`left`?(s.position=`sticky`,s.left=`${re(t)}px`,s.zIndex=`2`):t.pinned===`right`&&(s.position=`sticky`,s.right=`${A(t)}px`,s.zIndex=`2`),(e.pinned===`top`||e.pinned===`bottom`)&&(s.position=`sticky`,s.zIndex=String(Math.max(Number(s.zIndex??0),2)),e.pinned===`top`&&(s.top=`${Q}px`),e.pinned===`bottom`&&(s.bottom=`0`)),{gridRow:o,gridColumn:a,...s}}function M(e,t){let n={position:`sticky`,left:`0`,zIndex:`2`};return t.pinned===`top`&&(n.top=`${Q}px`,n.zIndex=`4`),t.pinned===`bottom`&&(n.bottom=`0`,n.zIndex=`4`),{gridRow:e+2,gridColumn:1,...n}}function N(e,t){if(!d.value)return!1;let n=[...b.value,...y.value,...x.value].map(e=>e.id),r=_.value.map(e=>e.id),i=n.indexOf(d.value.startRowId),a=n.indexOf(d.value.endRowId),o=r.indexOf(d.value.startColumnId),s=r.indexOf(d.value.endColumnId),c=n.indexOf(e),l=r.indexOf(t);return c>=Math.min(i,a)&&c<=Math.max(i,a)&&l>=Math.min(o,s)&&l<=Math.max(o,s)}function P(e,t,n=!1){u.value={rowId:e,columnId:t},n&&d.value?d.value={...d.value,endRowId:e,endColumnId:t}:d.value={startRowId:e,startColumnId:t,endRowId:e,endColumnId:t},i(`focus`,u.value),i(`selection`,d.value)}function ae(e,t,n){p.value&&z(!0),f.value=!0,P(t.id,n.id,e.shiftKey),o.value?.focus(),e.preventDefault(),document.addEventListener(`mouseup`,se,{once:!0})}function oe(e,t){!f.value||!d.value||(d.value={...d.value,endRowId:e.id,endColumnId:t.id},i(`selection`,d.value))}function se(){f.value=!1}function ce(e,t){k(e,t)||R(e,t,``)}function F(e,t,n=!1){if(!u.value){let e=_.value[0],t=S.value[0];e&&t&&P(t.id,e.id);return}let r=[...b.value,...y.value,...x.value],i=r.findIndex(e=>e.id===u.value.rowId),a=_.value.findIndex(e=>e.id===u.value.columnId),o=Math.max(0,Math.min(r.length-1,i+e)),s=Math.max(0,Math.min(_.value.length-1,a+t));P(r[o].id,_.value[s].id,n),I(r[o].id)}function I(e){let t=y.value.findIndex(t=>t.id===e);if(t<0||!o.value)return;let n=t*$,r=o.value;n<r.scrollTop?r.scrollTop=n:n+$>r.scrollTop+r.clientHeight-Q&&(r.scrollTop=n-r.clientHeight+Q+$)}function le(){m.value=o.value?.scrollTop??0}function L(e){if(!p.value){if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?q():K();return}switch(e.key){case`ArrowDown`:e.preventDefault(),F(1,0,e.shiftKey);break;case`ArrowUp`:e.preventDefault(),F(-1,0,e.shiftKey);break;case`ArrowLeft`:e.preventDefault(),F(0,-1,e.shiftKey);break;case`ArrowRight`:e.preventDefault(),F(0,1,e.shiftKey);break;case`Tab`:e.preventDefault(),F(0,e.shiftKey?-1:1);break;case`Enter`:if(e.preventDefault(),u.value){let e=r.rows.find(e=>e.id===u.value.rowId),t=r.columns.find(e=>e.id===u.value.columnId);e&&t&&!k(e,t)&&R(e,t,``)}break;case`Escape`:d.value=null,i(`selection`,null);break;case`Delete`:case`Backspace`:e.preventDefault(),V();break;case`F2`:if(e.preventDefault(),u.value){let e=r.rows.find(e=>e.id===u.value.rowId),t=r.columns.find(e=>e.id===u.value.columnId);if(e&&t&&!k(e,t)){let n=T(e.id,t.id);R(e,t,n==null?``:String(n))}}break;default:if(u.value&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&e.key.length===1){let t=r.rows.find(e=>e.id===u.value.rowId),n=r.columns.find(e=>e.id===u.value.columnId);t&&n&&!k(t,n)&&(e.preventDefault(),R(t,n,e.key))}}}}function R(e,t,n){p.value={rowId:e.id,columnId:t.id,draft:n},(0,a.nextTick)(()=>{s.value?.focus(),s.value?.select()})}let ue=(0,a.computed)(()=>{if(p.value)return r.columns.find(e=>e.id===p.value.columnId)?.type===`number`?`decimal`:`text`}),de=(0,a.computed)(()=>{if(!p.value)return{display:`none`};let e=o.value?.querySelector(`[data-cell="${p.value.rowId}::${p.value.columnId}"]`);if(!e)return{display:`none`};let t=e.getBoundingClientRect(),n=o.value.getBoundingClientRect();return{top:`${t.top-n.top}px`,left:`${t.left-n.left}px`,width:`${t.width}px`,height:`${t.height}px`}});function fe(e){e.key===`Enter`?(e.preventDefault(),z(!1),F(1,0)):e.key===`Tab`?(e.preventDefault(),z(!1),F(0,e.shiftKey?-1:1)):e.key===`Escape`&&(e.preventDefault(),p.value=null,o.value?.focus())}function z(e){if(!p.value)return;let{rowId:t,columnId:n,draft:a}=p.value,s=r.columns.find(e=>e.id===n);if(!s){p.value=null;return}let c;try{c=s.parse?s.parse(a):w(s,a)}catch{p.value=null;return}let l=T(t,n);if(l===c){p.value=null;return}let u={rowId:t,columnId:n,before:l,after:c};G([u]),i(`commit`,u),i(`change`,[u]),p.value=null,o.value?.focus()}function B(){if(!d.value)return[];let e=[...b.value,...y.value,...x.value].map(e=>e.id),t=_.value.map(e=>e.id),n=e.indexOf(d.value.startRowId),r=e.indexOf(d.value.endRowId),i=t.indexOf(d.value.startColumnId),a=t.indexOf(d.value.endColumnId),o=[];for(let s=Math.min(n,r);s<=Math.max(n,r);s++)for(let n=Math.min(i,a);n<=Math.max(i,a);n++)o.push({rowId:e[s],columnId:t[n]});return o}function V(){let e=B(),t=[];for(let{rowId:n,columnId:i}of e){let e=r.rows.find(e=>e.id===n),a=r.columns.find(e=>e.id===i);if(!e||!a||k(e,a))continue;let o=T(n,i);o==null||o===``||t.push({rowId:n,columnId:i,before:o,after:null})}if(t.length!==0){G(t);for(let e of t)i(`commit`,e);i(`change`,t)}}function H(e){if(B().length===0)return;let t=[...b.value,...y.value,...x.value].map(e=>e.id),n=_.value.map(e=>e.id),r=Math.min(t.indexOf(d.value.startRowId),t.indexOf(d.value.endRowId)),i=Math.max(t.indexOf(d.value.startRowId),t.indexOf(d.value.endRowId)),a=Math.min(n.indexOf(d.value.startColumnId),n.indexOf(d.value.endColumnId)),o=Math.max(n.indexOf(d.value.startColumnId),n.indexOf(d.value.endColumnId)),s=[];for(let e=r;e<=i;e++){let r=[];for(let i=a;i<=o;i++){let a=T(t[e],n[i]);r.push(a==null?``:String(a))}s.push(r.join(` `))}e.preventDefault(),e.clipboardData?.setData(`text/plain`,s.join(`
2
- `))}function pe(e){H(e),V()}function me(e){if(!u.value)return;let t=e.clipboardData?.getData(`text/plain`)??``;if(!t)return;e.preventDefault();let n=t.replace(/\r\n?/g,`
3
- `).split(`
4
- `).map(e=>e.split(` `)),a=[...b.value,...y.value,...x.value].map(e=>e.id),o=_.value.map(e=>e.id),s=a.indexOf(u.value.rowId),c=o.indexOf(u.value.columnId),l=[];if(n.forEach((e,t)=>{e.forEach((e,n)=>{let i=a[s+t],u=o[c+n];if(!i||!u)return;let d=r.rows.find(e=>e.id===i),f=r.columns.find(e=>e.id===u);if(!d||!f||k(d,f))return;let p;try{p=f.parse?f.parse(e):w(f,e)}catch{return}let m=T(i,u);m!==p&&l.push({rowId:i,columnId:u,before:m,after:p})})}),l.length!==0){G(l);for(let e of l)i(`commit`,e);i(`change`,l)}}function U(e,t){let n=e.clientX,r=v(t),i=t.minWidth??60,a=e=>{let a=Math.max(i,r+(e.clientX-n));c.value={...c.value,[t.id]:a}},o=()=>{window.removeEventListener(`mousemove`,a),window.removeEventListener(`mouseup`,o)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,o)}function W(e){e.sortable&&(l.value?.columnId===e.id?l.value=l.value.direction===`asc`?{columnId:e.id,direction:`desc`}:null:l.value={columnId:e.id,direction:`asc`})}function G(e){h.value.push(e),g.value=[]}function K(){let e=h.value.pop();if(!e)return;let t=e.map(e=>({...e,before:e.after,after:e.before}));for(let e of t)i(`commit`,e);i(`change`,t),g.value.push(e)}function q(){let e=g.value.pop();if(e){for(let t of e)i(`commit`,t);i(`change`,e),h.value.push(e)}}return(0,a.onMounted)(()=>{o.value?.focus()}),t({focus:(e,t)=>P(e,t),undo:K,redo:q,getSelection:()=>d.value}),(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{class:(0,a.normalizeClass)([`nb-spreadsheet`,{"nb-spreadsheet--editing":!!p.value}])},[t.$slots.toolbar?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,ct,[(0,a.renderSlot)(t.$slots,`toolbar`,{},void 0,!0)])):(0,a.createCommentVNode)(``,!0),(0,a.createElementVNode)(`div`,{ref_key:`scrollerRef`,ref:o,class:`nb-spreadsheet__scroller`,tabindex:`0`,onKeydown:L,onCopy:H,onCut:pe,onPaste:me,onScroll:le},[(0,a.createElementVNode)(`div`,{class:`nb-spreadsheet__grid`,style:(0,a.normalizeStyle)(ee.value)},[e.showGutter?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,lt)):(0,a.createCommentVNode)(``,!0),((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(_.value,(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:`h-${t.id}`,class:(0,a.normalizeClass)([`nb-spreadsheet__header`,ne(t)]),style:(0,a.normalizeStyle)(ie(t,n)),onClick:e=>W(t)},[(0,a.createElementVNode)(`span`,dt,(0,a.toDisplayString)(t.label),1),l.value&&l.value.columnId===t.id?((0,a.openBlock)(),(0,a.createElementBlock)(`span`,ft,(0,a.toDisplayString)(l.value.direction===`asc`?`▲`:`▼`),1)):(0,a.createCommentVNode)(``,!0),e.resizable?((0,a.openBlock)(),(0,a.createElementBlock)(`span`,{key:1,class:`nb-spreadsheet__resize-handle`,onMousedown:(0,a.withModifiers)(e=>U(e,t),[`stop`])},null,40,pt)):(0,a.createCommentVNode)(``,!0)],14,ut))),128)),((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(S.value,(t,n)=>((0,a.openBlock)(),(0,a.createElementBlock)(a.Fragment,{key:`r-${t.id}`},[e.showGutter?((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:0,class:(0,a.normalizeClass)([`nb-spreadsheet__gutter`,{"nb-spreadsheet__gutter--pinned-top":t.pinned===`top`,"nb-spreadsheet__gutter--pinned-bottom":t.pinned===`bottom`}]),style:(0,a.normalizeStyle)(M(n,t))},(0,a.toDisplayString)(t.gutterLabel??n+1),7)):(0,a.createCommentVNode)(``,!0),((0,a.openBlock)(!0),(0,a.createElementBlock)(a.Fragment,null,(0,a.renderList)(_.value,(e,r)=>((0,a.openBlock)(),(0,a.createElementBlock)(`div`,{key:`c-${t.id}-${e.id}`,class:(0,a.normalizeClass)([`nb-spreadsheet__cell`,O(t,e)]),style:(0,a.normalizeStyle)(j(t,e,n,r)),title:te(t,e),"data-cell":`${t.id}::${e.id}`,"data-row":t.id,"data-col":e.id,onMousedown:n=>ae(n,t,e),onMouseenter:n=>oe(t,e),onDblclick:n=>ce(t,e)},[(0,a.createElementVNode)(`span`,null,(0,a.toDisplayString)(D(t,e)),1)],46,mt))),128))],64))),128))],4),p.value?(0,a.withDirectives)(((0,a.openBlock)(),(0,a.createElementBlock)(`input`,{key:0,ref_key:`editorRef`,ref:s,"onUpdate:modelValue":n[0]||=e=>p.value.draft=e,class:`nb-spreadsheet__editor`,style:(0,a.normalizeStyle)(de.value),inputmode:ue.value,onBlur:n[1]||=e=>z(!0),onKeydown:(0,a.withModifiers)(fe,[`stop`])},null,44,ht)),[[a.vModelText,p.value.draft]]):(0,a.createCommentVNode)(``,!0)],544)],2))}}),vt=e.t({default:()=>yt}),yt=i.t(_t,[[`__scopeId`,`data-v-df859a7e`]]),bt=Object.assign({"./components/labs/Spreadsheet.vue":vt}),xt={install(e){Object.keys(bt).forEach(t=>{let n=`Nb${t.replace(/(.+\/)(\w+)(\.vue)$/,`$2`)}`,r=bt[t];e.component(n,r.default)})}},St={install(e,t={}){if(t.components)for(let[n,r]of Object.entries(t.components))e.component(n,r);e.use(ot),e.use(st)}};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return it}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return st}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return xt}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return tt}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return yt}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Ue}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return St}});