@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.
- package/LICENSE +15 -0
- package/README.md +115 -0
- package/dist/autocomplete-CaysJRpk.cjs +1 -0
- package/dist/autocomplete-CfbfpcO4.js +453 -0
- package/dist/calendar-Bnld4G59.cjs +1 -0
- package/dist/calendar-CdICOROs.js +573 -0
- package/dist/charts-CxEy2c3M.js +1248 -0
- package/dist/charts-UDqS1BH1.cjs +1 -0
- package/dist/cn-BdjraxxU.cjs +1 -0
- package/dist/cn-DpgY2leY.js +1736 -0
- package/dist/component-styles-Ce56hn9T.js +16 -0
- package/dist/component-styles-TkZ7v6Ef.cjs +1 -0
- package/dist/components/accordion.cjs +1 -0
- package/dist/components/accordion.d.ts +22 -0
- package/dist/components/accordion.js +122 -0
- package/dist/components/alert.cjs +1 -0
- package/dist/components/alert.d.ts +13 -0
- package/dist/components/alert.js +165 -0
- package/dist/components/auth-backdrop.cjs +1 -0
- package/dist/components/auth-backdrop.d.ts +7 -0
- package/dist/components/auth-backdrop.js +10 -0
- package/dist/components/autocomplete/dropdown.d.ts +21 -0
- package/dist/components/autocomplete/icons.d.ts +8 -0
- package/dist/components/autocomplete/multi-trigger.d.ts +25 -0
- package/dist/components/autocomplete/single-trigger.d.ts +21 -0
- package/dist/components/autocomplete/types.d.ts +34 -0
- package/dist/components/autocomplete.cjs +1 -0
- package/dist/components/autocomplete.d.ts +5 -0
- package/dist/components/autocomplete.js +3 -0
- package/dist/components/avatar.cjs +1 -0
- package/dist/components/avatar.d.ts +17 -0
- package/dist/components/avatar.js +56 -0
- package/dist/components/badge.cjs +1 -0
- package/dist/components/badge.d.ts +12 -0
- package/dist/components/badge.js +32 -0
- package/dist/components/billing-interval-toggle.cjs +1 -0
- package/dist/components/billing-interval-toggle.d.ts +18 -0
- package/dist/components/billing-interval-toggle.js +39 -0
- package/dist/components/breadcrumb.cjs +1 -0
- package/dist/components/breadcrumb.d.ts +11 -0
- package/dist/components/breadcrumb.js +52 -0
- package/dist/components/button.cjs +1 -0
- package/dist/components/button.d.ts +17 -0
- package/dist/components/button.js +90 -0
- package/dist/components/calendar/month-view.d.ts +17 -0
- package/dist/components/calendar/types.d.ts +54 -0
- package/dist/components/calendar/week-view.d.ts +17 -0
- package/dist/components/calendar.cjs +1 -0
- package/dist/components/calendar.d.ts +3 -0
- package/dist/components/calendar.js +3 -0
- package/dist/components/callout.cjs +1 -0
- package/dist/components/callout.d.ts +9 -0
- package/dist/components/callout.js +131 -0
- package/dist/components/card.cjs +1 -0
- package/dist/components/card.d.ts +17 -0
- package/dist/components/card.js +59 -0
- package/dist/components/charts/bar-chart.d.ts +16 -0
- package/dist/components/charts/donut-chart.d.ts +10 -0
- package/dist/components/charts/funnel-chart.d.ts +8 -0
- package/dist/components/charts/gantt-chart.d.ts +15 -0
- package/dist/components/charts/heatmap-chart.d.ts +10 -0
- package/dist/components/charts/index.d.ts +11 -0
- package/dist/components/charts/line-chart.d.ts +16 -0
- package/dist/components/charts/multi-line-chart.d.ts +18 -0
- package/dist/components/charts/radar-chart.d.ts +13 -0
- package/dist/components/charts/scatter-chart.d.ts +24 -0
- package/dist/components/charts/shared.d.ts +15 -0
- package/dist/components/charts/waterfall-chart.d.ts +14 -0
- package/dist/components/charts.cjs +1 -0
- package/dist/components/charts.d.ts +2 -0
- package/dist/components/charts.js +2 -0
- package/dist/components/checkbox.cjs +1 -0
- package/dist/components/checkbox.d.ts +9 -0
- package/dist/components/checkbox.js +135 -0
- package/dist/components/code.cjs +7 -0
- package/dist/components/code.d.ts +23 -0
- package/dist/components/code.js +276 -0
- package/dist/components/command.cjs +1 -0
- package/dist/components/command.d.ts +29 -0
- package/dist/components/command.js +208 -0
- package/dist/components/confirm-dialog.cjs +1 -0
- package/dist/components/confirm-dialog.d.ts +14 -0
- package/dist/components/confirm-dialog.js +69 -0
- package/dist/components/copy-button.cjs +1 -0
- package/dist/components/copy-button.d.ts +8 -0
- package/dist/components/copy-button.js +87 -0
- package/dist/components/datatable/pagination-footer.d.ts +10 -0
- package/dist/components/datatable/rows-dropdown.d.ts +5 -0
- package/dist/components/datatable/skeleton-row.d.ts +3 -0
- package/dist/components/datatable/sort-icon.d.ts +4 -0
- package/dist/components/datatable/types.d.ts +30 -0
- package/dist/components/datatable.cjs +1 -0
- package/dist/components/datatable.d.ts +9 -0
- package/dist/components/datatable.js +3 -0
- package/dist/components/datepicker.cjs +1 -0
- package/dist/components/datepicker.d.ts +14 -0
- package/dist/components/datepicker.js +267 -0
- package/dist/components/drawer.cjs +1 -0
- package/dist/components/drawer.d.ts +18 -0
- package/dist/components/drawer.js +3 -0
- package/dist/components/dropdown-menu.cjs +1 -0
- package/dist/components/dropdown-menu.d.ts +26 -0
- package/dist/components/dropdown-menu.js +122 -0
- package/dist/components/empty-state.cjs +1 -0
- package/dist/components/empty-state.d.ts +10 -0
- package/dist/components/empty-state.js +68 -0
- package/dist/components/error-state.cjs +1 -0
- package/dist/components/error-state.d.ts +10 -0
- package/dist/components/error-state.js +80 -0
- package/dist/components/file-upload.cjs +1 -0
- package/dist/components/file-upload.d.ts +10 -0
- package/dist/components/file-upload.js +173 -0
- package/dist/components/form-field.cjs +1 -0
- package/dist/components/form-field.d.ts +10 -0
- package/dist/components/form-field.js +36 -0
- package/dist/components/info-button.cjs +1 -0
- package/dist/components/info-button.d.ts +4 -0
- package/dist/components/info-button.js +32 -0
- package/dist/components/input.cjs +1 -0
- package/dist/components/input.d.ts +19 -0
- package/dist/components/input.js +117 -0
- package/dist/components/kbd.cjs +1 -0
- package/dist/components/kbd.d.ts +6 -0
- package/dist/components/kbd.js +16 -0
- package/dist/components/label.cjs +1 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +31 -0
- package/dist/components/layout.cjs +1 -0
- package/dist/components/layout.d.ts +51 -0
- package/dist/components/layout.js +117 -0
- package/dist/components/link.cjs +1 -0
- package/dist/components/link.d.ts +9 -0
- package/dist/components/link.js +48 -0
- package/dist/components/list.cjs +1 -0
- package/dist/components/list.d.ts +13 -0
- package/dist/components/list.js +46 -0
- package/dist/components/modal.cjs +1 -0
- package/dist/components/modal.d.ts +31 -0
- package/dist/components/modal.js +219 -0
- package/dist/components/navigation.cjs +1 -0
- package/dist/components/navigation.d.ts +42 -0
- package/dist/components/navigation.js +127 -0
- package/dist/components/number-input.cjs +1 -0
- package/dist/components/number-input.d.ts +16 -0
- package/dist/components/number-input.js +142 -0
- package/dist/components/otp-input.cjs +1 -0
- package/dist/components/otp-input.d.ts +13 -0
- package/dist/components/otp-input.js +71 -0
- package/dist/components/pagination.cjs +1 -0
- package/dist/components/pagination.d.ts +8 -0
- package/dist/components/pagination.js +77 -0
- package/dist/components/popover.cjs +1 -0
- package/dist/components/popover.d.ts +16 -0
- package/dist/components/popover.js +115 -0
- package/dist/components/progressbar.cjs +1 -0
- package/dist/components/progressbar.d.ts +15 -0
- package/dist/components/progressbar.js +108 -0
- package/dist/components/radio.cjs +1 -0
- package/dist/components/radio.d.ts +22 -0
- package/dist/components/radio.js +96 -0
- package/dist/components/richtext.cjs +1 -0
- package/dist/components/richtext.d.ts +10 -0
- package/dist/components/richtext.js +370 -0
- package/dist/components/select/option-list.d.ts +16 -0
- package/dist/components/select/select-multi.d.ts +2 -0
- package/dist/components/select/select-single.d.ts +2 -0
- package/dist/components/select/types.d.ts +54 -0
- package/dist/components/select/utils.d.ts +10 -0
- package/dist/components/select.cjs +1 -0
- package/dist/components/select.d.ts +3 -0
- package/dist/components/select.js +2 -0
- package/dist/components/seo.cjs +1 -0
- package/dist/components/seo.d.ts +45 -0
- package/dist/components/seo.js +64 -0
- package/dist/components/separator.cjs +1 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.js +25 -0
- package/dist/components/skeleton.cjs +1 -0
- package/dist/components/skeleton.d.ts +37 -0
- package/dist/components/skeleton.js +146 -0
- package/dist/components/slider.cjs +1 -0
- package/dist/components/slider.d.ts +12 -0
- package/dist/components/slider.js +72 -0
- package/dist/components/snackbar.cjs +1 -0
- package/dist/components/snackbar.d.ts +35 -0
- package/dist/components/snackbar.js +220 -0
- package/dist/components/spinner.cjs +1 -0
- package/dist/components/spinner.d.ts +7 -0
- package/dist/components/spinner.js +31 -0
- package/dist/components/stat.cjs +1 -0
- package/dist/components/stat.d.ts +18 -0
- package/dist/components/stat.js +90 -0
- package/dist/components/status-dot.cjs +1 -0
- package/dist/components/status-dot.d.ts +10 -0
- package/dist/components/status-dot.js +29 -0
- package/dist/components/stepper.cjs +1 -0
- package/dist/components/stepper.d.ts +11 -0
- package/dist/components/stepper.js +67 -0
- package/dist/components/switch.cjs +1 -0
- package/dist/components/switch.d.ts +8 -0
- package/dist/components/switch.js +79 -0
- package/dist/components/table.cjs +1 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +54 -0
- package/dist/components/tabs.cjs +1 -0
- package/dist/components/tabs.d.ts +22 -0
- package/dist/components/tabs.js +120 -0
- package/dist/components/tag.cjs +1 -0
- package/dist/components/tag.d.ts +12 -0
- package/dist/components/tag.js +58 -0
- package/dist/components/terminal/fs.d.ts +10 -0
- package/dist/components/terminal/shell-commands-sim.d.ts +5 -0
- package/dist/components/terminal/shell-commands.d.ts +16 -0
- package/dist/components/terminal/shell-run.d.ts +11 -0
- package/dist/components/terminal/terminal-block.d.ts +13 -0
- package/dist/components/terminal/terminal-emulator.d.ts +10 -0
- package/dist/components/terminal/types.d.ts +35 -0
- package/dist/components/terminal.cjs +1 -0
- package/dist/components/terminal.d.ts +2 -0
- package/dist/components/terminal.js +2 -0
- package/dist/components/textarea.cjs +1 -0
- package/dist/components/textarea.d.ts +13 -0
- package/dist/components/textarea.js +54 -0
- package/dist/components/theme-provider.cjs +1 -0
- package/dist/components/theme-provider.d.ts +89 -0
- package/dist/components/theme-provider.js +93 -0
- package/dist/components/theme-toggle.cjs +1 -0
- package/dist/components/theme-toggle.d.ts +9 -0
- package/dist/components/theme-toggle.js +4 -0
- package/dist/components/timeline.cjs +1 -0
- package/dist/components/timeline.d.ts +14 -0
- package/dist/components/timeline.js +54 -0
- package/dist/components/tooltip.cjs +1 -0
- package/dist/components/tooltip.d.ts +11 -0
- package/dist/components/tooltip.js +84 -0
- package/dist/components/tree.cjs +1 -0
- package/dist/components/tree.d.ts +16 -0
- package/dist/components/tree.js +92 -0
- package/dist/createLucideIcon-DDY8HuQR.js +42 -0
- package/dist/createLucideIcon-b_X_3fj-.cjs +1 -0
- package/dist/datatable-BB3v__r5.cjs +1 -0
- package/dist/datatable-DlBhUhuO.js +316 -0
- package/dist/drawer-Cbuh6qdL.cjs +1 -0
- package/dist/drawer-CqkVZT9Y.js +189 -0
- package/dist/focus-Dk1YWVPN.js +42 -0
- package/dist/focus-DmG6Ge7X.cjs +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +70 -0
- package/dist/index.js +215 -0
- package/dist/lib/cn.d.ts +2 -0
- package/dist/lib/component-styles.d.ts +10 -0
- package/dist/select-Ch5fp1GT.js +461 -0
- package/dist/select-q0YCMhBP.cjs +1 -0
- package/dist/styles.css +3 -0
- package/dist/terminal-BOR2cFi1.js +1060 -0
- package/dist/terminal-CpraMs50.cjs +77 -0
- package/dist/theme-toggle-CnoiorKV.js +71 -0
- package/dist/theme-toggle-Dp1-24zH.cjs +1 -0
- package/dist/use-event-callback-DGkfO_uu.js +10 -0
- package/dist/use-event-callback-Du9_9eAi.cjs +1 -0
- package/dist/utils-CQ8pvCtk.js +72 -0
- package/dist/utils-DOFJTw8o.cjs +1 -0
- 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
|
+
}
|