@ui-sdk/vue 0.0.0-stage → 0.1.0-beta.1

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 (262) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +10 -2
  3. package/dist/accordion.d.ts +561 -0
  4. package/dist/accordion.js +24 -0
  5. package/dist/agent.d.ts +2 -0
  6. package/dist/agent.js +7 -0
  7. package/dist/alert-dialog.d.ts +231 -0
  8. package/dist/alert-dialog.js +33 -0
  9. package/dist/async-options.d.ts +18 -0
  10. package/dist/async-options.js +40 -0
  11. package/dist/autocomplete.d.ts +384 -0
  12. package/dist/autocomplete.js +344 -0
  13. package/dist/avatar.d.ts +40 -0
  14. package/dist/avatar.js +28 -0
  15. package/dist/button.d.ts +52 -0
  16. package/dist/button.js +43 -0
  17. package/dist/calendar-context.d.ts +10 -0
  18. package/dist/calendar-context.js +7 -0
  19. package/dist/calendar.d.ts +311 -0
  20. package/dist/calendar.js +349 -0
  21. package/dist/carousel.d.ts +236 -0
  22. package/dist/carousel.js +204 -0
  23. package/dist/checkbox.d.ts +211 -0
  24. package/dist/checkbox.js +151 -0
  25. package/dist/children.d.ts +41 -0
  26. package/dist/children.js +135 -0
  27. package/dist/collapsible.d.ts +54 -0
  28. package/dist/collapsible.js +18 -0
  29. package/dist/color-picker.d.ts +187 -0
  30. package/dist/color-picker.js +158 -0
  31. package/dist/color.d.ts +2 -0
  32. package/dist/color.js +21 -0
  33. package/dist/combobox.d.ts +517 -0
  34. package/dist/combobox.js +531 -0
  35. package/dist/command.d.ts +322 -0
  36. package/dist/command.js +345 -0
  37. package/dist/controller-target.d.ts +49 -0
  38. package/dist/controller-target.js +112 -0
  39. package/dist/create-parts.d.ts +126 -0
  40. package/dist/create-parts.js +206 -0
  41. package/dist/date-input.d.ts +133 -0
  42. package/dist/date-input.js +31 -0
  43. package/dist/date-picker.d.ts +328 -0
  44. package/dist/date-picker.js +354 -0
  45. package/dist/date.d.ts +2 -0
  46. package/dist/date.js +59 -0
  47. package/dist/dialog-parts.d.ts +259 -0
  48. package/dist/dialog-parts.js +300 -0
  49. package/dist/dialog.d.ts +251 -0
  50. package/dist/dialog.js +25 -0
  51. package/dist/drawer.d.ts +304 -0
  52. package/dist/drawer.js +373 -0
  53. package/dist/editor-context.d.ts +4 -0
  54. package/dist/editor-context.js +5 -0
  55. package/dist/field-context.d.ts +26 -0
  56. package/dist/field-context.js +44 -0
  57. package/dist/field.d.ts +154 -0
  58. package/dist/field.js +240 -0
  59. package/dist/file-input.d.ts +212 -0
  60. package/dist/file-input.js +255 -0
  61. package/dist/form-inputs.d.ts +16 -0
  62. package/dist/form-inputs.js +25 -0
  63. package/dist/gesture.d.ts +1 -0
  64. package/dist/gesture.js +15 -0
  65. package/dist/history.d.ts +2 -0
  66. package/dist/history.js +11 -0
  67. package/dist/hover-card.d.ts +137 -0
  68. package/dist/hover-card.js +153 -0
  69. package/dist/image-cropper.d.ts +74 -0
  70. package/dist/image-cropper.js +36 -0
  71. package/dist/image.d.ts +2 -0
  72. package/dist/image.js +5 -0
  73. package/dist/index.d.ts +59 -0
  74. package/dist/index.js +60 -0
  75. package/dist/input.d.ts +120 -0
  76. package/dist/input.js +73 -0
  77. package/dist/item-icon.d.ts +34 -0
  78. package/dist/item-icon.js +63 -0
  79. package/dist/label.d.ts +16 -0
  80. package/dist/label.js +8 -0
  81. package/dist/lifecycle.d.ts +11 -0
  82. package/dist/lifecycle.js +91 -0
  83. package/dist/list-items.d.ts +38 -0
  84. package/dist/list-items.js +59 -0
  85. package/dist/list-text.d.ts +7 -0
  86. package/dist/list-text.js +15 -0
  87. package/dist/listbox.d.ts +273 -0
  88. package/dist/listbox.js +126 -0
  89. package/dist/menu.d.ts +678 -0
  90. package/dist/menu.js +607 -0
  91. package/dist/menubar-context.d.ts +5 -0
  92. package/dist/menubar-context.js +5 -0
  93. package/dist/menubar.d.ts +61 -0
  94. package/dist/menubar.js +48 -0
  95. package/dist/meter.d.ts +41 -0
  96. package/dist/meter.js +37 -0
  97. package/dist/navigation-menu.d.ts +228 -0
  98. package/dist/navigation-menu.js +195 -0
  99. package/dist/number-input.d.ts +176 -0
  100. package/dist/number-input.js +231 -0
  101. package/dist/number.d.ts +2 -0
  102. package/dist/number.js +39 -0
  103. package/dist/nuxt/entries.json +977 -0
  104. package/dist/nuxt/module.d.ts +18 -0
  105. package/dist/nuxt/module.js +31 -0
  106. package/dist/nuxt/registrations.d.ts +22 -0
  107. package/dist/nuxt/registrations.js +22 -0
  108. package/dist/observe.d.ts +2 -0
  109. package/dist/observe.js +7 -0
  110. package/dist/otp-input.d.ts +142 -0
  111. package/dist/otp-input.js +130 -0
  112. package/dist/overlays.d.ts +40 -0
  113. package/dist/overlays.js +118 -0
  114. package/dist/pagination.d.ts +201 -0
  115. package/dist/pagination.js +146 -0
  116. package/dist/password-input.d.ts +144 -0
  117. package/dist/password-input.js +134 -0
  118. package/dist/popover.d.ts +211 -0
  119. package/dist/popover.js +258 -0
  120. package/dist/popup.d.ts +60 -0
  121. package/dist/popup.js +89 -0
  122. package/dist/preferences.d.ts +44 -0
  123. package/dist/preferences.js +102 -0
  124. package/dist/primitive.d.ts +2 -0
  125. package/dist/primitive.js +11 -0
  126. package/dist/progress.d.ts +41 -0
  127. package/dist/progress.js +37 -0
  128. package/dist/radio.d.ts +164 -0
  129. package/dist/radio.js +145 -0
  130. package/dist/rating.d.ts +149 -0
  131. package/dist/rating.js +146 -0
  132. package/dist/renderless.d.ts +4 -0
  133. package/dist/renderless.js +28 -0
  134. package/dist/resizable.d.ts +54 -0
  135. package/dist/resizable.js +22 -0
  136. package/dist/scroll-area.d.ts +72 -0
  137. package/dist/scroll-area.js +77 -0
  138. package/dist/segmented-control.d.ts +151 -0
  139. package/dist/segmented-control.js +110 -0
  140. package/dist/segmented-input.d.ts +76 -0
  141. package/dist/segmented-input.js +115 -0
  142. package/dist/select.d.ts +458 -0
  143. package/dist/select.js +468 -0
  144. package/dist/separator.d.ts +14 -0
  145. package/dist/separator.js +8 -0
  146. package/dist/shortcuts.d.ts +32 -0
  147. package/dist/shortcuts.js +56 -0
  148. package/dist/slider.d.ts +65 -0
  149. package/dist/slider.js +194 -0
  150. package/dist/switch.d.ts +103 -0
  151. package/dist/switch.js +71 -0
  152. package/dist/tabs.d.ts +338 -0
  153. package/dist/tabs.js +27 -0
  154. package/dist/text-control.d.ts +89 -0
  155. package/dist/text-control.js +51 -0
  156. package/dist/text-match.d.ts +2 -0
  157. package/dist/text-match.js +7 -0
  158. package/dist/textarea.d.ts +106 -0
  159. package/dist/textarea.js +68 -0
  160. package/dist/time-input.d.ts +131 -0
  161. package/dist/time-input.js +32 -0
  162. package/dist/timeline.d.ts +81 -0
  163. package/dist/timeline.js +30 -0
  164. package/dist/toast-parts.d.ts +203 -0
  165. package/dist/toast-parts.js +270 -0
  166. package/dist/toast.d.ts +2 -0
  167. package/dist/toast.js +21 -0
  168. package/dist/toggle-props.d.ts +22 -0
  169. package/dist/toggle-props.js +14 -0
  170. package/dist/toggle.d.ts +199 -0
  171. package/dist/toggle.js +129 -0
  172. package/dist/token-input.d.ts +136 -0
  173. package/dist/token-input.js +214 -0
  174. package/dist/toolbar-context.d.ts +7 -0
  175. package/dist/toolbar-context.js +20 -0
  176. package/dist/toolbar.d.ts +120 -0
  177. package/dist/toolbar.js +77 -0
  178. package/dist/tooltip.d.ts +160 -0
  179. package/dist/tooltip.js +224 -0
  180. package/dist/tree.d.ts +300 -0
  181. package/dist/tree.js +209 -0
  182. package/dist/trigger-menu.d.ts +452 -0
  183. package/dist/trigger-menu.js +254 -0
  184. package/dist/use-primitive.d.ts +132 -0
  185. package/dist/use-primitive.js +462 -0
  186. package/dist/waterfall.d.ts +201 -0
  187. package/dist/waterfall.js +171 -0
  188. package/docs/README.md +89 -0
  189. package/docs/agents.md +1523 -0
  190. package/docs/components/accordion.md +1369 -0
  191. package/docs/components/alert-dialog.md +799 -0
  192. package/docs/components/autocomplete.md +1857 -0
  193. package/docs/components/avatar.md +272 -0
  194. package/docs/components/button.md +435 -0
  195. package/docs/components/calendar.md +1589 -0
  196. package/docs/components/carousel.md +1171 -0
  197. package/docs/components/checkbox.md +1008 -0
  198. package/docs/components/collapsible.md +536 -0
  199. package/docs/components/color-picker.md +706 -0
  200. package/docs/components/combobox.md +3504 -0
  201. package/docs/components/command.md +1481 -0
  202. package/docs/components/date-input.md +536 -0
  203. package/docs/components/date-picker.md +1244 -0
  204. package/docs/components/dialog.md +1397 -0
  205. package/docs/components/drawer.md +1166 -0
  206. package/docs/components/field.md +538 -0
  207. package/docs/components/file-input.md +611 -0
  208. package/docs/components/hover-card.md +505 -0
  209. package/docs/components/image-cropper.md +556 -0
  210. package/docs/components/input.md +306 -0
  211. package/docs/components/label.md +203 -0
  212. package/docs/components/listbox.md +1004 -0
  213. package/docs/components/menu.md +1229 -0
  214. package/docs/components/menubar.md +443 -0
  215. package/docs/components/meter.md +315 -0
  216. package/docs/components/navigation-menu.md +1523 -0
  217. package/docs/components/number-input.md +1029 -0
  218. package/docs/components/otp-input.md +512 -0
  219. package/docs/components/pagination.md +613 -0
  220. package/docs/components/password-input.md +649 -0
  221. package/docs/components/popover.md +1448 -0
  222. package/docs/components/preferences.md +208 -0
  223. package/docs/components/progress.md +423 -0
  224. package/docs/components/radio.md +785 -0
  225. package/docs/components/rating.md +416 -0
  226. package/docs/components/resizable.md +910 -0
  227. package/docs/components/scroll-area.md +915 -0
  228. package/docs/components/segmented-control.md +435 -0
  229. package/docs/components/select.md +2015 -0
  230. package/docs/components/separator.md +229 -0
  231. package/docs/components/slider.md +1084 -0
  232. package/docs/components/switch.md +565 -0
  233. package/docs/components/tabs.md +944 -0
  234. package/docs/components/textarea.md +299 -0
  235. package/docs/components/time-input.md +224 -0
  236. package/docs/components/timeline.md +654 -0
  237. package/docs/components/toast.md +1224 -0
  238. package/docs/components/toggle.md +500 -0
  239. package/docs/components/token-input.md +953 -0
  240. package/docs/components/toolbar.md +739 -0
  241. package/docs/components/tooltip.md +818 -0
  242. package/docs/components/tree.md +1306 -0
  243. package/docs/components/trigger-menu.md +1223 -0
  244. package/docs/components/waterfall.md +717 -0
  245. package/docs/controllers.md +71 -0
  246. package/docs/core.md +8027 -0
  247. package/docs/custom-parts.md +89 -0
  248. package/docs/first-component.md +83 -0
  249. package/docs/forms.md +122 -0
  250. package/docs/installation.md +72 -0
  251. package/docs/introduction.md +32 -0
  252. package/docs/lists-and-menus.md +122 -0
  253. package/docs/llms.txt +1502 -0
  254. package/docs/parts-and-composition.md +85 -0
  255. package/docs/popups.md +108 -0
  256. package/docs/rendering.md +56 -0
  257. package/docs/server-rendering.md +180 -0
  258. package/docs/state-and-events.md +100 -0
  259. package/docs/styling-and-animation.md +148 -0
  260. package/docs/utilities/async-options.md +348 -0
  261. package/docs/utilities/shortcuts.md +159 -0
  262. package/package.json +352 -3
