@box-kite/react 2.2.18 → 2.3.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 (73) hide show
  1. package/.claude/rules/box-kite-rules.md +6 -2
  2. package/.claude/skills/box-kite/SKILL.md +19 -15
  3. package/.claude/skills/box-kite/references/patterns.md +1 -1
  4. package/.claude/skills/box-kite/references/styling.md +3 -3
  5. package/.cursor/rules/box-kite.mdc +7 -3
  6. package/AGENTS.md +7 -3
  7. package/BOX_AI_CONTEXT.md +81 -41
  8. package/BOX_KITE_AI_CONTEXT.md +81 -41
  9. package/README.md +13 -7
  10. package/behavior.cjs +1 -1
  11. package/behavior.mjs +1 -1
  12. package/box.cjs +1 -1
  13. package/box.d.ts +1 -0
  14. package/box.mjs +1 -1
  15. package/catalog.cjs +1 -1
  16. package/catalog.mjs +4 -1
  17. package/client.cjs +1 -1
  18. package/client.mjs +14 -14
  19. package/components/calendar.cjs +1 -1
  20. package/components/calendar.mjs +21 -20
  21. package/components/dashboard.cjs +1 -1
  22. package/components/dashboard.mjs +12 -12
  23. package/components/dataGrid/components/dataGridFooter.d.ts +6 -2
  24. package/components/dataGrid/models/gridModel.d.ts +21 -2
  25. package/components/dataGrid/models/groupRowModel.d.ts +1 -1
  26. package/components/dataGrid/models/rowModel.d.ts +1 -1
  27. package/components/dataGrid/models/sourceGroupRowModel.d.ts +5 -1
  28. package/components/dataGrid/models/sourceRowModel.d.ts +5 -1
  29. package/components/dataGrid.cjs +3 -3
  30. package/components/dataGrid.mjs +821 -771
  31. package/components/dateField.cjs +1 -1
  32. package/components/dateField.mjs +6 -6
  33. package/components/datePicker.cjs +1 -1
  34. package/components/datePicker.mjs +116 -111
  35. package/components/dialog.cjs +1 -1
  36. package/components/dialog.d.ts +1 -1
  37. package/components/dialog.mjs +1 -1
  38. package/components/dropdown.cjs +1 -1
  39. package/components/dropdown.mjs +8 -3
  40. package/components/menu.cjs +1 -1
  41. package/components/menu.mjs +10 -10
  42. package/components/overlay.cjs +1 -1
  43. package/components/overlay.mjs +6 -6
  44. package/components/popover.cjs +1 -1
  45. package/components/popover.d.ts +8 -2
  46. package/components/popover.mjs +58 -55
  47. package/components/slider.cjs +1 -1
  48. package/components/slider.mjs +8 -8
  49. package/components/sortableList.cjs +1 -1
  50. package/components/sortableList.mjs +1 -1
  51. package/components/svg.d.ts +2 -2
  52. package/components/swipeItem.cjs +1 -1
  53. package/components/swipeItem.mjs +11 -11
  54. package/components/tabs.cjs +1 -1
  55. package/components/tabs.mjs +9 -9
  56. package/dataGridList.cjs +1 -1
  57. package/dataGridList.mjs +3 -5
  58. package/docs/props.md +49 -25
  59. package/interactionListening.cjs +1 -1
  60. package/interactionListening.mjs +3 -3
  61. package/layer.cjs +1 -1
  62. package/layer.mjs +1 -1
  63. package/package.json +5 -5
  64. package/placement.cjs +1 -1
  65. package/placement.mjs +1 -1
  66. package/platform.cjs +1 -1
  67. package/platform.mjs +16 -11
  68. package/react-shared.cjs +1 -1
  69. package/react-shared.mjs +1 -1
  70. package/rsc.cjs +1 -1
  71. package/rsc.d.ts +1 -0
  72. package/rsc.mjs +1 -1
  73. package/utils/dom/domUtils.d.ts +2 -0
package/client.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { l as e, u as t } from "./react-shared.mjs";
2
- import { h as n, t as r, v as i, y as a } from "./platform.mjs";
2
+ import { b as n, g as r, t as i, y as a } from "./platform.mjs";
3
3
  import { t as o } from "./effects.mjs";
4
4
  import s from "./box.mjs";
5
5
  import c, { useCallback as l, useContext as u, useEffect as d, useLayoutEffect as f, useMemo as p, useRef as m, useState as h } from "react";
