@ensolid/radix 0.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 (169) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +79 -0
  2. package/dist/components/Accordion/Accordion.d.ts.map +1 -0
  3. package/dist/components/Accordion/Accordion.js +193 -0
  4. package/dist/components/Accordion/Accordion.js.map +1 -0
  5. package/dist/components/Accordion/index.d.ts +2 -0
  6. package/dist/components/Accordion/index.d.ts.map +1 -0
  7. package/dist/components/AlertDialog/AlertDialog.d.ts +89 -0
  8. package/dist/components/AlertDialog/AlertDialog.d.ts.map +1 -0
  9. package/dist/components/AlertDialog/AlertDialog.js +235 -0
  10. package/dist/components/AlertDialog/AlertDialog.js.map +1 -0
  11. package/dist/components/AlertDialog/index.d.ts +2 -0
  12. package/dist/components/AlertDialog/index.d.ts.map +1 -0
  13. package/dist/components/AspectRatio/AspectRatio.d.ts +14 -0
  14. package/dist/components/AspectRatio/AspectRatio.d.ts.map +1 -0
  15. package/dist/components/AspectRatio/AspectRatio.js +25 -0
  16. package/dist/components/AspectRatio/AspectRatio.js.map +1 -0
  17. package/dist/components/AspectRatio/index.d.ts +2 -0
  18. package/dist/components/AspectRatio/index.d.ts.map +1 -0
  19. package/dist/components/Avatar/Avatar.d.ts +41 -0
  20. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  21. package/dist/components/Avatar/Avatar.js +144 -0
  22. package/dist/components/Avatar/Avatar.js.map +1 -0
  23. package/dist/components/Avatar/index.d.ts +2 -0
  24. package/dist/components/Avatar/index.d.ts.map +1 -0
  25. package/dist/components/Checkbox/Checkbox.d.ts +27 -0
  26. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  27. package/dist/components/Checkbox/Checkbox.js +49 -0
  28. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  29. package/dist/components/Checkbox/index.d.ts +2 -0
  30. package/dist/components/Checkbox/index.d.ts.map +1 -0
  31. package/dist/components/Collapsible/Collapsible.d.ts +54 -0
  32. package/dist/components/Collapsible/Collapsible.d.ts.map +1 -0
  33. package/dist/components/Collapsible/Collapsible.js +110 -0
  34. package/dist/components/Collapsible/Collapsible.js.map +1 -0
  35. package/dist/components/Collapsible/index.d.ts +2 -0
  36. package/dist/components/Collapsible/index.d.ts.map +1 -0
  37. package/dist/components/ContextMenu/ContextMenu.d.ts +89 -0
  38. package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -0
  39. package/dist/components/ContextMenu/ContextMenu.js +263 -0
  40. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  41. package/dist/components/ContextMenu/index.d.ts +2 -0
  42. package/dist/components/ContextMenu/index.d.ts.map +1 -0
  43. package/dist/components/Dialog/Dialog.d.ts +87 -0
  44. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  45. package/dist/components/Dialog/Dialog.js +218 -0
  46. package/dist/components/Dialog/Dialog.js.map +1 -0
  47. package/dist/components/Dialog/index.d.ts +2 -0
  48. package/dist/components/Dialog/index.d.ts.map +1 -0
  49. package/dist/components/DropdownMenu/DropdownMenu.d.ts +81 -0
  50. package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
  51. package/dist/components/DropdownMenu/DropdownMenu.js +244 -0
  52. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  53. package/dist/components/DropdownMenu/index.d.ts +2 -0
  54. package/dist/components/DropdownMenu/index.d.ts.map +1 -0
  55. package/dist/components/HoverCard/HoverCard.d.ts +63 -0
  56. package/dist/components/HoverCard/HoverCard.d.ts.map +1 -0
  57. package/dist/components/HoverCard/HoverCard.js +199 -0
  58. package/dist/components/HoverCard/HoverCard.js.map +1 -0
  59. package/dist/components/HoverCard/index.d.ts +2 -0
  60. package/dist/components/HoverCard/index.d.ts.map +1 -0
  61. package/dist/components/Label/Label.d.ts +14 -0
  62. package/dist/components/Label/Label.d.ts.map +1 -0
  63. package/dist/components/Label/Label.js +23 -0
  64. package/dist/components/Label/Label.js.map +1 -0
  65. package/dist/components/Label/index.d.ts +2 -0
  66. package/dist/components/Label/index.d.ts.map +1 -0
  67. package/dist/components/Menubar/Menubar.d.ts +85 -0
  68. package/dist/components/Menubar/Menubar.d.ts.map +1 -0
  69. package/dist/components/Menubar/Menubar.js +299 -0
  70. package/dist/components/Menubar/Menubar.js.map +1 -0
  71. package/dist/components/Menubar/index.d.ts +2 -0
  72. package/dist/components/Menubar/index.d.ts.map +1 -0
  73. package/dist/components/NavigationMenu/NavigationMenu.d.ts +105 -0
  74. package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
  75. package/dist/components/NavigationMenu/NavigationMenu.js +320 -0
  76. package/dist/components/NavigationMenu/NavigationMenu.js.map +1 -0
  77. package/dist/components/NavigationMenu/index.d.ts +2 -0
  78. package/dist/components/NavigationMenu/index.d.ts.map +1 -0
  79. package/dist/components/Popover/Popover.d.ts +52 -0
  80. package/dist/components/Popover/Popover.d.ts.map +1 -0
  81. package/dist/components/Popover/Popover.js +176 -0
  82. package/dist/components/Popover/Popover.js.map +1 -0
  83. package/dist/components/Popover/index.d.ts +2 -0
  84. package/dist/components/Popover/index.d.ts.map +1 -0
  85. package/dist/components/Progress/Progress.d.ts +19 -0
  86. package/dist/components/Progress/Progress.d.ts.map +1 -0
  87. package/dist/components/Progress/Progress.js +44 -0
  88. package/dist/components/Progress/Progress.js.map +1 -0
  89. package/dist/components/Progress/index.d.ts +2 -0
  90. package/dist/components/Progress/index.d.ts.map +1 -0
  91. package/dist/components/RadioGroup/RadioGroup.d.ts +54 -0
  92. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
  93. package/dist/components/RadioGroup/RadioGroup.js +100 -0
  94. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  95. package/dist/components/RadioGroup/index.d.ts +2 -0
  96. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  97. package/dist/components/ScrollArea/ScrollArea.d.ts +58 -0
  98. package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  99. package/dist/components/ScrollArea/ScrollArea.js +91 -0
  100. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  101. package/dist/components/ScrollArea/index.d.ts +2 -0
  102. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  103. package/dist/components/Select/Select.d.ts +80 -0
  104. package/dist/components/Select/Select.d.ts.map +1 -0
  105. package/dist/components/Select/Select.js +240 -0
  106. package/dist/components/Select/Select.js.map +1 -0
  107. package/dist/components/Select/index.d.ts +2 -0
  108. package/dist/components/Select/index.d.ts.map +1 -0
  109. package/dist/components/Separator/Separator.d.ts +15 -0
  110. package/dist/components/Separator/Separator.d.ts.map +1 -0
  111. package/dist/components/Separator/Separator.js +30 -0
  112. package/dist/components/Separator/Separator.js.map +1 -0
  113. package/dist/components/Separator/index.d.ts +2 -0
  114. package/dist/components/Separator/index.d.ts.map +1 -0
  115. package/dist/components/Slider/Slider.d.ts +37 -0
  116. package/dist/components/Slider/Slider.d.ts.map +1 -0
  117. package/dist/components/Slider/Slider.js +63 -0
  118. package/dist/components/Slider/Slider.js.map +1 -0
  119. package/dist/components/Slider/index.d.ts +2 -0
  120. package/dist/components/Slider/index.d.ts.map +1 -0
  121. package/dist/components/Switch/Switch.d.ts +27 -0
  122. package/dist/components/Switch/Switch.d.ts.map +1 -0
  123. package/dist/components/Switch/Switch.js +50 -0
  124. package/dist/components/Switch/Switch.js.map +1 -0
  125. package/dist/components/Switch/index.d.ts +2 -0
  126. package/dist/components/Switch/index.d.ts.map +1 -0
  127. package/dist/components/Tabs/Tabs.d.ts +72 -0
  128. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  129. package/dist/components/Tabs/Tabs.js +150 -0
  130. package/dist/components/Tabs/Tabs.js.map +1 -0
  131. package/dist/components/Tabs/index.d.ts +2 -0
  132. package/dist/components/Tabs/index.d.ts.map +1 -0
  133. package/dist/components/Toggle/Toggle.d.ts +22 -0
  134. package/dist/components/Toggle/Toggle.d.ts.map +1 -0
  135. package/dist/components/Toggle/Toggle.js +51 -0
  136. package/dist/components/Toggle/Toggle.js.map +1 -0
  137. package/dist/components/Toggle/index.d.ts +2 -0
  138. package/dist/components/Toggle/index.d.ts.map +1 -0
  139. package/dist/components/ToggleGroup/ToggleGroup.d.ts +67 -0
  140. package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -0
  141. package/dist/components/ToggleGroup/ToggleGroup.js +119 -0
  142. package/dist/components/ToggleGroup/ToggleGroup.js.map +1 -0
  143. package/dist/components/ToggleGroup/index.d.ts +2 -0
  144. package/dist/components/ToggleGroup/index.d.ts.map +1 -0
  145. package/dist/components/Toolbar/Toolbar.d.ts +82 -0
  146. package/dist/components/Toolbar/Toolbar.d.ts.map +1 -0
  147. package/dist/components/Toolbar/Toolbar.js +110 -0
  148. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  149. package/dist/components/Toolbar/index.d.ts +2 -0
  150. package/dist/components/Toolbar/index.d.ts.map +1 -0
  151. package/dist/components/Tooltip/Tooltip.d.ts +56 -0
  152. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  153. package/dist/components/Tooltip/Tooltip.js +155 -0
  154. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  155. package/dist/components/Tooltip/index.d.ts +2 -0
  156. package/dist/components/Tooltip/index.d.ts.map +1 -0
  157. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +9 -0
  158. package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
  159. package/dist/components/VisuallyHidden/VisuallyHidden.js +23 -0
  160. package/dist/components/VisuallyHidden/VisuallyHidden.js.map +1 -0
  161. package/dist/components/VisuallyHidden/index.d.ts +2 -0
  162. package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
  163. package/dist/components/index.d.ts +28 -0
  164. package/dist/components/index.d.ts.map +1 -0
  165. package/dist/index.d.ts +2 -0
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +140 -0
  168. package/dist/index.js.map +1 -0
  169. package/package.json +97 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertDialog.js","sources":["../../../src/components/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import {\n createContext,\n createEffect,\n createSignal,\n onCleanup,\n onMount,\n Show,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport { isServer } from \"solid-js/web\";\nimport type { Component, JSX } from \"solid-js\";\n\ninterface AlertDialogContextValue {\n open: () => boolean;\n setOpen: (open: boolean) => void;\n}\n\nconst AlertDialogContext = createContext<AlertDialogContextValue>();\n\nexport const useAlertDialogContext = () => {\n const context = useContext(AlertDialogContext);\n if (!context) {\n throw new Error(\"AlertDialog components must be used within AlertDialog\");\n }\n return context;\n};\n\nexport interface AlertDialogProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 是否打开\n */\n open?: boolean;\n /**\n * 默认打开状态\n */\n defaultOpen?: boolean;\n /**\n * 打开状态变化回调\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nconst AlertDialogBase: Component<AlertDialogProps> = (props) => {\n const [local] = splitProps(props, [\n \"open\",\n \"defaultOpen\",\n \"onOpenChange\",\n \"children\",\n ]);\n\n const [internalOpen, setInternalOpen] = createSignal(\n local.open ?? local.defaultOpen ?? false,\n );\n\n const isControlled = () => local.open !== undefined;\n const open = () => (isControlled() ? local.open! : internalOpen());\n\n const handleOpenChange = (newOpen: boolean) => {\n if (!isControlled()) {\n setInternalOpen(newOpen);\n }\n local.onOpenChange?.(newOpen);\n };\n\n // ESC 键关闭\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && open()) {\n handleOpenChange(false);\n }\n };\n\n onMount(() => {\n if (!isServer && open()) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n }\n });\n\n createEffect(() => {\n if (!isServer) {\n if (open()) {\n document.addEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"hidden\";\n } else {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n }\n }\n });\n\n onCleanup(() => {\n if (!isServer) {\n document.removeEventListener(\"keydown\", handleKeyDown);\n document.body.style.overflow = \"\";\n }\n });\n\n const contextValue: AlertDialogContextValue = {\n open,\n setOpen: handleOpenChange,\n };\n\n return (\n <AlertDialogContext.Provider value={contextValue}>\n {local.children}\n </AlertDialogContext.Provider>\n );\n};\n\nexport interface AlertDialogComponent extends Component<AlertDialogProps> {\n Trigger: Component<AlertDialogTriggerProps>;\n Overlay: Component<AlertDialogOverlayProps>;\n Content: Component<AlertDialogContentProps>;\n Title: Component<AlertDialogTitleProps>;\n Description: Component<AlertDialogDescriptionProps>;\n Action: Component<AlertDialogActionProps>;\n Cancel: Component<AlertDialogCancelProps>;\n}\n\nexport const AlertDialog = Object.assign(AlertDialogBase, {\n Trigger: null as unknown as Component<AlertDialogTriggerProps>,\n Overlay: null as unknown as Component<AlertDialogOverlayProps>,\n Content: null as unknown as Component<AlertDialogContentProps>,\n Title: null as unknown as Component<AlertDialogTitleProps>,\n Description: null as unknown as Component<AlertDialogDescriptionProps>,\n Action: null as unknown as Component<AlertDialogActionProps>,\n Cancel: null as unknown as Component<AlertDialogCancelProps>,\n}) as AlertDialogComponent;\n\nexport interface AlertDialogTriggerProps\n extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n /**\n * 是否作为子元素传递\n */\n asChild?: boolean;\n}\n\nexport const AlertDialogTrigger: Component<AlertDialogTriggerProps> = (\n props,\n) => {\n const [local, others] = splitProps(props, [\n \"children\",\n \"asChild\",\n \"class\",\n \"onClick\",\n ]);\n const context = useAlertDialogContext();\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (e) => {\n if (typeof local.onClick === \"function\") {\n local.onClick(e);\n }\n context.setOpen(true);\n };\n\n return (\n <button type=\"button\" class={local.class} onClick={handleClick} {...others}>\n {local.children}\n </button>\n );\n};\n\nexport interface AlertDialogContentProps\n extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport interface AlertDialogOverlayProps\n extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AlertDialogOverlay: Component<AlertDialogOverlayProps> = (\n props,\n) => {\n const [local, others] = splitProps(props, [\"children\", \"class\", \"onClick\"]);\n const context = useAlertDialogContext();\n\n const handleClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n if (typeof local.onClick === \"function\") {\n local.onClick(e);\n }\n // AlertDialog 不允许点击遮罩层关闭\n };\n\n return (\n <div\n class={local.class}\n data-state={context.open() ? \"open\" : \"closed\"}\n onClick={handleClick}\n {...others}\n >\n {local.children}\n </div>\n );\n};\n\nexport const AlertDialogContent: Component<AlertDialogContentProps> = (\n props,\n) => {\n const [local, others] = splitProps(props, [\"class\", \"children\"] as const);\n const context = useAlertDialogContext();\n\n return (\n <Show when={context.open()}>\n <Portal mount={!isServer ? document.body : undefined}>\n <AlertDialogOverlay class=\"fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <div\n class={local.class}\n role=\"alertdialog\"\n aria-modal=\"true\"\n data-state={context.open() ? \"open\" : \"closed\"}\n {...others}\n >\n {local.children}\n </div>\n </Portal>\n </Show>\n );\n};\n\nexport interface AlertDialogTitleProps\n extends JSX.HTMLAttributes<HTMLHeadingElement> {\n /**\n * 标题文本\n */\n children?: JSX.Element;\n}\n\nexport const AlertDialogTitle: Component<AlertDialogTitleProps> = (props) => {\n const [local, others] = splitProps(props, [\"children\", \"class\"] as const);\n\n return (\n <h2 class={local.class} {...others}>\n {local.children}\n </h2>\n );\n};\n\nexport interface AlertDialogDescriptionProps\n extends JSX.HTMLAttributes<HTMLParagraphElement> {\n /**\n * 描述文本\n */\n children?: JSX.Element;\n}\n\nexport const AlertDialogDescription: Component<AlertDialogDescriptionProps> = (\n props,\n) => {\n const [local, others] = splitProps(props, [\"children\", \"class\"] as const);\n\n return (\n <p class={local.class} {...others}>\n {local.children}\n </p>\n );\n};\n\nexport interface AlertDialogActionProps\n extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AlertDialogAction: Component<AlertDialogActionProps> = (props) => {\n const [local, others] = splitProps(\n props,\n [\"children\", \"class\", \"onClick\"] as const,\n );\n const context = useAlertDialogContext();\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (e) => {\n if (typeof local.onClick === \"function\") {\n local.onClick(e);\n }\n context.setOpen(false);\n };\n\n return (\n <button type=\"button\" class={local.class} onClick={handleClick} {...others}>\n {local.children}\n </button>\n );\n};\n\nexport interface AlertDialogCancelProps\n extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AlertDialogCancel: Component<AlertDialogCancelProps> = (props) => {\n const [local, others] = splitProps(\n props,\n [\"children\", \"class\", \"onClick\"] as const,\n );\n const context = useAlertDialogContext();\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (e) => {\n if (typeof local.onClick === \"function\") {\n local.onClick(e);\n }\n context.setOpen(false);\n };\n\n return (\n <button type=\"button\" class={local.class} onClick={handleClick} {...others}>\n {local.children}\n </button>\n );\n};\n\nAlertDialog.Trigger = AlertDialogTrigger;\nAlertDialog.Overlay = AlertDialogOverlay;\nAlertDialog.Content = AlertDialogContent;\nAlertDialog.Title = AlertDialogTitle;\nAlertDialog.Description = AlertDialogDescription;\nAlertDialog.Action = AlertDialogAction;\nAlertDialog.Cancel = AlertDialogCancel;\n"],"names":["AlertDialogContext","createContext","useAlertDialogContext","context","useContext","Error","AlertDialogBase","props","local","splitProps","internalOpen","setInternalOpen","createSignal","open","defaultOpen","isControlled","undefined","handleOpenChange","newOpen","onOpenChange","handleKeyDown","e","key","onMount","isServer","document","addEventListener","body","style","overflow","createEffect","removeEventListener","onCleanup","contextValue","setOpen","_$createComponent","Provider","value","children","AlertDialog","Object","assign","Trigger","Overlay","Content","Title","Description","Action","Cancel","AlertDialogTrigger","others","handleClick","onClick","_el$","_tmpl$","$$click","_$spread","_$mergeProps","class","_$insert","AlertDialogOverlay","_el$2","_tmpl$2","AlertDialogContent","Show","when","Portal","mount","_el$3","_tmpl$3","AlertDialogTitle","_el$4","_tmpl$4","AlertDialogDescription","_el$5","_tmpl$5","AlertDialogAction","_el$6","AlertDialogCancel","_el$7","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './AlertDialog';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AlertDialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Component, JSX } from 'solid-js';
2
+ export interface AspectRatioProps extends JSX.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * 宽高比
5
+ * @default 1
6
+ */
7
+ ratio?: number;
8
+ /**
9
+ * 子元素
10
+ */
11
+ children?: JSX.Element;
12
+ }
13
+ export declare const AspectRatio: Component<AspectRatioProps>;
14
+ //# sourceMappingURL=AspectRatio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AspectRatio.d.ts","sourceRoot":"","sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/C,MAAM,WAAW,gBAAiB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CAmBnD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { template, spread, mergeProps, insert } from "solid-js/web";
2
+ import { splitProps } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<div><div style=position:absolute;top:0;left:0;width:100%;height:100%>`);
4
+ const AspectRatio = (props) => {
5
+ const [local, others] = splitProps(props, ["ratio", "class", "children", "style"]);
6
+ const ratio = () => local.ratio ?? 1;
7
+ const paddingBottom = () => `${1 / ratio() * 100}%`;
8
+ return (() => {
9
+ var _el$ = _tmpl$(), _el$2 = _el$.firstChild;
10
+ spread(_el$, mergeProps({
11
+ get ["class"]() {
12
+ return local.class;
13
+ },
14
+ get style() {
15
+ return `position: relative; width: 100%; padding-bottom: ${paddingBottom()}; ${typeof local.style === "string" ? local.style : ""}`;
16
+ }
17
+ }, others), false, true);
18
+ insert(_el$2, () => local.children);
19
+ return _el$;
20
+ })();
21
+ };
22
+ export {
23
+ AspectRatio
24
+ };
25
+ //# sourceMappingURL=AspectRatio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AspectRatio.js","sources":["../../../src/components/AspectRatio/AspectRatio.tsx"],"sourcesContent":["import { splitProps } from 'solid-js';\nimport type { Component, JSX } from 'solid-js';\n\nexport interface AspectRatioProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 宽高比\n * @default 1\n */\n ratio?: number;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AspectRatio: Component<AspectRatioProps> = (props) => {\n const [local, others] = splitProps(props, ['ratio', 'class', 'children', 'style']);\n\n const ratio = () => local.ratio ?? 1;\n const paddingBottom = () => `${(1 / ratio()) * 100}%`;\n\n return (\n <div\n class={local.class}\n style={`position: relative; width: 100%; padding-bottom: ${paddingBottom()}; ${typeof local.style === 'string' ? local.style : ''}`}\n {...others}\n >\n <div\n style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\n >\n {local.children}\n </div>\n </div>\n );\n};\n\n"],"names":["AspectRatio","props","local","others","splitProps","ratio","paddingBottom","_el$","_tmpl$","_el$2","firstChild","_$spread","_$mergeProps","class","style","_$insert","children"],"mappings":";;;AAeO,MAAMA,cAA4CC,CAAAA,UAAU;AACjE,QAAM,CAACC,OAAOC,MAAM,IAAIC,WAAWH,OAAO,CAAC,SAAS,SAAS,YAAY,OAAO,CAAC;AAEjF,QAAMI,QAAQA,MAAMH,MAAMG,SAAS;AACnC,QAAMC,gBAAgBA,MAAM,GAAI,IAAID,MAAAA,IAAW,GAAG;AAElD,UAAA,MAAA;AAAA,QAAAE,OAAAC,OAAAA,GAAAC,QAAAF,KAAAG;AAAAC,WAAAJ,MAAAK,WAAA;AAAA,MAAA,KAAA,OAAA,IAAA;AAAA,eAEWV,MAAMW;AAAAA,MAAK;AAAA,MAAA,IAClBC,QAAK;AAAA,eAAE,oDAAoDR,cAAAA,CAAe,KAAK,OAAOJ,MAAMY,UAAU,WAAWZ,MAAMY,QAAQ,EAAE;AAAA,MAAE;AAAA,IAAA,GAC/HX,MAAM,GAAA,OAAA,IAAA;AAAAY,WAAAN,OAAA,MAKPP,MAAMc,QAAQ;AAAA,WAAAT;AAAAA,EAAA,GAAA;AAIvB;"}
@@ -0,0 +1,2 @@
1
+ export * from './AspectRatio';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AspectRatio/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { Component, JSX } from 'solid-js';
2
+ export interface AvatarProps extends JSX.HTMLAttributes<HTMLDivElement> {
3
+ /**
4
+ * 子元素
5
+ */
6
+ children?: JSX.Element;
7
+ }
8
+ export interface AvatarComponent extends Component<AvatarProps> {
9
+ Image: Component<AvatarImageProps>;
10
+ Fallback: Component<AvatarFallbackProps>;
11
+ }
12
+ export declare const AvatarBase: Component<AvatarProps>;
13
+ export declare const Avatar: AvatarComponent;
14
+ export interface AvatarImageProps extends JSX.ImgHTMLAttributes<HTMLImageElement> {
15
+ /**
16
+ * 图片源地址
17
+ */
18
+ src?: string;
19
+ /**
20
+ * 图片加载失败时的替代文本
21
+ */
22
+ alt?: string;
23
+ /**
24
+ * 加载状态变化回调
25
+ */
26
+ onLoadingStatusChange?: (status: 'loading' | 'loaded' | 'error') => void;
27
+ }
28
+ export declare const AvatarImage: Component<AvatarImageProps>;
29
+ export interface AvatarFallbackProps extends JSX.HTMLAttributes<HTMLDivElement> {
30
+ /**
31
+ * 延迟显示时间(毫秒)
32
+ * @default 0
33
+ */
34
+ delayMs?: number;
35
+ /**
36
+ * 子元素
37
+ */
38
+ children?: JSX.Element;
39
+ }
40
+ export declare const AvatarFallback: Component<AvatarFallbackProps>;
41
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAiB/C,MAAM,WAAW,WAAY,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC7D,KAAK,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAC;CAC1C;AAED,eAAO,MAAM,UAAU,EAAE,SAAS,CAAC,WAAW,CAmB7C,CAAC;AAEF,eAAO,MAAM,MAAM,EAGb,eAAe,CAAC;AAEtB,MAAM,WAAW,gBAAiB,SAAQ,GAAG,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;IAC/E;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;CAC1E;AAED,eAAO,MAAM,WAAW,EAAE,SAAS,CAAC,gBAAgB,CA8CnD,CAAC;AAEF,MAAM,WAAW,mBAAoB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IAC7E;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,CAAC,mBAAmB,CAyDzD,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { createComponent, template, spread, mergeProps, insert, memo } from "solid-js/web";
2
+ import { createContext, splitProps, createSignal, createEffect, Show, onCleanup, useContext } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<img>`);
4
+ const AvatarContext = createContext();
5
+ const useAvatarContext = () => {
6
+ const context = useContext(AvatarContext);
7
+ if (!context) {
8
+ throw new Error("Avatar components must be used within Avatar");
9
+ }
10
+ return context;
11
+ };
12
+ const AvatarBase = (props) => {
13
+ const [local, others] = splitProps(props, ["class", "children"]);
14
+ const [imageLoadingStatus, setImageLoadingStatus] = createSignal("loading");
15
+ const contextValue = {
16
+ imageLoadingStatus,
17
+ setImageLoadingStatus
18
+ };
19
+ return createComponent(AvatarContext.Provider, {
20
+ value: contextValue,
21
+ get children() {
22
+ var _el$ = _tmpl$();
23
+ spread(_el$, mergeProps({
24
+ get ["class"]() {
25
+ return local.class;
26
+ }
27
+ }, others), false, true);
28
+ insert(_el$, () => local.children);
29
+ return _el$;
30
+ }
31
+ });
32
+ };
33
+ const Avatar = Object.assign(AvatarBase, {
34
+ Image: null,
35
+ Fallback: null
36
+ });
37
+ const AvatarImage = (props) => {
38
+ const [local, others] = splitProps(props, ["src", "alt", "class", "onLoadingStatusChange", "onLoad", "onError"]);
39
+ const context = useAvatarContext();
40
+ createEffect(() => {
41
+ if (local.src) {
42
+ context.setImageLoadingStatus("loading");
43
+ }
44
+ });
45
+ const handleLoad = (e) => {
46
+ if (typeof local.onLoad === "function") {
47
+ local.onLoad(e);
48
+ }
49
+ context.setImageLoadingStatus("loaded");
50
+ local.onLoadingStatusChange?.("loaded");
51
+ };
52
+ const handleError = (e) => {
53
+ if (typeof local.onError === "function") {
54
+ local.onError(e);
55
+ }
56
+ context.setImageLoadingStatus("error");
57
+ local.onLoadingStatusChange?.("error");
58
+ };
59
+ return createComponent(Show, {
60
+ get when() {
61
+ return memo(() => !!local.src)() && context.imageLoadingStatus() !== "error";
62
+ },
63
+ get children() {
64
+ var _el$2 = _tmpl$2();
65
+ _el$2.addEventListener("error", handleError);
66
+ _el$2.addEventListener("load", handleLoad);
67
+ spread(_el$2, mergeProps({
68
+ get src() {
69
+ return local.src;
70
+ },
71
+ get alt() {
72
+ return local.alt;
73
+ },
74
+ get ["class"]() {
75
+ return local.class;
76
+ }
77
+ }, others), false, false);
78
+ return _el$2;
79
+ }
80
+ });
81
+ };
82
+ const AvatarFallback = (props) => {
83
+ const [local, others] = splitProps(props, ["delayMs", "class", "children"]);
84
+ const context = useAvatarContext();
85
+ const [showFallback, setShowFallback] = createSignal(false);
86
+ let timeoutId;
87
+ createEffect(() => {
88
+ const status = context.imageLoadingStatus();
89
+ const delayMs = local.delayMs ?? 0;
90
+ if (status === "error") {
91
+ if (timeoutId) {
92
+ clearTimeout(timeoutId);
93
+ timeoutId = void 0;
94
+ }
95
+ setShowFallback(true);
96
+ } else if (status === "loading") {
97
+ if (delayMs === 0) {
98
+ setShowFallback(true);
99
+ } else if (delayMs > 0) {
100
+ setShowFallback(false);
101
+ timeoutId = setTimeout(() => {
102
+ if (context.imageLoadingStatus() === "loading") {
103
+ setShowFallback(true);
104
+ }
105
+ }, delayMs);
106
+ }
107
+ } else if (status === "loaded") {
108
+ if (timeoutId) {
109
+ clearTimeout(timeoutId);
110
+ timeoutId = void 0;
111
+ }
112
+ setShowFallback(false);
113
+ }
114
+ });
115
+ onCleanup(() => {
116
+ if (timeoutId) {
117
+ clearTimeout(timeoutId);
118
+ }
119
+ });
120
+ return createComponent(Show, {
121
+ get when() {
122
+ return showFallback();
123
+ },
124
+ get children() {
125
+ var _el$3 = _tmpl$();
126
+ spread(_el$3, mergeProps({
127
+ get ["class"]() {
128
+ return local.class;
129
+ }
130
+ }, others), false, true);
131
+ insert(_el$3, () => local.children);
132
+ return _el$3;
133
+ }
134
+ });
135
+ };
136
+ Avatar.Image = AvatarImage;
137
+ Avatar.Fallback = AvatarFallback;
138
+ export {
139
+ Avatar,
140
+ AvatarBase,
141
+ AvatarFallback,
142
+ AvatarImage
143
+ };
144
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import { splitProps, Show, createSignal, createContext, useContext, createEffect, onCleanup } from 'solid-js';\nimport type { Component, JSX } from 'solid-js';\n\ninterface AvatarContextValue {\n imageLoadingStatus: () => 'loading' | 'loaded' | 'error';\n setImageLoadingStatus: (status: 'loading' | 'loaded' | 'error') => void;\n}\n\nconst AvatarContext = createContext<AvatarContextValue>();\n\nconst useAvatarContext = () => {\n const context = useContext(AvatarContext);\n if (!context) {\n throw new Error('Avatar components must be used within Avatar');\n }\n return context;\n};\n\nexport interface AvatarProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport interface AvatarComponent extends Component<AvatarProps> {\n Image: Component<AvatarImageProps>;\n Fallback: Component<AvatarFallbackProps>;\n}\n\nexport const AvatarBase: Component<AvatarProps> = (props) => {\n const [local, others] = splitProps(props, ['class', 'children']);\n const [imageLoadingStatus, setImageLoadingStatus] = createSignal<'loading' | 'loaded' | 'error'>('loading');\n\n const contextValue: AvatarContextValue = {\n imageLoadingStatus,\n setImageLoadingStatus,\n };\n\n return (\n <AvatarContext.Provider value={contextValue}>\n <div\n class={local.class}\n {...others}\n >\n {local.children}\n </div>\n </AvatarContext.Provider>\n );\n};\n\nexport const Avatar = Object.assign(AvatarBase, {\n Image: null as unknown as Component<AvatarImageProps>,\n Fallback: null as unknown as Component<AvatarFallbackProps>,\n}) as AvatarComponent;\n\nexport interface AvatarImageProps extends JSX.ImgHTMLAttributes<HTMLImageElement> {\n /**\n * 图片源地址\n */\n src?: string;\n /**\n * 图片加载失败时的替代文本\n */\n alt?: string;\n /**\n * 加载状态变化回调\n */\n onLoadingStatusChange?: (status: 'loading' | 'loaded' | 'error') => void;\n}\n\nexport const AvatarImage: Component<AvatarImageProps> = (props) => {\n const [local, others] = splitProps(props, [\n 'src',\n 'alt',\n 'class',\n 'onLoadingStatusChange',\n 'onLoad',\n 'onError',\n ]);\n const context = useAvatarContext();\n\n // 当 src 变化时,重置加载状态\n createEffect(() => {\n if (local.src) {\n context.setImageLoadingStatus('loading');\n }\n });\n\n const handleLoad: JSX.EventHandler<HTMLImageElement, Event> = (e) => {\n if (typeof local.onLoad === 'function') {\n local.onLoad(e);\n }\n context.setImageLoadingStatus('loaded');\n local.onLoadingStatusChange?.('loaded');\n };\n\n const handleError: JSX.EventHandler<HTMLImageElement, Event> = (e) => {\n if (typeof local.onError === 'function') {\n local.onError(e as any);\n }\n context.setImageLoadingStatus('error');\n local.onLoadingStatusChange?.('error');\n };\n\n return (\n <Show when={local.src && context.imageLoadingStatus() !== 'error'}>\n <img\n src={local.src}\n alt={local.alt}\n class={local.class}\n onLoad={handleLoad}\n onError={handleError}\n {...others}\n />\n </Show>\n );\n};\n\nexport interface AvatarFallbackProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 延迟显示时间(毫秒)\n * @default 0\n */\n delayMs?: number;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const AvatarFallback: Component<AvatarFallbackProps> = (props) => {\n const [local, others] = splitProps(props, ['delayMs', 'class', 'children']);\n const context = useAvatarContext();\n const [showFallback, setShowFallback] = createSignal(false);\n let timeoutId: number | undefined;\n\n // 根据加载状态和延迟时间决定是否显示 fallback\n createEffect(() => {\n const status = context.imageLoadingStatus();\n const delayMs = local.delayMs ?? 0;\n\n if (status === 'error') {\n // 如果加载失败,立即显示\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n setShowFallback(true);\n } else if (status === 'loading') {\n // 如果正在加载,根据延迟时间决定\n if (delayMs === 0) {\n setShowFallback(true);\n } else if (delayMs > 0) {\n setShowFallback(false);\n timeoutId = setTimeout(() => {\n // 延迟后如果仍在加载,显示 fallback\n if (context.imageLoadingStatus() === 'loading') {\n setShowFallback(true);\n }\n }, delayMs) as unknown as number;\n }\n } else if (status === 'loaded') {\n // 如果已加载,隐藏 fallback\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n setShowFallback(false);\n }\n });\n\n onCleanup(() => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n });\n\n return (\n <Show when={showFallback()}>\n <div\n class={local.class}\n {...others}\n >\n {local.children}\n </div>\n </Show>\n );\n};\n\nAvatar.Image = AvatarImage;\nAvatar.Fallback = AvatarFallback;\n\n"],"names":["AvatarContext","createContext","useAvatarContext","context","useContext","Error","AvatarBase","props","local","others","splitProps","imageLoadingStatus","setImageLoadingStatus","createSignal","contextValue","_$createComponent","Provider","value","children","_el$","_tmpl$","_$spread","_$mergeProps","class","_$insert","Avatar","Object","assign","Image","Fallback","AvatarImage","createEffect","src","handleLoad","e","onLoad","onLoadingStatusChange","handleError","onError","Show","when","_$memo","_el$2","_tmpl$2","addEventListener","alt","AvatarFallback","showFallback","setShowFallback","timeoutId","status","delayMs","clearTimeout","undefined","setTimeout","onCleanup","_el$3"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Avatar';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Component, JSX } from 'solid-js';
2
+ export interface CheckboxProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, "checked" | "onChange"> {
3
+ /**
4
+ * 是否选中
5
+ */
6
+ checked?: boolean;
7
+ /**
8
+ * 默认选中状态
9
+ */
10
+ defaultChecked?: boolean;
11
+ /**
12
+ * 选中状态变化回调
13
+ */
14
+ onCheckedChange?: (checked: boolean) => void;
15
+ /**
16
+ * 是否禁用
17
+ * @default false
18
+ */
19
+ disabled?: boolean;
20
+ /**
21
+ * 是否必填
22
+ * @default false
23
+ */
24
+ required?: boolean;
25
+ }
26
+ export declare const Checkbox: Component<CheckboxProps>;
27
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,aACb,SACI,IAAI,CACA,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACzC,SAAS,GAAG,UAAU,CACzB;IACL;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,SAAS,CAAC,aAAa,CA2C7C,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { template, spread, mergeProps } from "solid-js/web";
2
+ import { splitProps, createSignal } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<input type=checkbox>`);
4
+ const Checkbox = (props) => {
5
+ const [local, others] = splitProps(props, ["checked", "defaultChecked", "onCheckedChange", "disabled", "required", "class", "id"]);
6
+ const [internalChecked, setInternalChecked] = createSignal(local.checked ?? local.defaultChecked ?? false);
7
+ const isControlled = () => local.checked !== void 0;
8
+ const checked = () => isControlled() ? local.checked : internalChecked();
9
+ const handleChange = (e) => {
10
+ const target = e.currentTarget;
11
+ const newChecked = target.checked;
12
+ if (!isControlled()) {
13
+ setInternalChecked(newChecked);
14
+ }
15
+ local.onCheckedChange?.(newChecked);
16
+ };
17
+ return (() => {
18
+ var _el$ = _tmpl$();
19
+ _el$.addEventListener("change", handleChange);
20
+ spread(_el$, mergeProps({
21
+ get id() {
22
+ return local.id;
23
+ },
24
+ get checked() {
25
+ return checked();
26
+ },
27
+ get disabled() {
28
+ return local.disabled;
29
+ },
30
+ get required() {
31
+ return local.required;
32
+ },
33
+ get ["class"]() {
34
+ return local.class;
35
+ },
36
+ get ["data-state"]() {
37
+ return checked() ? "checked" : "unchecked";
38
+ },
39
+ get ["aria-checked"]() {
40
+ return checked();
41
+ }
42
+ }, others), false, false);
43
+ return _el$;
44
+ })();
45
+ };
46
+ export {
47
+ Checkbox
48
+ };
49
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import { createSignal, splitProps } from \"solid-js\";\nimport type { Component } from \"solid-js\";\nimport type { JSX } from \"solid-js\";\n\nexport interface CheckboxProps\n extends\n Omit<\n JSX.InputHTMLAttributes<HTMLInputElement>,\n \"checked\" | \"onChange\"\n > {\n /**\n * 是否选中\n */\n checked?: boolean;\n /**\n * 默认选中状态\n */\n defaultChecked?: boolean;\n /**\n * 选中状态变化回调\n */\n onCheckedChange?: (checked: boolean) => void;\n /**\n * 是否禁用\n * @default false\n */\n disabled?: boolean;\n /**\n * 是否必填\n * @default false\n */\n required?: boolean;\n}\n\nexport const Checkbox: Component<CheckboxProps> = (props) => {\n const [local, others] = splitProps(props, [\n \"checked\",\n \"defaultChecked\",\n \"onCheckedChange\",\n \"disabled\",\n \"required\",\n \"class\",\n \"id\",\n ]);\n\n const [internalChecked, setInternalChecked] = createSignal(\n local.checked ?? local.defaultChecked ?? false,\n );\n\n const isControlled = () => local.checked !== undefined;\n const checked = () => (isControlled() ? local.checked! : internalChecked());\n\n const handleChange = (e: Event) => {\n const target = e.currentTarget as HTMLInputElement;\n const newChecked = target.checked;\n\n if (!isControlled()) {\n setInternalChecked(newChecked);\n }\n\n local.onCheckedChange?.(newChecked);\n };\n\n return (\n <input\n type=\"checkbox\"\n id={local.id}\n checked={checked()}\n disabled={local.disabled}\n required={local.required}\n class={local.class}\n onChange={handleChange}\n data-state={checked() ? \"checked\" : \"unchecked\"}\n aria-checked={checked()}\n {...others}\n />\n );\n};\n"],"names":["Checkbox","props","local","others","splitProps","internalChecked","setInternalChecked","createSignal","checked","defaultChecked","isControlled","undefined","handleChange","e","target","currentTarget","newChecked","onCheckedChange","_el$","_tmpl$","addEventListener","_$spread","_$mergeProps","id","disabled","required","class"],"mappings":";;;AAkCO,MAAMA,WAAsCC,CAAAA,UAAU;AACzD,QAAM,CAACC,OAAOC,MAAM,IAAIC,WAAWH,OAAO,CACtC,WACA,kBACA,mBACA,YACA,YACA,SACA,IAAI,CACP;AAED,QAAM,CAACI,iBAAiBC,kBAAkB,IAAIC,aAC1CL,MAAMM,WAAWN,MAAMO,kBAAkB,KAC7C;AAEA,QAAMC,eAAeA,MAAMR,MAAMM,YAAYG;AAC7C,QAAMH,UAAUA,MAAOE,aAAAA,IAAiBR,MAAMM,UAAWH,gBAAAA;AAEzD,QAAMO,eAAeA,CAACC,MAAa;AAC/B,UAAMC,SAASD,EAAEE;AACjB,UAAMC,aAAaF,OAAON;AAE1B,QAAI,CAACE,gBAAgB;AACjBJ,yBAAmBU,UAAU;AAAA,IACjC;AAEAd,UAAMe,kBAAkBD,UAAU;AAAA,EACtC;AAEA,UAAA,MAAA;AAAA,QAAAE,OAAAC,OAAAA;AAAAD,SAAAE,iBAAA,UAQkBR,YAAY;AAAAS,WAAAH,MAAAI,WAAA;AAAA,MAAA,IALtBC,KAAE;AAAA,eAAErB,MAAMqB;AAAAA,MAAE;AAAA,MAAA,IACZf,UAAO;AAAA,eAAEA,QAAAA;AAAAA,MAAS;AAAA,MAAA,IAClBgB,WAAQ;AAAA,eAAEtB,MAAMsB;AAAAA,MAAQ;AAAA,MAAA,IACxBC,WAAQ;AAAA,eAAEvB,MAAMuB;AAAAA,MAAQ;AAAA,MAAA,KAAA,OAAA,IAAA;AAAA,eACjBvB,MAAMwB;AAAAA,MAAK;AAAA,MAAA,KAAA,YAAA,IAAA;AAAA,eAENlB,QAAAA,IAAY,YAAY;AAAA,MAAW;AAAA,MAAA,KAAA,cAAA,IAAA;AAAA,eACjCA,QAAAA;AAAAA,MAAS;AAAA,IAAA,GACnBL,MAAM,GAAA,OAAA,KAAA;AAAA,WAAAe;AAAAA,EAAA,GAAA;AAGtB;"}
@@ -0,0 +1,2 @@
1
+ export * from './Checkbox';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { Component, JSX } from 'solid-js';
2
+ interface CollapsibleContextValue {
3
+ open: () => boolean;
4
+ setOpen: (open: boolean) => void;
5
+ }
6
+ export declare const useCollapsibleContext: () => CollapsibleContextValue;
7
+ export interface CollapsibleProps extends JSX.HTMLAttributes<HTMLDivElement> {
8
+ /**
9
+ * 是否打开
10
+ */
11
+ open?: boolean;
12
+ /**
13
+ * 默认打开状态
14
+ */
15
+ defaultOpen?: boolean;
16
+ /**
17
+ * 打开状态变化回调
18
+ */
19
+ onOpenChange?: (open: boolean) => void;
20
+ /**
21
+ * 是否禁用
22
+ * @default false
23
+ */
24
+ disabled?: boolean;
25
+ /**
26
+ * 子元素
27
+ */
28
+ children?: JSX.Element;
29
+ }
30
+ export interface CollapsibleComponent extends Component<CollapsibleProps> {
31
+ Trigger: Component<CollapsibleTriggerProps>;
32
+ Content: Component<CollapsibleContentProps>;
33
+ }
34
+ export declare const Collapsible: CollapsibleComponent;
35
+ export interface CollapsibleTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {
36
+ /**
37
+ * 子元素
38
+ */
39
+ children?: JSX.Element;
40
+ /**
41
+ * 是否作为子元素传递
42
+ */
43
+ asChild?: boolean;
44
+ }
45
+ export declare const CollapsibleTrigger: Component<CollapsibleTriggerProps>;
46
+ export interface CollapsibleContentProps extends JSX.HTMLAttributes<HTMLDivElement> {
47
+ /**
48
+ * 子元素
49
+ */
50
+ children?: JSX.Element;
51
+ }
52
+ export declare const CollapsibleContent: Component<CollapsibleContentProps>;
53
+ export {};
54
+ //# sourceMappingURL=Collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/Collapsible/Collapsible.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/C,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAID,eAAO,MAAM,qBAAqB,+BAMjC,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IAC1E;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AA8CD,MAAM,WAAW,oBAAqB,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IACvE,OAAO,EAAE,SAAS,CAAC,uBAAuB,CAAC,CAAC;IAC5C,OAAO,EAAE,SAAS,CAAC,uBAAuB,CAAC,CAAC;CAC7C;AAED,eAAO,MAAM,WAAW,EAGlB,oBAAoB,CAAC;AAE3B,MAAM,WAAW,uBAAwB,SAAQ,GAAG,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC1F;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACvB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,uBAAuB,CAwBjE,CAAC;AAEF,MAAM,WAAW,uBAAwB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF;;OAEG;IACH,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAS,CAAC,uBAAuB,CAgBjE,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { delegateEvents, createComponent, template, spread, mergeProps, insert } from "solid-js/web";
2
+ import { createContext, splitProps, createSignal, Show, useContext } from "solid-js";
3
+ var _tmpl$ = /* @__PURE__ */ template(`<div>`), _tmpl$2 = /* @__PURE__ */ template(`<button type=button aria-controls=collapsible-content>`), _tmpl$3 = /* @__PURE__ */ template(`<div id=collapsible-content>`);
4
+ const CollapsibleContext = createContext();
5
+ const useCollapsibleContext = () => {
6
+ const context = useContext(CollapsibleContext);
7
+ if (!context) {
8
+ throw new Error("Collapsible components must be used within Collapsible");
9
+ }
10
+ return context;
11
+ };
12
+ const CollapsibleBase = (props) => {
13
+ const [local, others] = splitProps(props, ["open", "defaultOpen", "onOpenChange", "disabled", "class", "children"]);
14
+ const [internalOpen, setInternalOpen] = createSignal(local.open ?? local.defaultOpen ?? false);
15
+ const isControlled = () => local.open !== void 0;
16
+ const open = () => isControlled() ? local.open : internalOpen();
17
+ const handleOpenChange = (newOpen) => {
18
+ if (local.disabled) return;
19
+ if (!isControlled()) {
20
+ setInternalOpen(newOpen);
21
+ }
22
+ local.onOpenChange?.(newOpen);
23
+ };
24
+ const contextValue = {
25
+ open,
26
+ setOpen: handleOpenChange
27
+ };
28
+ return createComponent(CollapsibleContext.Provider, {
29
+ value: contextValue,
30
+ get children() {
31
+ var _el$ = _tmpl$();
32
+ spread(_el$, mergeProps({
33
+ get ["class"]() {
34
+ return local.class;
35
+ },
36
+ get ["data-state"]() {
37
+ return open() ? "open" : "closed";
38
+ },
39
+ get ["data-disabled"]() {
40
+ return local.disabled ? "" : void 0;
41
+ }
42
+ }, others), false, true);
43
+ insert(_el$, () => local.children);
44
+ return _el$;
45
+ }
46
+ });
47
+ };
48
+ const Collapsible = Object.assign(CollapsibleBase, {
49
+ Trigger: null,
50
+ Content: null
51
+ });
52
+ const CollapsibleTrigger = (props) => {
53
+ const [local, others] = splitProps(props, ["children", "asChild", "class", "onClick"]);
54
+ const context = useCollapsibleContext();
55
+ const handleClick = (e) => {
56
+ if (typeof local.onClick === "function") {
57
+ local.onClick(e);
58
+ }
59
+ context.setOpen(!context.open());
60
+ };
61
+ return (() => {
62
+ var _el$2 = _tmpl$2();
63
+ _el$2.$$click = handleClick;
64
+ spread(_el$2, mergeProps({
65
+ get ["class"]() {
66
+ return local.class;
67
+ },
68
+ get ["aria-expanded"]() {
69
+ return context.open();
70
+ },
71
+ get ["data-state"]() {
72
+ return context.open() ? "open" : "closed";
73
+ }
74
+ }, others), false, true);
75
+ insert(_el$2, () => local.children);
76
+ return _el$2;
77
+ })();
78
+ };
79
+ const CollapsibleContent = (props) => {
80
+ const [local, others] = splitProps(props, ["children", "class"]);
81
+ const context = useCollapsibleContext();
82
+ return createComponent(Show, {
83
+ get when() {
84
+ return context.open();
85
+ },
86
+ get children() {
87
+ var _el$3 = _tmpl$3();
88
+ spread(_el$3, mergeProps({
89
+ get ["class"]() {
90
+ return local.class;
91
+ },
92
+ get ["data-state"]() {
93
+ return context.open() ? "open" : "closed";
94
+ }
95
+ }, others), false, true);
96
+ insert(_el$3, () => local.children);
97
+ return _el$3;
98
+ }
99
+ });
100
+ };
101
+ Collapsible.Trigger = CollapsibleTrigger;
102
+ Collapsible.Content = CollapsibleContent;
103
+ delegateEvents(["click"]);
104
+ export {
105
+ Collapsible,
106
+ CollapsibleContent,
107
+ CollapsibleTrigger,
108
+ useCollapsibleContext
109
+ };
110
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sources":["../../../src/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { splitProps, createSignal, createContext, useContext, Show } from 'solid-js';\nimport type { Component, JSX } from 'solid-js';\n\ninterface CollapsibleContextValue {\n open: () => boolean;\n setOpen: (open: boolean) => void;\n}\n\nconst CollapsibleContext = createContext<CollapsibleContextValue>();\n\nexport const useCollapsibleContext = () => {\n const context = useContext(CollapsibleContext);\n if (!context) {\n throw new Error('Collapsible components must be used within Collapsible');\n }\n return context;\n};\n\nexport interface CollapsibleProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 是否打开\n */\n open?: boolean;\n /**\n * 默认打开状态\n */\n defaultOpen?: boolean;\n /**\n * 打开状态变化回调\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * 是否禁用\n * @default false\n */\n disabled?: boolean;\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nconst CollapsibleBase: Component<CollapsibleProps> = (props) => {\n const [local, others] = splitProps(props, [\n 'open',\n 'defaultOpen',\n 'onOpenChange',\n 'disabled',\n 'class',\n 'children',\n ]);\n\n const [internalOpen, setInternalOpen] = createSignal(\n local.open ?? local.defaultOpen ?? false\n );\n\n const isControlled = () => local.open !== undefined;\n const open = () => (isControlled() ? local.open! : internalOpen());\n\n const handleOpenChange = (newOpen: boolean) => {\n if (local.disabled) return;\n if (!isControlled()) {\n setInternalOpen(newOpen);\n }\n local.onOpenChange?.(newOpen);\n };\n\n const contextValue: CollapsibleContextValue = {\n open,\n setOpen: handleOpenChange,\n };\n\n return (\n <CollapsibleContext.Provider value={contextValue}>\n <div\n class={local.class}\n data-state={open() ? 'open' : 'closed'}\n data-disabled={local.disabled ? '' : undefined}\n {...others}\n >\n {local.children}\n </div>\n </CollapsibleContext.Provider>\n );\n};\n\nexport interface CollapsibleComponent extends Component<CollapsibleProps> {\n Trigger: Component<CollapsibleTriggerProps>;\n Content: Component<CollapsibleContentProps>;\n}\n\nexport const Collapsible = Object.assign(CollapsibleBase, {\n Trigger: null as unknown as Component<CollapsibleTriggerProps>,\n Content: null as unknown as Component<CollapsibleContentProps>,\n}) as CollapsibleComponent;\n\nexport interface CollapsibleTriggerProps extends JSX.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n /**\n * 是否作为子元素传递\n */\n asChild?: boolean;\n}\n\nexport const CollapsibleTrigger: Component<CollapsibleTriggerProps> = (props) => {\n const [local, others] = splitProps(props, ['children', 'asChild', 'class', 'onClick']);\n const context = useCollapsibleContext();\n\n const handleClick: JSX.EventHandler<HTMLButtonElement, MouseEvent> = (e) => {\n if (typeof local.onClick === 'function') {\n local.onClick(e);\n }\n context.setOpen(!context.open());\n };\n\n return (\n <button\n type=\"button\"\n class={local.class}\n onClick={handleClick}\n aria-expanded={context.open()}\n aria-controls=\"collapsible-content\"\n data-state={context.open() ? 'open' : 'closed'}\n {...others}\n >\n {local.children}\n </button>\n );\n};\n\nexport interface CollapsibleContentProps extends JSX.HTMLAttributes<HTMLDivElement> {\n /**\n * 子元素\n */\n children?: JSX.Element;\n}\n\nexport const CollapsibleContent: Component<CollapsibleContentProps> = (props) => {\n const [local, others] = splitProps(props, ['children', 'class']);\n const context = useCollapsibleContext();\n\n return (\n <Show when={context.open()}>\n <div\n id=\"collapsible-content\"\n class={local.class}\n data-state={context.open() ? 'open' : 'closed'}\n {...others}\n >\n {local.children}\n </div>\n </Show>\n );\n};\n\nCollapsible.Trigger = CollapsibleTrigger;\nCollapsible.Content = CollapsibleContent;\n\n"],"names":["CollapsibleContext","createContext","useCollapsibleContext","context","useContext","Error","CollapsibleBase","props","local","others","splitProps","internalOpen","setInternalOpen","createSignal","open","defaultOpen","isControlled","undefined","handleOpenChange","newOpen","disabled","onOpenChange","contextValue","setOpen","_$createComponent","Provider","value","children","_el$","_tmpl$","_$spread","_$mergeProps","class","_$insert","Collapsible","Object","assign","Trigger","Content","CollapsibleTrigger","handleClick","e","onClick","_el$2","_tmpl$2","$$click","CollapsibleContent","Show","when","_el$3","_tmpl$3","_$delegateEvents"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './Collapsible';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Collapsible/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}