@object-ui/components 17.5.0 → 17.6.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 (36) hide show
  1. package/CHANGELOG.md +1405 -0
  2. package/README.md +15 -7
  3. package/dist/custom/button-group.d.ts +1 -1
  4. package/dist/custom/character-count.d.ts +56 -0
  5. package/dist/custom/config-field-renderer.d.ts +1 -1
  6. package/dist/custom/config-panel-renderer.d.ts +3 -3
  7. package/dist/custom/export-progress-dialog.d.ts +1 -1
  8. package/dist/custom/filter-builder.d.ts +284 -4
  9. package/dist/custom/fullscreen-editor.d.ts +48 -2
  10. package/dist/custom/index.d.ts +28 -28
  11. package/dist/custom/item.d.ts +1 -1
  12. package/dist/custom/resizable.d.ts +1 -1
  13. package/dist/debug/index.d.ts +2 -2
  14. package/dist/index.css +22 -6
  15. package/dist/index.d.ts +21 -21
  16. package/dist/index.js +3958 -3650
  17. package/dist/index.umd.cjs +10 -6
  18. package/dist/lib/form-control-dom-props.d.ts +77 -0
  19. package/dist/lib/slider-thumb.d.ts +86 -0
  20. package/dist/notifications/index.d.ts +5 -5
  21. package/dist/renderers/basic/elements.d.ts +3 -3
  22. package/dist/renderers/basic/html-elements.d.ts +1 -1
  23. package/dist/renderers/form/validationRuleKeys.d.ts +45 -0
  24. package/dist/renderers/layout/react-page.d.ts +12 -2
  25. package/dist/share/index.d.ts +2 -2
  26. package/dist/ui/calendar.d.ts +1 -1
  27. package/dist/ui/carousel.d.ts +2 -2
  28. package/dist/ui/command.d.ts +2 -2
  29. package/dist/ui/form.d.ts +1 -1
  30. package/dist/ui/index.d.ts +47 -47
  31. package/dist/ui/pagination.d.ts +1 -1
  32. package/dist/ui/sidebar.d.ts +2 -2
  33. package/dist/ui/slider.d.ts +2 -1
  34. package/package.json +12 -12
  35. package/dist/custom/action-param-dialog.d.ts +0 -21
  36. package/dist/renderers/data-display/table.d.ts +0 -2
