@solibo/solibo-ui 1.0.6 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/assets/index.css +1 -1
  2. package/dist/assets/index15.css +1 -1
  3. package/dist/assets/index19.css +1 -1
  4. package/dist/assets/index31.css +1 -1
  5. package/dist/assets/index32.css +1 -1
  6. package/dist/assets/index36.css +1 -1
  7. package/dist/assets/index38.css +1 -1
  8. package/dist/assets/index39.css +1 -1
  9. package/dist/assets/index46.css +1 -1
  10. package/dist/assets/index51.css +1 -1
  11. package/dist/assets/index8.css +1 -1
  12. package/dist/assets/index9.css +1 -1
  13. package/dist/components/button/index.cjs +1 -1
  14. package/dist/components/button/index.cjs.map +1 -1
  15. package/dist/components/button/index.js +25 -22
  16. package/dist/components/button/index.js.map +1 -1
  17. package/dist/components/card/index.cjs +1 -1
  18. package/dist/components/card/index.js +45 -45
  19. package/dist/components/checkbox/index.cjs +1 -1
  20. package/dist/components/checkbox/index.js +1 -1
  21. package/dist/components/controls/index.cjs +1 -1
  22. package/dist/components/controls/index.cjs.map +1 -1
  23. package/dist/components/controls/index.js +15 -14
  24. package/dist/components/controls/index.js.map +1 -1
  25. package/dist/components/dialog/index.cjs +1 -1
  26. package/dist/components/dialog/index.cjs.map +1 -1
  27. package/dist/components/dialog/index.js +58 -24
  28. package/dist/components/dialog/index.js.map +1 -1
  29. package/dist/components/dropdown/index.cjs +1 -1
  30. package/dist/components/dropdown/index.js +70 -70
  31. package/dist/components/editor/index.cjs +1 -1
  32. package/dist/components/editor/index.js +1 -1
  33. package/dist/components/icon/index.cjs +1 -1
  34. package/dist/components/icon/index.js +22 -22
  35. package/dist/components/iframe/index.cjs +1 -1
  36. package/dist/components/iframe/index.cjs.map +1 -1
  37. package/dist/components/iframe/index.js +62 -67
  38. package/dist/components/iframe/index.js.map +1 -1
  39. package/dist/components/input/index.cjs +1 -1
  40. package/dist/components/input/index.js +2 -2
  41. package/dist/components/message/index.cjs +1 -1
  42. package/dist/components/message/index.cjs.map +1 -1
  43. package/dist/components/message/index.js +34 -33
  44. package/dist/components/message/index.js.map +1 -1
  45. package/dist/components/nav/index.cjs +1 -1
  46. package/dist/components/nav/index.js +1 -1
  47. package/dist/components/popover/index.cjs +1 -1
  48. package/dist/components/popover/index.cjs.map +1 -1
  49. package/dist/components/popover/index.js +10 -10
  50. package/dist/components/popover/index.js.map +1 -1
  51. package/dist/components/search/index.cjs +1 -1
  52. package/dist/components/search/index.cjs.map +1 -1
  53. package/dist/components/search/index.js +41 -47
  54. package/dist/components/search/index.js.map +1 -1
  55. package/dist/components/select/index.cjs +1 -1
  56. package/dist/components/select/index.js +2 -2
  57. package/dist/components/sortable/index.cjs +1 -1
  58. package/dist/components/sortable/index.cjs.map +1 -1
  59. package/dist/components/sortable/index.js +141 -134
  60. package/dist/components/sortable/index.js.map +1 -1
  61. package/dist/{icons-Dhj9mAkR.js → icons-BFgf_lJN.js} +10 -1
  62. package/dist/icons-BFgf_lJN.js.map +1 -0
  63. package/dist/icons-Dx0NQYLH.cjs +2 -0
  64. package/dist/icons-Dx0NQYLH.cjs.map +1 -0
  65. package/dist/{index-D4LZQ-JF.js → index-BHgGZxsR.js} +2 -2
  66. package/dist/{index-D4LZQ-JF.js.map → index-BHgGZxsR.js.map} +1 -1
  67. package/dist/{index-Ct0mJ-KK.cjs → index-BPIK2dxs.cjs} +2 -2
  68. package/dist/{index-Ct0mJ-KK.cjs.map → index-BPIK2dxs.cjs.map} +1 -1
  69. package/dist/{index-D9Hq7ewF.cjs → index-CEzqxRIu.cjs} +2 -2
  70. package/dist/{index-D9Hq7ewF.cjs.map → index-CEzqxRIu.cjs.map} +1 -1
  71. package/dist/{index-uQRsVtP-.js → index-C_YiNpZP.js} +9 -9
  72. package/dist/{index-uQRsVtP-.js.map → index-C_YiNpZP.js.map} +1 -1
  73. package/dist/index.cjs +1 -1
  74. package/dist/index.d.ts +27 -3
  75. package/dist/index.js +38 -37
  76. package/dist/tokens.css +3 -1
  77. package/dist/tokens.json +46 -19
  78. package/package.json +1 -1
  79. package/dist/icons-BoBeAmLe.cjs +0 -2
  80. package/dist/icons-BoBeAmLe.cjs.map +0 -1
  81. package/dist/icons-Dhj9mAkR.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/sortable/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { List } from '@/components/list';\n\nimport styles from './styles.module.css';\n\ntype SortItem = { id: string; weight: number };\n\ntype SortableItemContextValue = {\n canMoveDown: boolean;\n canMoveUp: boolean;\n index: number;\n moveDown: () => void;\n moveUp: () => void;\n};\n\nconst SortableItemContext = createContext<SortableItemContextValue | null>(null);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useOptionalSortableItem() {\n return useContext(SortableItemContext);\n}\n\ntype SortableProps = React.ComponentPropsWithoutRef<'ol'> & {\n columns?: number;\n isRearranging?: boolean;\n onChangeOrder: (order: SortItem[]) => void;\n};\n\ntype withVars = React.CSSProperties & {\n '--height'?: string;\n '--width'?: string;\n '--icon-svg'?: string;\n};\n\n/**\n * Children must provide a stable `data-id` for emits `{ id, weight }` and `key` (reconciliation).\n */\n\nexport function Sortable({\n children,\n className,\n columns = 1,\n isRearranging = false,\n onChangeOrder,\n ...props\n}: SortableProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n const arr = useMemo(() => React.Children.toArray(children), [children]);\n const drag = useRef(-1);\n const usesTouchInput = useMemo(\n () =>\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 || window.matchMedia('(pointer: coarse)').matches),\n []\n );\n const touchDragActive = useRef(false);\n const touchDropIndex = useRef<number | null>(null);\n const touchHoldTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const touchStart = useRef<{ index: number; x: number; y: number } | null>(null);\n const suppressClick = useRef(false);\n const touchPosition = useRef<{ x: number; y: number } | null>(null);\n const autoScrollFrame = useRef<number | null>(null);\n const [zoneSize, setZoneSize] = useState({\n height: 0,\n width: 0,\n });\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n const [droppedAtIndex, setDroppedAtIndex] = useState<number | null>(null);\n const withVars: withVars = {\n ...props.style,\n '--height': `calc(${zoneSize.height}px - var(--scale-16))`,\n '--width': cols > 1 ? `calc(${zoneSize.width}px - var(--scale-16))` : `${zoneSize.width}px`,\n };\n\n const emitOrder = (items: React.ReactNode[]) => {\n onChangeOrder(\n items.map((item, index) => ({\n id: String(\n React.isValidElement(item)\n ? ((item.props as { 'data-id'?: string })['data-id'] ?? `idx-${index}`)\n : `idx-${index}`\n ),\n weight: items.length - 1 - index,\n }))\n );\n };\n\n const moveItem = (from: number, to: number) => {\n if (to < 0 || to >= arr.length || from === to) return;\n\n const next = arr.slice();\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n\n setDroppedAtIndex(to);\n emitOrder(next);\n };\n\n const clearTouchHoldTimer = () => {\n if (touchHoldTimer.current !== null) {\n clearTimeout(touchHoldTimer.current);\n touchHoldTimer.current = null;\n }\n };\n\n const clearAutoScrollFrame = () => {\n if (autoScrollFrame.current !== null) {\n cancelAnimationFrame(autoScrollFrame.current);\n autoScrollFrame.current = null;\n }\n };\n\n const getScrollableAncestor = (element: HTMLElement | null) => {\n let current = element?.parentElement ?? null;\n\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const canScroll =\n /(auto|scroll|overlay)/.test(overflowY) && current.scrollHeight > current.clientHeight;\n\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n };\n\n const resetTouchDragState = () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n touchPosition.current = null;\n touchDragActive.current = false;\n touchDropIndex.current = null;\n touchStart.current = null;\n suppressClick.current = false;\n drag.current = -1;\n setDropIndex(null);\n };\n\n const isInteractiveTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n Boolean(\n target.closest(\n 'button, a, input, textarea, select, option, [role=\"button\"], [contenteditable=\"true\"]'\n )\n );\n\n const updateTouchDropIndex = (clientX: number, clientY: number) => {\n const target = document\n .elementFromPoint(clientX, clientY)\n ?.closest<HTMLElement>('[data-sortable-index]');\n if (!target) return;\n\n const index = Number(target.dataset.sortableIndex);\n const from = drag.current;\n if (!Number.isInteger(index) || from < 0 || index === from) return;\n\n const rect = target.getBoundingClientRect();\n const itemHeight = index === from + 1 ? zoneSize.height : rect.height;\n const isBottomHalf = clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? index + 1 : index;\n const nextDropIndex = rawIndex > from ? rawIndex - 1 : rawIndex;\n\n touchDropIndex.current = nextDropIndex;\n setDropIndex(nextDropIndex);\n };\n\n const startTouchAutoScroll = (item: HTMLElement) => {\n const scrollContainer = getScrollableAncestor(item);\n if (!scrollContainer) return;\n\n const edgeSize = 72;\n const maxSpeed = 18;\n\n const step = () => {\n if (!touchDragActive.current) {\n autoScrollFrame.current = null;\n return;\n }\n\n const position = touchPosition.current;\n if (!position) {\n autoScrollFrame.current = requestAnimationFrame(step);\n return;\n }\n\n const rect =\n scrollContainer === document.scrollingElement\n ? { top: 0, bottom: window.innerHeight }\n : scrollContainer.getBoundingClientRect();\n\n let speed = 0;\n\n if (position.y < rect.top + edgeSize) {\n const distance = Math.max(0, position.y - rect.top);\n speed = -maxSpeed * (1 - distance / edgeSize);\n } else if (position.y > rect.bottom - edgeSize) {\n const distance = Math.max(0, rect.bottom - position.y);\n speed = maxSpeed * (1 - distance / edgeSize);\n }\n\n if (speed !== 0) {\n scrollContainer.scrollBy({ top: speed, behavior: 'auto' });\n updateTouchDropIndex(position.x, position.y);\n }\n\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n clearAutoScrollFrame();\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n const resetDragState = () => {\n drag.current = -1;\n setDropIndex(null);\n };\n\n useEffect(() => {\n if (!isRearranging) {\n setDroppedAtIndex(null);\n }\n }, [isRearranging]);\n\n useEffect(\n () => () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n },\n []\n );\n\n useEffect(() => {\n const preventScrollWhileDragging = (event: TouchEvent) => {\n if (touchDragActive.current) {\n event.preventDefault();\n }\n };\n\n window.addEventListener('touchmove', preventScrollWhileDragging, {\n passive: false,\n });\n\n return () => {\n clearTouchHoldTimer();\n window.removeEventListener('touchmove', preventScrollWhileDragging);\n };\n }, []);\n\n return (\n <List\n className={cx(className, styles.sortable, cols > 1 && styles.columns)}\n columns={columns}\n ordered\n style={withVars}\n {...props}\n >\n {arr.map((child, i) => {\n const key = React.isValidElement(child) ? child.key : null;\n\n return (\n <li\n key={key ?? i}\n data-sortable-index={i}\n onClickCapture={(e) => {\n if (!suppressClick.current) return;\n e.preventDefault();\n e.stopPropagation();\n suppressClick.current = false;\n }}\n className={cx(\n dropIndex !== null && dropIndex > i - 10 && dropIndex < i + 10 && styles.pseudo,\n dropIndex === i && drag.current < i && styles['target-below'],\n dropIndex === i && drag.current > i && styles['target-above'],\n drag.current === i && styles.dragging,\n droppedAtIndex === i && isRearranging && styles.dropping\n )}\n onContextMenu={(e) => {\n if (touchDragActive.current || touchHoldTimer.current !== null) {\n e.preventDefault();\n }\n }}\n onTouchStart={(e) => {\n if (isRearranging || isInteractiveTarget(e.target)) return;\n\n const touch = e.touches[0];\n if (!touch) return;\n\n const item = e.currentTarget;\n touchStart.current = {\n index: i,\n x: touch.clientX,\n y: touch.clientY,\n };\n\n clearTouchHoldTimer();\n touchHoldTimer.current = setTimeout(() => {\n drag.current = i;\n touchDragActive.current = true;\n touchDropIndex.current = i;\n suppressClick.current = true;\n setZoneSize({\n height: item.offsetHeight,\n width: item.offsetWidth,\n });\n setDropIndex(i);\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n startTouchAutoScroll(item);\n }, 350);\n }}\n onTouchMove={(e) => {\n const touch = e.touches[0];\n if (!touch) return;\n\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n if (!touchDragActive.current) {\n const start = touchStart.current;\n if (!start) return;\n\n const distance = Math.hypot(touch.clientX - start.x, touch.clientY - start.y);\n if (distance > 8) {\n clearTouchHoldTimer();\n touchStart.current = null;\n }\n return;\n }\n updateTouchDropIndex(touch.clientX, touch.clientY);\n }}\n onTouchEnd={(e) => {\n clearTouchHoldTimer();\n\n if (!touchDragActive.current) {\n touchStart.current = null;\n return;\n }\n\n e.preventDefault();\n const from = drag.current;\n const to = touchDropIndex.current;\n\n if (from >= 0 && to !== null && from !== to) {\n moveItem(from, to);\n }\n\n resetTouchDragState();\n }}\n onTouchCancel={() => resetTouchDragState()}\n draggable={!isRearranging && !usesTouchInput}\n onDragEnd={() => resetDragState()}\n onDragOver={(e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const from = drag.current;\n if (from < 0 || from === i) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const itemHeight = i === from + 1 ? zoneSize.height : rect.height;\n const isBottomHalf = e.clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? i + 1 : i;\n const nextDropIndex = rawIndex > from ? rawIndex - 1 : rawIndex;\n\n setDropIndex(nextDropIndex);\n }}\n onDragStart={(e) => {\n if (usesTouchInput) {\n e.preventDefault();\n return;\n }\n drag.current = i;\n setZoneSize({\n height: e.currentTarget.offsetHeight,\n width: e.currentTarget.offsetWidth,\n });\n e.dataTransfer.setData('text/plain', '');\n e.dataTransfer.effectAllowed = 'move';\n setDropIndex(i);\n }}\n onDrop={(e) => {\n e.preventDefault();\n const from = drag.current;\n const to = dropIndex;\n if (from < 0 || to === null || from === to) return;\n moveItem(from, to);\n resetDragState();\n }}\n >\n <SortableItemContext.Provider\n value={{\n canMoveDown: i < arr.length - 1,\n canMoveUp: i > 0,\n index: i,\n moveDown: () => moveItem(i, i + 1),\n moveUp: () => moveItem(i, i - 1),\n }}\n >\n {child}\n </SortableItemContext.Provider>\n </li>\n );\n })}\n </List>\n );\n}\n"],"names":["SortableItemContext","createContext","useOptionalSortableItem","useContext","Sortable","children","className","columns","isRearranging","onChangeOrder","props","cols","Number","isFinite","Math","max","floor","arr","useMemo","React","Children","toArray","drag","useRef","usesTouchInput","window","navigator","maxTouchPoints","matchMedia","matches","touchDragActive","touchDropIndex","touchHoldTimer","touchStart","suppressClick","touchPosition","autoScrollFrame","zoneSize","setZoneSize","useState","height","width","dropIndex","setDropIndex","droppedAtIndex","setDroppedAtIndex","withVars","style","emitOrder","items","map","item","index","id","String","isValidElement","weight","length","moveItem","from","to","next","slice","moved","splice","clearTouchHoldTimer","current","clearTimeout","clearAutoScrollFrame","cancelAnimationFrame","getScrollableAncestor","element","parentElement","overflowY","getComputedStyle","test","scrollHeight","clientHeight","document","scrollingElement","HTMLElement","resetTouchDragState","isInteractiveTarget","target","Element","Boolean","closest","updateTouchDropIndex","clientX","clientY","elementFromPoint","dataset","sortableIndex","isInteger","rect","getBoundingClientRect","itemHeight","rawIndex","top","nextDropIndex","startTouchAutoScroll","scrollContainer","edgeSize","maxSpeed","step","position","requestAnimationFrame","bottom","innerHeight","speed","y","distance","scrollBy","behavior","x","resetDragState","useEffect","preventScrollWhileDragging","event","preventDefault","addEventListener","passive","removeEventListener","jsx","List","cx","styles","sortable","child","i","key","e","stopPropagation","pseudo","dragging","dropping","touch","touches","currentTarget","setTimeout","offsetHeight","offsetWidth","start","hypot","dataTransfer","dropEffect","setData","effectAllowed","canMoveDown","canMoveUp","moveDown","moveUp"],"mappings":"0cAiBMA,EAAsBC,EAAAA,cAA+C,IAAI,EAGxE,SAASC,IAA0B,CACxC,OAAOC,EAAAA,WAAWH,CAAmB,CACvC,CAkBO,SAASI,GAAS,CACvBC,SAAAA,EACAC,UAAAA,EACAC,QAAAA,EAAU,EACVC,cAAAA,EAAgB,GAChBC,cAAAA,EACA,GAAGC,CACU,EAAG,CAChB,MAAMC,EAAOC,OAAOC,SAASN,CAAO,EAAIO,KAAKC,IAAI,EAAGD,KAAKE,MAAMT,CAAO,CAAC,EAAI,EACrEU,EAAMC,UAAQ,IAAMC,EAAMC,SAASC,QAAQhB,CAAQ,EAAG,CAACA,CAAQ,CAAC,EAChEiB,EAAOC,EAAAA,OAAO,EAAE,EAChBC,EAAiBN,EAAAA,QACrB,IACE,OAAOO,OAAW,MACjBC,UAAUC,eAAiB,GAAKF,OAAOG,WAAW,mBAAmB,EAAEC,SAC1E,CAAA,CACF,EACMC,EAAkBP,EAAAA,OAAO,EAAK,EAC9BQ,EAAiBR,EAAAA,OAAsB,IAAI,EAC3CS,EAAiBT,EAAAA,OAA6C,IAAI,EAClEU,EAAaV,EAAAA,OAAuD,IAAI,EACxEW,EAAgBX,EAAAA,OAAO,EAAK,EAC5BY,EAAgBZ,EAAAA,OAAwC,IAAI,EAC5Da,EAAkBb,EAAAA,OAAsB,IAAI,EAC5C,CAACc,EAAUC,CAAW,EAAIC,WAAS,CACvCC,OAAQ,EACRC,MAAO,CAAA,CACR,EACK,CAACC,EAAWC,CAAY,EAAIJ,EAAAA,SAAwB,IAAI,EACxD,CAACK,EAAgBC,CAAiB,EAAIN,EAAAA,SAAwB,IAAI,EAClEO,EAAqB,CACzB,GAAGpC,EAAMqC,MACT,WAAY,QAAQV,EAASG,MAAM,wBACnC,UAAW7B,EAAO,EAAI,QAAQ0B,EAASI,KAAK,wBAA0B,GAAGJ,EAASI,KAAK,IAAA,EAGnFO,EAAaC,GAA6B,CAC9CxC,EACEwC,EAAMC,IAAI,CAACC,EAAMC,KAAW,CAC1BC,GAAIC,OACFnC,EAAMoC,eAAeJ,CAAI,EACnBA,EAAKzC,MAAiC,SAAS,GAAK,OAAO0C,CAAK,GAClE,OAAOA,CAAK,EAClB,EACAI,OAAQP,EAAMQ,OAAS,EAAIL,CAAAA,EAC3B,CACJ,CACF,EAEMM,EAAWA,CAACC,EAAcC,IAAe,CAC7C,GAAIA,EAAK,GAAKA,GAAM3C,EAAIwC,QAAUE,IAASC,EAAI,OAE/C,MAAMC,EAAO5C,EAAI6C,MAAAA,EACX,CAACC,CAAK,EAAIF,EAAKG,OAAOL,EAAM,CAAC,EACnCE,EAAKG,OAAOJ,EAAI,EAAGG,CAAK,EAExBlB,EAAkBe,CAAE,EACpBZ,EAAUa,CAAI,CAChB,EAEMI,EAAsBA,IAAM,CAC5BjC,EAAekC,UAAY,OAC7BC,aAAanC,EAAekC,OAAO,EACnClC,EAAekC,QAAU,KAE7B,EAEME,EAAuBA,IAAM,CAC7BhC,EAAgB8B,UAAY,OAC9BG,qBAAqBjC,EAAgB8B,OAAO,EAC5C9B,EAAgB8B,QAAU,KAE9B,EAEMI,EAAyBC,GAAgC,CAC7D,IAAIL,GAAUK,GAAAA,YAAAA,EAASC,gBAAiB,KAExC,KAAON,GAAS,CACd,KAAM,CAAEO,UAAAA,CAAAA,EAAchD,OAAOiD,iBAAiBR,CAAO,EAIrD,GAFE,wBAAwBS,KAAKF,CAAS,GAAKP,EAAQU,aAAeV,EAAQW,aAE7D,OAAOX,EACtBA,EAAUA,EAAQM,aACpB,CAEA,OAAOM,SAASC,4BAA4BC,YAAcF,SAASC,iBAAmB,IACxF,EAEME,EAAsBA,IAAM,CAChChB,EAAAA,EACAG,EAAAA,EACAjC,EAAc+B,QAAU,KACxBpC,EAAgBoC,QAAU,GAC1BnC,EAAemC,QAAU,KACzBjC,EAAWiC,QAAU,KACrBhC,EAAcgC,QAAU,GACxB5C,EAAK4C,QAAU,GACfvB,EAAa,IAAI,CACnB,EAEMuC,EAAuBC,GAC3BA,aAAkBC,SAClBC,EACEF,EAAOG,QACL,uFACF,EAGEC,EAAuBA,CAACC,EAAiBC,IAAoB,OACjE,MAAMN,GAASL,EAAAA,SACZY,iBAAiBF,EAASC,CAAO,IADrBX,YAAAA,EAEXQ,QAAqB,yBACzB,GAAI,CAACH,EAAQ,OAEb,MAAM/B,EAAQxC,OAAOuE,EAAOQ,QAAQC,aAAa,EAC3CjC,EAAOrC,EAAK4C,QAClB,GAAI,CAACtD,OAAOiF,UAAUzC,CAAK,GAAKO,EAAO,GAAKP,IAAUO,EAAM,OAE5D,MAAMmC,EAAOX,EAAOY,sBAAAA,EACdC,EAAa5C,IAAUO,EAAO,EAAItB,EAASG,OAASsD,EAAKtD,OAEzDyD,EADeR,EAAUK,EAAKI,IAAMF,EAAa,EACvB5C,EAAQ,EAAIA,EACtC+C,EAAgBF,EAAWtC,EAAOsC,EAAW,EAAIA,EAEvDlE,EAAemC,QAAUiC,EACzBxD,EAAawD,CAAa,CAC5B,EAEMC,EAAwBjD,GAAsB,CAClD,MAAMkD,EAAkB/B,EAAsBnB,CAAI,EAClD,GAAI,CAACkD,EAAiB,OAEtB,MAAMC,EAAW,GACXC,EAAW,GAEXC,EAAOA,IAAM,CACjB,GAAI,CAAC1E,EAAgBoC,QAAS,CAC5B9B,EAAgB8B,QAAU,KAC1B,MACF,CAEA,MAAMuC,EAAWtE,EAAc+B,QAC/B,GAAI,CAACuC,EAAU,CACbrE,EAAgB8B,QAAUwC,sBAAsBF,CAAI,EACpD,MACF,CAEA,MAAMV,EACJO,IAAoBvB,SAASC,iBACzB,CAAEmB,IAAK,EAAGS,OAAQlF,OAAOmF,WAAAA,EACzBP,EAAgBN,sBAAAA,EAEtB,IAAIc,EAAQ,EAEZ,GAAIJ,EAASK,EAAIhB,EAAKI,IAAMI,EAAU,CACpC,MAAMS,EAAWjG,KAAKC,IAAI,EAAG0F,EAASK,EAAIhB,EAAKI,GAAG,EAClDW,EAAQ,CAACN,GAAY,EAAIQ,EAAWT,EACtC,SAAWG,EAASK,EAAIhB,EAAKa,OAASL,EAAU,CAC9C,MAAMS,EAAWjG,KAAKC,IAAI,EAAG+E,EAAKa,OAASF,EAASK,CAAC,EACrDD,EAAQN,GAAY,EAAIQ,EAAWT,EACrC,CAEIO,IAAU,IACZR,EAAgBW,SAAS,CAAEd,IAAKW,EAAOI,SAAU,MAAA,CAAQ,EACzD1B,EAAqBkB,EAASS,EAAGT,EAASK,CAAC,GAG7C1E,EAAgB8B,QAAUwC,sBAAsBF,CAAI,CACtD,EAEApC,EAAAA,EACAhC,EAAgB8B,QAAUwC,sBAAsBF,CAAI,CACtD,EAEMW,EAAiBA,IAAM,CAC3B7F,EAAK4C,QAAU,GACfvB,EAAa,IAAI,CACnB,EAEAyE,OAAAA,EAAAA,UAAU,IAAM,CACT5G,GACHqC,EAAkB,IAAI,CAE1B,EAAG,CAACrC,CAAa,CAAC,EAElB4G,EAAAA,UACE,IAAM,IAAM,CACVnD,EAAAA,EACAG,EAAAA,CACF,EACA,CAAA,CACF,EAEAgD,EAAAA,UAAU,IAAM,CACd,MAAMC,EAA8BC,GAAsB,CACpDxF,EAAgBoC,SAClBoD,EAAMC,eAAAA,CAEV,EAEA9F,cAAO+F,iBAAiB,YAAaH,EAA4B,CAC/DI,QAAS,EAAA,CACV,EAEM,IAAM,CACXxD,EAAAA,EACAxC,OAAOiG,oBAAoB,YAAaL,CAA0B,CACpE,CACF,EAAG,CAAA,CAAE,EAGHM,EAAAA,IAACC,EAAAA,KAAA,CACC,UAAWC,EAAAA,EAAGvH,EAAWwH,EAAOC,SAAUpH,EAAO,GAAKmH,EAAOvH,OAAO,EACpE,QAAAA,EACA,QAAO,GACP,MAAOuC,EACP,GAAIpC,EAAM,iBAAA,WAETO,SAAAA,EAAIiC,IAAI,CAAC8E,EAAOC,IAAM,CACrB,MAAMC,EAAM/G,EAAMoC,eAAeyE,CAAK,EAAIA,EAAME,IAAM,KAEtD,OACEP,EAAAA,IAAC,KAAA,CAEC,sBAAqBM,EACrB,eAAiBE,GAAM,CAChBjG,EAAcgC,UACnBiE,EAAEZ,eAAAA,EACFY,EAAEC,gBAAAA,EACFlG,EAAcgC,QAAU,GAC1B,EACA,UAAW2D,EAAAA,EACTnF,IAAc,MAAQA,EAAYuF,EAAI,IAAMvF,EAAYuF,EAAI,IAAMH,EAAOO,OACzE3F,IAAcuF,GAAK3G,EAAK4C,QAAU+D,GAAKH,EAAO,cAAc,EAC5DpF,IAAcuF,GAAK3G,EAAK4C,QAAU+D,GAAKH,EAAO,cAAc,EAC5DxG,EAAK4C,UAAY+D,GAAKH,EAAOQ,SAC7B1F,IAAmBqF,GAAKzH,GAAiBsH,EAAOS,QAClD,EACA,cAAgBJ,GAAM,EAChBrG,EAAgBoC,SAAWlC,EAAekC,UAAY,OACxDiE,EAAEZ,eAAAA,CAEN,EACA,aAAeY,GAAM,CACnB,GAAI3H,GAAiB0E,EAAoBiD,EAAEhD,MAAM,EAAG,OAEpD,MAAMqD,EAAQL,EAAEM,QAAQ,CAAC,EACzB,GAAI,CAACD,EAAO,OAEZ,MAAMrF,EAAOgF,EAAEO,cACfzG,EAAWiC,QAAU,CACnBd,MAAO6E,EACPf,EAAGsB,EAAMhD,QACTsB,EAAG0B,EAAM/C,OAAAA,EAGXxB,EAAAA,EACAjC,EAAekC,QAAUyE,WAAW,IAAM,CACxCrH,EAAK4C,QAAU+D,EACfnG,EAAgBoC,QAAU,GAC1BnC,EAAemC,QAAU+D,EACzB/F,EAAcgC,QAAU,GACxB5B,EAAY,CACVE,OAAQW,EAAKyF,aACbnG,MAAOU,EAAK0F,WAAAA,CACb,EACDlG,EAAasF,CAAC,EACd9F,EAAc+B,QAAU,CACtBgD,EAAGsB,EAAMhD,QACTsB,EAAG0B,EAAM/C,OAAAA,EAEXW,EAAqBjD,CAAI,CAC3B,EAAG,GAAG,CACR,EACA,YAAcgF,GAAM,CAClB,MAAMK,EAAQL,EAAEM,QAAQ,CAAC,EACzB,GAAKD,EAOL,IALArG,EAAc+B,QAAU,CACtBgD,EAAGsB,EAAMhD,QACTsB,EAAG0B,EAAM/C,OAAAA,EAGP,CAAC3D,EAAgBoC,QAAS,CAC5B,MAAM4E,EAAQ7G,EAAWiC,QACzB,GAAI,CAAC4E,EAAO,OAEKhI,KAAKiI,MAAMP,EAAMhD,QAAUsD,EAAM5B,EAAGsB,EAAM/C,QAAUqD,EAAMhC,CAAC,EAC7D,IACb7C,EAAAA,EACAhC,EAAWiC,QAAU,MAEvB,MACF,CACAqB,EAAqBiD,EAAMhD,QAASgD,EAAM/C,OAAO,EACnD,EACA,WAAa0C,GAAM,CAGjB,GAFAlE,EAAAA,EAEI,CAACnC,EAAgBoC,QAAS,CAC5BjC,EAAWiC,QAAU,KACrB,MACF,CAEAiE,EAAEZ,eAAAA,EACF,MAAM5D,EAAOrC,EAAK4C,QACZN,EAAK7B,EAAemC,QAEtBP,GAAQ,GAAKC,IAAO,MAAQD,IAASC,GACvCF,EAASC,EAAMC,CAAE,EAGnBqB,EAAAA,CACF,EACA,cAAe,IAAMA,EAAAA,EACrB,UAAW,CAACzE,GAAiB,CAACgB,EAC9B,UAAW,IAAM2F,EAAAA,EACjB,WAAagB,GAAM,CACjBA,EAAEZ,eAAAA,EACFY,EAAEa,aAAaC,WAAa,OAC5B,MAAMtF,EAAOrC,EAAK4C,QAClB,GAAIP,EAAO,GAAKA,IAASsE,EAAG,OAE5B,MAAMnC,EAAOqC,EAAEO,cAAc3C,sBAAAA,EACvBC,EAAaiC,IAAMtE,EAAO,EAAItB,EAASG,OAASsD,EAAKtD,OAErDyD,EADekC,EAAE1C,QAAUK,EAAKI,IAAMF,EAAa,EACzBiC,EAAI,EAAIA,EAClC9B,EAAgBF,EAAWtC,EAAOsC,EAAW,EAAIA,EAEvDtD,EAAawD,CAAa,CAC5B,EACA,YAAcgC,GAAM,CAClB,GAAI3G,EAAgB,CAClB2G,EAAEZ,eAAAA,EACF,MACF,CACAjG,EAAK4C,QAAU+D,EACf3F,EAAY,CACVE,OAAQ2F,EAAEO,cAAcE,aACxBnG,MAAO0F,EAAEO,cAAcG,WAAAA,CACxB,EACDV,EAAEa,aAAaE,QAAQ,aAAc,EAAE,EACvCf,EAAEa,aAAaG,cAAgB,OAC/BxG,EAAasF,CAAC,CAChB,EACA,OAASE,GAAM,CACbA,EAAEZ,eAAAA,EACF,MAAM5D,EAAOrC,EAAK4C,QACZN,EAAKlB,EACPiB,EAAO,GAAKC,IAAO,MAAQD,IAASC,IACxCF,EAASC,EAAMC,CAAE,EACjBuD,EAAAA,EACF,EAAE,iBAAA,WAEF,eAACnH,EAAoB,SAApB,CACC,MAAO,CACLoJ,YAAanB,EAAIhH,EAAIwC,OAAS,EAC9B4F,UAAWpB,EAAI,EACf7E,MAAO6E,EACPqB,SAAUA,IAAM5F,EAASuE,EAAGA,EAAI,CAAC,EACjCsB,OAAQA,IAAM7F,EAASuE,EAAGA,EAAI,CAAC,CAAA,EAGhCD,SAAAA,CAAAA,CACH,CAAA,EA7IKE,GAAOD,CA8Id,CAEJ,CAAC,CAAA,CACH,CAEJ"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/sortable/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { List } from '@/components/list';\n\nimport styles from './styles.module.css';\n\ntype SortItem = { id: string; weight: number };\n\ntype SortableItemContextValue = {\n canMoveDown: boolean;\n canMoveUp: boolean;\n index: number;\n moveDown: () => void;\n moveUp: () => void;\n};\n\nconst SortableItemContext = createContext<SortableItemContextValue | null>(null);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useOptionalSortableItem() {\n return useContext(SortableItemContext);\n}\n\ntype SortableProps = React.ComponentPropsWithoutRef<'ol'> & {\n columns?: number;\n isRearranging?: boolean;\n onChangeOrder: (order: SortItem[]) => void;\n};\n\ntype SortableStyle = React.CSSProperties & {\n '--sortable-placeholder-height'?: string;\n '--sortable-placeholder-radius'?: string;\n '--sortable-placeholder-width'?: string;\n};\n\ntype ZoneSize = {\n borderRadius: string;\n height: number;\n width: number;\n wrapperHeight: number;\n};\n\nconst toPixels = (value: string) => Number.parseFloat(value) || 0;\n\nconst measureDraggedItem = (item: HTMLLIElement): ZoneSize => {\n const content = item.firstElementChild;\n const itemRect = item.getBoundingClientRect();\n\n if (content) {\n const rect = content.getBoundingClientRect();\n\n return {\n borderRadius: window.getComputedStyle(content).borderRadius,\n height: rect.height,\n width: rect.width,\n wrapperHeight: itemRect.height,\n };\n }\n\n const style = window.getComputedStyle(item);\n const horizontalInsets =\n toPixels(style.borderLeftWidth) +\n toPixels(style.borderRightWidth) +\n toPixels(style.paddingLeft) +\n toPixels(style.paddingRight);\n const verticalInsets =\n toPixels(style.borderBottomWidth) +\n toPixels(style.borderTopWidth) +\n toPixels(style.paddingBottom) +\n toPixels(style.paddingTop);\n\n return {\n borderRadius: style.borderRadius,\n height: Math.max(0, itemRect.height - verticalInsets),\n width: Math.max(0, itemRect.width - horizontalInsets),\n wrapperHeight: itemRect.height,\n };\n};\n\n/**\n * Children must provide a stable `data-id` for emits `{ id, weight }` and `key` (reconciliation).\n */\n\nexport function Sortable({\n children,\n className,\n columns = 1,\n isRearranging = false,\n onChangeOrder,\n ...props\n}: SortableProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n const arr = useMemo(() => React.Children.toArray(children), [children]);\n const drag = useRef(-1);\n const usesTouchInput = useMemo(\n () =>\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 || window.matchMedia('(pointer: coarse)').matches),\n []\n );\n const touchDragActive = useRef(false);\n const touchDropIndex = useRef<number | null>(null);\n const touchHoldTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const touchStart = useRef<{ x: number; y: number } | null>(null);\n const suppressClickUntil = useRef(0);\n const touchPosition = useRef<{ x: number; y: number } | null>(null);\n const autoScrollFrame = useRef<number | null>(null);\n const preventTouchScroll = useRef((event: TouchEvent) => event.preventDefault()).current;\n const [zoneSize, setZoneSize] = useState({\n borderRadius: '0px',\n height: 0,\n width: 0,\n wrapperHeight: 0,\n });\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n const withVars: SortableStyle = {\n ...props.style,\n '--sortable-placeholder-height': `${zoneSize.height}px`,\n '--sortable-placeholder-radius': zoneSize.borderRadius,\n '--sortable-placeholder-width': `${zoneSize.width}px`,\n };\n\n const moveItem = (from: number, to: number) => {\n if (to < 0 || to >= arr.length || from === to) return;\n\n const next = arr.slice();\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n\n onChangeOrder(\n next.map((item, index) => ({\n id: String(\n React.isValidElement(item)\n ? ((item.props as { 'data-id'?: string })['data-id'] ?? `idx-${index}`)\n : `idx-${index}`\n ),\n weight: next.length - 1 - index,\n }))\n );\n };\n\n const clearTouchHoldTimer = () => {\n if (touchHoldTimer.current !== null) {\n clearTimeout(touchHoldTimer.current);\n touchHoldTimer.current = null;\n }\n };\n\n const clearAutoScrollFrame = () => {\n if (autoScrollFrame.current !== null) {\n cancelAnimationFrame(autoScrollFrame.current);\n autoScrollFrame.current = null;\n }\n };\n\n const getScrollableAncestor = (element: HTMLElement | null) => {\n let current = element?.parentElement ?? null;\n\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const canScroll =\n /(auto|scroll|overlay)/.test(overflowY) && current.scrollHeight > current.clientHeight;\n\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n };\n\n const resetTouchDragState = (suppressNextClick = false) => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n window.removeEventListener('touchmove', preventTouchScroll);\n touchPosition.current = null;\n touchDragActive.current = false;\n touchDropIndex.current = null;\n touchStart.current = null;\n suppressClickUntil.current = suppressNextClick ? Date.now() + 500 : 0;\n drag.current = -1;\n setDropIndex(null);\n };\n\n const startDrag = (index: number, item: HTMLLIElement) => {\n drag.current = index;\n setZoneSize(measureDraggedItem(item));\n setDropIndex(index);\n };\n\n const isInteractiveTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n Boolean(\n target.closest(\n 'button, a, input, textarea, select, option, [role=\"button\"], [contenteditable=\"true\"]'\n )\n );\n\n const getDropIndex = (target: HTMLElement, index: number, clientY: number) => {\n const from = drag.current;\n if (!Number.isInteger(index) || from < 0 || index === from) return null;\n\n const rect = target.getBoundingClientRect();\n const itemHeight = index === from + 1 ? zoneSize.wrapperHeight : rect.height;\n const isBottomHalf = clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? index + 1 : index;\n return rawIndex > from ? rawIndex - 1 : rawIndex;\n };\n\n const updateTouchDropIndex = (clientX: number, clientY: number) => {\n const target = document\n .elementFromPoint(clientX, clientY)\n ?.closest<HTMLElement>('[data-sortable-index]');\n if (!target) return;\n\n const nextDropIndex = getDropIndex(target, Number(target.dataset.sortableIndex), clientY);\n if (nextDropIndex === null) return;\n\n touchDropIndex.current = nextDropIndex;\n setDropIndex(nextDropIndex);\n };\n\n const startTouchAutoScroll = (item: HTMLElement) => {\n const scrollContainer = getScrollableAncestor(item);\n if (!scrollContainer) return;\n\n const edgeSize = 72;\n const maxSpeed = 18;\n\n const step = () => {\n if (!touchDragActive.current) {\n autoScrollFrame.current = null;\n return;\n }\n\n const position = touchPosition.current;\n if (!position) {\n autoScrollFrame.current = requestAnimationFrame(step);\n return;\n }\n\n const rect =\n scrollContainer === document.scrollingElement\n ? { top: 0, bottom: window.innerHeight }\n : scrollContainer.getBoundingClientRect();\n\n let speed = 0;\n\n if (position.y < rect.top + edgeSize) {\n const distance = Math.max(0, position.y - rect.top);\n speed = -maxSpeed * (1 - distance / edgeSize);\n } else if (position.y > rect.bottom - edgeSize) {\n const distance = Math.max(0, rect.bottom - position.y);\n speed = maxSpeed * (1 - distance / edgeSize);\n }\n\n if (speed !== 0) {\n scrollContainer.scrollBy({ top: speed, behavior: 'auto' });\n updateTouchDropIndex(position.x, position.y);\n }\n\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n clearAutoScrollFrame();\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n const resetDragState = () => {\n drag.current = -1;\n setDropIndex(null);\n };\n\n useEffect(\n () => () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n window.removeEventListener('touchmove', preventTouchScroll);\n },\n [preventTouchScroll]\n );\n\n return (\n <List\n className={cx(className, styles.sortable, cols > 1 && styles.columns)}\n columns={columns}\n ordered\n style={withVars}\n {...props}\n >\n {arr.map((child, i) => {\n const key = React.isValidElement(child) ? child.key : null;\n\n return (\n <li\n key={key ?? i}\n data-sortable-index={i}\n onClickCapture={(e) => {\n if (suppressClickUntil.current <= Date.now()) return;\n e.preventDefault();\n e.stopPropagation();\n suppressClickUntil.current = 0;\n }}\n className={cx(\n dropIndex !== null && dropIndex > i - 10 && dropIndex < i + 10 && styles.pseudo,\n dropIndex === i && drag.current < i && styles['target-below'],\n dropIndex === i && drag.current > i && styles['target-above'],\n drag.current === i && styles.dragging\n )}\n onContextMenu={(e) => {\n if (touchDragActive.current || touchHoldTimer.current !== null) {\n e.preventDefault();\n }\n }}\n onTouchStart={(e) => {\n if (isRearranging || isInteractiveTarget(e.target)) return;\n suppressClickUntil.current = 0;\n\n const touch = e.touches[0];\n if (!touch) return;\n\n const item = e.currentTarget;\n touchStart.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n clearTouchHoldTimer();\n touchHoldTimer.current = setTimeout(() => {\n startDrag(i, item);\n touchDragActive.current = true;\n touchDropIndex.current = i;\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n window.addEventListener('touchmove', preventTouchScroll, { passive: false });\n startTouchAutoScroll(item);\n }, 350);\n }}\n onTouchMove={(e) => {\n const touch = e.touches[0];\n if (!touch) return;\n\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n if (!touchDragActive.current) {\n const start = touchStart.current;\n if (!start) return;\n\n const distance = Math.hypot(touch.clientX - start.x, touch.clientY - start.y);\n if (distance > 8) {\n clearTouchHoldTimer();\n touchStart.current = null;\n }\n return;\n }\n updateTouchDropIndex(touch.clientX, touch.clientY);\n }}\n onTouchEnd={(e) => {\n clearTouchHoldTimer();\n\n if (!touchDragActive.current) {\n touchStart.current = null;\n return;\n }\n\n e.preventDefault();\n const from = drag.current;\n const to = touchDropIndex.current;\n\n if (from >= 0 && to !== null && from !== to) {\n moveItem(from, to);\n }\n\n resetTouchDragState(true);\n }}\n onTouchCancel={() => resetTouchDragState()}\n draggable={!isRearranging && !usesTouchInput}\n onDragEnd={() => resetDragState()}\n onDragOver={(e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const nextDropIndex = getDropIndex(e.currentTarget, i, e.clientY);\n if (nextDropIndex === null) return;\n setDropIndex(nextDropIndex);\n }}\n onDragStart={(e) => {\n if (usesTouchInput) {\n e.preventDefault();\n return;\n }\n startDrag(i, e.currentTarget);\n e.dataTransfer.setData('text/plain', '');\n e.dataTransfer.effectAllowed = 'move';\n }}\n onDrop={(e) => {\n e.preventDefault();\n const from = drag.current;\n const to = dropIndex;\n if (from < 0 || to === null || from === to) return;\n moveItem(from, to);\n resetDragState();\n }}\n >\n <SortableItemContext.Provider\n value={{\n canMoveDown: i < arr.length - 1,\n canMoveUp: i > 0,\n index: i,\n moveDown: () => moveItem(i, i + 1),\n moveUp: () => moveItem(i, i - 1),\n }}\n >\n {child}\n </SortableItemContext.Provider>\n </li>\n );\n })}\n </List>\n );\n}\n"],"names":["SortableItemContext","createContext","useOptionalSortableItem","useContext","toPixels","value","Number","parseFloat","measureDraggedItem","item","content","firstElementChild","itemRect","getBoundingClientRect","rect","borderRadius","window","getComputedStyle","height","width","wrapperHeight","style","horizontalInsets","borderLeftWidth","borderRightWidth","paddingLeft","paddingRight","verticalInsets","borderBottomWidth","borderTopWidth","paddingBottom","paddingTop","Math","max","Sortable","children","className","columns","isRearranging","onChangeOrder","props","cols","isFinite","floor","arr","useMemo","React","Children","toArray","drag","useRef","usesTouchInput","navigator","maxTouchPoints","matchMedia","matches","touchDragActive","touchDropIndex","touchHoldTimer","touchStart","suppressClickUntil","touchPosition","autoScrollFrame","preventTouchScroll","event","preventDefault","current","zoneSize","setZoneSize","useState","dropIndex","setDropIndex","withVars","moveItem","from","to","length","next","slice","moved","splice","map","index","id","String","isValidElement","weight","clearTouchHoldTimer","clearTimeout","clearAutoScrollFrame","cancelAnimationFrame","getScrollableAncestor","element","parentElement","overflowY","test","scrollHeight","clientHeight","document","scrollingElement","HTMLElement","resetTouchDragState","suppressNextClick","removeEventListener","Date","now","startDrag","isInteractiveTarget","target","Element","Boolean","closest","getDropIndex","clientY","isInteger","itemHeight","rawIndex","top","updateTouchDropIndex","clientX","elementFromPoint","nextDropIndex","dataset","sortableIndex","startTouchAutoScroll","scrollContainer","edgeSize","maxSpeed","step","position","requestAnimationFrame","bottom","innerHeight","speed","y","distance","scrollBy","behavior","x","resetDragState","useEffect","jsx","List","cx","styles","sortable","child","i","key","e","stopPropagation","pseudo","dragging","touch","touches","currentTarget","setTimeout","addEventListener","passive","start","hypot","dataTransfer","dropEffect","setData","effectAllowed","canMoveDown","canMoveUp","moveDown","moveUp"],"mappings":"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"}
