@pixpilot/shadcn-ui 1.38.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +1 -0
  2. package/dist/ColorPicker/mcp.js +105 -0
  3. package/dist/ColorPickerBase/mcp.js +97 -0
  4. package/dist/absolute-fill/AbsoluteFill.d.cts +2 -2
  5. package/dist/absolute-fill/mcp.js +23 -0
  6. package/dist/alert/mcp.js +41 -0
  7. package/dist/avatar-upload/mcp.js +86 -0
  8. package/dist/button-extended/ButtonExtended.d.cts +2 -2
  9. package/dist/button-extended/mcp.js +53 -0
  10. package/dist/button-group/mcp.js +28 -0
  11. package/dist/card/Card.d.cts +3 -3
  12. package/dist/circle-loader/mcp.js +48 -0
  13. package/dist/close-button-absolute/mcp.js +39 -0
  14. package/dist/close-button-rounded/mcp.js +39 -0
  15. package/dist/color-select/ColorSelect.cjs +2 -2
  16. package/dist/color-select/ColorSelect.d.cts +3 -2
  17. package/dist/color-select/ColorSelect.d.ts +3 -2
  18. package/dist/color-select/ColorSelect.js +3 -3
  19. package/dist/color-select/mcp.js +59 -0
  20. package/dist/combobox/Combobox.cjs +4 -3
  21. package/dist/combobox/Combobox.d.cts +8 -4
  22. package/dist/combobox/Combobox.d.ts +8 -4
  23. package/dist/combobox/Combobox.js +5 -4
  24. package/dist/combobox/index.d.cts +1 -1
  25. package/dist/combobox/index.d.ts +1 -1
  26. package/dist/combobox/mcp.js +64 -0
  27. package/dist/confirmation-dialog/mcp.js +55 -0
  28. package/dist/content-card/ContentCard.d.ts +2 -2
  29. package/dist/content-card/mcp.js +30 -0
  30. package/dist/date-picker/DatePicker.d.ts +2 -2
  31. package/dist/date-picker/mcp.js +43 -0
  32. package/dist/dialog/Dialog.d.ts +5 -5
  33. package/dist/dialog/mcp.js +53 -0
  34. package/dist/dialog-provider/mcp.js +24 -0
  35. package/dist/file-upload/FileUpload.d.cts +2 -2
  36. package/dist/file-upload/FileUpload.d.ts +2 -2
  37. package/dist/file-upload-inline/FileUploadInline.d.ts +2 -2
  38. package/dist/file-upload-inline/mcp.js +89 -0
  39. package/dist/file-upload-root/FileUploadRoot.d.ts +2 -2
  40. package/dist/file-upload-root/mcp.js +84 -0
  41. package/dist/generated/mcp-registry.js +84 -6
  42. package/dist/icon-selector/IconPicker.cjs +2 -2
  43. package/dist/icon-selector/IconPicker.d.cts +1 -0
  44. package/dist/icon-selector/IconPicker.d.ts +1 -0
  45. package/dist/icon-selector/IconPicker.js +2 -2
  46. package/dist/icon-selector/mcp.js +60 -0
  47. package/dist/icon-toggle/mcp.js +62 -0
  48. package/dist/index.d.cts +4 -4
  49. package/dist/index.d.ts +4 -4
  50. package/dist/input/mcp.js +33 -0
  51. package/dist/layout/mcp.js +29 -0
  52. package/dist/loading-overlay/mcp.js +64 -0
  53. package/dist/mcp/src/search.js +81 -0
  54. package/dist/mcp/src/server.js +10 -5
  55. package/dist/pagination/mcp.js +65 -0
  56. package/dist/popover/mcp.js +27 -0
  57. package/dist/rating/Rating.d.cts +3 -3
  58. package/dist/rating/Rating.d.ts +3 -3
  59. package/dist/rating/mcp.js +73 -0
  60. package/dist/rich-text-editor/mcp.js +78 -0
  61. package/dist/scaled-preview/mcp.js +47 -0
  62. package/dist/select/Select.cjs +4 -2
  63. package/dist/select/Select.d.cts +14 -5
  64. package/dist/select/Select.d.ts +14 -5
  65. package/dist/select/Select.js +4 -2
  66. package/dist/select/index.d.cts +1 -1
  67. package/dist/select/index.d.ts +1 -1
  68. package/dist/select/mcp.js +70 -0
  69. package/dist/slider/mcp.js +80 -0
  70. package/dist/tabs/mcp.js +51 -0
  71. package/dist/tags-input/TagsInput.cjs +67 -65
  72. package/dist/tags-input/TagsInput.d.cts +6 -33
  73. package/dist/tags-input/TagsInput.d.ts +6 -33
  74. package/dist/tags-input/TagsInput.js +68 -66
  75. package/dist/tags-input/TagsInputInline.d.cts +2 -2
  76. package/dist/tags-input/TagsInputInline.d.ts +2 -2
  77. package/dist/tags-input/index.d.cts +2 -2
  78. package/dist/tags-input/index.d.ts +2 -2
  79. package/dist/tags-input/mcp.js +100 -0
  80. package/dist/theme-provider/mcp.js +57 -0
  81. package/dist/theme-toggle/ThemeModeDropdown.d.ts +2 -2
  82. package/dist/theme-toggle/ThemeModeSwitchInside.d.ts +2 -2
  83. package/dist/theme-toggle/ThemeModeSwitchOutside.d.ts +2 -2
  84. package/dist/theme-toggle/ThemeModeToggleButton.d.ts +2 -2
  85. package/dist/theme-toggle/mcp.js +38 -0
  86. package/dist/toast/mcp.js +52 -0
  87. package/dist/toggle-button/mcp.js +58 -0
  88. package/dist/toggle-group/mcp.js +67 -0
  89. package/dist/tooltip/mcp.js +24 -0
  90. package/package.json +6 -6
