@rentnerkev/select 1.0.0 → 2.0.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/README.md CHANGED
@@ -1,150 +1,257 @@
1
1
  # @rentnerkev/select
2
2
 
3
- Eine flexible React-Select-Komponente mit Einzel- und Mehrfachauswahl, Formularvalidierung und anpassbarem Tailwind-Design.
3
+ An accessible, searchable React select for typed single and multiple selection, native form integration, validation, localization, and Tailwind CSS styling.
4
4
 
5
5
  ## Installation
6
6
 
7
- Installiere das Paket mit npm oder Bun:
7
+ Install the package with npm:
8
8
 
9
9
  ```bash
10
10
  npm install @rentnerkev/select
11
11
  ```
12
12
 
13
- ## Schnellstart
13
+ Or with Bun:
14
14
 
15
- ### 1. Komponente verwenden
15
+ ```bash
16
+ bun add @rentnerkev/select
17
+ ```
16
18
 
17
- Importiere `CustomSelect` und nutze es in deinen Komponenten.
19
+ ## Quick start
20
+
21
+ `CustomSelect<TValue>` infers its value type from `value` and `options`, so the change handler remains typed without casts.
18
22
 
19
23
  ```tsx
20
- import { CustomSelect } from '@rentnerkev/select'
24
+ import { CustomSelect, type Option } from '@rentnerkev/select'
21
25
  import { useState } from 'react'
22
- import { User } from 'lucide-react'
23
26
 
24
- function MyComponent() {
25
- const [selectedValue, setSelectedValue] = useState('')
27
+ const contactOptions = [
28
+ {
29
+ value: 'alex-morgan',
30
+ label: 'Alex Morgan',
31
+ subOption: 'Customer success',
32
+ },
33
+ {
34
+ value: 'sam-rivera',
35
+ label: 'Sam Rivera',
36
+ subOption: 'Technical support',
37
+ },
38
+ ] satisfies ReadonlyArray<Option<string>>
26
39
 
27
- const options = [
28
- {
29
- value: 'max-mustermann',
30
- label: 'Max - Mustermann',
31
- subOption: 'Musterstraße 12, 10115 Berlin',
32
- },
33
- {
34
- value: 'erika-musterfrau',
35
- label: 'Erika - Musterfrau',
36
- subOption: 'Hafenweg 4, 20457 Hamburg',
37
- },
38
- {
39
- value: 'tim-schneider',
40
- label: 'Tim - Schneider',
41
- subOption: 'Königsallee 22, 40212 Düsseldorf',
42
- },
43
- ]
40
+ export function ContactSelect() {
41
+ const [contact, setContact] = useState('')
44
42
 
45
43
  return (
46
- <div className="w-64">
47
- <CustomSelect
48
- id="fruit"
49
- name="fruit"
50
- value={selectedValue}
51
- onValueChange={setSelectedValue}
52
- options={options}
53
- placeholder="Kontakt auswählen"
54
- required
55
- className="w-30 h-10"
56
- fallbackOption="Du hast noch keine Früchte angelegt!"
57
- icon={<User className="h-4 w-4" />}
58
- />
59
- </div>
44
+ <CustomSelect
45
+ id="contact"
46
+ name="contact"
47
+ label="Contact"
48
+ value={contact}
49
+ onValueChange={setContact}
50
+ options={contactOptions}
51
+ placeholder="Choose a contact"
52
+ required
53
+ />
54
+ )
55
+ }
56
+ ```
57
+
58
+ ## Generic values
59
+
60
+ Strings, numbers, booleans, and objects are supported. Use `isOptionEqualToValue` to define equality for object values and `getFormValue` to serialize values for native form submission. Without `getFormValue`, the component uses `String(value)`.
61
+
62
+ ```tsx
63
+ import { CustomSelect, type Option } from '@rentnerkev/select'
64
+ import { useState } from 'react'
65
+
66
+ const statuses = ['todo', 'done'] as const
67
+ type Status = (typeof statuses)[number]
68
+
69
+ const statusOptions = statuses.map((status) => ({
70
+ value: status,
71
+ label: status === 'todo' ? 'To do' : 'Done',
72
+ })) satisfies ReadonlyArray<Option<Status>>
73
+
74
+ export function StatusSelect() {
75
+ const [status, setStatus] = useState<Status>('todo')
76
+
77
+ return (
78
+ <CustomSelect
79
+ value={status}
80
+ onValueChange={setStatus}
81
+ options={statusOptions}
82
+ />
83
+ )
84
+ }
85
+ ```
86
+
87
+ ## Multiple selection
88
+
89
+ The current multiple-selection API uses an array, preserving values that contain commas:
90
+
91
+ ```tsx
92
+ import { CustomSelect } from '@rentnerkev/select'
93
+ import { useState } from 'react'
94
+
95
+ export function RegionSelect() {
96
+ const [regions, setRegions] = useState<Array<string>>([])
97
+
98
+ return (
99
+ <CustomSelect
100
+ name="regions"
101
+ multiple
102
+ value={regions}
103
+ onValueChange={setRegions}
104
+ options={[
105
+ { value: 'north,west', label: 'North West' },
106
+ { value: 'south', label: 'South' },
107
+ ]}
108
+ minSelection={1}
109
+ maxSelection={2}
110
+ />
60
111
  )
61
112
  }
62
113
  ```
63
114
 
64
- ### 2. In Formularen mit required
115
+ When `name` is set, each selected array item is submitted under the same field name. Read all values with `new FormData(form).getAll('regions')`.
116
+
117
+ The legacy combination of `multiple`, a comma-separated string value, and a string callback remains compatible in version 1 but is deprecated. It cannot represent values containing commas unambiguously and will be removed in version 2.
65
118
 
66
- `required` ist standardmäßig deaktiviert. Wenn du es setzt und beim Submit noch kein Wert ausgewählt wurde, wird der Select rot, das linke Icon wird durch ein Ausrufezeichen ersetzt und der Fehlertext wird im Tooltip angezeigt. Das ist das praktisch, wenn der Placeholder wie "Bereich auswählen" nur ein Hinweis und keine echte Auswahl sein soll.
119
+ ## Forms and accessibility
120
+
121
+ The visible trigger supports labels, descriptions, external errors, native validation, and forwarded `aria-*` attributes. Set `required` to participate in form validation. `disabled` removes the field from interaction and validation; `readOnly` prevents changes while retaining the submitted value.
67
122
 
68
123
  ```tsx
69
124
  import { CustomSelect } from '@rentnerkev/select'
70
- import { BriefcaseBusiness } from 'lucide-react'
71
125
  import { useState } from 'react'
72
126
 
73
- function RequiredSelectForm() {
127
+ export function DepartmentForm() {
74
128
  const [department, setDepartment] = useState('')
75
129
 
76
130
  return (
77
- <form
78
- onSubmit={(event) => {
79
- event.preventDefault()
80
- event.currentTarget.reportValidity()
81
- }}
82
- >
131
+ <form>
83
132
  <CustomSelect
84
133
  id="department"
85
134
  name="department"
135
+ label="Department"
136
+ description="Choose the team that owns this request."
86
137
  value={department}
87
138
  onValueChange={setDepartment}
88
139
  options={[
89
- { value: 'beratung', label: 'Beratung' },
140
+ { value: 'consulting', label: 'Consulting' },
90
141
  { value: 'support', label: 'Support' },
91
- { value: 'vertrieb', label: 'Vertrieb' },
142
+ { value: 'sales', label: 'Sales' },
92
143
  ]}
93
- placeholder="Bereich auswählen"
144
+ placeholder="Choose a department"
94
145
  required
95
- icon={<BriefcaseBusiness className="h-4 w-4" />}
146
+ locale="en"
96
147
  />
97
148
 
98
- <button type="submit">Absenden</button>
149
+ <button type="submit">Submit</button>
99
150
  </form>
100
151
  )
101
152
  }
102
153
  ```
