smarthr-ui 96.1.0 → 96.1.2

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 (189) hide show
  1. package/lib/components/AppHeader/components/common/CommonButton.cjs +3 -2
  2. package/lib/components/AppHeader/components/common/CommonButton.cjs.map +1 -1
  3. package/lib/components/AppHeader/components/common/CommonButton.js +3 -2
  4. package/lib/components/AppHeader/components/common/CommonButton.js.map +1 -1
  5. package/lib/components/Base/Base.cjs +7 -1
  6. package/lib/components/Base/Base.cjs.map +1 -1
  7. package/lib/components/Base/Base.js +7 -1
  8. package/lib/components/Base/Base.js.map +1 -1
  9. package/lib/components/Base/BaseColumn/BaseColumn.cjs +7 -1
  10. package/lib/components/Base/BaseColumn/BaseColumn.cjs.map +1 -1
  11. package/lib/components/Base/BaseColumn/BaseColumn.js +7 -1
  12. package/lib/components/Base/BaseColumn/BaseColumn.js.map +1 -1
  13. package/lib/components/BottomFixedArea/BottomFixedArea.cjs +1 -3
  14. package/lib/components/BottomFixedArea/BottomFixedArea.cjs.map +1 -1
  15. package/lib/components/BottomFixedArea/BottomFixedArea.js +2 -4
  16. package/lib/components/BottomFixedArea/BottomFixedArea.js.map +1 -1
  17. package/lib/components/Button/AnchorButton.cjs +2 -7
  18. package/lib/components/Button/AnchorButton.cjs.map +1 -1
  19. package/lib/components/Button/AnchorButton.js +2 -7
  20. package/lib/components/Button/AnchorButton.js.map +1 -1
  21. package/lib/components/Button/useButtonWrapper.cjs +24 -6
  22. package/lib/components/Button/useButtonWrapper.cjs.map +1 -1
  23. package/lib/components/Button/useButtonWrapper.js +24 -6
  24. package/lib/components/Button/useButtonWrapper.js.map +1 -1
  25. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.cjs +8 -4
  26. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.cjs.map +1 -1
  27. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.js +8 -4
  28. package/lib/components/Combobox/MultiCombobox/MultiSelectedItem.js.map +1 -1
  29. package/lib/components/Dialog/DialogBody.cjs +7 -1
  30. package/lib/components/Dialog/DialogBody.cjs.map +1 -1
  31. package/lib/components/Dialog/DialogBody.js +7 -1
  32. package/lib/components/Dialog/DialogBody.js.map +1 -1
  33. package/lib/components/Dialog/DialogContentInner.cjs +7 -1
  34. package/lib/components/Dialog/DialogContentInner.cjs.map +1 -1
  35. package/lib/components/Dialog/DialogContentInner.js +7 -1
  36. package/lib/components/Dialog/DialogContentInner.js.map +1 -1
  37. package/lib/components/Dialog/DialogOverlap.cjs +22 -5
  38. package/lib/components/Dialog/DialogOverlap.cjs.map +1 -1
  39. package/lib/components/Dialog/DialogOverlap.js +23 -6
  40. package/lib/components/Dialog/DialogOverlap.js.map +1 -1
  41. package/lib/components/Dialog/ModelessDialog/ModelessDialog.cjs +7 -1
  42. package/lib/components/Dialog/ModelessDialog/ModelessDialog.cjs.map +1 -1
  43. package/lib/components/Dialog/ModelessDialog/ModelessDialog.js +7 -1
  44. package/lib/components/Dialog/ModelessDialog/ModelessDialog.js.map +1 -1
  45. package/lib/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.cjs +51 -11
  46. package/lib/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.cjs.map +1 -1
  47. package/lib/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.d.ts +3 -4
  48. package/lib/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.js +52 -12
  49. package/lib/components/Dialog/RemoteDialogTrigger/RemoteDialogTrigger.js.map +1 -1
  50. package/lib/components/Dropdown/Dropdown.cjs +3 -3
  51. package/lib/components/Dropdown/Dropdown.cjs.map +1 -1
  52. package/lib/components/Dropdown/Dropdown.d.ts +1 -1
  53. package/lib/components/Dropdown/Dropdown.js +3 -3
  54. package/lib/components/Dropdown/Dropdown.js.map +1 -1
  55. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs +20 -10
  56. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.cjs.map +1 -1
  57. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js +21 -11
  58. package/lib/components/Dropdown/DropdownMenuButton/DropdownMenuButton.js.map +1 -1
  59. package/lib/components/Dropdown/DropdownTrigger.cjs +33 -16
  60. package/lib/components/Dropdown/DropdownTrigger.cjs.map +1 -1
  61. package/lib/components/Dropdown/DropdownTrigger.js +33 -16
  62. package/lib/components/Dropdown/DropdownTrigger.js.map +1 -1
  63. package/lib/components/Header/Header.cjs +3 -3
  64. package/lib/components/Header/Header.cjs.map +1 -1
  65. package/lib/components/Header/Header.js +3 -3
  66. package/lib/components/Header/Header.js.map +1 -1
  67. package/lib/components/Icon/generateIcon.cjs +9 -1
  68. package/lib/components/Icon/generateIcon.cjs.map +1 -1
  69. package/lib/components/Icon/generateIcon.js +9 -1
  70. package/lib/components/Icon/generateIcon.js.map +1 -1
  71. package/lib/components/Layout/Cluster/Cluster.cjs +4 -0
  72. package/lib/components/Layout/Cluster/Cluster.cjs.map +1 -1
  73. package/lib/components/Layout/Cluster/Cluster.d.ts +1 -1
  74. package/lib/components/Layout/Cluster/Cluster.js +4 -0
  75. package/lib/components/Layout/Cluster/Cluster.js.map +1 -1
  76. package/lib/components/Layout/Container/Container.cjs +2 -2
  77. package/lib/components/Layout/Container/Container.js +2 -2
  78. package/lib/components/Scroller/Scroller.cjs +12 -19
  79. package/lib/components/Scroller/Scroller.cjs.map +1 -1
  80. package/lib/components/Scroller/Scroller.js +13 -20
  81. package/lib/components/Scroller/Scroller.js.map +1 -1
  82. package/lib/components/Table/TableReel.cjs +1 -1
  83. package/lib/components/Table/TableReel.cjs.map +1 -1
  84. package/lib/components/Table/TableReel.js +1 -1
  85. package/lib/components/Table/TableReel.js.map +1 -1
  86. package/lib/components/Table/TableScrollContext.cjs +4 -4
  87. package/lib/components/Table/TableScrollContext.js +4 -4
  88. package/lib/components/Table/useReelCells.cjs +13 -7
  89. package/lib/components/Table/useReelCells.cjs.map +1 -1
  90. package/lib/components/Table/useReelCells.d.ts +1 -3
  91. package/lib/components/Table/useReelCells.js +13 -7
  92. package/lib/components/Table/useReelCells.js.map +1 -1
  93. package/lib/components/Text/Text.cjs +3 -1
  94. package/lib/components/Text/Text.cjs.map +1 -1
  95. package/lib/components/Text/Text.js +3 -1
  96. package/lib/components/Text/Text.js.map +1 -1
  97. package/lib/components/TextLink/TextLink.cjs +14 -28
  98. package/lib/components/TextLink/TextLink.cjs.map +1 -1
  99. package/lib/components/TextLink/TextLink.js +15 -29
  100. package/lib/components/TextLink/TextLink.js.map +1 -1
  101. package/lib/components/TextLink/UpwardLink/UpwardLink.cjs +2 -2
  102. package/lib/components/TextLink/UpwardLink/UpwardLink.js +2 -2
  103. package/lib/components/Textarea/Textarea.cjs +7 -6
  104. package/lib/components/Textarea/Textarea.cjs.map +1 -1
  105. package/lib/components/Textarea/Textarea.js +7 -6
  106. package/lib/components/Textarea/Textarea.js.map +1 -1
  107. package/lib/components/Tooltip/Tooltip.cjs +12 -21
  108. package/lib/components/Tooltip/Tooltip.cjs.map +1 -1
  109. package/lib/components/Tooltip/Tooltip.js +14 -23
  110. package/lib/components/Tooltip/Tooltip.js.map +1 -1
  111. package/lib/components/Tooltip/TooltipPortal.cjs +2 -2
  112. package/lib/components/Tooltip/TooltipPortal.cjs.map +1 -1
  113. package/lib/components/Tooltip/TooltipPortal.d.ts +1 -0
  114. package/lib/components/Tooltip/TooltipPortal.js +2 -2
  115. package/lib/components/Tooltip/TooltipPortal.js.map +1 -1
  116. package/lib/components/Tooltip/tooltipHelper.cjs +2 -2
  117. package/lib/components/Tooltip/tooltipHelper.cjs.map +1 -1
  118. package/lib/components/Tooltip/tooltipHelper.js +2 -2
  119. package/lib/components/Tooltip/tooltipHelper.js.map +1 -1
  120. package/lib/components/WarekiPicker/WarekiPicker.cjs +2 -3
  121. package/lib/components/WarekiPicker/WarekiPicker.cjs.map +1 -1
  122. package/lib/components/WarekiPicker/WarekiPicker.js +2 -3
  123. package/lib/components/WarekiPicker/WarekiPicker.js.map +1 -1
  124. package/lib/configureTwMerge.cjs +2 -2
  125. package/lib/configureTwMerge.js +2 -2
  126. package/lib/hooks/useDevice/DeviceProvider.cjs +2 -2
  127. package/lib/hooks/useDevice/DeviceProvider.js +2 -2
  128. package/lib/hooks/useEnvironment/EnvironmentProvider.cjs +2 -2
  129. package/lib/hooks/useEnvironment/EnvironmentProvider.js +2 -2
  130. package/lib/hooks/useOuterClick.cjs +5 -2
  131. package/lib/hooks/useOuterClick.cjs.map +1 -1
  132. package/lib/hooks/useOuterClick.js +6 -3
  133. package/lib/hooks/useOuterClick.js.map +1 -1
  134. package/lib/hooks/usePortal.cjs +1 -1
  135. package/lib/hooks/usePortal.cjs.map +1 -1
  136. package/lib/hooks/usePortal.js +1 -1
  137. package/lib/hooks/usePortal.js.map +1 -1
  138. package/lib/hooks/useSV/useSV.cjs +2 -2
  139. package/lib/hooks/useSV/useSV.js +2 -2
  140. package/lib/hooks/useTheme.cjs +3 -0
  141. package/lib/hooks/useTheme.cjs.map +1 -1
  142. package/lib/hooks/useTheme.js +3 -0
  143. package/lib/hooks/useTheme.js.map +1 -1
  144. package/lib/index.cjs +14 -8
  145. package/lib/index.cjs.map +1 -1
  146. package/lib/index.d.ts +1 -10
  147. package/lib/index.js +10 -4
  148. package/lib/index.js.map +1 -1
  149. package/lib/intl/locales/index.cjs +1 -0
  150. package/lib/intl/locales/index.cjs.map +1 -1
  151. package/lib/intl/locales/index.js +1 -0
  152. package/lib/intl/locales/index.js.map +1 -1
  153. package/lib/libs/ua.cjs +1 -2
  154. package/lib/libs/ua.cjs.map +1 -1
  155. package/lib/libs/ua.js +1 -2
  156. package/lib/libs/ua.js.map +1 -1
  157. package/lib/smarthr-ui-preset.cjs +4 -4
  158. package/lib/smarthr-ui-preset.js +4 -4
  159. package/lib/tailwind/color.cjs +9 -0
  160. package/lib/tailwind/color.cjs.map +1 -1
  161. package/lib/tailwind/color.d.ts +1 -1
  162. package/lib/tailwind/color.js +9 -0
  163. package/lib/tailwind/color.js.map +1 -1
  164. package/lib/tailwind/fontSize.cjs +10 -0
  165. package/lib/tailwind/fontSize.cjs.map +1 -1
  166. package/lib/tailwind/fontSize.d.ts +1 -1
  167. package/lib/tailwind/fontSize.js +10 -0
  168. package/lib/tailwind/fontSize.js.map +1 -1
  169. package/lib/tailwind/index.cjs +10 -2
  170. package/lib/tailwind/index.cjs.map +1 -1
  171. package/lib/tailwind/index.js +9 -1
  172. package/lib/tailwind/index.js.map +1 -1
  173. package/lib/tailwind/textColor.cjs +9 -0
  174. package/lib/tailwind/textColor.cjs.map +1 -1
  175. package/lib/tailwind/textColor.d.ts +1 -1
  176. package/lib/tailwind/textColor.js +9 -0
  177. package/lib/tailwind/textColor.js.map +1 -1
  178. package/lib/themes/createWidth.cjs +1 -3
  179. package/lib/themes/createWidth.cjs.map +1 -1
  180. package/lib/themes/createWidth.d.ts +3 -1
  181. package/lib/themes/createWidth.js +1 -3
  182. package/lib/themes/createWidth.js.map +1 -1
  183. package/lib/themes/index.cjs +14 -0
  184. package/lib/themes/index.cjs.map +1 -1
  185. package/lib/themes/index.d.ts +7 -1
  186. package/lib/themes/index.js +9 -1
  187. package/lib/themes/index.js.map +1 -1
  188. package/metadata.json +1 -1
  189. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"generateIcon.js","sources":["../../../src/components/Icon/generateIcon.tsx"],"sourcesContent":["import { type ComponentProps, type ReactNode, memo, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { color as defaultColorPalette, fontSize, textColor } from '../../tailwind'\nimport { VisuallyHiddenText } from '../VisuallyHiddenText'\n\nimport type { FontSizes } from '../../themes'\nimport type { IconType } from 'react-icons'\n\n/**\n * literal union type に補完を効かせるためのハック\n * https://github.com/microsoft/TypeScript/issues/29729\n */\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>)\n\nexport const colorSet = {\n TEXT_BLACK: 'black',\n TEXT_WHITE: 'white',\n TEXT_GREY: 'grey',\n TEXT_DISABLED: 'disabled',\n TEXT_LINK: 'link',\n MAIN: 'main',\n DANGER: 'danger',\n WARNING: 'warning-yellow',\n BRAND: 'brand',\n} as const\n\nconst existsColor = (color: string): color is keyof typeof colorSet => color in colorSet\n\ntype IconProps = {\n /**\n * アイコンの色\n * @type string | 'TEXT_BLACK' | 'TEXT_GREY' | 'TEXT_DISABLED' | 'TEXT_LINK' | 'MAIN' | 'DANGER' | 'WARNING' | 'BRAND'\n */\n color?: LiteralUnion<keyof typeof colorSet>\n /**\n * アイコンの大きさ(フォントサイズの抽象値)\n * @deprecated 親要素やデフォルトフォントサイズが継承されるため固定値の指定は非推奨\n */\n size?: FontSizes\n}\n\ntype AbstractProps = {\n /**アイコンの説明テキスト*/\n alt?: ReactNode\n}\nexport type Props = AbstractProps &\n Omit<IconProps & Omit<ComponentProps<'svg'>, keyof IconProps>, keyof AbstractProps>\n\n// HINT: smarthr-ui-Icon-extendedはアイコン+α(例えば複数のアイコンをまとめて一つにしているなど)を表すclass\n// altなどもVisuallyHiddenTextで表現している関係上、squareの計算などの際に複数要素として判断されると認知と違う結果になるため使用しています\n\nconst classNameGenerator = tv({\n slots: {\n icon: 'smarthr-ui-Icon group-[]/iconWrapper:shr-shrink-0 group-[]/iconWrapper:shr-translate-y-[0.125em] forced-colors:shr-fill-[CanvasText]',\n wrapperWithAlt: 'smarthr-ui-Icon-extended smarthr-ui-Icon-withAlt shr-relative shr-leading-[0]',\n },\n})\n\nexport const generateIcon = (SvgIcon: IconType) => {\n const Icon = memo<Props>(\n ({\n color,\n className,\n role = 'img',\n alt,\n 'aria-hidden': ariaHidden,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n focusable = false,\n size,\n ...rest\n }) => {\n const actualAriaHidden = useMemo(() => {\n if (ariaHidden !== undefined) {\n return ariaHidden\n }\n\n if (alt !== undefined || (ariaLabel === undefined && ariaLabelledby === undefined)) {\n return true\n }\n\n return undefined\n }, [ariaHidden, alt, ariaLabel, ariaLabelledby])\n\n const classNames = useMemo(() => {\n const { icon, wrapperWithAlt } = classNameGenerator()\n\n return {\n icon: icon({ className }),\n wrapperWithAlt: wrapperWithAlt(),\n }\n }, [className])\n\n const replacedColor = useMemo(() => {\n if (color && existsColor(color)) {\n const colorName = colorSet[color]\n\n if (colorName in textColor) {\n return textColor[colorName as keyof typeof textColor]\n }\n\n return defaultColorPalette[colorName as keyof typeof defaultColorPalette] as string\n }\n\n return color\n }, [color])\n\n const iconSize = size ? fontSize[size] : '1em' // 指定がない場合は親要素のフォントサイズを継承する\n const svgIcon = (\n <SvgIcon\n {...rest}\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n // size は react-icons のアイコンの大きさ、width / height は自前で SVG からアイコンを作る場合の大きさ指定\n size={iconSize}\n width={iconSize}\n height={iconSize}\n color={replacedColor}\n className={classNames.icon}\n role={role}\n aria-hidden={actualAriaHidden}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n focusable={focusable}\n />\n )\n\n if (alt) {\n return (\n // HINT: VisuallyHiddenTextが存在すると、アイコンなのに2つの要素がある状態になってしまい\n // styleなどを記述する際、意図しない状態になる場合がある\n // 回避するため、spanでラップし、開発者のメンタルモデルに合わせる\n <span className={classNames.wrapperWithAlt}>\n <VisuallyHiddenText>{alt}</VisuallyHiddenText>\n {svgIcon}\n </span>\n )\n }\n\n return svgIcon\n },\n )\n\n Icon.displayName = SvgIcon.name\n\n return Icon\n}\n"],"names":["tv","textColor","defaultColorPalette","fontSize","_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"generateIcon.js","sources":["../../../src/components/Icon/generateIcon.tsx"],"sourcesContent":["import { type ComponentProps, type ReactNode, memo, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { color as defaultColorPalette, fontSize, textColor } from '../../tailwind'\nimport { VisuallyHiddenText } from '../VisuallyHiddenText'\n\nimport type { FontSizes } from '../../themes'\nimport type { IconType } from 'react-icons'\n\n/**\n * literal union type に補完を効かせるためのハック\n * https://github.com/microsoft/TypeScript/issues/29729\n */\ntype LiteralUnion<T extends U, U = string> = T | (U & Record<never, never>)\n\nexport const colorSet = {\n TEXT_BLACK: 'black',\n TEXT_WHITE: 'white',\n TEXT_GREY: 'grey',\n TEXT_DISABLED: 'disabled',\n TEXT_LINK: 'link',\n MAIN: 'main',\n DANGER: 'danger',\n WARNING: 'warning-yellow',\n BRAND: 'brand',\n} as const\n\nconst existsColor = (color: string): color is keyof typeof colorSet => color in colorSet\n\ntype IconProps = {\n /**\n * アイコンの色\n * @type string | 'TEXT_BLACK' | 'TEXT_GREY' | 'TEXT_DISABLED' | 'TEXT_LINK' | 'MAIN' | 'DANGER' | 'WARNING' | 'BRAND'\n */\n color?: LiteralUnion<keyof typeof colorSet>\n /**\n * アイコンの大きさ(フォントサイズの抽象値)\n * @deprecated 親要素やデフォルトフォントサイズが継承されるため固定値の指定は非推奨\n */\n size?: FontSizes\n}\n\ntype AbstractProps = {\n /**アイコンの説明テキスト*/\n alt?: ReactNode\n}\nexport type Props = AbstractProps &\n Omit<IconProps & Omit<ComponentProps<'svg'>, keyof IconProps>, keyof AbstractProps>\n\n// HINT: smarthr-ui-Icon-extendedはアイコン+α(例えば複数のアイコンをまとめて一つにしているなど)を表すclass\n// altなどもVisuallyHiddenTextで表現している関係上、squareの計算などの際に複数要素として判断されると認知と違う結果になるため使用しています\n\nconst classNameGenerator = tv({\n slots: {\n icon: 'smarthr-ui-Icon group-[]/iconWrapper:shr-shrink-0 group-[]/iconWrapper:shr-translate-y-[0.125em] forced-colors:shr-fill-[CanvasText]',\n wrapperWithAlt: 'smarthr-ui-Icon-extended smarthr-ui-Icon-withAlt shr-relative shr-leading-[0]',\n },\n})\n\nexport const generateIcon = (SvgIcon: IconType) => {\n const Icon = memo<Props>(\n ({\n color,\n className,\n role = 'img',\n alt,\n 'aria-hidden': ariaHidden,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n focusable = false,\n size,\n ...rest\n }) => {\n const actualAriaHidden = useMemo(() => {\n if (ariaHidden !== undefined) {\n return ariaHidden\n }\n\n if (alt !== undefined || (ariaLabel === undefined && ariaLabelledby === undefined)) {\n return true\n }\n\n return undefined\n }, [ariaHidden, alt, ariaLabel, ariaLabelledby])\n\n const classNames = useMemo(() => {\n const { icon, wrapperWithAlt } = classNameGenerator()\n\n return {\n icon: icon({ className }),\n wrapperWithAlt: wrapperWithAlt(),\n }\n }, [className])\n\n const replacedColor = useMemo(() => {\n if (color && existsColor(color)) {\n const colorName = colorSet[color]\n\n if (colorName in textColor) {\n return textColor[colorName as keyof typeof textColor]\n }\n\n return defaultColorPalette[colorName as keyof typeof defaultColorPalette] as string\n }\n\n return color\n }, [color])\n\n const iconSize = size ? fontSize[size] : '1em' // 指定がない場合は親要素のフォントサイズを継承する\n const svgIcon = (\n <SvgIcon\n {...rest}\n stroke=\"currentColor\"\n fill=\"currentColor\"\n strokeWidth=\"0\"\n // size は react-icons のアイコンの大きさ、width / height は自前で SVG からアイコンを作る場合の大きさ指定\n size={iconSize}\n width={iconSize}\n height={iconSize}\n color={replacedColor}\n className={classNames.icon}\n role={role}\n aria-hidden={actualAriaHidden}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n focusable={focusable}\n />\n )\n\n if (alt) {\n return (\n // HINT: VisuallyHiddenTextが存在すると、アイコンなのに2つの要素がある状態になってしまい\n // styleなどを記述する際、意図しない状態になる場合がある\n // 回避するため、spanでラップし、開発者のメンタルモデルに合わせる\n <span className={classNames.wrapperWithAlt}>\n <VisuallyHiddenText>{alt}</VisuallyHiddenText>\n {svgIcon}\n </span>\n )\n }\n\n return svgIcon\n },\n )\n\n Icon.displayName = SvgIcon.name\n\n return Icon\n}\n"],"names":["tv","textColor","defaultColorPalette","fontSize","_jsx","_jsxs"],"mappings":"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"}
@@ -106,8 +106,12 @@ const ActualCluster = ({ as, gap = 0.5, inline = false, align, justify, classNam
106
106
  justify,
107
107
  className,
108
108
  }), [inline, gaps.row, gaps.column, align, justify, className]);
109
+ // eslint-disable-next-line smarthr/best-practice-for-no-unnecessary-variable -- Componentは useSectionWrapper と JSX の2箇所で使用されているため誤検知
109
110
  const Component = as || 'div';
110
111
  const Wrapper = components_SectioningContent_useSectioningWrapper.useSectionWrapper(Component);
112
+ // ポリモーフィックコンポーネント: asプロパティで要素型を動的に変更可能なため、
113
+ // refの型を静的に決定できません。HTMLElementを基底型として使用し、
114
+ // 実際の要素型との整合性はas anyで型アサーションします。
111
115
  const body = jsxRuntime.jsx(Component, { ...rest, ref: ref, className: actualClassName });
112
116
  if (Wrapper) {
113
117
  return jsxRuntime.jsx(Wrapper, { children: body });
@@ -1 +1 @@
1
- {"version":3,"file":"Cluster.cjs","sources":["../../../../src/components/Layout/Cluster/Cluster.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type ForwardedRef,\n type PropsWithChildren,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { genericsForwardRef } from '../../../libs/util'\nimport { useSectionWrapper } from '../../SectioningContent'\n\nimport type { Gap, SeparateGap } from '../../../types'\n\nexport const clusterClassNameGenerator = tv({\n base: 'shr-flex-wrap [&:empty]:shr-gap-0',\n variants: {\n inline: {\n true: 'shr-inline-flex',\n false: 'shr-flex',\n },\n rowGap: {\n // 動的生成も考えたが、tailwindcss が検知できないためベタ書きしている\n 0: 'shr-gap-y-0',\n 0.25: 'shr-gap-y-0.25',\n 0.5: 'shr-gap-y-0.5',\n 0.75: 'shr-gap-y-0.75',\n 1: 'shr-gap-y-1',\n 1.25: 'shr-gap-y-1.25',\n 1.5: 'shr-gap-y-1.5',\n 2: 'shr-gap-y-2',\n 2.5: 'shr-gap-y-2.5',\n 3: 'shr-gap-y-3',\n 3.5: 'shr-gap-y-3.5',\n 4: 'shr-gap-y-4',\n 8: 'shr-gap-y-8',\n X3S: 'shr-gap-y-0.25',\n XXS: 'shr-gap-y-0.5',\n XS: 'shr-gap-y-1',\n S: 'shr-gap-y-1.5',\n M: 'shr-gap-y-2',\n L: 'shr-gap-y-2.5',\n XL: 'shr-gap-y-3',\n XXL: 'shr-gap-y-3.5',\n X3L: 'shr-gap-y-4',\n } as { [key in Gap]: string },\n columnGap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n align: {\n start: 'shr-items-start',\n 'flex-start': 'shr-items-start',\n end: 'shr-items-end',\n 'flex-end': 'shr-items-end',\n center: 'shr-items-center',\n baseline: 'shr-items-baseline',\n stretch: 'shr-items-stretch',\n },\n justify: {\n normal: 'shr-justify-normal',\n start: 'shr-justify-start',\n 'flex-start': 'shr-justify-start',\n end: 'shr-justify-end',\n 'flex-end': 'shr-justify-end',\n center: 'shr-justify-center',\n 'space-between': 'shr-justify-between',\n 'space-around': 'shr-justify-around',\n 'space-evenly': 'shr-justify-evenly',\n stretch: 'shr-justify-stretch',\n },\n },\n})\n\ntype Props<T extends ElementType> = PropsWithChildren<\n Omit<VariantProps<typeof clusterClassNameGenerator>, 'rowGap' | 'columnGap'> & {\n as?: T\n gap?: Gap | SeparateGap\n }\n> &\n ComponentPropsWithoutRef<T>\n\nconst ActualCluster = <T extends ElementType = 'div'>(\n { as, gap = 0.5, inline = false, align, justify, className, ...rest }: Props<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) => {\n const gaps = useMemo(() => {\n if (gap instanceof Object) {\n return gap\n }\n\n return {\n row: gap,\n column: gap,\n }\n }, [gap])\n\n const actualClassName = useMemo(\n () =>\n clusterClassNameGenerator({\n inline,\n rowGap: gaps.row,\n columnGap: gaps.column,\n align,\n justify,\n className,\n }),\n [inline, gaps.row, gaps.column, align, justify, className],\n )\n\n const Component = as || 'div'\n const Wrapper = useSectionWrapper(Component)\n const body = <Component {...rest} ref={ref} className={actualClassName} />\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n}\n\nexport const Cluster = genericsForwardRef(ActualCluster)\n"],"names":[],"mappings":";;;;;;;;;;;AAgBO;AACL;AACA;AACE;AACE;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACF;AACF;AAUD;AAIE;AACE;AACE;;;AAIA;AACA;;AAEJ;;;;;;;;AAWK;AAIL;AACA;AACA;;AAGE;;AAGF;AACF;;;;"}
1
+ {"version":3,"file":"Cluster.cjs","sources":["../../../../src/components/Layout/Cluster/Cluster.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type ForwardedRef,\n type PropsWithChildren,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { genericsForwardRef } from '../../../libs/util'\nimport { useSectionWrapper } from '../../SectioningContent'\n\nimport type { Gap, SeparateGap } from '../../../types'\n\nexport const clusterClassNameGenerator = tv({\n base: 'shr-flex-wrap [&:empty]:shr-gap-0',\n variants: {\n inline: {\n true: 'shr-inline-flex',\n false: 'shr-flex',\n },\n rowGap: {\n // 動的生成も考えたが、tailwindcss が検知できないためベタ書きしている\n 0: 'shr-gap-y-0',\n 0.25: 'shr-gap-y-0.25',\n 0.5: 'shr-gap-y-0.5',\n 0.75: 'shr-gap-y-0.75',\n 1: 'shr-gap-y-1',\n 1.25: 'shr-gap-y-1.25',\n 1.5: 'shr-gap-y-1.5',\n 2: 'shr-gap-y-2',\n 2.5: 'shr-gap-y-2.5',\n 3: 'shr-gap-y-3',\n 3.5: 'shr-gap-y-3.5',\n 4: 'shr-gap-y-4',\n 8: 'shr-gap-y-8',\n X3S: 'shr-gap-y-0.25',\n XXS: 'shr-gap-y-0.5',\n XS: 'shr-gap-y-1',\n S: 'shr-gap-y-1.5',\n M: 'shr-gap-y-2',\n L: 'shr-gap-y-2.5',\n XL: 'shr-gap-y-3',\n XXL: 'shr-gap-y-3.5',\n X3L: 'shr-gap-y-4',\n } as { [key in Gap]: string },\n columnGap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n align: {\n start: 'shr-items-start',\n 'flex-start': 'shr-items-start',\n end: 'shr-items-end',\n 'flex-end': 'shr-items-end',\n center: 'shr-items-center',\n baseline: 'shr-items-baseline',\n stretch: 'shr-items-stretch',\n },\n justify: {\n normal: 'shr-justify-normal',\n start: 'shr-justify-start',\n 'flex-start': 'shr-justify-start',\n end: 'shr-justify-end',\n 'flex-end': 'shr-justify-end',\n center: 'shr-justify-center',\n 'space-between': 'shr-justify-between',\n 'space-around': 'shr-justify-around',\n 'space-evenly': 'shr-justify-evenly',\n stretch: 'shr-justify-stretch',\n },\n },\n})\n\ntype Props<T extends ElementType> = PropsWithChildren<\n Omit<VariantProps<typeof clusterClassNameGenerator>, 'rowGap' | 'columnGap'> & {\n as?: T\n gap?: Gap | SeparateGap\n }\n> &\n ComponentPropsWithoutRef<T>\n\nconst ActualCluster = <T extends ElementType = 'div'>(\n { as, gap = 0.5, inline = false, align, justify, className, ...rest }: Props<T>,\n ref: ForwardedRef<HTMLElement>,\n) => {\n const gaps = useMemo(() => {\n if (gap instanceof Object) {\n return gap\n }\n\n return {\n row: gap,\n column: gap,\n }\n }, [gap])\n\n const actualClassName = useMemo(\n () =>\n clusterClassNameGenerator({\n inline,\n rowGap: gaps.row,\n columnGap: gaps.column,\n align,\n justify,\n className,\n }),\n [inline, gaps.row, gaps.column, align, justify, className],\n )\n\n // eslint-disable-next-line smarthr/best-practice-for-no-unnecessary-variable -- Componentは useSectionWrapper と JSX の2箇所で使用されているため誤検知\n const Component = as || 'div'\n const Wrapper = useSectionWrapper(Component)\n // ポリモーフィックコンポーネント: asプロパティで要素型を動的に変更可能なため、\n // refの型を静的に決定できません。HTMLElementを基底型として使用し、\n // 実際の要素型との整合性はas anyで型アサーションします。\n const body = <Component {...rest} ref={ref as any} className={actualClassName} />\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n}\n\nexport const Cluster = genericsForwardRef(ActualCluster)\n"],"names":[],"mappings":";;;;;;;;;;;AAgBO;AACL;AACA;AACE;AACE;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACF;AACF;AAUD;AAIE;AACE;AACE;;;AAIA;AACA;;AAEJ;;;;;;;;AAWK;;AAKL;AACA;;;;AAIA;;AAGE;;AAGF;AACF;;;;"}
@@ -399,4 +399,4 @@ export declare const Cluster: <T extends ElementType = "div">(props: Omit<Varian
399
399
  gap?: Gap | SeparateGap;
400
400
  } & {
401
401
  children?: import("react").ReactNode | undefined;
402
- } & import("react").PropsWithoutRef<import("react").ComponentProps<T>> & import("react").RefAttributes<HTMLDivElement>) => import("react").ReactNode;
402
+ } & import("react").PropsWithoutRef<import("react").ComponentProps<T>> & import("react").RefAttributes<HTMLElement>) => import("react").ReactNode;
@@ -104,8 +104,12 @@ const ActualCluster = ({ as, gap = 0.5, inline = false, align, justify, classNam
104
104
  justify,
105
105
  className,
106
106
  }), [inline, gaps.row, gaps.column, align, justify, className]);
