@uipath/apollo-wind 2.16.0 → 2.17.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.
@@ -450,38 +450,12 @@ function FieldByType({ field, formField, error, disabled, required, options }) {
450
450
  ]
451
451
  });
452
452
  case 'slider':
453
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(FormField, {
454
- children: [
455
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
456
- className: "flex justify-between",
457
- children: [
458
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormLabel, {
459
- required: required,
460
- children: field.label
461
- }),
462
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
463
- className: "text-sm text-muted-foreground",
464
- children: formField.value
465
- })
466
- ]
467
- }),
468
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(slider_cjs_namespaceObject.Slider, {
469
- value: [
470
- formField.value
471
- ],
472
- onValueChange: (values)=>formField.onChange(values[0]),
473
- min: field.min || 0,
474
- max: field.max || 100,
475
- step: field.step || 1,
476
- disabled: disabled
477
- }),
478
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormDescription, {
479
- children: field.description
480
- }),
481
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormError, {
482
- children: error
483
- })
484
- ]
453
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(SliderField, {
454
+ field: field,
455
+ formField: formField,
456
+ error: error,
457
+ disabled: disabled,
458
+ required: required
485
459
  });
486
460
  case 'date':
487
461
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(FormField, {
@@ -588,6 +562,68 @@ function FormError({ children }) {
588
562
  children: children
589
563
  });
590
564
  }
565
+ function SliderField({ field, formField, error, disabled, required }) {
566
+ const { watch } = (0, external_react_hook_form_namespaceObject.useFormContext)();
567
+ const watchedMax = field.maxRef ? watch(field.maxRef.fromField) : void 0;
568
+ const resolvedMax = resolveSliderMax(field, watchedMax);
569
+ const prevMaxRef = (0, external_react_namespaceObject.useRef)(resolvedMax);
570
+ (0, external_react_namespaceObject.useEffect)(()=>{
571
+ if (resolvedMax === prevMaxRef.current) return;
572
+ prevMaxRef.current = resolvedMax;
573
+ const v = formField.value;
574
+ if ('number' == typeof v && v > resolvedMax) formField.onChange(resolvedMax);
575
+ }, [
576
+ resolvedMax,
577
+ formField.value,
578
+ formField.onChange
579
+ ]);
580
+ const displayValue = (()=>{
581
+ const v = formField.value;
582
+ if ('number' == typeof v) return Math.min(v, resolvedMax);
583
+ return v;
584
+ })();
585
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(FormField, {
586
+ children: [
587
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
588
+ className: "flex justify-between",
589
+ children: [
590
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormLabel, {
591
+ required: required,
592
+ children: field.label
593
+ }),
594
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
595
+ className: "text-sm text-muted-foreground",
596
+ children: displayValue
597
+ })
598
+ ]
599
+ }),
600
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(slider_cjs_namespaceObject.Slider, {
601
+ value: [
602
+ displayValue ?? field.min ?? 0
603
+ ],
604
+ onValueChange: (values)=>formField.onChange(values[0]),
605
+ min: field.min || 0,
606
+ max: resolvedMax,
607
+ step: field.step || 1,
608
+ disabled: disabled
609
+ }),
610
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormDescription, {
611
+ children: field.description
612
+ }),
613
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(FormError, {
614
+ children: error
615
+ })
616
+ ]
617
+ });
618
+ }
619
+ function resolveSliderMax(field, watchedValue) {
620
+ if (field.maxRef) {
621
+ if ('number' == typeof watchedValue && Number.isFinite(watchedValue) && watchedValue > 0) return watchedValue;
622
+ if ('number' == typeof field.maxRef.fallback) return field.maxRef.fallback;
623
+ }
624
+ if ('number' == typeof field.max) return field.max;
625
+ return 100;
626
+ }
591
627
  exports.FormFieldRenderer = __webpack_exports__.FormFieldRenderer;
592
628
  for(var __rspack_i in __webpack_exports__)if (-1 === [
593
629
  "FormFieldRenderer"
@@ -422,38 +422,12 @@ function FieldByType({ field, formField, error, disabled, required, options }) {
422
422
  ]
423
423
  });
424
424
  case 'slider':