package/README.md CHANGED
@@ -29,6 +29,7 @@ start the server manually.
29
29
  The server exposes generated component metadata through:
30
30
 
31
31
  - `list_components`
32
+ - `search_components`
32
33
  - `get_component_details`
33
34
 
34
35
  Component metadata is discovered from `src/**/mcp.ts` during the package build,
@@ -0,0 +1,105 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/ColorPicker/mcp.ts
4
+ const meta = {
5
+ name: "ColorPicker",
6
+ category: "Forms",
7
+ description: "A color picker field rendered as either an input or a button trigger, with swatch, picker, format select, and reset support.",
8
+ htmlElement: "div",
9
+ props: defineProps({
10
+ variant: {
11
+ description: "Renders the trigger as a text input or a color swatch button.",
12
+ type: "\"button\" | \"input\"",
13
+ defaultValue: "\"input\""
14
+ },
15
+ placeholder: "Placeholder text shown before a color is selected.",
16
+ formatDisplayValue: "Formats the displayed value for the button variant, e.g. to show a color name instead of the raw hex.",
17
+ resetOptions: "Configures the reset/clear affordance (value, label, icon, tooltip, swatch color).",
18
+ value: "Controlled color value.",
19
+ onChange: "Called with the new color value when the selection changes.",
20
+ presetColors: "Preset color swatches shown in the picker as `{ label, value }[]`.",
21
+ layout: {
22
+ description: "Controls how much of the picker UI is shown.",
23
+ type: "\"full\" | \"compact\""
24
+ },
25
+ sections: "Which picker sections render: any of 'swatch', 'picker', 'format-select', 'input'.",
26
+ contentProps: "Props forwarded to the picker content popover wrapper.",
27
+ onValueChange: {
28
+ description: "Low-level Radix callback fired with the raw color value as it changes.",
29
+ type: "(value: string) => void"
30
+ },
31
+ format: {
32
+ description: "Controlled color format.",
33
+ type: "\"hex\" | \"rgb\" | \"hsl\" | \"hsb\""
34
+ },
35
+ defaultFormat: {
36
+ description: "Uncontrolled initial color format.",
37
+ type: "\"hex\" | \"rgb\" | \"hsl\" | \"hsb\""
38
+ },
39
+ onFormatChange: {
40
+ description: "Called when the selected color format changes.",
41
+ type: "(format: string) => void"
42
+ },
43
+ name: "Form field name submitted with the color value for native form integration.",
44
+ asChild: {
45
+ description: "Merge behavior and styles onto the child element instead of the default wrapper.",
46
+ type: "boolean",
47
+ defaultValue: "false"
48
+ },
49
+ disabled: {
50
+ description: "Disables the color picker.",
51
+ type: "boolean",
52
+ defaultValue: "false"
53
+ },
54
+ inline: {
55
+ description: "Renders the picker inline instead of inside a popover.",
56
+ type: "boolean",
57
+ defaultValue: "false"
58
+ },
59
+ readOnly: {
60
+ description: "Makes the color value read-only.",
61
+ type: "boolean",
62
+ defaultValue: "false"
63
+ },
64
+ required: {
65
+ description: "Marks the field as required for form submission.",
66
+ type: "boolean",
67
+ defaultValue: "false"
68
+ },
69
+ open: {
70
+ description: "Controlled open state of the picker popover.",
71
+ type: "boolean"
72
+ },
73
+ defaultOpen: {
74
+ description: "Uncontrolled initial open state of the picker popover.",
75
+ type: "boolean"
76
+ },
77
+ onOpenChange: {
78
+ description: "Called when the picker popover opens or closes.",
79
+ type: "(open: boolean) => void"
80
+ },
81
+ modal: {
82
+ description: "Whether the picker popover traps focus and blocks outside interaction.",
83
+ type: "boolean",
84
+ defaultValue: "false"
85
+ }
86
+ }),
87
+ examples: [{
88
+ title: "Input color picker",
89
+ code: "<ColorPicker value={color} onChange={setColor} />"
90
+ }, {
91
+ title: "Button variant with presets",
92
+ code: "<ColorPicker variant=\"button\" value={color} onChange={setColor} presetColors={[{ label: \"Red\", value: \"#ef4444\" }]} />"
93
+ }],
94
+ related: ["ColorPickerBase", "ColorSelect"],
95
+ keywords: [
96
+ "color",
97
+ "picker",
98
+ "swatch",
99
+ "form",
100
+ "input"
101
+ ]
102
+ };
103
+
104
+ //#endregion
105
+ export { meta };
@@ -0,0 +1,97 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/ColorPickerBase/mcp.ts
4
+ const meta = {
5
+ name: "ColorPickerBase",
6
+ category: "Forms",
7
+ description: "The headless color picker root that manages value and open state and exposes trigger/content composition through children (render-prop supported).",
8
+ htmlElement: "div",
9
+ props: defineProps({
10
+ value: "Controlled color value.",
11
+ onChange: "Called with the new color value when the selection changes.",
12
+ presetColors: "Preset color swatches shown in the picker as `{ label, value }[]`.",
13
+ layout: {
14
+ description: "Controls how much of the picker UI is shown.",
15
+ type: "\"full\" | \"compact\""
16
+ },
17
+ sections: "Which picker sections render: any of 'swatch', 'picker', 'format-select', 'input'.",
18
+ contentProps: "Props forwarded to the picker content wrapper (e.g. width).",
19
+ children: {
20
+ description: "Trigger/content composition. Accepts nodes or a render function receiving { value, onValueChange, isPickerOpen, id }.",
21
+ type: "React.ReactNode | ((props) => React.ReactNode)"
22
+ },
23
+ onValueChange: {
24
+ description: "Low-level Radix callback fired with the raw color value as it changes.",
25
+ type: "(value: string) => void"
26
+ },
27
+ format: {
28
+ description: "Controlled color format.",
29
+ type: "\"hex\" | \"rgb\" | \"hsl\" | \"hsb\""
30
+ },
31
+ defaultFormat: {
32
+ description: "Uncontrolled initial color format.",
33
+ type: "\"hex\" | \"rgb\" | \"hsl\" | \"hsb\""
34
+ },
35
+ onFormatChange: {
36
+ description: "Called when the selected color format changes.",
37
+ type: "(format: string) => void"
38
+ },
39
+ name: "Form field name submitted with the color value for native form integration.",
40
+ asChild: {
41
+ description: "Merge behavior and styles onto the child element instead of the default wrapper.",
42
+ type: "boolean",
43
+ defaultValue: "false"
44
+ },
45
+ disabled: {
46
+ description: "Disables the color picker.",
47
+ type: "boolean",
48
+ defaultValue: "false"
49
+ },
50
+ inline: {
51
+ description: "Renders the picker inline instead of inside a popover.",
52
+ type: "boolean",
53
+ defaultValue: "false"
54
+ },
55
+ readOnly: {
56
+ description: "Makes the color value read-only.",
57
+ type: "boolean",
58
+ defaultValue: "false"
59
+ },
60
+ required: {
61
+ description: "Marks the field as required for form submission.",
62
+ type: "boolean",
63
+ defaultValue: "false"
64
+ },
65
+ open: {
66
+ description: "Controlled open state of the picker popover.",
67
+ type: "boolean"
68
+ },
69
+ defaultOpen: {
70
+ description: "Uncontrolled initial open state of the picker popover.",
71
+ type: "boolean"
72
+ },
73
+ onOpenChange: {
74
+ description: "Called when the picker popover opens or closes.",
75
+ type: "(open: boolean) => void"
76
+ },
77
+ modal: {
78
+ description: "Whether the picker popover traps focus and blocks outside interaction.",
79
+ type: "boolean",
80
+ defaultValue: "false"
81
+ }
82
+ }),
83
+ examples: [{
84
+ title: "Composed trigger",
85
+ code: "<ColorPickerBase value={color} onChange={setColor}>\n <ColorPickerInput />\n</ColorPickerBase>"
86
+ }],
87
+ related: ["ColorPicker"],
88
+ keywords: [
89
+ "color",
90
+ "picker",
91
+ "headless",
92
+ "form"
93
+ ]
94
+ };
95
+
96
+ //#endregion
97
+ export { meta };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime4 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
2
  import React from "react";