@@ -26,11 +26,11 @@ function F({ value: e, children: t }) {
26
26
  //#endregion
27
27
  //#region src/react/hooks/useVisibility.ts
28
28
  function I(e) {
29
- let { node: t = null, event: r = "click", hideOnScroll: i = !1, hideOnResize: a = !1, hideOnEscape: o = !0 } = e ?? {}, [s, c] = h(!1), l = m(null);
29
+ let { node: t = null, event: n = "click", hideOnScroll: i = !1, hideOnResize: a = !1, hideOnEscape: o = !0 } = e ?? {}, [s, c] = h(!1), l = m(null);
30
30
  return d(() => {
31
31
  function e(e) {
32
- let r = t ?? l.current;
33
- r && !n(e, [r]) && c(!1);
32
+ let n = t ?? l.current;
33
+ n && !r(e, [n]) && c(!1);
34
34
  }
35
35
  function u() {
36
36
  c(!1);
@@ -39,7 +39,7 @@ function I(e) {
39
39
  e.key === "Escape" && c(!1);
40
40
  }
41
41
  let f = new AbortController();
42
- return s && (window.addEventListener(r, e, f), o && window.addEventListener("keydown", d, f), a && window.addEventListener("resize", u, f), i && window.addEventListener("scroll", e, {
42
+ return s && (window.addEventListener(n, e, f), o && window.addEventListener("keydown", d, f), a && window.addEventListener("resize", u, f), i && window.addEventListener("scroll", e, {
43
43
  signal: f.signal,
44
44
  capture: !0
45
45
  })), () => {
@@ -48,7 +48,7 @@ function I(e) {
48
48
  }, [
49
49
  t,
50
50
  s,
51
- r,
51
+ n,
52
52
  o,
53
53
  a,
54
54
  i
@@ -84,14 +84,14 @@ var B;
84
84
  x().flushSync();
85
85
  }
86
86
  e.flushSync = t;
87
- function n() {
87
+ function r() {
88
88
  x().clear();
89
89
  }
90
- e.clear = n;
91
- function r() {
90
+ e.clear = r;
91
+ function i() {
92
92
  return x().getStyles();
93
93
  }
94
- e.getStyles = r;
94
+ e.getStyles = i;
95
95
  function o() {
96
96
  return x().getStyleTag();
97
97
  }
@@ -101,7 +101,7 @@ var B;
101
101
  }
102
102
  e.styleElementId = s;
103
103
  function c({ componentAttribute: e, ...t }) {
104
- e !== void 0 && a(e), t.warnings !== void 0 && i(t.warnings), Object.keys(t).length > 0 && x().configure(t);
104
+ e !== void 0 && n(e), t.warnings !== void 0 && a(t.warnings), Object.keys(t).length > 0 && x().configure(t);
105
105
  }
106
106
  e.configure = c;
107
107
  })(B ||= {}), N(c);
@@ -207,10 +207,10 @@ function G(e) {
207
207
  function K(e = !0) {
208
208
  let [t] = U.useTheme(), n = p(() => {
209
209
  if (!e) return null;
210
- let t = r();
210
+ let t = i();
211
211
  if (!t) return null;
212
- let n = "box-kite-portal", i = t.getElementById(n);
213
- return i || (i = document.createElement("div"), i.id = n, document.body.appendChild(i)), i;
212
+ let n = "box-kite-portal", r = t.getElementById(n);
213
+ return r || (r = document.createElement("div"), r.id = n, document.body.appendChild(r)), r;
214
214
  }, [e]);
215
215
  return f(() => {
216
216
  if (!t || !n) return;
@@ -1 +1 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../react-shared.cjs"),t=require("../platform.cjs"),n=require("../box.cjs"),r=require("../behavior.cjs"),i=require("../identity.cjs"),a=require("../dates.cjs"),o=require("../date-math.cjs"),s=require("../reporting.cjs"),c=require("./svg.cjs"),ee=require("../date-environment.cjs"),te=require("./visuallyHidden.cjs");let l=require("react"),u=require("react/jsx-runtime");function d(e){let t=a.f(e);return t&&t.kind===`date`?t.fields:null}function f(e){return a.w({...e,...a.V})}function ne(e,t,n){let r={year:e,month:t,day:1},i=a.U(r,-a.Q(a.G(r)-n,7));return Array.from({length:6},(e,r)=>{let o=Array.from({length:7},(e,n)=>{let o=a.U(i,r*7+n);return{date:f(o),day:o.day,outside:o.month!==t}}),s=a.U(i,r*7+a.Q(4-n,7));return{week:a.Z(s).week,days:o}})}function re(e,t,n,r){let i=r.rtl?`ArrowLeft`:`ArrowRight`,o=r.rtl?`ArrowRight`:`ArrowLeft`;switch(t){case i:return a.U(e,1);case o:return a.U(e,-1);case`ArrowDown`:return a.U(e,7);case`ArrowUp`:return a.U(e,-7);case`Home`:return a.U(e,-a.Q(a.G(e)-r.firstDay,7));case`End`:return a.U(e,6-a.Q(a.G(e)-r.firstDay,7));case`PageUp`:return a.W(e,n?-12:-1);case`PageDown`:return a.W(e,n?12:1);default:return null}}function ie(e,t){return t.min!=null&&a.q(e)<a.q(t.min)||t.max!=null&&a.q(e)>a.q(t.max)}function p(e,t){return t.min&&a.q(e)<a.q(t.min)?t.min:t.max&&a.q(e)>a.q(t.max)?t.max:e}function m(e,t){return a.q(e)<=a.q(t)?[e,t]:[t,e]}function ae(e,t,n){if(!t||!n)return t&&a.q(e)===a.q(t)?`start`:null;let[r,i]=m(t,n),o=a.q(e);return o===a.q(r)?`start`:o===a.q(i)?`end`:o>a.q(r)&&o<a.q(i)?`middle`:null}function oe(e,t,n){let[r,i]=m(e,t);for(let e=a.q(r);e<=a.q(i);e++)if(n(f(a.U({year:1970,month:1,day:1},e))))return!0;return!1}var h=`data-date`,g=12;function _(e,t){return e!==null&&t!==null&&a.q(e)===a.q(t)}function v(e,c){let{mode:v=`single`,value:b,defaultValue:le=null,onValueChange:ue,min:S,max:de,isDateUnavailable:C,locale:fe,zone:pe,firstDayOfWeek:me,months:w=1,weekNumbers:T=!1,showOutsideDays:he=!0,focusedDate:ge,defaultFocusedDate:_e,onFocusedDateChange:ve,disabled:E=!1,readOnly:ye=!1,autoFocus:be=!1,label:D,previousLabel:xe=`Previous`,nextLabel:Se=`Next`,props:Ce,...O}=e,k=ee.n({locale:fe,zone:pe}),{locale:A}=k,j=d(o.N(k.zone)),M=me??a.S(A).firstDay,N=e=>se(A).format(e),P=v===`range`,F=(0,l.useMemo)(()=>({min:d(S),max:d(de)}),[S,de]),[I,L]=s.a({value:b,defaultValue:le,onChange:(e,t)=>{ue?.(e,P?t:{...t,...o.x(e,k.zone)})},interaction:{component:`calendar`,type:`valueChange`,content:[`value`]}}),R=P?null:d(I),z=P&&I?I:null,[B,V]=(0,l.useState)(null),[we,H]=(0,l.useState)(null),Te=f(p(d(_e)??R??d(z?.start)??j,F)),[Ee,U]=r.i({value:ge,defaultValue:Te,onChange:ve}),W=d(Ee)??j,[G,De]=(0,l.useState)(`day`),K=s.i(`calendar`),[q,Oe]=(0,l.useState)(()=>y(W)),J=q;(y(W)<q||y(W)>q+w-1)&&(J=y(W)<q?y(W):y(W)-w+1,Oe(J));let ke=(0,l.useRef)(null),Ae=(0,l.useCallback)(e=>{ke.current=e,t.d(c,e)},[c]),Y=(0,l.useRef)(be),je=i.t(`calendar`);(0,l.useEffect)(()=>{Y.current&&(Y.current=!1,ke.current?.querySelector(`[${h}="${Ee}"]`)?.focus())});let Me=e=>ie(e,F),Ne=e=>C?.(f(e))??!1,X=(e,t,n)=>{Y.current=n,U(f(p(e,F)),{reason:t})},Pe=(e,t)=>{if(E||ye||Me(e)||Ne(e))return;if(X(e,`select`,!1),!P){L(f(e),{reason:`select`,event:t});return}if(!B){V(e),H(e);return}let[n,r]=m(B,e);V(null),H(null),!(C&&oe(n,r,C))&&L({start:f(n),end:f(r)},{reason:`select`,event:t})},Fe=r.a(e=>{if(E)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),Pe(W,e);return}if(e.key===`Escape`&&B){e.preventDefault(),e.stopPropagation(),V(null),H(null);return}let n=re(W,e.key,e.shiftKey,{rtl:t.g(e.currentTarget),firstDay:M});n&&(e.preventDefault(),X(n,`keyboard`,!0),B&&H(p(n,F)))}),Ie=e=>{let t=a.W(W,e*(G===`day`?w:G===`month`?12:144));G===`day`&&Oe(J+e*w),X(t,`navigate`,!1),K(`pageChange`,f(t),{reason:e===1?`next`:`previous`,content:[`value`]})},Z=Array.from({length:w},(e,t)=>({year:Math.floor((J+t)/12),month:(J+t)%12+1,day:1})),Q=`${je}-title`,Le=G===`day`&&w>1,Re=G===`day`?Z.map(e=>a.t(f(e),{locale:A,month:`long`,year:`numeric`})).join(` – `):G===`month`?N(W.year):`${N(x(W.year))} – ${N(x(W.year)+g-1)}`,ze=a.C(A,`short`),Be=ze.some(e=>e.length>4)?a.C(A,`narrow`):ze,Ve=a.C(A,`long`),He=Array.from({length:7},(e,t)=>(M+t)%7),Ue=B?we??B:null,We=B??d(z?.start),$=B?Ue:d(z?.end),Ge=e=>{let t=d(e.date),r=Me(t),i=Ne(t),o=P?ae(t,We,$):null,s=P?o!==null:_(t,R),c=_(t,j),ee=_(t,W);return e.outside&&(!he||w>1)?(0,u.jsx)(n.default,{tag:`td`,component:`calendar.cell`,display:`table-cell`,props:{role:`gridcell`}},e.date):(0,u.jsx)(n.default,{tag:`td`,component:`calendar.cell`,display:`table-cell`,p:0,py:.5,variant:{rangeStart:o===`start`&&$!==null&&!_(We,$),rangeEnd:o===`end`,rangeMiddle:o===`middle`},props:{role:`gridcell`,"aria-selected":s||void 0,"aria-disabled":r||E||void 0,"aria-current":c?`date`:void 0},children:(0,u.jsx)(n.default,{component:`calendar.day`,display:`flex`,ai:`center`,jc:`center`,width:9,height:9,mx:`auto`,borderRadius:999,fontSize:14,css:{fontVariantNumeric:`tabular-nums`},variant:{today:c,selected:s&&o!==`middle`,outside:e.outside,blocked:r||E,unavailable:i},props:{[h]:e.date,tabIndex:ee&&!r&&!E?0:-1,"aria-label":a.t(e.date,{locale:A,dateStyle:`full`}),onClick:e=>Pe(t,e),onPointerEnter:()=>B&&H(t)},children:N(e.day)})},e.date)},Ke=(e,n,r,i,a,o)=>{let s=t.g(e.currentTarget),c={ArrowUp:-r,ArrowDown:r,[s?`ArrowRight`:`ArrowLeft`]:-1,[s?`ArrowLeft`:`ArrowRight`]:1};e.key===`Enter`||e.key===` `?(e.preventDefault(),i(o)):e.key in c&&(e.preventDefault(),a(Math.max(0,Math.min(n-1,o+c[e.key])),e.currentTarget.parentElement))},qe=()=>{let e=a.x(A,`short`),t=x(W.year),r=G===`month`?e.map((e,t)=>({label:e,active:t+1===W.month,current:j.year===W.year&&j.month===t+1})):Array.from({length:g},(e,n)=>({label:N(t+n),active:t+n===W.year,current:j.year===t+n})),i=e=>G===`month`?{...W,month:e+1,day:1}:{...W,year:t+e,day:1},o=e=>{let t=i(e);Y.current=!0,U(f(p({...t,day:Math.min(W.day,28)},F)),{reason:`navigate`}),De(G===`year`?`month`:`day`),K(`viewChange`,G===`year`?`month`:`day`,{reason:`zoom-in`})},s=(e,t)=>{let n=i(e);U(f({...n,day:Math.min(W.day,28)}),{reason:`keyboard`}),t?.querySelector(`[data-zoom="${e}"]`)?.focus()};return(0,u.jsx)(n.default,{display:`grid`,gridTemplateColumns:3,gap:1,props:{role:`group`,"aria-labelledby":Q},children:r.map((e,t)=>(0,u.jsx)(n.default,{tag:`button`,component:`calendar.zoomItem`,variant:{selected:e.active,today:e.current},py:2,borderRadius:2,disabled:E,props:{type:`button`,"data-zoom":t,tabIndex:e.active?0:-1,"aria-pressed":e.active,onClick:()=>o(t),onKeyDown:e=>Ke(e,r.length,3,o,s,t)},children:e.label},e.label))})},Je=(e,t)=>{let r=ne(e.year,e.month,M),i=a.t(f(e),{locale:A,month:`long`,year:`numeric`});return(0,u.jsxs)(n.default,{tag:`table`,css:{borderCollapse:`collapse`,tableLayout:`fixed`},props:{role:`grid`,"aria-label":w>1?i:void 0,"aria-labelledby":w>1?void 0:Q,"aria-readonly":ye||void 0,onKeyDown:Fe},children:[(0,u.jsx)(n.default,{tag:`thead`,display:`table-header-group`,children:(0,u.jsxs)(n.default,{tag:`tr`,display:`table-row`,children:[T&&(0,u.jsx)(n.default,{tag:`th`,display:`table-cell`,component:`calendar.weekday`,props:{"aria-hidden":!0}}),He.map(e=>(0,u.jsx)(n.default,{tag:`th`,display:`table-cell`,component:`calendar.weekday`,pb:1,fontSize:12,props:{scope:`col`,abbr:Ve[e]},children:Be[e]},e))]})}),(0,u.jsx)(n.default,{tag:`tbody`,display:`table-row-group`,children:r.map(e=>(0,u.jsxs)(n.default,{tag:`tr`,display:`table-row`,children:[T&&(0,u.jsx)(n.default,{tag:`td`,display:`table-cell`,component:`calendar.weekNumber`,fontSize:11,textAlign:`center`,props:{role:`rowheader`},children:N(e.week)}),e.days.map(Ge)]},e.days[0].date))})]},t)};return(0,u.jsxs)(n.default,{ref:Ae,component:`calendar`,display:`inline-block`,...O,variant:[O.variant,{disabled:E}],props:{role:D?`group`:void 0,"aria-label":D,...Ce,onPointerLeave:()=>B&&H(B)},children:[(0,u.jsxs)(n.default,{position:`relative`,minHeight:8,mb:2,children:[(0,u.jsx)(n.default,{tag:`button`,component:`calendar.nav`,position:`absolute`,top:0,insetStart:0,display:`inline-flex`,ai:`center`,jc:`center`,width:8,height:8,borderRadius:2,disabled:E,props:{type:`button`,"aria-label":xe,onClick:()=>Ie(-1)},children:(0,u.jsx)(ce,{direction:-1})}),Le?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(n.default,{display:`flex`,gap:4,children:Z.map(e=>(0,u.jsx)(n.default,{flex1:!0,textAlign:`center`,py:1.5,fontSize:14,fontWeight:600,props:{"aria-hidden":!0},children:a.t(f(e),{locale:A,month:`long`,year:`numeric`})},f(e)))}),(0,u.jsx)(te.default,{id:Q,props:{"aria-live":`polite`},children:Re})]}):(0,u.jsx)(n.default,{display:`flex`,jc:`center`,px:9,children:(0,u.jsx)(n.default,{tag:`button`,component:`calendar.title`,py:1.5,px:3,borderRadius:2,fontSize:14,id:Q,disabled:E||G===`year`,props:{type:`button`,"aria-live":`polite`,onClick:()=>{De(G===`day`?`month`:`year`),K(`viewChange`,G===`day`?`month`:`year`,{reason:`zoom-out`})}},children:Re})}),(0,u.jsx)(n.default,{tag:`button`,component:`calendar.nav`,position:`absolute`,top:0,insetEnd:0,display:`inline-flex`,ai:`center`,jc:`center`,width:8,height:8,borderRadius:2,disabled:E,props:{type:`button`,"aria-label":Se,onClick:()=>Ie(1)},children:(0,u.jsx)(ce,{direction:1})})]}),G===`day`?(0,u.jsx)(n.default,{display:`flex`,gap:4,ai:`start`,children:Z.map(Je)}):qe()]})}function y(e){return e.year*12+e.month-1}var b=new Map;function se(e){let t=b.get(e);return t||(t=new Intl.NumberFormat(e,{useGrouping:!1}),b.set(e,t)),t}function x(e){return e-(e%g+g)%g}function ce({direction:e}){return(0,u.jsx)(c.Svg,{viewBox:`0 0 16 16`,width:`1rem`,height:`1rem`,rtl:{flip:`xAxis`},props:{fill:`none`},children:(0,u.jsx)(c.Path,{d:e===1?`M6 3l5 5-5 5`:`M10 3L5 8l5 5`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`})})}var le=e.f(v,`Calendar`);exports.default=le;
1
+ "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../react-shared.cjs"),t=require("../platform.cjs"),n=require("../box.cjs"),r=require("../behavior.cjs"),i=require("../identity.cjs"),a=require("../dates.cjs"),o=require("../date-math.cjs"),s=require("../reporting.cjs"),c=require("./svg.cjs"),ee=require("../date-environment.cjs"),te=require("./visuallyHidden.cjs");let l=require("react"),u=require("react/jsx-runtime");function d(e){let t=a.f(e);return t&&t.kind===`date`?t.fields:null}function f(e){return a.w({...e,...a.V})}function ne(e,t,n){let r={year:e,month:t,day:1},i=a.U(r,-a.Q(a.G(r)-n,7));return Array.from({length:6},(e,r)=>{let o=Array.from({length:7},(e,n)=>{let o=a.U(i,r*7+n);return{date:f(o),day:o.day,outside:o.month!==t}}),s=a.U(i,r*7+a.Q(4-n,7));return{week:a.Z(s).week,days:o}})}function re(e,t,n,r){let i=r.rtl?`ArrowLeft`:`ArrowRight`,o=r.rtl?`ArrowRight`:`ArrowLeft`;switch(t){case i:return a.U(e,1);case o:return a.U(e,-1);case`ArrowDown`:return a.U(e,7);case`ArrowUp`:return a.U(e,-7);case`Home`:return a.U(e,-a.Q(a.G(e)-r.firstDay,7));case`End`:return a.U(e,6-a.Q(a.G(e)-r.firstDay,7));case`PageUp`:return a.W(e,n?-12:-1);case`PageDown`:return a.W(e,n?12:1);default:return null}}function ie(e,t){return t.min!=null&&a.q(e)<a.q(t.min)||t.max!=null&&a.q(e)>a.q(t.max)}function p(e,t){return t.min&&a.q(e)<a.q(t.min)?t.min:t.max&&a.q(e)>a.q(t.max)?t.max:e}function m(e,t){return a.q(e)<=a.q(t)?[e,t]:[t,e]}function ae(e,t,n){if(!t||!n)return t&&a.q(e)===a.q(t)?`start`:null;let[r,i]=m(t,n),o=a.q(e);return o===a.q(r)?`start`:o===a.q(i)?`end`:o>a.q(r)&&o<a.q(i)?`middle`:null}function oe(e,t,n){let[r,i]=m(e,t);for(let e=a.q(r);e<=a.q(i);e++)if(n(f(a.U({year:1970,month:1,day:1},e))))return!0;return!1}var h=`data-date`,g=12;function _(e,t){return e!==null&&t!==null&&a.q(e)===a.q(t)}function v(e,c){let{mode:v=`single`,value:b,defaultValue:le=null,onValueChange:ue,min:S,max:de,isDateUnavailable:C,locale:fe,zone:pe,firstDayOfWeek:me,months:w=1,weekNumbers:T=!1,showOutsideDays:he=!0,focusedDate:ge,defaultFocusedDate:_e,onFocusedDateChange:ve,disabled:E=!1,readOnly:ye=!1,autoFocus:be=!1,label:D,previousLabel:xe=`Previous`,nextLabel:Se=`Next`,props:Ce,...O}=e,k=ee.n({locale:fe,zone:pe}),{locale:A}=k,j=d(o.N(k.zone)),M=me??a.S(A).firstDay,N=e=>se(A).format(e),P=v===`range`,F=(0,l.useMemo)(()=>({min:d(S),max:d(de)}),[S,de]),[I,L]=s.a({value:b,defaultValue:le,onChange:(e,t)=>{ue?.(e,P?t:{...t,...o.x(e,k.zone)})},interaction:{component:`calendar`,type:`valueChange`,content:[`value`]}}),R=P?null:d(I),z=P&&I?I:null,[B,V]=(0,l.useState)(null),[we,H]=(0,l.useState)(null),Te=f(p(d(_e)??R??d(z?.start)??j,F)),[Ee,U]=r.i({value:ge,defaultValue:Te,onChange:ve}),W=d(Ee)??j,[G,De]=(0,l.useState)(`day`),K=s.i(`calendar`),[q,Oe]=(0,l.useState)(()=>y(W)),J=q;(y(W)<q||y(W)>q+w-1)&&(J=y(W)<q?y(W):y(W)-w+1,Oe(J));let ke=(0,l.useRef)(null),Ae=(0,l.useCallback)(e=>{ke.current=e,t.d(c,e)},[c]),Y=(0,l.useRef)(be),je=i.t(`calendar`);(0,l.useEffect)(()=>{Y.current&&(Y.current=!1,ke.current?.querySelector(`[${h}="${Ee}"]`)?.focus())});let Me=e=>ie(e,F),Ne=e=>C?.(f(e))??!1,X=(e,t,n)=>{Y.current=n,U(f(p(e,F)),{reason:t})},Pe=(e,t)=>{if(E||ye||Me(e)||Ne(e))return;if(X(e,`select`,!1),!P){L(f(e),{reason:`select`,event:t});return}if(!B){V(e),H(e);return}let[n,r]=m(B,e);V(null),H(null),!(C&&oe(n,r,C))&&L({start:f(n),end:f(r)},{reason:`select`,event:t})},Fe=r.a(e=>{if(E)return;if(e.key===`Enter`||e.key===` `){e.preventDefault(),Pe(W,e);return}if(e.key===`Escape`&&B){e.preventDefault(),e.stopPropagation(),V(null),H(null);return}let n=re(W,e.key,e.shiftKey,{rtl:t._(e.currentTarget),firstDay:M});n&&(e.preventDefault(),X(n,`keyboard`,!0),B&&H(p(n,F)))}),Ie=e=>{let t=a.W(W,e*(G===`day`?w:G===`month`?12:144));G===`day`&&Oe(J+e*w),X(t,`navigate`,!1),K(`pageChange`,f(t),{reason:e===1?`next`:`previous`,content:[`value`]})},Z=Array.from({length:w},(e,t)=>({year:Math.floor((J+t)/12),month:(J+t)%12+1,day:1})),Q=`${je}-title`,Le=G===`day`&&w>1,Re=G===`day`?Z.map(e=>a.t(f(e),{locale:A,month:`long`,year:`numeric`})).join(` – `):G===`month`?N(W.year):`${N(x(W.year))} – ${N(x(W.year)+g-1)}`,ze=a.C(A,`short`),Be=ze.some(e=>e.length>4)?a.C(A,`narrow`):ze,Ve=a.C(A,`long`),He=Array.from({length:7},(e,t)=>(M+t)%7),Ue=B?we??B:null,We=B??d(z?.start),$=B?Ue:d(z?.end),Ge=e=>{let t=d(e.date),r=Me(t),i=Ne(t),o=P?ae(t,We,$):null,s=P?o!==null:_(t,R),c=_(t,j),ee=_(t,W);return e.outside&&(!he||w>1)?(0,u.jsx)(n.default,{tag:`td`,component:`calendar.cell`,display:`table-cell`,props:{role:`gridcell`}},e.date):(0,u.jsx)(n.default,{tag:`td`,component:`calendar.cell`,display:`table-cell`,p:0,py:.5,variant:{rangeStart:o===`start`&&$!==null&&!_(We,$),rangeEnd:o===`end`,rangeMiddle:o===`middle`},props:{role:`gridcell`,"aria-selected":s||void 0,"aria-disabled":r||E||void 0,"aria-current":c?`date`:void 0},children:(0,u.jsx)(n.default,{component:`calendar.day`,display:`flex`,ai:`center`,jc:`center`,height:`control`,aspectRatio:`square`,mx:`auto`,borderRadius:999,fontSize:`control`,css:{fontVariantNumeric:`tabular-nums`},variant:{today:c,selected:s&&o!==`middle`,outside:e.outside,blocked:r||E,unavailable:i},props:{[h]:e.date,tabIndex:ee&&!r&&!E?0:-1,"aria-label":a.t(e.date,{locale:A,dateStyle:`full`}),onClick:e=>Pe(t,e),onPointerEnter:()=>B&&H(t)},children:N(e.day)})},e.date)},Ke=(e,n,r,i,a,o)=>{let s=t._(e.currentTarget),c={ArrowUp:-r,ArrowDown:r,[s?`ArrowRight`:`ArrowLeft`]:-1,[s?`ArrowLeft`:`ArrowRight`]:1};e.key===`Enter`||e.key===` `?(e.preventDefault(),i(o)):e.key in c&&(e.preventDefault(),a(Math.max(0,Math.min(n-1,o+c[e.key])),e.currentTarget.parentElement))},qe=()=>{let e=a.x(A,`short`),t=x(W.year),r=G===`month`?e.map((e,t)=>({label:e,active:t+1===W.month,current:j.year===W.year&&j.month===t+1})):Array.from({length:g},(e,n)=>({label:N(t+n),active:t+n===W.year,current:j.year===t+n})),i=e=>G===`month`?{...W,month:e+1,day:1}:{...W,year:t+e,day:1},o=e=>{let t=i(e);Y.current=!0,U(f(p({...t,day:Math.min(W.day,28)},F)),{reason:`navigate`}),De(G===`year`?`month`:`day`),K(`viewChange`,G===`year`?`month`:`day`,{reason:`zoom-in`})},s=(e,t)=>{let n=i(e);U(f({...n,day:Math.min(W.day,28)}),{reason:`keyboard`}),t?.querySelector(`[data-zoom="${e}"]`)?.focus()};return(0,u.jsx)(n.default,{display:`grid`,gridTemplateColumns:3,gap:1,props:{role:`group`,"aria-labelledby":Q},children:r.map((e,t)=>(0,u.jsx)(n.default,{tag:`button`,component:`calendar.zoomItem`,variant:{selected:e.active,today:e.current},minHeight:`control`,fontSize:`control`,borderRadius:2,disabled:E,props:{type:`button`,"data-zoom":t,tabIndex:e.active?0:-1,"aria-pressed":e.active,onClick:()=>o(t),onKeyDown:e=>Ke(e,r.length,3,o,s,t)},children:e.label},e.label))})},Je=(e,t)=>{let r=ne(e.year,e.month,M),i=a.t(f(e),{locale:A,month:`long`,year:`numeric`});return(0,u.jsxs)(n.default,{tag:`table`,css:{borderCollapse:`collapse`,tableLayout:`fixed`},props:{role:`grid`,"aria-label":w>1?i:void 0,"aria-labelledby":w>1?void 0:Q,"aria-readonly":ye||void 0,onKeyDown:Fe},children:[(0,u.jsx)(n.default,{tag:`thead`,display:`table-header-group`,children:(0,u.jsxs)(n.default,{tag:`tr`,display:`table-row`,children:[T&&(0,u.jsx)(n.default,{tag:`th`,display:`table-cell`,component:`calendar.weekday`,props:{"aria-hidden":!0}}),He.map(e=>(0,u.jsx)(n.default,{tag:`th`,display:`table-cell`,component:`calendar.weekday`,pb:1,fontSize:12,props:{scope:`col`,abbr:Ve[e]},children:Be[e]},e))]})}),(0,u.jsx)(n.default,{tag:`tbody`,display:`table-row-group`,children:r.map(e=>(0,u.jsxs)(n.default,{tag:`tr`,display:`table-row`,children:[T&&(0,u.jsx)(n.default,{tag:`td`,display:`table-cell`,component:`calendar.weekNumber`,fontSize:11,textAlign:`center`,props:{role:`rowheader`},children:N(e.week)}),e.days.map(Ge)]},e.days[0].date))})]},t)};return(0,u.jsxs)(n.default,{ref:Ae,component:`calendar`,display:`inline-block`,...O,variant:[O.variant,{disabled:E}],props:{role:D?`group`:void 0,"aria-label":D,...Ce,onPointerLeave:()=>B&&H(B)},children:[(0,u.jsxs)(n.default,{position:`relative`,minHeight:`control`,mb:2,children:[(0,u.jsx)(n.default,{tag:`button`,component:`calendar.nav`,position:`absolute`,top:0,insetStart:0,display:`inline-flex`,ai:`center`,jc:`center`,height:`control`,aspectRatio:`square`,borderRadius:2,disabled:E,props:{type:`button`,"aria-label":xe,onClick:()=>Ie(-1)},children:(0,u.jsx)(ce,{direction:-1})}),Le?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(n.default,{display:`flex`,gap:4,children:Z.map(e=>(0,u.jsx)(n.default,{flex1:!0,textAlign:`center`,py:1.5,fontSize:14,fontWeight:600,props:{"aria-hidden":!0},children:a.t(f(e),{locale:A,month:`long`,year:`numeric`})},f(e)))}),(0,u.jsx)(te.default,{id:Q,props:{"aria-live":`polite`},children:Re})]}):(0,u.jsx)(n.default,{display:`flex`,jc:`center`,px:13,children:(0,u.jsx)(n.default,{tag:`button`,component:`calendar.title`,minHeight:`control`,px:3,borderRadius:2,fontSize:`control`,id:Q,disabled:E||G===`year`,props:{type:`button`,"aria-live":`polite`,onClick:()=>{De(G===`day`?`month`:`year`),K(`viewChange`,G===`day`?`month`:`year`,{reason:`zoom-out`})}},children:Re})}),(0,u.jsx)(n.default,{tag:`button`,component:`calendar.nav`,position:`absolute`,top:0,insetEnd:0,display:`inline-flex`,ai:`center`,jc:`center`,height:`control`,aspectRatio:`square`,borderRadius:2,disabled:E,props:{type:`button`,"aria-label":Se,onClick:()=>Ie(1)},children:(0,u.jsx)(ce,{direction:1})})]}),G===`day`?(0,u.jsx)(n.default,{display:`flex`,gap:4,ai:`start`,children:Z.map(Je)}):qe()]})}function y(e){return e.year*12+e.month-1}var b=new Map;function se(e){let t=b.get(e);return t||(t=new Intl.NumberFormat(e,{useGrouping:!1}),b.set(e,t)),t}function x(e){return e-(e%g+g)%g}function ce({direction:e}){return(0,u.jsx)(c.Svg,{viewBox:`0 0 16 16`,width:`1rem`,height:`1rem`,rtl:{flip:`xAxis`},props:{fill:`none`},children:(0,u.jsx)(c.Path,{d:e===1?`M6 3l5 5-5 5`:`M10 3L5 8l5 5`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`})})}var le=e.f(v,`Calendar`);exports.default=le;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { f as e } from "../react-shared.mjs";
3
- import { d as t, g as n } from "../platform.mjs";
3
+ import { _ as t, d as n } from "../platform.mjs";
4
4
  import r from "../box.mjs";
5
5
  import { a as i, i as a } from "../behavior.mjs";
6
6
  import { t as o } from "../identity.mjs";
@@ -115,7 +115,7 @@ function Ce(e, c) {
115
115
  }), W = y(Be) ?? M, [G, Ve] = g("day"), K = se("calendar"), [q, He] = g(() => T(W)), J = q;
116
116
  (T(W) < q || T(W) > q + E - 1) && (J = T(W) < q ? T(W) : T(W) - E + 1, He(J));
117
117
  let Ue = he(null), We = fe((e) => {
118
- Ue.current = e, t(c, e);
118
+ Ue.current = e, n(c, e);
119
119
  }, [c]), Y = he(je), Ge = o("calendar");
120
120
  pe(() => {
121
121
  Y.current && (Y.current = !1, Ue.current?.querySelector(`[${Se}="${Be}"]`)?.focus());
@@ -153,11 +153,11 @@ function Ce(e, c) {
153
153
  e.preventDefault(), e.stopPropagation(), V(null), H(null);
154
154
  return;
155
155
  }
156
- let t = ve(W, e.key, e.shiftKey, {
157
- rtl: n(e.currentTarget),
156
+ let n = ve(W, e.key, e.shiftKey, {
157
+ rtl: t(e.currentTarget),
158
158
  firstDay: N
159
159
  });
160
- t && (e.preventDefault(), X(t, "keyboard", !0), B && H(x(t, I)));
160
+ n && (e.preventDefault(), X(n, "keyboard", !0), B && H(x(n, I)));
161
161
  }), Xe = (e) => {
162
162
  let t = d(W, e * (G === "day" ? E : G === "month" ? 12 : 144));
163
163
  G === "day" && He(J + e * E), X(t, "navigate", !1), K("pageChange", b(t), {
@@ -201,11 +201,11 @@ function Ce(e, c) {
201
201
  display: "flex",
202
202
  ai: "center",
203
203
  jc: "center",
204
- width: 9,
205
- height: 9,
204
+ height: "control",
205
+ aspectRatio: "square",
206
206
  mx: "auto",
207
207
  borderRadius: 999,
208
- fontSize: 14,
208
+ fontSize: "control",
209
209
  css: { fontVariantNumeric: "tabular-nums" },
210
210
  variant: {
211
211
  today: s,
@@ -227,14 +227,14 @@ function Ce(e, c) {
227
227
  children: P(e.day)
228
228
  })
229
229
  }, e.date);
230
- }, ot = (e, t, r, i, a, o) => {
231
- let s = n(e.currentTarget), c = {
230
+ }, ot = (e, n, r, i, a, o) => {
231
+ let s = t(e.currentTarget), c = {
232
232
  ArrowUp: -r,
233
233
  ArrowDown: r,
234
234
  [s ? "ArrowRight" : "ArrowLeft"]: -1,
235
235
  [s ? "ArrowLeft" : "ArrowRight"]: 1
236
236
  };
237
- e.key === "Enter" || e.key === " " ? (e.preventDefault(), i(o)) : e.key in c && (e.preventDefault(), a(Math.max(0, Math.min(t - 1, o + c[e.key])), e.currentTarget.parentElement));
237
+ e.key === "Enter" || e.key === " " ? (e.preventDefault(), i(o)) : e.key in c && (e.preventDefault(), a(Math.max(0, Math.min(n - 1, o + c[e.key])), e.currentTarget.parentElement));
238
238
  }, st = () => {
239
239
  let e = re(j, "short"), t = D(W.year), n = G === "month" ? e.map((e, t) => ({
240
240
  label: e,
@@ -280,7 +280,8 @@ function Ce(e, c) {
280
280
  selected: e.active,
281
281
  today: e.current
282
282
  },
283
- py: 2,
283
+ minHeight: "control",
284
+ fontSize: "control",
284
285
  borderRadius: 2,
285
286
  disabled: k,
286
287
  props: {
@@ -370,7 +371,7 @@ function Ce(e, c) {
370
371
  },
371
372
  children: [/* @__PURE__ */ v(r, {
372
373
  position: "relative",
373
- minHeight: 8,
374
+ minHeight: "control",
374
375
  mb: 2,
375
376
  children: [
376
377
  /* @__PURE__ */ _(r, {
@@ -382,8 +383,8 @@ function Ce(e, c) {
382
383
  display: "inline-flex",
383
384
  ai: "center",
384
385
  jc: "center",
385
- width: 8,
386
- height: 8,
386
+ height: "control",
387
+ aspectRatio: "square",
387
388
  borderRadius: 2,
388
389
  disabled: k,
389
390
  props: {
@@ -416,14 +417,14 @@ function Ce(e, c) {
416
417
  })] }) : /* @__PURE__ */ _(r, {
417
418
  display: "flex",
418
419
  jc: "center",
419
- px: 9,
420
+ px: 13,
420
421
  children: /* @__PURE__ */ _(r, {
421
422
  tag: "button",
422
423
  component: "calendar.title",
423
- py: 1.5,
424
+ minHeight: "control",
424
425
  px: 3,
425
426
  borderRadius: 2,
426
- fontSize: 14,
427
+ fontSize: "control",
427
428
  id: Q,
428
429
  disabled: k || G === "year",
429
430
  props: {
@@ -445,8 +446,8 @@ function Ce(e, c) {
445
446
  display: "inline-flex",
446
447
  ai: "center",
447
448
  jc: "center",
448
- width: 8,
449
- height: 8,
449
+ height: "control",
450
+ aspectRatio: "square",
450
451
  borderRadius: 2,
451
452
  disabled: k,
452
453
  props: {
@@ -1 +1 @@
1
- "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../react-shared.cjs"),t=require("../platform.cjs"),n=require("../box.cjs"),r=require("../behavior.cjs"),i=require("../dashboardSchema.cjs"),a=require("../reporting.cjs"),o=require("./svg.cjs"),s=require("./visuallyHidden.cjs");let c=require("react"),l=require("react/jsx-runtime");var u;(function(e){let t=e.VERSION=1,n=e.MIN_COLUMNS=1,r=e.MAX_COLUMNS=24;function a(e,t,n){return Math.min(Math.max(e,t),n)}function o(e,t){return typeof e==`number`&&Number.isFinite(e)?Math.round(e):t}function s(e,t){return e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y}e.overlaps=s;function c(e,t){return e.find(e=>e.id!==t.id&&s(e,t))}function l(e,t){let n=Math.min(e.maxW??t,t),r=a(o(e.w,1),Math.max(1,Math.min(e.minW??1,n)),Math.max(1,n)),i=a(o(e.h,1),Math.max(1,e.minH??1),Math.max(1,e.maxH??2**53-1));return{...e,w:r,h:i,x:a(o(e.x,0),0,t-r),y:Math.max(o(e.y,0),0)}}function u(e,t){return e.y-t.y||e.x-t.x}function d(e,t){let i=a(o(t,12),n,r),s=e.map(e=>l(e,i)),d=e=>+!e.fixed,f=[...s].sort((e,t)=>d(e)-d(t)||u(e,t)),p=[];for(let e of f){if(e.fixed){p.push(e);continue}let t={...e};for(;t.y>0&&!c(p,{...t,y:t.y-1});)t.y--;let n=c(p,t);for(;n;)t.y=n.y+n.h,n=c(p,t);p.push(t)}return p.sort(u)}e.resolve=d;function f(e){let i=a(o(e.columns,12),n,r);return{version:t,columns:i,items:d(e.items,i)}}e.normalize=f;function p(e,t){return e.items.find(e=>e.id===t)}e.itemOf=p;function m(e){return new Map(e.items.map((e,t)=>[e.id,t]))}e.ranks=m;function h(e,t){let n=n=>!s(t,n)&&!e.some(e=>e.id!==n.id&&e.id!==t.id&&s(e,n));return e.map(e=>{if(e.id===t.id)return t;if(e.fixed===!0||!s(e,t))return e;let r={...e,y:Math.max(t.y-e.h,0)};return n(r)?r:{...e,y:t.y+t.h}})}function g(e,t,i,s){let c=p(e,t);if(!c||c.fixed)return e;let u=l({...c,x:i,y:s},a(o(e.columns,12),n,r));return f({...e,items:h(e.items,u)})}e.moveTo=g;function _(e,t,n,r){let i=p(e,t);if(!i||i.fixed)return e;let a=e.items.map(e=>e.id===t?{...e,w:n,h:r}:e);return f({...e,items:a})}e.resizeTo=_;function v(e,t){let n=e.items.reduce((e,t)=>Math.max(e,t.y+t.h),0);return f({...e,items:[...e.items,{x:0,y:n,...t}]})}e.add=v;function y(e,t){return f({...e,items:e.items.filter(e=>e.id!==t)})}e.remove=y;function b(e,i){let s=a(o(i,12),n,r);if(s===e.columns)return f(e);let c=s/e.columns,l=e=>e===void 0?void 0:a(Math.max(1,Math.round(e*c)),1,s),u=e.items.map(e=>{let t=a(Math.max(1,Math.round(e.w*c)),1,s);return{...e,w:t,x:a(Math.floor(e.x*c),0,s-t),minW:l(e.minW),maxW:l(e.maxW)}});return f({version:t,columns:s,items:u})}e.project=b;function x(e,t){return e===t?!0:e.columns!==t.columns||e.items.length!==t.items.length?!1:e.items.every((e,n)=>{let r=t.items[n];return e.id===r.id&&e.x===r.x&&e.y===r.y&&e.w===r.w&&e.h===r.h})}e.same=x;function S(e,t,n){return{columns:n.x>0?Math.round(e/n.x):0,rows:n.y>0?Math.round(t/n.y):0}}e.cellsMoved=S;function C(e){return typeof e==`string`&&e.length>0}function w(e){return typeof e==`number`&&Number.isFinite(e)}function T(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e)){n.push({code:`invalid-item`,path:t,message:`A layout item has to be an object.`});return}let r=e;if(!C(r.id)){n.push({code:`invalid-item`,path:`${t}.id`,message:`A layout item needs an id naming the widget it places.`});return}if(!w(r.x)||!w(r.y)||!w(r.w)||!w(r.h)){n.push({code:`invalid-item`,path:t,message:`Item "${r.id}" needs numeric x, y, w and h.`});return}let i=[`minW`,`minH`,`maxW`,`maxH`].reduce((e,t)=>(w(r[t])&&(e[t]=Math.round(r[t])),e),{});return{id:r.id,x:Math.round(r.x),y:Math.round(r.y),w:Math.round(r.w),h:Math.round(r.h),...i,...r.fixed===!0?{fixed:!0}:{}}}function E(e,i=12){let o=[],s={version:t,columns:i,items:[]};if(typeof e!=`object`||!e||Array.isArray(e))return o.push({code:`not-an-object`,path:``,message:`A layout has to be an object.`}),{layout:f(s),issues:o};let c=e;c.version!==t&&o.push({code:`version`,path:`version`,message:`Layout version ${String(c.version)} was read as version ${t}.`});let l=w(c.columns)?a(Math.round(c.columns),n,r):i;if(w(c.columns)||o.push({code:`columns`,path:`columns`,message:`No column count, so the layout was read in ${i}.`}),!Array.isArray(c.items))return o.push({code:`items`,path:`items`,message:`A layout needs an items array.`}),{layout:f({...s,columns:l}),issues:o};let u=new Set,d=c.items.reduce((e,t,n)=>{let r=T(t,`items.${n}`,o);return r?u.has(r.id)?(o.push({code:`duplicate-id`,path:`items.${n}.id`,message:`Two items are called "${r.id}"; the second was dropped.`}),e):(u.add(r.id),e.push(r),e):e},[]);return{layout:f({version:t,columns:l,items:d}),issues:o}}e.parse=E,e.SCHEMA=i.t})(u||={});var d=u,f=[`xs`,`sm`,`md`,`lg`,`xl`,`xxl`],p=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`],m=(0,c.createContext)(null);function h(e,t,n){return Math.min(Math.max(e,t),n)}function g(e){if(typeof e==`number`)return[{count:h(Math.round(e),d.MIN_COLUMNS,d.MAX_COLUMNS)}];let t=f.filter(t=>typeof e[t]==`number`).map(t=>({size:t,count:h(Math.round(e[t]),d.MIN_COLUMNS,d.MAX_COLUMNS)}));return t.length>0?t:[{count:12}]}function _(e){return{gridColumnStart:e.x+1,gridColumnEnd:e.x+1+e.w,gridRowStart:e.y+1,gridRowEnd:e.y+1+e.h}}function v(e){return`max${e[0].toUpperCase()}${e.slice(1)}`}function y(e,t){let n=t?-1:1;if(e===`ArrowLeft`)return{x:-n,y:0};if(e===`ArrowRight`)return{x:n,y:0};if(e===`ArrowUp`)return{x:0,y:-1};if(e===`ArrowDown`)return{x:0,y:1}}function b(e){return`column ${e.x+1}, row ${e.y+1}`}function x(e){return`${e.w} ${e.w===1?`column`:`columns`} by ${e.h} ${e.h===1?`row`:`rows`}`}function S(e,i){let{children:o,layout:u,defaultLayout:p,onLayoutChange:h,onLayoutCommit:S,columns:C={xs:1,md:6,xxl:12},rowHeight:w=24,editable:T=!1,label:E,labelledBy:D,props:O,...k}=e,A=(0,c.useRef)(null),j=(0,c.useCallback)(e=>{A.current=e,t.d(i,e)},[i]),[M,N]=(0,c.useState)(null),[P,F]=(0,c.useState)(null),[ee,I]=(0,c.useState)(``),L=`${(0,c.useId)()}-dashboard`,[R,te]=r.i({value:u,defaultValue:p??{version:d.VERSION,columns:12,items:[]},onChange:h}),z=(0,c.useMemo)(()=>d.normalize(R),[R]),B=r.o(z),V=a.r(S,`dashboard`,`layoutCommit`),ne=typeof C==`number`?String(C):f.map(e=>C[e]??``).join(),H=(0,c.useMemo)(()=>g(C),[ne]),U=H[H.length-1],W=(0,c.useMemo)(()=>{let e=d.ranks(z),t=new Map;for(let n of H){let r=n.count===U.count?z:d.project(z,n.count),i=U.count/n.count;for(let a of r.items){let r=t.get(a.id)??{order:e.get(a.id)??0,fixed:a.fixed===!0},o=_({...a,x:Math.round(a.x*i),w:Math.round((a.x+a.w)*i)-Math.round(a.x*i)});n===H[0]?r.placement=o:r.query={...r.query,[n.size]:o},t.set(a.id,r)}}return t},[z,H,U.count]),G=r.a((e,t)=>{d.same(e,B.current)||te(e,t)}),re=(e,t)=>{let n=e.getBoundingClientRect(),r=A.current,i=r&&typeof getComputedStyle==`function`?getComputedStyle(r):void 0,a=Number.parseFloat(i?.columnGap??``)||0,o=Number.parseFloat(i?.rowGap??``)||0;return{x:(n.width+a)/t.w,y:(n.height+o)/t.h}},ie=e=>e instanceof Element?e.closest(`[data-widget-id]`):null,K=(e,t,n,r)=>{let i=e.kind===`move`?d.moveTo(B.current,e.id,t,n):d.resizeTo(B.current,e.id,t,n);return G(i,{reason:e.kind,event:r}),i},q=r.a((e,n,r,i)=>{let a=d.itemOf(B.current,n),o=ie(e.currentTarget);!T||e.button!==0||e.defaultPrevented||!a||a.fixed||!o||(e.preventDefault(),e.currentTarget.setPointerCapture?.(e.pointerId),e.currentTarget.focus(),N({id:n,kind:i,name:r,origin:a,before:B.current,pointer:{id:e.pointerId,x:e.clientX,y:e.clientY,step:re(o,a),rtl:t.g(o)}}))}),J=r.a((e,t)=>{if(!M?.pointer||M.id!==t)return;let{x:n,y:r,step:i,rtl:a}=M.pointer,o={x:e.clientX-n,y:e.clientY-r},s=d.cellsMoved(a?-o.x:o.x,o.y,i),c=M.origin,l=M.kind===`move`?K(M,c.x+s.columns,c.y+s.rows,e):K(M,c.w+s.columns,c.h+s.rows,e),u=d.itemOf(l,t);if(M.kind!==`move`||!u)return;let f={x:(u.x-c.x)*i.x*(a?-1:1),y:(u.y-c.y)*i.y};F({translate:`${Math.round(o.x-f.x)}px ${Math.round(o.y-f.y)}px`})}),Y=r.a((e,t)=>{if(!M?.pointer||M.id!==t)return;let n=d.itemOf(B.current,t);e.currentTarget.releasePointerCapture?.(M.pointer.id),N(null),F(null),V(B.current,{reason:M.kind,event:e}),n&&I(M.kind===`move`?`${M.name} moved to ${b(n)}.`:`${M.name} resized to ${x(n)}.`)}),X=a.i(`dashboard`),Z=r.a((e,t)=>{X(`grabCancel`,e.id,{reason:t.type===`blur`?`blur`:`escape`,event:t}),G(e.before,{reason:e.kind,event:t}),N(null),I(`${e.name} put back at ${b(e.origin)}.`)}),Q=r.a((e,n,r,i)=>{if(!T||e.defaultPrevented)return;let a=M&&M.id===n&&M.kind===i&&!M.pointer?M:void 0,o=d.itemOf(B.current,n);if(!o)return;if(!a){if(e.key!==`Enter`&&e.key!==` `||o.fixed)return;e.preventDefault(),N({id:n,kind:i,name:r,origin:o,before:B.current}),X(`grab`,n,{reason:i,event:e}),I(i===`move`?`${r} picked up at ${b(o)}. Use the arrow keys to move it.`:`${r} held for resizing at ${x(o)}. Use the arrow keys to resize it.`);return}if(e.key===`Escape`){e.preventDefault(),Z(a,e);return}if(e.key===`Enter`||e.key===` `){e.preventDefault(),N(null),V(B.current,{reason:i,event:e}),I(i===`move`?`${r} dropped at ${b(o)}.`:`${r} resized to ${x(o)}.`);return}let s=y(e.key,t.g(e.currentTarget));if(!s)return;e.preventDefault();let c=i===`move`?K(a,o.x+s.x,o.y+s.y,e):K(a,o.w+s.x,o.h+s.y,e),l=d.itemOf(c,n);l&&I(i===`move`?`${r}, ${b(l)}.`:`${r}, ${x(l)}.`)}),ae=r.a((e,t,n)=>{M&&M.id===t&&M.kind===n&&!M.pointer&&Z(M,e)}),oe=(0,c.useMemo)(()=>({editable:T,placementOf:e=>W.get(e),heldOf:e=>M&&M.id===e?M:void 0,offsetOf:e=>M&&M.id===e&&P?P:void 0,outsideAuthoring:U.size?{[v(U.size)]:{display:`none`}}:void 0,instructionsId:L,handleProps:(e,t,n)=>({type:`button`,"aria-label":n===`move`?`Move ${t}`:`Resize ${t}`,"aria-pressed":!!(M&&M.id===e&&M.kind===n),"aria-describedby":L,onPointerDown:r=>q(r,e,t,n),onPointerMove:t=>J(t,e),onPointerUp:t=>Y(t,e),onPointerCancel:t=>Y(t,e),onKeyDown:r=>Q(r,e,t,n),onBlur:t=>ae(t,e,n)})}),[T,W,M,P,U.size,L,q,J,Y,Q,ae]),$=M?W.get(M.id):void 0;return(0,l.jsxs)(m.Provider,{value:oe,children:[(0,l.jsxs)(n.default,{ref:j,component:`dashboard`,...k,variant:[k.variant,{dragging:M!==null}],vars:{"dashboard-row":`${w/4}rem`},gridTemplateColumns:U.count,props:{role:`list`,"aria-label":E,"aria-labelledby":D,...O},children:[o,$&&(0,l.jsx)(n.default,{component:`dashboard.placeholder`,order:$.order,cq:$.query,...$.placement,props:{role:`presentation`,"aria-hidden":!0}})]}),(0,l.jsx)(s.default,{props:{role:`status`},children:ee}),(0,l.jsx)(s.default,{id:L,children:`Press Enter or Space to pick the widget up, the arrow keys to move or resize it, Enter to drop it and Escape to put it back.`})]})}function C({kind:e}){return e===`resize`?(0,l.jsx)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,rtl:{flip:`xAxis`},props:{fill:`none`},children:(0,l.jsx)(o.Path,{d:`M20 10 10 20M20 16l-4 4`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`})}):(0,l.jsxs)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,children:[[8,12,16].map(e=>(0,l.jsx)(o.Circle,{cx:9,cy:e,r:1.4,fill:`currentColor`},e)),[8,12,16].map(e=>(0,l.jsx)(o.Circle,{cx:15,cy:e,r:1.4,fill:`currentColor`},e))]})}function w(){return(0,l.jsx)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,props:{fill:`none`},children:(0,l.jsx)(o.Path,{d:`M20 12a8 8 0 1 1-2.6-5.9M20 4v4h-4`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`})})}function T(e){let{id:t,children:r,title:i,name:o,description:s,actions:u,level:d=3,loading:f=!1,error:h,empty:g,onRefresh:_,refreshLabel:v,props:y,...b}=e,x=(0,c.useContext)(m),S=t===void 0?void 0:x?.placementOf(t),T=t===void 0?void 0:x?.heldOf(t),E=o??(typeof i==`string`?i:void 0)??t??`Widget`,D=x?.editable===!0&&S!==void 0&&!S.fixed,O=a.r((e,t)=>_?.(),`widget`,`refresh`),k=e=>D&&t!==void 0?(0,l.jsx)(n.default,{component:`widget.handle`,tag:`button`,variant:{editable:!0,grabbed:T?.kind===e,corner:e===`resize`},cq:x?.outsideAuthoring,props:x?.handleProps(t,E,e),children:(0,l.jsx)(C,{kind:e})}):null,A=()=>f?(0,l.jsx)(n.default,{component:`widget.skeleton`,props:{"aria-hidden":!0},children:[80,100,60].map(e=>(0,l.jsx)(n.default,{component:`widget.skeleton.bar`,width:`${e}%`},e))}):h?(0,l.jsxs)(n.default,{component:`widget.message`,variant:{error:!0},props:{role:`status`},children:[h,_&&(0,l.jsx)(n.default,{tag:`button`,component:`widget.retry`,props:{type:`button`,onClick:e=>O(t,{reason:`retry`,event:e})},children:`Try again`})]}):g?(0,l.jsx)(n.default,{component:`widget.message`,children:g===!0?`Nothing to show yet.`:g}):r,j=i!==void 0||s!==void 0||u!==void 0||_!==void 0||D;return(0,l.jsxs)(n.default,{component:`widget`,...b,variant:[b.variant,{dragging:T?.pointer!==void 0,grabbed:T!==void 0&&T.pointer===void 0}],order:S?.order,cq:S?.query,...S?.placement,style:{...t===void 0?void 0:x?.offsetOf(t),...b.style},props:{role:S?`listitem`:void 0,"aria-busy":f||void 0,"data-widget-id":t,...y},children:[j&&(0,l.jsxs)(n.default,{component:`widget.header`,children:[k(`move`),(0,l.jsxs)(n.default,{component:`widget.label`,children:[i!==void 0&&(0,l.jsx)(n.default,{component:`widget.title`,tag:p[d-1],children:i}),s!==void 0&&(0,l.jsx)(n.default,{component:`widget.description`,children:s})]}),_&&(0,l.jsx)(n.default,{component:`widget.handle`,tag:`button`,variant:{editable:!0},props:{type:`button`,"aria-label":v??`Refresh ${E}`,onClick:e=>O(t,{reason:`refresh`,event:e})},children:(0,l.jsx)(w,{})}),u!==void 0&&(0,l.jsx)(n.default,{component:`widget.actions`,children:u})]}),(0,l.jsx)(n.default,{component:`widget.body`,children:A()}),k(`resize`)]})}var E=e.f(S,`DashboardGrid`),D=T;D.displayName=`Widget`,exports.DashboardUtils=d,exports.Widget=D,exports.default=E;
1
+ "use client";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../react-shared.cjs"),t=require("../platform.cjs"),n=require("../box.cjs"),r=require("../behavior.cjs"),i=require("../dashboardSchema.cjs"),a=require("../reporting.cjs"),o=require("./svg.cjs"),s=require("./visuallyHidden.cjs");let c=require("react"),l=require("react/jsx-runtime");var u;(function(e){let t=e.VERSION=1,n=e.MIN_COLUMNS=1,r=e.MAX_COLUMNS=24;function a(e,t,n){return Math.min(Math.max(e,t),n)}function o(e,t){return typeof e==`number`&&Number.isFinite(e)?Math.round(e):t}function s(e,t){return e.x<t.x+t.w&&e.x+e.w>t.x&&e.y<t.y+t.h&&e.y+e.h>t.y}e.overlaps=s;function c(e,t){return e.find(e=>e.id!==t.id&&s(e,t))}function l(e,t){let n=Math.min(e.maxW??t,t),r=a(o(e.w,1),Math.max(1,Math.min(e.minW??1,n)),Math.max(1,n)),i=a(o(e.h,1),Math.max(1,e.minH??1),Math.max(1,e.maxH??2**53-1));return{...e,w:r,h:i,x:a(o(e.x,0),0,t-r),y:Math.max(o(e.y,0),0)}}function u(e,t){return e.y-t.y||e.x-t.x}function d(e,t){let i=a(o(t,12),n,r),s=e.map(e=>l(e,i)),d=e=>+!e.fixed,f=[...s].sort((e,t)=>d(e)-d(t)||u(e,t)),p=[];for(let e of f){if(e.fixed){p.push(e);continue}let t={...e};for(;t.y>0&&!c(p,{...t,y:t.y-1});)t.y--;let n=c(p,t);for(;n;)t.y=n.y+n.h,n=c(p,t);p.push(t)}return p.sort(u)}e.resolve=d;function f(e){let i=a(o(e.columns,12),n,r);return{version:t,columns:i,items:d(e.items,i)}}e.normalize=f;function p(e,t){return e.items.find(e=>e.id===t)}e.itemOf=p;function m(e){return new Map(e.items.map((e,t)=>[e.id,t]))}e.ranks=m;function h(e,t){let n=n=>!s(t,n)&&!e.some(e=>e.id!==n.id&&e.id!==t.id&&s(e,n));return e.map(e=>{if(e.id===t.id)return t;if(e.fixed===!0||!s(e,t))return e;let r={...e,y:Math.max(t.y-e.h,0)};return n(r)?r:{...e,y:t.y+t.h}})}function g(e,t,i,s){let c=p(e,t);if(!c||c.fixed)return e;let u=l({...c,x:i,y:s},a(o(e.columns,12),n,r));return f({...e,items:h(e.items,u)})}e.moveTo=g;function _(e,t,n,r){let i=p(e,t);if(!i||i.fixed)return e;let a=e.items.map(e=>e.id===t?{...e,w:n,h:r}:e);return f({...e,items:a})}e.resizeTo=_;function v(e,t){let n=e.items.reduce((e,t)=>Math.max(e,t.y+t.h),0);return f({...e,items:[...e.items,{x:0,y:n,...t}]})}e.add=v;function y(e,t){return f({...e,items:e.items.filter(e=>e.id!==t)})}e.remove=y;function b(e,i){let s=a(o(i,12),n,r);if(s===e.columns)return f(e);let c=s/e.columns,l=e=>e===void 0?void 0:a(Math.max(1,Math.round(e*c)),1,s),u=e.items.map(e=>{let t=a(Math.max(1,Math.round(e.w*c)),1,s);return{...e,w:t,x:a(Math.floor(e.x*c),0,s-t),minW:l(e.minW),maxW:l(e.maxW)}});return f({version:t,columns:s,items:u})}e.project=b;function x(e,t){return e===t?!0:e.columns!==t.columns||e.items.length!==t.items.length?!1:e.items.every((e,n)=>{let r=t.items[n];return e.id===r.id&&e.x===r.x&&e.y===r.y&&e.w===r.w&&e.h===r.h})}e.same=x;function S(e,t,n){return{columns:n.x>0?Math.round(e/n.x):0,rows:n.y>0?Math.round(t/n.y):0}}e.cellsMoved=S;function C(e){return typeof e==`string`&&e.length>0}function w(e){return typeof e==`number`&&Number.isFinite(e)}function T(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e)){n.push({code:`invalid-item`,path:t,message:`A layout item has to be an object.`});return}let r=e;if(!C(r.id)){n.push({code:`invalid-item`,path:`${t}.id`,message:`A layout item needs an id naming the widget it places.`});return}if(!w(r.x)||!w(r.y)||!w(r.w)||!w(r.h)){n.push({code:`invalid-item`,path:t,message:`Item "${r.id}" needs numeric x, y, w and h.`});return}let i=[`minW`,`minH`,`maxW`,`maxH`].reduce((e,t)=>(w(r[t])&&(e[t]=Math.round(r[t])),e),{});return{id:r.id,x:Math.round(r.x),y:Math.round(r.y),w:Math.round(r.w),h:Math.round(r.h),...i,...r.fixed===!0?{fixed:!0}:{}}}function E(e,i=12){let o=[],s={version:t,columns:i,items:[]};if(typeof e!=`object`||!e||Array.isArray(e))return o.push({code:`not-an-object`,path:``,message:`A layout has to be an object.`}),{layout:f(s),issues:o};let c=e;c.version!==t&&o.push({code:`version`,path:`version`,message:`Layout version ${String(c.version)} was read as version ${t}.`});let l=w(c.columns)?a(Math.round(c.columns),n,r):i;if(w(c.columns)||o.push({code:`columns`,path:`columns`,message:`No column count, so the layout was read in ${i}.`}),!Array.isArray(c.items))return o.push({code:`items`,path:`items`,message:`A layout needs an items array.`}),{layout:f({...s,columns:l}),issues:o};let u=new Set,d=c.items.reduce((e,t,n)=>{let r=T(t,`items.${n}`,o);return r?u.has(r.id)?(o.push({code:`duplicate-id`,path:`items.${n}.id`,message:`Two items are called "${r.id}"; the second was dropped.`}),e):(u.add(r.id),e.push(r),e):e},[]);return{layout:f({version:t,columns:l,items:d}),issues:o}}e.parse=E,e.SCHEMA=i.t})(u||={});var d=u,f=[`xs`,`sm`,`md`,`lg`,`xl`,`xxl`],p=[`h1`,`h2`,`h3`,`h4`,`h5`,`h6`],m=(0,c.createContext)(null);function h(e,t,n){return Math.min(Math.max(e,t),n)}function g(e){if(typeof e==`number`)return[{count:h(Math.round(e),d.MIN_COLUMNS,d.MAX_COLUMNS)}];let t=f.filter(t=>typeof e[t]==`number`).map(t=>({size:t,count:h(Math.round(e[t]),d.MIN_COLUMNS,d.MAX_COLUMNS)}));return t.length>0?t:[{count:12}]}function _(e){return{gridColumnStart:e.x+1,gridColumnEnd:e.x+1+e.w,gridRowStart:e.y+1,gridRowEnd:e.y+1+e.h}}function v(e){return`max${e[0].toUpperCase()}${e.slice(1)}`}function y(e,t){let n=t?-1:1;if(e===`ArrowLeft`)return{x:-n,y:0};if(e===`ArrowRight`)return{x:n,y:0};if(e===`ArrowUp`)return{x:0,y:-1};if(e===`ArrowDown`)return{x:0,y:1}}function b(e){return`column ${e.x+1}, row ${e.y+1}`}function x(e){return`${e.w} ${e.w===1?`column`:`columns`} by ${e.h} ${e.h===1?`row`:`rows`}`}function S(e,i){let{children:o,layout:u,defaultLayout:p,onLayoutChange:h,onLayoutCommit:S,columns:C={xs:1,md:6,xxl:12},rowHeight:w=24,editable:T=!1,label:E,labelledBy:D,props:O,...k}=e,A=(0,c.useRef)(null),j=(0,c.useCallback)(e=>{A.current=e,t.d(i,e)},[i]),[M,N]=(0,c.useState)(null),[P,F]=(0,c.useState)(null),[ee,I]=(0,c.useState)(``),L=`${(0,c.useId)()}-dashboard`,[R,te]=r.i({value:u,defaultValue:p??{version:d.VERSION,columns:12,items:[]},onChange:h}),z=(0,c.useMemo)(()=>d.normalize(R),[R]),B=r.o(z),V=a.r(S,`dashboard`,`layoutCommit`),ne=typeof C==`number`?String(C):f.map(e=>C[e]??``).join(),H=(0,c.useMemo)(()=>g(C),[ne]),U=H[H.length-1],W=(0,c.useMemo)(()=>{let e=d.ranks(z),t=new Map;for(let n of H){let r=n.count===U.count?z:d.project(z,n.count),i=U.count/n.count;for(let a of r.items){let r=t.get(a.id)??{order:e.get(a.id)??0,fixed:a.fixed===!0},o=_({...a,x:Math.round(a.x*i),w:Math.round((a.x+a.w)*i)-Math.round(a.x*i)});n===H[0]?r.placement=o:r.query={...r.query,[n.size]:o},t.set(a.id,r)}}return t},[z,H,U.count]),G=r.a((e,t)=>{d.same(e,B.current)||te(e,t)}),re=(e,t)=>{let n=e.getBoundingClientRect(),r=A.current,i=r&&typeof getComputedStyle==`function`?getComputedStyle(r):void 0,a=Number.parseFloat(i?.columnGap??``)||0,o=Number.parseFloat(i?.rowGap??``)||0;return{x:(n.width+a)/t.w,y:(n.height+o)/t.h}},ie=e=>e instanceof Element?e.closest(`[data-widget-id]`):null,K=(e,t,n,r)=>{let i=e.kind===`move`?d.moveTo(B.current,e.id,t,n):d.resizeTo(B.current,e.id,t,n);return G(i,{reason:e.kind,event:r}),i},q=r.a((e,n,r,i)=>{let a=d.itemOf(B.current,n),o=ie(e.currentTarget);!T||e.button!==0||e.defaultPrevented||!a||a.fixed||!o||(e.preventDefault(),e.currentTarget.setPointerCapture?.(e.pointerId),e.currentTarget.focus(),N({id:n,kind:i,name:r,origin:a,before:B.current,pointer:{id:e.pointerId,x:e.clientX,y:e.clientY,step:re(o,a),rtl:t._(o)}}))}),J=r.a((e,t)=>{if(!M?.pointer||M.id!==t)return;let{x:n,y:r,step:i,rtl:a}=M.pointer,o={x:e.clientX-n,y:e.clientY-r},s=d.cellsMoved(a?-o.x:o.x,o.y,i),c=M.origin,l=M.kind===`move`?K(M,c.x+s.columns,c.y+s.rows,e):K(M,c.w+s.columns,c.h+s.rows,e),u=d.itemOf(l,t);if(M.kind!==`move`||!u)return;let f={x:(u.x-c.x)*i.x*(a?-1:1),y:(u.y-c.y)*i.y};F({translate:`${Math.round(o.x-f.x)}px ${Math.round(o.y-f.y)}px`})}),Y=r.a((e,t)=>{if(!M?.pointer||M.id!==t)return;let n=d.itemOf(B.current,t);e.currentTarget.releasePointerCapture?.(M.pointer.id),N(null),F(null),V(B.current,{reason:M.kind,event:e}),n&&I(M.kind===`move`?`${M.name} moved to ${b(n)}.`:`${M.name} resized to ${x(n)}.`)}),X=a.i(`dashboard`),Z=r.a((e,t)=>{X(`grabCancel`,e.id,{reason:t.type===`blur`?`blur`:`escape`,event:t}),G(e.before,{reason:e.kind,event:t}),N(null),I(`${e.name} put back at ${b(e.origin)}.`)}),Q=r.a((e,n,r,i)=>{if(!T||e.defaultPrevented)return;let a=M&&M.id===n&&M.kind===i&&!M.pointer?M:void 0,o=d.itemOf(B.current,n);if(!o)return;if(!a){if(e.key!==`Enter`&&e.key!==` `||o.fixed)return;e.preventDefault(),N({id:n,kind:i,name:r,origin:o,before:B.current}),X(`grab`,n,{reason:i,event:e}),I(i===`move`?`${r} picked up at ${b(o)}. Use the arrow keys to move it.`:`${r} held for resizing at ${x(o)}. Use the arrow keys to resize it.`);return}if(e.key===`Escape`){e.preventDefault(),Z(a,e);return}if(e.key===`Enter`||e.key===` `){e.preventDefault(),N(null),V(B.current,{reason:i,event:e}),I(i===`move`?`${r} dropped at ${b(o)}.`:`${r} resized to ${x(o)}.`);return}let s=y(e.key,t._(e.currentTarget));if(!s)return;e.preventDefault();let c=i===`move`?K(a,o.x+s.x,o.y+s.y,e):K(a,o.w+s.x,o.h+s.y,e),l=d.itemOf(c,n);l&&I(i===`move`?`${r}, ${b(l)}.`:`${r}, ${x(l)}.`)}),ae=r.a((e,t,n)=>{M&&M.id===t&&M.kind===n&&!M.pointer&&Z(M,e)}),oe=(0,c.useMemo)(()=>({editable:T,placementOf:e=>W.get(e),heldOf:e=>M&&M.id===e?M:void 0,offsetOf:e=>M&&M.id===e&&P?P:void 0,outsideAuthoring:U.size?{[v(U.size)]:{display:`none`}}:void 0,instructionsId:L,handleProps:(e,t,n)=>({type:`button`,"aria-label":n===`move`?`Move ${t}`:`Resize ${t}`,"aria-pressed":!!(M&&M.id===e&&M.kind===n),"aria-describedby":L,onPointerDown:r=>q(r,e,t,n),onPointerMove:t=>J(t,e),onPointerUp:t=>Y(t,e),onPointerCancel:t=>Y(t,e),onKeyDown:r=>Q(r,e,t,n),onBlur:t=>ae(t,e,n)})}),[T,W,M,P,U.size,L,q,J,Y,Q,ae]),$=M?W.get(M.id):void 0;return(0,l.jsxs)(m.Provider,{value:oe,children:[(0,l.jsxs)(n.default,{ref:j,component:`dashboard`,...k,variant:[k.variant,{dragging:M!==null}],vars:{"dashboard-row":`${w/4}rem`},gridTemplateColumns:U.count,props:{role:`list`,"aria-label":E,"aria-labelledby":D,...O},children:[o,$&&(0,l.jsx)(n.default,{component:`dashboard.placeholder`,order:$.order,cq:$.query,...$.placement,props:{role:`presentation`,"aria-hidden":!0}})]}),(0,l.jsx)(s.default,{props:{role:`status`},children:ee}),(0,l.jsx)(s.default,{id:L,children:`Press Enter or Space to pick the widget up, the arrow keys to move or resize it, Enter to drop it and Escape to put it back.`})]})}function C({kind:e}){return e===`resize`?(0,l.jsx)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,rtl:{flip:`xAxis`},props:{fill:`none`},children:(0,l.jsx)(o.Path,{d:`M20 10 10 20M20 16l-4 4`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`})}):(0,l.jsxs)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,children:[[8,12,16].map(e=>(0,l.jsx)(o.Circle,{cx:9,cy:e,r:1.4,fill:`currentColor`},e)),[8,12,16].map(e=>(0,l.jsx)(o.Circle,{cx:15,cy:e,r:1.4,fill:`currentColor`},e))]})}function w(){return(0,l.jsx)(o.Svg,{viewBox:`0 0 24 24`,width:`1rem`,height:`1rem`,props:{fill:`none`},children:(0,l.jsx)(o.Path,{d:`M20 12a8 8 0 1 1-2.6-5.9M20 4v4h-4`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`})})}function T(e){let{id:t,children:r,title:i,name:o,description:s,actions:u,level:d=3,loading:f=!1,error:h,empty:g,onRefresh:_,refreshLabel:v,props:y,...b}=e,x=(0,c.useContext)(m),S=t===void 0?void 0:x?.placementOf(t),T=t===void 0?void 0:x?.heldOf(t),E=o??(typeof i==`string`?i:void 0)??t??`Widget`,D=x?.editable===!0&&S!==void 0&&!S.fixed,O=a.r((e,t)=>_?.(),`widget`,`refresh`),k=e=>D&&t!==void 0?(0,l.jsx)(n.default,{component:`widget.handle`,tag:`button`,variant:{editable:!0,grabbed:T?.kind===e,corner:e===`resize`},cq:x?.outsideAuthoring,props:x?.handleProps(t,E,e),children:(0,l.jsx)(C,{kind:e})}):null,A=()=>f?(0,l.jsx)(n.default,{component:`widget.skeleton`,props:{"aria-hidden":!0},children:[80,100,60].map(e=>(0,l.jsx)(n.default,{component:`widget.skeleton.bar`,width:`${e}%`},e))}):h?(0,l.jsxs)(n.default,{component:`widget.message`,variant:{error:!0},props:{role:`status`},children:[h,_&&(0,l.jsx)(n.default,{tag:`button`,component:`widget.retry`,props:{type:`button`,onClick:e=>O(t,{reason:`retry`,event:e})},children:`Try again`})]}):g?(0,l.jsx)(n.default,{component:`widget.message`,children:g===!0?`Nothing to show yet.`:g}):r,j=i!==void 0||s!==void 0||u!==void 0||_!==void 0||D;return(0,l.jsxs)(n.default,{component:`widget`,...b,variant:[b.variant,{dragging:T?.pointer!==void 0,grabbed:T!==void 0&&T.pointer===void 0}],order:S?.order,cq:S?.query,...S?.placement,style:{...t===void 0?void 0:x?.offsetOf(t),...b.style},props:{role:S?`listitem`:void 0,"aria-busy":f||void 0,"data-widget-id":t,...y},children:[j&&(0,l.jsxs)(n.default,{component:`widget.header`,children:[k(`move`),(0,l.jsxs)(n.default,{component:`widget.label`,children:[i!==void 0&&(0,l.jsx)(n.default,{component:`widget.title`,tag:p[d-1],children:i}),s!==void 0&&(0,l.jsx)(n.default,{component:`widget.description`,children:s})]}),_&&(0,l.jsx)(n.default,{component:`widget.handle`,tag:`button`,variant:{editable:!0},props:{type:`button`,"aria-label":v??`Refresh ${E}`,onClick:e=>O(t,{reason:`refresh`,event:e})},children:(0,l.jsx)(w,{})}),u!==void 0&&(0,l.jsx)(n.default,{component:`widget.actions`,children:u})]}),(0,l.jsx)(n.default,{component:`widget.body`,children:A()}),k(`resize`)]})}var E=e.f(S,`DashboardGrid`),D=T;D.displayName=`Widget`,exports.DashboardUtils=d,exports.Widget=D,exports.default=E;
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { f as e } from "../react-shared.mjs";
3
- import { d as t, g as n } from "../platform.mjs";
3
+ import { _ as t, d as n } from "../platform.mjs";
4
4
  import r from "../box.mjs";
5
5
  import { a as i, i as a, o } from "../behavior.mjs";
6
6
  import { t as s } from "../dashboardSchema.mjs";
@@ -342,7 +342,7 @@ function N(e, s) {
342
342
  md: 6,
343
343
  xxl: 12
344
344
  }, rowHeight: E = 24, editable: O = !1, label: N, labelledBy: ne, props: re, ...P } = e, F = y(null), I = h((e) => {
345
- F.current = e, t(s, e);
345
+ F.current = e, n(s, e);
346
346
  }, [s]), [L, R] = b(null), [z, B] = b(null), [ie, V] = b(""), H = `${_()}-dashboard`, [U, ae] = a({
347
347
  value: d,
348
348
  defaultValue: f ?? {
@@ -389,10 +389,10 @@ function N(e, s) {
389
389
  reason: e.kind,
390
390
  event: r
391
391
  }), i;
392
- }, le = i((e, t, r, i) => {
393
- let a = w.itemOf(G.current, t), o = ce(e.currentTarget);
392
+ }, le = i((e, n, r, i) => {
393
+ let a = w.itemOf(G.current, n), o = ce(e.currentTarget);
394
394
  !O || e.button !== 0 || e.defaultPrevented || !a || a.fixed || !o || (e.preventDefault(), e.currentTarget.setPointerCapture?.(e.pointerId), e.currentTarget.focus(), R({
395
- id: t,
395
+ id: n,
396
396
  kind: i,
397
397
  name: r,
398
398
  origin: a,
@@ -402,7 +402,7 @@ function N(e, s) {
402
402
  x: e.clientX,
403
403
  y: e.clientY,
404
404
  step: se(o, a),
405
- rtl: n(o)
405
+ rtl: t(o)
406
406
  }
407
407
  }));
408
408
  }), ue = i((e, t) => {
@@ -432,19 +432,19 @@ function N(e, s) {
432
432
  reason: e.kind,
433
433
  event: t
434
434
  }), R(null), V(`${e.name} put back at ${j(e.origin)}.`);
435
- }), pe = i((e, t, r, i) => {
435
+ }), pe = i((e, n, r, i) => {
436
436
  if (!O || e.defaultPrevented) return;
437
- let a = L && L.id === t && L.kind === i && !L.pointer ? L : void 0, o = w.itemOf(G.current, t);
437
+ let a = L && L.id === n && L.kind === i && !L.pointer ? L : void 0, o = w.itemOf(G.current, n);
438
438
  if (!o) return;
439
439
  if (!a) {
440
440
  if (e.key !== "Enter" && e.key !== " " || o.fixed) return;
441
441
  e.preventDefault(), R({
442
- id: t,
442
+ id: n,
443
443
  kind: i,
444
444
  name: r,
445
445
  origin: o,
446
446
  before: G.current
447
- }), de("grab", t, {
447
+ }), de("grab", n, {
448
448
  reason: i,
449
449
  event: e
450
450
  }), V(i === "move" ? `${r} picked up at ${j(o)}. Use the arrow keys to move it.` : `${r} held for resizing at ${M(o)}. Use the arrow keys to resize it.`);
@@ -461,10 +461,10 @@ function N(e, s) {
461
461
  }), V(i === "move" ? `${r} dropped at ${j(o)}.` : `${r} resized to ${M(o)}.`);
462
462
  return;
463
463
  }
464
- let s = te(e.key, n(e.currentTarget));
464
+ let s = te(e.key, t(e.currentTarget));
465
465
  if (!s) return;
466
466
  e.preventDefault();
467
- let c = i === "move" ? Z(a, o.x + s.x, o.y + s.y, e) : Z(a, o.w + s.x, o.h + s.y, e), l = w.itemOf(c, t);
467
+ let c = i === "move" ? Z(a, o.x + s.x, o.y + s.y, e) : Z(a, o.w + s.x, o.h + s.y, e), l = w.itemOf(c, n);
468
468
  l && V(i === "move" ? `${r}, ${j(l)}.` : `${r}, ${M(l)}.`);
469
469
  }), me = i((e, t, n) => {
470
470
  L && L.id === t && L.kind === n && !L.pointer && fe(L, e);
@@ -1,11 +1,15 @@
1
1
  import { default as GridModel } from '../models/gridModel';
2
2
  interface Props<TRow> {
3
3
  grid: GridModel<TRow>;
4
+ /** GridModel.headerVersion. Not read: a scroll moves the body around the footer and leaves it alone. */
5
+ version: string;
4
6
  }
5
7
  /**
6
8
  * The grand totals, pinned under the rows. It is the last child of the body's height-capped wrapper rather
7
9
  * than a sibling of the header: `position: sticky` can only pull a box *up* from below, so a footer whose
8
10
  * static position is above the scrollport simply scrolls away (measured in Chrome 152).
9
11
  */
10
- export default function DataGridFooter<TRow>(props: Props<TRow>): import("react").JSX.Element | null;
11
- export {};
12
+ declare function DataGridFooterImpl<TRow>(props: Props<TRow>): import("react").JSX.Element | null;
13
+ /** Memoized on the grid-wide version, the header's rule: every scroll frame re-rendered the totals. */
14
+ declare const DataGridFooter: typeof DataGridFooterImpl;
15
+ export default DataGridFooter;
@@ -48,11 +48,17 @@ export default class GridModel<TRow> {
48
48
  */
49
49
  rowVersion(row: RowModel<TRow> | GroupRowModel<TRow> | DetailRowModel<TRow>, index: number): string;
50
50
  private _selectionVersion;
51
+ private _layoutVersion;
51
52
  /**
52
- * What the memoized header compares: a grid-wide change, or the selection its checkbox shows. A focus move
53
- * re-renders the component holding the tab stop, and the header — filter row included — no longer with it.
53
+ * What the memoized header compares: a grid-wide change, the selection its checkbox shows, or a column width.
54
+ * A focus move re-renders the component holding the tab stop, and the header — filter row included — no longer with it.
54
55
  */
55
56
  get headerVersion(): string;
57
+ /**
58
+ * A width changed. A row reads its widths through the CSS variables `paintSizes` writes, so only the header
59
+ * (its resizers' values) redraws: a notify here re-rendered every row on each frame of a window drag.
60
+ */
61
+ notifyLayout: () => void;
56
62
  /**
57
63
  * Sync incoming props. Called during render by the framework adapter — clears
58
64
  * the affected memos but does NOT notify (no extra render cycle; memos recompute
@@ -123,6 +129,14 @@ export default class GridModel<TRow> {
123
129
  * Get filtered data (applies external, global, then column filters)
124
130
  */
125
131
  get filteredData(): TRow[];
132
+ /**
133
+ * Filtering and sorting are kept on the values they read rather than on the column models: an inline `def` is
134
+ * a new object every parent render, which rebuilt the columns and re-sorted 100,000 rows in 47ms each time.
135
+ */
136
+ private readonly _filtered;
137
+ private readonly _sorted;
138
+ private readonly _rowModels;
139
+ private static reuse;
126
140
  /** What the grid tells `Box.onInteraction` about a change no host callback carries; `content` names what a person typed. */
127
141
  reportInteraction(type: InteractionType<'datagrid'>, value: unknown, reason?: string, details?: Record<string, unknown>, content?: readonly string[]): void;
128
142
  /**
@@ -346,6 +360,11 @@ export default class GridModel<TRow> {
346
360
  /** Group rows shut by hand, which is what a `groupDefaultExpanded` grid needs to remember. */
347
361
  private _collapsedGroupRow;
348
362
  toggleGroupRow: (groupRowKey: Key, expanded?: boolean) => void;
363
+ /**
364
+ * Opening a row changes which rows are shown, not which rows there are: the filtered, sorted and grouped
365
+ * models stand, and only their flattening is redone. A datasource and a tree build the list from it.
366
+ */
367
+ private expansionChanged;
349
368
  /**
350
369
  * A tree row opened or shut. The walk over the rows is a different walk — and where the tree is lazy the
351
370
  * level just opened has not been asked for yet, which is what the bumped version tells the fetch effect.
@@ -8,7 +8,7 @@ export default class GroupRowModel<TRow> {
8
8
  readonly grid: GridModel<TRow>;
9
9
  readonly groupColumn: ColumnModel<TRow>;
10
10
  readonly rows: RowModel<TRow>[] | GroupRowModel<TRow>[];
11
- readonly rowIndex: number;
11
+ rowIndex: number;
12
12
  constructor(grid: GridModel<TRow>, groupColumn: ColumnModel<TRow>, rows: RowModel<TRow>[] | GroupRowModel<TRow>[], rowIndex: number, groupValue: Key);
13
13
  protected _groupValue: Key;
14
14
  /**
@@ -5,7 +5,7 @@ import { default as GridModel } from './gridModel';
5
5
  import { default as GroupRowModel } from './groupRowModel';
6
6
  export default class RowModel<TRow> {
7
7
  readonly grid: GridModel<TRow>;
8
- readonly rowIndex: number;
8
+ rowIndex: number;
9
9
  constructor(grid: GridModel<TRow>, data: TRow, rowIndex: number);
10
10
  protected _data: TRow;
11
11
  /**
@@ -14,7 +14,11 @@ import { default as SourceLevel } from './sourceLevel';
14
14
  */
15
15
  export default class SourceGroupRowModel<TRow> extends GroupRowModel<TRow> {
16
16
  private readonly level;
17
- constructor(grid: GridModel<TRow>, level: SourceLevel<TRow>, groupColumn: ColumnModel<TRow>, rowIndex: number);
17
+ /** Where it sits in that level's block cache; `rowIndex` is where it sits on screen (bug #327). */
18
+ private readonly levelIndex;
19
+ constructor(grid: GridModel<TRow>, level: SourceLevel<TRow>, groupColumn: ColumnModel<TRow>,
20
+ /** Where it sits in that level's block cache; `rowIndex` is where it sits on screen (bug #327). */
21
+ levelIndex: number, display?: number);
18
22
  private get row();
19
23
  /** The row the server sent for this group: its value, and whatever totals came with it. */
20
24
  get data(): TRow | undefined;
@@ -15,9 +15,13 @@ import { default as SourceLevel } from './sourceLevel';
15
15
  export default class SourceRowModel<TRow> extends RowModel<TRow> {
16
16
  /** The level it belongs to: the top one, or the group or tree row somebody opened. */
17
17
  protected readonly sourceLevel: SourceLevel<TRow>;
18
+ /** Where it sits in that level's block cache; `rowIndex` is where it sits on screen (bug #327). */
19
+ protected readonly levelIndex: number;
18
20
  constructor(grid: GridModel<TRow>,
19
21
  /** The level it belongs to: the top one, or the group or tree row somebody opened. */
20
- sourceLevel: SourceLevel<TRow>, rowIndex: number);
22
+ sourceLevel: SourceLevel<TRow>,
23
+ /** Where it sits in that level's block cache; `rowIndex` is where it sits on screen (bug #327). */
24
+ levelIndex: number, display?: number);
21
25
  private get row();
22
26
  get data(): TRow;
23
27
  get placeholder(): boolean;