425
- return /*#__PURE__*/ jsxs(FormField, {
426
- children: [
427
- /*#__PURE__*/ jsxs("div", {
428
- className: "flex justify-between",
429
- children: [
430
- /*#__PURE__*/ jsx(FormLabel, {
431
- required: required,
432
- children: field.label
433
- }),
434
- /*#__PURE__*/ jsx("span", {
435
- className: "text-sm text-muted-foreground",
436
- children: formField.value
437
- })
438
- ]
439
- }),
440
- /*#__PURE__*/ jsx(Slider, {
441
- value: [
442
- formField.value
443
- ],
444
- onValueChange: (values)=>formField.onChange(values[0]),
445
- min: field.min || 0,
446
- max: field.max || 100,
447
- step: field.step || 1,
448
- disabled: disabled
449
- }),
450
- /*#__PURE__*/ jsx(FormDescription, {
451
- children: field.description
452
- }),
453
- /*#__PURE__*/ jsx(FormError, {
454
- children: error
455
- })
456
- ]
425
+ return /*#__PURE__*/ jsx(SliderField, {
426
+ field: field,
427
+ formField: formField,
428
+ error: error,
429
+ disabled: disabled,
430
+ required: required
457
431
  });
458
432
  case 'date':
459
433
  return /*#__PURE__*/ jsxs(FormField, {
@@ -560,4 +534,66 @@ function FormError({ children }) {
560
534
  children: children
561
535
  });
562
536
  }
537
+ function SliderField({ field, formField, error, disabled, required }) {
538
+ const { watch } = useFormContext();
539
+ const watchedMax = field.maxRef ? watch(field.maxRef.fromField) : void 0;
540
+ const resolvedMax = resolveSliderMax(field, watchedMax);
541
+ const prevMaxRef = useRef(resolvedMax);
542
+ useEffect(()=>{
543
+ if (resolvedMax === prevMaxRef.current) return;
544
+ prevMaxRef.current = resolvedMax;
545
+ const v = formField.value;
546
+ if ('number' == typeof v && v > resolvedMax) formField.onChange(resolvedMax);
547
+ }, [
548
+ resolvedMax,
549
+ formField.value,
550
+ formField.onChange
551
+ ]);
552
+ const displayValue = (()=>{
553
+ const v = formField.value;
554
+ if ('number' == typeof v) return Math.min(v, resolvedMax);
555
+ return v;
556
+ })();
557
+ return /*#__PURE__*/ jsxs(FormField, {
558
+ children: [
559
+ /*#__PURE__*/ jsxs("div", {
560
+ className: "flex justify-between",
561
+ children: [
562
+ /*#__PURE__*/ jsx(FormLabel, {
563
+ required: required,
564
+ children: field.label
565
+ }),
566
+ /*#__PURE__*/ jsx("span", {
567
+ className: "text-sm text-muted-foreground",
568
+ children: displayValue
569
+ })
570
+ ]
571
+ }),
572
+ /*#__PURE__*/ jsx(Slider, {
573
+ value: [
574
+ displayValue ?? field.min ?? 0
575
+ ],
576
+ onValueChange: (values)=>formField.onChange(values[0]),
577
+ min: field.min || 0,
578
+ max: resolvedMax,
579
+ step: field.step || 1,
580
+ disabled: disabled
581
+ }),
582
+ /*#__PURE__*/ jsx(FormDescription, {
583
+ children: field.description
584
+ }),
585
+ /*#__PURE__*/ jsx(FormError, {
586
+ children: error
587
+ })
588
+ ]
589
+ });
590
+ }
591
+ function resolveSliderMax(field, watchedValue) {
592
+ if (field.maxRef) {
593
+ if ('number' == typeof watchedValue && Number.isFinite(watchedValue) && watchedValue > 0) return watchedValue;
594
+ if ('number' == typeof field.maxRef.fallback) return field.maxRef.fallback;
595
+ }
596
+ if ('number' == typeof field.max) return field.max;
597
+ return 100;
598
+ }
563
599
  export { FormFieldRenderer };
@@ -184,10 +184,26 @@ export interface CheckboxFieldMetadata extends BaseFieldMetadata {
184
184
  export interface SwitchFieldMetadata extends BaseFieldMetadata {
185
185
  type: 'switch';
186
186
  }
187
+ /**
188
+ * Reference to another form field's value, used to drive a numeric property
189
+ * (e.g. a slider's `max`) at render time.
190
+ */
191
+ export interface FieldRef {
192
+ /** Form field path to watch (react-hook-form name). */
193
+ fromField: string;
194
+ /** Used when the watched value is missing or not a finite positive number. */
195
+ fallback?: number;
196
+ }
187
197
  export interface SliderFieldMetadata extends BaseFieldMetadata {
188
198
  type: 'slider';
189
199
  min?: number;
190
200
  max?: number;
201
+ /**
202
+ * Dynamic upper bound sourced from another form field. Takes precedence
203
+ * over `max` when present. The watched field's value is used as the slider's
204
+ * `max` when it's a finite positive number; otherwise `fallback` is used.
205
+ */
206
+ maxRef?: FieldRef;
191
207
  step?: number;
192
208
  }
193
209
  export interface DateFieldMetadata extends BaseFieldMetadata {
@@ -62,7 +62,6 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
62
62
  dropdown_root: (0, index_cjs_namespaceObject.cn)('has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border', defaultClassNames.dropdown_root),
63
63
  dropdown: (0, index_cjs_namespaceObject.cn)('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),
64
64
  caption_label: (0, index_cjs_namespaceObject.cn)('select-none font-medium', 'label' === captionLayout ? 'text-sm' : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5', defaultClassNames.caption_label),
65
- table: 'w-full border-collapse',
66
65
  weekdays: (0, index_cjs_namespaceObject.cn)('flex gap-2', defaultClassNames.weekdays),
67
66
  weekday: (0, index_cjs_namespaceObject.cn)('text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal', defaultClassNames.weekday),
68
67
  week: (0, index_cjs_namespaceObject.cn)('mt-2 flex w-full gap-2', defaultClassNames.week),
@@ -33,7 +33,6 @@ function Calendar({ className, classNames, showOutsideDays = true, captionLayout
33
33
  dropdown_root: cn('has-focus:border-ring border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] relative rounded-md border', defaultClassNames.dropdown_root),
34
34
  dropdown: cn('bg-popover absolute inset-0 opacity-0', defaultClassNames.dropdown),
35
35
  caption_label: cn('select-none font-medium', 'label' === captionLayout ? 'text-sm' : '[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pl-2 pr-1 text-sm [&>svg]:size-3.5', defaultClassNames.caption_label),
36
- table: 'w-full border-collapse',
37
36
  weekdays: cn('flex gap-2', defaultClassNames.weekdays),
38
37
  weekday: cn('text-muted-foreground flex-1 select-none rounded-md text-[0.8rem] font-normal', defaultClassNames.weekday),
39
38
  week: cn('mt-2 flex w-full gap-2', defaultClassNames.week),
@@ -36,7 +36,7 @@ var __webpack_modules__ = {
36
36
  "@/components/ui/checkbox" (module) {
37
37
  module.exports = require("./checkbox.cjs");
38
38
  },
39
- "./collapsible" (module) {
39
+ "@/components/ui/collapsible" (module) {
40
40
  module.exports = require("./collapsible.cjs");
41
41
  },
42
42
  "./combobox" (module) {
@@ -45,7 +45,7 @@ var __webpack_modules__ = {
45
45
  "@/components/ui/command" (module) {
46
46
  module.exports = require("./command.cjs");
47
47
  },
48
- "./context-menu" (module) {
48
+ "@/components/ui/context-menu" (module) {
49
49
  module.exports = require("./context-menu.cjs");
50
50
  },
51
51
  "./data-table" (module) {
@@ -72,7 +72,7 @@ var __webpack_modules__ = {
72
72
  "./file-upload" (module) {
73
73
  module.exports = require("./file-upload.cjs");
74
74
  },
75
- "./hover-card" (module) {
75
+ "@/components/ui/hover-card" (module) {
76
76
  module.exports = require("./hover-card.cjs");
77
77
  },
78
78
  "@/components/ui/input" (module) {
@@ -150,7 +150,7 @@ var __webpack_modules__ = {
150
150
  "./toggle-group" (module) {
151
151
  module.exports = require("./toggle-group.cjs");
152
152
  },
153
- "@/components/ui/toggle" (module) {
153
+ "./toggle" (module) {
154
154
  module.exports = require("./toggle.cjs");
155
155
  },
156
156
  "./tooltip" (module) {
@@ -290,7 +290,7 @@ var __webpack_exports__ = {};
290
290
  "default"
291
291
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_checkbox__rspack_import_11[__rspack_import_key];
292
292
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
293
- var _collapsible__rspack_import_12 = __webpack_require__("./collapsible");
293
+ var _collapsible__rspack_import_12 = __webpack_require__("@/components/ui/collapsible");
294
294
  var __rspack_reexport = {};
295
295
  for(const __rspack_import_key in _collapsible__rspack_import_12)if ([
296
296
  "TreeView",
@@ -311,7 +311,7 @@ var __webpack_exports__ = {};
311
311
  "default"
312
312
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_command__rspack_import_14[__rspack_import_key];
313
313
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
314
- var _context_menu__rspack_import_15 = __webpack_require__("./context-menu");
314
+ var _context_menu__rspack_import_15 = __webpack_require__("@/components/ui/context-menu");
315
315
  var __rspack_reexport = {};
316
316
  for(const __rspack_import_key in _context_menu__rspack_import_15)if ([
317
317
  "TreeView",
@@ -374,7 +374,7 @@ var __webpack_exports__ = {};
374
374
  "default"
375
375
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_file_upload__rspack_import_23[__rspack_import_key];
376
376
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
377
- var _hover_card__rspack_import_24 = __webpack_require__("./hover-card");
377
+ var _hover_card__rspack_import_24 = __webpack_require__("@/components/ui/hover-card");
378
378
  var __rspack_reexport = {};
379
379
  for(const __rspack_import_key in _hover_card__rspack_import_24)if ([
380
380
  "TreeView",
@@ -549,7 +549,7 @@ var __webpack_exports__ = {};
549
549
  "default"
550
550
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_textarea__rspack_import_48[__rspack_import_key];
551
551
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
552
- var _toggle__rspack_import_49 = __webpack_require__("@/components/ui/toggle");
552
+ var _toggle__rspack_import_49 = __webpack_require__("./toggle");
553
553
  var __rspack_reexport = {};
554
554
  for(const __rspack_import_key in _toggle__rspack_import_49)if ([
555
555
  "TreeView",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/apollo-wind",
3
- "version": "2.16.0",
3
+ "version": "2.17.0",
4
4
  "description": "UiPath wind design system - A Tailwind CSS based React component library",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -111,7 +111,7 @@
111
111
  "tailwindcss": "^4.1.17",
112
112
  "vaul": "^1.1.2",
113
113
  "zod": "^4.3.5",
114
- "@uipath/apollo-core": "5.9.0"
114
+ "@uipath/apollo-core": "5.9.1"
115
115
  },
116
116
  "devDependencies": {
117
117
  "@rsbuild/plugin-react": "^1.4.1",
@@ -134,8 +134,8 @@
134
134
  "@types/react": "^19.2.6",
135
135
  "@types/react-dom": "^19.2.2",
136
136
  "@types/react-syntax-highlighter": "^15.5.13",
137
- "@vitest/coverage-v8": "^4.1.0",
138
- "@vitest/ui": "^4.1.0",
137
+ "@vitest/coverage-v8": "^4.1.5",
138
+ "@vitest/ui": "^4.1.5",
139
139
  "ajv": "^8.18.0",
140
140
  "autoprefixer": "^10.4.22",
141
141
  "globals": "^16.5.0",
@@ -150,7 +150,7 @@
150
150
  "storybook": "^10.2.15",
151
151
  "tailwindcss": "^4.1.17",
152
152
  "typescript": "^5.9.3",
153
- "vitest": "^4.1.0"
153
+ "vitest": "^4.1.5"
154
154
  },
155
155
  "keywords": [
156
156
  "react",
@@ -164,15 +164,12 @@
164
164
  "author": "UiPath",
165
165
  "license": "MIT",
166
166
  "publishConfig": {
167
- "access": "public",
168
- "registry": "https://registry.npmjs.org"
167
+ "access": "public"
169
168
  },
170
169
  "repository": {
171
170
  "type": "git",
172
- "url": "https://github.com/uipath/apollo-ui"
173
- },
174
- "bugs": {
175
- "url": "https://github.com/uipath/apollo-ui/issues"
171
+ "url": "https://github.com/UiPath/apollo-ui.git",
172
+ "directory": "packages/apollo-wind"
176
173
  },
177
174
  "homepage": "https://apollo-design.vercel.app",
178
175
  "scripts": {