{"id":"hakochanjp/fusionuipack","name":"fusionuipack","scope":"hakochanjp","platform":"roblox","description":"A reusable Roblox UI library built on Fusion 0.3","version":"0.2.1","latest":"0.2.1","versions":["0.1.0","0.1.1","0.1.2","0.2.0","0.2.1"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{"elttob/fusion":{"version":"^0.3.0","alias":"Fusion"}},"integrity":"1da153f956f369ca0aad3c941eeb2ac701e7d9a3ccfbc1b73815a9a96e7fcca9","likes":0,"downloads":0,"install":"forest install hakochanjp/fusionuipack","url":"https://forest.dev/p/roblox/hakochanjp/fusionuipack","files":"https://api.forest.dev/ai/package/roblox/hakochanjp/fusionuipack/files","readme":"# FusionUIPack\n\nFusion 0.3 ベースの再利用可能な Roblox UI ライブラリ。\n\n## 特徴\n\n- **Atom / Widget の2層構造** — 小さな部品 (Components) と組み合わせ済みの画面部品 (Widgets)\n- **テーマ統一** — 色・フォント・サイズは `Theme` 定数経由、ハードコード禁止\n- **リアクティブ** — Props は `Fusion.UsedAs<T>` で定数と `Value`/`Computed` の両方を受け取る\n- **ガンパッド対応** — `UserInputService:GetImageForKeyCode()` で Xbox / PlayStation 自動切り替え\n- **Fusion 同梱** — 利用側で Fusion を別途 wally install 不要。`FusionUIPack.Fusion` から取得可能\n- **Strict モード** — 全ファイル `--!strict`、selene / stylua で品質チェック済み\n\n## 依存\n\n| パッケージ | バージョン |\n|---|---|\n| [Fusion](https://github.com/dphfox/Fusion) | 0.3.0 |\n\n開発時のみ: [UILabs](https://github.com/PepeElToro41/ui-labs) 2.4.2（Story確認用）\n\n## インストール\n\n利用側プロジェクトの `wally.toml`:\n\n```toml\n[dependencies]\nFusionUIPack = \"hakochanjp/fusionuipack@0.2.1\"\n```\n\nそして `wally install` で `Packages/FusionUIPack` が生成される。**Fusion 本体を別途追加する必要はない**（FusionUIPack が再エクスポートする）。\n\n## 使い方\n\n```lua\nlocal ReplicatedStorage = game:GetService(\"ReplicatedStorage\")\nlocal Packages = ReplicatedStorage:WaitForChild(\"Packages\")\n\nlocal FusionUIPack = require(Packages.FusionUIPack)\nlocal Fusion = FusionUIPack.Fusion\n\nlocal scoped = Fusion.scoped\n\n-- Widget 呼び出し例\nlocal scope = scoped(Fusion, {\n    RPGProximityPrompt = FusionUIPack.Widgets.ProximityPrompts.RPG,\n})\n\nlocal prompt = scope:RPGProximityPrompt({\n    EquipmentName = \"伝説の剣\",\n    KeyCode = Enum.KeyCode.E,\n    InputType = Enum.ProximityPromptInputType.Keyboard,\n    HoldDuration = 1,\n    HoldProgress = 0,\n    Show = true,\n    Stats = {\n        Attack = 150,\n        Defense = 80,\n        CriticalRate = 25,\n        CriticalDamage = 150,\n        GuardRate = 15,\n        GuardPierceRate = 20,\n        GuardEffect = 25,\n    },\n})\n```\n\n## 公開API\n\nライブラリのトップレベル `FusionUIPack` は以下のフィールドを持つ:\n\n| フィールド | 説明 |\n|---|---|\n| `Fusion` | Fusion 0.3 本体（再エクスポート） |\n| `Theme` | 色・フォント・サイズの定数 |\n| `Components` | Atom層コンポーネント |\n| `Widgets` | Widget層コンポーネント（カテゴリ別） |\n\n### `FusionUIPack.Theme`\n\n```lua\nFusionUIPack.Theme.Color.Accent       -- アクセントカラー\nFusionUIPack.Theme.Color.Background   -- 背景色\nFusionUIPack.Theme.Color.TextPrimary  -- 主要テキスト色\nFusionUIPack.Theme.Font.Default       -- 既定フォント\nFusionUIPack.Theme.CornerRadius       -- 既定の角丸\n```\n\n### `FusionUIPack.Components` — Atom 層\n\n| Component | 用途 |\n|---|---|\n| `KeyCodeIcon` | KeyCode に対応するキーボード/ゲームパッド/タッチアイコン |\n| `LinearProgressBar` | 横方向のプログレスバー |\n| `CircleProgressBar` | 円形のプログレスバー（2枚ハーフ RadialFill） |\n\n### `FusionUIPack.Widgets.ProximityPrompts` — Widget 層\n\n| Widget | 用途 |\n|---|---|\n| `Default` | Roblox 標準風の ProximityPrompt を Fusion で再現 |\n| `RPG` | 装備拾得用のカード型 ProximityPrompt（ステータス表示付き） |\n\n### 型インポート\n\n```lua\nlocal FusionUIPack = require(Packages.FusionUIPack)\n\ntype KeyCodeIconProps = FusionUIPack.KeyCodeIconProps\ntype LinearProgressBarProps = FusionUIPack.LinearProgressBarProps\ntype CircleProgressBarProps = FusionUIPack.CircleProgressBarProps\ntype DefaultProximityPromptProps = FusionUIPack.DefaultProximityPromptProps\ntype RPGProximityPromptProps = FusionUIPack.RPGProximityPromptProps\ntype RPGEquipmentStats = FusionUIPack.RPGEquipmentStats\n```\n\n## ディレクトリ構成\n\n```\nfusionuipack/\n├── src/\n│   ├── init.luau              # 公開API集約\n│   ├── Shared/\n│   │   ├── Constants/Theme.luau\n│   │   ├── Types/UITypes.luau\n│   │   ├── Fusion.luau        # Fusion再エクスポート（型伝播）\n│   │   └── Require.luau       # パッケージ解決ヘルパー\n│   └── Client/UI/\n│       ├── Components/        # Atom層\n│       └── Widgets/           # Widget層\n│           └── ProximityPrompts/\n├── stories/                   # UI Labs ストーリー（配布物からは除外）\n├── default.project.json       # ライブラリビルド用（rojo build）\n├── dev.project.json           # 開発用DataModel（rojo serve）\n└── wally.toml\n```\n\n## 開発\n\n```bash\n# 依存インストール\nwally install\n\n# UI Labs 開発環境を起動\nrojo serve dev.project.json\n\n# ライブラリを .rbxm にビルド\nrojo build default.project.json -o fusionuipack.rbxm\n\n# 品質チェック\nstylua src stories\nselene src stories\n```\n\n### Story の追加\n\n`stories/` 配下に `<Name>.story.luau` を作成し、公開API経由で対象コンポーネントを require する:\n\n```lua\nlocal FusionUIPack = require(ReplicatedStorage:WaitForChild(\"FusionUIPack\"))\nlocal MyComponent = FusionUIPack.Components.MyComponent\n-- or\nlocal MyWidget = FusionUIPack.Widgets.MyCategory.MyWidget\n```\n\n## ライセンス\n\n[MIT License](LICENSE) © 2026 hakochanjp\n","readmeTruncated":false}