103
154
 
104
- ## Typdefinitionen
155
+ ## Localization
105
156
 
106
- ### `CustomSelect`-Props
157
+ German messages remain the default for backward compatibility. Set `locale="en"` for the complete English catalog, or override individual messages with a typed `Partial<SelectMessages>`. The catalog and resolver are available as `selectMessageCatalog` and `resolveSelectMessages`.
107
158
 
108
- Die Komponente nimmt folgende Parameter entgegen:
159
+ ```tsx
160
+ import { CustomSelect, type SelectMessages } from '@rentnerkev/select'
161
+ import { useState } from 'react'
109
162
 
110
- | Parameter | Typ | Beschreibung |
111
- | ---------------- | ------------------------- | ------------------------------------------------------------------------ |
112
- | `id` | `string` | (Optional) ID für den sichtbaren Trigger, nützlich für Labels. |
113
- | `name` | `string` | (Optional) Name für Formular-Submit und native Validierung. |
114
- | `value` | `string` | Der aktuell ausgewählte Wert. |
115
- | `onValueChange` | `(value: string) => void` | Callback-Funktion, die bei Änderung aufgerufen wird. |
116
- | `options` | `Option[]` | Ein Array von Optionen (siehe unten). |
117
- | `required` | `boolean` | (Optional) Aktiviert Pflichtfeld-Validierung. Default ist `false`. |
118
- | `className` | `string` | (Optional) Überträgt classes an die Select-Komponente. |
119
- | `placeholder` | `string` | (Optional) Text, der angezeigt wird, wenn nichts ausgewählt ist. |
120
- | `icon` | `React.ReactNode` | (Optional) Ein Icon, das links im Select angezeigt wird. |
121
- | `fallbackOption` | `string` | (Optional) Text, der angezeigt wird, wenn keine Optionen vorhanden sind. |
122
- | `multiple` | `boolean` | (Optional) Aktiviert die Mehrfachauswahl. Default ist false. |
123
- | `minSelection` | `number` | (Optional) Bestimmt die Mindestanzahl an auszuwählenden Optionen. |
124
- | `maxSelection` | `number` | (Optional) Bestimmt die maximale Anzahl an auszuwählenden Optionen. |
163
+ const messages: Partial<SelectMessages> = {
164
+ searchPlaceholder: 'Find an option',
165
+ noResults: 'Nothing found',
166
+ minSelection: (count) => `Choose at least ${count}`,
167
+ }
125
168
 
126
- ### Option
169
+ export function LocalizedSelect() {
170
+ const [selectedValue, setSelectedValue] = useState('')
171
+
172
+ return (
173
+ <CustomSelect
174
+ value={selectedValue}
175
+ onValueChange={setSelectedValue}
176
+ options={[{ value: 'priority', label: 'Priority' }]}
177
+ locale="en"
178
+ messages={messages}
179
+ />
180
+ )
181
+ }
182
+ ```
183
+
184
+ ## API
185
+
186
+ ### `CustomSelect` props
187
+
188
+ | Prop | Type | Description |
189
+ | ---------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------- |
190
+ | `id` | `string` | ID for the visible trigger and associated labels. |
191
+ | `name` | `string` | Native form field name. |
192
+ | `value` | `TValue \| null \| undefined` or `ReadonlyArray<TValue>` | Controlled single or multiple value. |
193
+ | `onValueChange` | `(value: TValue) => void` or `(value: TValue[]) => void` | Typed callback for the selected mode. |
194
+ | `options` | `ReadonlyArray<Option<TValue>>` | Available options. |
195
+ | `required` | `boolean` | Enables required-field validation. Defaults to `false`. |
196
+ | `label` | `ReactNode` | Visible label linked to the trigger. |
197
+ | `description` | `ReactNode` | Supporting text linked through `aria-describedby`. |
198
+ | `error` | `string \| null` | External validation message; `null` clears external and native errors. |
199
+ | `disabled` | `boolean` | Disables interaction and validation. |
200
+ | `readOnly` | `boolean` | Prevents changes while retaining the form value. |
201
+ | `className` | `string` | Additional Tailwind classes for the visible trigger. |
202
+ | `placeholder` | `string` | Text shown while no value is selected. |
203
+ | `icon` | `ReactNode` | Icon rendered at the start of the trigger. |
204
+ | `fallbackOption` | `string` | Message shown when no options are available. |
205
+ | `multiple` | `true` | Enables array-based multiple selection. |
206
+ | `minSelection` | `number` | Minimum number of selected options. |
207
+ | `maxSelection` | `number` | Maximum number of selected options. |
208
+ | `isOptionEqualToValue` | `(optionValue, value) => boolean` | Compares option and selected values. |
209
+ | `getFormValue` | `(value: TValue) => string` | Serializes a value for native form submission. |
210
+ | `locale` | `'de' \| 'en'` | Selects the default message catalog. Defaults to `'de'`. |
211
+ | `messages` | `Partial<SelectMessages>` | Overrides individual messages and ARIA text. |
212
+ | `aria-label` | `string` | Accessible name for the visible trigger. |
213
+ | `aria-labelledby` | `string` | External accessible-label IDs. |
214
+ | `aria-describedby` | `string` | External description IDs combined with internal text. |
215
+ | `triggerRef` | `Ref<HTMLButtonElement>` | Ref for the visible, focusable trigger. |
216
+
217
+ Additional React `aria-*` attributes are forwarded to the visible trigger.
218
+
219
+ ### `Option<TValue>`
127
220
 
128
221
  ```ts
129
- interface Option {
130
- value: string
222
+ interface Option<TValue = string> {
223
+ value: TValue
131
224
  label: string
132
225
  subOption?: string
133
226
  }
134
227
  ```
135
228
 
136
- `subOption` ist optional und wird kleiner unter dem Label angezeigt. Das funktioniert sowohl in der geöffneten Auswahl als auch im geschlossenen Select. Das ist das nützlich für Zusatzinfos wie Adressen, Kundennummern oder Rollen.
229
+ `subOption` adds secondary information below the label in both the open list and the closed trigger.
137
230
 
138
- ## CSS-Integration
231
+ ## Tailwind CSS
139
232
 
140
- Füge die folgenden Zeilen in deine Haupt-CSS-Datei ein, um die Stile zu konfigurieren.
233
+ Import the package entry after Tailwind CSS in your application stylesheet:
141
234
 
