@raylang/vue 0.0.0-stage → 0.3.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.
Files changed (75) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +14 -2
  4. package/components/accordion.js +14 -0
  5. package/components/alert.js +9 -0
  6. package/components/app-bar.js +9 -0
  7. package/components/app-shell.js +9 -0
  8. package/components/aspect-ratio.js +9 -0
  9. package/components/attachment.js +13 -0
  10. package/components/avatar.js +9 -0
  11. package/components/badge.js +9 -0
  12. package/components/blockquote.js +9 -0
  13. package/components/bottom-nav.js +14 -0
  14. package/components/breadcrumbs.js +13 -0
  15. package/components/button-group.js +9 -0
  16. package/components/button.js +9 -0
  17. package/components/card.js +9 -0
  18. package/components/carousel.js +9 -0
  19. package/components/center.js +9 -0
  20. package/components/checkbox-group.js +10 -0
  21. package/components/checkbox.js +10 -0
  22. package/components/code.js +9 -0
  23. package/components/color-picker.js +15 -0
  24. package/components/combobox.js +10 -0
  25. package/components/command-palette.js +10 -0
  26. package/components/container.js +9 -0
  27. package/components/date-picker.js +15 -0
  28. package/components/dialog.js +10 -0
  29. package/components/drawer.js +10 -0
  30. package/components/empty-state.js +9 -0
  31. package/components/file-upload.js +9 -0
  32. package/components/grid.js +9 -0
  33. package/components/group.js +9 -0
  34. package/components/icon-button.js +9 -0
  35. package/components/icon.js +9 -0
  36. package/components/indicator.js +9 -0
  37. package/components/input.js +10 -0
  38. package/components/kbd.js +9 -0
  39. package/components/menu.js +22 -0
  40. package/components/nav-link.js +10 -0
  41. package/components/notification.js +13 -0
  42. package/components/number-input.js +10 -0
  43. package/components/pagination.js +10 -0
  44. package/components/password-input.js +9 -0
  45. package/components/path-input.js +9 -0
  46. package/components/popover.js +10 -0
  47. package/components/progress.js +9 -0
  48. package/components/radio.js +14 -0
  49. package/components/scroll-area.js +9 -0
  50. package/components/search.js +10 -0
  51. package/components/segmented-control.js +10 -0
  52. package/components/select.js +10 -0
  53. package/components/separator.js +9 -0
  54. package/components/sidebar.js +13 -0
  55. package/components/skeleton.js +9 -0
  56. package/components/slider.js +10 -0
  57. package/components/spinner.js +9 -0
  58. package/components/split.js +9 -0
  59. package/components/stack.js +9 -0
  60. package/components/stat.js +9 -0
  61. package/components/statusbar.js +13 -0
  62. package/components/stepper.js +14 -0
  63. package/components/switch.js +10 -0
  64. package/components/table.js +9 -0
  65. package/components/tabs.js +18 -0
  66. package/components/textarea.js +10 -0
  67. package/components/theme-toggle.js +9 -0
  68. package/components/timeline.js +13 -0
  69. package/components/toggle-group.js +9 -0
  70. package/components/toggle.js +9 -0
  71. package/components/tooltip.js +9 -0
  72. package/create.js +67 -0
  73. package/index.d.ts +2360 -0
  74. package/index.js +84 -0
  75. package/package.json +32 -4
