@visulima/tui-kit 1.0.2 → 1.0.4

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 (162) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/accordion.js +1 -1
  3. package/dist/alert.js +1 -1
  4. package/dist/animate-presence.js +1 -1
  5. package/dist/approval-prompt.js +1 -1
  6. package/dist/area-chart.js +1 -1
  7. package/dist/badge.js +1 -1
  8. package/dist/bar-chart.js +1 -1
  9. package/dist/big-text.js +1 -1
  10. package/dist/blink-dot.js +1 -1
  11. package/dist/breadcrumb.js +1 -1
  12. package/dist/button.js +1 -1
  13. package/dist/calendar.js +1 -1
  14. package/dist/card.js +1 -1
  15. package/dist/checkbox-group.js +1 -1
  16. package/dist/checkbox.js +1 -1
  17. package/dist/code.js +2 -2
  18. package/dist/collapsible.js +1 -1
  19. package/dist/color-picker.js +1 -1
  20. package/dist/command-block.js +4 -4
  21. package/dist/command-palette.js +1 -1
  22. package/dist/confirm-dialog.js +1 -1
  23. package/dist/confirm-input.js +1 -1
  24. package/dist/console-overlay.js +1 -1
  25. package/dist/content-switcher.js +1 -1
  26. package/dist/controlled-scroll-view.d.ts +43 -3
  27. package/dist/controlled-scroll-view.js +1 -1
  28. package/dist/data-grid.js +1 -1
  29. package/dist/date-picker.js +1 -1
  30. package/dist/definition-list.js +1 -1
  31. package/dist/dialog.d.ts +1 -1
  32. package/dist/dialog.js +1 -1
  33. package/dist/diff-view.js +1 -1
  34. package/dist/digits.js +1 -1
  35. package/dist/directory-tree.js +1 -1
  36. package/dist/divider.js +1 -1
  37. package/dist/drawer.js +1 -1
  38. package/dist/file-change.js +1 -1
  39. package/dist/file-picker-entry.d.ts +92 -2
  40. package/dist/file-picker-entry.js +1 -1
  41. package/dist/form.js +1 -1
  42. package/dist/gauge.js +1 -1
  43. package/dist/gradient.js +1 -1
  44. package/dist/grid.js +1 -1
  45. package/dist/heading.js +1 -1
  46. package/dist/heatmap.js +1 -1
  47. package/dist/help.js +1 -1
  48. package/dist/histogram.js +1 -1
  49. package/dist/image.js +1 -1
  50. package/dist/index.d.ts +25 -9
  51. package/dist/index.js +1 -1
  52. package/dist/json.js +1 -1
  53. package/dist/kbd.js +1 -1
  54. package/dist/line-chart.js +1 -1
  55. package/dist/link.js +1 -1
  56. package/dist/loading-indicator.js +1 -1
  57. package/dist/log.js +1 -1
  58. package/dist/markdown.js +1 -1
  59. package/dist/masked-input.js +1 -1
  60. package/dist/menu.js +1 -1
  61. package/dist/message-bubble.js +1 -1
  62. package/dist/model-badge.js +1 -1
  63. package/dist/model-selector.js +1 -1
  64. package/dist/multi-progress.js +1 -1
  65. package/dist/multi-select.js +1 -1
  66. package/dist/notification-badge.js +1 -1
  67. package/dist/number-input.js +1 -1
  68. package/dist/operation-tree.js +1 -1
  69. package/dist/option-list.js +1 -1
  70. package/dist/ordered-list.js +1 -1
  71. package/dist/packem_shared/ControlledScrollView-soZtm3m7.js +1 -0
  72. package/dist/packem_shared/FilePicker-KGAg6v5x.js +1 -0
  73. package/dist/packem_shared/ScrollBar-arHRP6OT.js +1 -0
  74. package/dist/packem_shared/ScrollBarBox-C8wZ_Slk.js +1 -0
  75. package/dist/packem_shared/ScrollList-BCqHHps6.js +1 -0
  76. package/dist/packem_shared/ScrollView-Dt5E9Yl7.js +1 -0
  77. package/dist/packem_shared/TreeNodeMap-BK7nRlt0.js +1 -0
  78. package/dist/packem_shared/TreeView-BEZAFOfr.js +1 -0
  79. package/dist/packem_shared/controlled-scroll-view-BHCYjiKa.js +1 -0
  80. package/dist/packem_shared/line-chart-BqOUjZTt.js +1 -0
  81. package/dist/packem_shared/treeViewTheme-DuCcyBDe.js +1 -0
  82. package/dist/packem_shared/useTreeView-Dt_iWxVs.js +1 -0
  83. package/dist/packem_shared/useTreeViewState-aHwNZhIE.js +1 -0
  84. package/dist/packem_shared/{variant-config-BJqpNo7H.js → variant-config-BnAmf1rP.js} +1 -1
  85. package/dist/paginator.js +1 -1
  86. package/dist/paragraph.js +1 -1
  87. package/dist/path-input.js +1 -1
  88. package/dist/pie-chart.js +1 -1
  89. package/dist/placeholder.js +1 -1
  90. package/dist/popover.js +1 -1
  91. package/dist/progress-bar.js +1 -1
  92. package/dist/progress-circle.js +1 -1
  93. package/dist/qr-code.js +1 -1
  94. package/dist/r/registry.json +9 -0
  95. package/dist/r/reset.d.json +22 -0
  96. package/dist/radio-group.js +1 -1
  97. package/dist/scatter-plot.js +1 -1
  98. package/dist/scroll-bar-box.d.ts +13 -3
  99. package/dist/scroll-bar-box.js +1 -1
  100. package/dist/scroll-bar.d.ts +18 -3
  101. package/dist/scroll-bar.js +1 -1
  102. package/dist/scroll-list.d.ts +12 -3
  103. package/dist/scroll-list.js +1 -1
  104. package/dist/scroll-view.d.ts +98 -3
  105. package/dist/scroll-view.js +1 -1
  106. package/dist/search-input.js +1 -1
  107. package/dist/select-input-indicator.js +1 -1
  108. package/dist/select-input-item.js +1 -1
  109. package/dist/select-input.js +1 -1
  110. package/dist/shimmer-text.js +1 -1
  111. package/dist/sidebar.js +1 -1
  112. package/dist/slider.js +1 -1
  113. package/dist/sparkline.js +1 -1
  114. package/dist/spinner.js +1 -1
  115. package/dist/status-line.js +1 -1
  116. package/dist/status-message.js +1 -1
  117. package/dist/stepper.js +1 -1
  118. package/dist/stopwatch.js +1 -1
  119. package/dist/streaming-text.js +1 -1
  120. package/dist/switch.js +1 -1
  121. package/dist/tab.js +1 -1
  122. package/dist/table.js +1 -1
  123. package/dist/tabs.js +1 -1
  124. package/dist/tag-input.js +1 -1
  125. package/dist/tag.js +1 -1
  126. package/dist/text-input.js +1 -1
  127. package/dist/textarea.js +2 -2
  128. package/dist/thinking-block.js +1 -1
  129. package/dist/time-picker.js +1 -1
  130. package/dist/timer.js +1 -1
  131. package/dist/toast.js +1 -1
  132. package/dist/token-usage.js +1 -1
  133. package/dist/tool-call.js +1 -1
  134. package/dist/tooltip.js +1 -1
  135. package/dist/transition.js +1 -1
  136. package/dist/tree-select.js +1 -1
  137. package/dist/tree-view-entry.d.ts +314 -4
  138. package/dist/tree-view-entry.js +1 -1
  139. package/dist/unordered-list.js +1 -1
  140. package/dist/use-linked-scroll.d.ts +1 -1
  141. package/dist/use-linked-scroll.js +1 -1
  142. package/package.json +8 -8
  143. package/dist/packem_shared/ControlledScrollView-BzlbIUph.js +0 -1
  144. package/dist/packem_shared/FilePicker-V5H2fb-v.js +0 -1
  145. package/dist/packem_shared/ScrollBar-C9i3z3Ft.js +0 -1
  146. package/dist/packem_shared/ScrollBarBox-DZEC8YnV.js +0 -1
  147. package/dist/packem_shared/ScrollList-Djtb2vVy.js +0 -1
  148. package/dist/packem_shared/ScrollView-ESxpl6Hy.js +0 -1
  149. package/dist/packem_shared/TreeNodeMap-cJlYqckB.js +0 -1
  150. package/dist/packem_shared/TreeView-q0l446NV.js +0 -1
  151. package/dist/packem_shared/controlled-scroll-view-DerVKKv6.js +0 -1
  152. package/dist/packem_shared/controlled-scroll-view.d-D3kZZzjI.d.ts +0 -43
  153. package/dist/packem_shared/file-picker.d-CH7pccC7.d.ts +0 -92
  154. package/dist/packem_shared/line-chart-BbhMhcZg.js +0 -1
  155. package/dist/packem_shared/scroll-bar-box.d-CpTYEcTZ.d.ts +0 -13
  156. package/dist/packem_shared/scroll-bar.d-B4sD1hBR.d.ts +0 -18
  157. package/dist/packem_shared/scroll-list.d-CPCF0RwC.d.ts +0 -12
  158. package/dist/packem_shared/scroll-view.d-GZcgAHl4.d.ts +0 -98
  159. package/dist/packem_shared/treeViewTheme-Dq3ekRAC.js +0 -1
  160. package/dist/packem_shared/use-tree-view.d-DeMQ6G2r.d.ts +0 -314
  161. package/dist/packem_shared/useTreeView-D0JEqT6W.js +0 -1
  162. package/dist/packem_shared/useTreeViewState-BiTJakkh.js +0 -1
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import c from"@visulima/tui/components/box";import o from"@visulima/tui/components/text";function m({accentColor:e="blue",isFocused:t=!0,isSelected:i=!1}){return r(c,{marginRight:1,children:i?r(o,{color:e,dimColor:!t,children:"❯"}):r(o,{children:" "})})}export{m as SelectInputIndicator,m as default};
1
+ import{jsx as r}from"react/jsx-runtime";import l from"@visulima/tui/components/box";import o from"@visulima/tui/components/text";function d({accentColor:t="blue",isFocused:e=!0,isSelected:i=!1}){return r(l,{marginRight:1,children:i?r(o,{color:t,dimColor:!e,children:"❯"}):r(o,{children:" "})})}export{d as SelectInputIndicator,d as default};
@@ -1 +1 @@
1
- import{jsx as c}from"react/jsx-runtime";import i from"@visulima/tui/components/text";function s({accentColor:o="blue",defaultColor:l,isFocused:r=!0,isSelected:e=!1,label:t}){return c(i,{color:e?o:l,dimColor:e&&!r,children:t})}export{s as SelectInputItem,s as default};
1
+ import{jsx as m}from"react/jsx-runtime";import u from"@visulima/tui/components/text";function i({accentColor:o="blue",defaultColor:t,isFocused:e=!0,isSelected:r=!1,label:l}){return m(u,{color:r?o:t,dimColor:r&&!e,children:l})}export{i as SelectInputItem,i as default};
@@ -1 +1 @@
1
- import{jsx as k,jsxs as $}from"react/jsx-runtime";import{isDeepStrictEqual as ee}from"node:util";import q from"@visulima/tui/components/box";import te from"@visulima/tui/components/text";import ne from"@visulima/tui/hooks/use-input";import re from"@visulima/tui/hooks/use-window-size";import{useReducer as oe,useRef as w,useMemo as ce,useEffect as X,useCallback as H,createElement as Y}from"react";import{SelectInputIndicator as ie}from"./select-input-indicator.js";import{SelectInputItem as se}from"./select-input-item.js";const y=n=>"isSeparator"in n&&n.isSeparator,ae=[],de=/^[1-9]$/,d=-1,le="───",ue=Symbol("separator"),fe=(n,r)=>{switch(r.type){case"navigate":return{rotateIndex:r.rotateIndex,selectedIndex:r.selectedIndex};case"reset":return{rotateIndex:0,selectedIndex:r.hasInitialSelection?r.initialIndex:d};case"set":return{rotateIndex:r.selectedIndex,selectedIndex:r.selectedIndex};default:return n}},me=(n,r)=>{const{length:o}=n;if(o===0)return[];const u=(r%o+o)%o;return[...n.slice(u),...n.slice(0,u)]},S=(n,r,o,u)=>r?me(n,o).slice(0,u):n,E=(n,r,o)=>{const{length:u}=n;for(let b=0;b<u;b+=1){const C=((r+(b+1)*o)%u+u)%u;if(!y(n[C]))return C}return d},Z=(n,r)=>{if(r<0||r>=n.length)return d;const o=n[r];return o&&!y(o)?r:E(n,r-1,1)};function ve({accentColor:n="blue",defaultColor:r,index:o,indicatorComponent:u=ie,initialIndex:b,isFocused:C=!0,itemComponent:Q=se,items:t=ae,limit:N,onHighlight:f,onSelect:O,resetOnItemsChange:R=!0}){const{rows:W}=re(),z=typeof N=="number"?N:W,c=t.length>z,l=c?Math.min(z,t.length):t.length,A=l-1,G=typeof o=="number"||typeof b=="number",J=typeof o=="number"?o:b??d,D=J===d?d:Z(t,Math.min(J,A)),[F,v]=oe(fe,{rotateIndex:D>A?A-D:0,selectedIndex:D}),K=w(G),L=w(D),P=w(F);P.current=F;const j=w(O);j.current=O;const B=w(t),M=ce(()=>t.map(e=>y(e)?ue:e.value),[t]),T=w(M);K.current=G,L.current=D,X(()=>{R&&!ee(T.current,M)&&v({hasInitialSelection:K.current,initialIndex:L.current,type:"reset"}),T.current=M,B.current=t},[t,M,R]),X(()=>{if(typeof o=="number"){const e=Z(t,Math.min(o,A));v({selectedIndex:e===d?0:e,type:"set"})}},[o,t,A]);const U=H((e,i)=>{const s=S(t,c,e,l);if(i===d){const x=E(s,0,-1);if(x===d)return;v({rotateIndex:e,selectedIndex:x,type:"navigate"}),typeof f=="function"&&f(s[x],x);return}const h=(c?l:t.length)-1,a=i===0,m=a?h:i-1,p=a&&c?e+1:e,g=S(t,c,p,l),I=y(g[m])?E(g,m,-1):m;I!==d&&(v({rotateIndex:p,selectedIndex:I,type:"navigate"}),typeof f=="function"&&f(g[I],I))},[c,l,t,f]),V=H((e,i)=>{const s=S(t,c,e,l);if(i===d){const x=E(s,s.length-1,1);if(x===d)return;v({rotateIndex:e,selectedIndex:x,type:"navigate"}),typeof f=="function"&&f(s[x],x);return}const h=(c?l:t.length)-1,a=i===h,m=a?0:i+1,p=a&&c?e-1:e,g=S(t,c,p,l),I=y(g[m])?E(g,m,1):m;I!==d&&(v({rotateIndex:p,selectedIndex:I,type:"navigate"}),typeof f=="function"&&f(g[I],I))},[c,l,t,f]);ne(H((e,i)=>{const{rotateIndex:s,selectedIndex:h}=P.current;if((e==="k"||i.upArrow)&&U(s,h),(e==="j"||i.downArrow)&&V(s,h),de.test(e)){const a=Number.parseInt(e,10)-1,m=S(t,c,s,l);if(a>=0&&a<m.length){const p=m[a];p&&!y(p)&&(j.current?.(p),p.action?.())}}if(i.return&&h!==d){const a=S(t,c,s,l)[h];a&&!y(a)&&(j.current?.(a),a.action?.())}},[U,V,c,l,t]),{isActive:C});const _=S(t,c,F.rotateIndex,l);return k(q,{flexDirection:"column",children:_.map((e,i)=>{if(y(e))return k(q,{children:k(te,{dimColor:!0,children:e.label??le})},e.key??`separator-${String(i)}`);const s=i===F.selectedIndex;return $(q,{children:[Y(u,{accentColor:n,isFocused:C,isSelected:s}),Y(Q,{...e,accentColor:n,defaultColor:r,isFocused:C,isSelected:s})]},e.key??String(e.value))})})}export{ve as SelectInput,ve as default};
1
+ import{jsx as V,jsxs as H}from"react/jsx-runtime";import{isDeepStrictEqual as ee}from"node:util";import D from"@visulima/tui/components/box";import te from"@visulima/tui/components/text";import ne from"@visulima/tui/hooks/use-input";import re from"@visulima/tui/hooks/use-window-size";import{useReducer as se,useRef as N,useMemo as oe,useEffect as F,useCallback as O,createElement as G}from"react";import{SelectInputIndicator as ce}from"./select-input-indicator.js";import{SelectInputItem as le}from"./select-input-item.js";const v=n=>"isSeparator"in n&&n.isSeparator,ae=[],ie=/^[1-9]$/,i=-1,fe="───",ue=Symbol("separator"),de=(n,r)=>{switch(r.type){case"navigate":return{rotateIndex:r.rotateIndex,selectedIndex:r.selectedIndex};case"reset":return{rotateIndex:0,selectedIndex:r.hasInitialSelection?r.initialIndex:i};case"set":return{rotateIndex:r.selectedIndex,selectedIndex:r.selectedIndex};default:return n}},Ie=(n,r)=>{const{length:s}=n;if(s===0)return[];const u=(r%s+s)%s;return[...n.slice(u),...n.slice(0,u)]},E=(n,r,s,u)=>r?Ie(n,s).slice(0,u):n,L=(n,r,s)=>{const{length:u}=n;for(let w=0;w<u;w+=1){const A=((r+(w+1)*s)%u+u)%u;if(!v(n[A]))return A}return i},J=(n,r)=>{if(r<0||r>=n.length)return i;const s=n[r];return s&&!v(s)?r:L(n,r-1,1)};function ye({accentColor:n="blue",defaultColor:r,index:s,indicatorComponent:u=ce,initialIndex:w,isFocused:A=!0,itemComponent:Q=le,items:t=ae,limit:P,onHighlight:d,onSelect:j,resetOnItemsChange:B=!0}){const{rows:X}=re(),U=typeof P=="number"?P:X,o=t.length>U,f=o?Math.min(U,t.length):t.length,R=f-1,k=typeof s=="number"||typeof w=="number",z=typeof s=="number"?s:w??i,T=z===i?i:J(t,Math.min(z,R)),[h,y]=se(de,{rotateIndex:T>R?R-T:0,selectedIndex:T}),Y=N(k),$=N(T),q=N(h);q.current=h;const _=N(j);_.current=j;const Z=N(t),M=oe(()=>t.map(e=>v(e)?ue:e.value),[t]),C=N(M);Y.current=k,$.current=T,F(()=>{B&&!ee(C.current,M)&&y({hasInitialSelection:Y.current,initialIndex:$.current,type:"reset"}),C.current=M,Z.current=t},[t,M,B]),F(()=>{if(typeof s=="number"){const e=J(t,Math.min(s,R));y({selectedIndex:e===i?0:e,type:"set"})}},[s,t,R]);const K=O((e,l)=>{const a=E(t,o,e,f);if(l===i){const m=L(a,0,-1);if(m===i)return;y({rotateIndex:e,selectedIndex:m,type:"navigate"}),typeof d=="function"&&d(a[m],m);return}const S=(o?f:t.length)-1,I=l===0,c=I?S:l-1,p=I&&o?e+1:e,b=E(t,o,p,f),x=v(b[c])?L(b,c,-1):c;x!==i&&(y({rotateIndex:p,selectedIndex:x,type:"navigate"}),typeof d=="function"&&d(b[x],x))},[o,f,t,d]),W=O((e,l)=>{const a=E(t,o,e,f);if(l===i){const m=L(a,a.length-1,1);if(m===i)return;y({rotateIndex:e,selectedIndex:m,type:"navigate"}),typeof d=="function"&&d(a[m],m);return}const S=(o?f:t.length)-1,I=l===S,c=I?0:l+1,p=I&&o?e-1:e,b=E(t,o,p,f),x=v(b[c])?L(b,c,1):c;x!==i&&(y({rotateIndex:p,selectedIndex:x,type:"navigate"}),typeof d=="function"&&d(b[x],x))},[o,f,t,d]);ne(O((e,l)=>{const{rotateIndex:a,selectedIndex:S}=q.current;if((e==="k"||l.upArrow)&&K(a,S),(e==="j"||l.downArrow)&&W(a,S),ie.test(e)){const I=Number.parseInt(e,10)-1,c=E(t,o,a,f);if(I>=0&&I<c.length){const p=c[I];p&&!v(p)&&(_.current?.(p),p.action?.())}}if(l.return&&S!==i){const c=E(t,o,a,f)[S];c&&!v(c)&&(_.current?.(c),c.action?.())}},[K,W,o,f,t]),{isActive:A});const g=E(t,o,h.rotateIndex,f);return V(D,{flexDirection:"column",children:g.map((e,l)=>{if(v(e))return V(D,{children:V(te,{dimColor:!0,children:e.label??fe})},e.key??`separator-${String(l)}`);const a=l===h.selectedIndex;return H(D,{children:[G(u,{accentColor:n,isFocused:A,isSelected:a}),G(Q,{...e,accentColor:n,defaultColor:r,isFocused:A,isSelected:a})]},e.key??String(e.value))})})}export{ye as SelectInput,ye as default};
@@ -1 +1 @@
1
- import{jsx as i}from"react/jsx-runtime";import n from"@visulima/tui/components/text";import g from"@visulima/tui/hooks/use-animation";import{useMemo as s}from"react";function w({bandWidth:m=3,color:r,highlightColor:d="white",interval:a=60,text:e}){const{frame:p}=g({interval:a}),t=s(()=>[...e],[e]),l=t.length,u=l+m,x=l===0?0:p%u,b=s(()=>t.map((o,h)=>i(n,{color:r,dimColor:r===void 0,children:o},h)),[t,r]);if(l===0)return i(n,{color:r,children:e});const c=[];for(const[o,h]of t.entries()){const f=x-o;if(!(f>=0&&f<m)){c.push(b[o]);continue}c.push(i(n,{bold:!0,color:d,children:h},`band-${o}`))}return i(n,{children:c})}export{w as ShimmerText,w as default};
1
+ import{jsx as e}from"react/jsx-runtime";import r from"@visulima/tui/components/text";import B from"@visulima/tui/hooks/use-animation";import{useMemo as d}from"react";function y({bandWidth:a=3,color:o,highlightColor:h="white",interval:p=60,text:i}){const{frame:u}=B({interval:p}),t=d(()=>[...i],[i]),s=t.length,l=s+a,x=s===0?0:u%l,b=d(()=>t.map((n,m)=>e(r,{color:o,dimColor:o===void 0,children:n},m)),[t,o]);if(s===0)return e(r,{color:o,children:i});const c=[];for(const[n,m]of t.entries()){const f=x-n;if(!(f>=0&&f<a)){c.push(b[n]);continue}c.push(e(r,{bold:!0,color:h,children:m},`band-${n}`))}return e(r,{children:c})}export{y as ShimmerText,y as default};
package/dist/sidebar.js CHANGED
@@ -1 +1 @@
1
- import{jsx as t,jsxs as a}from"react/jsx-runtime";import e from"@visulima/tui/components/box";function c({children:l,divider:i=!0,dividerColor:f="gray",side:r="left",sidebar:n,width:s=24}){const d=t(e,{borderBottom:!1,borderColor:f,borderLeft:i&&r==="right",borderRight:i&&r==="left",borderStyle:"single",borderTop:!1,flexShrink:0,paddingX:1,width:s,children:n}),o=t(e,{flexGrow:1,paddingX:1,children:l});return a(e,{flexDirection:"row",children:[r==="left"?d:o,r==="left"?o:d]})}export{c as Sidebar,c as default};
1
+ import{jsx as f,jsxs as b}from"react/jsx-runtime";import e from"@visulima/tui/components/box";function c({children:n,divider:o=!0,dividerColor:i="gray",side:r="left",sidebar:a,width:d=24}){const t=f(e,{borderBottom:!1,borderColor:i,borderLeft:o&&r==="right",borderRight:o&&r==="left",borderStyle:"single",borderTop:!1,flexShrink:0,paddingX:1,width:d,children:a}),l=f(e,{flexGrow:1,paddingX:1,children:n});return b(e,{flexDirection:"row",children:[r==="left"?t:l,r==="left"?l:t]})}export{c as Sidebar,c as default};
package/dist/slider.js CHANGED
@@ -1 +1 @@
1
- import{jsx as a,jsxs as U}from"react/jsx-runtime";import A from"@visulima/tui/components/box";import C from"@visulima/tui/components/text";import X from"@visulima/tui/hooks/use-input";import{useState as Y,useRef as I,useCallback as J}from"react";const D=(u,d,v)=>Math.min(v,Math.max(d,u));function $({accentColor:u="green",defaultColor:d="gray",defaultValue:v=0,emptyCharacter:y="░",filledCharacter:j="█",isDisabled:e=!1,isFocused:K=!0,max:z=100,min:F=0,onChange:N,orientation:h="horizontal",step:m=1,thumbCharacter:k="●",value:q,width:L=20}){const o=Math.min(F,z),i=Math.max(F,z),w=q!==void 0,[O,Q]=Y(D(v,o,i)),x=w?D(q,o,i):O,G=I(N);G.current=N;const s=I(x);s.current=x;const n=J(t=>{const r=D(t,o,i);w||Q(r),G.current?.(r)},[o,i,w]),b=m*10,f=i-o,S=J((t,r)=>{const M=h==="horizontal"?r.rightArrow:r.upArrow,p=h==="horizontal"?r.leftArrow:r.downArrow;if(M){n(s.current+m);return}if(p){n(s.current-m);return}if(r.pageUp){n(s.current+b);return}if(r.pageDown){n(s.current-b);return}if(r.home){n(o);return}if(r.end){n(i);return}if(t>="0"&&t<="9"){const R=Number.parseInt(t,10)/10;n(o+f*R)}},[m,b,o,i,f,h,n]);X(S,{isActive:K&&!e});const g=Math.max(1,L),V=f===0?0:(x-o)/f,l=Math.round(V*(g-1));if(h==="vertical"){const t=[];for(let r=g-1;r>=0;r--){const M=r===l,p=r<=l;t.push(a(A,{children:a(C,{color:e?void 0:p?u:d,dimColor:e,children:M?k:p?j:y})},r))}return a(A,{flexDirection:"column",children:t})}let c="";for(let t=0;t<g;t++)t===l?c+=k:t<l?c+=j:c+=y;const W=c.slice(0,l),E=c[l]??"",H=c.slice(l+1);return U(A,{children:[a(C,{color:e?void 0:u,dimColor:e,children:W}),a(C,{bold:!0,color:e?void 0:u,dimColor:e,children:E}),a(C,{color:e?void 0:d,dimColor:e,children:H})]})}export{$ as Slider,$ as default};
1
+ import{jsx as u,jsxs as X}from"react/jsx-runtime";import S from"@visulima/tui/components/box";import x from"@visulima/tui/components/text";import Y from"@visulima/tui/hooks/use-input";import{useState as Z,useRef as N,useCallback as U}from"react";const I=(s,m,w)=>Math.min(w,Math.max(m,s));function D({accentColor:s="green",defaultColor:m="gray",defaultValue:w=0,emptyCharacter:P="░",filledCharacter:R="█",isDisabled:t=!1,isFocused:q=!0,max:j=100,min:B=0,onChange:F,orientation:a="horizontal",step:d=1,thumbCharacter:T="●",value:V,width:C=20}){const n=Math.min(B,j),c=Math.max(B,j),v=V!==void 0,[E,G]=Z(I(w,n,c)),M=v?I(V,n,c):E,H=N(F);H.current=F;const f=N(M);f.current=M;const e=U(o=>{const r=I(o,n,c);v||G(r),H.current?.(r)},[n,c,v]),g=d*10,h=c-n,J=U((o,r)=>{const z=a==="horizontal"?r.rightArrow:r.upArrow,p=a==="horizontal"?r.leftArrow:r.downArrow;if(z){e(f.current+d);return}if(p){e(f.current-d);return}if(r.pageUp){e(f.current+g);return}if(r.pageDown){e(f.current-g);return}if(r.home){e(n);return}if(r.end){e(c);return}if(o>="0"&&o<="9"){const W=Number.parseInt(o,10)/10;e(n+h*W)}},[d,g,n,c,h,a,e]);Y(J,{isActive:q&&!t});const A=Math.max(1,C),K=h===0?0:(M-n)/h,i=Math.round(K*(A-1));if(a==="vertical"){const o=[];for(let r=A-1;r>=0;r--){const z=r===i,p=r<=i;o.push(u(S,{children:u(x,{color:t?void 0:p?s:m,dimColor:t,children:z?T:p?R:P})},r))}return u(S,{flexDirection:"column",children:o})}let l="";for(let o=0;o<A;o++)o===i?l+=T:o<i?l+=R:l+=P;const L=l.slice(0,i),O=l[i]??"",Q=l.slice(i+1);return X(S,{children:[u(x,{color:t?void 0:s,dimColor:t,children:L}),u(x,{bold:!0,color:t?void 0:s,dimColor:t,children:O}),u(x,{color:t?void 0:m,dimColor:t,children:Q})]})}export{D as Slider,D as default};
package/dist/sparkline.js CHANGED
@@ -1 +1 @@
1
- import{jsx as s}from"react/jsx-runtime";import c from"@visulima/tui/components/text";import{useMemo as d}from"react";const h="▁▂▃▄▅▆▇█",I="░▒▓█",x=(m,o,r,t)=>{if(r===0)return t[0];const i=(m-o)/r,n=Math.max(0,Math.min(t.length-1,Math.floor(i*t.length)));return t[n]},N=(m,o,r)=>{let t=o??Number.POSITIVE_INFINITY,i=r??Number.NEGATIVE_INFINITY;if(o===void 0||r===void 0)for(const n of m)o===void 0&&n<t&&(t=n),r===void 0&&n>i&&(i=n);return{max:i,min:t}};function M({color:m,data:o,dither:r=!1,max:t,min:i}){const n=d(()=>{if(o.length===0)return"";const{max:e,min:a}=N(o,i,t),l=e-a,u=r?I:h;return o.map(f=>x(f,a,l,u)).join("")},[o,r,i,t]);return n.length===0?null:s(c,{color:m,children:n})}export{M as Sparkline,M as default};
1
+ import{jsx as m}from"react/jsx-runtime";import I from"@visulima/tui/components/text";import{useMemo as h}from"react";const N="▁▂▃▄▅▆▇█",p="░▒▓█",T=(c,o,n,t)=>{if(n===0)return t[0];const e=(c-o)/n,r=Math.max(0,Math.min(t.length-1,Math.floor(e*t.length)));return t[r]},a=(c,o,n)=>{let t=o??Number.POSITIVE_INFINITY,e=n??Number.NEGATIVE_INFINITY;if(o===void 0||n===void 0)for(const r of c)o===void 0&&r<t&&(t=r),n===void 0&&r>e&&(e=r);return{max:e,min:t}};function M({color:c,data:o,dither:n=!1,max:t,min:e}){const r=h(()=>{if(o.length===0)return"";const{max:i,min:f}=a(o,e,t),l=i-f,u=n?p:N;return o.map(s=>T(s,f,l,u)).join("")},[o,n,e,t]);return r.length===0?null:m(I,{color:c,children:r})}export{M as Sparkline,M as default};
package/dist/spinner.js CHANGED
@@ -1 +1 @@
1
- import{jsx as i}from"react/jsx-runtime";import{getSpinner as e}from"@visulima/spinner";import m from"@visulima/tui/components/text";import p from"@visulima/tui/hooks/use-animation";function d({type:n="dots"}){const r=e(n)??e("dots"),t=r?.frames??[" "],{frame:o}=p({interval:r?.interval??80});return i(m,{children:t[o%t.length]})}export{d as Spinner,d as default};
1
+ import{jsx as i}from"react/jsx-runtime";import{getSpinner as n}from"@visulima/spinner";import m from"@visulima/tui/components/text";import s from"@visulima/tui/hooks/use-animation";function l({type:e="dots"}){const r=n(e)??n("dots"),t=r?.frames??[" "],{frame:o}=s({interval:r?.interval??80});return i(m,{children:t[o%t.length]})}export{l as Spinner,l as default};
@@ -1 +1 @@
1
- import{jsxs as l,jsx as t}from"react/jsx-runtime";import o from"@visulima/tui/components/box";import c from"@visulima/tui/components/text";const e=(r,i)=>{if(r!==void 0)return typeof r=="string"||typeof r=="number"?t(c,{color:i,children:r}):r};function x({backgroundColor:r,center:i,color:n,left:d,right:f}){return l(o,{backgroundColor:r,paddingX:1,width:"100%",children:[t(o,{flexGrow:1,flexShrink:1,minWidth:0,children:e(d,n)}),i===void 0?void 0:t(o,{flexGrow:0,flexShrink:0,justifyContent:"center",children:e(i,n)}),t(o,{flexGrow:1,flexShrink:1,justifyContent:"flex-end",minWidth:0,children:e(f,n)})]})}export{x as StatusLine,x as default};
1
+ import{jsxs as l,jsx as n}from"react/jsx-runtime";import e from"@visulima/tui/components/box";import x from"@visulima/tui/components/text";const f=(i,r)=>{if(i!==void 0)return typeof i=="string"||typeof i=="number"?n(x,{color:r,children:i}):i};function s({backgroundColor:i,center:r,color:t,left:d,right:o}){return l(e,{backgroundColor:i,paddingX:1,width:"100%",children:[n(e,{flexGrow:1,flexShrink:1,minWidth:0,children:f(d,t)}),r===void 0?void 0:n(e,{flexGrow:0,flexShrink:0,justifyContent:"center",children:f(r,t)}),n(e,{flexGrow:1,flexShrink:1,justifyContent:"flex-end",minWidth:0,children:f(o,t)})]})}export{s as StatusLine,s as default};
@@ -1 +1 @@
1
- import{jsxs as a,jsx as o}from"react/jsx-runtime";import c from"@visulima/tui/components/box";import r from"@visulima/tui/components/text";import{o as e}from"./packem_shared/variant-config-BJqpNo7H.js";function d({children:i,variant:t}){const{color:s,icon:n}=e[t];return a(c,{gap:1,children:[o(r,{color:s,children:n}),o(r,{children:i})]})}export{d as StatusMessage,d as default};
1
+ import{jsxs as m,jsx as o}from"react/jsx-runtime";import n from"@visulima/tui/components/box";import r from"@visulima/tui/components/text";import{V as a}from"./packem_shared/variant-config-BnAmf1rP.js";function l({children:t,variant:s}){const{color:e,icon:i}=a[s];return m(n,{gap:1,children:[o(r,{color:e,children:i}),o(r,{children:t})]})}export{l as StatusMessage,l as default};
package/dist/stepper.js CHANGED
@@ -1 +1 @@
1
- import{jsx as i,jsxs as d}from"react/jsx-runtime";import n from"@visulima/tui/components/box";import l from"@visulima/tui/components/text";import{Fragment as v}from"react";const s={active:"●",completed:"✔",error:"✖",pending:"○"},u=(t,c,m)=>t.status!==void 0?t.status:c<m?"completed":c===m?"active":"pending";function y({accentColor:t="blue",activeIndex:c=0,errorColor:m="red",orientation:g="horizontal",steps:p}){return g==="vertical"?i(n,{flexDirection:"column",children:p.map((r,o)=>{const e=u(r,o,c),a=o===p.length-1,h=e==="error"?m:e==="pending"?void 0:t;return d(n,{flexDirection:"column",children:[d(n,{children:[d(l,{color:h,dimColor:e==="pending",children:[s[e]," "]}),i(l,{bold:e==="active",color:h,dimColor:e==="pending",children:r.label})]}),r.description===void 0?void 0:i(n,{marginLeft:2,children:i(l,{dimColor:!0,children:r.description})}),a?void 0:i(n,{marginLeft:0,children:i(l,{dimColor:!0,children:"│"})})]},r.key??o)})}):i(n,{children:p.map((r,o)=>{const e=u(r,o,c),a=e==="error"?m:e==="pending"?void 0:t,h=o===p.length-1;return d(v,{children:[d(n,{children:[d(l,{color:a,dimColor:e==="pending",children:[s[e]," "]}),i(l,{bold:e==="active",color:a,dimColor:e==="pending",children:r.label})]}),h?void 0:i(l,{dimColor:!0,children:" ── "})]},r.key??o)})})}export{y as Stepper,y as default};
1
+ import{jsx as o,jsxs as l}from"react/jsx-runtime";import e from"@visulima/tui/components/box";import t from"@visulima/tui/components/text";import{Fragment as p}from"react";const s={active:"●",completed:"✔",error:"✖",pending:"○"},f=(d,c,m)=>d.status!==void 0?d.status:c<m?"completed":c===m?"active":"pending";function S({accentColor:d="blue",activeIndex:c=0,errorColor:m="red",orientation:g="horizontal",steps:u}){return g==="vertical"?o(e,{flexDirection:"column",children:u.map((i,n)=>{const r=f(i,n,c),a=n===u.length-1,h=r==="error"?m:r==="pending"?void 0:d;return l(e,{flexDirection:"column",children:[l(e,{children:[l(t,{color:h,dimColor:r==="pending",children:[s[r]," "]}),o(t,{bold:r==="active",color:h,dimColor:r==="pending",children:i.label})]}),i.description===void 0?void 0:o(e,{marginLeft:2,children:o(t,{dimColor:!0,children:i.description})}),a?void 0:o(e,{marginLeft:0,children:o(t,{dimColor:!0,children:"│"})})]},i.key??n)})}):o(e,{children:u.map((i,n)=>{const r=f(i,n,c),a=r==="error"?m:r==="pending"?void 0:d,h=n===u.length-1;return l(p,{children:[l(e,{children:[l(t,{color:a,dimColor:r==="pending",children:[s[r]," "]}),o(t,{bold:r==="active",color:a,dimColor:r==="pending",children:i.label})]}),h?void 0:o(t,{dimColor:!0,children:" ── "})]},i.key??n)})})}export{S as Stepper,S as default};
package/dist/stopwatch.js CHANGED
@@ -1 +1 @@
1
- import{jsx as p}from"react/jsx-runtime";import m from"@visulima/tui/components/text";import i from"@visulima/tui/hooks/use-stopwatch";import{formatDuration as f}from"@visulima/tui/utils";import{useImperativeHandle as n}from"react";const S=({autoStart:o,bold:r,color:e,format:a=f,interval:l,ref:s})=>{const t=i({autoStart:o,interval:l});return n(s,()=>({lap:t.lap,reset:t.reset,start:t.start,stop:t.stop,toggle:t.toggle}),[t.lap,t.reset,t.start,t.stop,t.toggle]),p(m,{bold:r,color:e,children:a(t.elapsed)})};export{S as Stopwatch,S as default};
1
+ import{jsx as m}from"react/jsx-runtime";import l from"@visulima/tui/components/text";import i from"@visulima/tui/hooks/use-stopwatch";import{formatDuration as f}from"@visulima/tui/utils";import{useImperativeHandle as n}from"react";const w=({autoStart:r,bold:o,color:e,format:s=f,interval:p,ref:a})=>{const t=i({autoStart:r,interval:p});return n(a,()=>({lap:t.lap,reset:t.reset,start:t.start,stop:t.stop,toggle:t.toggle}),[t.lap,t.reset,t.start,t.stop,t.toggle]),m(l,{bold:o,color:e,children:s(t.elapsed)})};export{w as Stopwatch,w as default};
@@ -1 +1 @@
1
- import{jsxs as x}from"react/jsx-runtime";import d from"@visulima/tui/components/text";import{useState as T,useRef as c,useEffect as i}from"react";function v({color:l,cursor:f="▊",interval:o=20,onComplete:n,showCursorWhenDone:a=!1,text:r}){const[t,s]=T(0),u=c(n),e=c(!1);u.current=n,i(()=>{s(0),e.current=!1},[r]),i(()=>{if(t>=r.length){e.current||(e.current=!0,u.current?.());return}const p=setTimeout(()=>{s(g=>Math.min(r.length,g+1))},o);return()=>{clearTimeout(p)}},[t,r,o]);const m=!(t>=r.length)||a,h=r.slice(0,t);return x(d,{color:l,children:[h,m?f:""]})}export{v as StreamingText,v as default};
1
+ import{jsxs as p}from"react/jsx-runtime";import T from"@visulima/tui/components/text";import{useState as b,useRef as c,useEffect as u}from"react";function S({color:f,cursor:l="▊",interval:n=20,onComplete:s,showCursorWhenDone:m=!1,text:e}){const[r,o]=b(0),i=c(s),t=c(!1);i.current=s,u(()=>{o(0),t.current=!1},[e]),u(()=>{if(r>=e.length){t.current||(t.current=!0,i.current?.());return}const d=setTimeout(()=>{o(g=>Math.min(e.length,g+1))},n);return()=>{clearTimeout(d)}},[r,e,n]);const a=!(r>=e.length)||m,h=e.slice(0,r);return p(T,{color:f,children:[h,a?l:""]})}export{S as StreamingText,S as default};
package/dist/switch.js CHANGED
@@ -1 +1 @@
1
- import{jsxs as l,jsx as x}from"react/jsx-runtime";import u from"@visulima/tui/components/box";import a from"@visulima/tui/components/text";import F from"@visulima/tui/hooks/use-focus";import j from"@visulima/tui/hooks/use-input";import{useState as y,useCallback as A}from"react";const D=["off","on"];function z({accentColor:e="green",autoFocus:f=!1,children:d,defaultValue:m=!1,isDisabled:r=!1,labels:n=D,onChange:s,value:c}){const{isFocused:i}=F({autoFocus:f,isActive:!r}),[v,p]=y(m),o=c??v;j(A((h,k)=>{if(i&&(k.return||h===" ")){const t=!o;c===void 0&&p(t),s?.(t)}},[i,o,c,s]),{isActive:!r&&i});const C=n[0],b=n[1],g=i?e:void 0;return l(u,{gap:1,children:[l(u,{gap:0,children:[l(a,{backgroundColor:o?void 0:"gray",color:o?void 0:"black",dimColor:r,children:[" ",C," "]}),l(a,{backgroundColor:o?e:void 0,color:o?"black":void 0,dimColor:r,children:[" ",b," "]})]}),d===void 0?void 0:x(a,{color:g,dimColor:r,children:d})]})}export{z as Switch,z as default};
1
+ import{jsxs as c,jsx as h}from"react/jsx-runtime";import u from"@visulima/tui/components/box";import i from"@visulima/tui/components/text";import F from"@visulima/tui/hooks/use-focus";import L from"@visulima/tui/hooks/use-input";import{useState as S,useCallback as j}from"react";const B=["off","on"];function _({accentColor:f="green",autoFocus:l=!1,children:e,defaultValue:p=!1,isDisabled:r=!1,labels:s=B,onChange:m,value:n}){const{isFocused:t}=F({autoFocus:l,isActive:!r}),[a,v]=S(p),o=n??a;L(j((C,A)=>{if(t&&(A.return||C===" ")){const d=!o;n===void 0&&v(d),m?.(d)}},[t,o,n,m]),{isActive:!r&&t});const x=s[0],g=s[1],k=t?f:void 0;return c(u,{gap:1,children:[c(u,{gap:0,children:[c(i,{backgroundColor:o?void 0:"gray",color:o?void 0:"black",dimColor:r,children:[" ",x," "]}),c(i,{backgroundColor:o?f:void 0,color:o?"black":void 0,dimColor:r,children:[" ",g," "]})]}),e===void 0?void 0:h(i,{color:k,dimColor:r,children:e})]})}export{_ as Switch,_ as default};
package/dist/tab.js CHANGED
@@ -1 +1 @@
1
- import{jsx as e,Fragment as n}from"react/jsx-runtime";function a({children:r}){return e(n,{children:r})}export{a as Tab,a as default};
1
+ import{jsx as t,Fragment as a}from"react/jsx-runtime";function n({children:r}){return t(a,{children:r})}export{n as Tab,n as default};
package/dist/table.js CHANGED
@@ -1 +1 @@
1
- import{jsx as y}from"react/jsx-runtime";import{Table as _}from"@visulima/tabular";import{THICK_BORDER as g,ROUNDED_BORDER as b,NO_BORDER as w,MINIMAL_BORDER as S,MARKDOWN_BORDER as W,DOUBLE_BORDER as C,DOTS_BORDER as H,DEFAULT_BORDER as E,BLOCK_BORDER as I,ASCII_BORDER as L}from"@visulima/tabular/style";import M from"@visulima/tui/components/text";import{useMemo as N}from"react";const x={ascii:L,block:I,default:E,dots:H,double:C,markdown:W,minimal:S,none:w,rounded:b,thick:g},A=t=>typeof t=="string"?{key:t}:t,T=({borderStyle:t="default",columns:d,data:a,formatCell:n,formatHeader:i,maxWidth:f,padding:m=1,showHeader:s=!0,skeleton:u="",wordWrap:D=!1})=>{const h=N(()=>{if(a.length===0)return"";let r;if(d?r=d.map(e=>A(e)):r=Object.keys(a[0]).map(e=>({key:e})),r.length===0)return"";const B=typeof t=="string"?x[t]??E:t,O=r.map(e=>e.width),k=O.some(e=>e!==void 0),R=new _({columnWidths:k?O:void 0,maxWidth:f,showHeader:s,style:{border:B,paddingLeft:m,paddingRight:m},wordWrap:D});if(s){const e=r.map(o=>{const l=o.header??o.key;return i?i(o.key):l});R.setHeaders(e)}for(const[e,o]of a.entries()){const l=r.map(c=>{const p=o[c.key];return n?n(p,c.key,e):p==null?u:String(p)});R.addRow(l)}return R.toString()},[t,d,a,n,i,f,m,s,u,D]);return y(M,{children:h})},q=T;export{q as Table,q as default};
1
+ import{jsx as h}from"react/jsx-runtime";import{Table as T}from"@visulima/tabular";import{THICK_BORDER as b,ROUNDED_BORDER as k,NO_BORDER as y,MINIMAL_BORDER as I,MARKDOWN_BORDER as v,DOUBLE_BORDER as C,DOTS_BORDER as L,DEFAULT_BORDER as a,BLOCK_BORDER as x,ASCII_BORDER as A}from"@visulima/tabular/style";import M from"@visulima/tui/components/text";import{useMemo as N}from"react";const S={ascii:A,block:x,default:a,dots:L,double:C,markdown:v,minimal:I,none:y,rounded:k,thick:b},w=e=>typeof e=="string"?{key:e}:e,K=({borderStyle:e="default",columns:r,data:s,formatCell:R,formatHeader:u,maxWidth:D,padding:m=1,showHeader:O=!0,skeleton:c="",wordWrap:E=!1})=>{const p=N(()=>{if(s.length===0)return"";let n;if(r?n=r.map(t=>w(t)):n=Object.keys(s[0]).map(t=>({key:t})),n.length===0)return"";const _=typeof e=="string"?S[e]??a:e,d=n.map(t=>t.width),g=d.some(t=>t!==void 0),f=new T({columnWidths:g?d:void 0,maxWidth:D,showHeader:O,style:{border:_,paddingLeft:m,paddingRight:m},wordWrap:E});if(O){const t=n.map(o=>{const l=o.header??o.key;return u?u(o.key):l});f.setHeaders(t)}for(const[t,o]of s.entries()){const l=n.map(B=>{const i=o[B.key];return R?R(i,B.key,t):i==null?c:String(i)});f.addRow(l)}return f.toString()},[e,r,s,R,u,D,m,O,c,E]);return h(M,{children:p})},q=K;export{q as Table,q as default};
package/dist/tabs.js CHANGED
@@ -1 +1 @@
1
- import{jsx as y,jsxs as A}from"react/jsx-runtime";import I from"@visulima/tui/components/box";import j from"@visulima/tui/components/text";import X from"@visulima/tui/hooks/use-input";import{useRef as D,useState as Y,useCallback as d,useEffect as Z,useMemo as M,Children as _}from"react";const $=/^\d$/u,G=e=>e!=null&&typeof e=="object"&&"props"in e&&"name"in e.props,H=e=>{const t=[];for(const n of _.toArray(e))G(n)&&t.push(n);return t},F=(e,t)=>e.some(n=>t[n]),J=(e,t,n)=>e?t?{backgroundColor:n?.activeTab?.backgroundColor??"green",color:n?.activeTab?.color??"black"}:{backgroundColor:"gray",color:"black"}:{backgroundColor:void 0,color:void 0};function nr({children:e,colors:t,defaultValue:n,flexDirection:f="row",isFocused:b,keyMap:u,onChange:N,showIndex:L=!0,value:x,width:v}){const s=H(e),c=s.length,p=D(s);p.current=s;const l=f==="column"||f==="column-reverse",g=x!==void 0,[O,P]=Y(()=>{const r=x??n;if(r==null||c===0)return 0;const o=s.findIndex(a=>a.props.name===r);return o===-1?0:o}),h=g?Math.max(0,s.findIndex(r=>r.props.name===x)):O,Q=d(()=>{},[]),i=g?Q:P,m=D(N);m.current=N,Z(()=>{if(g)return;const r=p.current[h];r&&m.current(r.props.name,r)},[]);const R=M(()=>u?.previous??[l?"upArrow":"leftArrow"],[u?.previous,l]),S=M(()=>u?.next??[l?"downArrow":"rightArrow"],[u?.next,l]),T=u?.useNumbers??!0,V=u?.useTab??!0,C=D(h);C.current=h;const q=d(r=>{i(r);const o=p.current[r];o&&m.current(o.props.name,o)},[i]),k=d(()=>{const r=(C.current+1)%c;i(r);const o=p.current[r];o&&m.current(o.props.name,o)},[c,i]),w=d(()=>{const r=(C.current-1+c)%c;i(r);const o=p.current[r];o&&m.current(o.props.name,o)},[c,i]);X(d((r,o)=>{if(F(R,o)){w();return}if(F(S,o)){k();return}if(o.tab&&V&&b==null){o.shift?w():k();return}if(T&&o.meta&&$.test(r)){const a=r==="0"?9:Number.parseInt(r,10)-1;a<c&&q(a)}},[R,S,V,T,b,w,k,c,q]),{isActive:b!==!1});const z=typeof v=="number"?v:6,U=M(()=>l?"─".repeat(z):" | ",[l,z]);return y(I,{flexDirection:f,width:v,children:s.map((r,o)=>{const{name:a}=r.props,B=J(h===o,b!==!1,t);let E=null;return L&&(E=A(j,{color:"grey",children:[o+1,"."," "]})),A(I,{flexDirection:f,children:[o!==0&&y(j,{color:"dim",children:U}),A(I,{children:[E,y(j,{backgroundColor:B.backgroundColor,color:B.color,children:r})]})]},a)})})}export{nr as Tabs,nr as default};
1
+ import{jsx as I,jsxs as N}from"react/jsx-runtime";import R from"@visulima/tui/components/box";import E from"@visulima/tui/components/text";import J from"@visulima/tui/hooks/use-input";import{useRef as w,useState as O,useCallback as m,useEffect as Q,useMemo as K,Children as V}from"react";const X=/^\d$/u,Z=o=>o!=null&&typeof o=="object"&&"props"in o&&"name"in o.props,M=o=>{const e=[];for(const n of V.toArray(o))Z(n)&&e.push(n);return e},Y=(o,e)=>o.some(n=>e[n]),D=(o,e,n)=>o?e?{backgroundColor:n?.activeTab?.backgroundColor??"green",color:n?.activeTab?.color??"black"}:{backgroundColor:"gray",color:"black"}:{backgroundColor:void 0,color:void 0};function nr({children:o,colors:e,defaultValue:n,flexDirection:p="row",isFocused:d,keyMap:c,onChange:j,showIndex:$=!0,value:v,width:C}){const a=M(o),s=a.length,b=w(a);b.current=a;const u=p==="column"||p==="column-reverse",g=v!==void 0,[q,z]=O(()=>{const r=v??n;if(r==null||s===0)return 0;const t=a.findIndex(i=>i.props.name===r);return t===-1?0:t}),T=g?Math.max(0,a.findIndex(r=>r.props.name===v)):q,G=m(()=>{},[]),l=g?G:z,f=w(j);f.current=j,Q(()=>{if(g)return;const r=b.current[T];r&&f.current(r.props.name,r)},[]);const B=K(()=>c?.previous??[u?"upArrow":"leftArrow"],[c?.previous,u]),S=K(()=>c?.next??[u?"downArrow":"rightArrow"],[c?.next,u]),_=c?.useNumbers??!0,k=c?.useTab??!0,h=w(T);h.current=T;const y=m(r=>{l(r);const t=b.current[r];t&&f.current(t.props.name,t)},[l]),x=m(()=>{const r=(h.current+1)%s;l(r);const t=b.current[r];t&&f.current(t.props.name,t)},[s,l]),A=m(()=>{const r=(h.current-1+s)%s;l(r);const t=b.current[r];t&&f.current(t.props.name,t)},[s,l]);J(m((r,t)=>{if(Y(B,t)){A();return}if(Y(S,t)){x();return}if(t.tab&&k&&d==null){t.shift?A():x();return}if(_&&t.meta&&X.test(r)){const i=r==="0"?9:Number.parseInt(r,10)-1;i<s&&y(i)}},[B,S,k,_,d,A,x,s,y]),{isActive:d!==!1});const L=typeof C=="number"?C:6,H=K(()=>u?"─".repeat(L):" | ",[u,L]);return I(R,{flexDirection:p,width:C,children:a.map((r,t)=>{const{name:i}=r.props,U=D(T===t,d!==!1,e);let W=null;return $&&(W=N(E,{color:"grey",children:[t+1,"."," "]})),N(R,{flexDirection:p,children:[t!==0&&I(E,{color:"dim",children:H}),N(R,{children:[W,I(E,{backgroundColor:U.backgroundColor,color:U.color,children:r})]})]},i)})})}export{nr as Tabs,nr as default};
package/dist/tag-input.js CHANGED
@@ -1 +1 @@
1
- import{jsxs as I,jsx as l}from"react/jsx-runtime";import R from"@visulima/tui/components/box";import c from"@visulima/tui/components/text";import T from"@visulima/tui/hooks/use-focus";import w from"@visulima/tui/hooks/use-input";import{useState as F,useRef as P,useCallback as f}from"react";const V=[],W=[","," "];function H({accentColor:a="blue",autoFocus:S=!1,dedupe:m=!0,defaultValue:A=V,isDisabled:p=!1,max:u,onChange:h,onSubmit:g,placeholder:$="Add tags…",separators:b=W,value:v}){const{isFocused:s}=T({autoFocus:S,isActive:!p}),C=v!==void 0,[j,B]=F(A),[o,n]=F(""),t=v??j,k=P(h);k.current=h;const i=f(e=>{C||B(e),k.current?.(e)},[C]),d=f(e=>{const r=e.trim();if(r.length!==0&&!(u!==void 0&&t.length>=u)){if(m&&t.includes(r)){n("");return}i([...t,r]),n("")}},[m,u,i,t]),D=f((e,r)=>{if(r.return){o.trim().length>0?d(o):g?.(t);return}if((r.backspace||r.delete)&&o.length===0){t.length>0&&i(t.slice(0,-1));return}if(r.backspace||r.delete){n(o.slice(0,-1));return}if(b.includes(e)){d(o);return}e.length>0&&e.codePointAt(0)>=32&&n(`${o}${e}`)},[d,o,g,b,i,t]);w(D,{isActive:s&&!p});const x=t.length===0&&o.length===0;return I(R,{borderColor:s?a:void 0,borderStyle:"round",flexWrap:"wrap",gap:1,paddingX:1,children:[t.map((e,r)=>l(c,{backgroundColor:a,children:` ${e} `},r)),x?l(c,{dimColor:!0,children:$}):l(c,{children:o}),s&&!x?l(c,{color:a,children:"▏"}):void 0]})}export{H as TagInput,H as default};
1
+ import{jsxs as $,jsx as s}from"react/jsx-runtime";import j from"@visulima/tui/components/box";import c from"@visulima/tui/components/text";import D from"@visulima/tui/hooks/use-focus";import _ from"@visulima/tui/hooks/use-input";import{useState as R,useRef as w,useCallback as a}from"react";const B=[],G=[","," "];function X({accentColor:l="blue",autoFocus:S=!1,dedupe:m=!0,defaultValue:x=B,isDisabled:g=!1,max:f,onChange:h,onSubmit:p,placeholder:C="Add tags…",separators:A=G,value:v}){const{isFocused:d}=D({autoFocus:S,isActive:!g}),T=v!==void 0,[F,I]=R(x),[n,o]=R(""),e=v??F,b=w(h);b.current=h;const i=a(t=>{T||I(t),b.current?.(t)},[T]),u=a(t=>{const r=t.trim();if(r.length!==0&&!(f!==void 0&&e.length>=f)){if(m&&e.includes(r)){o("");return}i([...e,r]),o("")}},[m,f,i,e]),P=a((t,r)=>{if(r.return){n.trim().length>0?u(n):p?.(e);return}if((r.backspace||r.delete)&&n.length===0){e.length>0&&i(e.slice(0,-1));return}if(r.backspace||r.delete){o(n.slice(0,-1));return}if(A.includes(t)){u(n);return}t.length>0&&t.codePointAt(0)>=32&&o(`${n}${t}`)},[u,n,p,A,i,e]);_(P,{isActive:d&&!g});const E=e.length===0&&n.length===0;return $(j,{borderColor:d?l:void 0,borderStyle:"round",flexWrap:"wrap",gap:1,paddingX:1,children:[e.map((t,r)=>s(c,{backgroundColor:l,children:` ${t} `},r)),E?s(c,{dimColor:!0,children:C}):s(c,{children:n}),d&&!E?s(c,{color:l,children:"▏"}):void 0]})}export{X as TagInput,X as default};
package/dist/tag.js CHANGED
@@ -1 +1 @@
1
- import{jsx as e,jsxs as r,Fragment as l}from"react/jsx-runtime";import t from"@visulima/tui/components/box";import n from"@visulima/tui/components/text";function m({children:d,color:i="blue",icon:o,variant:c="subtle"}){return c==="outline"?e(t,{borderColor:i,borderStyle:"round",paddingX:1,children:r(n,{color:i,children:[o===void 0?void 0:r(l,{children:[o," "]}),d]})}):c==="solid"?r(n,{backgroundColor:i,color:"black",children:[" ",o===void 0?void 0:r(l,{children:[o," "]}),d," "]}):r(n,{color:i,children:[o===void 0?void 0:r(l,{children:[o," "]}),d]})}export{m as Tag,m as default};
1
+ import{jsx as u,jsxs as d,Fragment as i}from"react/jsx-runtime";import n from"@visulima/tui/components/box";import t from"@visulima/tui/components/text";function s({children:o,color:e="blue",icon:r,variant:l="subtle"}){return l==="outline"?u(n,{borderColor:e,borderStyle:"round",paddingX:1,children:d(t,{color:e,children:[r===void 0?void 0:d(i,{children:[r," "]}),o]})}):l==="solid"?d(t,{backgroundColor:e,color:"black",children:[" ",r===void 0?void 0:d(i,{children:[r," "]}),o," "]}):d(t,{color:e,children:[r===void 0?void 0:d(i,{children:[r," "]}),o]})}export{s as Tag,s as default};
@@ -1 +1 @@
1
- import{jsx as a,jsxs as w}from"react/jsx-runtime";import I from"@visulima/tui/components/box";import h from"@visulima/tui/components/text";import H from"@visulima/tui/hooks/use-input";import{isInsertableInput as L}from"@visulima/tui/input";import{useState as q,useRef as k,useCallback as N}from"react";const O=/\S+\s*$/,S=(i,r)=>i.length===0||!r?void 0:r.find(t=>t.startsWith(i))?.slice(i.length)??void 0,y=-1,P=(i,r,t,e)=>r.leftArrow?Math.max(0,t-1):r.home||r.ctrl&&i==="a"?0:r.end||r.ctrl&&i==="e"?e:y,V=(i,r,t,e)=>{if(r.backspace&&e>0)return[t.slice(0,e-1)+t.slice(e),e-1];if(r.delete&&e<t.length)return[t.slice(0,e)+t.slice(e+1),e];if(r.ctrl&&i==="u")return[t.slice(e),0];if(r.ctrl&&i==="k")return[t.slice(0,e),e];if(r.ctrl&&i==="w"){const m=t.slice(0,e).replace(O,"");return[m+t.slice(e),m.length]}};function U({defaultValue:i="",isDisabled:r=!1,mask:t=!1,onChange:e,onSubmit:m,placeholder:b,suggestions:v}){const[o,x]=q(i),[d,u]=q(i.length),A=k(o);A.current=o;const D=k(d);D.current=d;const g=k(e);g.current=e;const M=k(m);M.current=m;const j=S(o,v),z=N((p,f)=>{const{current:s}=D,c=A.current;if(f.return){const n=S(c,v),l=n?c+n:c;n&&(x(l),u(l.length),g.current?.(l)),M.current?.(l);return}if(f.escape)return;if(f.rightArrow){const n=S(c,v);if(s===c.length&&n){const l=c+n;x(l),u(l.length),g.current?.(l);return}u(Math.min(c.length,s+1));return}const R=P(p,f,s,c.length);if(R!==y){u(R);return}const $=V(p,f,c,s);if($){const[n,l]=$;x(n),u(l),g.current?.(n);return}if(L(p,f)){const n=c.slice(0,s)+p+c.slice(s);x(n),u(s+p.length),g.current?.(n)}},[v]);H(z,{isActive:!r});const C=t?"*".repeat(o.length):o,B=C.slice(0,d),E=C[d],F=C.slice(d+1);return r?a(I,{children:a(h,{dimColor:!0,children:C||b||""})}):o.length===0&&b?w(I,{children:[a(h,{dimColor:!0,inverse:!0,children:b[0]}),a(h,{dimColor:!0,children:b.slice(1)})]}):w(I,{children:[w(h,{children:[B,a(h,{inverse:!0,children:E??" "}),F]}),j?a(h,{dimColor:!0,children:j}):void 0]})}export{U as TextInput,U as default};
1
+ import{jsx as d,jsxs as A}from"react/jsx-runtime";import b from"@visulima/tui/components/box";import m from"@visulima/tui/components/text";import B from"@visulima/tui/hooks/use-input";import{isInsertableInput as K}from"@visulima/tui/input";import{useState as j,useRef as p,useCallback as P}from"react";const $=/\S+\s*$/,I=(n,e)=>n.length===0||!e?void 0:e.find(t=>t.startsWith(n))?.slice(n.length)??void 0,D=-1,q=(n,e,r,t)=>e.leftArrow?Math.max(0,r-1):e.home||e.ctrl&&n==="a"?0:e.end||e.ctrl&&n==="e"?t:D,z=(n,e,r,t)=>{if(e.backspace&&t>0)return[r.slice(0,t-1)+r.slice(t),t-1];if(e.delete&&t<r.length)return[r.slice(0,t)+r.slice(t+1),t];if(e.ctrl&&n==="u")return[r.slice(t),0];if(e.ctrl&&n==="k")return[r.slice(0,t),t];if(e.ctrl&&n==="w"){const s=r.slice(0,t).replace($,"");return[s+r.slice(t),s.length]}};function Y({defaultValue:n="",isDisabled:e=!1,mask:r=!1,onChange:t,onSubmit:w,placeholder:s,suggestions:R}){const[f,v]=j(n),[a,u]=j(n.length),N=p(f);N.current=f;const S=p(a);S.current=a;const g=p(t);g.current=t;const T=p(w);T.current=w;const _=I(f,R),H=P((C,h)=>{const{current:l}=S,c=N.current;if(h.return){const i=I(c,R),o=i?c+i:c;i&&(v(o),u(o.length),g.current?.(o)),T.current?.(o);return}if(h.escape)return;if(h.rightArrow){const i=I(c,R);if(l===c.length&&i){const o=c+i;v(o),u(o.length),g.current?.(o);return}u(Math.min(c.length,l+1));return}const E=q(C,h,l,c.length);if(E!==D){u(E);return}const L=z(C,h,c,l);if(L){const[i,o]=L;v(i),u(o),g.current?.(i);return}if(K(C,h)){const i=c.slice(0,l)+C+c.slice(l);v(i),u(l+C.length),g.current?.(i)}},[R]);B(H,{isActive:!e});const x=r?"*".repeat(f.length):f,M=x.slice(0,a),O=x[a],W=x.slice(a+1);return e?d(b,{children:d(m,{dimColor:!0,children:x||s||""})}):f.length===0&&s?A(b,{children:[d(m,{dimColor:!0,inverse:!0,children:s[0]}),d(m,{dimColor:!0,children:s.slice(1)})]}):A(b,{children:[A(m,{children:[M,d(m,{inverse:!0,children:O??" "}),W]}),_?d(m,{dimColor:!0,children:_}):void 0]})}export{Y as TextInput,Y as default};
package/dist/textarea.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsx as l,jsxs as m,Fragment as x}from"react/jsx-runtime";import C from"@visulima/tui/components/box";import o from"@visulima/tui/components/text";import I from"@visulima/tui/hooks/use-clipboard";import W from"@visulima/tui/hooks/use-input";import Z from"@visulima/tui/hooks/use-paste";import $ from"@visulima/tui/hooks/use-text-buffer";import{isInsertableInput as q}from"@visulima/tui/input";import{useRef as A,useState as H,useEffect as z,useMemo as N,useCallback as M}from"react";const O=(t,c)=>c.line<t.line||c.line===t.line&&c.col<t.col?{endCol:t.col,endLine:t.line,startCol:c.col,startLine:c.line}:{endCol:c.col,endLine:c.line,startCol:t.col,startLine:t.line};function rr({defaultValue:t="",isDisabled:c=!1,isFocused:g=!0,maxRows:d,onChange:v,onSubmit:h,placeholder:p,rows:a=5,showLineNumbers:f=!1,tabSize:L=2}){const n=$(t),S=A(n);S.current=n;const{copy:s}=I(),[u,T]=H(0),D=A(v);D.current=v;const E=A(h);E.current=h;const k=A(t);z(()=>{n.value!==k.current&&(k.current=n.value,D.current?.(n.value))},[n.value]);const w=N(()=>d?Math.min(Math.max(a,n.lines.length),d):a,[a,d,n.lines.length]);z(()=>{T(i=>n.cursor.line<i?n.cursor.line:n.cursor.line>=i+w?n.cursor.line-w+1:i)},[n.cursor.line,w]);const R=M((i,r)=>{const e=S.current;if(r.return&&(r.meta||r.ctrl)){E.current?.(e.value);return}if(r.return){e.newline();return}if(r.escape){e.clearSelection();return}if(r.tab){e.insert(" ".repeat(L));return}if(r.ctrl&&i==="z"){e.undo();return}if(r.ctrl&&(i==="y"||r.shift&&i==="Z")){e.redo();return}if(r.ctrl&&i==="c"&&e.hasSelection()){s(e.getSelectedText());return}if(r.ctrl&&(i==="A"||i==="a"&&r.shift)){e.selectAll();return}if(r.upArrow){e.moveCursor("up",r.shift);return}if(r.downArrow){e.moveCursor("down",r.shift);return}if(r.leftArrow){e.moveCursor("left",r.shift);return}if(r.rightArrow){e.moveCursor("right",r.shift);return}if(r.home){r.ctrl?e.moveToStart(r.shift):e.moveToLineStart(r.shift);return}if(r.end){r.ctrl?e.moveToEnd(r.shift):e.moveToLineEnd(r.shift);return}if(r.ctrl&&i==="a"){e.moveToLineStart(r.shift);return}if(r.ctrl&&i==="e"){e.moveToLineEnd(r.shift);return}if(r.backspace){e.deleteBack();return}if(r.delete){e.deleteForward();return}if(r.ctrl&&i==="u"){e.deleteToLineStart();return}if(r.ctrl&&i==="k"){e.deleteToLineEnd();return}if(r.ctrl&&i==="w"){e.deleteWord();return}q(i,r)&&(e.hasSelection()?e.replaceSelection(i):e.insert(i))},[s,L]);W(R,{isActive:g&&!c});const j=M(i=>{const r=S.current;r.hasSelection()?r.replaceSelection(i):r.insert(i)},[]);Z(j,{isActive:g&&!c});const F=n.lines.slice(u,u+w),b=f?String(n.lines.length).length+1:0,y=n.anchor?O(n.cursor,n.anchor):null;if(c)return l(C,{flexDirection:"column",children:F.map((i,r)=>{const e=u+r;return m(C,{children:[f?m(o,{dimColor:!0,children:[String(e+1).padStart(b)," "]}):void 0,l(o,{dimColor:!0,children:i||(e===0&&p?p:"")})]},e)})});if(n.value.length===0&&p){const i=p.split(`
2
- `).slice(0,w);return l(C,{flexDirection:"column",children:i.map((r,e)=>m(C,{children:[f?m(o,{dimColor:!0,children:[String(e+1).padStart(b)," "]}):void 0,e===0?m(o,{children:[l(o,{dimColor:!0,inverse:!0,children:r[0]??" "}),l(o,{dimColor:!0,children:r.slice(1)})]}):l(o,{dimColor:!0,children:r})]},e))})}return l(C,{flexDirection:"column",children:F.map((i,r)=>{const e=u+r,B=e===n.cursor.line;return m(C,{children:[f?m(o,{dimColor:!B,children:[String(e+1).padStart(b)," "]}):void 0,l(o,{children:P(i,e,n.cursor,y)})]},e)})})}function P(t,c,g,d){const v=c===g.line,h=v?g.col:-1,p=d&&c>=d.startLine&&c<=d.endLine;if(!p&&!v)return l(x,{children:t});if(!p){const s=t.slice(0,h),u=t[h],T=t.slice(h+1);return m(x,{children:[s,l(o,{inverse:!0,children:u??" "}),T]})}const a=c===d.startLine?d.startCol:0,f=c===d.endLine?d.endCol:t.length,L=t.slice(0,a),n=t.slice(a,f),S=t.slice(f);if(v&&(h<a||h>=f)){const s=[];let u=0;return h<a?(s.push(l(o,{children:t.slice(0,h)},u++)),s.push(l(o,{inverse:!0,children:t[h]??" "},u++)),s.push(l(o,{children:t.slice(h+1,a)},u++)),s.push(l(o,{inverse:!0,children:n},u++)),s.push(l(o,{children:S},u++))):(s.push(l(o,{children:L},u++)),s.push(l(o,{inverse:!0,children:n},u++)),s.push(l(o,{children:t.slice(f,h)},u++)),s.push(l(o,{inverse:!0,children:t[h]??" "},u++)),s.push(l(o,{children:t.slice(h+1)},u++))),l(x,{children:s})}return m(x,{children:[L,l(o,{inverse:!0,children:n}),S]})}export{rr as Textarea,rr as default};
1
+ import{jsx as l,jsxs as m,Fragment as A}from"react/jsx-runtime";import C from"@visulima/tui/components/box";import c from"@visulima/tui/components/text";import F from"@visulima/tui/hooks/use-clipboard";import P from"@visulima/tui/hooks/use-input";import Z from"@visulima/tui/hooks/use-paste";import q from"@visulima/tui/hooks/use-text-buffer";import{isInsertableInput as z}from"@visulima/tui/input";import{useRef as x,useState as G,useEffect as M,useMemo as J,useCallback as O}from"react";const K=(n,o)=>o.line<n.line||o.line===n.line&&o.col<n.col?{endCol:n.col,endLine:n.line,startCol:o.col,startLine:o.line}:{endCol:o.col,endLine:o.line,startCol:n.col,startLine:n.line};function rr({defaultValue:n="",isDisabled:o=!1,isFocused:g=!0,maxRows:d,onChange:p,onSubmit:f,placeholder:v,rows:h=5,showLineNumbers:a=!1,tabSize:L=2}){const i=q(n),S=x(i);S.current=i;const{copy:u}=F(),[s,b]=G(0),R=x(p);R.current=p;const w=x(f);w.current=f;const B=x(n);M(()=>{i.value!==B.current&&(B.current=i.value,R.current?.(i.value))},[i.value]);const T=J(()=>d?Math.min(Math.max(h,i.lines.length),d):h,[h,d,i.lines.length]);M(()=>{b(t=>i.cursor.line<t?i.cursor.line:i.cursor.line>=t+T?i.cursor.line-T+1:t)},[i.cursor.line,T]);const j=O((t,r)=>{const e=S.current;if(r.return&&(r.meta||r.ctrl)){w.current?.(e.value);return}if(r.return){e.newline();return}if(r.escape){e.clearSelection();return}if(r.tab){e.insert(" ".repeat(L));return}if(r.ctrl&&t==="z"){e.undo();return}if(r.ctrl&&(t==="y"||r.shift&&t==="Z")){e.redo();return}if(r.ctrl&&t==="c"&&e.hasSelection()){u(e.getSelectedText());return}if(r.ctrl&&(t==="A"||t==="a"&&r.shift)){e.selectAll();return}if(r.upArrow){e.moveCursor("up",r.shift);return}if(r.downArrow){e.moveCursor("down",r.shift);return}if(r.leftArrow){e.moveCursor("left",r.shift);return}if(r.rightArrow){e.moveCursor("right",r.shift);return}if(r.home){r.ctrl?e.moveToStart(r.shift):e.moveToLineStart(r.shift);return}if(r.end){r.ctrl?e.moveToEnd(r.shift):e.moveToLineEnd(r.shift);return}if(r.ctrl&&t==="a"){e.moveToLineStart(r.shift);return}if(r.ctrl&&t==="e"){e.moveToLineEnd(r.shift);return}if(r.backspace){e.deleteBack();return}if(r.delete){e.deleteForward();return}if(r.ctrl&&t==="u"){e.deleteToLineStart();return}if(r.ctrl&&t==="k"){e.deleteToLineEnd();return}if(r.ctrl&&t==="w"){e.deleteWord();return}z(t,r)&&(e.hasSelection()?e.replaceSelection(t):e.insert(t))},[u,L]);P(j,{isActive:g&&!o});const H=O(t=>{const r=S.current;r.hasSelection()?r.replaceSelection(t):r.insert(t)},[]);Z(H,{isActive:g&&!o});const I=i.lines.slice(s,s+T),E=a?String(i.lines.length).length+1:0,W=i.anchor?K(i.cursor,i.anchor):null;if(o)return l(C,{flexDirection:"column",children:I.map((t,r)=>{const e=s+r;return m(C,{children:[a?m(c,{dimColor:!0,children:[String(e+1).padStart(E)," "]}):void 0,l(c,{dimColor:!0,children:t||(e===0&&v?v:"")})]},e)})});if(i.value.length===0&&v){const t=v.split(`
2
+ `).slice(0,T);return l(C,{flexDirection:"column",children:t.map((r,e)=>m(C,{children:[a?m(c,{dimColor:!0,children:[String(e+1).padStart(E)," "]}):void 0,e===0?m(c,{children:[l(c,{dimColor:!0,inverse:!0,children:r[0]??" "}),l(c,{dimColor:!0,children:r.slice(1)})]}):l(c,{dimColor:!0,children:r})]},e))})}return l(C,{flexDirection:"column",children:I.map((t,r)=>{const e=s+r,D=e===i.cursor.line;return m(C,{children:[a?m(c,{dimColor:!D,children:[String(e+1).padStart(E)," "]}):void 0,l(c,{children:Q(t,e,i.cursor,W)})]},e)})})}function Q(n,o,g,d){const p=o===g.line,f=p?g.col:-1,v=d&&o>=d.startLine&&o<=d.endLine;if(!v&&!p)return l(A,{children:n});if(!v){const u=n.slice(0,f),s=n[f],b=n.slice(f+1);return m(A,{children:[u,l(c,{inverse:!0,children:s??" "}),b]})}const h=o===d.startLine?d.startCol:0,a=o===d.endLine?d.endCol:n.length,L=n.slice(0,h),i=n.slice(h,a),S=n.slice(a);if(p&&(f<h||f>=a)){const u=[];let s=0;return f<h?(u.push(l(c,{children:n.slice(0,f)},s++)),u.push(l(c,{inverse:!0,children:n[f]??" "},s++)),u.push(l(c,{children:n.slice(f+1,h)},s++)),u.push(l(c,{inverse:!0,children:i},s++)),u.push(l(c,{children:S},s++))):(u.push(l(c,{children:L},s++)),u.push(l(c,{inverse:!0,children:i},s++)),u.push(l(c,{children:n.slice(a,f)},s++)),u.push(l(c,{inverse:!0,children:n[f]??" "},s++)),u.push(l(c,{children:n.slice(f+1)},s++))),l(A,{children:u})}return m(A,{children:[L,l(c,{inverse:!0,children:i}),S]})}export{rr as Textarea,rr as default};
@@ -1 +1 @@
1
- import{jsxs as u,jsx as o}from"react/jsx-runtime";import n from"@visulima/tui/components/box";import e from"@visulima/tui/components/text";import b from"@visulima/tui/hooks/use-focus";import B from"@visulima/tui/hooks/use-input";import{useState as F,useCallback as m}from"react";function E({accentColor:i="magenta",autoFocus:p=!1,children:f,defaultExpanded:h=!0,expanded:c,label:g="Thinking",onToggle:t,streaming:x=!1}){const{isFocused:d}=b({autoFocus:p}),a=c!==void 0,[k,v]=F(h),r=c??k,s=m(()=>{const l=!r;a||v(l),t?.(l)},[r,a,t]),C=m((l,T)=>{(l===" "||T.return)&&s()},[s]);return B(C,{isActive:d}),u(n,{borderColor:i,borderStyle:"round",flexDirection:"column",paddingX:1,children:[u(n,{gap:1,children:[o(e,{color:i,children:r?"▾":"▸"}),o(e,{color:i,italic:!0,children:g}),x?o(e,{color:i,children:"…"}):void 0,d?o(e,{dimColor:!0,children:r?"(space to collapse)":"(space to expand)"}):void 0]}),r?o(n,{marginTop:1,children:o(e,{dimColor:!0,italic:!0,children:f})}):void 0]})}export{E as ThinkingBlock,E as default};
1
+ import{jsxs as p,jsx as e}from"react/jsx-runtime";import n from"@visulima/tui/components/box";import r from"@visulima/tui/components/text";import j from"@visulima/tui/hooks/use-focus";import B from"@visulima/tui/hooks/use-input";import{useState as C,useCallback as u}from"react";function E({accentColor:i="magenta",autoFocus:m=!1,children:f,defaultExpanded:x=!0,expanded:d,label:h="Thinking",onToggle:l,streaming:g=!1}){const{isFocused:s}=j({autoFocus:m}),c=d!==void 0,[v,k]=C(x),o=d??v,a=u(()=>{const t=!o;c||k(t),l?.(t)},[o,c,l]),b=u((t,T)=>{(t===" "||T.return)&&a()},[a]);return B(b,{isActive:s}),p(n,{borderColor:i,borderStyle:"round",flexDirection:"column",paddingX:1,children:[p(n,{gap:1,children:[e(r,{color:i,children:o?"▾":"▸"}),e(r,{color:i,italic:!0,children:h}),g?e(r,{color:i,children:"…"}):void 0,s?e(r,{dimColor:!0,children:o?"(space to collapse)":"(space to expand)"}):void 0]}),o?e(n,{marginTop:1,children:e(r,{dimColor:!0,italic:!0,children:f})}):void 0]})}export{E as ThinkingBlock,E as default};
@@ -1 +1 @@
1
- import{jsxs as R,jsx as c,Fragment as W}from"react/jsx-runtime";import T from"@visulima/tui/components/box";import f from"@visulima/tui/components/text";import _ from"@visulima/tui/hooks/use-focus";import z from"@visulima/tui/hooks/use-input";import{useState as V,useRef as X,useCallback as A}from"react";const I=/^\d$/,K={hours:0,minutes:0};function m(a,d){return d===0?0:(a%d+d)%d}const w=a=>String(a).padStart(2,"0");function oe({accentColor:a="blue",autoFocus:d=!1,defaultValue:q=K,hour12:n=!1,isDisabled:h=!1,onChange:k,onSubmit:x,showSeconds:F=!1,value:j}){const{isFocused:g}=_({autoFocus:d,isActive:!h}),M=j!==void 0,[y,B]=V(q),e=j??y,p=["hours","minutes",...F?["seconds"]:[],...n?["ampm"]:[]],[E,$]=V(0),i=p[Math.min(E,p.length-1)],D=X(k);D.current=k;const t=X(null),u=A(r=>{M||B(r),D.current?.(r)},[M]),S=A((r,o)=>{switch(r){case"hours":{u({...e,hours:m(e.hours+o,24)});break}case"minutes":{u({...e,minutes:m(e.minutes+o,60)});break}case"seconds":{u({...e,seconds:m((e.seconds??0)+o,60)});break}default:u({...e,hours:m(e.hours+12,24)})}},[e,u]),L=A((r,o)=>{const s=t.current,N=s!==null&&s.segment===r;if(r==="minutes"||r==="seconds"){let l=N?s.value*10+o:o;l>59&&(l=o),t.current={segment:r,value:l},u(r==="minutes"?{...e,minutes:l}:{...e,seconds:l});return}const Q=n?12:23;let v=N?s.value*10+o:o;if(v>Q&&(v=o),t.current={segment:r,value:v},n){const l=e.hours>=12;u({...e,hours:v%12+(l?12:0)})}else u({...e,hours:v})},[e,n,u]),G=A((r,o)=>{if(o.leftArrow){t.current=null,$(s=>m(s-1,p.length));return}if(o.rightArrow){t.current=null,$(s=>m(s+1,p.length));return}if(o.upArrow){t.current=null,S(i,1);return}if(o.downArrow){t.current=null,S(i,-1);return}if(o.return){x?.(e);return}if(I.test(r)){i!=="ampm"&&L(i,Number.parseInt(r,10));return}(r==="a"||r==="p")&&n&&(t.current=null,e.hours>=12!=(r==="p")&&u({...e,hours:m(e.hours+12,24)}))},[S,L,e,i,n,x,p.length,u]);z(G,{isActive:g&&!h});const H=e.hours%12===0?12:e.hours%12,J=n?H:e.hours,P=e.hours>=12?"PM":"AM";function b(r){return g&&i===r?a:void 0}function C(r){return g&&i===r}return R(T,{borderColor:g?a:void 0,borderStyle:"round",paddingX:1,children:[c(f,{color:b("hours"),dimColor:h,inverse:C("hours"),children:w(J)}),c(f,{dimColor:!0,children:":"}),c(f,{color:b("minutes"),dimColor:h,inverse:C("minutes"),children:w(e.minutes)}),F?R(W,{children:[c(f,{dimColor:!0,children:":"}),c(f,{color:b("seconds"),dimColor:h,inverse:C("seconds"),children:w(e.seconds??0)})]}):void 0,n?c(T,{marginLeft:1,children:c(f,{color:b("ampm"),dimColor:h,inverse:C("ampm"),children:P})}):void 0]})}export{oe as TimePicker,oe as default};
1
+ import{jsxs as H,jsx as l,Fragment as K}from"react/jsx-runtime";import L from"@visulima/tui/components/box";import h from"@visulima/tui/components/text";import O from"@visulima/tui/hooks/use-focus";import Q from"@visulima/tui/hooks/use-input";import{useState as N,useRef as _,useCallback as I}from"react";const W=/^\d$/,Y={hours:0,minutes:0};function m(d,a){return a===0?0:(d%a+a)%a}const g=d=>String(d).padStart(2,"0");function nr({accentColor:d="blue",autoFocus:a=!1,defaultValue:k=Y,hour12:t=!1,isDisabled:f=!1,onChange:T,onSubmit:F,showSeconds:M=!1,value:R}){const{isFocused:x}=O({autoFocus:a,isActive:!f}),S=R!==void 0,[B,G]=N(k),r=R??B,p=["hours","minutes",...M?["seconds"]:[],...t?["ampm"]:[]],[U,b]=N(0),c=p[Math.min(U,p.length-1)],j=_(T);j.current=T;const u=_(null),o=I(e=>{S||G(e),j.current?.(e)},[S]),w=I((e,n)=>{switch(e){case"hours":{o({...r,hours:m(r.hours+n,24)});break}case"minutes":{o({...r,minutes:m(r.minutes+n,60)});break}case"seconds":{o({...r,seconds:m((r.seconds??0)+n,60)});break}default:o({...r,hours:m(r.hours+12,24)})}},[r,o]),E=I((e,n)=>{const s=u.current,P=s!==null&&s.segment===e;if(e==="minutes"||e==="seconds"){let i=P?s.value*10+n:n;i>59&&(i=n),u.current={segment:e,value:i},o(e==="minutes"?{...r,minutes:i}:{...r,seconds:i});return}const J=t?12:23;let v=P?s.value*10+n:n;if(v>J&&(v=n),u.current={segment:e,value:v},t){const i=r.hours>=12;o({...r,hours:v%12+(i?12:0)})}else o({...r,hours:v})},[r,t,o]),X=I((e,n)=>{if(n.leftArrow){u.current=null,b(s=>m(s-1,p.length));return}if(n.rightArrow){u.current=null,b(s=>m(s+1,p.length));return}if(n.upArrow){u.current=null,w(c,1);return}if(n.downArrow){u.current=null,w(c,-1);return}if(n.return){F?.(r);return}if(W.test(e)){c!=="ampm"&&E(c,Number.parseInt(e,10));return}(e==="a"||e==="p")&&t&&(u.current=null,r.hours>=12!==(e==="p")&&o({...r,hours:m(r.hours+12,24)}))},[w,E,r,c,t,F,p.length,o]);Q(X,{isActive:x&&!f});const $=r.hours%12===0?12:r.hours%12,q=t?$:r.hours,y=r.hours>=12?"PM":"AM";function A(e){return x&&c===e?d:void 0}function C(e){return x&&c===e}return H(L,{borderColor:x?d:void 0,borderStyle:"round",paddingX:1,children:[l(h,{color:A("hours"),dimColor:f,inverse:C("hours"),children:g(q)}),l(h,{dimColor:!0,children:":"}),l(h,{color:A("minutes"),dimColor:f,inverse:C("minutes"),children:g(r.minutes)}),M?H(K,{children:[l(h,{dimColor:!0,children:":"}),l(h,{color:A("seconds"),dimColor:f,inverse:C("seconds"),children:g(r.seconds??0)})]}):void 0,t?l(L,{marginLeft:1,children:l(h,{color:A("ampm"),dimColor:f,inverse:C("ampm"),children:y})}):void 0]})}export{nr as TimePicker,nr as default};
package/dist/timer.js CHANGED
@@ -1 +1 @@
1
- import{jsx as l}from"react/jsx-runtime";import u from"@visulima/tui/components/text";import p from"@visulima/tui/hooks/use-timer";import{formatDuration as f}from"@visulima/tui/utils";import{useImperativeHandle as d}from"react";const x=({autoStart:o,bold:r,color:e,duration:a,format:i=f,interval:m,onTimeout:s,ref:n})=>{const t=p({autoStart:o,duration:a,interval:m,onTimeout:s});return d(n,()=>({reset:t.reset,start:t.start,stop:t.stop,toggle:t.toggle}),[t.reset,t.start,t.stop,t.toggle]),l(u,{bold:r,color:e,children:i(t.remaining)})};export{x as Timer,x as default};
1
+ import{jsx as n}from"react/jsx-runtime";import f from"@visulima/tui/components/text";import g from"@visulima/tui/hooks/use-timer";import{formatDuration as l}from"@visulima/tui/utils";import{useImperativeHandle as u}from"react";const j=({autoStart:r,bold:e,color:o,duration:m,format:s=l,interval:i,onTimeout:a,ref:p})=>{const t=g({autoStart:r,duration:m,interval:i,onTimeout:a});return u(p,()=>({reset:t.reset,start:t.start,stop:t.stop,toggle:t.toggle}),[t.reset,t.start,t.stop,t.toggle]),n(f,{bold:e,color:o,children:s(t.remaining)})};export{j as Timer,j as default};
package/dist/toast.js CHANGED
@@ -1 +1 @@
1
- import{jsxs as s,jsx as t}from"react/jsx-runtime";import u from"@visulima/tui/components/box";import i from"@visulima/tui/components/text";import{useState as v,useRef as T,useEffect as w}from"react";import{o as g}from"./packem_shared/variant-config-BJqpNo7H.js";function E({children:f,duration:r=4e3,onDismiss:n,title:l,variant:m="info",visible:o,width:a}){const[p,h]=v(!0),e=o??p,d=T(n);if(d.current=n,w(()=>{if(o!==void 0||r<=0||!e)return;const b=setTimeout(()=>{h(!1),d.current?.()},r);return()=>{clearTimeout(b)}},[r,o,e]),!e)return null;const{color:c,icon:x}=g[m];return s(u,{borderColor:c,borderStyle:"round",gap:1,paddingX:1,width:a,children:[t(i,{color:c,children:x}),s(u,{flexDirection:"column",flexGrow:1,children:[l===void 0?void 0:t(i,{bold:!0,children:l}),t(i,{children:f})]})]})}export{E as Toast,E as default};
1
+ import{jsxs as f,jsx as t}from"react/jsx-runtime";import u from"@visulima/tui/components/box";import n from"@visulima/tui/components/text";import{useState as b,useRef as h,useEffect as I}from"react";import{V as R}from"./packem_shared/variant-config-BnAmf1rP.js";function G({children:m,duration:r=4e3,onDismiss:i,title:s,variant:d="info",visible:e,width:a}){const[p,x]=b(!0),o=e??p,c=h(i);if(c.current=i,I(()=>{if(e!==void 0||r<=0||!o)return;const V=setTimeout(()=>{x(!1),c.current?.()},r);return()=>{clearTimeout(V)}},[r,e,o]),!o)return null;const{color:l,icon:T}=R[d];return f(u,{borderColor:l,borderStyle:"round",gap:1,paddingX:1,width:a,children:[t(n,{color:l,children:T}),f(u,{flexDirection:"column",flexGrow:1,children:[s===void 0?void 0:t(n,{bold:!0,children:s}),t(n,{children:m})]})]})}export{G as Toast,G as default};
@@ -1 +1 @@
1
- import{jsxs as c,jsx as e}from"react/jsx-runtime";import l from"@visulima/tui/components/box";import t from"@visulima/tui/components/text";function f(r){return r>.9?"red":r>.7?"yellow":"green"}const o=r=>r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}k`:String(r);function $({barWidth:r=20,contextLimit:i,input:d=0,inputColor:h="cyan",output:u=0,outputColor:m="magenta"}){const n=d+u;if(i!==void 0&&i>0){const a=Math.min(1,n/i),s=Math.round(a*r),M=f(a);return c(l,{gap:1,children:[e(t,{color:M,children:"█".repeat(s)}),e(t,{dimColor:!0,children:"░".repeat(Math.max(0,r-s))}),c(t,{children:[o(n),"/",o(i)," ","(",Math.round(a*100),"%)"]})]})}const p=n===0?0:Math.round(d/n*r),x=Math.max(0,r-p);return c(l,{gap:1,children:[c(l,{children:[e(t,{color:h,children:"█".repeat(p)}),e(t,{color:m,children:"█".repeat(x)})]}),e(t,{color:h,children:`↑${o(d)}`}),e(t,{color:m,children:`↓${o(u)}`}),e(t,{dimColor:!0,children:`Σ${o(n)}`})]})}export{$ as TokenUsage,$ as default};
1
+ import{jsxs as c,jsx as o}from"react/jsx-runtime";import a from"@visulima/tui/components/box";import e from"@visulima/tui/components/text";function g(r){return r>.9?"red":r>.7?"yellow":"green"}const t=r=>r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}k`:String(r);function j({barWidth:r=20,contextLimit:l,input:d=0,inputColor:f="cyan",output:h=0,outputColor:s="magenta"}){const n=d+h;if(l!==void 0&&l>0){const i=Math.min(1,n/l),u=Math.round(i*r),M=g(i);return c(a,{gap:1,children:[o(e,{color:M,children:"█".repeat(u)}),o(e,{dimColor:!0,children:"░".repeat(Math.max(0,r-u))}),c(e,{children:[t(n),"/",t(l)," ","(",Math.round(i*100),"%)"]})]})}const m=n===0?0:Math.round(d/n*r),p=Math.max(0,r-m);return c(a,{gap:1,children:[c(a,{children:[o(e,{color:f,children:"█".repeat(m)}),o(e,{color:s,children:"█".repeat(p)})]}),o(e,{color:f,children:`↑${t(d)}`}),o(e,{color:s,children:`↓${t(h)}`}),o(e,{dimColor:!0,children:`Σ${t(n)}`})]})}export{j as TokenUsage,j as default};
package/dist/tool-call.js CHANGED
@@ -1 +1 @@
1
- import{jsxs as d,jsx as i}from"react/jsx-runtime";import c from"@visulima/tui/components/box";import e from"@visulima/tui/components/text";const a={error:{color:"red",icon:"✖"},pending:{color:"gray",icon:"○"},running:{color:"yellow",icon:"◐"},success:{color:"green",icon:"✔"}},g=o=>o===void 0?"":typeof o=="string"?o:Object.entries(o).map(([n,r])=>`${n}=${typeof r=="string"?r:JSON.stringify(r)}`).join(" ");function u({args:o,children:n,name:r,status:s="pending"}){const l=a[s],t=g(o);return d(c,{flexDirection:"column",children:[d(c,{gap:1,children:[i(e,{color:l.color,children:l.icon}),i(e,{bold:!0,children:r}),t.length>0?i(e,{dimColor:!0,children:t}):void 0]}),n===void 0?void 0:i(c,{marginLeft:2,children:i(e,{dimColor:!0,children:n})})]})}export{u as ToolCall,u as default};
1
+ import{jsxs as d,jsx as n}from"react/jsx-runtime";import t from"@visulima/tui/components/box";import e from"@visulima/tui/components/text";const f={error:{color:"red",icon:"✖"},pending:{color:"gray",icon:"○"},running:{color:"yellow",icon:"◐"},success:{color:"green",icon:"✔"}},s=o=>o===void 0?"":typeof o=="string"?o:Object.entries(o).map(([i,r])=>`${i}=${typeof r=="string"?r:JSON.stringify(r)}`).join(" ");function x({args:o,children:i,name:r,status:m="pending"}){const c=f[m],l=s(o);return d(t,{flexDirection:"column",children:[d(t,{gap:1,children:[n(e,{color:c.color,children:c.icon}),n(e,{bold:!0,children:r}),l.length>0?n(e,{dimColor:!0,children:l}):void 0]}),i===void 0?void 0:n(t,{marginLeft:2,children:n(e,{dimColor:!0,children:i})})]})}export{x as ToolCall,x as default};
package/dist/tooltip.js CHANGED
@@ -1 +1 @@
1
- import{jsx as i,jsxs as s}from"react/jsx-runtime";import o from"@visulima/tui/components/box";import m from"@visulima/tui/components/text";const a={bottom:{flexDirection:"column",orderFirst:!1},left:{flexDirection:"row",orderFirst:!0},right:{flexDirection:"row",orderFirst:!1},top:{flexDirection:"column",orderFirst:!0}};function x({children:c,color:t="gray",content:r,isVisible:d=!0,placement:e="right"}){const{flexDirection:f,orderFirst:n}=a[e],l=d?i(o,{borderColor:t,borderStyle:"round",flexShrink:0,marginLeft:e==="right"?1:0,marginRight:e==="left"?1:0,paddingX:1,children:typeof r=="string"?i(m,{color:t,children:r}):r}):void 0;return s(o,{alignItems:"center",flexDirection:f,children:[n?l:void 0,i(o,{children:c}),n?void 0:l]})}export{x as Tooltip,x as default};
1
+ import{jsx as i,jsxs as x}from"react/jsx-runtime";import t from"@visulima/tui/components/box";import c from"@visulima/tui/components/text";const g={bottom:{flexDirection:"column",orderFirst:!1},left:{flexDirection:"row",orderFirst:!0},right:{flexDirection:"row",orderFirst:!1},top:{flexDirection:"column",orderFirst:!0}};function a({children:d,color:e="gray",content:r,isVisible:f=!0,placement:o="right"}){const{flexDirection:s,orderFirst:l}=g[o],n=f?i(t,{borderColor:e,borderStyle:"round",flexShrink:0,marginLeft:o==="right"?1:0,marginRight:o==="left"?1:0,paddingX:1,children:typeof r=="string"?i(c,{color:e,children:r}):r}):void 0;return x(t,{alignItems:"center",flexDirection:s,children:[l?n:void 0,i(t,{children:d}),l?void 0:n]})}export{a as Tooltip,a as default};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import c from"@visulima/tui/components/box";import y from"@visulima/tui/components/text";import{useState as w,useRef as a,useEffect as D}from"react";const A=(t,r)=>t>=1?e(c,{children:r}):t<=0?e(c,{}):e(c,{children:typeof r=="string"?e(y,{dimColor:t<.7,children:r}):r}),B=(t,r)=>Math.max(0,Math.min(r,Math.round((1-t)*r))),f=(t,r)=>(i,u,h)=>{const n=B(i,h);return i>=1?e(c,{children:u}):i<=0?e(c,{}):t==="x"?e(c,{paddingLeft:r===1?n:0,paddingRight:r===-1?n:0,children:u}):e(c,{flexDirection:"column",paddingBottom:r===-1?n:0,paddingTop:r===1?n:0,children:u})},C=(t,r,i)=>{if(t>=1)return e(c,{children:r});if(t<=0)return e(c,{});const u=Math.max(0,Math.min(i,Math.round(t*i)));return e(c,{flexDirection:"column",height:u,overflowY:"hidden",children:r})},O={fade:A,reveal:C,"slide-down":f("y",-1),"slide-left":f("x",-1),"slide-right":f("x",1),"slide-up":f("y",1)},T=(t,r)=>t?r>=1?"entered":"entering":r<=0?"exited":"exiting";function K({children:t,distance:r=4,duration:i=240,onExit:u,preset:h="fade",show:n=!0,tickInterval:g=30}){const[m,I]=w(n?1:0),p=a(n?1:0),M=a(Date.now()),l=a(n?1:0),d=a(!n),x=a(u);x.current=u;const[E,R]=w(0);if(D(()=>{const o=n?1:0;p.current!==o&&(p.current=o,M.current=Date.now(),l.current=m,d.current=!1,R(s=>s+1))},[n]),D(()=>{const o=p.current;if(l.current===o){o===0&&!d.current&&(d.current=!0,x.current?.());return}const s=setInterval(()=>{const j=Date.now()-M.current,v=i<=0?1:Math.min(1,j/i),k=l.current+(o-l.current)*v;I(k),v>=1&&(clearInterval(s),o===0&&!d.current&&(d.current=!0,x.current?.()))},g);return()=>{clearInterval(s)}},[E,i,g]),T(n,m)==="exited"&&!n)return null;const b=O[h];return b(m,t,r)}const Y=Object.assign(K,{isAnimatable:!0});export{K as Transition,Y as default};
1
+ import{jsx as n}from"react/jsx-runtime";import i from"@visulima/tui/components/box";import j from"@visulima/tui/components/text";import{useState as D,useRef as f,useEffect as E}from"react";const A=(e,t)=>e>=1?n(i,{children:t}):e<=0?n(i,{}):n(i,{children:typeof t=="string"?n(j,{dimColor:e<.7,children:t}):t}),B=(e,t)=>Math.max(0,Math.min(t,Math.round((1-e)*t))),l=(e,t)=>(o,u,m)=>{const r=B(o,m);return o>=1?n(i,{children:u}):o<=0?n(i,{}):e==="x"?n(i,{paddingLeft:t===1?r:0,paddingRight:t===-1?r:0,children:u}):n(i,{flexDirection:"column",paddingBottom:t===-1?r:0,paddingTop:t===1?r:0,children:u})},I=(e,t,o)=>{if(e>=1)return n(i,{children:t});if(e<=0)return n(i,{});const u=Math.max(0,Math.min(o,Math.round(e*o)));return n(i,{flexDirection:"column",height:u,overflowY:"hidden",children:t})},K={fade:A,reveal:I,"slide-down":l("y",-1),"slide-left":l("x",-1),"slide-right":l("x",1),"slide-up":l("y",1)},O=(e,t)=>e?t>=1?"entered":"entering":t<=0?"exited":"exiting";function C({children:e,distance:t=4,duration:o=240,onExit:u,preset:m="fade",show:r=!0,tickInterval:M=30}){const[x,y]=D(r?1:0),R=f(r?1:0),g=f(Date.now()),s=f(r?1:0),c=f(!r),p=f(u);p.current=u;const[T,h]=D(0);if(E(()=>{const a=r?1:0;R.current!==a&&(R.current=a,g.current=Date.now(),s.current=x,c.current=!1,h(d=>d+1))},[r]),E(()=>{const a=R.current;if(s.current===a){a===0&&!c.current&&(c.current=!0,p.current?.());return}const d=setInterval(()=>{const S=Date.now()-g.current,v=o<=0?1:Math.min(1,S/o),b=s.current+(a-s.current)*v;y(b),v>=1&&(clearInterval(d),a===0&&!c.current&&(c.current=!0,p.current?.()))},M);return()=>{clearInterval(d)}},[T,o,M]),O(r,x)==="exited"&&!r)return null;const P=K[m];return P(x,e,t)}const _=Object.assign(C,{isAnimatable:!0});export{C as Transition,_ as default};
@@ -1 +1 @@
1
- import{jsx as p,jsxs as k}from"react/jsx-runtime";import B from"@visulima/tui/components/box";import w from"@visulima/tui/components/text";import V from"@visulima/tui/hooks/use-focus";import Y from"@visulima/tui/hooks/use-input";import{useState as C,useMemo as R,useRef as _,useCallback as g}from"react";const q=[];function T(i,t){return t===0?0:(i%t+t)%t}function z(i,t,s){return i?t?"▾":"▸":s?"◉":"◯"}const E=(i,t,s,u)=>{for(const l of i){const a=l.children!==void 0&&l.children.length>0;u.push({depth:s,hasChildren:a,node:l}),a&&t.has(l.value)&&E(l.children,t,s+1,u)}};function X({accentColor:i="blue",autoFocus:t=!1,defaultValue:s=q,isDisabled:u=!1,nodes:l,onChange:a,onSubmit:S,selectionMode:A="single",value:f}){const{isFocused:b}=V({autoFocus:t,isActive:!u}),x=f!==void 0,[D,H]=C(s),c=R(()=>new Set(f??D),[f,D]),[m,I]=C(()=>new Set),[v,F]=C(0),M=_(a);M.current=a;const d=R(()=>{const e=[];return E(l,m,0,e),e},[m,l]),j=g(e=>{const o=[...e];x||H(o),M.current?.(o)},[x]),h=g((e,o)=>{I(r=>{const n=new Set(r);return o??!n.has(e)?n.add(e):n.delete(e),n})},[]),J=g((e,o)=>{const r=d[v];if(o.upArrow){F(n=>T(n-1,d.length));return}if(o.downArrow){F(n=>T(n+1,d.length));return}if(r!==void 0){if(o.rightArrow&&r.hasChildren){h(r.node.value,!0);return}if(o.leftArrow&&r.hasChildren){h(r.node.value,!1);return}if(e===" "){if(r.hasChildren){h(r.node.value);return}const n=A==="single"?new Set:new Set(c);n.has(r.node.value)?n.delete(r.node.value):n.add(r.node.value),j(n);return}o.return&&S?.([...c])}},[v,j,S,d,c,A,h]);return Y(J,{isActive:b&&!u}),p(B,{flexDirection:"column",children:d.map((e,o)=>{const r=b&&o===v,n=c.has(e.node.value),K=" ".repeat(e.depth),N=z(e.hasChildren,m.has(e.node.value),n),U=!e.hasChildren&&n?i:void 0;return k(B,{children:[p(w,{color:r?i:void 0,children:r?"❯":" "}),p(w,{children:K}),k(w,{color:U,dimColor:u,children:[N," ",e.node.label]})]},o)})})}export{X as TreeSelect,X as default};
1
+ import{jsx as v,jsxs as b}from"react/jsx-runtime";import B from"@visulima/tui/components/box";import x from"@visulima/tui/components/text";import G from"@visulima/tui/hooks/use-focus";import J from"@visulima/tui/hooks/use-input";import{useState as C,useMemo as H,useRef as K,useCallback as g}from"react";const N=[];function L(s,o){return o===0?0:(s%o+o)%o}function O(s,o,i){return s?o?"▾":"▸":i?"◉":"◯"}const M=(s,o,i,c)=>{for(const l of s){const u=l.children!==void 0&&l.children.length>0;c.push({depth:i,hasChildren:u,node:l}),u&&o.has(l.value)&&M(l.children,o,i+1,c)}};function D({accentColor:s="blue",autoFocus:o=!1,defaultValue:i=N,isDisabled:c=!1,nodes:l,onChange:u,onSubmit:w,selectionMode:A="single",value:h}){const{isFocused:S}=G({autoFocus:o,isActive:!c}),E=h!==void 0,[F,P]=C(i),a=H(()=>new Set(h??F),[h,F]),[m,U]=C(()=>new Set),[p,T]=C(0),j=K(u);j.current=u;const d=H(()=>{const e=[];return M(l,m,0,e),e},[m,l]),I=g(e=>{const r=[...e];E||P(r),j.current?.(r)},[E]),f=g((e,r)=>{U(t=>{const n=new Set(t);return r??!n.has(e)?n.add(e):n.delete(e),n})},[]),Y=g((e,r)=>{const t=d[p];if(r.upArrow){T(n=>L(n-1,d.length));return}if(r.downArrow){T(n=>L(n+1,d.length));return}if(t!==void 0){if(r.rightArrow&&t.hasChildren){f(t.node.value,!0);return}if(r.leftArrow&&t.hasChildren){f(t.node.value,!1);return}if(e===" "){if(t.hasChildren){f(t.node.value);return}const n=A==="single"?new Set:new Set(a);n.has(t.node.value)?n.delete(t.node.value):n.add(t.node.value),I(n);return}r.return&&w?.([...a])}},[p,I,w,d,a,A,f]);return J(Y,{isActive:S&&!c}),v(B,{flexDirection:"column",children:d.map((e,r)=>{const t=S&&r===p,n=a.has(e.node.value),R=" ".repeat(e.depth),_=O(e.hasChildren,m.has(e.node.value),n),q=!e.hasChildren&&n?s:void 0;return b(B,{children:[v(x,{color:t?s:void 0,children:t?"❯":" "}),v(x,{children:R}),b(x,{color:q,dimColor:c,children:[_," ",e.node.label]})]},r)})})}export{D as TreeSelect,D as default};