{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "f-ui",
  "homepage": "https://ui.isaacfei.com",
  "items": [
    {
      "name": "date-internals",
      "type": "registry:lib",
      "title": "Date Internals",
      "description": "Shared React Aria calendar, segmented date input, popover styles, and value utils used by the date pickers.",
      "dependencies": [
        "react-aria-components",
        "@internationalized/date",
        "react-day-picker",
        "lucide-react"
      ],
      "registryDependencies": [],
      "files": [
        {
          "path": "src/components/f-ui/date-internals/calendar-rac.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-internals/calendar-rac.tsx"
        },
        {
          "path": "src/components/f-ui/date-internals/datefield-rac.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-internals/datefield-rac.tsx"
        },
        {
          "path": "src/components/f-ui/date-internals/rac-date-classes.ts",
          "type": "registry:lib",
          "target": "components/f-ui/date-internals/rac-date-classes.ts"
        },
        {
          "path": "src/components/f-ui/date-internals/date-value-utils.ts",
          "type": "registry:lib",
          "target": "components/f-ui/date-internals/date-value-utils.ts"
        }
      ]
    },
    {
      "name": "date-picker",
      "type": "registry:component",
      "title": "Date Picker",
      "description": "Single-date picker with segmented input and popover calendar; locale-aware via React Aria.",
      "dependencies": [
        "react-aria-components",
        "@internationalized/date",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://ui.isaacfei.com/r/date-internals.json",
        "button",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "src/components/f-ui/date-picker/use-date-picker.ts",
          "type": "registry:lib",
          "target": "components/f-ui/date-picker/use-date-picker.ts"
        },
        {
          "path": "src/components/f-ui/date-picker/date-picker.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-picker/date-picker.tsx"
        },
        {
          "path": "src/components/f-ui/date-picker/date-picker-parts/date-picker-field.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-picker/date-picker-parts/date-picker-field.tsx"
        },
        {
          "path": "src/components/f-ui/date-picker/date-picker-parts/date-picker-trigger.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-picker/date-picker-parts/date-picker-trigger.tsx"
        },
        {
          "path": "src/components/f-ui/date-picker/date-picker-parts/date-picker-popover.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-picker/date-picker-parts/date-picker-popover.tsx"
        }
      ]
    },
    {
      "name": "date-range-picker",
      "type": "registry:component",
      "title": "Date Range Picker",
      "description": "Multi-month range picker with segmented start/end inputs, optional clear, and popover calendar.",
      "dependencies": [
        "react-aria-components",
        "@internationalized/date",
        "react-day-picker",
        "lucide-react"
      ],
      "registryDependencies": [
        "https://ui.isaacfei.com/r/date-internals.json",
        "button",
        "label",
        "popover"
      ],
      "files": [
        {
          "path": "src/components/f-ui/date-range-picker/use-date-range-picker.ts",
          "type": "registry:lib",
          "target": "components/f-ui/date-range-picker/use-date-range-picker.ts"
        },
        {
          "path": "src/components/f-ui/date-range-picker/date-range-picker.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-range-picker/date-range-picker.tsx"
        },
        {
          "path": "src/components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-field.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-field.tsx"
        },
        {
          "path": "src/components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-trigger.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-trigger.tsx"
        },
        {
          "path": "src/components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-popover.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-popover.tsx"
        },
        {
          "path": "src/components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-clear.tsx",
          "type": "registry:component",
          "target": "components/f-ui/date-range-picker/date-range-picker-parts/date-range-picker-clear.tsx"
        }
      ]
    },
    {
      "name": "language-selector",
      "type": "registry:component",
      "title": "Language selector",
      "description": "Compact language dropdown for the navbar (controlled Select + globe icon).",
      "dependencies": ["lucide-react"],
      "registryDependencies": ["select"],
      "files": [
        {
          "path": "src/components/f-ui/language-selector.tsx",
          "type": "registry:component",
          "target": "components/f-ui/language-selector.tsx"
        }
      ]
    },
    {
      "name": "theme-mode-selector",
      "type": "registry:component",
      "title": "Theme mode selector",
      "description": "Light / dark / system theme picker (Select with icons).",
      "dependencies": ["lucide-react"],
      "registryDependencies": ["select"],
      "files": [
        {
          "path": "src/components/f-ui/theme-mode-selector.tsx",
          "type": "registry:component",
          "target": "components/f-ui/theme-mode-selector.tsx"
        }
      ]
    },
    {
      "name": "theme-mode-toggle",
      "type": "registry:component",
      "title": "Theme mode toggle",
      "description": "Compact button that toggles light and dark appearance.",
      "dependencies": ["lucide-react"],
      "registryDependencies": ["button"],
      "files": [
        {
          "path": "src/components/f-ui/theme-mode-toggle.tsx",
          "type": "registry:component",
          "target": "components/f-ui/theme-mode-toggle.tsx"
        }
      ]
    },
    {
      "name": "inputs-internals",
      "type": "registry:lib",
      "title": "Inputs Internals",
      "description": "Shared icon-leading input shell built on shadcn Input.",
      "dependencies": [],
      "registryDependencies": ["input"],
      "files": [
        {
          "path": "src/components/f-ui/inputs-internals/icon-leading-input.tsx",
          "type": "registry:component",
          "target": "components/f-ui/inputs-internals/icon-leading-input.tsx"
        }
      ]
    },
    {
      "name": "currency-format",
      "type": "registry:lib",
      "title": "Currency-Format",
      "description": "Format helpers for monetary display strings.",
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "src/components/f-ui/currency-format/currency-format.ts",
          "type": "registry:lib",
          "target": "components/f-ui/currency-format/currency-format.ts"
        }
      ]
    },
    {
      "name": "empty-value-placeholder",
      "type": "registry:component",
      "title": "Empty-Value-Placeholder",
      "description": "Muted em dash for empty read-only values; optional `isEmptyDisplayValue` helper.",
      "dependencies": [],
      "registryDependencies": [],
      "files": [
        {
          "path": "src/components/f-ui/empty-value-placeholder.tsx",
          "type": "registry:component",
          "target": "components/f-ui/empty-value-placeholder.tsx"
        }
      ]
    },
    {
      "name": "file-type-icon",
      "type": "registry:component",
      "title": "File-Type-Icon",
      "description": "VS Code style file icon from extension or file name via Iconify vscode-icons.",
      "dependencies": ["@iconify/react"],
      "registryDependencies": [],
      "files": [
        {
          "path": "src/components/f-ui/file-type-icon/file-type-icon.tsx",
          "type": "registry:component",
          "target": "components/f-ui/file-type-icon/file-type-icon.tsx"
        },
        {
          "path": "src/components/f-ui/file-type-icon/resolve-file-type-icon.ts",
          "type": "registry:lib",
          "target": "components/f-ui/file-type-icon/resolve-file-type-icon.ts"
        },
        {
          "path": "src/components/f-ui/file-type-icon/vscode-file-type-map.ts",
          "type": "registry:lib",
          "target": "components/f-ui/file-type-icon/vscode-file-type-map.ts"
        }
      ]
    },
    {
      "name": "email-input",
      "type": "registry:component",
      "title": "Email-Input",
      "description": "Email field with leading mail icon.",
      "dependencies": ["lucide-react"],
      "registryDependencies": [
        "input",
        "https://ui.isaacfei.com/r/inputs-internals.json"
      ],
      "files": [
        {
          "path": "src/components/f-ui/email-input/email-input.tsx",
          "type": "registry:component",
          "target": "components/f-ui/email-input/email-input.tsx"
        }
      ]
    },
    {
      "name": "url-input",
      "type": "registry:component",
      "title": "URL-Input",
      "description": "URL field with leading link icon.",
      "dependencies": ["lucide-react"],
      "registryDependencies": [
        "input",
        "https://ui.isaacfei.com/r/inputs-internals.json"
      ],
      "files": [
        {
          "path": "src/components/f-ui/url-input/url-input.tsx",
          "type": "registry:component",
          "target": "components/f-ui/url-input/url-input.tsx"
        }
      ]
    },
    {
      "name": "phone-input",
      "type": "registry:component",
      "title": "Phone-Input",
      "description": "Phone field with leading handset icon.",
      "dependencies": ["lucide-react"],
      "registryDependencies": [
        "input",
        "https://ui.isaacfei.com/r/inputs-internals.json"
      ],
      "files": [
        {
          "path": "src/components/f-ui/phone-input/phone-input.tsx",
          "type": "registry:component",
          "target": "components/f-ui/phone-input/phone-input.tsx"
        }
      ]
    },
    {
      "name": "currency-input",
      "type": "registry:component",
      "title": "Currency-Input",
      "description": "Decimal input with optional symbol and formatted read-only display.",
      "dependencies": [],
      "registryDependencies": [
        "input",
        "https://ui.isaacfei.com/r/currency-format.json"
      ],
      "files": [
        {
          "path": "src/components/f-ui/currency-input/currency-input.tsx",
          "type": "registry:component",
          "target": "components/f-ui/currency-input/currency-input.tsx"
        }
      ]
    },
    {
      "name": "multi-select",
      "type": "registry:component",
      "title": "Multi-Select",
      "description": "Searchable multi-select with removable chips, async options, i18n, and an optional headless hook for custom layouts.",
      "dependencies": ["cmdk", "lucide-react"],
      "registryDependencies": ["command", "label", "badge", "popover"],
      "files": [
        {
          "path": "src/components/f-ui/multi-select/multi-select-types.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/multi-select-types.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/multi-select-utils.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/multi-select-utils.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/locales/keys.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/locales/keys.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/locales/en.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/locales/en.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/locales/zh-CN.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/locales/zh-CN.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/locales/get-builtin-translator.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/locales/get-builtin-translator.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/locales/locale-provider.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/locales/locale-provider.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/use-multi-select.ts",
          "type": "registry:lib",
          "target": "components/f-ui/multi-select/use-multi-select.ts"
        },
        {
          "path": "src/components/f-ui/multi-select/multi-select-parts/multi-select-command-empty.tsx",
          "type": "registry:component",
          "target": "components/f-ui/multi-select/multi-select-parts/multi-select-command-empty.tsx"
        },
        {
          "path": "src/components/f-ui/multi-select/multi-select-parts/multi-select-anchor.tsx",
          "type": "registry:component",
          "target": "components/f-ui/multi-select/multi-select-parts/multi-select-anchor.tsx"
        },
        {
          "path": "src/components/f-ui/multi-select/multi-select-parts/multi-select-dropdown.tsx",
          "type": "registry:component",
          "target": "components/f-ui/multi-select/multi-select-parts/multi-select-dropdown.tsx"
        },
        {
          "path": "src/components/f-ui/multi-select/multi-select.tsx",
          "type": "registry:component",
          "target": "components/f-ui/multi-select/multi-select.tsx"
        }
      ]
    }
  ]
}