3
3
 
4
4
  //#region src/absolute-fill/AbsoluteFill.d.ts
@@ -10,7 +10,7 @@ import React from "react";
10
10
  */
11
11
  declare function AbsoluteFill(props: React.HTMLAttributes<HTMLDivElement> & {
12
12
  ref?: React.Ref<HTMLDivElement>;
13
- }): react_jsx_runtime4.JSX.Element;
13
+ }): react_jsx_runtime0.JSX.Element;
14
14
  declare namespace AbsoluteFill {
15
15
  var displayName: string;
16
16
  }
@@ -0,0 +1,23 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/absolute-fill/mcp.ts
4
+ const meta = {
5
+ name: "AbsoluteFill",
6
+ category: "Layout",
7
+ description: "An absolutely positioned div stretched over its relatively positioned parent, used to capture pointer events (e.g. to enable tooltips on disabled buttons).",
8
+ htmlElement: "div",
9
+ props: defineProps({}),
10
+ examples: [{
11
+ title: "Overlay for a disabled control",
12
+ code: "<div className=\"relative\"><Button disabled>Save</Button><AbsoluteFill onClick={explainWhy} /></div>"
13
+ }],
14
+ keywords: [
15
+ "overlay",
16
+ "absolute",
17
+ "fill",
18
+ "layout"
19
+ ]
20
+ };
21
+
22
+ //#endregion
23
+ export { meta };
@@ -0,0 +1,41 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/alert/mcp.ts
4
+ const meta = {
5
+ name: "Alert",
6
+ category: "Feedback",
7
+ description: "A variant-styled alert box with an optional leading icon, title, and description used to surface contextual status messages.",
8
+ htmlElement: "div",
9
+ props: defineProps({
10
+ variant: {
11
+ description: "Controls the color treatment and default icon of the alert.",
12
+ type: "\"error\" | \"info\" | \"warning\" | \"success\" | \"default\"",
13
+ defaultValue: "\"default\""
14
+ },
15
+ title: "Bold heading shown above the description.",
16
+ description: "Main message content rendered below the title.",
17
+ duration: "Optional auto-dismiss duration in milliseconds, used by toast-style usage.",
18
+ icon: {
19
+ description: "Leading icon. Pass a JSX element for a custom icon, true for the variant default, or false to hide it.",
20
+ type: "React.JSX.Element | boolean",
21
+ defaultValue: "false"
22
+ }
23
+ }),
24
+ examples: [{
25
+ title: "Success alert",
26
+ code: "<Alert variant=\"success\" title=\"Saved\" description=\"Your changes have been saved.\" icon />"
27
+ }, {
28
+ title: "Alert with custom content",
29
+ code: "<Alert variant=\"warning\" title=\"Heads up\">\n <Button size=\"sm\">Review</Button>\n</Alert>"
30
+ }],
31
+ keywords: [
32
+ "alert",
33
+ "notification",
34
+ "message",
35
+ "feedback",
36
+ "banner"
37
+ ]
38
+ };
39
+
40
+ //#endregion
41
+ export { meta };
@@ -0,0 +1,86 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/avatar-upload/mcp.ts
4
+ const meta = {
5
+ name: "AvatarUpload",
6
+ category: "Forms",
7
+ description: "A single-image avatar uploader with a circular dropzone, preview, and optional clear button, built on the FileUpload component.",
8
+ props: defineProps({
9
+ value: "Controlled single-file metadata for the current avatar (null/empty when none).",
10
+ onChange: "Called with the new file metadata, or null when the avatar is cleared.",
11
+ onAccept: "Called with the accepted File(s) when a new image is selected.",
12
+ messages: "Overrides the dropzone labels, e.g. `{ upload: \"Upload\", change: \"Change\" }`.",
13
+ size: {
14
+ description: "Controls the avatar and dropzone sizing.",
15
+ type: "\"sm\" | \"md\" | \"lg\"",
16
+ defaultValue: "\"md\""
17
+ },
18
+ clearable: {
19
+ description: "Shows a small × button to clear the avatar when an image is present.",
20
+ type: "boolean",
21
+ defaultValue: "true"
22
+ },
23
+ onValueChange: "Low-level callback fired with the raw `File[]` whenever the underlying upload value changes.",
24
+ onFileAccept: "Called for each individual file that passes validation and is accepted.",
25
+ onFileReject: "Called when a single file is rejected, with the file and a reason message.",
26
+ onFilesReject: "Called when multiple files are rejected at once, with each file and its reason.",
27
+ onFileValidate: "Custom per-file validator; return an error message string to reject the file, or null/undefined to accept it.",
28
+ transformFile: "Optional async transform applied to each accepted file before it enters the store (e.g. EXIF stripping); return the same file or a replacement File.",
29
+ onUpload: "Async upload handler invoked with the accepted files and progress/success/error callbacks.",
30
+ accept: {
31
+ description: "Accepted file types as a native input `accept` string, e.g. \"image/*\".",
32
+ type: "string"
33
+ },
34
+ maxFiles: {
35
+ description: "Maximum number of files allowed.",
36
+ type: "number"
37
+ },
38
+ maxSize: {
39
+ description: "Maximum size per file, in bytes.",
40
+ type: "number"
41
+ },
42
+ name: "Form field name submitted with native form integration.",
43
+ label: "Accessible label for the upload control.",
44
+ asChild: {
45
+ description: "Merge behavior and props onto the child element instead of rendering the default wrapper.",
46
+ type: "boolean",
47
+ defaultValue: "false"
48
+ },
49
+ disabled: {
50
+ description: "Disables the uploader and its dropzone interactions.",
51
+ type: "boolean",
52
+ defaultValue: "false"
53
+ },
54
+ invalid: {
55
+ description: "Marks the control as invalid for styling and accessibility.",
56
+ type: "boolean",
57
+ defaultValue: "false"
58
+ },
59
+ required: {
60
+ description: "Marks the field as required for form submission.",
61
+ type: "boolean",
62
+ defaultValue: "false"
63
+ },
64
+ preventDuplicates: {
65
+ description: "Skips files that duplicate ones already present in the list.",
66
+ type: "boolean"
67
+ },
68
+ onFileSuccess: "Called with the file metadata after a file is successfully processed or uploaded.",
69
+ onFileError: "Called with the file and an error message when processing or upload fails."
70
+ }),
71
+ examples: [{
72
+ title: "Avatar uploader",
73
+ code: "<AvatarUpload value={avatar} onChange={setAvatar} size=\"lg\" />"
74
+ }],
75
+ related: ["FileUpload"],
76
+ keywords: [
77
+ "avatar",
78
+ "upload",
79
+ "image",
80
+ "profile",
81
+ "form"
82
+ ]
83
+ };
84
+
85
+ //#endregion
86
+ export { meta };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
2
2
  import { Button, Tooltip, TooltipContent, TooltipTrigger, buttonVariants } from "@pixpilot/shadcn";
