@akira-io/ui 2.1.0 → 2.2.0

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/dist/inertia.js CHANGED
@@ -14,9 +14,10 @@ import {
14
14
  Breadcrumbs,
15
15
  NavMain,
16
16
  SettingsLayout
17
- } from "./chunk-XLAOE5MV.js";
18
- import "./chunk-ZQXZ4UGE.js";
17
+ } from "./chunk-MCHHCLV3.js";
18
+ import "./chunk-PYXUFFMO.js";
19
19
  import "./chunk-L2H5GIF7.js";
20
+ import "./chunk-EXTOGROG.js";
20
21
  import "./chunk-53V4J7MC.js";
21
22
  import "./chunk-PPWJK5T3.js";
22
23
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/inertia.ts","../src/inertia-table-filters.ts","../src/inertia-tour-progress.ts"],"sourcesContent":["'use client';\n\nimport { Form, Link, router, usePage } from '@inertiajs/react';\nimport {\n createElement,\n type ComponentType,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { LoginFormPreset, type LoginFormLabels } from '@/blocks/login-form';\nimport {\n TourProvider as BaseTourProvider,\n type TourLabels,\n type TourProgress,\n} from '@/blocks/tour';\nimport {\n createTableFiltersHook,\n type TableFilters,\n type TableFiltersOptions,\n type TableFiltersRouter,\n type TableFilterValue,\n} from '@/inertia-table-filters';\nimport { recordTourProgress } from '@/inertia-tour-progress';\nimport { AppSidebar as BaseAppSidebar } from '@/shells/app-sidebar';\nimport { AppSidebarHeader as BaseAppSidebarHeader } from '@/shells/app-sidebar-header';\nimport { Breadcrumbs as BaseBreadcrumbs } from '@/shells/breadcrumbs';\nimport { NavMain as BaseNavMain } from '@/shells/nav-main';\nimport { SettingsLayout as BaseSettingsLayout } from '@/shells/settings-layout';\nimport type {\n BreadcrumbItem,\n LinkComponent,\n NavGroup,\n NavItem,\n SharedUser,\n UrlLike,\n} from '@/types';\n\nexport const InertiaLink = Link as unknown as LinkComponent;\n\nexport type {\n TableFilters,\n TableFiltersOptions,\n TableFiltersRouter,\n TableFilterValue,\n};\n\nexport const useTableFilters = createTableFiltersHook(router);\n\nexport function useCurrentUrl(): string {\n return usePage().url;\n}\n\nexport function AppSidebar(props: {\n logo: ReactNode;\n logoHref: UrlLike;\n groups: NavGroup[];\n footerItems?: NavItem[];\n user: SharedUser;\n settingsHref: UrlLike;\n logoutHref: UrlLike;\n collapsibleGroups?: boolean;\n collapsedGroups?: string[];\n onCollapsedChange?: (collapsedGroups: string[]) => void;\n onSettingsClick?: () => void;\n onLogout?: () => void;\n}): ReactElement {\n return createElement(BaseAppSidebar, {\n ...props,\n currentUrl: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\nexport function AppSidebarHeader(props: {\n breadcrumbs?: BreadcrumbItem[];\n onSearchClick?: () => void;\n searchLabel?: string;\n}): ReactElement {\n return createElement(BaseAppSidebarHeader, {\n ...props,\n linkComponent: InertiaLink,\n });\n}\n\nexport function Breadcrumbs(props: {\n breadcrumbs: BreadcrumbItem[];\n}): ReactElement {\n return createElement(BaseBreadcrumbs, {\n ...props,\n linkComponent: InertiaLink,\n });\n}\n\nexport function NavMain(props: {\n items: NavItem[];\n label?: string;\n collapsible?: boolean;\n defaultOpen?: boolean;\n collapsedGroups?: string[];\n onCollapsedChange?: (collapsedGroups: string[]) => void;\n}): ReactElement {\n return createElement(BaseNavMain, {\n ...props,\n currentUrl: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\nexport function SettingsLayout(\n props: PropsWithChildren<{\n items: NavItem[];\n title?: string;\n description?: string;\n wide?: boolean;\n }>,\n): ReactElement {\n return createElement(BaseSettingsLayout, {\n ...props,\n currentPath: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\ninterface LoginPostFormRenderProps {\n processing: boolean;\n errors: Partial<Record<'email' | 'password' | 'remember', string>>;\n}\n\ninterface LoginPostFormProps {\n action: string;\n method: 'post';\n resetOnSuccess: string[];\n className?: string;\n 'data-slot': string;\n children: (props: LoginPostFormRenderProps) => ReactNode;\n}\n\nconst LoginPostForm = Form as unknown as ComponentType<LoginPostFormProps>;\n\nexport function InertiaLoginForm({\n action,\n status,\n forgotPasswordHref,\n labels,\n className,\n slotName = 'inertia-login-form',\n}: {\n action: string;\n status?: string;\n forgotPasswordHref?: UrlLike;\n labels?: Partial<LoginFormLabels>;\n className?: string;\n slotName?: string;\n}): ReactElement {\n return createElement(LoginPostForm, {\n action,\n method: 'post',\n resetOnSuccess: ['password'],\n className,\n 'data-slot': slotName,\n children: ({ processing, errors }) =>\n createElement(LoginFormPreset, {\n errors,\n processing,\n status,\n forgotPasswordHref,\n labels,\n linkComponent: InertiaLink,\n }),\n });\n}\n\nexport function InertiaTourProvider({\n children,\n progressUrl,\n labels,\n}: PropsWithChildren<{\n progressUrl: (tour: string) => string;\n labels?: Partial<TourLabels>;\n}>): ReactElement {\n const seen = (usePage().props.tours ?? {}) as Record<string, number>;\n\n return createElement(BaseTourProvider, {\n seen,\n labels,\n children,\n onProgress: (progress: TourProgress) =>\n recordTourProgress(progressUrl(progress.tour), progress),\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport type TableFilterValue = string | string[] | number | null | undefined;\n\nexport type TableFilterQuery = Record<string, string | string[]>;\n\nexport interface TableFiltersVisitOptions {\n data: TableFilterQuery;\n only?: string[];\n preserveState: boolean;\n preserveScroll: boolean;\n replace: boolean;\n onCancelToken: (token: { cancel: () => void }) => void;\n}\n\nexport interface TableFiltersRouter {\n visit: (url: string, options: TableFiltersVisitOptions) => void;\n}\n\nexport interface TableFiltersOptions {\n url: string;\n filters: Record<string, TableFilterValue>;\n only?: string[];\n searchKey?: string;\n pageKey?: string;\n debounce?: number;\n}\n\nexport interface TableFilters {\n search: string;\n setSearch: (value: string) => void;\n filterValues: Record<string, string[]>;\n setFilter: (key: string, values: string[]) => void;\n clearFilters: () => void;\n setPage: (pageIndex: number) => void;\n apply: (changes: Record<string, TableFilterValue>) => void;\n}\n\nexport type UseTableFilters = (options: TableFiltersOptions) => TableFilters;\n\nconst DEFAULT_DEBOUNCE = 300;\n\nexport function toQuery(\n filters: Record<string, TableFilterValue>,\n): TableFilterQuery {\n const query: TableFilterQuery = {};\n\n for (const [key, value] of Object.entries(filters)) {\n if (Array.isArray(value)) {\n const values = value.filter((entry) => entry !== '');\n\n if (values.length > 0) {\n query[key] = values;\n }\n\n continue;\n }\n\n if (value === null || value === undefined || value === '') {\n continue;\n }\n\n query[key] = String(value);\n }\n\n return query;\n}\n\nexport function toFilterValues(\n filters: Record<string, TableFilterValue>,\n exclude: string[] = [],\n): Record<string, string[]> {\n const values: Record<string, string[]> = {};\n\n for (const [key, value] of Object.entries(toQuery(filters))) {\n if (exclude.includes(key)) {\n continue;\n }\n\n values[key] = Array.isArray(value) ? value : [value];\n }\n\n return values;\n}\n\nexport function createTableFiltersHook(\n router: TableFiltersRouter,\n): UseTableFilters {\n return function useTableFilters({\n url,\n filters,\n only,\n searchKey = 'search',\n pageKey = 'page',\n debounce = DEFAULT_DEBOUNCE,\n }: TableFiltersOptions): TableFilters {\n const initialSearch = filters[searchKey];\n const [search, setSearchState] = useState(\n typeof initialSearch === 'string' ? initialSearch : '',\n );\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pending = useRef<{ cancel: () => void } | null>(null);\n const state = useRef({ url, filters, only, searchKey, pageKey });\n\n state.current = { url, filters, only, searchKey, pageKey };\n\n const visit = useCallback(\n (changes: Record<string, TableFilterValue>) => {\n const current = state.current;\n\n pending.current?.cancel();\n\n router.visit(current.url, {\n data: toQuery({ ...current.filters, ...changes }),\n only: current.only,\n preserveState: true,\n preserveScroll: true,\n replace: true,\n onCancelToken: (token) => {\n pending.current = token;\n },\n });\n },\n [],\n );\n\n const cancelPendingSearch = useCallback(() => {\n if (timer.current !== null) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n }, []);\n\n useEffect(() => cancelPendingSearch, [cancelPendingSearch]);\n\n const setSearch = useCallback(\n (value: string) => {\n setSearchState(value);\n cancelPendingSearch();\n\n timer.current = setTimeout(() => {\n timer.current = null;\n visit({\n [state.current.searchKey]: value,\n [state.current.pageKey]: null,\n });\n }, debounce);\n },\n [cancelPendingSearch, debounce, visit],\n );\n\n const setFilter = useCallback(\n (key: string, values: string[]) => {\n cancelPendingSearch();\n visit({ [key]: values, [state.current.pageKey]: null });\n },\n [cancelPendingSearch, visit],\n );\n\n const clearFilters = useCallback(() => {\n cancelPendingSearch();\n setSearchState('');\n\n const current = state.current;\n const cleared = Object.fromEntries(\n Object.keys(current.filters).map((key) => [key, null]),\n );\n\n visit({ ...cleared, [current.pageKey]: null });\n }, [cancelPendingSearch, visit]);\n\n const setPage = useCallback(\n (pageIndex: number) => {\n visit({\n [state.current.pageKey]:\n pageIndex > 0 ? pageIndex + 1 : null,\n });\n },\n [visit],\n );\n\n const apply = useCallback(\n (changes: Record<string, TableFilterValue>) => {\n cancelPendingSearch();\n visit({ ...changes, [state.current.pageKey]: null });\n },\n [cancelPendingSearch, visit],\n );\n\n return {\n search,\n setSearch,\n filterValues: toFilterValues(filters, [searchKey, pageKey]),\n setFilter,\n clearFilters,\n setPage,\n apply,\n };\n };\n}\n","import type { TourProgress } from '@/blocks/tour';\n\nexport function xsrfToken(): string {\n const cookie = document.cookie\n .split('; ')\n .find((entry) => entry.startsWith('XSRF-TOKEN='));\n\n return cookie ? decodeURIComponent(cookie.slice('XSRF-TOKEN='.length)) : '';\n}\n\nexport function recordTourProgress(url: string, progress: TourProgress): void {\n void fetch(url, {\n method: 'POST',\n credentials: 'same-origin',\n keepalive: true,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-XSRF-TOKEN': xsrfToken(),\n },\n body: JSON.stringify({\n version: progress.version,\n last_step: progress.lastStep,\n outcome: progress.outcome,\n }),\n });\n}\n"],"mappings":"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","names":["router","useTableFilters","AppSidebar","AppSidebarHeader","Breadcrumbs","NavMain","SettingsLayout"]}
1
+ {"version":3,"sources":["../src/inertia.ts","../src/inertia-table-filters.ts","../src/inertia-tour-progress.ts"],"sourcesContent":["'use client';\n\nimport { Form, Link, router, usePage } from '@inertiajs/react';\nimport {\n createElement,\n type ComponentType,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { LoginFormPreset, type LoginFormLabels } from '@/blocks/login-form';\nimport {\n TourProvider as BaseTourProvider,\n type TourLabels,\n type TourProgress,\n} from '@/blocks/tour';\nimport {\n createTableFiltersHook,\n type TableFilters,\n type TableFiltersOptions,\n type TableFiltersRouter,\n type TableFilterValue,\n} from '@/inertia-table-filters';\nimport { recordTourProgress } from '@/inertia-tour-progress';\nimport { AppSidebar as BaseAppSidebar } from '@/shells/app-sidebar';\nimport { AppSidebarHeader as BaseAppSidebarHeader } from '@/shells/app-sidebar-header';\nimport { Breadcrumbs as BaseBreadcrumbs } from '@/shells/breadcrumbs';\nimport { NavMain as BaseNavMain } from '@/shells/nav-main';\nimport { SettingsLayout as BaseSettingsLayout } from '@/shells/settings-layout';\nimport type {\n BreadcrumbItem,\n LinkComponent,\n NavGroup,\n NavItem,\n SharedUser,\n UrlLike,\n} from '@/types';\n\nexport const InertiaLink = Link as unknown as LinkComponent;\n\nexport type {\n TableFilters,\n TableFiltersOptions,\n TableFiltersRouter,\n TableFilterValue,\n};\n\nexport const useTableFilters = createTableFiltersHook(router);\n\nexport function useCurrentUrl(): string {\n return usePage().url;\n}\n\nexport function AppSidebar(props: {\n logo: ReactNode;\n logoHref: UrlLike;\n groups: NavGroup[];\n footerItems?: NavItem[];\n user: SharedUser;\n settingsHref: UrlLike;\n logoutHref: UrlLike;\n collapsibleGroups?: boolean;\n collapsedGroups?: string[];\n onCollapsedChange?: (collapsedGroups: string[]) => void;\n onSettingsClick?: () => void;\n onLogout?: () => void;\n}): ReactElement {\n return createElement(BaseAppSidebar, {\n ...props,\n currentUrl: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\nexport function AppSidebarHeader(props: {\n breadcrumbs?: BreadcrumbItem[];\n onSearchClick?: () => void;\n searchLabel?: string;\n}): ReactElement {\n return createElement(BaseAppSidebarHeader, {\n ...props,\n linkComponent: InertiaLink,\n });\n}\n\nexport function Breadcrumbs(props: {\n breadcrumbs: BreadcrumbItem[];\n}): ReactElement {\n return createElement(BaseBreadcrumbs, {\n ...props,\n linkComponent: InertiaLink,\n });\n}\n\nexport function NavMain(props: {\n items: NavItem[];\n label?: string;\n collapsible?: boolean;\n defaultOpen?: boolean;\n collapsedGroups?: string[];\n onCollapsedChange?: (collapsedGroups: string[]) => void;\n}): ReactElement {\n return createElement(BaseNavMain, {\n ...props,\n currentUrl: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\nexport function SettingsLayout(\n props: PropsWithChildren<{\n items: NavItem[];\n title?: string;\n description?: string;\n wide?: boolean;\n }>,\n): ReactElement {\n return createElement(BaseSettingsLayout, {\n ...props,\n currentPath: usePage().url,\n linkComponent: InertiaLink,\n });\n}\n\ninterface LoginPostFormRenderProps {\n processing: boolean;\n errors: Partial<Record<'email' | 'password' | 'remember', string>>;\n}\n\ninterface LoginPostFormProps {\n action: string;\n method: 'post';\n resetOnSuccess: string[];\n className?: string;\n 'data-slot': string;\n children: (props: LoginPostFormRenderProps) => ReactNode;\n}\n\nconst LoginPostForm = Form as unknown as ComponentType<LoginPostFormProps>;\n\nexport function InertiaLoginForm({\n action,\n status,\n forgotPasswordHref,\n labels,\n className,\n slotName = 'inertia-login-form',\n}: {\n action: string;\n status?: string;\n forgotPasswordHref?: UrlLike;\n labels?: Partial<LoginFormLabels>;\n className?: string;\n slotName?: string;\n}): ReactElement {\n return createElement(LoginPostForm, {\n action,\n method: 'post',\n resetOnSuccess: ['password'],\n className,\n 'data-slot': slotName,\n children: ({ processing, errors }) =>\n createElement(LoginFormPreset, {\n errors,\n processing,\n status,\n forgotPasswordHref,\n labels,\n linkComponent: InertiaLink,\n }),\n });\n}\n\nexport function InertiaTourProvider({\n children,\n progressUrl,\n labels,\n}: PropsWithChildren<{\n progressUrl: (tour: string) => string;\n labels?: Partial<TourLabels>;\n}>): ReactElement {\n const seen = (usePage().props.tours ?? {}) as Record<string, number>;\n\n return createElement(BaseTourProvider, {\n seen,\n labels,\n children,\n onProgress: (progress: TourProgress) =>\n recordTourProgress(progressUrl(progress.tour), progress),\n });\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport type TableFilterValue = string | string[] | number | null | undefined;\n\nexport type TableFilterQuery = Record<string, string | string[]>;\n\nexport interface TableFiltersVisitOptions {\n data: TableFilterQuery;\n only?: string[];\n preserveState: boolean;\n preserveScroll: boolean;\n replace: boolean;\n onCancelToken: (token: { cancel: () => void }) => void;\n}\n\nexport interface TableFiltersRouter {\n visit: (url: string, options: TableFiltersVisitOptions) => void;\n}\n\nexport interface TableFiltersOptions {\n url: string;\n filters: Record<string, TableFilterValue>;\n only?: string[];\n searchKey?: string;\n pageKey?: string;\n debounce?: number;\n}\n\nexport interface TableFilters {\n search: string;\n setSearch: (value: string) => void;\n filterValues: Record<string, string[]>;\n setFilter: (key: string, values: string[]) => void;\n clearFilters: () => void;\n setPage: (pageIndex: number) => void;\n apply: (changes: Record<string, TableFilterValue>) => void;\n}\n\nexport type UseTableFilters = (options: TableFiltersOptions) => TableFilters;\n\nconst DEFAULT_DEBOUNCE = 300;\n\nexport function toQuery(\n filters: Record<string, TableFilterValue>,\n): TableFilterQuery {\n const query: TableFilterQuery = {};\n\n for (const [key, value] of Object.entries(filters)) {\n if (Array.isArray(value)) {\n const values = value.filter((entry) => entry !== '');\n\n if (values.length > 0) {\n query[key] = values;\n }\n\n continue;\n }\n\n if (value === null || value === undefined || value === '') {\n continue;\n }\n\n query[key] = String(value);\n }\n\n return query;\n}\n\nexport function toFilterValues(\n filters: Record<string, TableFilterValue>,\n exclude: string[] = [],\n): Record<string, string[]> {\n const values: Record<string, string[]> = {};\n\n for (const [key, value] of Object.entries(toQuery(filters))) {\n if (exclude.includes(key)) {\n continue;\n }\n\n values[key] = Array.isArray(value) ? value : [value];\n }\n\n return values;\n}\n\nexport function createTableFiltersHook(\n router: TableFiltersRouter,\n): UseTableFilters {\n return function useTableFilters({\n url,\n filters,\n only,\n searchKey = 'search',\n pageKey = 'page',\n debounce = DEFAULT_DEBOUNCE,\n }: TableFiltersOptions): TableFilters {\n const initialSearch = filters[searchKey];\n const [search, setSearchState] = useState(\n typeof initialSearch === 'string' ? initialSearch : '',\n );\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pending = useRef<{ cancel: () => void } | null>(null);\n const state = useRef({ url, filters, only, searchKey, pageKey });\n\n state.current = { url, filters, only, searchKey, pageKey };\n\n const visit = useCallback(\n (changes: Record<string, TableFilterValue>) => {\n const current = state.current;\n\n pending.current?.cancel();\n\n router.visit(current.url, {\n data: toQuery({ ...current.filters, ...changes }),\n only: current.only,\n preserveState: true,\n preserveScroll: true,\n replace: true,\n onCancelToken: (token) => {\n pending.current = token;\n },\n });\n },\n [],\n );\n\n const cancelPendingSearch = useCallback(() => {\n if (timer.current !== null) {\n clearTimeout(timer.current);\n timer.current = null;\n }\n }, []);\n\n useEffect(() => cancelPendingSearch, [cancelPendingSearch]);\n\n const setSearch = useCallback(\n (value: string) => {\n setSearchState(value);\n cancelPendingSearch();\n\n timer.current = setTimeout(() => {\n timer.current = null;\n visit({\n [state.current.searchKey]: value,\n [state.current.pageKey]: null,\n });\n }, debounce);\n },\n [cancelPendingSearch, debounce, visit],\n );\n\n const setFilter = useCallback(\n (key: string, values: string[]) => {\n cancelPendingSearch();\n visit({ [key]: values, [state.current.pageKey]: null });\n },\n [cancelPendingSearch, visit],\n );\n\n const clearFilters = useCallback(() => {\n cancelPendingSearch();\n setSearchState('');\n\n const current = state.current;\n const cleared = Object.fromEntries(\n Object.keys(current.filters).map((key) => [key, null]),\n );\n\n visit({ ...cleared, [current.pageKey]: null });\n }, [cancelPendingSearch, visit]);\n\n const setPage = useCallback(\n (pageIndex: number) => {\n visit({\n [state.current.pageKey]:\n pageIndex > 0 ? pageIndex + 1 : null,\n });\n },\n [visit],\n );\n\n const apply = useCallback(\n (changes: Record<string, TableFilterValue>) => {\n cancelPendingSearch();\n visit({ ...changes, [state.current.pageKey]: null });\n },\n [cancelPendingSearch, visit],\n );\n\n return {\n search,\n setSearch,\n filterValues: toFilterValues(filters, [searchKey, pageKey]),\n setFilter,\n clearFilters,\n setPage,\n apply,\n };\n };\n}\n","import type { TourProgress } from '@/blocks/tour';\n\nexport function xsrfToken(): string {\n const cookie = document.cookie\n .split('; ')\n .find((entry) => entry.startsWith('XSRF-TOKEN='));\n\n return cookie ? decodeURIComponent(cookie.slice('XSRF-TOKEN='.length)) : '';\n}\n\nexport function recordTourProgress(url: string, progress: TourProgress): void {\n void fetch(url, {\n method: 'POST',\n credentials: 'same-origin',\n keepalive: true,\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-XSRF-TOKEN': xsrfToken(),\n },\n body: JSON.stringify({\n version: progress.version,\n last_step: progress.lastStep,\n outcome: progress.outcome,\n }),\n });\n}\n"],"mappings":"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","names":["router","useTableFilters","AppSidebar","AppSidebarHeader","Breadcrumbs","NavMain","SettingsLayout"]}
@@ -1,4 +1,4 @@
1
- import { G as AlertLabels, J as AppearanceToggleLabels, M as ComboboxLabels, ar as CommandPaletteLabels, Q as ConfirmDialogLabels, C as CopyButtonLabels, W as DataTableFacetedFilterLabels, Y as DataTableLabels, a as DateFilterLabels, b as DateFilterOption, a0 as DatePickerLabels, a3 as DateRangeFilterLabels, F as FloatingSheetLabels, as as FullUiLabels, a7 as PasswordInputLabels, ab as SaveStatusLabels, q as SettingsLabels } from '../context-2wTOwxCk.js';
1
+ import { G as AlertLabels, J as AppearanceToggleLabels, M as ComboboxLabels, ar as CommandPaletteLabels, Q as ConfirmDialogLabels, C as CopyButtonLabels, W as DataTableFacetedFilterLabels, Y as DataTableLabels, a as DateFilterLabels, b as DateFilterOption, a0 as DatePickerLabels, a3 as DateRangeFilterLabels, F as FloatingSheetLabels, as as FullUiLabels, a7 as PasswordInputLabels, ab as SaveStatusLabels, q as SettingsLabels } from '../context-Dqf-5Qne.js';
2
2
  import { e as DangerZoneLabels, a as FormOverlayLabels, i as TwoFactorLabels } from '../types-CfAUvz--.js';
3
3
  import { a as LoginFormLabels, e as TourLabels } from '../types-1LUmNJf_.js';
4
4
  import { a as CodeBlockLabels, c as JsonViewerLabels } from '../json-viewer-Bssv9mTD.js';
@@ -1,4 +1,4 @@
1
- import { G as AlertLabels, J as AppearanceToggleLabels, M as ComboboxLabels, ar as CommandPaletteLabels, Q as ConfirmDialogLabels, C as CopyButtonLabels, W as DataTableFacetedFilterLabels, Y as DataTableLabels, a as DateFilterLabels, b as DateFilterOption, a0 as DatePickerLabels, a3 as DateRangeFilterLabels, F as FloatingSheetLabels, a7 as PasswordInputLabels, as as FullUiLabels, ab as SaveStatusLabels, q as SettingsLabels } from '../context-2wTOwxCk.js';
1
+ import { G as AlertLabels, J as AppearanceToggleLabels, M as ComboboxLabels, ar as CommandPaletteLabels, Q as ConfirmDialogLabels, C as CopyButtonLabels, W as DataTableFacetedFilterLabels, Y as DataTableLabels, a as DateFilterLabels, b as DateFilterOption, a0 as DatePickerLabels, a3 as DateRangeFilterLabels, F as FloatingSheetLabels, a7 as PasswordInputLabels, as as FullUiLabels, ab as SaveStatusLabels, q as SettingsLabels } from '../context-Dqf-5Qne.js';
2
2
  import { e as DangerZoneLabels, a as FormOverlayLabels, i as TwoFactorLabels } from '../types-CfAUvz--.js';
3
3
  import { a as LoginFormLabels, e as TourLabels } from '../types-1LUmNJf_.js';
4
4
  import { a as CodeBlockLabels, c as JsonViewerLabels } from '../json-viewer-Bssv9mTD.js';
package/dist/shells.d.ts CHANGED
@@ -2,7 +2,7 @@ import { U as UrlLike, N as NavGroup, c as NavItem, d as SharedUser, L as LinkCo
2
2
  export { C as Column, a as ColumnDef, F as FilterFn, I as IconComponent, e as LinkProps, b as LucideIcon, R as Row, T as TableInstance } from './types-CMZRvMV5.js';
3
3
  import * as React from 'react';
4
4
  import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
5
- import { d as SidebarGroup } from './sidebar-BLL2tgTt.js';
5
+ import { d as SidebarGroup } from './sidebar-_xQ3IehY.js';
6
6
  import '@tanstack/react-table';
7
7
  import 'lucide-react';
8
8
  import 'class-variance-authority/types';
package/dist/shells.js CHANGED
@@ -22,15 +22,16 @@ import {
22
22
  UserMenuContent,
23
23
  useCollapsedGroup,
24
24
  useInitials
25
- } from "./chunk-XLAOE5MV.js";
25
+ } from "./chunk-MCHHCLV3.js";
26
26
  import {
27
27
  SidebarInset,
28
28
  SidebarProvider,
29
29
  useIsMobile
30
- } from "./chunk-ZQXZ4UGE.js";
30
+ } from "./chunk-PYXUFFMO.js";
31
31
  import {
32
32
  hrefToString
33
33
  } from "./chunk-L2H5GIF7.js";
34
+ import "./chunk-EXTOGROG.js";
34
35
  import "./chunk-53V4J7MC.js";
35
36
  import {
36
37
  cn
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shells/app-content.tsx","../src/shells/app-shell.tsx","../src/shells/auth-shell.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SidebarInset } from '@/components/ui/sidebar';\n\ninterface AppContentProps extends React.ComponentProps<'main'> {\n variant?: 'header' | 'sidebar';\n}\n\nexport function AppContent({\n variant = 'header',\n children,\n ...props\n}: AppContentProps) {\n if (variant === 'sidebar') {\n return <SidebarInset {...props}>{children}</SidebarInset>;\n }\n\n return (\n <main\n className=\"max-w-7xl gap-4 rounded-xl mx-auto flex h-full w-full flex-1 flex-col\"\n {...props}\n >\n {children}\n </main>\n );\n}\n","import * as React from 'react';\n\nimport { SidebarProvider } from '@/components/ui/sidebar';\n\ninterface AppShellProps {\n children: React.ReactNode;\n variant?: 'header' | 'sidebar';\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n}\n\nexport function AppShell({\n children,\n variant = 'header',\n open,\n onOpenChange,\n defaultOpen = true,\n}: AppShellProps) {\n if (variant === 'header') {\n return (\n <div className=\"flex min-h-screen w-full flex-col\">{children}</div>\n );\n }\n\n return (\n <SidebarProvider\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={defaultOpen}\n >\n {children}\n </SidebarProvider>\n );\n}\n","import { Card } from '@/components/ui/card';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { createContext, useContext, type ReactNode } from 'react';\n\nexport type AuthArrangement = 'centred' | 'split';\n\nconst ArrangementContext = createContext<AuthArrangement>('centred');\n\nexport function useAuthArrangement(): AuthArrangement {\n return useContext(ArrangementContext);\n}\n\nexport interface AuthShellRootProps {\n arrangement?: AuthArrangement;\n appearanceControl?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShellRoot({\n arrangement = 'centred',\n appearanceControl,\n children,\n className,\n slotName = 'auth-shell',\n}: AuthShellRootProps & SlotNameProps) {\n const split = arrangement === 'split';\n\n return (\n <ArrangementContext.Provider value={arrangement}>\n <div\n data-arrangement={arrangement}\n className={cn(\n 'relative flex min-h-screen w-full',\n split && 'lg:grid lg:grid-cols-2',\n className,\n )}\n data-slot={slotName}\n >\n {children}\n\n {appearanceControl && (\n <div\n data-slot=\"auth-shell-appearance\"\n className=\"top-4 right-4 absolute\"\n >\n {appearanceControl}\n </div>\n )}\n </div>\n </ArrangementContext.Provider>\n );\n}\n\nexport interface AuthShellMainProps {\n children: ReactNode;\n}\n\nexport function AuthShellMain({\n children,\n slotName = 'auth-shell-main',\n}: AuthShellMainProps & SlotNameProps) {\n return (\n <main\n data-slot={slotName}\n className=\"p-6 flex flex-1 items-center justify-center\"\n >\n <div\n data-slot=\"auth-shell-form\"\n className=\"gap-6 max-w-md flex w-full flex-col\"\n >\n {children}\n </div>\n </main>\n );\n}\n\nexport interface AuthShellPanelProps {\n decorative?: boolean;\n arrangement?: AuthArrangement;\n children: ReactNode;\n}\n\nexport function AuthShellPanel({\n decorative = true,\n arrangement,\n children,\n slotName = 'auth-shell-panel',\n}: AuthShellPanelProps & SlotNameProps) {\n const contextArrangement = useAuthArrangement();\n\n if ((arrangement ?? contextArrangement) !== 'split') {\n return null;\n }\n\n return (\n <aside\n data-slot={slotName}\n aria-hidden={decorative || undefined}\n className=\"p-10 lg:flex hidden flex-col justify-between bg-primary text-primary-foreground\"\n >\n {children}\n </aside>\n );\n}\n\nexport interface AuthShellSurfaceProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShellSurface({\n children,\n className,\n slotName = 'card',\n}: AuthShellSurfaceProps & SlotNameProps) {\n return (\n <Card className={cn('p-6', className)} slotName={slotName}>\n {children}\n </Card>\n );\n}\n\nexport interface AuthShellLogoProps {\n children: ReactNode;\n}\n\nexport function AuthShellLogo({\n children,\n slotName = 'auth-shell-logo',\n}: AuthShellLogoProps & SlotNameProps) {\n return (\n <div data-slot={slotName} className=\"flex justify-center\">\n {children}\n </div>\n );\n}\n\nexport interface AuthShellHeadingProps {\n title: string;\n description?: string;\n align?: 'start' | 'center';\n}\n\nexport function AuthShellHeading({\n title,\n description,\n align = 'start',\n slotName = 'auth-shell-heading',\n}: AuthShellHeadingProps & SlotNameProps) {\n return (\n <div\n data-slot={slotName}\n className={cn('space-y-2', align === 'center' && 'text-center')}\n >\n <h1 className=\"text-xl font-bold tracking-tight text-foreground\">\n {title}\n </h1>\n {description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface AuthShellBodyProps {\n children: ReactNode;\n}\n\nexport function AuthShellBody({\n children,\n slotName = 'auth-shell-body',\n}: AuthShellBodyProps & SlotNameProps) {\n return <div data-slot={slotName}>{children}</div>;\n}\n\nexport interface AuthShellFooterProps {\n children: ReactNode;\n}\n\nexport function AuthShellFooter({\n children,\n slotName = 'auth-shell-footer',\n}: AuthShellFooterProps & SlotNameProps) {\n return (\n <footer\n data-slot={slotName}\n className=\"gap-2 text-sm font-medium flex flex-wrap items-center justify-center text-muted-foreground\"\n >\n {children}\n </footer>\n );\n}\n\nexport interface AuthShellProps {\n logo?: ReactNode;\n title: string;\n description?: string;\n arrangement?: AuthArrangement;\n panel?: ReactNode;\n panelDecorative?: boolean;\n footer?: ReactNode;\n appearanceControl?: ReactNode;\n surface?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShell({\n logo,\n title,\n description,\n arrangement = 'centred',\n panel,\n panelDecorative = true,\n footer,\n appearanceControl,\n surface = true,\n children,\n className,\n slotName = 'auth-shell',\n}: AuthShellProps & SlotNameProps) {\n const body = <AuthShellBody>{children}</AuthShellBody>;\n\n return (\n <AuthShellRoot\n arrangement={arrangement}\n appearanceControl={appearanceControl}\n className={className}\n slotName={slotName}\n >\n {panel && (\n <AuthShellPanel decorative={panelDecorative}>\n {panel}\n </AuthShellPanel>\n )}\n <AuthShellMain>\n {logo && <AuthShellLogo>{logo}</AuthShellLogo>}\n <AuthShellHeading title={title} description={description} />\n {surface ? <AuthShellSurface>{body}</AuthShellSurface> : body}\n {footer && <AuthShellFooter>{footer}</AuthShellFooter>}\n </AuthShellMain>\n </AuthShellRoot>\n );\n}\n"],"mappings":"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","names":["jsx","jsx"]}
1
+ {"version":3,"sources":["../src/shells/app-content.tsx","../src/shells/app-shell.tsx","../src/shells/auth-shell.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { SidebarInset } from '@/components/ui/sidebar';\n\ninterface AppContentProps extends React.ComponentProps<'main'> {\n variant?: 'header' | 'sidebar';\n}\n\nexport function AppContent({\n variant = 'header',\n children,\n ...props\n}: AppContentProps) {\n if (variant === 'sidebar') {\n return <SidebarInset {...props}>{children}</SidebarInset>;\n }\n\n return (\n <main\n className=\"max-w-7xl gap-4 rounded-xl mx-auto flex h-full w-full flex-1 flex-col\"\n {...props}\n >\n {children}\n </main>\n );\n}\n","import * as React from 'react';\n\nimport { SidebarProvider } from '@/components/ui/sidebar';\n\ninterface AppShellProps {\n children: React.ReactNode;\n variant?: 'header' | 'sidebar';\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n defaultOpen?: boolean;\n}\n\nexport function AppShell({\n children,\n variant = 'header',\n open,\n onOpenChange,\n defaultOpen = true,\n}: AppShellProps) {\n if (variant === 'header') {\n return (\n <div className=\"flex min-h-screen w-full flex-col\">{children}</div>\n );\n }\n\n return (\n <SidebarProvider\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={defaultOpen}\n >\n {children}\n </SidebarProvider>\n );\n}\n","import { Card } from '@/components/ui/card';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\nimport { createContext, useContext, type ReactNode } from 'react';\n\nexport type AuthArrangement = 'centred' | 'split';\n\nconst ArrangementContext = createContext<AuthArrangement>('centred');\n\nexport function useAuthArrangement(): AuthArrangement {\n return useContext(ArrangementContext);\n}\n\nexport interface AuthShellRootProps {\n arrangement?: AuthArrangement;\n appearanceControl?: ReactNode;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShellRoot({\n arrangement = 'centred',\n appearanceControl,\n children,\n className,\n slotName = 'auth-shell',\n}: AuthShellRootProps & SlotNameProps) {\n const split = arrangement === 'split';\n\n return (\n <ArrangementContext.Provider value={arrangement}>\n <div\n data-arrangement={arrangement}\n className={cn(\n 'relative flex min-h-screen w-full',\n split && 'lg:grid lg:grid-cols-2',\n className,\n )}\n data-slot={slotName}\n >\n {children}\n\n {appearanceControl && (\n <div\n data-slot=\"auth-shell-appearance\"\n className=\"top-4 right-4 absolute\"\n >\n {appearanceControl}\n </div>\n )}\n </div>\n </ArrangementContext.Provider>\n );\n}\n\nexport interface AuthShellMainProps {\n children: ReactNode;\n}\n\nexport function AuthShellMain({\n children,\n slotName = 'auth-shell-main',\n}: AuthShellMainProps & SlotNameProps) {\n return (\n <main\n data-slot={slotName}\n className=\"p-6 flex flex-1 items-center justify-center\"\n >\n <div\n data-slot=\"auth-shell-form\"\n className=\"gap-6 max-w-md flex w-full flex-col\"\n >\n {children}\n </div>\n </main>\n );\n}\n\nexport interface AuthShellPanelProps {\n decorative?: boolean;\n arrangement?: AuthArrangement;\n children: ReactNode;\n}\n\nexport function AuthShellPanel({\n decorative = true,\n arrangement,\n children,\n slotName = 'auth-shell-panel',\n}: AuthShellPanelProps & SlotNameProps) {\n const contextArrangement = useAuthArrangement();\n\n if ((arrangement ?? contextArrangement) !== 'split') {\n return null;\n }\n\n return (\n <aside\n data-slot={slotName}\n aria-hidden={decorative || undefined}\n className=\"p-10 lg:flex hidden flex-col justify-between bg-primary text-primary-foreground\"\n >\n {children}\n </aside>\n );\n}\n\nexport interface AuthShellSurfaceProps {\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShellSurface({\n children,\n className,\n slotName = 'card',\n}: AuthShellSurfaceProps & SlotNameProps) {\n return (\n <Card className={cn('p-6', className)} slotName={slotName}>\n {children}\n </Card>\n );\n}\n\nexport interface AuthShellLogoProps {\n children: ReactNode;\n}\n\nexport function AuthShellLogo({\n children,\n slotName = 'auth-shell-logo',\n}: AuthShellLogoProps & SlotNameProps) {\n return (\n <div data-slot={slotName} className=\"flex justify-center\">\n {children}\n </div>\n );\n}\n\nexport interface AuthShellHeadingProps {\n title: string;\n description?: string;\n align?: 'start' | 'center';\n}\n\nexport function AuthShellHeading({\n title,\n description,\n align = 'start',\n slotName = 'auth-shell-heading',\n}: AuthShellHeadingProps & SlotNameProps) {\n return (\n <div\n data-slot={slotName}\n className={cn('space-y-2', align === 'center' && 'text-center')}\n >\n <h1 className=\"text-xl font-bold tracking-tight text-foreground\">\n {title}\n </h1>\n {description && (\n <p className=\"text-sm font-medium text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n );\n}\n\nexport interface AuthShellBodyProps {\n children: ReactNode;\n}\n\nexport function AuthShellBody({\n children,\n slotName = 'auth-shell-body',\n}: AuthShellBodyProps & SlotNameProps) {\n return <div data-slot={slotName}>{children}</div>;\n}\n\nexport interface AuthShellFooterProps {\n children: ReactNode;\n}\n\nexport function AuthShellFooter({\n children,\n slotName = 'auth-shell-footer',\n}: AuthShellFooterProps & SlotNameProps) {\n return (\n <footer\n data-slot={slotName}\n className=\"gap-2 text-sm font-medium flex flex-wrap items-center justify-center text-muted-foreground\"\n >\n {children}\n </footer>\n );\n}\n\nexport interface AuthShellProps {\n logo?: ReactNode;\n title: string;\n description?: string;\n arrangement?: AuthArrangement;\n panel?: ReactNode;\n panelDecorative?: boolean;\n footer?: ReactNode;\n appearanceControl?: ReactNode;\n surface?: boolean;\n children: ReactNode;\n className?: string;\n}\n\nexport function AuthShell({\n logo,\n title,\n description,\n arrangement = 'centred',\n panel,\n panelDecorative = true,\n footer,\n appearanceControl,\n surface = true,\n children,\n className,\n slotName = 'auth-shell',\n}: AuthShellProps & SlotNameProps) {\n const body = <AuthShellBody>{children}</AuthShellBody>;\n\n return (\n <AuthShellRoot\n arrangement={arrangement}\n appearanceControl={appearanceControl}\n className={className}\n slotName={slotName}\n >\n {panel && (\n <AuthShellPanel decorative={panelDecorative}>\n {panel}\n </AuthShellPanel>\n )}\n <AuthShellMain>\n {logo && <AuthShellLogo>{logo}</AuthShellLogo>}\n <AuthShellHeading title={title} description={description} />\n {surface ? <AuthShellSurface>{body}</AuthShellSurface> : body}\n {footer && <AuthShellFooter>{footer}</AuthShellFooter>}\n </AuthShellMain>\n </AuthShellRoot>\n );\n}\n"],"mappings":"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","names":["jsx","jsx"]}
@@ -11,7 +11,9 @@ declare function Separator({ className, orientation, decorative, slotName, ...pr
11
11
  declare function TooltipProvider({ delayDuration, slotName, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider> & SlotNameProps): React.JSX.Element;
12
12
  declare function Tooltip({ slotName, ...props }: React.ComponentProps<typeof TooltipPrimitive.Root> & SlotNameProps): React.JSX.Element;
13
13
  declare function TooltipTrigger({ slotName, ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger> & SlotNameProps): React.JSX.Element;
14
- declare function TooltipContent({ className, sideOffset, children, slotName, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content> & SlotNameProps): React.JSX.Element;
14
+ declare function TooltipContent({ className, sideOffset, children, slotName, container, ...props }: React.ComponentProps<typeof TooltipPrimitive.Content> & SlotNameProps & {
15
+ container?: HTMLElement | null;
16
+ }): React.JSX.Element;
15
17
 
16
18
  type SidebarContext = {
17
19
  state: 'expanded' | 'collapsed';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akira-io/ui",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Open-source React component library: the full shadcn/ui set on an OKLCH design-token system with swappable brand palettes.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui/confirm-dialog.tsx","../src/components/ui/calendar.tsx","../src/components/ui/command.tsx","../src/components/ui/popover.tsx","../src/components/ui/select.tsx","../src/components/ui/floating-sheet-context.ts","../src/components/ui/floating-sheet-stack.tsx","../src/components/ui/floating-sheet.tsx","../src/hooks/use-floating-sheet-body-edges.ts","../src/components/ui/input-otp.tsx","../src/components/ui/switch.tsx","../src/components/ui/tabs.tsx","../src/components/ui/textarea.tsx"],"sourcesContent":["import { Button } from '@/components/ui/button';\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport { Input } from '@/components/ui/input';\nimport { Label } from '@/components/ui/label';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels } from '@/locales/context';\nimport type { SlotNameProps } from '@/types';\nimport { AlertCircle, ChevronRight } from 'lucide-react';\nimport { ReactNode, useEffect, useId, useState } from 'react';\n\nexport interface ConfirmDialogLabels {\n title: string;\n description: string;\n confirmText: string;\n cancelText: string;\n}\n\nexport const confirmDialogDefaultLabels: ConfirmDialogLabels = {\n title: 'Confirm Action',\n description:\n 'Are you sure you want to continue? This action cannot be undone.',\n confirmText: 'Confirm',\n cancelText: 'Cancel',\n};\n\ninterface ConfirmDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title?: ConfirmDialogLabels['title'];\n description?: ConfirmDialogLabels['description'] | ReactNode;\n confirmText?: ConfirmDialogLabels['confirmText'];\n cancelText?: ConfirmDialogLabels['cancelText'];\n variant?: 'destructive' | 'default';\n processing?: boolean;\n requiredValue?: string;\n requiredValueLabel?: string;\n onConfirm: () => void;\n onCancel?: () => void;\n}\n\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n description,\n confirmText,\n cancelText,\n variant = 'destructive',\n processing = false,\n requiredValue,\n requiredValueLabel = 'Type {{value}} to confirm',\n onConfirm,\n onCancel,\n slotName = 'confirm-dialog',\n}: ConfirmDialogProps & SlotNameProps) {\n const labels = useUiLabels('confirmDialog', confirmDialogDefaultLabels, {\n title,\n confirmText,\n cancelText,\n });\n const resolvedDescription = description ?? labels.description;\n const inputId = useId();\n const [typedValue, setTypedValue] = useState('');\n const unlocked =\n requiredValue === undefined || typedValue === requiredValue;\n\n useEffect(() => {\n if (!open) {\n setTypedValue('');\n }\n }, [open]);\n\n const handleConfirm = () => {\n if (processing || !unlocked) {\n return;\n }\n onConfirm();\n onOpenChange(false);\n };\n\n const handleCancel = () => {\n if (processing) {\n return;\n }\n onCancel?.();\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"max-w-md p-0\" slotName={slotName}>\n <DialogHeader className=\"p-6 md:p-8\">\n <div className=\"mb-6 flex justify-center\">\n <div\n className={cn(\n 'size-16 rounded-3xl shadow-xl flex items-center justify-center',\n variant === 'destructive'\n ? 'bg-destructive text-destructive-foreground shadow-destructive/20'\n : 'bg-primary text-primary-foreground shadow-primary/20',\n )}\n >\n <AlertCircle className=\"h-8 w-8\" />\n </div>\n </div>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription>{resolvedDescription}</DialogDescription>\n </DialogHeader>\n\n {requiredValue !== undefined && (\n <div\n data-slot=\"confirm-dialog-gate\"\n className=\"gap-2 px-6 md:px-8 flex flex-col\"\n >\n <Label htmlFor={inputId}>\n {requiredValueLabel.replace(\n '{{value}}',\n requiredValue,\n )}\n </Label>\n <Input\n id={inputId}\n value={typedValue}\n autoComplete=\"off\"\n disabled={processing}\n onChange={(event) =>\n setTypedValue(event.target.value)\n }\n />\n </div>\n )}\n\n <DialogFooter className=\"p-6 md:p-8\">\n <div className=\"gap-4 sm:grid-cols-2 grid w-full\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={processing}\n onClick={handleCancel}\n className=\"text-muted-foreground\"\n >\n {labels.cancelText}\n </Button>\n <Button\n variant={variant}\n disabled={processing || !unlocked}\n onClick={handleConfirm}\n >\n {labels.confirmText}\n <ChevronRight className=\"ml-2 h-5 w-5\" />\n </Button>\n </div>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from 'lucide-react';\nimport * as React from 'react';\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n} from 'react-day-picker';\n\nimport { Button, buttonVariants } from '@/components/ui/button';\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = 'label',\n buttonVariant = 'ghost',\n formatters,\n components,\n slotName = 'calendar',\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>['variant'];\n} & SlotNameProps) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'group/calendar p-4 [--cell-size:--spacing(8)] bg-card',\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString('default', { month: 'short' }),\n ...formatters,\n }}\n classNames={{\n root: cn('w-fit', defaultClassNames.root),\n months: cn(\n 'gap-4 md:flex-row relative flex flex-col',\n defaultClassNames.months,\n ),\n month: cn(\n 'gap-4 flex w-full flex-col',\n defaultClassNames.month,\n ),\n nav: cn(\n 'inset-x-0 top-0 gap-1 absolute flex w-full items-center justify-between',\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n 'p-0 size-(--cell-size) select-none aria-disabled:opacity-50',\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n 'p-0 size-(--cell-size) select-none aria-disabled:opacity-50',\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n 'flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)',\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n 'gap-1.5 text-sm font-medium flex h-(--cell-size) w-full items-center justify-center',\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n 'shadow-xs rounded-xl relative border border-border has-focus:outline-1 has-focus:outline-offset-0 has-focus:outline-ring has-focus:outline-solid',\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn(\n 'inset-0 absolute bg-popover opacity-0',\n defaultClassNames.dropdown,\n ),\n caption_label: cn(\n 'font-medium select-none',\n captionLayout === 'label'\n ? 'text-sm'\n : 'h-8 gap-1 pr-1 pl-2 text-sm [&>svg]:size-3.5 rounded-xl flex items-center [&>svg]:text-muted-foreground',\n defaultClassNames.caption_label,\n ),\n month_grid: cn(\n 'w-full border-collapse',\n defaultClassNames.month_grid,\n ),\n weekdays: cn('flex', defaultClassNames.weekdays),\n weekday: cn(\n 'font-normal rounded-xl flex-1 text-[0.8rem] text-muted-foreground select-none',\n defaultClassNames.weekday,\n ),\n week: cn('mt-2 flex w-full', defaultClassNames.week),\n week_number_header: cn(\n 'w-(--cell-size) select-none',\n defaultClassNames.week_number_header,\n ),\n week_number: cn(\n 'text-[0.8rem] text-muted-foreground select-none',\n defaultClassNames.week_number,\n ),\n day: cn(\n 'group/day p-0 [&:last-child[data-selected=true]_button]:rounded-r-xl relative aspect-square h-full w-full text-center select-none',\n props.showWeekNumber\n ? '[&:nth-child(2)[data-selected=true]_button]:rounded-l-xl'\n : '[&:first-child[data-selected=true]_button]:rounded-l-xl',\n defaultClassNames.day,\n ),\n range_start: cn(\n 'rounded-l-xl bg-accent',\n defaultClassNames.range_start,\n ),\n range_middle: cn(\n 'rounded-none',\n defaultClassNames.range_middle,\n ),\n range_end: cn(\n 'rounded-r-xl bg-accent',\n defaultClassNames.range_end,\n ),\n today: cn(\n 'rounded-xl bg-accent text-accent-foreground data-[selected=true]:rounded-none',\n defaultClassNames.today,\n ),\n outside: cn(\n 'text-muted-foreground aria-selected:text-muted-foreground',\n defaultClassNames.outside,\n ),\n disabled: cn(\n 'text-muted-foreground opacity-50',\n defaultClassNames.disabled,\n ),\n hidden: cn('invisible', defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n ref={rootRef}\n className={cn(className)}\n {...props}\n data-slot={slotName}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === 'left') {\n return (\n <ChevronLeftIcon\n className={cn('size-4', className)}\n {...props}\n />\n );\n }\n\n if (orientation === 'right') {\n return (\n <ChevronRightIcon\n className={cn('size-4', className)}\n {...props}\n />\n );\n }\n\n return (\n <ChevronDownIcon\n className={cn('size-4', className)}\n {...props}\n />\n );\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n 'gap-1 font-normal [&>span]:text-xs data-[range-end=true]:rounded-xl data-[range-end=true]:rounded-r-xl data-[range-start=true]:rounded-xl data-[range-start=true]:rounded-l-xl flex aspect-square size-auto w-full min-w-(--cell-size) flex-col leading-none group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-accent-foreground [&>span]:opacity-70',\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n","'use client';\n\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { SearchIcon, SearchXIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@/components/ui/dialog';\nimport {\n elevatedSurface,\n fieldSurface,\n modalSurface,\n nestedSurfaceReset,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nfunction Command({\n className,\n slotName = 'command',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive> & SlotNameProps) {\n return (\n <CommandPrimitive\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'flex h-full w-full flex-col overflow-hidden bg-card text-card-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CommandDialog({\n title = 'Command Palette',\n description = 'Search for a command to run...',\n children,\n className,\n hideCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n hideCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\n `${modalSurface} gap-0 p-0 overflow-hidden`,\n className,\n )}\n hideCloseButton={hideCloseButton}\n >\n <Command className=\"[&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-item]]:py-2.5 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({\n className,\n slotName = 'command-input',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input> & SlotNameProps) {\n return (\n <div className=\"shrink-0 border-b border-border\">\n <div\n data-slot=\"command-input-wrapper\"\n className={cn(\n fieldSurface,\n 'h-11 gap-3 px-4 m-3 flex items-center',\n )}\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n className={cn(\n 'h-11 text-base sm:text-sm font-medium flex w-full bg-transparent outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n </div>\n </div>\n );\n}\n\nfunction CommandList({\n className,\n slotName = 'command-list',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List> & SlotNameProps) {\n return (\n <CommandPrimitive.List\n className={cn(\n 'scroll-py-1 max-h-[300px] overflow-x-hidden overflow-y-auto',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CommandEmpty({\n className,\n children,\n slotName = 'command-empty',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty> & SlotNameProps) {\n return (\n <CommandPrimitive.Empty\n className={cn(\n 'gap-3 px-6 py-10 flex flex-col items-center justify-center text-center',\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n <span className=\"size-10 flex items-center justify-center rounded-full bg-surface-recessed text-muted-foreground\">\n <SearchXIcon className=\"size-5\" />\n </span>\n <span className=\"text-sm text-muted-foreground\">{children}</span>\n </CommandPrimitive.Empty>\n );\n}\n\nfunction CommandGroup({\n className,\n slotName = 'command-group',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group> & SlotNameProps) {\n return (\n <CommandPrimitive.Group\n className={cn(\n 'p-3 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium overflow-hidden text-foreground [&_[cmdk-group-heading]]:text-muted-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n slotName = 'command-separator',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator> & SlotNameProps) {\n return (\n <CommandPrimitive.Separator\n className={cn('mx-3 h-px bg-border', className)}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CommandItem({\n className,\n slotName = 'command-item',\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item> & SlotNameProps) {\n return (\n <CommandPrimitive.Item\n className={cn(\n \"gap-2 px-2 py-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 rounded-xl relative flex cursor-default items-center outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground\",\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction CommandShortcut({\n className,\n slotName = 'command-shortcut',\n ...props\n}: React.ComponentProps<'span'> & SlotNameProps) {\n return (\n <span\n className={cn(\n 'text-xs tracking-widest ml-auto text-muted-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut,\n};\n","import { Popover as PopoverPrimitive } from 'radix-ui';\nimport * as React from 'react';\n\nimport { panelSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst PopoverAnchor = PopoverPrimitive.Anchor;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> &\n SlotNameProps\n>(\n (\n {\n className,\n align = 'center',\n sideOffset = 4,\n slotName = 'popover-content',\n ...props\n },\n ref,\n ) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n `${panelSurface} p-4 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-full origin-[--radix-popover-content-transform-origin] bg-popover/90 outline-none`,\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n </PopoverPrimitive.Portal>\n ),\n);\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n\nexport { Popover, PopoverAnchor, PopoverContent, PopoverTrigger };\n","import * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { fieldFocus, fieldSurface, menuSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nfunction Select({\n slotName = 'select',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Root> & SlotNameProps) {\n return <SelectPrimitive.Root {...props} data-slot={slotName} />;\n}\n\nfunction SelectGroup({\n slotName = 'select-group',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Group> & SlotNameProps) {\n return <SelectPrimitive.Group {...props} data-slot={slotName} />;\n}\n\nfunction SelectValue({\n slotName = 'select-value',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Value> & SlotNameProps) {\n return <SelectPrimitive.Value {...props} data-slot={slotName} />;\n}\n\nfunction SelectTrigger({\n className,\n children,\n slotName = 'select-trigger',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & SlotNameProps) {\n return (\n <SelectPrimitive.Trigger\n className={cn(\n `${fieldSurface} h-11 px-4 font-medium *:data-[slot=select-value]:gap-2 [&_svg:not([class*='size-'])]:size-4 flex w-full items-center justify-between transition-[color,box-shadow] disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0 [&>span]:line-clamp-1 ${fieldFocus}`,\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n slotName = 'select-content',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content> & SlotNameProps) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n className={cn(\n `${menuSurface} max-h-96 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 relative z-50 min-w-[8rem] overflow-hidden bg-popover/95`,\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n {...props}\n data-slot={slotName}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'scroll-my-1 h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({\n className,\n slotName = 'select-label',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Label> & SlotNameProps) {\n return (\n <SelectPrimitive.Label\n className={cn(\n 'px-2 py-1.5 text-xs font-medium tracking-wider text-muted-foreground uppercase',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n slotName = 'select-item',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item> & SlotNameProps) {\n return (\n <SelectPrimitive.Item\n className={cn(\n \"gap-2 rounded-xl py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:gap-2 focus:font-semibold relative flex w-full cursor-default items-center outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center\",\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n <span className=\"right-2 size-3.5 absolute flex items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n slotName = 'select-separator',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator> & SlotNameProps) {\n return (\n <SelectPrimitive.Separator\n className={cn(\n '-mx-1 my-1 pointer-events-none h-px bg-border',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n slotName = 'select-scroll-up-button',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton> &\n SlotNameProps) {\n return (\n <SelectPrimitive.ScrollUpButton\n className={cn(\n 'py-1 flex cursor-default items-center justify-center',\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n slotName = 'select-scroll-down-button',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton> &\n SlotNameProps) {\n return (\n <SelectPrimitive.ScrollDownButton\n className={cn(\n 'py-1 flex cursor-default items-center justify-center',\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import * as React from 'react';\n\nexport interface FloatingSheetLabels {\n backLabel: string;\n closeLabel: string;\n}\n\nexport const floatingSheetDefaultLabels: FloatingSheetLabels = {\n backLabel: 'Back',\n closeLabel: 'Close',\n};\n\nexport const FLOATING_SHEET_OFFSET_LIMIT = 3;\n\nexport interface FloatingSheetStackEntry {\n id: string;\n title: React.ReactNode;\n persistent: boolean;\n close: () => void;\n}\n\nexport interface FloatingSheetStackContextValue {\n labels: FloatingSheetLabels;\n container: HTMLElement | null;\n entries: FloatingSheetStackEntry[];\n register: (entry: FloatingSheetStackEntry) => void;\n unregister: (id: string) => void;\n closeAll: () => void;\n}\n\nexport const FloatingSheetStackContext =\n React.createContext<FloatingSheetStackContextValue | null>(null);\n\nexport function useFloatingSheetStack(): FloatingSheetStackContextValue {\n const context = React.useContext(FloatingSheetStackContext);\n\n if (!context) {\n throw new Error(\n 'FloatingSheet must be rendered inside a FloatingSheetStack.',\n );\n }\n\n return context;\n}\n\nexport interface FloatingSheetEdges {\n top: boolean;\n bottom: boolean;\n}\n\nexport const floatingSheetDefaultEdges: FloatingSheetEdges = {\n top: true,\n bottom: true,\n};\n\nexport const FloatingSheetEdgesContext =\n React.createContext<FloatingSheetEdges>(floatingSheetDefaultEdges);\n\nexport const FloatingSheetReportEdgesContext = React.createContext<\n ((edges: FloatingSheetEdges) => void) | null\n>(null);\n","import * as DialogPrimitive from '@radix-ui/react-dialog';\nimport * as React from 'react';\n\nimport {\n FloatingSheetStackContext,\n floatingSheetDefaultLabels,\n type FloatingSheetLabels,\n type FloatingSheetStackContextValue,\n type FloatingSheetStackEntry,\n} from '@/components/ui/floating-sheet-context';\nimport { useUiLabels } from '@/locales/context';\nimport type { SlotNameProps } from '@/types';\n\nexport function FloatingSheetStack({\n children,\n labels,\n slotName = 'floating-sheet-stack',\n}: {\n children: React.ReactNode;\n labels?: Partial<FloatingSheetLabels>;\n} & SlotNameProps) {\n const { backLabel, closeLabel } = useUiLabels(\n 'floatingSheet',\n floatingSheetDefaultLabels,\n labels,\n );\n const [entries, setEntries] = React.useState<FloatingSheetStackEntry[]>([]);\n const [container, setContainer] = React.useState<HTMLElement | null>(null);\n\n const register = React.useCallback((entry: FloatingSheetStackEntry) => {\n setEntries((current) =>\n current.some((item) => item.id === entry.id)\n ? current.map((item) => (item.id === entry.id ? entry : item))\n : [...current, entry],\n );\n }, []);\n\n const unregister = React.useCallback((id: string) => {\n setEntries((current) => current.filter((item) => item.id !== id));\n }, []);\n\n const closeAll = React.useCallback(() => {\n for (const entry of [...entries].reverse()) {\n entry.close();\n }\n }, [entries]);\n\n const value = React.useMemo<FloatingSheetStackContextValue>(\n () => ({\n labels: { backLabel, closeLabel },\n container,\n entries,\n register,\n unregister,\n closeAll,\n }),\n [\n backLabel,\n closeLabel,\n container,\n entries,\n register,\n unregister,\n closeAll,\n ],\n );\n\n const top = entries.at(-1);\n\n return (\n <FloatingSheetStackContext.Provider value={value}>\n {children}\n\n <DialogPrimitive.Root\n open={entries.length > 0}\n onOpenChange={(open) => {\n if (!open) {\n closeAll();\n }\n }}\n >\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n data-slot=\"floating-sheet-overlay\"\n className=\"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 inset-0 bg-black/60 backdrop-blur-sm fixed z-50\"\n />\n <DialogPrimitive.Content\n aria-describedby={undefined}\n onEscapeKeyDown={(event) => {\n event.preventDefault();\n\n if (!top?.persistent) {\n top?.close();\n }\n }}\n onInteractOutside={(event) => {\n if (top?.persistent) {\n event.preventDefault();\n }\n }}\n onOpenAutoFocus={(event) => event.preventDefault()}\n onCloseAutoFocus={(event) => event.preventDefault()}\n className=\"inset-2 sm:inset-y-4 sm:right-4 sm:left-auto sm:w-[calc(100vw-2rem)] sm:max-w-lg sm:p-0 fixed z-50 p-[env(safe-area-inset-top)_env(safe-area-inset-right)_env(safe-area-inset-bottom)_env(safe-area-inset-left)] outline-none\"\n data-slot={slotName}\n >\n <DialogPrimitive.Title className=\"sr-only\">\n {top?.title}\n </DialogPrimitive.Title>\n <div\n ref={setContainer}\n data-slot=\"floating-sheet-panels\"\n className=\"relative h-full w-full\"\n />\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n </FloatingSheetStackContext.Provider>\n );\n}\n","import { ArrowLeftIcon, XIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\n\nimport {\n FLOATING_SHEET_OFFSET_LIMIT,\n floatingSheetDefaultEdges,\n floatingSheetDefaultLabels,\n FloatingSheetEdgesContext,\n FloatingSheetReportEdgesContext,\n useFloatingSheetStack,\n type FloatingSheetEdges,\n type FloatingSheetLabels,\n} from '@/components/ui/floating-sheet-context';\nimport { FloatingSheetStack } from '@/components/ui/floating-sheet-stack';\nimport { useFloatingSheetBodyEdges } from '@/hooks/use-floating-sheet-body-edges';\nimport {\n focusRing,\n modalSurface,\n scrollEdgeTransition,\n scrollShadowFromBottom,\n scrollShadowFromTop,\n} from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nfunction FloatingSheet({\n open,\n onOpenChange,\n title,\n description,\n persistent = false,\n className,\n children,\n slotName = 'floating-sheet',\n ...props\n}: Omit<React.ComponentProps<'section'>, 'title'> & {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: React.ReactNode;\n description?: React.ReactNode;\n persistent?: boolean;\n} & SlotNameProps) {\n const { labels, container, entries, register, unregister, closeAll } =\n useFloatingSheetStack();\n const id = React.useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n const close = React.useCallback(() => onOpenChange(false), [onOpenChange]);\n const closeRef = React.useRef(close);\n const titleRef = React.useRef(title);\n const openerRef = React.useRef<Element | null>(null);\n const panelRef = React.useRef<HTMLElement | null>(null);\n const focusedRef = React.useRef(false);\n const [edges, setEdges] = React.useState<FloatingSheetEdges>(\n floatingSheetDefaultEdges,\n );\n\n React.useEffect(() => {\n closeRef.current = close;\n titleRef.current = title;\n });\n\n React.useEffect(() => {\n if (!open) {\n return;\n }\n\n register({\n id,\n title: titleRef.current,\n persistent,\n close: () => closeRef.current(),\n });\n }, [open, id, persistent, register]);\n\n React.useEffect(() => {\n if (!open) {\n return;\n }\n\n return () => unregister(id);\n }, [open, id, unregister]);\n\n const index = entries.findIndex((entry) => entry.id === id);\n const depth = index === -1 ? 0 : entries.length - 1 - index;\n const isTop = index !== -1 && depth === 0;\n\n React.useEffect(() => {\n if (open) {\n openerRef.current = document.activeElement;\n\n return;\n }\n\n const opener = openerRef.current;\n openerRef.current = null;\n\n if (opener instanceof HTMLElement && document.contains(opener)) {\n opener.focus();\n }\n }, [open]);\n\n React.useEffect(() => {\n if (!open) {\n focusedRef.current = false;\n\n return;\n }\n\n if (!isTop || focusedRef.current) {\n return;\n }\n\n focusedRef.current = true;\n\n const frame = requestAnimationFrame(() => panelRef.current?.focus());\n\n return () => cancelAnimationFrame(frame);\n }, [open, isTop]);\n\n if (!open || !container) {\n return null;\n }\n\n const offset = Math.min(depth, FLOATING_SHEET_OFFSET_LIMIT);\n\n return createPortal(\n <section\n ref={panelRef}\n data-depth={depth}\n role=\"dialog\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n inert={!isTop}\n style={{\n transform: `translateX(-${offset * 26}px) scale(${1 - offset * 0.035})`,\n zIndex: index,\n }}\n className={cn(\n `${modalSurface} inset-0 ease-out absolute flex flex-col overflow-hidden transition-transform duration-300 outline-none`,\n depth > 0 && 'max-sm:hidden pointer-events-none',\n depth > FLOATING_SHEET_OFFSET_LIMIT && 'hidden',\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n <header\n data-slot=\"floating-sheet-header\"\n className={cn(\n 'gap-1 p-5 relative z-10 flex flex-col',\n scrollEdgeTransition,\n !edges.top && scrollShadowFromTop,\n )}\n >\n {index > 0 ? (\n <button\n type=\"button\"\n data-slot=\"floating-sheet-back\"\n onClick={close}\n className={cn(\n 'gap-2 h-8 -ml-2 px-2 text-sm font-medium inline-flex w-fit items-center rounded-full text-muted-foreground transition-colors hover:bg-accent hover:text-foreground',\n focusRing,\n )}\n >\n <ArrowLeftIcon className=\"size-4\" />\n {labels.backLabel}\n </button>\n ) : null}\n\n <h2\n id={titleId}\n data-slot=\"floating-sheet-title\"\n className=\"pr-10 text-lg font-semibold text-foreground\"\n >\n {title}\n </h2>\n\n {description ? (\n <p\n id={descriptionId}\n data-slot=\"floating-sheet-description\"\n className=\"text-sm text-muted-foreground\"\n >\n {description}\n </p>\n ) : null}\n </header>\n\n <FloatingSheetReportEdgesContext.Provider value={setEdges}>\n <FloatingSheetEdgesContext.Provider value={edges}>\n {children}\n </FloatingSheetEdgesContext.Provider>\n </FloatingSheetReportEdgesContext.Provider>\n\n <button\n type=\"button\"\n data-slot=\"floating-sheet-close\"\n aria-label={labels.closeLabel}\n onClick={closeAll}\n className={cn(\n 'top-4 right-4 size-9 shadow-xs absolute z-20 flex items-center justify-center rounded-full border border-border bg-muted text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none',\n focusRing,\n )}\n >\n <XIcon className=\"size-4\" />\n </button>\n </section>,\n container,\n );\n}\n\nfunction FloatingSheetBody({\n className,\n slotName = 'floating-sheet-body',\n children,\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n const reportEdges = React.useContext(FloatingSheetReportEdgesContext);\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const topSentinelRef = React.useRef<HTMLDivElement | null>(null);\n const bottomSentinelRef = React.useRef<HTMLDivElement | null>(null);\n\n useFloatingSheetBodyEdges(\n containerRef,\n topSentinelRef,\n bottomSentinelRef,\n reportEdges,\n );\n\n return (\n <div\n ref={containerRef}\n className={cn('p-5 flex-1 overflow-y-auto', className)}\n {...props}\n data-slot={slotName}\n >\n <div\n ref={topSentinelRef}\n aria-hidden=\"true\"\n data-slot=\"floating-sheet-top-sentinel\"\n className=\"h-0\"\n />\n {children}\n <div\n ref={bottomSentinelRef}\n aria-hidden=\"true\"\n data-slot=\"floating-sheet-bottom-sentinel\"\n className=\"h-0\"\n />\n </div>\n );\n}\n\nfunction FloatingSheetFooter({\n className,\n slotName = 'floating-sheet-footer',\n ...props\n}: React.ComponentProps<'div'> & SlotNameProps) {\n const edges = React.useContext(FloatingSheetEdgesContext);\n\n return (\n <div\n className={cn(\n 'gap-2 p-5 relative z-10 mt-auto flex items-center justify-end',\n scrollEdgeTransition,\n !edges.bottom && scrollShadowFromBottom,\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n );\n}\n\nexport {\n FloatingSheet,\n FloatingSheetBody,\n floatingSheetDefaultLabels,\n FloatingSheetFooter,\n FloatingSheetStack,\n type FloatingSheetLabels,\n};\n","import * as React from 'react';\n\nimport {\n floatingSheetDefaultEdges,\n type FloatingSheetEdges,\n} from '@/components/ui/floating-sheet-context';\n\nexport function useFloatingSheetBodyEdges(\n containerRef: React.RefObject<HTMLElement | null>,\n topSentinelRef: React.RefObject<HTMLElement | null>,\n bottomSentinelRef: React.RefObject<HTMLElement | null>,\n reportEdges: ((edges: FloatingSheetEdges) => void) | null,\n): void {\n React.useEffect(() => {\n const container = containerRef.current;\n const topSentinel = topSentinelRef.current;\n const bottomSentinel = bottomSentinelRef.current;\n\n if (\n !reportEdges ||\n !container ||\n !topSentinel ||\n !bottomSentinel ||\n typeof IntersectionObserver === 'undefined'\n ) {\n return;\n }\n\n let edges = floatingSheetDefaultEdges;\n const edgeKeyByTarget = new Map<Element, keyof FloatingSheetEdges>([\n [topSentinel, 'top'],\n [bottomSentinel, 'bottom'],\n ]);\n\n const observer = new IntersectionObserver(\n (entries) => {\n const next = { ...edges };\n\n for (const entry of entries) {\n const key = edgeKeyByTarget.get(entry.target);\n\n if (!key) {\n continue;\n }\n\n next[key] = entry.isIntersecting;\n }\n\n edges = next;\n reportEdges(next);\n },\n { root: container, threshold: 0 },\n );\n\n observer.observe(topSentinel);\n observer.observe(bottomSentinel);\n\n return () => {\n observer.disconnect();\n reportEdges(floatingSheetDefaultEdges);\n };\n }, [containerRef, topSentinelRef, bottomSentinelRef, reportEdges]);\n}\n","import { OTPInput, OTPInputContext } from 'input-otp';\nimport { Minus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { controlFill, glassControl } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nconst InputOTP = React.forwardRef<\n React.ElementRef<typeof OTPInput>,\n React.ComponentPropsWithoutRef<typeof OTPInput>\n>(({ className, containerClassName, ...props }, ref) => (\n <OTPInput\n ref={ref}\n containerClassName={cn(\n 'gap-2 flex items-center has-[:disabled]:opacity-50',\n containerClassName,\n )}\n className={cn('disabled:cursor-not-allowed', className)}\n {...props}\n />\n));\nInputOTP.displayName = 'InputOTP';\n\nconst InputOTPGroup = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn('flex items-center', className)} {...props} />\n));\nInputOTPGroup.displayName = 'InputOTPGroup';\n\nconst InputOTPSlot = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'> & { index: number } & SlotNameProps\n>(({ index, className, slotName = 'input-otp-slot', ...props }, ref) => {\n const inputOTPContext = React.useContext(OTPInputContext);\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];\n\n return (\n <div\n ref={ref}\n className={cn(\n glassControl,\n controlFill,\n 'size-11 text-base sm:text-sm font-medium first:rounded-l-2xl last:rounded-r-2xl relative flex items-center justify-center rounded-none transition-all',\n isActive && 'z-10 ring-[3px] ring-ring/50',\n className,\n )}\n {...props}\n data-slot={slotName}\n >\n {char}\n {hasFakeCaret && (\n <div className=\"inset-0 pointer-events-none absolute flex items-center justify-center\">\n <div className=\"h-4 animate-caret-blink w-px bg-foreground duration-1000\" />\n </div>\n )}\n </div>\n );\n});\nInputOTPSlot.displayName = 'InputOTPSlot';\n\nconst InputOTPSeparator = React.forwardRef<\n React.ElementRef<'div'>,\n React.ComponentPropsWithoutRef<'div'>\n>(({ ...props }, ref) => (\n <div ref={ref} role=\"separator\" {...props}>\n <Minus />\n </div>\n));\nInputOTPSeparator.displayName = 'InputOTPSeparator';\n\nexport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };\n","import * as SwitchPrimitives from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { focusRing } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> & SlotNameProps\n>(({ className, slotName = 'switch', ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n `peer h-6 w-11 shadow-sm inline-flex shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input ${focusRing}`,\n className,\n )}\n {...props}\n ref={ref}\n data-slot={slotName}\n >\n <SwitchPrimitives.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'size-5 shadow-lg data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0 pointer-events-none block rounded-full bg-background ring-0 transition-transform',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { elevatedSurface, focusRing, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nconst Tabs = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> & SlotNameProps\n>(({ slotName = 'tabs', ...props }, ref) => (\n <TabsPrimitive.Root ref={ref} {...props} data-slot={slotName} />\n));\nTabs.displayName = TabsPrimitive.Root.displayName;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List> & SlotNameProps\n>(({ className, slotName = 'tabs-list', ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'h-11 p-1.5 rounded-2xl inline-flex items-center justify-center bg-muted text-muted-foreground',\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger> & SlotNameProps\n>(({ className, slotName = 'tabs-trigger', ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n `px-4 text-sm font-medium data-[state=active]:shadow-sm h-8 rounded-xl data-[state=active]:font-semibold inline-flex items-center justify-center whitespace-nowrap transition-all disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-tab-active data-[state=active]:text-foreground ${focusRing}`,\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content> & SlotNameProps\n>(({ className, slotName = 'tabs-content', ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n `mt-2 p-5 bg-card ${focusRing}`,\n className,\n )}\n {...props}\n data-slot={slotName}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n","import * as React from 'react';\n\nimport { fieldFocus, fieldSurface } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport type { SlotNameProps } from '@/types';\n\nconst Textarea = React.forwardRef<\n HTMLTextAreaElement,\n React.ComponentProps<'textarea'> & SlotNameProps\n>(({ className, slotName = 'textarea', ...props }, ref) => {\n return (\n <textarea\n className={cn(\n fieldSurface,\n 'px-4 py-3 font-medium min-h-24 flex w-full resize-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n fieldFocus,\n 'aria-invalid:border-destructive aria-invalid:ring-destructive/20',\n className,\n )}\n ref={ref}\n {...props}\n data-slot={slotName}\n />\n );\n});\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n"],"mappings":"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","names":["jsx","className","props","jsx","jsxs","React","jsx","ChevronDownIcon","jsx","jsxs","ChevronDownIcon","React","React","jsx","jsxs","React","React","jsx","jsxs","React","jsx","jsxs","React","jsx","React","jsx","React","jsx"]}