@bzync/rui 0.0.3

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 (263) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +115 -0
  3. package/dist/autocomplete-CaysJRpk.cjs +1 -0
  4. package/dist/autocomplete-CfbfpcO4.js +453 -0
  5. package/dist/calendar-Bnld4G59.cjs +1 -0
  6. package/dist/calendar-CdICOROs.js +573 -0
  7. package/dist/charts-CxEy2c3M.js +1248 -0
  8. package/dist/charts-UDqS1BH1.cjs +1 -0
  9. package/dist/cn-BdjraxxU.cjs +1 -0
  10. package/dist/cn-DpgY2leY.js +1736 -0
  11. package/dist/component-styles-Ce56hn9T.js +16 -0
  12. package/dist/component-styles-TkZ7v6Ef.cjs +1 -0
  13. package/dist/components/accordion.cjs +1 -0
  14. package/dist/components/accordion.d.ts +22 -0
  15. package/dist/components/accordion.js +122 -0
  16. package/dist/components/alert.cjs +1 -0
  17. package/dist/components/alert.d.ts +13 -0
  18. package/dist/components/alert.js +165 -0
  19. package/dist/components/auth-backdrop.cjs +1 -0
  20. package/dist/components/auth-backdrop.d.ts +7 -0
  21. package/dist/components/auth-backdrop.js +10 -0
  22. package/dist/components/autocomplete/dropdown.d.ts +21 -0
  23. package/dist/components/autocomplete/icons.d.ts +8 -0
  24. package/dist/components/autocomplete/multi-trigger.d.ts +25 -0
  25. package/dist/components/autocomplete/single-trigger.d.ts +21 -0
  26. package/dist/components/autocomplete/types.d.ts +34 -0
  27. package/dist/components/autocomplete.cjs +1 -0
  28. package/dist/components/autocomplete.d.ts +5 -0
  29. package/dist/components/autocomplete.js +3 -0
  30. package/dist/components/avatar.cjs +1 -0
  31. package/dist/components/avatar.d.ts +17 -0
  32. package/dist/components/avatar.js +56 -0
  33. package/dist/components/badge.cjs +1 -0
  34. package/dist/components/badge.d.ts +12 -0
  35. package/dist/components/badge.js +32 -0
  36. package/dist/components/billing-interval-toggle.cjs +1 -0
  37. package/dist/components/billing-interval-toggle.d.ts +18 -0
  38. package/dist/components/billing-interval-toggle.js +39 -0
  39. package/dist/components/breadcrumb.cjs +1 -0
  40. package/dist/components/breadcrumb.d.ts +11 -0
  41. package/dist/components/breadcrumb.js +52 -0
  42. package/dist/components/button.cjs +1 -0
  43. package/dist/components/button.d.ts +17 -0
  44. package/dist/components/button.js +90 -0
  45. package/dist/components/calendar/month-view.d.ts +17 -0
  46. package/dist/components/calendar/types.d.ts +54 -0
  47. package/dist/components/calendar/week-view.d.ts +17 -0
  48. package/dist/components/calendar.cjs +1 -0
  49. package/dist/components/calendar.d.ts +3 -0
  50. package/dist/components/calendar.js +3 -0
  51. package/dist/components/callout.cjs +1 -0
  52. package/dist/components/callout.d.ts +9 -0
  53. package/dist/components/callout.js +131 -0
  54. package/dist/components/card.cjs +1 -0
  55. package/dist/components/card.d.ts +17 -0
  56. package/dist/components/card.js +59 -0
  57. package/dist/components/charts/bar-chart.d.ts +16 -0
  58. package/dist/components/charts/donut-chart.d.ts +10 -0
  59. package/dist/components/charts/funnel-chart.d.ts +8 -0
  60. package/dist/components/charts/gantt-chart.d.ts +15 -0
  61. package/dist/components/charts/heatmap-chart.d.ts +10 -0
  62. package/dist/components/charts/index.d.ts +11 -0
  63. package/dist/components/charts/line-chart.d.ts +16 -0
  64. package/dist/components/charts/multi-line-chart.d.ts +18 -0
  65. package/dist/components/charts/radar-chart.d.ts +13 -0
  66. package/dist/components/charts/scatter-chart.d.ts +24 -0
  67. package/dist/components/charts/shared.d.ts +15 -0
  68. package/dist/components/charts/waterfall-chart.d.ts +14 -0
  69. package/dist/components/charts.cjs +1 -0
  70. package/dist/components/charts.d.ts +2 -0
  71. package/dist/components/charts.js +2 -0
  72. package/dist/components/checkbox.cjs +1 -0
  73. package/dist/components/checkbox.d.ts +9 -0
  74. package/dist/components/checkbox.js +135 -0
  75. package/dist/components/code.cjs +7 -0
  76. package/dist/components/code.d.ts +23 -0
  77. package/dist/components/code.js +276 -0
  78. package/dist/components/command.cjs +1 -0
  79. package/dist/components/command.d.ts +29 -0
  80. package/dist/components/command.js +208 -0
  81. package/dist/components/confirm-dialog.cjs +1 -0
  82. package/dist/components/confirm-dialog.d.ts +14 -0
  83. package/dist/components/confirm-dialog.js +69 -0
  84. package/dist/components/copy-button.cjs +1 -0
  85. package/dist/components/copy-button.d.ts +8 -0
  86. package/dist/components/copy-button.js +87 -0
  87. package/dist/components/datatable/pagination-footer.d.ts +10 -0
  88. package/dist/components/datatable/rows-dropdown.d.ts +5 -0
  89. package/dist/components/datatable/skeleton-row.d.ts +3 -0
  90. package/dist/components/datatable/sort-icon.d.ts +4 -0
  91. package/dist/components/datatable/types.d.ts +30 -0
  92. package/dist/components/datatable.cjs +1 -0
  93. package/dist/components/datatable.d.ts +9 -0
  94. package/dist/components/datatable.js +3 -0
  95. package/dist/components/datepicker.cjs +1 -0
  96. package/dist/components/datepicker.d.ts +14 -0
  97. package/dist/components/datepicker.js +267 -0
  98. package/dist/components/drawer.cjs +1 -0
  99. package/dist/components/drawer.d.ts +18 -0
  100. package/dist/components/drawer.js +3 -0
  101. package/dist/components/dropdown-menu.cjs +1 -0
  102. package/dist/components/dropdown-menu.d.ts +26 -0
  103. package/dist/components/dropdown-menu.js +122 -0
  104. package/dist/components/empty-state.cjs +1 -0
  105. package/dist/components/empty-state.d.ts +10 -0
  106. package/dist/components/empty-state.js +68 -0
  107. package/dist/components/error-state.cjs +1 -0
  108. package/dist/components/error-state.d.ts +10 -0
  109. package/dist/components/error-state.js +80 -0
  110. package/dist/components/file-upload.cjs +1 -0
  111. package/dist/components/file-upload.d.ts +10 -0
  112. package/dist/components/file-upload.js +173 -0
  113. package/dist/components/form-field.cjs +1 -0
  114. package/dist/components/form-field.d.ts +10 -0
  115. package/dist/components/form-field.js +36 -0
  116. package/dist/components/info-button.cjs +1 -0
  117. package/dist/components/info-button.d.ts +4 -0
  118. package/dist/components/info-button.js +32 -0
  119. package/dist/components/input.cjs +1 -0
  120. package/dist/components/input.d.ts +19 -0
  121. package/dist/components/input.js +117 -0
  122. package/dist/components/kbd.cjs +1 -0
  123. package/dist/components/kbd.d.ts +6 -0
  124. package/dist/components/kbd.js +16 -0
  125. package/dist/components/label.cjs +1 -0
  126. package/dist/components/label.d.ts +6 -0
  127. package/dist/components/label.js +31 -0
  128. package/dist/components/layout.cjs +1 -0
  129. package/dist/components/layout.d.ts +51 -0
  130. package/dist/components/layout.js +117 -0
  131. package/dist/components/link.cjs +1 -0
  132. package/dist/components/link.d.ts +9 -0
  133. package/dist/components/link.js +48 -0
  134. package/dist/components/list.cjs +1 -0
  135. package/dist/components/list.d.ts +13 -0
  136. package/dist/components/list.js +46 -0
  137. package/dist/components/modal.cjs +1 -0
  138. package/dist/components/modal.d.ts +31 -0
  139. package/dist/components/modal.js +219 -0
  140. package/dist/components/navigation.cjs +1 -0
  141. package/dist/components/navigation.d.ts +42 -0
  142. package/dist/components/navigation.js +127 -0
  143. package/dist/components/number-input.cjs +1 -0
  144. package/dist/components/number-input.d.ts +16 -0
  145. package/dist/components/number-input.js +142 -0
  146. package/dist/components/otp-input.cjs +1 -0
  147. package/dist/components/otp-input.d.ts +13 -0
  148. package/dist/components/otp-input.js +71 -0
  149. package/dist/components/pagination.cjs +1 -0
  150. package/dist/components/pagination.d.ts +8 -0
  151. package/dist/components/pagination.js +77 -0
  152. package/dist/components/popover.cjs +1 -0
  153. package/dist/components/popover.d.ts +16 -0
  154. package/dist/components/popover.js +115 -0
  155. package/dist/components/progressbar.cjs +1 -0
  156. package/dist/components/progressbar.d.ts +15 -0
  157. package/dist/components/progressbar.js +108 -0
  158. package/dist/components/radio.cjs +1 -0
  159. package/dist/components/radio.d.ts +22 -0
  160. package/dist/components/radio.js +96 -0
  161. package/dist/components/richtext.cjs +1 -0
  162. package/dist/components/richtext.d.ts +10 -0
  163. package/dist/components/richtext.js +370 -0
  164. package/dist/components/select/option-list.d.ts +16 -0
  165. package/dist/components/select/select-multi.d.ts +2 -0
  166. package/dist/components/select/select-single.d.ts +2 -0
  167. package/dist/components/select/types.d.ts +54 -0
  168. package/dist/components/select/utils.d.ts +10 -0
  169. package/dist/components/select.cjs +1 -0
  170. package/dist/components/select.d.ts +3 -0
  171. package/dist/components/select.js +2 -0
  172. package/dist/components/seo.cjs +1 -0
  173. package/dist/components/seo.d.ts +45 -0
  174. package/dist/components/seo.js +64 -0
  175. package/dist/components/separator.cjs +1 -0
  176. package/dist/components/separator.d.ts +6 -0
  177. package/dist/components/separator.js +25 -0
  178. package/dist/components/skeleton.cjs +1 -0
  179. package/dist/components/skeleton.d.ts +37 -0
  180. package/dist/components/skeleton.js +146 -0
  181. package/dist/components/slider.cjs +1 -0
  182. package/dist/components/slider.d.ts +12 -0
  183. package/dist/components/slider.js +72 -0
  184. package/dist/components/snackbar.cjs +1 -0
  185. package/dist/components/snackbar.d.ts +35 -0
  186. package/dist/components/snackbar.js +220 -0
  187. package/dist/components/spinner.cjs +1 -0
  188. package/dist/components/spinner.d.ts +7 -0
  189. package/dist/components/spinner.js +31 -0
  190. package/dist/components/stat.cjs +1 -0
  191. package/dist/components/stat.d.ts +18 -0
  192. package/dist/components/stat.js +90 -0
  193. package/dist/components/status-dot.cjs +1 -0
  194. package/dist/components/status-dot.d.ts +10 -0
  195. package/dist/components/status-dot.js +29 -0
  196. package/dist/components/stepper.cjs +1 -0
  197. package/dist/components/stepper.d.ts +11 -0
  198. package/dist/components/stepper.js +67 -0
  199. package/dist/components/switch.cjs +1 -0
  200. package/dist/components/switch.d.ts +8 -0
  201. package/dist/components/switch.js +79 -0
  202. package/dist/components/table.cjs +1 -0
  203. package/dist/components/table.d.ts +12 -0
  204. package/dist/components/table.js +54 -0
  205. package/dist/components/tabs.cjs +1 -0
  206. package/dist/components/tabs.d.ts +22 -0
  207. package/dist/components/tabs.js +120 -0
  208. package/dist/components/tag.cjs +1 -0
  209. package/dist/components/tag.d.ts +12 -0
  210. package/dist/components/tag.js +58 -0
  211. package/dist/components/terminal/fs.d.ts +10 -0
  212. package/dist/components/terminal/shell-commands-sim.d.ts +5 -0
  213. package/dist/components/terminal/shell-commands.d.ts +16 -0
  214. package/dist/components/terminal/shell-run.d.ts +11 -0
  215. package/dist/components/terminal/terminal-block.d.ts +13 -0
  216. package/dist/components/terminal/terminal-emulator.d.ts +10 -0
  217. package/dist/components/terminal/types.d.ts +35 -0
  218. package/dist/components/terminal.cjs +1 -0
  219. package/dist/components/terminal.d.ts +2 -0
  220. package/dist/components/terminal.js +2 -0
  221. package/dist/components/textarea.cjs +1 -0
  222. package/dist/components/textarea.d.ts +13 -0
  223. package/dist/components/textarea.js +54 -0
  224. package/dist/components/theme-provider.cjs +1 -0
  225. package/dist/components/theme-provider.d.ts +89 -0
  226. package/dist/components/theme-provider.js +93 -0
  227. package/dist/components/theme-toggle.cjs +1 -0
  228. package/dist/components/theme-toggle.d.ts +9 -0
  229. package/dist/components/theme-toggle.js +4 -0
  230. package/dist/components/timeline.cjs +1 -0
  231. package/dist/components/timeline.d.ts +14 -0
  232. package/dist/components/timeline.js +54 -0
  233. package/dist/components/tooltip.cjs +1 -0
  234. package/dist/components/tooltip.d.ts +11 -0
  235. package/dist/components/tooltip.js +84 -0
  236. package/dist/components/tree.cjs +1 -0
  237. package/dist/components/tree.d.ts +16 -0
  238. package/dist/components/tree.js +92 -0
  239. package/dist/createLucideIcon-DDY8HuQR.js +42 -0
  240. package/dist/createLucideIcon-b_X_3fj-.cjs +1 -0
  241. package/dist/datatable-BB3v__r5.cjs +1 -0
  242. package/dist/datatable-DlBhUhuO.js +316 -0
  243. package/dist/drawer-Cbuh6qdL.cjs +1 -0
  244. package/dist/drawer-CqkVZT9Y.js +189 -0
  245. package/dist/focus-Dk1YWVPN.js +42 -0
  246. package/dist/focus-DmG6Ge7X.cjs +1 -0
  247. package/dist/index.cjs +1 -0
  248. package/dist/index.d.ts +70 -0
  249. package/dist/index.js +215 -0
  250. package/dist/lib/cn.d.ts +2 -0
  251. package/dist/lib/component-styles.d.ts +10 -0
  252. package/dist/select-Ch5fp1GT.js +461 -0
  253. package/dist/select-q0YCMhBP.cjs +1 -0
  254. package/dist/styles.css +3 -0
  255. package/dist/terminal-BOR2cFi1.js +1060 -0
  256. package/dist/terminal-CpraMs50.cjs +77 -0
  257. package/dist/theme-toggle-CnoiorKV.js +71 -0
  258. package/dist/theme-toggle-Dp1-24zH.cjs +1 -0
  259. package/dist/use-event-callback-DGkfO_uu.js +10 -0
  260. package/dist/use-event-callback-Du9_9eAi.cjs +1 -0
  261. package/dist/utils-CQ8pvCtk.js +72 -0
  262. package/dist/utils-DOFJTw8o.cjs +1 -0
  263. package/package.json +88 -0