3
3
  import React from "react";
4
4
  import { VariantProps } from "class-variance-authority";
@@ -50,7 +50,7 @@ interface ButtonExtendedProps extends React.ComponentProps<typeof Button>, Varia
50
50
  }
51
51
  declare function ButtonExtended(props: ButtonExtendedProps & {
52
52
  ref?: React.Ref<HTMLButtonElement>;
53
- }): react_jsx_runtime0.JSX.Element;
53
+ }): react_jsx_runtime1.JSX.Element;
54
54
  declare namespace ButtonExtended {
55
55
  var displayName: string;
56
56
  }
@@ -0,0 +1,53 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/button-extended/mcp.ts
4
+ const meta = {
5
+ name: "ButtonExtended",
6
+ category: "Actions",
7
+ description: "A button that adds a loading spinner, regular and disabled-state tooltips, and a disabled-click overlay on top of the base shadcn button.",
8
+ htmlElement: "button",
9
+ props: defineProps({
10
+ variant: {
11
+ description: "Controls the visual button treatment.",
12
+ type: "\"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\"",
13
+ defaultValue: "\"default\""
14
+ },
15
+ size: {
16
+ description: "Controls the button dimensions and icon-only sizing.",
17
+ type: "\"default\" | \"xs\" | \"sm\" | \"lg\" | \"icon\" | \"icon-xs\" | \"icon-sm\" | \"icon-lg\"",
18
+ defaultValue: "\"default\""
19
+ },
20
+ asChild: {
21
+ description: "Render the button behavior and styles through the child element instead of a native button.",
22
+ type: "boolean",
23
+ defaultValue: "false"
24
+ },
25
+ loading: {
26
+ description: "Shows a spinner and disables the button while a task is in progress.",
27
+ type: "boolean",
28
+ defaultValue: "false"
29
+ },
30
+ loaderProps: "Loader configuration, e.g. `{ placement: \"start\" | \"end\" | \"center\" }` (defaults to \"end\").",
31
+ tooltip: "Tooltip content shown on hover when the button is enabled.",
32
+ disabledTooltip: "Tooltip content shown when the button is disabled, explaining why the action is unavailable.",
33
+ onDisabledClick: "Called when the disabled overlay is clicked, so disabled actions can respond to interaction.",
34
+ slots: "Customizes the tooltip sub-components (tooltip, trigger, content) and the loader container/node."
35
+ }),
36
+ examples: [{
37
+ title: "Loading button",
38
+ code: "<ButtonExtended loading onClick={save}>Save</ButtonExtended>"
39
+ }, {
40
+ title: "Disabled with reason",
41
+ code: "<ButtonExtended disabled disabledTooltip=\"Complete required fields first\">Publish</ButtonExtended>"
42
+ }],
43
+ keywords: [
44
+ "button",
45
+ "loading",
46
+ "tooltip",
47
+ "action",
48
+ "spinner"
49
+ ]
50
+ };
51
+
52
+ //#endregion
53
+ export { meta };
@@ -0,0 +1,28 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/button-group/mcp.ts
4
+ const meta = {
5
+ name: "ButtonGroup",
6
+ category: "Actions",
7
+ description: "A container that visually joins related buttons into a single cohesive group, with optional separators and text segments.",
8
+ htmlElement: "div",
9
+ props: defineProps({ orientation: {
10
+ description: "Lays the grouped buttons out horizontally or vertically.",
11
+ type: "\"horizontal\" | \"vertical\"",
12
+ defaultValue: "\"horizontal\""
13
+ } }),
14
+ examples: [{
15
+ title: "Grouped buttons",
16
+ code: "<ButtonGroup>\n <Button variant=\"outline\">First</Button>\n <Button variant=\"outline\">Second</Button>\n <Button variant=\"outline\">Third</Button>\n</ButtonGroup>"
17
+ }],
18
+ related: ["Button", "ButtonExtended"],
19
+ keywords: [
20
+ "button",
21
+ "group",
22
+ "segmented",
23
+ "actions"
24
+ ]
25
+ };
26
+
27
+ //#endregion
28
+ export { meta };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime1 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime2 from "react/jsx-runtime";
2
2
  import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@pixpilot/shadcn";
