@box-kite/react 2.3.1 → 2.4.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 (118) hide show
  1. package/.claude/rules/box-kite-rules.md +58 -94
  2. package/.claude/skills/box-kite/SKILL.md +69 -104
  3. package/.claude/skills/box-kite/references/components.md +8 -1
  4. package/.claude/skills/box-kite/references/patterns.md +1 -1
  5. package/.claude/skills/box-kite/references/rules.md +115 -0
  6. package/.claude/skills/box-kite/references/styling.md +5 -3
  7. package/.cursor/rules/box-kite.mdc +60 -96
  8. package/AGENTS.md +61 -97
  9. package/BOX_AI_CONTEXT.md +111 -40
  10. package/BOX_KITE_AI_CONTEXT.md +111 -40
  11. package/README.md +200 -721
  12. package/box.cjs +1 -1
  13. package/box.d.ts +5 -0
  14. package/box.mjs +5 -5
  15. package/catalog.cjs +1 -1
  16. package/catalog.mjs +53 -18
  17. package/client.cjs +1 -1
  18. package/client.mjs +85 -85
  19. package/components/accordion.cjs +1 -1
  20. package/components/accordion.mjs +1 -1
  21. package/components/button.cjs +1 -1
  22. package/components/button.mjs +1 -1
  23. package/components/calendar.cjs +1 -1
  24. package/components/calendar.mjs +1 -1
  25. package/components/chart.cjs +1 -1
  26. package/components/chart.mjs +3 -3
  27. package/components/checkbox.cjs +1 -1
  28. package/components/checkbox.mjs +1 -1
  29. package/components/combobox/comboboxListbox.d.ts +2 -1
  30. package/components/combobox.cjs +1 -1
  31. package/components/combobox.d.ts +1 -1
  32. package/components/combobox.mjs +200 -189
  33. package/components/dashboard.cjs +1 -1
  34. package/components/dashboard.mjs +1 -1
  35. package/components/dataGrid/contracts/dataGridContract.d.ts +2 -1
  36. package/components/dataGrid/useListLayout.d.ts +1 -1
  37. package/components/dataGrid.cjs +3 -3
  38. package/components/dataGrid.mjs +453 -453
  39. package/components/dateField.cjs +1 -1
  40. package/components/dateField.mjs +16 -16
  41. package/components/datePicker.cjs +1 -1
  42. package/components/datePicker.mjs +1 -1
  43. package/components/dateTime.cjs +1 -1
  44. package/components/dateTime.mjs +1 -1
  45. package/components/dialog.cjs +1 -1
  46. package/components/dialog.mjs +1 -1
  47. package/components/flex.cjs +1 -1
  48. package/components/flex.mjs +1 -1
  49. package/components/flow.cjs +1 -0
  50. package/components/flow.d.ts +56 -0
  51. package/components/flow.mjs +98 -0
  52. package/components/form.cjs +1 -1
  53. package/components/form.mjs +1 -1
  54. package/components/grid.cjs +1 -1
  55. package/components/grid.mjs +1 -1
  56. package/components/icon.cjs +1 -1
  57. package/components/icon.mjs +1 -1
  58. package/components/list.cjs +1 -1
  59. package/components/list.mjs +1 -1
  60. package/components/menu.cjs +1 -1
  61. package/components/menu.mjs +1 -1
  62. package/components/popover.cjs +1 -1
  63. package/components/popover.mjs +1 -1
  64. package/components/radioButton.cjs +1 -1
  65. package/components/radioButton.mjs +1 -1
  66. package/components/radioGroup.cjs +1 -1
  67. package/components/radioGroup.mjs +2 -1
  68. package/components/semantics.cjs +1 -1
  69. package/components/semantics.d.ts +32 -30
  70. package/components/semantics.mjs +3 -3
  71. package/components/skeleton.cjs +1 -1
  72. package/components/skeleton.d.ts +1 -1
  73. package/components/skeleton.mjs +3 -1
  74. package/components/slider.cjs +1 -1
  75. package/components/slider.mjs +1 -1
  76. package/components/sortableList.cjs +1 -1
  77. package/components/sortableList.mjs +1 -1
  78. package/components/svg.cjs +1 -1
  79. package/components/svg.mjs +14 -14
  80. package/components/swipeItem.cjs +1 -1
  81. package/components/swipeItem.mjs +1 -1
  82. package/components/tabs.cjs +1 -1
  83. package/components/tabs.mjs +1 -1
  84. package/components/textarea.cjs +1 -1
  85. package/components/textarea.d.ts +1 -1
  86. package/components/textarea.mjs +1 -1
  87. package/components/textbox.cjs +1 -1
  88. package/components/textbox.d.ts +1 -1
  89. package/components/textbox.mjs +1 -1
  90. package/components/timeZoneSelect.d.ts +1 -1
  91. package/components/toaster.cjs +1 -1
  92. package/components/toaster.mjs +14 -15
  93. package/components/tooltip.cjs +1 -1
  94. package/components/tooltip.mjs +1 -1
  95. package/components/virtualList.cjs +1 -1
  96. package/components/virtualList.mjs +1 -1
  97. package/components/visuallyHidden.cjs +1 -1
  98. package/components/visuallyHidden.mjs +1 -1
  99. package/docs/a11y.md +1 -2
  100. package/docs/components.md +1 -0
  101. package/docs/index.md +1 -1
  102. package/docs/props.md +1 -1
  103. package/effects.cjs +1 -1
  104. package/effects.mjs +2 -2
  105. package/identity.cjs +1 -1
  106. package/identity.mjs +5 -7
  107. package/package.json +50 -36
  108. package/react/boxClassNames.d.ts +2 -2
  109. package/react/effects.d.ts +5 -6
  110. package/react/identity/useIdentifier.d.ts +0 -3
  111. package/react-shared.cjs +1 -1
  112. package/react-shared.mjs +42 -3
  113. package/rsc.cjs +1 -1
  114. package/rsc.d.ts +1 -0
  115. package/rsc.mjs +2 -2
  116. package/utils/catalog/catalogContracts.d.ts +0 -10
  117. package/utils/flow/flowPalette.d.ts +17 -0
  118. package/utils/flow/flowUtils.d.ts +47 -0