142
235
  ```css
143
236
  @import 'tailwindcss';
144
- @source "../node_modules/@rentnerkev/select";
237
+ @import '@rentnerkev/select/tailwind.css';
145
238
  ```
146
239
 
147
- ## Entwicklung
240
+ The package entry scans only the published JavaScript under `dist` and provides the shared theme tokens `primary`, `primary-hover`, `background-dark`, `surface-dark`, `input-dark`, `border-dark`, `secondary-text`, and `muted-foreground`. Override them with a later `@theme` block when needed.
241
+
242
+ ## Public entry points
243
+
244
+ | Entry point | Purpose |
245
+ | --------------------------------- | ---------------------------------------------- |
246
+ | `@rentnerkev/select` | Component, messages, and public types. |
247
+ | `@rentnerkev/select/select` | `CustomSelect` component module. |
248
+ | `@rentnerkev/select/value` | Value parsing, comparison, and toggle helpers. |
249
+ | `@rentnerkev/select/messages` | Locale catalog, resolver, and message types. |
250
+ | `@rentnerkev/select/types` | Component and option types. |
251
+ | `@rentnerkev/select/tailwind.css` | Tailwind source and shared theme tokens. |
252
+ | `@rentnerkev/select/package.json` | Package metadata. |
253
+
254
+ ## Development
148
255
 
149
256
  ```bash
150
257
  bun install
@@ -152,5 +259,8 @@ bun run verify
152
259
  bun run playground:dev
153
260
  ```
154
261
 
155
- `bun run verify` prüft Typen, Oxlint, Oxfmt, den Paket-Build und den
156
- veröffentlichten Paketinhalt per Dry Run.
262
+ `bun run verify` checks types, lint, formatting, tests, the package build, and the published package contents.
263
+
264
+ ## License
265
+
266
+ MIT
package/dist/Select.d.ts CHANGED
@@ -1,3 +1,12 @@
1
- import type { CustomSelectProps } from './types.js';
2
- export declare function CustomSelect({ id, name, value, onValueChange, options, required, icon, placeholder, className, fallbackOption, multiple, minSelection, maxSelection, }: CustomSelectProps): import("react").JSX.Element;
1
+ import type { ReactElement } from 'react';
2
+ import type { CustomSelectProps, LegacyMultipleSelectProps, MultipleSelectProps, SingleSelectProps } from './types.js';
3
+ export declare function CustomSelect<TValue = string>(props: SingleSelectProps<TValue>): ReactElement;
4
+ export declare function CustomSelect<TValue = string>(props: MultipleSelectProps<TValue>): ReactElement;
5
+ /**
6
+ * @deprecated Übergib bei `multiple` ein Array. Das kommagetrennte
7
+ * Stringformat wird in Version 2.0 entfernt.
8
+ */
9
+ export declare function CustomSelect(props: LegacyMultipleSelectProps): ReactElement;
10
+ export declare function CustomSelect<TValue = string>(props: CustomSelectProps<TValue>): ReactElement;
11
+ export declare function CustomSelect(props: CustomSelectProps<string>): ReactElement;
3
12
  //# sourceMappingURL=Select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,wBAAgB,YAAY,CAAC,EACzB,EAAE,EACF,IAAI,EACJ,KAAK,EACL,aAAa,EACb,OAAO,EACP,QAAgB,EAChB,IAAI,EACJ,WAAW,EACX,SAAS,EACT,cAAc,EACd,QAAgB,EAChB,YAAY,EACZ,YAAY,GACf,EAAE,iBAAiB,+BAoUnB"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,OAAO,CAAA;AAOvD,OAAO,KAAK,EACR,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACpB,MAAM,YAAY,CAAA;AA2InB,wBAAgB,YAAY,CAAC,MAAM,GAAG,MAAM,EACxC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACjC,YAAY,CAAA;AACf,wBAAgB,YAAY,CAAC,MAAM,GAAG,MAAM,EACxC,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,GACnC,YAAY,CAAA;AACf;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,yBAAyB,GAAG,YAAY,CAAA;AAC5E,wBAAgB,YAAY,CAAC,MAAM,GAAG,MAAM,EACxC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GACjC,YAAY,CAAA;AACf,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,YAAY,CAAA"}
package/dist/Select.js CHANGED
@@ -2,74 +2,174 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as SelectPrimitive from '@radix-ui/react-select';
3
3
  import { CustomTooltip } from './Internal/Tooltip.js';
4
4
  import { AlertCircle, Check, ChevronDown } from 'lucide-react';