3
3
  import React from "react";
4
4
 
@@ -6,10 +6,10 @@ import React from "react";
6
6
  declare function CardTitle$1({
7
7
  className,
8
8
  ...props
9
- }: React.ComponentProps<typeof CardTitle>): react_jsx_runtime1.JSX.Element;
9
+ }: React.ComponentProps<typeof CardTitle>): react_jsx_runtime2.JSX.Element;
10
10
  declare function CardHeader$1({
11
11
  className,
12
12
  ...props
13
- }: React.ComponentProps<typeof CardHeader>): react_jsx_runtime1.JSX.Element;
13
+ }: React.ComponentProps<typeof CardHeader>): react_jsx_runtime2.JSX.Element;
14
14
  //#endregion
15
15
  export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader$1 as CardHeader, CardTitle$1 as CardTitle };
@@ -0,0 +1,48 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/circle-loader/mcp.ts
4
+ const meta = {
5
+ name: "CircleLoader",
6
+ category: "Feedback",
7
+ description: "An animated circular spinner with configurable size, stroke width, speed, and single- or multi-color animation.",
8
+ props: defineProps({
9
+ size: {
10
+ description: "Spinner size as a preset key or a pixel number. Presets: sm (24), md (40), lg (64), xl (96).",
11
+ type: "\"sm\" | \"md\" | \"lg\" | \"xl\" | number",
12
+ defaultValue: "\"md\""
13
+ },
14
+ strokeWidth: {
15
+ description: "Stroke width in pixels. Defaults to 10% of the size (minimum 2px) when omitted.",
16
+ type: "number"
17
+ },
18
+ speed: {
19
+ description: "Rotation animation duration in seconds.",
20
+ type: "number",
21
+ defaultValue: "2"
22
+ },
23
+ color: {
24
+ description: "Single spinner color. Use \"currentColor\" to inherit the parent text color.",
25
+ type: "string",
26
+ defaultValue: "\"currentColor\""
27
+ },
28
+ colors: "Array of colors for a color-cycling animation. When provided, overrides `color`.",
29
+ className: "Additional CSS class applied to the loader wrapper."
30
+ }),
31
+ examples: [{
32
+ title: "Default spinner",
33
+ code: "<CircleLoader />"
34
+ }, {
35
+ title: "Large multi-color spinner",
36
+ code: "<CircleLoader size=\"lg\" colors={[\"#ef4444\", \"#3b82f6\", \"#22c55e\"]} speed={1.5} />"
37
+ }],
38
+ keywords: [
39
+ "loader",
40
+ "spinner",
41
+ "loading",
42
+ "progress",
43
+ "feedback"
44
+ ]
45
+ };
46
+
47
+ //#endregion
48
+ export { meta };
@@ -0,0 +1,39 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/close-button-absolute/mcp.ts
4
+ const meta = {
5
+ name: "CloseButtonAbsolute",
6
+ category: "Actions",
7
+ description: "A rounded X close button positioned absolutely in the top-right corner of its relatively positioned parent surface.",
8
+ htmlElement: "button",
9
+ props: defineProps({
10
+ variant: {
11
+ description: "Controls the visual button treatment inherited from the base button.",
12
+ type: "\"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\""
13
+ },
14
+ size: {
15
+ description: "Controls the button dimensions inherited from the base button.",
16
+ type: "\"default\" | \"sm\" | \"lg\" | \"icon\""
17
+ },
18
+ asChild: {
19
+ description: "Render the button behavior through the child element instead of a native button.",
20
+ type: "boolean",
21
+ defaultValue: "false"
22
+ }
23
+ }),
24
+ examples: [{
25
+ title: "Close button in a card",
26
+ code: "<div className=\"relative\"><CloseButtonAbsolute onClick={close} />{content}</div>"
27
+ }],
28
+ related: ["CloseButtonRounded"],
29
+ keywords: [
30
+ "close",
31
+ "dismiss",
32
+ "absolute",
33
+ "corner",
34
+ "x"
35
+ ]
36
+ };
37
+
38
+ //#endregion
39
+ export { meta };
@@ -0,0 +1,39 @@
1
+ import { defineProps } from "../mcp/src/utils.js";
2
+
3
+ //#region src/close-button-rounded/mcp.ts
4
+ const meta = {
5
+ name: "CloseButtonRounded",
6
+ category: "Actions",
7
+ description: "A circular icon button with an X glyph, used to dismiss dialogs, popovers, and other dismissible surfaces.",
8
+ htmlElement: "button",
9
+ props: defineProps({
10
+ variant: {
11
+ description: "Controls the visual button treatment inherited from the base button.",
12
+ type: "\"default\" | \"destructive\" | \"outline\" | \"secondary\" | \"ghost\" | \"link\""
13
+ },
14
+ size: {
15
+ description: "Controls the button dimensions inherited from the base button.",
16
+ type: "\"default\" | \"sm\" | \"lg\" | \"icon\""
17
+ },
18
+ asChild: {
19
+ description: "Render the button behavior through the child element instead of a native button.",
20
+ type: "boolean",
21
+ defaultValue: "false"
22
+ }
23
+ }),
24
+ examples: [{
25
+ title: "Dismiss button",
26
+ code: "<CloseButtonRounded variant=\"ghost\" onClick={close} />"
27
+ }],
28
+ related: ["CloseButtonAbsolute"],
29
+ keywords: [
30
+ "close",
31
+ "dismiss",
32
+ "button",
33
+ "x",
34
+ "rounded"
35
+ ]
36
+ };
37
+
38
+ //#endregion
39
+ export { meta };
@@ -10,7 +10,7 @@ react_jsx_runtime = require_rolldown_runtime.__toESM(react_jsx_runtime);
10
10
 
