solid-tom-ui 0.2.3 → 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/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.store.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.types.d.ts.map +1 -1
- package/dist/components/divider/divider.d.ts.map +1 -1
- package/dist/components/divider/divider.types.d.ts.map +1 -1
- package/dist/components/divider/index.d.ts +1 -1
- package/dist/components/divider/index.d.ts.map +1 -1
- package/dist/components/drawer/drawer.types.d.ts.map +1 -1
- package/dist/components/mansory/mansory.d.ts.map +1 -1
- package/dist/components/mansory/mansory.types.d.ts.map +1 -1
- package/dist/components/modal/modal.d.ts.map +1 -1
- package/dist/components/modal/modalContext.d.ts.map +1 -1
- package/dist/components/progress-bar/progress-bar.d.ts.map +1 -1
- package/dist/components/qr-code/qr-code.d.ts.map +1 -1
- package/dist/components/splitter/splitter.d.ts.map +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/upload/upload.d.ts.map +1 -1
- package/dist/components/upload/upload.types.d.ts.map +1 -1
- package/dist/components/z-index/z-index.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":"pagination.js","names":["Select","cn","getColor","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","Match","mergeProps","Show","Switch","PaginationDefaultProps","PaginationFullyProps","PaginationProps","PaginationSimpleProps","DEFAULT_PROPS","defaultCurrent","defaultPageSize","total","align","const","size","color","hideOnSinglePage","showLessItems","showQuickJumper","showTitle","disabled","pageSizeOptions","totalBoundaryShowSizeChanger","buildSizeClass","buildAlignClass","mapSizeToSelect","buildPageItems","totalPages","current","sibling","Array","from","length","_","i","items","push","leftBound","Math","max","rightBound","min","PaginationDefault","props","p","internalCurrent","setInternalCurrent","internalPageSize","setInternalPageSize","jumpValue","setJumpValue","pageSize","ceil","showSizeChanger","shouldHide","changePage","page","clamped","onChange","changePageSize","newTotal","newCurrent","onShowSizeChange","pageItems","handleJump","val","parseInt","isNaN","range","start","end","pageSizeSelectOpts","map","opt","label","value","_$createComponent","when","children","_el$","_tmpl$5","_$insert","showTotal","_el$2","_tmpl$","_$effect","_$className","class","btn","_el$8","_tmpl$6","$$click","_p$","_v$6","prev","btnDisabled","_v$7","e","t","undefined","itemRender","each","item","_el$9","_tmpl$7","jump","_$setAttribute","_v$8","ellipsis","_v$9","pageBtn","_el$0","_tmpl$8","_v$0","itemActive","_v$1","_v$10","a","_el$1","_tmpl$9","_v$11","next","_v$12","_el$3","_tmpl$2","options","placement","root","sizeChanger","_el$4","_tmpl$4","_el$5","firstChild","_el$6","nextSibling","$$keydown","key","currentTarget","blur","$$input","_$memo","goButton","fallback","_el$7","_tmpl$3","_v$","jumper","_v$2","jumperLabel","_v$3","jumperInput","_v$4","_v$5","o","PaginationSimple","_el$10","_tmpl$0","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","addEventListener","v","target","HTMLInputElement","select","_v$13","_v$14","_v$15","_v$16","simplePager","_v$17","simpleInput","_v$18","_v$19","_v$20","slash","_v$21","_v$22","n","s","h","r","d","PaginationFully","modernPageInput","setModernPageInput","String","syncPageInput","commitPageInput","num","_el$17","_tmpl$1","_el$18","_el$19","_el$20","_el$21","_el$22","_el$23","_el$26","_el$24","_el$27","_el$25","_el$28","_el$29","_el$30","_el$31","_el$33","_el$32","_el$34","_el$35","Number","_el$36","_tmpl$10","_v$23","_v$24","fullyLeft","_v$25","fullyLabel","_v$26","_v$27","_v$28","fullyRange","_v$29","fullyRight","_v$30","fullyPageInput","_v$31","_v$32","_v$33","_v$34","fullyPages","_v$35","_v$36","_v$37","_v$38","l","_$setStyleProperty","u","c","w","m","f","Pagination","mode","_$delegateEvents"],"sources":["../../../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { Select } from '@/components/select';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\nimport {\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n Match,\r\n mergeProps,\r\n Show,\r\n Switch,\r\n} from 'solid-js';\r\nimport type {\r\n PaginationDefaultProps,\r\n PaginationFullyProps,\r\n PaginationProps,\r\n PaginationSimpleProps,\r\n} from './pagination.types';\r\n\r\nconst DEFAULT_PROPS = {\r\n defaultCurrent: 1,\r\n defaultPageSize: 10,\r\n total: 0,\r\n align: 'start' as const,\r\n size: 'md' as const,\r\n color: 'neutral' as const,\r\n hideOnSinglePage: false,\r\n showLessItems: false,\r\n showQuickJumper: false,\r\n showTitle: true,\r\n disabled: false,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n totalBoundaryShowSizeChanger: 50,\r\n};\r\n\r\n// ─── Shared helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction buildSizeClass(size: string) {\r\n switch (size) {\r\n case 'xs':\r\n return 'pag26';\r\n case 'sm':\r\n return 'pag27';\r\n case 'lg':\r\n return 'pag29';\r\n case 'xl':\r\n return 'pag30';\r\n default:\r\n return 'pag28';\r\n }\r\n}\r\n\r\nfunction buildAlignClass(align: string) {\r\n switch (align) {\r\n case 'center':\r\n return 'justify-center';\r\n case 'end':\r\n return 'justify-end';\r\n default:\r\n return 'justify-start';\r\n }\r\n}\r\n\r\nfunction mapSizeToSelect(size: string): 'sm' | 'md' | 'lg' {\r\n if (size === 'lg' || size === 'xl') return 'lg';\r\n if (size === 'md') return 'md';\r\n return 'sm';\r\n}\r\n\r\n// Build page list with ellipsis algorithm\r\nfunction buildPageItems(totalPages: number, current: number, showLessItems: boolean) {\r\n const sibling = showLessItems ? 1 : 2;\r\n\r\n if (totalPages <= (showLessItems ? 7 : 9)) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const items: (number | 'prev-ellipsis' | 'next-ellipsis')[] = [];\r\n\r\n items.push(1);\r\n\r\n const leftBound = Math.max(2, current - sibling);\r\n const rightBound = Math.min(totalPages - 1, current + sibling);\r\n\r\n if (leftBound > 2) items.push('prev-ellipsis');\r\n for (let i = leftBound; i <= rightBound; i++) items.push(i);\r\n if (rightBound < totalPages - 1) items.push('next-ellipsis');\r\n\r\n items.push(totalPages);\r\n\r\n return items;\r\n}\r\n\r\n// ─── Mode: default ──────────────────────────────────────────────────────────\r\n\r\nconst PaginationDefault: Component<PaginationDefaultProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n const [jumpValue, setJumpValue] = createSignal('');\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n\r\n const showSizeChanger = createMemo(() => {\r\n if (typeof p.showSizeChanger === 'boolean') return p.showSizeChanger;\r\n if (typeof p.showSizeChanger === 'object') return true;\r\n return (p.total ?? 0) > (p.totalBoundaryShowSizeChanger ?? 50);\r\n });\r\n\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n const changePageSize = (size: number) => {\r\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\r\n const newCurrent = Math.min(current(), newTotal);\r\n setInternalPageSize(size);\r\n setInternalCurrent(newCurrent);\r\n p.onShowSizeChange?.(newCurrent, size);\r\n p.onChange?.(newCurrent, size);\r\n };\r\n\r\n const pageItems = createMemo(() => buildPageItems(totalPages(), current(), p.showLessItems));\r\n\r\n const handleJump = () => {\r\n const val = parseInt(jumpValue(), 10);\r\n if (!isNaN(val)) {\r\n changePage(val);\r\n setJumpValue('');\r\n }\r\n };\r\n\r\n const range = createMemo<[number, number]>(() => {\r\n const start = (current() - 1) * pageSize() + 1;\r\n const end = Math.min(current() * pageSize(), p.total ?? 0);\r\n return [start, end];\r\n });\r\n\r\n const pageSizeSelectOpts = createMemo(() =>\r\n p.pageSizeOptions.map(opt => ({ label: `${opt} / page`, value: opt as number })),\r\n );\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag02',\r\n buildSizeClass(p.size),\r\n buildAlignClass(p.align),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n {/* Show total */}\r\n <Show when={p.showTotal}>\r\n <span class={cn('pag13', p.class?.total)}>{p.showTotal!(p.total ?? 0, range())}</span>\r\n </Show>\r\n\r\n {/* Prev button */}\r\n {(() => {\r\n const btn = (\r\n <button\r\n class={cn(\r\n 'pag06 pag08',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous Page\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(current() - 1, 'prev', btn) : btn;\r\n })()}\r\n\r\n {/* Page items */}\r\n <For each={pageItems()}>\r\n {item => {\r\n if (item === 'prev-ellipsis' || item === 'next-ellipsis') {\r\n return (\r\n <button\r\n class={cn('pag06 pag10', p.class?.btn, p.class?.ellipsis)}\r\n disabled={p.disabled}\r\n onClick={() => {\r\n const jump =\r\n item === 'prev-ellipsis'\r\n ? Math.max(1, current() - (p.showLessItems ? 3 : 5))\r\n : Math.min(totalPages(), current() + (p.showLessItems ? 3 : 5));\r\n changePage(jump);\r\n }}\r\n title={item === 'prev-ellipsis' ? 'Previous 5 pages' : 'Next 5 pages'}\r\n >\r\n •••\r\n </button>\r\n );\r\n }\r\n const pageBtn = (\r\n <button\r\n class={cn(\r\n 'pag06',\r\n item === current() && 'pag11',\r\n item === current() && p.class?.itemActive,\r\n p.class?.btn,\r\n )}\r\n disabled={p.disabled}\r\n onClick={() => changePage(item)}\r\n title={p.showTitle ? `Page ${item}` : undefined}\r\n >\r\n {item}\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(item, 'page', pageBtn) : pageBtn;\r\n }}\r\n </For>\r\n\r\n {/* Next button */}\r\n {(() => {\r\n const btn = (\r\n <button\r\n class={cn(\r\n 'pag06 pag09',\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n p.class?.btn,\r\n p.class?.next,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next Page\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(current() + 1, 'next', btn) : btn;\r\n })()}\r\n\r\n {/* Size changer */}\r\n <Show when={showSizeChanger()}>\r\n <div class=\"w-fit\">\r\n <Select\r\n options={pageSizeSelectOpts()}\r\n value={pageSize()}\r\n onChange={val => changePageSize(val as number)}\r\n disabled={p.disabled}\r\n size={mapSizeToSelect(p.size)}\r\n color={p.color}\r\n placement=\"top\"\r\n class={{ root: p.class?.sizeChanger }}\r\n />\r\n </div>\r\n </Show>\r\n\r\n {/* Quick jumper */}\r\n <Show when={p.showQuickJumper}>\r\n <span\r\n class={cn(\r\n 'pag14',\r\n p.align === 'end' && 'order-first mr-auto',\r\n p.align === 'start' && 'ml-auto',\r\n p.class?.jumper,\r\n )}\r\n >\r\n <span class={cn('pag15', p.class?.jumperLabel)}>Go to</span>\r\n <input\r\n class={cn('pag16', p.class?.jumperInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={jumpValue()}\r\n disabled={p.disabled}\r\n onInput={e => setJumpValue(e.currentTarget.value)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleJump();\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <Show\r\n when={typeof p.showQuickJumper === 'object' && p.showQuickJumper.goButton}\r\n fallback={null}\r\n >\r\n <span onClick={() => handleJump()} class=\"cursor-pointer\">\r\n {(p.showQuickJumper as { goButton: any }).goButton}\r\n </span>\r\n </Show>\r\n </span>\r\n </Show>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Mode: simple ────────────────────────────────────────────────────────────\r\n\r\nconst PaginationSimple: Component<PaginationSimpleProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag03',\r\n buildSizeClass(p.size),\r\n buildAlignClass(p.align),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n <button\r\n class={cn(\r\n 'pag06 pag08',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n <span class={cn('pag17', p.class?.simplePager)}>\r\n <input\r\n class={cn('pag18', p.class?.simpleInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={current()}\r\n disabled={p.disabled}\r\n onFocus={e => e.currentTarget.select()}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n const v = parseInt((e.target as HTMLInputElement).value, 10);\r\n if (!isNaN(v)) changePage(v);\r\n }\r\n }}\r\n onBlur={e => {\r\n const v = parseInt(e.currentTarget.value, 10);\r\n if (!isNaN(v)) changePage(v);\r\n }}\r\n />\r\n <span class={cn('pag19', p.class?.slash)}>/</span>\r\n <span>{totalPages()}</span>\r\n </span>\r\n <button\r\n class={cn(\r\n 'pag06 pag09',\r\n p.class?.btn,\r\n p.class?.next,\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Mode: fully ─────────────────────────────────────────────────────────────\r\n\r\nconst PaginationFully: Component<PaginationFullyProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n const [modernPageInput, setModernPageInput] = createSignal(String(p.defaultCurrent ?? 1));\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n createEffect(function syncPageInput() {\r\n setModernPageInput(String(current()));\r\n });\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n const changePageSize = (size: number) => {\r\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\r\n const newCurrent = Math.min(current(), newTotal);\r\n setInternalPageSize(size);\r\n setInternalCurrent(newCurrent);\r\n p.onShowSizeChange?.(newCurrent, size);\r\n p.onChange?.(newCurrent, size);\r\n };\r\n\r\n const range = createMemo<[number, number]>(() => {\r\n const start = (current() - 1) * pageSize() + 1;\r\n const end = Math.min(current() * pageSize(), p.total ?? 0);\r\n return [start, end];\r\n });\r\n\r\n const commitPageInput = (value: string) => {\r\n const num = parseInt(value, 10);\r\n const clamped = !isNaN(num) ? Math.min(Math.max(1, num), totalPages()) : current();\r\n changePage(clamped);\r\n setModernPageInput(String(clamped));\r\n };\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag04',\r\n buildSizeClass(p.size),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n {/* Left: items-per-page dropdown + range */}\r\n <div class={cn('pag20', p.class?.fullyLeft)}>\r\n <span class={cn('pag22', p.class?.fullyLabel)}>Items per page:</span>\r\n <select\r\n class={cn('pag12', p.class?.sizeChanger)}\r\n disabled={p.disabled}\r\n value={pageSize()}\r\n onChange={e => changePageSize(Number(e.currentTarget.value))}\r\n >\r\n <For each={p.pageSizeOptions}>{opt => <option value={opt}>{opt}</option>}</For>\r\n </select>\r\n <div class=\"bg-c3/50 w-px self-stretch\"></div>\r\n <span class={cn('pag23', p.class?.fullyRange)}>\r\n {range()[0]}–{range()[1]} of {p.total ?? 0} items\r\n </span>\r\n </div>\r\n\r\n {/* Right: page input + prev/next buttons */}\r\n <div class={cn('pag21', p.class?.fullyRight)}>\r\n <input\r\n class={cn('pag25', p.class?.fullyPageInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={modernPageInput()}\r\n disabled={p.disabled}\r\n style={{ width: `${Math.max(2, modernPageInput().length) + 0.5}ch` }}\r\n onFocus={e => e.currentTarget.select()}\r\n onInput={e => setModernPageInput(e.currentTarget.value)}\r\n onBlur={e => commitPageInput(e.currentTarget.value)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n commitPageInput((e.currentTarget as HTMLInputElement).value);\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <span class={cn('pag24', p.class?.fullyPages)}>of {totalPages()} pages</span>\r\n <button\r\n class={cn(\r\n 'pag06',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous Page\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n <button\r\n class={cn(\r\n 'pag06',\r\n p.class?.btn,\r\n p.class?.next,\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next Page\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Public component ────────────────────────────────────────────────────────\r\n\r\nexport const Pagination: Component<PaginationProps> = p => {\r\n return (\r\n <Switch fallback={<PaginationDefault {...(p as PaginationDefaultProps)} />}>\r\n <Match when={p.mode === 'simple'}>\r\n <PaginationSimple {...(p as PaginationSimpleProps)} />\r\n </Match>\r\n <Match when={p.mode === 'fully'}>\r\n <PaginationFully {...(p as PaginationFullyProps)} />\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar.js","names":["render","createSignal","onCleanup","cn","getColor","ProgressBarOptions","BarProps","Required","instanceId","onDone","ProgressBarInner","props","progress","setProgress","opacity","setOpacity","rafId","startTime","INITIAL_SPEED","DECAY","MAX_PROGRESS","animate","timestamp","elapsed","speed","Math","pow","delta","prev","next","requestAnimationFrame","completeAndFade","cancelAnimationFrame","setTimeout","fadeOutDuration","completionHandlers","set","cancelProgressAnimation","delete","isRtl","direction","barStyle","width","height","transition","rounded","undefined","containerStyle","zIndex","position","const","left","right","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","shimmer","_el$3","_tmpl$2","_$effect","_$className","_p$","_v$","_v$2","color","_v$3","e","_$style","t","a","Map","activeDisposers","containerEl","HTMLDivElement","ensureContainer","document","createElement","id","body","appendChild","disposeAll","dispose","values","clear","ProgressBarAPI","start","options","dismiss","DEFAULT_OPTIONS","progressBar","random","toString","slice","mergedOptions","slot","_$createComponent","_$mergeProps","remove","size","ids","keys","handler","get"],"sources":["../../../../src/components/progress-bar/progress-bar.tsx"],"sourcesContent":["import { render } from 'solid-js/web';\r\nimport { createSignal, onCleanup } from 'solid-js';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport type { ProgressBarOptions } from './progress-bar.types';\r\n\r\n// ─── Internal Bar Component ───────────────────────────────────────────────────\r\n\r\ninterface BarProps extends Required<ProgressBarOptions> {\r\n instanceId: string;\r\n onDone: () => void;\r\n}\r\n\r\nconst ProgressBarInner = (props: BarProps) => {\r\n const [progress, setProgress] = createSignal(0);\r\n const [opacity, setOpacity] = createSignal(1);\r\n\r\n let rafId: number;\r\n let startTime: number | null = null;\r\n\r\n // Tốc độ ban đầu (% mỗi giây), giảm dần theo hàm mũ\r\n const INITIAL_SPEED = 28;\r\n const DECAY = 0.88; // mỗi giây speed *= DECAY\r\n const MAX_PROGRESS = 99;\r\n\r\n const animate = (timestamp: number) => {\r\n if (startTime === null) startTime = timestamp;\r\n const elapsed = (timestamp - startTime) / 1000; // giây\r\n\r\n const speed = INITIAL_SPEED * Math.pow(DECAY, elapsed * 2.5);\r\n const delta = speed / 60; // per frame (60fps)\r\n\r\n setProgress(prev => {\r\n const next = prev + delta;\r\n return next >= MAX_PROGRESS ? MAX_PROGRESS : next;\r\n });\r\n\r\n if (progress() < MAX_PROGRESS) {\r\n rafId = requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n rafId = requestAnimationFrame(animate);\r\n\r\n // dismiss() gọi hàm này — jump lên 100% rồi fade out\r\n const completeAndFade = () => {\r\n cancelAnimationFrame(rafId);\r\n setProgress(100);\r\n setTimeout(() => {\r\n setOpacity(0);\r\n setTimeout(() => props.onDone(), props.fadeOutDuration);\r\n }, 80);\r\n };\r\n\r\n completionHandlers.set(props.instanceId, completeAndFade);\r\n\r\n onCleanup(function cancelProgressAnimation() {\r\n cancelAnimationFrame(rafId);\r\n completionHandlers.delete(props.instanceId);\r\n });\r\n\r\n const isRtl = () => props.direction === 'rightToLeft';\r\n\r\n const barStyle = () => ({\r\n width: `${progress()}%`,\r\n height: `${props.height}px`,\r\n transition: 'width 0.06s linear',\r\n 'border-radius': props.rounded ? (isRtl() ? '9999px 0 0 9999px' : '0 9999px 9999px 0') : '0',\r\n 'margin-left': isRtl() ? 'auto' : undefined,\r\n });\r\n\r\n const containerStyle = () => ({\r\n opacity: opacity(),\r\n transition: `opacity ${props.fadeOutDuration}ms ease`,\r\n 'z-index': props.zIndex,\r\n position: 'fixed' as const,\r\n [props.position === 'bottom' ? 'bottom' : 'top']: '0',\r\n left: '0',\r\n right: '0',\r\n 'pointer-events': 'none' as const,\r\n });\r\n\r\n return (\r\n <div style={containerStyle()}>\r\n <div\r\n class={cn('relative overflow-hidden', getColor(props.color), 'bg-(--color)')}\r\n style={barStyle()}\r\n >\r\n {props.shimmer && (\r\n <div\r\n class={cn(\r\n 'absolute inset-0',\r\n 'animate-[shimmer_1.2s_ease-in-out_infinite]',\r\n 'bg-linear-to-r from-transparent via-white/40 to-transparent',\r\n )}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ─── Global state ─────────────────────────────────────────────────────────────\r\n\r\nconst completionHandlers = new Map<string, () => void>();\r\n\r\n// Track tất cả instances đang tồn tại (có thể nhiều hơn 1 trong khoảng thời gian ngắn)\r\nconst activeDisposers = new Map<string, () => void>();\r\n\r\nlet containerEl: HTMLDivElement | null = null;\r\n\r\nconst ensureContainer = () => {\r\n if (containerEl) return;\r\n containerEl = document.createElement('div');\r\n containerEl.id = 'sui-progress-bar-container';\r\n document.body.appendChild(containerEl);\r\n};\r\n\r\n// Xóa tất cả instances ngay lập tức (không animate)\r\nconst disposeAll = () => {\r\n for (const dispose of activeDisposers.values()) {\r\n dispose();\r\n }\r\n activeDisposers.clear();\r\n};\r\n\r\n// ─── Public API ───────────────────────────────────────────────────────────────\r\n\r\nexport interface ProgressBarAPI {\r\n start: (options?: ProgressBarOptions) => void;\r\n dismiss: () => void;\r\n}\r\n\r\nconst DEFAULT_OPTIONS: Required<ProgressBarOptions> = {\r\n color: 'primary',\r\n height: 3,\r\n shimmer: true,\r\n rounded: true,\r\n zIndex: 9999,\r\n fadeOutDuration: 300,\r\n position: 'top',\r\n direction: 'leftToRight',\r\n};\r\n\r\nconst progressBar: ProgressBarAPI = {\r\n start(options?: ProgressBarOptions) {\r\n ensureContainer();\r\n\r\n // Xóa tất cả instances cũ ngay lập tức\r\n disposeAll();\r\n\r\n const instanceId = Math.random().toString(36).slice(2);\r\n\r\n const mergedOptions: Required<ProgressBarOptions> = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n const slot = document.createElement('div');\r\n containerEl!.appendChild(slot);\r\n\r\n const dispose = render(\r\n () => (\r\n <ProgressBarInner\r\n {...mergedOptions}\r\n instanceId={instanceId}\r\n onDone={() => {\r\n dispose();\r\n slot.remove();\r\n activeDisposers.delete(instanceId);\r\n }}\r\n />\r\n ),\r\n slot,\r\n );\r\n\r\n activeDisposers.set(instanceId, () => {\r\n dispose();\r\n slot.remove();\r\n });\r\n },\r\n\r\n dismiss() {\r\n if (activeDisposers.size === 0) return;\r\n\r\n // Lấy tất cả instanceIds hiện tại\r\n const ids = [...activeDisposers.keys()];\r\n\r\n for (const id of ids) {\r\n const handler = completionHandlers.get(id);\r\n if (handler) {\r\n // Animate lên 100% rồi fade out\r\n activeDisposers.delete(id);\r\n handler();\r\n } else {\r\n // Fallback: xóa ngay\r\n const dispose = activeDisposers.get(id);\r\n activeDisposers.delete(id);\r\n dispose?.();\r\n }\r\n }\r\n },\r\n};\r\n\r\nexport { progressBar };\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{loader_default as n}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/loader.js";import{refresh_cw_default as r}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/refresh-cw.js";import{circle_check_big_default as i}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/circle-check-big.js";import{addEventListener as a,className as o,createComponent as s,delegateEvents as c,effect as l,insert as u,setAttribute as d,setStyleProperty as f,template as p,use as m}from"solid-js/web";import{Show as h,createEffect as g,createUniqueId as _,mergeProps as v}from"solid-js";import y from"qrcode";var b=p(`<div>`),x=p(`<div><button aria-label="Refresh QR code"></button><span>`),S=p(`<div><canvas>`),C={size:160,color:`#000000`,bgColor:`#ffffff`,errorLevel:`M`,status:`active`,expiredText:`QR code expired`,accentColor:`primary`};async function w(e,t,n){await y.toCanvas(e,t||` `,{width:n.size,margin:2,color:{dark:n.color,light:n.bgColor},errorCorrectionLevel:n.errorLevel})}function T(e,t,n){let r=e.getContext(`2d`);if(!r)return;let i=new Image;i.crossOrigin=`anonymous`,i.onload=function(){let e=t.width??n*.2,a=t.height??e,o=t.padding??4,s=t.borderRadius??4,c=t.background??`#ffffff`,l=e+o*2,u=a+o*2,d=(n-l)/2,f=(n-u)/2;r.beginPath(),r.moveTo(d+s,f),r.lineTo(d+l-s,f),r.quadraticCurveTo(d+l,f,d+l,f+s),r.lineTo(d+l,f+u-s),r.quadraticCurveTo(d+l,f+u,d+l-s,f+u),r.lineTo(d+s,f+u),r.quadraticCurveTo(d,f+u,d,f+u-s),r.lineTo(d,f+s),r.quadraticCurveTo(d,f,d+s,f),r.closePath(),r.fillStyle=c,r.fill(),r.drawImage(i,d+o,f+o,e,a)},i.src=t.src}var E=c=>{let p=v(C,c),y=_(),E;return g(function(){if(!E)return;let e=E,t=p.value,n=p.size,r=p.color,i=p.bgColor,a=p.errorLevel,o=p.logo;w(e,t,{size:n,color:r,bgColor:i,errorLevel:a}).then(function(){o&&T(e,o,n)})}),(()=>{var c=S(),g=c.firstChild;d(c,`id`,y);var _=E;return typeof _==`function`?m(_,g):E=g,u(c,s(h,{get when(){return p.status===`loading`},get children(){var r=b();return u(r,s(n,{get class(){return e(`qr04 animate-spin`,p.class?.overlayIcon)},get size(){return p.size*.22}})),l(()=>o(r,e(`qr03`,t(p.accentColor),p.class?.overlay))),r}}),null),u(c,s(h,{get when(){return p.status===`expired`},get children(){var n=x(),i=n.firstChild,c=i.nextSibling;return a(i,`click`,p.onRefresh,!0),u(i,s(r,{get size(){return p.size*.22}})),u(c,()=>p.expiredText),l(r=>{var a=e(`qr03 qr05`,t(p.accentColor),p.class?.overlay),s=e(`qr06`,p.class?.overlayIcon),l=e(`qr07`,p.class?.overlayText);return a!==r.e&&o(n,r.e=a),s!==r.t&&o(i,r.t=s),l!==r.a&&o(c,r.a=l),r},{e:void 0,t:void 0,a:void 0}),n}}),null),u(c,s(h,{get when(){return p.status===`scanned`},get children(){var n=b();return u(n,s(i,{get class(){return e(`qr04`,p.class?.overlayIcon)},get size(){return p.size*.22}})),l(()=>o(n,e(`qr03`,t(`success`),p.class?.overlay))),n}}),null),l(t=>{var n=e(`qr01`,p.class?.root),r=`${p.size}px`,i=`${p.size}px`,a=e(`qr02`,p.class?.canvas),s=p.size,l=p.size,u=`QR code for: ${p.value}`;return n!==t.e&&o(c,t.e=n),r!==t.t&&f(c,`width`,t.t=r),i!==t.a&&f(c,`height`,t.a=i),a!==t.o&&o(g,t.o=a),s!==t.i&&d(g,`width`,t.i=s),l!==t.n&&d(g,`height`,t.n=l),u!==t.s&&d(g,`aria-label`,t.s=u),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),c})()};c([`click`]);export{E as QrCode};
|
|
2
|
+
//# sourceMappingURL=qr-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qr-code.js","names":["cn","getColor","QRCode","RefreshCw","CheckCircle","Loader","Component","createEffect","createUniqueId","mergeProps","onCleanup","Show","QrCodeProps","DEFAULT_PROPS","size","color","bgColor","errorLevel","const","status","expiredText","accentColor","drawQr","canvas","HTMLCanvasElement","value","opts","Promise","toCanvas","width","margin","dark","light","errorCorrectionLevel","drawLogo","logo","NonNullable","ctx","getContext","img","Image","crossOrigin","onload","onLogoLoad","logoW","logoH","height","pad","padding","radius","borderRadius","bg","background","bgW","bgH","x","y","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","fillStyle","fill","drawImage","src","QrCode","props","p","id","canvasRef","renderQrCode","then","onQrDrawn","_el$","_tmpl$3","_el$2","firstChild","_$setAttribute","_ref$","_$use","_$insert","_$createComponent","when","children","_el$3","_tmpl$","class","overlayIcon","_$effect","_$className","overlay","_el$4","_tmpl$2","_el$5","_el$6","nextSibling","_$addEventListener","onRefresh","_p$","_v$","_v$2","_v$3","overlayText","e","t","a","undefined","_el$7","_v$4","root","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$setStyleProperty","o","i","n","s","_$delegateEvents"],"sources":["../../../../src/components/qr-code/qr-code.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\r\nimport { getColor } from '@utils/helper';\r\nimport QRCode from 'qrcode';\r\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\r\nimport CheckCircle from 'lucide-solid/icons/check-circle';\r\nimport Loader from 'lucide-solid/icons/loader';\r\nimport { Component, createEffect, createUniqueId, mergeProps, onCleanup, Show } from 'solid-js';\r\nimport type { QrCodeProps } from './qr-code.types';\r\n\r\nconst DEFAULT_PROPS = {\r\n size: 160,\r\n color: '#000000',\r\n bgColor: '#ffffff',\r\n errorLevel: 'M' as const,\r\n status: 'active' as const,\r\n expiredText: 'QR code expired',\r\n accentColor: 'primary' as const,\r\n};\r\n\r\nasync function drawQr(\r\n canvas: HTMLCanvasElement,\r\n value: string,\r\n opts: {\r\n size: number;\r\n color: string;\r\n bgColor: string;\r\n errorLevel: 'L' | 'M' | 'Q' | 'H';\r\n },\r\n): Promise<void> {\r\n await QRCode.toCanvas(canvas, value || ' ', {\r\n width: opts.size,\r\n margin: 2,\r\n color: {\r\n dark: opts.color,\r\n light: opts.bgColor,\r\n },\r\n errorCorrectionLevel: opts.errorLevel,\r\n });\r\n}\r\n\r\nfunction drawLogo(\r\n canvas: HTMLCanvasElement,\r\n logo: NonNullable<QrCodeProps['logo']>,\r\n size: number,\r\n): void {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const img = new Image();\r\n img.crossOrigin = 'anonymous';\r\n img.onload = function onLogoLoad() {\r\n const logoW = logo.width ?? size * 0.2;\r\n const logoH = logo.height ?? logoW;\r\n const pad = logo.padding ?? 4;\r\n const radius = logo.borderRadius ?? 4;\r\n const bg = logo.background ?? '#ffffff';\r\n\r\n const bgW = logoW + pad * 2;\r\n const bgH = logoH + pad * 2;\r\n const x = (size - bgW) / 2;\r\n const y = (size - bgH) / 2;\r\n\r\n // Draw background rect with rounded corners\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius, y);\r\n ctx.lineTo(x + bgW - radius, y);\r\n ctx.quadraticCurveTo(x + bgW, y, x + bgW, y + radius);\r\n ctx.lineTo(x + bgW, y + bgH - radius);\r\n ctx.quadraticCurveTo(x + bgW, y + bgH, x + bgW - radius, y + bgH);\r\n ctx.lineTo(x + radius, y + bgH);\r\n ctx.quadraticCurveTo(x, y + bgH, x, y + bgH - radius);\r\n ctx.lineTo(x, y + radius);\r\n ctx.quadraticCurveTo(x, y, x + radius, y);\r\n ctx.closePath();\r\n ctx.fillStyle = bg;\r\n ctx.fill();\r\n\r\n // Draw logo image centered inside background\r\n ctx.drawImage(img, x + pad, y + pad, logoW, logoH);\r\n };\r\n img.src = logo.src;\r\n}\r\n\r\nexport const QrCode: Component<QrCodeProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n const id = createUniqueId();\r\n let canvasRef: HTMLCanvasElement | undefined;\r\n\r\n createEffect(function renderQrCode() {\r\n if (!canvasRef) return;\r\n\r\n // Snapshot all reactive values synchronously — reads inside .then() would\r\n // occur outside the reactive computation and throw \"Effects is null\".\r\n const canvas = canvasRef;\r\n const value = p.value;\r\n const size = p.size;\r\n const color = p.color;\r\n const bgColor = p.bgColor;\r\n const errorLevel = p.errorLevel;\r\n const logo = p.logo;\r\n\r\n drawQr(canvas, value, { size, color, bgColor, errorLevel }).then(function onQrDrawn() {\r\n if (logo) {\r\n drawLogo(canvas, logo, size);\r\n }\r\n });\r\n });\r\n\r\n return (\r\n <div\r\n id={id}\r\n class={cn('qr01', p.class?.root)}\r\n style={{ width: `${p.size}px`, height: `${p.size}px` }}\r\n >\r\n {/* The QR canvas */}\r\n <canvas\r\n ref={canvasRef}\r\n class={cn('qr02', p.class?.canvas)}\r\n width={p.size}\r\n height={p.size}\r\n aria-label={`QR code for: ${p.value}`}\r\n />\r\n\r\n {/* Loading overlay */}\r\n <Show when={p.status === 'loading'}>\r\n <div class={cn('qr03', getColor(p.accentColor), p.class?.overlay)}>\r\n <Loader class={cn('qr04 animate-spin', p.class?.overlayIcon)} size={p.size * 0.22} />\r\n </div>\r\n </Show>\r\n\r\n {/* Expired overlay */}\r\n <Show when={p.status === 'expired'}>\r\n <div class={cn('qr03 qr05', getColor(p.accentColor), p.class?.overlay)}>\r\n <button\r\n class={cn('qr06', p.class?.overlayIcon)}\r\n onClick={p.onRefresh}\r\n aria-label=\"Refresh QR code\"\r\n >\r\n <RefreshCw size={p.size * 0.22} />\r\n </button>\r\n <span class={cn('qr07', p.class?.overlayText)}>{p.expiredText}</span>\r\n </div>\r\n </Show>\r\n\r\n {/* Scanned overlay */}\r\n <Show when={p.status === 'scanned'}>\r\n <div class={cn('qr03', getColor('success'), p.class?.overlay)}>\r\n <CheckCircle class={cn('qr04', p.class?.overlayIcon)} size={p.size * 0.22} />\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":"rating.js","names":["cn","Component","createMemo","createSignal","For","mergeProps","on","createEffect","splitProps","RatingProps","sizeClass","Record","xs","sm","md","lg","xl","resolveColor","color","map","primary","secondary","accent","neutral","info","success","warning","error","DEFAULT_COLOR","star","heart","MASK_CLASS","DEFAULT_PROPS","Partial","count","mask","size","allowClear","half","readOnly","_uid","Rating","rawProps","local","rest","groupName","internal","setInternal","defaultValue","value","v","undefined","current","handleChange","val","onChange","colorCls","maskCls","gapCls","explicit","gap","steps","total","list","i","push","_el$","_tmpl$","_$spread","_$mergeProps","class","_$insert","_$createComponent","each","children","step","isHalfFirst","halfCls","_el$2","_$effect","_p$","_v$","_v$2","e","_$className","t","_$setAttribute","_el$3","_c$","_$memo","_el$4","_tmpl$2","addEventListener","checked","label","ariaLabel","_el$5","_tmpl$3"],"sources":["../../../../src/components/rating/rating.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport {\n Component,\n createMemo,\n createSignal,\n For,\n mergeProps,\n on,\n createEffect,\n splitProps,\n} from 'solid-js';\nimport type { RatingProps } from './rating.types';\n\nconst sizeClass: Record<string, string> = {\n xs: 'rating-xs',\n sm: 'rating-sm',\n md: 'rating-md',\n lg: 'rating-lg',\n xl: 'rating-xl',\n};\n\n/** Map BaseColorProps → Tailwind bg class; trả về nguyên string nếu không khớp */\nfunction resolveColor(color?: string): string {\n const map: Record<string, string> = {\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n accent: 'bg-accent',\n neutral: 'bg-neutral',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n };\n if (!color) return '';\n return map[color] ?? color;\n}\n\n/** Màu mặc định theo mask khi user không truyền color */\nconst DEFAULT_COLOR: Record<string, string> = {\n star: 'bg-yellow-400',\n 'star-2': 'bg-orange-400',\n heart: 'bg-red-400',\n};\n\n/** Lookup đầy đủ để Tailwind CSS 4 scan được class strings */\nconst MASK_CLASS: Record<string, string> = {\n star: 'mask-star',\n 'star-2': 'mask-star-2',\n heart: 'mask-heart',\n};\n\nconst DEFAULT_PROPS: Partial<RatingProps> = {\n count: 5,\n mask: 'star-2',\n size: 'md',\n allowClear: true,\n half: false,\n readOnly: false,\n};\n\nlet _uid = 0;\n\nexport const Rating: Component<RatingProps> = rawProps => {\n const [local, rest] = splitProps(mergeProps(DEFAULT_PROPS, rawProps), [\n 'value',\n 'defaultValue',\n 'count',\n 'color',\n 'size',\n 'mask',\n 'readOnly',\n 'half',\n 'allowClear',\n 'gap',\n 'onChange',\n 'class',\n 'ariaLabel',\n ]);\n\n // unique name cho radio group\n const groupName = `rating-${++_uid}`;\n\n // Internal signal cho uncontrolled mode\n const [internal, setInternal] = createSignal<number>(local.defaultValue ?? 0);\n\n // Sync controlled value → internal\n createEffect(\n on(\n () => local.value,\n v => {\n if (v !== undefined) setInternal(v);\n },\n ),\n );\n\n const current = createMemo(() => (local.value !== undefined ? local.value : internal()));\n\n const handleChange = (val: number) => {\n if (local.readOnly) return;\n if (local.value === undefined) setInternal(val);\n local.onChange?.(val);\n };\n\n // Nếu user không truyền color, dùng màu mặc định theo mask\n const colorCls = createMemo(\n () => resolveColor(local.color) || DEFAULT_COLOR[local.mask ?? 'star-2'] || 'bg-orange-400',\n );\n const maskCls = createMemo(() => MASK_CLASS[local.mask ?? 'star-2'] ?? 'mask-star-2');\n\n // gap-1 mặc định bật cho heart, tắt cho star/star-2 (theo DaisyUI docs)\n const gapCls = createMemo(() => {\n const explicit = local.gap;\n if (explicit !== undefined) return explicit ? 'gap-1' : undefined;\n return local.mask === 'heart' ? 'gap-1' : undefined;\n });\n\n /** Danh sách các \"step\" value: nếu half thì 0.5, 1, 1.5 … sinon 1, 2, 3 … */\n const steps = createMemo<number[]>(() => {\n const total = local.count ?? 5;\n const list: number[] = [];\n if (local.half) {\n for (let i = 0.5; i <= total; i += 0.5) list.push(i);\n } else {\n for (let i = 1; i <= total; i++) list.push(i);\n }\n return list;\n });\n\n // ── READ-ONLY render ──────────────────────────────────────────────────────\n if (local.readOnly) {\n return (\n <div\n class={cn(\n 'rating',\n sizeClass[local.size!],\n local.half && 'rating-half',\n gapCls(),\n local.class,\n )}\n {...rest}\n >\n <For each={steps()}>\n {step => {\n const isHalfFirst = local.half && step % 1 !== 0;\n const halfCls = isHalfFirst ? 'mask-half-1' : local.half ? 'mask-half-2' : undefined;\n // Với half mode: ẩn nửa phải (mask-half-2) của sao tại vị trí current\n // vì DaisyUI render nó mờ 20% tạo ảo giác sao thừa\n if (local.half && !isHalfFirst && step - 0.5 === current()) return null;\n return (\n <div\n class={cn('mask', maskCls(), halfCls, colorCls())}\n aria-current={step === current() ? 'true' : undefined}\n />\n );\n }}\n </For>\n </div>\n );\n }\n\n // ── INTERACTIVE render ────────────────────────────────────────────────────\n return (\n <div\n class={cn(\n 'rating',\n sizeClass[local.size!],\n local.half && 'rating-half',\n gapCls(),\n local.class,\n )}\n {...rest}\n >\n {/* Input ẩn để reset */}\n {local.allowClear && (\n <input\n type=\"radio\"\n name={groupName}\n class=\"rating-hidden\"\n checked={current() === 0}\n aria-label=\"Reset rating\"\n onChange={() => handleChange(0)}\n />\n )}\n\n <For each={steps()}>\n {step => {\n const isHalfFirst = local.half && step % 1 !== 0;\n const halfCls = isHalfFirst ? 'mask-half-1' : local.half ? 'mask-half-2' : undefined;\n const label = local.ariaLabel\n ? `${local.ariaLabel} ${step}`\n : `${step} ${local.half ? 'stars' : 'star'}`;\n\n return (\n <input\n type=\"radio\"\n name={groupName}\n class={cn('mask', maskCls(), halfCls, colorCls())}\n checked={current() === step}\n aria-label={label}\n onChange={() => handleChange(step)}\n />\n );\n }}\n </For>\n </div>\n );\n};\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{x_default as n}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{Dropdown as r}from"../dropdown/dropdown.js";import{check_default as i}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/check.js";import{chevron_down_default as a}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-down.js";import{search_default as o}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/search.js";import{className as s,createComponent as c,delegateEvents as l,effect as u,insert as d,memo as f,setAttribute as p,setStyleProperty as m,template as h,use as g}from"solid-js/web";import{cva as _}from"class-variance-authority";import{For as v,Show as y,createEffect as b,createMemo as x,createSignal as S,mergeProps as ee,on as C}from"solid-js";import{createVirtualizer as te}from"@tanstack/solid-virtual";var w=h(`<span class=sel19>`),T=h(`<span class=sel17><span class=sel18>`),E=h(`<span class=sel42><span class=sel43><span class=sel44>`),ne=h(`<span class=sel36>`),re=h(`<div><span class=sel35>`),ie=h(`<div class=sel39>`),ae=h(`<div style=overflow-y:auto><div style=width:100%;position:relative>`),oe=h(`<div style=position:absolute;top:0;left:0;width:100%>`),se=h(`<div class=sel37>`),ce=h(`<div class=sel30>`),le=h(`<div class="flex items-center px-3 shadow-2xs"><input class=sel29 autocomplete=off role=combobox aria-haspopup=listbox aria-autocomplete=list placeholder=Search...>`),ue=h(`<div role=listbox>`),de=h(`<span class=sel11>`),fe=h(`<span class="sel17 sel20">`),pe=h(`<span class=sel15>`),me=h(`<div class=sel16>`),he=h(`<span class=sel26>`),ge=h(`<span>`),_e=h(`<div role=combobox aria-haspopup=listbox><div class=sel12></div><div class=sel22>`),ve=h(`<span class=sel14>`),ye=h(`<div class=sel13>`),be=h(`<span class=sel25>`),xe=_(`sel01`,{variants:{variant:{outline:`sel07`,filled:`sel09`,borderless:`sel08`,underlined:`sel10`},size:{lg:`sel06`,md:`sel05`,sm:`sel04`},color:{neutral:`input-neutral`,primary:`input-primary`,secondary:`input-secondary`,accent:`input-accent`,info:`input-info`,success:`input-success`,warning:`input-warning`,error:`input-error`}}}),Se=e=>e.tagRender?e.tagRender({label:e.tag.label,value:e.tag.value,closable:e.tag.closable,onClose:()=>e.onRemove(e.tag.value,new MouseEvent(`click`))}):(()=>{var t=T(),r=t.firstChild;return d(r,()=>e.tag.label),d(t,c(y,{get when(){return e.tag.closable},get children(){var t=w();return t.$$click=t=>e.onRemove(e.tag.value,t),d(t,(()=>{var t=f(()=>!!e.removeIcon);return()=>t()?e.removeIcon:c(n,{class:`m-auto`,size:12,"stroke-width":3})})()),t}}),null),t})(),Ce=e=>(()=>{var t=E(),n=t.firstChild,r=n.firstChild;return d(t,()=>e.children,n),d(r,()=>e.content),t})();function we(e){return{label:e?.label??`label`,value:e?.value??`value`,options:e?.options??`options`,groupLabel:e?.groupLabel??`label`}}function D(e,t){return e?.[t]}function Te(e,t){if(!e)return[];let n=[];for(let r of e){let e=D(r,t.options);if(e&&Array.isArray(e)){let i=D(r,t.groupLabel);for(let r of e)n.push({label:D(r,t.label),value:D(r,t.value),disabled:r.disabled,class:r.class,title:r.title,groupLabel:i,raw:r})}else n.push({label:D(r,t.label),value:D(r,t.value),disabled:r.disabled,class:r.class,title:r.title,groupLabel:void 0,raw:r})}return n}function Ee(e){let t=[];for(let n of e){let e=t[t.length-1];e&&e.groupLabel===n.groupLabel?e.items.push(n):t.push({groupLabel:n.groupLabel,items:[n]})}return t}function O(e){if(e!=null)return typeof e==`object`&&`value`in e?e.value:e}function De(e){if(e==null)return[];if(Array.isArray(e))return e.map(e=>O(e)).filter(e=>e!==void 0);let t=O(e);return t===void 0?[]:[t]}var k=l=>{l=ee({color:`error`,size:`md`,variant:`outline`,disabled:!1,loading:!1,placement:`bottom`,listHeight:256,virtual:!1,defaultActiveFirstOption:!1,notFoundContent:`Not Found`,labelInValue:!1,placeholder:`Select...`,blockScroll:!0},l);let h=x(()=>we(l.fieldNames)),_=x(()=>l.mode===`multiple`),w=x(()=>_()&&!!l.allowCustomValue),T=x(()=>typeof l.showSearch==`boolean`?l.showSearch:typeof l.showSearch==`object`?!0:_()),E=x(()=>{let e={autoClearSearchValue:!0,filterOption:!0,optionFilterProp:`value`};return typeof l.showSearch==`object`?{...e,...l.showSearch}:e}),[O,k]=S(De(l.defaultValue)),[Oe,ke]=S(l.defaultOpen??!1),[Ae,A]=S(``),[j,M]=S(-1),N=x(()=>l.value===void 0?O():De(l.value)),P=x(()=>l.open===void 0?Oe():l.open),je=x(()=>{let e=E();if(e.searchValue!==void 0)return e.searchValue}),F=x(()=>je()??Ae()),Me,Ne,I,[L,R]=S(null),Pe=x(()=>Te(l.options,h())),z=x(()=>{let e=Pe();if(!w())return e;let t=new Set(e.map(e=>e.value)),n=[];for(let e of N())t.has(e)||n.push({label:String(e),value:e,disabled:!1,class:void 0,title:void 0,groupLabel:void 0,raw:{label:String(e),value:e}});return[...e,...n]}),B=x(()=>{let e=new Map;for(let t of z())e.set(t.value,t);return e}),V=x(()=>{let e=z(),t=F();if(!t||!T())return e;let n=E();if(n.filterOption===!1)return e;let r;if(typeof n.filterOption==`function`)r=e.filter(e=>n.filterOption(t,e.raw));else{let i=Array.isArray(n.optionFilterProp)?n.optionFilterProp:[n.optionFilterProp??`value`],a=t.toLowerCase();r=e.filter(e=>i.some(t=>{let n=D(e.raw,t)??(t===`label`?e.label:e.value);return String(n??``).toLowerCase().includes(a)}))}if(n.filterSort){let e=n.filterSort;r.sort((n,r)=>e(n.raw,r.raw,{searchValue:t}))}return r}),Fe=x(()=>F()&&T()?[{groupLabel:void 0,items:V()}]:Ee(z())),H=x(()=>{let e=Fe(),t=[],n=0;for(let r of e){r.groupLabel!==void 0&&t.push({type:`group`,groupLabel:r.groupLabel});for(let e of r.items)t.push({type:`option`,option:e,flatIdx:n}),n++}return t}),U=te({get count(){return H().length},getScrollElement:()=>L(),estimateSize:e=>H()[e]?.type===`group`?28:32,overscan:2}),Ie=x(()=>new Set(N())),W=e=>Ie().has(e),G=x(()=>{if(!_())return!1;let e=l.maxCount;return e===void 0?!1:N().length>=e}),K=0,q=()=>{l.disabled||(K=performance.now()+150,l.open===void 0&&ke(!0),l.onOpenChange?.(!0))},J=()=>{l.open===void 0&&ke(!1),R(null),l.onOpenChange?.(!1),T()&&(A(``),E().onSearch?.(``))},Le=()=>{P()?J():q()},Y=e=>{let t=B();if(_())return l.labelInValue?e.map(e=>({value:e,label:t.get(e)?.label??String(e)})):e;let n=e[0];if(n!==void 0)return l.labelInValue?{value:n,label:t.get(n)?.label??String(n)}:n},X=e=>{let t=B();if(_())return e.map(e=>t.get(e)?.raw??{value:e,label:String(e)});let n=e[0];return t.get(n)?.raw??{value:n,label:String(n)}},Z=e=>{let t=B().get(e),n=t?.raw??{value:e,label:String(e)};if(_()){let r=N(),i;if(r.includes(e)){i=r.filter(t=>t!==e);let n=l.labelInValue?{value:e,label:t?.label??String(e)}:e;l.onDeselect?.(n)}else{if(G())return;i=[...r,e];let a=l.labelInValue?{value:e,label:t?.label??String(e)}:e;l.onSelect?.(a,n)}l.value===void 0&&k(i),l.onChange?.(Y(i),X(i)),E().autoClearSearchValue!==!1&&(A(``),E().onSearch?.(``))}else{let r=[e],i=l.labelInValue?{value:e,label:t?.label??String(e)}:e;l.onSelect?.(i,n),l.value===void 0&&k(r),l.onChange?.(Y(r),X(r)),J(),A(``)}},Re=e=>{e.stopPropagation(),e.preventDefault(),l.value===void 0&&k([]),l.onClear?.(),l.onChange?.(_()?[]:void 0,_()?[]:void 0),A(``)},Q=(e,t)=>{t?.stopPropagation(),t?.preventDefault();let n=N().filter(t=>t!==e),r=B().get(e),i=l.labelInValue?{value:e,label:r?.label??String(e)}:e;l.onDeselect?.(i),l.value===void 0&&k(n),l.onChange?.(Y(n),X(n))},ze=e=>{if(l.disabled)return;l.onInputKeyDown?.(e);let t=V();switch(e.key){case`ArrowDown`:{if(e.preventDefault(),!P()){q();return}let n=j()+1;for(;n<t.length;){let e=t[n];if(!e.disabled&&(!G()||W(e.value)))break;n++}if(n<t.length){M(n);let e=l.labelInValue?{value:t[n].value,label:t[n].label}:t[n].value;l.onActive?.(e),Be(n)}break}case`ArrowUp`:{if(e.preventDefault(),!P()){q();return}let n=j()===-1?t.length-1:j()-1;for(;n>=0;){let e=t[n];if(!e.disabled&&(!G()||W(e.value)))break;n--}if(n>=0){M(n);let e=l.labelInValue?{value:t[n].value,label:t[n].label}:t[n].value;l.onActive?.(e),Be(n)}break}case`Enter`:case` `:{if(e.preventDefault(),!P()){q();return}if(e.key===` `&&T())break;let n=j();if(n>=0&&n<t.length){let e=t[n];e.disabled||Z(e.value)}else w()&&F().trim()&&Z(F().trim());break}case`Escape`:e.preventDefault(),J(),I?.focus();break;case`Backspace`:if(_()&&F()===``){let e=N();e.length>0&&Q(e[e.length-1])}break;case`Tab`:J();break}},Be=e=>{if(l.virtual){let t=H().findIndex(t=>t.type===`option`&&t.flatIdx===e);t>=0&&U.scrollToIndex(t,{align:`auto`});return}let t=L();if(!t)return;let n=t.querySelectorAll(`[data-option-index]`)[e];n&&n.scrollIntoView({block:`nearest`})},Ve=()=>{let e=N();if(e.length===0)return;let t=e[0],n=V().findIndex(e=>e.value===t);if(!(n<0))if(l.virtual){let e=H().findIndex(e=>e.type===`option`&&e.flatIdx===n);e>=0&&U.scrollToIndex(e,{align:`start`})}else{let e=L();if(!e)return;let t=e.querySelector(`[data-option-index="${n}"]`);t&&t.scrollIntoView({block:`nearest`})}},He=e=>{let t=e.target.value;je()===void 0&&A(t),E().onSearch?.(t),P()||q()},Ue=e=>{if(e.target===I){let e=window.scrollX,t=window.scrollY,n=()=>requestAnimationFrame(()=>requestAnimationFrame(()=>window.scrollTo(e,t)));window.addEventListener(`scroll`,n,{once:!0,passive:!1}),setTimeout(()=>window.removeEventListener(`scroll`,n),200)}l.onFocus?.(e)},We=e=>{let t=e.relatedTarget;t&&Ne?.contains(t)||t?.closest(`.nd-content`)||performance.now()<K||(l.onBlur?.(e),J())},Ge=x(()=>{if(_())return null;let e=N();if(e.length===0)return null;let t=e[0],n=B().get(t);return l.labelRender?l.labelRender({value:t,label:n?.label??String(t),key:String(t)}):n?.label??String(t)}),$=x(()=>{if(!_())return{visible:[],omitted:[]};let e=N(),t=B(),n=l.maxTagCount,r=l.maxTagTextLength,i=e.map(e=>{let n=t.get(e)?.label??String(e);return r&&typeof n==`string`&&n.length>r&&(n=n.slice(0,r)+`...`),{value:e,label:n,closable:!l.disabled}});return typeof n==`number`&&i.length>n?{visible:i.slice(0,n),omitted:i.slice(n)}:{visible:i,omitted:[]}}),Ke=x(()=>!l.allowClear||l.disabled?!1:N().length>0),qe=e=>{l.disabled||l.loading||(e.preventDefault(),Le())},Je=e=>{let t=e;for(;t;){let e=t.dataset?.optionIndex;if(e!==void 0)return Number(e);if(t.classList?.contains(`sel30`))return null;t=t.parentElement}return null},Ye=e=>{let t=Je(e.target);if(t===null)return;let n=V()[t];!n||n.disabled||G()&&!W(n.value)||(_()&&(K=performance.now()+150),Z(n.value))},Xe=(t,n)=>{let r=()=>W(t.value),a=()=>j()===n,o=()=>t.disabled||G()&&!r(),m={label:t.label,value:t.value,disabled:t.disabled,key:t.value,groupLabel:t.groupLabel},h=l.optionRender?l.optionRender(m,{index:n}):t.label;return(()=>{var m=re(),g=m.firstChild;return p(m,`data-option-index`,n),d(g,h),d(m,c(y,{get when(){return r()},get children(){var e=ne();return d(e,(()=>{var e=f(()=>!!l.menuItemSelectedIcon);return()=>e()?l.menuItemSelectedIcon:c(i,{size:14,color:`var(--color)`,"stroke-width":3})})()),e}}),null),u(n=>{var i=e(`sel31`,r()&&`sel33`,a()&&`sel32`,o()&&`sel34`,t.groupLabel!==void 0&&`sel38`,t.class),c=t.title;return i!==n.e&&s(m,n.e=i),c!==n.t&&p(m,`title`,n.t=c),n},{e:void 0,t:void 0}),m})()},Ze=()=>{let n=H();return n.length===0?(()=>{var e=ie();return d(e,()=>l.notFoundContent),e})():l.virtual?(()=>{var r=ae(),i=r.firstChild;return r.$$click=Ye,g(e=>{requestAnimationFrame(()=>R(e))},r),d(i,c(v,{get each(){return U.getVirtualItems()},children:e=>{let t=n[e.index];return(()=>{var n=oe();return d(n,(()=>{var e=f(()=>t.type===`group`);return()=>e()?(()=>{var e=se();return d(e,()=>t.groupLabel),e})():Xe(t.option,t.flatIdx)})()),u(t=>{var r=e.index,i=`translateY(${e.start}px)`;return r!==t.e&&p(n,`data-index`,t.e=r),i!==t.t&&m(n,`transform`,t.t=i),t},{e:void 0,t:void 0}),n})()}})),u(n=>{var a=e(`sel30`,t(l.color)),o=`${l.listHeight}px`,c=`${U.getTotalSize()}px`;return a!==n.e&&s(r,n.e=a),o!==n.t&&m(r,`max-height`,n.t=o),c!==n.a&&m(i,`height`,n.a=c),n},{e:void 0,t:void 0,a:void 0}),r})():(()=>{var e=ce();return e.$$click=Ye,g(e=>R(e),e),d(e,c(v,{each:n,children:e=>e.type===`group`?(()=>{var t=se();return d(t,()=>e.groupLabel),t})():Xe(e.option,e.flatIdx)})),u(t=>m(e,`max-height`,`${l.listHeight}px`)),e})()},Qe=e=>c(Se,{tag:e,get removeIcon(){return l.removeIcon},get tagRender(){return l.tagRender},onRemove:Q});return b(C(P,e=>{if(e&&l.defaultActiveFirstOption){let e=V().findIndex(e=>!e.disabled&&(!G()||W(e.value)));M(e>=0?e:-1)}e||M(-1)})),b(C(()=>F(),()=>{if(P()&&l.defaultActiveFirstOption){let e=V().findIndex(e=>!e.disabled&&(!G()||W(e.value)));M(e>=0?e:-1)}})),b(C(L,e=>{e&&P()&&requestAnimationFrame(()=>{l.virtual&&U.measure(),Ve()})})),b(C(()=>P(),e=>{e&&T()&&queueMicrotask(()=>Me?.focus({preventScroll:!0}))})),c(r,{ref:e=>Ne=e,get open(){return P()},get blockScroll(){return l.blockScroll},get position(){return l.placement===`top`?`top`:`bottom`},get class(){return{trigger:`${l.disabled?`pointer-events-none`:``} w-full`,content:e(`border-c3 bg-base-100 rounded-box menu p-0`,l.placement===`bottom`?`mt-1 shadow-md`:`shadow-md-top mb-1`,l.class?.dropdownContent)}},get triggerElement(){return(()=>{var r=_e(),i=r.firstChild,o=i.nextSibling;return r.addEventListener(`blur`,We),r.addEventListener(`focus`,Ue),r.$$keydown=ze,r.$$click=qe,g(e=>I=e,r),d(r,c(y,{get when(){return l.prefix},get children(){var e=de();return d(e,()=>l.prefix),e}}),i),d(i,c(y,{get when(){return _()},get fallback(){return(()=>{var e=ye();return d(e,c(y,{get when(){return N().length>0},get fallback(){return(()=>{var e=pe();return d(e,()=>l.placeholder),u(t=>m(e,`visibility`,F()?`hidden`:void 0)),e})()},get children(){var e=ve();return d(e,Ge),u(t=>m(e,`visibility`,F()&&T()?`hidden`:void 0)),e}})),e})()},get children(){var e=me();return d(e,c(v,{get each(){return $().visible},children:e=>Qe(e)}),null),d(e,c(y,{get when(){return $().omitted.length>0},get children(){return c(Ce,{get content(){return c(v,{get each(){return $().omitted},children:e=>c(Se,{tag:e,get removeIcon(){return l.removeIcon},get tagRender(){return l.tagRender},onRemove:Q})})},get children(){var e=fe();return d(e,()=>{let e=l.maxTagPlaceholder;return typeof e==`function`?e($().omitted.map(e=>({value:e.value,label:e.label}))):e||`+${$().omitted.length} more...`}),e}})}}),null),d(e,c(y,{get when(){return N().length===0},get children(){var e=pe();return d(e,()=>l.placeholder),e}}),null),e}})),d(o,c(y,{get when(){return Ke()},get children(){var e=he();return e.$$click=Re,d(e,c(n,{class:`m-auto`,size:14})),e}}),null),d(o,c(y,{get when(){return!l.loading},get fallback(){return be()},get children(){var t=ge();return d(t,(()=>{var e=f(()=>!!l.suffixIcon);return()=>e()?l.suffixIcon:c(a,{size:16})})()),u(()=>s(t,e(`sel23`,P()&&`sel24`))),t}}),null),u(n=>{var i=e(xe({size:l.size,variant:l.variant}),t(l.color),P()&&`sel41 sel02`,_()&&`sel40`,l.class?.root,l.disabled&&`sel03`),a=l.disabled?-1:0,o=P();return i!==n.e&&s(r,n.e=i),a!==n.t&&p(r,`tabindex`,n.t=a),o!==n.a&&p(r,`aria-expanded`,n.a=o),n},{e:void 0,t:void 0,a:void 0}),r})()},get children(){var e=ue();return e.$$mousedown=e=>{e.target?.tagName!==`INPUT`&&e.preventDefault()},d(e,c(y,{get when(){return T()},get children(){var e=le(),t=e.firstChild;return d(e,c(o,{size:14}),t),t.addEventListener(`blur`,We),t.addEventListener(`focus`,Ue),t.$$keydown=ze,t.$$input=He,g(e=>Me=e,t),u(e=>{var n=l.disabled,r=P();return n!==e.e&&(t.disabled=e.e=n),r!==e.t&&p(t,`aria-expanded`,e.t=r),e},{e:void 0,t:void 0}),u(()=>t.value=F()),e}}),null),d(e,(()=>{var e=f(()=>!!l.popupRender);return()=>e()?l.popupRender(Ze()):Ze()})(),null),u(()=>s(e,t(l.color))),e}})};l([`click`,`mousedown`,`input`,`keydown`]);export{k as Select};
|
|
2
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","names":["SolidComponent","cn","getColor","createVirtualizer","cva","VariantProps","Check","ChevronDown","Search","X","createEffect","createMemo","createSignal","For","mergeProps","on","Show","Component","JSXElement","Dropdown","FlattenOptionData","LabeledValue","OptGroupType","SelectBaseProps","SelectFieldNames","SelectOptionType","SelectProps","SelectValue","ShowSearchConfig","TagRenderProps","selectVariants","variants","variant","outline","filled","borderless","underlined","size","lg","md","sm","color","neutral","primary","secondary","accent","info","success","warning","error","SelectVariantsProps","SelectTagProps","tag","value","label","closable","removeIcon","tagRender","props","onRemove","e","MouseEvent","SelectTag","onClose","_el$","_tmpl$2","_el$2","firstChild","_$insert","Element","_$createComponent","when","children","_el$3","_tmpl$","$$click","_c$","_$memo","InnerTooltip","content","_el$4","_tmpl$3","_el$5","_el$6","resolveFieldNames","fn","options","groupLabel","getField","option","field","FlatOption","disabled","class","title","raw","flattenOptions","fieldNames","ReturnType","result","opt","subOptions","Array","isArray","sub","push","undefined","OptionGroup","items","regroupFlatOptions","flatOptions","groups","last","length","extractValue","v","extractValues","map","item","filter","x","single","Select","p","const","loading","placement","listHeight","virtual","defaultActiveFirstOption","notFoundContent","labelInValue","placeholder","blockScroll","isMultiple","mode","allowCustomValue","showSearchEnabled","showSearch","searchConfig","base","autoClearSearchValue","filterOption","optionFilterProp","internalValue","setInternalValue","defaultValue","isOpen","setIsOpen","defaultOpen","searchText","setSearchText","activeIndex","setActiveIndex","selectedValues","dropdownOpen","open","controlledSearchValue","cfg","searchValue","currentSearchText","inputRef","HTMLInputElement","selectRootRef","HTMLDivElement","triggerRef","listRef","setListRef","allFlatOptions","allOptionsWithCustom","flat","existingValues","Set","o","customOpts","val","has","String","optionMap","Map","set","filteredOptions","all","text","filtered","Function","filterProps","lowerText","toLowerCase","some","prop","includes","filterSort","sortFn","sort","a","b","groupedForRender","RenderItem","type","flatIdx","flatRenderList","group","ITEM_HEIGHT","GROUP_LABEL_HEIGHT","virtualizer","count","getScrollElement","estimateSize","index","overscan","selectedValuesSet","isSelected","isMaxReached","max","maxCount","suppressBlurUntil","openDropdown","performance","now","onOpenChange","closeDropdown","onSearch","toggleDropdown","buildOutputValue","values","get","buildOutputOption","handleSelect","optValue","rawOpt","current","newValues","deselectVal","onDeselect","selectVal","onSelect","onChange","handleClear","stopPropagation","preventDefault","onClear","handleRemoveTag","handleKeyDown","KeyboardEvent","onInputKeyDown","opts","key","next","onActive","scrollActiveIntoView","prev","idx","trim","focus","vals","list","renderIdx","findIndex","scrollToIndex","align","el","querySelectorAll","HTMLElement","scrollIntoView","block","scrollToFirstSelected","firstSelectedValue","querySelector","handleSearchInput","InputEvent","target","handleFocus","FocusEvent","scrollX","window","scrollY","restoreScroll","requestAnimationFrame","scrollTo","addEventListener","once","passive","setTimeout","removeEventListener","onFocus","handleBlur","related","relatedTarget","contains","closest","onBlur","selectedLabel","labelRender","TagInfo","visibleTags","visible","omitted","maxTagCount","maxTextLen","maxTagTextLength","tags","slice","showClear","allowClear","handleTriggerClick","findOptionIndex","EventTarget","dataset","optionIndex","Number","classList","parentElement","handleListClick","renderOptionItem","selected","isActive","isDisabledOpt","flattenData","optionRender","_el$7","_tmpl$5","_el$8","_$setAttribute","_el$9","_tmpl$4","_c$2","menuItemSelectedIcon","_$effect","_p$","_v$","_v$2","_$className","t","dropdownContent","renderList","_el$0","_tmpl$6","_el$1","_tmpl$7","_el$10","_$use","each","getVirtualItems","virtualRow","_el$11","_tmpl$8","_c$3","_el$12","_tmpl$9","_v$6","_v$7","start","_$setStyleProperty","_v$3","_v$4","_v$5","getTotalSize","_el$13","_tmpl$0","_el$14","_$p","renderTag","measure","queueMicrotask","preventScroll","ref","position","trigger","triggerElement","_el$18","_tmpl$17","_el$20","_el$24","nextSibling","$$keydown","prefix","_el$19","_tmpl$11","fallback","_el$27","_tmpl$19","_el$29","_tmpl$13","_el$28","_tmpl$18","_el$21","_tmpl$14","_el$22","_tmpl$12","maxTagPlaceholder","omittedValues","_el$23","_el$25","_tmpl$15","_tmpl$20","_el$26","_tmpl$16","_c$5","suffixIcon","_v$0","root","_v$1","_v$10","_el$15","_tmpl$10","$$mousedown","tagName","_el$16","_tmpl$1","_el$17","$$input","_v$8","_v$9","_c$4","popupRender","_$delegateEvents"],"sources":["../../../../src/components/select/select.tsx"],"sourcesContent":["import type { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { createVirtualizer } from '@tanstack/solid-virtual';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport Check from 'lucide-solid/icons/check';\r\nimport ChevronDown from 'lucide-solid/icons/chevron-down';\r\nimport Search from 'lucide-solid/icons/search';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n Show,\r\n type Component,\r\n type JSXElement,\r\n} from 'solid-js';\r\nimport { Dropdown } from '../dropdown';\r\nimport type {\r\n FlattenOptionData,\r\n LabeledValue,\r\n OptGroupType,\r\n SelectBaseProps,\r\n SelectFieldNames,\r\n SelectOptionType,\r\n SelectProps,\r\n SelectValue,\r\n ShowSearchConfig,\r\n TagRenderProps,\r\n} from './select.types';\r\n\r\nconst selectVariants = cva('sel01', {\r\n variants: {\r\n variant: {\r\n outline: 'sel07',\r\n filled: 'sel09',\r\n borderless: 'sel08',\r\n underlined: 'sel10',\r\n },\r\n size: {\r\n lg: 'sel06',\r\n md: 'sel05',\r\n sm: 'sel04',\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 },\r\n});\r\nexport type SelectVariantsProps = VariantProps<typeof selectVariants>;\r\n\r\ntype SelectTagProps = {\r\n tag: { value: string | number; label: SolidComponent; closable: boolean };\r\n removeIcon?: JSXElement;\r\n tagRender?: (props: TagRenderProps) => JSXElement;\r\n onRemove: (value: string | number, e: MouseEvent) => void;\r\n};\r\n\r\nconst SelectTag: Component<SelectTagProps> = props => {\r\n if (props.tagRender) {\r\n return props.tagRender({\r\n label: props.tag.label,\r\n value: props.tag.value,\r\n closable: props.tag.closable,\r\n onClose: () => props.onRemove(props.tag.value, new MouseEvent('click')),\r\n }) as JSXElement;\r\n }\r\n\r\n return (\r\n <span class=\"sel17\">\r\n <span class=\"sel18\">{props.tag.label as Element}</span>\r\n <Show when={props.tag.closable}>\r\n <span class=\"sel19\" onClick={e => props.onRemove(props.tag.value, e)}>\r\n {props.removeIcon ? (\r\n (props.removeIcon as Element)\r\n ) : (\r\n <X class=\"m-auto\" size={12} stroke-width={3} />\r\n )}\r\n </span>\r\n </Show>\r\n </span>\r\n );\r\n};\r\n\r\nconst InnerTooltip: Component<{ content: JSXElement; children: JSXElement }> = props => {\r\n return (\r\n <span class=\"sel42\">\r\n {props.children}\r\n <span class=\"sel43\">\r\n <span class=\"sel44\">{props.content}</span>\r\n </span>\r\n </span>\r\n );\r\n};\r\n\r\nfunction resolveFieldNames(fn?: SelectFieldNames) {\r\n return {\r\n label: fn?.label ?? 'label',\r\n value: fn?.value ?? 'value',\r\n options: fn?.options ?? 'options',\r\n groupLabel: fn?.groupLabel ?? 'label',\r\n };\r\n}\r\n\r\nfunction getField(option: any, field: string): any {\r\n return option?.[field];\r\n}\r\n\r\ninterface FlatOption {\r\n label: SolidComponent;\r\n value: string | number;\r\n disabled?: boolean;\r\n class?: string;\r\n title?: string;\r\n groupLabel?: SolidComponent;\r\n raw: any;\r\n}\r\n\r\nfunction flattenOptions(\r\n options: (SelectOptionType | OptGroupType)[] | undefined,\r\n fieldNames: ReturnType<typeof resolveFieldNames>,\r\n): FlatOption[] {\r\n if (!options) return [];\r\n const result: FlatOption[] = [];\r\n for (const opt of options) {\r\n const subOptions = getField(opt, fieldNames.options) as SelectOptionType[] | undefined;\r\n if (subOptions && Array.isArray(subOptions)) {\r\n const groupLabel = getField(opt, fieldNames.groupLabel) as SolidComponent;\r\n for (const sub of subOptions) {\r\n result.push({\r\n label: getField(sub, fieldNames.label) as SolidComponent,\r\n value: getField(sub, fieldNames.value) as string | number,\r\n disabled: sub.disabled,\r\n class: sub.class,\r\n title: sub.title,\r\n groupLabel,\r\n raw: sub,\r\n });\r\n }\r\n } else {\r\n result.push({\r\n label: getField(opt, fieldNames.label) as SolidComponent,\r\n value: getField(opt, fieldNames.value) as string | number,\r\n disabled: (opt as SelectOptionType).disabled,\r\n class: (opt as SelectOptionType).class,\r\n title: (opt as SelectOptionType).title,\r\n groupLabel: undefined,\r\n raw: opt,\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n\r\ninterface OptionGroup {\r\n groupLabel?: SolidComponent;\r\n items: FlatOption[];\r\n}\r\n\r\nfunction regroupFlatOptions(flatOptions: FlatOption[]): OptionGroup[] {\r\n const groups: OptionGroup[] = [];\r\n for (const opt of flatOptions) {\r\n const last = groups[groups.length - 1];\r\n if (last && last.groupLabel === opt.groupLabel) {\r\n last.items.push(opt);\r\n } else {\r\n groups.push({ groupLabel: opt.groupLabel, items: [opt] });\r\n }\r\n }\r\n return groups;\r\n}\r\n\r\nfunction extractValue(v: string | number | LabeledValue | undefined): string | number | undefined {\r\n if (v === undefined || v === null) return undefined;\r\n if (typeof v === 'object' && 'value' in v) return v.value;\r\n return v as string | number;\r\n}\r\n\r\nfunction extractValues(\r\n v: string | string[] | number | number[] | LabeledValue | LabeledValue[] | undefined,\r\n): (string | number)[] {\r\n if (v === undefined || v === null) return [];\r\n if (Array.isArray(v)) {\r\n return v.map(item => extractValue(item)!).filter(x => x !== undefined);\r\n }\r\n const single = extractValue(v as string | number | LabeledValue);\r\n return single !== undefined ? [single] : [];\r\n}\r\n\r\nexport const Select: Component<SelectProps> = p => {\r\n p = mergeProps(\r\n {\r\n color: 'error' as const,\r\n size: 'md' as const,\r\n variant: 'outline' as const,\r\n disabled: false,\r\n loading: false,\r\n placement: 'bottom' as const,\r\n listHeight: 256,\r\n virtual: false,\r\n defaultActiveFirstOption: false,\r\n notFoundContent: 'Not Found' as SolidComponent,\r\n labelInValue: false,\r\n placeholder: 'Select...',\r\n blockScroll: true,\r\n } as SelectBaseProps,\r\n p,\r\n );\r\n\r\n const fieldNames = createMemo(() => resolveFieldNames(p.fieldNames));\r\n\r\n const isMultiple = createMemo(() => p.mode === 'multiple');\r\n const allowCustomValue = createMemo(() => isMultiple() && !!(p as any).allowCustomValue);\r\n\r\n const showSearchEnabled = createMemo(() => {\r\n if (typeof p.showSearch === 'boolean') return p.showSearch;\r\n if (typeof p.showSearch === 'object') return true;\r\n\r\n return isMultiple();\r\n });\r\n\r\n const searchConfig = createMemo((): ShowSearchConfig => {\r\n const base: ShowSearchConfig = {\r\n autoClearSearchValue: true,\r\n filterOption: true,\r\n optionFilterProp: 'value',\r\n };\r\n if (typeof p.showSearch === 'object') {\r\n return { ...base, ...p.showSearch };\r\n }\r\n return base;\r\n });\r\n\r\n const [internalValue, setInternalValue] = createSignal<(string | number)[]>(\r\n extractValues(p.defaultValue),\r\n );\r\n const [isOpen, setIsOpen] = createSignal(p.defaultOpen ?? false);\r\n const [searchText, setSearchText] = createSignal('');\r\n const [activeIndex, setActiveIndex] = createSignal(-1);\r\n\r\n const selectedValues = createMemo(() => {\r\n if (p.value !== undefined) {\r\n return extractValues(p.value);\r\n }\r\n return internalValue();\r\n });\r\n\r\n const dropdownOpen = createMemo(() => {\r\n if (p.open !== undefined) {\r\n return p.open as boolean;\r\n }\r\n return isOpen();\r\n });\r\n\r\n const controlledSearchValue = createMemo(() => {\r\n const cfg = searchConfig();\r\n if (cfg.searchValue !== undefined) return cfg.searchValue;\r\n return undefined;\r\n });\r\n\r\n const currentSearchText = createMemo(() => {\r\n return controlledSearchValue() ?? searchText();\r\n });\r\n\r\n let inputRef: HTMLInputElement | undefined;\r\n let selectRootRef: HTMLDivElement | undefined;\r\n let triggerRef: HTMLDivElement | undefined;\r\n const [listRef, setListRef] = createSignal<HTMLDivElement | null>(null);\r\n\r\n const allFlatOptions = createMemo(() => flattenOptions(p.options, fieldNames()));\r\n\r\n const allOptionsWithCustom = createMemo(() => {\r\n const flat = allFlatOptions();\r\n if (!allowCustomValue()) return flat;\r\n const existingValues = new Set(flat.map(o => o.value));\r\n const customOpts: FlatOption[] = [];\r\n for (const val of selectedValues()) {\r\n if (!existingValues.has(val)) {\r\n customOpts.push({\r\n label: String(val),\r\n value: val,\r\n disabled: false,\r\n class: undefined,\r\n title: undefined,\r\n groupLabel: undefined,\r\n raw: { label: String(val), value: val },\r\n });\r\n }\r\n }\r\n return [...flat, ...customOpts];\r\n });\r\n\r\n const optionMap = createMemo(() => {\r\n const map = new Map<string | number, FlatOption>();\r\n for (const opt of allOptionsWithCustom()) {\r\n map.set(opt.value, opt);\r\n }\r\n return map;\r\n });\r\n\r\n const filteredOptions = createMemo(() => {\r\n const all = allOptionsWithCustom();\r\n const text = currentSearchText();\r\n if (!text || !showSearchEnabled()) return all;\r\n\r\n const cfg = searchConfig();\r\n if (cfg.filterOption === false) return all;\r\n\r\n let filtered: FlatOption[];\r\n if (typeof cfg.filterOption === 'function') {\r\n filtered = all.filter(opt =>\r\n (cfg.filterOption as Function)(text, opt.raw as SelectOptionType),\r\n );\r\n } else {\r\n const filterProps = Array.isArray(cfg.optionFilterProp)\r\n ? cfg.optionFilterProp\r\n : [cfg.optionFilterProp ?? 'value'];\r\n const lowerText = text.toLowerCase();\r\n filtered = all.filter(opt => {\r\n return filterProps.some(prop => {\r\n const val = getField(opt.raw, prop) ?? (prop === 'label' ? opt.label : opt.value);\r\n return String(val ?? '')\r\n .toLowerCase()\r\n .includes(lowerText);\r\n });\r\n });\r\n }\r\n\r\n if (cfg.filterSort) {\r\n const sortFn = cfg.filterSort;\r\n filtered.sort((a, b) =>\r\n sortFn(a.raw as SelectOptionType, b.raw as SelectOptionType, { searchValue: text }),\r\n );\r\n }\r\n\r\n return filtered;\r\n });\r\n\r\n const groupedForRender = createMemo(() => {\r\n const text = currentSearchText();\r\n if (text && showSearchEnabled()) {\r\n return [{ groupLabel: undefined, items: filteredOptions() }] as OptionGroup[];\r\n }\r\n return regroupFlatOptions(allOptionsWithCustom());\r\n });\r\n\r\n type RenderItem =\r\n | { type: 'group'; groupLabel: SolidComponent }\r\n | { type: 'option'; option: FlatOption; flatIdx: number };\r\n\r\n const flatRenderList = createMemo((): RenderItem[] => {\r\n const groups = groupedForRender();\r\n const result: RenderItem[] = [];\r\n let flatIdx = 0;\r\n for (const group of groups) {\r\n if (group.groupLabel !== undefined) {\r\n result.push({ type: 'group', groupLabel: group.groupLabel });\r\n }\r\n for (const item of group.items) {\r\n result.push({ type: 'option', option: item, flatIdx });\r\n flatIdx++;\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n const ITEM_HEIGHT = 32;\r\n const GROUP_LABEL_HEIGHT = 28;\r\n\r\n const virtualizer = createVirtualizer({\r\n get count() {\r\n return flatRenderList().length;\r\n },\r\n getScrollElement: () => listRef(),\r\n estimateSize: (index: number) => {\r\n const item = flatRenderList()[index];\r\n return item?.type === 'group' ? GROUP_LABEL_HEIGHT : ITEM_HEIGHT;\r\n },\r\n overscan: 2,\r\n });\r\n\r\n const selectedValuesSet = createMemo(() => new Set(selectedValues()));\r\n\r\n const isSelected = (val: string | number) => {\r\n return selectedValuesSet().has(val);\r\n };\r\n\r\n const isMaxReached = createMemo(() => {\r\n if (!isMultiple()) return false;\r\n const max = p.maxCount as number | undefined;\r\n if (max === undefined) return false;\r\n return selectedValues().length >= max;\r\n });\r\n\r\n // Set for a brief window after openDropdown() to suppress spurious focusout events\r\n // that fire when SolidJS re-renders the DOM (inserting dropdown content causes\r\n // the focused trigger div to receive a focusout with relatedTarget=null before\r\n // the search input is mounted and re-focused via queueMicrotask).\r\n let suppressBlurUntil = 0;\r\n\r\n const openDropdown = () => {\r\n if (p.disabled) return;\r\n suppressBlurUntil = performance.now() + 150;\r\n if (p.open === undefined) {\r\n setIsOpen(true);\r\n }\r\n p.onOpenChange?.(true);\r\n };\r\n\r\n const closeDropdown = () => {\r\n if (p.open === undefined) {\r\n setIsOpen(false);\r\n }\r\n setListRef(null);\r\n p.onOpenChange?.(false);\r\n\r\n if (showSearchEnabled()) {\r\n setSearchText('');\r\n searchConfig().onSearch?.('');\r\n }\r\n };\r\n\r\n const toggleDropdown = () => {\r\n if (dropdownOpen()) {\r\n closeDropdown();\r\n } else {\r\n openDropdown();\r\n }\r\n };\r\n\r\n const buildOutputValue = (values: (string | number)[]): SelectValue => {\r\n const map = optionMap();\r\n if (isMultiple()) {\r\n if (p.labelInValue) {\r\n return values.map(v => {\r\n const opt = map.get(v);\r\n return {\r\n value: v,\r\n label: opt?.label ?? String(v),\r\n } as LabeledValue;\r\n });\r\n }\r\n return values as string[] | number[];\r\n }\r\n\r\n const val = values[0];\r\n if (val === undefined) return undefined as any;\r\n if (p.labelInValue) {\r\n const opt = map.get(val);\r\n return {\r\n value: val,\r\n label: opt?.label ?? String(val),\r\n } as LabeledValue;\r\n }\r\n return val;\r\n };\r\n\r\n const buildOutputOption = (\r\n values: (string | number)[],\r\n ): SelectOptionType | SelectOptionType[] => {\r\n const map = optionMap();\r\n if (isMultiple()) {\r\n return values.map(v => {\r\n const opt = map.get(v);\r\n return (opt?.raw as SelectOptionType) ?? { value: v, label: String(v) };\r\n });\r\n }\r\n const val = values[0];\r\n const opt = map.get(val);\r\n return (opt?.raw as SelectOptionType) ?? { value: val, label: String(val) };\r\n };\r\n\r\n const handleSelect = (optValue: string | number) => {\r\n const opt = optionMap().get(optValue);\r\n const rawOpt = (opt?.raw as SelectOptionType) ?? {\r\n value: optValue,\r\n label: String(optValue),\r\n };\r\n\r\n if (isMultiple()) {\r\n const current = selectedValues();\r\n let newValues: (string | number)[];\r\n\r\n if (current.includes(optValue)) {\r\n newValues = current.filter(v => v !== optValue);\r\n const deselectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onDeselect?.(deselectVal);\r\n } else {\r\n if (isMaxReached()) return;\r\n newValues = [...current, optValue];\r\n const selectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onSelect?.(selectVal, rawOpt);\r\n }\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n\r\n if (searchConfig().autoClearSearchValue !== false) {\r\n setSearchText('');\r\n searchConfig().onSearch?.('');\r\n }\r\n } else {\r\n const newValues = [optValue];\r\n const selectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onSelect?.(selectVal, rawOpt);\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n closeDropdown();\r\n setSearchText('');\r\n }\r\n };\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (p.value === undefined) {\r\n setInternalValue([]);\r\n }\r\n p.onClear?.();\r\n p.onChange?.(isMultiple() ? [] : (undefined as any), isMultiple() ? [] : (undefined as any));\r\n setSearchText('');\r\n };\r\n\r\n const handleRemoveTag = (val: string | number, e?: MouseEvent) => {\r\n e?.stopPropagation();\r\n e?.preventDefault();\r\n const current = selectedValues();\r\n const newValues = current.filter(v => v !== val);\r\n\r\n const opt = optionMap().get(val);\r\n const deselectVal = p.labelInValue\r\n ? ({ value: val, label: opt?.label ?? String(val) } as LabeledValue)\r\n : val;\r\n p.onDeselect?.(deselectVal);\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (p.disabled) return;\r\n p.onInputKeyDown?.(e);\r\n\r\n const opts = filteredOptions();\r\n\r\n switch (e.key) {\r\n case 'ArrowDown': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n let next = activeIndex() + 1;\r\n while (next < opts.length) {\r\n const opt = opts[next];\r\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\r\n break;\r\n }\r\n next++;\r\n }\r\n if (next < opts.length) {\r\n setActiveIndex(next);\r\n const val = p.labelInValue\r\n ? ({ value: opts[next].value, label: opts[next].label } as LabeledValue)\r\n : opts[next].value;\r\n p.onActive?.(val);\r\n scrollActiveIntoView(next);\r\n }\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n let prev = activeIndex() === -1 ? opts.length - 1 : activeIndex() - 1;\r\n while (prev >= 0) {\r\n const opt = opts[prev];\r\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\r\n break;\r\n }\r\n prev--;\r\n }\r\n if (prev >= 0) {\r\n setActiveIndex(prev);\r\n const val = p.labelInValue\r\n ? ({ value: opts[prev].value, label: opts[prev].label } as LabeledValue)\r\n : opts[prev].value;\r\n p.onActive?.(val);\r\n scrollActiveIntoView(prev);\r\n }\r\n break;\r\n }\r\n case 'Enter':\r\n case ' ': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n if (e.key === ' ' && showSearchEnabled()) break;\r\n const idx = activeIndex();\r\n if (idx >= 0 && idx < opts.length) {\r\n const opt = opts[idx];\r\n if (!opt.disabled) {\r\n handleSelect(opt.value);\r\n }\r\n } else if (allowCustomValue() && currentSearchText().trim()) {\r\n const tag = currentSearchText().trim();\r\n handleSelect(tag);\r\n }\r\n break;\r\n }\r\n case 'Escape': {\r\n e.preventDefault();\r\n closeDropdown();\r\n triggerRef?.focus();\r\n break;\r\n }\r\n case 'Backspace': {\r\n if (isMultiple() && currentSearchText() === '') {\r\n const vals = selectedValues();\r\n if (vals.length > 0) {\r\n handleRemoveTag(vals[vals.length - 1]);\r\n }\r\n }\r\n break;\r\n }\r\n case 'Tab': {\r\n closeDropdown();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const scrollActiveIntoView = (flatIdx: number) => {\r\n if (p.virtual) {\r\n const list = flatRenderList();\r\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\r\n if (renderIdx >= 0) {\r\n virtualizer.scrollToIndex(renderIdx, { align: 'auto' });\r\n }\r\n return;\r\n }\r\n\r\n const el = listRef();\r\n if (!el) return;\r\n const items = el.querySelectorAll('[data-option-index]');\r\n const item = items[flatIdx] as HTMLElement | undefined;\r\n if (item) {\r\n item.scrollIntoView({ block: 'nearest' });\r\n }\r\n };\r\n\r\n const scrollToFirstSelected = () => {\r\n const vals = selectedValues();\r\n if (vals.length === 0) return;\r\n\r\n const firstSelectedValue = vals[0];\r\n const opts = filteredOptions();\r\n const flatIdx = opts.findIndex(o => o.value === firstSelectedValue);\r\n if (flatIdx < 0) return;\r\n\r\n if (p.virtual) {\r\n const list = flatRenderList();\r\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\r\n if (renderIdx >= 0) {\r\n virtualizer.scrollToIndex(renderIdx, { align: 'start' });\r\n }\r\n } else {\r\n const el = listRef();\r\n if (!el) return;\r\n const item = el.querySelector(`[data-option-index=\"${flatIdx}\"]`) as HTMLElement | null;\r\n if (item) {\r\n item.scrollIntoView({ block: 'nearest' });\r\n }\r\n }\r\n };\r\n\r\n const handleSearchInput = (e: InputEvent) => {\r\n const target = e.target as HTMLInputElement;\r\n const val = target.value;\r\n\r\n if (controlledSearchValue() === undefined) {\r\n setSearchText(val);\r\n }\r\n searchConfig().onSearch?.(val);\r\n\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n }\r\n };\r\n\r\n const handleFocus = (e: FocusEvent) => {\r\n // Only fix scroll when the trigger div (not the search input) receives focus.\r\n // The trigger div has offsetTop=0 relative to .dropdown (position:relative), which\r\n // causes Chromium to scroll the page to 0 when focusing it (a browser quirk).\r\n // We listen for the next scroll event and immediately restore the position.\r\n if (e.target === triggerRef) {\r\n const scrollX = window.scrollX;\r\n const scrollY = window.scrollY;\r\n // Chromium scrolls the page when focusing triggerRef because its offsetTop=0\r\n // relative to the .dropdown positioned parent (a browser quirk). We restore after\r\n // the focus-scroll completes by waiting for the scroll event, then deferring one rAF\r\n // so the browser's internal focus-scroll is truly done before we override it.\r\n const restoreScroll = () =>\r\n requestAnimationFrame(() => requestAnimationFrame(() => window.scrollTo(scrollX, scrollY)));\r\n window.addEventListener('scroll', restoreScroll, { once: true, passive: false });\r\n setTimeout(() => window.removeEventListener('scroll', restoreScroll), 200);\r\n }\r\n p.onFocus?.(e);\r\n };\r\n\r\n const handleBlur = (e: FocusEvent) => {\r\n const related = e.relatedTarget as HTMLElement | null;\r\n if (related && selectRootRef?.contains(related)) return;\r\n if (related?.closest('.nd-content')) return;\r\n // Suppress spurious focusout that fires immediately after openDropdown() while\r\n // SolidJS is re-rendering the DOM (before the search input is mounted and focused).\r\n if (performance.now() < suppressBlurUntil) return;\r\n p.onBlur?.(e);\r\n closeDropdown();\r\n };\r\n\r\n const selectedLabel = createMemo((): JSXElement => {\r\n if (isMultiple()) return null;\r\n const vals = selectedValues();\r\n if (vals.length === 0) return null;\r\n const val = vals[0];\r\n const opt = optionMap().get(val);\r\n\r\n if (p.labelRender) {\r\n return p.labelRender({\r\n value: val,\r\n label: opt?.label ?? String(val),\r\n key: String(val),\r\n });\r\n }\r\n\r\n return (opt?.label as Element) ?? String(val);\r\n });\r\n\r\n interface TagInfo {\r\n value: string | number;\r\n label: SolidComponent;\r\n closable: boolean;\r\n }\r\n const visibleTags = createMemo((): { visible: TagInfo[]; omitted: TagInfo[] } => {\r\n if (!isMultiple()) return { visible: [], omitted: [] };\r\n const vals = selectedValues();\r\n const map = optionMap();\r\n const maxTagCount = p.maxTagCount as number | 'responsive' | undefined;\r\n const maxTextLen = p.maxTagTextLength as number | undefined;\r\n\r\n const tags: TagInfo[] = vals.map(val => {\r\n const opt = map.get(val);\r\n let label: SolidComponent = opt?.label ?? String(val);\r\n if (maxTextLen && typeof label === 'string' && label.length > maxTextLen) {\r\n label = label.slice(0, maxTextLen) + '...';\r\n }\r\n return { value: val, label, closable: !p.disabled };\r\n });\r\n\r\n if (typeof maxTagCount === 'number' && tags.length > maxTagCount) {\r\n return { visible: tags.slice(0, maxTagCount), omitted: tags.slice(maxTagCount) };\r\n }\r\n\r\n return { visible: tags, omitted: [] };\r\n });\r\n\r\n const showClear = createMemo(() => {\r\n if (!p.allowClear) return false;\r\n if (p.disabled) return false;\r\n return selectedValues().length > 0;\r\n });\r\n\r\n const handleTriggerClick = (e: MouseEvent) => {\r\n if (p.disabled || p.loading) return;\r\n e.preventDefault();\r\n toggleDropdown();\r\n };\r\n\r\n const findOptionIndex = (target: EventTarget | null): number | null => {\r\n let el = target as HTMLElement | null;\r\n while (el) {\r\n const idx = el.dataset?.optionIndex;\r\n if (idx !== undefined) return Number(idx);\r\n\r\n if (el.classList?.contains('sel30')) return null;\r\n el = el.parentElement;\r\n }\r\n return null;\r\n };\r\n\r\n const handleListClick = (e: MouseEvent) => {\r\n const flatIdx = findOptionIndex(e.target);\r\n if (flatIdx === null) return;\r\n const opts = filteredOptions();\r\n const opt = opts[flatIdx];\r\n if (!opt || opt.disabled || (isMaxReached() && !isSelected(opt.value))) return;\r\n // In multiple mode, selecting an option re-renders the tag list (DOM mutation)\r\n // which can cause a spurious focusout. Suppress blur handling briefly.\r\n if (isMultiple()) suppressBlurUntil = performance.now() + 150;\r\n handleSelect(opt.value);\r\n };\r\n\r\n const renderOptionItem = (opt: FlatOption, flatIdx: number) => {\r\n const selected = () => isSelected(opt.value);\r\n const isActive = () => activeIndex() === flatIdx;\r\n const isDisabledOpt = () => opt.disabled || (isMaxReached() && !selected());\r\n\r\n const flattenData: FlattenOptionData = {\r\n label: opt.label,\r\n value: opt.value,\r\n disabled: opt.disabled,\r\n key: opt.value,\r\n groupLabel: opt.groupLabel,\r\n };\r\n\r\n const content = p.optionRender\r\n ? p.optionRender(flattenData, { index: flatIdx })\r\n : (opt.label as Element);\r\n\r\n return (\r\n <div\r\n data-option-index={flatIdx}\r\n class={cn(\r\n 'sel31',\r\n selected() && 'sel33',\r\n isActive() && 'sel32',\r\n isDisabledOpt() && 'sel34',\r\n opt.groupLabel !== undefined && 'sel38',\r\n opt.class,\r\n )}\r\n title={opt.title}\r\n >\r\n <span class=\"sel35\">{content}</span>\r\n <Show when={selected()}>\r\n <span class=\"sel36\">\r\n {p.menuItemSelectedIcon ? (\r\n (p.menuItemSelectedIcon as Element)\r\n ) : (\r\n <Check size={14} color=\"var(--color)\" stroke-width={3} />\r\n )}\r\n </span>\r\n </Show>\r\n </div>\r\n );\r\n };\r\n\r\n const dropdownContent = () => {\r\n const renderList = flatRenderList();\r\n\r\n if (renderList.length === 0) {\r\n return <div class=\"sel39\">{p.notFoundContent as Element}</div>;\r\n }\r\n\r\n if (p.virtual) {\r\n return (\r\n <div\r\n ref={el => {\r\n requestAnimationFrame(() => setListRef(el));\r\n }}\r\n class={cn('sel30', getColor(p.color))}\r\n style={{ 'max-height': `${p.listHeight}px`, 'overflow-y': 'auto' }}\r\n onClick={handleListClick}\r\n >\r\n <div\r\n style={{\r\n height: `${virtualizer.getTotalSize()}px`,\r\n width: '100%',\r\n position: 'relative',\r\n }}\r\n >\r\n <For each={virtualizer.getVirtualItems()}>\r\n {virtualRow => {\r\n const item = renderList[virtualRow.index];\r\n return (\r\n <div\r\n data-index={virtualRow.index}\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n transform: `translateY(${virtualRow.start}px)`,\r\n }}\r\n >\r\n {item.type === 'group' ? (\r\n <div class=\"sel37\">{item.groupLabel as Element}</div>\r\n ) : (\r\n renderOptionItem(item.option, item.flatIdx)\r\n )}\r\n </div>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={el => setListRef(el)}\r\n class=\"sel30\"\r\n style={{ 'max-height': `${p.listHeight}px` }}\r\n onClick={handleListClick}\r\n >\r\n <For each={renderList}>\r\n {item =>\r\n item.type === 'group' ? (\r\n <div class=\"sel37\">{item.groupLabel as Element}</div>\r\n ) : (\r\n renderOptionItem(item.option, item.flatIdx)\r\n )\r\n }\r\n </For>\r\n </div>\r\n );\r\n };\r\n\r\n const renderTag = (tag: { value: string | number; label: SolidComponent; closable: boolean }) => (\r\n <SelectTag\r\n tag={tag}\r\n removeIcon={p.removeIcon as JSXElement}\r\n tagRender={p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined}\r\n onRemove={handleRemoveTag}\r\n />\r\n );\r\n\r\n createEffect(\r\n on(dropdownOpen, open => {\r\n if (open && p.defaultActiveFirstOption) {\r\n const opts = filteredOptions();\r\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\r\n setActiveIndex(idx >= 0 ? idx : -1);\r\n }\r\n if (!open) {\r\n setActiveIndex(-1);\r\n }\r\n }),\r\n );\r\n\r\n createEffect(\r\n on(\r\n () => currentSearchText(),\r\n () => {\r\n if (dropdownOpen() && p.defaultActiveFirstOption) {\r\n const opts = filteredOptions();\r\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\r\n setActiveIndex(idx >= 0 ? idx : -1);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n createEffect(\r\n on(listRef, el => {\r\n if (el && dropdownOpen()) {\r\n requestAnimationFrame(() => {\r\n if (p.virtual) virtualizer.measure();\r\n scrollToFirstSelected();\r\n });\r\n }\r\n }),\r\n );\r\n\r\n createEffect(\r\n on(\r\n () => dropdownOpen(),\r\n open => {\r\n if (open && showSearchEnabled()) {\r\n queueMicrotask(() => inputRef?.focus({ preventScroll: true }));\r\n }\r\n },\r\n ),\r\n );\r\n\r\n return (\r\n <Dropdown\r\n ref={el => (selectRootRef = el)}\r\n open={dropdownOpen()}\r\n blockScroll={p.blockScroll}\r\n position={p.placement === 'top' ? 'top' : 'bottom'}\r\n class={{\r\n trigger: `${p.disabled ? 'pointer-events-none' : ''} w-full`,\r\n content: cn(\r\n 'border-c3 bg-base-100 rounded-box menu p-0',\r\n p.placement === 'bottom' ? 'mt-1 shadow-md' : 'shadow-md-top mb-1',\r\n p.class?.dropdownContent,\r\n ),\r\n }}\r\n triggerElement={\r\n <div\r\n ref={el => (triggerRef = el)}\r\n class={cn(\r\n selectVariants({ size: p.size, variant: p.variant }),\r\n getColor(p.color),\r\n dropdownOpen() && 'sel41 sel02',\r\n isMultiple() && 'sel40',\r\n p.class?.root,\r\n p.disabled && 'sel03',\r\n )}\r\n tabIndex={p.disabled ? -1 : 0}\r\n onClick={handleTriggerClick}\r\n onKeyDown={handleKeyDown}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n role=\"combobox\"\r\n aria-expanded={dropdownOpen()}\r\n aria-haspopup=\"listbox\"\r\n >\r\n <Show when={p.prefix}>\r\n <span class=\"sel11\">{p.prefix as Element}</span>\r\n </Show>\r\n\r\n <div class=\"sel12\">\r\n <Show\r\n when={isMultiple()}\r\n fallback={\r\n <div class=\"sel13\">\r\n <Show\r\n when={selectedValues().length > 0}\r\n fallback={\r\n <span\r\n class=\"sel15\"\r\n style={{\r\n visibility: currentSearchText() ? 'hidden' : undefined,\r\n }}\r\n >\r\n {p.placeholder}\r\n </span>\r\n }\r\n >\r\n <span\r\n class=\"sel14\"\r\n style={{\r\n visibility:\r\n currentSearchText() && showSearchEnabled() ? 'hidden' : undefined,\r\n }}\r\n >\r\n {selectedLabel()}\r\n </span>\r\n </Show>\r\n </div>\r\n }\r\n >\r\n <div class=\"sel16\">\r\n <For each={visibleTags().visible}>{tag => renderTag(tag)}</For>\r\n\r\n <Show when={visibleTags().omitted.length > 0}>\r\n <InnerTooltip\r\n content={\r\n <For each={visibleTags().omitted}>\r\n {tag => (\r\n <SelectTag\r\n tag={tag}\r\n removeIcon={p.removeIcon as JSXElement}\r\n tagRender={\r\n p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined\r\n }\r\n onRemove={handleRemoveTag}\r\n />\r\n )}\r\n </For>\r\n }\r\n >\r\n <span class=\"sel17 sel20\">\r\n {(() => {\r\n const placeholder = p.maxTagPlaceholder;\r\n if (typeof placeholder === 'function') {\r\n const omittedValues = visibleTags().omitted.map(t => ({\r\n value: t.value,\r\n label: t.label,\r\n })) as LabeledValue[];\r\n return placeholder(omittedValues) as Element;\r\n }\r\n if (placeholder) return placeholder;\r\n return `+${visibleTags().omitted.length} more...`;\r\n })()}\r\n </span>\r\n </InnerTooltip>\r\n </Show>\r\n\r\n <Show when={selectedValues().length === 0}>\r\n <span class=\"sel15\">{p.placeholder}</span>\r\n </Show>\r\n </div>\r\n </Show>\r\n </div>\r\n\r\n <div class=\"sel22\">\r\n <Show when={showClear()}>\r\n <span class=\"sel26\" onClick={handleClear}>\r\n <X class=\"m-auto\" size={14} />\r\n </span>\r\n </Show>\r\n <Show when={!p.loading} fallback={<span class=\"sel25\"></span>}>\r\n <span class={cn('sel23', dropdownOpen() && 'sel24')}>\r\n {p.suffixIcon ? (p.suffixIcon as Element) : <ChevronDown size={16} />}\r\n </span>\r\n </Show>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <div\r\n role=\"listbox\"\r\n class={getColor(p.color)}\r\n onMouseDown={e => {\r\n if ((e.target as HTMLElement)?.tagName !== 'INPUT') {\r\n e.preventDefault();\r\n }\r\n }}\r\n >\r\n <Show when={showSearchEnabled()}>\r\n <div class=\"flex items-center px-3 shadow-2xs\">\r\n <Search size={14} />\r\n <input\r\n ref={ref => (inputRef = ref)}\r\n class=\"sel29\"\r\n value={currentSearchText()}\r\n onInput={handleSearchInput}\r\n onKeyDown={handleKeyDown}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n disabled={p.disabled}\r\n autocomplete=\"off\"\r\n role=\"combobox\"\r\n aria-expanded={dropdownOpen()}\r\n aria-haspopup=\"listbox\"\r\n aria-autocomplete=\"list\"\r\n placeholder=\"Search...\"\r\n />\r\n </div>\r\n </Show>\r\n {p.popupRender ? p.popupRender(dropdownContent()) : dropdownContent()}\r\n </div>\r\n </Dropdown>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-zone.js","names":["Component","createContext","createEffect","createSignal","mergeProps","onCleanup","useContext","Portal","cn","SelectZoneItemProps","SelectZoneProps","SelectZoneContextValue","registerItem","key","el","HTMLElement","unregisterItem","isSelected","SelectZoneContext","DEFAULT_PROPS","additive","scrollThreshold","scrollSpeed","disabled","SelectZone","props","p","itemMap","Map","selectedKeys","setSelectedKeys","Set","overlayRect","setOverlayRect","x","y","w","h","rootEl","HTMLDivElement","intersects","selLeft","selTop","selRight","selBottom","r","getBoundingClientRect","docLeft","left","window","scrollX","docTop","top","scrollY","docRight","right","docBottom","bottom","computeSelection","startPageX","startPageY","currPageX","currPageY","Math","min","max","hit","forEach","checkItem","add","isDragging","isAdditive","prevKeys","rafId","lastClientX","lastClientY","scrollLoop","threshold","speed","vw","innerWidth","vh","innerHeight","cx","cy","dx","dy","scrollBy","updateOverlay","requestAnimationFrame","currClientX","currClientY","abs","next","k","has","delete","onMouseDown","e","MouseEvent","button","target","closest","clientX","clientY","shiftKey","ctrlKey","metaKey","document","addEventListener","onMouseMove","onMouseUp","removeEventListener","cancelAnimationFrame","onSelect","item","contextValue","set","syncControlledValue","v","value","undefined","mountListeners","unmountListeners","_$createComponent","Provider","children","_el$","_tmpl$","_ref$","_$use","_$insert","_c$","_$memo","mount","body","_el$2","_$effect","_p$","_v$","class","overlay","_v$2","_v$3","_v$4","_v$5","_$className","t","_$setStyleProperty","a","o","i","root","SelectZoneItem","ctx","Error","registerOnMount","itemKey","unregisterOnUnmount","_el$3","_ref$2","_v$6","_v$7","_$setAttribute"],"sources":["../../../../src/components/select-zone/select-zone.tsx"],"sourcesContent":["import {\r\n Component,\r\n createContext,\r\n createEffect,\r\n createSignal,\r\n mergeProps,\r\n onCleanup,\r\n useContext,\r\n} from 'solid-js';\r\nimport { Portal } from 'solid-js/web';\r\nimport { cn } from '@utils/cn';\r\nimport { SelectZoneItemProps, SelectZoneProps } from './select-zone.types';\r\n\r\n// ─── Context ──────────────────────────────────────────────────────────────────\r\n\r\ninterface SelectZoneContextValue {\r\n registerItem: (key: string, el: HTMLElement) => void;\r\n unregisterItem: (key: string) => void;\r\n isSelected: (key: string) => boolean;\r\n}\r\n\r\nconst SelectZoneContext = createContext<SelectZoneContextValue>();\r\n\r\n// ─── SelectZone ───────────────────────────────────────────────────────────────\r\n\r\nconst DEFAULT_PROPS = {\r\n additive: true,\r\n scrollThreshold: 40,\r\n scrollSpeed: 12,\r\n disabled: false,\r\n};\r\n\r\nexport const SelectZone: Component<SelectZoneProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n // Map từ itemKey → DOM element (đăng ký bởi SelectZoneItem)\r\n const itemMap = new Map<string, HTMLElement>();\r\n\r\n // Tập hợp các key đang được chọn\r\n const [selectedKeys, setSelectedKeys] = createSignal<Set<string>>(new Set());\r\n\r\n // Overlay rect: null = ẩn, có giá trị = đang kéo\r\n const [overlayRect, setOverlayRect] = createSignal<{\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n } | null>(null);\r\n\r\n let rootEl!: HTMLDivElement;\r\n\r\n // ── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Tính giao nhau AABB.\r\n * selLeft/Top/Right/Bottom: document coordinates (pageX/Y).\r\n * el.getBoundingClientRect(): viewport coordinates → convert sang document.\r\n */\r\n function intersects(\r\n selLeft: number,\r\n selTop: number,\r\n selRight: number,\r\n selBottom: number,\r\n el: HTMLElement,\r\n ): boolean {\r\n const r = el.getBoundingClientRect();\r\n const docLeft = r.left + window.scrollX;\r\n const docTop = r.top + window.scrollY;\r\n const docRight = r.right + window.scrollX;\r\n const docBottom = r.bottom + window.scrollY;\r\n return docRight > selLeft && docLeft < selRight && docBottom > selTop && docTop < selBottom;\r\n }\r\n\r\n /**\r\n * Tính selection.\r\n * startPageX/Y, currPageX/Y: document coordinates.\r\n */\r\n function computeSelection(\r\n startPageX: number,\r\n startPageY: number,\r\n currPageX: number,\r\n currPageY: number,\r\n ): Set<string> {\r\n const selLeft = Math.min(startPageX, currPageX);\r\n const selTop = Math.min(startPageY, currPageY);\r\n const selRight = Math.max(startPageX, currPageX);\r\n const selBottom = Math.max(startPageY, currPageY);\r\n\r\n const hit = new Set<string>();\r\n itemMap.forEach(function checkItem(el, key) {\r\n if (intersects(selLeft, selTop, selRight, selBottom, el)) {\r\n hit.add(key);\r\n }\r\n });\r\n return hit;\r\n }\r\n\r\n // ── Drag state ───────────────────────────────────────────────────────────────\r\n\r\n // startPageX/Y: document coordinates — cố định suốt drag, không bị ảnh hưởng bởi scroll\r\n let startPageX = 0;\r\n let startPageY = 0;\r\n let isDragging = false;\r\n let isAdditive = false;\r\n let prevKeys: Set<string> = new Set();\r\n let rafId = 0;\r\n let lastClientX = 0;\r\n let lastClientY = 0;\r\n\r\n // ── Auto-scroll loop ─────────────────────────────────────────────────────────\r\n\r\n function scrollLoop() {\r\n if (!isDragging) return;\r\n\r\n const threshold = p.scrollThreshold;\r\n const speed = p.scrollSpeed;\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n const cx = lastClientX;\r\n const cy = lastClientY;\r\n\r\n let dx = 0;\r\n let dy = 0;\r\n\r\n if (cx < threshold) dx = -speed * (1 - cx / threshold);\r\n else if (cx > vw - threshold) dx = speed * (1 - (vw - cx) / threshold);\r\n\r\n if (cy < threshold) dy = -speed * (1 - cy / threshold);\r\n else if (cy > vh - threshold) dy = speed * (1 - (vh - cy) / threshold);\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n window.scrollBy(dx, dy);\r\n // startPageX/Y KHÔNG thay đổi — nó là điểm neo trong document space\r\n }\r\n\r\n // Cập nhật overlay sau mỗi frame (kể cả khi chỉ scroll mà chuột đứng yên)\r\n updateOverlay(cx, cy);\r\n\r\n rafId = requestAnimationFrame(scrollLoop);\r\n }\r\n\r\n // ── Overlay update ───────────────────────────────────────────────────────────\r\n\r\n function updateOverlay(currClientX: number, currClientY: number) {\r\n // Convert cursor về document coordinates\r\n const currPageX = currClientX + window.scrollX;\r\n const currPageY = currClientY + window.scrollY;\r\n\r\n // Overlay rect tính trong document space\r\n const docLeft = Math.min(startPageX, currPageX);\r\n const docTop = Math.min(startPageY, currPageY);\r\n const w = Math.abs(currPageX - startPageX);\r\n const h = Math.abs(currPageY - startPageY);\r\n\r\n // Convert sang viewport để render (position: fixed dùng viewport coords)\r\n setOverlayRect({\r\n x: docLeft - window.scrollX,\r\n y: docTop - window.scrollY,\r\n w,\r\n h,\r\n });\r\n\r\n // Selection dùng document coordinates\r\n const hit = computeSelection(startPageX, startPageY, currPageX, currPageY);\r\n\r\n let next: Set<string>;\r\n if (isAdditive) {\r\n // Toggle per-item: item trong prevKeys bị drag đè → deselect; item mới → select\r\n next = new Set(prevKeys);\r\n hit.forEach(k => {\r\n if (prevKeys.has(k)) next.delete(k);\r\n else next.add(k);\r\n });\r\n } else {\r\n next = hit;\r\n }\r\n setSelectedKeys(next);\r\n }\r\n\r\n // ── Event handlers ───────────────────────────────────────────────────────────\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n if (p.disabled) return;\r\n // Chỉ xử lý click trái, không xử lý trên scrollbar, input, button, a\r\n if (e.button !== 0) return;\r\n const target = e.target as HTMLElement;\r\n if (target.closest('input, button, a, textarea, select, [data-no-select]')) return;\r\n\r\n isDragging = false;\r\n // Lưu điểm bắt đầu trong document space — bất biến suốt drag\r\n startPageX = e.clientX + window.scrollX;\r\n startPageY = e.clientY + window.scrollY;\r\n lastClientX = e.clientX;\r\n lastClientY = e.clientY;\r\n isAdditive = e.shiftKey || e.ctrlKey || e.metaKey;\r\n prevKeys = isAdditive ? new Set(selectedKeys()) : new Set();\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(e: MouseEvent) {\r\n lastClientX = e.clientX;\r\n lastClientY = e.clientY;\r\n\r\n // So sánh trong document space để tránh nhiễu từ scroll\r\n const dx = e.clientX + window.scrollX - startPageX;\r\n const dy = e.clientY + window.scrollY - startPageY;\r\n\r\n if (!isDragging) {\r\n // Chỉ bắt đầu drag khi kéo ít nhất 4px để tránh nhầm với click\r\n if (Math.abs(dx) < 4 && Math.abs(dy) < 4) return;\r\n isDragging = true;\r\n rafId = requestAnimationFrame(scrollLoop);\r\n }\r\n\r\n updateOverlay(e.clientX, e.clientY);\r\n }\r\n\r\n function onMouseUp(e: MouseEvent) {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n\r\n cancelAnimationFrame(rafId);\r\n isDragging = false;\r\n\r\n if (overlayRect() !== null) {\r\n setOverlayRect(null);\r\n // Thông báo selection cuối cùng\r\n p.onSelect?.(new Set(selectedKeys()));\r\n } else {\r\n // Không drag → click đơn → deselect tất cả (nếu không additive)\r\n if (!isAdditive) {\r\n const target = e.target as HTMLElement;\r\n const item = target.closest('[data-select-key]') as HTMLElement | null;\r\n if (!item) {\r\n setSelectedKeys(new Set<string>());\r\n p.onSelect?.(new Set<string>());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ── Context value ────────────────────────────────────────────────────────────\r\n\r\n const contextValue: SelectZoneContextValue = {\r\n registerItem(key, el) {\r\n itemMap.set(key, el);\r\n },\r\n unregisterItem(key) {\r\n itemMap.delete(key);\r\n },\r\n isSelected(key) {\r\n return selectedKeys().has(key);\r\n },\r\n };\r\n\r\n // ── Đồng bộ controlled value ─────────────────────────────────────────────────\r\n\r\n createEffect(function syncControlledValue() {\r\n const v = p.value;\r\n if (v !== undefined) setSelectedKeys(new Set(v));\r\n });\r\n\r\n // ── Cleanup khi unmount ──────────────────────────────────────────────────────\r\n\r\n createEffect(function mountListeners() {\r\n rootEl.addEventListener('mousedown', onMouseDown);\r\n onCleanup(function unmountListeners() {\r\n rootEl.removeEventListener('mousedown', onMouseDown);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n cancelAnimationFrame(rafId);\r\n });\r\n });\r\n\r\n // ── Render ───────────────────────────────────────────────────────────────────\r\n\r\n return (\r\n <SelectZoneContext.Provider value={contextValue}>\r\n <div ref={rootEl} class={cn('sz01', p.class?.root)}>\r\n {p.children}\r\n\r\n {/* Selection overlay — render qua Portal để tránh ảnh hưởng layout */}\r\n {overlayRect() && (\r\n <Portal mount={document.body}>\r\n <div\r\n class={cn('sz02', p.class?.overlay)}\r\n style={{\r\n left: `${overlayRect()!.x}px`,\r\n top: `${overlayRect()!.y}px`,\r\n width: `${overlayRect()!.w}px`,\r\n height: `${overlayRect()!.h}px`,\r\n }}\r\n />\r\n </Portal>\r\n )}\r\n </div>\r\n </SelectZoneContext.Provider>\r\n );\r\n};\r\n\r\n// ─── SelectZoneItem ───────────────────────────────────────────────────────────\r\n\r\nexport const SelectZoneItem: Component<SelectZoneItemProps> = props => {\r\n const ctx = useContext(SelectZoneContext);\r\n if (!ctx) throw new Error('SelectZoneItem must be used inside <SelectZone>');\r\n\r\n let el!: HTMLDivElement;\r\n\r\n createEffect(function registerOnMount() {\r\n ctx.registerItem(props.itemKey, el);\r\n onCleanup(function unregisterOnUnmount() {\r\n ctx.unregisterItem(props.itemKey);\r\n });\r\n });\r\n\r\n const isSelected = () => ctx.isSelected(props.itemKey);\r\n\r\n return (\r\n <div ref={el} data-select-key={props.itemKey} class={cn('sz03', props.class)}>\r\n {props.children(isSelected)}\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skeleton.js","names":["cn","Component","mergeProps","ParentComponent","Show","Switch","LayoutVariant","ShapeVariant","LayoutSkeletonProps","type","variant","enabled","ShapeSkeletonProps","CustomSkeletonProps","class","SkeletonProps","Skeleton","rawProps","p","const","_$createComponent","when","fallback","children","_$memo","_el$","_tmpl$","_$effect","_$className","SkeletonDisplay","SkeletonDisplayProps","ShapeSkeleton","LayoutSkeleton","_tmpl$2","_tmpl$3","_tmpl$4","_tmpl$5","_tmpl$6","_tmpl$7","_tmpl$8","_tmpl$9","_tmpl$0","_tmpl$1","_tmpl$10","_tmpl$11"],"sources":["../../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Component, mergeProps, ParentComponent, Show, Switch } from 'solid-js';\r\n// No custom CSS needed — uses DaisyUI's built-in .skeleton class\r\n\r\n// ─── Type definitions ─────────────────────────────────────────────────────────\r\n\r\n/** Layout skeleton: giao diện phức tạp gồm nhiều element */\r\ntype LayoutVariant =\r\n | 'cardImage' // Card với ảnh trên + text dưới\r\n | 'cardHorizontal' // Card nằm ngang: ảnh trái, nội dung phải\r\n | 'profile' // Avatar tròn + tên + mô tả\r\n | 'article' // Tiêu đề + đoạn văn nhiều dòng\r\n | 'feedItem' // Item list: avatar trái + text dọc\r\n | 'stat'; // Khối thống kê: label + số lớn + sublabel\r\n\r\n/** Shape skeleton: hình khối đơn giản với kích thước preset */\r\ntype ShapeVariant =\r\n | 'rectangle' // Hình chữ nhật (mặc định w-full)\r\n | 'square' // Hình vuông (w = h)\r\n | 'circle' // Hình tròn\r\n | 'textLine' // Một dòng text\r\n | 'textParagraph'; // Đoạn text 3–4 dòng\r\n\r\ntype LayoutSkeletonProps = {\r\n type: 'layout';\r\n variant?: LayoutVariant;\r\n enabled: boolean;\r\n};\r\n\r\ntype ShapeSkeletonProps = {\r\n type: 'shape';\r\n variant?: ShapeVariant;\r\n enabled: boolean;\r\n};\r\n\r\n/** Custom skeleton: user toàn quyền cấu hình — class áp thẳng lên element skeleton */\r\ntype CustomSkeletonProps = {\r\n type: 'custom';\r\n enabled: boolean;\r\n class: string; // bắt buộc — định nghĩa hình dạng, kích thước, bo góc\r\n};\r\n\r\nexport type SkeletonProps = LayoutSkeletonProps | ShapeSkeletonProps | CustomSkeletonProps;\r\n\r\n// ─── Main component ───────────────────────────────────────────────────────────\r\n\r\nexport const Skeleton: ParentComponent<SkeletonProps> = rawProps => {\r\n const p = mergeProps({ variant: 'card-image' } as const, rawProps);\r\n\r\n return (\r\n <Show when={p.enabled} fallback={p.children}>\r\n {p.type === 'custom' ? (\r\n <div class={cn('skeleton', p.class)} />\r\n ) : (\r\n <SkeletonDisplay\r\n type={p.type}\r\n variant={(p as LayoutSkeletonProps | ShapeSkeletonProps).variant as never}\r\n />\r\n )}\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Display switcher ─────────────────────────────────────────────────────────\r\n\r\ntype SkeletonDisplayProps = {\r\n type: 'layout' | 'shape';\r\n variant: LayoutVariant | ShapeVariant;\r\n class?: string;\r\n};\r\n\r\nconst SkeletonDisplay: Component<SkeletonDisplayProps> = p => {\r\n if (p.type === 'shape') {\r\n return <ShapeSkeleton variant={p.variant as ShapeVariant} />;\r\n }\r\n return <LayoutSkeleton variant={p.variant as LayoutVariant} />;\r\n};\r\n\r\n// ─── Layout Skeletons ─────────────────────────────────────────────────────────\r\n\r\nconst LayoutSkeleton: Component<{ variant?: LayoutVariant }> = p => {\r\n switch (p.variant) {\r\n case 'cardImage':\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-40 w-full rounded-lg\" />\r\n <div class=\"skeleton h-5 w-3/4 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n </div>\r\n );\r\n\r\n case 'cardHorizontal':\r\n return (\r\n <div class=\"flex flex-row items-start gap-4\">\r\n <div class=\"skeleton size-24 shrink-0 rounded-lg\" />\r\n <div class=\"flex flex-1 flex-col gap-2.5\">\r\n <div class=\"skeleton h-5 w-2/3 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n <div class=\"skeleton h-3.5 w-3/4 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'profile':\r\n return (\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <div class=\"skeleton size-20 shrink-0 rounded-full\" />\r\n <div class=\"skeleton h-5 w-36 rounded\" />\r\n <div class=\"skeleton h-3.5 w-48 rounded\" />\r\n <div class=\"skeleton h-3.5 w-40 rounded\" />\r\n </div>\r\n );\r\n\r\n case 'article':\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-7 w-3/4 rounded\" />\r\n <div class=\"skeleton h-4 w-1/3 rounded\" />\r\n <div class=\"mt-1 flex flex-col gap-2\">\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-11/12 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'feedItem':\r\n return (\r\n <div class=\"flex flex-row items-start gap-3\">\r\n <div class=\"skeleton size-10 shrink-0 rounded-full\" />\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <div class=\"skeleton h-4 w-1/3 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'stat':\r\n return (\r\n <div class=\"flex flex-col gap-2\">\r\n <div class=\"skeleton h-3.5 w-24 rounded\" />\r\n <div class=\"skeleton h-9 w-32 rounded\" />\r\n <div class=\"skeleton h-3 w-20 rounded\" />\r\n </div>\r\n );\r\n\r\n default:\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-40 w-full rounded-lg\" />\r\n <div class=\"skeleton h-5 w-3/4 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n </div>\r\n );\r\n }\r\n};\r\n\r\n// ─── Shape Skeletons ──────────────────────────────────────────────────────────\r\n\r\nconst ShapeSkeleton: Component<{ variant?: ShapeVariant }> = p => {\r\n switch (p.variant) {\r\n case 'rectangle':\r\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\r\n\r\n case 'square':\r\n return <div class=\"skeleton size-32 rounded-lg\" />;\r\n\r\n case 'circle':\r\n return <div class=\"skeleton size-16 rounded-full\" />;\r\n\r\n case 'textLine':\r\n return <div class=\"skeleton h-4 w-full rounded\" />;\r\n\r\n case 'textParagraph':\r\n return (\r\n <div class=\"flex flex-col gap-2\">\r\n <div class=\"skeleton h-4 w-full rounded\" />\r\n <div class=\"skeleton h-4 w-11/12 rounded\" />\r\n <div class=\"skeleton h-4 w-4/5 rounded\" />\r\n <div class=\"skeleton h-4 w-5/6 rounded\" />\r\n </div>\r\n );\r\n\r\n default:\r\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\r\n }\r\n};\r\n"],"mappings":"u+EA8CagB,EAA2CC,GAAY,CAClE,IAAMC,EAAIhB,EAAW,CAAEQ,QAAS,aAAc,CAAWO,EAAS,CAElE,OAAAG,EACGhB,EAAI,CAAA,IAACiB,MAAI,CAAA,OAAEH,EAAEP,SAAO,IAAEW,UAAQ,CAAA,OAAEJ,EAAEK,UAAQ,IAAAA,UAAA,CAAA,OACxCC,MAAAN,EAAET,OAAS,SAAQ,EAAA,MAAA,CAAA,IAAAgB,EAAAC,GAAA,CACiB,OADjBC,MAAAC,EAAAH,EACNzB,EAAG,WAAYkB,EAAEJ,MAAM,CAAA,CAAA,CAAAW,KAAA,CAAAL,EAElCS,EAAe,CAAA,IACdpB,MAAI,CAAA,OAAES,EAAET,MAAI,IACZC,SAAO,CAAA,OAAGQ,EAA+CR,SAAgB,CAE5E,EAAA,CAAA,EAaDmB,EAAmDX,GACnDA,EAAET,OAAS,QACbW,EAAQW,EAAa,CAAA,IAACrB,SAAO,CAAA,OAAEQ,EAAER,SAAuB,CAAA,CAE1DU,EAAQY,EAAc,CAAA,IAACtB,SAAO,CAAA,OAAEQ,EAAER,SAAwB,CAAA,CAKtDsB,EAAyDd,GAAK,CAClE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAAuB,GAAA,CAUF,IAAK,iBACH,OAAAC,GAAA,CAYF,IAAK,UACH,OAAAC,GAAA,CASF,IAAK,UACH,OAAAC,GAAA,CAcF,IAAK,WACH,OAAAC,GAAA,CAWF,IAAK,OACH,OAAAC,GAAA,CAQF,QACE,OAAAC,GAAA,GAYAR,EAAuDb,GAAK,CAChE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAA8B,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,WACH,OAAAC,GAAA,CAEF,IAAK,gBACH,OAAAC,GAAA,CASF,QACE,OAAAJ,GAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","names":["cn","getColor","Component","createEffect","createMemo","createSignal","For","mergeProps","on","Show","ParentComponent","SliderProps","SliderTooltipProps","SliderTooltipInternalProps","content","open","SliderTooltip","p","_el$","_tmpl$","_$insert","children","_$effect","_p$","_v$","position","color","class","_v$2","e","_$className","t","_$setAttribute","undefined","DEFAULT_PROPS","Partial","min","max","step","disabled","reverse","orientation","dots","included","tooltip","hidden","Slider","activeThumb","setActiveThumb","hoveredThumb","setHoveredThumb","railRef","HTMLDivElement","isRange","range","getInitialValue","value","defaultValue","internalValue","setInternalValue","newValue","currentValue","valuesArray","val","Array","isArray","valueToPercent","percent","percentToValue","actualPercent","Math","round","marks","markValues","Object","keys","map","Number","push","reduce","prev","curr","abs","getPositionFromEvent","event","MouseEvent","TouchEvent","rect","getBoundingClientRect","isVertical","clientPos","touches","clientY","clientX","bottom","height","left","width","updateValue","thumbIndex","finalValue","current","newValues","onChange","handleThumbMouseDown","preventDefault","stopPropagation","handleMove","handleEnd","document","removeEventListener","addEventListener","handleRailClick","clickedValue","v0","v1","dist0","dist1","closestThumb","marksList","entries","key","numKey","markData","label","style","dotsList","v","isInRange","trackStyle","start","length","p0","p1","thumbPositions","formatTooltip","formatter","String","shouldShowTooltip","forceOpen","getTooltipProps","rest","_el$2","_tmpl$4","_el$3","firstChild","_el$7","$$click","_ref$","_$use","_$createComponent","when","_el$4","_v$3","track","_v$4","_$style","each","dot","_el$9","_v$19","_v$20","mark","_el$0","_v$21","_v$22","_el$1","_tmpl$5","_v$23","markText","_v$24","_el$5","_tmpl$3","fallback","_el$10","_tmpl$2","$$touchstart","$$mousedown","_v$25","handle","_v$26","_v$27","_v$28","_v$29","_v$30","a","o","i","n","_$mergeProps","_el$6","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$p","_el$11","_v$31","_v$32","_v$33","_v$34","_v$35","_v$36","_el$8","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","root","_v$16","_v$17","rail","_v$18","_$delegateEvents"],"sources":["../../../../src/components/slider/slider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport {\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n Show,\r\n type ParentComponent,\r\n} from 'solid-js';\r\nimport type { SliderProps, SliderTooltipProps } from './slider.types';\r\n\r\ntype SliderTooltipInternalProps = SliderTooltipProps & {\r\n content: string;\r\n open: boolean;\r\n};\r\n\r\nconst SliderTooltip: ParentComponent<SliderTooltipInternalProps> = p => (\r\n <div\r\n class={cn(\r\n 'tooltip',\r\n p.position === 'bottom' && 'tooltip-bottom',\r\n p.position === 'left' && 'tooltip-left',\r\n p.position === 'right' && 'tooltip-right',\r\n p.color && `tooltip-${p.color}`,\r\n p.open && 'tooltip-open',\r\n p.class,\r\n )}\r\n data-tip={p.content}\r\n >\r\n {p.children}\r\n </div>\r\n);\r\n\r\nconst DEFAULT_PROPS: Partial<SliderProps> = {\r\n color: 'primary',\r\n min: 0,\r\n max: 100,\r\n step: 1,\r\n disabled: false,\r\n reverse: false,\r\n orientation: 'horizontal',\r\n dots: false,\r\n included: true,\r\n tooltip: {\r\n hidden: false,\r\n },\r\n};\r\n\r\nexport const Slider: Component<SliderProps> = p => {\r\n p = mergeProps(DEFAULT_PROPS, p);\r\n\r\n // Internal state\r\n const [activeThumb, setActiveThumb] = createSignal<0 | 1 | null>(null);\r\n const [hoveredThumb, setHoveredThumb] = createSignal<0 | 1 | null>(null);\r\n\r\n // Refs\r\n let railRef: HTMLDivElement | undefined;\r\n\r\n // Determine if range mode\r\n const isRange = createMemo(() => p.range === true);\r\n\r\n // Internal value state (for uncontrolled mode)\r\n const getInitialValue = (): number | [number, number] => {\r\n if (p.value !== undefined) return p.value;\r\n if (p.defaultValue !== undefined) return p.defaultValue;\r\n return isRange() ? ([p.min!, p.max!] as [number, number]) : p.min!;\r\n };\r\n\r\n const [internalValue, setInternalValue] = createSignal<number | [number, number]>(\r\n getInitialValue(),\r\n );\r\n\r\n // Sync with controlled value\r\n createEffect(\r\n on(\r\n () => p.value,\r\n newValue => {\r\n if (newValue !== undefined) {\r\n setInternalValue(newValue);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n // Current value getter\r\n const currentValue = createMemo(() => {\r\n return p.value !== undefined ? p.value : internalValue();\r\n });\r\n\r\n // Get values as array for easy handling\r\n const valuesArray = createMemo<[number, number]>(() => {\r\n const val = currentValue();\r\n if (Array.isArray(val)) {\r\n return val as [number, number];\r\n }\r\n return [p.min!, val] as [number, number];\r\n });\r\n\r\n // Calculate percentage from value\r\n const valueToPercent = (value: number): number => {\r\n const { min, max } = p;\r\n const percent = ((value - min!) / (max! - min!)) * 100;\r\n return p.reverse ? 100 - percent : percent;\r\n };\r\n\r\n // Calculate value from percentage\r\n const percentToValue = (percent: number): number => {\r\n const { min, max, step } = p;\r\n const actualPercent = p.reverse ? 100 - percent : percent;\r\n let value = min! + (actualPercent / 100) * (max! - min!);\r\n\r\n // Snap to step if defined\r\n if (step !== null && step !== undefined) {\r\n value = Math.round(value / step) * step;\r\n }\r\n\r\n // Snap to marks if step is null\r\n if (step === null && p.marks) {\r\n const markValues = Object.keys(p.marks).map(Number);\r\n markValues.push(min!, max!);\r\n value = markValues.reduce((prev, curr) =>\r\n Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev,\r\n );\r\n }\r\n\r\n return Math.max(min!, Math.min(max!, value));\r\n };\r\n\r\n // Get position from mouse/touch event\r\n const getPositionFromEvent = (event: MouseEvent | TouchEvent): number => {\r\n if (!railRef) return 0;\r\n\r\n const rect = railRef.getBoundingClientRect();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n let clientPos: number;\r\n if ('touches' in event) {\r\n clientPos = isVertical ? event.touches[0].clientY : event.touches[0].clientX;\r\n } else {\r\n clientPos = isVertical ? event.clientY : event.clientX;\r\n }\r\n\r\n let percent: number;\r\n if (isVertical) {\r\n percent = ((rect.bottom - clientPos) / rect.height) * 100;\r\n } else {\r\n percent = ((clientPos - rect.left) / rect.width) * 100;\r\n }\r\n\r\n return Math.max(0, Math.min(100, percent));\r\n };\r\n\r\n // Update value\r\n const updateValue = (newValue: number, thumbIndex: 0 | 1) => {\r\n let finalValue: number | [number, number];\r\n\r\n if (isRange()) {\r\n const current = valuesArray();\r\n const newValues: [number, number] = [...current];\r\n newValues[thumbIndex] = newValue;\r\n\r\n // Ensure min <= max for range\r\n if (thumbIndex === 0 && newValue > newValues[1]) {\r\n newValues[0] = newValues[1];\r\n } else if (thumbIndex === 1 && newValue < newValues[0]) {\r\n newValues[1] = newValues[0];\r\n }\r\n\r\n finalValue = newValues;\r\n } else {\r\n finalValue = newValue;\r\n }\r\n\r\n // Update internal state (for uncontrolled mode)\r\n if (p.value === undefined) {\r\n setInternalValue(finalValue);\r\n }\r\n\r\n // Call onChange callback\r\n p.onChange?.(finalValue);\r\n };\r\n\r\n // Handle mouse/touch start on thumb\r\n const handleThumbMouseDown = (event: MouseEvent | TouchEvent, thumbIndex: 0 | 1) => {\r\n if (p.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n setActiveThumb(thumbIndex);\r\n\r\n const handleMove = (e: MouseEvent | TouchEvent) => {\r\n const percent = getPositionFromEvent(e);\r\n const value = percentToValue(percent);\r\n updateValue(value, thumbIndex);\r\n };\r\n\r\n const handleEnd = () => {\r\n setActiveThumb(null);\r\n document.removeEventListener('mousemove', handleMove);\r\n document.removeEventListener('mouseup', handleEnd);\r\n document.removeEventListener('touchmove', handleMove);\r\n document.removeEventListener('touchend', handleEnd);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMove);\r\n document.addEventListener('mouseup', handleEnd);\r\n document.addEventListener('touchmove', handleMove);\r\n document.addEventListener('touchend', handleEnd);\r\n };\r\n\r\n // Handle click on rail\r\n const handleRailClick = (event: MouseEvent) => {\r\n if (p.disabled) return;\r\n\r\n const percent = getPositionFromEvent(event);\r\n const clickedValue = percentToValue(percent);\r\n\r\n if (isRange()) {\r\n // Find closest thumb\r\n const [v0, v1] = valuesArray();\r\n const dist0 = Math.abs(clickedValue - v0);\r\n const dist1 = Math.abs(clickedValue - v1);\r\n const closestThumb: 0 | 1 = dist0 <= dist1 ? 0 : 1;\r\n updateValue(clickedValue, closestThumb);\r\n } else {\r\n updateValue(clickedValue, 1);\r\n }\r\n };\r\n\r\n // Calculate marks\r\n const marksList = createMemo(() => {\r\n if (!p.marks) return [];\r\n return Object.entries(p.marks).map(([key, value]) => {\r\n const numKey = Number(key);\r\n const percent = valueToPercent(numKey);\r\n const markData = typeof value === 'string' ? { label: value, style: undefined } : value;\r\n return {\r\n value: numKey,\r\n percent,\r\n ...markData,\r\n };\r\n });\r\n });\r\n\r\n // Calculate dots\r\n const dotsList = createMemo(() => {\r\n if (!p.dots) return [];\r\n const { min, max, step } = p;\r\n if (!step || step <= 0) return [];\r\n\r\n const dots: { value: number; percent: number }[] = [];\r\n for (let v = min!; v <= max!; v += step) {\r\n dots.push({\r\n value: v,\r\n percent: valueToPercent(v),\r\n });\r\n }\r\n return dots;\r\n });\r\n\r\n // Check if value is in range (for included styling)\r\n const isInRange = (value: number): boolean => {\r\n if (!p.included) return false;\r\n const [v0, v1] = valuesArray();\r\n if (isRange()) {\r\n return value >= v0 && value <= v1;\r\n }\r\n return value >= p.min! && value <= v1;\r\n };\r\n\r\n // Track styles\r\n const trackStyle = createMemo(() => {\r\n const [v0, v1] = valuesArray();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n let start: number, length: number;\r\n\r\n if (isRange()) {\r\n const p0 = valueToPercent(v0);\r\n const p1 = valueToPercent(v1);\r\n start = Math.min(p0, p1);\r\n length = Math.abs(p1 - p0);\r\n } else {\r\n if (p.reverse) {\r\n const p1 = valueToPercent(v1);\r\n start = p1;\r\n length = 100 - p1;\r\n } else {\r\n start = 0;\r\n length = valueToPercent(v1);\r\n }\r\n }\r\n\r\n if (isVertical) {\r\n return { bottom: `${start}%`, height: `${length}%` };\r\n }\r\n return { left: `${start}%`, width: `${length}%` };\r\n });\r\n\r\n // Thumb positions\r\n const thumbPositions = createMemo(() => {\r\n const [v0, v1] = valuesArray();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n const p0 = valueToPercent(v0);\r\n const p1 = valueToPercent(v1);\r\n\r\n if (isVertical) {\r\n return [{ bottom: `${p0}%` }, { bottom: `${p1}%` }];\r\n }\r\n return [{ left: `${p0}%` }, { left: `${p1}%` }];\r\n });\r\n\r\n // Tooltip formatter\r\n const formatTooltip = (value: number): string => {\r\n if (p.tooltip?.formatter === null) return '';\r\n if (typeof p.tooltip?.formatter === 'function') {\r\n return String(p.tooltip.formatter(value));\r\n }\r\n return String(value);\r\n };\r\n\r\n // Should show tooltip\r\n const shouldShowTooltip = (thumbIndex: 0 | 1): boolean => {\r\n if (p.tooltip?.forceOpen === false) return false;\r\n if (p.tooltip?.forceOpen === true) return true;\r\n return activeThumb() === thumbIndex || hoveredThumb() === thumbIndex;\r\n };\r\n\r\n // Get tooltip props excluding internal ones\r\n const getTooltipProps = () => {\r\n if (!p.tooltip) return {};\r\n const { forceOpen, formatter, hidden, ...rest } = p.tooltip;\r\n return rest;\r\n };\r\n\r\n const isVertical = () => p.orientation === 'vertical';\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'sli01',\r\n getColor(p.color!),\r\n isVertical() && 'sli02',\r\n p.disabled && 'sli03',\r\n p.class?.root,\r\n )}\r\n data-disabled={p.disabled || undefined}\r\n >\r\n {/* Rail */}\r\n <div ref={railRef} class={cn('sli04', p.class?.rail)} onClick={handleRailClick}>\r\n {/* Track */}\r\n <Show when={p.included !== false}>\r\n <div class={cn('sli05', p.class?.track)} style={trackStyle()} />\r\n </Show>\r\n\r\n {/* Dots */}\r\n <For each={dotsList()}>\r\n {dot => (\r\n <div\r\n class={cn('sli09', isInRange(dot.value) && 'sli10', p.class?.dot)}\r\n style={isVertical() ? { bottom: `${dot.percent}%` } : { left: `${dot.percent}%` }}\r\n />\r\n )}\r\n </For>\r\n\r\n {/* Marks */}\r\n <For each={marksList()}>\r\n {mark => (\r\n <>\r\n <div\r\n class={cn('sli11', isInRange(mark.value) && 'sli12', p.class?.mark)}\r\n style={isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }}\r\n />\r\n <span\r\n class={cn('sli13', isInRange(mark.value) && 'sli14', p.class?.markText)}\r\n style={{\r\n ...(isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }),\r\n ...mark.style,\r\n }}\r\n >\r\n {mark.label}\r\n </span>\r\n </>\r\n )}\r\n </For>\r\n\r\n {/* Thumbs */}\r\n <Show when={isRange()}>\r\n <div class=\"sli06\" style={thumbPositions()[0]}>\r\n <Show\r\n when={!p.tooltip?.hidden}\r\n fallback={\r\n <div\r\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[0]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 0)}\r\n onTouchStart={e => handleThumbMouseDown(e, 0)}\r\n onMouseEnter={() => setHoveredThumb(0)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(0)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n }\r\n >\r\n <SliderTooltip\r\n content={formatTooltip(valuesArray()[0])}\r\n open={shouldShowTooltip(0)}\r\n position={isVertical() ? 'right' : 'top'}\r\n {...getTooltipProps()}\r\n >\r\n <div\r\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[0]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 0)}\r\n onTouchStart={e => handleThumbMouseDown(e, 0)}\r\n onMouseEnter={() => setHoveredThumb(0)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(0)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n </SliderTooltip>\r\n </Show>\r\n </div>\r\n </Show>\r\n\r\n <div class=\"sli06\" style={thumbPositions()[1]}>\r\n <Show\r\n when={!p.tooltip?.hidden}\r\n fallback={\r\n <div\r\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[1]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 1)}\r\n onTouchStart={e => handleThumbMouseDown(e, 1)}\r\n onMouseEnter={() => setHoveredThumb(1)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(1)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n }\r\n >\r\n <SliderTooltip\r\n content={formatTooltip(valuesArray()[1])}\r\n open={shouldShowTooltip(1)}\r\n position={isVertical() ? 'right' : 'top'}\r\n {...getTooltipProps()}\r\n >\r\n <div\r\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[1]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 1)}\r\n onTouchStart={e => handleThumbMouseDown(e, 1)}\r\n onMouseEnter={() => setHoveredThumb(1)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(1)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n </SliderTooltip>\r\n </Show>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|