5
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
- export function CustomSelect({ id, name, value, onValueChange, options, required = false, icon, placeholder, className, fallbackOption, multiple = false, minSelection, maxSelection, }) {
5
+ import { useCallback, useEffect, useId, useImperativeHandle, useMemo, useRef, useState, } from 'react';
6
+ import { resolveSelectMessages } from './i18n.js';
7
+ import { isSingleValueEmpty, parseLegacyMultipleValue, toggleSelectedValue, } from './selectValue.js';
8
+ function defaultGetFormValue(value) {
9
+ return String(value);
10
+ }
11
+ function TypedCustomSelect({ value, onValueChange, multiple, getFormValue = defaultGetFormValue, ...viewProps }) {
12
+ const isOptionEqualToValue = viewProps.isOptionEqualToValue ?? Object.is;
13
+ const multipleValues = multiple && Array.isArray(value) ? value : [];
14
+ const selectedValues = multiple
15
+ ? multipleValues
16
+ : isSingleValueEmpty(value)
17
+ ? []
18
+ : [value];
19
+ const formEntries = selectedValues.map((selectedValue) => {
20
+ const optionIndex = viewProps.options.findIndex((option) => isOptionEqualToValue(option.value, selectedValue));
21
+ const formValue = getFormValue(selectedValue);
22
+ return {
23
+ key: optionIndex >= 0
24
+ ? `option-${optionIndex}`
25
+ : `${typeof selectedValue}-${formValue}`,
26
+ value: formValue,
27
+ };
28
+ });
29
+ function handleSelectValue(nextValue) {
30
+ if (multiple) {
31
+ const nextValues = toggleSelectedValue(multipleValues, nextValue, isOptionEqualToValue, viewProps.maxSelection);
32
+ if (nextValues) {
33
+ onValueChange(nextValues);
34
+ }
35
+ return;
36
+ }
37
+ onValueChange(nextValue);
38
+ }
39
+ return (_jsx(SelectView, { ...viewProps, selectedValues: selectedValues, formEntries: formEntries, multiple: multiple === true, onSelectValue: handleSelectValue }));
40
+ }
41
+ function LegacyCustomSelect({ value, onValueChange, multiple, getFormValue = defaultGetFormValue, ...viewProps }) {
42
+ const isOptionEqualToValue = viewProps.isOptionEqualToValue ?? Object.is;
43
+ const selectedValues = multiple
44
+ ? parseLegacyMultipleValue(value)
45
+ : isSingleValueEmpty(value)
46
+ ? []
47
+ : [value];
48
+ function handleSelectValue(nextValue) {
49
+ if (multiple) {
50
+ const nextValues = toggleSelectedValue(selectedValues, nextValue, isOptionEqualToValue, viewProps.maxSelection);
51
+ if (nextValues) {
52
+ onValueChange(nextValues.join(','));
53
+ }
54
+ return;
55
+ }
56
+ onValueChange(nextValue);
57
+ }
58
+ return (_jsx(SelectView, { ...viewProps, selectedValues: selectedValues, formEntries: [
59
+ {
60
+ key: 'legacy-value',
61
+ value: multiple ? value : getFormValue(value),
62
+ },
63
+ ], multiple: multiple, onSelectValue: handleSelectValue }));
64
+ }
65
+ function isLegacyMultipleSelect(props) {
66
+ return (typeof props.multiple === 'boolean' && typeof props.value === 'string');
67
+ }
68
+ export function CustomSelect(props) {
69
+ if (isLegacyMultipleSelect(props)) {
70
+ return _jsx(LegacyCustomSelect, { ...props });
71
+ }
72
+ return _jsx(TypedCustomSelect, { ...props });
73
+ }
74
+ function mergeAriaIds(...values) {
75
+ const ids = values.flatMap((value) => value?.split(/\s+/).filter(Boolean) ?? []);
76
+ return [...new Set(ids)].join(' ') || undefined;
77
+ }
78
+ function SelectView({ id, name, options, selectedValues, formEntries, onSelectValue, required = false, label, description, error: externalError, disabled = false, readOnly = false, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, triggerRef, icon, placeholder, className, fallbackOption, multiple = false, minSelection, maxSelection, locale = 'de', messages: providedMessages, isOptionEqualToValue: isOptionEqualToValueProp, ...ariaProps }) {
79
+ const messages = resolveSelectMessages(locale, providedMessages);
7
80
  const [open, setOpen] = useState(false);
8
81
  const [searchValue, setSearchValue] = useState('');
9
82
  const [isTouched, setIsTouched] = useState(false);
10
83
  const searchInputRef = useRef(null);
11
84
  const validationInputRef = useRef(null);
85
+ const internalTriggerRef = useRef(null);
12
86
  const shouldKeepOpen = useRef(false);
13
- const selectedValues = useMemo(() => {
14
- if (!value)
15
- return [];
16
- return multiple ? value.split(',') : [value];
17
- }, [value, multiple]);
18
- const error = useMemo(() => {
87
+ const generatedId = useId();
88
+ const triggerId = id ?? `select-${generatedId}`;
89
+ const labelId = `${triggerId}-label`;
90
+ const descriptionId = `${triggerId}-description`;
91
+ const errorId = `${triggerId}-error`;
92
+ const optionEntries = useMemo(() => options.map((option, index) => ({
93
+ option,
94
+ radixValue: `option-${index}`,
95
+ })), [options]);
96
+ const labelledBy = mergeAriaIds(ariaLabelledBy, label !== undefined && label !== null ? labelId : undefined);
97
+ const setTriggerRef = useCallback((node) => {
98
+ internalTriggerRef.current = node;
99
+ if (typeof triggerRef === 'function') {
100
+ triggerRef(node);
101
+ }
102
+ }, [triggerRef]);
103
+ useImperativeHandle(typeof triggerRef === 'object' ? triggerRef : null, () => internalTriggerRef.current);
104
+ const internalError = useMemo(() => {
19
105
  if (required && selectedValues.length === 0) {
20
- return 'Dieses Feld ist erforderlich';
106
+ return messages.required;
21
107
  }
22
108
  if (multiple &&
23
109
  minSelection !== undefined &&
24
110
  selectedValues.length < minSelection) {
25
- return `Mindestens ${minSelection} Optionen auswählen`;
111
+ return messages.minSelection(minSelection);
26
112
  }
27
113
  if (multiple &&
28
114
  maxSelection !== undefined &&
29
115
  selectedValues.length > maxSelection) {
30
- return `Maximal ${maxSelection} Optionen auswählen`;
116
+ return messages.maxSelection(maxSelection);
31
117
  }
32
118
  return null;
33
- }, [required, multiple, minSelection, maxSelection, selectedValues]);
34
- const hasError = isTouched && error !== null;
119
+ }, [
120
+ required,
121
+ multiple,
122
+ minSelection,
123
+ maxSelection,
124
+ selectedValues,
125
+ messages,
126
+ ]);
127
+ const resolvedError = externalError !== undefined ? externalError : internalError;
128
+ const hasError = externalError !== undefined
129
+ ? Boolean(resolvedError)
130
+ : isTouched && Boolean(resolvedError);
35
131
  const hasLeftIcon = Boolean(icon || hasError);
132
+ const describedBy = mergeAriaIds(ariaDescribedBy, description !== undefined && description !== null
133
+ ? descriptionId
134
+ : undefined, hasError ? errorId : undefined);
36
135
  const filteredOptions = useMemo(() => {
37
136
  const normalizedSearch = searchValue.trim().toLowerCase();
38
137
  if (!normalizedSearch) {
39
- return options;
138
+ return optionEntries;
40
139
  }
41
- return options.filter((option) => {
42
- const label = option.label.toLowerCase();
43
- const optionValue = option.value.toLowerCase();
140
+ return optionEntries.filter(({ option }) => {
141
+ const optionLabel = option.label.toLowerCase();
142
+ const optionValue = String(option.value).toLowerCase();
44
143
  const subOption = option.subOption?.toLowerCase() || '';
45
- return (label.includes(normalizedSearch) ||
144
+ return (optionLabel.includes(normalizedSearch) ||
46
145
  optionValue.includes(normalizedSearch) ||
47
146
  subOption.includes(normalizedSearch));
48
147
  });
49
- }, [options, searchValue]);
50
- const selectedOptions = useMemo(() => {
51
- return options.filter((option) => selectedValues.includes(option.value));
52
- }, [options, selectedValues]);
53
- function handleValueChange(nextValue) {
54
- if (multiple) {
55
- let nextArray = selectedValues.includes(nextValue)
56
- ? selectedValues.filter((v) => v !== nextValue)
57
- : [...selectedValues, nextValue];
58
- if (maxSelection !== undefined &&
59
- nextArray.length > maxSelection &&
60
- !selectedValues.includes(nextValue)) {
61
- return;
62
- }
63
- onValueChange(nextArray.join(','));
148
+ }, [optionEntries, searchValue]);
149
+ const isOptionEqualToValue = isOptionEqualToValueProp ?? Object.is;
150
+ const selectedEntries = useMemo(() => {
151
+ return optionEntries.filter(({ option }) => selectedValues.some((value) => isOptionEqualToValue(option.value, value)));
152
+ }, [isOptionEqualToValue, optionEntries, selectedValues]);
153
+ const selectedRadixValue = multiple
154
+ ? ''
155
+ : (selectedEntries[0]?.radixValue ?? '');
156
+ function handleValueChange(nextRadixValue) {
157
+ if (disabled || readOnly) {
158
+ return;
159
+ }
160
+ const entry = optionEntries.find(({ radixValue }) => radixValue === nextRadixValue);
161
+ if (!entry) {
162
+ return;
64
163
  }
65
- else {
164
+ if (!multiple) {
66
165
  setSearchValue('');
67
- onValueChange(nextValue);
68
166
  }
167
+ onSelectValue(entry.option.value);
69
168
  }
70
169
  function handleInvalid(event) {
71
170
  event.preventDefault();
72
171
  setIsTouched(true);
172
+ internalTriggerRef.current?.focus();
73
173
  }
74
174
  const focusSearchInput = useCallback(() => {
75
175
  requestAnimationFrame(() => searchInputRef.current?.focus());
@@ -81,8 +181,8 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
81
181
  }
82
182
  }, [open, focusSearchInput]);
83
183
  useEffect(() => {
84
- validationInputRef.current?.setCustomValidity(error || '');
85
- }, [error]);
184
+ validationInputRef.current?.setCustomValidity(disabled ? '' : resolvedError || '');
185
+ }, [disabled, resolvedError]);
86
186
  useEffect(() => {
87
187
  const input = validationInputRef.current;
88
188
  const form = input?.form;
@@ -100,7 +200,14 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
100
200
  form.removeEventListener('submit', handleFormSubmit);
101
201
  };
102
202
  }, []);
103
- return (_jsxs(SelectPrimitive.Root, { open: open, onOpenChange: (nextOpen) => {
203
+ if ((disabled || readOnly) && open) {
204
+ setOpen(false);
205
+ }
206
+ return (_jsxs(SelectPrimitive.Root, { open: open && !disabled && !readOnly, onOpenChange: (nextOpen) => {
207
+ if (disabled || readOnly) {
208
+ setOpen(false);
209
+ return;
210
+ }
104
211
  if (multiple && !nextOpen && shouldKeepOpen.current) {
105
212
  shouldKeepOpen.current = false;
106
213
  return;
@@ -112,12 +219,38 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
112
219
  else {
113
220
  setSearchValue('');
114
221
  }
115
- }, value: multiple ? '' : value, onValueChange: handleValueChange, children: [_jsxs("div", { className: "group relative", children: [_jsx("input", { ref: validationInputRef, name: name, value: value, onChange: () => undefined, onInvalid: handleInvalid, required: required, tabIndex: -1, "aria-hidden": "true", className: "pointer-events-none absolute left-0 top-1/2 h-px w-px -translate-y-1/2 opacity-0" }), hasLeftIcon && (_jsx("div", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 z-10 text-gray-500", children: hasError ? (_jsx(CustomTooltip, { content: error || '', side: "bottom", children: _jsx(AlertCircle, { className: "h-4 w-4 text-red-500" }) })) : (_jsx("span", { className: "pointer-events-none flex items-center transition-colors group-focus-within:text-primary [&>svg]:h-4 [&>svg]:w-4", children: icon })) })), _jsxs(SelectPrimitive.Trigger, { id: id, "aria-invalid": hasError, className: `bg-input-dark border text-[11px] text-gray-300 rounded-lg ${hasLeftIcon ? 'pl-8' : 'pl-3'} pr-8 py-2 outline-none w-full uppercase font-bold tracking-wider cursor-pointer flex items-center justify-between transition-colors min-w-45 ${hasError
222
+ }, value: selectedRadixValue, onValueChange: handleValueChange, children: [_jsxs("div", { className: "group relative", children: [label !== undefined && label !== null && (_jsx("label", { id: labelId, htmlFor: triggerId, className: "mb-1 block text-sm font-medium text-gray-300", children: label })), _jsx("input", { ref: validationInputRef, name: name, value: formEntries[0]?.value ?? '', onChange: () => undefined, onInvalid: handleInvalid, required: required &&
223
+ selectedValues.length === 0 &&
224
+ !disabled &&
225
+ externalError === undefined, disabled: disabled, readOnly: readOnly, tabIndex: -1, "aria-hidden": "true", className: "pointer-events-none absolute left-0 top-1/2 h-px w-px -translate-y-1/2 opacity-0" }), multiple &&
226
+ formEntries
227
+ .slice(1)
228
+ .map((formEntry) => (_jsx("input", { type: "hidden", name: name, value: formEntry.value, disabled: disabled, readOnly: readOnly }, formEntry.key))), hasLeftIcon && (_jsx("div", { className: "absolute left-2.5 top-1/2 -translate-y-1/2 z-10 text-gray-500", children: hasError ? (_jsx(CustomTooltip, { content: resolvedError || '', side: "bottom", children: _jsx(AlertCircle, { className: "h-4 w-4 text-red-500" }) })) : (_jsx("span", { className: "pointer-events-none flex items-center transition-colors group-focus-within:text-primary [&>svg]:h-4 [&>svg]:w-4", children: icon })) })), _jsxs(SelectPrimitive.Trigger, { ref: setTriggerRef, id: triggerId, disabled: disabled, ...ariaProps, "aria-invalid": hasError || ariaProps['aria-invalid'] || undefined, "aria-required": disabled
229
+ ? undefined
230
+ : externalError === undefined
231
+ ? required ||
232
+ ariaProps['aria-required'] ||
233
+ undefined
234
+ : ariaProps['aria-required'], "aria-label": ariaLabel, "aria-labelledby": labelledBy, "aria-describedby": describedBy, "aria-errormessage": hasError ? errorId : ariaProps['aria-errormessage'], "aria-readonly": readOnly || ariaProps['aria-readonly'] || undefined, "aria-disabled": disabled || ariaProps['aria-disabled'] || undefined, onPointerDown: (event) => {
235
+ if (readOnly) {
236
+ event.preventDefault();
237
+ event.currentTarget.focus();
238
+ }
239
+ }, onKeyDown: (event) => {
240
+ if (readOnly &&
241
+ (event.key === 'Enter' ||
242
+ event.key === ' ' ||
243
+ event.key === 'ArrowDown' ||
244
+ event.key === 'ArrowUp')) {
245
+ event.preventDefault();
246
+ }
247
+ }, className: `bg-input-dark border text-[11px] text-gray-300 rounded-lg ${hasLeftIcon ? 'pl-8' : 'pl-3'} pr-8 py-2 outline-none w-full uppercase font-bold tracking-wider cursor-pointer flex items-center justify-between transition-colors min-w-45 disabled:cursor-not-allowed disabled:opacity-50 ${hasError
116
248
  ? 'border-red-500 focus:ring-2 focus:ring-red-500/50 data-[state=open]:border-red-500'
117
- : 'border-border-dark focus:border-primary data-[state=open]:border-primary'} ${className || ''}`, children: [_jsx("span", { className: "min-w-0 flex-1 text-left", children: selectedOptions.length > 0 ? (_jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "truncate leading-4", children: selectedOptions
118
- .map((o) => o.label)
119
- .join(', ') }), selectedOptions.length === 1 &&
120
- selectedOptions[0].subOption && (_jsx("span", { className: "truncate text-[10px] font-semibold leading-3 tracking-normal text-gray-500 normal-case", children: selectedOptions[0].subOption }))] })) : (_jsx(SelectPrimitive.Value, { placeholder: placeholder })) }), _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "h-4 w-4 opacity-50 absolute right-2.5 top-1/2 -translate-y-1/2" }) })] })] }), _jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { position: "popper", sideOffset: 4, onFocusCapture: (event) => {
249
+ : 'border-border-dark focus:border-primary data-[state=open]:border-primary'} ${className || ''}`, children: [_jsx("span", { className: "min-w-0 flex-1 text-left", children: selectedEntries.length > 0 ? (_jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "truncate leading-4", children: selectedEntries
250
+ .map(({ option }) => option.label)
251
+ .join(', ') }), selectedEntries.length === 1 &&
252
+ selectedEntries[0].option.subOption && (_jsx("span", { className: "truncate text-[10px] font-semibold leading-3 tracking-normal text-gray-500 normal-case", children: selectedEntries[0].option
253
+ .subOption }))] })) : (_jsx(SelectPrimitive.Value, { placeholder: placeholder })) }), _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "h-4 w-4 opacity-50 absolute right-2.5 top-1/2 -translate-y-1/2" }) })] })] }), description !== undefined && description !== null && (_jsx("div", { id: descriptionId, className: "mt-1 text-xs text-gray-400", children: description })), hasError && (_jsx("span", { id: errorId, className: "sr-only", children: resolvedError })), _jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { position: "popper", sideOffset: 4, onFocusCapture: (event) => {
121
254
  if (event.target !== searchInputRef.current &&
122
255
  searchInputRef.current) {
123
256
  event.stopPropagation();
@@ -135,7 +268,7 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
135
268
  event.stopPropagation();
136
269
  setSearchValue((current) => `${current}${event.key}`);
137
270
  focusSearchInput();
138
- }, className: "z-9998 w-(--radix-select-trigger-width) min-w-45 overflow-hidden rounded-lg border border-border-dark bg-surface-dark shadow-xl animate-in fade-in zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", children: [_jsx("div", { className: "border-b border-border-dark p-1", children: _jsx("input", { ref: searchInputRef, "aria-label": "Optionen suchen", value: searchValue, onChange: (event) => setSearchValue(event.target.value), onPointerDownCapture: (event) => event.stopPropagation(), onKeyDownCapture: (event) => {
271
+ }, className: "z-9998 w-(--radix-select-trigger-width) min-w-45 overflow-hidden rounded-lg border border-border-dark bg-surface-dark shadow-xl animate-in fade-in zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", children: [_jsx("div", { className: "border-b border-border-dark p-1", children: _jsx("input", { ref: searchInputRef, "aria-label": messages.searchOptions, value: searchValue, onChange: (event) => setSearchValue(event.target.value), onPointerDownCapture: (event) => event.stopPropagation(), onKeyDownCapture: (event) => {
139
272
  if (event.key !== 'Escape') {
140
273
  event.stopPropagation();
141
274
  }
@@ -143,7 +276,7 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
143
276
  if (event.key !== 'Escape') {
144
277
  event.stopPropagation();
145
278
  }
146
- }, placeholder: "Suchen...", className: "h-8 w-full rounded-md border border-border-dark bg-input-dark px-2 text-[11px] font-bold uppercase tracking-wider text-gray-300 outline-none placeholder:text-gray-500 focus:border-primary" }) }), _jsx("div", { className: "rentnerselect-scrollbar max-h-[min(var(--radix-select-content-available-height),16rem)] overflow-y-scroll scrollbar-gutter-stable", children: _jsx(SelectPrimitive.Viewport, { className: "p-1", children: filteredOptions.length > 0 ? (filteredOptions.map((option) => (_jsxs(SelectPrimitive.Item, { value: option.value, onPointerDown: () => {
279
+ }, placeholder: messages.searchPlaceholder, className: "h-8 w-full rounded-md border border-border-dark bg-input-dark px-2 text-[11px] font-bold uppercase tracking-wider text-gray-300 outline-none placeholder:text-gray-500 focus:border-primary" }) }), _jsx("div", { className: "rentnerselect-scrollbar max-h-[min(var(--radix-select-content-available-height),16rem)] overflow-y-scroll scrollbar-gutter-stable", children: _jsx(SelectPrimitive.Viewport, { className: "p-1", children: filteredOptions.length > 0 ? (filteredOptions.map(({ option, radixValue }) => (_jsxs(SelectPrimitive.Item, { value: radixValue, onPointerDown: () => {
147
280
  if (multiple) {
148
281
  shouldKeepOpen.current = true;
149
282
  }
@@ -153,8 +286,8 @@ export function CustomSelect({ id, name, value, onValueChange, options, required
153
286
  e.key === ' ')) {
154
287
  shouldKeepOpen.current = true;
155
288
  }
156
- }, className: "relative flex w-full cursor-pointer select-none items-center rounded-md py-2 pl-8 pr-2 text-[11px] font-bold uppercase tracking-wider text-gray-300 outline-none focus:bg-primary/20 focus:text-primary transition-colors data-disabled:opacity-50", children: [_jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: multiple ? (selectedValues.includes(option.value) && (_jsx(Check, { className: "h-4 w-4" }))) : (_jsx(SelectPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4" }) })) }), _jsx(SelectPrimitive.ItemText, { children: _jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "truncate leading-4", children: option.label }), option.subOption && (_jsx("span", { className: "truncate text-[10px] font-semibold leading-3 tracking-normal text-gray-500 normal-case", children: option.subOption }))] }) })] }, option.value)))) : (_jsx("div", { className: "relative flex w-full select-none items-center rounded-md py-2 pl-8 pr-2 text-[11px] font-bold uppercase tracking-wider text-gray-500 opacity-60 outline-none italic cursor-not-allowed", children: searchValue.trim()
157
- ? 'Keine Ergebnisse'
158
- : fallbackOption || 'Keine Optionen' })) }) })] }) })] }));
289
+ }, className: "relative flex w-full cursor-pointer select-none items-center rounded-md py-2 pl-8 pr-2 text-[11px] font-bold uppercase tracking-wider text-gray-300 outline-none focus:bg-primary/20 focus:text-primary transition-colors data-disabled:opacity-50", children: [_jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: multiple ? (selectedValues.some((value) => isOptionEqualToValue(option.value, value)) && (_jsx(Check, { className: "h-4 w-4" }))) : (_jsx(SelectPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4" }) })) }), _jsx(SelectPrimitive.ItemText, { children: _jsxs("span", { className: "flex min-w-0 flex-col gap-0.5", children: [_jsx("span", { className: "truncate leading-4", children: option.label }), option.subOption && (_jsx("span", { className: "truncate text-[10px] font-semibold leading-3 tracking-normal text-gray-500 normal-case", children: option.subOption }))] }) })] }, radixValue)))) : (_jsx("div", { className: "relative flex w-full select-none items-center rounded-md py-2 pl-8 pr-2 text-[11px] font-bold uppercase tracking-wider text-gray-500 opacity-60 outline-none italic cursor-not-allowed", children: searchValue.trim()
290
+ ? messages.noResults
291
+ : fallbackOption || messages.noOptions })) }) })] }) })] }));
159
292
  }
160
293
  //# sourceMappingURL=Select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Select.js","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export type SelectLocale = 'de' | 'en';
2
+ export interface SelectMessages {
3
+ required: string;
4
+ minSelection: (count: number) => string;
5
+ maxSelection: (count: number) => string;
6
+ searchOptions: string;
7
+ searchPlaceholder: string;
8
+ noResults: string;
9
+ noOptions: string;
10
+ }
11
+ export declare const selectMessageCatalog: Record<SelectLocale, SelectMessages>;
12
+ export declare function resolveSelectMessages(locale?: SelectLocale, messages?: Partial<SelectMessages>): SelectMessages;
13
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,CAAA;AAEtC,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CACpB;AAsBD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,cAAc,CAGrE,CAAA;AAED,wBAAgB,qBAAqB,CACjC,MAAM,GAAE,YAAmB,EAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GACnC,cAAc,CAKhB"}
package/dist/i18n.js ADDED
@@ -0,0 +1,29 @@
1
+ const germanMessages = {
2
+ required: 'Dieses Feld ist erforderlich',
3
+ minSelection: (count) => `Mindestens ${count} Optionen auswählen`,
4
+ maxSelection: (count) => `Maximal ${count} Optionen auswählen`,
5
+ searchOptions: 'Optionen suchen',
6
+ searchPlaceholder: 'Suchen...',
7
+ noResults: 'Keine Ergebnisse',
8
+ noOptions: 'Keine Optionen',
9
+ };
10
+ const englishMessages = {
11
+ required: 'This field is required',
12
+ minSelection: (count) => `Select at least ${count} options`,
13
+ maxSelection: (count) => `Select at most ${count} options`,
14
+ searchOptions: 'Search options',
15
+ searchPlaceholder: 'Search...',
16
+ noResults: 'No results',
17
+ noOptions: 'No options',
18
+ };
19
+ export const selectMessageCatalog = {
20
+ de: germanMessages,
21
+ en: englishMessages,
22
+ };
23
+ export function resolveSelectMessages(locale = 'de', messages) {
24
+ return {
25
+ ...selectMessageCatalog[locale],
26
+ ...messages,
27
+ };
28
+ }
29
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAYA,MAAM,cAAc,GAAmB;IACnC,QAAQ,EAAE,8BAA8B;IACxC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,KAAK,qBAAqB;IACjE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,qBAAqB;IAC9D,aAAa,EAAE,iBAAiB;IAChC,iBAAiB,EAAE,WAAW;IAC9B,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,gBAAgB;CAC9B,CAAA;AAED,MAAM,eAAe,GAAmB;IACpC,QAAQ,EAAE,wBAAwB;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,KAAK,UAAU;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,KAAK,UAAU;IAC1D,aAAa,EAAE,gBAAgB;IAC/B,iBAAiB,EAAE,WAAW;IAC9B,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE,YAAY;CAC1B,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAyC;IACtE,EAAE,EAAE,cAAc;IAClB,EAAE,EAAE,eAAe;CACtB,CAAA;AAED,MAAM,UAAU,qBAAqB,CACjC,MAAM,GAAiB,IAAI,EAC3B,QAAkC;IAElC,OAAO;QACH,GAAG,oBAAoB,CAAC,MAAM,CAAC;QAC/B,GAAG,QAAQ;KACd,CAAA;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { CustomSelect } from './Select.js';
2
- export type { CustomSelectProps, Option } from './types.js';
2
+ export { resolveSelectMessages, selectMessageCatalog } from './i18n.js';
3
+ export type { CustomSelectProps, LegacyMultipleSelectProps, MultipleSelectProps, Option, SingleSelectProps, } from './types.js';
4
+ export type { SelectLocale, SelectMessages } from './types.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,YAAY,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AACvE,YAAY,EACR,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,MAAM,EACN,iBAAiB,GACpB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { CustomSelect } from './Select.js';
2
+ export { resolveSelectMessages, selectMessageCatalog } from './i18n.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type SelectValueComparator<TValue> = (optionValue: TValue, value: TValue) => boolean;
2
+ export declare function isSingleValueEmpty(value: unknown): value is '' | null | undefined;
3
+ export declare function parseLegacyMultipleValue(value: string): Array<string>;
4
+ export declare function toggleSelectedValue<TValue>(selectedValues: ReadonlyArray<TValue>, nextValue: TValue, isEqual: SelectValueComparator<TValue>, maxSelection?: number): Array<TValue> | null;
5
+ //# sourceMappingURL=selectValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectValue.d.ts","sourceRoot":"","sources":["../src/selectValue.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,CAAC,MAAM,IAAI,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,KACZ,OAAO,CAAA;AAEZ,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,EAAE,GAAG,IAAI,GAAG,SAAS,CAEhC;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAErE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EACtC,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,EACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,qBAAqB,CAAC,MAAM,CAAC,EACtC,YAAY,CAAC,EAAE,MAAM,GACtB,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CActB"}
@@ -0,0 +1,17 @@
1
+ export function isSingleValueEmpty(value) {
2
+ return value === null || value === undefined || value === '';
3
+ }
4
+ export function parseLegacyMultipleValue(value) {
5
+ return value ? value.split(',') : [];
6
+ }
7
+ export function toggleSelectedValue(selectedValues, nextValue, isEqual, maxSelection) {
8
+ const selectedIndex = selectedValues.findIndex((value) => isEqual(nextValue, value));
9
+ if (selectedIndex >= 0) {
10
+ return selectedValues.filter((value) => !isEqual(nextValue, value));
11
+ }
12
+ if (maxSelection !== undefined && selectedValues.length >= maxSelection) {
13
+ return null;
14
+ }
15
+ return [...selectedValues, nextValue];
16
+ }
17
+ //# sourceMappingURL=selectValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectValue.js","sourceRoot":"","sources":["../src/selectValue.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,kBAAkB,CAC9B,KAAc;IAEd,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAA;AAChE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa;IAClD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,cAAqC,EACrC,SAAiB,EACjB,OAAsC,EACtC,YAAqB;IAErB,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CACrD,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAC5B,CAAA;IAED,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,YAAY,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC;QACtE,OAAO,IAAI,CAAA;IACf,CAAC;IAED,OAAO,CAAC,GAAG,cAAc,EAAE,SAAS,CAAC,CAAA;AACzC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,22 +1,57 @@
1
- import type { ReactNode } from 'react';
2
- export interface Option {
3
- value: string;
1
+ import type { AriaAttributes, ReactNode, Ref } from 'react';
2
+ import type { SelectLocale, SelectMessages } from './i18n.js';
3
+ export interface Option<TValue = string> {
4
+ value: TValue;
4
5
  label: string;
5
6
  subOption?: string;
6
7
  }
7
- export interface CustomSelectProps {
8
+ interface SharedCustomSelectProps<TValue> extends AriaAttributes {
8
9
  id?: string;
9
10
  name?: string;
10
- value: string;
11
- onValueChange: (value: string) => void;
12
- options: Array<Option>;
11
+ options: ReadonlyArray<Option<TValue>>;
13
12
  required?: boolean;
13
+ label?: ReactNode;
14
+ description?: ReactNode;
15
+ error?: string | null;
16
+ disabled?: boolean;
17
+ readOnly?: boolean;
18
+ triggerRef?: Ref<HTMLButtonElement>;
14
19
  icon?: ReactNode;
15
20
  placeholder?: string;
16
21
  className?: string;
17
22
  fallbackOption?: string;
18
- multiple?: boolean;
19
23
  minSelection?: number;
20
24
  maxSelection?: number;
25
+ locale?: SelectLocale;
26
+ messages?: Partial<SelectMessages>;
27
+ isOptionEqualToValue?: (optionValue: TValue, value: TValue) => boolean;
28
+ getFormValue?: (value: TValue) => string;
29
+ }
30
+ export interface SingleSelectProps<TValue = string> extends SharedCustomSelectProps<TValue> {
31
+ value: TValue | null | undefined;
32
+ onValueChange: (value: TValue) => void;
33
+ multiple?: false;
34
+ }
35
+ export interface MultipleSelectProps<TValue = string> extends SharedCustomSelectProps<TValue> {
36
+ value: ReadonlyArray<TValue>;
37
+ onValueChange: (value: Array<TValue>) => void;
38
+ multiple: true;
39
+ }
40
+ /**
41
+ * @deprecated Verwende `MultipleSelectProps<TValue>` mit `TValue[]`. Das
42
+ * kommagetrennte Stringformat wird in Version 2.0 entfernt.
43
+ */
44
+ export interface LegacyMultipleSelectProps extends SharedCustomSelectProps<string> {
45
+ /** @deprecated Übergib ein Array und behandle Änderungen als `string[]`. */
46
+ value: string;
47
+ /** @deprecated Der Callback erhält mit der Array-API ein `string[]`. */
48
+ onValueChange: (value: string) => void;
49
+ /**
50
+ * @deprecated Dynamische Booleans bleiben bis Version 2.0 kompatibel.
51
+ * Verwende für neue Mehrfachauswahlen `multiple: true` mit einem Array.
52
+ */
53
+ multiple: boolean;
21
54
  }
55
+ export type CustomSelectProps<TValue = string> = SingleSelectProps<TValue> | MultipleSelectProps<TValue> | ([TValue] extends [string] ? [string] extends [TValue] ? LegacyMultipleSelectProps : never : never);
56
+ export type { SelectLocale, SelectMessages } from './i18n.js';
22
57
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE7D,MAAM,WAAW,MAAM,CAAC,MAAM,GAAG,MAAM;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,uBAAuB,CAAC,MAAM,CAAE,SAAQ,cAAc;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACnC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;IAClC,oBAAoB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACtE,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CAC3C;AAED,MAAM,WAAW,iBAAiB,CAC9B,MAAM,GAAG,MAAM,CACjB,SAAQ,uBAAuB,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAChC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,EAAE,KAAK,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB,CAChC,MAAM,GAAG,MAAM,CACjB,SAAQ,uBAAuB,CAAC,MAAM,CAAC;IACrC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC7C,QAAQ,EAAE,IAAI,CAAA;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,uBAAuB,CAAC,MAAM,CAAC;IAC9E,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,wEAAwE;IACxE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,MAAM,iBAAiB,CAAC,MAAM,GAAG,MAAM,IACvC,iBAAiB,CAAC,MAAM,CAAC,GACzB,mBAAmB,CAAC,MAAM,CAAC,GAC3B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GACpB,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GACrB,yBAAyB,GACzB,KAAK,GACT,KAAK,CAAC,CAAA;AAElB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rentnerkev/select",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Accessible, searchable React select with single and multiple selection support.",
5
5
  "author": "RentnerKev",
6
6
  "license": "MIT",
@@ -8,12 +8,16 @@
8
8
  "types": "dist/index.d.ts",
9
9
  "type": "module",
10
10
  "files": [
11
- "dist"
11
+ "dist",
12
+ "tailwind.css"
13
+ ],
14
+ "sideEffects": [
15
+ "./tailwind.css"
12
16
  ],
13
- "sideEffects": false,
14
17
  "scripts": {
15
18
  "build": "bun -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\" && tsc",
16
- "typecheck": "tsc --noEmit",
19
+ "typecheck": "tsc --noEmit && tsc --project tsconfig.type-tests.json",
20
+ "test": "bun test",
17
21
  "prepare": "bun run build",
18
22
  "pack:check": "bun pm pack --dry-run",
19
23
  "playground:dev": "bun --cwd playground dev",
@@ -22,7 +26,7 @@
22
26
  "lint:fix": "oxlint --fix .",
23
27
  "format": "oxfmt .",
24
28
  "format:check": "oxfmt --check .",
25
- "verify": "bun run typecheck && bun run lint && bun run format:check && bun run build && bun run pack:check"
29
+ "verify": "bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build && bun run pack:check"
26
30
  },
27
31
  "repository": {
28
32
  "type": "git",
@@ -37,17 +41,21 @@
37
41
  "registry": "https://registry.npmjs.org"
38
42
  },
39
43
  "peerDependencies": {
40
- "react": "^19.2.8",
41
- "react-dom": "^19.2.8"
44
+ "react": "^19.0.0",
45
+ "react-dom": "^19.0.0"
42
46
  },
43
47
  "devDependencies": {
48
+ "@happy-dom/global-registrator": "^20.14.5",
49
+ "@testing-library/react": "^16.3.3",
50
+ "@testing-library/user-event": "^14.6.7",
44
51
  "@types/react": "^19.3.0",
45
52
  "@types/react-dom": "^19.2.4",
53
+ "happy-dom": "^20.14.5",
54
+ "oxfmt": "^0.68.0",
55
+ "oxlint": "^1.83.0",
46
56
  "react": "^19.3.0",
47
57
  "react-dom": "^19.3.0",
48
- "typescript": "^7.0.2",
49
- "oxfmt": "^0.66.0",
50
- "oxlint": "^1.83.0"
58
+ "typescript": "^7.0.2"
51
59
  },
52
60
  "dependencies": {
53
61
  "@radix-ui/react-select": "^2.3.7",
@@ -59,14 +67,24 @@
59
67
  "import": "./dist/index.js",
60
68
  "types": "./dist/index.d.ts"
61
69
  },
70
+ "./tailwind.css": "./tailwind.css",
62
71
  "./select": {
63
72
  "import": "./dist/Select.js",
64
73
  "types": "./dist/Select.d.ts"
65
74
  },
75
+ "./value": {
76
+ "import": "./dist/selectValue.js",
77
+ "types": "./dist/selectValue.d.ts"
78
+ },
79
+ "./messages": {
80
+ "import": "./dist/i18n.js",
81
+ "types": "./dist/i18n.d.ts"
82
+ },
66
83
  "./types": {
67
84
  "import": "./dist/types.js",
68
85
  "types": "./dist/types.d.ts"
69
- }
86
+ },
87
+ "./package.json": "./package.json"
70
88
  },
71
89
  "packageManager": "bun@1.4.2"
72
90
  }
package/tailwind.css ADDED
@@ -0,0 +1,12 @@
1
+ @source "./dist/**/*.js";
2
+
3
+ @theme {
4
+ --color-primary: #13ecd6;
5
+ --color-primary-hover: #0fbdaa;
6
+ --color-background-dark: #0f1014;
7
+ --color-surface-dark: #181a1f;
8
+ --color-input-dark: #22252b;
9
+ --color-border-dark: #2e323b;
10
+ --color-secondary-text: #9ca3af;
11
+ --color-muted-foreground: #9ca3af;
12
+ }