solid-tom-ui 0.2.4 → 1.0.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.
- package/README.md +237 -237
- package/dist/components/badge/badge.d.ts +0 -1
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/solid-ui.css +1 -1
- package/dist/src/components/avatar/avatar.js.map +1 -0
- package/dist/src/components/badge/badge.js +2 -0
- package/dist/src/components/badge/badge.js.map +1 -0
- package/dist/src/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/{components → src/components}/button/button.js +1 -1
- package/dist/src/components/button/button.js.map +1 -0
- package/dist/src/components/carousel/carousel.js +2 -0
- package/dist/src/components/carousel/carousel.js.map +1 -0
- package/dist/src/components/chat-bubble/chatBubble.js.map +1 -0
- package/dist/src/components/checkbox/checkbox.js.map +1 -0
- package/dist/src/components/code-preview/code-preview.js +2 -0
- package/dist/src/components/code-preview/code-preview.js.map +1 -0
- package/dist/src/components/collapse/collapse.js.map +1 -0
- package/dist/src/components/context-menu/context-menu.js +2 -0
- package/dist/src/components/context-menu/context-menu.js.map +1 -0
- package/dist/src/components/context-menu/context-menu.store.js.map +1 -0
- package/dist/src/components/diff/diff.js.map +1 -0
- package/dist/src/components/divider/divider.js.map +1 -0
- package/dist/src/components/drawer/drawer.js +2 -0
- package/dist/src/components/drawer/drawer.js.map +1 -0
- package/dist/src/components/dropdown/dropdown.js.map +1 -0
- package/dist/src/components/dropdown/dropdown.store.js.map +1 -0
- package/dist/src/components/float-button/float-button.js.map +1 -0
- package/dist/src/components/hover-3d-image/hover-3d-image.js.map +1 -0
- package/dist/src/components/image-preview/image-preview.js +2 -0
- package/dist/src/components/image-preview/image-preview.js.map +1 -0
- package/dist/src/components/indicator/indicator.js.map +1 -0
- package/dist/src/components/input/input.js.map +1 -0
- package/dist/src/components/input/input.utils.js.map +1 -0
- package/dist/src/components/input/variants/input-color.js.map +1 -0
- package/dist/src/components/input/variants/input-date.js.map +1 -0
- package/dist/src/components/input/variants/input-number.js +2 -0
- package/dist/src/components/input/variants/input-number.js.map +1 -0
- package/dist/src/components/input/variants/input-otp.js.map +1 -0
- package/dist/src/components/input/variants/input-password.js +2 -0
- package/dist/src/components/input/variants/input-password.js.map +1 -0
- package/dist/src/components/input/variants/input-radio.js.map +1 -0
- package/dist/src/components/input/variants/input-range.js.map +1 -0
- package/dist/src/components/input/variants/input-text.js +2 -0
- package/dist/src/components/input/variants/input-text.js.map +1 -0
- package/dist/src/components/input/variants/input-textarea.js +2 -0
- package/dist/src/components/input/variants/input-textarea.js.map +1 -0
- package/dist/src/components/loading/loading.js +2 -0
- package/dist/src/components/loading/loading.js.map +1 -0
- package/dist/src/components/mansory/mansory.js.map +1 -0
- package/dist/src/components/menu/menu.js +2 -0
- package/dist/src/components/menu/menu.js.map +1 -0
- package/dist/src/components/modal/modal.js +2 -0
- package/dist/src/components/modal/modal.js.map +1 -0
- package/dist/src/components/modal/modalContext.js.map +1 -0
- package/dist/src/components/pagination/pagination.js +2 -0
- package/dist/src/components/pagination/pagination.js.map +1 -0
- package/dist/src/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/src/components/qr-code/qr-code.js +2 -0
- package/dist/src/components/qr-code/qr-code.js.map +1 -0
- package/dist/src/components/rating/rating.js.map +1 -0
- package/dist/src/components/select/select.js +2 -0
- package/dist/src/components/select/select.js.map +1 -0
- package/dist/src/components/select-zone/select-zone.js.map +1 -0
- package/dist/src/components/skeleton/skeleton.js.map +1 -0
- package/dist/src/components/slider/slider.js.map +1 -0
- package/dist/src/components/splitter/splitter.js.map +1 -0
- package/dist/src/components/steps/steps.js +2 -0
- package/dist/src/components/steps/steps.js.map +1 -0
- package/dist/src/components/swap/swap.js.map +1 -0
- package/dist/src/components/switch/switch.js.map +1 -0
- package/dist/src/components/tab/tab.js +2 -0
- package/dist/src/components/tab/tab.js.map +1 -0
- package/dist/src/components/table/table.js +2 -0
- package/dist/src/components/table/table.js.map +1 -0
- package/dist/src/components/text-rotate/text-rotate.js.map +1 -0
- package/dist/src/components/timeline/timeline.js +2 -0
- package/dist/src/components/timeline/timeline.js.map +1 -0
- package/dist/src/components/toast/icons/ErrorIcon.js.map +1 -0
- package/dist/src/components/toast/icons/IconCircle.js.map +1 -0
- package/dist/src/components/toast/icons/InfoIcon.js.map +1 -0
- package/dist/src/components/toast/icons/LoaderIcon.js.map +1 -0
- package/dist/src/components/toast/icons/SuccessIcon.js.map +1 -0
- package/dist/src/components/toast/icons/WarningIcon.js.map +1 -0
- package/dist/src/components/toast/toast.js +2 -0
- package/dist/src/components/toast/toast.js.map +1 -0
- package/dist/src/components/toast/toast.store.js.map +1 -0
- package/dist/src/components/tooltip/tooltip.js.map +1 -0
- package/dist/{components → src/components}/tour/tour.js +1 -1
- package/dist/src/components/tour/tour.js.map +1 -0
- package/dist/src/components/upload/upload.js +2 -0
- package/dist/src/components/upload/upload.js.map +1 -0
- package/dist/src/components/z-index/z-index.context.js.map +1 -0
- package/dist/src/components/z-index/z-index.js.map +1 -0
- package/dist/src/components/z-index/z-index.store.js.map +1 -0
- package/dist/src/components/z-index/z-index.types.js.map +1 -0
- package/dist/src/utils/cn.js.map +1 -0
- package/dist/src/utils/element-tracker.js.map +1 -0
- package/dist/src/utils/helper.js.map +1 -0
- package/dist/src/utils/hoc.js.map +1 -0
- package/dist/src/utils/shiki-highlight.js +2 -0
- package/dist/src/utils/shiki-highlight.js.map +1 -0
- package/package.json +120 -120
- package/dist/components/avatar/avatar.js.map +0 -1
- package/dist/components/badge/badge.js +0 -2
- package/dist/components/badge/badge.js.map +0 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +0 -1
- package/dist/components/button/button.js.map +0 -1
- package/dist/components/carousel/carousel.js +0 -2
- package/dist/components/carousel/carousel.js.map +0 -1
- package/dist/components/chat-bubble/chatBubble.js.map +0 -1
- package/dist/components/checkbox/checkbox.js.map +0 -1
- package/dist/components/code-preview/code-preview.js +0 -2
- package/dist/components/code-preview/code-preview.js.map +0 -1
- package/dist/components/collapse/collapse.js.map +0 -1
- package/dist/components/context-menu/context-menu.js +0 -2
- package/dist/components/context-menu/context-menu.js.map +0 -1
- package/dist/components/context-menu/context-menu.store.js.map +0 -1
- package/dist/components/diff/diff.js.map +0 -1
- package/dist/components/divider/divider.js.map +0 -1
- package/dist/components/drawer/drawer.js +0 -2
- package/dist/components/drawer/drawer.js.map +0 -1
- package/dist/components/dropdown/dropdown.js.map +0 -1
- package/dist/components/dropdown/dropdown.store.js.map +0 -1
- package/dist/components/float-button/float-button.js.map +0 -1
- package/dist/components/hover-3d-image/hover-3d-image.js.map +0 -1
- package/dist/components/image-preview/image-preview.js +0 -2
- package/dist/components/image-preview/image-preview.js.map +0 -1
- package/dist/components/indicator/indicator.js.map +0 -1
- package/dist/components/input/input.js.map +0 -1
- package/dist/components/input/input.utils.js.map +0 -1
- package/dist/components/input/variants/input-color.js.map +0 -1
- package/dist/components/input/variants/input-date.js.map +0 -1
- package/dist/components/input/variants/input-number.js +0 -2
- package/dist/components/input/variants/input-number.js.map +0 -1
- package/dist/components/input/variants/input-otp.js.map +0 -1
- package/dist/components/input/variants/input-password.js +0 -2
- package/dist/components/input/variants/input-password.js.map +0 -1
- package/dist/components/input/variants/input-radio.js.map +0 -1
- package/dist/components/input/variants/input-range.js.map +0 -1
- package/dist/components/input/variants/input-text.js +0 -2
- package/dist/components/input/variants/input-text.js.map +0 -1
- package/dist/components/input/variants/input-textarea.js +0 -2
- package/dist/components/input/variants/input-textarea.js.map +0 -1
- package/dist/components/loading/loading.js +0 -2
- package/dist/components/loading/loading.js.map +0 -1
- package/dist/components/mansory/mansory.js.map +0 -1
- package/dist/components/menu/menu.js +0 -2
- package/dist/components/menu/menu.js.map +0 -1
- package/dist/components/modal/modal.js +0 -2
- package/dist/components/modal/modal.js.map +0 -1
- package/dist/components/modal/modalContext.js.map +0 -1
- package/dist/components/pagination/pagination.js +0 -2
- package/dist/components/pagination/pagination.js.map +0 -1
- package/dist/components/progress-bar/progress-bar.js.map +0 -1
- package/dist/components/qr-code/qr-code.js +0 -2
- package/dist/components/qr-code/qr-code.js.map +0 -1
- package/dist/components/rating/rating.js.map +0 -1
- package/dist/components/select/select.js +0 -2
- package/dist/components/select/select.js.map +0 -1
- package/dist/components/select-zone/select-zone.js.map +0 -1
- package/dist/components/skeleton/skeleton.js.map +0 -1
- package/dist/components/slider/slider.js.map +0 -1
- package/dist/components/splitter/splitter.js.map +0 -1
- package/dist/components/steps/steps.js +0 -2
- package/dist/components/steps/steps.js.map +0 -1
- package/dist/components/swap/swap.js.map +0 -1
- package/dist/components/switch/switch.js.map +0 -1
- package/dist/components/tab/tab.js +0 -2
- package/dist/components/tab/tab.js.map +0 -1
- package/dist/components/table/table.js +0 -2
- package/dist/components/table/table.js.map +0 -1
- package/dist/components/text-rotate/text-rotate.js.map +0 -1
- package/dist/components/timeline/timeline.js +0 -2
- package/dist/components/timeline/timeline.js.map +0 -1
- package/dist/components/toast/icons/ErrorIcon.js.map +0 -1
- package/dist/components/toast/icons/IconCircle.js.map +0 -1
- package/dist/components/toast/icons/InfoIcon.js.map +0 -1
- package/dist/components/toast/icons/LoaderIcon.js.map +0 -1
- package/dist/components/toast/icons/SuccessIcon.js.map +0 -1
- package/dist/components/toast/icons/WarningIcon.js.map +0 -1
- package/dist/components/toast/toast.js +0 -2
- package/dist/components/toast/toast.js.map +0 -1
- package/dist/components/toast/toast.store.js.map +0 -1
- package/dist/components/tooltip/tooltip.js.map +0 -1
- package/dist/components/tour/tour.js.map +0 -1
- package/dist/components/upload/upload.js +0 -2
- package/dist/components/upload/upload.js.map +0 -1
- package/dist/components/z-index/z-index.context.js.map +0 -1
- package/dist/components/z-index/z-index.js.map +0 -1
- package/dist/components/z-index/z-index.store.js.map +0 -1
- package/dist/components/z-index/z-index.types.js.map +0 -1
- package/dist/utils/cn.js.map +0 -1
- package/dist/utils/element-tracker.js.map +0 -1
- package/dist/utils/helper.js.map +0 -1
- package/dist/utils/hoc.js.map +0 -1
- package/dist/utils/shiki-highlight.js +0 -2
- package/dist/utils/shiki-highlight.js.map +0 -1
- /package/dist/{components → src/components}/avatar/avatar.js +0 -0
- /package/dist/{components → src/components}/breadcrumb/breadcrumb.js +0 -0
- /package/dist/{components → src/components}/chat-bubble/chatBubble.js +0 -0
- /package/dist/{components → src/components}/checkbox/checkbox.js +0 -0
- /package/dist/{components → src/components}/collapse/collapse.js +0 -0
- /package/dist/{components → src/components}/context-menu/context-menu.store.js +0 -0
- /package/dist/{components → src/components}/diff/diff.js +0 -0
- /package/dist/{components → src/components}/divider/divider.js +0 -0
- /package/dist/{components → src/components}/dropdown/dropdown.js +0 -0
- /package/dist/{components → src/components}/dropdown/dropdown.store.js +0 -0
- /package/dist/{components → src/components}/float-button/float-button.js +0 -0
- /package/dist/{components → src/components}/hover-3d-image/hover-3d-image.js +0 -0
- /package/dist/{components → src/components}/indicator/indicator.js +0 -0
- /package/dist/{components → src/components}/input/input.js +0 -0
- /package/dist/{components → src/components}/input/input.utils.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-color.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-date.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-otp.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-radio.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-range.js +0 -0
- /package/dist/{components → src/components}/mansory/mansory.js +0 -0
- /package/dist/{components → src/components}/modal/modalContext.js +0 -0
- /package/dist/{components → src/components}/progress-bar/progress-bar.js +0 -0
- /package/dist/{components → src/components}/rating/rating.js +0 -0
- /package/dist/{components → src/components}/select-zone/select-zone.js +0 -0
- /package/dist/{components → src/components}/skeleton/skeleton.js +0 -0
- /package/dist/{components → src/components}/slider/slider.js +0 -0
- /package/dist/{components → src/components}/splitter/splitter.js +0 -0
- /package/dist/{components → src/components}/swap/swap.js +0 -0
- /package/dist/{components → src/components}/switch/switch.js +0 -0
- /package/dist/{components → src/components}/table/index.js +0 -0
- /package/dist/{components → src/components}/text-rotate/text-rotate.js +0 -0
- /package/dist/{components → src/components}/toast/icons/ErrorIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/IconCircle.js +0 -0
- /package/dist/{components → src/components}/toast/icons/InfoIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/LoaderIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/SuccessIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/WarningIcon.js +0 -0
- /package/dist/{components → src/components}/toast/toast.store.js +0 -0
- /package/dist/{components → src/components}/tooltip/tooltip.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.context.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.store.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.types.js +0 -0
- /package/dist/{lib.js → src/lib.js} +0 -0
- /package/dist/{utils → src/utils}/cn.js +0 -0
- /package/dist/{utils → src/utils}/element-tracker.js +0 -0
- /package/dist/{utils → src/utils}/helper.js +0 -0
- /package/dist/{utils → src/utils}/hoc.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","names":["cn","cva","VariantProps","Component","createMemo","For","Match","mergeProps","ParentComponent","Show","Switch","AvatarGroup","AvatarProps","variants","mask","heart","hexagon","squircle","square","circle","status","online","offline","AvatarVariantsProps","Avatar","p","ReturnType","const","effect","_el$","_tmpl$","_$insert","_$createComponent","children","when","placeholder","Element","image","_el$2","_c$","_$memo","_el$3","_tmpl$2","_$effect","_$setAttribute","_p$","_v$","class","avatar","_v$2","width","e","_$className","t","_$setStyleProperty","undefined","root","Group","props","renderWidth","_el$4","each","avatars","_$mergeProps","counter","_el$5","_tmpl$3","_el$6","firstChild","_el$7","_v$3","_v$4","_v$5","a","group"],"sources":["../../../../src/components/avatar/avatar.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport {\r\n Component,\r\n createMemo,\r\n For,\r\n Match,\r\n mergeProps,\r\n ParentComponent,\r\n Show,\r\n Switch,\r\n} from 'solid-js';\r\nimport type { AvatarGroup, AvatarProps } from './avatar.types';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n mask: {\r\n heart: 'mask mask-heart',\r\n hexagon: 'mask mask-hexagon',\r\n squircle: 'mask mask-squircle',\r\n square: 'rounded-lg',\r\n circle: 'rounded-full',\r\n },\r\n status: {\r\n online: 'avatar-online',\r\n offline: 'avatar-offline',\r\n },\r\n },\r\n});\r\n\r\nexport type AvatarVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport function Avatar(p: AvatarProps): ReturnType<Component<AvatarProps>> {\r\n p = mergeProps(\r\n {\r\n mask: 'circle' as const,\r\n effect: true,\r\n },\r\n p,\r\n );\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'avatar',\r\n p.placeholder && 'avatar-placeholder',\r\n variants({ status: p.status }),\r\n p.effect && 'avatar-effect',\r\n p.class?.root,\r\n )}\r\n >\r\n <Switch>\r\n <Match when={p.placeholder}>{p.placeholder as Element}</Match>\r\n <Match when={p.image}>\r\n <div\r\n class={cn(variants({ mask: p.mask }), p.class?.avatar)}\r\n style={{ width: typeof p.width === 'string' ? p.width : `${p.width}px` }}\r\n >\r\n {p.image && <img src={p.image} />}\r\n </div>\r\n </Match>\r\n </Switch>\r\n </div>\r\n );\r\n}\r\n\r\nAvatar.Group = (props: AvatarGroup): ReturnType<ParentComponent> => {\r\n const renderWidth = createMemo(() => {\r\n return typeof props.width === 'string' ? props.width : `${props.width}px`;\r\n });\r\n return (\r\n <div class={cn('avatar-group -space-x-6', props.class?.group)}>\r\n <For each={props.avatars}>{avatar => <Avatar {...avatar} width={renderWidth()} />}</For>\r\n <Show when={props.counter}>\r\n <div class={cn('avatar avatar-placeholder', props.class?.placeholder)}>\r\n <div\r\n class={cn('bg-neutral text-neutral-content', props.class?.counter)}\r\n style={{\r\n width: renderWidth(),\r\n }}\r\n >\r\n +{props.counter}\r\n </div>\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{className as n,effect as r,insert as i,memo as a,template as o}from"solid-js/web";import{cva as s}from"class-variance-authority";import{mergeProps as c}from"solid-js";var l=o(`<div>`),u=o(`<span>`),d=s(``,{variants:{size:{"3xs":`bad-3xs`,"2xs":`bad-2xs`,xs:`bad-xs`,sm:`bad-sm`,md:`bad-md`,lg:`bad-lg`,xl:`bad-xl`,"2xl":`bad-2xl`,"3xl":`bad-3xl`},variants:{outline:`bad03`,soft:`bad02`,dashed:`bad04`}}}),f=o=>(o=c({size:`md`,color:`primary`,content:`lorem`,variants:`soft`},o),(()=>{var s=l();return i(s,(()=>{var t=a(()=>typeof o.content==`string`);return()=>t()?(()=>{var t=u();return i(t,()=>o.content),r(()=>n(t,e(`bad01`,o.class?.child))),t})():(()=>{var e=l();return i(e,()=>o.content),r(()=>n(e,o.class?.child)),e})()})()),r(()=>n(s,e(`bad00`,d({size:o.size,variants:o.variants}),t(o.color),o.class?.root))),s})());export{f as Badge};
|
|
2
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.js","names":["cn","cva","VariantProps","Component","mergeProps","BadgeProps","getColor","variants","size","xs","sm","md","lg","xl","outline","soft","dashed","BadgeVariantsProps","Badge","p","color","content","const","_el$","_tmpl$","_$insert","_c$","_$memo","_el$2","_tmpl$2","_$effect","_$className","class","child","_el$3","Element","root"],"sources":["../../../../src/components/badge/badge.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, mergeProps } from 'solid-js';\r\nimport type { BadgeProps } from './badge.types';\r\nimport { getColor } from '@/utils/helper';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n size: {\r\n '3xs': 'bad-3xs',\r\n '2xs': 'bad-2xs',\r\n xs: 'bad-xs',\r\n sm: 'bad-sm',\r\n md: 'bad-md',\r\n lg: 'bad-lg',\r\n xl: 'bad-xl',\r\n '2xl': 'bad-2xl',\r\n '3xl': 'bad-3xl',\r\n },\r\n variants: {\r\n outline: 'bad03',\r\n soft: 'bad02',\r\n dashed: 'bad04',\r\n },\r\n },\r\n});\r\nexport type BadgeVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Badge: Component<BadgeProps> = p => {\r\n p = mergeProps({ size: 'md', color: 'primary', content: 'lorem', variants: 'soft' } as const, p);\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'bad00',\r\n variants({ size: p.size, variants: p.variants }),\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n >\r\n {typeof p.content === 'string' ? (\r\n <span class={cn('bad01', p.class?.child)}>{p.content}</span>\r\n ) : (\r\n <div class={p.class?.child}>{p.content as Element}</div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"mappings":"qSAMMO,EAAWN,EAAI,GAAI,CACvBM,SAAU,CACRC,KAAM,CACJ,MAAO,UACP,MAAO,UACPC,GAAI,SACJC,GAAI,SACJC,GAAI,SACJC,GAAI,SACJC,GAAI,SACJ,MAAO,UACP,MAAO,UACR,CACDN,SAAU,CACRO,QAAS,QACTC,KAAM,QACNC,OAAQ,QACV,CACF,CACD,CAAC,CAGWE,EAA+BC,IAC1CA,EAAIf,EAAW,CAAEI,KAAM,KAAMY,MAAO,UAAWC,QAAS,QAASd,SAAU,OAAQ,CAAWY,EAAE,MAEhG,CAAA,IAAAI,EAAAC,GAAA,CAOK,OAPLC,EAAAF,OAAA,CAAA,IAAAG,EAAAC,MASK,OAAOR,EAAEE,SAAY,SAAQ,CAAA,UAA7BK,GAAA,MAAA,CAAA,IAAAE,EAAAC,GAAA,CACyC,OADzCJ,EAAAG,MAC4CT,EAAEE,QAAO,CAAAS,MAAAC,EAAAH,EAAvC5B,EAAG,QAASmB,EAAEa,OAAOC,MAAM,CAAA,CAAA,CAAAL,KAAA,MAAA,CAAA,IAAAM,EAAAV,GAAA,CAEd,OAFcC,EAAAS,MAEXf,EAAEE,QAAkB,CAAAS,MAAAC,EAAAG,EAArCf,EAAEa,OAAOC,MAAK,CAAA,CAAAC,KAC3B,IAAA,CAAA,CAAAJ,MAAAC,EAAAR,EAXMvB,EACL,QACAO,EAAS,CAAEC,KAAMW,EAAEX,KAAMD,SAAUY,EAAEZ,SAAU,CAAC,CAChDD,EAASa,EAAEC,MAAM,CACjBD,EAAEa,OAAOI,KACV,CAAA,CAAA,CAAAb,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.js","names":["SolidComponent","cn","Component","createMemo","For","BreadcrumbProps","items","class","Partial","Record","separate","onItemClick","e","MouseEvent","Breadcrumb","p","length","_el$","_tmpl$","_el$2","firstChild","$$click","target","tagName","_$insert","_$createComponent","each","children","item","index","_el$3","_tmpl$2","Element","_$effect","_$className","_$memo","root","_$delegateEvents"],"sources":["../../../../src/components/breadcrumb/breadcrumb.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { Component, createMemo, For } from 'solid-js';\r\n\r\ntype BreadcrumbProps = {\r\n items: SolidComponent[];\r\n class?: Partial<Record<'root' | 'item', string>>;\r\n separate?: SolidComponent;\r\n onItemClick?: (e: MouseEvent) => void;\r\n};\r\nexport const Breadcrumb: Component<BreadcrumbProps> = p => {\r\n const length = createMemo(() => p.items.length - 1);\r\n return (\r\n <div class={cn('breadcrumbs', p.separate && 'separate', p.class?.root)}>\r\n <ul\r\n onClick={e => {\r\n if (e.target.tagName !== 'UL' && p.onItemClick) {\r\n p.onItemClick(e);\r\n }\r\n }}\r\n >\r\n <For each={p.items}>\r\n {(item, index) => {\r\n return (\r\n <>\r\n <li class={p.class?.item}>{item as Element}</li>\r\n {index() < length() && p.separate}\r\n </>\r\n );\r\n }}\r\n </For>\r\n </ul>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"yPAUac,EAAyCC,GAAK,CACzD,IAAMC,EAASb,MAAiBY,EAAET,MAAMU,OAAS,EAAE,CACnD,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WACwE,MADxED,GAAAE,QAGeT,GAAK,CACRA,EAAEU,OAAOC,UAAY,MAAQR,EAAEJ,aACjCI,EAAEJ,YAAYC,EAAE,EAEnBY,EAAAL,EAAAM,EAEArB,EAAG,CAAA,IAACsB,MAAI,CAAA,OAAEX,EAAET,OAAKqB,UACdC,EAAMC,IACN,MAAA,CAAA,IAAAC,EAAAC,GAAA,CAE4B,OAF5BP,EAAAM,EAE+BF,EAAe,CAAAK,MAAAC,EAAAJ,EAA/Bf,EAAER,OAAOqB,KAAI,CAAA,CAAAE,KAAA,CAAAK,MACvBA,MAAAN,GAAO,CAAGb,GAAQ,CAAA,EAAA,EAAID,EAAEL,SAAQ,CAAA,CAGtC,CAAA,CAAA,CAAAuB,MAAAC,EAAAjB,EAhBKhB,EAAG,cAAec,EAAEL,UAAY,WAAYK,EAAER,OAAO6B,KAAK,CAAA,CAAA,CAAAnB,KAAA,EAqBxEoB,EAAA,CAAA,QAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{cn as e}from"../../utils/cn.js";import{className as t,createComponent as n,effect as r,insert as i,memo as a,mergeProps as o,setStyleProperty as s,spread as c,template as l}from"solid-js/web";import{cva as u}from"class-variance-authority";import{Match as d,Switch as f,mergeProps as p,splitProps as m}from"solid-js";var h=l(`<span>`),g=l(`<button>`),_=l(`<span class=mb-px>`);function v(e,t=300,n={from:`20%`,to:`10%`}){e&&e.animate([{boxShadow:`0 0 0 0 rgba(from var(--btn-color) r g b / ${n.from})`},{boxShadow:`0 0 0 6px rgba(from var(--btn-color) r g b / ${n.to})`}],{duration:t,easing:`linear`})}var y=u(``,{variants:{size:{"4xs":`
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{className as t,createComponent as n,effect as r,insert as i,memo as a,mergeProps as o,setStyleProperty as s,spread as c,template as l}from"solid-js/web";import{cva as u}from"class-variance-authority";import{Match as d,Switch as f,mergeProps as p,splitProps as m}from"solid-js";var h=l(`<span>`),g=l(`<button>`),_=l(`<span class=mb-px>`);function v(e,t=300,n={from:`20%`,to:`10%`}){e&&e.animate([{boxShadow:`0 0 0 0 rgba(from var(--btn-color) r g b / ${n.from})`},{boxShadow:`0 0 0 6px rgba(from var(--btn-color) r g b / ${n.to})`}],{duration:t,easing:`linear`})}var y=u(``,{variants:{size:{"4xs":`bt-4xs`,"3xs":`bt-3xs`,"2xs":`bt-2xs`,xs:`bt-xs`,sm:`bt-sm`,md:`bt-md`,lg:`bt-lg`,xl:`bt-xl`,"2xl":`bt-2xl`,"3xl":`bt-3xl`,"4xl":`bt-4xl`},color:{neutral:`btn-neutral`,primary:`btn-primary`,secondary:`btn-secondary`,accent:`btn-accent`,info:`btn-info`,success:`btn-success`,warning:`btn-warning`,error:`btn-error`},variant:{default:`btn-default`,simple:`btn-default border-transparent`,solid:``,outline:`btn-outline`,dashed:`btn-dash`,soft:`btn-soft`,text:`btn-ghost`,link:`btn-link`},shape:{circle:`aspect-square rounded-full`,square:`aspect-square`},loadingType:{dots:`loading-dots`,ring:`loading-ring`,ball:`loading-ball`,bars:`loading-bars`,infinity:`loading-infinity`,spinner:`loading-spinner`}}}),b=l=>{let u=p({size:`sm`,disabled:!1,loading:!1,color:`secondary`,class:void 0,iconPlacement:`start`,loadingOptions:{type:`spinner`,size:20},animate:`ripple`},l),b=u.shape===`square`||u.shape===`circle`,[x,S]=m(u,[`size`,`iconPlacement`,`loading`,`variant`,`color`,`shape`,`icon`,`children`,`class`,`disabled`,`onClick`,`loadingOptions`,`animate`]),C=e=>{if(x.onClick?.(e),x.animate===`ripple`){let t=e.currentTarget;switch(x.variant){case`default`:case`simple`:case`link`:return v(t,300,{from:`8%`,to:`2%`});default:return v(t)}}};return(()=>{var l=g();return c(l,o(S,{get class(){return e(`sbt`,y({size:x.size,color:x.color,variant:x.variant,shape:x.shape}),!b&&x.icon&&(x.iconPlacement===`start`?`flex-row`:`flex-row-reverse`),x.icon&&`[&_svg]:shrink-0`,x.animate!==`translate`&&`active:translate-none`,x.class)}},()=>x.shape&&{"data-shape":x.shape},{onClick:C,get disabled(){return x.disabled||x.loading}}),!1,!0),i(l,n(f,{get children(){return[n(d,{get when(){return x.loading},get children(){var n=h();return r(r=>{var i=e(`loading shrink-0`,y({loadingType:x.loadingOptions?.type})),a=`${x.loadingOptions?.size}px`;return i!==r.e&&t(n,r.e=i),a!==r.t&&s(n,`width`,r.t=a),r},{e:void 0,t:void 0}),n}}),n(d,{get when(){return a(()=>!x.loading)()&&x.icon},get children(){return x.icon}})]}}),null),i(l,(()=>{var e=a(()=>!!(!b&&x.children));return()=>e()&&(()=>{var e=_();return i(e,()=>x.children),e})()})(),null),l})()};export{b as Button};
|
|
2
2
|
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","names":["cn","cva","VariantProps","Component","Match","mergeProps","splitProps","Switch","ButtonProps","Opacity","from","to","rippleAnimate","target","HTMLButtonElement","duration","opacity","animate","boxShadow","easing","variants","size","xs","sm","md","lg","xl","color","neutral","primary","secondary","accent","info","success","warning","error","variant","default","simple","solid","outline","dashed","soft","text","link","shape","circle","square","loadingType","dots","ring","ball","bars","infinity","spinner","ButtonVariantsProps","Button","props","merge","const","disabled","loading","class","iconPlacement","loadingOptions","type","isShape","p","nativeProps","handleClick","e","MouseEvent","onClick","currentTarget","_el$","_tmpl$2","_$spread","_$mergeProps","icon","_$insert","_$createComponent","children","when","_el$2","_tmpl$","_$effect","_p$","_v$","_v$2","_$className","t","_$setStyleProperty","undefined","_$memo","Element","_c$","_el$3","_tmpl$3"],"sources":["../../../../src/components/button/button.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Component, Match, mergeProps, splitProps, Switch } from 'solid-js';\r\nimport { ButtonProps } from './button.types';\r\n\r\ntype Opacity = {\r\n from: string;\r\n to: string;\r\n};\r\nexport function rippleAnimate(\r\n target: HTMLButtonElement,\r\n duration: number = 300,\r\n opacity: Opacity = { from: '20%', to: '10%' },\r\n) {\r\n if (!target) return;\r\n target.animate(\r\n [\r\n { boxShadow: `0 0 0 0 rgba(from var(--btn-color) r g b / ${opacity.from})` },\r\n { boxShadow: `0 0 0 6px rgba(from var(--btn-color) r g b / ${opacity.to})` },\r\n ],\r\n {\r\n duration,\r\n easing: 'linear',\r\n },\r\n );\r\n}\r\nconst variants = cva('', {\r\n variants: {\r\n size: {\r\n '4xs': 'bt-4xs',\r\n '3xs': 'bt-3xs',\r\n '2xs': 'bt-2xs',\r\n xs: 'bt-xs',\r\n sm: 'bt-sm',\r\n md: 'bt-md',\r\n lg: 'bt-lg',\r\n xl: 'bt-xl',\r\n '2xl': 'bt-2xl',\r\n '3xl': 'bt-3xl',\r\n '4xl': 'bt-4xl',\r\n },\r\n color: {\r\n neutral: 'btn-neutral',\r\n primary: 'btn-primary',\r\n secondary: 'btn-secondary',\r\n accent: 'btn-accent',\r\n info: 'btn-info',\r\n success: 'btn-success',\r\n warning: 'btn-warning',\r\n error: 'btn-error',\r\n },\r\n variant: {\r\n default: 'btn-default',\r\n simple: 'btn-default border-transparent',\r\n solid: '',\r\n outline: 'btn-outline',\r\n dashed: 'btn-dash',\r\n soft: 'btn-soft',\r\n text: 'btn-ghost',\r\n link: 'btn-link',\r\n },\r\n shape: {\r\n circle: 'aspect-square rounded-full',\r\n square: 'aspect-square',\r\n },\r\n loadingType: {\r\n dots: 'loading-dots',\r\n ring: 'loading-ring',\r\n ball: 'loading-ball',\r\n bars: 'loading-bars',\r\n infinity: 'loading-infinity',\r\n spinner: 'loading-spinner',\r\n },\r\n },\r\n});\r\nexport type ButtonVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Button: Component<ButtonProps> = props => {\r\n const merge = mergeProps(\r\n {\r\n size: 'sm' as const,\r\n disabled: false,\r\n loading: false,\r\n color: 'secondary' as const,\r\n class: void 0,\r\n iconPlacement: 'start',\r\n loadingOptions: {\r\n type: 'spinner' as const,\r\n size: 20,\r\n },\r\n animate: 'ripple' as const,\r\n },\r\n props,\r\n );\r\n const isShape = merge.shape === 'square' || merge.shape === 'circle';\r\n const [p, nativeProps] = splitProps(merge, [\r\n 'size',\r\n 'iconPlacement',\r\n 'loading',\r\n 'variant',\r\n 'color',\r\n 'shape',\r\n 'icon',\r\n 'children',\r\n 'class',\r\n 'disabled',\r\n 'onClick',\r\n 'loadingOptions',\r\n 'animate',\r\n ]);\r\n const handleClick = (e: MouseEvent) => {\r\n p.onClick?.(e);\r\n if (p.animate === 'ripple') {\r\n const target = e.currentTarget as HTMLButtonElement;\r\n switch (p.variant) {\r\n case 'default':\r\n case 'simple':\r\n case 'link':\r\n return rippleAnimate(target, 300, { from: '8%', to: '2%' });\r\n default:\r\n return rippleAnimate(target);\r\n }\r\n }\r\n };\r\n return (\r\n <button\r\n {...nativeProps}\r\n class={cn(\r\n 'sbt',\r\n variants({ size: p.size, color: p.color, variant: p.variant, shape: p.shape }),\r\n !isShape && p.icon && (p.iconPlacement === 'start' ? 'flex-row' : 'flex-row-reverse'),\r\n p.icon && '[&_svg]:shrink-0',\r\n p.animate !== 'translate' && 'active:translate-none',\r\n p.class,\r\n )}\r\n {...(p.shape && { 'data-shape': p.shape })}\r\n onClick={handleClick}\r\n disabled={p.disabled || p.loading}\r\n >\r\n <Switch>\r\n <Match when={p.loading}>\r\n <span\r\n class={cn('loading shrink-0', variants({ loadingType: p.loadingOptions?.type }))}\r\n style={{ width: `${p.loadingOptions?.size}px` }}\r\n ></span>\r\n </Match>\r\n\r\n <Match when={!p.loading && p.icon}>{p.icon! as Element}</Match>\r\n </Switch>\r\n {!isShape && p.children && <span class=\"mb-px\">{p.children}</span>}\r\n </button>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{chevron_left_default as t}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-left.js";import{chevron_right_default as n}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.js";import{className as r,createComponent as i,delegateEvents as a,effect as o,insert as s,memo as c,mergeProps as l,setAttribute as u,setStyleProperty as d,spread as f,template as p,use as m}from"solid-js/web";import{For as h,Show as g,createEffect as _,createMemo as v,createSignal as y,mergeProps as b,on as x,onCleanup as ee,onMount as S}from"solid-js";var C=p(`<button type=button class="car05 car06"aria-label="Previous slide">`),w=p(`<button type=button class="car05 car07"aria-label="Next slide">`),T=p(`<div class=car08>`),E=p(`<div style=--carousel-transition-duration:400ms><div class=car02>`),D=p(`<div><img>`),O=p(`<div class=car12>`),k=p(`<button type=button>`),A={horizontal:`car17`,vertical:`car18`},j=a=>{let p=b({arrows:!0,autoplay:!0,autoplaySpeed:3e3,dots:!0,infinite:!0,effect:`scrollx`},a),[j,M]=y(0),[N,P]=y(!!p.autoplay),[F,I]=y(!1),L,R,z,B=()=>p.images.length,V=()=>{z&&=(clearInterval(z),void 0)},H=(e,t)=>{if(!R||F())return;I(!0);let n=R.querySelectorAll(`.car03`),r=n[e],i=n[t];if(!r||!i){I(!1);return}let a=p.direction===`vertical`,o=a?`translateY`:`translateX`;if(p.effect===`fade`){r.style.zIndex=`1`,i.style.zIndex=`2`,i.style.transition=`none`,r.style.transition=`none`,i.style.opacity=`0`,i.offsetHeight;let e=`opacity var(--carousel-transition-duration) ease-in-out`;r.style.transition=e,i.style.transition=e,r.style.opacity=`0`,i.style.opacity=`1`,setTimeout(()=>{n.forEach((e,n)=>{let r=e;r.style.transition=`none`,r.style.opacity=n===t?`1`:`0`,r.style.zIndex=n===t?`1`:`0`}),I(!1)},400)}else{let s=a?R.offsetHeight:R.offsetWidth,c=t>e?-1:1,l=e===0&&t===B()-1||e===B()-1&&t===0,u=c;l&&(u=e===0?1:-1),i.style.transition=`none`,r.style.transition=`none`,i.style.transform=`${o}(${-u*(s-1)}px)`,i.style.opacity=`1`,i.offsetHeight;let d=`transform var(--carousel-transition-duration) ease-in-out`;r.style.transition=d,i.style.transition=d,r.style.transform=`${o}(${u*s}px)`,i.style.transform=`${o}(0px)`,setTimeout(()=>{n.forEach((e,n)=>{let r=e;r.style.transition=`none`,n===t?(r.style.transform=`${o}(0px)`,r.style.opacity=`1`):(r.style.transform=`${o}(${s}px)`,r.style.opacity=`0`)}),I(!1)},400)}},U=(e,t=!1)=>{if(F()&&!t)return;let n=j(),r=e;p.infinite?(r<0&&(r=B()-1),r>=B()&&(r=0)):(r<0&&(r=0),r>=B()&&(r=B()-1)),!(r===n&&!t)&&(p.beforeChange?.(n,r),t?(M(r),p.afterChange?.(r)):(H(n,r),M(r),p.afterChange?.(r)),N()&&p.autoplay&&(V(),Y()))},W=()=>U(j()+1),G=()=>U(j()-1),K=e=>U(e),q=()=>(P(!1),V(),{}),J=()=>p.autoplay?(P(!0),Y(),{}):{},Y=()=>{!p.autoplay||!N()||(V(),z=setInterval(()=>{F()||W()},p.autoplaySpeed))};_(function(){let e={next:W,prev:G,moveTo:K,pause:q,play:J};p.setCarouselFunction?.(e)}),_(x(()=>[p.autoplay,N()],()=>{p.autoplay&&N()?Y():V()})),S(()=>{if(R){let e=R.querySelectorAll(`.car03`),t=p.direction===`vertical`?`translateY`:`translateX`;e.forEach((e,n)=>{let r=e;p.effect===`fade`?(r.style.opacity=n===0?`1`:`0`,r.style.zIndex=n===0?`1`:`0`):(r.style.transform=n===0?`${t}(0%)`:`${t}(100%)`,r.style.opacity=n===0?`1`:`0`)})}p.autoplay&&Y()}),ee(function(){V()});let X=e=>{e===j()&&p.onClickSlide?.(e)},Z=()=>p.infinite||j()>0,Q=()=>p.infinite||j()<B()-1,te=()=>p.direction===`vertical`,ne=()=>te()?p.dotPlacement===`start`?`car15`:`car16`:p.dotPlacement===`top`?`car14`:`car13`,$=v(()=>N()&&p.autoplay&&typeof p.autoplay==`object`&&p.autoplay.dotDuration);return(()=>{var a=E(),_=a.firstChild,v=L;typeof v==`function`?m(v,a):L=a;var y=R;return typeof y==`function`?m(y,_):R=_,s(_,i(h,{get each(){return p.images},children:(t,n)=>(()=>{var i=D(),a=i.firstChild;return i.$$click=()=>X(n()),f(a,l(t,{get class(){return e(`car04`,t.class)},draggable:!1}),!1,!1),o(()=>r(i,e(`car03`,p.class?.item))),i})()})),s(a,i(g,{get when(){return p.arrows},get children(){return[i(g,{get when(){return Z()},get children(){var e=C();return e.$$click=G,s(e,i(t,{class:`size-6`})),e}}),i(g,{get when(){return Q()},get children(){var e=w();return e.$$click=W,s(e,i(n,{class:`size-6`})),e}})]}}),null),s(a,i(g,{get when(){return c(()=>!!p.dots)()&&B()>1},get children(){var t=T();return s(t,i(h,{get each(){return p.images},children:(t,n)=>(()=>{var t=k();return t.$$click=()=>U(n()),s(t,i(g,{get when(){return $()},get children(){return O()}})),o(i=>{var a=e(`car09`,j()===n()&&`car10`,$()&&`car11`),o=`Go to slide ${n()+1}`;return a!==i.e&&r(t,i.e=a),o!==i.t&&u(t,`aria-label`,i.t=o),i},{e:void 0,t:void 0}),t})()})),t}}),null),o(t=>{var n=e(`car01`,p.direction&&A[p.direction],ne(),p.class?.root),i=`${p.autoplaySpeed}ms`;return n!==t.e&&r(a,t.e=n),i!==t.t&&d(a,`--carousel-autoplay-speed`,t.t=i),t},{e:void 0,t:void 0}),a})()};a([`click`]);export{j as Carousel};
|
|
2
|
+
//# sourceMappingURL=carousel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"carousel.js","names":["cn","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","mergeProps","on","onCleanup","onMount","Show","CarouselFunction","CarouselProps","VARIANTS","horizontal","vertical","Carousel","_p","p","arrows","autoplay","autoplaySpeed","dots","infinite","effect","const","currentIndex","setCurrentIndex","isPlaying","setIsPlaying","isAnimating","setIsAnimating","containerRef","HTMLDivElement","slidesRef","autoplayTimer","ReturnType","setInterval","totalSlides","images","length","transitionDuration","clearAutoplay","clearInterval","undefined","animateTransition","from","to","slides","querySelectorAll","fromSlide","HTMLElement","toSlide","direction","translateProp","style","zIndex","transition","opacity","offsetHeight","transitionValue","setTimeout","forEach","slide","index","el","size","offsetWidth","isWrapping","actualDirection","transform","goToSlide","skipAnimation","current","targetIndex","beforeChange","afterChange","startAutoplay","next","prev","moveTo","pause","play","exportCarouselFunction","carouselFunction","setCarouselFunction","stopAutoplay","handleSlideClick","onClickSlide","showPrevArrow","showNextArrow","isVertical","dotPlacementClass","dotPlacement","hasDotDuration","dotDuration","_el$","_tmpl$4","_el$2","firstChild","_ref$","_$use","_ref$2","_$insert","_$createComponent","each","children","image","_el$6","_tmpl$5","_el$7","$$click","_$spread","_$mergeProps","class","_$effect","_$className","item","when","_el$3","_tmpl$","_el$4","_tmpl$2","_$memo","_el$5","_tmpl$3","_","_el$8","_tmpl$7","_tmpl$6","_p$","_v$3","_v$4","e","t","_$setAttribute","_v$","root","_v$2","_$setStyleProperty","_$delegateEvents"],"sources":["../../../../src/components/carousel/carousel.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\nimport type { Component } from 'solid-js';\r\nimport {\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { CarouselFunction, CarouselProps } from './carousel.types';\r\nconst VARIANTS = {\r\n horizontal: 'car17',\r\n vertical: 'car18',\r\n};\r\n\r\nexport const Carousel: Component<CarouselProps> = _p => {\r\n const p = mergeProps(\r\n {\r\n arrows: true,\r\n autoplay: true,\r\n autoplaySpeed: 3000,\r\n dots: true,\r\n infinite: true,\r\n effect: 'scrollx' as const,\r\n },\r\n _p,\r\n );\r\n\r\n const [currentIndex, setCurrentIndex] = createSignal(0);\r\n const [isPlaying, setIsPlaying] = createSignal(!!p.autoplay);\r\n const [isAnimating, setIsAnimating] = createSignal(false);\r\n\r\n let containerRef: HTMLDivElement | undefined;\r\n let slidesRef: HTMLDivElement | undefined;\r\n let autoplayTimer: ReturnType<typeof setInterval> | undefined;\r\n\r\n const totalSlides = () => p.images.length;\r\n\r\n // Animation duration for slide transitions\r\n const transitionDuration = 400;\r\n\r\n // Clear autoplay timer\r\n const clearAutoplay = () => {\r\n if (autoplayTimer) {\r\n clearInterval(autoplayTimer);\r\n autoplayTimer = undefined;\r\n }\r\n };\r\n\r\n // Animate slide transition using CSS transitions\r\n const animateTransition = (from: number, to: number) => {\r\n if (!slidesRef || isAnimating()) return;\r\n\r\n setIsAnimating(true);\r\n\r\n const slides = slidesRef.querySelectorAll('.car03');\r\n const fromSlide = slides[from] as HTMLElement;\r\n const toSlide = slides[to] as HTMLElement;\r\n\r\n if (!fromSlide || !toSlide) {\r\n setIsAnimating(false);\r\n return;\r\n }\r\n\r\n const vertical = p.direction === 'vertical';\r\n const translateProp = vertical ? 'translateY' : 'translateX';\r\n\r\n if (p.effect === 'fade') {\r\n // Fade effect\r\n fromSlide.style.zIndex = '1';\r\n toSlide.style.zIndex = '2';\r\n toSlide.style.transition = 'none';\r\n fromSlide.style.transition = 'none';\r\n toSlide.style.opacity = '0';\r\n\r\n // Force reflow to apply initial state\r\n void toSlide.offsetHeight;\r\n\r\n // Apply CSS transition and target values\r\n const transitionValue = 'opacity var(--carousel-transition-duration) ease-in-out';\r\n fromSlide.style.transition = transitionValue;\r\n toSlide.style.transition = transitionValue;\r\n\r\n fromSlide.style.opacity = '0';\r\n toSlide.style.opacity = '1';\r\n\r\n setTimeout(() => {\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n el.style.transition = 'none';\r\n el.style.opacity = index === to ? '1' : '0';\r\n el.style.zIndex = index === to ? '1' : '0';\r\n });\r\n setIsAnimating(false);\r\n }, transitionDuration);\r\n } else {\r\n // Scrollx effect (default)\r\n // Use pixel-based transforms with 1px overlap to eliminate sub-pixel gap\r\n const size = vertical ? slidesRef.offsetHeight : slidesRef.offsetWidth;\r\n const direction = to > from ? -1 : 1;\r\n const isWrapping =\r\n (from === 0 && to === totalSlides() - 1) || (from === totalSlides() - 1 && to === 0);\r\n\r\n let actualDirection = direction;\r\n if (isWrapping) {\r\n actualDirection = from === 0 ? 1 : -1;\r\n }\r\n\r\n // Position the target slide without transition (1px overlap to prevent gap)\r\n toSlide.style.transition = 'none';\r\n fromSlide.style.transition = 'none';\r\n toSlide.style.transform = `${translateProp}(${-actualDirection * (size - 1)}px)`;\r\n toSlide.style.opacity = '1';\r\n\r\n // Force reflow to apply initial position\r\n void toSlide.offsetHeight;\r\n\r\n // Apply CSS transition and target values\r\n const transitionValue = 'transform var(--carousel-transition-duration) ease-in-out';\r\n fromSlide.style.transition = transitionValue;\r\n toSlide.style.transition = transitionValue;\r\n\r\n fromSlide.style.transform = `${translateProp}(${actualDirection * size}px)`;\r\n toSlide.style.transform = `${translateProp}(0px)`;\r\n\r\n setTimeout(() => {\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n el.style.transition = 'none';\r\n if (index === to) {\r\n el.style.transform = `${translateProp}(0px)`;\r\n el.style.opacity = '1';\r\n } else {\r\n el.style.transform = `${translateProp}(${size}px)`;\r\n el.style.opacity = '0';\r\n }\r\n });\r\n setIsAnimating(false);\r\n }, transitionDuration);\r\n }\r\n };\r\n\r\n // Go to specific slide\r\n const goToSlide = (index: number, skipAnimation = false) => {\r\n if (isAnimating() && !skipAnimation) return;\r\n\r\n const current = currentIndex();\r\n let targetIndex = index;\r\n\r\n // Handle boundaries\r\n if (p.infinite) {\r\n if (targetIndex < 0) targetIndex = totalSlides() - 1;\r\n if (targetIndex >= totalSlides()) targetIndex = 0;\r\n } else {\r\n if (targetIndex < 0) targetIndex = 0;\r\n if (targetIndex >= totalSlides()) targetIndex = totalSlides() - 1;\r\n }\r\n\r\n if (targetIndex === current && !skipAnimation) return;\r\n\r\n p.beforeChange?.(current, targetIndex);\r\n\r\n if (skipAnimation) {\r\n setCurrentIndex(targetIndex);\r\n p.afterChange?.(targetIndex);\r\n } else {\r\n animateTransition(current, targetIndex);\r\n setCurrentIndex(targetIndex);\r\n p.afterChange?.(targetIndex);\r\n }\r\n\r\n // Reset autoplay timer and progress animation when slide changes\r\n if (isPlaying() && p.autoplay) {\r\n clearAutoplay();\r\n startAutoplay();\r\n }\r\n };\r\n\r\n // Navigation functions\r\n const next = () => goToSlide(currentIndex() + 1);\r\n const prev = () => goToSlide(currentIndex() - 1);\r\n const moveTo = (index: number) => goToSlide(index);\r\n\r\n const pause = () => {\r\n setIsPlaying(false);\r\n clearAutoplay();\r\n return {};\r\n };\r\n\r\n const play = () => {\r\n if (!p.autoplay) return {};\r\n setIsPlaying(true);\r\n startAutoplay();\r\n return {};\r\n };\r\n\r\n // Start autoplay\r\n const startAutoplay = () => {\r\n if (!p.autoplay || !isPlaying()) return;\r\n\r\n clearAutoplay();\r\n\r\n autoplayTimer = setInterval(() => {\r\n if (!isAnimating()) {\r\n next();\r\n }\r\n }, p.autoplaySpeed);\r\n };\r\n\r\n // Export carousel functions\r\n createEffect(function exportCarouselFunction() {\r\n const carouselFunction: CarouselFunction = {\r\n next,\r\n prev,\r\n moveTo,\r\n pause,\r\n play,\r\n };\r\n p.setCarouselFunction?.(carouselFunction);\r\n });\r\n\r\n // Handle autoplay\r\n createEffect(\r\n on(\r\n () => [p.autoplay, isPlaying()],\r\n () => {\r\n if (p.autoplay && isPlaying()) {\r\n startAutoplay();\r\n } else {\r\n clearAutoplay();\r\n }\r\n },\r\n ),\r\n );\r\n\r\n // Initialize slides\r\n onMount(() => {\r\n if (slidesRef) {\r\n const slides = slidesRef.querySelectorAll('.car03');\r\n const vertical = p.direction === 'vertical';\r\n const translateProp = vertical ? 'translateY' : 'translateX';\r\n\r\n slides.forEach((slide, index) => {\r\n const el = slide as HTMLElement;\r\n if (p.effect === 'fade') {\r\n el.style.opacity = index === 0 ? '1' : '0';\r\n el.style.zIndex = index === 0 ? '1' : '0';\r\n } else {\r\n el.style.transform = index === 0 ? `${translateProp}(0%)` : `${translateProp}(100%)`;\r\n el.style.opacity = index === 0 ? '1' : '0';\r\n }\r\n });\r\n }\r\n\r\n if (p.autoplay) {\r\n startAutoplay();\r\n }\r\n });\r\n\r\n // Cleanup\r\n onCleanup(function stopAutoplay() {\r\n clearAutoplay();\r\n });\r\n\r\n // Handle click on slide\r\n const handleSlideClick = (index: number) => {\r\n if (index === currentIndex()) {\r\n p.onClickSlide?.(index);\r\n }\r\n };\r\n\r\n const showPrevArrow = () => p.infinite || currentIndex() > 0;\r\n const showNextArrow = () => p.infinite || currentIndex() < totalSlides() - 1;\r\n\r\n const isVertical = () => p.direction === 'vertical';\r\n\r\n // Constrain dotPlacement based on direction\r\n const dotPlacementClass = () => {\r\n if (isVertical()) {\r\n // Vertical: only 'start' or 'end' allowed\r\n if (p.dotPlacement === 'start') return 'car15';\r\n return 'car16'; // default for vertical\r\n } else {\r\n // Horizontal: only 'top' or 'bottom' allowed\r\n if (p.dotPlacement === 'top') return 'car14';\r\n return 'car13'; // default for horizontal\r\n }\r\n };\r\n\r\n const hasDotDuration = createMemo(\r\n () => isPlaying() && p.autoplay && typeof p.autoplay === 'object' && p.autoplay.dotDuration,\r\n );\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n class={cn('car01', p.direction && VARIANTS[p.direction], dotPlacementClass(), p.class?.root)}\r\n style={{\r\n '--carousel-transition-duration': `${transitionDuration}ms`,\r\n '--carousel-autoplay-speed': `${p.autoplaySpeed}ms`,\r\n }}\r\n >\r\n {/* Slides container */}\r\n <div ref={slidesRef} class=\"car02\">\r\n <For each={p.images}>\r\n {(image, index) => (\r\n <div class={cn('car03', p.class?.item)} onClick={() => handleSlideClick(index())}>\r\n <img {...image} class={cn('car04', image.class)} draggable={false} />\r\n </div>\r\n )}\r\n </For>\r\n </div>\r\n\r\n {/* Arrows */}\r\n <Show when={p.arrows}>\r\n <Show when={showPrevArrow()}>\r\n <button type=\"button\" class=\"car05 car06\" onClick={prev} aria-label=\"Previous slide\">\r\n <ChevronLeft class=\"size-6\" />\r\n </button>\r\n </Show>\r\n <Show when={showNextArrow()}>\r\n <button type=\"button\" class=\"car05 car07\" onClick={next} aria-label=\"Next slide\">\r\n <ChevronRight class=\"size-6\" />\r\n </button>\r\n </Show>\r\n </Show>\r\n\r\n {/* Dots */}\r\n <Show when={p.dots && totalSlides() > 1}>\r\n <div class=\"car08\">\r\n <For each={p.images}>\r\n {(_, index) => (\r\n <button\r\n type=\"button\"\r\n class={cn(\r\n 'car09',\r\n currentIndex() === index() && 'car10',\r\n hasDotDuration() && 'car11',\r\n )}\r\n onClick={() => goToSlide(index())}\r\n aria-label={`Go to slide ${index() + 1}`}\r\n >\r\n <Show when={hasDotDuration()}>\r\n <div class=\"car12\" />\r\n </Show>\r\n </button>\r\n )}\r\n </For>\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatBubble.js","names":["cn","cva","VariantProps","Component","Show","ChatBubbleProps","variants","color","default","neutral","primary","secondary","accent","info","success","warning","error","align","start","end","ChatBubbleVariantsProps","ChatBubble","props","_el$","_tmpl$","_$insert","_$createComponent","when","avatar","children","_el$2","Element","_$effect","_$className","class","header","_el$3","bubble","_el$4","footer","_el$5"],"sources":["../../../../src/components/chat-bubble/chatBubble.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, Show } from 'solid-js';\r\nimport { ChatBubbleProps } from './chatBubble.type';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n color: {\r\n default: '',\r\n neutral: 'chat-bubble-neutral',\r\n primary: 'chat-bubble-primary',\r\n secondary: 'chat-bubble-secondary',\r\n accent: 'chat-bubble-accent',\r\n info: 'chat-bubble-info',\r\n success: 'chat-bubble-success',\r\n warning: 'chat-bubble-warning',\r\n error: 'chat-bubble-error',\r\n },\r\n align: {\r\n start: 'chat-start',\r\n end: 'chat-end',\r\n },\r\n },\r\n});\r\nexport type ChatBubbleVariantsProps = VariantProps<typeof variants>;\r\nexport const ChatBubble: Component<ChatBubbleProps> = props => {\r\n return (\r\n <>\r\n <div class={cn('chat', variants({ align: props.align }))}>\r\n <Show when={props.avatar}>\r\n <div class={cn('chat-image', props.class?.avatar)}>{props.avatar as Element}</div>\r\n </Show>\r\n <Show when={props.header}>\r\n <div class={cn('chat-header', props.class?.header)}>{props.header as Element}</div>\r\n </Show>\r\n <Show when={props.bubble}>\r\n <div class={cn('chat-bubble', variants({ color: props.color }), props.class?.bubble)}>\r\n {props.bubble as Element}\r\n </div>\r\n </Show>\r\n <Show when={props.footer}>\r\n <div class={cn('chat-footer', props.class?.footer)}>{props.bubble as Element}</div>\r\n </Show>\r\n </div>\r\n </>\r\n );\r\n};\r\n"],"mappings":"2OAKMM,EAAWL,EAAI,GAAI,CACvBK,SAAU,CACRC,MAAO,CACLC,QAAS,GACTC,QAAS,sBACTC,QAAS,sBACTC,UAAW,wBACXC,OAAQ,qBACRC,KAAM,mBACNC,QAAS,sBACTC,QAAS,sBACTC,MAAO,oBACR,CACDC,MAAO,CACLC,MAAO,aACPC,IAAK,WACP,CACF,CACD,CAAC,CAEWE,EAAyCC,QACpD,CAAA,IAAAC,EAAAC,GAAA,CAE4D,OAF5DC,EAAAF,EAAAG,EAGOtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMM,QAAM,IAAAC,UAAA,CAAA,IAAAC,EAAAN,GAAA,CAC2B,OAD3BC,EAAAK,MAC8BR,EAAMM,OAAiB,CAAAI,MAAAC,EAAAH,EAA/D9B,EAAG,aAAcsB,EAAMY,OAAON,OAAO,CAAA,CAAA,CAAAE,GAAA,CAAA,CAAA,KAAA,CAAAL,EAAAF,EAAAG,EAElDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMa,QAAM,IAAAN,UAAA,CAAA,IAAAO,EAAAZ,GAAA,CAC4B,OAD5BC,EAAAW,MAC+Bd,EAAMa,OAAiB,CAAAH,MAAAC,EAAAG,EAAhEpC,EAAG,cAAesB,EAAMY,OAAOC,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAX,EAAAF,EAAAG,EAEnDtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMe,QAAM,IAAAR,UAAA,CAAA,IAAAS,EAAAd,GAAA,CAC8D,OAD9DC,EAAAa,MAEnBhB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAK,EADdtC,EAAG,cAAeM,EAAS,CAAEC,MAAOe,EAAMf,MAAO,CAAC,CAAEe,EAAMY,OAAOG,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAb,EAAAF,EAAAG,EAIrFtB,EAAI,CAAA,IAACuB,MAAI,CAAA,OAAEL,EAAMiB,QAAM,IAAAV,UAAA,CAAA,IAAAW,EAAAhB,GAAA,CAC4B,OAD5BC,EAAAe,MAC+BlB,EAAMe,OAAiB,CAAAL,MAAAC,EAAAO,EAAhExC,EAAG,cAAesB,EAAMY,OAAOK,OAAO,CAAA,CAAA,CAAAC,GAAA,CAAA,CAAA,KAAA,CAAAR,MAAAC,EAAAV,EAb1CvB,EAAG,OAAQM,EAAS,CAAEW,MAAOK,EAAML,MAAO,CAAC,CAAC,CAAA,CAAA,CAAAM,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":["cn","cva","VariantProps","Component","createEffect","createUniqueId","mergeProps","CheckboxProps","id","name","defaultChecked","indeterminate","class","size","CheckboxVariantsProps","color","disabled","onChange","checked","value","variants","xs","sm","md","lg","xl","default","neutral","primary","secondary","accent","info","success","warning","error","Checkbox","p","_el$","_tmpl$","_$use","ref","_$spread","_$mergeProps","e","preventDefault","target","_$memo"],"sources":["../../../../src/components/checkbox/checkbox.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createEffect, createUniqueId, mergeProps } from 'solid-js';\r\n\r\ntype CheckboxProps = {\r\n id?: string;\r\n name?: string;\r\n defaultChecked: boolean;\r\n indeterminate?: boolean;\r\n class?: string;\r\n size?: CheckboxVariantsProps['size'];\r\n color?: CheckboxVariantsProps['color'];\r\n disabled?: boolean;\r\n onChange?: (checked: boolean | null) => void;\r\n value?: string;\r\n};\r\n\r\nconst variants = cva('checkbox', {\r\n variants: {\r\n size: {\r\n xs: 'checkbox-xs',\r\n sm: 'checkbox-sm',\r\n md: 'checkbox-md',\r\n lg: 'checkbox-lg',\r\n xl: 'checkbox-xl',\r\n },\r\n color: {\r\n default: '',\r\n neutral: 'checkbox-neutral',\r\n primary: 'checkbox-primary',\r\n secondary: 'checkbox-secondary',\r\n accent: 'checkbox-accent',\r\n info: 'checkbox-info',\r\n success: 'checkbox-success',\r\n warning: 'checkbox-warning',\r\n error: 'checkbox-error',\r\n },\r\n },\r\n});\r\n\r\nexport type CheckboxVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Checkbox: Component<CheckboxProps> = p => {\r\n p = mergeProps(\r\n { size: 'xs', color: 'primary', id: createUniqueId(), defaultChecked: false } as CheckboxProps,\r\n p,\r\n );\r\n\r\n return (\r\n <input\r\n ref={ref => {\r\n if (!ref) return;\r\n ref.checked = p.defaultChecked;\r\n p.indeterminate && (ref.value = 'inteterminate');\r\n }}\r\n type=\"checkbox\"\r\n id={p.id}\r\n class={cn(variants({ size: p.size, color: p.color }), p.class)}\r\n disabled={p.disabled}\r\n {...(p.name && { name: p.name })}\r\n {...(p.indeterminate && { 'data-indeterminate': true })}\r\n onClick={e => {\r\n if (p.indeterminate || p.disabled) e.preventDefault();\r\n }}\r\n onChange={e => p.onChange && p.onChange(e.target.checked)}\r\n value={p.indeterminate ? 'inteterminate' : p.value}\r\n />\r\n );\r\n};\r\n"],"mappings":"wQAiBMoB,EAAWnB,EAAI,WAAY,CAC/BmB,SAAU,CACRP,KAAM,CACJQ,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACJC,GAAI,cACL,CACDV,MAAO,CACLW,QAAS,GACTC,QAAS,mBACTC,QAAS,mBACTC,UAAW,qBACXC,OAAQ,kBACRC,KAAM,gBACNC,QAAS,mBACTC,QAAS,mBACTC,MAAO,iBACT,CACF,CACD,CAAC,CAIWC,EAAqCC,IAChDA,EAAI9B,EACF,CAAEO,KAAM,KAAME,MAAO,UAAWP,GAAIH,GAAgB,CAAEK,eAAgB,GAAO,CAC7E0B,EACD,MAED,CAAA,IAAAC,EAAAC,GAAA,CAiBsD,OAjBtDC,EAESC,GAAO,CACLA,IACLA,EAAItB,QAAUkB,EAAE1B,eAChB0B,EAAEzB,gBAAkB6B,EAAIrB,MAAQ,mBACjCkB,EAAA,CAAAI,EAAAJ,EAAAK,EAAA,CAAA,IAEDlC,IAAE,CAAA,OAAE4B,EAAE5B,IAAE,IAAA,OAAA,CAAA,OACDR,EAAGoB,EAAS,CAAEP,KAAMuB,EAAEvB,KAAME,MAAOqB,EAAErB,MAAO,CAAC,CAAEqB,EAAExB,MAAM,EAAA,IAC9DI,UAAQ,CAAA,OAAEoB,EAAEpB,UAAQ,KACfoB,EAAE3B,MAAQ,CAAEA,KAAM2B,EAAE3B,KAAM,KAC1B2B,EAAEzB,eAAiB,CAAE,qBAAsB,GAAM,CAAA,CAAA,QAC7CgC,GAAK,EACRP,EAAEzB,eAAiByB,EAAEpB,WAAU2B,EAAEC,gBAAgB,EACtD,SACSD,GAAKP,EAAEnB,UAAYmB,EAAEnB,SAAS0B,EAAEE,OAAO3B,QAAQ,CAAA,IACzDC,OAAK,CAAA,OAAE2B,MAAA,CAAA,CAAAV,EAAEzB,cAAa,EAAA,CAAG,gBAAkByB,EAAEjB,OAAK,CAAA,CAAA,GAAA,GAAA,CAAAkB,KAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{Button as t}from"../button/button.js";import{clipboard_copy_default as n}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/clipboard-copy.js";import{processCode as r}from"../../utils/shiki-highlight.js";import{Dynamic as i,className as a,createComponent as o,effect as s,insert as c,memo as l,template as u}from"solid-js/web";import{Suspense as d,createResource as f,createSignal as p,mergeProps as m}from"solid-js";var h=u(`<div><div></div><div>`),g=u(`<div>`),_=u(`<div class=relative>`),v=u(`<pre class="m-0! rounded-none! bg-gray-50! p-4! text-sm text-gray-500">Đang format code...`),y=`andromeeda.aurora-x.ayu-dark.catppuccin-frappe.catppuccin-latte.catppuccin-macchiato.catppuccin-mocha.dark-plus.dracula.dracula-soft.everforest-dark.everforest-light.github-dark.github-dark-default.github-dark-dimmed.github-dark-high-contrast.github-light.github-light-default.github-light-high-contrast.light-plus.material-theme.material-theme-darker.material-theme-lighter.material-theme-ocean.material-theme-palenight.min-dark.min-light.monokai.night-owl.nord.one-dark-pro.one-light.plastic.poimandres.red.rose-pine.rose-pine-dawn.rose-pine-moon.slack-dark.slack-ochin.snazzy-light.solarized-dark.solarized-light.synthwave-84.tokyo-night`.split(`.`),b=u=>{let y=m({language:`tsx`,theme:`github-light`},u),[b,x]=p(`preview`),[S,C]=p(!1),[w]=f(()=>({code:y.code,language:y.language,theme:y.theme}),({code:e,language:t,theme:n})=>r(e,t,n)),T=async()=>{try{await navigator.clipboard.writeText(u.code),C(!0),setTimeout(()=>C(!1),2e3)}catch(e){console.error(`Failed to copy:`,e)}};return(()=>{var r=h(),f=r.firstChild,p=f.nextSibling;return c(f,o(t,{onClick:()=>x(`preview`),size:`xs`,get color(){return b()===`preview`?`info`:`secondary`},get variant(){return b()===`preview`?`solid`:`soft`},get class(){return u.class?.btnPreview},children:`Preview`}),null),c(f,o(t,{onClick:()=>x(`code`),size:`xs`,get color(){return b()===`code`?`info`:`secondary`},get variant(){return b()===`code`?`solid`:`soft`},get class(){return u.class?.btnCode},children:`Code`}),null),c(f,(()=>{var r=l(()=>b()===`code`);return()=>r()&&o(t,{onClick:T,size:`xs`,get color(){return S()?`success`:`secondary`},get variant(){return S()?`solid`:`soft`},get icon(){return o(n,{size:16})},get class(){return e(`ml-auto`,u.class?.btnCopy)},get children(){return S()?`Đã sao chép!`:`Sao chép`}})})(),null),c(p,(()=>{var t=l(()=>b()===`preview`);return()=>t()?(()=>{var t=g();return c(t,o(i,{get component(){return u.preview}})),s(()=>a(t,e(`cod04`,u.class?.preview))),t})():(()=>{var t=_();return c(t,o(d,{get fallback(){return v()},get children(){var t=g();return s(n=>{var r=e(`cod05`,u.class?.code),i=w();return r!==n.e&&a(t,n.e=r),i!==n.t&&(t.innerHTML=n.t=i),n},{e:void 0,t:void 0}),t}})),t})()})()),s(t=>{var n=e(`cod01`,u.class?.root),i=e(`cod02`,u.class?.header),o=e(`cod03`,u.class?.body);return n!==t.e&&a(r,t.e=n),i!==t.t&&a(f,t.t=i),o!==t.a&&a(p,t.a=o),t},{e:void 0,t:void 0,a:void 0}),r})()};export{y as CODE_PREVIEW_THEMES,b as CodePreview};
|
|
2
|
+
//# sourceMappingURL=code-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-preview.js","names":["cn","ClipboardCopy","Component","createResource","createSignal","mergeProps","Suspense","Dynamic","Button","CODE_PREVIEW_THEMES","const","CodePreviewTheme","CodePreviewProps","code","preview","title","language","theme","class","root","header","body","btnPreview","btnCode","btnCopy","ensureThemeLoaded","processCode","CodePreview","props","merged","activeTab","setActiveTab","copied","setCopied","codeHtml","copyToClipboard","navigator","clipboard","writeText","setTimeout","err","console","error","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$insert","_$createComponent","onClick","size","color","variant","children","_c$","_$memo","icon","_c$2","_el$4","_tmpl$2","component","_$effect","_$className","_el$5","_tmpl$3","fallback","_tmpl$4","_el$6","_p$","_v$4","_v$5","e","t","innerHTML","undefined","_v$","_v$2","_v$3","a"],"sources":["../../../../src/components/code-preview/code-preview.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport ClipboardCopy from 'lucide-solid/icons/clipboard-copy';\r\nimport { Component, createResource, createSignal, mergeProps, Suspense } from 'solid-js';\r\nimport { Dynamic } from 'solid-js/web';\r\nimport { Button } from '../button';\r\n\r\n// Danh sách theme built-in của Shiki\r\nexport const CODE_PREVIEW_THEMES = [\r\n 'andromeeda',\r\n 'aurora-x',\r\n 'ayu-dark',\r\n 'catppuccin-frappe',\r\n 'catppuccin-latte',\r\n 'catppuccin-macchiato',\r\n 'catppuccin-mocha',\r\n 'dark-plus',\r\n 'dracula',\r\n 'dracula-soft',\r\n 'everforest-dark',\r\n 'everforest-light',\r\n 'github-dark',\r\n 'github-dark-default',\r\n 'github-dark-dimmed',\r\n 'github-dark-high-contrast',\r\n 'github-light',\r\n 'github-light-default',\r\n 'github-light-high-contrast',\r\n 'light-plus',\r\n 'material-theme',\r\n 'material-theme-darker',\r\n 'material-theme-lighter',\r\n 'material-theme-ocean',\r\n 'material-theme-palenight',\r\n 'min-dark',\r\n 'min-light',\r\n 'monokai',\r\n 'night-owl',\r\n 'nord',\r\n 'one-dark-pro',\r\n 'one-light',\r\n 'plastic',\r\n 'poimandres',\r\n 'red',\r\n 'rose-pine',\r\n 'rose-pine-dawn',\r\n 'rose-pine-moon',\r\n 'slack-dark',\r\n 'slack-ochin',\r\n 'snazzy-light',\r\n 'solarized-dark',\r\n 'solarized-light',\r\n 'synthwave-84',\r\n 'tokyo-night',\r\n] as const;\r\n\r\nexport type CodePreviewTheme = (typeof CODE_PREVIEW_THEMES)[number];\r\n\r\ninterface CodePreviewProps {\r\n code: string;\r\n preview: Component<any>;\r\n title?: string;\r\n language?: string;\r\n theme?: CodePreviewTheme;\r\n class?: {\r\n root?: string;\r\n header?: string;\r\n body?: string;\r\n preview?: string;\r\n code?: string;\r\n btnPreview?: string;\r\n btnCode?: string;\r\n btnCopy?: string;\r\n };\r\n}\r\n\r\nexport { ensureThemeLoaded, processCode } from '@utils/shiki-highlight';\r\nimport { processCode } from '@utils/shiki-highlight';\r\n\r\nexport const CodePreview = (props: CodePreviewProps) => {\r\n const merged = mergeProps({ language: 'tsx', theme: 'github-light' as CodePreviewTheme }, props);\r\n\r\n const [activeTab, setActiveTab] = createSignal<'preview' | 'code'>('preview');\r\n const [copied, setCopied] = createSignal(false);\r\n\r\n const [codeHtml] = createResource(\r\n () => ({ code: merged.code, language: merged.language, theme: merged.theme }),\r\n ({ code, language, theme }) => processCode(code, language, theme),\r\n );\r\n\r\n const copyToClipboard = async () => {\r\n try {\r\n await navigator.clipboard.writeText(props.code);\r\n setCopied(true);\r\n setTimeout(() => setCopied(false), 2000);\r\n } catch (err) {\r\n console.error('Failed to copy:', err);\r\n }\r\n };\r\n\r\n return (\r\n <div class={cn('cod01', props.class?.root)}>\r\n <div class={cn('cod02', props.class?.header)}>\r\n <Button\r\n onClick={() => setActiveTab('preview')}\r\n size=\"xs\"\r\n color={activeTab() === 'preview' ? 'info' : 'secondary'}\r\n variant={activeTab() === 'preview' ? 'solid' : 'soft'}\r\n class={props.class?.btnPreview}\r\n >\r\n Preview\r\n </Button>\r\n <Button\r\n onClick={() => setActiveTab('code')}\r\n size=\"xs\"\r\n color={activeTab() === 'code' ? 'info' : 'secondary'}\r\n variant={activeTab() === 'code' ? 'solid' : 'soft'}\r\n class={props.class?.btnCode}\r\n >\r\n Code\r\n </Button>\r\n\r\n {activeTab() === 'code' && (\r\n <Button\r\n onClick={copyToClipboard}\r\n size=\"xs\"\r\n color={copied() ? 'success' : 'secondary'}\r\n variant={copied() ? 'solid' : 'soft'}\r\n icon={<ClipboardCopy size={16} />}\r\n class={cn('ml-auto', props.class?.btnCopy)}\r\n >\r\n {copied() ? 'Đã sao chép!' : 'Sao chép'}\r\n </Button>\r\n )}\r\n </div>\r\n\r\n <div class={cn('cod03', props.class?.body)}>\r\n {activeTab() === 'preview' ? (\r\n <div class={cn('cod04', props.class?.preview)}>\r\n <Dynamic component={props.preview} />\r\n </div>\r\n ) : (\r\n <div class=\"relative\">\r\n <Suspense\r\n fallback={\r\n <pre class=\"m-0! rounded-none! bg-gray-50! p-4! text-sm text-gray-500\">\r\n Đang format code...\r\n </pre>\r\n }\r\n >\r\n <div class={cn('cod05', props.class?.code)} innerHTML={codeHtml()} />\r\n </Suspense>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapse.js","names":["mergeProps","Show","Component","CollapseProps","cn","cva","VariantProps","getColor","variants","iconType","plus","arrow","iconPosition","start","end","forceStatus","open","close","CollapseVariantsProps","Collapse","p","icon","type","postion","color","_el$","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_$insert","_$createComponent","when","force","children","_el$2","_tmpl$","_$spread","_$mergeProps","onOpen","onClose","onChange","e","checked","currentTarget","id","class","title","onClick","content","Element","_$effect","_p$","_v$","root","_v$2","_$className","t","undefined"],"sources":["../../../../src/components/collapse/collapse.tsx"],"sourcesContent":["import { mergeProps, Show, type Component } from 'solid-js';\r\nimport type { CollapseProps } from './collapse.types';\r\nimport { cn } from '@/utils/cn';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { getColor } from '@/utils/helper';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n iconType: {\r\n plus: 'collapse-plus',\r\n arrow: 'collapse-arrow',\r\n },\r\n iconPosition: {\r\n start: 'after:start-5 after:end-auto pe-4 ps-12',\r\n end: '',\r\n },\r\n forceStatus: {\r\n open: 'collapse-open',\r\n close: 'collapse-close',\r\n },\r\n },\r\n});\r\nexport type CollapseVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const Collapse: Component<CollapseProps> = p => {\r\n p = mergeProps(\r\n {\r\n icon: {\r\n type: 'arrow',\r\n postion: 'end',\r\n },\r\n color: 'transparent',\r\n } as CollapseProps,\r\n p,\r\n );\r\n\r\n return (\r\n <>\r\n <div\r\n class={cn(\r\n 'collapse border',\r\n variants({ iconType: p.icon?.type, forceStatus: p.force }),\r\n getColor(p.color, 'bg-base-100 border-base-300'),\r\n p.color && p.color !== 'transparent' && 'sui-collapse',\r\n p.class?.root,\r\n )}\r\n >\r\n <Show when={!p.force}>\r\n <input\r\n type=\"checkbox\"\r\n {...(p.onOpen || p.onClose\r\n ? {\r\n onChange: e => {\r\n const checked = e.currentTarget.checked;\r\n checked ? p.onOpen?.() : p.onClose?.();\r\n },\r\n }\r\n : {})}\r\n {...(p.id && { id: p.id })}\r\n />\r\n </Show>\r\n <div\r\n class={cn(\r\n 'collapse-title font-semibold',\r\n variants({ iconPosition: p.icon?.postion }),\r\n p.class?.title,\r\n p.force && (p.onOpen || p.onClose) ? 'cursor-pointer' : '',\r\n )}\r\n {...(p.force && (p.onOpen || p.onClose)\r\n ? {\r\n onClick: () => {\r\n p.force === 'open' ? p.onClose?.() : p.onOpen?.();\r\n },\r\n }\r\n : {})}\r\n >\r\n {p.title}\r\n </div>\r\n <div class={cn('collapse-content text-sm', p.class?.content)}>{p.content as Element}</div>\r\n </div>\r\n </>\r\n );\r\n};\r\n"],"mappings":"qXAMMQ,EAAWH,EAAI,GAAI,CACvBG,SAAU,CACRC,SAAU,CACRC,KAAM,gBACNC,MAAO,iBACR,CACDC,aAAc,CACZC,MAAO,0CACPC,IAAK,GACN,CACDC,YAAa,CACXC,KAAM,gBACNC,MAAO,iBACT,CACF,CACD,CAAC,CAGWE,EAAqCC,IAChDA,EAAIpB,EACF,CACEqB,KAAM,CACJC,KAAM,QACNC,QAAS,MACV,CACDC,MAAO,cACR,CACDJ,EACD,MAED,CAAA,IAAAK,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YA0CkE,OA1ClEC,EAAAN,EAAAO,EAWO/B,EAAI,CAAA,IAACgC,MAAI,CAAA,MAAE,CAACb,EAAEc,OAAK,IAAAC,UAAA,CAAA,IAAAC,EAAAC,GAAA,CAWS,OAXTC,EAAAF,EAAAG,MAGXnB,EAAEoB,QAAUpB,EAAEqB,QACf,CACEC,SAAUC,GAAK,CACGA,EAAEE,cAAcD,QACtBxB,EAAEoB,UAAU,CAAGpB,EAAEqB,WAAW,EAEzC,CACD,EAAE,KACDrB,EAAE0B,IAAM,CAAEA,GAAI1B,EAAE0B,GAAI,CAAA,CAAA,GAAA,GAAA,CAAAV,GAAA,CAAA,CAAAT,EAAA,CAAAW,EAAAX,EAAAY,EAAA,CAAA,IAAA,OAAA,CAAA,OAIpBnC,EACL,+BACAI,EAAS,CAAEI,aAAcQ,EAAEC,MAAME,QAAS,CAAC,CAC3CH,EAAE2B,OAAOC,MACT5B,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAAW,iBAAmB,GACzD,EAAA,KACIrB,EAAEc,QAAUd,EAAEoB,QAAUpB,EAAEqB,SAC3B,CACEQ,YAAe,CACb7B,EAAEc,QAAU,OAASd,EAAEqB,WAAW,CAAGrB,EAAEoB,UAAU,EAEpD,CACD,EAAE,CAAA,CAAA,GAAA,GAAA,CAAAT,EAAAJ,MAELP,EAAE4B,MAAK,CAAAjB,EAAAF,MAEqDT,EAAE8B,QAAkB,CAAAE,EAAAC,GAAA,CAAA,IAAAC,EAvC5ElD,EACL,kBACAI,EAAS,CAAEC,SAAUW,EAAEC,MAAMC,KAAMP,YAAaK,EAAEc,MAAO,CAAC,CAC1D3B,EAASa,EAAEI,MAAO,8BAA8B,CAChDJ,EAAEI,OAASJ,EAAEI,QAAU,eAAiB,eACxCJ,EAAE2B,OAAOQ,KACV,CAAAC,EAiCWpD,EAAG,2BAA4BgB,EAAE2B,OAAOG,QAAQ,CAAA,OAAAI,IAAAD,EAAAV,GAAAc,EAAAhC,EAAA4B,EAAAV,EAAAW,EAAA,CAAAE,IAAAH,EAAAK,GAAAD,EAAA5B,EAAAwB,EAAAK,EAAAF,EAAA,CAAAH,GAAA,CAAAV,EAAAgB,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAlC,KAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{chevron_right_default as t}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.js";import{ZIndexType as n}from"../z-index/z-index.types.js";import{ZIndex as r}from"../z-index/z-index.js";import{contextMenuStore as i}from"./context-menu.store.js";import{className as a,createComponent as o,delegateEvents as s,effect as c,insert as l,setAttribute as u,style as d,template as f,use as p}from"solid-js/web";import{For as m,Show as h,createEffect as g,createSignal as _,onCleanup as v}from"solid-js";var y=f(`<div>`),b=f(`<span class=cm06>`),x=f(`<div><div class=cm05><span class=cm07></span><span class=cm08></span></div><div>`),S=f(`<span class=cm10>`),C=f(`<button type=button><span class=cm07>`),w=n=>{if(n.item.type===`separator`)return(()=>{var t=y();return c(()=>a(t,e(`cm03`,n.customClass?.separator))),t})();if(n.item.type===`submenu`){let r=n.item,i,[s,d]=_(!1);return g(function(){let e=requestAnimationFrame(function(){i&&(i.getBoundingClientRect().right>window.innerWidth?d(!0):d(!1))});v(()=>cancelAnimationFrame(e))}),(()=>{var d=x(),f=d.firstChild,g=f.firstChild,_=g.nextSibling,v=f.nextSibling;return l(f,o(h,{get when(){return r.prefixIcon},get children(){var e=b();return l(e,()=>r.prefixIcon),e}}),g),l(g,()=>r.label),l(_,o(t,{size:14})),p(e=>i=e,v),l(v,o(m,{get each(){return r.items},children:e=>o(w,{item:e,get close(){return n.close},get customClass(){return n.customClass}})})),c(t=>{var i=e(`cm04`,r.disabled&&`cm04--disabled`,n.customClass?.submenu),o=r.disabled,c=e(`cm09`,s()&&`cm09--flip`);return i!==t.e&&a(d,t.e=i),o!==t.t&&u(d,`aria-disabled`,t.t=o),c!==t.a&&a(v,t.a=c),t},{e:void 0,t:void 0,a:void 0}),d})()}let r=n.item;return(()=>{var t=C(),i=t.firstChild;return t.$$click=()=>{r.disabled||(r.onClick(),n.close())},l(t,o(h,{get when(){return r.prefixIcon},get children(){var e=b();return l(e,()=>r.prefixIcon),e}}),i),l(i,()=>r.label),l(t,o(h,{get when(){return r.shortcut},get children(){var e=S();return l(e,()=>r.shortcut),e}}),null),c(i=>{var o=e(`cm02`,r.disabled&&`cm02--disabled`,n.customClass?.item),s=r.disabled;return o!==i.e&&a(t,i.e=o),s!==i.t&&(t.disabled=i.t=s),i},{e:void 0,t:void 0}),t})()},T=t=>{let n,[r,i]=_({left:`${t.x}px`,top:`${t.y}px`});return g(function(){let e=requestAnimationFrame(function(){if(!n)return;let e=n.getBoundingClientRect(),r=window.innerWidth,a=window.innerHeight,o=e.right>r?Math.max(0,t.x-e.width):t.x,s=e.bottom>a?Math.max(0,t.y-e.height):t.y;i({left:`${o}px`,top:`${s}px`})});v(()=>cancelAnimationFrame(e))}),(()=>{var i=y();return i.$$contextmenu=e=>e.preventDefault(),p(e=>n=e,i),l(i,o(m,{get each(){return t.items},children:e=>o(w,{item:e,get close(){return t.close},get customClass(){return t.customClass}})})),c(n=>{var o=e(`cm01`,t.customClass?.content),s=r();return o!==n.e&&a(i,n.e=o),n.t=d(i,s,n.t),n},{e:void 0,t:void 0}),i})()},E=e=>{let t=()=>i.menuState(),a=()=>i.close();return g(function(){if(!t())return;function e(e){e.target.closest(`.cm01`)||a()}function n(e){e.key===`Escape`&&a()}document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,n),v(function(){document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,n)})}),o(r,{get open(){return!!t()},get type(){return n.DROPDOWN},class:`inset-0`,get children(){return o(h,{get when(){return t()},children:t=>o(T,{get x(){return t().x},get y(){return t().y},get items(){return t().items},close:a,get customClass(){return e.class}})})}})};s([`click`,`contextmenu`]);export{E as ContextMenu};
|
|
2
|
+
//# sourceMappingURL=context-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.js","names":["Component","createEffect","createSignal","For","onCleanup","Show","cn","ZIndex","ZIndexType","contextMenuStore","ContextMenuProps","RenderedItem","ChevronRight","MenuItemProps","item","close","customClass","Partial","Record","MenuItem","props","type","_el$","_tmpl$","_$effect","_$className","separator","submenuRef","HTMLDivElement","flip","setFlip","detectSubmenuEdge","rafId","requestAnimationFrame","checkEdge","rect","getBoundingClientRect","right","window","innerWidth","cancelAnimationFrame","_el$2","_tmpl$3","_el$3","firstChild","_el$5","_el$6","nextSibling","_el$7","_$insert","_$createComponent","when","prefixIcon","children","_el$4","_tmpl$2","label","size","_$use","el","each","items","sub","_p$","_v$","disabled","submenu","_v$2","_v$3","e","t","_$setAttribute","a","undefined","_el$8","_tmpl$5","_el$0","$$click","onClick","_el$9","shortcut","_el$1","_tmpl$4","_v$4","_v$5","MenuContentProps","x","y","MenuContent","panelRef","style","setStyle","left","top","adjustPosition","computePosition","vw","vh","innerHeight","Math","max","width","bottom","height","_el$10","$$contextmenu","preventDefault","_v$6","content","_v$7","_$style","ContextMenu","state","menuState","registerGlobalListeners","onMouseDown","MouseEvent","target","Element","closest","onKeyDown","KeyboardEvent","key","document","addEventListener","removeGlobalListeners","removeEventListener","open","DROPDOWN","s","class","_$delegateEvents"],"sources":["../../../../src/components/context-menu/context-menu.tsx"],"sourcesContent":["import { Component, createEffect, createSignal, For, onCleanup, Show } from 'solid-js';\r\nimport { cn } from '@utils/cn';\r\nimport { ZIndex, ZIndexType } from '@components/z-index';\r\nimport { contextMenuStore } from './context-menu.store';\r\nimport type { ContextMenuProps, RenderedItem } from './context-menu.types';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\n\r\ntype MenuItemProps = {\r\n item: RenderedItem;\r\n close: () => void;\r\n customClass?: Partial<Record<'item' | 'separator' | 'submenu', string>>;\r\n};\r\n\r\nconst MenuItem: Component<MenuItemProps> = props => {\r\n if (props.item.type === 'separator') {\r\n return <div class={cn('cm03', props.customClass?.separator)} />;\r\n }\r\n\r\n if (props.item.type === 'submenu') {\r\n const item = props.item;\r\n let submenuRef!: HTMLDivElement;\r\n const [flip, setFlip] = createSignal(false);\r\n\r\n createEffect(function detectSubmenuEdge() {\r\n const rafId = requestAnimationFrame(function checkEdge() {\r\n if (!submenuRef) return;\r\n const rect = submenuRef.getBoundingClientRect();\r\n if (rect.right > window.innerWidth) setFlip(true);\r\n else setFlip(false);\r\n });\r\n onCleanup(() => cancelAnimationFrame(rafId));\r\n });\r\n\r\n return (\r\n <div\r\n class={cn('cm04', item.disabled && 'cm04--disabled', props.customClass?.submenu)}\r\n aria-disabled={item.disabled}\r\n >\r\n <div class=\"cm05\">\r\n <Show when={item.prefixIcon}>\r\n <span class=\"cm06\">{item.prefixIcon}</span>\r\n </Show>\r\n <span class=\"cm07\">{item.label}</span>\r\n <span class=\"cm08\">\r\n <ChevronRight size={14} />\r\n </span>\r\n </div>\r\n <div ref={el => (submenuRef = el)} class={cn('cm09', flip() && 'cm09--flip')}>\r\n <For each={item.items}>\r\n {sub => <MenuItem item={sub} close={props.close} customClass={props.customClass} />}\r\n </For>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const item = props.item;\r\n return (\r\n <button\r\n type=\"button\"\r\n class={cn('cm02', item.disabled && 'cm02--disabled', props.customClass?.item)}\r\n disabled={item.disabled}\r\n onClick={() => {\r\n if (item.disabled) return;\r\n item.onClick();\r\n props.close();\r\n }}\r\n >\r\n <Show when={item.prefixIcon}>\r\n <span class=\"cm06\">{item.prefixIcon}</span>\r\n </Show>\r\n <span class=\"cm07\">{item.label}</span>\r\n <Show when={item.shortcut}>\r\n <span class=\"cm10\">{item.shortcut}</span>\r\n </Show>\r\n </button>\r\n );\r\n};\r\n\r\ntype MenuContentProps = {\r\n x: number;\r\n y: number;\r\n items: RenderedItem[];\r\n close: () => void;\r\n customClass?: Partial<Record<'content' | 'item' | 'separator' | 'submenu', string>>;\r\n};\r\n\r\nconst MenuContent: Component<MenuContentProps> = props => {\r\n let panelRef!: HTMLDivElement;\r\n const [style, setStyle] = createSignal({ left: `${props.x}px`, top: `${props.y}px` });\r\n\r\n createEffect(function adjustPosition() {\r\n const rafId = requestAnimationFrame(function computePosition() {\r\n if (!panelRef) return;\r\n const rect = panelRef.getBoundingClientRect();\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n\r\n const left = rect.right > vw ? Math.max(0, props.x - rect.width) : props.x;\r\n const top = rect.bottom > vh ? Math.max(0, props.y - rect.height) : props.y;\r\n\r\n setStyle({ left: `${left}px`, top: `${top}px` });\r\n });\r\n onCleanup(() => cancelAnimationFrame(rafId));\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => (panelRef = el)}\r\n class={cn('cm01', props.customClass?.content)}\r\n style={style()}\r\n onContextMenu={e => e.preventDefault()}\r\n >\r\n <For each={props.items}>\r\n {item => <MenuItem item={item} close={props.close} customClass={props.customClass} />}\r\n </For>\r\n </div>\r\n );\r\n};\r\n\r\nexport const ContextMenu: Component<ContextMenuProps> = props => {\r\n const state = () => contextMenuStore.menuState();\r\n const close = () => contextMenuStore.close();\r\n\r\n createEffect(function registerGlobalListeners() {\r\n if (!state()) return;\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n const target = e.target as Element;\r\n if (!target.closest('.cm01')) close();\r\n }\r\n\r\n function onKeyDown(e: KeyboardEvent) {\r\n if (e.key === 'Escape') close();\r\n }\r\n\r\n document.addEventListener('mousedown', onMouseDown);\r\n document.addEventListener('keydown', onKeyDown);\r\n\r\n onCleanup(function removeGlobalListeners() {\r\n document.removeEventListener('mousedown', onMouseDown);\r\n document.removeEventListener('keydown', onKeyDown);\r\n });\r\n });\r\n\r\n return (\r\n <ZIndex open={!!state()} type={ZIndexType.DROPDOWN} class=\"inset-0\">\r\n <Show when={state()}>\r\n {s => (\r\n <MenuContent\r\n x={s().x}\r\n y={s().y}\r\n items={s().items}\r\n close={close}\r\n customClass={props.class}\r\n />\r\n )}\r\n </Show>\r\n </ZIndex>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.store.js","names":[],"sources":["../../../../src/components/context-menu/context-menu.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\r\nimport type {\r\n ContextRecord,\r\n RegistryItem,\r\n RenderedItem,\r\n ContextMenuHandle,\r\n} from './context-menu.types';\r\n\r\ntype MenuState = {\r\n x: number;\r\n y: number;\r\n items: RenderedItem[];\r\n} | null;\r\n\r\nconst [menuState, setMenuState] = createSignal<MenuState>(null);\r\n\r\nexport const contextMenuStore = {\r\n menuState,\r\n close: () => setMenuState(null),\r\n isOpen: () => menuState() !== null,\r\n};\r\n\r\nexport function createContextMenuHandle<\r\n TContext extends ContextRecord,\r\n>(): ContextMenuHandle<TContext> {\r\n const registry = new Map<string, RegistryItem<TContext>>();\r\n\r\n function register(item: RegistryItem<TContext>): void {\r\n registry.set(item.key, item);\r\n }\r\n\r\n function unregister(key: string): void {\r\n registry.delete(key);\r\n }\r\n\r\n function buildRenderedItems(ctx: TContext): RenderedItem[] {\r\n const visible = [...registry.values()]\r\n .filter(item => !item.when || item.when(ctx))\r\n .sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\r\n\r\n if (visible.length === 0) return [];\r\n\r\n const groups: RegistryItem<TContext>[][] = [];\r\n const groupMap = new Map<string, RegistryItem<TContext>[]>();\r\n\r\n for (const item of visible) {\r\n const g = item.group ?? '__default__';\r\n if (!groupMap.has(g)) {\r\n const arr: RegistryItem<TContext>[] = [];\r\n groupMap.set(g, arr);\r\n groups.push(arr);\r\n }\r\n groupMap.get(g)!.push(item);\r\n }\r\n\r\n const result: RenderedItem[] = [];\r\n for (let i = 0; i < groups.length; i++) {\r\n if (i > 0) result.push({ type: 'separator' });\r\n for (const item of groups[i]) {\r\n if (item.type === 'item') {\r\n result.push({\r\n type: 'item',\r\n key: item.key,\r\n label: item.label,\r\n disabled: item.disabled?.(ctx),\r\n shortcut: item.shortcut,\r\n prefixIcon: item.prefixIcon,\r\n onClick: () => item.onClick(ctx),\r\n });\r\n } else {\r\n result.push({\r\n type: 'submenu',\r\n key: item.key,\r\n label: item.label,\r\n disabled: item.disabled?.(ctx),\r\n shortcut: item.shortcut,\r\n prefixIcon: item.prefixIcon,\r\n\r\n items: item.items\r\n .filter(sub => !sub.when || sub.when(ctx))\r\n .map(sub => {\r\n if (sub.type === 'item') {\r\n return {\r\n type: 'item' as const,\r\n key: sub.key,\r\n label: sub.label,\r\n disabled: sub.disabled?.(ctx),\r\n shortcut: sub.shortcut,\r\n prefixIcon: sub.prefixIcon,\r\n onClick: () => sub.onClick(ctx),\r\n };\r\n }\r\n return { type: 'separator' as const };\r\n }),\r\n });\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function trigger(e: MouseEvent, ctx: TContext): void {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const items = buildRenderedItems(ctx);\r\n if (items.length === 0) return;\r\n setMenuState({ x: e.clientX, y: e.clientY, items });\r\n }\r\n\r\n return { register, unregister, trigger };\r\n}\r\n"],"mappings":"wCAcA,GAAM,CAAC,EAAW,GAAgB,EAAwB,KAAK,CAElD,EAAmB,CAC9B,YACA,UAAa,EAAa,KAAK,CAC/B,WAAc,GAAW,GAAK,KAC/B,CAED,SAAgB,GAEiB,CAC/B,IAAM,EAAW,IAAI,IAErB,SAAS,EAAS,EAAoC,CACpD,EAAS,IAAI,EAAK,IAAK,EAAK,CAG9B,SAAS,EAAW,EAAmB,CACrC,EAAS,OAAO,EAAI,CAGtB,SAAS,EAAmB,EAA+B,CACzD,IAAM,EAAU,CAAC,GAAG,EAAS,QAAQ,CAAC,CACnC,OAAO,GAAQ,CAAC,EAAK,MAAQ,EAAK,KAAK,EAAI,CAAC,CAC5C,MAAM,EAAG,KAAO,EAAE,OAAS,MAAQ,EAAE,OAAS,KAAK,CAEtD,GAAI,EAAQ,SAAW,EAAG,MAAO,EAAE,CAEnC,IAAM,EAAqC,EAAE,CACvC,EAAW,IAAI,IAErB,IAAK,IAAM,KAAQ,EAAS,CAC1B,IAAM,EAAI,EAAK,OAAS,cACxB,GAAI,CAAC,EAAS,IAAI,EAAE,CAAE,CACpB,IAAM,EAAgC,EAAE,CACxC,EAAS,IAAI,EAAG,EAAI,CACpB,EAAO,KAAK,EAAI,CAElB,EAAS,IAAI,EAAE,CAAE,KAAK,EAAK,CAG7B,IAAM,EAAyB,EAAE,CACjC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CAClC,EAAI,GAAG,EAAO,KAAK,CAAE,KAAM,YAAa,CAAC,CAC7C,IAAK,IAAM,KAAQ,EAAO,GACpB,EAAK,OAAS,OAChB,EAAO,KAAK,CACV,KAAM,OACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WACjB,YAAe,EAAK,QAAQ,EAAI,CACjC,CAAC,CAEF,EAAO,KAAK,CACV,KAAM,UACN,IAAK,EAAK,IACV,MAAO,EAAK,MACZ,SAAU,EAAK,WAAW,EAAI,CAC9B,SAAU,EAAK,SACf,WAAY,EAAK,WAEjB,MAAO,EAAK,MACT,OAAO,GAAO,CAAC,EAAI,MAAQ,EAAI,KAAK,EAAI,CAAC,CACzC,IAAI,GACC,EAAI,OAAS,OACR,CACL,KAAM,OACN,IAAK,EAAI,IACT,MAAO,EAAI,MACX,SAAU,EAAI,WAAW,EAAI,CAC7B,SAAU,EAAI,SACd,WAAY,EAAI,WAChB,YAAe,EAAI,QAAQ,EAAI,CAChC,CAEI,CAAE,KAAM,YAAsB,CACrC,CACL,CAAC,CAIR,OAAO,EAGT,SAAS,EAAQ,EAAe,EAAqB,CACnD,EAAE,gBAAgB,CAClB,EAAE,iBAAiB,CACnB,IAAM,EAAQ,EAAmB,EAAI,CACjC,EAAM,SAAW,GACrB,EAAa,CAAE,EAAG,EAAE,QAAS,EAAG,EAAE,QAAS,QAAO,CAAC,CAGrD,MAAO,CAAE,WAAU,aAAY,UAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","names":["SolidComponent","cn","Component","DiffProps","images","class","Partial","Record","Diff","p","length","console","warn","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$insert","Element","_$effect","_p$","_v$","root","_v$2","item1","_v$3","item2","_v$4","resizer","e","_$className","t","a","o","undefined"],"sources":["../../../../src/components/diff/diff.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { Component } from 'solid-js';\n\ntype DiffProps = {\n images: SolidComponent[];\n class?: Partial<Record<'root' | 'item1' | 'item2' | 'resizer', string>>;\n};\n\nconst Diff: Component<DiffProps> = p => {\n if (p.images.length !== 2) {\n console.warn('You need to provide exactly 2 images');\n return <></>;\n }\n return (\n <figure class={cn('diff aspect-video', p.class?.root)} tabindex=\"0\">\n <div class={cn('diff-item-1', p.class?.item1)} role=\"img\" tabindex=\"0\">\n {p.images[0] as Element}\n </div>\n <div class={cn('diff-item-2', p.class?.item2)} role=\"img\">\n {p.images[1] as Element}\n </div>\n <div class={cn('diff-resizer', p.class?.resizer)}></div>\n </figure>\n );\n};\n\nexport { Diff };\n"],"mappings":"6MASMQ,EAA6BC,GAC7BA,EAAEL,OAAOM,SAAW,OAIxB,CAAA,IAAAG,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YAQoD,OARpDE,EAAAL,MAGON,EAAEL,OAAO,GAAa,CAAAgB,EAAAH,MAGtBR,EAAEL,OAAO,GAAa,CAAAkB,EAAAC,GAAA,CAAA,IAAAC,EALZvB,EAAG,oBAAqBQ,EAAEJ,OAAOoB,KAAK,CAAAC,EACvCzB,EAAG,cAAeQ,EAAEJ,OAAOsB,MAAM,CAAAC,EAGjC3B,EAAG,cAAeQ,EAAEJ,OAAOwB,MAAM,CAAAC,EAGjC7B,EAAG,eAAgBQ,EAAEJ,OAAO0B,QAAQ,CAAA,OAAAP,IAAAD,EAAAS,GAAAC,EAAApB,EAAAU,EAAAS,EAAAR,EAAA,CAAAE,IAAAH,EAAAW,GAAAD,EAAAlB,EAAAQ,EAAAW,EAAAR,EAAA,CAAAE,IAAAL,EAAAY,GAAAF,EAAAhB,EAAAM,EAAAY,EAAAP,EAAA,CAAAE,IAAAP,EAAAa,GAAAH,EAAAd,EAAAI,EAAAa,EAAAN,EAAA,CAAAP,GAAA,CAAAS,EAAAK,IAAAA,GAAAH,EAAAG,IAAAA,GAAAF,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAxB,KAAA,EAXlDF,QAAQC,KAAK,uCAAuC,CACpD,EAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"divider.js","names":["cn","getColor","mergeProps","ParentComponent","Show","DividerProps","thicknessClass","Record","NonNullable","Divider","p","orientation","const","variant","align","thickness","color","isVertical","lineClass","class","line","_$createComponent","when","children","fallback","_el$5","_tmpl$2","_$effect","_p$","_v$6","_v$7","root","e","_$setAttribute","t","_$className","undefined","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$insert","_v$","_v$2","_v$3","_v$4","content","_v$5","a","o","i"],"sources":["../../../../src/components/divider/divider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@utils/helper';\r\nimport { mergeProps, ParentComponent, Show } from 'solid-js';\r\nimport { DividerProps } from './divider.types';\r\n\r\nconst thicknessClass: Record<NonNullable<DividerProps['thickness']>, string> = {\r\n 1: 'border-px',\r\n 2: 'border-[2px]',\r\n 3: 'border-[3px]',\r\n 4: 'border-[4px]',\r\n};\r\n\r\nconst Divider: ParentComponent<DividerProps> = p => {\r\n p = mergeProps(\r\n {\r\n orientation: 'horizontal' as const,\r\n variant: 'solid' as const,\r\n align: 'center' as const,\r\n thickness: 1 as const,\r\n color: 'secondary' as const,\r\n },\r\n p,\r\n );\r\n\r\n const isVertical = () => p.orientation === 'vertical';\r\n\r\n const lineClass = () =>\r\n cn(\r\n p.color ? 'divi3' : 'divi4',\r\n isVertical() ? 'border-l' : 'border-t',\r\n thicknessClass[p.thickness!],\r\n p.variant === 'dashed' && 'border-dashed',\r\n p.variant === 'dotted' && 'border-dotted',\r\n p.class?.line,\r\n );\r\n\r\n return (\r\n <Show\r\n when={!!p.children}\r\n fallback={\r\n <hr\r\n role=\"separator\"\r\n aria-orientation={p.orientation}\r\n class={cn(\r\n 'divi1',\r\n p.color ? 'divi3' : 'divi4',\r\n isVertical() ? 'h-auto self-stretch border-l' : 'w-full border-t',\r\n thicknessClass[p.thickness!],\r\n p.variant === 'dashed' && 'border-dashed',\r\n p.variant === 'dotted' && 'border-dotted',\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n />\r\n }\r\n >\r\n <div\r\n role=\"separator\"\r\n aria-orientation={p.orientation}\r\n class={cn(\r\n 'divi2',\r\n isVertical() ? 'flex-col self-stretch' : 'w-full flex-row',\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n >\r\n <div\r\n class={cn(lineClass(), p.align === 'center' || p.align === 'end' ? 'flex-1' : 'w-4')}\r\n />\r\n\r\n <span\r\n class={cn(\r\n 'divi5',\r\n p.color ? 'divi6' : 'divi7',\r\n isVertical() ? 'py-3' : 'px-3',\r\n p.class?.content,\r\n )}\r\n >\r\n {p.children}\r\n </span>\r\n\r\n <div\r\n class={cn(lineClass(), p.align === 'center' || p.align === 'start' ? 'flex-1' : 'w-4')}\r\n />\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\nexport { Divider };\r\n"],"mappings":"sVAKMM,EAAyE,CAC7E,EAAG,YACH,EAAG,eACH,EAAG,eACH,EAAG,eACJ,CAEKG,EAAyCC,GAAK,CAClDA,EAAIR,EACF,CACES,YAAa,aACbE,QAAS,QACTC,MAAO,SACPC,UAAW,EACXC,MAAO,YACR,CACDN,EACD,CAED,IAAMO,MAAmBP,EAAEC,cAAgB,WAErCO,MACJlB,EACEU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,WAAa,WAC5BX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BH,EAAES,OAAOC,KACV,CAEH,OAAAC,EACGjB,EAAI,CAAA,IACHkB,MAAI,CAAA,MAAE,CAAC,CAACZ,EAAEa,UAAQ,IAClBC,UAAQ,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAaH,OAbGC,EAAAC,GAAA,CAAA,IAAAC,EAGcnB,EAAEC,YAAWmB,EACxB9B,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,+BAAiC,kBAChDX,EAAeI,EAAEK,WACjBL,EAAEG,UAAY,UAAY,gBAC1BH,EAAEG,UAAY,UAAY,gBAC1BZ,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAA,OAAAF,IAAAD,EAAAI,GAAAC,EAAAR,EAAA,mBAAAG,EAAAI,EAAAH,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAV,EAAAG,EAAAM,EAAAJ,EAAA,CAAAF,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAA,CAAA,CAAAX,KAAA,EAAA,IAAAF,UAAA,CAAA,IAAAc,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YA8BqF,OA9BrFE,EAAAH,MA0BA/B,EAAEa,SAAQ,CAAAI,EAAAC,GAAA,CAAA,IAAAiB,EApBKnC,EAAEC,YAAWmC,EACxB9C,EACL,QACAiB,GAAY,CAAG,wBAA0B,kBACzChB,EAASS,EAAEM,MAAM,CACjBN,EAAES,OAAOY,KACV,CAAAgB,EAGQ/C,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,MAAQ,SAAW,MAAM,CAAAkC,EAI7EhD,EACL,QACAU,EAAEM,MAAQ,QAAU,QACpBC,GAAY,CAAG,OAAS,OACxBP,EAAES,OAAO8B,QACV,CAAAC,EAMMlD,EAAGkB,GAAW,CAAER,EAAEI,QAAU,UAAYJ,EAAEI,QAAU,QAAU,SAAW,MAAM,CAAA,OAAA+B,IAAAjB,EAAAI,GAAAC,EAAAI,EAAA,mBAAAT,EAAAI,EAAAa,EAAA,CAAAC,IAAAlB,EAAAM,GAAAC,EAAAE,EAAAT,EAAAM,EAAAY,EAAA,CAAAC,IAAAnB,EAAAuB,GAAAhB,EAAAI,EAAAX,EAAAuB,EAAAJ,EAAA,CAAAC,IAAApB,EAAAwB,GAAAjB,EAAAM,EAAAb,EAAAwB,EAAAJ,EAAA,CAAAE,IAAAtB,EAAAyB,GAAAlB,EAAAQ,EAAAf,EAAAyB,EAAAH,EAAA,CAAAtB,GAAA,CAAAI,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAAe,EAAAf,IAAAA,GAAAgB,EAAAhB,IAAAA,GAAAiB,EAAAjB,IAAAA,GAAA,CAAA,CAAAC,GAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{ZIndexType as t}from"../z-index/z-index.types.js";import{ZIndex as n}from"../z-index/z-index.js";import{x_default as r}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{conditionalRender as i}from"../../utils/hoc.js";import{addEventListener as a,className as o,createComponent as s,delegateEvents as c,effect as l,insert as u,memo as d,style as f,template as p}from"solid-js/web";import{Show as m,createEffect as h,createSignal as g,mergeProps as _,on as v,onCleanup as y}from"solid-js";var b=p(`<div>`),x=p(`<div class="pointer-events-auto fixed inset-0">`),S=p(`<button aria-label=Close>`),C=p(`<div><div>`),[w,T]=g([]),E=new Map;function D(e){if(e.key!==`Escape`)return;let t=w().at(-1);t&&E.get(t)?.()}function O(e,t){E.size===0&&document.addEventListener(`keydown`,D),E.set(e,t)}function k(e){E.delete(e),E.size===0&&document.removeEventListener(`keydown`,D)}var A={left:`dr02-left`,right:`dr02-right`,top:`dr02-top`,bottom:`dr02-bottom`},j=i=>{i=_({placement:`left`,closeOnOutsideClick:!0,closable:!0,mask:!0,maskBlur:!1,preRender:!1,open:!1,onClose:()=>{}},i);let c=Math.random().toString(36).slice(2);h(v(()=>i.open,e=>{e?(c!==w().at(-1)&&T(e=>[...e,c]),O(c,()=>i.onClose())):(k(c),T(e=>e.filter(e=>e!==c)))})),y(function(){k(c),T(e=>e.filter(e=>e!==c))});let p=()=>i.placement===`left`||i.placement===`right`,g=()=>{let e={};return p()&&i.width?e.width=i.width:!p()&&i.height&&(e.height=i.height),e},E=()=>{i.closeOnOutsideClick&&i.onClose()};return s(n,{get type(){return t.MODAL},get open(){return i.open??!1},blockScroll:!0,get preRender(){return i.preRender},position:{inset:`0`},get class(){return e(`pointer-events-none`,i.class?.wrapper)},get children(){return[s(m,{get when(){return i.mask},get children(){var t=b();return t.$$click=E,l(()=>o(t,e(i.maskBlur?`dr01-blur`:`dr01`,`pointer-events-auto`))),t}}),s(m,{get when(){return d(()=>!i.mask)()&&i.closeOnOutsideClick},get children(){var e=x();return e.$$click=E,e}}),(()=>{var t=C(),n=t.firstChild;return t.$$click=e=>e.stopPropagation(),u(t,s(m,{get when(){return i.closable},get children(){var t=S();return a(t,`click`,i.onClose,!0),u(t,s(r,{size:16})),l(()=>o(t,e(`dr03`,i.class?.closeButton))),t}}),n),u(t,s(m,{get when(){return i.header},get children(){var t=b();return u(t,()=>i.header),l(()=>o(t,e(`dr04`,i.class?.header))),t}}),n),u(n,s(m,{get when(){return i.body},get children(){return i.body}})),u(t,s(m,{get when(){return i.footer},get children(){var t=b();return u(t,()=>i.footer),l(()=>o(t,e(`dr06`,i.class?.footer))),t}}),null),l(r=>{var a=e(`dr02`,A[i.placement],`pointer-events-auto`,i.class?.panel),s=g(),c=e(`dr05`,i.class?.body);return a!==r.e&&o(t,r.e=a),r.t=f(t,s,r.t),c!==r.a&&o(n,r.a=c),r},{e:void 0,t:void 0,a:void 0}),t})()]}})},M=i(j,{preRender:`preRender`,when:`open`});c([`click`]);export{j as ComponentDrawer,M as Drawer};
|
|
2
|
+
//# sourceMappingURL=drawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawer.js","names":["Component","createEffect","createSignal","mergeProps","on","onCleanup","Show","X","cn","ZIndex","ZIndexType","conditionalRender","DrawerType","drawerIds","setDrawerIds","drawerCloseCallbacks","Map","globalKeyDownHandler","e","KeyboardEvent","key","topId","at","get","registerDrawer","id","cb","size","document","addEventListener","set","unregisterDrawer","delete","removeEventListener","PANEL_PLACEMENT_CLASS","Record","left","right","top","bottom","ComponentDrawer","p","placement","closeOnOutsideClick","closable","mask","maskBlur","preRender","open","onClose","drawerId","Math","random","toString","slice","ids","filter","unregisterDrawerOnUnmount","isHorizontal","panelStyle","s","width","height","handleOverlayClick","_$createComponent","type","MODAL","blockScroll","position","inset","class","wrapper","children","when","_el$","_tmpl$","$$click","_$effect","_$className","_$memo","_el$2","_tmpl$2","_el$3","_tmpl$4","_el$6","firstChild","stopPropagation","_$insert","_el$4","_tmpl$3","_$addEventListener","closeButton","header","_el$5","Element","body","footer","_el$7","_p$","_v$","panel","_v$2","_v$3","t","_$style","a","undefined","Drawer","_$delegateEvents"],"sources":["../../../../src/components/drawer/drawer.tsx"],"sourcesContent":["import { Component, createEffect, createSignal, mergeProps, on, onCleanup, Show } from 'solid-js';\nimport X from 'lucide-solid/icons/x';\n\nimport { cn } from '@/utils/cn';\nimport { ZIndex, ZIndexType } from '../z-index';\nimport { conditionalRender } from '@/utils/hoc';\nimport { DrawerType } from './drawer.types';\n\n// Global ESC key handler — shared across all drawer instances (mirrors modal pattern)\nconst [drawerIds, setDrawerIds] = createSignal<string[]>([]);\nconst drawerCloseCallbacks = new Map<string, () => void>();\n\nfunction globalKeyDownHandler(e: KeyboardEvent) {\n if (e.key !== 'Escape') return;\n const topId = drawerIds().at(-1);\n if (topId) drawerCloseCallbacks.get(topId)?.();\n}\n\nfunction registerDrawer(id: string, cb: () => void) {\n if (drawerCloseCallbacks.size === 0) {\n document.addEventListener('keydown', globalKeyDownHandler);\n }\n drawerCloseCallbacks.set(id, cb);\n}\n\nfunction unregisterDrawer(id: string) {\n drawerCloseCallbacks.delete(id);\n if (drawerCloseCallbacks.size === 0) {\n document.removeEventListener('keydown', globalKeyDownHandler);\n }\n}\n\nconst PANEL_PLACEMENT_CLASS: Record<string, string> = {\n left: 'dr02-left',\n right: 'dr02-right',\n top: 'dr02-top',\n bottom: 'dr02-bottom',\n};\n\nconst ComponentDrawer: Component<DrawerType> = p => {\n p = mergeProps(\n {\n placement: 'left',\n closeOnOutsideClick: true,\n closable: true,\n mask: true,\n maskBlur: false,\n preRender: false,\n open: false,\n onClose: () => {},\n } as DrawerType,\n p,\n );\n\n const drawerId = Math.random().toString(36).slice(2);\n\n createEffect(\n on(\n () => p.open,\n open => {\n if (open) {\n if (drawerId !== drawerIds().at(-1)) {\n setDrawerIds(ids => [...ids, drawerId]);\n }\n registerDrawer(drawerId, () => p.onClose());\n } else {\n unregisterDrawer(drawerId);\n setDrawerIds(ids => ids.filter(id => id !== drawerId));\n }\n },\n ),\n );\n\n onCleanup(function unregisterDrawerOnUnmount() {\n unregisterDrawer(drawerId);\n setDrawerIds(ids => ids.filter(id => id !== drawerId));\n });\n\n const isHorizontal = () => p.placement === 'left' || p.placement === 'right';\n\n const panelStyle = () => {\n const s: Record<string, string> = {};\n if (isHorizontal() && p.width) {\n s['width'] = p.width;\n } else if (!isHorizontal() && p.height) {\n s['height'] = p.height;\n }\n return s;\n };\n\n const handleOverlayClick = () => {\n if (p.closeOnOutsideClick) p.onClose();\n };\n\n return (\n <ZIndex\n type={ZIndexType.MODAL}\n open={p.open ?? false}\n blockScroll\n preRender={p.preRender}\n position={{ inset: '0' }}\n class={cn('pointer-events-none', p.class?.wrapper)}\n >\n {/* Backdrop overlay */}\n <Show when={p.mask}>\n <div\n class={cn(p.maskBlur ? 'dr01-blur' : 'dr01', 'pointer-events-auto')}\n onClick={handleOverlayClick}\n />\n </Show>\n\n {/* Invisible hit-area khi tắt mask nhưng vẫn closeOnOutsideClick */}\n <Show when={!p.mask && p.closeOnOutsideClick}>\n <div class=\"pointer-events-auto fixed inset-0\" onClick={handleOverlayClick} />\n </Show>\n\n {/* Panel */}\n <div\n class={cn(\n 'dr02',\n PANEL_PLACEMENT_CLASS[p.placement!],\n 'pointer-events-auto',\n p.class?.panel,\n )}\n style={panelStyle()}\n onClick={e => e.stopPropagation()}\n >\n {/* Close button */}\n <Show when={p.closable}>\n <button class={cn('dr03', p.class?.closeButton)} onClick={p.onClose} aria-label=\"Close\">\n <X size={16} />\n </button>\n </Show>\n\n {/* Header */}\n <Show when={p.header}>\n <div class={cn('dr04', p.class?.header)}>{p.header as Element}</div>\n </Show>\n\n {/* Body */}\n <div class={cn('dr05', p.class?.body)}>\n <Show when={p.body}>{p.body as Element}</Show>\n </div>\n\n {/* Footer */}\n <Show when={p.footer}>\n <div class={cn('dr06', p.class?.footer)}>{p.footer as Element}</div>\n </Show>\n </div>\n </ZIndex>\n );\n};\n\nexport const Drawer = conditionalRender(ComponentDrawer, { preRender: 'preRender', when: 'open' });\nexport { ComponentDrawer };\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown.js","names":["cn","trackElement","untrackElement","ZIndex","ZIndexType","cva","VariantProps","createContext","createEffect","createSignal","createUniqueId","mergeProps","onCleanup","ParentComponent","useContext","dropdownStore","DropdownProps","CloseAllContext","variants","position","top","bottom","left","right","align","start","center","end","DropdownVariantsProps","TriggerRect","width","height","Dropdown","props","p","const","blockScroll","closeAll","parentCloseAll","shouldCloseAll","id","isControlled","open","undefined","triggerRef","HTMLDivElement","rect","setRect","captureRect","r","getBoundingClientRect","isOpen","trackTrigger","untrackTrigger","handleControlledOpen","close","closeDropdownOnUnmount","toggle","anchorStyle","Record","_el$","_tmpl$","_$addEventListener","_$use","el","ref","_$insert","triggerElement","Element","_$effect","_$className","class","trigger","_$createComponent","type","DROPDOWN","customValue","zIndex","children","_$memo","_el$4","_tmpl$3","$$click","_el$2","_tmpl$2","_el$3","firstChild","Provider","value","_p$","_v$","anchor","_v$2","_v$3","_v$4","_v$5","content","e","t","_$setAttribute","a","o","_$style","i","_$delegateEvents"],"sources":["../../../../src/components/dropdown/dropdown.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { trackElement, untrackElement } from '@/utils/element-tracker';\r\nimport { ZIndex, ZIndexType } from '@components/z-index';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport {\r\n createContext,\r\n createEffect,\r\n createSignal,\r\n createUniqueId,\r\n mergeProps,\r\n onCleanup,\r\n ParentComponent,\r\n useContext,\r\n} from 'solid-js';\r\nimport { dropdownStore } from './dropdown.store';\r\nimport { DropdownProps } from './dropdown.types';\r\n\r\n/** Context truyền `closeAll` từ dropdown root xuống tất cả dropdown con */\r\nconst CloseAllContext = createContext(false);\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n position: {\r\n top: 'dropdown-top',\r\n bottom: 'dropdown-bottom',\r\n left: 'dropdown-left',\r\n right: 'dropdown-right',\r\n },\r\n align: {\r\n start: 'dropdown-start',\r\n center: 'dropdown-center',\r\n end: 'dropdown-end',\r\n },\r\n },\r\n});\r\nexport type DropdownVariantsProps = VariantProps<typeof variants>;\r\n\r\ntype TriggerRect = {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n};\r\n\r\nexport const Dropdown: ParentComponent<DropdownProps> = props => {\r\n const p = mergeProps(\r\n {\r\n position: 'bottom' as const,\r\n align: 'start' as const,\r\n blockScroll: true,\r\n closeAll: false,\r\n },\r\n props,\r\n );\r\n\r\n // Kế thừa closeAll từ dropdown cha nếu có\r\n const parentCloseAll = useContext(CloseAllContext);\r\n const shouldCloseAll = () => p.closeAll || parentCloseAll;\r\n\r\n const id = createUniqueId();\r\n const isControlled = () => p.open !== undefined;\r\n\r\n let triggerRef!: HTMLDivElement;\r\n const [rect, setRect] = createSignal<TriggerRect | null>(null);\r\n\r\n const captureRect = () => {\r\n const r = triggerRef.getBoundingClientRect();\r\n setRect({ top: r.top, left: r.left, width: r.width, height: r.height });\r\n };\r\n\r\n const isOpen = () => {\r\n if (isControlled()) return !!p.open;\r\n return dropdownStore.isOpen(id);\r\n };\r\n\r\n createEffect(function trackTrigger() {\r\n if (!isOpen()) {\r\n untrackElement(triggerRef);\r\n return;\r\n }\r\n trackElement(triggerRef, r => setRect(r));\r\n onCleanup(function untrackTrigger() {\r\n untrackElement(triggerRef);\r\n });\r\n });\r\n\r\n createEffect(function handleControlledOpen() {\r\n if (!isControlled()) return;\r\n if (p.open) {\r\n captureRect();\r\n dropdownStore.open(id);\r\n } else {\r\n dropdownStore.close(id);\r\n }\r\n });\r\n\r\n onCleanup(function closeDropdownOnUnmount() {\r\n dropdownStore.close(id);\r\n untrackElement(triggerRef);\r\n });\r\n\r\n const toggle = () => {\r\n if (dropdownStore.isOpen(id)) {\r\n dropdownStore.close(id);\r\n } else {\r\n captureRect();\r\n dropdownStore.open(id);\r\n }\r\n };\r\n\r\n const close = () => (shouldCloseAll() ? dropdownStore.closeAll() : dropdownStore.close(id));\r\n\r\n const anchorStyle = () => {\r\n const r = rect();\r\n if (!r) return {};\r\n return {\r\n '--nd-t': `${r.top}px`,\r\n '--nd-l': `${r.left}px`,\r\n '--nd-w': `${r.width}px`,\r\n '--nd-h': `${r.height}px`,\r\n } as Record<string, string>;\r\n };\r\n return (\r\n <>\r\n <div\r\n ref={el => {\r\n triggerRef = el;\r\n const ref = p.ref;\r\n if (typeof ref === 'function') ref(el);\r\n }}\r\n class={cn('dp01', p.class?.trigger)}\r\n onClick={isControlled() ? undefined : toggle}\r\n >\r\n {p.triggerElement as Element}\r\n </div>\r\n\r\n <ZIndex\r\n open={isOpen()}\r\n type={ZIndexType.DROPDOWN}\r\n blockScroll={p.blockScroll}\r\n class={cn('inset-0', parentCloseAll && 'pointer-events-none')}\r\n customValue={p.zIndex}\r\n >\r\n {!parentCloseAll && <div class=\"dp02\" onClick={close} />}\r\n\r\n <div\r\n class={cn('dp03', p.class?.anchor)}\r\n data-pos={p.position}\r\n data-align={p.align}\r\n style={anchorStyle()}\r\n >\r\n <div class={cn('dp04', p.class?.content)}>\r\n <CloseAllContext.Provider value={shouldCloseAll()}>\r\n {p.children}\r\n </CloseAllContext.Provider>\r\n </div>\r\n </div>\r\n </ZIndex>\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown.store.js","names":[],"sources":["../../../../src/components/dropdown/dropdown.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\r\n\r\nconst [openIds, setOpenIds] = createSignal<ReadonlySet<string>>(new Set(), { equals: false });\r\n\r\nexport const dropdownStore = {\r\n openIds,\r\n open: (id: string) =>\r\n setOpenIds(prev => {\r\n if (prev.has(id)) return prev;\r\n const next = new Set(prev);\r\n next.add(id);\r\n return next;\r\n }),\r\n close: (id: string) =>\r\n setOpenIds(prev => {\r\n if (!prev.has(id)) return prev;\r\n const next = new Set(prev);\r\n next.delete(id);\r\n return next;\r\n }),\r\n closeAll: () => setOpenIds(new Set<string>()),\r\n isOpen: (id: string) => openIds().has(id),\r\n};\r\n"],"mappings":"wCAEA,GAAM,CAAC,EAAS,GAAc,EAAkC,IAAI,IAAO,CAAE,OAAQ,GAAO,CAAC,CAEhF,EAAgB,CAC3B,UACA,KAAO,GACL,EAAW,GAAQ,CACjB,GAAI,EAAK,IAAI,EAAG,CAAE,OAAO,EACzB,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,IAAI,EAAG,CACL,GACP,CACJ,MAAQ,GACN,EAAW,GAAQ,CACjB,GAAI,CAAC,EAAK,IAAI,EAAG,CAAE,OAAO,EAC1B,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,OAAO,EAAG,CACR,GACP,CACJ,aAAgB,EAAW,IAAI,IAAc,CAC7C,OAAS,GAAe,GAAS,CAAC,IAAI,EAAG,CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"float-button.js","names":["cn","For","Match","mergeProps","Show","Switch","Component","Button","FloatButtonProps","DEFAULT_PROPS","type","color","size","animate","closeIcon","label","icon","renderAnimateClass","AnimateInfinite","Record","ripple","pulse","bounce","heartBeat","headShake","swing","jello","renderBadgeWidth","count","FloatButtonBadge","badge","p","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","_el$3","_tmpl$2","_$effect","_$className","class","FloatButton","props","_$createComponent","children","when","_el$4","_tmpl$3","_el$5","_$addEventListener","onClickOpen","variant","shape","tabIndex","style","width","height","_el$6","_tmpl$5","_el$7","_el$8","nextSibling","_el$9","_c$2","onClickClose","_$setStyleProperty","Element","_el$0","_tmpl$4","each","actions","item","_el$1","_tmpl$6","index","console","warn","_$delegateEvents"],"sources":["../../../../src/components/float-button/float-button.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { For, Match, mergeProps, Show, Switch, type Component } from 'solid-js';\r\nimport { Button } from '../button';\r\nimport type { FloatButtonProps } from './float-button.types';\r\n\r\nconst DEFAULT_PROPS: FloatButtonProps = {\r\n type: 'default',\r\n color: 'var(--color-warning)',\r\n size: 24,\r\n animate: 'none',\r\n closeIcon: {\r\n label: 'Close',\r\n icon: 'X',\r\n },\r\n};\r\n\r\nexport function renderAnimateClass(animate: string | undefined) {\r\n const AnimateInfinite: Record<string, string> = {\r\n ripple: 'animate-ripple',\r\n pulse: 'animate-pulse',\r\n bounce: 'animate-bounce',\r\n heartBeat: 'animate-heartBeat',\r\n headShake: 'animate-headShake',\r\n swing: 'animate-swing',\r\n jello: 'animate-jello',\r\n };\r\n return animate ? AnimateInfinite[animate] : '';\r\n}\r\nfunction renderBadgeWidth(count: number): string {\r\n if (count >= 10_000) return 'px-1 translate-x-2';\r\n if (count >= 1000) return 'px-1 translate-x-1 -translate-y-1';\r\n if (count >= 100) return 'px-1';\r\n return 'w-5';\r\n}\r\nconst FloatButtonBadge: Component<{\r\n badge?: FloatButtonProps['badge'];\r\n}> = p => {\r\n return (\r\n <div class=\"absolute -top-2 -right-2\">\r\n <div\r\n class={cn(\r\n 'bg-error flex h-5 cursor-pointer rounded-full text-xs text-white *:m-auto',\r\n renderBadgeWidth(p.badge?.count!),\r\n p.badge?.animate && `animate-${p.badge?.animate}`,\r\n p.badge?.class,\r\n )}\r\n >\r\n {p.badge?.count && <div>{p.badge?.count}</div>}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const FloatButton: Component<FloatButtonProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n const size = `${p.size}px`;\r\n\r\n return (\r\n <Switch>\r\n <Match when={p.type === 'single'}>\r\n <div class={cn('fab pointer-events-auto', p.class)} onClick={p.onClickOpen}>\r\n <div class=\"relative\">\r\n <Button\r\n icon={p.icon}\r\n variant=\"solid\"\r\n shape=\"circle\"\r\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\r\n tabIndex={0}\r\n style={{\r\n 'background-color': p.color,\r\n width: size,\r\n height: size,\r\n ['--innner-color']: p.color,\r\n ['--btn-color']: p.color,\r\n }}\r\n />\r\n <Show when={p.badge?.count}>\r\n <FloatButtonBadge badge={p.badge} />\r\n </Show>\r\n </div>\r\n </div>\r\n </Match>\r\n <Match when={p.type !== 'single'}>\r\n <div class={cn('fab', p.type === 'flower' && 'fab-flower', p.class)}>\r\n <div class=\"relative\" tabIndex={0}>\r\n <Button\r\n icon={p.icon}\r\n variant=\"solid\"\r\n shape=\"circle\"\r\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\r\n style={{\r\n 'background-color': p.color,\r\n width: size,\r\n height: size,\r\n ['--innner-color']: p.color,\r\n }}\r\n />\r\n <Show when={p.badge?.count}>\r\n <FloatButtonBadge badge={p.badge} />\r\n </Show>\r\n </div>\r\n\r\n <div class=\"fab-close\">\r\n {p.type === 'default' && p.closeIcon?.label}\r\n <div\r\n class=\"float-close btn btn-circle btn-error\"\r\n style={{ width: size, height: size }}\r\n onClick={p.closeIcon?.onClickClose}\r\n >\r\n {(p.closeIcon?.icon as Element) ?? 'orange'}\r\n </div>\r\n </div>\r\n <Switch>\r\n <Match when={p.type === 'default'}>\r\n <div class=\"float-menu flex flex-col items-end\">\r\n <For each={p.actions}>\r\n {item => {\r\n return <div class=\"flex gap-2\">{item as Element}</div>;\r\n }}\r\n </For>\r\n </div>\r\n </Match>\r\n <Match when={p.type === 'flower'}>\r\n <For each={p.actions}>\r\n {(item, index) => {\r\n if (index() > 3) {\r\n console.warn(\r\n 'Chỉ có thể nhận tối đa 4 component. Cần xóa các Component sau: ',\r\n item,\r\n );\r\n return;\r\n }\r\n return <>{item}</>;\r\n }}\r\n </For>\r\n </Match>\r\n </Switch>\r\n </div>\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-3d-image.js","names":["cn","Image","ImagePreview","Component","createSignal","Show","ImagePreviewProps","Hover3DImage","image","preview","enabled","previewOptions","class","Partial","Record","p","open","setOpen","previewEnabled","_el$","_tmpl$","_el$2","firstChild","_el$3","$$click","_$spread","_$mergeProps","_$effect","_p$","_v$","root","_v$2","figure","e","_$className","t","undefined","_$createComponent","when","children","src","imageName","_$memo","alt","onClose","_$delegateEvents"],"sources":["../../../../src/components/hover-3d-image/hover-3d-image.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Image } from '@/utils/helper';\r\nimport { ImagePreview } from '@components/image-preview';\r\nimport { Component, createSignal, Show } from 'solid-js';\r\nimport { ImagePreviewProps } from '../image-preview/image-preview';\r\n\r\nexport const Hover3DImage: Component<{\r\n image: Image;\r\n /** Bật/tắt tính năng click để preview ảnh. @default true */\r\n preview?: boolean | { enabled: true; previewOptions?: ImagePreviewProps };\r\n class?: Partial<Record<'root' | 'figure' | 'image', string>>;\r\n}> = p => {\r\n const [open, setOpen] = createSignal(false);\r\n const previewEnabled = () => p.preview !== false;\r\n\r\n return (\r\n <>\r\n <div\r\n class={cn('hover-3d', previewEnabled() && 'cursor-zoom-in', p.class?.root)}\r\n onClick={() => previewEnabled() && setOpen(true)}\r\n >\r\n <figure class={cn('rounded-2xl', p.class?.figure)}>\r\n <img {...p.image} />\r\n </figure>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n\r\n <Show when={open()}>\r\n <ImagePreview\r\n src={p.image.src}\r\n imageName={typeof p.image.alt === 'string' ? p.image.alt : undefined}\r\n onClose={() => setOpen(false)}\r\n {...(typeof p.preview === 'object' ? p.preview.previewOptions : undefined)}\r\n />\r\n </Show>\r\n </>\r\n );\r\n};\r\n"],"mappings":"qaAMaO,EAKRQ,GAAK,CACR,GAAM,CAACC,EAAMC,GAAWb,EAAa,GAAM,CACrCc,MAAuBH,EAAEN,UAAY,GAE3C,MAAA,MAAA,CAAA,IAAAU,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAMuD,MANvDH,GAAAK,YAIqBN,GAAgB,EAAID,EAAQ,GAAK,CAAAQ,EAAAF,EAAAG,MAGrCX,EAAEP,MAAK,CAAA,GAAA,GAAA,CAAAmB,EAAAC,GAAA,CAAA,IAAAC,EAJX7B,EAAG,WAAYkB,GAAgB,EAAI,iBAAkBH,EAAEH,OAAOkB,KAAK,CAAAC,EAG3D/B,EAAG,cAAee,EAAEH,OAAOoB,OAAO,CAAA,OAAAH,IAAAD,EAAAK,GAAAC,EAAAf,EAAAS,EAAAK,EAAAJ,EAAA,CAAAE,IAAAH,EAAAO,GAAAD,EAAAb,EAAAO,EAAAO,EAAAJ,EAAA,CAAAH,GAAA,CAAAK,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAjB,KAAA,CAAAkB,EAalDhC,EAAI,CAAA,IAACiC,MAAI,CAAA,OAAEtB,GAAM,EAAA,IAAAuB,UAAA,CAAA,OAAAF,EACfnC,EAAYwB,EAAA,CAAA,IACXc,KAAG,CAAA,OAAEzB,EAAEP,MAAMgC,KAAG,IAChBC,WAAS,CAAA,OAAEC,MAAA,OAAO3B,EAAEP,MAAMmC,KAAQ,SAAQ,EAAA,CAAG5B,EAAEP,MAAMmC,IAAMP,IAAAA,IAC3DQ,YAAe3B,EAAQ,GAAK,CAAC,KACxB,OAAOF,EAAEN,SAAY,SAAWM,EAAEN,QAAQE,eAAiByB,IAAAA,GAAS,CAAA,EAAA,CAAA,CAAA,EAKjFS,EAAA,CAAA,QAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{ZIndexType as t}from"../z-index/z-index.types.js";import{ZIndex as n}from"../z-index/z-index.js";import{x_default as r}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{flip_horizontal_2_default as i}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/flip-horizontal-2.js";import{flip_vertical_2_default as a}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/flip-vertical-2.js";import{info_default as o}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/info.js";import{maximize_2_default as s}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/maximize-2.js";import{rotate_ccw_default as c}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/rotate-ccw.js";import{rotate_cw_default as l}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/rotate-cw.js";import{zoom_in_default as u}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/zoom-in.js";import{zoom_out_default as d}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/zoom-out.js";import{addEventListener as f,className as p,createComponent as m,delegateEvents as h,effect as g,insert as _,memo as v,setAttribute as y,setStyleProperty as ee,template as b,use as x}from"solid-js/web";import{Show as S,createSignal as C,mergeProps as w,onCleanup as T,onMount as E}from"solid-js";var D=b(`<div class="flex items-start gap-2"><span class="w-24 shrink-0 text-white/40"></span><span class="min-w-0 break-all text-white/90">`),O=b(`<div class=img07>`),k=b(`<div><p class="mb-2 text-xs font-semibold tracking-wide text-white/50 uppercase">Image Info</p><div class="flex flex-col gap-1.5 text-xs">`),A=b(`<div class=relative><button title="Image info">`),j=b(`<div><button></button><div><img></div><div><button title="Flip vertically"></button><button title="Flip horizontally"></button><div class=img07></div><button title="Rotate counter-clockwise"></button><button title="Rotate clockwise"></button><div class=img07></div><button title="Zoom out"></button><span>%</span><button title="Zoom in"></button><div class=img07></div><button title="Reset to 100%">`),M=.25,N=.25,P=4;function F(e){if(!e)return;let t=e instanceof Date?e:new Date(e);return isNaN(t.getTime())?String(e):t.toLocaleString(`en-US`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`})}function I(e){return m(S,{get when(){return e.value},get children(){var t=D(),n=t.firstChild,r=n.nextSibling;return _(n,()=>e.label),_(r,()=>e.value),t}})}function L(h){h=w({closeOnBackdrop:!1,closeOnEsc:!0},h);let[b,D]=C(0),[L,R]=C(!1),[z,B]=C(!1),[V,H]=C(1),[U,W]=C(0),[te,G]=C(0),[K,ne]=C(!1),[q,re]=C(!1),[J,ie]=C(null),Y=0,ae=0,oe=0,se=0,ce=()=>V()>1,le=()=>{let e=L()?-V():V(),t=z()?-V():V();return`translate(${U()}px, ${te()}px) rotate(${b()}deg) scale(${e}, ${t})`},ue=()=>H(e=>Math.min(+(e+M).toFixed(2),P)),de=()=>{let e=Math.max(+(V()-M).toFixed(2),N);H(e),e<=1&&(W(0),G(0))},fe=()=>{H(1),W(0),G(0)},pe=()=>{D(e=>e+90),W(0),G(0)},me=()=>{D(e=>e-90),W(0),G(0)},he=()=>R(e=>!e),ge=()=>B(e=>!e),_e=e=>{ce()&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),ne(!0),Y=e.clientX,ae=e.clientY,oe=U(),se=te())},ve=e=>{K()&&(W(oe+e.clientX-Y),G(se+e.clientY-ae))},ye=()=>ne(!1),X,Z,Q,$;E(()=>{let e=e=>{e.preventDefault();let t=e.deltaY<0?M:-M,n=V(),r=Math.min(Math.max(+(n+t).toFixed(2),N),P);if(r===n)return;let i=Z.getBoundingClientRect(),a=e.clientX-i.left-i.width/2,o=e.clientY-i.top-i.height/2,s=r/n-1;H(r),W(e=>e-(a-e)*s),G(e=>e-(o-e)*s),r<=1&&(W(0),G(0))},t=e=>{e.key===`Escape`&&(h.closeOnEsc??!0)&&(e.stopImmediatePropagation(),h.onClose())},n=e=>{if(!q())return;let t=e.target;!Q?.contains(t)&&!$?.contains(t)&&re(!1)},r=e=>e.preventDefault();X.addEventListener(`wheel`,r,{passive:!1}),Z.addEventListener(`wheel`,e,{passive:!1}),document.addEventListener(`pointerdown`,n),document.addEventListener(`keydown`,t,{capture:!0}),T(function(){X.removeEventListener(`wheel`,r),Z.removeEventListener(`wheel`,e),document.removeEventListener(`pointerdown`,n),document.removeEventListener(`keydown`,t,{capture:!0})})});let be=()=>!!(h.imageName||h.size||h.createdAt||h.modifiedAt);return m(n,{open:!0,get type(){return t.MODAL},blockScroll:!0,positioning:`fixed`,preRender:!1,get customValue(){return h.zIndex},class:`inset-0`,get children(){var t=j(),n=t.firstChild,b=n.nextSibling,C=b.firstChild,w=b.nextSibling,T=w.firstChild,E=T.nextSibling,D=E.nextSibling.nextSibling,M=D.nextSibling,L=M.nextSibling.nextSibling,R=L.nextSibling,z=R.firstChild,B=R.nextSibling,H=B.nextSibling.nextSibling;f(t,`click`,h.closeOnBackdrop?h.onClose:void 0,!0);var U=X;typeof U==`function`?x(U,t):X=t,f(n,`click`,h.onClose,!0),_(n,m(r,{size:20})),b.addEventListener(`pointercancel`,ye),b.$$pointerup=ye,b.$$pointermove=ve,b.$$pointerdown=_e,b.$$click=e=>e.stopPropagation();var W=Z;return typeof W==`function`?x(W,b):Z=b,C.addEventListener(`load`,e=>{let t=e.currentTarget;ie({w:t.naturalWidth,h:t.naturalHeight})}),y(C,`draggable`,!1),w.$$click=e=>e.stopPropagation(),T.$$click=ge,_(T,m(a,{size:16})),E.$$click=he,_(E,m(i,{size:16})),D.$$click=me,_(D,m(c,{size:16})),M.$$click=pe,_(M,m(l,{size:16})),L.$$click=de,_(L,m(d,{size:16})),_(R,()=>Math.round(V()*100),z),B.$$click=ue,_(B,m(u,{size:16})),H.$$click=fe,_(H,m(s,{size:16})),_(w,m(S,{get when(){return be()},get children(){return[O(),(()=>{var t=A(),n=t.firstChild;n.$$click=()=>re(e=>!e);var r=$;return typeof r==`function`?x(r,n):$=n,_(n,m(o,{size:16})),_(t,m(S,{get when(){return q()},get children(){var t=k(),n=t.firstChild.nextSibling,r=Q;return typeof r==`function`?x(r,t):Q=t,_(n,m(I,{label:`File name`,get value(){return h.imageName}}),null),_(n,m(I,{label:`Size`,get value(){return h.size}}),null),_(n,m(I,{label:`Dimension`,get value(){return v(()=>!!J())()?`${J().w} × ${J().h} px`:void 0}}),null),_(n,m(I,{label:`Created`,get value(){return F(h.createdAt)}}),null),_(n,m(I,{label:`Modified`,get value(){return F(h.modifiedAt)}}),null),g(()=>p(t,e(`img09`,h.class?.infoPopup))),t}}),null),g(()=>p(n,e(`img06`,q()&&`bg-white/20 text-white`,h.class?.toolBtn))),t})()]}}),null),g(r=>{var i=e(`img01`,h.class?.backdrop),a=e(`img02`,h.class?.close),o=e(`img03`,ce()&&(K()?`cursor-grabbing`:`cursor-grab`),h.class?.box),s=h.src,c=h.imageName,l=e(`img04`,K()&&`img04--drag`,h.class?.img),u=le(),d=e(`img05`,h.class?.toolbar),f=e(`img06`,h.class?.toolBtn),m=e(`img06`,h.class?.toolBtn),g=e(`img06`,h.class?.toolBtn),_=e(`img06`,h.class?.toolBtn),v=e(`img06`,h.class?.toolBtn),x=V()<=N,S=e(`img08`,h.class?.zoomLabel),O=e(`img06`,h.class?.toolBtn),k=V()>=P,A=e(`img06`,h.class?.toolBtn),j=V()===1;return i!==r.e&&p(t,r.e=i),a!==r.t&&p(n,r.t=a),o!==r.a&&p(b,r.a=o),s!==r.o&&y(C,`src`,r.o=s),c!==r.i&&y(C,`alt`,r.i=c),l!==r.n&&p(C,r.n=l),u!==r.s&&ee(C,`transform`,r.s=u),d!==r.h&&p(w,r.h=d),f!==r.r&&p(T,r.r=f),m!==r.d&&p(E,r.d=m),g!==r.l&&p(D,r.l=g),_!==r.u&&p(M,r.u=_),v!==r.c&&p(L,r.c=v),x!==r.w&&(L.disabled=r.w=x),S!==r.m&&p(R,r.m=S),O!==r.f&&p(B,r.f=O),k!==r.y&&(B.disabled=r.y=k),A!==r.g&&p(H,r.g=A),j!==r.p&&(H.disabled=r.p=j),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0,y:void 0,g:void 0,p:void 0}),t}})}h([`click`,`pointerdown`,`pointermove`,`pointerup`]);export{L as ImagePreview};
|
|
2
|
+
//# sourceMappingURL=image-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-preview.js","names":["cn","ZIndex","ZIndexType","FlipHorizontal2","FlipVertical2","Info","Maximize2","RotateCcw","RotateCw","X","ZoomIn","ZoomOut","createSignal","mergeProps","onCleanup","onMount","Show","ImagePreviewClassProps","backdrop","close","box","img","toolbar","toolBtn","zoomLabel","infoPopup","ImagePreviewProps","src","imageName","size","createdAt","Date","modifiedAt","onClose","closeOnBackdrop","closeOnEsc","class","zIndex","ZOOM_STEP","ZOOM_MIN","ZOOM_MAX","formatDate","value","undefined","d","isNaN","getTime","String","toLocaleString","day","month","year","hour","minute","InfoRow","props","label","_$createComponent","when","children","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$insert","ImagePreview","p","rotate","setRotate","flipH","setFlipH","flipV","setFlipV","scale","setScale","offsetX","setOffsetX","offsetY","setOffsetY","isDragging","setIsDragging","showInfo","setShowInfo","naturalSize","setNaturalSize","w","h","dragStartX","dragStartY","dragStartOffsetX","dragStartOffsetY","canPan","imgTransform","sx","sy","zoomIn","s","Math","min","toFixed","zoomOut","next","max","resetView","rotateCw","r","rotateCcw","doFlipH","v","doFlipV","onPointerDown","e","PointerEvent","preventDefault","currentTarget","HTMLElement","setPointerCapture","pointerId","clientX","clientY","onPointerMove","onPointerUp","backdropRef","HTMLDivElement","boxRef","infoPopupRef","infoBtnRef","HTMLButtonElement","onWheel","WheelEvent","delta","deltaY","oldScale","newScale","rect","getBoundingClientRect","cx","left","width","cy","top","height","ratio","ox","oy","onKeyDown","KeyboardEvent","key","stopImmediatePropagation","onDocPointerDown","target","Node","contains","preventScroll","addEventListener","passive","document","capture","removePreviewEventListeners","removeEventListener","hasInfo","open","type","MODAL","blockScroll","positioning","preRender","customValue","_el$4","_tmpl$5","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_el$17","_el$18","_$addEventListener","_ref$","_$use","$$pointerup","$$pointermove","$$pointerdown","$$click","stopPropagation","_ref$2","HTMLImageElement","naturalWidth","naturalHeight","_$setAttribute","round","_tmpl$2","_el$20","_tmpl$4","_el$21","_ref$3","_el$22","_tmpl$3","_el$23","_el$24","_ref$4","_$memo","_$effect","_$className","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","t","a","o","i","n","_$setStyleProperty","l","u","c","disabled","m","f","y","g","_$delegateEvents"],"sources":["../../../../src/components/image-preview/image-preview.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { ZIndex, ZIndexType } from '@components/z-index';\r\nimport FlipHorizontal2 from 'lucide-solid/icons/flip-horizontal-2';\r\nimport FlipVertical2 from 'lucide-solid/icons/flip-vertical-2';\r\nimport Info from 'lucide-solid/icons/info';\r\nimport Maximize2 from 'lucide-solid/icons/maximize-2';\r\nimport RotateCcw from 'lucide-solid/icons/rotate-ccw';\r\nimport RotateCw from 'lucide-solid/icons/rotate-cw';\r\nimport X from 'lucide-solid/icons/x';\r\nimport ZoomIn from 'lucide-solid/icons/zoom-in';\r\nimport ZoomOut from 'lucide-solid/icons/zoom-out';\r\nimport { createSignal, mergeProps, onCleanup, onMount, Show } from 'solid-js';\r\n\r\ntype ImagePreviewClassProps = {\r\n backdrop?: string;\r\n close?: string;\r\n box?: string;\r\n img?: string;\r\n toolbar?: string;\r\n toolBtn?: string;\r\n zoomLabel?: string;\r\n infoPopup?: string;\r\n};\r\n\r\nexport type ImagePreviewProps = {\r\n src: string;\r\n imageName?: string;\r\n size?: string;\r\n createdAt?: Date | string;\r\n modifiedAt?: Date | string;\r\n onClose: () => void;\r\n closeOnBackdrop?: boolean;\r\n closeOnEsc?: boolean;\r\n class?: ImagePreviewClassProps;\r\n zIndex?: number;\r\n};\r\n\r\nconst ZOOM_STEP = 0.25;\r\nconst ZOOM_MIN = 0.25;\r\nconst ZOOM_MAX = 4;\r\n\r\nfunction formatDate(value: Date | string | undefined): string | undefined {\r\n if (!value) return undefined;\r\n const d = value instanceof Date ? value : new Date(value);\r\n if (isNaN(d.getTime())) return String(value);\r\n return d.toLocaleString('en-US', {\r\n day: '2-digit',\r\n month: '2-digit',\r\n year: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n}\r\n\r\nfunction InfoRow(props: { label: string; value: string | undefined }) {\r\n return (\r\n <Show when={props.value}>\r\n <div class=\"flex items-start gap-2\">\r\n <span class=\"w-24 shrink-0 text-white/40\">{props.label}</span>\r\n <span class=\"min-w-0 break-all text-white/90\">{props.value}</span>\r\n </div>\r\n </Show>\r\n );\r\n}\r\n\r\nexport function ImagePreview(p: ImagePreviewProps) {\r\n p = mergeProps({ closeOnBackdrop: false, closeOnEsc: true }, p);\r\n const [rotate, setRotate] = createSignal(0);\r\n const [flipH, setFlipH] = createSignal(false);\r\n const [flipV, setFlipV] = createSignal(false);\r\n const [scale, setScale] = createSignal(1);\r\n const [offsetX, setOffsetX] = createSignal(0);\r\n const [offsetY, setOffsetY] = createSignal(0);\r\n const [isDragging, setIsDragging] = createSignal(false);\r\n const [showInfo, setShowInfo] = createSignal(false);\r\n const [naturalSize, setNaturalSize] = createSignal<{ w: number; h: number } | null>(null);\r\n\r\n let dragStartX = 0;\r\n let dragStartY = 0;\r\n let dragStartOffsetX = 0;\r\n let dragStartOffsetY = 0;\r\n\r\n const canPan = () => scale() > 1;\r\n\r\n const imgTransform = () => {\r\n const sx = flipH() ? -scale() : scale();\r\n const sy = flipV() ? -scale() : scale();\r\n return `translate(${offsetX()}px, ${offsetY()}px) rotate(${rotate()}deg) scale(${sx}, ${sy})`;\r\n };\r\n\r\n const zoomIn = () => setScale(s => Math.min(+(s + ZOOM_STEP).toFixed(2), ZOOM_MAX));\r\n\r\n const zoomOut = () => {\r\n const next = Math.max(+(scale() - ZOOM_STEP).toFixed(2), ZOOM_MIN);\r\n setScale(next);\r\n if (next <= 1) {\r\n setOffsetX(0);\r\n setOffsetY(0);\r\n }\r\n };\r\n\r\n const resetView = () => {\r\n setScale(1);\r\n setOffsetX(0);\r\n setOffsetY(0);\r\n };\r\n\r\n const rotateCw = () => {\r\n setRotate(r => r + 90);\r\n setOffsetX(0);\r\n setOffsetY(0);\r\n };\r\n const rotateCcw = () => {\r\n setRotate(r => r - 90);\r\n setOffsetX(0);\r\n setOffsetY(0);\r\n };\r\n const doFlipH = () => setFlipH(v => !v);\r\n const doFlipV = () => setFlipV(v => !v);\r\n\r\n const onPointerDown = (e: PointerEvent) => {\r\n if (!canPan()) return;\r\n e.preventDefault();\r\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\r\n setIsDragging(true);\r\n dragStartX = e.clientX;\r\n dragStartY = e.clientY;\r\n dragStartOffsetX = offsetX();\r\n dragStartOffsetY = offsetY();\r\n };\r\n\r\n const onPointerMove = (e: PointerEvent) => {\r\n if (!isDragging()) return;\r\n setOffsetX(dragStartOffsetX + e.clientX - dragStartX);\r\n setOffsetY(dragStartOffsetY + e.clientY - dragStartY);\r\n };\r\n\r\n const onPointerUp = () => setIsDragging(false);\r\n\r\n let backdropRef!: HTMLDivElement;\r\n let boxRef!: HTMLDivElement;\r\n let infoPopupRef!: HTMLDivElement;\r\n let infoBtnRef!: HTMLButtonElement;\r\n\r\n onMount(() => {\r\n const onWheel = (e: WheelEvent) => {\r\n e.preventDefault();\r\n const delta = e.deltaY < 0 ? ZOOM_STEP : -ZOOM_STEP;\r\n const oldScale = scale();\r\n const newScale = Math.min(Math.max(+(oldScale + delta).toFixed(2), ZOOM_MIN), ZOOM_MAX);\r\n if (newScale === oldScale) return;\r\n\r\n const rect = boxRef.getBoundingClientRect();\r\n const cx = e.clientX - rect.left - rect.width / 2;\r\n const cy = e.clientY - rect.top - rect.height / 2;\r\n const ratio = newScale / oldScale - 1;\r\n\r\n setScale(newScale);\r\n setOffsetX(ox => ox - (cx - ox) * ratio);\r\n setOffsetY(oy => oy - (cy - oy) * ratio);\r\n\r\n if (newScale <= 1) {\r\n setOffsetX(0);\r\n setOffsetY(0);\r\n }\r\n };\r\n\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && (p.closeOnEsc ?? true)) {\r\n e.stopImmediatePropagation();\r\n p.onClose();\r\n }\r\n };\r\n\r\n const onDocPointerDown = (e: PointerEvent) => {\r\n if (!showInfo()) return;\r\n const target = e.target as Node;\r\n if (!infoPopupRef?.contains(target) && !infoBtnRef?.contains(target)) {\r\n setShowInfo(false);\r\n }\r\n };\r\n\r\n const preventScroll = (e: WheelEvent) => e.preventDefault();\r\n backdropRef.addEventListener('wheel', preventScroll, { passive: false });\r\n boxRef.addEventListener('wheel', onWheel, { passive: false });\r\n document.addEventListener('pointerdown', onDocPointerDown);\r\n document.addEventListener('keydown', onKeyDown, { capture: true });\r\n\r\n onCleanup(function removePreviewEventListeners() {\r\n backdropRef.removeEventListener('wheel', preventScroll);\r\n boxRef.removeEventListener('wheel', onWheel);\r\n document.removeEventListener('pointerdown', onDocPointerDown);\r\n document.removeEventListener('keydown', onKeyDown, { capture: true });\r\n });\r\n });\r\n\r\n const hasInfo = () => !!(p.imageName || p.size || p.createdAt || p.modifiedAt);\r\n\r\n return (\r\n <ZIndex\r\n open={true}\r\n type={ZIndexType.MODAL}\r\n blockScroll={true}\r\n positioning=\"fixed\"\r\n preRender={false}\r\n customValue={p.zIndex}\r\n class=\"inset-0\"\r\n >\r\n <div\r\n ref={backdropRef}\r\n class={cn('img01', p.class?.backdrop)}\r\n onClick={p.closeOnBackdrop ? p.onClose : undefined}\r\n >\r\n <button class={cn('img02', p.class?.close)} onClick={p.onClose}>\r\n <X size={20} />\r\n </button>\r\n\r\n <div\r\n ref={boxRef}\r\n class={cn(\r\n 'img03',\r\n canPan() && (isDragging() ? 'cursor-grabbing' : 'cursor-grab'),\r\n p.class?.box,\r\n )}\r\n onClick={e => e.stopPropagation()}\r\n onPointerDown={onPointerDown}\r\n onPointerMove={onPointerMove}\r\n onPointerUp={onPointerUp}\r\n onPointerCancel={onPointerUp}\r\n >\r\n <img\r\n src={p.src}\r\n alt={p.imageName}\r\n class={cn('img04', isDragging() && 'img04--drag', p.class?.img)}\r\n style={{ transform: imgTransform() }}\r\n draggable={false}\r\n onLoad={e => {\r\n const img = e.currentTarget as HTMLImageElement;\r\n setNaturalSize({ w: img.naturalWidth, h: img.naturalHeight });\r\n }}\r\n />\r\n </div>\r\n\r\n <div class={cn('img05', p.class?.toolbar)} onClick={e => e.stopPropagation()}>\r\n <button class={cn('img06', p.class?.toolBtn)} onClick={doFlipV} title=\"Flip vertically\">\r\n <FlipVertical2 size={16} />\r\n </button>\r\n <button class={cn('img06', p.class?.toolBtn)} onClick={doFlipH} title=\"Flip horizontally\">\r\n <FlipHorizontal2 size={16} />\r\n </button>\r\n <div class=\"img07\" />\r\n <button\r\n class={cn('img06', p.class?.toolBtn)}\r\n onClick={rotateCcw}\r\n title=\"Rotate counter-clockwise\"\r\n >\r\n <RotateCcw size={16} />\r\n </button>\r\n <button class={cn('img06', p.class?.toolBtn)} onClick={rotateCw} title=\"Rotate clockwise\">\r\n <RotateCw size={16} />\r\n </button>\r\n <div class=\"img07\" />\r\n <button\r\n class={cn('img06', p.class?.toolBtn)}\r\n onClick={zoomOut}\r\n title=\"Zoom out\"\r\n disabled={scale() <= ZOOM_MIN}\r\n >\r\n <ZoomOut size={16} />\r\n </button>\r\n <span class={cn('img08', p.class?.zoomLabel)}>{Math.round(scale() * 100)}%</span>\r\n <button\r\n class={cn('img06', p.class?.toolBtn)}\r\n onClick={zoomIn}\r\n title=\"Zoom in\"\r\n disabled={scale() >= ZOOM_MAX}\r\n >\r\n <ZoomIn size={16} />\r\n </button>\r\n <div class=\"img07\" />\r\n <button\r\n class={cn('img06', p.class?.toolBtn)}\r\n onClick={resetView}\r\n title=\"Reset to 100%\"\r\n disabled={scale() === 1}\r\n >\r\n <Maximize2 size={16} />\r\n </button>\r\n\r\n <Show when={hasInfo()}>\r\n <div class=\"img07\" />\r\n <div class=\"relative\">\r\n <button\r\n ref={infoBtnRef}\r\n class={cn('img06', showInfo() && 'bg-white/20 text-white', p.class?.toolBtn)}\r\n onClick={() => setShowInfo(v => !v)}\r\n title=\"Image info\"\r\n >\r\n <Info size={16} />\r\n </button>\r\n\r\n <Show when={showInfo()}>\r\n <div ref={infoPopupRef} class={cn('img09', p.class?.infoPopup)}>\r\n <p class=\"mb-2 text-xs font-semibold tracking-wide text-white/50 uppercase\">\r\n Image Info\r\n </p>\r\n <div class=\"flex flex-col gap-1.5 text-xs\">\r\n <InfoRow label=\"File name\" value={p.imageName} />\r\n <InfoRow label=\"Size\" value={p.size} />\r\n <InfoRow\r\n label=\"Dimension\"\r\n value={\r\n naturalSize() ? `${naturalSize()!.w} × ${naturalSize()!.h} px` : undefined\r\n }\r\n />\r\n <InfoRow label=\"Created\" value={formatDate(p.createdAt)} />\r\n <InfoRow label=\"Modified\" value={formatDate(p.modifiedAt)} />\r\n </div>\r\n </div>\r\n </Show>\r\n </div>\r\n </Show>\r\n </div>\r\n </div>\r\n </ZIndex>\r\n );\r\n}\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indicator.js","names":["cn","getColor","Component","mergeProps","Show","IndicatorProps","BaseColorProps","DEFAULT_PROPS","count","showExact","color","top","right","formatCount","String","isPill","text","length","toPx","value","Indicator","props","p","label","pill","_el$","_tmpl$2","_$insert","children","_$createComponent","when","_el$2","_tmpl$","_$effect","_p$","_v$","class","badge","_v$2","_v$3","e","_$className","t","_$setStyleProperty","a","undefined","root"],"sources":["../../../../src/components/indicator/indicator.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport { getColor } from '@utils/helper';\nimport { Component, mergeProps, Show } from 'solid-js';\nimport type { IndicatorProps } from './indicator.types';\nimport type { BaseColorProps } from '@/type';\n\nconst DEFAULT_PROPS = {\n count: 0,\n showExact: false,\n color: 'error' as BaseColorProps,\n top: 0,\n right: 0,\n};\n\nfunction formatCount(count: number, showExact: boolean): string {\n if (count > 99 && !showExact) return '99+';\n return String(count);\n}\n\nfunction isPill(text: string): boolean {\n return text.length > 2;\n}\n\nfunction toPx(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const Indicator: Component<IndicatorProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n const label = () => formatCount(p.count, p.showExact);\n const pill = () => isPill(label());\n\n return (\n <div class={cn('in01', p.class?.root)}>\n {p.children}\n <Show when={p.count > 0}>\n <span\n class={cn('in02', pill() ? 'in04' : 'in03', getColor(p.color), p.class?.badge)}\n style={{\n '--in-top': toPx(p.top),\n '--in-right': toPx(p.right),\n }}\n >\n {label()}\n </span>\n </Show>\n </div>\n );\n};\n"],"mappings":"iSAMMO,EAAgB,CACpBC,MAAO,EACPC,UAAW,GACXC,MAAO,QACPC,IAAK,EACLC,MAAO,EACR,CAED,SAASC,EAAYL,EAAeC,EAA4B,CAE9D,OADID,EAAQ,IAAM,CAACC,EAAkB,MAC9BK,OAAON,EAAM,CAGtB,SAASO,EAAOC,EAAuB,CACrC,OAAOA,EAAKC,OAAS,EAGvB,SAASC,EAAKC,EAAgC,CAC5C,OAAO,OAAOA,GAAU,SAAW,GAAGA,EAAK,IAAOA,EAGpD,IAAaC,EAAuCC,GAAS,CAC3D,IAAMC,EAAInB,EAAWI,EAAec,EAAM,CAEpCE,MAAcV,EAAYS,EAAEd,MAAOc,EAAEb,UAAU,CAC/Ce,MAAaT,EAAOQ,GAAO,CAAC,CAElC,WAAA,CAAA,IAAAE,EAAAC,GAAA,CACuC,OADvCC,EAAAF,MAEKH,EAAEM,SAAQ,KAAA,CAAAD,EAAAF,EAAAI,EACVzB,EAAI,CAAA,IAAC0B,MAAI,CAAA,OAAER,EAAEd,MAAQ,GAAC,IAAAoB,UAAA,CAAA,IAAAG,EAAAC,GAAA,CAKU,OALVL,EAAAI,EAQlBR,EAAK,CAAAU,EAAAC,GAAA,CAAA,IAAAC,EANCnC,EAAG,OAAQwB,GAAM,CAAG,OAAS,OAAQvB,EAASqB,EAAEZ,MAAM,CAAEY,EAAEc,OAAOC,MAAM,CAAAC,EAEhEpB,EAAKI,EAAEX,IAAI,CAAA4B,EACTrB,EAAKI,EAAEV,MAAM,CAAA,OAAAuB,IAAAD,EAAAM,GAAAC,EAAAV,EAAAG,EAAAM,EAAAL,EAAA,CAAAG,IAAAJ,EAAAQ,GAAAC,EAAAZ,EAAA,WAAAG,EAAAQ,EAAAJ,EAAA,CAAAC,IAAAL,EAAAU,GAAAD,EAAAZ,EAAA,aAAAG,EAAAU,EAAAL,EAAA,CAAAL,GAAA,CAAAM,EAAAK,IAAAA,GAAAH,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAd,GAAA,CAAA,CAAA,KAAA,CAAAE,MAAAQ,EAAAhB,EAPvBzB,EAAG,OAAQsB,EAAEc,OAAOU,KAAK,CAAA,CAAA,CAAArB,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","names":["Component","createMemo","lazy","on","InputColorProps","InputDateProps","InputNumberProps","InputOTPProps","InputPasswordProps","InputRangeProps","InputTextAreaProps","InputTextProps","InputRadioProps","InputText","then","m","default","InputNumber","InputColor","InputPassword","InputDate","InputRange","InputTextArea","InputOTP","InputRadio","InputProps","Input","Text","TextArea","Color","Date","Number","Password","Range","OTP","Radio","props","render","type","_$createComponent","_$memo","InputVariantsProps","TextAreaVariantsProps"],"sources":["../../../../src/components/input/input.tsx"],"sourcesContent":["import { Component, createMemo, lazy, on } from 'solid-js';\r\nimport type {\r\n InputColorProps,\r\n InputDateProps,\r\n InputNumberProps,\r\n InputOTPProps,\r\n InputPasswordProps,\r\n InputRangeProps,\r\n InputTextAreaProps,\r\n InputTextProps,\r\n} from './input.types';\r\nimport { InputRadioProps } from './variants/input-radio';\r\n\r\nconst InputText = lazy(() => import('./variants/input-text').then(m => ({ default: m.InputText })));\r\nconst InputNumber = lazy(() =>\r\n import('./variants/input-number').then(m => ({ default: m.InputNumber })),\r\n);\r\nconst InputColor = lazy(() =>\r\n import('./variants/input-color').then(m => ({ default: m.InputColor })),\r\n);\r\nconst InputPassword = lazy(() =>\r\n import('./variants/input-password').then(m => ({ default: m.InputPassword })),\r\n);\r\nconst InputDate = lazy(() => import('./variants/input-date').then(m => ({ default: m.InputDate })));\r\nconst InputRange = lazy(() =>\r\n import('./variants/input-range').then(m => ({ default: m.InputRange })),\r\n);\r\nconst InputTextArea = lazy(() =>\r\n import('./variants/input-textarea').then(m => ({ default: m.InputTextArea })),\r\n);\r\nconst InputOTP = lazy(() => import('./variants/input-otp').then(m => ({ default: m.InputOTP })));\r\n\r\nconst InputRadio = lazy(() =>\r\n import('./variants/input-radio').then(m => ({ default: m.InputRadio })),\r\n);\r\n\r\ntype InputProps =\r\n | InputTextProps\r\n | InputColorProps\r\n | InputDateProps\r\n | InputNumberProps\r\n | InputPasswordProps\r\n | InputRangeProps\r\n | InputTextAreaProps\r\n | InputOTPProps\r\n | InputRadioProps;\r\n\r\nexport const Input: Component<InputProps> & {\r\n Text: Component<InputTextProps>;\r\n TextArea: Component<InputTextAreaProps>;\r\n Color: Component<InputColorProps>;\r\n Date: Component<InputDateProps>;\r\n Number: Component<InputNumberProps>;\r\n Password: Component<InputPasswordProps>;\r\n Range: Component<InputRangeProps>;\r\n OTP: Component<InputOTPProps>;\r\n Radio: Component<InputRadioProps>;\r\n} = props => {\r\n const render = createMemo(\r\n on(\r\n () => props.type,\r\n () => {\r\n switch (props.type) {\r\n case 'text':\r\n return <InputText {...props} />;\r\n case 'textarea':\r\n return <InputTextArea {...props} />;\r\n case 'number':\r\n return <InputNumber {...props} />;\r\n case 'password':\r\n return <InputPassword {...props} />;\r\n case 'color':\r\n return <InputColor {...props} />;\r\n case 'date':\r\n return <InputDate {...props} />;\r\n case 'range':\r\n return <InputRange {...props} />;\r\n case 'otp':\r\n return <InputOTP {...props} />;\r\n case 'radio':\r\n return <InputRadio {...props} />;\r\n default:\r\n return <InputText {...(props as InputTextProps)} />;\r\n }\r\n },\r\n ),\r\n );\r\n return <>{render()}</>;\r\n};\r\n\r\nInput.Text = InputText as Component<InputTextProps>;\r\nInput.TextArea = InputTextArea as Component<InputTextAreaProps>;\r\nInput.Color = InputColor as Component<InputColorProps>;\r\nInput.Date = InputDate as Component<InputDateProps>;\r\nInput.Number = InputNumber as Component<InputNumberProps>;\r\nInput.Password = InputPassword as Component<InputPasswordProps>;\r\nInput.Range = InputRange as Component<InputRangeProps>;\r\nInput.OTP = InputOTP as Component<InputOTPProps>;\r\nInput.Radio = InputRadio as Component<InputRadioProps>;\r\nexport type { InputVariantsProps, TextAreaVariantsProps } from './input.utils';\r\n"],"mappings":"iHAaA,IAAMa,EAAYX,MAAW,OAAO,4BAAyBY,KAAKC,IAAM,CAAEC,QAASD,EAAEF,UAAW,EAAE,CAAC,CAC7FI,EAAcf,MAClB,OAAO,8BAA2BY,KAAKC,IAAM,CAAEC,QAASD,EAAEE,YAAa,EACzE,CAAC,CACKC,EAAahB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAEG,WAAY,EACvE,CAAC,CACKC,EAAgBjB,MACpB,OAAO,gCAA6BY,KAAKC,IAAM,CAAEC,QAASD,EAAEI,cAAe,EAC7E,CAAC,CACKC,EAAYlB,MAAW,OAAO,4BAAyBY,KAAKC,IAAM,CAAEC,QAASD,EAAEK,UAAW,EAAE,CAAC,CAC7FC,EAAanB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAEM,WAAY,EACvE,CAAC,CACKC,EAAgBpB,MACpB,OAAO,gCAA6BY,KAAKC,IAAM,CAAEC,QAASD,EAAEO,cAAe,EAC7E,CAAC,CACKC,EAAWrB,MAAW,OAAO,2BAAwBY,KAAKC,IAAM,CAAEC,QAASD,EAAEQ,SAAU,EAAE,CAAC,CAE1FC,EAAatB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAES,WAAY,EACvE,CAAC,CAaYE,EAUTU,GA8BFI,EA7BevC,EACbE,MACQiC,EAAME,SACN,CACJ,OAAQF,EAAME,KAAd,CACE,IAAK,OACH,OAAAC,EAAQ1B,EAAcuB,EAAK,CAC7B,IAAK,WACH,OAAAG,EAAQjB,EAAkBc,EAAK,CACjC,IAAK,SACH,OAAAG,EAAQtB,EAAgBmB,EAAK,CAC/B,IAAK,WACH,OAAAG,EAAQpB,EAAkBiB,EAAK,CACjC,IAAK,QACH,OAAAG,EAAQrB,EAAekB,EAAK,CAC9B,IAAK,OACH,OAAAG,EAAQnB,EAAcgB,EAAK,CAC7B,IAAK,QACH,OAAAG,EAAQlB,EAAee,EAAK,CAC9B,IAAK,MACH,OAAAG,EAAQhB,EAAaa,EAAK,CAC5B,IAAK,QACH,OAAAG,EAAQf,EAAeY,EAAK,CAC9B,QACE,OAAAG,EAAQ1B,EAAeuB,EAAuB,GAIxD,CAAC,CACe,CAGlBV,EAAMC,KAAOd,EACba,EAAME,SAAWN,EACjBI,EAAMG,MAAQX,EACdQ,EAAMI,KAAOV,EACbM,EAAMK,OAASd,EACfS,EAAMM,SAAWb,EACjBO,EAAMO,MAAQZ,EACdK,EAAMQ,IAAMX,EACZG,EAAMS,MAAQX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.utils.js","names":[],"sources":["../../../../src/components/input/input.utils.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority';\r\nimport type { InputBaseProps } from './input.types';\r\n\r\nexport const inputTextVariants = cva('', {\r\n variants: {\r\n size: {\r\n '4xs': 'h-6.5 text-xs',\r\n '3xs': 'h-7 text-xs',\r\n '2xs': 'h-7.5 text-xs',\r\n xs: 'h-8 text-xs',\r\n sm: 'h-8.5',\r\n md: 'h-9',\r\n lg: 'h-9.5',\r\n xl: 'h-10 text-base',\r\n '2xl': 'h-10.5 text-base',\r\n '3xl': 'h-11 text-base',\r\n '4xl': 'h-11.5 text-base',\r\n },\r\n color: {\r\n neutral: 'input-neutral',\r\n primary: 'input-primary',\r\n secondary: 'input-secondary',\r\n accent: 'input-accent',\r\n info: 'input-info',\r\n success: 'input-success',\r\n warning: 'input-warning',\r\n error: 'input-error',\r\n },\r\n variant: {\r\n outline: '',\r\n borderless: 'border-0 outline-0',\r\n filled: 'it02',\r\n },\r\n },\r\n});\r\nexport type InputVariantsProps = VariantProps<typeof inputTextVariants>;\r\n\r\nexport const textareaVariants = cva('', {\r\n variants: {\r\n color: {\r\n neutral: 'textarea-neutral',\r\n primary: 'textarea-primary',\r\n secondary: 'textarea-secondary',\r\n accent: 'textarea-accent',\r\n info: 'textarea-info',\r\n success: 'textarea-success',\r\n warning: 'textarea-warning',\r\n error: 'textarea-error',\r\n },\r\n variant: {\r\n outline: '',\r\n borderless: 'border-0 outline-0',\r\n filled: 'ta03',\r\n },\r\n size: {\r\n xs: 'textarea-xs',\r\n sm: 'textarea-sm',\r\n md: 'textarea-md',\r\n lg: 'textarea-lg',\r\n xl: 'textarea-xl',\r\n },\r\n },\r\n});\r\nexport type TextAreaVariantsProps = VariantProps<typeof textareaVariants>;\r\n\r\nexport const DEFAULT_PROPS: Partial<InputBaseProps> = {\r\n variant: 'outline',\r\n allowClear: true,\r\n color: 'info',\r\n size: 'md',\r\n placeholder: '',\r\n};\r\n"],"mappings":"+CAGA,IAAa,EAAoB,EAAI,GAAI,CACvC,SAAU,CACR,KAAM,CACJ,MAAO,gBACP,MAAO,cACP,MAAO,iBACP,GAAI,cACJ,GAAI,QACJ,GAAI,MACJ,GAAI,QACJ,GAAI,iBACJ,MAAO,mBACP,MAAO,iBACP,MAAO,mBACR,CACD,MAAO,CACL,QAAS,gBACT,QAAS,gBACT,UAAW,kBACX,OAAQ,eACR,KAAM,aACN,QAAS,gBACT,QAAS,gBACT,MAAO,cACR,CACD,QAAS,CACP,QAAS,GACT,WAAY,qBACZ,OAAQ,OACT,CACF,CACF,CAAC,CAGW,EAAmB,EAAI,GAAI,CACtC,SAAU,CACR,MAAO,CACL,QAAS,mBACT,QAAS,mBACT,UAAW,qBACX,OAAQ,kBACR,KAAM,gBACN,QAAS,mBACT,QAAS,mBACT,MAAO,iBACR,CACD,QAAS,CACP,QAAS,GACT,WAAY,qBACZ,OAAQ,OACT,CACD,KAAM,CACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACL,CACF,CACF,CAAC,CAGW,EAAyC,CACpD,QAAS,UACT,WAAY,GACZ,MAAO,OACP,KAAM,KACN,YAAa,GACd"}
|