@@ -0,0 +1,77 @@
1
+ import { DomProps as CoreDomProps } from '@object-ui/core';
2
+ /**
3
+ * The DOM pass-through declaration for the `packages/components` renderers whose
4
+ * host element is a FORM CONTROL (objectui#5632).
5
+ *
6
+ * ## Why this exists at all, rather than a bare `toDomProps`
7
+ *
8
+ * `toDomProps` is the SDUI contract's executor and its key list is deliberately
9
+ * ELEMENT-AGNOSTIC — it cannot know what element the widget renders, so it
10
+ * carries only what is legal on every element. `name` and `disabled` are legal
11
+ * on form controls and nowhere else, which is exactly why `dom-props.ts` leaves
12
+ * them out: `name` on the `<div>` a container widget renders is one of the 14
13
+ * attributes objectui#4431 closed.
14
+ *
15
+ * The renderers in this group render the other case. Routing them through the
16
+ * bare SDUI list would strip `name` and `disabled` off real controls — and
17
+ * `packages/fields` already wrote down what that costs, in the same words, for
18
+ * the same two keys:
19
+ *
20
+ * > Withholding them would make this helper a silent styling- and
21
+ * > interactivity-dropper … That is a NEW silent failure of exactly the kind
22
+ * > the whitelist exists to prevent, so they are forwarded.
23
+ *
24
+ * It is worth being precise about how INVISIBLE that failure would be here.
25
+ * The gate that grades this change
26
+ * (`packages/app-shell/src/__tests__/widget-dom-leak-sweep.test.tsx`) reports
27
+ * attributes that ARRIVE illegitimately; it has no case for an attribute that
28
+ * stops arriving, and its canary node authors no `disabled` at all. So dropping
29
+ * `disabled` off every form control in the library would have moved not one
30
+ * number in this card's own acceptance evidence. The ledger predicted the same
31
+ * thing from the other side — its `BARE_SPREAD_MINUS_NAME` note says converging
32
+ * this group "will not change that attribute, only the thirteen around it" —
33
+ * and that prediction is only true if `name` is forwarded deliberately.
34
+ *
35
+ * ## One mechanism, three declarations
36
+ *
37
+ * This is the third declaration over the ONE mechanism in
38
+ * `@object-ui/core`'s `pickDomProps`, and it follows the pattern
39
+ * `@object-ui/fields` established rather than inventing one: the consuming
40
+ * package owns the key list its own contract implies, and calls the shared
41
+ * filter with it. The three, and what separates them:
42
+ *
43
+ * - `toDomProps` (`@object-ui/core`) — the SDUI baseline, element-agnostic.
44
+ * - `@object-ui/fields`' `toDomProps` — the baseline minus `role`, plus `name`
45
+ * and `disabled`; `FieldWidgetComponentProps` declares the closed set.
46
+ * - this one — the baseline PLUS `name` and `disabled`, nothing removed. It is
47
+ * a strict superset of the SDUI list, which the compile-time assertion below
48
+ * pins, so a key added to the shared set can never be quietly dropped here.
49
+ *
50
+ * Anything beyond this set is still the objectui#4435 route: DECLARE it and
51
+ * forward it by name. Do not reopen the spread (AGENTS.md #0.1 — fix the
52
+ * contract, never widen the consumer). `style` is the standing example, and it
53
+ * is forwarded by name at every call site for exactly that reason.
54
+ */
55
+ declare const FORM_CONTROL_DOM_PASS_THROUGH_KEYS: readonly ["id", "className", "role", "tabIndex", "autoFocus", "onClick", "onBlur", "onFocus", "name", "disabled"];
56
+ type FormControlDomPassThroughKey = (typeof FORM_CONTROL_DOM_PASS_THROUGH_KEYS)[number];
57
+ /** The subset of `P` this declaration forwards, with each key's declared type. */
58
+ export type FormControlDomProps<P> = CoreDomProps<P, FormControlDomPassThroughKey>;
59
+ /**
60
+ * Keep only what may legitimately become an attribute on a FORM CONTROL, and
61
+ * drop everything else — the injected `schema`, the data-source adapter, the
62
+ * authored node's SDUI metadata, the flattened `props` container, and every
63
+ * declared prop the renderer already consumed off `schema`.
64
+ *
65
+ * Replaces the bare `{...rest}` spread in a form-control registration:
66
+ *
67
+ * ```tsx
68
+ * // before — forwards whatever `SchemaRenderer` handed it
69
+ * const { style, ...rest } = props;
70
+ * return <Input name={schema.name} {...rest} />;
71
+ *
72
+ * // after
73
+ * return <Input name={schema.name} {...toFormControlDomProps(rest)} style={style} />;
74
+ * ```
75
+ */
76
+ export declare function toFormControlDomProps<P extends object>(props: P): FormControlDomProps<P>;
77
+ export {};
@@ -0,0 +1,86 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ import type * as React from 'react';
9
+ /**
10
+ * The payload of the `slider-thumb-pass-through` local patch
11
+ * (`scripts/shadcn-local-patches.mjs`, objectui#3318).
12
+ *
13
+ * ## The defect this exists for
14
+ *
15
+ * A Radix slider's focusable control is the THUMB — `span[role="slider"]`,
16
+ * `tabindex="0"`, the element that carries `aria-valuenow` and the one a
17
+ * keyboard user and their screen reader actually land on. `Slider.Root` renders
18
+ * a role-less wrapper `span` and forwards every unrecognised prop to it, so a
19
+ * host's control-channel facts (`id`, `aria-invalid`, `aria-describedby`,
20
+ * `aria-labelledby`, `aria-required`) landed on a wrapper assistive technology
21
+ * never visits. Measured on `origin/main`, a real form + a required slider that
22
+ * had just failed validation:
23
+ *
24
+ * ```
25
+ * slider ariaInvalidTrue=[] labelFor=…-form-item -> DANGLING
26
+ * descConsumers=0 focusable=[span[slider],input]
27
+ * ids=[] <- no element of the row carried an id at all
28
+ * ```
29
+ *
30
+ * This is the same shape objectui#3306 fixed for `select`, one step harder:
31
+ * there the focusable control is `SelectTrigger`, a component the primitive
32
+ * EXPORTS, so the widget could address it directly. `ui/slider.tsx` renders its
33
+ * thumb internally and exports only `Slider`, so the widget has no handle on
34
+ * the one element that must carry the state — hence a pass-through.
35
+ *
36
+ * ## Why a declared prop and not an implicit bridge
37
+ *
38
+ * The primitive could instead have COPIED a fixed list of `aria-*` keys from
39
+ * its own props down to the thumb. Rejected: the copy would leave the same keys
40
+ * on Root as well, and for `id` that is not a duplicate attribute but a
41
+ * duplicate DOM ID — `document.getElementById` answers with the wrapper, so a
42
+ * host `<label for>` would resolve to the non-focusable span and the bug would
43
+ * survive its own fix wearing a green test. Splitting is therefore mandatory,
44
+ * and once the caller must say which keys go where, saying it explicitly is
45
+ * strictly better than a list the caller cannot see (AGENTS.md #0.1: one strict
46
+ * contract, no consumer-side guessing).
47
+ *
48
+ * ## Where the split is decided
49
+ *
50
+ * Not here — this only routes. The widget decides, and `SliderField` mirrors
51
+ * `SelectField`'s #3306 split exactly: `name` and `disabled` stay on Root (Root
52
+ * owns the hidden form input and is the single disabled authority), everything
53
+ * else in the DOM pass-through whitelist goes to the thumb.
54
+ */
55
+ /** Props the `Slider` wrapper hands to its internal `SliderPrimitive.Thumb`. */
56
+ export interface SliderThumbPassThrough {
57
+ /**
58
+ * Forwarded verbatim onto the focusable `span[role="slider"]`.
59
+ *
60
+ * Deliberately typed as the DOM attribute surface rather than
61
+ * `ComponentPropsWithoutRef<typeof SliderPrimitive.Thumb>`: this module must
62
+ * not import the primitive (it is consumed BY the no-touch file, and a cycle
63
+ * through it would be a fragile thing to hang a sync patch on), and the thumb
64
+ * is a plain `span` as far as every key a host delivers is concerned.
65
+ */
66
+ thumbProps?: React.HTMLAttributes<HTMLSpanElement> & {
67
+ id?: string;
68
+ tabIndex?: number;
69
+ 'aria-label'?: string;
70
+ };
71
+ }
72
+ /**
73
+ * Route a `Slider`'s props to the two elements that need them.
74
+ *
75
+ * `thumbProps` is REMOVED from the root half — leaving it there would put
76
+ * `thumbprops="[object Object]"` on the wrapper span, which is exactly the leak
77
+ * objectui#3291's sweep exists to catch.
78
+ *
79
+ * The pre-existing `aria-label` bridge is preserved and applied FIRST, so a
80
+ * caller that passes both keeps the explicit `thumbProps` value; nothing about
81
+ * the attribute's previous behaviour changes for callers that pass neither.
82
+ */
83
+ export declare function splitSliderThumbProps<P extends Record<string, unknown>>(props: P): {
84
+ root: Omit<P, 'thumbProps'>;
85
+ thumb: Record<string, unknown>;
86
+ };
@@ -19,8 +19,8 @@
19
19
  * Every one of these used to be handed to `onToast` regardless of type, so all
