@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 +193 -83
- package/dist/Select.d.ts +11 -2
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +181 -48
- package/dist/Select.js.map +1 -1
- package/dist/i18n.d.ts +13 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +29 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/selectValue.d.ts +5 -0
- package/dist/selectValue.d.ts.map +1 -0
- package/dist/selectValue.js +17 -0
- package/dist/selectValue.js.map +1 -0
- package/dist/types.d.ts +43 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +29 -11
- package/tailwind.css +12 -0
package/README.md
CHANGED
|
@@ -1,150 +1,257 @@
|
|
|
1
1
|
# @rentnerkev/select
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
7
|
+
Install the package with npm:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
npm install @rentnerkev/select
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Or with Bun:
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
```bash
|
|
16
|
+
bun add @rentnerkev/select
|
|
17
|
+
```
|
|
16
18
|
|
|
17
|
-
|
|
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
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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: '
|
|
140
|
+
{ value: 'consulting', label: 'Consulting' },
|
|
90
141
|
{ value: 'support', label: 'Support' },
|
|
91
|
-
{ value: '
|
|
142
|
+
{ value: 'sales', label: 'Sales' },
|
|
92
143
|
]}
|
|
93
|
-
placeholder="
|
|
144
|
+
placeholder="Choose a department"
|
|
94
145
|
required
|
|
95
|
-
|
|
146
|
+
locale="en"
|
|
96
147
|
/>
|
|
97
148
|
|
|
98
|
-
<button type="submit">
|
|
149
|
+
<button type="submit">Submit</button>
|
|
99
150
|
</form>
|
|
100
151
|
)
|
|
101
152
|
}
|
|
102
153
|
```
|
|
103
154
|
|
|
104
|
-
##
|
|
155
|
+
## Localization
|
|
105
156
|
|
|
106
|
-
|
|
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
|
-
|
|
159
|
+
```tsx
|
|
160
|
+
import { CustomSelect, type SelectMessages } from '@rentnerkev/select'
|
|
161
|
+
import { useState } from 'react'
|
|
109
162
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
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:
|
|
222
|
+
interface Option<TValue = string> {
|
|
223
|
+
value: TValue
|
|
131
224
|
label: string
|
|
132
225
|
subOption?: string
|
|
133
226
|
}
|
|
134
227
|
```
|
|
135
228
|
|
|
136
|
-
`subOption`
|
|
229
|
+
`subOption` adds secondary information below the label in both the open list and the closed trigger.
|
|
137
230
|
|
|
138
|
-
## CSS
|
|
231
|
+
## Tailwind CSS
|
|
139
232
|
|
|
140
|
-
|
|
233
|
+
Import the package entry after Tailwind CSS in your application stylesheet:
|
|
141
234
|
|
|
142
235
|
```css
|
|
143
236
|
@import 'tailwindcss';
|
|
144
|
-
@
|
|
237
|
+
@import '@rentnerkev/select/tailwind.css';
|
|
145
238
|
```
|
|
146
239
|
|
|
147
|
-
|
|
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`
|
|
156
|
-
|
|
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 {
|
|
2
|
-
|
|
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
|
package/dist/Select.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../src/Select.tsx"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
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
|
|
106
|
+
return messages.required;
|
|
21
107
|
}
|
|
22
108
|
if (multiple &&
|
|
23
109
|
minSelection !== undefined &&
|
|
24
110
|
selectedValues.length < minSelection) {
|
|
25
|
-
return
|
|
111
|
+
return messages.minSelection(minSelection);
|
|
26
112
|
}
|
|
27
113
|
if (multiple &&
|
|
28
114
|
maxSelection !== undefined &&
|
|
29
115
|
selectedValues.length > maxSelection) {
|
|
30
|
-
return
|
|
116
|
+
return messages.maxSelection(maxSelection);
|
|
31
117
|
}
|
|
32
118
|
return null;
|
|
33
|
-
}, [
|
|
34
|
-
|
|
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
|
|
138
|
+
return optionEntries;
|
|
40
139
|
}
|
|
41
|
-
return
|
|
42
|
-
const
|
|
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 (
|
|
144
|
+
return (optionLabel.includes(normalizedSearch) ||
|
|
46
145
|
optionValue.includes(normalizedSearch) ||
|
|
47
146
|
subOption.includes(normalizedSearch));
|
|
48
147
|
});
|
|
49
|
-
}, [
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
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(
|
|
85
|
-
}, [
|
|
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
|
-
|
|
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:
|
|
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:
|
|
118
|
-
.map((
|
|
119
|
-
.join(', ') }),
|
|
120
|
-
|
|
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":
|
|
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:
|
|
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.
|
|
157
|
-
?
|
|
158
|
-
: fallbackOption ||
|
|
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
|
package/dist/Select.js.map
CHANGED
|
@@ -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
|
package/dist/i18n.js.map
ADDED
|
@@ -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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
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
|
-
|
|
3
|
-
|
|
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
|
-
|
|
8
|
+
interface SharedCustomSelectProps<TValue> extends AriaAttributes {
|
|
8
9
|
id?: string;
|
|
9
10
|
name?: string;
|
|
10
|
-
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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": "
|
|
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.
|
|
41
|
-
"react-dom": "^19.
|
|
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
|
+
}
|