periplo-ui 4.6.3 → 4.8.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/components/PhoneInput/PhoneInput.d.ts +63 -0
- package/dist/components/PhoneInput/PhoneInput.js +168 -0
- package/dist/components/PhoneInput/PhoneInput.js.map +1 -0
- package/dist/components/PhoneInput/countries.d.ts +16 -0
- package/dist/components/PhoneInput/countries.js +254 -0
- package/dist/components/PhoneInput/countries.js.map +1 -0
- package/dist/components/PhoneInput/index.d.ts +2 -0
- package/dist/components/PhoneInput/index.js +3 -0
- package/dist/components/PhoneInput/index.js.map +1 -0
- package/dist/components/Sidebar/Sidebar.d.ts +9 -1
- package/dist/components/Sidebar/Sidebar.js +134 -106
- package/dist/components/Sidebar/Sidebar.js.map +1 -1
- package/dist/components/Sidebar/index.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { PhoneCountry } from './countries';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export type PhoneInputCountryAccessors<T> = {
|
|
4
|
+
/** Returns the unique key used to identify a country in the selector. */
|
|
5
|
+
getCountryValue: (country: T) => string;
|
|
6
|
+
/** Returns the E.164 dial code, including the leading "+", e.g. "+34". */
|
|
7
|
+
getCountryDialCode: (country: T) => string;
|
|
8
|
+
/** Returns the flag emoji (or any other leading glyph) for a country. */
|
|
9
|
+
getCountryFlag: (country: T) => string;
|
|
10
|
+
/** Returns the display name used for search and the option list. */
|
|
11
|
+
getCountryName: (country: T) => string;
|
|
12
|
+
};
|
|
13
|
+
/** Props unrelated to the country shape, shared by both usage modes. */
|
|
14
|
+
type PhoneInputBaseProps = {
|
|
15
|
+
/** Id applied to the number input, so a `<label htmlFor>` / `FormControl` targets it. */
|
|
16
|
+
id?: string;
|
|
17
|
+
/** Name applied to the number input. */
|
|
18
|
+
name?: string;
|
|
19
|
+
/** Classes for the outer wrapper. */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Classes for the country selector trigger button. */
|
|
22
|
+
prefixClassName?: string;
|
|
23
|
+
/** Classes for the number `<input>` element. */
|
|
24
|
+
numberClassName?: string;
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
error?: boolean | string;
|
|
27
|
+
/** Selected country, expressed as `getCountryValue(country)`. */
|
|
28
|
+
country?: string;
|
|
29
|
+
/** Digits value of the number field. */
|
|
30
|
+
number?: string;
|
|
31
|
+
onNumberChange?: (number: string) => void;
|
|
32
|
+
/** Extra attributes forwarded to the number `<input>`. */
|
|
33
|
+
numberInputProps?: Omit<React.InputHTMLAttributes<HTMLInputElement>, 'id' | 'name' | 'disabled' | 'value' | 'onChange' | 'className'>;
|
|
34
|
+
/** Placeholder for the number field. */
|
|
35
|
+
placeholder?: string;
|
|
36
|
+
/** Accessible label for the country selector trigger (announced by screen readers; not visible). */
|
|
37
|
+
countryAriaLabel?: string;
|
|
38
|
+
/** Placeholder for the country search field. */
|
|
39
|
+
searchPlaceholder?: string;
|
|
40
|
+
/** Message shown when no country matches the search. */
|
|
41
|
+
emptyMessage?: string;
|
|
42
|
+
} & Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'id' | 'onChange'>;
|
|
43
|
+
/** Default mode: use the built-in `PhoneCountry` list. Accessors are optional (sensible defaults applied). */
|
|
44
|
+
export type PhoneInputDefaultProps = PhoneInputBaseProps & Partial<PhoneInputCountryAccessors<PhoneCountry>> & {
|
|
45
|
+
/** Country list backing the prefix selector. Defaults to `defaultCountries`. */
|
|
46
|
+
countries?: Array<PhoneCountry>;
|
|
47
|
+
/** Fires with the full selected country object, so callers can persist whichever fields they need. */
|
|
48
|
+
onCountryChange?: (country: PhoneCountry) => void;
|
|
49
|
+
};
|
|
50
|
+
/** Custom mode: bring your own country shape. `countries` and all accessors are required. */
|
|
51
|
+
export type PhoneInputCustomProps<T extends object> = PhoneInputBaseProps & PhoneInputCountryAccessors<T> & {
|
|
52
|
+
/** Backend-driven / custom country list. */
|
|
53
|
+
countries: Array<T>;
|
|
54
|
+
/** Fires with the full selected country object, so callers can persist whichever fields they need. */
|
|
55
|
+
onCountryChange?: (country: T) => void;
|
|
56
|
+
};
|
|
57
|
+
export type PhoneInputProps<T extends object = PhoneCountry> = PhoneInputDefaultProps | PhoneInputCustomProps<T>;
|
|
58
|
+
export declare function PhoneInput(props: PhoneInputDefaultProps): React.ReactElement;
|
|
59
|
+
export declare function PhoneInput<T extends object>(props: PhoneInputCustomProps<T>): React.ReactElement;
|
|
60
|
+
export declare namespace PhoneInput {
|
|
61
|
+
var displayName: string;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { CaretDown } from '@phosphor-icons/react/dist/ssr/CaretDown';
|
|
3
|
+
import { Check } from '@phosphor-icons/react/dist/ssr/Check';
|
|
4
|
+
import { Globe } from '@phosphor-icons/react/dist/ssr/Globe';
|
|
5
|
+
import { WarningCircle } from '@phosphor-icons/react/dist/ssr/WarningCircle';
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import { cn } from '../../lib/utils.js';
|
|
8
|
+
import { Command, CommandInput, CommandList, CommandEmpty, CommandItem } from '../Command/Command.js';
|
|
9
|
+
import { PopoverRoot, PopoverTrigger, PopoverContent } from '../Popover/Popover.js';
|
|
10
|
+
import { defaultCountries } from './countries.js';
|
|
11
|
+
|
|
12
|
+
const defaultAccessors = {
|
|
13
|
+
getCountryValue: (country) => country.isoCode,
|
|
14
|
+
getCountryDialCode: (country) => country.dialCode,
|
|
15
|
+
getCountryFlag: (country) => country.flag,
|
|
16
|
+
getCountryName: (country) => country.name
|
|
17
|
+
};
|
|
18
|
+
function PhoneInput(props) {
|
|
19
|
+
const {
|
|
20
|
+
id,
|
|
21
|
+
name,
|
|
22
|
+
className,
|
|
23
|
+
prefixClassName,
|
|
24
|
+
numberClassName,
|
|
25
|
+
disabled = false,
|
|
26
|
+
error = false,
|
|
27
|
+
countries,
|
|
28
|
+
country,
|
|
29
|
+
onCountryChange,
|
|
30
|
+
number,
|
|
31
|
+
onNumberChange,
|
|
32
|
+
numberInputProps,
|
|
33
|
+
placeholder,
|
|
34
|
+
countryAriaLabel = "Select country",
|
|
35
|
+
searchPlaceholder = "Search...",
|
|
36
|
+
emptyMessage = "No results found.",
|
|
37
|
+
getCountryValue,
|
|
38
|
+
getCountryDialCode,
|
|
39
|
+
getCountryFlag,
|
|
40
|
+
getCountryName,
|
|
41
|
+
"aria-describedby": ariaDescribedBy,
|
|
42
|
+
"aria-invalid": ariaInvalid,
|
|
43
|
+
...rest
|
|
44
|
+
} = props;
|
|
45
|
+
const fallback = { countries: defaultCountries, ...defaultAccessors };
|
|
46
|
+
const options = countries ?? fallback.countries;
|
|
47
|
+
const resolveValue = getCountryValue ?? fallback.getCountryValue;
|
|
48
|
+
const resolveDialCode = getCountryDialCode ?? fallback.getCountryDialCode;
|
|
49
|
+
const resolveFlag = getCountryFlag ?? fallback.getCountryFlag;
|
|
50
|
+
const resolveName = getCountryName ?? fallback.getCountryName;
|
|
51
|
+
const [open, setOpen] = React.useState(false);
|
|
52
|
+
const [search, setSearch] = React.useState("");
|
|
53
|
+
const hasError = Boolean(error);
|
|
54
|
+
const prefixDisabled = disabled || options.length <= 1;
|
|
55
|
+
const selectedCountry = React.useMemo(
|
|
56
|
+
() => options.find((option) => resolveValue(option) === country),
|
|
57
|
+
[options, country, resolveValue]
|
|
58
|
+
);
|
|
59
|
+
const filteredOptions = React.useMemo(() => {
|
|
60
|
+
const normalized = search.toLowerCase().trim();
|
|
61
|
+
if (!normalized) return options;
|
|
62
|
+
return options.filter(
|
|
63
|
+
(option) => resolveName(option).toLowerCase().includes(normalized) || resolveDialCode(option).toLowerCase().includes(normalized)
|
|
64
|
+
);
|
|
65
|
+
}, [options, search, resolveName, resolveDialCode]);
|
|
66
|
+
const handleOpenChange = (next) => {
|
|
67
|
+
setOpen(next);
|
|
68
|
+
if (!next) setSearch("");
|
|
69
|
+
};
|
|
70
|
+
const handleSelect = (option) => {
|
|
71
|
+
onCountryChange?.(option);
|
|
72
|
+
handleOpenChange(false);
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("flex w-full flex-col gap-1", className), ...rest, children: [
|
|
75
|
+
/* @__PURE__ */ jsxs(
|
|
76
|
+
"div",
|
|
77
|
+
{
|
|
78
|
+
className: cn(
|
|
79
|
+
"flex h-12 w-full items-stretch overflow-hidden rounded-lg border border-neutral-200 bg-white transition-colors has-[input:focus]:border-neutral-950",
|
|
80
|
+
disabled && "bg-neutral-50",
|
|
81
|
+
hasError && "border-error-400 has-[input:focus]:border-error-700"
|
|
82
|
+
),
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ jsxs(PopoverRoot, { open, onOpenChange: handleOpenChange, children: [
|
|
85
|
+
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
86
|
+
"button",
|
|
87
|
+
{
|
|
88
|
+
type: "button",
|
|
89
|
+
id: id ? `${id}-country` : void 0,
|
|
90
|
+
disabled: prefixDisabled,
|
|
91
|
+
"aria-label": selectedCountry ? resolveName(selectedCountry) : countryAriaLabel,
|
|
92
|
+
className: cn(
|
|
93
|
+
"flex w-28 shrink-0 items-center gap-1.5 border-r border-neutral-200 px-3 text-base text-neutral-950 outline-none transition-colors",
|
|
94
|
+
!prefixDisabled && "cursor-pointer hover:bg-neutral-50",
|
|
95
|
+
prefixDisabled && "cursor-not-allowed",
|
|
96
|
+
disabled && "opacity-50",
|
|
97
|
+
prefixClassName
|
|
98
|
+
),
|
|
99
|
+
children: [
|
|
100
|
+
selectedCountry ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
101
|
+
/* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: resolveFlag(selectedCountry) }),
|
|
102
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: resolveDialCode(selectedCountry) })
|
|
103
|
+
] }) : /* @__PURE__ */ jsx(Globe, { className: "h-5 w-5 text-neutral-300", "aria-hidden": true }),
|
|
104
|
+
!prefixDisabled && /* @__PURE__ */ jsx(CaretDown, { className: "ml-auto h-4 w-4 shrink-0 opacity-50" })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
) }),
|
|
108
|
+
/* @__PURE__ */ jsx(PopoverContent, { align: "start", className: "w-72 overflow-hidden p-0", children: /* @__PURE__ */ jsxs(Command, { shouldFilter: false, children: [
|
|
109
|
+
/* @__PURE__ */ jsx(CommandInput, { placeholder: searchPlaceholder, value: search, onValueChange: setSearch }),
|
|
110
|
+
/* @__PURE__ */ jsx(CommandList, { className: "px-2.5 pb-2", children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx(CommandEmpty, { children: emptyMessage }) : filteredOptions.map((option) => {
|
|
111
|
+
const value = resolveValue(option);
|
|
112
|
+
const isSelected = value === country;
|
|
113
|
+
return /* @__PURE__ */ jsxs(
|
|
114
|
+
CommandItem,
|
|
115
|
+
{
|
|
116
|
+
value,
|
|
117
|
+
onSelect: () => handleSelect(option),
|
|
118
|
+
className: "gap-2 rounded-lg px-3",
|
|
119
|
+
children: [
|
|
120
|
+
/* @__PURE__ */ jsx("span", { className: "text-lg leading-none", children: resolveFlag(option) }),
|
|
121
|
+
/* @__PURE__ */ jsx("span", { className: "shrink-0 text-neutral-500", children: resolveDialCode(option) }),
|
|
122
|
+
/* @__PURE__ */ jsx("span", { className: "truncate", children: resolveName(option) }),
|
|
123
|
+
isSelected && /* @__PURE__ */ jsx(
|
|
124
|
+
Check,
|
|
125
|
+
{
|
|
126
|
+
"data-testid": "selected-check",
|
|
127
|
+
weight: "bold",
|
|
128
|
+
className: "ml-auto h-4 w-4 shrink-0 text-neutral-950"
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
value
|
|
134
|
+
);
|
|
135
|
+
}) })
|
|
136
|
+
] }) })
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
"input",
|
|
140
|
+
{
|
|
141
|
+
id,
|
|
142
|
+
name,
|
|
143
|
+
type: "tel",
|
|
144
|
+
inputMode: "numeric",
|
|
145
|
+
disabled,
|
|
146
|
+
value: number ?? "",
|
|
147
|
+
onChange: (event) => onNumberChange?.(event.target.value.replace(/\D/g, "")),
|
|
148
|
+
placeholder,
|
|
149
|
+
"aria-invalid": ariaInvalid ?? (hasError || void 0),
|
|
150
|
+
"aria-describedby": ariaDescribedBy,
|
|
151
|
+
className: cn(
|
|
152
|
+
"min-w-0 flex-1 bg-transparent px-3 text-base text-neutral-950 outline-none placeholder:text-neutral-300 disabled:cursor-not-allowed disabled:opacity-50",
|
|
153
|
+
numberClassName
|
|
154
|
+
),
|
|
155
|
+
...numberInputProps
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
hasError && /* @__PURE__ */ jsx("div", { className: "flex items-center pr-3", children: /* @__PURE__ */ jsx(WarningCircle, { "data-testid": "exclaim-icon", className: "text-error-500", size: 18 }) })
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
typeof error === "string" && /* @__PURE__ */ jsx("span", { className: "text-error-500 text-sm", children: error })
|
|
163
|
+
] });
|
|
164
|
+
}
|
|
165
|
+
PhoneInput.displayName = "PhoneInput";
|
|
166
|
+
|
|
167
|
+
export { PhoneInput };
|
|
168
|
+
//# sourceMappingURL=PhoneInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneInput.js","sources":["../../../src/components/PhoneInput/PhoneInput.tsx"],"sourcesContent":["import { CaretDown } from '@phosphor-icons/react/dist/ssr/CaretDown'\nimport { Check } from '@phosphor-icons/react/dist/ssr/Check'\nimport { Globe } from '@phosphor-icons/react/dist/ssr/Globe'\nimport { WarningCircle } from '@phosphor-icons/react/dist/ssr/WarningCircle'\nimport * as React from 'react'\n\nimport { cn } from '@/lib/utils'\n\nimport { Command, CommandEmpty, CommandInput, CommandItem, CommandList } from '../Command'\nimport { PopoverContent, PopoverRoot, PopoverTrigger } from '../Popover'\n\nimport { defaultCountries, type PhoneCountry } from './countries'\n\nexport type PhoneInputCountryAccessors<T> = {\n /** Returns the unique key used to identify a country in the selector. */\n getCountryValue: (country: T) => string\n /** Returns the E.164 dial code, including the leading \"+\", e.g. \"+34\". */\n getCountryDialCode: (country: T) => string\n /** Returns the flag emoji (or any other leading glyph) for a country. */\n getCountryFlag: (country: T) => string\n /** Returns the display name used for search and the option list. */\n getCountryName: (country: T) => string\n}\n\n/** Props unrelated to the country shape, shared by both usage modes. */\ntype PhoneInputBaseProps = {\n /** Id applied to the number input, so a `<label htmlFor>` / `FormControl` targets it. */\n id?: string\n /** Name applied to the number input. */\n name?: string\n /** Classes for the outer wrapper. */\n className?: string\n /** Classes for the country selector trigger button. */\n prefixClassName?: string\n /** Classes for the number `<input>` element. */\n numberClassName?: string\n disabled?: boolean\n error?: boolean | string\n /** Selected country, expressed as `getCountryValue(country)`. */\n country?: string\n /** Digits value of the number field. */\n number?: string\n onNumberChange?: (number: string) => void\n /** Extra attributes forwarded to the number `<input>`. */\n numberInputProps?: Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'id' | 'name' | 'disabled' | 'value' | 'onChange' | 'className'\n >\n /** Placeholder for the number field. */\n placeholder?: string\n /** Accessible label for the country selector trigger (announced by screen readers; not visible). */\n countryAriaLabel?: string\n /** Placeholder for the country search field. */\n searchPlaceholder?: string\n /** Message shown when no country matches the search. */\n emptyMessage?: string\n} & Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'id' | 'onChange'>\n\n/** Default mode: use the built-in `PhoneCountry` list. Accessors are optional (sensible defaults applied). */\nexport type PhoneInputDefaultProps = PhoneInputBaseProps &\n Partial<PhoneInputCountryAccessors<PhoneCountry>> & {\n /** Country list backing the prefix selector. Defaults to `defaultCountries`. */\n countries?: Array<PhoneCountry>\n /** Fires with the full selected country object, so callers can persist whichever fields they need. */\n onCountryChange?: (country: PhoneCountry) => void\n }\n\n/** Custom mode: bring your own country shape. `countries` and all accessors are required. */\nexport type PhoneInputCustomProps<T extends object> = PhoneInputBaseProps &\n PhoneInputCountryAccessors<T> & {\n /** Backend-driven / custom country list. */\n countries: Array<T>\n /** Fires with the full selected country object, so callers can persist whichever fields they need. */\n onCountryChange?: (country: T) => void\n }\n\nexport type PhoneInputProps<T extends object = PhoneCountry> = PhoneInputDefaultProps | PhoneInputCustomProps<T>\n\n/** Both prop modes viewed uniformly in terms of `T` — used only inside the implementation. */\ntype ResolvedPhoneInputProps<T extends object> = PhoneInputBaseProps &\n Partial<PhoneInputCountryAccessors<T>> & {\n countries?: Array<T>\n onCountryChange?: (country: T) => void\n }\n\nconst defaultAccessors: PhoneInputCountryAccessors<PhoneCountry> = {\n getCountryValue: (country) => country.isoCode,\n getCountryDialCode: (country) => country.dialCode,\n getCountryFlag: (country) => country.flag,\n getCountryName: (country) => country.name,\n}\n\n// Overloads give callers clean inference: the default mode needs no accessors, while the custom mode\n// infers `T` from `countries` and type-checks every accessor. The implementation signature below is\n// broader (accessors optional) and is not visible to callers.\nexport function PhoneInput(props: PhoneInputDefaultProps): React.ReactElement\nexport function PhoneInput<T extends object>(props: PhoneInputCustomProps<T>): React.ReactElement\nexport function PhoneInput<T extends object>(props: ResolvedPhoneInputProps<T>): React.ReactElement {\n const {\n id,\n name,\n className,\n prefixClassName,\n numberClassName,\n disabled = false,\n error = false,\n countries,\n country,\n onCountryChange,\n number,\n onNumberChange,\n numberInputProps,\n placeholder,\n countryAriaLabel = 'Select country',\n searchPlaceholder = 'Search...',\n emptyMessage = 'No results found.',\n getCountryValue,\n getCountryDialCode,\n getCountryFlag,\n getCountryName,\n 'aria-describedby': ariaDescribedBy,\n 'aria-invalid': ariaInvalid,\n ...rest\n } = props\n\n // The overloads guarantee a custom `T` always brings its own `countries` + accessors, so this\n // `PhoneCountry` fallback is only ever reached when `T` is `PhoneCountry` — making the cast safe.\n const fallback = { countries: defaultCountries, ...defaultAccessors } as unknown as {\n countries: Array<T>\n } & PhoneInputCountryAccessors<T>\n\n const options = countries ?? fallback.countries\n const resolveValue = getCountryValue ?? fallback.getCountryValue\n const resolveDialCode = getCountryDialCode ?? fallback.getCountryDialCode\n const resolveFlag = getCountryFlag ?? fallback.getCountryFlag\n const resolveName = getCountryName ?? fallback.getCountryName\n\n const [open, setOpen] = React.useState(false)\n const [search, setSearch] = React.useState('')\n\n const hasError = Boolean(error)\n const prefixDisabled = disabled || options.length <= 1\n\n const selectedCountry = React.useMemo(\n () => options.find((option) => resolveValue(option) === country),\n [options, country, resolveValue],\n )\n\n const filteredOptions = React.useMemo(() => {\n const normalized = search.toLowerCase().trim()\n if (!normalized) return options\n return options.filter(\n (option) =>\n resolveName(option).toLowerCase().includes(normalized) ||\n resolveDialCode(option).toLowerCase().includes(normalized),\n )\n }, [options, search, resolveName, resolveDialCode])\n\n const handleOpenChange = (next: boolean) => {\n setOpen(next)\n if (!next) setSearch('')\n }\n\n const handleSelect = (option: T) => {\n onCountryChange?.(option)\n handleOpenChange(false)\n }\n\n return (\n <div className={cn('flex w-full flex-col gap-1', className)} {...rest}>\n <div\n className={cn(\n 'flex h-12 w-full items-stretch overflow-hidden rounded-lg border border-neutral-200 bg-white transition-colors has-[input:focus]:border-neutral-950',\n disabled && 'bg-neutral-50',\n hasError && 'border-error-400 has-[input:focus]:border-error-700',\n )}\n >\n <PopoverRoot open={open} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n id={id ? `${id}-country` : undefined}\n disabled={prefixDisabled}\n aria-label={selectedCountry ? resolveName(selectedCountry) : countryAriaLabel}\n className={cn(\n 'flex w-28 shrink-0 items-center gap-1.5 border-r border-neutral-200 px-3 text-base text-neutral-950 outline-none transition-colors',\n !prefixDisabled && 'cursor-pointer hover:bg-neutral-50',\n prefixDisabled && 'cursor-not-allowed',\n disabled && 'opacity-50',\n prefixClassName,\n )}\n >\n {selectedCountry ? (\n <>\n <span className=\"text-lg leading-none\">{resolveFlag(selectedCountry)}</span>\n <span className=\"tabular-nums\">{resolveDialCode(selectedCountry)}</span>\n </>\n ) : (\n <Globe className=\"h-5 w-5 text-neutral-300\" aria-hidden />\n )}\n {!prefixDisabled && <CaretDown className=\"ml-auto h-4 w-4 shrink-0 opacity-50\" />}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-72 overflow-hidden p-0\">\n <Command shouldFilter={false}>\n <CommandInput placeholder={searchPlaceholder} value={search} onValueChange={setSearch} />\n <CommandList className=\"px-2.5 pb-2\">\n {filteredOptions.length === 0 ? (\n <CommandEmpty>{emptyMessage}</CommandEmpty>\n ) : (\n filteredOptions.map((option) => {\n const value = resolveValue(option)\n const isSelected = value === country\n return (\n <CommandItem\n key={value}\n value={value}\n onSelect={() => handleSelect(option)}\n className=\"gap-2 rounded-lg px-3\"\n >\n <span className=\"text-lg leading-none\">{resolveFlag(option)}</span>\n <span className=\"shrink-0 text-neutral-500\">{resolveDialCode(option)}</span>\n <span className=\"truncate\">{resolveName(option)}</span>\n {isSelected && (\n <Check\n data-testid=\"selected-check\"\n weight=\"bold\"\n className=\"ml-auto h-4 w-4 shrink-0 text-neutral-950\"\n />\n )}\n </CommandItem>\n )\n })\n )}\n </CommandList>\n </Command>\n </PopoverContent>\n </PopoverRoot>\n\n <input\n id={id}\n name={name}\n type=\"tel\"\n inputMode=\"numeric\"\n disabled={disabled}\n value={number ?? ''}\n onChange={(event) => onNumberChange?.(event.target.value.replace(/\\D/g, ''))}\n placeholder={placeholder}\n aria-invalid={ariaInvalid ?? (hasError || undefined)}\n aria-describedby={ariaDescribedBy}\n className={cn(\n 'min-w-0 flex-1 bg-transparent px-3 text-base text-neutral-950 outline-none placeholder:text-neutral-300 disabled:cursor-not-allowed disabled:opacity-50',\n numberClassName,\n )}\n {...numberInputProps}\n />\n\n {hasError && (\n <div className=\"flex items-center pr-3\">\n <WarningCircle data-testid=\"exclaim-icon\" className=\"text-error-500\" size={18} />\n </div>\n )}\n </div>\n {typeof error === 'string' && <span className=\"text-error-500 text-sm\">{error}</span>}\n </div>\n )\n}\n\nPhoneInput.displayName = 'PhoneInput'\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type PhoneCountry = {
|
|
2
|
+
/** English country/territory name. */
|
|
3
|
+
name: string;
|
|
4
|
+
/** E.164 calling code, including the leading "+", e.g. "+34". */
|
|
5
|
+
dialCode: string;
|
|
6
|
+
/** ISO 3166-1 alpha-2 code, e.g. "ES". */
|
|
7
|
+
isoCode: string;
|
|
8
|
+
/** Flag emoji derived from the ISO code. */
|
|
9
|
+
flag: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Canonical default country list for `PhoneInput`, ordered alphabetically by name.
|
|
13
|
+
* Consumers can import and spread/filter this to extend or trim it, or replace it
|
|
14
|
+
* entirely via the `countries` prop.
|
|
15
|
+
*/
|
|
16
|
+
export declare const defaultCountries: Array<PhoneCountry>;
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
const RAW_COUNTRIES = [
|
|
2
|
+
{ name: "Afghanistan", dialCode: "+93", isoCode: "AF" },
|
|
3
|
+
{ name: "Åland Islands", dialCode: "+358", isoCode: "AX" },
|
|
4
|
+
{ name: "Albania", dialCode: "+355", isoCode: "AL" },
|
|
5
|
+
{ name: "Algeria", dialCode: "+213", isoCode: "DZ" },
|
|
6
|
+
{ name: "American Samoa", dialCode: "+1", isoCode: "AS" },
|
|
7
|
+
{ name: "Andorra", dialCode: "+376", isoCode: "AD" },
|
|
8
|
+
{ name: "Angola", dialCode: "+244", isoCode: "AO" },
|
|
9
|
+
{ name: "Anguilla", dialCode: "+1", isoCode: "AI" },
|
|
10
|
+
{ name: "Antigua and Barbuda", dialCode: "+1", isoCode: "AG" },
|
|
11
|
+
{ name: "Argentina", dialCode: "+54", isoCode: "AR" },
|
|
12
|
+
{ name: "Armenia", dialCode: "+374", isoCode: "AM" },
|
|
13
|
+
{ name: "Aruba", dialCode: "+297", isoCode: "AW" },
|
|
14
|
+
{ name: "Australia", dialCode: "+61", isoCode: "AU" },
|
|
15
|
+
{ name: "Austria", dialCode: "+43", isoCode: "AT" },
|
|
16
|
+
{ name: "Azerbaijan", dialCode: "+994", isoCode: "AZ" },
|
|
17
|
+
{ name: "Bahamas", dialCode: "+1", isoCode: "BS" },
|
|
18
|
+
{ name: "Bahrain", dialCode: "+973", isoCode: "BH" },
|
|
19
|
+
{ name: "Bangladesh", dialCode: "+880", isoCode: "BD" },
|
|
20
|
+
{ name: "Barbados", dialCode: "+1", isoCode: "BB" },
|
|
21
|
+
{ name: "Belarus", dialCode: "+375", isoCode: "BY" },
|
|
22
|
+
{ name: "Belgium", dialCode: "+32", isoCode: "BE" },
|
|
23
|
+
{ name: "Belize", dialCode: "+501", isoCode: "BZ" },
|
|
24
|
+
{ name: "Benin", dialCode: "+229", isoCode: "BJ" },
|
|
25
|
+
{ name: "Bermuda", dialCode: "+1", isoCode: "BM" },
|
|
26
|
+
{ name: "Bhutan", dialCode: "+975", isoCode: "BT" },
|
|
27
|
+
{ name: "Bolivia", dialCode: "+591", isoCode: "BO" },
|
|
28
|
+
{ name: "Bosnia and Herzegovina", dialCode: "+387", isoCode: "BA" },
|
|
29
|
+
{ name: "Botswana", dialCode: "+267", isoCode: "BW" },
|
|
30
|
+
{ name: "Brazil", dialCode: "+55", isoCode: "BR" },
|
|
31
|
+
{ name: "British Indian Ocean Territory", dialCode: "+246", isoCode: "IO" },
|
|
32
|
+
{ name: "British Virgin Islands", dialCode: "+1", isoCode: "VG" },
|
|
33
|
+
{ name: "Brunei", dialCode: "+673", isoCode: "BN" },
|
|
34
|
+
{ name: "Bulgaria", dialCode: "+359", isoCode: "BG" },
|
|
35
|
+
{ name: "Burkina Faso", dialCode: "+226", isoCode: "BF" },
|
|
36
|
+
{ name: "Burundi", dialCode: "+257", isoCode: "BI" },
|
|
37
|
+
{ name: "Cabo Verde", dialCode: "+238", isoCode: "CV" },
|
|
38
|
+
{ name: "Cambodia", dialCode: "+855", isoCode: "KH" },
|
|
39
|
+
{ name: "Cameroon", dialCode: "+237", isoCode: "CM" },
|
|
40
|
+
{ name: "Canada", dialCode: "+1", isoCode: "CA" },
|
|
41
|
+
{ name: "Caribbean Netherlands", dialCode: "+599", isoCode: "BQ" },
|
|
42
|
+
{ name: "Cayman Islands", dialCode: "+1", isoCode: "KY" },
|
|
43
|
+
{ name: "Central African Republic", dialCode: "+236", isoCode: "CF" },
|
|
44
|
+
{ name: "Chad", dialCode: "+235", isoCode: "TD" },
|
|
45
|
+
{ name: "Chile", dialCode: "+56", isoCode: "CL" },
|
|
46
|
+
{ name: "China", dialCode: "+86", isoCode: "CN" },
|
|
47
|
+
{ name: "Christmas Island", dialCode: "+61", isoCode: "CX" },
|
|
48
|
+
{ name: "Cocos Islands", dialCode: "+61", isoCode: "CC" },
|
|
49
|
+
{ name: "Colombia", dialCode: "+57", isoCode: "CO" },
|
|
50
|
+
{ name: "Comoros", dialCode: "+269", isoCode: "KM" },
|
|
51
|
+
{ name: "Cook Islands", dialCode: "+682", isoCode: "CK" },
|
|
52
|
+
{ name: "Costa Rica", dialCode: "+506", isoCode: "CR" },
|
|
53
|
+
{ name: "Côte d'Ivoire", dialCode: "+225", isoCode: "CI" },
|
|
54
|
+
{ name: "Croatia", dialCode: "+385", isoCode: "HR" },
|
|
55
|
+
{ name: "Cuba", dialCode: "+53", isoCode: "CU" },
|
|
56
|
+
{ name: "Curaçao", dialCode: "+599", isoCode: "CW" },
|
|
57
|
+
{ name: "Cyprus", dialCode: "+357", isoCode: "CY" },
|
|
58
|
+
{ name: "Czechia", dialCode: "+420", isoCode: "CZ" },
|
|
59
|
+
{ name: "Democratic Republic of the Congo", dialCode: "+243", isoCode: "CD" },
|
|
60
|
+
{ name: "Denmark", dialCode: "+45", isoCode: "DK" },
|
|
61
|
+
{ name: "Djibouti", dialCode: "+253", isoCode: "DJ" },
|
|
62
|
+
{ name: "Dominica", dialCode: "+1", isoCode: "DM" },
|
|
63
|
+
{ name: "Dominican Republic", dialCode: "+1", isoCode: "DO" },
|
|
64
|
+
{ name: "Ecuador", dialCode: "+593", isoCode: "EC" },
|
|
65
|
+
{ name: "Egypt", dialCode: "+20", isoCode: "EG" },
|
|
66
|
+
{ name: "El Salvador", dialCode: "+503", isoCode: "SV" },
|
|
67
|
+
{ name: "Equatorial Guinea", dialCode: "+240", isoCode: "GQ" },
|
|
68
|
+
{ name: "Eritrea", dialCode: "+291", isoCode: "ER" },
|
|
69
|
+
{ name: "Estonia", dialCode: "+372", isoCode: "EE" },
|
|
70
|
+
{ name: "Eswatini", dialCode: "+268", isoCode: "SZ" },
|
|
71
|
+
{ name: "Ethiopia", dialCode: "+251", isoCode: "ET" },
|
|
72
|
+
{ name: "Falkland Islands", dialCode: "+500", isoCode: "FK" },
|
|
73
|
+
{ name: "Faroe Islands", dialCode: "+298", isoCode: "FO" },
|
|
74
|
+
{ name: "Fiji", dialCode: "+679", isoCode: "FJ" },
|
|
75
|
+
{ name: "Finland", dialCode: "+358", isoCode: "FI" },
|
|
76
|
+
{ name: "France", dialCode: "+33", isoCode: "FR" },
|
|
77
|
+
{ name: "French Guiana", dialCode: "+594", isoCode: "GF" },
|
|
78
|
+
{ name: "French Polynesia", dialCode: "+689", isoCode: "PF" },
|
|
79
|
+
{ name: "Gabon", dialCode: "+241", isoCode: "GA" },
|
|
80
|
+
{ name: "Gambia", dialCode: "+220", isoCode: "GM" },
|
|
81
|
+
{ name: "Georgia", dialCode: "+995", isoCode: "GE" },
|
|
82
|
+
{ name: "Germany", dialCode: "+49", isoCode: "DE" },
|
|
83
|
+
{ name: "Ghana", dialCode: "+233", isoCode: "GH" },
|
|
84
|
+
{ name: "Gibraltar", dialCode: "+350", isoCode: "GI" },
|
|
85
|
+
{ name: "Greece", dialCode: "+30", isoCode: "GR" },
|
|
86
|
+
{ name: "Greenland", dialCode: "+299", isoCode: "GL" },
|
|
87
|
+
{ name: "Grenada", dialCode: "+1", isoCode: "GD" },
|
|
88
|
+
{ name: "Guadeloupe", dialCode: "+590", isoCode: "GP" },
|
|
89
|
+
{ name: "Guam", dialCode: "+1", isoCode: "GU" },
|
|
90
|
+
{ name: "Guatemala", dialCode: "+502", isoCode: "GT" },
|
|
91
|
+
{ name: "Guernsey", dialCode: "+44", isoCode: "GG" },
|
|
92
|
+
{ name: "Guinea", dialCode: "+224", isoCode: "GN" },
|
|
93
|
+
{ name: "Guinea-Bissau", dialCode: "+245", isoCode: "GW" },
|
|
94
|
+
{ name: "Guyana", dialCode: "+592", isoCode: "GY" },
|
|
95
|
+
{ name: "Haiti", dialCode: "+509", isoCode: "HT" },
|
|
96
|
+
{ name: "Honduras", dialCode: "+504", isoCode: "HN" },
|
|
97
|
+
{ name: "Hong Kong", dialCode: "+852", isoCode: "HK" },
|
|
98
|
+
{ name: "Hungary", dialCode: "+36", isoCode: "HU" },
|
|
99
|
+
{ name: "Iceland", dialCode: "+354", isoCode: "IS" },
|
|
100
|
+
{ name: "India", dialCode: "+91", isoCode: "IN" },
|
|
101
|
+
{ name: "Indonesia", dialCode: "+62", isoCode: "ID" },
|
|
102
|
+
{ name: "Iran", dialCode: "+98", isoCode: "IR" },
|
|
103
|
+
{ name: "Iraq", dialCode: "+964", isoCode: "IQ" },
|
|
104
|
+
{ name: "Ireland", dialCode: "+353", isoCode: "IE" },
|
|
105
|
+
{ name: "Isle of Man", dialCode: "+44", isoCode: "IM" },
|
|
106
|
+
{ name: "Israel", dialCode: "+972", isoCode: "IL" },
|
|
107
|
+
{ name: "Italy", dialCode: "+39", isoCode: "IT" },
|
|
108
|
+
{ name: "Jamaica", dialCode: "+1", isoCode: "JM" },
|
|
109
|
+
{ name: "Japan", dialCode: "+81", isoCode: "JP" },
|
|
110
|
+
{ name: "Jersey", dialCode: "+44", isoCode: "JE" },
|
|
111
|
+
{ name: "Jordan", dialCode: "+962", isoCode: "JO" },
|
|
112
|
+
{ name: "Kazakhstan", dialCode: "+7", isoCode: "KZ" },
|
|
113
|
+
{ name: "Kenya", dialCode: "+254", isoCode: "KE" },
|
|
114
|
+
{ name: "Kiribati", dialCode: "+686", isoCode: "KI" },
|
|
115
|
+
{ name: "Kosovo", dialCode: "+383", isoCode: "XK" },
|
|
116
|
+
{ name: "Kuwait", dialCode: "+965", isoCode: "KW" },
|
|
117
|
+
{ name: "Kyrgyzstan", dialCode: "+996", isoCode: "KG" },
|
|
118
|
+
{ name: "Laos", dialCode: "+856", isoCode: "LA" },
|
|
119
|
+
{ name: "Latvia", dialCode: "+371", isoCode: "LV" },
|
|
120
|
+
{ name: "Lebanon", dialCode: "+961", isoCode: "LB" },
|
|
121
|
+
{ name: "Lesotho", dialCode: "+266", isoCode: "LS" },
|
|
122
|
+
{ name: "Liberia", dialCode: "+231", isoCode: "LR" },
|
|
123
|
+
{ name: "Libya", dialCode: "+218", isoCode: "LY" },
|
|
124
|
+
{ name: "Liechtenstein", dialCode: "+423", isoCode: "LI" },
|
|
125
|
+
{ name: "Lithuania", dialCode: "+370", isoCode: "LT" },
|
|
126
|
+
{ name: "Luxembourg", dialCode: "+352", isoCode: "LU" },
|
|
127
|
+
{ name: "Macao", dialCode: "+853", isoCode: "MO" },
|
|
128
|
+
{ name: "Madagascar", dialCode: "+261", isoCode: "MG" },
|
|
129
|
+
{ name: "Malawi", dialCode: "+265", isoCode: "MW" },
|
|
130
|
+
{ name: "Malaysia", dialCode: "+60", isoCode: "MY" },
|
|
131
|
+
{ name: "Maldives", dialCode: "+960", isoCode: "MV" },
|
|
132
|
+
{ name: "Mali", dialCode: "+223", isoCode: "ML" },
|
|
133
|
+
{ name: "Malta", dialCode: "+356", isoCode: "MT" },
|
|
134
|
+
{ name: "Marshall Islands", dialCode: "+692", isoCode: "MH" },
|
|
135
|
+
{ name: "Martinique", dialCode: "+596", isoCode: "MQ" },
|
|
136
|
+
{ name: "Mauritania", dialCode: "+222", isoCode: "MR" },
|
|
137
|
+
{ name: "Mauritius", dialCode: "+230", isoCode: "MU" },
|
|
138
|
+
{ name: "Mayotte", dialCode: "+262", isoCode: "YT" },
|
|
139
|
+
{ name: "Mexico", dialCode: "+52", isoCode: "MX" },
|
|
140
|
+
{ name: "Micronesia", dialCode: "+691", isoCode: "FM" },
|
|
141
|
+
{ name: "Moldova", dialCode: "+373", isoCode: "MD" },
|
|
142
|
+
{ name: "Monaco", dialCode: "+377", isoCode: "MC" },
|
|
143
|
+
{ name: "Mongolia", dialCode: "+976", isoCode: "MN" },
|
|
144
|
+
{ name: "Montenegro", dialCode: "+382", isoCode: "ME" },
|
|
145
|
+
{ name: "Montserrat", dialCode: "+1", isoCode: "MS" },
|
|
146
|
+
{ name: "Morocco", dialCode: "+212", isoCode: "MA" },
|
|
147
|
+
{ name: "Mozambique", dialCode: "+258", isoCode: "MZ" },
|
|
148
|
+
{ name: "Myanmar", dialCode: "+95", isoCode: "MM" },
|
|
149
|
+
{ name: "Namibia", dialCode: "+264", isoCode: "NA" },
|
|
150
|
+
{ name: "Nauru", dialCode: "+674", isoCode: "NR" },
|
|
151
|
+
{ name: "Nepal", dialCode: "+977", isoCode: "NP" },
|
|
152
|
+
{ name: "Netherlands", dialCode: "+31", isoCode: "NL" },
|
|
153
|
+
{ name: "New Caledonia", dialCode: "+687", isoCode: "NC" },
|
|
154
|
+
{ name: "New Zealand", dialCode: "+64", isoCode: "NZ" },
|
|
155
|
+
{ name: "Nicaragua", dialCode: "+505", isoCode: "NI" },
|
|
156
|
+
{ name: "Niger", dialCode: "+227", isoCode: "NE" },
|
|
157
|
+
{ name: "Nigeria", dialCode: "+234", isoCode: "NG" },
|
|
158
|
+
{ name: "Niue", dialCode: "+683", isoCode: "NU" },
|
|
159
|
+
{ name: "Norfolk Island", dialCode: "+672", isoCode: "NF" },
|
|
160
|
+
{ name: "North Korea", dialCode: "+850", isoCode: "KP" },
|
|
161
|
+
{ name: "North Macedonia", dialCode: "+389", isoCode: "MK" },
|
|
162
|
+
{ name: "Northern Mariana Islands", dialCode: "+1", isoCode: "MP" },
|
|
163
|
+
{ name: "Norway", dialCode: "+47", isoCode: "NO" },
|
|
164
|
+
{ name: "Oman", dialCode: "+968", isoCode: "OM" },
|
|
165
|
+
{ name: "Pakistan", dialCode: "+92", isoCode: "PK" },
|
|
166
|
+
{ name: "Palau", dialCode: "+680", isoCode: "PW" },
|
|
167
|
+
{ name: "Palestine", dialCode: "+970", isoCode: "PS" },
|
|
168
|
+
{ name: "Panama", dialCode: "+507", isoCode: "PA" },
|
|
169
|
+
{ name: "Papua New Guinea", dialCode: "+675", isoCode: "PG" },
|
|
170
|
+
{ name: "Paraguay", dialCode: "+595", isoCode: "PY" },
|
|
171
|
+
{ name: "Peru", dialCode: "+51", isoCode: "PE" },
|
|
172
|
+
{ name: "Philippines", dialCode: "+63", isoCode: "PH" },
|
|
173
|
+
{ name: "Poland", dialCode: "+48", isoCode: "PL" },
|
|
174
|
+
{ name: "Portugal", dialCode: "+351", isoCode: "PT" },
|
|
175
|
+
{ name: "Puerto Rico", dialCode: "+1", isoCode: "PR" },
|
|
176
|
+
{ name: "Qatar", dialCode: "+974", isoCode: "QA" },
|
|
177
|
+
{ name: "Republic of the Congo", dialCode: "+242", isoCode: "CG" },
|
|
178
|
+
{ name: "Réunion", dialCode: "+262", isoCode: "RE" },
|
|
179
|
+
{ name: "Romania", dialCode: "+40", isoCode: "RO" },
|
|
180
|
+
{ name: "Russia", dialCode: "+7", isoCode: "RU" },
|
|
181
|
+
{ name: "Rwanda", dialCode: "+250", isoCode: "RW" },
|
|
182
|
+
{ name: "Saint Barthélemy", dialCode: "+590", isoCode: "BL" },
|
|
183
|
+
{ name: "Saint Helena", dialCode: "+290", isoCode: "SH" },
|
|
184
|
+
{ name: "Saint Kitts and Nevis", dialCode: "+1", isoCode: "KN" },
|
|
185
|
+
{ name: "Saint Lucia", dialCode: "+1", isoCode: "LC" },
|
|
186
|
+
{ name: "Saint Martin", dialCode: "+590", isoCode: "MF" },
|
|
187
|
+
{ name: "Saint Pierre and Miquelon", dialCode: "+508", isoCode: "PM" },
|
|
188
|
+
{ name: "Saint Vincent and the Grenadines", dialCode: "+1", isoCode: "VC" },
|
|
189
|
+
{ name: "Samoa", dialCode: "+685", isoCode: "WS" },
|
|
190
|
+
{ name: "San Marino", dialCode: "+378", isoCode: "SM" },
|
|
191
|
+
{ name: "São Tomé and Príncipe", dialCode: "+239", isoCode: "ST" },
|
|
192
|
+
{ name: "Saudi Arabia", dialCode: "+966", isoCode: "SA" },
|
|
193
|
+
{ name: "Senegal", dialCode: "+221", isoCode: "SN" },
|
|
194
|
+
{ name: "Serbia", dialCode: "+381", isoCode: "RS" },
|
|
195
|
+
{ name: "Seychelles", dialCode: "+248", isoCode: "SC" },
|
|
196
|
+
{ name: "Sierra Leone", dialCode: "+232", isoCode: "SL" },
|
|
197
|
+
{ name: "Singapore", dialCode: "+65", isoCode: "SG" },
|
|
198
|
+
{ name: "Sint Maarten", dialCode: "+1", isoCode: "SX" },
|
|
199
|
+
{ name: "Slovakia", dialCode: "+421", isoCode: "SK" },
|
|
200
|
+
{ name: "Slovenia", dialCode: "+386", isoCode: "SI" },
|
|
201
|
+
{ name: "Solomon Islands", dialCode: "+677", isoCode: "SB" },
|
|
202
|
+
{ name: "Somalia", dialCode: "+252", isoCode: "SO" },
|
|
203
|
+
{ name: "South Africa", dialCode: "+27", isoCode: "ZA" },
|
|
204
|
+
{ name: "South Korea", dialCode: "+82", isoCode: "KR" },
|
|
205
|
+
{ name: "South Sudan", dialCode: "+211", isoCode: "SS" },
|
|
206
|
+
{ name: "Spain", dialCode: "+34", isoCode: "ES" },
|
|
207
|
+
{ name: "Sri Lanka", dialCode: "+94", isoCode: "LK" },
|
|
208
|
+
{ name: "Sudan", dialCode: "+249", isoCode: "SD" },
|
|
209
|
+
{ name: "Suriname", dialCode: "+597", isoCode: "SR" },
|
|
210
|
+
{ name: "Svalbard and Jan Mayen", dialCode: "+47", isoCode: "SJ" },
|
|
211
|
+
{ name: "Sweden", dialCode: "+46", isoCode: "SE" },
|
|
212
|
+
{ name: "Switzerland", dialCode: "+41", isoCode: "CH" },
|
|
213
|
+
{ name: "Syria", dialCode: "+963", isoCode: "SY" },
|
|
214
|
+
{ name: "Taiwan", dialCode: "+886", isoCode: "TW" },
|
|
215
|
+
{ name: "Tajikistan", dialCode: "+992", isoCode: "TJ" },
|
|
216
|
+
{ name: "Tanzania", dialCode: "+255", isoCode: "TZ" },
|
|
217
|
+
{ name: "Thailand", dialCode: "+66", isoCode: "TH" },
|
|
218
|
+
{ name: "Timor-Leste", dialCode: "+670", isoCode: "TL" },
|
|
219
|
+
{ name: "Togo", dialCode: "+228", isoCode: "TG" },
|
|
220
|
+
{ name: "Tokelau", dialCode: "+690", isoCode: "TK" },
|
|
221
|
+
{ name: "Tonga", dialCode: "+676", isoCode: "TO" },
|
|
222
|
+
{ name: "Trinidad and Tobago", dialCode: "+1", isoCode: "TT" },
|
|
223
|
+
{ name: "Tunisia", dialCode: "+216", isoCode: "TN" },
|
|
224
|
+
{ name: "Turkey", dialCode: "+90", isoCode: "TR" },
|
|
225
|
+
{ name: "Turkmenistan", dialCode: "+993", isoCode: "TM" },
|
|
226
|
+
{ name: "Turks and Caicos Islands", dialCode: "+1", isoCode: "TC" },
|
|
227
|
+
{ name: "Tuvalu", dialCode: "+688", isoCode: "TV" },
|
|
228
|
+
{ name: "Uganda", dialCode: "+256", isoCode: "UG" },
|
|
229
|
+
{ name: "Ukraine", dialCode: "+380", isoCode: "UA" },
|
|
230
|
+
{ name: "United Arab Emirates", dialCode: "+971", isoCode: "AE" },
|
|
231
|
+
{ name: "United Kingdom", dialCode: "+44", isoCode: "GB" },
|
|
232
|
+
{ name: "United States", dialCode: "+1", isoCode: "US" },
|
|
233
|
+
{ name: "United States Virgin Islands", dialCode: "+1", isoCode: "VI" },
|
|
234
|
+
{ name: "Uruguay", dialCode: "+598", isoCode: "UY" },
|
|
235
|
+
{ name: "Uzbekistan", dialCode: "+998", isoCode: "UZ" },
|
|
236
|
+
{ name: "Vanuatu", dialCode: "+678", isoCode: "VU" },
|
|
237
|
+
{ name: "Vatican City", dialCode: "+379", isoCode: "VA" },
|
|
238
|
+
{ name: "Venezuela", dialCode: "+58", isoCode: "VE" },
|
|
239
|
+
{ name: "Vietnam", dialCode: "+84", isoCode: "VN" },
|
|
240
|
+
{ name: "Wallis and Futuna", dialCode: "+681", isoCode: "WF" },
|
|
241
|
+
{ name: "Western Sahara", dialCode: "+212", isoCode: "EH" },
|
|
242
|
+
{ name: "Yemen", dialCode: "+967", isoCode: "YE" },
|
|
243
|
+
{ name: "Zambia", dialCode: "+260", isoCode: "ZM" },
|
|
244
|
+
{ name: "Zimbabwe", dialCode: "+263", isoCode: "ZW" }
|
|
245
|
+
];
|
|
246
|
+
const REGIONAL_INDICATOR_OFFSET = 127397;
|
|
247
|
+
const isoCodeToFlagEmoji = (isoCode) => isoCode.toUpperCase().split("").map((char) => String.fromCodePoint(REGIONAL_INDICATOR_OFFSET + (char.codePointAt(0) ?? 0))).join("");
|
|
248
|
+
const defaultCountries = RAW_COUNTRIES.map((country) => ({
|
|
249
|
+
...country,
|
|
250
|
+
flag: isoCodeToFlagEmoji(country.isoCode)
|
|
251
|
+
})).sort((a, b) => a.name.localeCompare(b.name));
|
|
252
|
+
|
|
253
|
+
export { defaultCountries };
|
|
254
|
+
//# sourceMappingURL=countries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countries.js","sources":["../../../src/components/PhoneInput/countries.ts"],"sourcesContent":["export type PhoneCountry = {\n /** English country/territory name. */\n name: string\n /** E.164 calling code, including the leading \"+\", e.g. \"+34\". */\n dialCode: string\n /** ISO 3166-1 alpha-2 code, e.g. \"ES\". */\n isoCode: string\n /** Flag emoji derived from the ISO code. */\n flag: string\n}\n\ntype RawCountry = Omit<PhoneCountry, 'flag'>\n\nconst RAW_COUNTRIES: Array<RawCountry> = [\n { name: 'Afghanistan', dialCode: '+93', isoCode: 'AF' },\n { name: 'Åland Islands', dialCode: '+358', isoCode: 'AX' },\n { name: 'Albania', dialCode: '+355', isoCode: 'AL' },\n { name: 'Algeria', dialCode: '+213', isoCode: 'DZ' },\n { name: 'American Samoa', dialCode: '+1', isoCode: 'AS' },\n { name: 'Andorra', dialCode: '+376', isoCode: 'AD' },\n { name: 'Angola', dialCode: '+244', isoCode: 'AO' },\n { name: 'Anguilla', dialCode: '+1', isoCode: 'AI' },\n { name: 'Antigua and Barbuda', dialCode: '+1', isoCode: 'AG' },\n { name: 'Argentina', dialCode: '+54', isoCode: 'AR' },\n { name: 'Armenia', dialCode: '+374', isoCode: 'AM' },\n { name: 'Aruba', dialCode: '+297', isoCode: 'AW' },\n { name: 'Australia', dialCode: '+61', isoCode: 'AU' },\n { name: 'Austria', dialCode: '+43', isoCode: 'AT' },\n { name: 'Azerbaijan', dialCode: '+994', isoCode: 'AZ' },\n { name: 'Bahamas', dialCode: '+1', isoCode: 'BS' },\n { name: 'Bahrain', dialCode: '+973', isoCode: 'BH' },\n { name: 'Bangladesh', dialCode: '+880', isoCode: 'BD' },\n { name: 'Barbados', dialCode: '+1', isoCode: 'BB' },\n { name: 'Belarus', dialCode: '+375', isoCode: 'BY' },\n { name: 'Belgium', dialCode: '+32', isoCode: 'BE' },\n { name: 'Belize', dialCode: '+501', isoCode: 'BZ' },\n { name: 'Benin', dialCode: '+229', isoCode: 'BJ' },\n { name: 'Bermuda', dialCode: '+1', isoCode: 'BM' },\n { name: 'Bhutan', dialCode: '+975', isoCode: 'BT' },\n { name: 'Bolivia', dialCode: '+591', isoCode: 'BO' },\n { name: 'Bosnia and Herzegovina', dialCode: '+387', isoCode: 'BA' },\n { name: 'Botswana', dialCode: '+267', isoCode: 'BW' },\n { name: 'Brazil', dialCode: '+55', isoCode: 'BR' },\n { name: 'British Indian Ocean Territory', dialCode: '+246', isoCode: 'IO' },\n { name: 'British Virgin Islands', dialCode: '+1', isoCode: 'VG' },\n { name: 'Brunei', dialCode: '+673', isoCode: 'BN' },\n { name: 'Bulgaria', dialCode: '+359', isoCode: 'BG' },\n { name: 'Burkina Faso', dialCode: '+226', isoCode: 'BF' },\n { name: 'Burundi', dialCode: '+257', isoCode: 'BI' },\n { name: 'Cabo Verde', dialCode: '+238', isoCode: 'CV' },\n { name: 'Cambodia', dialCode: '+855', isoCode: 'KH' },\n { name: 'Cameroon', dialCode: '+237', isoCode: 'CM' },\n { name: 'Canada', dialCode: '+1', isoCode: 'CA' },\n { name: 'Caribbean Netherlands', dialCode: '+599', isoCode: 'BQ' },\n { name: 'Cayman Islands', dialCode: '+1', isoCode: 'KY' },\n { name: 'Central African Republic', dialCode: '+236', isoCode: 'CF' },\n { name: 'Chad', dialCode: '+235', isoCode: 'TD' },\n { name: 'Chile', dialCode: '+56', isoCode: 'CL' },\n { name: 'China', dialCode: '+86', isoCode: 'CN' },\n { name: 'Christmas Island', dialCode: '+61', isoCode: 'CX' },\n { name: 'Cocos Islands', dialCode: '+61', isoCode: 'CC' },\n { name: 'Colombia', dialCode: '+57', isoCode: 'CO' },\n { name: 'Comoros', dialCode: '+269', isoCode: 'KM' },\n { name: 'Cook Islands', dialCode: '+682', isoCode: 'CK' },\n { name: 'Costa Rica', dialCode: '+506', isoCode: 'CR' },\n { name: \"Côte d'Ivoire\", dialCode: '+225', isoCode: 'CI' },\n { name: 'Croatia', dialCode: '+385', isoCode: 'HR' },\n { name: 'Cuba', dialCode: '+53', isoCode: 'CU' },\n { name: 'Curaçao', dialCode: '+599', isoCode: 'CW' },\n { name: 'Cyprus', dialCode: '+357', isoCode: 'CY' },\n { name: 'Czechia', dialCode: '+420', isoCode: 'CZ' },\n { name: 'Democratic Republic of the Congo', dialCode: '+243', isoCode: 'CD' },\n { name: 'Denmark', dialCode: '+45', isoCode: 'DK' },\n { name: 'Djibouti', dialCode: '+253', isoCode: 'DJ' },\n { name: 'Dominica', dialCode: '+1', isoCode: 'DM' },\n { name: 'Dominican Republic', dialCode: '+1', isoCode: 'DO' },\n { name: 'Ecuador', dialCode: '+593', isoCode: 'EC' },\n { name: 'Egypt', dialCode: '+20', isoCode: 'EG' },\n { name: 'El Salvador', dialCode: '+503', isoCode: 'SV' },\n { name: 'Equatorial Guinea', dialCode: '+240', isoCode: 'GQ' },\n { name: 'Eritrea', dialCode: '+291', isoCode: 'ER' },\n { name: 'Estonia', dialCode: '+372', isoCode: 'EE' },\n { name: 'Eswatini', dialCode: '+268', isoCode: 'SZ' },\n { name: 'Ethiopia', dialCode: '+251', isoCode: 'ET' },\n { name: 'Falkland Islands', dialCode: '+500', isoCode: 'FK' },\n { name: 'Faroe Islands', dialCode: '+298', isoCode: 'FO' },\n { name: 'Fiji', dialCode: '+679', isoCode: 'FJ' },\n { name: 'Finland', dialCode: '+358', isoCode: 'FI' },\n { name: 'France', dialCode: '+33', isoCode: 'FR' },\n { name: 'French Guiana', dialCode: '+594', isoCode: 'GF' },\n { name: 'French Polynesia', dialCode: '+689', isoCode: 'PF' },\n { name: 'Gabon', dialCode: '+241', isoCode: 'GA' },\n { name: 'Gambia', dialCode: '+220', isoCode: 'GM' },\n { name: 'Georgia', dialCode: '+995', isoCode: 'GE' },\n { name: 'Germany', dialCode: '+49', isoCode: 'DE' },\n { name: 'Ghana', dialCode: '+233', isoCode: 'GH' },\n { name: 'Gibraltar', dialCode: '+350', isoCode: 'GI' },\n { name: 'Greece', dialCode: '+30', isoCode: 'GR' },\n { name: 'Greenland', dialCode: '+299', isoCode: 'GL' },\n { name: 'Grenada', dialCode: '+1', isoCode: 'GD' },\n { name: 'Guadeloupe', dialCode: '+590', isoCode: 'GP' },\n { name: 'Guam', dialCode: '+1', isoCode: 'GU' },\n { name: 'Guatemala', dialCode: '+502', isoCode: 'GT' },\n { name: 'Guernsey', dialCode: '+44', isoCode: 'GG' },\n { name: 'Guinea', dialCode: '+224', isoCode: 'GN' },\n { name: 'Guinea-Bissau', dialCode: '+245', isoCode: 'GW' },\n { name: 'Guyana', dialCode: '+592', isoCode: 'GY' },\n { name: 'Haiti', dialCode: '+509', isoCode: 'HT' },\n { name: 'Honduras', dialCode: '+504', isoCode: 'HN' },\n { name: 'Hong Kong', dialCode: '+852', isoCode: 'HK' },\n { name: 'Hungary', dialCode: '+36', isoCode: 'HU' },\n { name: 'Iceland', dialCode: '+354', isoCode: 'IS' },\n { name: 'India', dialCode: '+91', isoCode: 'IN' },\n { name: 'Indonesia', dialCode: '+62', isoCode: 'ID' },\n { name: 'Iran', dialCode: '+98', isoCode: 'IR' },\n { name: 'Iraq', dialCode: '+964', isoCode: 'IQ' },\n { name: 'Ireland', dialCode: '+353', isoCode: 'IE' },\n { name: 'Isle of Man', dialCode: '+44', isoCode: 'IM' },\n { name: 'Israel', dialCode: '+972', isoCode: 'IL' },\n { name: 'Italy', dialCode: '+39', isoCode: 'IT' },\n { name: 'Jamaica', dialCode: '+1', isoCode: 'JM' },\n { name: 'Japan', dialCode: '+81', isoCode: 'JP' },\n { name: 'Jersey', dialCode: '+44', isoCode: 'JE' },\n { name: 'Jordan', dialCode: '+962', isoCode: 'JO' },\n { name: 'Kazakhstan', dialCode: '+7', isoCode: 'KZ' },\n { name: 'Kenya', dialCode: '+254', isoCode: 'KE' },\n { name: 'Kiribati', dialCode: '+686', isoCode: 'KI' },\n { name: 'Kosovo', dialCode: '+383', isoCode: 'XK' },\n { name: 'Kuwait', dialCode: '+965', isoCode: 'KW' },\n { name: 'Kyrgyzstan', dialCode: '+996', isoCode: 'KG' },\n { name: 'Laos', dialCode: '+856', isoCode: 'LA' },\n { name: 'Latvia', dialCode: '+371', isoCode: 'LV' },\n { name: 'Lebanon', dialCode: '+961', isoCode: 'LB' },\n { name: 'Lesotho', dialCode: '+266', isoCode: 'LS' },\n { name: 'Liberia', dialCode: '+231', isoCode: 'LR' },\n { name: 'Libya', dialCode: '+218', isoCode: 'LY' },\n { name: 'Liechtenstein', dialCode: '+423', isoCode: 'LI' },\n { name: 'Lithuania', dialCode: '+370', isoCode: 'LT' },\n { name: 'Luxembourg', dialCode: '+352', isoCode: 'LU' },\n { name: 'Macao', dialCode: '+853', isoCode: 'MO' },\n { name: 'Madagascar', dialCode: '+261', isoCode: 'MG' },\n { name: 'Malawi', dialCode: '+265', isoCode: 'MW' },\n { name: 'Malaysia', dialCode: '+60', isoCode: 'MY' },\n { name: 'Maldives', dialCode: '+960', isoCode: 'MV' },\n { name: 'Mali', dialCode: '+223', isoCode: 'ML' },\n { name: 'Malta', dialCode: '+356', isoCode: 'MT' },\n { name: 'Marshall Islands', dialCode: '+692', isoCode: 'MH' },\n { name: 'Martinique', dialCode: '+596', isoCode: 'MQ' },\n { name: 'Mauritania', dialCode: '+222', isoCode: 'MR' },\n { name: 'Mauritius', dialCode: '+230', isoCode: 'MU' },\n { name: 'Mayotte', dialCode: '+262', isoCode: 'YT' },\n { name: 'Mexico', dialCode: '+52', isoCode: 'MX' },\n { name: 'Micronesia', dialCode: '+691', isoCode: 'FM' },\n { name: 'Moldova', dialCode: '+373', isoCode: 'MD' },\n { name: 'Monaco', dialCode: '+377', isoCode: 'MC' },\n { name: 'Mongolia', dialCode: '+976', isoCode: 'MN' },\n { name: 'Montenegro', dialCode: '+382', isoCode: 'ME' },\n { name: 'Montserrat', dialCode: '+1', isoCode: 'MS' },\n { name: 'Morocco', dialCode: '+212', isoCode: 'MA' },\n { name: 'Mozambique', dialCode: '+258', isoCode: 'MZ' },\n { name: 'Myanmar', dialCode: '+95', isoCode: 'MM' },\n { name: 'Namibia', dialCode: '+264', isoCode: 'NA' },\n { name: 'Nauru', dialCode: '+674', isoCode: 'NR' },\n { name: 'Nepal', dialCode: '+977', isoCode: 'NP' },\n { name: 'Netherlands', dialCode: '+31', isoCode: 'NL' },\n { name: 'New Caledonia', dialCode: '+687', isoCode: 'NC' },\n { name: 'New Zealand', dialCode: '+64', isoCode: 'NZ' },\n { name: 'Nicaragua', dialCode: '+505', isoCode: 'NI' },\n { name: 'Niger', dialCode: '+227', isoCode: 'NE' },\n { name: 'Nigeria', dialCode: '+234', isoCode: 'NG' },\n { name: 'Niue', dialCode: '+683', isoCode: 'NU' },\n { name: 'Norfolk Island', dialCode: '+672', isoCode: 'NF' },\n { name: 'North Korea', dialCode: '+850', isoCode: 'KP' },\n { name: 'North Macedonia', dialCode: '+389', isoCode: 'MK' },\n { name: 'Northern Mariana Islands', dialCode: '+1', isoCode: 'MP' },\n { name: 'Norway', dialCode: '+47', isoCode: 'NO' },\n { name: 'Oman', dialCode: '+968', isoCode: 'OM' },\n { name: 'Pakistan', dialCode: '+92', isoCode: 'PK' },\n { name: 'Palau', dialCode: '+680', isoCode: 'PW' },\n { name: 'Palestine', dialCode: '+970', isoCode: 'PS' },\n { name: 'Panama', dialCode: '+507', isoCode: 'PA' },\n { name: 'Papua New Guinea', dialCode: '+675', isoCode: 'PG' },\n { name: 'Paraguay', dialCode: '+595', isoCode: 'PY' },\n { name: 'Peru', dialCode: '+51', isoCode: 'PE' },\n { name: 'Philippines', dialCode: '+63', isoCode: 'PH' },\n { name: 'Poland', dialCode: '+48', isoCode: 'PL' },\n { name: 'Portugal', dialCode: '+351', isoCode: 'PT' },\n { name: 'Puerto Rico', dialCode: '+1', isoCode: 'PR' },\n { name: 'Qatar', dialCode: '+974', isoCode: 'QA' },\n { name: 'Republic of the Congo', dialCode: '+242', isoCode: 'CG' },\n { name: 'Réunion', dialCode: '+262', isoCode: 'RE' },\n { name: 'Romania', dialCode: '+40', isoCode: 'RO' },\n { name: 'Russia', dialCode: '+7', isoCode: 'RU' },\n { name: 'Rwanda', dialCode: '+250', isoCode: 'RW' },\n { name: 'Saint Barthélemy', dialCode: '+590', isoCode: 'BL' },\n { name: 'Saint Helena', dialCode: '+290', isoCode: 'SH' },\n { name: 'Saint Kitts and Nevis', dialCode: '+1', isoCode: 'KN' },\n { name: 'Saint Lucia', dialCode: '+1', isoCode: 'LC' },\n { name: 'Saint Martin', dialCode: '+590', isoCode: 'MF' },\n { name: 'Saint Pierre and Miquelon', dialCode: '+508', isoCode: 'PM' },\n { name: 'Saint Vincent and the Grenadines', dialCode: '+1', isoCode: 'VC' },\n { name: 'Samoa', dialCode: '+685', isoCode: 'WS' },\n { name: 'San Marino', dialCode: '+378', isoCode: 'SM' },\n { name: 'São Tomé and Príncipe', dialCode: '+239', isoCode: 'ST' },\n { name: 'Saudi Arabia', dialCode: '+966', isoCode: 'SA' },\n { name: 'Senegal', dialCode: '+221', isoCode: 'SN' },\n { name: 'Serbia', dialCode: '+381', isoCode: 'RS' },\n { name: 'Seychelles', dialCode: '+248', isoCode: 'SC' },\n { name: 'Sierra Leone', dialCode: '+232', isoCode: 'SL' },\n { name: 'Singapore', dialCode: '+65', isoCode: 'SG' },\n { name: 'Sint Maarten', dialCode: '+1', isoCode: 'SX' },\n { name: 'Slovakia', dialCode: '+421', isoCode: 'SK' },\n { name: 'Slovenia', dialCode: '+386', isoCode: 'SI' },\n { name: 'Solomon Islands', dialCode: '+677', isoCode: 'SB' },\n { name: 'Somalia', dialCode: '+252', isoCode: 'SO' },\n { name: 'South Africa', dialCode: '+27', isoCode: 'ZA' },\n { name: 'South Korea', dialCode: '+82', isoCode: 'KR' },\n { name: 'South Sudan', dialCode: '+211', isoCode: 'SS' },\n { name: 'Spain', dialCode: '+34', isoCode: 'ES' },\n { name: 'Sri Lanka', dialCode: '+94', isoCode: 'LK' },\n { name: 'Sudan', dialCode: '+249', isoCode: 'SD' },\n { name: 'Suriname', dialCode: '+597', isoCode: 'SR' },\n { name: 'Svalbard and Jan Mayen', dialCode: '+47', isoCode: 'SJ' },\n { name: 'Sweden', dialCode: '+46', isoCode: 'SE' },\n { name: 'Switzerland', dialCode: '+41', isoCode: 'CH' },\n { name: 'Syria', dialCode: '+963', isoCode: 'SY' },\n { name: 'Taiwan', dialCode: '+886', isoCode: 'TW' },\n { name: 'Tajikistan', dialCode: '+992', isoCode: 'TJ' },\n { name: 'Tanzania', dialCode: '+255', isoCode: 'TZ' },\n { name: 'Thailand', dialCode: '+66', isoCode: 'TH' },\n { name: 'Timor-Leste', dialCode: '+670', isoCode: 'TL' },\n { name: 'Togo', dialCode: '+228', isoCode: 'TG' },\n { name: 'Tokelau', dialCode: '+690', isoCode: 'TK' },\n { name: 'Tonga', dialCode: '+676', isoCode: 'TO' },\n { name: 'Trinidad and Tobago', dialCode: '+1', isoCode: 'TT' },\n { name: 'Tunisia', dialCode: '+216', isoCode: 'TN' },\n { name: 'Turkey', dialCode: '+90', isoCode: 'TR' },\n { name: 'Turkmenistan', dialCode: '+993', isoCode: 'TM' },\n { name: 'Turks and Caicos Islands', dialCode: '+1', isoCode: 'TC' },\n { name: 'Tuvalu', dialCode: '+688', isoCode: 'TV' },\n { name: 'Uganda', dialCode: '+256', isoCode: 'UG' },\n { name: 'Ukraine', dialCode: '+380', isoCode: 'UA' },\n { name: 'United Arab Emirates', dialCode: '+971', isoCode: 'AE' },\n { name: 'United Kingdom', dialCode: '+44', isoCode: 'GB' },\n { name: 'United States', dialCode: '+1', isoCode: 'US' },\n { name: 'United States Virgin Islands', dialCode: '+1', isoCode: 'VI' },\n { name: 'Uruguay', dialCode: '+598', isoCode: 'UY' },\n { name: 'Uzbekistan', dialCode: '+998', isoCode: 'UZ' },\n { name: 'Vanuatu', dialCode: '+678', isoCode: 'VU' },\n { name: 'Vatican City', dialCode: '+379', isoCode: 'VA' },\n { name: 'Venezuela', dialCode: '+58', isoCode: 'VE' },\n { name: 'Vietnam', dialCode: '+84', isoCode: 'VN' },\n { name: 'Wallis and Futuna', dialCode: '+681', isoCode: 'WF' },\n { name: 'Western Sahara', dialCode: '+212', isoCode: 'EH' },\n { name: 'Yemen', dialCode: '+967', isoCode: 'YE' },\n { name: 'Zambia', dialCode: '+260', isoCode: 'ZM' },\n { name: 'Zimbabwe', dialCode: '+263', isoCode: 'ZW' },\n]\n\nconst REGIONAL_INDICATOR_OFFSET = 127397\n\nconst isoCodeToFlagEmoji = (isoCode: string): string =>\n isoCode\n .toUpperCase()\n .split('')\n .map((char) => String.fromCodePoint(REGIONAL_INDICATOR_OFFSET + (char.codePointAt(0) ?? 0)))\n .join('')\n\n/**\n * Canonical default country list for `PhoneInput`, ordered alphabetically by name.\n * Consumers can import and spread/filter this to extend or trim it, or replace it\n * entirely via the `countries` prop.\n */\nexport const defaultCountries: Array<PhoneCountry> = RAW_COUNTRIES.map((country) => ({\n ...country,\n flag: isoCodeToFlagEmoji(country.isoCode),\n})).sort((a, b) => a.name.localeCompare(b.name))\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TooltipContent } from '../Tooltip';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
export type SidebarSize = 'small' | 'medium' | 'big';
|
|
3
4
|
type SidebarContext = {
|
|
4
5
|
state: 'expanded' | 'collapsed';
|
|
5
6
|
open: boolean;
|
|
@@ -8,6 +9,7 @@ type SidebarContext = {
|
|
|
8
9
|
setOpenMobile: (open: boolean) => void;
|
|
9
10
|
isMobile: boolean;
|
|
10
11
|
toggleSidebar: () => void;
|
|
12
|
+
size: SidebarSize;
|
|
11
13
|
};
|
|
12
14
|
declare const SidebarContext: React.Context<SidebarContext | null>;
|
|
13
15
|
declare function useSidebar(): SidebarContext;
|
|
@@ -15,6 +17,7 @@ declare const SidebarProvider: React.ForwardRefExoticComponent<Omit<React.ClassA
|
|
|
15
17
|
defaultOpen?: boolean;
|
|
16
18
|
open?: boolean;
|
|
17
19
|
onOpenChange?: (open: boolean) => void;
|
|
20
|
+
size?: SidebarSize;
|
|
18
21
|
}, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
22
|
declare const SidebarRoot: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement> & {
|
|
20
23
|
side?: "left" | "right";
|
|
@@ -64,11 +67,16 @@ declare const SidebarGroupAction: React.ForwardRefExoticComponent<Omit<React.Cla
|
|
|
64
67
|
declare const SidebarGroupContent: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
65
68
|
declare const SidebarMenu: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "ref"> & React.RefAttributes<HTMLUListElement>>;
|
|
66
69
|
declare const SidebarMenuItem: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & React.RefAttributes<HTMLLIElement>>;
|
|
70
|
+
declare const sidebarMenuButtonVariants: (props?: ({
|
|
71
|
+
variant?: "element" | "navigation-item" | null | undefined;
|
|
72
|
+
size?: "big" | "small" | "medium" | null | undefined;
|
|
73
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
67
74
|
declare const SidebarMenuButton: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
68
75
|
asChild?: boolean;
|
|
69
76
|
isActive?: boolean;
|
|
70
77
|
tooltip?: string | React.ComponentProps<typeof TooltipContent>;
|
|
71
78
|
variant?: "navigation-item" | "element";
|
|
79
|
+
size?: SidebarSize;
|
|
72
80
|
}, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
73
81
|
declare const SidebarMenuAction: React.ForwardRefExoticComponent<Omit<React.ClassAttributes<HTMLButtonElement> & React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
74
82
|
asChild?: boolean;
|
|
@@ -84,4 +92,4 @@ declare const SidebarMenuSubButton: React.ForwardRefExoticComponent<Omit<React.C
|
|
|
84
92
|
asChild?: boolean;
|
|
85
93
|
isActive?: boolean;
|
|
86
94
|
}, "ref"> & React.RefAttributes<HTMLAnchorElement>>;
|
|
87
|
-
export { SidebarRoot, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, };
|
|
95
|
+
export { SidebarRoot, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, sidebarMenuButtonVariants, useSidebar, };
|
|
@@ -18,8 +18,12 @@ const SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
|
18
18
|
const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
19
19
|
const SIDEBAR_WIDTH = "16rem";
|
|
20
20
|
const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
21
|
-
const SIDEBAR_WIDTH_ICON = "3rem";
|
|
22
21
|
const SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
22
|
+
const SIDEBAR_WIDTH_ICON = {
|
|
23
|
+
small: "3rem",
|
|
24
|
+
medium: "3.5rem",
|
|
25
|
+
big: "4rem"
|
|
26
|
+
};
|
|
23
27
|
const SidebarContext = React.createContext(null);
|
|
24
28
|
function useSidebar() {
|
|
25
29
|
const context = React.useContext(SidebarContext);
|
|
@@ -28,64 +32,79 @@ function useSidebar() {
|
|
|
28
32
|
}
|
|
29
33
|
return context;
|
|
30
34
|
}
|
|
31
|
-
const SidebarProvider = React.forwardRef(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
toggleSidebar();
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
window.addEventListener("keydown", handleKeyDown);
|
|
59
|
-
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
60
|
-
}, [toggleSidebar]);
|
|
61
|
-
const state = open ? "expanded" : "collapsed";
|
|
62
|
-
const contextValue = React.useMemo(
|
|
63
|
-
() => ({
|
|
64
|
-
state,
|
|
65
|
-
open,
|
|
66
|
-
setOpen,
|
|
67
|
-
isMobile,
|
|
68
|
-
openMobile,
|
|
69
|
-
setOpenMobile,
|
|
70
|
-
toggleSidebar
|
|
71
|
-
}),
|
|
72
|
-
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
|
|
73
|
-
);
|
|
74
|
-
return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
|
|
75
|
-
"div",
|
|
76
|
-
{
|
|
77
|
-
style: {
|
|
78
|
-
"--sidebar-width": SIDEBAR_WIDTH,
|
|
79
|
-
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
80
|
-
...style
|
|
35
|
+
const SidebarProvider = React.forwardRef(
|
|
36
|
+
({
|
|
37
|
+
defaultOpen = true,
|
|
38
|
+
open: openProp,
|
|
39
|
+
onOpenChange: setOpenProp,
|
|
40
|
+
size = "small",
|
|
41
|
+
className,
|
|
42
|
+
style,
|
|
43
|
+
children,
|
|
44
|
+
...props
|
|
45
|
+
}, ref) => {
|
|
46
|
+
const isMobile = useIsMobile();
|
|
47
|
+
const [openMobile, setOpenMobile] = React.useState(false);
|
|
48
|
+
const [_open, _setOpen] = React.useState(defaultOpen);
|
|
49
|
+
const open = openProp ?? _open;
|
|
50
|
+
const setOpen = React.useCallback(
|
|
51
|
+
(value) => {
|
|
52
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
53
|
+
if (setOpenProp) {
|
|
54
|
+
setOpenProp(openState);
|
|
55
|
+
} else {
|
|
56
|
+
_setOpen(openState);
|
|
57
|
+
}
|
|
58
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
81
59
|
},
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
60
|
+
[setOpenProp, open]
|
|
61
|
+
);
|
|
62
|
+
const toggleSidebar = React.useCallback(() => {
|
|
63
|
+
isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
64
|
+
}, [isMobile, setOpen, setOpenMobile]);
|
|
65
|
+
React.useEffect(() => {
|
|
66
|
+
const handleKeyDown = (event) => {
|
|
67
|
+
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
toggleSidebar();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
73
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
74
|
+
}, [toggleSidebar]);
|
|
75
|
+
const state = open ? "expanded" : "collapsed";
|
|
76
|
+
const contextValue = React.useMemo(
|
|
77
|
+
() => ({
|
|
78
|
+
state,
|
|
79
|
+
open,
|
|
80
|
+
setOpen,
|
|
81
|
+
isMobile,
|
|
82
|
+
openMobile,
|
|
83
|
+
setOpenMobile,
|
|
84
|
+
toggleSidebar,
|
|
85
|
+
size
|
|
86
|
+
}),
|
|
87
|
+
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, size]
|
|
88
|
+
);
|
|
89
|
+
return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx(
|
|
90
|
+
"div",
|
|
91
|
+
{
|
|
92
|
+
style: {
|
|
93
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
94
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON[size],
|
|
95
|
+
...style
|
|
96
|
+
},
|
|
97
|
+
className: cn(
|
|
98
|
+
"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",
|
|
99
|
+
className
|
|
100
|
+
),
|
|
101
|
+
ref,
|
|
102
|
+
...props,
|
|
103
|
+
children
|
|
104
|
+
}
|
|
105
|
+
) }) });
|
|
106
|
+
}
|
|
107
|
+
);
|
|
89
108
|
SidebarProvider.displayName = "SidebarProvider";
|
|
90
109
|
const SidebarRoot = React.forwardRef(({ side = "left", variant = "default", className, children, ...props }, ref) => {
|
|
91
110
|
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
@@ -95,7 +114,7 @@ const SidebarRoot = React.forwardRef(({ side = "left", variant = "default", clas
|
|
|
95
114
|
{
|
|
96
115
|
"data-sidebar": "sidebar",
|
|
97
116
|
"data-mobile": "true",
|
|
98
|
-
className: "bg-sidebar text-sidebar-foreground w-
|
|
117
|
+
className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",
|
|
99
118
|
style: {
|
|
100
119
|
"--sidebar-width": SIDEBAR_WIDTH_MOBILE
|
|
101
120
|
},
|
|
@@ -123,8 +142,8 @@ const SidebarRoot = React.forwardRef(({ side = "left", variant = "default", clas
|
|
|
123
142
|
"div",
|
|
124
143
|
{
|
|
125
144
|
className: cn(
|
|
126
|
-
"relative w-
|
|
127
|
-
variant === "default" && "group-data-[state=collapsed]:w-
|
|
145
|
+
"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
|
|
146
|
+
variant === "default" && "group-data-[state=collapsed]:w-(--sidebar-width-icon)",
|
|
128
147
|
variant === "hidden" && "group-data-[state=collapsed]:w-0",
|
|
129
148
|
"group-data-[side=right]:rotate-180"
|
|
130
149
|
)
|
|
@@ -134,15 +153,15 @@ const SidebarRoot = React.forwardRef(({ side = "left", variant = "default", clas
|
|
|
134
153
|
"div",
|
|
135
154
|
{
|
|
136
155
|
className: cn(
|
|
137
|
-
"fixed inset-y-0 z-10 hidden h-svh w-
|
|
156
|
+
"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex",
|
|
138
157
|
side === "left" ? [
|
|
139
158
|
"left-0",
|
|
140
|
-
variant === "default" && "group-data-[state=collapsed]:w-
|
|
141
|
-
variant === "hidden" && "group-data-[state=collapsed]
|
|
159
|
+
variant === "default" && "group-data-[state=collapsed]:w-(--sidebar-width-icon)",
|
|
160
|
+
variant === "hidden" && "group-data-[state=collapsed]:-left-(--sidebar-width)"
|
|
142
161
|
] : [
|
|
143
162
|
"right-0",
|
|
144
|
-
variant === "default" && "group-data-[state=collapsed]:w-
|
|
145
|
-
variant === "hidden" && "group-data-[state=collapsed]
|
|
163
|
+
variant === "default" && "group-data-[state=collapsed]:w-(--sidebar-width-icon)",
|
|
164
|
+
variant === "hidden" && "group-data-[state=collapsed]:-right-(--sidebar-width)"
|
|
146
165
|
],
|
|
147
166
|
"group-data-[side=left]:border-r group-data-[side=right]:border-l",
|
|
148
167
|
className
|
|
@@ -191,8 +210,8 @@ const SidebarRail = React.forwardRef(
|
|
|
191
210
|
onClick: toggleSidebar,
|
|
192
211
|
title: "Toggle Sidebar",
|
|
193
212
|
className: cn(
|
|
194
|
-
"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-
|
|
195
|
-
"
|
|
213
|
+
"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 sm:flex",
|
|
214
|
+
"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
|
|
196
215
|
"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
|
|
197
216
|
"group-data-[variant=offcanvas]:hover:bg-sidebar group-data-[variant=offcanvas]:translate-x-0 group-data-[variant=offcanvas]:after:left-full",
|
|
198
217
|
"[[data-side=left][data-variant=offcanvas]_&]:-right-2",
|
|
@@ -336,47 +355,56 @@ const SidebarMenu = React.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
336
355
|
SidebarMenu.displayName = "SidebarMenu";
|
|
337
356
|
const SidebarMenuItem = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("li", { ref, "data-sidebar": "menu-item", className: cn("group/menu-item relative", className), ...props }));
|
|
338
357
|
SidebarMenuItem.displayName = "SidebarMenuItem";
|
|
339
|
-
const
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
variant: {
|
|
347
|
-
"navigation-item": "h-8",
|
|
348
|
-
element: "group-data-[state=collapsed]:!p-0"
|
|
349
|
-
}
|
|
358
|
+
const sidebarMenuButtonVariants = cva(
|
|
359
|
+
"peer/menu-button flex w-full text-sm hover:bg-sidebar-accent hover:text-sidebar-accent-foreground items-center overflow-hidden rounded-md text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=expanded]:hover:bg-sidebar-accent data-[state=expanded]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:shrink-0",
|
|
360
|
+
{
|
|
361
|
+
variants: {
|
|
362
|
+
variant: {
|
|
363
|
+
"navigation-item": "",
|
|
364
|
+
element: "group-data-[state=collapsed]:!p-0"
|
|
350
365
|
},
|
|
351
|
-
|
|
352
|
-
|
|
366
|
+
size: {
|
|
367
|
+
small: "h-8 gap-2 p-2 [&>svg]:size-4",
|
|
368
|
+
medium: "h-10 gap-3 p-2.5 [&>svg]:size-5",
|
|
369
|
+
big: "h-12 gap-4 p-3 [&>svg]:size-6"
|
|
353
370
|
}
|
|
371
|
+
},
|
|
372
|
+
defaultVariants: {
|
|
373
|
+
variant: "navigation-item",
|
|
374
|
+
size: "small"
|
|
354
375
|
}
|
|
355
|
-
);
|
|
356
|
-
const button = /* @__PURE__ */ jsx(
|
|
357
|
-
Comp,
|
|
358
|
-
{
|
|
359
|
-
ref,
|
|
360
|
-
"data-sidebar": "menu-button",
|
|
361
|
-
"data-active": isActive,
|
|
362
|
-
className: cn(sidebarMenuButtonVariants({ variant }), className),
|
|
363
|
-
...props,
|
|
364
|
-
children
|
|
365
|
-
}
|
|
366
|
-
);
|
|
367
|
-
if (!tooltip) {
|
|
368
|
-
return button;
|
|
369
376
|
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
377
|
+
);
|
|
378
|
+
const SidebarMenuButton = React.forwardRef(
|
|
379
|
+
({ asChild = false, isActive = false, tooltip, className, children, variant = "navigation-item", size, ...props }, ref) => {
|
|
380
|
+
const Comp = asChild ? Slot : "button";
|
|
381
|
+
const { isMobile, state, size: contextSize } = useSidebar();
|
|
382
|
+
const resolvedSize = size ?? contextSize;
|
|
383
|
+
const button = /* @__PURE__ */ jsx(
|
|
384
|
+
Comp,
|
|
385
|
+
{
|
|
386
|
+
ref,
|
|
387
|
+
"data-sidebar": "menu-button",
|
|
388
|
+
"data-active": isActive,
|
|
389
|
+
className: cn(sidebarMenuButtonVariants({ variant, size: resolvedSize }), className),
|
|
390
|
+
...props,
|
|
391
|
+
children
|
|
392
|
+
}
|
|
393
|
+
);
|
|
394
|
+
if (!tooltip) {
|
|
395
|
+
return button;
|
|
396
|
+
}
|
|
397
|
+
if (typeof tooltip === "string") {
|
|
398
|
+
tooltip = {
|
|
399
|
+
children: tooltip
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
return /* @__PURE__ */ jsxs(TooltipRoot, { children: [
|
|
403
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
|
|
404
|
+
/* @__PURE__ */ jsx(TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip })
|
|
405
|
+
] });
|
|
374
406
|
}
|
|
375
|
-
|
|
376
|
-
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
|
|
377
|
-
/* @__PURE__ */ jsx(TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip })
|
|
378
|
-
] });
|
|
379
|
-
});
|
|
407
|
+
);
|
|
380
408
|
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
381
409
|
const SidebarMenuAction = React.forwardRef(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
|
|
382
410
|
const Comp = asChild ? Slot : "button";
|
|
@@ -431,7 +459,7 @@ const SidebarMenuSkeleton = React.forwardRef(({ className, showIcon = false, ...
|
|
|
431
459
|
/* @__PURE__ */ jsx(
|
|
432
460
|
Skeleton,
|
|
433
461
|
{
|
|
434
|
-
className: "h-4 max-w-
|
|
462
|
+
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
435
463
|
"data-sidebar": "menu-skeleton-text",
|
|
436
464
|
style: {
|
|
437
465
|
"--skeleton-width": width
|
|
@@ -482,5 +510,5 @@ const SidebarMenuSubButton = React.forwardRef(({ asChild = false, isActive, clas
|
|
|
482
510
|
});
|
|
483
511
|
SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
|
|
484
512
|
|
|
485
|
-
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, useSidebar };
|
|
513
|
+
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, sidebarMenuButtonVariants, useSidebar };
|
|
486
514
|
//# sourceMappingURL=Sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.js","sources":["../../../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["'use client'\n\nimport { SidebarSimple as SidebarIcon } from '@phosphor-icons/react/dist/ssr/SidebarSimple'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { useIsMobile } from '../../lib/useMobile'\nimport { Button } from '../Button'\nimport { Input } from '../Input'\nimport { Separator } from '../Separator'\nimport { SheetContent, SheetDescription, SheetHeader, SheetRoot, SheetTitle } from '../Sheet'\nimport { Skeleton } from '../Skeleton'\nimport { TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '../Tooltip'\nimport { Typography } from '../Typography'\n\nimport { cn } from '@/lib/utils'\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state'\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = '16rem'\nconst SIDEBAR_WIDTH_MOBILE = '18rem'\nconst SIDEBAR_WIDTH_ICON = '3rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\ntype SidebarContext = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n}\n\nconst SidebarContext = React.createContext<SidebarContext | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n }\n>(({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }, ref) => {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<SidebarContext>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-[[data-variant=inset]]:bg-sidebar flex min-h-svh w-full', className)}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n})\nSidebarProvider.displayName = 'SidebarProvider'\n\nconst SidebarRoot = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'default' | 'hidden'\n }\n>(({ side = 'left', variant = 'default', className, children, ...props }, ref) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (isMobile) {\n return (\n <SheetRoot open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-[var(--sidebar-width)] p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </SheetRoot>\n )\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer text-sidebar-foreground hidden shadow-md md:block\"\n data-state={state}\n data-side={side}\n data-variant={variant}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n 'relative w-[var(--sidebar-width)] bg-transparent transition-[width] duration-200 ease-linear',\n variant === 'default' && 'group-data-[state=collapsed]:w-[var(--sidebar-width-icon)]',\n variant === 'hidden' && 'group-data-[state=collapsed]:w-0',\n 'group-data-[side=right]:rotate-180',\n )}\n />\n <div\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? [\n 'left-0',\n variant === 'default' && 'group-data-[state=collapsed]:w-[var(--sidebar-width-icon)]',\n variant === 'hidden' && 'group-data-[state=collapsed]:left-[calc(var(--sidebar-width)*-1)]',\n ]\n : [\n 'right-0',\n variant === 'default' && 'group-data-[state=collapsed]:w-[var(--sidebar-width-icon)]',\n variant === 'hidden' && 'group-data-[state=collapsed]:right-[calc(var(--sidebar-width)*-1)]',\n ],\n 'group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" className=\"bg-sidebar flex h-full w-full flex-col\">\n {children}\n </div>\n </div>\n </div>\n )\n})\nSidebarRoot.displayName = 'SidebarRoot'\n\nconst SidebarTrigger = React.forwardRef<React.ComponentRef<typeof Button>, React.ComponentProps<typeof Button>>(\n ({ className, onClick, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n variant=\"text\"\n className={cn('text-primary-foreground h-8 w-8 p-1', className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n StartIcon={SidebarIcon}\n >\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n },\n)\nSidebarTrigger.displayName = 'SidebarTrigger'\n\nconst SidebarRail = React.forwardRef<HTMLButtonElement, React.ComponentProps<'button'>>(\n ({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n '[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[variant=offcanvas]:hover:bg-sidebar group-data-[variant=offcanvas]:translate-x-0 group-data-[variant=offcanvas]:after:left-full',\n '[[data-side=left][data-variant=offcanvas]_&]:-right-2',\n '[[data-side=right][data-variant=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarRail.displayName = 'SidebarRail'\n\nconst SidebarInset = React.forwardRef<HTMLDivElement, React.ComponentProps<'main'>>(({ className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarInset.displayName = 'SidebarInset'\n\nconst SidebarInput = React.forwardRef<React.ComponentRef<typeof Input>, React.ComponentProps<typeof Input>>(\n ({ className, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n 'bg-background focus-visible:ring-sidebar-ring h-8 w-full shadow-none focus-visible:ring-2',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarInput.displayName = 'SidebarInput'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return <div ref={ref} data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />\n})\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return <div ref={ref} data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />\n})\nSidebarFooter.displayName = 'SidebarFooter'\n\nconst SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>, React.ComponentProps<typeof Separator>>(\n ({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n )\n },\n)\nSidebarSeparator.displayName = 'SidebarSeparator'\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto',\n 'group-data-[variant=default]:group-data-[state=collapsed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarContent.displayName = 'SidebarContent'\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = 'SidebarGroup'\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'> & { asChild?: boolean }>(\n ({ className, asChild = false, children, ...props }, ref) => {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 transition-[margin,opacity] duration-200 ease-linear outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[state=collapsed]:group-data-[variant=hidden]:hidden',\n 'group-data-[state=collapsed]:group-data-[variant=default]:-mt-8 group-data-[state=collapsed]:group-data-[variant=default]:opacity-0',\n className,\n )}\n {...props}\n >\n {typeof children === 'string' ? (\n <Typography variant=\"label-md\" color=\"secondary\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </Comp>\n )\n },\n)\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\n\nconst SidebarGroupAction = React.forwardRef<HTMLButtonElement, React.ComponentProps<'button'> & { asChild?: boolean }>(\n ({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 transition-transform outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 after:md:hidden',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarGroupAction.displayName = 'SidebarGroupAction'\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />\n ),\n)\nSidebarGroupContent.displayName = 'SidebarGroupContent'\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(({ className, ...props }, ref) => (\n <ul ref={ref} data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />\n))\nSidebarMenu.displayName = 'SidebarMenu'\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(({ className, ...props }, ref) => (\n <li ref={ref} data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />\n))\nSidebarMenuItem.displayName = 'SidebarMenuItem'\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n variant?: 'navigation-item' | 'element'\n }\n>(({ asChild = false, isActive = false, tooltip, className, children, variant = 'navigation-item', ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n const { isMobile, state } = useSidebar()\n\n const sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full text-sm hover:bg-sidebar-accent hover:text-sidebar-accent-foreground items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=expanded]:hover:bg-sidebar-accent data-[state=expanded]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n 'navigation-item': 'h-8',\n element: 'group-data-[state=collapsed]:!p-0',\n },\n },\n defaultVariants: {\n variant: 'navigation-item',\n },\n },\n )\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant }), className)}\n {...props}\n >\n {children}\n </Comp>\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <TooltipRoot>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </TooltipRoot>\n )\n})\nSidebarMenuButton.displayName = 'SidebarMenuButton'\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 transition-transform outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 after:md:hidden',\n 'group-data-[state=collapsed]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=expanded]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarMenuAction.displayName = 'SidebarMenuAction'\n\nconst SidebarMenuBadge = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute top-1.5 right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'group-data-[state=collapsed]:group-data-[variant=hidden]:hidden',\n 'group-data-[state=collapsed]:group-data-[variant=default]:opacity-0',\n className,\n )}\n {...props}\n />\n ),\n)\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n showIcon?: boolean\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor((window.crypto.getRandomValues(new Uint32Array(1))[0] % 40) + 50)}%`\n }, [])\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-[var(--skeleton-width)] flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\n\nconst SidebarMenuSub = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n />\n ),\n)\nSidebarMenuSub.displayName = 'SidebarMenuSub'\n\nconst SidebarMenuSubItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(({ ...props }, ref) => (\n <li ref={ref} {...props} />\n))\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<'a'> & {\n asChild?: boolean\n isActive?: boolean\n }\n>(({ asChild = false, isActive, className, children, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n >\n {typeof children === 'string' ? <Typography variant=\"body-md\">{children}</Typography> : children}\n </Comp>\n )\n})\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\n\nexport {\n SidebarRoot,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AACA;AAYA;AAEA;AACE;AACA;AACE;AAAmE;AAGrE;AACF;AAEA;AAQE;AACA;AAIA;AACA;AACA;AAAsB;AAElB;AACA;AACE;AAAqB;AAErB;AAAkB;AAIpB;AAAgG;AAClG;AACkB;AAIpB;AACE;AAAmE;AAIrE;AACE;AACE;AACE;AACA;AAAc;AAChB;AAGF;AACA;AAAgE;AAKlE;AAEA;AAA2B;AAClB;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACF;AACyE;AAG3E;AAGM;AAAC;AAAA;AAEG;AACqB;AACK;AACrB;AACL;AAE0G;AAC5G;AACI;AAEH;AAAA;AAKX;AACA;AAEA;AAOE;AAEA;AACE;AAEI;AAAC;AAAA;AACc;AACD;AACF;AAER;AACqB;AACrB;AAEF;AAEA;AACE;AAAmB;AAC2B;AAChD;AACuD;AAAA;AAAA;AAE3D;AAIJ;AACE;AAAC;AAAA;AACC;AACU;AACE;AACD;AACG;AAGd;AAAA;AAAC;AAAA;AACY;AACT;AACyB;AACD;AACxB;AACF;AAAA;AACF;AACA;AAAC;AAAA;AACY;AACT;AAEI;AACE;AACyB;AACD;AAE1B;AACE;AACyB;AACD;AAC1B;AACJ;AACA;AACF;AACI;AAIJ;AAAA;AACF;AAAA;AAAA;AAGN;AACA;AAEA;AAA6B;AAEzB;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACL;AACsD;AAE5D;AACA;AAAc;AAChB;AACI;AACO;AAE6B;AAAA;AAC1C;AAGN;AACA;AAEA;AAA0B;AAEtB;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACD;AACD;AACH;AACK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACW;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAA2B;AAEvB;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACF;AACA;AAEA;AACE;AACF;AACA;AAEA;AAA+B;AAE3B;AACE;AAAC;AAAA;AACC;AACa;AAC2C;AACpD;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACa;AACuD;AAChE;AAAA;AAGV;AACA;AAEA;AAAgC;AAE5B;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAOF;AAAA;AAEJ;AAGN;AACA;AAEA;AAAiC;AAE7B;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AAAkC;AAIlC;AACA;AAEA;AAGA;AAEA;AAGA;AAEA;AASE;AACA;AAEA;AAAkC;AAChC;AACA;AACY;AACC;AACY;AACV;AACX;AACF;AACiB;AACN;AACX;AACF;AAGF;AACE;AAAC;AAAA;AACC;AACa;AACA;AACkD;AAC3D;AAEH;AAAA;AAIL;AACE;AAAO;AAGT;AACE;AAAU;AACE;AACZ;AAGF;AAEI;AAAgC;AACoE;AAG1G;AACA;AAEA;AAOE;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AAEE;AACF;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAA+B;AAE3B;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAOE;AACE;AAAsF;AAGxF;AACE;AAAC;AAAA;AACC;AACa;AACyD;AAClE;AAEH;AAAsF;AACvF;AAAC;AAAA;AACW;AACG;AAEX;AACsB;AACtB;AAAA;AAEJ;AAAA;AAAA;AAGN;AACA;AAEA;AAA6B;AAEzB;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAGA;AAEA;AAOE;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACA;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAEoF;AAAA;AAG9F;AACA;;"}
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sources":["../../../src/components/Sidebar/Sidebar.tsx"],"sourcesContent":["'use client'\n\nimport { SidebarSimple as SidebarIcon } from '@phosphor-icons/react/dist/ssr/SidebarSimple'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { useIsMobile } from '../../lib/useMobile'\nimport { Button } from '../Button'\nimport { Input } from '../Input'\nimport { Separator } from '../Separator'\nimport { SheetContent, SheetDescription, SheetHeader, SheetRoot, SheetTitle } from '../Sheet'\nimport { Skeleton } from '../Skeleton'\nimport { TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '../Tooltip'\nimport { Typography } from '../Typography'\n\nimport { cn } from '@/lib/utils'\n\nconst SIDEBAR_COOKIE_NAME = 'sidebar_state'\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nconst SIDEBAR_WIDTH = '16rem'\nconst SIDEBAR_WIDTH_MOBILE = '18rem'\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\nexport type SidebarSize = 'small' | 'medium' | 'big'\n\nconst SIDEBAR_WIDTH_ICON: Record<SidebarSize, string> = {\n small: '3rem',\n medium: '3.5rem',\n big: '4rem',\n}\n\ntype SidebarContext = {\n state: 'expanded' | 'collapsed'\n open: boolean\n setOpen: (open: boolean) => void\n openMobile: boolean\n setOpenMobile: (open: boolean) => void\n isMobile: boolean\n toggleSidebar: () => void\n size: SidebarSize\n}\n\nconst SidebarContext = React.createContext<SidebarContext | null>(null)\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext)\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.')\n }\n\n return context\n}\n\nconst SidebarProvider = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n defaultOpen?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n size?: SidebarSize\n }\n>(\n (\n {\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n size = 'small',\n className,\n style,\n children,\n ...props\n },\n ref,\n ) => {\n const isMobile = useIsMobile()\n const [openMobile, setOpenMobile] = React.useState(false)\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen)\n const open = openProp ?? _open\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value\n if (setOpenProp) {\n setOpenProp(openState)\n } else {\n _setOpen(openState)\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`\n },\n [setOpenProp, open],\n )\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open)\n }, [isMobile, setOpen, setOpenMobile])\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault()\n toggleSidebar()\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => window.removeEventListener('keydown', handleKeyDown)\n }, [toggleSidebar])\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed'\n\n const contextValue = React.useMemo<SidebarContext>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n size,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar, size],\n )\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON[size],\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full',\n className,\n )}\n ref={ref}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n )\n },\n)\nSidebarProvider.displayName = 'SidebarProvider'\n\nconst SidebarRoot = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n side?: 'left' | 'right'\n variant?: 'default' | 'hidden'\n }\n>(({ side = 'left', variant = 'default', className, children, ...props }, ref) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (isMobile) {\n return (\n <SheetRoot open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </SheetRoot>\n )\n }\n\n return (\n <div\n ref={ref}\n className=\"group peer text-sidebar-foreground hidden shadow-md md:block\"\n data-state={state}\n data-side={side}\n data-variant={variant}\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n className={cn(\n 'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n variant === 'default' && 'group-data-[state=collapsed]:w-(--sidebar-width-icon)',\n variant === 'hidden' && 'group-data-[state=collapsed]:w-0',\n 'group-data-[side=right]:rotate-180',\n )}\n />\n <div\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? [\n 'left-0',\n variant === 'default' && 'group-data-[state=collapsed]:w-(--sidebar-width-icon)',\n variant === 'hidden' && 'group-data-[state=collapsed]:-left-(--sidebar-width)',\n ]\n : [\n 'right-0',\n variant === 'default' && 'group-data-[state=collapsed]:w-(--sidebar-width-icon)',\n variant === 'hidden' && 'group-data-[state=collapsed]:-right-(--sidebar-width)',\n ],\n 'group-data-[side=left]:border-r group-data-[side=right]:border-l',\n className,\n )}\n {...props}\n >\n <div data-sidebar=\"sidebar\" className=\"bg-sidebar flex h-full w-full flex-col\">\n {children}\n </div>\n </div>\n </div>\n )\n})\nSidebarRoot.displayName = 'SidebarRoot'\n\nconst SidebarTrigger = React.forwardRef<React.ComponentRef<typeof Button>, React.ComponentProps<typeof Button>>(\n ({ className, onClick, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <Button\n ref={ref}\n data-sidebar=\"trigger\"\n variant=\"text\"\n className={cn('text-primary-foreground h-8 w-8 p-1', className)}\n onClick={(event) => {\n onClick?.(event)\n toggleSidebar()\n }}\n {...props}\n StartIcon={SidebarIcon}\n >\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n )\n },\n)\nSidebarTrigger.displayName = 'SidebarTrigger'\n\nconst SidebarRail = React.forwardRef<HTMLButtonElement, React.ComponentProps<'button'>>(\n ({ className, ...props }, ref) => {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n ref={ref}\n data-sidebar=\"rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-0.5 sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'group-data-[variant=offcanvas]:hover:bg-sidebar group-data-[variant=offcanvas]:translate-x-0 group-data-[variant=offcanvas]:after:left-full',\n '[[data-side=left][data-variant=offcanvas]_&]:-right-2',\n '[[data-side=right][data-variant=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarRail.displayName = 'SidebarRail'\n\nconst SidebarInset = React.forwardRef<HTMLDivElement, React.ComponentProps<'main'>>(({ className, ...props }, ref) => {\n return (\n <main\n ref={ref}\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarInset.displayName = 'SidebarInset'\n\nconst SidebarInput = React.forwardRef<React.ComponentRef<typeof Input>, React.ComponentProps<typeof Input>>(\n ({ className, ...props }, ref) => {\n return (\n <Input\n ref={ref}\n data-sidebar=\"input\"\n className={cn(\n 'bg-background focus-visible:ring-sidebar-ring h-8 w-full shadow-none focus-visible:ring-2',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarInput.displayName = 'SidebarInput'\n\nconst SidebarHeader = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return <div ref={ref} data-sidebar=\"header\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />\n})\nSidebarHeader.displayName = 'SidebarHeader'\n\nconst SidebarFooter = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return <div ref={ref} data-sidebar=\"footer\" className={cn('flex flex-col gap-2 p-2', className)} {...props} />\n})\nSidebarFooter.displayName = 'SidebarFooter'\n\nconst SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>, React.ComponentProps<typeof Separator>>(\n ({ className, ...props }, ref) => {\n return (\n <Separator\n ref={ref}\n data-sidebar=\"separator\"\n className={cn('bg-sidebar-border mx-2 w-auto', className)}\n {...props}\n />\n )\n },\n)\nSidebarSeparator.displayName = 'SidebarSeparator'\n\nconst SidebarContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto',\n 'group-data-[variant=default]:group-data-[state=collapsed]:overflow-hidden',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarContent.displayName = 'SidebarContent'\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n )\n})\nSidebarGroup.displayName = 'SidebarGroup'\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'> & { asChild?: boolean }>(\n ({ className, asChild = false, children, ...props }, ref) => {\n const Comp = asChild ? Slot : 'div'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 transition-[margin,opacity] duration-200 ease-linear outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[state=collapsed]:group-data-[variant=hidden]:hidden',\n 'group-data-[state=collapsed]:group-data-[variant=default]:-mt-8 group-data-[state=collapsed]:group-data-[variant=default]:opacity-0',\n className,\n )}\n {...props}\n >\n {typeof children === 'string' ? (\n <Typography variant=\"label-md\" color=\"secondary\">\n {children}\n </Typography>\n ) : (\n children\n )}\n </Comp>\n )\n },\n)\nSidebarGroupLabel.displayName = 'SidebarGroupLabel'\n\nconst SidebarGroupAction = React.forwardRef<HTMLButtonElement, React.ComponentProps<'button'> & { asChild?: boolean }>(\n ({ className, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 transition-transform outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 after:md:hidden',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n />\n )\n },\n)\nSidebarGroupAction.displayName = 'SidebarGroupAction'\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-sidebar=\"group-content\" className={cn('w-full text-sm', className)} {...props} />\n ),\n)\nSidebarGroupContent.displayName = 'SidebarGroupContent'\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(({ className, ...props }, ref) => (\n <ul ref={ref} data-sidebar=\"menu\" className={cn('flex w-full min-w-0 flex-col gap-1', className)} {...props} />\n))\nSidebarMenu.displayName = 'SidebarMenu'\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(({ className, ...props }, ref) => (\n <li ref={ref} data-sidebar=\"menu-item\" className={cn('group/menu-item relative', className)} {...props} />\n))\nSidebarMenuItem.displayName = 'SidebarMenuItem'\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full text-sm hover:bg-sidebar-accent hover:text-sidebar-accent-foreground items-center overflow-hidden rounded-md text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=expanded]:hover:bg-sidebar-accent data-[state=expanded]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n 'navigation-item': '',\n element: 'group-data-[state=collapsed]:!p-0',\n },\n size: {\n small: 'h-8 gap-2 p-2 [&>svg]:size-4',\n medium: 'h-10 gap-3 p-2.5 [&>svg]:size-5',\n big: 'h-12 gap-4 p-3 [&>svg]:size-6',\n },\n },\n defaultVariants: {\n variant: 'navigation-item',\n size: 'small',\n },\n },\n)\n\nconst SidebarMenuButton = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & {\n asChild?: boolean\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n variant?: 'navigation-item' | 'element'\n size?: SidebarSize\n }\n>(\n (\n { asChild = false, isActive = false, tooltip, className, children, variant = 'navigation-item', size, ...props },\n ref,\n ) => {\n const Comp = asChild ? Slot : 'button'\n const { isMobile, state, size: contextSize } = useSidebar()\n const resolvedSize = size ?? contextSize\n\n const button = (\n <Comp\n ref={ref}\n data-sidebar=\"menu-button\"\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size: resolvedSize }), className)}\n {...props}\n >\n {children}\n </Comp>\n )\n\n if (!tooltip) {\n return button\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <TooltipRoot>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </TooltipRoot>\n )\n },\n)\nSidebarMenuButton.displayName = 'SidebarMenuButton'\n\nconst SidebarMenuAction = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<'button'> & {\n asChild?: boolean\n showOnHover?: boolean\n }\n>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 transition-transform outline-none focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 after:md:hidden',\n 'group-data-[state=collapsed]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=expanded]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n )\n})\nSidebarMenuAction.displayName = 'SidebarMenuAction'\n\nconst SidebarMenuBadge = React.forwardRef<HTMLDivElement, React.ComponentProps<'div'>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute top-1.5 right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'group-data-[state=collapsed]:group-data-[variant=hidden]:hidden',\n 'group-data-[state=collapsed]:group-data-[variant=default]:opacity-0',\n className,\n )}\n {...props}\n />\n ),\n)\nSidebarMenuBadge.displayName = 'SidebarMenuBadge'\n\nconst SidebarMenuSkeleton = React.forwardRef<\n HTMLDivElement,\n React.ComponentProps<'div'> & {\n showIcon?: boolean\n }\n>(({ className, showIcon = false, ...props }, ref) => {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor((window.crypto.getRandomValues(new Uint32Array(1))[0] % 40) + 50)}%`\n }, [])\n\n return (\n <div\n ref={ref}\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n})\nSidebarMenuSkeleton.displayName = 'SidebarMenuSkeleton'\n\nconst SidebarMenuSub = React.forwardRef<HTMLUListElement, React.ComponentProps<'ul'>>(\n ({ className, ...props }, ref) => (\n <ul\n ref={ref}\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n />\n ),\n)\nSidebarMenuSub.displayName = 'SidebarMenuSub'\n\nconst SidebarMenuSubItem = React.forwardRef<HTMLLIElement, React.ComponentProps<'li'>>(({ ...props }, ref) => (\n <li ref={ref} {...props} />\n))\nSidebarMenuSubItem.displayName = 'SidebarMenuSubItem'\n\nconst SidebarMenuSubButton = React.forwardRef<\n HTMLAnchorElement,\n React.ComponentProps<'a'> & {\n asChild?: boolean\n isActive?: boolean\n }\n>(({ asChild = false, isActive, className, children, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a'\n\n return (\n <Comp\n ref={ref}\n data-sidebar=\"menu-sub-button\"\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-none focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n 'group-data-[state=collapsed]:hidden',\n className,\n )}\n {...props}\n >\n {typeof children === 'string' ? <Typography variant=\"body-md\">{children}</Typography> : children}\n </Comp>\n )\n})\nSidebarMenuSubButton.displayName = 'SidebarMenuSubButton'\n\nexport {\n SidebarRoot,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n sidebarMenuButtonVariants,\n useSidebar,\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAkBA;AACA;AACA;AACA;AACA;AAIA;AAAwD;AAC/C;AACC;AAEV;AAaA;AAEA;AACE;AACA;AACE;AAAmE;AAGrE;AACF;AAEA;AAA8B;AAU1B;AACgB;AACR;AACQ;AACP;AACP;AACA;AACA;AACG;AAIL;AACA;AAIA;AACA;AACA;AAAsB;AAElB;AACA;AACE;AAAqB;AAErB;AAAkB;AAIpB;AAAgG;AAClG;AACkB;AAIpB;AACE;AAAmE;AAIrE;AACE;AACE;AACE;AACA;AAAc;AAChB;AAGF;AACA;AAAgE;AAKlE;AAEA;AAA2B;AAClB;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF;AAC+E;AAGjF;AAGM;AAAC;AAAA;AAEG;AACqB;AAC4B;AAC5C;AACL;AAES;AACT;AACA;AACF;AACA;AACI;AAEH;AAAA;AAGP;AAGN;AACA;AAEA;AAOE;AAEA;AACE;AAEI;AAAC;AAAA;AACc;AACD;AACF;AAER;AACqB;AACrB;AAEF;AAEA;AACE;AAAmB;AAC2B;AAChD;AACuD;AAAA;AAAA;AAE3D;AAIJ;AACE;AAAC;AAAA;AACC;AACU;AACE;AACD;AACG;AAGd;AAAA;AAAC;AAAA;AACY;AACT;AACyB;AACD;AACxB;AACF;AAAA;AACF;AACA;AAAC;AAAA;AACY;AACT;AAEI;AACE;AACyB;AACD;AAE1B;AACE;AACyB;AACD;AAC1B;AACJ;AACA;AACF;AACI;AAIJ;AAAA;AACF;AAAA;AAAA;AAGN;AACA;AAEA;AAA6B;AAEzB;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACL;AACsD;AAE5D;AACA;AAAc;AAChB;AACI;AACO;AAE6B;AAAA;AAC1C;AAGN;AACA;AAEA;AAA0B;AAEtB;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACD;AACD;AACH;AACK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACW;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAA2B;AAEvB;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACF;AACA;AAEA;AACE;AACF;AACA;AAEA;AAA+B;AAE3B;AACE;AAAC;AAAA;AACC;AACa;AAC2C;AACpD;AAAA;AACN;AAGN;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AACE;AACE;AAAC;AAAA;AACC;AACa;AACuD;AAChE;AAAA;AAGV;AACA;AAEA;AAAgC;AAE5B;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAOF;AAAA;AAEJ;AAGN;AACA;AAEA;AAAiC;AAE7B;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAAA;AACN;AAGN;AACA;AAEA;AAAkC;AAIlC;AACA;AAEA;AAGA;AAEA;AAGA;AAEA;AAAkC;AAChC;AACA;AACY;AACC;AACY;AACV;AACX;AACM;AACG;AACC;AACH;AACP;AACF;AACiB;AACN;AACH;AACR;AAEJ;AAEA;AAAgC;AAc5B;AACA;AACA;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACA;AACsE;AAC/E;AAEH;AAAA;AAIL;AACE;AAAO;AAGT;AACE;AAAU;AACE;AACZ;AAGF;AAEI;AAAgC;AACoE;AACtG;AAGN;AACA;AAEA;AAOE;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AAEE;AACF;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAA+B;AAE3B;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAOE;AACE;AAAsF;AAGxF;AACE;AAAC;AAAA;AACC;AACa;AACyD;AAClE;AAEH;AAAsF;AACvF;AAAC;AAAA;AACW;AACG;AAEX;AACsB;AACtB;AAAA;AAEJ;AAAA;AAAA;AAGN;AACA;AAEA;AAA6B;AAEzB;AAAC;AAAA;AACC;AACa;AACF;AACT;AACA;AACA;AACF;AACI;AAAA;AAGV;AACA;AAEA;AAGA;AAEA;AAOE;AAEA;AACE;AAAC;AAAA;AACC;AACa;AACA;AACF;AACT;AACA;AACA;AACA;AACF;AACI;AAEoF;AAAA;AAG9F;AACA;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, useSidebar } from './Sidebar.js';
|
|
1
|
+
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, sidebarMenuButtonVariants, useSidebar } from './Sidebar.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export * from './components/LazyDatePicker';
|
|
|
23
23
|
export * from './components/Marquee';
|
|
24
24
|
export * from './components/MultiSelect';
|
|
25
25
|
export * from './components/Pagination';
|
|
26
|
+
export * from './components/PhoneInput';
|
|
26
27
|
export * from './components/Popover';
|
|
27
28
|
export * from './components/Progress';
|
|
28
29
|
export * from './components/RadioGroup';
|
package/dist/index.js
CHANGED
|
@@ -27,13 +27,15 @@ export { LazyDatePicker } from './components/LazyDatePicker/LazyDatePicker.js';
|
|
|
27
27
|
export { Marquee } from './components/Marquee/Marquee.js';
|
|
28
28
|
export { MultiSelect } from './components/MultiSelect/MultiSelect.js';
|
|
29
29
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PaginationRoot } from './components/Pagination/Pagination.js';
|
|
30
|
+
export { PhoneInput } from './components/PhoneInput/PhoneInput.js';
|
|
31
|
+
export { defaultCountries } from './components/PhoneInput/countries.js';
|
|
30
32
|
export { Popover, PopoverAnchor, PopoverContent, PopoverRoot, PopoverTrigger } from './components/Popover/Popover.js';
|
|
31
33
|
export { Progress } from './components/Progress/Progress.js';
|
|
32
34
|
export { RadioGroup, RadioGroupItem } from './components/RadioGroup/RadioGroup.js';
|
|
33
35
|
export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectRoot, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from './components/Select/Select.js';
|
|
34
36
|
export { Separator } from './components/Separator/Separator.js';
|
|
35
37
|
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetRoot, SheetTitle, SheetTrigger } from './components/Sheet/Sheet.js';
|
|
36
|
-
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, useSidebar } from './components/Sidebar/Sidebar.js';
|
|
38
|
+
export { SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarRoot, SidebarSeparator, SidebarTrigger, sidebarMenuButtonVariants, useSidebar } from './components/Sidebar/Sidebar.js';
|
|
37
39
|
export { Skeleton } from './components/Skeleton/Skeleton.js';
|
|
38
40
|
export { StarRating } from './components/StarRating/StarRating.js';
|
|
39
41
|
export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from './components/Table/Table.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "periplo-ui",
|
|
3
3
|
"description": "IATI UI library",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "4.
|
|
5
|
+
"version": "4.8.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
@@ -112,6 +112,10 @@
|
|
|
112
112
|
"types": "./dist/components/Pagination/index.d.ts",
|
|
113
113
|
"import": "./dist/components/Pagination/index.js"
|
|
114
114
|
},
|
|
115
|
+
"./phone-input": {
|
|
116
|
+
"types": "./dist/components/PhoneInput/index.d.ts",
|
|
117
|
+
"import": "./dist/components/PhoneInput/index.js"
|
|
118
|
+
},
|
|
115
119
|
"./popover": {
|
|
116
120
|
"types": "./dist/components/Popover/index.d.ts",
|
|
117
121
|
"import": "./dist/components/Popover/index.js"
|