20
20
  * five looked identical (#3014).
21
21
  */
22
- export { NotificationBanners, type NotificationBannersProps } from './NotificationBanners';
23
- export { NotificationSnackbar, type NotificationSnackbarProps } from './NotificationSnackbar';
24
- export { NotificationAlerts, type NotificationAlertsProps } from './NotificationAlerts';
25
- export { NotificationInline, type NotificationInlineProps } from './NotificationInline';
26
- export { NOTIFICATION_ACTION_BUTTON_VARIANTS, NOTIFICATION_POSITION_CLASSES, NOTIFICATION_SEVERITY_STYLES, notificationActionVariant, notificationIcon, notificationSeverityStyle, type NotificationSeverityStyle, } from './severity';
22
+ export { NotificationBanners, type NotificationBannersProps } from './NotificationBanners.js';
23
+ export { NotificationSnackbar, type NotificationSnackbarProps } from './NotificationSnackbar.js';
24
+ export { NotificationAlerts, type NotificationAlertsProps } from './NotificationAlerts.js';
25
+ export { NotificationInline, type NotificationInlineProps } from './NotificationInline.js';
26
+ export { NOTIFICATION_ACTION_BUTTON_VARIANTS, NOTIFICATION_POSITION_CLASSES, NOTIFICATION_SEVERITY_STYLES, notificationActionVariant, notificationIcon, notificationSeverityStyle, type NotificationSeverityStyle, } from './severity.js';
@@ -15,9 +15,9 @@
15
15
  * - element:divider (no-props separator)
16
16
  * - ElementButtonProps -> element:button
17
17
  *
18
- * Heavier interactive elements (element:filter, element:form) live in their
19
- * owning plugins and are left to those packages. element:record_picker — which
20
- * writes its selection into a page variable — ships alongside in `./record-picker`.
18
+ * Heavier interactive elements (element:form) live in their owning plugins and
19
+ * are left to those packages. element:record_picker — which writes its
20
+ * selection into a page variable — ships alongside in `./record-picker`.
21
21
  *
22
22
  * All props are read off `schema.properties` per the spec's
23
23
  * `UIComponent.properties` convention; `schema.props` is also accepted
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Safe native HTML element passthrough renderers (ADR: kind:'html').
9
9
  *
10
- * A `kind:'html'` page is authored as a constrained JSX/Tailwind string that is
10
+ * A `kind:'html'` page is authored as a constrained JSX string that is
11
11
  * PARSED (never executed) into the SDUI tree. For that tier to live up to its
12
12
  * name, the everyday HTML tags an author reaches for — headings, paragraphs,
13
13
  * lists, links, images, emphasis — must each resolve to a renderer (otherwise
@@ -0,0 +1,45 @@
1
+ /**
2
+ * ObjectUI
3
+ * Copyright (c) 2024-present ObjectStack Inc.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ /**
9
+ * The validation-rule names react-hook-form actually RUNS (objectui#5099).
10
+ *
11
+ * react-hook-form's field validator destructures a FIXED key set off the
12
+ * field descriptor and silently drops every other key. From the installed
13
+ * 7.85.0 bundle (`dist/index.cjs.js`, minified):
14
+ *
15
+ * const{ref:c,refs:f,required:m,maxLength:y,minLength:p,min:g,max:b,
16
+ * pattern:V,validate:A,name:x,valueAsNumber:S,mount:k}=e._f
17
+ *
18
+ * Of those twelve, seven are authorable validation rules — the rest are
19
+ * field-descriptor internals react-hook-form writes itself and an author
20
+ * never supplies through `FieldValidationRules`. Any rule name outside the
21
+ * seven — a misspelled `minlength`, an invented `email`, the numeric keys
22
+ * left by spreading an ARRAY into `validation` — is dropped without a trace:
23
+ * the field renders, the form looks validated, and the rule never runs. The
24
+ * form renderer reports such names loudly (dev-time `console.error`; see
25
+ * `form.tsx`).
26
+ *
27
+ * Both lists are PINNED against the installed react-hook-form bundle by
28
+ * `__tests__/rhf-recognized-rule-keys.test.ts`, which re-derives the
29
+ * destructured set from `dist/index.cjs.js` at test time. A react-hook-form
30
+ * bump that changes the set turns that test red — forcing a human to re-sort
31
+ * the new key into one of these two lists — instead of silently rotting the
32
+ * diagnostic.
33
+ */
34
+ /**
35
+ * Keys react-hook-form's validator destructures that are NOT authorable
36
+ * rules: descriptor internals the library maintains itself.
37
+ */
38
+ export declare const RHF_DESCRIPTOR_NON_RULE_KEYS: readonly string[];
39
+ /**
40
+ * The authorable rule names react-hook-form's validator reads. Exactly the
41
+ * declared key set of `FieldValidationRules` in `@object-ui/types` —
42
+ * declared = enforced; anything else in a field's `validation` object is a
43
+ * bug in the metadata, not a rule.
44
+ */
45
+ export declare const RHF_RECOGNIZED_RULE_KEYS: ReadonlySet<string>;
@@ -21,11 +21,21 @@
21
21
  * - `React` — so authors can call hooks.
22
22
  * - the PUBLIC data blocks — `<ObjectGrid>`, `<ObjectForm>`, charts, metrics…
23
23
  * each as a prop-driven wrapper that renders via SchemaRenderer. Layout is
24
- * left to plain HTML + Tailwind (React's strength); only the data blocks
25
- * that can't be expressed in HTML are injected.
24
+ * left to plain HTML (React's strength); only the data blocks that can't be
25
+ * expressed in HTML are injected.
26
26
  * - `Block` — escape hatch: `<Block type="object-grid" .../>`.
27
27
  * - `useAdapter` — live data hook: query/create/update objects.
28
28
  * - `data` / `variables` — page data + local variables, for convenience.
29
+ *
30
+ * Styling — page source is metadata, not build input. A react page styles with
31
+ * inline `style` objects using `hsl(var(--token))` theme colors; overlays render
32
+ * through `<ObjectForm formType="drawer"|"modal">` rather than a hand-rolled
33
+ * `fixed inset-0` backdrop. Do NOT author Tailwind utility classes in page
34
+ * `source`: `source` is runtime metadata, the console's Tailwind is compiled at
35
+ * build time by scanning the console's own `src`, and there is no safelist — an
36
+ * authored utility class silently produces no CSS. `os validate` reports it as
37
+ * `page-source-className-tailwind`. (ADR-0065; ADR-0080's 2026-06-30 amendment;
38
+ * see `content/docs/guide/react-pages.md`.)
29
39
  */
30
40
  import * as React from 'react';
31
41
  export declare const ReactKindPage: React.FC<{
@@ -1,2 +1,2 @@
1
- export { ShareDialog, type ShareDialogProps, type ShareLink, type ShareLinkAudience, type ShareLinkPermission, } from './ShareDialog';
2
- export { default } from './ShareDialog';
1
+ export { ShareDialog, type ShareDialogProps, type ShareLink, type ShareLinkAudience, type ShareLinkPermission, } from './ShareDialog.js';
2
+ export { default } from './ShareDialog.js';
@@ -1,5 +1,5 @@
1
1
  import { DayButton, DayPicker } from 'react-day-picker';
2
- import { Button } from './button';
2
+ import { Button } from './button.js';
3
3
  /**
4
4
  * ObjectUI
5
5
  * Copyright (c) 2024-present ObjectStack Inc.
@@ -20,6 +20,6 @@ type CarouselProps = {
20
20
  declare const Carousel: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & CarouselProps & React.RefAttributes<HTMLDivElement>>;
21
21
  declare const CarouselContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
22
22
  declare const CarouselItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
23
- declare const CarouselPrevious: React.ForwardRefExoticComponent<Omit<import('./button').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
24
- declare const CarouselNext: React.ForwardRefExoticComponent<Omit<import('./button').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
23
+ declare const CarouselPrevious: React.ForwardRefExoticComponent<Omit<import('./button.js').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
24
+ declare const CarouselNext: React.ForwardRefExoticComponent<Omit<import('./button.js').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
25
25
  export { type CarouselApi, Carousel, CarouselContent, CarouselItem, CarouselPrevious, CarouselNext, };
@@ -1,5 +1,5 @@
1
1
  import { DialogProps } from '@radix-ui/react-dialog';
2
- import { DialogContent } from './dialog';
2
+ import { DialogContent } from './dialog.js';
3
3
  /**
4
4
  * ObjectUI
5
5
  * Copyright (c) 2024-present ObjectStack Inc.
@@ -49,7 +49,7 @@ declare const CommandInput: React.ForwardRefExoticComponent<Omit<Omit<Pick<Pick<
49
49
  ref?: React.Ref<HTMLInputElement>;
50
50
  } & {
51
51
  asChild?: boolean;
52
- }, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "type" | "onChange" | "value"> & {
52
+ }, "key" | "asChild" | keyof React.InputHTMLAttributes<HTMLInputElement>>, "onChange" | "value" | "type"> & {
53
53
  value?: string;
54
54
  onValueChange?: (search: string) => void;
55
55
  } & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
package/dist/ui/form.d.ts CHANGED
@@ -15,7 +15,7 @@ declare const useFormField: () => {
15
15
  isDirty: boolean;
16
16
  isTouched: boolean;
17
17
  isValidating: boolean;
18
- error?: import('react-hook-form').FieldError;
18
+ error?: import('react-hook-form').FieldError | undefined;
19
19
  id: string;
20
20
  name: string;
21
21
  formItemId: string;
@@ -5,50 +5,50 @@
5
5
  * This source code is licensed under the MIT license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
7
  */
8
- export * from './accordion';
9
- export * from './alert-dialog';
10
- export * from './alert';
11
- export * from './aspect-ratio';
12
- export * from './avatar';
13
- export * from './badge';
14
- export * from './breadcrumb';
15
- export * from './button';
16
- export * from './calendar';
17
- export * from './card';
18
- export * from './carousel';
19
- export * from './chart';
20
- export * from './checkbox';
21
- export * from './collapsible';
22
- export * from './command';
23
- export * from './context-menu';
24
- export * from './dialog';
25
- export * from './drawer';
26
- export * from './dropdown-menu';
27
- export * from './form';
28
- export * from './hover-card';
29
- export * from './input-otp';
30
- export * from './input';
31
- export * from './label';
32
- export * from './menubar';
33
- export * from './navigation-menu';
34
- export * from './pagination';
35
- export * from './popover';
36
- export * from './progress';
37
- export * from './radio-group';
38
- export * from './scroll-area';
39
- export * from './select';
40
- export * from './separator';
41
- export * from './sheet';
42
- export * from './sidebar';
43
- export * from './skeleton';
44
- export * from './slider';
45
- export * from './sonner';
46
- export { Toaster } from './sonner';
47
- export * from './switch';
48
- export * from './table';
49
- export * from './tabs';
50
- export * from './textarea';
51
- export * from './toggle-group';
52
- export * from './toggle';
53
- export * from './tooltip';
54
- export * from './typography';
8
+ export * from './accordion.js';
9
+ export * from './alert-dialog.js';
10
+ export * from './alert.js';
11
+ export * from './aspect-ratio.js';
12
+ export * from './avatar.js';
13
+ export * from './badge.js';
14
+ export * from './breadcrumb.js';
15
+ export * from './button.js';
16
+ export * from './calendar.js';
17
+ export * from './card.js';
18
+ export * from './carousel.js';
19
+ export * from './chart.js';
20
+ export * from './checkbox.js';
21
+ export * from './collapsible.js';
22
+ export * from './command.js';
23
+ export * from './context-menu.js';
24
+ export * from './dialog.js';
25
+ export * from './drawer.js';
26
+ export * from './dropdown-menu.js';
27
+ export * from './form.js';
28
+ export * from './hover-card.js';
29
+ export * from './input-otp.js';
30
+ export * from './input.js';
31
+ export * from './label.js';
32
+ export * from './menubar.js';
33
+ export * from './navigation-menu.js';
34
+ export * from './pagination.js';
35
+ export * from './popover.js';
36
+ export * from './progress.js';
37
+ export * from './radio-group.js';
38
+ export * from './scroll-area.js';
39
+ export * from './select.js';
40
+ export * from './separator.js';
41
+ export * from './sheet.js';
42
+ export * from './sidebar.js';
43
+ export * from './skeleton.js';
44
+ export * from './slider.js';
45
+ export * from './sonner.js';
46
+ export { Toaster } from './sonner.js';
47
+ export * from './switch.js';
48
+ export * from './table.js';
49
+ export * from './tabs.js';
50
+ export * from './textarea.js';
51
+ export * from './toggle-group.js';
52
+ export * from './toggle.js';
53
+ export * from './tooltip.js';
54
+ export * from './typography.js';
@@ -1,4 +1,4 @@
1
- import { ButtonProps } from './button';
1
+ import { ButtonProps } from './button.js';
2
2
  /**
3
3
  * ObjectUI
4
4
  * Copyright (c) 2024-present ObjectStack Inc.
@@ -1,5 +1,5 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
- import { TooltipContent } from './tooltip';
2
+ import { TooltipContent } from './tooltip.js';
3
3
  /**
4
4
  * ObjectUI
5
5
  * Copyright (c) 2024-present ObjectStack Inc.
@@ -28,7 +28,7 @@ declare const Sidebar: React.ForwardRefExoticComponent<Omit<React.ClassAttribute
28
28
  variant?: "sidebar" | "floating" | "inset";
29
29
  collapsible?: "offcanvas" | "icon" | "none";
30
30
  }, "ref"> & React.RefAttributes<HTMLDivElement>>;
31
- declare const SidebarTrigger: React.ForwardRefExoticComponent<Omit<import('./button').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
31
+ declare const SidebarTrigger: React.ForwardRefExoticComponent<Omit<import('./button.js').ButtonProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
32
32
  declare const SidebarRail: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
33
33
  declare const SidebarInset: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
34
34
  declare const SidebarInput: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
@@ -1,3 +1,4 @@
1
+ import { SliderThumbPassThrough } from '../lib/slider-thumb.js';
1
2
  /**
2
3
  * ObjectUI
3
4
  * Copyright (c) 2024-present ObjectStack Inc.
@@ -7,5 +8,5 @@
7
8
  */
8
9
  import * as React from "react";
9
10
  import * as SliderPrimitive from "@radix-ui/react-slider";
10
- declare const Slider: React.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
11
+ declare const Slider: React.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref"> & SliderThumbPassThrough & React.RefAttributes<HTMLSpanElement>>;
11
12
  export { Slider };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@object-ui/components",
3
- "version": "17.5.0",
3
+ "version": "17.6.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Standard UI component library for Object UI, built with Shadcn UI + Tailwind CSS",
@@ -26,7 +26,7 @@
26
26
  "./style.css": "./dist/index.css"
27
27
  },
28
28
  "dependencies": {
29
- "@objectstack/spec": "^17.0.0-rc.6",
29
+ "@objectstack/spec": "^17.0.0",
30
30
  "@radix-ui/react-accordion": "^1.2.20",
31
31
  "@radix-ui/react-alert-dialog": "^1.1.23",
32
32
  "@radix-ui/react-aspect-ratio": "^1.1.15",
@@ -60,22 +60,22 @@
60
60
  "date-fns": "^4.4.0",
61
61
  "embla-carousel-react": "^8.6.0",
62
62
  "input-otp": "^1.4.2",
63
- "lucide-react": "^1.29.0",
63
+ "lucide-react": "^1.31.0",
64
64
  "next-themes": "^0.4.6",
65
65
  "react-day-picker": "^10.0.1",
66
- "react-hook-form": "^7.84.0",
66
+ "react-hook-form": "^7.85.0",
67
67
  "react-resizable-panels": "^4.12.2",
68
68
  "recharts": "3.10.1",
69
- "sonner": "^2.0.7",
69
+ "sonner": "^2.0.8",
70
70
  "tailwind-merge": "^3.6.0",
71
71
  "tailwindcss-animate": "^1.0.7",
72
72
  "vaul": "^1.1.2",
73
- "@object-ui/core": "17.5.0",
74
- "@object-ui/i18n": "17.5.0",
75
- "@object-ui/react": "17.5.0",
76
- "@object-ui/react-runtime": "17.5.0",
77
- "@object-ui/sdui-parser": "17.5.0",
78
- "@object-ui/types": "17.5.0"
73
+ "@object-ui/core": "17.6.0",
74
+ "@object-ui/i18n": "17.6.0",
75
+ "@object-ui/react": "17.6.0",
76
+ "@object-ui/types": "17.6.0",
77
+ "@object-ui/sdui-parser": "17.6.0",
78
+ "@object-ui/react-runtime": "17.6.0"
79
79
  },
80
80
  "peerDependencies": {
81
81
  "react": "^18.0.0 || ^19.0.0",
@@ -90,7 +90,7 @@
90
90
  "@vitejs/plugin-react": "^6.0.5",
91
91
  "autoprefixer": "^10.5.4",
92
92
  "postcss": "^8.5.26",
93
- "shadcn": "^4.16.2",
93
+ "shadcn": "^4.18.0",
94
94
  "tailwindcss": "^4.3.3",
95
95
  "typescript": "^6.0.3",
96
96
  "vite": "^8.2.1",
@@ -1,21 +0,0 @@
1
- import { default as React } from 'react';
2
- import { ActionParamDef } from '@object-ui/core';
3
- export interface ActionParamDialogProps {
4
- /** The param definitions to render */
5
- params: ActionParamDef[];
6
- /** Whether the dialog is open */
7
- open: boolean;
8
- /** Called when the user submits the form */
9
- onSubmit: (values: Record<string, any>) => void;
10
- /** Called when the user cancels */
11
- onCancel: () => void;
12
- /** Dialog title */
13
- title?: string;
14
- /** Dialog description */
15
- description?: string;
16
- }
17
- /**
18
- * ActionParamDialog renders a dialog with form fields for each ActionParam.
19
- * It collects user input and returns the values on submit.
20
- */
21
- export declare const ActionParamDialog: React.FC<ActionParamDialogProps>;
@@ -1,2 +0,0 @@
1
- import { default as React } from 'react';
2
- export declare const SimpleTableRenderer: ({ schema, className }: any) => React.JSX.Element;