@@ -1,48 +1,67 @@
1
- import { jsx as H } from "react/jsx-runtime";
2
- import { t as O } from "../../classix-DG18itHa.js";
3
- import A, { createContext as tt, useMemo as V, useRef as a, useState as M, useEffect as B, useContext as et } from "react";
4
- import { List as nt } from "../list/index.js";
5
- import '../../assets/index8.css';const rt = "_sortable_12gha_1", ot = "_dragging_12gha_13", ct = "_dropping_12gha_28", lt = "_columns_12gha_42", ut = "_pseudo_12gha_51", f = {
1
+ import { jsx as L } from "react/jsx-runtime";
2
+ import { t as $ } from "../../classix-DG18itHa.js";
3
+ import N, { createContext as K, useMemo as q, useRef as u, useState as U, useEffect as Q, useContext as tt } from "react";
4
+ import { List as et } from "../list/index.js";
5
+ import '../../assets/index8.css';const rt = "_sortable_iw0r0_1", nt = "_dragging_iw0r0_13", ot = "_columns_iw0r0_38", ct = "_pseudo_iw0r0_47", w = {
6
6
  sortable: rt,
7
- dragging: ot,
8
- dropping: ct,
9
- columns: lt,
10
- pseudo: ut,
11
- "target-above": "_target-above_12gha_66",
12
- "target-below": "_target-below_12gha_67"
13
- }, W = tt(null);
14
- function ft() {
15
- return et(W);
7
+ dragging: nt,
8
+ columns: ot,
9
+ pseudo: ct,
10
+ "target-above": "_target-above_iw0r0_62",
11
+ "target-below": "_target-below_iw0r0_63"
12
+ }, V = K(null);
13
+ function dt() {
14
+ return tt(V);
16
15
  }
16
+ const h = (s) => Number.parseFloat(s) || 0, lt = (s) => {
17
+ const b = s.firstElementChild, i = s.getBoundingClientRect();
18
+ if (b) {
19
+ const y = b.getBoundingClientRect();
20
+ return {
21
+ borderRadius: window.getComputedStyle(b).borderRadius,
22
+ height: y.height,
23
+ width: y.width,
24
+ wrapperHeight: i.height
25
+ };
26
+ }
27
+ const l = window.getComputedStyle(s), A = h(l.borderLeftWidth) + h(l.borderRightWidth) + h(l.paddingLeft) + h(l.paddingRight), S = h(l.borderBottomWidth) + h(l.borderTopWidth) + h(l.paddingBottom) + h(l.paddingTop);
28
+ return {
29
+ borderRadius: l.borderRadius,
30
+ height: Math.max(0, i.height - S),
31
+ width: Math.max(0, i.width - A),
32
+ wrapperHeight: i.height
33
+ };
34
+ };
17
35
  function ht({
18
- children: F,
19
- className: U,
20
- columns: E = 1,
21
- isRearranging: x = !1,
22
- onChangeOrder: j,
23
- ...Y
36
+ children: s,
37
+ className: b,
38
+ columns: i = 1,
39
+ isRearranging: l = !1,
40
+ onChangeOrder: A,
41
+ ...S
24
42
  }) {
25
- const N = Number.isFinite(E) ? Math.max(1, Math.floor(E)) : 1, D = V(() => A.Children.toArray(F), [F]), l = a(-1), P = V(() => typeof window < "u" && (navigator.maxTouchPoints > 0 || window.matchMedia("(pointer: coarse)").matches), []), i = a(!1), T = a(null), v = a(null), b = a(null), _ = a(!1), S = a(null), d = a(null), [w, X] = M({
43
+ const y = Number.isFinite(i) ? Math.max(1, Math.floor(i)) : 1, _ = q(() => N.Children.toArray(s), [s]), a = u(-1), P = q(() => typeof window < "u" && (navigator.maxTouchPoints > 0 || window.matchMedia("(pointer: coarse)").matches), []), p = u(!1), C = u(null), v = u(null), x = u(null), I = u(0), E = u(null), m = u(null), M = u((o) => o.preventDefault()).current, [R, O] = U({
44
+ borderRadius: "0px",
26
45
  height: 0,
27
- width: 0
28
- }), [h, m] = M(null), [R, $] = M(null), Z = {
29
- ...Y.style,
30
- "--height": `calc(${w.height}px - var(--scale-16))`,
31
- "--width": N > 1 ? `calc(${w.width}px - var(--scale-16))` : `${w.width}px`
32
- }, G = (o) => {
33
- j(o.map((t, c) => ({
34
- id: String(A.isValidElement(t) ? t.props["data-id"] ?? `idx-${c}` : `idx-${c}`),
35
- weight: o.length - 1 - c
46
+ width: 0,
47
+ wrapperHeight: 0
48
+ }), [g, D] = U(null), j = {
49
+ ...S.style,
50
+ "--sortable-placeholder-height": `${R.height}px`,
51
+ "--sortable-placeholder-radius": R.borderRadius,
52
+ "--sortable-placeholder-width": `${R.width}px`
53
+ }, H = (o, t) => {
54
+ if (t < 0 || t >= _.length || o === t) return;
55
+ const c = _.slice(), [e] = c.splice(o, 1);
56
+ c.splice(t, 0, e), A(c.map((r, n) => ({
57
+ id: String(N.isValidElement(r) ? r.props["data-id"] ?? `idx-${n}` : `idx-${n}`),
58
+ weight: c.length - 1 - n
36
59
  })));
37
- }, y = (o, t) => {
38
- if (t < 0 || t >= D.length || o === t) return;
39
- const c = D.slice(), [e] = c.splice(o, 1);
40
- c.splice(t, 0, e), $(t), G(c);
41
- }, p = () => {
60
+ }, T = () => {
42
61
  v.current !== null && (clearTimeout(v.current), v.current = null);
43
- }, C = () => {
44
- d.current !== null && (cancelAnimationFrame(d.current), d.current = null);
45
- }, J = (o) => {
62
+ }, B = () => {
63
+ m.current !== null && (cancelAnimationFrame(m.current), m.current = null);
64
+ }, Z = (o) => {
46
65
  let t = (o == null ? void 0 : o.parentElement) ?? null;
47
66
  for (; t; ) {
48
67
  const {
@@ -52,139 +71,127 @@ function ht({
52
71
  t = t.parentElement;
53
72
  }
54
73
  return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;
55
- }, k = () => {
56
- p(), C(), S.current = null, i.current = !1, T.current = null, b.current = null, _.current = !1, l.current = -1, m(null);
57
- }, K = (o) => o instanceof Element && !!o.closest('button, a, input, textarea, select, option, [role="button"], [contenteditable="true"]'), z = (o, t) => {
58
- var q;
59
- const c = (q = document.elementFromPoint(o, t)) == null ? void 0 : q.closest("[data-sortable-index]");
74
+ }, Y = (o = !1) => {
75
+ T(), B(), window.removeEventListener("touchmove", M), E.current = null, p.current = !1, C.current = null, x.current = null, I.current = o ? Date.now() + 500 : 0, a.current = -1, D(null);
76
+ }, z = (o, t) => {
77
+ a.current = o, O(lt(t)), D(o);
78
+ }, G = (o) => o instanceof Element && !!o.closest('button, a, input, textarea, select, option, [role="button"], [contenteditable="true"]'), X = (o, t, c) => {
79
+ const e = a.current;
80
+ if (!Number.isInteger(t) || e < 0 || t === e) return null;
81
+ const r = o.getBoundingClientRect(), n = t === e + 1 ? R.wrapperHeight : r.height, d = c > r.top + n / 2 ? t + 1 : t;
82
+ return d > e ? d - 1 : d;
83
+ }, k = (o, t) => {
84
+ var r;
85
+ const c = (r = document.elementFromPoint(o, t)) == null ? void 0 : r.closest("[data-sortable-index]");
60
86
  if (!c) return;
61
- const e = Number(c.dataset.sortableIndex), n = l.current;
62
- if (!Number.isInteger(e) || n < 0 || e === n) return;
63
- const r = c.getBoundingClientRect(), s = e === n + 1 ? w.height : r.height, u = t > r.top + s / 2 ? e + 1 : e, I = u > n ? u - 1 : u;
64
- T.current = I, m(I);
65
- }, Q = (o) => {
66
- const t = J(o);
87
+ const e = X(c, Number(c.dataset.sortableIndex), t);
88
+ e !== null && (C.current = e, D(e));
89
+ }, J = (o) => {
90
+ const t = Z(o);
67
91
  if (!t) return;
68
- const c = 72, e = 18, n = () => {
69
- if (!i.current) {
70
- d.current = null;
92
+ const c = 72, e = 18, r = () => {
93
+ if (!p.current) {
94
+ m.current = null;
71
95
  return;
72
96
  }
73
- const r = S.current;
74
- if (!r) {
75
- d.current = requestAnimationFrame(n);
97
+ const n = E.current;
98
+ if (!n) {
99
+ m.current = requestAnimationFrame(r);
76
100
  return;
77
101
  }
78
- const s = t === document.scrollingElement ? {
102
+ const f = t === document.scrollingElement ? {
79
103
  top: 0,
80
104
  bottom: window.innerHeight
81
105
  } : t.getBoundingClientRect();
82
- let g = 0;
83
- if (r.y < s.top + c) {
84
- const u = Math.max(0, r.y - s.top);
85
- g = -e * (1 - u / c);
86
- } else if (r.y > s.bottom - c) {
87
- const u = Math.max(0, s.bottom - r.y);
88
- g = e * (1 - u / c);
106
+ let d = 0;
107
+ if (n.y < f.top + c) {
108
+ const F = Math.max(0, n.y - f.top);
109
+ d = -e * (1 - F / c);
110
+ } else if (n.y > f.bottom - c) {
111
+ const F = Math.max(0, f.bottom - n.y);
112
+ d = e * (1 - F / c);
89
113
  }
90
- g !== 0 && (t.scrollBy({
91
- top: g,
114
+ d !== 0 && (t.scrollBy({
115
+ top: d,
92
116
  behavior: "auto"
93
- }), z(r.x, r.y)), d.current = requestAnimationFrame(n);
117
+ }), k(n.x, n.y)), m.current = requestAnimationFrame(r);
94
118
  };
95
- C(), d.current = requestAnimationFrame(n);
96
- }, L = () => {
97
- l.current = -1, m(null);
119
+ B(), m.current = requestAnimationFrame(r);
120
+ }, W = () => {
121
+ a.current = -1, D(null);
98
122
  };
99
- return B(() => {
100
- x || $(null);
101
- }, [x]), B(() => () => {
102
- p(), C();
103
- }, []), B(() => {
104
- const o = (t) => {
105
- i.current && t.preventDefault();
106
- };
107
- return window.addEventListener("touchmove", o, {
108
- passive: !1
109
- }), () => {
110
- p(), window.removeEventListener("touchmove", o);
111
- };
112
- }, []), /* @__PURE__ */ H(nt, { className: O(U, f.sortable, N > 1 && f.columns), columns: E, ordered: !0, style: Z, ...Y, "data-component": "sortable", children: D.map((o, t) => {
113
- const c = A.isValidElement(o) ? o.key : null;
114
- return /* @__PURE__ */ H("li", { "data-sortable-index": t, onClickCapture: (e) => {
115
- _.current && (e.preventDefault(), e.stopPropagation(), _.current = !1);
116
- }, className: O(h !== null && h > t - 10 && h < t + 10 && f.pseudo, h === t && l.current < t && f["target-below"], h === t && l.current > t && f["target-above"], l.current === t && f.dragging, R === t && x && f.dropping), onContextMenu: (e) => {
117
- (i.current || v.current !== null) && e.preventDefault();
123
+ return Q(() => () => {
124
+ T(), B(), window.removeEventListener("touchmove", M);
125
+ }, [M]), /* @__PURE__ */ L(et, { className: $(b, w.sortable, y > 1 && w.columns), columns: i, ordered: !0, style: j, ...S, "data-component": "sortable", children: _.map((o, t) => {
126
+ const c = N.isValidElement(o) ? o.key : null;
127
+ return /* @__PURE__ */ L("li", { "data-sortable-index": t, onClickCapture: (e) => {
128
+ I.current <= Date.now() || (e.preventDefault(), e.stopPropagation(), I.current = 0);
129
+ }, className: $(g !== null && g > t - 10 && g < t + 10 && w.pseudo, g === t && a.current < t && w["target-below"], g === t && a.current > t && w["target-above"], a.current === t && w.dragging), onContextMenu: (e) => {
130
+ (p.current || v.current !== null) && e.preventDefault();
118
131
  }, onTouchStart: (e) => {
119
- if (x || K(e.target)) return;
120
- const n = e.touches[0];
121
- if (!n) return;
122
- const r = e.currentTarget;
123
- b.current = {
124
- index: t,
125
- x: n.clientX,
126
- y: n.clientY
127
- }, p(), v.current = setTimeout(() => {
128
- l.current = t, i.current = !0, T.current = t, _.current = !0, X({
129
- height: r.offsetHeight,
130
- width: r.offsetWidth
131
- }), m(t), S.current = {
132
- x: n.clientX,
133
- y: n.clientY
134
- }, Q(r);
132
+ if (l || G(e.target)) return;
133
+ I.current = 0;
134
+ const r = e.touches[0];
135
+ if (!r) return;
136
+ const n = e.currentTarget;
137
+ x.current = {
138
+ x: r.clientX,
139
+ y: r.clientY
140
+ }, T(), v.current = setTimeout(() => {
141
+ z(t, n), p.current = !0, C.current = t, E.current = {
142
+ x: r.clientX,
143
+ y: r.clientY
144
+ }, window.addEventListener("touchmove", M, {
145
+ passive: !1
146
+ }), J(n);
135
147
  }, 350);
136
148
  }, onTouchMove: (e) => {
137
- const n = e.touches[0];
138
- if (n) {
139
- if (S.current = {
140
- x: n.clientX,
141
- y: n.clientY
142
- }, !i.current) {
143
- const r = b.current;
144
- if (!r) return;
145
- Math.hypot(n.clientX - r.x, n.clientY - r.y) > 8 && (p(), b.current = null);
149
+ const r = e.touches[0];
150
+ if (r) {
151
+ if (E.current = {
152
+ x: r.clientX,
153
+ y: r.clientY
154
+ }, !p.current) {
155
+ const n = x.current;
156
+ if (!n) return;
157
+ Math.hypot(r.clientX - n.x, r.clientY - n.y) > 8 && (T(), x.current = null);
146
158
  return;
147
159
  }
148
- z(n.clientX, n.clientY);
160
+ k(r.clientX, r.clientY);
149
161
  }
150
162
  }, onTouchEnd: (e) => {
151
- if (p(), !i.current) {
152
- b.current = null;
163
+ if (T(), !p.current) {
164
+ x.current = null;
153
165
  return;
154
166
  }
155
167
  e.preventDefault();
156
- const n = l.current, r = T.current;
157
- n >= 0 && r !== null && n !== r && y(n, r), k();
158
- }, onTouchCancel: () => k(), draggable: !x && !P, onDragEnd: () => L(), onDragOver: (e) => {
168
+ const r = a.current, n = C.current;
169
+ r >= 0 && n !== null && r !== n && H(r, n), Y(!0);
170
+ }, onTouchCancel: () => Y(), draggable: !l && !P, onDragEnd: () => W(), onDragOver: (e) => {
159
171
  e.preventDefault(), e.dataTransfer.dropEffect = "move";
160
- const n = l.current;
161
- if (n < 0 || n === t) return;
162
- const r = e.currentTarget.getBoundingClientRect(), s = t === n + 1 ? w.height : r.height, u = e.clientY > r.top + s / 2 ? t + 1 : t, I = u > n ? u - 1 : u;
163
- m(I);
172
+ const r = X(e.currentTarget, t, e.clientY);
173
+ r !== null && D(r);
164
174
  }, onDragStart: (e) => {
165
175
  if (P) {
166
176
  e.preventDefault();
167
177
  return;
168
178
  }
169
- l.current = t, X({
170
- height: e.currentTarget.offsetHeight,
171
- width: e.currentTarget.offsetWidth
172
- }), e.dataTransfer.setData("text/plain", ""), e.dataTransfer.effectAllowed = "move", m(t);
179
+ z(t, e.currentTarget), e.dataTransfer.setData("text/plain", ""), e.dataTransfer.effectAllowed = "move";
173
180
  }, onDrop: (e) => {
174
181
  e.preventDefault();
175
- const n = l.current, r = h;
176
- n < 0 || r === null || n === r || (y(n, r), L());
177
- }, "data-component": "sortable", children: /* @__PURE__ */ H(W.Provider, { value: {
178
- canMoveDown: t < D.length - 1,
182
+ const r = a.current, n = g;
183
+ r < 0 || n === null || r === n || (H(r, n), W());
184
+ }, "data-component": "sortable", children: /* @__PURE__ */ L(V.Provider, { value: {
185
+ canMoveDown: t < _.length - 1,
179
186
  canMoveUp: t > 0,
180
187
  index: t,
181
- moveDown: () => y(t, t + 1),
182
- moveUp: () => y(t, t - 1)
188
+ moveDown: () => H(t, t + 1),
189
+ moveUp: () => H(t, t - 1)
183
190
  }, children: o }) }, c ?? t);
184
191
  }) });
185
192
  }
186
193
  export {
187
194
  ht as Sortable,
188
- ft as useOptionalSortableItem
195
+ dt as useOptionalSortableItem
189
196
  };
190
197
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/sortable/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { List } from '@/components/list';\n\nimport styles from './styles.module.css';\n\ntype SortItem = { id: string; weight: number };\n\ntype SortableItemContextValue = {\n canMoveDown: boolean;\n canMoveUp: boolean;\n index: number;\n moveDown: () => void;\n moveUp: () => void;\n};\n\nconst SortableItemContext = createContext<SortableItemContextValue | null>(null);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useOptionalSortableItem() {\n return useContext(SortableItemContext);\n}\n\ntype SortableProps = React.ComponentPropsWithoutRef<'ol'> & {\n columns?: number;\n isRearranging?: boolean;\n onChangeOrder: (order: SortItem[]) => void;\n};\n\ntype withVars = React.CSSProperties & {\n '--height'?: string;\n '--width'?: string;\n '--icon-svg'?: string;\n};\n\n/**\n * Children must provide a stable `data-id` for emits `{ id, weight }` and `key` (reconciliation).\n */\n\nexport function Sortable({\n children,\n className,\n columns = 1,\n isRearranging = false,\n onChangeOrder,\n ...props\n}: SortableProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n const arr = useMemo(() => React.Children.toArray(children), [children]);\n const drag = useRef(-1);\n const usesTouchInput = useMemo(\n () =>\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 || window.matchMedia('(pointer: coarse)').matches),\n []\n );\n const touchDragActive = useRef(false);\n const touchDropIndex = useRef<number | null>(null);\n const touchHoldTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const touchStart = useRef<{ index: number; x: number; y: number } | null>(null);\n const suppressClick = useRef(false);\n const touchPosition = useRef<{ x: number; y: number } | null>(null);\n const autoScrollFrame = useRef<number | null>(null);\n const [zoneSize, setZoneSize] = useState({\n height: 0,\n width: 0,\n });\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n const [droppedAtIndex, setDroppedAtIndex] = useState<number | null>(null);\n const withVars: withVars = {\n ...props.style,\n '--height': `calc(${zoneSize.height}px - var(--scale-16))`,\n '--width': cols > 1 ? `calc(${zoneSize.width}px - var(--scale-16))` : `${zoneSize.width}px`,\n };\n\n const emitOrder = (items: React.ReactNode[]) => {\n onChangeOrder(\n items.map((item, index) => ({\n id: String(\n React.isValidElement(item)\n ? ((item.props as { 'data-id'?: string })['data-id'] ?? `idx-${index}`)\n : `idx-${index}`\n ),\n weight: items.length - 1 - index,\n }))\n );\n };\n\n const moveItem = (from: number, to: number) => {\n if (to < 0 || to >= arr.length || from === to) return;\n\n const next = arr.slice();\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n\n setDroppedAtIndex(to);\n emitOrder(next);\n };\n\n const clearTouchHoldTimer = () => {\n if (touchHoldTimer.current !== null) {\n clearTimeout(touchHoldTimer.current);\n touchHoldTimer.current = null;\n }\n };\n\n const clearAutoScrollFrame = () => {\n if (autoScrollFrame.current !== null) {\n cancelAnimationFrame(autoScrollFrame.current);\n autoScrollFrame.current = null;\n }\n };\n\n const getScrollableAncestor = (element: HTMLElement | null) => {\n let current = element?.parentElement ?? null;\n\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const canScroll =\n /(auto|scroll|overlay)/.test(overflowY) && current.scrollHeight > current.clientHeight;\n\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n };\n\n const resetTouchDragState = () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n touchPosition.current = null;\n touchDragActive.current = false;\n touchDropIndex.current = null;\n touchStart.current = null;\n suppressClick.current = false;\n drag.current = -1;\n setDropIndex(null);\n };\n\n const isInteractiveTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n Boolean(\n target.closest(\n 'button, a, input, textarea, select, option, [role=\"button\"], [contenteditable=\"true\"]'\n )\n );\n\n const updateTouchDropIndex = (clientX: number, clientY: number) => {\n const target = document\n .elementFromPoint(clientX, clientY)\n ?.closest<HTMLElement>('[data-sortable-index]');\n if (!target) return;\n\n const index = Number(target.dataset.sortableIndex);\n const from = drag.current;\n if (!Number.isInteger(index) || from < 0 || index === from) return;\n\n const rect = target.getBoundingClientRect();\n const itemHeight = index === from + 1 ? zoneSize.height : rect.height;\n const isBottomHalf = clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? index + 1 : index;\n const nextDropIndex = rawIndex > from ? rawIndex - 1 : rawIndex;\n\n touchDropIndex.current = nextDropIndex;\n setDropIndex(nextDropIndex);\n };\n\n const startTouchAutoScroll = (item: HTMLElement) => {\n const scrollContainer = getScrollableAncestor(item);\n if (!scrollContainer) return;\n\n const edgeSize = 72;\n const maxSpeed = 18;\n\n const step = () => {\n if (!touchDragActive.current) {\n autoScrollFrame.current = null;\n return;\n }\n\n const position = touchPosition.current;\n if (!position) {\n autoScrollFrame.current = requestAnimationFrame(step);\n return;\n }\n\n const rect =\n scrollContainer === document.scrollingElement\n ? { top: 0, bottom: window.innerHeight }\n : scrollContainer.getBoundingClientRect();\n\n let speed = 0;\n\n if (position.y < rect.top + edgeSize) {\n const distance = Math.max(0, position.y - rect.top);\n speed = -maxSpeed * (1 - distance / edgeSize);\n } else if (position.y > rect.bottom - edgeSize) {\n const distance = Math.max(0, rect.bottom - position.y);\n speed = maxSpeed * (1 - distance / edgeSize);\n }\n\n if (speed !== 0) {\n scrollContainer.scrollBy({ top: speed, behavior: 'auto' });\n updateTouchDropIndex(position.x, position.y);\n }\n\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n clearAutoScrollFrame();\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n const resetDragState = () => {\n drag.current = -1;\n setDropIndex(null);\n };\n\n useEffect(() => {\n if (!isRearranging) {\n setDroppedAtIndex(null);\n }\n }, [isRearranging]);\n\n useEffect(\n () => () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n },\n []\n );\n\n useEffect(() => {\n const preventScrollWhileDragging = (event: TouchEvent) => {\n if (touchDragActive.current) {\n event.preventDefault();\n }\n };\n\n window.addEventListener('touchmove', preventScrollWhileDragging, {\n passive: false,\n });\n\n return () => {\n clearTouchHoldTimer();\n window.removeEventListener('touchmove', preventScrollWhileDragging);\n };\n }, []);\n\n return (\n <List\n className={cx(className, styles.sortable, cols > 1 && styles.columns)}\n columns={columns}\n ordered\n style={withVars}\n {...props}\n >\n {arr.map((child, i) => {\n const key = React.isValidElement(child) ? child.key : null;\n\n return (\n <li\n key={key ?? i}\n data-sortable-index={i}\n onClickCapture={(e) => {\n if (!suppressClick.current) return;\n e.preventDefault();\n e.stopPropagation();\n suppressClick.current = false;\n }}\n className={cx(\n dropIndex !== null && dropIndex > i - 10 && dropIndex < i + 10 && styles.pseudo,\n dropIndex === i && drag.current < i && styles['target-below'],\n dropIndex === i && drag.current > i && styles['target-above'],\n drag.current === i && styles.dragging,\n droppedAtIndex === i && isRearranging && styles.dropping\n )}\n onContextMenu={(e) => {\n if (touchDragActive.current || touchHoldTimer.current !== null) {\n e.preventDefault();\n }\n }}\n onTouchStart={(e) => {\n if (isRearranging || isInteractiveTarget(e.target)) return;\n\n const touch = e.touches[0];\n if (!touch) return;\n\n const item = e.currentTarget;\n touchStart.current = {\n index: i,\n x: touch.clientX,\n y: touch.clientY,\n };\n\n clearTouchHoldTimer();\n touchHoldTimer.current = setTimeout(() => {\n drag.current = i;\n touchDragActive.current = true;\n touchDropIndex.current = i;\n suppressClick.current = true;\n setZoneSize({\n height: item.offsetHeight,\n width: item.offsetWidth,\n });\n setDropIndex(i);\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n startTouchAutoScroll(item);\n }, 350);\n }}\n onTouchMove={(e) => {\n const touch = e.touches[0];\n if (!touch) return;\n\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n if (!touchDragActive.current) {\n const start = touchStart.current;\n if (!start) return;\n\n const distance = Math.hypot(touch.clientX - start.x, touch.clientY - start.y);\n if (distance > 8) {\n clearTouchHoldTimer();\n touchStart.current = null;\n }\n return;\n }\n updateTouchDropIndex(touch.clientX, touch.clientY);\n }}\n onTouchEnd={(e) => {\n clearTouchHoldTimer();\n\n if (!touchDragActive.current) {\n touchStart.current = null;\n return;\n }\n\n e.preventDefault();\n const from = drag.current;\n const to = touchDropIndex.current;\n\n if (from >= 0 && to !== null && from !== to) {\n moveItem(from, to);\n }\n\n resetTouchDragState();\n }}\n onTouchCancel={() => resetTouchDragState()}\n draggable={!isRearranging && !usesTouchInput}\n onDragEnd={() => resetDragState()}\n onDragOver={(e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const from = drag.current;\n if (from < 0 || from === i) return;\n\n const rect = e.currentTarget.getBoundingClientRect();\n const itemHeight = i === from + 1 ? zoneSize.height : rect.height;\n const isBottomHalf = e.clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? i + 1 : i;\n const nextDropIndex = rawIndex > from ? rawIndex - 1 : rawIndex;\n\n setDropIndex(nextDropIndex);\n }}\n onDragStart={(e) => {\n if (usesTouchInput) {\n e.preventDefault();\n return;\n }\n drag.current = i;\n setZoneSize({\n height: e.currentTarget.offsetHeight,\n width: e.currentTarget.offsetWidth,\n });\n e.dataTransfer.setData('text/plain', '');\n e.dataTransfer.effectAllowed = 'move';\n setDropIndex(i);\n }}\n onDrop={(e) => {\n e.preventDefault();\n const from = drag.current;\n const to = dropIndex;\n if (from < 0 || to === null || from === to) return;\n moveItem(from, to);\n resetDragState();\n }}\n >\n <SortableItemContext.Provider\n value={{\n canMoveDown: i < arr.length - 1,\n canMoveUp: i > 0,\n index: i,\n moveDown: () => moveItem(i, i + 1),\n moveUp: () => moveItem(i, i - 1),\n }}\n >\n {child}\n </SortableItemContext.Provider>\n </li>\n );\n })}\n </List>\n );\n}\n"],"names":["SortableItemContext","createContext","useOptionalSortableItem","useContext","Sortable","children","className","columns","isRearranging","onChangeOrder","props","cols","Number","isFinite","Math","max","floor","arr","useMemo","React","Children","toArray","drag","useRef","usesTouchInput","window","navigator","maxTouchPoints","matchMedia","matches","touchDragActive","touchDropIndex","touchHoldTimer","touchStart","suppressClick","touchPosition","autoScrollFrame","zoneSize","setZoneSize","useState","height","width","dropIndex","setDropIndex","droppedAtIndex","setDroppedAtIndex","withVars","style","emitOrder","items","map","item","index","id","String","isValidElement","weight","length","moveItem","from","to","next","slice","moved","splice","clearTouchHoldTimer","current","clearTimeout","clearAutoScrollFrame","cancelAnimationFrame","getScrollableAncestor","element","parentElement","overflowY","getComputedStyle","test","scrollHeight","clientHeight","document","scrollingElement","HTMLElement","resetTouchDragState","isInteractiveTarget","target","Element","Boolean","closest","updateTouchDropIndex","clientX","clientY","elementFromPoint","dataset","sortableIndex","isInteger","rect","getBoundingClientRect","itemHeight","rawIndex","top","nextDropIndex","startTouchAutoScroll","scrollContainer","edgeSize","maxSpeed","step","position","requestAnimationFrame","bottom","innerHeight","speed","y","distance","scrollBy","behavior","x","resetDragState","useEffect","preventScrollWhileDragging","event","preventDefault","addEventListener","passive","removeEventListener","jsx","List","cx","styles","sortable","child","i","key","e","stopPropagation","pseudo","dragging","dropping","touch","touches","currentTarget","setTimeout","offsetHeight","offsetWidth","start","hypot","dataTransfer","dropEffect","setData","effectAllowed","canMoveDown","canMoveUp","moveDown","moveUp"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/sortable/index.tsx"],"sourcesContent":["import cx from 'classix';\nimport React, { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { List } from '@/components/list';\n\nimport styles from './styles.module.css';\n\ntype SortItem = { id: string; weight: number };\n\ntype SortableItemContextValue = {\n canMoveDown: boolean;\n canMoveUp: boolean;\n index: number;\n moveDown: () => void;\n moveUp: () => void;\n};\n\nconst SortableItemContext = createContext<SortableItemContextValue | null>(null);\n\n// eslint-disable-next-line react-refresh/only-export-components\nexport function useOptionalSortableItem() {\n return useContext(SortableItemContext);\n}\n\ntype SortableProps = React.ComponentPropsWithoutRef<'ol'> & {\n columns?: number;\n isRearranging?: boolean;\n onChangeOrder: (order: SortItem[]) => void;\n};\n\ntype SortableStyle = React.CSSProperties & {\n '--sortable-placeholder-height'?: string;\n '--sortable-placeholder-radius'?: string;\n '--sortable-placeholder-width'?: string;\n};\n\ntype ZoneSize = {\n borderRadius: string;\n height: number;\n width: number;\n wrapperHeight: number;\n};\n\nconst toPixels = (value: string) => Number.parseFloat(value) || 0;\n\nconst measureDraggedItem = (item: HTMLLIElement): ZoneSize => {\n const content = item.firstElementChild;\n const itemRect = item.getBoundingClientRect();\n\n if (content) {\n const rect = content.getBoundingClientRect();\n\n return {\n borderRadius: window.getComputedStyle(content).borderRadius,\n height: rect.height,\n width: rect.width,\n wrapperHeight: itemRect.height,\n };\n }\n\n const style = window.getComputedStyle(item);\n const horizontalInsets =\n toPixels(style.borderLeftWidth) +\n toPixels(style.borderRightWidth) +\n toPixels(style.paddingLeft) +\n toPixels(style.paddingRight);\n const verticalInsets =\n toPixels(style.borderBottomWidth) +\n toPixels(style.borderTopWidth) +\n toPixels(style.paddingBottom) +\n toPixels(style.paddingTop);\n\n return {\n borderRadius: style.borderRadius,\n height: Math.max(0, itemRect.height - verticalInsets),\n width: Math.max(0, itemRect.width - horizontalInsets),\n wrapperHeight: itemRect.height,\n };\n};\n\n/**\n * Children must provide a stable `data-id` for emits `{ id, weight }` and `key` (reconciliation).\n */\n\nexport function Sortable({\n children,\n className,\n columns = 1,\n isRearranging = false,\n onChangeOrder,\n ...props\n}: SortableProps) {\n const cols = Number.isFinite(columns) ? Math.max(1, Math.floor(columns)) : 1;\n const arr = useMemo(() => React.Children.toArray(children), [children]);\n const drag = useRef(-1);\n const usesTouchInput = useMemo(\n () =>\n typeof window !== 'undefined' &&\n (navigator.maxTouchPoints > 0 || window.matchMedia('(pointer: coarse)').matches),\n []\n );\n const touchDragActive = useRef(false);\n const touchDropIndex = useRef<number | null>(null);\n const touchHoldTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const touchStart = useRef<{ x: number; y: number } | null>(null);\n const suppressClickUntil = useRef(0);\n const touchPosition = useRef<{ x: number; y: number } | null>(null);\n const autoScrollFrame = useRef<number | null>(null);\n const preventTouchScroll = useRef((event: TouchEvent) => event.preventDefault()).current;\n const [zoneSize, setZoneSize] = useState({\n borderRadius: '0px',\n height: 0,\n width: 0,\n wrapperHeight: 0,\n });\n const [dropIndex, setDropIndex] = useState<number | null>(null);\n const withVars: SortableStyle = {\n ...props.style,\n '--sortable-placeholder-height': `${zoneSize.height}px`,\n '--sortable-placeholder-radius': zoneSize.borderRadius,\n '--sortable-placeholder-width': `${zoneSize.width}px`,\n };\n\n const moveItem = (from: number, to: number) => {\n if (to < 0 || to >= arr.length || from === to) return;\n\n const next = arr.slice();\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n\n onChangeOrder(\n next.map((item, index) => ({\n id: String(\n React.isValidElement(item)\n ? ((item.props as { 'data-id'?: string })['data-id'] ?? `idx-${index}`)\n : `idx-${index}`\n ),\n weight: next.length - 1 - index,\n }))\n );\n };\n\n const clearTouchHoldTimer = () => {\n if (touchHoldTimer.current !== null) {\n clearTimeout(touchHoldTimer.current);\n touchHoldTimer.current = null;\n }\n };\n\n const clearAutoScrollFrame = () => {\n if (autoScrollFrame.current !== null) {\n cancelAnimationFrame(autoScrollFrame.current);\n autoScrollFrame.current = null;\n }\n };\n\n const getScrollableAncestor = (element: HTMLElement | null) => {\n let current = element?.parentElement ?? null;\n\n while (current) {\n const { overflowY } = window.getComputedStyle(current);\n const canScroll =\n /(auto|scroll|overlay)/.test(overflowY) && current.scrollHeight > current.clientHeight;\n\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return document.scrollingElement instanceof HTMLElement ? document.scrollingElement : null;\n };\n\n const resetTouchDragState = (suppressNextClick = false) => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n window.removeEventListener('touchmove', preventTouchScroll);\n touchPosition.current = null;\n touchDragActive.current = false;\n touchDropIndex.current = null;\n touchStart.current = null;\n suppressClickUntil.current = suppressNextClick ? Date.now() + 500 : 0;\n drag.current = -1;\n setDropIndex(null);\n };\n\n const startDrag = (index: number, item: HTMLLIElement) => {\n drag.current = index;\n setZoneSize(measureDraggedItem(item));\n setDropIndex(index);\n };\n\n const isInteractiveTarget = (target: EventTarget | null) =>\n target instanceof Element &&\n Boolean(\n target.closest(\n 'button, a, input, textarea, select, option, [role=\"button\"], [contenteditable=\"true\"]'\n )\n );\n\n const getDropIndex = (target: HTMLElement, index: number, clientY: number) => {\n const from = drag.current;\n if (!Number.isInteger(index) || from < 0 || index === from) return null;\n\n const rect = target.getBoundingClientRect();\n const itemHeight = index === from + 1 ? zoneSize.wrapperHeight : rect.height;\n const isBottomHalf = clientY > rect.top + itemHeight / 2;\n const rawIndex = isBottomHalf ? index + 1 : index;\n return rawIndex > from ? rawIndex - 1 : rawIndex;\n };\n\n const updateTouchDropIndex = (clientX: number, clientY: number) => {\n const target = document\n .elementFromPoint(clientX, clientY)\n ?.closest<HTMLElement>('[data-sortable-index]');\n if (!target) return;\n\n const nextDropIndex = getDropIndex(target, Number(target.dataset.sortableIndex), clientY);\n if (nextDropIndex === null) return;\n\n touchDropIndex.current = nextDropIndex;\n setDropIndex(nextDropIndex);\n };\n\n const startTouchAutoScroll = (item: HTMLElement) => {\n const scrollContainer = getScrollableAncestor(item);\n if (!scrollContainer) return;\n\n const edgeSize = 72;\n const maxSpeed = 18;\n\n const step = () => {\n if (!touchDragActive.current) {\n autoScrollFrame.current = null;\n return;\n }\n\n const position = touchPosition.current;\n if (!position) {\n autoScrollFrame.current = requestAnimationFrame(step);\n return;\n }\n\n const rect =\n scrollContainer === document.scrollingElement\n ? { top: 0, bottom: window.innerHeight }\n : scrollContainer.getBoundingClientRect();\n\n let speed = 0;\n\n if (position.y < rect.top + edgeSize) {\n const distance = Math.max(0, position.y - rect.top);\n speed = -maxSpeed * (1 - distance / edgeSize);\n } else if (position.y > rect.bottom - edgeSize) {\n const distance = Math.max(0, rect.bottom - position.y);\n speed = maxSpeed * (1 - distance / edgeSize);\n }\n\n if (speed !== 0) {\n scrollContainer.scrollBy({ top: speed, behavior: 'auto' });\n updateTouchDropIndex(position.x, position.y);\n }\n\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n clearAutoScrollFrame();\n autoScrollFrame.current = requestAnimationFrame(step);\n };\n\n const resetDragState = () => {\n drag.current = -1;\n setDropIndex(null);\n };\n\n useEffect(\n () => () => {\n clearTouchHoldTimer();\n clearAutoScrollFrame();\n window.removeEventListener('touchmove', preventTouchScroll);\n },\n [preventTouchScroll]\n );\n\n return (\n <List\n className={cx(className, styles.sortable, cols > 1 && styles.columns)}\n columns={columns}\n ordered\n style={withVars}\n {...props}\n >\n {arr.map((child, i) => {\n const key = React.isValidElement(child) ? child.key : null;\n\n return (\n <li\n key={key ?? i}\n data-sortable-index={i}\n onClickCapture={(e) => {\n if (suppressClickUntil.current <= Date.now()) return;\n e.preventDefault();\n e.stopPropagation();\n suppressClickUntil.current = 0;\n }}\n className={cx(\n dropIndex !== null && dropIndex > i - 10 && dropIndex < i + 10 && styles.pseudo,\n dropIndex === i && drag.current < i && styles['target-below'],\n dropIndex === i && drag.current > i && styles['target-above'],\n drag.current === i && styles.dragging\n )}\n onContextMenu={(e) => {\n if (touchDragActive.current || touchHoldTimer.current !== null) {\n e.preventDefault();\n }\n }}\n onTouchStart={(e) => {\n if (isRearranging || isInteractiveTarget(e.target)) return;\n suppressClickUntil.current = 0;\n\n const touch = e.touches[0];\n if (!touch) return;\n\n const item = e.currentTarget;\n touchStart.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n clearTouchHoldTimer();\n touchHoldTimer.current = setTimeout(() => {\n startDrag(i, item);\n touchDragActive.current = true;\n touchDropIndex.current = i;\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n window.addEventListener('touchmove', preventTouchScroll, { passive: false });\n startTouchAutoScroll(item);\n }, 350);\n }}\n onTouchMove={(e) => {\n const touch = e.touches[0];\n if (!touch) return;\n\n touchPosition.current = {\n x: touch.clientX,\n y: touch.clientY,\n };\n\n if (!touchDragActive.current) {\n const start = touchStart.current;\n if (!start) return;\n\n const distance = Math.hypot(touch.clientX - start.x, touch.clientY - start.y);\n if (distance > 8) {\n clearTouchHoldTimer();\n touchStart.current = null;\n }\n return;\n }\n updateTouchDropIndex(touch.clientX, touch.clientY);\n }}\n onTouchEnd={(e) => {\n clearTouchHoldTimer();\n\n if (!touchDragActive.current) {\n touchStart.current = null;\n return;\n }\n\n e.preventDefault();\n const from = drag.current;\n const to = touchDropIndex.current;\n\n if (from >= 0 && to !== null && from !== to) {\n moveItem(from, to);\n }\n\n resetTouchDragState(true);\n }}\n onTouchCancel={() => resetTouchDragState()}\n draggable={!isRearranging && !usesTouchInput}\n onDragEnd={() => resetDragState()}\n onDragOver={(e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n const nextDropIndex = getDropIndex(e.currentTarget, i, e.clientY);\n if (nextDropIndex === null) return;\n setDropIndex(nextDropIndex);\n }}\n onDragStart={(e) => {\n if (usesTouchInput) {\n e.preventDefault();\n return;\n }\n startDrag(i, e.currentTarget);\n e.dataTransfer.setData('text/plain', '');\n e.dataTransfer.effectAllowed = 'move';\n }}\n onDrop={(e) => {\n e.preventDefault();\n const from = drag.current;\n const to = dropIndex;\n if (from < 0 || to === null || from === to) return;\n moveItem(from, to);\n resetDragState();\n }}\n >\n <SortableItemContext.Provider\n value={{\n canMoveDown: i < arr.length - 1,\n canMoveUp: i > 0,\n index: i,\n moveDown: () => moveItem(i, i + 1),\n moveUp: () => moveItem(i, i - 1),\n }}\n >\n {child}\n </SortableItemContext.Provider>\n </li>\n );\n })}\n </List>\n );\n}\n"],"names":["SortableItemContext","createContext","useOptionalSortableItem","useContext","toPixels","value","Number","parseFloat","measureDraggedItem","item","content","firstElementChild","itemRect","getBoundingClientRect","rect","borderRadius","window","getComputedStyle","height","width","wrapperHeight","style","horizontalInsets","borderLeftWidth","borderRightWidth","paddingLeft","paddingRight","verticalInsets","borderBottomWidth","borderTopWidth","paddingBottom","paddingTop","Math","max","Sortable","children","className","columns","isRearranging","onChangeOrder","props","cols","isFinite","floor","arr","useMemo","React","Children","toArray","drag","useRef","usesTouchInput","navigator","maxTouchPoints","matchMedia","matches","touchDragActive","touchDropIndex","touchHoldTimer","touchStart","suppressClickUntil","touchPosition","autoScrollFrame","preventTouchScroll","event","preventDefault","current","zoneSize","setZoneSize","useState","dropIndex","setDropIndex","withVars","moveItem","from","to","length","next","slice","moved","splice","map","index","id","String","isValidElement","weight","clearTouchHoldTimer","clearTimeout","clearAutoScrollFrame","cancelAnimationFrame","getScrollableAncestor","element","parentElement","overflowY","test","scrollHeight","clientHeight","document","scrollingElement","HTMLElement","resetTouchDragState","suppressNextClick","removeEventListener","Date","now","startDrag","isInteractiveTarget","target","Element","Boolean","closest","getDropIndex","clientY","isInteger","itemHeight","rawIndex","top","updateTouchDropIndex","clientX","elementFromPoint","nextDropIndex","dataset","sortableIndex","startTouchAutoScroll","scrollContainer","edgeSize","maxSpeed","step","position","requestAnimationFrame","bottom","innerHeight","speed","y","distance","scrollBy","behavior","x","resetDragState","useEffect","jsx","List","cx","styles","sortable","child","i","key","e","stopPropagation","pseudo","dragging","touch","touches","currentTarget","setTimeout","addEventListener","passive","start","hypot","dataTransfer","dropEffect","setData","effectAllowed","canMoveDown","canMoveUp","moveDown","moveUp"],"mappings":"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"}
@@ -27,6 +27,9 @@ const h = {
27
27
  "clipboard-check": {
28
28
  filled: "M7.502 6h7.128A3.375 3.375 0 0 1 18 9.375v9.375a3 3 0 0 0 3-3V6.108c0-1.505-1.125-2.811-2.664-2.94a48.972 48.972 0 0 0-.673-.05A3 3 0 0 0 15 1.5h-1.5a3 3 0 0 0-2.663 1.618c-.225.015-.45.032-.673.05C8.662 3.295 7.554 4.542 7.502 6ZM13.5 3A1.5 1.5 0 0 0 12 4.5h4.5A1.5 1.5 0 0 0 15 3h-1.5Z M3 9.375C3 8.339 3.84 7.5 4.875 7.5h9.75c1.036 0 1.875.84 1.875 1.875v11.25c0 1.035-.84 1.875-1.875 1.875h-9.75A1.875 1.875 0 0 1 3 20.625V9.375Zm9.586 4.594a.75.75 0 0 0-1.172-.938l-2.476 3.096-.908-.907a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.116-.062l3-3.75Z"
29
29
  },
30
+ "clipboard-document": {
31
+ filled: "M7.502 6h7.128A3.375 3.375 0 0 1 18 9.375v9.375a3 3 0 0 0 3-3V6.108c0-1.505-1.125-2.811-2.664-2.94a48.972 48.972 0 0 0-.673-.05A3 3 0 0 0 15 1.5h-1.5a3 3 0 0 0-2.663 1.618c-.225.015-.45.032-.673.05C8.662 3.295 7.554 4.542 7.502 6ZM13.5 3A1.5 1.5 0 0 0 12 4.5h4.5A1.5 1.5 0 0 0 15 3h-1.5Z M3 9.375C3 8.339 3.84 7.5 4.875 7.5h9.75c1.036 0 1.875.84 1.875 1.875v11.25c0 1.035-.84 1.875-1.875 1.875h-9.75A1.875 1.875 0 0 1 3 20.625V9.375ZM6 12a.75.75 0 0 1 .75-.75h.008a.75.75 0 0 1 .75.75v.008a.75.75 0 0 1-.75.75H6.75a.75.75 0 0 1-.75-.75V12Zm2.25 0a.75.75 0 0 1 .75-.75h3.75a.75.75 0 0 1 0 1.5H9a.75.75 0 0 1-.75-.75ZM6 15a.75.75 0 0 1 .75-.75h.008a.75.75 0 0 1 .75.75v.008a.75.75 0 0 1-.75.75H6.75a.75.75 0 0 1-.75-.75V15Zm2.25 0a.75.75 0 0 1 .75-.75h3.75a.75.75 0 0 1 0 1.5H9a.75.75 0 0 1-.75-.75ZM6 18a.75.75 0 0 1 .75-.75h.008a.75.75 0 0 1 .75.75v.008a.75.75 0 0 1-.75.75H6.75a.75.75 0 0 1-.75-.75V18Zm2.25 0a.75.75 0 0 1 .75-.75h3.75a.75.75 0 0 1 0 1.5H9a.75.75 0 0 1-.75-.75Z"
32
+ },
30
33
  cog: {
31
34
  filled: "M11.078 2.25c-.917 0-1.699.663-1.85 1.567L9.05 4.889c-.02.12-.115.26-.297.348a7.493 7.493 0 0 0-.986.57c-.166.115-.334.126-.45.083L6.3 5.508a1.875 1.875 0 0 0-2.282.819l-.922 1.597a1.875 1.875 0 0 0 .432 2.385l.84.692c.095.078.17.229.154.43a7.598 7.598 0 0 0 0 1.139c.015.2-.059.352-.153.43l-.841.692a1.875 1.875 0 0 0-.432 2.385l.922 1.597a1.875 1.875 0 0 0 2.282.818l1.019-.382c.115-.043.283-.031.45.082.312.214.641.405.985.57.182.088.277.228.297.35l.178 1.071c.151.904.933 1.567 1.85 1.567h1.844c.916 0 1.699-.663 1.85-1.567l.178-1.072c.02-.12.114-.26.297-.349.344-.165.673-.356.985-.57.167-.114.335-.125.45-.082l1.02.382a1.875 1.875 0 0 0 2.28-.819l.923-1.597a1.875 1.875 0 0 0-.432-2.385l-.84-.692c-.095-.078-.17-.229-.154-.43a7.614 7.614 0 0 0 0-1.139c-.016-.2.059-.352.153-.43l.84-.692c.708-.582.891-1.59.433-2.385l-.922-1.597a1.875 1.875 0 0 0-2.282-.818l-1.02.382c-.114.043-.282.031-.449-.083a7.49 7.49 0 0 0-.985-.57c-.183-.087-.277-.227-.297-.348l-.179-1.072a1.875 1.875 0 0 0-1.85-1.567h-1.843ZM12 15.75a3.75 3.75 0 1 0 0-7.5 3.75 3.75 0 0 0 0 7.5Z",
32
35
  outline: "M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"
@@ -93,6 +96,9 @@ const h = {
93
96
  },
94
97
  italic: "M5.248 20.246H9.05m0 0h3.696m-3.696 0 5.893-16.502m0 0h-3.697m3.697 0h3.803",
95
98
  link: "M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244",
99
+ "link-slash": {
100
+ filled: "M19.892 4.09a3.75 3.75 0 0 0-5.303 0l-4.5 4.5c-.074.074-.144.15-.21.229l4.965 4.966a3.75 3.75 0 0 0-1.986-4.428.75.75 0 0 1 .646-1.353 5.253 5.253 0 0 1 2.502 6.944l5.515 5.515a.75.75 0 0 1-1.061 1.06l-18-18.001A.75.75 0 0 1 3.521 2.46l5.294 5.295a5.31 5.31 0 0 1 .213-.227l4.5-4.5a5.25 5.25 0 1 1 7.425 7.425l-1.757 1.757a.75.75 0 1 1-1.06-1.06l1.756-1.757a3.75 3.75 0 0 0 0-5.304ZM5.846 11.773a.75.75 0 0 1 0 1.06l-1.757 1.758a3.75 3.75 0 0 0 5.303 5.304l3.129-3.13a.75.75 0 1 1 1.06 1.061l-3.128 3.13a5.25 5.25 0 1 1-7.425-7.426l1.757-1.757a.75.75 0 0 1 1.061 0Zm2.401.26a.75.75 0 0 1 .957.458c.18.512.474.992.885 1.403.31.311.661.555 1.035.733a.75.75 0 0 1-.647 1.354 5.244 5.244 0 0 1-1.449-1.026 5.232 5.232 0 0 1-1.24-1.965.75.75 0 0 1 .46-.957Z"
101
+ },
96
102
  list: "M8.25 6.75h12M8.25 12h12m-12 5.25h12M3.75 6.75h.007v.008H3.75V6.75Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0ZM3.75 12h.007v.008H3.75V12Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Zm-.375 5.25h.007v.008H3.75v-.008Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z",
97
103
  megaphone: {
98
104
  filled: "M16.881 4.345A23.112 23.112 0 0 1 8.25 6H7.5a5.25 5.25 0 0 0-.88 10.427 21.593 21.593 0 0 0 1.378 3.94c.464 1.004 1.674 1.32 2.582.796l.657-.379c.88-.508 1.165-1.593.772-2.468a17.116 17.116 0 0 1-.628-1.607c1.918.258 3.76.75 5.5 1.446A21.727 21.727 0 0 0 18 11.25c0-2.414-.393-4.735-1.119-6.905ZM18.26 3.74a23.22 23.22 0 0 1 1.24 7.51 23.22 23.22 0 0 1-1.41 7.992.75.75 0 1 0 1.409.516 24.555 24.555 0 0 0 1.415-6.43 2.992 2.992 0 0 0 .836-2.078c0-.807-.319-1.54-.836-2.078a24.65 24.65 0 0 0-1.415-6.43.75.75 0 1 0-1.409.516c.059.16.116.321.17.483Z",
@@ -119,6 +125,9 @@ const h = {
119
125
  outline: ""
120
126
  },
121
127
  success: "M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z",
128
+ tag: {
129
+ filled: "M5.25 2.25a3 3 0 0 0-3 3v4.318a3 3 0 0 0 .879 2.121l9.58 9.581c.92.92 2.39 1.186 3.548.428a18.849 18.849 0 0 0 5.441-5.44c.758-1.16.492-2.629-.428-3.548l-9.58-9.581a3 3 0 0 0-2.122-.879H5.25ZM6.375 7.5a1.125 1.125 0 1 0 0-2.25 1.125 1.125 0 0 0 0 2.25Z"
130
+ },
122
131
  trash: {
123
132
  filled: "M16.5 4.478v.227a48.816 48.816 0 0 1 3.878.512.75.75 0 1 1-.256 1.478l-.209-.035-1.005 13.07a3 3 0 0 1-2.991 2.77H8.084a3 3 0 0 1-2.991-2.77L4.087 6.66l-.209.035a.75.75 0 0 1-.256-1.478A48.567 48.567 0 0 1 7.5 4.705v-.227c0-1.564 1.213-2.9 2.816-2.951a52.662 52.662 0 0 1 3.369 0c1.603.051 2.815 1.387 2.815 2.951Zm-6.136-1.452a51.196 51.196 0 0 1 3.273 0C14.39 3.05 15 3.684 15 4.478v.113a49.488 49.488 0 0 0-6 0v-.113c0-.794.609-1.428 1.364-1.452Zm-.355 5.945a.75.75 0 1 0-1.5.058l.347 9a.75.75 0 1 0 1.499-.058l-.346-9Zm5.48.058a.75.75 0 1 0-1.498-.058l-.347 9a.75.75 0 0 0 1.5.058l.345-9Z",
124
133
  outline: "m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0"
@@ -153,4 +162,4 @@ export {
153
162
  h as a,
154
163
  Z as i
155
164
  };
156
- //# sourceMappingURL=icons-Dhj9mAkR.js.map
165
+ //# sourceMappingURL=icons-BFgf_lJN.js.map