@@ -0,0 +1,77 @@
1
+ const e=require("./cn-BdjraxxU.cjs");let t=require("react"),n=require("react/jsx-runtime");var r={command:`text-gray-900 dark:text-slate-100`,output:`text-slate-700 dark:text-slate-300`,error:`text-red-600 dark:text-red-400`,success:`text-emerald-700 dark:text-emerald-400`,info:`text-sky-600 dark:text-sky-400`,muted:`text-slate-400 dark:text-slate-500`};function i({lines:i,title:a=`Terminal`,prompt:o=`$`,className:s}){let c=(0,t.useRef)(null);return(0,t.useEffect)(()=>{c.current&&(c.current.scrollTop=c.current.scrollHeight)},[i]),(0,n.jsxs)(`div`,{className:e.t(`rounded-xl overflow-hidden border border-black/10 dark:border-white/10 bg-gray-50 dark:bg-[#0e1117]`,s),children:[(0,n.jsx)(`div`,{className:`flex items-center px-4 py-2.5 border-b border-black/[0.07] dark:border-white/[0.07] bg-black/3 dark:bg-white/[0.03]`,children:(0,n.jsx)(`span`,{className:`flex-1 text-center text-xs text-slate-500 font-medium`,children:a})}),(0,n.jsx)(`div`,{ref:c,className:`p-4 font-mono text-sm leading-6 overflow-y-auto max-h-80`,children:i.map((e,t)=>{let i=e.type??`output`;return(0,n.jsxs)(`div`,{className:`whitespace-pre-wrap break-all`,children:[i===`command`&&(0,n.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-500 mr-2 select-none`,children:e.prompt??o}),(0,n.jsx)(`span`,{className:r[i],children:e.text})]},t)})})]})}function a(e,t=!1){return{type:`file`,content:e,permissions:t?`-rwxr-xr-x`:`-rw-r--r--`,mtime:new Date,executable:t}}function o(e={}){return{type:`dir`,children:new Map(Object.entries(e)),permissions:`drwxr-xr-x`,mtime:new Date}}function s(){return o({home:o({user:o({".bashrc":a(`# ~/.bashrc
2
+ export PS1='\\u@\\h:\\w\\$ '
3
+ export PATH="$HOME/bin:$PATH"
4
+ alias ll='ls -la'
5
+ alias la='ls -A'
6
+ `),".bash_history":a(`ls
7
+ pwd
8
+ cd projects
9
+ ls -la
10
+ cat README.md
11
+ git status
12
+ npm run dev
13
+ `),".profile":a(`# ~/.profile
14
+ if [ -f "$HOME/.bashrc" ]; then
15
+ . "$HOME/.bashrc"
16
+ fi
17
+ `),"README.md":a(`# Home Directory
18
+
19
+ Welcome! Try:
20
+ ls -la
21
+ cd projects
22
+ cat README.md
23
+ help
24
+ `),Desktop:o({}),Documents:o({"notes.txt":a(`Meeting notes - 2026-06-05
25
+
26
+ - Review infra setup
27
+ - Deploy worker nodes
28
+ - Update API docs
29
+ `),"todo.txt":a(`[ ] Fix login bug
30
+ [x] Deploy v1.2
31
+ [ ] Write tests
32
+ `)}),projects:o({"my-app":o({"package.json":a(`{
33
+ "name": "my-app",
34
+ "version": "1.0.0",
35
+ "scripts": {
36
+ "dev": "next dev",
37
+ "build": "next build"
38
+ },
39
+ "dependencies": {
40
+ "next": "16.2.7",
41
+ "react": "^19.0.0"
42
+ }
43
+ }
44
+ `),"README.md":a(`# my-app
45
+
46
+ ## Getting Started
47
+
48
+ \`\`\`bash
49
+ npm install
50
+ npm run dev
51
+ \`\`\`
52
+ `),src:o({"index.ts":a(`export default function main() {
53
+ console.log("Hello, world!")
54
+ }
55
+ `),"utils.ts":a(`export function greet(name: string) {
56
+ return \`Hello, \${name}!\`
57
+ }
58
+ `)})})}),Downloads:o({})})}),etc:o({hostname:a(`ubuntu
59
+ `),"os-release":a(`NAME="Ubuntu"
60
+ VERSION="24.04.1 LTS (Noble Numbat)"
61
+ ID=ubuntu
62
+ PRETTY_NAME="Ubuntu 24.04.1 LTS"
63
+ VERSION_ID="24.04"
64
+ `),passwd:a(`root:x:0:0:root:/root:/bin/bash
65
+ user:x:1000:1000:User,,,:/home/user:/bin/bash
66
+ `),shells:a(`/bin/sh
67
+ /bin/bash
68
+ /usr/bin/bash
69
+ /usr/bin/zsh
70
+ `)}),tmp:o({}),usr:o({bin:o({}),local:o({bin:o({})})}),var:o({log:o({syslog:a(`Jun 5 12:00:01 ubuntu systemd[1]: Started Daily apt upgrade.
71
+ Jun 5 12:01:00 ubuntu CRON[1234]: (root) CMD (run-parts /etc/cron.hourly)
72
+ `)})}),proc:o({}),dev:o({})})}function c(...e){let t=[];for(let n of e)for(let e of n.split(`/`))e===`..`?t.pop():e&&e!==`.`&&t.push(e);return`/`+t.join(`/`)}function l(e){return e.split(`/`).filter(Boolean)}function u(e,t){return!t||t===`~`?`/home/${e.user}`:t.startsWith(`~/`)?`/home/${e.user}/${t.slice(2)}`:t.startsWith(`/`)?c(t):c(`/${e.cwd.join(`/`)}`,t)}function d(e,t){let n=e;for(let e of l(t)){if(n.type!==`dir`)return null;let t=n.children.get(e);if(!t)return null;n=t}return n}function f(e,t){let n=l(t),r=n.pop(),i=e;for(let e of n){if(i.type!==`dir`)return null;let t=i.children.get(e);if(!t)return null;i=t}return i.type===`dir`?[i,r]:null}function p(e){let t=`/`+e.cwd.join(`/`),n=`/home/${e.user}`;return t===n?`~`:t.startsWith(n+`/`)?`~`+t.slice(n.length):t||`/`}function m(e){let t=[],n=``,r=!1,i=!1;for(let a of e){if(a===`'`&&!i){r=!r;continue}if(a===`"`&&!r){i=!i;continue}a===` `&&!r&&!i?n&&=(t.push(n),``):n+=a}return n&&t.push(n),t}function h(e,t){return t.replace(/\$\{?([A-Z_][A-Z0-9_]*)\}?/gi,(t,n)=>e.env[n]??``)}function g(e){return e.type===`dir`?`font-bold text-sky-600 dark:text-sky-400`:e.executable?`font-bold text-emerald-600 dark:text-emerald-500`:`text-slate-700 dark:text-slate-200`}function _(e){return e.toLocaleDateString(`en-US`,{month:`short`,day:`2-digit`}).replace(`,`,``)+` `+e.toLocaleTimeString(`en-US`,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}function v(e){return{lines:[{spans:[{text:e,cls:`text-red-500 dark:text-red-400`}]}]}}function y(...e){return{lines:e.map(e=>({spans:[{text:e}]}))}}function b(e,t){let n=!1,r=!1,i;for(let e of t)e.startsWith(`-`)?(e.includes(`l`)&&(n=!0),(e.includes(`a`)||e.includes(`A`))&&(r=!0)):i=e;let a=i?u(e,i):`/`+e.cwd.join(`/`),o=d(e.root,a);if(!o)return v(`ls: cannot access '${i}': No such file or directory`);if(o.type===`file`)return{lines:[{spans:[{text:a.split(`/`).pop(),cls:g(o)}]}]};let s=[...o.children.entries()].sort(([e],[t])=>e.localeCompare(t));if(r||(s=s.filter(([e])=>!e.startsWith(`.`))),n){let e=[],t=s.reduce((e,[,t])=>e+(t.type===`file`?t.content.length:4096),0);if(e.push({spans:[{text:`total ${Math.ceil(t/512)}`,cls:`text-slate-500 dark:text-slate-500`}]}),r)for(let t of[`.`,`..`])e.push({spans:[{text:`drwxr-xr-x 2 user user 4096 ${_(new Date)} `,cls:`text-slate-500 dark:text-slate-500`},{text:t,cls:`font-bold text-sky-600 dark:text-sky-400`}]});for(let[t,n]of s){let r=n.type===`file`?n.content.length:4096;e.push({spans:[{text:`${n.permissions} 1 user user ${String(r).padStart(6)} ${_(n.mtime)} `,cls:`text-slate-500 dark:text-slate-500`},{text:n.type===`dir`?t+`/`:t,cls:g(n)}]})}return{lines:e}}let c=[];for(let e=0;e<s.length;e+=4){let t=[];for(let n=0;n<4&&e+n<s.length;n++){let[r,i]=s[e+n],a=i.type===`dir`?r+`/`:r;t.push({text:a,cls:g(i)}),n<3&&e+n+1<s.length&&t.push({text:` `.repeat(Math.max(1,20-a.length))})}c.push({spans:t})}return{lines:c}}function x(e,t){let n=u(e,t[0]??`~`),r=d(e.root,n);return r?r.type===`dir`?{lines:[],patch:{cwd:l(n)}}:v(`bash: cd: ${t[0]}: Not a directory`):v(`bash: cd: ${t[0]}: No such file or directory`)}function S(e,t){if(!t.length)return v(`cat: missing operand`);let n=[];for(let r of t){let t=d(e.root,u(e,r));if(!t){n.push({spans:[{text:`cat: ${r}: No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}if(t.type===`dir`){n.push({spans:[{text:`cat: ${r}: Is a directory`,cls:`text-red-500 dark:text-red-400`}]});continue}for(let e of t.content.split(`
73
+ `))n.push({spans:[{text:e}]})}return{lines:n}}function C(e,t){let n=[];for(let r of t.filter(e=>!e.startsWith(`-`))){let t=f(e.root,u(e,r));if(!t){n.push({spans:[{text:`mkdir: cannot create directory '${r}': No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let[i,a]=t;if(i.children.has(a)){n.push({spans:[{text:`mkdir: cannot create directory '${r}': File exists`,cls:`text-red-500 dark:text-red-400`}]});continue}i.children.set(a,o())}return{lines:n}}function w(e,t){let n=[];for(let r of t.filter(e=>!e.startsWith(`-`))){let t=u(e,r),i=d(e.root,t);if(i){i.mtime=new Date;continue}let o=f(e.root,t);if(!o){n.push({spans:[{text:`touch: cannot touch '${r}': No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let[s,c]=o;s.children.set(c,a(``))}return{lines:n}}function T(e,t){let n=!1,r=t.filter(e=>!e.startsWith(`-`)||(/r/i.test(e)&&(n=!0),!1)),i=[];for(let t of r){let r=d(e.root,u(e,t));if(!r){i.push({spans:[{text:`rm: cannot remove '${t}': No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}if(r.type===`dir`&&!n){i.push({spans:[{text:`rm: cannot remove '${t}': Is a directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let a=f(e.root,u(e,t));a&&a[0].children.delete(a[1])}return{lines:i}}function E(e,t,n){let r=n?`mv`:`cp`,i=t.filter(e=>!e.startsWith(`-`));if(i.length<2)return v(`${r}: missing destination operand`);let[a,o]=[u(e,i[0]),u(e,i[1])],s=d(e.root,a);if(!s)return v(`${r}: cannot stat '${i[0]}': No such file or directory`);if(s.type===`dir`&&!n)return v(`cp: -r not specified; omitting directory '${i[0]}'`);let c=o;d(e.root,o)?.type===`dir`&&(c=o+`/`+a.split(`/`).pop());let l=f(e.root,c);if(!l)return v(`${r}: cannot create '${i[1]}': No such file or directory`);if(l[0].children.set(l[1],{...s,mtime:new Date}),n){let t=f(e.root,a);t&&t[0].children.delete(t[1])}return{lines:[]}}function D(e,t){let n=t.filter(e=>e.startsWith(`-`)),r=t.filter(e=>!e.startsWith(`-`));if(!r.length)return v(`grep: missing pattern`);let[i,...a]=r,o=n.some(e=>e.includes(`i`)),s=n.some(e=>e.includes(`n`)),c=n.some(e=>e.includes(`v`)),l=[];for(let t of a){let n=d(e.root,u(e,t));if(!n||n.type!==`file`){l.push({spans:[{text:`grep: ${t}: No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let r=new RegExp(i,o?`gi`:`g`);n.content.split(`
74
+ `).forEach((e,n)=>{let i=r.test(e);if(c?!i:i){let r=a.length>1?`${t}:`:``;l.push({spans:[{text:r+(s?`${n+1}:`:``)+e}]})}})}return{lines:l}}function O(e,t){let n=t[0]&&!t[0].startsWith(`-`)?u(e,t[0]):`/`+e.cwd.join(`/`),r=[];function i(t){let n=d(e.root,t);if(n&&(r.push({spans:[{text:t}]}),n.type===`dir`))for(let[e]of n.children)i(t===`/`?`/`+e:t+`/`+e)}return i(n),{lines:r}}function k(e,t){let n=t.filter(e=>e.startsWith(`-`)),r=t.filter(e=>!e.startsWith(`-`)),i=!n.length||n.some(e=>e.includes(`l`)),a=!n.length||n.some(e=>e.includes(`w`)),o=!n.length||n.some(e=>e.includes(`c`)),s=[];for(let t of r){let n=d(e.root,u(e,t));if(!n||n.type!==`file`){s.push({spans:[{text:`wc: ${t}: No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let r=n.content.split(`
75
+ `).length-1,c=n.content.trim().split(/\s+/).filter(Boolean).length,l=n.content.length,f=[];i&&f.push(String(r).padStart(4)),a&&f.push(String(c).padStart(4)),o&&f.push(String(l).padStart(4)),s.push({spans:[{text:f.join(` `)+` `+t}]})}return{lines:s}}function A(e,t,n){let r=10,i=[];for(let e=0;e<t.length;e++){if(t[e]===`-n`&&t[e+1]){r=parseInt(t[++e]);continue}if(/^-\d+$/.test(t[e])){r=parseInt(t[e].slice(1));continue}i.push(t[e])}let a=[];for(let t of i){let i=d(e.root,u(e,t));if(!i||i.type!==`file`){a.push({spans:[{text:`${n?`tail`:`head`}: cannot open '${t}': No such file or directory`,cls:`text-red-500 dark:text-red-400`}]});continue}let o=i.content.split(`
76
+ `);(n?o.slice(-r):o.slice(0,r)).forEach(e=>a.push({spans:[{text:e}]}))}return{lines:a}}function j(e,t){let n=t[0];if(!n)return y(`usage: git [--version] [--help] <command> [<args>]`,``,`Common commands: init clone status add commit push pull log diff branch checkout merge`);if(n===`status`)return y(`On branch main`,`Your branch is up to date with 'origin/main'.`,``,`nothing to commit, working tree clean`);if(n===`log`)return{lines:[{spans:[{text:`commit a3f8c1e9d2b74f6a1c8e3d5b9f2a7c4e8d1b3f5 (HEAD -> main)`,cls:`text-amber-600 dark:text-amber-400`}]},{spans:[{text:`Author: User <user@example.com>`}]},{spans:[{text:`Date: Thu Jun 5 12:00:00 2026 +0000`}]},{spans:[{text:``}]},{spans:[{text:` Initial commit`}]}]};if(n===`init`)return y(`Initialized empty Git repository in ${p(e)}/.git/`);if(n===`branch`)return{lines:[{spans:[{text:`* main`,cls:`text-emerald-600 dark:text-emerald-500`}]}]};if(n===`diff`)return y(`(no changes)`);if(n===`add`||n===`checkout`)return{lines:[]};if(n===`commit`){let e=t.indexOf(`-m`);return y(`[main a3f8c1e] ${e===-1?`update`:t[e+1]}`,` 1 file changed, 1 insertion(+)`)}return n===`push`||n===`pull`?y(`Already up to date.`):n===`clone`?y(`Cloning into '${(t[1]??`<url>`).split(`/`).pop()?.replace(`.git`,``)??`repo`}'...`,`remote: Counting objects: 100% (42/42), done.`,`Receiving objects: 100% (42/42), 12.34 KiB | 1.23 MiB/s, done.`):n===`--version`?y(`git version 2.43.0`):v(`git: '${n}' is not a git command. See 'git --help'.`)}function M(e){let t=e[0];if(t===`update`)return y(`Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]`,`Fetched 256 kB in 1s (256 kB/s)`,`Reading package lists... Done`,`Building dependency tree... Done`,`2 packages can be upgraded.`);if(t===`upgrade`)return y(`Reading package lists... Done`,`Building dependency tree... Done`,`0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.`);if(t===`install`){let t=e[1]??``;return t?y(`Reading package lists... Done`,`The following NEW packages will be installed:\n ${t}`,`Get:1 http://archive.ubuntu.com/ubuntu noble/universe amd64 ${t} 1.0.0-1 [128 kB]`,`Fetched 128 kB in 0s`,`Setting up ${t} (1.0.0-1) ...`):v(`apt: package name required`)}return t===`list`?y(`Listing... Done`,`bash/noble,now 5.2.21-2ubuntu4 amd64 [installed]`,`curl/noble,now 8.5.0 amd64 [installed]`,`git/noble,now 1:2.43.0 amd64 [installed]`,`nodejs/noble,now 18.19.0 amd64 [installed]`,`python3/noble,now 3.12.3 amd64 [installed]`):y(`Usage: apt [options] command`,``,`Available commands:`,` update, upgrade, install, remove, list, search, show`)}function N(e){let t=e.find(e=>!e.startsWith(`-`))??`google.com`,n=e.indexOf(`-c`),r=n===-1?4:Math.min(parseInt(e[n+1]??`4`),8),i=[{spans:[{text:`PING ${t} (142.250.185.46) 56(84) bytes of data.`}]}];for(let e=0;e<r;e++){let n=(12+Math.random()*8).toFixed(3);i.push({spans:[{text:`64 bytes from ${t} (142.250.185.46): icmp_seq=${e+1} ttl=115 time=${n} ms`}]})}return i.push({spans:[{text:``}]}),i.push({spans:[{text:`--- ${t} ping statistics ---`}]}),i.push({spans:[{text:`${r} packets transmitted, ${r} received, 0% packet loss`}]}),i.push({spans:[{text:`rtt min/avg/max = 12.1/15.3/20.1 ms`}]}),{lines:i}}function P(){return{lines:[{spans:[{text:`Available commands:`,cls:`font-bold text-slate-700 dark:text-slate-200`}]},{spans:[{text:``}]},{spans:[{text:` File system: `,cls:`text-sky-600 dark:text-sky-400`},{text:`ls cd pwd cat mkdir touch rm cp mv find`}]},{spans:[{text:` Text tools: `,cls:`text-sky-600 dark:text-sky-400`},{text:`echo grep wc head tail sort`}]},{spans:[{text:` System: `,cls:`text-sky-600 dark:text-sky-400`},{text:`whoami id uname hostname date uptime df free ps`}]},{spans:[{text:` Environment: `,cls:`text-sky-600 dark:text-sky-400`},{text:`env export unset which`}]},{spans:[{text:` Network: `,cls:`text-sky-600 dark:text-sky-400`},{text:`ping curl wget`}]},{spans:[{text:` Packages: `,cls:`text-sky-600 dark:text-sky-400`},{text:`apt apt-get`}]},{spans:[{text:` Dev tools: `,cls:`text-sky-600 dark:text-sky-400`},{text:`git node python3 npm`}]},{spans:[{text:` Shell: `,cls:`text-sky-600 dark:text-sky-400`},{text:`history clear sudo chmod alias`}]},{spans:[{text:``}]},{spans:[{text:`Keyboard: `,cls:`text-slate-500 dark:text-slate-500`},{text:`↑↓ history Tab complete Ctrl+C cancel Ctrl+L clear`}]}]}}function F(e,t){let[n,...r]=m(h(e,t.trim()));if(!n)return{lines:[],next:{...e,history:[...e.history,t].slice(-500)}};let i;switch(n){case`pwd`:i=y(`/`+(e.cwd.join(`/`)||``));break;case`ls`:i=b(e,r);break;case`cd`:i=x(e,r);break;case`echo`:i=y(r.filter(e=>e!==`-n`&&e!==`-e`).map(t=>h(e,t)).join(` `));break;case`cat`:i=S(e,r);break;case`mkdir`:i=C(e,r);break;case`touch`:i=w(e,r);break;case`rm`:i=T(e,r);break;case`cp`:i=E(e,r,!1);break;case`mv`:i=E(e,r,!0);break;case`clear`:i={lines:[],clear:!0};break;case`history`:i={lines:e.history.map((e,t)=>({spans:[{text:` ${String(t+1).padStart(4)} `,cls:`text-slate-500`},{text:e}]}))};break;case`grep`:i=D(e,r);break;case`find`:i=O(e,r);break;case`wc`:i=k(e,r);break;case`head`:i=A(e,r,!1);break;case`tail`:i=A(e,r,!0);break;case`sort`:{let t=r[0];if(!t){i=v(`sort: missing operand`);break}let n=d(e.root,u(e,t));if(!n||n.type!==`file`){i=v(`sort: cannot read: ${t}`);break}i={lines:n.content.split(`
77
+ `).sort().map(e=>({spans:[{text:e}]}))};break}case`whoami`:i=y(e.user);break;case`id`:i=y(`uid=1000(${e.user}) gid=1000(${e.user}) groups=1000(${e.user}),27(sudo),4(adm)`);break;case`uname`:i=y(r.includes(`-a`)?`Linux ${e.hostname} 6.8.0-51-generic #52-Ubuntu SMP x86_64 GNU/Linux`:`Linux`);break;case`hostname`:i=y(e.hostname);break;case`date`:i=y(new Date().toString());break;case`uptime`:{let t=Math.floor((Date.now()-e.startTime.getTime())/1e3);i=y(` ${new Date().toLocaleTimeString()} up ${Math.floor(t/3600)}:${String(Math.floor(t%3600/60)).padStart(2,`0`)}, 1 user, load average: 0.08, 0.12, 0.09`);break}case`df`:i={lines:[{spans:[{text:`Filesystem Size Used Avail Use% Mounted on`,cls:`text-slate-500 dark:text-slate-500`}]},{spans:[{text:r.includes(`-h`)?`/dev/sda1 79G 12G 63G 16% /`:`/dev/sda1 82636288 12582912 65901568 16% /`}]},{spans:[{text:r.includes(`-h`)?`tmpfs 7.8G 0 7.8G 0% /dev/shm`:`tmpfs 8133480 0 8133480 0% /dev/shm`}]}]};break;case`free`:i={lines:[{spans:[{text:` total used free shared buff/cache available`,cls:`text-slate-500 dark:text-slate-500`}]},{spans:[{text:r.includes(`-h`)?`Mem: 15Gi 3.1Gi 8.7Gi 310Mi 3.6Gi 11Gi`:`Mem: 16266960 3211264 8921088 318464 3682496 11502208`}]},{spans:[{text:r.includes(`-h`)?`Swap: 975Mi 0B 975Mi`:`Swap: 999420 0 999420`}]}]};break;case`ps`:i={lines:[{spans:[{text:` PID TTY TIME CMD`,cls:`text-slate-500 dark:text-slate-500`}]},{spans:[{text:` 1234 pts/0 00:00:00 bash`}]},{spans:[{text:` 5678 pts/0 00:00:00 ps`}]}]};break;case`env`:i={lines:Object.entries(e.env).map(([e,t])=>({spans:[{text:e,cls:`text-sky-600 dark:text-sky-400`},{text:`=`},{text:t,cls:`text-emerald-600 dark:text-emerald-500`}]}))};break;case`export`:{let t={...e.env};for(let n of r){let r=n.indexOf(`=`);r>-1&&(t[n.slice(0,r)]=h(e,n.slice(r+1)))}i={lines:[],patch:{env:t}};break}case`unset`:{let t={...e.env};for(let e of r)delete t[e];i={lines:[],patch:{env:t}};break}case`which`:{let e={bash:`/bin/bash`,ls:`/bin/ls`,cat:`/bin/cat`,echo:`/bin/echo`,rm:`/bin/rm`,cp:`/bin/cp`,mv:`/bin/mv`,mkdir:`/bin/mkdir`,touch:`/usr/bin/touch`,pwd:`/bin/pwd`,grep:`/bin/grep`,find:`/usr/bin/find`,sort:`/usr/bin/sort`,wc:`/usr/bin/wc`,head:`/usr/bin/head`,tail:`/usr/bin/tail`,date:`/bin/date`,hostname:`/bin/hostname`,uname:`/bin/uname`,whoami:`/usr/bin/whoami`,id:`/usr/bin/id`,env:`/usr/bin/env`,which:`/usr/bin/which`,python3:`/usr/bin/python3`,node:`/usr/bin/node`,npm:`/usr/bin/npm`,git:`/usr/bin/git`,curl:`/usr/bin/curl`,wget:`/usr/bin/wget`,apt:`/usr/bin/apt`,df:`/bin/df`,du:`/usr/bin/du`,free:`/usr/bin/free`,ps:`/bin/ps`,uptime:`/usr/bin/uptime`,chmod:`/bin/chmod`,chown:`/bin/chown`,sudo:`/usr/bin/sudo`,ping:`/bin/ping`};i={lines:r.map(t=>({spans:[{text:e[t]??``,cls:e[t]?void 0:`text-red-500 dark:text-red-400`},{text:e[t]?``:`${t} not found`}]})).filter(e=>e.spans.some(e=>e.text))};break}case`chmod`:i={lines:[]};break;case`chown`:i={lines:[]};break;case`sudo`:i=y(`[sudo] simulated — running as root: ${r.join(` `)}`);break;case`git`:i=j(e,r);break;case`apt`:case`apt-get`:i=M(r);break;case`snap`:i=y(`snap: simulated snap package manager`);break;case`node`:i=r.length?v(`node: ${r[0]}: No such file`):y(`Welcome to Node.js v20.18.0.`,`Type ".help" for more information.`,`> (REPL not supported in browser — run node <file.js>)`);break;case`python3`:case`python`:i=r.length?v(`python3: can't open file '${r[0]}'`):y(`Python 3.12.3 (main, Nov 6 2024) on linux`,`>>> (REPL not supported in browser — run python3 <file.py>)`);break;case`npm`:i=r[0]===`install`||r[0]===`i`?y(`added ${+!!r[1]} packages in 0.5s`):r[0]===`run`?y(`> ${r[1]}`,``,`Running ${r[1]}...`):v(`npm: unknown command: ${r[0]??`(none)`}`);break;case`ping`:i=N(r);break;case`curl`:i=r[0]?y(`{"status":"ok","message":"Simulated response from ${r.find(e=>!e.startsWith(`-`))??``}"}`):v(`curl: try 'curl --help'`);break;case`wget`:i=y(`--${new Date().toISOString()}-- ${r[0]??``}`,`Saving to: stdout`,`100% [========================================]`,`done.`);break;case`man`:case`help`:i=P();break;case`less`:case`more`:i=r[0]?S(e,r):v(`usage: ${n} <file>`);break;case`vim`:case`vi`:case`nano`:case`emacs`:i={lines:[{spans:[{text:`${n}: terminal editor not available in browser. Use cat to view files.`,cls:`text-amber-600 dark:text-amber-400`}]}]};break;case`top`:case`htop`:i={lines:[{spans:[{text:`interactive monitor not supported. Try: ps aux`,cls:`text-amber-600 dark:text-amber-400`}]}]};break;case`exit`:case`logout`:i=y(`logout`);break;case`alias`:i=y(`alias ll='ls -la'`,`alias la='ls -A'`,`alias l='ls -CF'`);break;case`type`:i=y(`${r[0]??``} is a shell builtin`);break;case`true`:i={lines:[]};break;case`false`:i={lines:[]};break;case`sleep`:i={lines:[]};break;case``:i={lines:[]};break;default:i=v(`${n}: command not found`)}let a={...e,cwd:i.patch?.cwd??e.cwd,env:i.patch?.env??e.env,history:[...e.history,t.trim()].filter(Boolean).slice(-500)};return{lines:i.lines,next:a,clear:i.clear}}var I=`ls.cd.pwd.cat.mkdir.touch.rm.cp.mv.find.echo.grep.wc.head.tail.sort.whoami.id.uname.hostname.date.uptime.df.free.ps.env.export.unset.which.chmod.chown.sudo.git.apt.apt-get.node.python3.npm.ping.curl.wget.man.help.less.more.vim.nano.top.exit.alias.true.false.sleep.history.clear.type.bash.sh.snap.yarn.pip.pip3.wget.source`.split(`.`);function L(e,t){let n=m(t);if(n.length===0||n.length===1&&!t.endsWith(` `)){let e=n[0]??``,r=I.filter(t=>t.startsWith(e));return r.length===1?{value:r[0]+` `,completions:[]}:r.length>1?{value:t,completions:r}:{value:t,completions:[]}}let r=n[n.length-1]??``,i=r.includes(`/`)?r.slice(0,r.lastIndexOf(`/`)+1):``,a=r.slice(i.length),o=i?u(e,i):`/`+e.cwd.join(`/`),s=d(e.root,o);if(!s||s.type!==`dir`)return{value:t,completions:[]};let c=[...s.children.keys()].filter(e=>e.startsWith(a));if(c.length===0)return{value:t,completions:[]};if(c.length===1){let e=c[0],t=s.children.get(e).type===`dir`?`/`:` `,r=i+e+t;return{value:[...n.slice(0,-1),r].join(` `),completions:[]}}return{value:t,completions:c}}function R(e){return[{text:`${e.user}@${e.hostname}`,cls:`font-bold text-emerald-600 dark:text-emerald-500`},{text:`:`,cls:`text-slate-700 dark:text-slate-200`},{text:p(e),cls:`font-bold text-sky-600 dark:text-sky-400`},{text:`$ `,cls:`text-slate-700 dark:text-slate-200`}]}function z({title:r=`Terminal`,user:i=`user`,hostname:a=`ubuntu`,className:o}){let c=()=>({root:s(),cwd:[`home`,i],env:{HOME:`/home/${i}`,USER:i,SHELL:`/bin/bash`,TERM:`xterm-256color`,PATH:`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`,LANG:`en_US.UTF-8`},history:[],user:i,hostname:a,startTime:new Date}),[l,u]=(0,t.useState)(!1),[d,f]=(0,t.useState)(c),[p,m]=(0,t.useState)([]),[h,g]=(0,t.useState)(``),[_,v]=(0,t.useState)(-1),[y,b]=(0,t.useState)([]),[x,S]=(0,t.useState)(!0),C=(0,t.useRef)(null),w=(0,t.useRef)(null),T=(0,t.useRef)(0);(0,t.useEffect)(()=>{u(!0)},[]),(0,t.useEffect)(()=>{let e=setInterval(()=>S(e=>!e),530);return()=>clearInterval(e)},[]),(0,t.useEffect)(()=>{w.current&&(w.current.scrollTop=w.current.scrollHeight)},[p]);function E(e){m(t=>[...t,...e.map(e=>({id:T.current++,spans:e}))])}function D(){let e=h.trim();if(b([]),E([[...R(d),{text:e}]]),!e){g(``);return}let{lines:t,next:n,clear:r}=F(d,e);if(f(n),v(-1),g(``),r){m([]);return}t.length&&E(t.map(e=>e.spans))}function O(e){if(e.key===`Enter`){D();return}if(e.key===`c`&&e.ctrlKey){e.preventDefault(),E([[...R(d),{text:h},{text:`^C`,cls:`text-slate-500`}]]),g(``),v(-1),b([]);return}if(e.key===`l`&&e.ctrlKey){e.preventDefault(),m([]);return}if(e.key===`u`&&e.ctrlKey){e.preventDefault(),g(``);return}if(e.key===`ArrowUp`){e.preventDefault();let t=Math.min(_+1,d.history.length-1);t>=0&&(v(t),g(d.history[d.history.length-1-t]??``));return}if(e.key===`ArrowDown`){e.preventDefault();let t=_-1;t<0?(v(-1),g(``)):(v(t),g(d.history[d.history.length-1-t]??``));return}if(e.key===`Tab`){e.preventDefault();let{value:t,completions:n}=L(d,h);g(t),b(n.length>1?n:[]);return}b([])}let k=R(d);return l?(0,n.jsxs)(`div`,{className:e.t(`rounded-xl overflow-hidden border border-black/10 dark:border-white/10 bg-white dark:bg-[#0e1117] shadow-sm dark:shadow-xl dark:shadow-black/20 cursor-text flex flex-col`,o),onClick:()=>C.current?.focus(),children:[(0,n.jsx)(`div`,{className:`flex items-center px-4 py-2.5 border-b border-black/[0.07] dark:border-white/[0.07] bg-black/3 dark:bg-white/[0.03] shrink-0`,children:(0,n.jsx)(`span`,{className:`flex-1 text-center text-xs text-slate-500 font-medium`,children:r})}),(0,n.jsxs)(`div`,{ref:w,className:`flex-1 overflow-y-auto p-4 font-mono text-sm leading-6 min-h-[200px] max-h-80`,children:[p.length===0&&(0,n.jsxs)(`div`,{className:`text-slate-400 dark:text-slate-500 mb-2 select-none`,children:[(0,n.jsxs)(`div`,{children:[`Ubuntu 24.04.1 LTS — type `,(0,n.jsx)(`span`,{className:`text-sky-600 dark:text-sky-400`,children:`help`}),` for available commands`]}),(0,n.jsx)(`div`,{className:`h-2`})]}),p.map(e=>(0,n.jsx)(`div`,{className:`whitespace-pre-wrap break-all`,children:e.spans.map((e,t)=>(0,n.jsx)(`span`,{className:e.cls,children:e.text},t))},e.id)),y.length>0&&(0,n.jsx)(`div`,{className:`flex flex-wrap gap-x-4 text-slate-500 dark:text-slate-500 mt-1`,children:y.map(e=>(0,n.jsx)(`span`,{children:e},e))})]}),(0,n.jsxs)(`div`,{className:`px-4 py-3 border-t border-black/8 dark:border-white/6 flex items-center font-mono text-sm shrink-0`,children:[k.map((t,r)=>(0,n.jsx)(`span`,{className:e.t(`whitespace-pre`,t.cls),children:t.text},r)),(0,n.jsxs)(`span`,{className:`relative flex-1 flex items-center min-w-0`,children:[(0,n.jsx)(`input`,{ref:C,value:h,onChange:e=>g(e.target.value),onKeyDown:O,className:`absolute inset-0 w-full bg-transparent text-transparent focus:outline-none caret-transparent`,spellCheck:!1,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`}),(0,n.jsx)(`span`,{className:`whitespace-pre text-slate-800 dark:text-slate-100 pointer-events-none select-none`,children:h}),(0,n.jsx)(`span`,{className:e.t(`inline-block h-[1.1em] w-[2px] bg-slate-700 dark:bg-slate-300 shrink-0`,x?`opacity-100`:`opacity-0`),"aria-hidden":!0})]})]})]}):(0,n.jsxs)(`div`,{className:e.t(`rounded-xl overflow-hidden border border-black/10 dark:border-white/10 bg-white dark:bg-[#0e1117] shadow-sm dark:shadow-xl dark:shadow-black/20 flex flex-col`,o),children:[(0,n.jsx)(`div`,{className:`flex items-center px-4 py-2.5 border-b border-black/[0.07] dark:border-white/[0.07] bg-black/3 dark:bg-white/[0.03] shrink-0`,children:(0,n.jsx)(`span`,{className:`flex-1 text-center text-xs text-slate-500 font-medium`,children:r})}),(0,n.jsx)(`div`,{className:`flex-1 min-h-[200px] max-h-80`}),(0,n.jsx)(`div`,{className:`px-4 py-3 border-t border-black/8 dark:border-white/6 shrink-0`})]})}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return z}});
@@ -0,0 +1,71 @@
1
+ import { t as e } from "./cn-DpgY2leY.js";
2
+ import { s as t } from "./component-styles-Ce56hn9T.js";
3
+ import { t as n } from "./createLucideIcon-DDY8HuQR.js";
4
+ import { useTheme as r } from "./components/theme-provider.js";
5
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
6
+ var o = n("moon", [["path", {
7
+ d: "M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401",
8
+ key: "kfwtm"
9
+ }]]), s = n("sun", [
10
+ ["circle", {
11
+ cx: "12",
12
+ cy: "12",
13
+ r: "4",
14
+ key: "4exip2"
15
+ }],
16
+ ["path", {
17
+ d: "M12 2v2",
18
+ key: "tus03m"
19
+ }],
20
+ ["path", {
21
+ d: "M12 20v2",
22
+ key: "1lh1kg"
23
+ }],
24
+ ["path", {
25
+ d: "m4.93 4.93 1.41 1.41",
26
+ key: "149t6j"
27
+ }],
28
+ ["path", {
29
+ d: "m17.66 17.66 1.41 1.41",
30
+ key: "ptbguv"
31
+ }],
32
+ ["path", {
33
+ d: "M2 12h2",
34
+ key: "1t8f8n"
35
+ }],
36
+ ["path", {
37
+ d: "M20 12h2",
38
+ key: "1q8mjw"
39
+ }],
40
+ ["path", {
41
+ d: "m6.34 17.66-1.41 1.41",
42
+ key: "1m8zz5"
43
+ }],
44
+ ["path", {
45
+ d: "m19.07 4.93-1.41 1.41",
46
+ key: "1shlcs"
47
+ }]
48
+ ]);
49
+ //#endregion
50
+ //#region src/components/theme-toggle.tsx
51
+ function c({ lightIcon: n = /* @__PURE__ */ i(s, { "aria-hidden": "true" }), darkIcon: c = /* @__PURE__ */ i(o, { "aria-hidden": "true" }), showLabel: l = !1, lightLabel: u = "Use light theme", darkLabel: d = "Use dark theme", className: f, onClick: p, type: m = "button", ...h }) {
52
+ let { resolvedTheme: g, toggleTheme: _ } = r(), v = g === "dark", y = v ? u : d;
53
+ return /* @__PURE__ */ a("button", {
54
+ type: m,
55
+ "aria-label": y,
56
+ title: y,
57
+ "aria-pressed": v,
58
+ "data-theme": g,
59
+ className: e("inline-flex h-9 items-center justify-center gap-2 rounded-[var(--radius-md)] border border-border bg-surface px-3 text-sm font-medium text-foreground shadow-xs transition-colors", "hover:border-border-strong hover:bg-surface-muted", t, !l && "w-9 px-0 [&_svg]:size-4", l && "[&_svg]:size-4", f),
60
+ onClick: (e) => {
61
+ p?.(e), e.defaultPrevented || _();
62
+ },
63
+ ...h,
64
+ children: [/* @__PURE__ */ i("span", {
65
+ "aria-hidden": "true",
66
+ children: v ? n : c
67
+ }), l && /* @__PURE__ */ i("span", { children: y })]
68
+ });
69
+ }
70
+ //#endregion
71
+ export { c as t };
@@ -0,0 +1 @@
1
+ const e=require("./cn-BdjraxxU.cjs"),t=require("./component-styles-TkZ7v6Ef.cjs"),n=require("./createLucideIcon-b_X_3fj-.cjs"),r=require("./components/theme-provider.cjs");let i=require("react/jsx-runtime");var a=n.t(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),o=n.t(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]);function s({lightIcon:n=(0,i.jsx)(o,{"aria-hidden":`true`}),darkIcon:s=(0,i.jsx)(a,{"aria-hidden":`true`}),showLabel:c=!1,lightLabel:l=`Use light theme`,darkLabel:u=`Use dark theme`,className:d,onClick:f,type:p=`button`,...m}){let{resolvedTheme:h,toggleTheme:g}=r.useTheme(),_=h===`dark`,v=_?l:u;return(0,i.jsxs)(`button`,{type:p,"aria-label":v,title:v,"aria-pressed":_,"data-theme":h,className:e.t(`inline-flex h-9 items-center justify-center gap-2 rounded-[var(--radius-md)] border border-border bg-surface px-3 text-sm font-medium text-foreground shadow-xs transition-colors`,`hover:border-border-strong hover:bg-surface-muted`,t.s,!c&&`w-9 px-0 [&_svg]:size-4`,c&&`[&_svg]:size-4`,d),onClick:e=>{f?.(e),e.defaultPrevented||g()},...m,children:[(0,i.jsx)(`span`,{"aria-hidden":`true`,children:_?n:s}),c&&(0,i.jsx)(`span`,{children:v})]})}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
@@ -0,0 +1,10 @@
1
+ import { useCallback as e, useLayoutEffect as t, useRef as n } from "react";
2
+ //#region src/hooks/use-event-callback.ts
3
+ function r(r) {
4
+ let i = n(r);
5
+ return t(() => {
6
+ i.current = r;
7
+ }), e(((...e) => i.current(...e)), []);
8
+ }
9
+ //#endregion
10
+ export { r as t };
@@ -0,0 +1 @@
1
+ let e=require("react");function t(t){let n=(0,e.useRef)(t);return(0,e.useLayoutEffect)(()=>{n.current=t}),(0,e.useCallback)(((...e)=>n.current(...e)),[])}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
@@ -0,0 +1,72 @@
1
+ import { t as e } from "./cn-DpgY2leY.js";
2
+ import { useEffect as t, useState as n } from "react";
3
+ import { jsx as r } from "react/jsx-runtime";
4
+ //#region src/components/select/utils.tsx
5
+ function i(e) {
6
+ return "group" in e;
7
+ }
8
+ var a = {
9
+ default: "bg-slate-400",
10
+ success: "bg-emerald-400",
11
+ warning: "bg-amber-400",
12
+ error: "bg-red-400",
13
+ info: "bg-sky-400"
14
+ };
15
+ function o(e) {
16
+ let t = 0;
17
+ return e.flatMap((e) => i(e) ? e.options.map((e) => ({
18
+ ...e,
19
+ flatIdx: e.disabled ? -1 : t++
20
+ })) : [{
21
+ ...e,
22
+ flatIdx: e.disabled ? -1 : t++
23
+ }]);
24
+ }
25
+ function s(e, r) {
26
+ let [i, a] = n(null);
27
+ return t(() => {
28
+ if (!e) {
29
+ a(null);
30
+ return;
31
+ }
32
+ function t() {
33
+ let e = r.current?.getBoundingClientRect();
34
+ if (!e) return;
35
+ let t = window.innerHeight - e.bottom - 6 - 8, n = e.top - 6 - 8, i = t >= Math.min(256, n) ? "bottom" : "top", o = Math.max(96, Math.min(256, i === "bottom" ? t : n)), s = i === "bottom" ? e.bottom + 6 : Math.max(8, e.top - 6 - o), c = Math.max(8, Math.min(e.left, window.innerWidth - e.width - 8));
36
+ a({
37
+ top: s,
38
+ left: c,
39
+ width: e.width,
40
+ maxHeight: o,
41
+ placement: i
42
+ });
43
+ }
44
+ return t(), window.addEventListener("scroll", t, !0), window.addEventListener("resize", t), () => {
45
+ window.removeEventListener("scroll", t, !0), window.removeEventListener("resize", t);
46
+ };
47
+ }, [e, r]), i;
48
+ }
49
+ var c = () => /* @__PURE__ */ r("svg", {
50
+ width: "10",
51
+ height: "10",
52
+ viewBox: "0 0 24 24",
53
+ fill: "none",
54
+ stroke: "currentColor",
55
+ strokeWidth: "3",
56
+ strokeLinecap: "round",
57
+ strokeLinejoin: "round",
58
+ children: /* @__PURE__ */ r("path", { d: "M18 6 6 18M6 6l12 12" })
59
+ }), l = ({ open: t }) => /* @__PURE__ */ r("svg", {
60
+ className: e("shrink-0 text-slate-500 transition-transform duration-150", t && "rotate-180"),
61
+ width: "12",
62
+ height: "12",
63
+ viewBox: "0 0 24 24",
64
+ fill: "none",
65
+ stroke: "currentColor",
66
+ strokeWidth: "2.5",
67
+ strokeLinecap: "round",
68
+ strokeLinejoin: "round",
69
+ children: /* @__PURE__ */ r("path", { d: "m6 9 6 6 6-6" })
70
+ });
71
+ //#endregion
72
+ export { i as a, o as i, c as n, s as o, a as r, l as t };
@@ -0,0 +1 @@
1
+ const e=require("./cn-BdjraxxU.cjs");let t=require("react"),n=require("react/jsx-runtime");function r(e){return`group`in e}var i={default:`bg-slate-400`,success:`bg-emerald-400`,warning:`bg-amber-400`,error:`bg-red-400`,info:`bg-sky-400`};function a(e){let t=0;return e.flatMap(e=>r(e)?e.options.map(e=>({...e,flatIdx:e.disabled?-1:t++})):[{...e,flatIdx:e.disabled?-1:t++}])}function o(e,n){let[r,i]=(0,t.useState)(null);return(0,t.useEffect)(()=>{if(!e){i(null);return}function t(){let e=n.current?.getBoundingClientRect();if(!e)return;let t=window.innerHeight-e.bottom-6-8,r=e.top-6-8,a=t>=Math.min(256,r)?`bottom`:`top`,o=Math.max(96,Math.min(256,a===`bottom`?t:r)),s=a===`bottom`?e.bottom+6:Math.max(8,e.top-6-o),c=Math.max(8,Math.min(e.left,window.innerWidth-e.width-8));i({top:s,left:c,width:e.width,maxHeight:o,placement:a})}return t(),window.addEventListener(`scroll`,t,!0),window.addEventListener(`resize`,t),()=>{window.removeEventListener(`scroll`,t,!0),window.removeEventListener(`resize`,t)}},[e,n]),r}var s=()=>(0,n.jsx)(`svg`,{width:`10`,height:`10`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`3`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,n.jsx)(`path`,{d:`M18 6 6 18M6 6l12 12`})}),c=({open:t})=>(0,n.jsx)(`svg`,{className:e.t(`shrink-0 text-slate-500 transition-transform duration-150`,t&&`rotate-180`),width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,n.jsx)(`path`,{d:`m6 9 6 6 6-6`})});Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return c}});
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@bzync/rui",
3
+ "version": "0.0.3",
4
+ "description": "Bzync React Tailwind UI component library",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "sideEffects": [
10
+ "**/*.css"
11
+ ],
12
+ "main": "./dist/index.cjs",
13
+ "module": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js",
19
+ "require": "./dist/index.cjs"
20
+ },
21
+ "./components/*": {
22
+ "types": "./dist/components/*.d.ts",
23
+ "import": "./dist/components/*.js",
24
+ "require": "./dist/components/*.cjs"
25
+ },
26
+ "./*": {
27
+ "types": "./dist/components/*.d.ts",
28
+ "import": "./dist/components/*.js",
29
+ "require": "./dist/components/*.cjs"
30
+ },
31
+ "./styles.css": {
32
+ "style": "./dist/styles.css",
33
+ "import": "./dist/styles.css",
34
+ "default": "./dist/styles.css"
35
+ }
36
+ },
37
+ "scripts": {
38
+ "dev": "vite",
39
+ "build": "vite build",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "npm run test:unit",
42
+ "test:unit": "vitest run",
43
+ "test:e2e": "playwright test",
44
+ "release:check": "npm run typecheck && npm run test:unit && npm run build && npm --prefix demo run build && npm run test:e2e",
45
+ "prepublishOnly": "npm run release:check"
46
+ },
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "git+https://github.com/bzync/rui.git"
50
+ },
51
+ "keywords": [],
52
+ "author": "",
53
+ "license": "ISC",
54
+ "bugs": {
55
+ "url": "https://github.com/bzync/rui/issues"
56
+ },
57
+ "homepage": "https://github.com/bzync/rui#readme",
58
+ "dependencies": {
59
+ "clsx": "^2.1.1",
60
+ "lucide-react": "^1.33.0",
61
+ "tailwind-merge": "^3.6.0"
62
+ },
63
+ "peerDependencies": {
64
+ "framer-motion": "^13.1.0",
65
+ "react": "^18.2.0 || ^19.0.0",
66
+ "react-dom": "^18.2.0 || ^19.0.0"
67
+ },
68
+ "devDependencies": {
69
+ "@playwright/test": "^1.62.1",
70
+ "@tailwindcss/vite": "^4.3.3",
71
+ "@testing-library/jest-dom": "^7.0.1",
72
+ "@testing-library/react": "^16.3.2",
73
+ "@testing-library/user-event": "^14.6.5",
74
+ "@types/node": "^26.2.0",
75
+ "@types/react": "^19.2.18",
76
+ "@types/react-dom": "^19.2.4",
77
+ "@vitejs/plugin-react": "^6.1.0",
78
+ "framer-motion": "^13.1.0",
79
+ "jsdom": "^30.0.1",
80
+ "react": "^19.2.8",
81
+ "react-dom": "^19.2.8",
82
+ "tailwindcss": "^4.3.3",
83
+ "typescript": "^6.0.3",
84
+ "vite": "^8.2.1",
85
+ "vite-plugin-dts": "^5.0.3",
86
+ "vitest": "^4.1.11"
87
+ }
88
+ }