11
11
  //#region src/color-select/ColorSelect.tsx
12
12
  function ColorSelect(props) {
13
- const { options, value = "", onChange, placeholder, contentProps, keyboardMode = "dropdown", open: openProp, onOpenChange: onOpenChangeProp, id,...restProps } = props;
13
+ const { options, value = "", onChange, placeholder, contentProps, keyboardMode = "dropdown", open: openProp, onOpenChange: onOpenChangeProp, id, className,...restProps } = props;
14
14
  const [uncontrolledOpen, setUncontrolledOpen] = react.default.useState(false);
15
15
  const open = openProp ?? uncontrolledOpen;
16
16
  const handleOpenChange = (nextOpen) => {
@@ -34,7 +34,7 @@ function ColorSelect(props) {
34
34
  ...restProps,
35
35
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(__pixpilot_shadcn.SelectTrigger, {
36
36
  id,
37
- className: "w-full",
37
+ className: (0, __pixpilot_shadcn.cn)("w-full", className),
38
38
  onKeyDown: handleTriggerKeyDown,
39
39
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__pixpilot_shadcn.SelectValue, {
40
40
  placeholder,
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime16 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
2
2
  import { Select, SelectContent } from "@pixpilot/shadcn";
3
3
  import React, { ComponentProps } from "react";
4
4
 
@@ -15,7 +15,8 @@ type BaseColorSelectProps = {
15
15
  onChange?: (value: string) => void;
16
16
  placeholder?: string;
17
17
  keyboardMode?: 'cycle' | 'dropdown';
18
+ className?: string;
18
19
  } & Omit<ComponentProps<typeof Select>, 'value' | 'onValueChange' | 'children'>;
19
- declare function ColorSelect(props: BaseColorSelectProps): react_jsx_runtime16.JSX.Element;
20
+ declare function ColorSelect(props: BaseColorSelectProps): react_jsx_runtime4.JSX.Element;
20
21
  //#endregion
21
22
  export { BaseColorSelectProps, ColorSelect, ColorSelectOption };