@@ -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._(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
+ "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._(S,`DashboardGrid`),D=T;D.displayName=`Widget`,exports.DashboardUtils=d,exports.Widget=D,exports.default=E;
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { f as e } from "../react-shared.mjs";
2
+ import { _ as e } from "../react-shared.mjs";
3
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";
@@ -515,6 +515,7 @@ export interface ColumnType<TRow> {
515
515
  columns?: ColumnType<TRow>[];
516
516
  /** `start`/`end` follow the reading order; `left`/`right` stay on the screen side they name. */
517
517
  align?: 'start' | 'end' | 'center' | 'left' | 'right';
518
+ /** Renders the cell's content, edge to edge: the built-in text pads itself `px={3}`, so text of your own should too. */
518
519
  Cell?: React.ComponentType<{
519
520
  cell: CellModel<TRow>;
520
521
  }>;
@@ -530,7 +531,7 @@ export interface ColumnType<TRow> {
530
531
  exportValue?: (row: TRow) => string | number | boolean | Date | null;
531
532
  /** The number format its values are written with in a spreadsheet, `'#,##0.00'` or `'yyyy-mm-dd'`. */
532
533
  exportFormat?: string;
533
- /** Renders this column's aggregate wherever one appears. Without it the value is rendered as it is. */
534
+ /** Renders this column's aggregate wherever one appears, edge to edge like `Cell`. Without it the value is rendered as it is. */
534
535
  AggregateCell?: React.ComponentType<{
535
536
  cell: AggregateCellModel<TRow>;
536
537
  }>;
@@ -7,7 +7,7 @@ type ListLayout = typeof DataGridList;
7
7
  export declare function loadListLayout(): Promise<ListLayout>;
8
8
  /**
9
9
  * The list layout's component once it has arrived, or `undefined` while the grid should go on drawing its
10
- * table. No `React.lazy`: a Suspense boundary is the one thing a React 16 or 17 server cannot render.
10
+ * table. No `React.lazy`: a boundary that suspends while hydrating throws the server's HTML away.
11
11
  */
12
12
  export default function useListLayout(active: boolean): ListLayout | undefined;
13
13
  export {};