package/index.d.ts ADDED
@@ -0,0 +1,2360 @@
1
+ // Generated by ray-elements tools from component.toml files. Do not edit.
2
+
3
+ import type { DefineComponent, Plugin } from "vue";
4
+ import type * as Ray from "@raylang/elements";
5
+
6
+ /** Wraps any custom element as a Vue component (props set as DOM properties, optional v-model). */
7
+ export declare function createComponent<P = Record<string, unknown>>(
8
+ name: string,
9
+ tagName: string,
10
+ options?: { properties?: string[]; booleans?: string[]; model?: { prop: string; events: string[] } },
11
+ ): DefineComponent<P>;
12
+ /** A plugin registering components globally. */
13
+ export declare function createPlugin(components: Record<string, unknown>): Plugin;
14
+
15
+ export interface RayButtonProps {
16
+ /** Visual style. raised: a physical key on a darker edge that sinks when pressed (mouse, touch or keyboard). */
17
+ variant?: "filled" | "light" | "outline" | "subtle" | "default" | "transparent" | "gradient" | "raised";
18
+ /** With variant=gradient: "from to [deg]", palette colors or CSS colors ("teal blue 90"). Default: the --ray-gradient-* tokens. */
19
+ gradient?: string;
20
+ /** A palette color (blue, red…) or any CSS color. Default: the primary color. */
21
+ color?: string;
22
+ /** Height, padding and font size. */
23
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
24
+ /** Corner radius. Default: --ray-radius-default. */
25
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
26
+ /** submit/reset act on the enclosing form. */
27
+ type?: "button" | "submit" | "reset";
28
+ /** Not interactive (also when inside a disabled fieldset). */
29
+ disabled?: boolean;
30
+ /** Shows a spinner over the content and blocks clicks. */
31
+ loading?: boolean;
32
+ /** Takes the whole width of its container. */
33
+ fullWidth?: boolean;
34
+ /** Renders a link instead of a button. */
35
+ href?: string;
36
+ /** Link target, with href. */
37
+ target?: string;
38
+ /** With type=submit: submitted as name=value. */
39
+ name?: string;
40
+ /** With type=submit: the submitted value. */
41
+ value?: string;
42
+ }
43
+ /** <ray-button> as a Vue component. */
44
+ export declare const RayButton: DefineComponent<RayButtonProps>;
45
+
46
+ export interface RayButtonGroupProps {
47
+ /** Direction of the group. */
48
+ orientation?: "horizontal" | "vertical";
49
+ /** Fills its container; the children share the width. */
50
+ fullWidth?: boolean;
51
+ /** Accessible name (aria-label). */
52
+ label?: string;
53
+ }
54
+ /** <ray-button-group> as a Vue component. */
55
+ export declare const RayButtonGroup: DefineComponent<RayButtonGroupProps>;
56
+
57
+ export interface RayIconButtonProps {
58
+ /** Accessible name and tooltip (required: the button has no text). */
59
+ label?: string;
60
+ /** Visual style. */
61
+ variant?: "filled" | "light" | "outline" | "subtle" | "default" | "transparent" | "gradient" | "raised";
62
+ /** With variant=gradient: "from to [deg]", palette colors or CSS colors ("teal blue 90"). Default: the --ray-gradient-* tokens. */
63
+ gradient?: string;
64
+ /** A palette color or any CSS color. */
65
+ color?: string;
66
+ /** Width and height. */
67
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
68
+ /** Not interactive. */
69
+ disabled?: boolean;
70
+ /** Shows a spinner instead of the icon. */
71
+ loading?: boolean;
72
+ /** Corner radius. Default: --ray-radius-default. */
73
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
74
+ /** submit/reset act on the enclosing form. */
75
+ type?: "button" | "submit" | "reset";
76
+ /** Takes the whole width of its container. */
77
+ fullWidth?: boolean;
78
+ /** Renders a link instead of a button. */
79
+ href?: string;
80
+ /** Link target, with href. */
81
+ target?: string;
82
+ /** With type=submit: submitted as name=value. */
83
+ name?: string;
84
+ /** With type=submit: the submitted value. */
85
+ value?: string;
86
+ }
87
+ /** <ray-icon-button> as a Vue component. */
88
+ export declare const RayIconButton: DefineComponent<RayIconButtonProps>;
89
+
90
+ export interface RayToggleProps {
91
+ /** On. */
92
+ pressed?: boolean;
93
+ /** Look of "on": subtle (tint), outline (colored border + tint), light (muted → tint), filled (surface → solid color), raised (a key that latches down, lit). ray-button's default, transparent and gradient are left out: no distinct on state, or only a color change. */
94
+ variant?: "subtle" | "outline" | "light" | "filled" | "raised";
95
+ /** Square, for an icon alone (give it a label). */
96
+ square?: boolean;
97
+ /** Accessible name and tooltip, for icon-only toggles. */
98
+ label?: string;
99
+ /** With variant=gradient: "from to [deg]", palette colors or CSS colors ("teal blue 90"). Default: the --ray-gradient-* tokens. */
100
+ gradient?: string;
101
+ /** A palette color (blue, red…) or any CSS color. Default: the primary color. */
102
+ color?: string;
103
+ /** Height, padding and font size. */
104
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
105
+ /** Corner radius. Default: --ray-radius-default. */
106
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
107
+ /** submit/reset act on the enclosing form. */
108
+ type?: "button" | "submit" | "reset";
109
+ /** Not interactive (also when inside a disabled fieldset). */
110
+ disabled?: boolean;
111
+ /** Shows a spinner over the content and blocks clicks. */
112
+ loading?: boolean;
113
+ /** Takes the whole width of its container. */
114
+ fullWidth?: boolean;
115
+ /** Renders a link instead of a button. */
116
+ href?: string;
117
+ /** Link target, with href. */
118
+ target?: string;
119
+ /** With type=submit: submitted as name=value. */
120
+ name?: string;
121
+ /** With type=submit: the submitted value. */
122
+ value?: string;
123
+ /** The user flipped it (read `pressed`). */
124
+ onChange?: (event: Event) => void;
125
+ }
126
+ /** <ray-toggle> as a Vue component. */
127
+ export declare const RayToggle: DefineComponent<RayToggleProps>;
128
+
129
+ export interface RayToggleGroupProps {
130
+ /** single: choosing one turns the others off; multiple: each toggle is independent. */
131
+ type?: "single" | "multiple";
132
+ /** The selected key (single) or keys (multiple: an array, or a comma-separated attribute). */
133
+ value?: string | string[] | undefined;
134
+ /** Form field name: the value (multiple: one entry per key). */
135
+ name?: string;
136
+ /** Needs a value; with single the selected toggle cannot be turned off. */
137
+ required?: boolean;
138
+ /** Disables every toggle. */
139
+ disabled?: boolean;
140
+ /** Toggles apart, each with its own corners (default: joined). */
141
+ spaced?: boolean;
142
+ /** Variant of the toggles. */
143
+ variant?: "subtle" | "outline" | "light" | "filled" | "raised";
144
+ /** Color of the toggles' on state. */
145
+ color?: string;
146
+ /** Size of the toggles. */
147
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
148
+ /** Corner radius of the toggles. */
149
+ radius?: string;
150
+ /** Square toggles, for icons. */
151
+ square?: boolean;
152
+ /** Direction of the group. */
153
+ orientation?: "horizontal" | "vertical";
154
+ /** Fills its container; the children share the width. */
155
+ fullWidth?: boolean;
156
+ /** Accessible name (aria-label). */
157
+ label?: string;
158
+ /** The user changed the selection (read `value` or `values`; the toggles' own change events stop at the group). */
159
+ onChange?: (event: Event) => void;
160
+ }
161
+ /** <ray-toggle-group> as a Vue component. */
162
+ export declare const RayToggleGroup: DefineComponent<RayToggleGroupProps>;
163
+
164
+ export interface RayCheckboxProps {
165
+ /** Current state. The checked attribute is the initial state (restored on reset). */
166
+ checked?: boolean;
167
+ /** Mixed state; cleared on the next user change. */
168
+ indeterminate?: boolean;
169
+ /** Submitted value when checked. */
170
+ value?: string;
171
+ /** Form field name. */
172
+ name?: string;
173
+ /** Label text (or put the label in the content). */
174
+ label?: string;
175
+ /** Help text. */
176
+ description?: string;
177
+ /** Error text. */
178
+ error?: string;
179
+ /** Must be checked to submit. */
180
+ required?: boolean;
181
+ /** Not interactive nor submitted. */
182
+ disabled?: boolean;
183
+ /** Checked look: filled box, or colored border and mark. */
184
+ variant?: "filled" | "outline";
185
+ /** A palette color or any CSS color for the checked state. */
186
+ color?: string;
187
+ /** Box and font size. */
188
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
189
+ /** Side of the label. */
190
+ labelPosition?: "right" | "left";
191
+ /** Corner radius. */
192
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
193
+ /** Description before or after the control. */
194
+ descriptionPosition?: "above" | "below";
195
+ /** v-model: the element's `checked`. */
196
+ modelValue?: boolean;
197
+ "onUpdate:modelValue"?: (value: boolean) => void;
198
+ /** When the user toggles it. */
199
+ onChange?: (event: Event) => void;
200
+ }
201
+ /** <ray-checkbox> as a Vue component. */
202
+ export declare const RayCheckbox: DefineComponent<RayCheckboxProps>;
203
+
204
+ export interface RayCheckboxGroupProps {
205
+ /** The checked values. The value attribute: "a,b". */
206
+ value?: string[];
207
+ /** Form field name. */
208
+ name?: string;
209
+ /** Group label (also its accessible name). */
210
+ label?: string;
211
+ /** Help text. */
212
+ description?: string;
213
+ /** Error text. */
214
+ error?: string;
215
+ /** At least one must be checked. */
216
+ required?: boolean;
217
+ /** Disables every checkbox. */
218
+ disabled?: boolean;
219
+ /** At most this many: the others are disabled once reached; the label shows the count. */
220
+ max?: number;
221
+ /** Layout of the checkboxes. */
222
+ orientation?: "vertical" | "horizontal";
223
+ /** Size of the checkboxes that set none. */
224
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
225
+ /** Color of the checkboxes that set none. */
226
+ color?: string;
227
+ /** The description before the checkboxes or after them. */
228
+ descriptionPosition?: "above" | "below";
229
+ /** v-model: the element's `value`. */
230
+ modelValue?: string[];
231
+ "onUpdate:modelValue"?: (value: string[]) => void;
232
+ /** The user checked or unchecked one (read value). */
233
+ onChange?: (event: Event) => void;
234
+ /** Same moment as change. */
235
+ onInput?: (event: Event) => void;
236
+ }
237
+ /** <ray-checkbox-group> as a Vue component. */
238
+ export declare const RayCheckboxGroup: DefineComponent<RayCheckboxGroupProps>;
239
+
240
+ export interface RayColorPickerProps {
241
+ /** The color, written in format. Any color is accepted and rewritten in format. The value attribute is the initial value (restored on form reset). */
242
+ value?: string;
243
+ /** How value is written: hex, hexa, rgb, rgba, hsl or hsla. Formats ending in a show the opacity slider. */
244
+ format?: Ray.ColorFormat;
245
+ /** Preset colors below the picker: an array, or a comma-separated list in the attribute (commas inside rgb()/hsl() are kept). */
246
+ swatches?: string | string[];
247
+ /** Swatches in each row. */
248
+ swatchesPerRow?: number;
249
+ /** Only the swatches: no area nor sliders. */
250
+ swatchesOnly?: boolean;
251
+ /** Width of the picker and size of its thumbs. */
252
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
253
+ /** Takes the width of its container. */
254
+ fullWidth?: boolean;
255
+ /** Form field name. */
256
+ name?: string;
257
+ /** Not interactive. */
258
+ disabled?: boolean;
259
+ /** Accessible name of the whole picker. */
260
+ label?: string;
261
+ /** v-model: the element's `value`. */
262
+ modelValue?: string;
263
+ "onUpdate:modelValue"?: (value: string) => void;
264
+ /** The color moved (every step of a drag). */
265
+ onInput?: (event: Event) => void;
266
+ /** The color settled: pointer released, a key pressed or a swatch chosen (read value). */
267
+ onChange?: (event: Event) => void;
268
+ }
269
+ /** <ray-color-picker> as a Vue component. */
270
+ export declare const RayColorPicker: DefineComponent<RayColorPickerProps>;
271
+
272
+ export interface RayColorInputProps {
273
+ /** The color, written in format. The value attribute is the initial value (restored on form reset). */
274
+ value?: string;
275
+ /** How value is written: hex, hexa, rgb, rgba, hsl or hsla. */
276
+ format?: Ray.ColorFormat;
277
+ /** Preset colors in the dropdown (an array, or a comma-separated list). */
278
+ swatches?: string | string[];
279
+ /** Swatches in each row. */
280
+ swatchesPerRow?: number;
281
+ /** Shown while empty. */
282
+ placeholder?: string;
283
+ /** Hides the eyedropper button. */
284
+ hideEyedropper?: boolean;
285
+ /** The dropdown is shown. */
286
+ open?: boolean;
287
+ /** Form field name. */
288
+ name?: string;
289
+ /** Label above the field. */
290
+ label?: string;
291
+ /** Help text. */
292
+ description?: string;
293
+ /** Error message; marks the field invalid. */
294
+ error?: string;
295
+ /** Must have a color. */
296
+ required?: boolean;
297
+ /** Not interactive. */
298
+ disabled?: boolean;
299
+ /** Field height and font size. */
300
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
301
+ /** Corner radius: xs…xl or a CSS length. */
302
+ radius?: string;
303
+ /** Visual style of the field. */
304
+ variant?: "default" | "filled" | "unstyled";
305
+ /** Where the description goes. */
306
+ descriptionPosition?: "above" | "below";
307
+ /** v-model: the element's `value`. */
308
+ modelValue?: string;
309
+ "onUpdate:modelValue"?: (value: string) => void;
310
+ /** The color changed (typing a valid color, or moving the picker). */
311
+ onInput?: (event: Event) => void;
312
+ /** The color settled (picker released, a swatch, the eyedropper, or the field left with a new color). */
313
+ onChange?: (event: Event) => void;
314
+ /** The dropdown opened. */
315
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
316
+ /** The dropdown closed. */
317
+ onRayClose?: (event: CustomEvent<unknown>) => void;
318
+ }
319
+ /** <ray-color-input> as a Vue component. */
320
+ export declare const RayColorInput: DefineComponent<RayColorInputProps>;
321
+
322
+ export interface RayComboboxProps {
323
+ /** The chosen value; an array with multiple. The value attribute: "a,b" with multiple. */
324
+ value?: string | string[];
325
+ /** Options instead of child <option>/<optgroup> elements. */
326
+ data?: Array<string | { value: string; label?: string; disabled?: boolean; group?: string }>;
327
+ /** Several values, shown as chips. */
328
+ multiple?: boolean;
329
+ /** Shown while empty. */
330
+ placeholder?: string;
331
+ /** What was typed can be added when no option matches it ("+ Create …"); fires ray-create. */
332
+ creatable?: boolean;
333
+ /** A button that clears the value. */
334
+ clearable?: boolean;
335
+ /** With multiple: at most this many. */
336
+ maxValues?: number;
337
+ /** At most this many options shown (large lists: keep typing). */
338
+ limit?: number;
339
+ /** Shown when nothing matches. */
340
+ nothingFound?: string;
341
+ /** The dropdown is shown. */
342
+ open?: boolean;
343
+ /** Form field name. */
344
+ name?: string;
345
+ /** Visible label (also the accessible name). */
346
+ label?: string;
347
+ /** Help text. */
348
+ description?: string;
349
+ /** Error text; marks the field invalid. */
350
+ error?: string;
351
+ /** Required for form submission. */
352
+ required?: boolean;
353
+ /** Not interactive nor submitted. */
354
+ disabled?: boolean;
355
+ /** Size. */
356
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
357
+ /** Corner radius. */
358
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
359
+ /** Box style. */
360
+ variant?: "default" | "filled" | "unstyled";
361
+ /** Description before or after the control. */
362
+ descriptionPosition?: "above" | "below";
363
+ /** v-model: the element's `value`. */
364
+ modelValue?: string | string[];
365
+ "onUpdate:modelValue"?: (value: string | string[]) => void;
366
+ /** The value changed (read value). */
367
+ onChange?: (event: Event) => void;
368
+ /** Same moment as change. */
369
+ onInput?: (event: Event) => void;
370
+ /** A new value was created from the typed text. */
371
+ onRayCreate?: (event: CustomEvent<{ value: string }>) => void;
372
+ /** The dropdown opened. */
373
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
374
+ /** The dropdown closed. */
375
+ onRayClose?: (event: CustomEvent<unknown>) => void;
376
+ }
377
+ /** <ray-combobox> as a Vue component. */
378
+ export declare const RayCombobox: DefineComponent<RayComboboxProps>;
379
+
380
+ export interface RayDatePickerProps {
381
+ /** The chosen date, ISO "YYYY-MM-DD" ("" for none). The value attribute is the initial value (restored on form reset). */
382
+ value?: string;
383
+ /** Earliest selectable date (ISO). Earlier days are disabled; an earlier value is invalid (rangeUnderflow). */
384
+ min?: string;
385
+ /** Latest selectable date (ISO). */
386
+ max?: string;
387
+ /** Shown while no date is chosen. */
388
+ placeholder?: string;
389
+ /** How the date is displayed (Intl dateStyle). */
390
+ format?: "short" | "medium" | "long" | "full";
391
+ /** Locale for names and formats. Default: the nearest lang attribute, else the browser's. */
392
+ locale?: string;
393
+ /** First day of the week, 0 (Sunday) to 6. Default: the locale's. */
394
+ firstDay?: number;
395
+ /** Shows a button that clears the date. */
396
+ clearable?: boolean;
397
+ /** The calendar dropdown is shown. */
398
+ open?: boolean;
399
+ /** Form field name. */
400
+ name?: string;
401
+ /** Visible label (also the accessible name). */
402
+ label?: string;
403
+ /** Help text. */
404
+ description?: string;
405
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
406
+ descriptionPosition?: "above" | "below";
407
+ /** Error text. */
408
+ error?: string;
409
+ /** Required for form submission. */
410
+ required?: boolean;
411
+ /** Not interactive nor submitted. */
412
+ disabled?: boolean;
413
+ /** Height and font size. */
414
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
415
+ /** Corner radius. */
416
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
417
+ /** Box style. */
418
+ variant?: "default" | "filled" | "unstyled";
419
+ /** v-model: the element's `value`. */
420
+ modelValue?: string;
421
+ "onUpdate:modelValue"?: (value: string) => void;
422
+ /** When the date changes (picked or cleared). */
423
+ onInput?: (event: Event) => void;
424
+ /** When the date changes (picked or cleared). */
425
+ onChange?: (event: Event) => void;
426
+ /** The calendar opened. */
427
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
428
+ /** The calendar closed. */
429
+ onRayClose?: (event: CustomEvent<unknown>) => void;
430
+ }
431
+ /** <ray-date-picker> as a Vue component. */
432
+ export declare const RayDatePicker: DefineComponent<RayDatePickerProps>;
433
+
434
+ export interface RayCalendarProps {
435
+ /** The selected date, ISO "YYYY-MM-DD". */
436
+ value?: string;
437
+ /** Earliest selectable date (ISO). */
438
+ min?: string;
439
+ /** Latest selectable date (ISO). */
440
+ max?: string;
441
+ /** Locale for month and weekday names. Default: the nearest lang attribute, else the browser's. */
442
+ locale?: string;
443
+ /** First day of the week, 0 (Sunday) to 6. Default: the locale's. */
444
+ firstDay?: number;
445
+ /** Day cell size and font size. */
446
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
447
+ /** v-model: the element's `value`. */
448
+ modelValue?: string;
449
+ "onUpdate:modelValue"?: (value: string) => void;
450
+ /** A day was selected (read `value`). */
451
+ onChange?: (event: Event) => void;
452
+ }
453
+ /** <ray-calendar> as a Vue component. */
454
+ export declare const RayCalendar: DefineComponent<RayCalendarProps>;
455
+
456
+ export interface RayFileUploadProps {
457
+ /** Form field name: every file is submitted under it. */
458
+ name?: string;
459
+ /** Label above the zone. */
460
+ label?: string;
461
+ /** Help text under the label. */
462
+ description?: string;
463
+ /** Error text (replaces the explanation of refused files). */
464
+ error?: string;
465
+ /** The form needs at least one file. */
466
+ required?: boolean;
467
+ /** No picking, dropping or removing. */
468
+ disabled?: boolean;
469
+ /** Accepted types, as in <input type=file>: ".pdf,.png", "image/*", "application/json". */
470
+ accept?: string;
471
+ /** Several files (else one, replaced by the next). */
472
+ multiple?: boolean;
473
+ /** Largest file: bytes or a size like "10 MB", "512 KB". */
474
+ maxSize?: string | number;
475
+ /** With multiple: the most files kept. */
476
+ maxFiles?: number;
477
+ /** Small text in the zone. Default: from accept, max-size and max-files ("PNG or PDF · up to 10 MB each · max. 5 files"). */
478
+ hint?: string;
479
+ /** Title of the zone, before "or browse". */
480
+ dropLabel?: string;
481
+ /** The link-styled word (the button text in compact). */
482
+ browseLabel?: string;
483
+ /** Title while files are dragged over it. */
484
+ activeLabel?: string;
485
+ /** Title on touch screens (no hover), where dragging files is rare. */
486
+ tapLabel?: string;
487
+ /** default: a tall centered zone; compact: one row with a Browse button. */
488
+ variant?: "default" | "compact";
489
+ /** How chosen files show: full-width rows, thumbnail cards, or not at all (render your own on change). */
490
+ list?: "rows" | "cards" | "none";
491
+ /** With a native host (ray-elements/core/raylang.js in a std/ui window), browsing opens the system dialog and gives paths (see `paths`); drop and paste still give Files. */
492
+ native?: boolean;
493
+ /** Accent of hover, drag and the browse link (default: primary). */
494
+ color?: string;
495
+ /** Files were added or removed (read `files`, and `lastChange` for which). */
496
+ onChange?: (event: Event) => void;
497
+ /** Some files were refused (type, size or count). */
498
+ onRayReject?: (event: CustomEvent<{ rejected: Ray.FileRejection[] }>) => void;
499
+ /** The native dialog failed (with `native`). */
500
+ onRayError?: (event: CustomEvent<{ error: Error }>) => void;
501
+ }
502
+ /** <ray-file-upload> as a Vue component. */
503
+ export declare const RayFileUpload: DefineComponent<RayFileUploadProps>;
504
+
505
+ export interface RayInputProps {
506
+ /** Current value. The value attribute is the initial value (restored on form reset). */
507
+ value?: string;
508
+ /** Input type. */
509
+ type?: "text" | "email" | "password" | "search" | "number" | "url" | "tel";
510
+ /** Form field name. */
511
+ name?: string;
512
+ /** Visible label (also the accessible name). */
513
+ label?: string;
514
+ /** Help text under the label. */
515
+ description?: string;
516
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
517
+ descriptionPosition?: "above" | "below";
518
+ /** Error text; marks the field invalid (display only — does not block submit). */
519
+ error?: string;
520
+ /** Placeholder text. */
521
+ placeholder?: string;
522
+ /** Required for form submission; shows an asterisk. */
523
+ required?: boolean;
524
+ /** Not editable nor submitted. */
525
+ disabled?: boolean;
526
+ /** Not editable, still submitted. */
527
+ readonly?: boolean;
528
+ /** Height and font size. */
529
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
530
+ /** Corner radius. */
531
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
532
+ /** Box style. */
533
+ variant?: "default" | "filled" | "unstyled";
534
+ /** v-model: the element's `value`. */
535
+ modelValue?: string;
536
+ "onUpdate:modelValue"?: (value: string) => void;
537
+ /** Forwarded to the inner input. */
538
+ autocomplete?: string;
539
+ /** Virtual keyboard hint. */
540
+ inputmode?: string;
541
+ /** Validation pattern (regular expression). */
542
+ pattern?: string;
543
+ /** Minimum (number/date types). */
544
+ min?: string;
545
+ /** Maximum (number/date types). */
546
+ max?: string;
547
+ /** Step (number types). */
548
+ step?: string;
549
+ /** Minimum length. */
550
+ minlength?: string;
551
+ /** Maximum length. */
552
+ maxlength?: string;
553
+ /** Mobile auto-capitalization. */
554
+ autocapitalize?: string;
555
+ /** Label of the Enter key on virtual keyboards. */
556
+ enterkeyhint?: string;
557
+ /** Id of a <datalist> with suggestions. */
558
+ list?: string;
559
+ /** On every edit (value already updated). */
560
+ onInput?: (event: Event) => void;
561
+ /** When an edit is committed (blur, Enter). */
562
+ onChange?: (event: Event) => void;
563
+ }
564
+ /** <ray-input> as a Vue component. */
565
+ export declare const RayInput: DefineComponent<RayInputProps>;
566
+
567
+ export interface RayNumberInputProps {
568
+ /** The number (undefined when empty). */
569
+ value?: number;
570
+ /** Minimum. */
571
+ min?: number;
572
+ /** Maximum. */
573
+ max?: number;
574
+ /** What + and − add. */
575
+ step?: number;
576
+ /** Fixed decimals (2: 3 shows as 3.00). */
577
+ decimals?: number;
578
+ /** Shown before the number ("$"). */
579
+ prefix?: string | null;
580
+ /** Shown after the number (" kg", "%"). */
581
+ suffix?: string;
582
+ /** Groups thousands in the shown text (",", ".", " "). */
583
+ thousandsSeparator?: string;
584
+ /** The decimal mark shown and typed ("," in many locales). */
585
+ decimalSeparator?: string;
586
+ /** When out-of-range input is clamped: on blur, while typing, or never (then it is invalid). */
587
+ clamp?: "blur" | "strict" | "none";
588
+ /** No + and − buttons (the keys still step). */
589
+ hideControls?: boolean;
590
+ /** Shown while empty. */
591
+ placeholder?: string;
592
+ /** Not editable, still submitted. */
593
+ readonly?: boolean;
594
+ /** Form field name. */
595
+ name?: string;
596
+ /** Visible label (also the accessible name). */
597
+ label?: string;
598
+ /** Help text. */
599
+ description?: string;
600
+ /** Error text; marks the field invalid. */
601
+ error?: string;
602
+ /** Required for form submission. */
603
+ required?: boolean;
604
+ /** Not interactive nor submitted. */
605
+ disabled?: boolean;
606
+ /** Size. */
607
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
608
+ /** Corner radius. */
609
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
610
+ /** Box style. */
611
+ variant?: "default" | "filled" | "unstyled";
612
+ /** Description before or after the control. */
613
+ descriptionPosition?: "above" | "below";
614
+ /** v-model: the element's `value`. */
615
+ modelValue?: number;
616
+ "onUpdate:modelValue"?: (value: number) => void;
617
+ /** On every change of the value (typing, keys, buttons). */
618
+ onInput?: (event: Event) => void;
619
+ /** When the value is committed (blur, a step). */
620
+ onChange?: (event: Event) => void;
621
+ }
622
+ /** <ray-number-input> as a Vue component. */
623
+ export declare const RayNumberInput: DefineComponent<RayNumberInputProps>;
624
+
625
+ export interface RayPasswordInputProps {
626
+ /** The password is shown as text. */
627
+ visible?: boolean;
628
+ /** Accessible name of the toggle while hidden. */
629
+ showLabel?: string;
630
+ /** Accessible name of the toggle while shown. */
631
+ hideLabel?: string;
632
+ /** Current value. The value attribute is the initial value (restored on form reset). */
633
+ value?: string;
634
+ /** Input type. */
635
+ type?: "text" | "email" | "password" | "search" | "number" | "url" | "tel";
636
+ /** Form field name. */
637
+ name?: string;
638
+ /** Visible label (also the accessible name). */
639
+ label?: string;
640
+ /** Help text under the label. */
641
+ description?: string;
642
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
643
+ descriptionPosition?: "above" | "below";
644
+ /** Error text; marks the field invalid (display only — does not block submit). */
645
+ error?: string;
646
+ /** Placeholder text. */
647
+ placeholder?: string;
648
+ /** Required for form submission; shows an asterisk. */
649
+ required?: boolean;
650
+ /** Not editable nor submitted. */
651
+ disabled?: boolean;
652
+ /** Not editable, still submitted. */
653
+ readonly?: boolean;
654
+ /** Height and font size. */
655
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
656
+ /** Corner radius. */
657
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
658
+ /** Box style. */
659
+ variant?: "default" | "filled" | "unstyled";
660
+ /** Forwarded to the inner input. */
661
+ autocomplete?: string;
662
+ /** Virtual keyboard hint. */
663
+ inputmode?: string;
664
+ /** Validation pattern (regular expression). */
665
+ pattern?: string;
666
+ /** Minimum (number/date types). */
667
+ min?: string;
668
+ /** Maximum (number/date types). */
669
+ max?: string;
670
+ /** Step (number types). */
671
+ step?: string;
672
+ /** Minimum length. */
673
+ minlength?: string;
674
+ /** Maximum length. */
675
+ maxlength?: string;
676
+ /** Mobile auto-capitalization. */
677
+ autocapitalize?: string;
678
+ /** Label of the Enter key on virtual keyboards. */
679
+ enterkeyhint?: string;
680
+ /** Id of a <datalist> with suggestions. */
681
+ list?: string;
682
+ /** The user showed or hid the password. */
683
+ onRayVisibilityChange?: (event: CustomEvent<{ visible: boolean }>) => void;
684
+ /** On every edit (value already updated). */
685
+ onInput?: (event: Event) => void;
686
+ /** When an edit is committed (blur, Enter). */
687
+ onChange?: (event: Event) => void;
688
+ }
689
+ /** <ray-password-input> as a Vue component. */
690
+ export declare const RayPasswordInput: DefineComponent<RayPasswordInputProps>;
691
+
692
+ export interface RayPathInputProps {
693
+ /** What the dialog chooses: an existing file, a folder, or a file to save (the current name is suggested). */
694
+ mode?: "open" | "folder" | "save";
695
+ /** File types the dialog offers, as in <input type=file>: ".json,.toml", "image/*" (ignored for folders). */
696
+ accept?: string;
697
+ /** Text of the button. */
698
+ browseLabel?: string;
699
+ /** Title of the system dialog (default: the label). */
700
+ dialogTitle?: string;
701
+ /** Current value. The value attribute is the initial value (restored on form reset). */
702
+ value?: string;
703
+ /** Input type. */
704
+ type?: "text" | "email" | "password" | "search" | "number" | "url" | "tel";
705
+ /** Form field name. */
706
+ name?: string;
707
+ /** Visible label (also the accessible name). */
708
+ label?: string;
709
+ /** Help text under the label. */
710
+ description?: string;
711
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
712
+ descriptionPosition?: "above" | "below";
713
+ /** Error text; marks the field invalid (display only — does not block submit). */
714
+ error?: string;
715
+ /** Placeholder text. */
716
+ placeholder?: string;
717
+ /** Required for form submission; shows an asterisk. */
718
+ required?: boolean;
719
+ /** Not editable nor submitted. */
720
+ disabled?: boolean;
721
+ /** Not editable, still submitted. */
722
+ readonly?: boolean;
723
+ /** Height and font size. */
724
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
725
+ /** Corner radius. */
726
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
727
+ /** Box style. */
728
+ variant?: "default" | "filled" | "unstyled";
729
+ /** Forwarded to the inner input. */
730
+ autocomplete?: string;
731
+ /** Virtual keyboard hint. */
732
+ inputmode?: string;
733
+ /** Validation pattern (regular expression). */
734
+ pattern?: string;
735
+ /** Minimum (number/date types). */
736
+ min?: string;
737
+ /** Maximum (number/date types). */
738
+ max?: string;
739
+ /** Step (number types). */
740
+ step?: string;
741
+ /** Minimum length. */
742
+ minlength?: string;
743
+ /** Maximum length. */
744
+ maxlength?: string;
745
+ /** Mobile auto-capitalization. */
746
+ autocapitalize?: string;
747
+ /** Label of the Enter key on virtual keyboards. */
748
+ enterkeyhint?: string;
749
+ /** Id of a <datalist> with suggestions. */
750
+ list?: string;
751
+ /** The path changed: typed and committed, or chosen in the dialog. */
752
+ onChange?: (event: Event) => void;
753
+ /** The system dialog failed. */
754
+ onRayError?: (event: CustomEvent<{ error: Error }>) => void;
755
+ /** On every edit (value already updated). */
756
+ onInput?: (event: Event) => void;
757
+ }
758
+ /** <ray-path-input> as a Vue component. */
759
+ export declare const RayPathInput: DefineComponent<RayPathInputProps>;
760
+
761
+ export interface RayRadioGroupProps {
762
+ /** Value of the checked radio. Initial: the value attribute, or a radio with the checked attribute. */
763
+ value?: string;
764
+ /** Form field name. */
765
+ name?: string;
766
+ /** Group label (also its accessible name). */
767
+ label?: string;
768
+ /** Help text. */
769
+ description?: string;
770
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
771
+ descriptionPosition?: "above" | "below";
772
+ /** Error text. */
773
+ error?: string;
774
+ /** A choice is needed to submit. */
775
+ required?: boolean;
776
+ /** Disables every radio. */
777
+ disabled?: boolean;
778
+ /** Layout of the radios. */
779
+ orientation?: "vertical" | "horizontal";
780
+ /** Size of every radio. */
781
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
782
+ /** Checked color of every radio. */
783
+ color?: string;
784
+ /** Checked look of every radio: filled circle, or colored ring and dot. */
785
+ variant?: "filled" | "outline";
786
+ /** v-model: the element's `value`. */
787
+ modelValue?: string;
788
+ "onUpdate:modelValue"?: (value: string) => void;
789
+ /** When the user picks a radio. */
790
+ onInput?: (event: Event) => void;
791
+ /** When the user picks a radio. */
792
+ onChange?: (event: Event) => void;
793
+ }
794
+ /** <ray-radio-group> as a Vue component. */
795
+ export declare const RayRadioGroup: DefineComponent<RayRadioGroupProps>;
796
+
797
+ export interface RayRadioProps {
798
+ /** Value given to the group when chosen. */
799
+ value?: string;
800
+ /** Label text (or the content). */
801
+ label?: string;
802
+ /** Help text under the label. */
803
+ description?: string;
804
+ /** Cannot be chosen. */
805
+ disabled?: boolean;
806
+ /** Overrides the group color. */
807
+ color?: string;
808
+ /** Overrides the group size. */
809
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
810
+ /** Overrides the group variant. */
811
+ variant?: "filled" | "outline";
812
+ }
813
+ /** <ray-radio> as a Vue component. */
814
+ export declare const RayRadio: DefineComponent<RayRadioProps>;
815
+
816
+ export interface RaySearchProps {
817
+ /** Current text. */
818
+ value?: string;
819
+ /** Placeholder text. */
820
+ placeholder?: string;
821
+ /** Keyboard shortcut that focuses it ("mod+k", "/"; mod = ⌘ on macOS, Ctrl elsewhere). Shown as a hint while empty. */
822
+ shortcut?: string;
823
+ /** Milliseconds of quiet typing before ray-search fires (0: on every keystroke). */
824
+ debounce?: number;
825
+ /** Form field name. */
826
+ name?: string;
827
+ /** Visible label (also the accessible name). Without it, use aria-label. */
828
+ label?: string;
829
+ /** Not editable nor submitted. */
830
+ disabled?: boolean;
831
+ /** Height and font size. */
832
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
833
+ /** Corner radius. */
834
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
835
+ /** Box style. */
836
+ variant?: "default" | "filled" | "unstyled";
837
+ /** Help text. */
838
+ description?: string;
839
+ /** Error text; marks the field invalid. */
840
+ error?: string;
841
+ /** Required for form submission. */
842
+ required?: boolean;
843
+ /** Description before or after the control. */
844
+ descriptionPosition?: "above" | "below";
845
+ /** v-model: the element's `value`. */
846
+ modelValue?: string;
847
+ "onUpdate:modelValue"?: (value: string) => void;
848
+ /** On every edit (value already updated). */
849
+ onInput?: (event: Event) => void;
850
+ /** After `debounce` ms without typing, on Enter, and when cleared. */
851
+ onRaySearch?: (event: CustomEvent<{ value: string }>) => void;
852
+ }
853
+ /** <ray-search> as a Vue component. */
854
+ export declare const RaySearch: DefineComponent<RaySearchProps>;
855
+
856
+ export interface RaySegmentedControlProps {
857
+ /** Selected value (default: the first enabled option). */
858
+ value?: string;
859
+ /** Options as strings or { value, label, disabled }. */
860
+ data?: Array<string | { value: string; label?: string; disabled?: boolean }>;
861
+ /** Form field name. */
862
+ name?: string;
863
+ /** Indicator color (default: a raised neutral segment). */
864
+ color?: string;
865
+ /** Height and font size. */
866
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
867
+ /** Corner radius. */
868
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
869
+ /** Takes the whole width. */
870
+ fullWidth?: boolean;
871
+ /** Direction. */
872
+ orientation?: "horizontal" | "vertical";
873
+ /** Not interactive nor submitted. */
874
+ disabled?: boolean;
875
+ /** v-model: the element's `value`. */
876
+ modelValue?: string;
877
+ "onUpdate:modelValue"?: (value: string) => void;
878
+ /** The user picked another option. */
879
+ onInput?: (event: Event) => void;
880
+ /** The user picked another option. */
881
+ onChange?: (event: Event) => void;
882
+ }
883
+ /** <ray-segmented-control> as a Vue component. */
884
+ export declare const RaySegmentedControl: DefineComponent<RaySegmentedControlProps>;
885
+
886
+ export interface RaySelectProps {
887
+ /** Selected value. */
888
+ value?: string;
889
+ /** Options as strings or { value, label, disabled } (instead of child options). */
890
+ data?: Array<string | { value: string; label?: string; disabled?: boolean }>;
891
+ /** Shown while nothing is selected (with required, blocks submit). */
892
+ placeholder?: string;
893
+ /** The dropdown is shown. */
894
+ open?: boolean;
895
+ /** Form field name. */
896
+ name?: string;
897
+ /** Visible label. */
898
+ label?: string;
899
+ /** Help text. */
900
+ description?: string;
901
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
902
+ descriptionPosition?: "above" | "below";
903
+ /** Error text. */
904
+ error?: string;
905
+ /** Required for form submission. */
906
+ required?: boolean;
907
+ /** Not interactive nor submitted. */
908
+ disabled?: boolean;
909
+ /** Height and font size. */
910
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
911
+ /** Box style. */
912
+ variant?: "default" | "filled" | "unstyled";
913
+ /** Corner radius. */
914
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
915
+ /** v-model: the element's `value`. */
916
+ modelValue?: string;
917
+ "onUpdate:modelValue"?: (value: string) => void;
918
+ /** When the selection changes. */
919
+ onInput?: (event: Event) => void;
920
+ /** When the selection changes. */
921
+ onChange?: (event: Event) => void;
922
+ /** The dropdown opened. */
923
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
924
+ /** The dropdown closed. */
925
+ onRayClose?: (event: CustomEvent<unknown>) => void;
926
+ }
927
+ /** <ray-select> as a Vue component. */
928
+ export declare const RaySelect: DefineComponent<RaySelectProps>;
929
+
930
+ export interface RaySliderProps {
931
+ /** Current value. The value attribute is the initial one (restored on reset). */
932
+ value?: number;
933
+ /** Minimum. */
934
+ min?: number;
935
+ /** Maximum. */
936
+ max?: number;
937
+ /** Step. */
938
+ step?: number;
939
+ /** Form field name. */
940
+ name?: string;
941
+ /** Visible label. */
942
+ label?: string;
943
+ /** Help text. */
944
+ description?: string;
945
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
946
+ descriptionPosition?: "above" | "below";
947
+ /** Error text. */
948
+ error?: string;
949
+ /** Not interactive nor submitted. */
950
+ disabled?: boolean;
951
+ /** Track and thumb color. */
952
+ color?: string;
953
+ /** Track and thumb size. */
954
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
955
+ /** Shows the value next to the label. */
956
+ showValue?: boolean;
957
+ /** Appended to the shown value and its spoken text (%, px, ms…). */
958
+ unit?: string;
959
+ /** Labeled ticks under the track. */
960
+ marks?: Array<number | { value: number; label?: string }>;
961
+ /** Required for form submission. */
962
+ required?: boolean;
963
+ /** Corner radius. */
964
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
965
+ /** Box style. */
966
+ variant?: "default" | "filled" | "unstyled";
967
+ /** v-model: the element's `value`. */
968
+ modelValue?: number;
969
+ "onUpdate:modelValue"?: (value: number) => void;
970
+ /** While dragging. */
971
+ onInput?: (event: Event) => void;
972
+ /** When released. */
973
+ onChange?: (event: Event) => void;
974
+ }
975
+ /** <ray-slider> as a Vue component. */
976
+ export declare const RaySlider: DefineComponent<RaySliderProps>;
977
+
978
+ export interface RaySwitchProps {
979
+ /** Current state. The checked attribute is the initial state. */
980
+ checked?: boolean;
981
+ /** Submitted value when on. */
982
+ value?: string;
983
+ /** Form field name. */
984
+ name?: string;
985
+ /** Label text (or the content). */
986
+ label?: string;
987
+ /** Help text. */
988
+ description?: string;
989
+ /** Error text. */
990
+ error?: string;
991
+ /** Side of the label. */
992
+ labelPosition?: "right" | "left";
993
+ /** Track color when on. */
994
+ color?: string;
995
+ /** Track size. */
996
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
997
+ /** Not interactive nor submitted. */
998
+ disabled?: boolean;
999
+ /** Mixed state; cleared on the next user change. */
1000
+ indeterminate?: boolean;
1001
+ /** Must be checked to submit. */
1002
+ required?: boolean;
1003
+ /** Checked look: filled box, or colored border and mark. */
1004
+ variant?: "filled" | "outline";
1005
+ /** Corner radius. */
1006
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1007
+ /** Description before or after the control. */
1008
+ descriptionPosition?: "above" | "below";
1009
+ /** v-model: the element's `checked`. */
1010
+ modelValue?: boolean;
1011
+ "onUpdate:modelValue"?: (value: boolean) => void;
1012
+ /** When the user toggles it. */
1013
+ onChange?: (event: Event) => void;
1014
+ }
1015
+ /** <ray-switch> as a Vue component. */
1016
+ export declare const RaySwitch: DefineComponent<RaySwitchProps>;
1017
+
1018
+ export interface RayTextareaProps {
1019
+ /** Current value. */
1020
+ value?: string;
1021
+ /** Visible rows (minimum when autosize). */
1022
+ rows?: number;
1023
+ /** Grows with the content. */
1024
+ autosize?: boolean;
1025
+ /** With autosize: stop growing and scroll after this many rows. */
1026
+ maxRows?: number;
1027
+ /** Form field name. */
1028
+ name?: string;
1029
+ /** Visible label. */
1030
+ label?: string;
1031
+ /** Help text. */
1032
+ description?: string;
1033
+ /** The description before the control (help first) or after it, with the error (fields in a row stay aligned). */
1034
+ descriptionPosition?: "above" | "below";
1035
+ /** Error text. */
1036
+ error?: string;
1037
+ /** Required for form submission. */
1038
+ required?: boolean;
1039
+ /** Not editable nor submitted. */
1040
+ disabled?: boolean;
1041
+ /** Not editable, still submitted. */
1042
+ readonly?: boolean;
1043
+ /** Font size. */
1044
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1045
+ /** Box style. */
1046
+ variant?: "default" | "filled" | "unstyled";
1047
+ /** Corner radius. */
1048
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1049
+ /** v-model: the element's `value`. */
1050
+ modelValue?: string;
1051
+ "onUpdate:modelValue"?: (value: string) => void;
1052
+ /** Placeholder text. */
1053
+ placeholder?: string;
1054
+ /** Forwarded to the inner textarea. */
1055
+ autocomplete?: string;
1056
+ /** Minimum length. */
1057
+ minlength?: string;
1058
+ /** Maximum length. */
1059
+ maxlength?: string;
1060
+ /** soft or hard. */
1061
+ wrap?: string;
1062
+ /** On every edit. */
1063
+ onInput?: (event: Event) => void;
1064
+ /** When an edit is committed. */
1065
+ onChange?: (event: Event) => void;
1066
+ }
1067
+ /** <ray-textarea> as a Vue component. */
1068
+ export declare const RayTextarea: DefineComponent<RayTextareaProps>;
1069
+
1070
+ export interface RayBottomNavProps {
1071
+ /** The current destination (an item's value, else its href, else its label). */
1072
+ value?: string;
1073
+ /** Accessible name of the navigation. */
1074
+ label?: string;
1075
+ /** Which labels show (the others stay for assistive technology). */
1076
+ labels?: "always" | "active" | "never";
1077
+ /** How the current destination is marked besides its color. */
1078
+ indicator?: "pill" | "line" | "none";
1079
+ /** A palette color or any CSS color for the current item and the action (default: primary). */
1080
+ color?: string;
1081
+ /** default: a bar across the bottom; floating: a rounded bar off the edges. */
1082
+ variant?: "default" | "floating";
1083
+ /** Slides away while the content scrolls down, back on the way up. */
1084
+ hideOnScroll?: boolean;
1085
+ /** Pinned to the bottom of the window (outside a shell). */
1086
+ fixed?: boolean;
1087
+ /** A selector of the element whose scrolling it follows (default: its shell's, else the window). */
1088
+ scrollTarget?: string;
1089
+ /** v-model: the element's `value`. */
1090
+ modelValue?: string;
1091
+ "onUpdate:modelValue"?: (value: string) => void;
1092
+ /** The user picked another destination (read value). */
1093
+ onChange?: (event: Event) => void;
1094
+ /** An action item was pressed. */
1095
+ onRaySelect?: (event: CustomEvent<{ value: string }>) => void;
1096
+ }
1097
+ /** <ray-bottom-nav> as a Vue component. */
1098
+ export declare const RayBottomNav: DefineComponent<RayBottomNavProps>;
1099
+
1100
+ export interface RayBottomNavItemProps {
1101
+ /** Its value (default: its href, else its label). */
1102
+ value?: string;
1103
+ /** The label. */
1104
+ label?: string;
1105
+ /** An icon of the registry (or put one in the icon slot). */
1106
+ icon?: string;
1107
+ /** Makes it a link. */
1108
+ href?: string;
1109
+ /** A count or a short text on the icon. */
1110
+ badge?: string;
1111
+ /** A dot on the icon (something new). */
1112
+ dot?: boolean;
1113
+ /** Set by the bar: the current destination. */
1114
+ active?: boolean;
1115
+ /** Not interactive. */
1116
+ disabled?: boolean;
1117
+ /** A raised round button ("New"): it fires ray-select on the bar, it is not a destination. */
1118
+ action?: boolean;
1119
+ }
1120
+ /** <ray-bottom-nav-item> as a Vue component. */
1121
+ export declare const RayBottomNavItem: DefineComponent<RayBottomNavItemProps>;
1122
+
1123
+ export interface RayBreadcrumbsProps {
1124
+ /** Text between crumbs ("/", "›", "·") or "chevron" (an icon). */
1125
+ separator?: string;
1126
+ /** Longer paths show the first crumb, "…" (a button that expands them) and the last max-items − 1. */
1127
+ maxItems?: number;
1128
+ /** Accessible name of the nav. */
1129
+ label?: string;
1130
+ /** Font size. */
1131
+ size?: "xs" | "sm" | "md" | "lg";
1132
+ }
1133
+ /** <ray-breadcrumbs> as a Vue component. */
1134
+ export declare const RayBreadcrumbs: DefineComponent<RayBreadcrumbsProps>;
1135
+
1136
+ export interface RayBreadcrumbProps {
1137
+ /** Where it leads. */
1138
+ href?: string;
1139
+ /** This crumb is the current page (default: the last). */
1140
+ current?: boolean;
1141
+ }
1142
+ /** <ray-breadcrumb> as a Vue component. */
1143
+ export declare const RayBreadcrumb: DefineComponent<RayBreadcrumbProps>;
1144
+
1145
+ export interface RayNavLinkProps {
1146
+ /** Text. */
1147
+ label?: string;
1148
+ /** Second line. */
1149
+ description?: string;
1150
+ /** Makes it a link (ignored when it has nested links). */
1151
+ href?: string;
1152
+ /** The current page or section. */
1153
+ active?: boolean;
1154
+ /** Nested links are shown. */
1155
+ opened?: boolean;
1156
+ /** Not interactive. */
1157
+ disabled?: boolean;
1158
+ /** Style of the active state. */
1159
+ variant?: "light" | "filled" | "subtle";
1160
+ /** Active color. */
1161
+ color?: string;
1162
+ /** Only the icon (left section), centered; the label becomes its accessible name and tooltip. A collapsed ray-sidebar sets it. */
1163
+ iconOnly?: boolean;
1164
+ /** v-model: the element's `opened`. */
1165
+ modelValue?: boolean;
1166
+ "onUpdate:modelValue"?: (value: boolean) => void;
1167
+ /** Nested links were shown or hidden. */
1168
+ onRayToggle?: (event: CustomEvent<{ opened: boolean }>) => void;
1169
+ }
1170
+ /** <ray-nav-link> as a Vue component. */
1171
+ export declare const RayNavLink: DefineComponent<RayNavLinkProps>;
1172
+
1173
+ export interface RayPaginationProps {
1174
+ /** Number of pages. */
1175
+ total?: number;
1176
+ /** Current page (1-based). */
1177
+ value?: number;
1178
+ /** Pages shown on each side of the current one. */
1179
+ siblings?: number;
1180
+ /** Pages always shown at the start and the end. */
1181
+ boundaries?: number;
1182
+ /** Adds first/last page buttons. */
1183
+ withEdges?: boolean;
1184
+ /** Hides the previous/next (and first/last) buttons. */
1185
+ hideControls?: boolean;
1186
+ /** Color of the current page: a palette color or any CSS color. Default: the primary color. */
1187
+ color?: string;
1188
+ /** Item size. */
1189
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1190
+ /** Corner radius of the items. */
1191
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1192
+ /** Not interactive. */
1193
+ disabled?: boolean;
1194
+ /** Accessible name of the navigation landmark. */
1195
+ label?: string;
1196
+ /** v-model: the element's `value`. */
1197
+ modelValue?: number;
1198
+ "onUpdate:modelValue"?: (value: number) => void;
1199
+ /** The user went to another page (read `value`). */
1200
+ onChange?: (event: Event) => void;
1201
+ }
1202
+ /** <ray-pagination> as a Vue component. */
1203
+ export declare const RayPagination: DefineComponent<RayPaginationProps>;
1204
+
1205
+ export interface RaySidebarProps {
1206
+ /** Wide screens: an icon rail instead of the full panel. */
1207
+ collapsed?: boolean;
1208
+ /** Narrow screens: the drawer is shown (modal, focus trapped; Escape, backdrop click or a followed link close it). */
1209
+ open?: boolean;
1210
+ /** The edge it sits on. */
1211
+ side?: "left" | "right";
1212
+ /** A panel against the edge, or a floating card with a margin. */
1213
+ variant?: "sidebar" | "floating";
1214
+ /** Width when expanded (CSS length). Default 16rem. */
1215
+ width?: string;
1216
+ /** Width of the icon rail. Default 3.5rem. */
1217
+ collapsedWidth?: string;
1218
+ /** At this viewport width and below, it becomes a drawer. */
1219
+ breakpoint?: string;
1220
+ /** Accessible name of its navigation. */
1221
+ label?: string;
1222
+ /** After toggle(). */
1223
+ onRayToggle?: (event: CustomEvent<{ collapsed: boolean; open: boolean; mobile: boolean }>) => void;
1224
+ /** The drawer opened (narrow screens). */
1225
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1226
+ /** The drawer closed (narrow screens). */
1227
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1228
+ }
1229
+ /** <ray-sidebar> as a Vue component. */
1230
+ export declare const RaySidebar: DefineComponent<RaySidebarProps>;
1231
+
1232
+ export interface RaySidebarGroupProps {
1233
+ /** Section title. */
1234
+ label?: string;
1235
+ }
1236
+ /** <ray-sidebar-group> as a Vue component. */
1237
+ export declare const RaySidebarGroup: DefineComponent<RaySidebarGroupProps>;
1238
+
1239
+ export interface RayStepperProps {
1240
+ /** Index of the active step (steps.length: completed). */
1241
+ active?: number;
1242
+ /** Steps in a row above the content, or in a column beside it. */
1243
+ orientation?: "horizontal" | "vertical";
1244
+ /** Label beside the number, or under it (narrow screens, many steps). */
1245
+ iconPosition?: "left" | "top";
1246
+ /** Completed steps are buttons that go back to them. */
1247
+ allowStepSelect?: boolean;
1248
+ /** With allow-step-select off, false lets the user jump to any step. */
1249
+ linear?: boolean;
1250
+ /** Size of the numbers. */
1251
+ size?: "sm" | "md" | "lg";
1252
+ /** A palette color or any CSS color for active and completed steps (default: primary). */
1253
+ color?: string;
1254
+ /** Accessible name of the list of steps. */
1255
+ label?: string;
1256
+ /** v-model: the element's `active`. */
1257
+ modelValue?: number;
1258
+ "onUpdate:modelValue"?: (value: number) => void;
1259
+ /** active changed by the user (a step clicked, next(), prev()). */
1260
+ onChange?: (event: Event) => void;
1261
+ }
1262
+ /** <ray-stepper> as a Vue component. */
1263
+ export declare const RayStepper: DefineComponent<RayStepperProps>;
1264
+
1265
+ export interface RayStepProps {
1266
+ /** The label. */
1267
+ label?: string;
1268
+ /** A line under the label. */
1269
+ description?: string;
1270
+ /** An icon instead of the number. */
1271
+ icon?: string;
1272
+ /** The icon once done (default: check). */
1273
+ completedIcon?: string;
1274
+ /** A spinner instead of the number. */
1275
+ loading?: boolean;
1276
+ /** An error message: red step, the message as its description. */
1277
+ error?: string;
1278
+ /** Cannot be selected. */
1279
+ disabled?: boolean;
1280
+ }
1281
+ /** <ray-step> as a Vue component. */
1282
+ export declare const RayStep: DefineComponent<RayStepProps>;
1283
+
1284
+ export interface RayTabsProps {
1285
+ /** Value of the active tab (default: the first enabled one). */
1286
+ value?: string;
1287
+ /** Tab style. */
1288
+ variant?: "default" | "outline" | "pills";
1289
+ /** Tab list direction (and arrow keys). */
1290
+ orientation?: "horizontal" | "vertical";
1291
+ /** Active indicator color. */
1292
+ color?: string;
1293
+ /** manual: arrows move focus, Enter/Space activates. */
1294
+ activation?: "auto" | "manual";
1295
+ /** Tabs share the full width. */
1296
+ grow?: boolean;
1297
+ /** v-model: the element's `value`. */
1298
+ modelValue?: string;
1299
+ "onUpdate:modelValue"?: (value: string) => void;
1300
+ /** The user activated another tab. */
1301
+ onChange?: (event: Event) => void;
1302
+ }
1303
+ /** <ray-tabs> as a Vue component. */
1304
+ export declare const RayTabs: DefineComponent<RayTabsProps>;
1305
+
1306
+ export interface RayTabProps {
1307
+ /** Matches a ray-tab-panel's value. */
1308
+ value?: string;
1309
+ /** Cannot be activated. */
1310
+ disabled?: boolean;
1311
+ }
1312
+ /** <ray-tab> as a Vue component. */
1313
+ export declare const RayTab: DefineComponent<RayTabProps>;
1314
+
1315
+ export interface RayTabPanelProps {
1316
+ /** Matches a ray-tab's value. */
1317
+ value?: string;
1318
+ }
1319
+ /** <ray-tab-panel> as a Vue component. */
1320
+ export declare const RayTabPanel: DefineComponent<RayTabPanelProps>;
1321
+
1322
+ export interface RayCommandPaletteProps {
1323
+ /** Shown. */
1324
+ open?: boolean;
1325
+ /** The actions. */
1326
+ actions?: Ray.CommandAction[];
1327
+ /** The search text. */
1328
+ query?: string;
1329
+ /** Placeholder of the search field. */
1330
+ placeholder?: string;
1331
+ /** Toggle shortcut (mod = ⌘ on macOS, Ctrl elsewhere); empty to disable. */
1332
+ hotkey?: string;
1333
+ /** Maximum results. */
1334
+ limit?: number;
1335
+ /** Text without results. */
1336
+ emptyLabel?: string;
1337
+ /** Accessible name. */
1338
+ label?: string;
1339
+ /** No keyboard hint at the bottom. */
1340
+ hideHint?: boolean;
1341
+ /** With a native host (ray-elements/core/raylang.js in a std/ui window, menus declared with elements/bridge), also lists the app's menu bar, grouped by menu with its shortcuts; running one gives the program the menu's own event. */
1342
+ nativeMenus?: boolean;
1343
+ /** Blur of the page behind: px ("8"), a CSS length or "none". Default: --ray-overlay-blur ([overlay] blur in tokens.toml). */
1344
+ overlayBlur?: string;
1345
+ /** v-model: the element's `open`. */
1346
+ modelValue?: boolean;
1347
+ "onUpdate:modelValue"?: (value: boolean) => void;
1348
+ /** An action was run. */
1349
+ onRaySelect?: (event: CustomEvent<{ action: Ray.CommandAction }>) => void;
1350
+ /** After it opened. */
1351
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1352
+ /** After it closed. */
1353
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1354
+ }
1355
+ /** <ray-command-palette> as a Vue component. */
1356
+ export declare const RayCommandPalette: DefineComponent<RayCommandPaletteProps>;
1357
+
1358
+ export interface RayDialogProps {
1359
+ /** Shown as a modal. */
1360
+ open?: boolean;
1361
+ /** Heading (also the dialog's accessible name). */
1362
+ label?: string;
1363
+ /** A line under the title (the dialog's accessible description). */
1364
+ description?: string;
1365
+ /** Width: xs…xl, full (the whole window), or any CSS length; a percentage is of the window (70% = 70vw, at least 40rem). Never wider than the window. */
1366
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | "full" | (string & {});
1367
+ /** Fixed height (the body scrolls): any CSS length; a percentage is of the window (70% = 70dvh, at least 30rem). Never taller than the window. Default: as tall as the content, up to the window. */
1368
+ height?: string;
1369
+ /** Corner radius: xs…xl, none, or a CSS length. Default: lg. */
1370
+ radius?: string;
1371
+ /** Vertical placement. */
1372
+ position?: "center" | "top";
1373
+ /** Escape and backdrop clicks do not close it (the × still does; hide it with hide-close). To allow only one of them, cancel ray-request-close by its source. */
1374
+ persistent?: boolean;
1375
+ /** No close button in the header. */
1376
+ hideClose?: boolean;
1377
+ /** Blur of the page behind: px ("8"), a CSS length or "none". Default: --ray-overlay-blur ([overlay] blur in tokens.toml). */
1378
+ overlayBlur?: string;
1379
+ /** v-model: the element's `open`. */
1380
+ modelValue?: boolean;
1381
+ "onUpdate:modelValue"?: (value: boolean) => void;
1382
+ /** After it opened. */
1383
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1384
+ /** After it closed; detail: { returnValue }. */
1385
+ onRayClose?: (event: CustomEvent<{ returnValue: string }>) => void;
1386
+ /** Escape, backdrop or close button; cancelable (preventDefault keeps it open). detail: { source }. */
1387
+ onRayRequestClose?: (event: CustomEvent<{ source: "escape" | "backdrop" | "button" }>) => void;
1388
+ }
1389
+ /** <ray-dialog> as a Vue component. */
1390
+ export declare const RayDialog: DefineComponent<RayDialogProps>;
1391
+
1392
+ export interface RayDrawerProps {
1393
+ /** Shown. */
1394
+ open?: boolean;
1395
+ /** Heading (also the accessible name). */
1396
+ label?: string;
1397
+ /** A line under the title (the drawer's accessible description). */
1398
+ description?: string;
1399
+ /** The edge it slides from. */
1400
+ position?: "right" | "left" | "top" | "bottom";
1401
+ /** Width (left/right) or height (top/bottom): xs…xl, full, or any CSS length. */
1402
+ size?: "xs" | "sm" | "md" | "lg" | "xl" | "full" | (string & {});
1403
+ /** No backdrop nor scroll lock: the page stays interactive (a side panel). */
1404
+ modeless?: boolean;
1405
+ /** Detached from the edge, with rounded corners. */
1406
+ floating?: boolean;
1407
+ /** Escape and backdrop clicks do not close it. */
1408
+ persistent?: boolean;
1409
+ /** No close button in the header. */
1410
+ hideClose?: boolean;
1411
+ /** Blur of the page behind: px ("8"), a CSS length or "none". Default: --ray-overlay-blur ([overlay] blur in tokens.toml). */
1412
+ overlayBlur?: string;
1413
+ /** v-model: the element's `open`. */
1414
+ modelValue?: boolean;
1415
+ "onUpdate:modelValue"?: (value: boolean) => void;
1416
+ /** After it opened. */
1417
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1418
+ /** After it closed; detail: { returnValue }. */
1419
+ onRayClose?: (event: CustomEvent<{ returnValue: string }>) => void;
1420
+ /** Escape, backdrop or close button; cancelable. */
1421
+ onRayRequestClose?: (event: CustomEvent<{ source: "escape" | "backdrop" | "button" }>) => void;
1422
+ }
1423
+ /** <ray-drawer> as a Vue component. */
1424
+ export declare const RayDrawer: DefineComponent<RayDrawerProps>;
1425
+
1426
+ export interface RayMenuProps {
1427
+ /** Shown. */
1428
+ open?: boolean;
1429
+ /** Preferred side and alignment. */
1430
+ placement?: "bottom-start" | "bottom" | "bottom-end" | "top-start" | "top" | "top-end" | "right-start" | "left-start";
1431
+ /** Opens on right click (contextmenu) over the trigger area, at the pointer. */
1432
+ context?: boolean;
1433
+ /** Choosing an item does not close the menu. */
1434
+ keepOpen?: boolean;
1435
+ /** With a native host (ray-elements/core/raylang.js in a std/ui window), opens as the system's context menu at the pointer: items and dividers, same ray-select. */
1436
+ native?: boolean;
1437
+ /** Gap to the anchor in px. */
1438
+ offset?: number;
1439
+ /** v-model: the element's `open`. */
1440
+ modelValue?: boolean;
1441
+ "onUpdate:modelValue"?: (value: boolean) => void;
1442
+ /** An item was chosen; detail: { value, item }. */
1443
+ onRaySelect?: (event: CustomEvent<{ value: string; item: Ray.RayMenuItem }>) => void;
1444
+ /** After it opened. */
1445
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1446
+ /** After it closed. */
1447
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1448
+ }
1449
+ /** <ray-menu> as a Vue component. */
1450
+ export declare const RayMenu: DefineComponent<RayMenuProps>;
1451
+
1452
+ export interface RayMenuItemProps {
1453
+ /** Reported in ray-select (default: the text). */
1454
+ value?: string;
1455
+ /** Skipped by the keyboard, cannot be chosen. */
1456
+ disabled?: boolean;
1457
+ /** Text and hover color (e.g. red for destructive actions). */
1458
+ color?: string;
1459
+ }
1460
+ /** <ray-menu-item> as a Vue component. */
1461
+ export declare const RayMenuItem: DefineComponent<RayMenuItemProps>;
1462
+
1463
+ export interface RayMenuLabelProps {
1464
+ }
1465
+ /** <ray-menu-label> as a Vue component. */
1466
+ export declare const RayMenuLabel: DefineComponent<RayMenuLabelProps>;
1467
+
1468
+ export interface RayMenuDividerProps {
1469
+ }
1470
+ /** <ray-menu-divider> as a Vue component. */
1471
+ export declare const RayMenuDivider: DefineComponent<RayMenuDividerProps>;
1472
+
1473
+ export interface RayPopoverProps {
1474
+ /** Shown. */
1475
+ open?: boolean;
1476
+ /** Preferred side and alignment. */
1477
+ placement?: "bottom" | "bottom-start" | "bottom-end" | "top" | "top-start" | "top-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end";
1478
+ /** Gap to the trigger in px. */
1479
+ offset?: number;
1480
+ /** Panel width (px number or CSS length). Default: its content. */
1481
+ width?: string;
1482
+ /** At least as wide as the trigger. */
1483
+ matchWidth?: boolean;
1484
+ /** Panel padding. */
1485
+ padding?: "0" | "xs" | "sm" | "md" | "lg";
1486
+ /** Moves focus into the panel when opened and keeps Tab inside it. */
1487
+ trapFocus?: boolean;
1488
+ /** v-model: the element's `open`. */
1489
+ modelValue?: boolean;
1490
+ "onUpdate:modelValue"?: (value: boolean) => void;
1491
+ /** After it opened. */
1492
+ onRayOpen?: (event: CustomEvent<unknown>) => void;
1493
+ /** After it closed (also by Escape or an outside click). */
1494
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1495
+ }
1496
+ /** <ray-popover> as a Vue component. */
1497
+ export declare const RayPopover: DefineComponent<RayPopoverProps>;
1498
+
1499
+ export interface RayTooltipProps {
1500
+ /** Tooltip text. */
1501
+ label?: string;
1502
+ /** Preferred side. */
1503
+ placement?: "top" | "bottom" | "left" | "right" | "top-start" | "top-end" | "bottom-start" | "bottom-end";
1504
+ /** ms before showing. */
1505
+ openDelay?: number;
1506
+ /** ms before hiding. */
1507
+ closeDelay?: number;
1508
+ /** A palette color or any CSS color. Default: inverted foreground/background. */
1509
+ color?: string;
1510
+ /** Never shows. */
1511
+ disabled?: boolean;
1512
+ /** Shown. */
1513
+ open?: boolean;
1514
+ /** Gap to the anchor in px. */
1515
+ offset?: number;
1516
+ }
1517
+ /** <ray-tooltip> as a Vue component. */
1518
+ export declare const RayTooltip: DefineComponent<RayTooltipProps>;
1519
+
1520
+ export interface RayAccordionProps {
1521
+ /** Open item's value; with multiple, an array (attribute: comma-separated). */
1522
+ value?: string | string[] | undefined;
1523
+ /** Several items may be open. */
1524
+ multiple?: boolean;
1525
+ /** Visual style. */
1526
+ variant?: "default" | "contained" | "separated" | "filled";
1527
+ /** Side of the chevron. */
1528
+ chevronPosition?: "right" | "left";
1529
+ /** v-model: the element's `value`. */
1530
+ modelValue?: string | string[] | undefined;
1531
+ "onUpdate:modelValue"?: (value: string | string[] | undefined) => void;
1532
+ /** The user opened or closed an item. */
1533
+ onChange?: (event: Event) => void;
1534
+ }
1535
+ /** <ray-accordion> as a Vue component. */
1536
+ export declare const RayAccordion: DefineComponent<RayAccordionProps>;
1537
+
1538
+ export interface RayAccordionItemProps {
1539
+ /** Identifies the item in the accordion's value. */
1540
+ value?: string;
1541
+ /** Header text (or slot=label). */
1542
+ label?: string;
1543
+ /** A secondary line under the label, in the header. */
1544
+ description?: string;
1545
+ /** Cannot be toggled. */
1546
+ disabled?: boolean;
1547
+ /** aria-level of the header. */
1548
+ headingLevel?: number;
1549
+ }
1550
+ /** <ray-accordion-item> as a Vue component. */
1551
+ export declare const RayAccordionItem: DefineComponent<RayAccordionItemProps>;
1552
+
1553
+ export interface RayAttachmentProps {
1554
+ /** File name (ellipsized; full name in the tooltip). */
1555
+ name?: string;
1556
+ /** Size in bytes, shown as "12 KB", "3.4 MB". */
1557
+ size?: number;
1558
+ /** MIME type: picks the icon (image or file) and, with the name, the extension badge. */
1559
+ type?: string;
1560
+ /** Thumbnail URL for images (falls back to the icon if it fails to load). */
1561
+ src?: string;
1562
+ /** Makes the name a download link. */
1563
+ href?: string;
1564
+ /** Upload progress 0–100: a thin bar and "Uploading… 45%". Unset: done. */
1565
+ progress?: number;
1566
+ /** Explicit state. Default: "uploading" while progress is set, else "done". */
1567
+ status?: "uploading" | "done" | "error";
1568
+ /** Error text shown with status="error" (default "Upload failed"). */
1569
+ error?: string;
1570
+ /** Shows a remove (×) button. */
1571
+ removable?: boolean;
1572
+ /** Accessible label of the remove button; {name} is replaced by the file name. */
1573
+ removeLabel?: string;
1574
+ /** row: a compact chip; card: the thumbnail on top. */
1575
+ variant?: "row" | "card";
1576
+ /** Dimmed, not removable, the name is not a link. */
1577
+ disabled?: boolean;
1578
+ /** The remove button was pressed; cancelable (preventDefault keeps the element). */
1579
+ onRayRemove?: (event: CustomEvent<{ name: string; file: File | null }>) => void;
1580
+ }
1581
+ /** <ray-attachment> as a Vue component. */
1582
+ export declare const RayAttachment: DefineComponent<RayAttachmentProps>;
1583
+
1584
+ export interface RayAttachmentsProps {
1585
+ }
1586
+ /** <ray-attachments> as a Vue component. */
1587
+ export declare const RayAttachments: DefineComponent<RayAttachmentsProps>;
1588
+
1589
+ export interface RayAvatarProps {
1590
+ /** Image URL; falls back to initials if it fails to load. */
1591
+ src?: string;
1592
+ /** Accessible name (default: name). */
1593
+ alt?: string;
1594
+ /** Person or entity name; its initials are shown without an image. */
1595
+ name?: string;
1596
+ /** A palette color or any CSS color. */
1597
+ color?: string;
1598
+ /** Style of the initials/placeholder. */
1599
+ variant?: "light" | "filled" | "outline" | "default";
1600
+ /** Diameter. */
1601
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1602
+ /** Corner radius. Default: full. */
1603
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1604
+ }
1605
+ /** <ray-avatar> as a Vue component. */
1606
+ export declare const RayAvatar: DefineComponent<RayAvatarProps>;
1607
+
1608
+ export interface RayBadgeProps {
1609
+ /** Visual style. */
1610
+ variant?: "light" | "filled" | "outline" | "dot" | "default" | "gradient";
1611
+ /** With variant=gradient: "from to [deg]", palette colors or CSS colors ("teal blue 90"). Default: the --ray-gradient-* tokens. */
1612
+ gradient?: string;
1613
+ /** A palette color or any CSS color. */
1614
+ color?: string;
1615
+ /** Height and font size. */
1616
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1617
+ /** Corner radius. Default: full. */
1618
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1619
+ /** Keeps the text as written instead of uppercase. */
1620
+ normalCase?: boolean;
1621
+ }
1622
+ /** <ray-badge> as a Vue component. */
1623
+ export declare const RayBadge: DefineComponent<RayBadgeProps>;
1624
+
1625
+ export interface RayBlockquoteProps {
1626
+ /** Who said it, shown below the quote ("— Grace Hopper"). */
1627
+ cite?: string;
1628
+ /** URL of the source: the inner blockquote's cite attribute. */
1629
+ href?: string;
1630
+ /** A palette color or any CSS color, for the edge, the mark and the tint. Default: the primary. */
1631
+ color?: string;
1632
+ /** light: tinted background; outline: border and edge only; filled: solid color (a pull quote). */
1633
+ variant?: "light" | "outline" | "filled";
1634
+ /** Registry icon of the mark, or none. The icon slot replaces it. */
1635
+ icon?: string;
1636
+ /** Text size (lg for a pull quote). */
1637
+ size?: "sm" | "md" | "lg";
1638
+ /** Inner spacing: xs…xl (the spacing scale), px as a number, or a CSS length. Default: md. */
1639
+ padding?: string;
1640
+ /** No colored edge on the start side (the tint, border and mark stay). */
1641
+ hideEdge?: boolean;
1642
+ /** Corner radius: xs…xl, none, or a CSS length. Default: md. */
1643
+ radius?: string;
1644
+ }
1645
+ /** <ray-blockquote> as a Vue component. */
1646
+ export declare const RayBlockquote: DefineComponent<RayBlockquoteProps>;
1647
+
1648
+ export interface RayCarouselProps {
1649
+ /** Current position (0-based). Setting it scrolls there. */
1650
+ index?: number;
1651
+ /** Accessible name of the carousel region. */
1652
+ label?: string;
1653
+ /** Size of each slide along the scroll axis ("100%" by default; "50%", "18rem"…). */
1654
+ slideSize?: string;
1655
+ /** Space between slides (default var(--ray-space-4)). */
1656
+ slideGap?: string;
1657
+ /** Where a slide snaps in the viewport. */
1658
+ align?: "start" | "center";
1659
+ /** Scroll axis (vertical needs a height; 20rem by default). */
1660
+ orientation?: "horizontal" | "vertical";
1661
+ /** next() on the last position goes to the first, prev() on the first to the last. */
1662
+ loop?: boolean;
1663
+ /** Milliseconds between automatic moves (0: off). Pauses on hover, focus and when the page is hidden; starts paused with reduced motion. Shows a pause/play button. */
1664
+ autoplay?: number;
1665
+ /** No previous/next buttons. */
1666
+ hideControls?: boolean;
1667
+ /** No indicator dots. */
1668
+ hideIndicators?: boolean;
1669
+ /** The current position changed (read `index`) by the user or a method (controls, indicators, keyboard, swipe, scroll, next/prev/goTo, autoplay) — not when `index` is set by code. */
1670
+ onChange?: (event: Event) => void;
1671
+ }
1672
+ /** <ray-carousel> as a Vue component. */
1673
+ export declare const RayCarousel: DefineComponent<RayCarouselProps>;
1674
+
1675
+ export interface RayCodeProps {
1676
+ /** The code, from script (the most convenient in React and Vue). Wins over the content. */
1677
+ code?: string;
1678
+ /** The language: js, ts, jsx, tsx, json, html, xml, svg, vue, css, sh, ray, diff… (also shown in the header). Not lang: that is the human language of the text. */
1679
+ language?: string;
1680
+ /** A file name or title in the header; also the scroll region's accessible name. */
1681
+ filename?: string;
1682
+ /** Numbers each line (not copied, not selectable). */
1683
+ lineNumbers?: boolean;
1684
+ /** Lines to highlight: "3, 5-7". */
1685
+ highlight?: string;
1686
+ /** Wraps long lines instead of scrolling sideways. */
1687
+ wrap?: boolean;
1688
+ /** Height before it scrolls: px as a number, or a CSS length. A taller block gets a "Show all N lines" button. */
1689
+ maxHeight?: string;
1690
+ /** Shown whole, past max-height. */
1691
+ expanded?: boolean;
1692
+ /** No copy button. */
1693
+ hideCopy?: boolean;
1694
+ /** No header bar (the copy button floats in the corner). */
1695
+ hideHeader?: boolean;
1696
+ /** Font size. */
1697
+ size?: "xs" | "sm" | "md";
1698
+ /** Corner radius: xs…xl, none, or a CSS length. Default: md. */
1699
+ radius?: string;
1700
+ /** Accessible name of the copy button. */
1701
+ copyLabel?: string;
1702
+ /** Shown and announced after copying. */
1703
+ copiedLabel?: string;
1704
+ /** The code was copied. */
1705
+ onRayCopy?: (event: CustomEvent<{ code: string }>) => void;
1706
+ }
1707
+ /** <ray-code> as a Vue component. */
1708
+ export declare const RayCode: DefineComponent<RayCodeProps>;
1709
+
1710
+ export interface RayIconProps {
1711
+ /** Registered icon name (iconNames()). */
1712
+ name?: string;
1713
+ /** xs…xl or any CSS length. Default: 1em. */
1714
+ size?: string;
1715
+ /** Accessible name; without it the icon is decorative (hidden from screen readers). */
1716
+ label?: string;
1717
+ /** A palette color or any CSS color. Default: the text color. */
1718
+ color?: string;
1719
+ /** Stroke width for stroke icons (default: --ray-icon-stroke, 2). */
1720
+ stroke?: number;
1721
+ }
1722
+ /** <ray-icon> as a Vue component. */
1723
+ export declare const RayIcon: DefineComponent<RayIconProps>;
1724
+
1725
+ export interface RayIndicatorProps {
1726
+ /** Text in the indicator (a word or a count). Empty: a dot. */
1727
+ label?: string;
1728
+ /** Which point of the content's box it sits on. */
1729
+ position?: "top-start" | "top-center" | "top-end" | "middle-start" | "middle-center" | "middle-end" | "bottom-start" | "bottom-center" | "bottom-end";
1730
+ /** Moves it inward from that point: px as a number, or a CSS length. Use it on round content (an avatar), so it sits on the curve. */
1731
+ offset?: string | number;
1732
+ /** A palette color or any CSS color. Default: the primary. */
1733
+ color?: string;
1734
+ /** Diameter of the dot (and minimum height of a label): px as a number, or a CSS length. Default: 10px. */
1735
+ size?: string | number;
1736
+ /** Corner radius: xs…xl, none, or a CSS length. Default: round. */
1737
+ radius?: string;
1738
+ /** A numeric label above it shows as max+ (99+). */
1739
+ max?: number;
1740
+ /** inline-block, to sit within a line of text. */
1741
+ inline?: boolean;
1742
+ /** A ring in the background color, to separate it from the content. */
1743
+ withBorder?: boolean;
1744
+ /** A pulse around it (live, recording, syncing). */
1745
+ processing?: boolean;
1746
+ /** Hides the indicator (the content stays). */
1747
+ disabled?: boolean;
1748
+ }
1749
+ /** <ray-indicator> as a Vue component. */
1750
+ export declare const RayIndicator: DefineComponent<RayIndicatorProps>;
1751
+
1752
+ export interface RayKbdProps {
1753
+ /** Font size. */
1754
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1755
+ /** default: raised keycap; filled: flat muted chip; outline: flat with a border. */
1756
+ variant?: "default" | "filled" | "outline";
1757
+ }
1758
+ /** <ray-kbd> as a Vue component. */
1759
+ export declare const RayKbd: DefineComponent<RayKbdProps>;
1760
+
1761
+ export interface RayStatProps {
1762
+ /** What is measured. */
1763
+ label?: string;
1764
+ /** The figure, already formatted. */
1765
+ value?: string;
1766
+ /** Change (positive is shown as good, in green; see inverse). */
1767
+ diff?: number;
1768
+ /** Unit of diff. */
1769
+ diffUnit?: string;
1770
+ /** A line under the value (compared to…). */
1771
+ note?: string;
1772
+ /** Lower is better (errors, latency): negative diffs are green. */
1773
+ inverse?: boolean;
1774
+ /** Without the card around. */
1775
+ plain?: boolean;
1776
+ }
1777
+ /** <ray-stat> as a Vue component. */
1778
+ export declare const RayStat: DefineComponent<RayStatProps>;
1779
+
1780
+ export interface RayTableProps {
1781
+ /** Columns: key, label, width, align, sortable, render(row, index), sort(a, b). */
1782
+ columns?: Ray.TableColumn[];
1783
+ /** Rows (objects). */
1784
+ data?: any[];
1785
+ /** Field that identifies a row (selection). */
1786
+ rowKey?: string;
1787
+ /** A checkbox per row and a select-all checkbox. */
1788
+ selectable?: boolean;
1789
+ /** Keys of the selected rows. */
1790
+ selection?: unknown[];
1791
+ /** Current sort; set it, or let header clicks change it. */
1792
+ sort?: Ray.TableSort | null;
1793
+ /** Do not sort here: listen to ray-sort and pass sorted data. */
1794
+ manualSort?: boolean;
1795
+ /** Rows are focusable and fire ray-row-click (Enter too; arrows move between rows). */
1796
+ clickableRows?: boolean;
1797
+ /** Alternate row background. */
1798
+ striped?: boolean;
1799
+ /** Border around the table. */
1800
+ withBorder?: boolean;
1801
+ /** Borders between columns. */
1802
+ withColumnBorders?: boolean;
1803
+ /** The header stays visible while scrolling (with --ray-table-max-height). */
1804
+ stickyHeader?: boolean;
1805
+ /** No row highlight on hover. */
1806
+ noHover?: boolean;
1807
+ /** Cell padding. */
1808
+ density?: "xs" | "sm" | "md" | "lg";
1809
+ /** Caption (also the table's accessible name). */
1810
+ label?: string;
1811
+ /** Text without rows (or put a ray-empty-state in slot=empty). */
1812
+ emptyLabel?: string;
1813
+ /** A header changed the sort. */
1814
+ onRaySort?: (event: CustomEvent<{ key: string; direction: "asc" | "desc" | null }>) => void;
1815
+ /** The selection changed. */
1816
+ onRaySelectionChange?: (event: CustomEvent<{ selection: unknown[] }>) => void;
1817
+ /** A row was clicked or activated with Enter (clickable-rows). */
1818
+ onRayRowClick?: (event: CustomEvent<{ row: any; index: number }>) => void;
1819
+ }
1820
+ /** <ray-table> as a Vue component. */
1821
+ export declare const RayTable: DefineComponent<RayTableProps>;
1822
+
1823
+ export interface RayTimelineProps {
1824
+ /** Index of the last reached item (-1: none). */
1825
+ active?: number;
1826
+ /** Side of the line. */
1827
+ align?: "left" | "right";
1828
+ /** Bullet size: px as a number or a CSS length (default 20px). */
1829
+ bulletSize?: string;
1830
+ /** Line width in px (default 2). */
1831
+ lineWidth?: number;
1832
+ /** A palette color or any CSS color for what is reached (default: primary). */
1833
+ color?: string;
1834
+ /** Counts active from the end (the latest event at the top). */
1835
+ reverseActive?: boolean;
1836
+ }
1837
+ /** <ray-timeline> as a Vue component. */
1838
+ export declare const RayTimeline: DefineComponent<RayTimelineProps>;
1839
+
1840
+ export interface RayTimelineItemProps {
1841
+ /** The title of the event. */
1842
+ label?: string;
1843
+ /** When ("2 h ago", a date). */
1844
+ time?: string;
1845
+ /** An icon of the registry in the bullet. */
1846
+ icon?: string;
1847
+ /** Its own color (a failed step in red). */
1848
+ color?: string;
1849
+ /** The line to the next item (dashed: not happened yet). */
1850
+ lineVariant?: "solid" | "dashed" | "dotted";
1851
+ }
1852
+ /** <ray-timeline-item> as a Vue component. */
1853
+ export declare const RayTimelineItem: DefineComponent<RayTimelineItemProps>;
1854
+
1855
+ export interface RayAlertProps {
1856
+ /** Title. */
1857
+ label?: string;
1858
+ /** A palette color or any CSS color. */
1859
+ color?: string;
1860
+ /** Visual style. */
1861
+ variant?: "light" | "filled" | "outline" | "default" | "transparent";
1862
+ /** Corner radius. */
1863
+ radius?: "xs" | "sm" | "md" | "lg" | "xl";
1864
+ /** A registered icon name, or none. */
1865
+ icon?: string;
1866
+ /** A close button; closing hides the alert (cancel ray-close to keep it). */
1867
+ closable?: boolean;
1868
+ /** Accessible name of the close button. */
1869
+ closeLabel?: string;
1870
+ /** The close button was pressed; cancelable. */
1871
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1872
+ }
1873
+ /** <ray-alert> as a Vue component. */
1874
+ export declare const RayAlert: DefineComponent<RayAlertProps>;
1875
+
1876
+ export interface RayEmptyStateProps {
1877
+ /** Title. */
1878
+ label?: string;
1879
+ /** Less padding. */
1880
+ compact?: boolean;
1881
+ /** Dashed border. */
1882
+ withBorder?: boolean;
1883
+ }
1884
+ /** <ray-empty-state> as a Vue component. */
1885
+ export declare const RayEmptyState: DefineComponent<RayEmptyStateProps>;
1886
+
1887
+ export interface RayNotificationProps {
1888
+ /** Title. */
1889
+ label?: string;
1890
+ /** Status color: tints the status icon (and a slotted icon's circle). */
1891
+ color?: string;
1892
+ /** Status icon from the registry (default: from the color); "none" for no icon. */
1893
+ icon?: string;
1894
+ /** Shows a spinner (notify() does not auto-close it). */
1895
+ loading?: boolean;
1896
+ /** No close button. */
1897
+ hideClose?: boolean;
1898
+ /** Draws a border. */
1899
+ withBorder?: boolean;
1900
+ /** Text of an action button (e.g. "Undo"); pressing it fires ray-action. */
1901
+ actionLabel?: string;
1902
+ /** The close button was pressed. */
1903
+ onRayClose?: (event: CustomEvent<unknown>) => void;
1904
+ /** The action button was pressed (notify() runs action.onClick and closes it). */
1905
+ onRayAction?: (event: CustomEvent<unknown>) => void;
1906
+ }
1907
+ /** <ray-notification> as a Vue component. */
1908
+ export declare const RayNotification: DefineComponent<RayNotificationProps>;
1909
+
1910
+ export interface RayToasterProps {
1911
+ /** Corner of the stack. */
1912
+ position?: "bottom-right" | "bottom-left" | "bottom-center" | "top-right" | "top-left" | "top-center";
1913
+ /** Maximum kept; the oldest go first. */
1914
+ limit?: number;
1915
+ /** Toasts shown in the collapsed stack (the rest wait, hidden). */
1916
+ visible?: number;
1917
+ /** Always expanded: a list instead of a stack. */
1918
+ expand?: boolean;
1919
+ /** Pixels between toasts when expanded. */
1920
+ gap?: number;
1921
+ }
1922
+ /** <ray-toaster> as a Vue component. */
1923
+ export declare const RayToaster: DefineComponent<RayToasterProps>;
1924
+
1925
+ export interface RayProgressProps {
1926
+ /** Progress, from 0 to max. Unset: indeterminate. */
1927
+ value?: number;
1928
+ /** The value of a full bar. */
1929
+ max?: number;
1930
+ /** A palette color or any CSS color. */
1931
+ color?: string;
1932
+ /** Bar height. */
1933
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1934
+ /** Corner radius. Default: full. */
1935
+ radius?: "xs" | "sm" | "md" | "lg" | "xl" | "full";
1936
+ /** Diagonal stripes. */
1937
+ striped?: boolean;
1938
+ /** Moving stripes (with striped). */
1939
+ animated?: boolean;
1940
+ /** Shows the percentage: inside the bar on lg and xl, beside it on smaller sizes. */
1941
+ showValue?: boolean;
1942
+ /** Accessible name (default: Progress). */
1943
+ label?: string;
1944
+ }
1945
+ /** <ray-progress> as a Vue component. */
1946
+ export declare const RayProgress: DefineComponent<RayProgressProps>;
1947
+
1948
+ export interface RaySkeletonProps {
1949
+ /** Width (CSS length, a number is px). Default: 100% (a circle: 2.5rem). */
1950
+ width?: string;
1951
+ /** Height of a block or of each line (CSS length, a number is px). Default: 1rem. */
1952
+ height?: string;
1953
+ /** A circle (avatar placeholder): its diameter is width, else height. */
1954
+ circle?: boolean;
1955
+ /** Number of text lines (the last one is shorter). */
1956
+ lines?: number;
1957
+ /** Corner radius: xs…xl, full or a CSS length. Default: sm. */
1958
+ radius?: string;
1959
+ /** The loading effect (always none with reduced motion). */
1960
+ animation?: "shimmer" | "pulse" | "none";
1961
+ /** Shows the slotted content instead of the placeholder. */
1962
+ loaded?: boolean;
1963
+ }
1964
+ /** <ray-skeleton> as a Vue component. */
1965
+ export declare const RaySkeleton: DefineComponent<RaySkeletonProps>;
1966
+
1967
+ export interface RaySpinnerProps {
1968
+ /** A palette color or any CSS color. Default: the primary color. */
1969
+ color?: string;
1970
+ /** Diameter. */
1971
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
1972
+ /** Text read by screen readers. */
1973
+ label?: string;
1974
+ }
1975
+ /** <ray-spinner> as a Vue component. */
1976
+ export declare const RaySpinner: DefineComponent<RaySpinnerProps>;
1977
+
1978
+ export interface RayAppBarProps {
1979
+ /** The title. */
1980
+ label?: string;
1981
+ /** A line under the title. */
1982
+ description?: string;
1983
+ /** The title centered (iOS). */
1984
+ center?: boolean;
1985
+ /** default: the page background; filled: the primary color; transparent: until it elevates. */
1986
+ variant?: "default" | "filled" | "transparent";
1987
+ /** Height: 48, 56 or 64 px. */
1988
+ size?: "sm" | "md" | "lg";
1989
+ /** While the content scrolls: elevate (border and shadow), hide (also slides away going down, back going up), none. */
1990
+ scrollBehavior?: "elevate" | "hide" | "none";
1991
+ /** Sticks to the top of the window (outside a shell). */
1992
+ sticky?: boolean;
1993
+ /** A selector of the element whose scrolling it follows (default: its shell's, else the window). */
1994
+ scrollTarget?: string;
1995
+ }
1996
+ /** <ray-app-bar> as a Vue component. */
1997
+ export declare const RayAppBar: DefineComponent<RayAppBarProps>;
1998
+
1999
+ export interface RayAppShellProps {
2000
+ /** default: the header across the top; alt: the navbar full height, the header beside it. */
2001
+ layout?: "default" | "alt";
2002
+ /** Width (px, em or rem) below which it takes the phone layout. */
2003
+ breakpoint?: string;
2004
+ /** Padding of the main area: xs…xl, a number (px) or a CSS length. */
2005
+ padding?: string;
2006
+ /** It switched between the wide and the phone layout. */
2007
+ onRayBreakpoint?: (event: CustomEvent<{ mobile: boolean }>) => void;
2008
+ }
2009
+ /** <ray-app-shell> as a Vue component. */
2010
+ export declare const RayAppShell: DefineComponent<RayAppShellProps>;
2011
+
2012
+ export interface RayAspectRatioProps {
2013
+ /** Width/height: "16/9", "4:3", "1" or a number. */
2014
+ ratio?: string;
2015
+ /** How the media fills the box (object-fit). */
2016
+ fit?: "cover" | "contain";
2017
+ /** Corner radius: xs…xl, full or a CSS length. */
2018
+ radius?: string;
2019
+ }
2020
+ /** <ray-aspect-ratio> as a Vue component. */
2021
+ export declare const RayAspectRatio: DefineComponent<RayAspectRatioProps>;
2022
+
2023
+ export interface RayCardProps {
2024
+ /** Inner spacing (named space scale). */
2025
+ padding?: "0" | "xs" | "sm" | "md" | "lg" | "xl";
2026
+ /** Corner radius. Default: --ray-radius-default. */
2027
+ radius?: "xs" | "sm" | "md" | "lg" | "xl";
2028
+ /** Elevation. */
2029
+ shadow?: "xs" | "sm" | "md" | "lg" | "xl";
2030
+ /** Draws a border. */
2031
+ withBorder?: boolean;
2032
+ /** default: card surface; filled: muted surface; outline: border without fill. */
2033
+ variant?: "default" | "filled" | "outline";
2034
+ }
2035
+ /** <ray-card> as a Vue component. */
2036
+ export declare const RayCard: DefineComponent<RayCardProps>;
2037
+
2038
+ export interface RayCenterProps {
2039
+ /** As wide as its content (inline-flex): an icon beside text. */
2040
+ inline?: boolean;
2041
+ }
2042
+ /** <ray-center> as a Vue component. */
2043
+ export declare const RayCenter: DefineComponent<RayCenterProps>;
2044
+
2045
+ export interface RayContainerProps {
2046
+ /** Maximum width: xs 540px, sm 720px, md 960px, lg 1140px, xl 1320px, or any CSS length. */
2047
+ size?: string;
2048
+ /** Side padding: xs…xl, a number (px) or a CSS length. */
2049
+ padding?: string;
2050
+ /** No maximum width: the whole width, still padded. */
2051
+ fluid?: boolean;
2052
+ }
2053
+ /** <ray-container> as a Vue component. */
2054
+ export declare const RayContainer: DefineComponent<RayContainerProps>;
2055
+
2056
+ export interface RayGridProps {
2057
+ /** Columns: a count, then counts from a width up ("1 sm:2 lg:4"). */
2058
+ cols?: string;
2059
+ /** Instead of cols: as many columns of at least this width as fit ("14rem", 220). */
2060
+ minColWidth?: string;
2061
+ /** Space between cells: xs…xl, a number (px) or a CSS length. */
2062
+ gap?: string;
2063
+ /** Space between rows when it differs from gap. */
2064
+ rowGap?: string;
2065
+ /** Vertical alignment of the cells in a row. */
2066
+ align?: "stretch" | "start" | "center" | "end";
2067
+ }
2068
+ /** <ray-grid> as a Vue component. */
2069
+ export declare const RayGrid: DefineComponent<RayGridProps>;
2070
+
2071
+ export interface RayGroupProps {
2072
+ /** Space between children: xs…xl (the space scale), a number (px) or any CSS length. */
2073
+ gap?: string;
2074
+ /** Cross-axis alignment. */
2075
+ align?: "center" | "start" | "end" | "stretch" | "baseline";
2076
+ /** Main-axis distribution: space-between for a title on one side and actions on the other. */
2077
+ justify?: "start" | "center" | "end" | "space-between" | "space-around" | "space-evenly";
2078
+ /** Keeps the children on one line. */
2079
+ nowrap?: boolean;
2080
+ /** The children share the width equally. */
2081
+ grow?: boolean;
2082
+ }
2083
+ /** <ray-group> as a Vue component. */
2084
+ export declare const RayGroup: DefineComponent<RayGroupProps>;
2085
+
2086
+ export interface RayScrollAreaProps {
2087
+ /** Height (CSS length). */
2088
+ height?: string;
2089
+ /** Maximum height: it grows with its content up to this, then scrolls. */
2090
+ maxHeight?: string;
2091
+ /** Which ways it scrolls. */
2092
+ orientation?: "vertical" | "horizontal" | "both";
2093
+ /** The scrollbar: auto (when it scrolls), hover (while hovered or scrolling), never (still scrolls). */
2094
+ type?: "auto" | "hover" | "never";
2095
+ /** No edge shadows. */
2096
+ noShadows?: boolean;
2097
+ /** Distance from the end (px) at which ray-reach-end fires. */
2098
+ threshold?: number;
2099
+ /** Accessible name: makes the scrolling box a named region. */
2100
+ label?: string;
2101
+ /** The end came within threshold (once per arrival). */
2102
+ onRayReachEnd?: (event: CustomEvent<{ edge: "bottom" | "right" }>) => void;
2103
+ }
2104
+ /** <ray-scroll-area> as a Vue component. */
2105
+ export declare const RayScrollArea: DefineComponent<RayScrollAreaProps>;
2106
+
2107
+ export interface RaySeparatorProps {
2108
+ /** Direction of the rule. */
2109
+ orientation?: "horizontal" | "vertical";
2110
+ /** Text in the middle of a horizontal rule. */
2111
+ label?: string;
2112
+ /** Where the label sits. */
2113
+ labelPosition?: "left" | "center" | "right";
2114
+ /** Thickness (1–5px). */
2115
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
2116
+ /** Line style. */
2117
+ variant?: "solid" | "dashed" | "dotted";
2118
+ }
2119
+ /** <ray-separator> as a Vue component. */
2120
+ export declare const RaySeparator: DefineComponent<RaySeparatorProps>;
2121
+
2122
+ export interface RaySplitProps {
2123
+ /** horizontal: side by side; vertical: stacked. */
2124
+ orientation?: "horizontal" | "vertical";
2125
+ /** Initial size of the start pane: px (280) or any CSS length (30%, 20rem). */
2126
+ position?: string;
2127
+ /** Minimum size of the start pane in px. */
2128
+ min?: number;
2129
+ /** Maximum size of the start pane in px. */
2130
+ max?: number;
2131
+ /** The start pane is hidden. */
2132
+ collapsed?: boolean;
2133
+ /** The divider cannot be moved. */
2134
+ disabled?: boolean;
2135
+ /** A key: the size is saved in localStorage and restored. */
2136
+ autosave?: string;
2137
+ /** After a drag, a key or a collapse. */
2138
+ onRayResize?: (event: CustomEvent<{ size: number; collapsed: boolean }>) => void;
2139
+ }
2140
+ /** <ray-split> as a Vue component. */
2141
+ export declare const RaySplit: DefineComponent<RaySplitProps>;
2142
+
2143
+ export interface RayStackProps {
2144
+ /** Space between children: xs…xl (the space scale), a number (px) or any CSS length. */
2145
+ gap?: string;
2146
+ /** Cross-axis alignment: stretch fills the width. */
2147
+ align?: "stretch" | "start" | "center" | "end" | "baseline";
2148
+ /** Main-axis distribution (with a height to distribute). */
2149
+ justify?: "start" | "center" | "end" | "space-between" | "space-around" | "space-evenly";
2150
+ }
2151
+ /** <ray-stack> as a Vue component. */
2152
+ export declare const RayStack: DefineComponent<RayStackProps>;
2153
+
2154
+ export interface RayStatusbarProps {
2155
+ /** accent: the primary color (e.g. while debugging). */
2156
+ variant?: "default" | "accent";
2157
+ }
2158
+ /** <ray-statusbar> as a Vue component. */
2159
+ export declare const RayStatusbar: DefineComponent<RayStatusbarProps>;
2160
+
2161
+ export interface RayStatusbarItemProps {
2162
+ /** A button (listen to click). */
2163
+ action?: boolean;
2164
+ /** Text color (red for errors…). */
2165
+ color?: string;
2166
+ /** Accessible name and tooltip (for icon-only or terse items). */
2167
+ label?: string;
2168
+ }
2169
+ /** <ray-statusbar-item> as a Vue component. */
2170
+ export declare const RayStatusbarItem: DefineComponent<RayStatusbarItemProps>;
2171
+
2172
+ export interface RayThemeToggleProps {
2173
+ /** Control height. */
2174
+ size?: "xs" | "sm" | "md" | "lg" | "xl";
2175
+ /** Fired on the document root by setTheme(); detail: { theme, resolved, primary }. */
2176
+ onRayThemeChange?: (event: CustomEvent<{ theme: "light" | "dark" | "system"; resolved: "light" | "dark"; primary: string | null }>) => void;
2177
+ }
2178
+ /** <ray-theme-toggle> as a Vue component. */
2179
+ export declare const RayThemeToggle: DefineComponent<RayThemeToggleProps>;
2180
+
2181
+ export declare const components: {
2182
+ RayButton: typeof RayButton;
2183
+ RayButtonGroup: typeof RayButtonGroup;
2184
+ RayIconButton: typeof RayIconButton;
2185
+ RayToggle: typeof RayToggle;
2186
+ RayToggleGroup: typeof RayToggleGroup;
2187
+ RayCheckbox: typeof RayCheckbox;
2188
+ RayCheckboxGroup: typeof RayCheckboxGroup;
2189
+ RayColorPicker: typeof RayColorPicker;
2190
+ RayColorInput: typeof RayColorInput;
2191
+ RayCombobox: typeof RayCombobox;
2192
+ RayDatePicker: typeof RayDatePicker;
2193
+ RayCalendar: typeof RayCalendar;
2194
+ RayFileUpload: typeof RayFileUpload;
2195
+ RayInput: typeof RayInput;
2196
+ RayNumberInput: typeof RayNumberInput;
2197
+ RayPasswordInput: typeof RayPasswordInput;
2198
+ RayPathInput: typeof RayPathInput;
2199
+ RayRadioGroup: typeof RayRadioGroup;
2200
+ RayRadio: typeof RayRadio;
2201
+ RaySearch: typeof RaySearch;
2202
+ RaySegmentedControl: typeof RaySegmentedControl;
2203
+ RaySelect: typeof RaySelect;
2204
+ RaySlider: typeof RaySlider;
2205
+ RaySwitch: typeof RaySwitch;
2206
+ RayTextarea: typeof RayTextarea;
2207
+ RayBottomNav: typeof RayBottomNav;
2208
+ RayBottomNavItem: typeof RayBottomNavItem;
2209
+ RayBreadcrumbs: typeof RayBreadcrumbs;
2210
+ RayBreadcrumb: typeof RayBreadcrumb;
2211
+ RayNavLink: typeof RayNavLink;
2212
+ RayPagination: typeof RayPagination;
2213
+ RaySidebar: typeof RaySidebar;
2214
+ RaySidebarGroup: typeof RaySidebarGroup;
2215
+ RayStepper: typeof RayStepper;
2216
+ RayStep: typeof RayStep;
2217
+ RayTabs: typeof RayTabs;
2218
+ RayTab: typeof RayTab;
2219
+ RayTabPanel: typeof RayTabPanel;
2220
+ RayCommandPalette: typeof RayCommandPalette;
2221
+ RayDialog: typeof RayDialog;
2222
+ RayDrawer: typeof RayDrawer;
2223
+ RayMenu: typeof RayMenu;
2224
+ RayMenuItem: typeof RayMenuItem;
2225
+ RayMenuLabel: typeof RayMenuLabel;
2226
+ RayMenuDivider: typeof RayMenuDivider;
2227
+ RayPopover: typeof RayPopover;
2228
+ RayTooltip: typeof RayTooltip;
2229
+ RayAccordion: typeof RayAccordion;
2230
+ RayAccordionItem: typeof RayAccordionItem;
2231
+ RayAttachment: typeof RayAttachment;
2232
+ RayAttachments: typeof RayAttachments;
2233
+ RayAvatar: typeof RayAvatar;
2234
+ RayBadge: typeof RayBadge;
2235
+ RayBlockquote: typeof RayBlockquote;
2236
+ RayCarousel: typeof RayCarousel;
2237
+ RayCode: typeof RayCode;
2238
+ RayIcon: typeof RayIcon;
2239
+ RayIndicator: typeof RayIndicator;
2240
+ RayKbd: typeof RayKbd;
2241
+ RayStat: typeof RayStat;
2242
+ RayTable: typeof RayTable;
2243
+ RayTimeline: typeof RayTimeline;
2244
+ RayTimelineItem: typeof RayTimelineItem;
2245
+ RayAlert: typeof RayAlert;
2246
+ RayEmptyState: typeof RayEmptyState;
2247
+ RayNotification: typeof RayNotification;
2248
+ RayToaster: typeof RayToaster;
2249
+ RayProgress: typeof RayProgress;
2250
+ RaySkeleton: typeof RaySkeleton;
2251
+ RaySpinner: typeof RaySpinner;
2252
+ RayAppBar: typeof RayAppBar;
2253
+ RayAppShell: typeof RayAppShell;
2254
+ RayAspectRatio: typeof RayAspectRatio;
2255
+ RayCard: typeof RayCard;
2256
+ RayCenter: typeof RayCenter;
2257
+ RayContainer: typeof RayContainer;
2258
+ RayGrid: typeof RayGrid;
2259
+ RayGroup: typeof RayGroup;
2260
+ RayScrollArea: typeof RayScrollArea;
2261
+ RaySeparator: typeof RaySeparator;
2262
+ RaySplit: typeof RaySplit;
2263
+ RayStack: typeof RayStack;
2264
+ RayStatusbar: typeof RayStatusbar;
2265
+ RayStatusbarItem: typeof RayStatusbarItem;
2266
+ RayThemeToggle: typeof RayThemeToggle;
2267
+ };
2268
+ /** app.use(RayDs) registers every component globally. */
2269
+ export declare const RayDs: Plugin;
2270
+ export default RayDs;
2271
+
2272
+ declare module "vue" {
2273
+ export interface GlobalComponents {
2274
+ RayButton: typeof RayButton;
2275
+ RayButtonGroup: typeof RayButtonGroup;
2276
+ RayIconButton: typeof RayIconButton;
2277
+ RayToggle: typeof RayToggle;
2278
+ RayToggleGroup: typeof RayToggleGroup;
2279
+ RayCheckbox: typeof RayCheckbox;
2280
+ RayCheckboxGroup: typeof RayCheckboxGroup;
2281
+ RayColorPicker: typeof RayColorPicker;
2282
+ RayColorInput: typeof RayColorInput;
2283
+ RayCombobox: typeof RayCombobox;
2284
+ RayDatePicker: typeof RayDatePicker;
2285
+ RayCalendar: typeof RayCalendar;
2286
+ RayFileUpload: typeof RayFileUpload;
2287
+ RayInput: typeof RayInput;
2288
+ RayNumberInput: typeof RayNumberInput;
2289
+ RayPasswordInput: typeof RayPasswordInput;
2290
+ RayPathInput: typeof RayPathInput;
2291
+ RayRadioGroup: typeof RayRadioGroup;
2292
+ RayRadio: typeof RayRadio;
2293
+ RaySearch: typeof RaySearch;
2294
+ RaySegmentedControl: typeof RaySegmentedControl;
2295
+ RaySelect: typeof RaySelect;
2296
+ RaySlider: typeof RaySlider;
2297
+ RaySwitch: typeof RaySwitch;
2298
+ RayTextarea: typeof RayTextarea;
2299
+ RayBottomNav: typeof RayBottomNav;
2300
+ RayBottomNavItem: typeof RayBottomNavItem;
2301
+ RayBreadcrumbs: typeof RayBreadcrumbs;
2302
+ RayBreadcrumb: typeof RayBreadcrumb;
2303
+ RayNavLink: typeof RayNavLink;
2304
+ RayPagination: typeof RayPagination;
2305
+ RaySidebar: typeof RaySidebar;
2306
+ RaySidebarGroup: typeof RaySidebarGroup;
2307
+ RayStepper: typeof RayStepper;
2308
+ RayStep: typeof RayStep;
2309
+ RayTabs: typeof RayTabs;
2310
+ RayTab: typeof RayTab;
2311
+ RayTabPanel: typeof RayTabPanel;
2312
+ RayCommandPalette: typeof RayCommandPalette;
2313
+ RayDialog: typeof RayDialog;
2314
+ RayDrawer: typeof RayDrawer;
2315
+ RayMenu: typeof RayMenu;
2316
+ RayMenuItem: typeof RayMenuItem;
2317
+ RayMenuLabel: typeof RayMenuLabel;
2318
+ RayMenuDivider: typeof RayMenuDivider;
2319
+ RayPopover: typeof RayPopover;
2320
+ RayTooltip: typeof RayTooltip;
2321
+ RayAccordion: typeof RayAccordion;
2322
+ RayAccordionItem: typeof RayAccordionItem;
2323
+ RayAttachment: typeof RayAttachment;
2324
+ RayAttachments: typeof RayAttachments;
2325
+ RayAvatar: typeof RayAvatar;
2326
+ RayBadge: typeof RayBadge;
2327
+ RayBlockquote: typeof RayBlockquote;
2328
+ RayCarousel: typeof RayCarousel;
2329
+ RayCode: typeof RayCode;
2330
+ RayIcon: typeof RayIcon;
2331
+ RayIndicator: typeof RayIndicator;
2332
+ RayKbd: typeof RayKbd;
2333
+ RayStat: typeof RayStat;
2334
+ RayTable: typeof RayTable;
2335
+ RayTimeline: typeof RayTimeline;
2336
+ RayTimelineItem: typeof RayTimelineItem;
2337
+ RayAlert: typeof RayAlert;
2338
+ RayEmptyState: typeof RayEmptyState;
2339
+ RayNotification: typeof RayNotification;
2340
+ RayToaster: typeof RayToaster;
2341
+ RayProgress: typeof RayProgress;
2342
+ RaySkeleton: typeof RaySkeleton;
2343
+ RaySpinner: typeof RaySpinner;
2344
+ RayAppBar: typeof RayAppBar;
2345
+ RayAppShell: typeof RayAppShell;
2346
+ RayAspectRatio: typeof RayAspectRatio;
2347
+ RayCard: typeof RayCard;
2348
+ RayCenter: typeof RayCenter;
2349
+ RayContainer: typeof RayContainer;
2350
+ RayGrid: typeof RayGrid;
2351
+ RayGroup: typeof RayGroup;
2352
+ RayScrollArea: typeof RayScrollArea;
2353
+ RaySeparator: typeof RaySeparator;
2354
+ RaySplit: typeof RaySplit;
2355
+ RayStack: typeof RayStack;
2356
+ RayStatusbar: typeof RayStatusbar;
2357
+ RayStatusbarItem: typeof RayStatusbarItem;
2358
+ RayThemeToggle: typeof RayThemeToggle;
2359
+ }
2360
+ }