@@ -0,0 +1,151 @@
1
+ // src/checkbox.ts
2
+ import {
3
+ checkbox as checkboxPrimitive,
4
+ checkboxGroup as checkboxGroupPrimitive
5
+ } from "@ui-sdk/core/checkbox";
6
+ import {
7
+ defineComponent,
8
+ h,
9
+ inject,
10
+ provide
11
+ } from "vue";
12
+ import { useFieldControl } from "./field-context.js";
13
+ import { toggleProps } from "./toggle-props.js";
14
+ import { createParts, withElement } from "./create-parts.js";
15
+ import {
16
+ optionalBoolean,
17
+ orModel,
18
+ usePart,
19
+ usePrimitive
20
+ } from "./use-primitive.js";
21
+ import { readOnlyOf } from "./text-control.js";
22
+ import {
23
+ createCheckboxController,
24
+ createCheckboxGroupController
25
+ } from "@ui-sdk/core/checkbox";
26
+ var parts = createParts(checkboxPrimitive, { indicator: "span" });
27
+ var CheckboxGroupKey = /* @__PURE__ */ Symbol("checkbox-group");
28
+ var Checkbox = withElement(
29
+ "button",
30
+ defineComponent({
31
+ name: "Checkbox",
32
+ inheritAttrs: false,
33
+ props: {
34
+ checked: {
35
+ type: [Boolean, String],
36
+ default: void 0
37
+ },
38
+ modelValue: {
39
+ type: [Boolean, String],
40
+ default: void 0
41
+ },
42
+ defaultChecked: {
43
+ type: [Boolean, String],
44
+ default: void 0
45
+ },
46
+ parent: optionalBoolean,
47
+ controller: Object,
48
+ ...toggleProps
49
+ },
50
+ emits: {
51
+ "update:checked": (_checked) => true,
52
+ "update:modelValue": (_checked) => true,
53
+ checkedChange: (_checked, _details) => true
54
+ },
55
+ slots: Object,
56
+ setup(props, { attrs, emit }) {
57
+ const group = inject(CheckboxGroupKey, null);
58
+ const field = group ? null : useFieldControl();
59
+ const checkbox = usePrimitive(checkboxPrimitive, () => ({
60
+ parent: props.parent,
61
+ group: group ? () => group.api : void 0,
62
+ checked: orModel(props.checked, props.modelValue),
63
+ defaultChecked: props.defaultChecked,
64
+ disabled: props.disabled || field?.disabled(),
65
+ readOnly: readOnlyOf(props, attrs),
66
+ required: props.required,
67
+ name: props.name ?? field?.name(),
68
+ value: props.value,
69
+ form: props.form,
70
+ controller: props.controller,
71
+ debug: props.debug,
72
+ onCheckedChange: (checked, details) => {
73
+ emit("checkedChange", checked, details);
74
+ if (details.canceled) {
75
+ return;
76
+ }
77
+ emit("update:checked", checked);
78
+ emit("update:modelValue", checked);
79
+ }
80
+ }));
81
+ const root = usePart(checkbox, "root", void 0, void 0, {
82
+ tag: "button",
83
+ extend: field?.props
84
+ });
85
+ return () => [root(), h("input", checkbox.slot("input"))];
86
+ }
87
+ })
88
+ );
89
+ var CheckboxIndicator = parts.Indicator;
90
+ var CheckboxGroup = /* @__PURE__ */ withElement(
91
+ "div",
92
+ /* @__PURE__ */ defineComponent({
93
+ name: "CheckboxGroup",
94
+ inheritAttrs: false,
95
+ props: {
96
+ value: { type: Array, default: void 0 },
97
+ modelValue: { type: Array, default: void 0 },
98
+ defaultValue: { type: Array, default: void 0 },
99
+ allValues: { type: Array, default: void 0 },
100
+ readOnly: optionalBoolean,
101
+ disabled: optionalBoolean,
102
+ required: optionalBoolean,
103
+ name: String,
104
+ form: String,
105
+ controller: Object,
106
+ debug: optionalBoolean
107
+ },
108
+ emits: {
109
+ "update:value": (_value) => true,
110
+ "update:modelValue": (_value) => true,
111
+ valueChange: (_value, _details) => true
112
+ },
113
+ slots: Object,
114
+ setup(props, { emit }) {
115
+ const field = useFieldControl();
116
+ const group = usePrimitive(checkboxGroupPrimitive, () => ({
117
+ value: orModel(props.value, props.modelValue),
118
+ defaultValue: props.defaultValue,
119
+ allValues: props.allValues,
120
+ readOnly: props.readOnly,
121
+ disabled: props.disabled || field?.disabled(),
122
+ required: props.required,
123
+ name: props.name ?? field?.name(),
124
+ form: props.form,
125
+ controller: props.controller,
126
+ debug: props.debug,
127
+ onValueChange: (value, details) => {
128
+ emit("valueChange", value, details);
129
+ if (details.canceled) {
130
+ return;
131
+ }
132
+ emit("update:value", value);
133
+ emit("update:modelValue", value);
134
+ }
135
+ }));
136
+ provide(CheckboxGroupKey, group);
137
+ const root = usePart(group, "group", void 0, void 0, {
138
+ tag: "div",
139
+ extend: field?.props
140
+ });
141
+ return () => [root(), h("input", group.slot("group-input"))];
142
+ }
143
+ })
144
+ );
145
+ export {
146
+ Checkbox,
147
+ CheckboxGroup,
148
+ CheckboxIndicator,
149
+ createCheckboxController,
150
+ createCheckboxGroupController
151
+ };
@@ -0,0 +1,41 @@
1
+ import { type Component, type VNode, type VNodeArrayChildren } from "vue";
2
+ /**
3
+ * Marks a part inside an item that isn't its label, like an icon, so
4
+ * `learnLabels` skips its text. A pure call, so a page that never renders the
5
+ * part still drops it, which a set of parts in the root couldn't do.
6
+ */
7
+ declare function notLabel<Part extends object>(part: Part): Part;
8
+ /**
9
+ * For a root that renders its own content part when the app places none:
10
+ * whether one is placed. Render the root's own part inside `NotPlaced`, so it
11
+ * doesn't count.
12
+ */
13
+ declare function usePlacedContent(): () => boolean;
14
+ /** Called by a content part, so its root doesn't render one of its own as well. */
15
+ declare function usePlaceContent(): void;
16
+ /** Renders a root's own content part without counting it as placed. */
17
+ declare const NotPlaced: import("vue").DefineComponent<{}, () => VNode<import("vue").RendererNode, import("vue").RendererElement, {
18
+ [key: string]: any;
19
+ }>[] | undefined, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
20
+ declare function hasChild(children: unknown, type: Component): boolean;
21
+ /**
22
+ * Tells a listbox the labels of its value from the items among the root's
23
+ * `children`, so the server's markup and the render that hydrates it show the
24
+ * label, not the value, before the items mount. The listbox looks only on its
25
+ * first render. Call it in the render, since a slot called in setup warns.
26
+ */
27
+ declare function learnLabels(internal: {
28
+ keyOf: (value: unknown) => string;
29
+ learnLabels: (find: (keys: ReadonlySet<string>) => {
30
+ value: unknown;
31
+ label: string;
32
+ }[]) => void;
33
+ }, children: VNodeArrayChildren, skip: ReadonlySet<unknown>): void;
34
+ /**
35
+ * What a slot renders, or undefined when it renders nothing, so the part shows
36
+ * its own content in its place, the way Vue's `<slot>` shows its fallback.
37
+ */
38
+ declare function slotContent<Props>(slot: ((props: Props) => VNode[]) | undefined, props: Props): VNode<import("vue").RendererNode, import("vue").RendererElement, {
39
+ [key: string]: any;
40
+ }>[] | undefined;
41
+ export { hasChild, learnLabels, notLabel, NotPlaced, slotContent, usePlaceContent, usePlacedContent, };
@@ -0,0 +1,135 @@
1
+ // src/children.ts
2
+ import {
3
+ Comment,
4
+ defineComponent,
5
+ Fragment,
6
+ inject,
7
+ isVNode,
8
+ onBeforeUnmount,
9
+ onMounted,
10
+ provide,
11
+ shallowRef
12
+ } from "vue";
13
+ var notLabelKey = /* @__PURE__ */ Symbol.for("ui-sdk.not-label");
14
+ function notLabel(part) {
15
+ ;
16
+ part[notLabelKey] = true;
17
+ return part;
18
+ }
19
+ var placedKey = /* @__PURE__ */ Symbol("ui-sdk.placed");
20
+ function usePlacedContent() {
21
+ const count = shallowRef(0);
22
+ provide(placedKey, () => {
23
+ count.value++;
24
+ return () => count.value--;
25
+ });
26
+ return () => count.value > 0;
27
+ }
28
+ function usePlaceContent() {
29
+ const register = inject(placedKey, null);
30
+ if (!register) {
31
+ return;
32
+ }
33
+ let unregister;
34
+ onMounted(() => unregister = register());
35
+ onBeforeUnmount(() => unregister?.());
36
+ }
37
+ var NotPlaced = defineComponent({
38
+ name: "NotPlaced",
39
+ setup(_, { slots }) {
40
+ provide(placedKey, null);
41
+ return () => slots.default?.();
42
+ }
43
+ });
44
+ function hasChild(children, type) {
45
+ if (!Array.isArray(children)) {
46
+ return false;
47
+ }
48
+ for (const child of children) {
49
+ if (Array.isArray(child) ? hasChild(child, type) : isVNode(child) && (child.type === type || hasChild(child.children, type))) {
50
+ return true;
51
+ }
52
+ }
53
+ return false;
54
+ }
55
+ function labelsAmong(nodes, {
56
+ keys,
57
+ keyOf,
58
+ skip
59
+ }) {
60
+ const found = [];
61
+ const visit = (node) => {
62
+ if (Array.isArray(node)) {
63
+ return node.forEach(visit);
64
+ }
65
+ if (!isVNode(node)) {
66
+ return;
67
+ }
68
+ const { value, label } = node.props ?? {};
69
+ if (value === void 0 || typeof node.type === "string" || !keys.has(keyOf(value))) {
70
+ return childrenOf(node).forEach(visit);
71
+ }
72
+ const text = typeof label === "string" ? label : visibleText(childrenOf(node), skip);
73
+ if (text) {
74
+ found.push({ value, label: text });
75
+ }
76
+ };
77
+ nodes.forEach(visit);
78
+ return found;
79
+ }
80
+ function childrenOf(node) {
81
+ const { children } = node;
82
+ if (typeof children === "string") {
83
+ return [children];
84
+ }
85
+ if (Array.isArray(children)) {
86
+ return children;
87
+ }
88
+ return slotNodes(children?.default);
89
+ }
90
+ function slotNodes(slot) {
91
+ try {
92
+ const nodes = slot?.();
93
+ return Array.isArray(nodes) ? nodes : nodes == null ? [] : [nodes];
94
+ } catch {
95
+ return [];
96
+ }
97
+ }
98
+ function visibleText(nodes, skip) {
99
+ const text = (node) => {
100
+ if (typeof node === "string" || typeof node === "number") {
101
+ return String(node);
102
+ }
103
+ if (Array.isArray(node)) {
104
+ return node.map(text).join("");
105
+ }
106
+ if (!isVNode(node) || node.type === Comment || skip.has(node.type) || node.type[notLabelKey] || node.props?.["aria-hidden"]) {
107
+ return "";
108
+ }
109
+ return childrenOf(node).map(text).join("");
110
+ };
111
+ return nodes.map(text).join("").replace(/\s+/g, " ").trim();
112
+ }
113
+ function learnLabels(internal, children, skip) {
114
+ internal.learnLabels(
115
+ (keys) => labelsAmong(children, { keys, keyOf: internal.keyOf, skip })
116
+ );
117
+ }
118
+ function rendersSomething(nodes) {
119
+ return nodes.some(
120
+ (node) => !isVNode(node) || node.type !== Comment && (node.type !== Fragment || (Array.isArray(node.children) ? rendersSomething(node.children) : !!node.children))
121
+ );
122
+ }
123
+ function slotContent(slot, props) {
124
+ const nodes = slot?.(props);
125
+ return nodes && rendersSomething(nodes) ? nodes : void 0;
126
+ }
127
+ export {
128
+ NotPlaced,
129
+ hasChild,
130
+ learnLabels,
131
+ notLabel,
132
+ slotContent,
133
+ usePlaceContent,
134
+ usePlacedContent
135
+ };
@@ -0,0 +1,54 @@
1
+ /**
2
+ * A panel of content that a button shows and hides. Put its trigger and panel inside.
3
+ * @stable
4
+ */
5
+ declare const Collapsible: import("./create-parts.js").ElementPart<new (props: Omit<import("@ui-sdk/core").OptionsOf<import("@ui-sdk/core/collapsible").CollapsiblePrimitive> & import("@ui-sdk/core/renderer").BaseSlotProps, "onOpenChange" | "onOpenChangeComplete"> & {
6
+ modelValue?: boolean | undefined;
7
+ } & {
8
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
9
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
10
+ onOpenChange?: ((open: boolean, details: import("@ui-sdk/core").ChangeDetails<import("@ui-sdk/core/collapsible").CollapsibleOpenChangeReason>) => any) | undefined;
11
+ onOpenChangeComplete?: ((open: boolean) => any) | undefined;
12
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps) => import("vue").CreateComponentPublicInstanceWithMixins<Omit<import("@ui-sdk/core").OptionsOf<import("@ui-sdk/core/collapsible").CollapsiblePrimitive> & import("@ui-sdk/core/renderer").BaseSlotProps, "onOpenChange" | "onOpenChangeComplete"> & {
13
+ modelValue?: boolean | undefined;
14
+ } & {
15
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
16
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
17
+ onOpenChange?: ((open: boolean, details: import("@ui-sdk/core").ChangeDetails<import("@ui-sdk/core/collapsible").CollapsibleOpenChangeReason>) => any) | undefined;
18
+ onOpenChangeComplete?: ((open: boolean) => any) | undefined;
19
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
20
+ openChange: (open: boolean, details: import("@ui-sdk/core").ChangeDetails<import("@ui-sdk/core/collapsible").CollapsibleOpenChangeReason>) => true;
21
+ openChangeComplete: (open: boolean) => true;
22
+ } & {
23
+ "update:open": (value: boolean) => true;
24
+ } & {
25
+ "update:modelValue": (value: boolean) => true;
26
+ }, import("vue").PublicProps, {}, false, {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/collapsible").CollapsibleState>>, {}, {}, string, {}, any, import("vue").ComponentProvideOptions, {
27
+ P: {};
28
+ B: {};
29
+ D: {};
30
+ C: {};
31
+ M: {};
32
+ Defaults: {};
33
+ }, Omit<import("@ui-sdk/core").OptionsOf<import("@ui-sdk/core/collapsible").CollapsiblePrimitive> & import("@ui-sdk/core/renderer").BaseSlotProps, "onOpenChange" | "onOpenChangeComplete"> & {
34
+ modelValue?: boolean | undefined;
35
+ } & {
36
+ "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
37
+ "onUpdate:open"?: ((value: boolean) => any) | undefined;
38
+ onOpenChange?: ((open: boolean, details: import("@ui-sdk/core").ChangeDetails<import("@ui-sdk/core/collapsible").CollapsibleOpenChangeReason>) => any) | undefined;
39
+ onOpenChangeComplete?: ((open: boolean) => any) | undefined;
40
+ }, {}, {}, {}, {}, {}>, "div">;
41
+ /**
42
+ * The button that opens and closes the panel. It says whether the panel is open with `aria-expanded`.
43
+ * @stable
44
+ */
45
+ declare const CollapsibleTrigger: Pick<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/collapsible").CollapsibleState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/collapsible").CollapsibleState>>>, "button">;
46
+ /**
47
+ * The content the trigger shows and hides. Closed, it leaves the page unless `keepMounted` or
48
+ * `hiddenUntilFound` keeps it.
49
+ * @stable
50
+ */
51
+ declare const CollapsiblePanel: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/collapsible").CollapsiblePanelProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/collapsible").CollapsibleState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/collapsible").CollapsiblePanelProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/collapsible").CollapsibleState>>>, "div">;
52
+ export { createCollapsibleController } from "@ui-sdk/core/collapsible";
53
+ export type { CollapsibleApi, CollapsibleChangeOptions, CollapsibleController, CollapsibleOpenChangeReason, CollapsibleOptions, CollapsiblePanelProps, CollapsiblePanelState, CollapsiblePrimitive, CollapsibleState, CollapsibleTriggerProps, CollapsibleTriggerState, } from "@ui-sdk/core/collapsible";
54
+ export { Collapsible, CollapsiblePanel, CollapsibleTrigger };
@@ -0,0 +1,18 @@
1
+ // src/collapsible.ts
2
+ import { collapsible } from "@ui-sdk/core/collapsible";
3
+ import { createParts } from "./create-parts.js";
4
+ import { createCollapsibleController } from "@ui-sdk/core/collapsible";
5
+ var parts = createParts(collapsible, {
6
+ root: "div",
7
+ trigger: "button",
8
+ panel: "div"
9
+ });
10
+ var Collapsible = parts.Root;
11
+ var CollapsibleTrigger = parts.Trigger;
12
+ var CollapsiblePanel = parts.Panel;
13
+ export {
14
+ Collapsible,
15
+ CollapsiblePanel,
16
+ CollapsibleTrigger,
17
+ createCollapsibleController
18
+ };
@@ -0,0 +1,187 @@
1
+ import { type ColorChannel, type ColorFormat, type ColorGamut, type ColorPickerController, type ColorPickerSpace, type ColorPickerValueChangeDetails, type ColorPickerValueCommitDetails } from "@ui-sdk/core/color-picker";
2
+ import { type PropType } from "vue";
3
+ import { type PartSlots } from "./use-primitive.js";
4
+ /**
5
+ * The root: a group around the picker's parts, and the hidden input the form submits.
6
+ * @experimental
7
+ */
8
+ declare const ColorPicker: import("./create-parts.js").ElementPart<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
9
+ value: {
10
+ type: StringConstructor;
11
+ default: undefined;
12
+ };
13
+ modelValue: {
14
+ type: StringConstructor;
15
+ default: undefined;
16
+ };
17
+ defaultValue: {
18
+ type: StringConstructor;
19
+ default: undefined;
20
+ };
21
+ space: PropType<ColorPickerSpace>;
22
+ format: PropType<ColorFormat>;
23
+ gamut: {
24
+ type: PropType<ColorGamut | false>;
25
+ default: undefined;
26
+ };
27
+ disabled: {
28
+ type: BooleanConstructor;
29
+ default: undefined;
30
+ };
31
+ readOnly: {
32
+ type: BooleanConstructor;
33
+ default: undefined;
34
+ };
35
+ required: {
36
+ type: BooleanConstructor;
37
+ default: undefined;
38
+ };
39
+ name: StringConstructor;
40
+ form: StringConstructor;
41
+ controller: PropType<ColorPickerController>;
42
+ debug: {
43
+ type: BooleanConstructor;
44
+ default: undefined;
45
+ };
46
+ }>, (() => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
47
+ [key: string]: any;
48
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
49
+ [key: string]: any;
50
+ }>[] | null) & {
51
+ state: NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>;
52
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
53
+ "update:value": (_value: string) => true;
54
+ "update:modelValue": (_value: string) => true;
55
+ valueChange: (_value: string, _details: ColorPickerValueChangeDetails) => true;
56
+ valueCommit: (_value: string, _details: ColorPickerValueCommitDetails) => true;
57
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
58
+ value: {
59
+ type: StringConstructor;
60
+ default: undefined;
61
+ };
62
+ modelValue: {
63
+ type: StringConstructor;
64
+ default: undefined;
65
+ };
66
+ defaultValue: {
67
+ type: StringConstructor;
68
+ default: undefined;
69
+ };
70
+ space: PropType<ColorPickerSpace>;
71
+ format: PropType<ColorFormat>;
72
+ gamut: {
73
+ type: PropType<ColorGamut | false>;
74
+ default: undefined;
75
+ };
76
+ disabled: {
77
+ type: BooleanConstructor;
78
+ default: undefined;
79
+ };
80
+ readOnly: {
81
+ type: BooleanConstructor;
82
+ default: undefined;
83
+ };
84
+ required: {
85
+ type: BooleanConstructor;
86
+ default: undefined;
87
+ };
88
+ name: StringConstructor;
89
+ form: StringConstructor;
90
+ controller: PropType<ColorPickerController>;
91
+ debug: {
92
+ type: BooleanConstructor;
93
+ default: undefined;
94
+ };
95
+ }>> & Readonly<{
96
+ "onUpdate:modelValue"?: ((_value: string) => any) | undefined;
97
+ "onUpdate:value"?: ((_value: string) => any) | undefined;
98
+ onValueChange?: ((_value: string, _details: ColorPickerValueChangeDetails) => any) | undefined;
99
+ onValueCommit?: ((_value: string, _details: ColorPickerValueCommitDetails) => any) | undefined;
100
+ }>, {
101
+ value: string;
102
+ disabled: boolean;
103
+ debug: boolean;
104
+ defaultValue: string;
105
+ required: boolean;
106
+ readOnly: boolean;
107
+ modelValue: string;
108
+ gamut: false | ColorGamut;
109
+ }, PartSlots<import("@ui-sdk/core/color-picker").ColorPickerPrimitive, "root">, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, "div">;
110
+ /**
111
+ * A surface for two channels, `x` and `y`. Its background comes from
112
+ * `--color-area-background` where gradients draw it, or a `ColorPickerAreaCanvas`.
113
+ * @experimental
114
+ */
115
+ declare const ColorPickerArea: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, "div">;
116
+ /**
117
+ * The area's thumb: a slider screen readers hear as both channels.
118
+ * @experimental
119
+ */
120
+ declare const ColorPickerAreaThumb: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, "div">;
121
+ /**
122
+ * Paints the area pixel by pixel, for channels no gradient draws, like OKLCH's
123
+ * chroma by lightness. Colors outside the gamut stay transparent.
124
+ * @experimental
125
+ */
126
+ declare const ColorPickerAreaCanvas: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<{}>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerAreaProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<{}>>, "canvas">;
127
+ /**
128
+ * A track for one `channel`, drawn by `--color-slider-background`.
129
+ * @experimental
130
+ */
131
+ declare const ColorPickerSlider: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderState>>>, "div">;
132
+ /**
133
+ * The slider's thumb, at `--color-slider-thumb-position`.
134
+ * @experimental
135
+ */
136
+ declare const ColorPickerSliderThumb: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSliderState>>>, "div">;
137
+ /**
138
+ * A text input that reads any CSS color on Enter or blur. Text that isn't
139
+ * one goes back to the value.
140
+ * @experimental
141
+ */
142
+ declare const ColorPickerInput: import("./create-parts.js").ElementPart<import("vue").DefineComponent<{}, (() => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
143
+ [key: string]: any;
144
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
145
+ [key: string]: any;
146
+ }>[] | null) & {
147
+ state: NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>;
148
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, PartSlots<import("@ui-sdk/core/color-picker").ColorPickerPrimitive, "input">, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, "input">;
149
+ /**
150
+ * A number input for one `channel`, in the units people read it in.
151
+ * @experimental
152
+ */
153
+ declare const ColorPickerChannelInput: import("./create-parts.js").ElementPart<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
154
+ channel: PropType<ColorChannel>;
155
+ }>, (() => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
156
+ [key: string]: any;
157
+ }> | import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
158
+ [key: string]: any;
159
+ }>[] | null) & {
160
+ state: NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>;
161
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
162
+ channel: PropType<ColorChannel>;
163
+ }>> & Readonly<{}>, {}, PartSlots<import("@ui-sdk/core/color-picker").ColorPickerPrimitive, "channel-input">, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, "input">;
164
+ /**
165
+ * The color itself, as `--color-picker-color`, named for screen readers.
166
+ * @experimental
167
+ */
168
+ declare const ColorPickerSwatch: Pick<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, "div">;
169
+ /**
170
+ * A button that picks a color from the screen, where the browser can.
171
+ * Elsewhere it's disabled, with `data-unsupported`.
172
+ * @experimental
173
+ */
174
+ declare const ColorPickerEyeDropper: Pick<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, "button">;
175
+ /**
176
+ * A list of preset colors. Arrow keys move between them.
177
+ * @experimental
178
+ */
179
+ declare const ColorPickerSwatches: Pick<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerState>>>, "div">;
180
+ /**
181
+ * A preset color, as `--color-picker-color`. Pressing it sets the value.
182
+ * @experimental
183
+ */
184
+ declare const ColorPickerSwatchItem: Pick<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSwatchItemProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSwatchItemState>>>, never> & import("./create-parts.js").ElementConstructor<import("vue").DefineSetupFnComponent<Omit<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSwatchItemProps> & import("@ui-sdk/core/renderer").BaseSlotProps, never>, {} & {}, import("./use-primitive.js").StateSlots<NoInfer<import("@ui-sdk/core/color-picker").ColorPickerSwatchItemState>>>, "button">;
185
+ export { createColorPickerController } from "@ui-sdk/core/color-picker";
186
+ export type { Color, ColorChannel, ColorFormat, ColorGamut, ColorPickerApi, ColorPickerAreaProps, ColorPickerChangeOptions, ColorPickerChannelInputProps, ColorPickerController, ColorPickerOptions, ColorPickerPrimitive, ColorPickerSliderProps, ColorPickerSliderState, ColorPickerSpace, ColorPickerState, ColorPickerSwatchItemProps, ColorPickerSwatchItemState, ColorPickerValueChangeDetails, ColorPickerValueChangeReason, ColorPickerValueCommitDetails, } from "@ui-sdk/core/color-picker";
187
+ export { ColorPicker, ColorPickerArea, ColorPickerAreaCanvas, ColorPickerAreaThumb, ColorPickerChannelInput, ColorPickerEyeDropper, ColorPickerInput, ColorPickerSlider, ColorPickerSliderThumb, ColorPickerSwatch, ColorPickerSwatches, ColorPickerSwatchItem, };