107
+ // eslint-disable-next-line smarthr/best-practice-for-no-unnecessary-variable -- Componentは useSectionWrapper と JSX の2箇所で使用されているため誤検知
107
108
  const Component = as || 'div';
108
109
  const Wrapper = useSectionWrapper(Component);
110
+ // ポリモーフィックコンポーネント: asプロパティで要素型を動的に変更可能なため、
111
+ // refの型を静的に決定できません。HTMLElementを基底型として使用し、
112
+ // 実際の要素型との整合性はas anyで型アサーションします。
109
113
  const body = jsx(Component, { ...rest, ref: ref, className: actualClassName });
110
114
  if (Wrapper) {
111
115
  return jsx(Wrapper, { children: body });
@@ -1 +1 @@
1
- {"version":3,"file":"Cluster.js","sources":["../../../../src/components/Layout/Cluster/Cluster.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type ForwardedRef,\n type PropsWithChildren,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { genericsForwardRef } from '../../../libs/util'\nimport { useSectionWrapper } from '../../SectioningContent'\n\nimport type { Gap, SeparateGap } from '../../../types'\n\nexport const clusterClassNameGenerator = tv({\n base: 'shr-flex-wrap [&:empty]:shr-gap-0',\n variants: {\n inline: {\n true: 'shr-inline-flex',\n false: 'shr-flex',\n },\n rowGap: {\n // 動的生成も考えたが、tailwindcss が検知できないためベタ書きしている\n 0: 'shr-gap-y-0',\n 0.25: 'shr-gap-y-0.25',\n 0.5: 'shr-gap-y-0.5',\n 0.75: 'shr-gap-y-0.75',\n 1: 'shr-gap-y-1',\n 1.25: 'shr-gap-y-1.25',\n 1.5: 'shr-gap-y-1.5',\n 2: 'shr-gap-y-2',\n 2.5: 'shr-gap-y-2.5',\n 3: 'shr-gap-y-3',\n 3.5: 'shr-gap-y-3.5',\n 4: 'shr-gap-y-4',\n 8: 'shr-gap-y-8',\n X3S: 'shr-gap-y-0.25',\n XXS: 'shr-gap-y-0.5',\n XS: 'shr-gap-y-1',\n S: 'shr-gap-y-1.5',\n M: 'shr-gap-y-2',\n L: 'shr-gap-y-2.5',\n XL: 'shr-gap-y-3',\n XXL: 'shr-gap-y-3.5',\n X3L: 'shr-gap-y-4',\n } as { [key in Gap]: string },\n columnGap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n align: {\n start: 'shr-items-start',\n 'flex-start': 'shr-items-start',\n end: 'shr-items-end',\n 'flex-end': 'shr-items-end',\n center: 'shr-items-center',\n baseline: 'shr-items-baseline',\n stretch: 'shr-items-stretch',\n },\n justify: {\n normal: 'shr-justify-normal',\n start: 'shr-justify-start',\n 'flex-start': 'shr-justify-start',\n end: 'shr-justify-end',\n 'flex-end': 'shr-justify-end',\n center: 'shr-justify-center',\n 'space-between': 'shr-justify-between',\n 'space-around': 'shr-justify-around',\n 'space-evenly': 'shr-justify-evenly',\n stretch: 'shr-justify-stretch',\n },\n },\n})\n\ntype Props<T extends ElementType> = PropsWithChildren<\n Omit<VariantProps<typeof clusterClassNameGenerator>, 'rowGap' | 'columnGap'> & {\n as?: T\n gap?: Gap | SeparateGap\n }\n> &\n ComponentPropsWithoutRef<T>\n\nconst ActualCluster = <T extends ElementType = 'div'>(\n { as, gap = 0.5, inline = false, align, justify, className, ...rest }: Props<T>,\n ref: ForwardedRef<HTMLDivElement>,\n) => {\n const gaps = useMemo(() => {\n if (gap instanceof Object) {\n return gap\n }\n\n return {\n row: gap,\n column: gap,\n }\n }, [gap])\n\n const actualClassName = useMemo(\n () =>\n clusterClassNameGenerator({\n inline,\n rowGap: gaps.row,\n columnGap: gaps.column,\n align,\n justify,\n className,\n }),\n [inline, gaps.row, gaps.column, align, justify, className],\n )\n\n const Component = as || 'div'\n const Wrapper = useSectionWrapper(Component)\n const body = <Component {...rest} ref={ref} className={actualClassName} />\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n}\n\nexport const Cluster = genericsForwardRef(ActualCluster)\n"],"names":[],"mappings":";;;;;;;;;AAgBO;AACL;AACA;AACE;AACE;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACF;AACF;AAUD;AAIE;AACE;AACE;;;AAIA;AACA;;AAEJ;;;;;;;;AAWK;AAIL;AACA;AACA;;AAGE;;AAGF;AACF;;;"}
1
+ {"version":3,"file":"Cluster.js","sources":["../../../../src/components/Layout/Cluster/Cluster.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ElementType,\n type ForwardedRef,\n type PropsWithChildren,\n useMemo,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { genericsForwardRef } from '../../../libs/util'\nimport { useSectionWrapper } from '../../SectioningContent'\n\nimport type { Gap, SeparateGap } from '../../../types'\n\nexport const clusterClassNameGenerator = tv({\n base: 'shr-flex-wrap [&:empty]:shr-gap-0',\n variants: {\n inline: {\n true: 'shr-inline-flex',\n false: 'shr-flex',\n },\n rowGap: {\n // 動的生成も考えたが、tailwindcss が検知できないためベタ書きしている\n 0: 'shr-gap-y-0',\n 0.25: 'shr-gap-y-0.25',\n 0.5: 'shr-gap-y-0.5',\n 0.75: 'shr-gap-y-0.75',\n 1: 'shr-gap-y-1',\n 1.25: 'shr-gap-y-1.25',\n 1.5: 'shr-gap-y-1.5',\n 2: 'shr-gap-y-2',\n 2.5: 'shr-gap-y-2.5',\n 3: 'shr-gap-y-3',\n 3.5: 'shr-gap-y-3.5',\n 4: 'shr-gap-y-4',\n 8: 'shr-gap-y-8',\n X3S: 'shr-gap-y-0.25',\n XXS: 'shr-gap-y-0.5',\n XS: 'shr-gap-y-1',\n S: 'shr-gap-y-1.5',\n M: 'shr-gap-y-2',\n L: 'shr-gap-y-2.5',\n XL: 'shr-gap-y-3',\n XXL: 'shr-gap-y-3.5',\n X3L: 'shr-gap-y-4',\n } as { [key in Gap]: string },\n columnGap: {\n 0: 'shr-gap-x-0',\n 0.25: 'shr-gap-x-0.25',\n 0.5: 'shr-gap-x-0.5',\n 0.75: 'shr-gap-x-0.75',\n 1: 'shr-gap-x-1',\n 1.25: 'shr-gap-x-1.25',\n 1.5: 'shr-gap-x-1.5',\n 2: 'shr-gap-x-2',\n 2.5: 'shr-gap-x-2.5',\n 3: 'shr-gap-x-3',\n 3.5: 'shr-gap-x-3.5',\n 4: 'shr-gap-x-4',\n 8: 'shr-gap-x-8',\n X3S: 'shr-gap-x-0.25',\n XXS: 'shr-gap-x-0.5',\n XS: 'shr-gap-x-1',\n S: 'shr-gap-x-1.5',\n M: 'shr-gap-x-2',\n L: 'shr-gap-x-2.5',\n XL: 'shr-gap-x-3',\n XXL: 'shr-gap-x-3.5',\n X3L: 'shr-gap-x-4',\n } as { [key in Gap]: string },\n align: {\n start: 'shr-items-start',\n 'flex-start': 'shr-items-start',\n end: 'shr-items-end',\n 'flex-end': 'shr-items-end',\n center: 'shr-items-center',\n baseline: 'shr-items-baseline',\n stretch: 'shr-items-stretch',\n },\n justify: {\n normal: 'shr-justify-normal',\n start: 'shr-justify-start',\n 'flex-start': 'shr-justify-start',\n end: 'shr-justify-end',\n 'flex-end': 'shr-justify-end',\n center: 'shr-justify-center',\n 'space-between': 'shr-justify-between',\n 'space-around': 'shr-justify-around',\n 'space-evenly': 'shr-justify-evenly',\n stretch: 'shr-justify-stretch',\n },\n },\n})\n\ntype Props<T extends ElementType> = PropsWithChildren<\n Omit<VariantProps<typeof clusterClassNameGenerator>, 'rowGap' | 'columnGap'> & {\n as?: T\n gap?: Gap | SeparateGap\n }\n> &\n ComponentPropsWithoutRef<T>\n\nconst ActualCluster = <T extends ElementType = 'div'>(\n { as, gap = 0.5, inline = false, align, justify, className, ...rest }: Props<T>,\n ref: ForwardedRef<HTMLElement>,\n) => {\n const gaps = useMemo(() => {\n if (gap instanceof Object) {\n return gap\n }\n\n return {\n row: gap,\n column: gap,\n }\n }, [gap])\n\n const actualClassName = useMemo(\n () =>\n clusterClassNameGenerator({\n inline,\n rowGap: gaps.row,\n columnGap: gaps.column,\n align,\n justify,\n className,\n }),\n [inline, gaps.row, gaps.column, align, justify, className],\n )\n\n // eslint-disable-next-line smarthr/best-practice-for-no-unnecessary-variable -- Componentは useSectionWrapper と JSX の2箇所で使用されているため誤検知\n const Component = as || 'div'\n const Wrapper = useSectionWrapper(Component)\n // ポリモーフィックコンポーネント: asプロパティで要素型を動的に変更可能なため、\n // refの型を静的に決定できません。HTMLElementを基底型として使用し、\n // 実際の要素型との整合性はas anyで型アサーションします。\n const body = <Component {...rest} ref={ref as any} className={actualClassName} />\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n}\n\nexport const Cluster = genericsForwardRef(ActualCluster)\n"],"names":[],"mappings":";;;;;;;;;AAgBO;AACL;AACA;AACE;AACE;AACA;AACD;AACD;;AAEE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC2B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AACF;AACF;AAUD;AAIE;AACE;AACE;;;AAIA;AACA;;AAEJ;;;;;;;;AAWK;;AAKL;AACA;;;;AAIA;;AAGE;;AAGF;AACF;;;"}
@@ -11,12 +11,12 @@ require('../../../themes/createSpacing.cjs');
11
11
  require('../../../_virtual/index.cjs');
12
12
  require('../../../_virtual/index2.cjs');
13
13
  require('../../../themes/createColor.cjs');
14
+ require('../../../themes/createTextColor.cjs');
15
+ require('styled-components');
14
16
  require('../../../themes/createShadow/defaultShadow.cjs');
15
17
  require('../../../themes/createWidth.cjs');
16
18
  require('../../../themes/createBackgroundColor.cjs');
17
19
  require('../../../themes/createBorder.cjs');
18
- require('styled-components');
19
- require('../../../themes/createTextColor.cjs');
20
20
  require('../../../hooks/useTheme.cjs');
21
21
  var tailwind_padding = require('../../../tailwind/padding.cjs');
22
22
 
@@ -9,12 +9,12 @@ import '../../../themes/createSpacing.js';
9
9
  import '../../../_virtual/index.js';
10
10
  import '../../../_virtual/index2.js';
11
11
  import '../../../themes/createColor.js';
12
+ import '../../../themes/createTextColor.js';
13
+ import 'styled-components';
12
14
  import '../../../themes/createShadow/defaultShadow.js';
13
15
  import '../../../themes/createWidth.js';
14
16
  import '../../../themes/createBackgroundColor.js';
15
17
  import '../../../themes/createBorder.js';
16
- import 'styled-components';
17
- import '../../../themes/createTextColor.js';
18
18
  import '../../../hooks/useTheme.js';
19
19
  import { paddingInline, paddingBlock } from '../../../tailwind/padding.js';
20
20
 
@@ -4,7 +4,6 @@
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var React = require('react');
6
6
  var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.cjs');
7
- var libs_debounce = require('../../libs/debounce.cjs');
8
7
  require('../SectioningContent/SectioningContent.cjs');
9
8
  require('../SectioningContent/levelContext.cjs');
10
9
  var components_SectioningContent_useSectioningWrapper = require('../SectioningContent/useSectioningWrapper.cjs');
@@ -54,12 +53,8 @@ const classNameGenerator = index.tv({
54
53
  className: 'shr-overflow-scroll',
55
54
  },
56
55
  ],
57
- defaultVariants: {
58
- direction: 'vertical',
59
- styleType: 'auto',
60
- },
61
56
  });
