Skip to content

Commit 71fcb6b

Browse files
committed
wip
1 parent 8e76bd8 commit 71fcb6b

123 files changed

Lines changed: 1340 additions & 1105 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AGENTS.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,11 +212,4 @@ Use Wayfinder to generate TypeScript functions for Laravel routes. Import from `
212212

213213
- IMPORTANT: Activate `inertia-react-development` when working with Inertia React client-side patterns.
214214

215-
=== tailwindcss/shadcn rules ===
216-
217-
# TailwindCSS & Shadcn Colors
218-
219-
- NEVER use hardcoded theme colors like `bg-zinc-50`, `dark:bg-black`, `bg-emerald-50/50`, `dark:bg-zinc-950`, `text-emerald-700`, `dark:text-emerald-400`.
220-
- ALWAYS use semantic Shadcn variables and color tokens defined in `resources/css/app.css` (e.g., `bg-background`, `text-foreground`, `bg-card`, `text-card-foreground`, `bg-muted`, `text-muted-foreground`, `bg-primary`, `text-primary-foreground`, `bg-secondary`, `text-secondary-foreground`, `border-border`, `bg-destructive`, etc.). This ensures layout consistency and automatic compatibility in both light and dark modes.
221-
222215
</laravel-boost-guidelines>

app/Console/Commands/RegistryBuildCommand.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ public function handle(): int
236236
'input-currency' => 'A smart text input formatting numeric entries into localized currency notation as you type.',
237237
'input-number' => 'A numeric spinner input containing up/down stepper buttons and range constraints.',
238238
'input-phone' => 'A formatted text input enforcing phone masks and raw numeric outputs.',
239+
'input-password' => 'A password input field with a toggleable eye icon to show/hide the password text.',
239240
'input-slug' => 'A reactive field transforming raw keystrokes into clean URL-safe slug strings.',
240241
'multi-select' => 'A dropdown selector allowing search, selection, and creation of multiple tags.',
241242
'progress-circle' => 'A clean SVG circular progress meter displaying animated percentage levels.',

bun.lock

Lines changed: 63 additions & 52 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

composer.lock

Lines changed: 75 additions & 75 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

database/seeders/RegistrySeeder.php

Lines changed: 120 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3984,6 +3984,7 @@ className="flex items-center gap-2"
39843984
'https://ui.test/r/input-phone.json',
39853985
'https://ui.test/r/input-currency.json',
39863986
'https://ui.test/r/input-number.json',
3987+
'https://ui.test/r/input-password.json',
39873988
'https://ui.test/r/multi-select.json',
39883989
'input',
39893990
'card',
@@ -4009,6 +4010,7 @@ className="flex items-center gap-2"
40094010
import { InputPhone } from \'@/registry/new-york/components/ui/inputs/input-phone\';
40104011
import { InputCurrency } from \'@/registry/new-york/components/ui/inputs/input-currency\';
40114012
import { InputNumber } from \'@/registry/new-york/components/ui/inputs/input-number\';
4013+
import { InputPassword } from \'@/registry/new-york/components/ui/inputs/input-password\';
40124014
import {
40134015
MultiSelect,
40144016
MultiSelectTrigger,
@@ -4032,6 +4034,7 @@ className="flex items-center gap-2"
40324034
const [selectedTags, setSelectedTags] = useState<string[]>([]);
40334035
const [searchFocused, setSearchFocused] = useState(false);
40344036
const [searchValue, setSearchValue] = useState(\'\');
4037+
const [passwordValue, setPasswordValue] = useState(\'\');
40354038

40364039
// New component states
40374040
const [phoneValue, setPhoneValue] = useState(\'1234567890\');
@@ -4333,20 +4336,24 @@ className="h-9 w-full text-xs"
43334336
<CardHeader className="pb-3">
43344337
<CardTitle className="flex items-center gap-2 text-sm font-bold">
43354338
<Lock className="size-4 text-chart-1" />
4336-
Glow-Border Passcode Field
4339+
Password Input
43374340
</CardTitle>
43384341
<CardDescription className="text-xs">
4339-
Simple passcode field illustrating focused states.
4342+
A secure password input field with a toggleable visibility eye icon.
43404343
</CardDescription>
43414344
</CardHeader>
4342-
<CardContent className="flex flex-1 flex-col justify-center pb-6">
4343-
<div className="relative">
4344-
<Lock className="absolute top-1/2 left-3 size-3.5 -translate-y-1/2 text-muted-foreground" />
4345-
<Input
4346-
type="password"
4347-
placeholder="••••••••"
4348-
className="h-9 border-border/50 bg-card/15 pl-9 text-xs focus-visible:border-primary focus-visible:ring-[3px] focus-visible:ring-primary/20"
4349-
/>
4345+
<CardContent className="flex flex-1 flex-col justify-center space-y-3 pb-6">
4346+
<InputPassword
4347+
value={passwordValue}
4348+
onChange={(e) => setPasswordValue(e.target.value)}
4349+
placeholder="••••••••"
4350+
className="h-9 w-full text-xs"
4351+
/>
4352+
<div className="truncate rounded border border-border/20 bg-muted/30 p-2.5 font-mono text-[10px] text-muted-foreground">
4353+
Value:{\' \'}
4354+
<span className="font-bold text-primary">
4355+
{passwordValue || \'none\'}
4356+
</span>
43504357
</div>
43514358
</CardContent>
43524359
</Card>
@@ -13826,6 +13833,109 @@ className="flex flex-1 cursor-pointer items-center justify-center rounded-br-md
1382613833

1382713834
export { InputNumber };
1382813835
export type { InputNumberProps };
13836+
',
13837+
],
13838+
],
13839+
'css' => null,
13840+
'tailwind' => null,
13841+
'vars_theme' => null,
13842+
'vars_light' => null,
13843+
'vars_dark' => null,
13844+
'font_family' => null,
13845+
'font_mono' => null,
13846+
'font_serif' => null,
13847+
'meta' => [
13848+
'category' => 'inputs',
13849+
'version' => '1.0.0',
13850+
],
13851+
'docs' => null,
13852+
'categories' => [
13853+
'inputs',
13854+
],
13855+
'extends' => null,
13856+
'style' => null,
13857+
'icon_library' => null,
13858+
'base_color' => null,
13859+
'theme' => null,
13860+
],
13861+
[
13862+
'name' => 'input-password',
13863+
'type' => 'registry:ui',
13864+
'title' => 'Input Password',
13865+
'description' => 'A password input field with a toggleable eye icon to show/hide the password text.',
13866+
'author' => 'designbycode',
13867+
'dependencies' => [
13868+
'lucide-react',
13869+
],
13870+
'devDependencies' => [
13871+
13872+
],
13873+
'registryDependencies' => [
13874+
'input',
13875+
'button',
13876+
'utils',
13877+
],
13878+
'files' => [
13879+
[
13880+
'path' => 'resources/js/registry/new-york/components/ui/inputs/input-password.tsx',
13881+
'type' => 'registry:ui',
13882+
'content' => '\'use client\';
13883+
13884+
import * as React from \'react\';
13885+
import { Eye, EyeOff } from \'lucide-react\';
13886+
import { Input } from \'@/components/ui/input\';
13887+
import { Button } from \'@/components/ui/button\';
13888+
import { cn } from \'@/lib/utils\';
13889+
13890+
interface InputPasswordProps extends React.ComponentProps<\'input\'> {
13891+
/**
13892+
* Custom class name for the toggle button
13893+
*/
13894+
toggleClassName?: string;
13895+
}
13896+
13897+
const InputPassword = React.forwardRef<HTMLInputElement, InputPasswordProps>(
13898+
({ className, toggleClassName, ...props }, ref) => {
13899+
const [showPassword, setShowPassword] = React.useState(false);
13900+
13901+
const toggleVisibility = () => {
13902+
setShowPassword((prev) => !prev);
13903+
};
13904+
13905+
return (
13906+
<div className="relative w-full">
13907+
<Input
13908+
type={showPassword ? \'text\' : \'password\'}
13909+
className={cn(\'pr-10\', className)}
13910+
ref={ref}
13911+
{...props}
13912+
/>
13913+
<Button
13914+
type="button"
13915+
variant="ghost"
13916+
size="icon"
13917+
className={cn(
13918+
\'absolute top-1/2 right-0 size-9 -translate-y-1/2 text-muted-foreground/70 hover:bg-transparent hover:text-foreground cursor-pointer select-none\',
13919+
toggleClassName
13920+
)}
13921+
onClick={toggleVisibility}
13922+
aria-label={showPassword ? \'Hide password\' : \'Show password\'}
13923+
>
13924+
{showPassword ? (
13925+
<EyeOff className="size-4" />
13926+
) : (
13927+
<Eye className="size-4" />
13928+
)}
13929+
</Button>
13930+
</div>
13931+
);
13932+
}
13933+
);
13934+
13935+
InputPassword.displayName = \'InputPassword\';
13936+
13937+
export { InputPassword };
13938+
export type { InputPasswordProps };
1382913939
',
1383013940
],
1383113941
],

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"@stylistic/eslint-plugin": "^5.10.0",
1919
"@types/culori": "^4.0.1",
2020
"@types/gsap": "^3.0.0",
21-
"@types/node": "^22.19.21",
21+
"@types/node": "^22.20.0",
2222
"@types/prismjs": "^1.26.6",
2323
"@types/three": "^0.184.1",
2424
"babel-plugin-react-compiler": "^1.0.0",
@@ -30,17 +30,17 @@
3030
"eslint-plugin-react-hooks": "^7.1.1",
3131
"prettier": "^3.8.4",
3232
"prettier-plugin-tailwindcss": "^0.6.14",
33-
"typescript-eslint": "^8.61.1"
33+
"typescript-eslint": "^8.62.0"
3434
},
3535
"dependencies": {
3636
"@base-ui/react": "^1.6.0",
3737
"@dnd-kit/react": "^0.5.0",
3838
"@fontsource/bebas-neue": "^5.2.7",
3939
"@gsap/react": "^2.1.2",
4040
"@headlessui/react": "^2.2.10",
41-
"@heyputer/puter.js": "^2.5.3",
42-
"@inertiajs/react": "^3.4.0",
43-
"@inertiajs/vite": "^3.4.0",
41+
"@heyputer/puter.js": "^2.5.4",
42+
"@inertiajs/react": "^3.5.0",
43+
"@inertiajs/vite": "^3.5.0",
4444
"@monaco-editor/react": "^4.7.0",
4545
"@radix-ui/react-avatar": "^1.2.0",
4646
"@radix-ui/react-checkbox": "^1.3.5",
@@ -70,22 +70,22 @@
7070
"input-otp": "^1.4.2",
7171
"laravel-vite-plugin": "^3.1.0",
7272
"lucide-react": "^0.475.0",
73-
"motion": "^12.40.0",
74-
"openai": "^6.44.0",
73+
"motion": "^12.42.0",
74+
"openai": "^6.45.0",
7575
"prismjs": "^1.30.0",
7676
"radix-ui": "^1.6.0",
7777
"react": "^19.2.7",
7878
"react-day-picker": "^9.14.0",
7979
"react-dom": "^19.2.7",
80-
"recharts": "^3.8.1",
80+
"recharts": "^3.9.0",
8181
"sonner": "^2.0.7",
8282
"swiper": "^12.2.0",
8383
"tailwind-merge": "^3.6.0",
8484
"tailwindcss": "^4.3.1",
8585
"three": "^0.184.0",
8686
"tw-animate-css": "^1.4.0",
8787
"typescript": "^5.9.3",
88-
"vite": "^8.0.16",
88+
"vite": "^8.1.0",
8989
"zustand": "^5.0.14"
9090
},
9191
"optionalDependencies": {
Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/animate-css-ChViTBYD.js

Lines changed: 0 additions & 7 deletions
This file was deleted.

public/build/assets/animate-css-DGpWQtZq.js

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/build/assets/app-BRtFmAu6.css

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)