62
- const Scroller = React.forwardRef(({ as: Component = 'div', direction, styleType, className, children, ...rest }, ref) => {
57
+ const Scroller = React.forwardRef(({ as: Component = 'div', direction = 'vertical', styleType = 'auto', className, children, ...rest }, ref) => {
63
58
  const wrapperRef = React.useRef(null);
64
59
  React.useImperativeHandle(ref, () => wrapperRef.current);
65
60
  const [tabIndex, setTabIndex] = React.useState(undefined);
@@ -68,10 +63,12 @@ const Scroller = React.forwardRef(({ as: Component = 'div', direction, styleType
68
63
  styleType,
69
64
  className,
70
65
  }), [direction, styleType, className]);
71
- const autoTabIndex = React.useCallback(() => {
72
- let nextTabIndex = undefined;
66
+ React.useEffect(() => {
73
67
  const refCurrent = wrapperRef.current;
74
- if (refCurrent) {
68
+ if (!refCurrent)
69
+ return;
70
+ const autoTabIndex = () => {
71
+ let nextTabIndex = undefined;
75
72
  switch (direction) {
76
73
  case 'vertical':
77
74
  nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined;
@@ -87,19 +84,15 @@ const Scroller = React.forwardRef(({ as: Component = 'div', direction, styleType
87
84
  : undefined;
88
85
  break;
89
86
  }
90
- }
91
- setTabIndex(nextTabIndex);
92
- }, [direction]);
93
- React.useEffect(() => {
87
+ setTabIndex(nextTabIndex);
88
+ };
94
89
  autoTabIndex();
95
- }, [children, autoTabIndex]);
96
- React.useEffect(() => {
97
- const debouncedAction = libs_debounce.debounce(autoTabIndex, 100);
98
- window.addEventListener('resize', debouncedAction);
90
+ const resizeObserver = new ResizeObserver(autoTabIndex);
91
+ resizeObserver.observe(refCurrent);
99
92
  return () => {
100
- window.removeEventListener('resize', debouncedAction);
93
+ resizeObserver.unobserve(refCurrent);
101
94
  };
102
- }, [autoTabIndex]);
95
+ }, [direction]);
103
96
  const Wrapper = components_SectioningContent_useSectioningWrapper.useSectionWrapper(Component);
104
97
  const body = (jsxRuntime.jsx(Component, { ...rest, ref: wrapperRef, className: actualClassName, tabIndex: tabIndex, children: children }));
105
98
  if (Wrapper) {
@@ -1 +1 @@
1
- {"version":3,"file":"Scroller.cjs","sources":["../../../src/components/Scroller/Scroller.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { debounce } from '../../libs/debounce'\nimport { useSectionWrapper } from '../SectioningContent'\n\ntype AbstractProps = PropsWithChildren<\n VariantProps<typeof classNameGenerator> & {\n as?: string | ComponentType<any>\n }\n>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'div'>, keyof AbstractProps | 'tabIndex'>\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-Scroller',\n variants: {\n direction: {\n horizontal: '',\n vertical: '',\n both: '',\n },\n styleType: {\n auto: '',\n scroll: '',\n },\n },\n compoundVariants: [\n {\n direction: 'vertical',\n styleType: 'auto',\n className: 'shr-overflow-y-auto shr-overflow-x-hidden',\n },\n {\n direction: 'horizontal',\n styleType: 'auto',\n className: 'shr-overflow-x-auto shr-overflow-y-hidden',\n },\n {\n direction: 'both',\n styleType: 'auto',\n className: 'shr-overflow-auto',\n },\n {\n direction: 'vertical',\n styleType: 'scroll',\n className: 'shr-overflow-x-hidden shr-overflow-y-scroll',\n },\n {\n direction: 'horizontal',\n styleType: 'scroll',\n className: 'shr-overflow-y-hidden shr-overflow-x-scroll',\n },\n {\n direction: 'both',\n styleType: 'scroll',\n className: 'shr-overflow-scroll',\n },\n ],\n defaultVariants: {\n direction: 'vertical',\n styleType: 'auto',\n },\n})\n\nexport const Scroller = forwardRef<HTMLDivElement, Props>(\n ({ as: Component = 'div', direction, styleType, className, children, ...rest }, ref) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => wrapperRef.current!)\n\n const [tabIndex, setTabIndex] = useState<0 | undefined>(undefined)\n\n const actualClassName = useMemo(\n () =>\n classNameGenerator({\n direction,\n styleType,\n className,\n }),\n [direction, styleType, className],\n )\n\n const autoTabIndex = useCallback(() => {\n let nextTabIndex: 0 | undefined = undefined\n const refCurrent = wrapperRef.current\n\n if (refCurrent) {\n switch (direction) {\n case 'vertical':\n nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined\n break\n case 'horizontal':\n nextTabIndex = refCurrent.scrollWidth > refCurrent.clientWidth ? 0 : undefined\n break\n case 'both':\n nextTabIndex =\n refCurrent.scrollHeight > refCurrent.clientHeight ||\n refCurrent.scrollWidth > refCurrent.clientWidth\n ? 0\n : undefined\n break\n }\n }\n\n setTabIndex(nextTabIndex)\n }, [direction])\n\n useEffect(() => {\n autoTabIndex()\n }, [children, autoTabIndex])\n\n useEffect(() => {\n const debouncedAction = debounce(autoTabIndex, 100)\n\n window.addEventListener('resize', debouncedAction)\n\n return () => {\n window.removeEventListener('resize', debouncedAction)\n }\n }, [autoTabIndex])\n\n const Wrapper = useSectionWrapper(Component)\n const body = (\n <Component {...rest} ref={wrapperRef} className={actualClassName} tabIndex={tabIndex}>\n {children}\n </Component>\n )\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n },\n)\n"],"names":[],"mappings":";;;;;;;;;;;AA0BA;AACE;AACA;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACD;AACF;AACD;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACF;AACD;AACE;AACA;AACD;AACF;AAEM;AAEH;;;;;;;;AAgBA;;AAEE;;;AAII;AACE;;AAEF;AACE;;AAEF;;AAEI;AACA;AACE;;;;;;AAOZ;;AAGE;AACF;;;AAKE;AAEA;AACE;AACF;AACF;AAEA;;;AAQE;;AAGF;AACF;;"}
1
+ {"version":3,"file":"Scroller.cjs","sources":["../../../src/components/Scroller/Scroller.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type PropsWithChildren,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useSectionWrapper } from '../SectioningContent'\n\ntype AbstractProps = PropsWithChildren<\n VariantProps<typeof classNameGenerator> & {\n as?: string | ComponentType<any>\n }\n>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'div'>, keyof AbstractProps | 'tabIndex'>\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-Scroller',\n variants: {\n direction: {\n horizontal: '',\n vertical: '',\n both: '',\n },\n styleType: {\n auto: '',\n scroll: '',\n },\n },\n compoundVariants: [\n {\n direction: 'vertical',\n styleType: 'auto',\n className: 'shr-overflow-y-auto shr-overflow-x-hidden',\n },\n {\n direction: 'horizontal',\n styleType: 'auto',\n className: 'shr-overflow-x-auto shr-overflow-y-hidden',\n },\n {\n direction: 'both',\n styleType: 'auto',\n className: 'shr-overflow-auto',\n },\n {\n direction: 'vertical',\n styleType: 'scroll',\n className: 'shr-overflow-x-hidden shr-overflow-y-scroll',\n },\n {\n direction: 'horizontal',\n styleType: 'scroll',\n className: 'shr-overflow-y-hidden shr-overflow-x-scroll',\n },\n {\n direction: 'both',\n styleType: 'scroll',\n className: 'shr-overflow-scroll',\n },\n ],\n})\n\nexport const Scroller = forwardRef<HTMLDivElement, Props>(\n (\n {\n as: Component = 'div',\n direction = 'vertical',\n styleType = 'auto',\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => wrapperRef.current!)\n\n const [tabIndex, setTabIndex] = useState<0 | undefined>(undefined)\n\n const actualClassName = useMemo(\n () =>\n classNameGenerator({\n direction,\n styleType,\n className,\n }),\n [direction, styleType, className],\n )\n\n useEffect(() => {\n const refCurrent = wrapperRef.current\n if (!refCurrent) return\n\n const autoTabIndex = () => {\n let nextTabIndex: 0 | undefined = undefined\n\n switch (direction) {\n case 'vertical':\n nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined\n break\n case 'horizontal':\n nextTabIndex = refCurrent.scrollWidth > refCurrent.clientWidth ? 0 : undefined\n break\n case 'both':\n nextTabIndex =\n refCurrent.scrollHeight > refCurrent.clientHeight ||\n refCurrent.scrollWidth > refCurrent.clientWidth\n ? 0\n : undefined\n break\n }\n\n setTabIndex(nextTabIndex)\n }\n\n autoTabIndex()\n\n const resizeObserver = new ResizeObserver(autoTabIndex)\n resizeObserver.observe(refCurrent)\n\n return () => {\n resizeObserver.unobserve(refCurrent)\n }\n }, [direction])\n\n const Wrapper = useSectionWrapper(Component)\n const body = (\n <Component {...rest} ref={wrapperRef} className={actualClassName} tabIndex={tabIndex}>\n {children}\n </Component>\n )\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n },\n)\n"],"names":[],"mappings":";;;;;;;;;;AAwBA;AACE;AACA;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACD;AACF;AACD;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACF;AACF;AAEM;AAYH;;;;;;;;;AAiBE;AACA;;;;;AAMI;AACE;;AAEF;AACE;;AAEF;;AAEI;AACA;AACE;;;;;AAMV;AAEA;AAEA;AACA;AAEA;AACE;AACF;AACF;AAEA;;;AAQE;;AAGF;AACF;;"}
@@ -1,8 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { forwardRef, useRef, useImperativeHandle, useState, useMemo, useCallback, useEffect } from 'react';
3
+ import { forwardRef, useRef, useImperativeHandle, useState, useMemo, useEffect } from 'react';
4
4
  import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.4.19_ts-node@10.9.2_@swc_core@1.15.17_@types_node@20.19.35_typescript@5.9.3__/vendor/tailwind-variants/dist/index.js';
5
- import { debounce } from '../../libs/debounce.js';
6
5
  import '../SectioningContent/SectioningContent.js';
7
6
  import '../SectioningContent/levelContext.js';
8
7
  import { useSectionWrapper } from '../SectioningContent/useSectioningWrapper.js';
@@ -52,12 +51,8 @@ const classNameGenerator = ce({
52
51
  className: 'shr-overflow-scroll',
53
52
  },
54
53
  ],
55
- defaultVariants: {
56
- direction: 'vertical',
57
- styleType: 'auto',
58
- },
59
54
  });
60
- const Scroller = forwardRef(({ as: Component = 'div', direction, styleType, className, children, ...rest }, ref) => {
55
+ const Scroller = forwardRef(({ as: Component = 'div', direction = 'vertical', styleType = 'auto', className, children, ...rest }, ref) => {
61
56
  const wrapperRef = useRef(null);
62
57
  useImperativeHandle(ref, () => wrapperRef.current);
63
58
  const [tabIndex, setTabIndex] = useState(undefined);
@@ -66,10 +61,12 @@ const Scroller = forwardRef(({ as: Component = 'div', direction, styleType, clas
66
61
  styleType,
67
62
  className,
68
63
  }), [direction, styleType, className]);
69
- const autoTabIndex = useCallback(() => {
70
- let nextTabIndex = undefined;
64
+ useEffect(() => {
71
65
  const refCurrent = wrapperRef.current;
72
- if (refCurrent) {
66
+ if (!refCurrent)
67
+ return;
68
+ const autoTabIndex = () => {
69
+ let nextTabIndex = undefined;
73
70
  switch (direction) {
74
71
  case 'vertical':
75
72
  nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined;
@@ -85,19 +82,15 @@ const Scroller = forwardRef(({ as: Component = 'div', direction, styleType, clas
85
82
  : undefined;
86
83
  break;
87
84
  }
88
- }
89
- setTabIndex(nextTabIndex);
90
- }, [direction]);
91
- useEffect(() => {
85
+ setTabIndex(nextTabIndex);
86
+ };
92
87
  autoTabIndex();
93
- }, [children, autoTabIndex]);
94
- useEffect(() => {
95
- const debouncedAction = debounce(autoTabIndex, 100);
96
- window.addEventListener('resize', debouncedAction);
88
+ const resizeObserver = new ResizeObserver(autoTabIndex);
89
+ resizeObserver.observe(refCurrent);
97
90
  return () => {
98
- window.removeEventListener('resize', debouncedAction);
91
+ resizeObserver.unobserve(refCurrent);
99
92
  };
100
- }, [autoTabIndex]);
93
+ }, [direction]);
101
94
  const Wrapper = useSectionWrapper(Component);
102
95
  const body = (jsx(Component, { ...rest, ref: wrapperRef, className: actualClassName, tabIndex: tabIndex, children: children }));
103
96
  if (Wrapper) {
@@ -1 +1 @@
1
- {"version":3,"file":"Scroller.js","sources":["../../../src/components/Scroller/Scroller.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { debounce } from '../../libs/debounce'\nimport { useSectionWrapper } from '../SectioningContent'\n\ntype AbstractProps = PropsWithChildren<\n VariantProps<typeof classNameGenerator> & {\n as?: string | ComponentType<any>\n }\n>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'div'>, keyof AbstractProps | 'tabIndex'>\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-Scroller',\n variants: {\n direction: {\n horizontal: '',\n vertical: '',\n both: '',\n },\n styleType: {\n auto: '',\n scroll: '',\n },\n },\n compoundVariants: [\n {\n direction: 'vertical',\n styleType: 'auto',\n className: 'shr-overflow-y-auto shr-overflow-x-hidden',\n },\n {\n direction: 'horizontal',\n styleType: 'auto',\n className: 'shr-overflow-x-auto shr-overflow-y-hidden',\n },\n {\n direction: 'both',\n styleType: 'auto',\n className: 'shr-overflow-auto',\n },\n {\n direction: 'vertical',\n styleType: 'scroll',\n className: 'shr-overflow-x-hidden shr-overflow-y-scroll',\n },\n {\n direction: 'horizontal',\n styleType: 'scroll',\n className: 'shr-overflow-y-hidden shr-overflow-x-scroll',\n },\n {\n direction: 'both',\n styleType: 'scroll',\n className: 'shr-overflow-scroll',\n },\n ],\n defaultVariants: {\n direction: 'vertical',\n styleType: 'auto',\n },\n})\n\nexport const Scroller = forwardRef<HTMLDivElement, Props>(\n ({ as: Component = 'div', direction, styleType, className, children, ...rest }, ref) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => wrapperRef.current!)\n\n const [tabIndex, setTabIndex] = useState<0 | undefined>(undefined)\n\n const actualClassName = useMemo(\n () =>\n classNameGenerator({\n direction,\n styleType,\n className,\n }),\n [direction, styleType, className],\n )\n\n const autoTabIndex = useCallback(() => {\n let nextTabIndex: 0 | undefined = undefined\n const refCurrent = wrapperRef.current\n\n if (refCurrent) {\n switch (direction) {\n case 'vertical':\n nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined\n break\n case 'horizontal':\n nextTabIndex = refCurrent.scrollWidth > refCurrent.clientWidth ? 0 : undefined\n break\n case 'both':\n nextTabIndex =\n refCurrent.scrollHeight > refCurrent.clientHeight ||\n refCurrent.scrollWidth > refCurrent.clientWidth\n ? 0\n : undefined\n break\n }\n }\n\n setTabIndex(nextTabIndex)\n }, [direction])\n\n useEffect(() => {\n autoTabIndex()\n }, [children, autoTabIndex])\n\n useEffect(() => {\n const debouncedAction = debounce(autoTabIndex, 100)\n\n window.addEventListener('resize', debouncedAction)\n\n return () => {\n window.removeEventListener('resize', debouncedAction)\n }\n }, [autoTabIndex])\n\n const Wrapper = useSectionWrapper(Component)\n const body = (\n <Component {...rest} ref={wrapperRef} className={actualClassName} tabIndex={tabIndex}>\n {children}\n </Component>\n )\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n },\n)\n"],"names":[],"mappings":";;;;;;;;;AA0BA;AACE;AACA;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACD;AACF;AACD;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACF;AACD;AACE;AACA;AACD;AACF;AAEM;AAEH;;;;;;;;AAgBA;;AAEE;;;AAII;AACE;;AAEF;AACE;;AAEF;;AAEI;AACA;AACE;;;;;;AAOZ;;AAGE;AACF;;;AAKE;AAEA;AACE;AACF;AACF;AAEA;;;AAQE;;AAGF;AACF;;"}
1
+ {"version":3,"file":"Scroller.js","sources":["../../../src/components/Scroller/Scroller.tsx"],"sourcesContent":["'use client'\n\nimport {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type PropsWithChildren,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { type VariantProps, tv } from 'tailwind-variants'\n\nimport { useSectionWrapper } from '../SectioningContent'\n\ntype AbstractProps = PropsWithChildren<\n VariantProps<typeof classNameGenerator> & {\n as?: string | ComponentType<any>\n }\n>\ntype Props = AbstractProps & Omit<ComponentPropsWithoutRef<'div'>, keyof AbstractProps | 'tabIndex'>\n\nconst classNameGenerator = tv({\n base: 'smarthr-ui-Scroller',\n variants: {\n direction: {\n horizontal: '',\n vertical: '',\n both: '',\n },\n styleType: {\n auto: '',\n scroll: '',\n },\n },\n compoundVariants: [\n {\n direction: 'vertical',\n styleType: 'auto',\n className: 'shr-overflow-y-auto shr-overflow-x-hidden',\n },\n {\n direction: 'horizontal',\n styleType: 'auto',\n className: 'shr-overflow-x-auto shr-overflow-y-hidden',\n },\n {\n direction: 'both',\n styleType: 'auto',\n className: 'shr-overflow-auto',\n },\n {\n direction: 'vertical',\n styleType: 'scroll',\n className: 'shr-overflow-x-hidden shr-overflow-y-scroll',\n },\n {\n direction: 'horizontal',\n styleType: 'scroll',\n className: 'shr-overflow-y-hidden shr-overflow-x-scroll',\n },\n {\n direction: 'both',\n styleType: 'scroll',\n className: 'shr-overflow-scroll',\n },\n ],\n})\n\nexport const Scroller = forwardRef<HTMLDivElement, Props>(\n (\n {\n as: Component = 'div',\n direction = 'vertical',\n styleType = 'auto',\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => wrapperRef.current!)\n\n const [tabIndex, setTabIndex] = useState<0 | undefined>(undefined)\n\n const actualClassName = useMemo(\n () =>\n classNameGenerator({\n direction,\n styleType,\n className,\n }),\n [direction, styleType, className],\n )\n\n useEffect(() => {\n const refCurrent = wrapperRef.current\n if (!refCurrent) return\n\n const autoTabIndex = () => {\n let nextTabIndex: 0 | undefined = undefined\n\n switch (direction) {\n case 'vertical':\n nextTabIndex = refCurrent.scrollHeight > refCurrent.clientHeight ? 0 : undefined\n break\n case 'horizontal':\n nextTabIndex = refCurrent.scrollWidth > refCurrent.clientWidth ? 0 : undefined\n break\n case 'both':\n nextTabIndex =\n refCurrent.scrollHeight > refCurrent.clientHeight ||\n refCurrent.scrollWidth > refCurrent.clientWidth\n ? 0\n : undefined\n break\n }\n\n setTabIndex(nextTabIndex)\n }\n\n autoTabIndex()\n\n const resizeObserver = new ResizeObserver(autoTabIndex)\n resizeObserver.observe(refCurrent)\n\n return () => {\n resizeObserver.unobserve(refCurrent)\n }\n }, [direction])\n\n const Wrapper = useSectionWrapper(Component)\n const body = (\n <Component {...rest} ref={wrapperRef} className={actualClassName} tabIndex={tabIndex}>\n {children}\n </Component>\n )\n\n if (Wrapper) {\n return <Wrapper>{body}</Wrapper>\n }\n\n return body\n },\n)\n"],"names":[],"mappings":";;;;;;;;AAwBA;AACE;AACA;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACD;AACF;AACD;AACE;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACD;AACF;AACF;AAEM;AAYH;;;;;;;;;AAiBE;AACA;;;;;AAMI;AACE;;AAEF;AACE;;AAEF;;AAEI;AACA;AACE;;;;;AAMV;AAEA;AAEA;AACA;AAEA;AACE;AACF;AACF;AAEA;;;AAQE;;AAGF;AACF;;"}
@@ -14,7 +14,7 @@ const classNameGenerator = index.tv({
14
14
  },
15
15
  });
16
16
  const TableReel = ({ className, children, tableWrapperRef, ...rest }) => {
17
- const { showShadow } = components_Table_useReelCells.useReelCells(children, tableWrapperRef);
17
+ const { showShadow } = components_Table_useReelCells.useReelCells(tableWrapperRef);
18
18
  const classNames = React.useMemo(() => {
19
19
  const { wrapper, inner } = classNameGenerator();
20
20
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"TableReel.cjs","sources":["../../../src/components/Table/TableReel.tsx"],"sourcesContent":["'use client'\n\nimport { type ComponentPropsWithRef, type FC, type PropsWithChildren, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { reelShadowClassNameGenerator } from './reelShadowStyle'\nimport { useReelCells } from './useReelCells'\n\ntype Props = PropsWithChildren &\n Omit<ComponentPropsWithRef<'div'>, keyof PropsWithChildren> & {\n tableWrapperRef: React.RefObject<HTMLDivElement>\n }\n\nconst classNameGenerator = tv({\n slots: {\n wrapper: ['smarthr-ui-TableReel', 'shr-relative'],\n inner: ['smarthr-ui-TableReel-inner', 'shr-relative'],\n },\n})\n\nexport const TableReel: FC<Props> = ({ className, children, tableWrapperRef, ...rest }) => {\n const { showShadow } = useReelCells(children, tableWrapperRef)\n\n const classNames = useMemo(() => {\n const { wrapper, inner } = classNameGenerator()\n\n return {\n wrapper: reelShadowClassNameGenerator({ showShadow, className: wrapper({ className }) }),\n inner: inner(),\n }\n }, [className, showShadow])\n\n return (\n <div className={classNames.wrapper}>\n <div {...rest} className={classNames.inner}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;AAaA;AACE;AACE;AACA;AACD;AACF;AAEM;;AAGL;;;AAII;;;AAGJ;;AASF;;"}
1
+ {"version":3,"file":"TableReel.cjs","sources":["../../../src/components/Table/TableReel.tsx"],"sourcesContent":["'use client'\n\nimport { type ComponentPropsWithRef, type FC, type PropsWithChildren, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { reelShadowClassNameGenerator } from './reelShadowStyle'\nimport { useReelCells } from './useReelCells'\n\ntype Props = PropsWithChildren &\n Omit<ComponentPropsWithRef<'div'>, keyof PropsWithChildren> & {\n tableWrapperRef: React.RefObject<HTMLDivElement>\n }\n\nconst classNameGenerator = tv({\n slots: {\n wrapper: ['smarthr-ui-TableReel', 'shr-relative'],\n inner: ['smarthr-ui-TableReel-inner', 'shr-relative'],\n },\n})\n\nexport const TableReel: FC<Props> = ({ className, children, tableWrapperRef, ...rest }) => {\n const { showShadow } = useReelCells(tableWrapperRef)\n\n const classNames = useMemo(() => {\n const { wrapper, inner } = classNameGenerator()\n\n return {\n wrapper: reelShadowClassNameGenerator({ showShadow, className: wrapper({ className }) }),\n inner: inner(),\n }\n }, [className, showShadow])\n\n return (\n <div className={classNames.wrapper}>\n <div {...rest} className={classNames.inner}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;AAaA;AACE;AACE;AACA;AACD;AACF;AAEM;;AAGL;;;AAII;;;AAGJ;;AASF;;"}
@@ -12,7 +12,7 @@ const classNameGenerator = ce({
12
12
  },
13
13
  });
14
14
  const TableReel = ({ className, children, tableWrapperRef, ...rest }) => {
15
- const { showShadow } = useReelCells(children, tableWrapperRef);
15
+ const { showShadow } = useReelCells(tableWrapperRef);
16
16
  const classNames = useMemo(() => {
17
17
  const { wrapper, inner } = classNameGenerator();
18
18
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"TableReel.js","sources":["../../../src/components/Table/TableReel.tsx"],"sourcesContent":["'use client'\n\nimport { type ComponentPropsWithRef, type FC, type PropsWithChildren, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { reelShadowClassNameGenerator } from './reelShadowStyle'\nimport { useReelCells } from './useReelCells'\n\ntype Props = PropsWithChildren &\n Omit<ComponentPropsWithRef<'div'>, keyof PropsWithChildren> & {\n tableWrapperRef: React.RefObject<HTMLDivElement>\n }\n\nconst classNameGenerator = tv({\n slots: {\n wrapper: ['smarthr-ui-TableReel', 'shr-relative'],\n inner: ['smarthr-ui-TableReel-inner', 'shr-relative'],\n },\n})\n\nexport const TableReel: FC<Props> = ({ className, children, tableWrapperRef, ...rest }) => {\n const { showShadow } = useReelCells(children, tableWrapperRef)\n\n const classNames = useMemo(() => {\n const { wrapper, inner } = classNameGenerator()\n\n return {\n wrapper: reelShadowClassNameGenerator({ showShadow, className: wrapper({ className }) }),\n inner: inner(),\n }\n }, [className, showShadow])\n\n return (\n <div className={classNames.wrapper}>\n <div {...rest} className={classNames.inner}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;AAaA;AACE;AACE;AACA;AACD;AACF;AAEM;;AAGL;;;AAII;;;AAGJ;;AASF;;"}
1
+ {"version":3,"file":"TableReel.js","sources":["../../../src/components/Table/TableReel.tsx"],"sourcesContent":["'use client'\n\nimport { type ComponentPropsWithRef, type FC, type PropsWithChildren, useMemo } from 'react'\nimport { tv } from 'tailwind-variants'\n\nimport { reelShadowClassNameGenerator } from './reelShadowStyle'\nimport { useReelCells } from './useReelCells'\n\ntype Props = PropsWithChildren &\n Omit<ComponentPropsWithRef<'div'>, keyof PropsWithChildren> & {\n tableWrapperRef: React.RefObject<HTMLDivElement>\n }\n\nconst classNameGenerator = tv({\n slots: {\n wrapper: ['smarthr-ui-TableReel', 'shr-relative'],\n inner: ['smarthr-ui-TableReel-inner', 'shr-relative'],\n },\n})\n\nexport const TableReel: FC<Props> = ({ className, children, tableWrapperRef, ...rest }) => {\n const { showShadow } = useReelCells(tableWrapperRef)\n\n const classNames = useMemo(() => {\n const { wrapper, inner } = classNameGenerator()\n\n return {\n wrapper: reelShadowClassNameGenerator({ showShadow, className: wrapper({ className }) }),\n inner: inner(),\n }\n }, [className, showShadow])\n\n return (\n <div className={classNames.wrapper}>\n <div {...rest} className={classNames.inner}>\n {children}\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;AAaA;AACE;AACE;AACA;AACD;AACF;AAEM;;AAGL;;;AAII;;;AAGJ;;AASF;;"}
@@ -7,14 +7,14 @@ var index = require('./../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindcss@3.
7
7
  require('../../themes/createSpacing.cjs');
8
8
  var themes_createFontSize = require('../../themes/createFontSize.cjs');
9
9
  require('../../themes/createColor.cjs');
10
- require('../../themes/createShadow/defaultShadow.cjs');
11
- require('../../themes/createWidth.cjs');
10
+ require('../../themes/createTextColor.cjs');
11
+ require('styled-components');
12
12
  require('../../_virtual/index.cjs');
13
13
  require('../../_virtual/index2.cjs');
14
+ require('../../themes/createShadow/defaultShadow.cjs');
15
+ require('../../themes/createWidth.cjs');
14
16
  require('../../themes/createBackgroundColor.cjs');
15
17
  require('../../themes/createBorder.cjs');
16
- require('styled-components');
17
- require('../../themes/createTextColor.cjs');
18
18
  var components_Scroller_Scroller = require('../Scroller/Scroller.cjs');
19
19
 
20
20
  const classNameGenerator = index.tv({
@@ -5,14 +5,14 @@ import { tv as ce } from './../../vendor/.pnpm/tailwind-variants@0.3.1_tailwindc
5
5
  import '../../themes/createSpacing.js';
6
6
  import { defaultHtmlFontSize } from '../../themes/createFontSize.js';
7
7
  import '../../themes/createColor.js';
8
- import '../../themes/createShadow/defaultShadow.js';
9
- import '../../themes/createWidth.js';
8
+ import '../../themes/createTextColor.js';
9
+ import 'styled-components';
10
10
  import '../../_virtual/index.js';
11
11
  import '../../_virtual/index2.js';
12
+ import '../../themes/createShadow/defaultShadow.js';
13
+ import '../../themes/createWidth.js';
12
14
  import '../../themes/createBackgroundColor.js';
13
15
  import '../../themes/createBorder.js';
14
- import 'styled-components';
15
- import '../../themes/createTextColor.js';
16
16
  import { Scroller } from '../Scroller/Scroller.js';
17
17
 
18
18
  const classNameGenerator = ce({
@@ -6,7 +6,7 @@ const TR_SELECTOR = 'table tr';
6
6
  const FIXED_LEFT_SELECTOR = '[data-fixed="left"]';
7
7
  const FIXED_RIGHT_SELECTOR = '[data-fixed="right"]';
8
8
  const HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`;
9
- const useReelCells = (children, tableWrapperRef) => {
9
+ const useReelCells = (tableWrapperRef) => {
10
10
  const [showShadow, setShowShadow] = React.useState(false);
11
11
  React.useEffect(() => {
12
12
  const wrapper = tableWrapperRef.current;
@@ -61,16 +61,22 @@ const useReelCells = (children, tableWrapperRef) => {
61
61
  };
62
62
  handleScroll();
63
63
  wrapper.addEventListener('scroll', handleScroll);
64
- const observer = new ResizeObserver(handleScroll);
65
- observer.observe(wrapper);
64
+ const resizeObserver = new ResizeObserver(handleScroll);
65
+ resizeObserver.observe(wrapper);
66
+ // HINT: Paginationと組み合わせた際などにテーブル構造の変更を検知して再生成
67
+ const mutationObserver = new MutationObserver(handleScroll);
68
+ mutationObserver.observe(wrapper, {
69
+ childList: true,
70
+ subtree: true,
71
+ });
66
72
  return () => {
67
73
  wrapper.removeEventListener('scroll', handleScroll);
68
- observer.unobserve(wrapper);
74
+ resizeObserver.unobserve(wrapper);
75
+ mutationObserver.disconnect();
69
76
  allClean();
70
77
  };
71
- // HINT: Paginationと組み合わせた際などに再生成したい
72
- }, [children, tableWrapperRef]);
73
- return { tableWrapperRef, showShadow };
78
+ }, [tableWrapperRef]);
79
+ return { showShadow };
74
80
  };
75
81
 
76
82
  exports.useReelCells = useReelCells;
@@ -1 +1 @@
1
- {"version":3,"file":"useReelCells.cjs","sources":["../../../src/components/Table/useReelCells.ts"],"sourcesContent":["import { type ReactNode, useEffect, useState } from 'react'\n\nconst TR_SELECTOR = 'table tr'\nconst FIXED_LEFT_SELECTOR = '[data-fixed=\"left\"]'\nconst FIXED_RIGHT_SELECTOR = '[data-fixed=\"right\"]'\n\nconst HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`\n\nexport const useReelCells = (\n children: ReactNode,\n tableWrapperRef: React.RefObject<HTMLDivElement>,\n) => {\n const [showShadow, setShowShadow] = useState(false)\n\n useEffect(() => {\n const wrapper = tableWrapperRef.current\n\n if (!wrapper) {\n return\n }\n\n let cellCleans: Array<() => void> = []\n const allClean = () => {\n cellCleans.forEach((clean) => clean())\n cellCleans = []\n }\n\n const handleScroll = () => {\n if (!wrapper.querySelector(HAS_FIXED_SELECTOR)) {\n return\n }\n\n let isVisible = false\n const commonAction = (\n cells: HTMLElement[] | NodeListOf<HTMLElement>,\n direction: 'left' | 'right',\n visible: boolean,\n ) => {\n allClean()\n\n const action = () => {\n let position = 0\n\n cells.forEach((cell, index) => {\n if (cell.classList.toggle('fixed', visible)) {\n isVisible = true\n cell.style[direction] = `${position}px`\n cell.style.zIndex = (index + 1).toString()\n\n position += cell.offsetWidth\n }\n })\n }\n\n action()\n const observer = new ResizeObserver(action)\n\n cells.forEach((cell) => {\n observer.observe(cell)\n })\n\n cellCleans.push(() => {\n cells.forEach((cell) => {\n observer.unobserve(cell)\n })\n })\n }\n\n wrapper.querySelectorAll<HTMLElement>(TR_SELECTOR).forEach((tr) => {\n const leftCells = tr.querySelectorAll<HTMLElement>(FIXED_LEFT_SELECTOR)\n const rightCells = Array.from(\n tr.querySelectorAll<HTMLElement>(FIXED_RIGHT_SELECTOR),\n ).reverse()\n\n if (leftCells.length > 0) {\n commonAction(leftCells, 'left' as const, wrapper.scrollLeft > 0)\n }\n\n if (rightCells.length > 0) {\n commonAction(\n rightCells,\n 'right' as const,\n wrapper.scrollLeft < wrapper.scrollWidth - wrapper.clientWidth - 1,\n )\n }\n })\n\n setShowShadow(isVisible)\n }\n\n handleScroll()\n wrapper.addEventListener('scroll', handleScroll)\n\n const observer = new ResizeObserver(handleScroll)\n\n observer.observe(wrapper)\n\n return () => {\n wrapper.removeEventListener('scroll', handleScroll)\n observer.unobserve(wrapper)\n allClean()\n }\n // HINT: Paginationと組み合わせた際などに再生成したい\n }, [children, tableWrapperRef])\n\n return { tableWrapperRef, showShadow }\n}\n"],"names":["useState","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useReelCells.cjs","sources":["../../../src/components/Table/useReelCells.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nconst TR_SELECTOR = 'table tr'\nconst FIXED_LEFT_SELECTOR = '[data-fixed=\"left\"]'\nconst FIXED_RIGHT_SELECTOR = '[data-fixed=\"right\"]'\n\nconst HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`\n\nexport const useReelCells = (tableWrapperRef: React.RefObject<HTMLDivElement>) => {\n const [showShadow, setShowShadow] = useState(false)\n\n useEffect(() => {\n const wrapper = tableWrapperRef.current\n\n if (!wrapper) {\n return\n }\n\n let cellCleans: Array<() => void> = []\n const allClean = () => {\n cellCleans.forEach((clean) => clean())\n cellCleans = []\n }\n\n const handleScroll = () => {\n if (!wrapper.querySelector(HAS_FIXED_SELECTOR)) {\n return\n }\n\n let isVisible = false\n const commonAction = (\n cells: HTMLElement[] | NodeListOf<HTMLElement>,\n direction: 'left' | 'right',\n visible: boolean,\n ) => {\n allClean()\n\n const action = () => {\n let position = 0\n\n cells.forEach((cell, index) => {\n if (cell.classList.toggle('fixed', visible)) {\n isVisible = true\n cell.style[direction] = `${position}px`\n cell.style.zIndex = (index + 1).toString()\n\n position += cell.offsetWidth\n }\n })\n }\n\n action()\n const observer = new ResizeObserver(action)\n\n cells.forEach((cell) => {\n observer.observe(cell)\n })\n\n cellCleans.push(() => {\n cells.forEach((cell) => {\n observer.unobserve(cell)\n })\n })\n }\n\n wrapper.querySelectorAll<HTMLElement>(TR_SELECTOR).forEach((tr) => {\n const leftCells = tr.querySelectorAll<HTMLElement>(FIXED_LEFT_SELECTOR)\n const rightCells = Array.from(\n tr.querySelectorAll<HTMLElement>(FIXED_RIGHT_SELECTOR),\n ).reverse()\n\n if (leftCells.length > 0) {\n commonAction(leftCells, 'left' as const, wrapper.scrollLeft > 0)\n }\n\n if (rightCells.length > 0) {\n commonAction(\n rightCells,\n 'right' as const,\n wrapper.scrollLeft < wrapper.scrollWidth - wrapper.clientWidth - 1,\n )\n }\n })\n\n setShowShadow(isVisible)\n }\n\n handleScroll()\n wrapper.addEventListener('scroll', handleScroll)\n\n const resizeObserver = new ResizeObserver(handleScroll)\n resizeObserver.observe(wrapper)\n\n // HINT: Paginationと組み合わせた際などにテーブル構造の変更を検知して再生成\n const mutationObserver = new MutationObserver(handleScroll)\n mutationObserver.observe(wrapper, {\n childList: true,\n subtree: true,\n })\n\n return () => {\n wrapper.removeEventListener('scroll', handleScroll)\n resizeObserver.unobserve(wrapper)\n mutationObserver.disconnect()\n allClean()\n }\n }, [tableWrapperRef])\n\n return { showShadow }\n}\n"],"names":["useState","useEffect"],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- import { type ReactNode } from 'react';
2
- export declare const useReelCells: (children: ReactNode, tableWrapperRef: React.RefObject<HTMLDivElement>) => {
3
- tableWrapperRef: import("react").RefObject<HTMLDivElement>;
1
+ export declare const useReelCells: (tableWrapperRef: React.RefObject<HTMLDivElement>) => {
4
2
  showShadow: boolean;
5
3
  };
@@ -4,7 +4,7 @@ const TR_SELECTOR = 'table tr';
4
4
  const FIXED_LEFT_SELECTOR = '[data-fixed="left"]';
5
5
  const FIXED_RIGHT_SELECTOR = '[data-fixed="right"]';
6
6
  const HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`;
7
- const useReelCells = (children, tableWrapperRef) => {
7
+ const useReelCells = (tableWrapperRef) => {
8
8
  const [showShadow, setShowShadow] = useState(false);
9
9
  useEffect(() => {
10
10
  const wrapper = tableWrapperRef.current;
@@ -59,16 +59,22 @@ const useReelCells = (children, tableWrapperRef) => {
59
59
  };
60
60
  handleScroll();
61
61
  wrapper.addEventListener('scroll', handleScroll);
62
- const observer = new ResizeObserver(handleScroll);
63
- observer.observe(wrapper);
62
+ const resizeObserver = new ResizeObserver(handleScroll);
63
+ resizeObserver.observe(wrapper);
64
+ // HINT: Paginationと組み合わせた際などにテーブル構造の変更を検知して再生成
65
+ const mutationObserver = new MutationObserver(handleScroll);
66
+ mutationObserver.observe(wrapper, {
67
+ childList: true,
68
+ subtree: true,
69
+ });
64
70
  return () => {
65
71
  wrapper.removeEventListener('scroll', handleScroll);
66
- observer.unobserve(wrapper);
72
+ resizeObserver.unobserve(wrapper);
73
+ mutationObserver.disconnect();
67
74
  allClean();
68
75
  };
69
- // HINT: Paginationと組み合わせた際などに再生成したい
70
- }, [children, tableWrapperRef]);
71
- return { tableWrapperRef, showShadow };
76
+ }, [tableWrapperRef]);
77
+ return { showShadow };
72
78
  };
73
79
 
74
80
  export { useReelCells };
@@ -1 +1 @@
1
- {"version":3,"file":"useReelCells.js","sources":["../../../src/components/Table/useReelCells.ts"],"sourcesContent":["import { type ReactNode, useEffect, useState } from 'react'\n\nconst TR_SELECTOR = 'table tr'\nconst FIXED_LEFT_SELECTOR = '[data-fixed=\"left\"]'\nconst FIXED_RIGHT_SELECTOR = '[data-fixed=\"right\"]'\n\nconst HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`\n\nexport const useReelCells = (\n children: ReactNode,\n tableWrapperRef: React.RefObject<HTMLDivElement>,\n) => {\n const [showShadow, setShowShadow] = useState(false)\n\n useEffect(() => {\n const wrapper = tableWrapperRef.current\n\n if (!wrapper) {\n return\n }\n\n let cellCleans: Array<() => void> = []\n const allClean = () => {\n cellCleans.forEach((clean) => clean())\n cellCleans = []\n }\n\n const handleScroll = () => {\n if (!wrapper.querySelector(HAS_FIXED_SELECTOR)) {\n return\n }\n\n let isVisible = false\n const commonAction = (\n cells: HTMLElement[] | NodeListOf<HTMLElement>,\n direction: 'left' | 'right',\n visible: boolean,\n ) => {\n allClean()\n\n const action = () => {\n let position = 0\n\n cells.forEach((cell, index) => {\n if (cell.classList.toggle('fixed', visible)) {\n isVisible = true\n cell.style[direction] = `${position}px`\n cell.style.zIndex = (index + 1).toString()\n\n position += cell.offsetWidth\n }\n })\n }\n\n action()\n const observer = new ResizeObserver(action)\n\n cells.forEach((cell) => {\n observer.observe(cell)\n })\n\n cellCleans.push(() => {\n cells.forEach((cell) => {\n observer.unobserve(cell)\n })\n })\n }\n\n wrapper.querySelectorAll<HTMLElement>(TR_SELECTOR).forEach((tr) => {\n const leftCells = tr.querySelectorAll<HTMLElement>(FIXED_LEFT_SELECTOR)\n const rightCells = Array.from(\n tr.querySelectorAll<HTMLElement>(FIXED_RIGHT_SELECTOR),\n ).reverse()\n\n if (leftCells.length > 0) {\n commonAction(leftCells, 'left' as const, wrapper.scrollLeft > 0)\n }\n\n if (rightCells.length > 0) {\n commonAction(\n rightCells,\n 'right' as const,\n wrapper.scrollLeft < wrapper.scrollWidth - wrapper.clientWidth - 1,\n )\n }\n })\n\n setShowShadow(isVisible)\n }\n\n handleScroll()\n wrapper.addEventListener('scroll', handleScroll)\n\n const observer = new ResizeObserver(handleScroll)\n\n observer.observe(wrapper)\n\n return () => {\n wrapper.removeEventListener('scroll', handleScroll)\n observer.unobserve(wrapper)\n allClean()\n }\n // HINT: Paginationと組み合わせた際などに再生成したい\n }, [children, tableWrapperRef])\n\n return { tableWrapperRef, showShadow }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useReelCells.js","sources":["../../../src/components/Table/useReelCells.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nconst TR_SELECTOR = 'table tr'\nconst FIXED_LEFT_SELECTOR = '[data-fixed=\"left\"]'\nconst FIXED_RIGHT_SELECTOR = '[data-fixed=\"right\"]'\n\nconst HAS_FIXED_SELECTOR = `${TR_SELECTOR} ${FIXED_LEFT_SELECTOR},${TR_SELECTOR} ${FIXED_RIGHT_SELECTOR}`\n\nexport const useReelCells = (tableWrapperRef: React.RefObject<HTMLDivElement>) => {\n const [showShadow, setShowShadow] = useState(false)\n\n useEffect(() => {\n const wrapper = tableWrapperRef.current\n\n if (!wrapper) {\n return\n }\n\n let cellCleans: Array<() => void> = []\n const allClean = () => {\n cellCleans.forEach((clean) => clean())\n cellCleans = []\n }\n\n const handleScroll = () => {\n if (!wrapper.querySelector(HAS_FIXED_SELECTOR)) {\n return\n }\n\n let isVisible = false\n const commonAction = (\n cells: HTMLElement[] | NodeListOf<HTMLElement>,\n direction: 'left' | 'right',\n visible: boolean,\n ) => {\n allClean()\n\n const action = () => {\n let position = 0\n\n cells.forEach((cell, index) => {\n if (cell.classList.toggle('fixed', visible)) {\n isVisible = true\n cell.style[direction] = `${position}px`\n cell.style.zIndex = (index + 1).toString()\n\n position += cell.offsetWidth\n }\n })\n }\n\n action()\n const observer = new ResizeObserver(action)\n\n cells.forEach((cell) => {\n observer.observe(cell)\n })\n\n cellCleans.push(() => {\n cells.forEach((cell) => {\n observer.unobserve(cell)\n })\n })\n }\n\n wrapper.querySelectorAll<HTMLElement>(TR_SELECTOR).forEach((tr) => {\n const leftCells = tr.querySelectorAll<HTMLElement>(FIXED_LEFT_SELECTOR)\n const rightCells = Array.from(\n tr.querySelectorAll<HTMLElement>(FIXED_RIGHT_SELECTOR),\n ).reverse()\n\n if (leftCells.length > 0) {\n commonAction(leftCells, 'left' as const, wrapper.scrollLeft > 0)\n }\n\n if (rightCells.length > 0) {\n commonAction(\n rightCells,\n 'right' as const,\n wrapper.scrollLeft < wrapper.scrollWidth - wrapper.clientWidth - 1,\n )\n }\n })\n\n setShowShadow(isVisible)\n }\n\n handleScroll()\n wrapper.addEventListener('scroll', handleScroll)\n\n const resizeObserver = new ResizeObserver(handleScroll)\n resizeObserver.observe(wrapper)\n\n // HINT: Paginationと組み合わせた際などにテーブル構造の変更を検知して再生成\n const mutationObserver = new MutationObserver(handleScroll)\n mutationObserver.observe(wrapper, {\n childList: true,\n subtree: true,\n })\n\n return () => {\n wrapper.removeEventListener('scroll', handleScroll)\n resizeObserver.unobserve(wrapper)\n mutationObserver.disconnect()\n allClean()\n }\n }, [tableWrapperRef])\n\n return { showShadow }\n}\n"],"names":[],"mappings":"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"}
@@ -153,7 +153,9 @@ const ActualText = ({ emphasis, styleType, icon: orgIcon, weight = emphasis ? 'b
153
153
  className,
154
154
  });
155
155
  }, [size, weight, italic, color, leading, whiteSpace, maxLines, className, styleType]);
156
- const wrapperClassName = React.useMemo(() => (icon ? wrapperClassNameGenerator({ gap: icon.gap || 0.25 }) : ''), [icon]);
156
+ const hasIcon = !!icon;
157
+ const iconGap = icon?.gap;
158
+ const wrapperClassName = React.useMemo(() => (hasIcon ? wrapperClassNameGenerator({ gap: iconGap || 0.25 }) : ''), [hasIcon, iconGap]);
157
159
  return (jsxRuntime.jsx(Component, { ...rest, className: actualClassName, children: icon ? (jsxRuntime.jsxs("span", { className: wrapperClassName, children: [icon.prefix, children, icon.suffix] })) : (children) }));
158
160
  };
159
161
  const Text = React.memo(ActualText);