@tcn/ui 0.16.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/card.css +1 -0
  2. package/dist/column.css +1 -1
  3. package/dist/containers.css +1 -1
  4. package/dist/containers.module-BmICKsOK.js +5 -0
  5. package/dist/containers.module-BmICKsOK.js.map +1 -0
  6. package/dist/form/field/field.js +11 -8
  7. package/dist/form/field/field.js.map +1 -1
  8. package/dist/inputs/color_input/color_picker.js +5 -2
  9. package/dist/inputs/color_input/color_picker.js.map +1 -1
  10. package/dist/inputs/combo_box/combo_box.js +18 -15
  11. package/dist/inputs/combo_box/combo_box.js.map +1 -1
  12. package/dist/inputs/date_picker/date_picker.js +13 -10
  13. package/dist/inputs/date_picker/date_picker.js.map +1 -1
  14. package/dist/inputs/date_picker/date_picker_input.js +20 -17
  15. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  16. package/dist/inputs/date_picker/date_picker_year_selector.js +5 -2
  17. package/dist/inputs/date_picker/date_picker_year_selector.js.map +1 -1
  18. package/dist/inputs/mask_input/key_capture_input.js +26 -23
  19. package/dist/inputs/mask_input/key_capture_input.js.map +1 -1
  20. package/dist/inputs/mask_input/mask_input.js +5 -2
  21. package/dist/inputs/mask_input/mask_input.js.map +1 -1
  22. package/dist/inputs/multiselect/multiselect.js +22 -19
  23. package/dist/inputs/multiselect/multiselect.js.map +1 -1
  24. package/dist/inputs/phone_number_input/phone_number_context.js +7 -4
  25. package/dist/inputs/phone_number_input/phone_number_context.js.map +1 -1
  26. package/dist/inputs/select/select.js +5 -2
  27. package/dist/inputs/select/select.js.map +1 -1
  28. package/dist/inputs/slider/slider.js +19 -16
  29. package/dist/inputs/slider/slider.js.map +1 -1
  30. package/dist/inputs/suggestions/suggestion_list.js +5 -2
  31. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  32. package/dist/inputs/switch/switch.js +18 -15
  33. package/dist/inputs/switch/switch.js.map +1 -1
  34. package/dist/inputs/unit_input/unit_input.js +15 -12
  35. package/dist/inputs/unit_input/unit_input.js.map +1 -1
  36. package/dist/layouts/containers/columns/columns.d.ts +6 -1
  37. package/dist/layouts/containers/columns/columns.d.ts.map +1 -1
  38. package/dist/layouts/containers/columns/columns.js +30 -7
  39. package/dist/layouts/containers/columns/columns.js.map +1 -1
  40. package/dist/layouts/containers/rail.d.ts +2 -5
  41. package/dist/layouts/containers/rail.d.ts.map +1 -1
  42. package/dist/layouts/containers/rail.js +17 -55
  43. package/dist/layouts/containers/rail.js.map +1 -1
  44. package/dist/layouts/containers/rows/index.d.ts +3 -0
  45. package/dist/layouts/containers/rows/index.d.ts.map +1 -0
  46. package/dist/layouts/containers/rows/index.js +7 -0
  47. package/dist/layouts/containers/rows/index.js.map +1 -0
  48. package/dist/layouts/containers/rows/row.d.ts +6 -0
  49. package/dist/layouts/containers/rows/row.d.ts.map +1 -0
  50. package/dist/layouts/containers/rows/row.js +20 -0
  51. package/dist/layouts/containers/rows/row.js.map +1 -0
  52. package/dist/layouts/containers/rows/rows.d.ts +11 -0
  53. package/dist/layouts/containers/rows/rows.d.ts.map +1 -0
  54. package/dist/layouts/containers/rows/rows.js +34 -0
  55. package/dist/layouts/containers/rows/rows.js.map +1 -0
  56. package/dist/layouts/containers/scaffold.d.ts +2 -5
  57. package/dist/layouts/containers/scaffold.d.ts.map +1 -1
  58. package/dist/layouts/containers/scaffold.js +17 -55
  59. package/dist/layouts/containers/scaffold.js.map +1 -1
  60. package/dist/layouts/index.d.ts +2 -0
  61. package/dist/layouts/index.d.ts.map +1 -1
  62. package/dist/layouts/index.js +26 -22
  63. package/dist/layouts/index.js.map +1 -1
  64. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js +5 -2
  65. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js.map +1 -1
  66. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js +5 -2
  67. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js.map +1 -1
  68. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js +8 -5
  69. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js.map +1 -1
  70. package/dist/navigation/tabs/state/link/tab_link.js +9 -6
  71. package/dist/navigation/tabs/state/link/tab_link.js.map +1 -1
  72. package/dist/overlay/menu/menu.js +3 -0
  73. package/dist/overlay/menu/menu.js.map +1 -1
  74. package/dist/overlay/popper/context_popper.js +8 -5
  75. package/dist/overlay/popper/context_popper.js.map +1 -1
  76. package/dist/overlay/popper/element_popper.js +9 -6
  77. package/dist/overlay/popper/element_popper.js.map +1 -1
  78. package/dist/overlay/popper/legacy/popper.js +13 -10
  79. package/dist/overlay/popper/legacy/popper.js.map +1 -1
  80. package/dist/overlay/popper/preview_popper.js +10 -7
  81. package/dist/overlay/popper/preview_popper.js.map +1 -1
  82. package/dist/overlay/tethered/tethered.js +11 -8
  83. package/dist/overlay/tethered/tethered.js.map +1 -1
  84. package/dist/resizable.css +1 -0
  85. package/dist/resizable.module-I6iyBAvM.js +5 -0
  86. package/dist/resizable.module-I6iyBAvM.js.map +1 -0
  87. package/dist/resize_handle.css +1 -0
  88. package/dist/row.css +1 -0
  89. package/dist/stacks/box/box.js +12 -9
  90. package/dist/stacks/box/box.js.map +1 -1
  91. package/dist/stacks/box/detect_resize_bounds.d.ts +1 -0
  92. package/dist/stacks/box/detect_resize_bounds.d.ts.map +1 -1
  93. package/dist/stacks/box/detect_resize_bounds.js +22 -20
  94. package/dist/stacks/box/detect_resize_bounds.js.map +1 -1
  95. package/dist/stacks/h_collapsible_box.js +17 -14
  96. package/dist/stacks/h_collapsible_box.js.map +1 -1
  97. package/dist/stacks/v_collapsible_box.js +19 -16
  98. package/dist/stacks/v_collapsible_box.js.map +1 -1
  99. package/dist/surfaces/card/card.d.ts.map +1 -1
  100. package/dist/surfaces/card/card.js +14 -6
  101. package/dist/surfaces/card/card.js.map +1 -1
  102. package/dist/surfaces/pop_confirm/pop_confirm.js +4 -2
  103. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -1
  104. package/dist/test-setup.d.ts +2 -0
  105. package/dist/test-setup.d.ts.map +1 -0
  106. package/dist/test-setup.js +10 -0
  107. package/dist/test-setup.js.map +1 -0
  108. package/dist/themes/theme.d.ts.map +1 -1
  109. package/dist/themes/theme.js +17 -22
  110. package/dist/themes/theme.js.map +1 -1
  111. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  112. package/dist/themes/themes/ergo/ergo_theme.js +201 -21
  113. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  114. package/dist/utils/index.d.ts +1 -0
  115. package/dist/utils/index.d.ts.map +1 -1
  116. package/dist/utils/index.js +39 -26
  117. package/dist/utils/index.js.map +1 -1
  118. package/dist/utils/resize/context.d.ts +4 -0
  119. package/dist/utils/resize/context.d.ts.map +1 -0
  120. package/dist/utils/resize/context.js +10 -0
  121. package/dist/utils/resize/context.js.map +1 -0
  122. package/dist/utils/resize/handle_config.d.ts +32 -0
  123. package/dist/utils/resize/handle_config.d.ts.map +1 -0
  124. package/dist/utils/resize/handle_config.js +85 -0
  125. package/dist/utils/resize/handle_config.js.map +1 -0
  126. package/dist/utils/resize/index.d.ts +10 -0
  127. package/dist/utils/resize/index.d.ts.map +1 -0
  128. package/dist/utils/resize/index.js +16 -0
  129. package/dist/utils/resize/index.js.map +1 -0
  130. package/dist/utils/resize/resizable.d.ts +11 -0
  131. package/dist/utils/resize/resizable.d.ts.map +1 -0
  132. package/dist/utils/resize/resizable.js +52 -0
  133. package/dist/utils/resize/resizable.js.map +1 -0
  134. package/dist/utils/resize/resize_handle.d.ts +7 -0
  135. package/dist/utils/resize/resize_handle.d.ts.map +1 -0
  136. package/dist/utils/resize/resize_handle.js +100 -0
  137. package/dist/utils/resize/resize_handle.js.map +1 -0
  138. package/dist/utils/resize/resize_strategy.d.ts +47 -0
  139. package/dist/utils/resize/resize_strategy.d.ts.map +1 -0
  140. package/dist/utils/resize/resize_strategy.js +108 -0
  141. package/dist/utils/resize/resize_strategy.js.map +1 -0
  142. package/dist/utils/resize/types.d.ts +28 -0
  143. package/dist/utils/resize/types.d.ts.map +1 -0
  144. package/dist/utils/resize/types.js +2 -0
  145. package/dist/utils/resize/types.js.map +1 -0
  146. package/package.json +3 -3
  147. package/src/layouts/__stories__/columns.stories.tsx +31 -0
  148. package/src/layouts/__stories__/composed.stories.tsx +77 -8
  149. package/src/layouts/__stories__/rows.stories.tsx +77 -0
  150. package/src/layouts/__stories__/utils.tsx +2 -84
  151. package/src/layouts/containers/columns/column.module.css +3 -2
  152. package/src/layouts/containers/columns/columns.tsx +29 -3
  153. package/src/layouts/containers/containers.module.css +27 -29
  154. package/src/layouts/containers/rail.tsx +9 -51
  155. package/src/layouts/containers/rows/index.ts +2 -0
  156. package/src/layouts/containers/rows/row.module.css +15 -0
  157. package/src/layouts/containers/rows/row.tsx +22 -0
  158. package/src/layouts/containers/rows/rows.tsx +42 -0
  159. package/src/layouts/containers/scaffold.tsx +9 -49
  160. package/src/layouts/index.ts +2 -0
  161. package/src/stacks/box/detect_resize_bounds.ts +5 -1
  162. package/src/surfaces/card/card.module.css +5 -0
  163. package/src/surfaces/card/card.stories.tsx +66 -8
  164. package/src/surfaces/card/card.tsx +6 -2
  165. package/src/surfaces/page/page.stories.tsx +84 -4
  166. package/src/surfaces/panel/__stories__/panel.stories.tsx +84 -9
  167. package/src/test-setup.ts +11 -0
  168. package/src/themes/theme.tsx +6 -16
  169. package/src/themes/themes/ergo/ergo_theme.css +199 -19
  170. package/src/utils/index.ts +2 -0
  171. package/src/utils/resize/__stories__/resizable.stories.tsx +214 -0
  172. package/src/utils/resize/__stories__/resizable_stories.module.css +47 -0
  173. package/src/utils/resize/__tests__/handle_config.test.ts +269 -0
  174. package/src/utils/resize/__tests__/resize_strategy.test.ts +163 -0
  175. package/src/utils/resize/context.ts +9 -0
  176. package/src/utils/resize/handle_config.ts +142 -0
  177. package/src/utils/resize/index.ts +37 -0
  178. package/src/utils/resize/resizable.module.css +5 -0
  179. package/src/utils/resize/resizable.tsx +97 -0
  180. package/src/utils/resize/resize_handle.module.css +146 -0
  181. package/src/utils/resize/resize_handle.tsx +165 -0
  182. package/src/utils/resize/resize_strategy.ts +190 -0
  183. package/src/utils/resize/types.ts +64 -0
  184. package/dist/containers.module-DlGySre0.js +0 -5
  185. package/dist/containers.module-DlGySre0.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"box.js","sources":["../../../src/stacks/box/box.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { CSSProperties, HTMLAttributes, useRef } from 'react';\nimport { useForkRef } from '../../utils/index.js';\nimport styles from '../stack.module.css';\nimport { isCustomSizeProp } from '../utils/isCustomSizeProp.js';\nimport { removeUndefinedProperties } from '../utils/remove_undefined_properties.js';\nimport { BottomResizeHandle } from './bottom_resize_handle.js';\nimport { EndResizeHandle } from './end_resize_handle.js';\nimport { HandleProps } from './handle_props.js';\nimport { LeftResizeHandle } from './left_resize_handle.js';\nimport { RightResizeHandle } from './right_resize_handle.js';\nimport { StartResizeHandle } from './start_resize_handle.js';\nimport { TopResizeHandle } from './top_resize_handle.js';\nimport type {\n OnHeightResize,\n OnHeightResizeEnd,\n OnWidthResize,\n OnWidthResizeEnd,\n} from './types.js';\n\nexport interface BoxProps<T extends HTMLElement = HTMLElement> extends HTMLAttributes<T> {\n as?: string;\n style?: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n width?: 'default' | 'flex' | 'auto' | string | number;\n minWidth?: CSSProperties['minWidth'];\n maxWidth?: CSSProperties['maxWidth'];\n height?: 'default' | 'flex' | 'auto' | string | number;\n minHeight?: CSSProperties['minHeight'];\n maxHeight?: CSSProperties['maxHeight'];\n zIndex?: number;\n padding?: CSSProperties['padding'];\n paddingInline?: CSSProperties['paddingInline'];\n paddingBlock?: CSSProperties['paddingBlock'];\n margin?: CSSProperties['margin'];\n marginBlock?: CSSProperties['marginBlock'];\n marginInline?: CSSProperties['marginInline'];\n marginInlineStart?: CSSProperties['marginInlineStart'];\n marginInlineEnd?: CSSProperties['marginInlineEnd'];\n marginTop?: CSSProperties['marginTop'];\n marginBottom?: CSSProperties['marginBottom'];\n overflow?: React.CSSProperties['overflow'];\n overflowX?: React.CSSProperties['overflowX'];\n overflowY?: React.CSSProperties['overflowY'];\n enableResizeOnTop?: boolean;\n enableResizeOnEnd?: boolean;\n enableResizeOnBottom?: boolean;\n enableResizeOnStart?: boolean;\n enableResizeOnLeft?: boolean;\n enableResizeOnRight?: boolean;\n horizontalHandleProps?: HandleProps;\n verticalHandleProps?: HandleProps;\n onWidthResize?: OnWidthResize;\n onHeightResize?: OnHeightResize;\n onWidthResizeEnd?: OnWidthResizeEnd;\n onHeightResizeEnd?: OnHeightResizeEnd;\n}\n\nexport const Box = React.forwardRef<HTMLElement, BoxProps>(function Box(\n {\n style,\n className,\n as = 'div',\n children,\n width = 'default',\n minWidth,\n maxWidth,\n height = 'default',\n minHeight,\n maxHeight,\n zIndex,\n padding,\n paddingInline,\n paddingBlock,\n margin,\n marginBlock,\n marginInline,\n marginInlineStart,\n marginInlineEnd,\n marginTop,\n marginBottom,\n overflow,\n overflowX,\n overflowY,\n enableResizeOnTop = false,\n enableResizeOnEnd = false,\n enableResizeOnBottom = false,\n enableResizeOnStart = false,\n enableResizeOnLeft = false,\n enableResizeOnRight = false,\n onWidthResize,\n onHeightResize,\n onWidthResizeEnd,\n onHeightResizeEnd,\n horizontalHandleProps,\n verticalHandleProps,\n ...otherProps\n }: BoxProps,\n ref\n) {\n const As = as as React.ElementType;\n const boxRef = useRef<HTMLElement | null>(null);\n const forkedRef = useForkRef(ref, boxRef);\n const hasHorizontalResize =\n enableResizeOnEnd || enableResizeOnStart || enableResizeOnLeft || enableResizeOnRight;\n const hasVerticalResize = enableResizeOnBottom || enableResizeOnTop;\n\n const cannotHorizontalFlex = hasHorizontalResize;\n const cannotVerticalFlex = hasVerticalResize;\n const warnHorizontalFlex = cannotHorizontalFlex && width === 'flex';\n const warnVerticalFlex = cannotVerticalFlex && height === 'flex';\n const isFlexing =\n !warnHorizontalFlex && !warnVerticalFlex && (width === 'flex' || height === 'flex');\n\n if (warnHorizontalFlex) {\n width = '100%';\n // biome-ignore lint/suspicious/noConsole: Need to warn the developer\n console.warn('You cannot have a resizable box and flex simultaneously');\n }\n\n if (warnVerticalFlex) {\n height = 'auto';\n // biome-ignore lint/suspicious/noConsole: Need to warn the developer\n console.warn('You cannot have a resizable box and flex simultaneously');\n }\n\n const propStyles = {\n width: !isCustomSizeProp(width) ? width : undefined,\n minWidth,\n maxWidth,\n height: !isCustomSizeProp(height) ? height : undefined,\n minHeight,\n maxHeight,\n padding,\n paddingInline,\n paddingBlock,\n margin,\n marginBlock,\n marginInline,\n marginInlineStart,\n marginInlineEnd,\n marginTop,\n marginBottom,\n overflow,\n overflowX,\n overflowY,\n zIndex,\n };\n\n return (\n <As\n data-enabled-resize-on-start={String(enableResizeOnStart)}\n data-enabled-resize-on-end={String(enableResizeOnEnd)}\n data-enabled-resize-on-top={String(enableResizeOnTop)}\n data-enabled-resize-on-bottom={String(enableResizeOnBottom)}\n data_enabled-resize-on-left={String(enableResizeOnLeft)}\n data_enabled-resize-on-right={String(enableResizeOnRight)}\n data-height={height}\n data-width={width}\n ref={forkedRef}\n style={{\n ...removeUndefinedProperties(propStyles),\n ...style,\n }}\n className={clsx(\n styles['box'],\n className,\n isFlexing && 'stack-flex',\n isFlexing && styles['stack-flex'],\n 'tcn-box'\n )}\n {...otherProps}\n >\n {children}\n {enableResizeOnTop && (\n <TopResizeHandle\n onHeightResize={onHeightResize}\n onHeightResizeEnd={onHeightResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnBottom && (\n <BottomResizeHandle\n onHeightResize={onHeightResize}\n onHeightResizeEnd={onHeightResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n {enableResizeOnStart && (\n <StartResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnEnd && (\n <EndResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnLeft && (\n <LeftResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n {enableResizeOnRight && (\n <RightResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n </As>\n );\n});\n"],"names":["Box","React","style","className","as","children","width","minWidth","maxWidth","height","minHeight","maxHeight","zIndex","padding","paddingInline","paddingBlock","margin","marginBlock","marginInline","marginInlineStart","marginInlineEnd","marginTop","marginBottom","overflow","overflowX","overflowY","enableResizeOnTop","enableResizeOnEnd","enableResizeOnBottom","enableResizeOnStart","enableResizeOnLeft","enableResizeOnRight","onWidthResize","onHeightResize","onWidthResizeEnd","onHeightResizeEnd","horizontalHandleProps","verticalHandleProps","otherProps","ref","As","boxRef","useRef","forkedRef","useForkRef","hasHorizontalResize","hasVerticalResize","cannotHorizontalFlex","cannotVerticalFlex","warnHorizontalFlex","warnVerticalFlex","isFlexing","propStyles","isCustomSizeProp","jsxs","removeUndefinedProperties","clsx","styles","jsx","TopResizeHandle","BottomResizeHandle","StartResizeHandle","EndResizeHandle","LeftResizeHandle","RightResizeHandle"],"mappings":"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"}
1
+ {"version":3,"file":"box.js","sources":["../../../src/stacks/box/box.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { CSSProperties, HTMLAttributes, useRef } from 'react';\nimport { useForkRef } from '../../utils/index.js';\nimport styles from '../stack.module.css';\nimport { isCustomSizeProp } from '../utils/isCustomSizeProp.js';\nimport { removeUndefinedProperties } from '../utils/remove_undefined_properties.js';\nimport { BottomResizeHandle } from './bottom_resize_handle.js';\nimport { EndResizeHandle } from './end_resize_handle.js';\nimport { HandleProps } from './handle_props.js';\nimport { LeftResizeHandle } from './left_resize_handle.js';\nimport { RightResizeHandle } from './right_resize_handle.js';\nimport { StartResizeHandle } from './start_resize_handle.js';\nimport { TopResizeHandle } from './top_resize_handle.js';\nimport type {\n OnHeightResize,\n OnHeightResizeEnd,\n OnWidthResize,\n OnWidthResizeEnd,\n} from './types.js';\n\nexport interface BoxProps<T extends HTMLElement = HTMLElement> extends HTMLAttributes<T> {\n as?: string;\n style?: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n width?: 'default' | 'flex' | 'auto' | string | number;\n minWidth?: CSSProperties['minWidth'];\n maxWidth?: CSSProperties['maxWidth'];\n height?: 'default' | 'flex' | 'auto' | string | number;\n minHeight?: CSSProperties['minHeight'];\n maxHeight?: CSSProperties['maxHeight'];\n zIndex?: number;\n padding?: CSSProperties['padding'];\n paddingInline?: CSSProperties['paddingInline'];\n paddingBlock?: CSSProperties['paddingBlock'];\n margin?: CSSProperties['margin'];\n marginBlock?: CSSProperties['marginBlock'];\n marginInline?: CSSProperties['marginInline'];\n marginInlineStart?: CSSProperties['marginInlineStart'];\n marginInlineEnd?: CSSProperties['marginInlineEnd'];\n marginTop?: CSSProperties['marginTop'];\n marginBottom?: CSSProperties['marginBottom'];\n overflow?: React.CSSProperties['overflow'];\n overflowX?: React.CSSProperties['overflowX'];\n overflowY?: React.CSSProperties['overflowY'];\n enableResizeOnTop?: boolean;\n enableResizeOnEnd?: boolean;\n enableResizeOnBottom?: boolean;\n enableResizeOnStart?: boolean;\n enableResizeOnLeft?: boolean;\n enableResizeOnRight?: boolean;\n horizontalHandleProps?: HandleProps;\n verticalHandleProps?: HandleProps;\n onWidthResize?: OnWidthResize;\n onHeightResize?: OnHeightResize;\n onWidthResizeEnd?: OnWidthResizeEnd;\n onHeightResizeEnd?: OnHeightResizeEnd;\n}\n\nexport const Box = React.forwardRef<HTMLElement, BoxProps>(function Box(\n {\n style,\n className,\n as = 'div',\n children,\n width = 'default',\n minWidth,\n maxWidth,\n height = 'default',\n minHeight,\n maxHeight,\n zIndex,\n padding,\n paddingInline,\n paddingBlock,\n margin,\n marginBlock,\n marginInline,\n marginInlineStart,\n marginInlineEnd,\n marginTop,\n marginBottom,\n overflow,\n overflowX,\n overflowY,\n enableResizeOnTop = false,\n enableResizeOnEnd = false,\n enableResizeOnBottom = false,\n enableResizeOnStart = false,\n enableResizeOnLeft = false,\n enableResizeOnRight = false,\n onWidthResize,\n onHeightResize,\n onWidthResizeEnd,\n onHeightResizeEnd,\n horizontalHandleProps,\n verticalHandleProps,\n ...otherProps\n }: BoxProps,\n ref\n) {\n const As = as as React.ElementType;\n const boxRef = useRef<HTMLElement | null>(null);\n const forkedRef = useForkRef(ref, boxRef);\n const hasHorizontalResize =\n enableResizeOnEnd || enableResizeOnStart || enableResizeOnLeft || enableResizeOnRight;\n const hasVerticalResize = enableResizeOnBottom || enableResizeOnTop;\n\n const cannotHorizontalFlex = hasHorizontalResize;\n const cannotVerticalFlex = hasVerticalResize;\n const warnHorizontalFlex = cannotHorizontalFlex && width === 'flex';\n const warnVerticalFlex = cannotVerticalFlex && height === 'flex';\n const isFlexing =\n !warnHorizontalFlex && !warnVerticalFlex && (width === 'flex' || height === 'flex');\n\n if (warnHorizontalFlex) {\n width = '100%';\n // biome-ignore lint/suspicious/noConsole: Need to warn the developer\n console.warn('You cannot have a resizable box and flex simultaneously');\n }\n\n if (warnVerticalFlex) {\n height = 'auto';\n // biome-ignore lint/suspicious/noConsole: Need to warn the developer\n console.warn('You cannot have a resizable box and flex simultaneously');\n }\n\n const propStyles = {\n width: !isCustomSizeProp(width) ? width : undefined,\n minWidth,\n maxWidth,\n height: !isCustomSizeProp(height) ? height : undefined,\n minHeight,\n maxHeight,\n padding,\n paddingInline,\n paddingBlock,\n margin,\n marginBlock,\n marginInline,\n marginInlineStart,\n marginInlineEnd,\n marginTop,\n marginBottom,\n overflow,\n overflowX,\n overflowY,\n zIndex,\n };\n\n return (\n <As\n data-enabled-resize-on-start={String(enableResizeOnStart)}\n data-enabled-resize-on-end={String(enableResizeOnEnd)}\n data-enabled-resize-on-top={String(enableResizeOnTop)}\n data-enabled-resize-on-bottom={String(enableResizeOnBottom)}\n data_enabled-resize-on-left={String(enableResizeOnLeft)}\n data_enabled-resize-on-right={String(enableResizeOnRight)}\n data-height={height}\n data-width={width}\n ref={forkedRef}\n style={{\n ...removeUndefinedProperties(propStyles),\n ...style,\n }}\n className={clsx(\n styles['box'],\n className,\n isFlexing && 'stack-flex',\n isFlexing && styles['stack-flex'],\n 'tcn-box'\n )}\n {...otherProps}\n >\n {children}\n {enableResizeOnTop && (\n <TopResizeHandle\n onHeightResize={onHeightResize}\n onHeightResizeEnd={onHeightResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnBottom && (\n <BottomResizeHandle\n onHeightResize={onHeightResize}\n onHeightResizeEnd={onHeightResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n {enableResizeOnStart && (\n <StartResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnEnd && (\n <EndResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={horizontalHandleProps}\n />\n )}\n {enableResizeOnLeft && (\n <LeftResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n {enableResizeOnRight && (\n <RightResizeHandle\n onWidthResize={onWidthResize}\n onWidthResizeEnd={onWidthResizeEnd}\n targetRef={boxRef}\n handleProps={verticalHandleProps}\n />\n )}\n </As>\n );\n});\n"],"names":["Box","React","style","className","as","children","width","minWidth","maxWidth","height","minHeight","maxHeight","zIndex","padding","paddingInline","paddingBlock","margin","marginBlock","marginInline","marginInlineStart","marginInlineEnd","marginTop","marginBottom","overflow","overflowX","overflowY","enableResizeOnTop","enableResizeOnEnd","enableResizeOnBottom","enableResizeOnStart","enableResizeOnLeft","enableResizeOnRight","onWidthResize","onHeightResize","onWidthResizeEnd","onHeightResizeEnd","horizontalHandleProps","verticalHandleProps","otherProps","ref","As","boxRef","useRef","forkedRef","useForkRef","hasHorizontalResize","hasVerticalResize","cannotHorizontalFlex","cannotVerticalFlex","warnHorizontalFlex","warnVerticalFlex","isFlexing","propStyles","isCustomSizeProp","jsxs","removeUndefinedProperties","clsx","styles","jsx","TopResizeHandle","BottomResizeHandle","StartResizeHandle","EndResizeHandle","LeftResizeHandle","RightResizeHandle"],"mappings":"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"}
@@ -9,6 +9,7 @@ export type DetectResizeBoundsResult = {
9
9
  hitMin: boolean;
10
10
  hitMax: boolean;
11
11
  clamped: boolean;
12
+ clampedSize: number | null;
12
13
  };
13
14
  export declare function detectResizeBounds({ element, axis, nextSize, epsilon, }: DetectResizeBoundsParams): DetectResizeBoundsResult;
14
15
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"detect_resize_bounds.d.ts","sourceRoot":"","sources":["../../../src/stacks/box/detect_resize_bounds.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAgCF,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,OAAa,GACd,EAAE,wBAAwB,GAAG,wBAAwB,CAiCrD"}
1
+ {"version":3,"file":"detect_resize_bounds.d.ts","sourceRoot":"","sources":["../../../src/stacks/box/detect_resize_bounds.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzC,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAkCF,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,OAAa,GACd,EAAE,wBAAwB,GAAG,wBAAwB,CAkCrD"}
@@ -1,4 +1,4 @@
1
- const u = {
1
+ const p = {
2
2
  width: {
3
3
  size: "width",
4
4
  min: "minWidth",
@@ -10,40 +10,42 @@ const u = {
10
10
  max: "maxHeight"
11
11
  }
12
12
  };
13
- function l(e) {
13
+ function h(e) {
14
14
  const n = /^(-?\d+(?:\.\d+)?)px$/.exec(e.trim());
15
15
  return n ? Number(n[1]) : null;
16
16
  }
17
- function x(e, n, i) {
18
- const c = l(n), t = l(i), s = c !== null && e < c, o = t !== null && e > t;
17
+ function y(e, n, o) {
18
+ const i = h(n), t = h(o), c = i !== null && e < i, l = t !== null && e > t, s = c || l;
19
19
  return {
20
- hitMin: s,
21
- hitMax: o,
22
- clamped: s || o
20
+ hitMin: c,
21
+ hitMax: l,
22
+ clamped: s,
23
+ clampedSize: s ? c ? i : t : null
23
24
  };
24
25
  }
25
- function z({
26
+ function g({
26
27
  element: e,
27
28
  axis: n,
28
- nextSize: i,
29
- epsilon: c = 0.5
29
+ nextSize: o,
30
+ epsilon: i = 0.5
30
31
  }) {
31
- const t = u[n], s = getComputedStyle(e), o = x(i, s[t.min], s[t.max]);
32
- if (o.clamped) return o;
33
- const d = e.style, h = d[t.size];
32
+ const t = p[n], c = getComputedStyle(e), l = y(o, c[t.min], c[t.max]);
33
+ if (l.clamped) return l;
34
+ const s = e.style, x = s[t.size];
34
35
  try {
35
- d[t.size] = `${i}px`;
36
- const r = e.getBoundingClientRect()[t.size] - i, a = r > c, m = r < -c;
36
+ s[t.size] = `${o}px`;
37
+ const a = e.getBoundingClientRect()[t.size], d = a - o, m = d > i, r = d < -i, u = m || r;
37
38
  return {
38
- hitMin: a,
39
- hitMax: m,
40
- clamped: a || m
39
+ hitMin: m,
40
+ hitMax: r,
41
+ clamped: u,
42
+ clampedSize: u ? a : null
41
43
  };
42
44
  } finally {
43
- d[t.size] = h;
45
+ s[t.size] = x;
44
46
  }
45
47
  }
46
48
  export {
47
- z as detectResizeBounds
49
+ g as detectResizeBounds
48
50
  };
49
51
  //# sourceMappingURL=detect_resize_bounds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect_resize_bounds.js","sources":["../../../src/stacks/box/detect_resize_bounds.ts"],"sourcesContent":["type ConstraintAxis = 'width' | 'height';\n\nexport type DetectResizeBoundsParams = {\n element: HTMLElement;\n axis: ConstraintAxis;\n nextSize: number;\n epsilon?: number; // Tolerance for the constraint hit detection.\n};\n\nexport type DetectResizeBoundsResult = {\n hitMin: boolean;\n hitMax: boolean;\n clamped: boolean;\n};\n\nconst styleKeys = {\n width: {\n size: 'width',\n min: 'minWidth',\n max: 'maxWidth',\n },\n height: {\n size: 'height',\n min: 'minHeight',\n max: 'maxHeight',\n },\n} as const;\n\nfunction parsePx(value: string): number | null {\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\n return match ? Number(match[1]) : null;\n}\n\nfunction detectByPixelValue(nextSize: number, min: string, max: string) {\n const minPx = parsePx(min);\n const maxPx = parsePx(max);\n const hitMin = minPx !== null && nextSize < minPx;\n const hitMax = maxPx !== null && nextSize > maxPx;\n return {\n hitMin,\n hitMax,\n clamped: hitMin || hitMax,\n };\n}\n\nexport function detectResizeBounds({\n element,\n axis,\n nextSize,\n epsilon = 0.5,\n}: DetectResizeBoundsParams): DetectResizeBoundsResult {\n const keys = styleKeys[axis];\n\n const computed = getComputedStyle(element);\n const fastPath = detectByPixelValue(nextSize, computed[keys.min], computed[keys.max]);\n if (fastPath.clamped) return fastPath;\n\n const style = element.style;\n const prevInlineSize = style[keys.size]; // Save the previous size to revert later.\n\n try {\n // Temporarily apply the new size to the element to offload bound test to browser.\n style[keys.size] = `${nextSize}px`;\n\n // Force layout so browser resolves min/max/intrinsic constraints.\n const rect = element.getBoundingClientRect();\n const renderedSize = rect[keys.size];\n\n const delta = renderedSize - nextSize;\n\n const hitMin = delta > epsilon;\n const hitMax = delta < -epsilon;\n const clamped = hitMin || hitMax;\n\n return {\n hitMin,\n hitMax,\n clamped,\n };\n } finally {\n // revert the style change\n style[keys.size] = prevInlineSize;\n }\n}\n"],"names":["styleKeys","parsePx","value","match","detectByPixelValue","nextSize","min","max","minPx","maxPx","hitMin","hitMax","detectResizeBounds","element","axis","epsilon","keys","computed","fastPath","style","prevInlineSize","delta"],"mappings":"AAeA,MAAMA,IAAY;AAAA,EAChB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAAA,EAEP,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAET;AAEA,SAASC,EAAQC,GAA8B;AAC7C,QAAMC,IAAQ,wBAAwB,KAAKD,EAAM,MAAM;AACvD,SAAOC,IAAQ,OAAOA,EAAM,CAAC,CAAC,IAAI;AACpC;AAEA,SAASC,EAAmBC,GAAkBC,GAAaC,GAAa;AACtE,QAAMC,IAAQP,EAAQK,CAAG,GACnBG,IAAQR,EAAQM,CAAG,GACnBG,IAASF,MAAU,QAAQH,IAAWG,GACtCG,IAASF,MAAU,QAAQJ,IAAWI;AAC5C,SAAO;AAAA,IACL,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAASD,KAAUC;AAAA,EAAA;AAEvB;AAEO,SAASC,EAAmB;AAAA,EACjC,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAT;AAAA,EACA,SAAAU,IAAU;AACZ,GAAuD;AACrD,QAAMC,IAAOhB,EAAUc,CAAI,GAErBG,IAAW,iBAAiBJ,CAAO,GACnCK,IAAWd,EAAmBC,GAAUY,EAASD,EAAK,GAAG,GAAGC,EAASD,EAAK,GAAG,CAAC;AACpF,MAAIE,EAAS,QAAS,QAAOA;AAE7B,QAAMC,IAAQN,EAAQ,OAChBO,IAAiBD,EAAMH,EAAK,IAAI;AAEtC,MAAI;AAEF,IAAAG,EAAMH,EAAK,IAAI,IAAI,GAAGX,CAAQ;AAM9B,UAAMgB,IAHOR,EAAQ,sBAAA,EACKG,EAAK,IAAI,IAENX,GAEvBK,IAASW,IAAQN,GACjBJ,IAASU,IAAQ,CAACN;AAGxB,WAAO;AAAA,MACL,QAAAL;AAAA,MACA,QAAAC;AAAA,MACA,SALcD,KAAUC;AAAA,IAKxB;AAAA,EAEJ,UAAA;AAEE,IAAAQ,EAAMH,EAAK,IAAI,IAAII;AAAA,EACrB;AACF;"}
1
+ {"version":3,"file":"detect_resize_bounds.js","sources":["../../../src/stacks/box/detect_resize_bounds.ts"],"sourcesContent":["type ConstraintAxis = 'width' | 'height';\n\nexport type DetectResizeBoundsParams = {\n element: HTMLElement;\n axis: ConstraintAxis;\n nextSize: number;\n epsilon?: number; // Tolerance for the constraint hit detection.\n};\n\nexport type DetectResizeBoundsResult = {\n hitMin: boolean;\n hitMax: boolean;\n clamped: boolean;\n clampedSize: number | null;\n};\n\nconst styleKeys = {\n width: {\n size: 'width',\n min: 'minWidth',\n max: 'maxWidth',\n },\n height: {\n size: 'height',\n min: 'minHeight',\n max: 'maxHeight',\n },\n} as const;\n\nfunction parsePx(value: string): number | null {\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\n return match ? Number(match[1]) : null;\n}\n\nfunction detectByPixelValue(nextSize: number, min: string, max: string) {\n const minPx = parsePx(min);\n const maxPx = parsePx(max);\n const hitMin = minPx !== null && nextSize < minPx;\n const hitMax = maxPx !== null && nextSize > maxPx;\n const clamped = hitMin || hitMax;\n return {\n hitMin,\n hitMax,\n clamped,\n clampedSize: clamped ? (hitMin ? minPx : maxPx) : null,\n };\n}\n\nexport function detectResizeBounds({\n element,\n axis,\n nextSize,\n epsilon = 0.5,\n}: DetectResizeBoundsParams): DetectResizeBoundsResult {\n const keys = styleKeys[axis];\n\n const computed = getComputedStyle(element);\n const fastPath = detectByPixelValue(nextSize, computed[keys.min], computed[keys.max]);\n if (fastPath.clamped) return fastPath;\n\n const style = element.style;\n const prevInlineSize = style[keys.size]; // Save the previous size to revert later.\n\n try {\n // Temporarily apply the new size to the element to offload bound test to browser.\n style[keys.size] = `${nextSize}px`;\n\n // Force layout so browser resolves min/max/intrinsic constraints.\n const rect = element.getBoundingClientRect();\n const renderedSize = rect[keys.size];\n\n const delta = renderedSize - nextSize;\n\n const hitMin = delta > epsilon;\n const hitMax = delta < -epsilon;\n const clamped = hitMin || hitMax;\n\n return {\n hitMin,\n hitMax,\n clamped,\n clampedSize: clamped ? renderedSize : null,\n };\n } finally {\n // revert the style change\n style[keys.size] = prevInlineSize;\n }\n}\n"],"names":["styleKeys","parsePx","value","match","detectByPixelValue","nextSize","min","max","minPx","maxPx","hitMin","hitMax","clamped","detectResizeBounds","element","axis","epsilon","keys","computed","fastPath","style","prevInlineSize","renderedSize","delta"],"mappings":"AAgBA,MAAMA,IAAY;AAAA,EAChB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAAA,EAEP,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,EAAA;AAET;AAEA,SAASC,EAAQC,GAA8B;AAC7C,QAAMC,IAAQ,wBAAwB,KAAKD,EAAM,MAAM;AACvD,SAAOC,IAAQ,OAAOA,EAAM,CAAC,CAAC,IAAI;AACpC;AAEA,SAASC,EAAmBC,GAAkBC,GAAaC,GAAa;AACtE,QAAMC,IAAQP,EAAQK,CAAG,GACnBG,IAAQR,EAAQM,CAAG,GACnBG,IAASF,MAAU,QAAQH,IAAWG,GACtCG,IAASF,MAAU,QAAQJ,IAAWI,GACtCG,IAAUF,KAAUC;AAC1B,SAAO;AAAA,IACL,QAAAD;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAaA,IAAWF,IAASF,IAAQC,IAAS;AAAA,EAAA;AAEtD;AAEO,SAASI,EAAmB;AAAA,EACjC,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,UAAAV;AAAA,EACA,SAAAW,IAAU;AACZ,GAAuD;AACrD,QAAMC,IAAOjB,EAAUe,CAAI,GAErBG,IAAW,iBAAiBJ,CAAO,GACnCK,IAAWf,EAAmBC,GAAUa,EAASD,EAAK,GAAG,GAAGC,EAASD,EAAK,GAAG,CAAC;AACpF,MAAIE,EAAS,QAAS,QAAOA;AAE7B,QAAMC,IAAQN,EAAQ,OAChBO,IAAiBD,EAAMH,EAAK,IAAI;AAEtC,MAAI;AAEF,IAAAG,EAAMH,EAAK,IAAI,IAAI,GAAGZ,CAAQ;AAI9B,UAAMiB,IADOR,EAAQ,sBAAA,EACKG,EAAK,IAAI,GAE7BM,IAAQD,IAAejB,GAEvBK,IAASa,IAAQP,GACjBL,IAASY,IAAQ,CAACP,GAClBJ,IAAUF,KAAUC;AAE1B,WAAO;AAAA,MACL,QAAAD;AAAA,MACA,QAAAC;AAAA,MACA,SAAAC;AAAA,MACA,aAAaA,IAAUU,IAAe;AAAA,IAAA;AAAA,EAE1C,UAAA;AAEE,IAAAF,EAAMH,EAAK,IAAI,IAAII;AAAA,EACrB;AACF;"}
@@ -1,6 +1,6 @@
1
- import { jsx as p } from "react/jsx-runtime";
1
+ import { jsx as f } from "react/jsx-runtime";
2
2
  import { clsx as d } from "clsx";
3
- import t, { useLayoutEffect as u } from "react";
3
+ import i, { useLayoutEffect as u } from "react";
4
4
  import "../utils/click_away_listener.js";
5
5
  import "../utils/focus_redirect.js";
6
6
  import "../utils/scroll_away_listener.js";
@@ -8,39 +8,42 @@ import { useForkRef as R } from "../utils/hooks/use_fork_ref.js";
8
8
  import "../utils/hooks/use_resize_observer.js";
9
9
  import "../utils/dnd/context.js";
10
10
  import "../draggable.module-BgelQsuJ.js";
11
+ import "../utils/resize/context.js";
12
+ import "../resizable.module-I6iyBAvM.js";
13
+ import "../utils/resize/resize_handle.js";
11
14
  import { Box as x } from "./box/box.js";
12
15
  import { s as z } from "../collapsible_box.module-BiS98xXA.js";
13
16
  import { useIsCollapsed as b } from "./utils/use_is_collapsed.js";
14
- const L = t.forwardRef(function({ open: l = !1, defaultWidth: i = "400px", ...e }, a) {
15
- const o = t.useRef(null), n = R(a, o), [c, r] = t.useState(!1);
17
+ const q = i.forwardRef(function({ open: t = !1, defaultWidth: l = "400px", ...e }, a) {
18
+ const o = i.useRef(null), n = R(a, o), [m, r] = i.useState(!1);
16
19
  u(() => {
17
- o.current?.style.setProperty("--collapsible-size", i);
18
- }, [i]);
19
- const m = b(l, o) && !l ? null : e.children;
20
- return /* @__PURE__ */ p(
20
+ o.current?.style.setProperty("--collapsible-size", l);
21
+ }, [l]);
22
+ const c = b(t, o) && !t ? null : e.children;
23
+ return /* @__PURE__ */ f(
21
24
  x,
22
25
  {
23
26
  ref: n,
24
27
  ...e,
25
- "data-is-collapsed": !l,
28
+ "data-is-collapsed": !t,
26
29
  "data-collapse-orientation": "horizontal",
27
- "data-is-resizing": c,
30
+ "data-is-resizing": m,
28
31
  onWidthResize: (...s) => {
29
32
  r(!0), e.onWidthResize?.(...s);
30
33
  },
31
- onWidthResizeEnd: (s, f) => {
32
- r(!1), e.onWidthResizeEnd?.(s, f), o.current?.style.setProperty("--collapsible-size", `${s}px`);
34
+ onWidthResizeEnd: (s, p) => {
35
+ r(!1), e.onWidthResizeEnd?.(s, p), o.current?.style.setProperty("--collapsible-size", `${s}px`);
33
36
  },
34
37
  className: d(
35
38
  e.className,
36
39
  z["collapsible-box"],
37
40
  "tcn-h-collapsible-box"
38
41
  ),
39
- children: m
42
+ children: c
40
43
  }
41
44
  );
42
45
  });
43
46
  export {
44
- L as HCollapsibleBox
47
+ q as HCollapsibleBox
45
48
  };
46
49
  //# sourceMappingURL=h_collapsible_box.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"h_collapsible_box.js","sources":["../../src/stacks/h_collapsible_box.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { useLayoutEffect } from 'react';\nimport { useForkRef } from '../utils/index.js';\nimport { Box, BoxProps } from './box/box.js';\nimport styles from './collapsible_box.module.css';\nimport { useIsCollapsed } from './utils/use_is_collapsed.js';\n\nexport interface HCollapsibleBoxProps extends BoxProps {\n open?: boolean;\n defaultWidth?: string;\n}\n\nexport const HCollapsibleBox = React.forwardRef(function CollapsibleBox(\n { open = false, defaultWidth = '400px', ...props }: HCollapsibleBoxProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const collapsibleRef = React.useRef<HTMLDivElement | null>(null);\n const forkRef = useForkRef(ref, collapsibleRef);\n const [resizing, setIsResizing] = React.useState(false);\n\n useLayoutEffect(() => {\n collapsibleRef.current?.style.setProperty('--collapsible-size', defaultWidth);\n }, [defaultWidth]);\n\n const isCollapsed = useIsCollapsed(open, collapsibleRef);\n const children = isCollapsed && !open ? null : props.children;\n\n return (\n <Box\n ref={forkRef}\n {...props}\n data-is-collapsed={!open}\n data-collapse-orientation=\"horizontal\"\n data-is-resizing={resizing}\n onWidthResize={(...args) => {\n setIsResizing(true);\n props.onWidthResize?.(...args);\n }}\n onWidthResizeEnd={(width, origin) => {\n setIsResizing(false);\n props.onWidthResizeEnd?.(width, origin);\n collapsibleRef.current?.style.setProperty('--collapsible-size', `${width}px`);\n }}\n className={clsx(\n props.className,\n styles['collapsible-box'],\n 'tcn-h-collapsible-box'\n )}\n children={children}\n />\n );\n});\n"],"names":["HCollapsibleBox","React","open","defaultWidth","props","ref","collapsibleRef","forkRef","useForkRef","resizing","setIsResizing","useLayoutEffect","children","useIsCollapsed","jsx","Box","args","width","origin","clsx","styles"],"mappings":";;;;;;;;;;;;;AAYO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,MAAAC,IAAO,IAAO,cAAAC,IAAe,SAAS,GAAGC,EAAA,GAC3CC,GACA;AACA,QAAMC,IAAiBL,EAAM,OAA8B,IAAI,GACzDM,IAAUC,EAAWH,GAAKC,CAAc,GACxC,CAACG,GAAUC,CAAa,IAAIT,EAAM,SAAS,EAAK;AAEtD,EAAAU,EAAgB,MAAM;AACpB,IAAAL,EAAe,SAAS,MAAM,YAAY,sBAAsBH,CAAY;AAAA,EAC9E,GAAG,CAACA,CAAY,CAAC;AAGjB,QAAMS,IADcC,EAAeX,GAAMI,CAAc,KACvB,CAACJ,IAAO,OAAOE,EAAM;AAErD,SACE,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKR;AAAA,MACJ,GAAGH;AAAA,MACJ,qBAAmB,CAACF;AAAA,MACpB,6BAA0B;AAAA,MAC1B,oBAAkBO;AAAA,MAClB,eAAe,IAAIO,MAAS;AAC1B,QAAAN,EAAc,EAAI,GAClBN,EAAM,gBAAgB,GAAGY,CAAI;AAAA,MAC/B;AAAA,MACA,kBAAkB,CAACC,GAAOC,MAAW;AACnC,QAAAR,EAAc,EAAK,GACnBN,EAAM,mBAAmBa,GAAOC,CAAM,GACtCZ,EAAe,SAAS,MAAM,YAAY,sBAAsB,GAAGW,CAAK,IAAI;AAAA,MAC9E;AAAA,MACA,WAAWE;AAAA,QACTf,EAAM;AAAA,QACNgB,EAAO,iBAAiB;AAAA,QACxB;AAAA,MAAA;AAAA,MAEF,UAAAR;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
1
+ {"version":3,"file":"h_collapsible_box.js","sources":["../../src/stacks/h_collapsible_box.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { useLayoutEffect } from 'react';\nimport { useForkRef } from '../utils/index.js';\nimport { Box, BoxProps } from './box/box.js';\nimport styles from './collapsible_box.module.css';\nimport { useIsCollapsed } from './utils/use_is_collapsed.js';\n\nexport interface HCollapsibleBoxProps extends BoxProps {\n open?: boolean;\n defaultWidth?: string;\n}\n\nexport const HCollapsibleBox = React.forwardRef(function CollapsibleBox(\n { open = false, defaultWidth = '400px', ...props }: HCollapsibleBoxProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const collapsibleRef = React.useRef<HTMLDivElement | null>(null);\n const forkRef = useForkRef(ref, collapsibleRef);\n const [resizing, setIsResizing] = React.useState(false);\n\n useLayoutEffect(() => {\n collapsibleRef.current?.style.setProperty('--collapsible-size', defaultWidth);\n }, [defaultWidth]);\n\n const isCollapsed = useIsCollapsed(open, collapsibleRef);\n const children = isCollapsed && !open ? null : props.children;\n\n return (\n <Box\n ref={forkRef}\n {...props}\n data-is-collapsed={!open}\n data-collapse-orientation=\"horizontal\"\n data-is-resizing={resizing}\n onWidthResize={(...args) => {\n setIsResizing(true);\n props.onWidthResize?.(...args);\n }}\n onWidthResizeEnd={(width, origin) => {\n setIsResizing(false);\n props.onWidthResizeEnd?.(width, origin);\n collapsibleRef.current?.style.setProperty('--collapsible-size', `${width}px`);\n }}\n className={clsx(\n props.className,\n styles['collapsible-box'],\n 'tcn-h-collapsible-box'\n )}\n children={children}\n />\n );\n});\n"],"names":["HCollapsibleBox","React","open","defaultWidth","props","ref","collapsibleRef","forkRef","useForkRef","resizing","setIsResizing","useLayoutEffect","children","useIsCollapsed","jsx","Box","args","width","origin","clsx","styles"],"mappings":";;;;;;;;;;;;;;;;AAYO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,MAAAC,IAAO,IAAO,cAAAC,IAAe,SAAS,GAAGC,EAAA,GAC3CC,GACA;AACA,QAAMC,IAAiBL,EAAM,OAA8B,IAAI,GACzDM,IAAUC,EAAWH,GAAKC,CAAc,GACxC,CAACG,GAAUC,CAAa,IAAIT,EAAM,SAAS,EAAK;AAEtD,EAAAU,EAAgB,MAAM;AACpB,IAAAL,EAAe,SAAS,MAAM,YAAY,sBAAsBH,CAAY;AAAA,EAC9E,GAAG,CAACA,CAAY,CAAC;AAGjB,QAAMS,IADcC,EAAeX,GAAMI,CAAc,KACvB,CAACJ,IAAO,OAAOE,EAAM;AAErD,SACE,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKR;AAAA,MACJ,GAAGH;AAAA,MACJ,qBAAmB,CAACF;AAAA,MACpB,6BAA0B;AAAA,MAC1B,oBAAkBO;AAAA,MAClB,eAAe,IAAIO,MAAS;AAC1B,QAAAN,EAAc,EAAI,GAClBN,EAAM,gBAAgB,GAAGY,CAAI;AAAA,MAC/B;AAAA,MACA,kBAAkB,CAACC,GAAOC,MAAW;AACnC,QAAAR,EAAc,EAAK,GACnBN,EAAM,mBAAmBa,GAAOC,CAAM,GACtCZ,EAAe,SAAS,MAAM,YAAY,sBAAsB,GAAGW,CAAK,IAAI;AAAA,MAC9E;AAAA,MACA,WAAWE;AAAA,QACTf,EAAM;AAAA,QACNgB,EAAO,iBAAiB;AAAA,QACxB;AAAA,MAAA;AAAA,MAEF,UAAAR;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -1,5 +1,5 @@
1
- import { jsx as p } from "react/jsx-runtime";
2
- import t, { useLayoutEffect as u } from "react";
1
+ import { jsx as f } from "react/jsx-runtime";
2
+ import i, { useLayoutEffect as u } from "react";
3
3
  import "../utils/click_away_listener.js";
4
4
  import "../utils/focus_redirect.js";
5
5
  import "../utils/scroll_away_listener.js";
@@ -8,39 +8,42 @@ import "../utils/hooks/use_resize_observer.js";
8
8
  import "../utils/dnd/context.js";
9
9
  import { clsx as R } from "clsx";
10
10
  import "../draggable.module-BgelQsuJ.js";
11
+ import "../utils/resize/context.js";
12
+ import "../resizable.module-I6iyBAvM.js";
13
+ import "../utils/resize/resize_handle.js";
11
14
  import { Box as x } from "./box/box.js";
12
15
  import { s as b } from "../collapsible_box.module-BiS98xXA.js";
13
16
  import { useIsCollapsed as z } from "./utils/use_is_collapsed.js";
14
- const F = t.forwardRef(function({ open: l = !1, defaultHeight: i = "400px", ...e }, a) {
15
- const s = t.useRef(null), c = d(a, s), [n, r] = t.useState(!1);
17
+ const V = i.forwardRef(function({ open: t = !1, defaultHeight: l = "400px", ...e }, a) {
18
+ const o = i.useRef(null), c = d(a, o), [m, r] = i.useState(!1);
16
19
  u(() => {
17
- s.current?.style.setProperty("--collapsible-size", i);
18
- }, [i]);
19
- const m = z(l, s) && !l ? null : e.children;
20
- return /* @__PURE__ */ p(
20
+ o.current?.style.setProperty("--collapsible-size", l);
21
+ }, [l]);
22
+ const n = z(t, o) && !t ? null : e.children;
23
+ return /* @__PURE__ */ f(
21
24
  x,
22
25
  {
23
26
  ref: c,
24
27
  ...e,
25
- "data-is-collapsed": !l,
28
+ "data-is-collapsed": !t,
26
29
  "data-collapse-orientation": "vertical",
27
- "data-is-resizing": n,
28
- onHeightResize: (...o) => {
29
- r(!0), e.onHeightResize?.(...o);
30
+ "data-is-resizing": m,
31
+ onHeightResize: (...s) => {
32
+ r(!0), e.onHeightResize?.(...s);
30
33
  },
31
- onHeightResizeEnd: (o, f) => {
32
- r(!1), s.current?.style.setProperty("--collapsible-size", `${o}px`), e.onHeightResizeEnd?.(o, f);
34
+ onHeightResizeEnd: (s, p) => {
35
+ r(!1), o.current?.style.setProperty("--collapsible-size", `${s}px`), e.onHeightResizeEnd?.(s, p);
33
36
  },
34
37
  className: R(
35
38
  e.className,
36
39
  b["collapsible-box"],
37
40
  "tcn-v-collapsible-box"
38
41
  ),
39
- children: m
42
+ children: n
40
43
  }
41
44
  );
42
45
  });
43
46
  export {
44
- F as VCollapsibleBox
47
+ V as VCollapsibleBox
45
48
  };
46
49
  //# sourceMappingURL=v_collapsible_box.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"v_collapsible_box.js","sources":["../../src/stacks/v_collapsible_box.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport { useForkRef } from '../utils/index.js';\nimport { clsx } from 'clsx';\nimport { Box, BoxProps } from './box/box.js';\nimport styles from './collapsible_box.module.css';\nimport { useIsCollapsed } from './utils/use_is_collapsed.js';\n\nexport interface VCollapsibleBoxProps extends BoxProps {\n open?: boolean;\n defaultHeight?: string;\n}\n\nexport const VCollapsibleBox = React.forwardRef(function CollapsibleBox(\n { open = false, defaultHeight = '400px', ...props }: VCollapsibleBoxProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const collapsibleRef = React.useRef<HTMLDivElement | null>(null);\n const forkRef = useForkRef(ref, collapsibleRef);\n const [resizing, setIsResizing] = React.useState(false);\n\n useLayoutEffect(() => {\n collapsibleRef.current?.style.setProperty('--collapsible-size', defaultHeight);\n }, [defaultHeight]);\n\n const isCollapsed = useIsCollapsed(open, collapsibleRef);\n const children = isCollapsed && !open ? null : props.children;\n\n return (\n <Box\n ref={forkRef}\n {...props}\n data-is-collapsed={!open}\n data-collapse-orientation=\"vertical\"\n data-is-resizing={resizing}\n onHeightResize={(...args) => {\n setIsResizing(true);\n props.onHeightResize?.(...args);\n }}\n onHeightResizeEnd={(height, origin) => {\n setIsResizing(false);\n collapsibleRef.current?.style.setProperty('--collapsible-size', `${height}px`);\n props.onHeightResizeEnd?.(height, origin);\n }}\n className={clsx(\n props.className,\n styles['collapsible-box'],\n 'tcn-v-collapsible-box'\n )}\n children={children}\n />\n );\n});\n"],"names":["VCollapsibleBox","React","open","defaultHeight","props","ref","collapsibleRef","forkRef","useForkRef","resizing","setIsResizing","useLayoutEffect","children","useIsCollapsed","jsx","Box","args","height","origin","clsx","styles"],"mappings":";;;;;;;;;;;;;AAYO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,MAAAC,IAAO,IAAO,eAAAC,IAAgB,SAAS,GAAGC,EAAA,GAC5CC,GACA;AACA,QAAMC,IAAiBL,EAAM,OAA8B,IAAI,GACzDM,IAAUC,EAAWH,GAAKC,CAAc,GACxC,CAACG,GAAUC,CAAa,IAAIT,EAAM,SAAS,EAAK;AAEtD,EAAAU,EAAgB,MAAM;AACpB,IAAAL,EAAe,SAAS,MAAM,YAAY,sBAAsBH,CAAa;AAAA,EAC/E,GAAG,CAACA,CAAa,CAAC;AAGlB,QAAMS,IADcC,EAAeX,GAAMI,CAAc,KACvB,CAACJ,IAAO,OAAOE,EAAM;AAErD,SACE,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKR;AAAA,MACJ,GAAGH;AAAA,MACJ,qBAAmB,CAACF;AAAA,MACpB,6BAA0B;AAAA,MAC1B,oBAAkBO;AAAA,MAClB,gBAAgB,IAAIO,MAAS;AAC3B,QAAAN,EAAc,EAAI,GAClBN,EAAM,iBAAiB,GAAGY,CAAI;AAAA,MAChC;AAAA,MACA,mBAAmB,CAACC,GAAQC,MAAW;AACrC,QAAAR,EAAc,EAAK,GACnBJ,EAAe,SAAS,MAAM,YAAY,sBAAsB,GAAGW,CAAM,IAAI,GAC7Eb,EAAM,oBAAoBa,GAAQC,CAAM;AAAA,MAC1C;AAAA,MACA,WAAWC;AAAA,QACTf,EAAM;AAAA,QACNgB,EAAO,iBAAiB;AAAA,QACxB;AAAA,MAAA;AAAA,MAEF,UAAAR;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
1
+ {"version":3,"file":"v_collapsible_box.js","sources":["../../src/stacks/v_collapsible_box.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport { useForkRef } from '../utils/index.js';\nimport { clsx } from 'clsx';\nimport { Box, BoxProps } from './box/box.js';\nimport styles from './collapsible_box.module.css';\nimport { useIsCollapsed } from './utils/use_is_collapsed.js';\n\nexport interface VCollapsibleBoxProps extends BoxProps {\n open?: boolean;\n defaultHeight?: string;\n}\n\nexport const VCollapsibleBox = React.forwardRef(function CollapsibleBox(\n { open = false, defaultHeight = '400px', ...props }: VCollapsibleBoxProps,\n ref: React.Ref<HTMLDivElement>\n) {\n const collapsibleRef = React.useRef<HTMLDivElement | null>(null);\n const forkRef = useForkRef(ref, collapsibleRef);\n const [resizing, setIsResizing] = React.useState(false);\n\n useLayoutEffect(() => {\n collapsibleRef.current?.style.setProperty('--collapsible-size', defaultHeight);\n }, [defaultHeight]);\n\n const isCollapsed = useIsCollapsed(open, collapsibleRef);\n const children = isCollapsed && !open ? null : props.children;\n\n return (\n <Box\n ref={forkRef}\n {...props}\n data-is-collapsed={!open}\n data-collapse-orientation=\"vertical\"\n data-is-resizing={resizing}\n onHeightResize={(...args) => {\n setIsResizing(true);\n props.onHeightResize?.(...args);\n }}\n onHeightResizeEnd={(height, origin) => {\n setIsResizing(false);\n collapsibleRef.current?.style.setProperty('--collapsible-size', `${height}px`);\n props.onHeightResizeEnd?.(height, origin);\n }}\n className={clsx(\n props.className,\n styles['collapsible-box'],\n 'tcn-v-collapsible-box'\n )}\n children={children}\n />\n );\n});\n"],"names":["VCollapsibleBox","React","open","defaultHeight","props","ref","collapsibleRef","forkRef","useForkRef","resizing","setIsResizing","useLayoutEffect","children","useIsCollapsed","jsx","Box","args","height","origin","clsx","styles"],"mappings":";;;;;;;;;;;;;;;;AAYO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,MAAAC,IAAO,IAAO,eAAAC,IAAgB,SAAS,GAAGC,EAAA,GAC5CC,GACA;AACA,QAAMC,IAAiBL,EAAM,OAA8B,IAAI,GACzDM,IAAUC,EAAWH,GAAKC,CAAc,GACxC,CAACG,GAAUC,CAAa,IAAIT,EAAM,SAAS,EAAK;AAEtD,EAAAU,EAAgB,MAAM;AACpB,IAAAL,EAAe,SAAS,MAAM,YAAY,sBAAsBH,CAAa;AAAA,EAC/E,GAAG,CAACA,CAAa,CAAC;AAGlB,QAAMS,IADcC,EAAeX,GAAMI,CAAc,KACvB,CAACJ,IAAO,OAAOE,EAAM;AAErD,SACE,gBAAAU;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKR;AAAA,MACJ,GAAGH;AAAA,MACJ,qBAAmB,CAACF;AAAA,MACpB,6BAA0B;AAAA,MAC1B,oBAAkBO;AAAA,MAClB,gBAAgB,IAAIO,MAAS;AAC3B,QAAAN,EAAc,EAAI,GAClBN,EAAM,iBAAiB,GAAGY,CAAI;AAAA,MAChC;AAAA,MACA,mBAAmB,CAACC,GAAQC,MAAW;AACrC,QAAAR,EAAc,EAAK,GACnBJ,EAAe,SAAS,MAAM,YAAY,sBAAsB,GAAGW,CAAM,IAAI,GAC7Eb,EAAM,oBAAoBa,GAAQC,CAAM;AAAA,MAC1C;AAAA,MACA,WAAWC;AAAA,QACTf,EAAM;AAAA,QACNgB,EAAO,iBAAiB;AAAA,QACxB;AAAA,MAAA;AAAA,MAEF,UAAAR;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/surfaces/card/card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,UAAU,CAAC;IACvE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,IAAI,+EASf,CAAC"}
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/surfaces/card/card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAEpF,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,UAAU,CAAC;IACvE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED,eAAO,MAAM,IAAI,+EAaf,CAAC"}
@@ -1,11 +1,19 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
- import { clsx as c } from "clsx";
3
- import m from "react";
4
- import { Scaffold as e } from "../../layouts/containers/scaffold.js";
5
- const l = m.forwardRef(function({ children: r, className: o, ...t }, f) {
6
- return /* @__PURE__ */ a(e, { ref: f, className: c(o, "tcn-surface", "tcn-card"), ...t, children: r });
2
+ import { clsx as f } from "clsx";
3
+ import s from "react";
4
+ import { Scaffold as d } from "../../layouts/containers/scaffold.js";
5
+ import '../../card.css';const m = "_card_a3c9492", e = { card: m }, _ = s.forwardRef(function({ children: r, className: c, ...o }, t) {
6
+ return /* @__PURE__ */ a(
7
+ d,
8
+ {
9
+ ref: t,
10
+ className: f(c, e.card, "tcn-surface", "tcn-card"),
11
+ ...o,
12
+ children: r
13
+ }
14
+ );
7
15
  });
8
16
  export {
9
- l as Card
17
+ _ as Card
10
18
  };
11
19
  //# sourceMappingURL=card.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.js","sources":["../../../src/surfaces/card/card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React from 'react';\nimport { Scaffold, type ScaffoldProps } from '../../layouts/containers/scaffold.js';\n\nexport interface CardProps extends Omit<ScaffoldProps, 'as' | 'children'> {\n children?: React.ReactNode;\n}\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(function Card(\n { children, className, ...props }: CardProps,\n ref\n) {\n return (\n <Scaffold ref={ref} className={clsx(className, 'tcn-surface', 'tcn-card')} {...props}>\n {children}\n </Scaffold>\n );\n});\n"],"names":["Card","React","children","className","props","ref","jsx","Scaffold","clsx"],"mappings":";;;;AAQO,MAAMA,IAAOC,EAAM,WAAmC,SAC3D,EAAE,UAAAC,GAAU,WAAAC,GAAW,GAAGC,EAAA,GAC1BC,GACA;AACA,SACE,gBAAAC,EAACC,GAAA,EAAS,KAAAF,GAAU,WAAWG,EAAKL,GAAW,eAAe,UAAU,GAAI,GAAGC,GAC5E,UAAAF,EAAA,CACH;AAEJ,CAAC;"}
1
+ {"version":3,"file":"card.js","sources":["../../../src/surfaces/card/card.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React from 'react';\nimport { Scaffold, type ScaffoldProps } from '../../layouts/containers/scaffold.js';\nimport styles from './card.module.css';\nexport interface CardProps extends Omit<ScaffoldProps, 'as' | 'children'> {\n children?: React.ReactNode;\n}\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(function Card(\n { children, className, ...props }: CardProps,\n ref\n) {\n return (\n <Scaffold\n ref={ref}\n className={clsx(className, styles.card, 'tcn-surface', 'tcn-card')}\n {...props}\n >\n {children}\n </Scaffold>\n );\n});\n"],"names":["Card","React","children","className","props","ref","jsx","Scaffold","clsx","styles"],"mappings":";;;;4CAQaA,IAAOC,EAAM,WAAmC,SAC3D,EAAE,UAAAC,GAAU,WAAAC,GAAW,GAAGC,EAAA,GAC1BC,GACA;AACA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAF;AAAA,MACA,WAAWG,EAAKL,GAAWM,EAAO,MAAM,eAAe,UAAU;AAAA,MAChE,GAAGL;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
@@ -28,10 +28,12 @@ import "../../stacks/v_stack.js";
28
28
  import "../../stacks/z_stack.js";
29
29
  import "../../layouts/containers/rail.js";
30
30
  import "../../layouts/containers/columns/columns.js";
31
+ import "../../layouts/containers/rows/row.js";
32
+ import "../../layouts/containers/rows/rows.js";
31
33
  import "../../layouts/containers/utility_strip/utility_strip.js";
32
34
  import { PopperDismissal as a } from "../../overlay/popper/base/dismissal_decorator.js";
33
35
  import { ElementPopper as s } from "../../overlay/popper/element_popper.js";
34
- const O = e.forwardRef(
36
+ const T = e.forwardRef(
35
37
  function({
36
38
  children: r,
37
39
  className: m,
@@ -61,6 +63,6 @@ const O = e.forwardRef(
61
63
  }
62
64
  );
63
65
  export {
64
- O as PopConfirm
66
+ T as PopConfirm
65
67
  };
66
68
  //# sourceMappingURL=pop_confirm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pop_confirm.js","sources":["../../../src/surfaces/pop_confirm/pop_confirm.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React from 'react';\nimport { Scaffold } from '../../layouts/index.js';\nimport { PopperDismissal } from '../../overlay/popper/base/dismissal_decorator.js';\nimport {\n ElementPopper,\n type ElementPopperProps,\n} from '../../overlay/popper/element_popper.js';\n\nexport type PopConfirmProps = ElementPopperProps;\n\nexport const PopConfirm = React.forwardRef<HTMLDivElement, PopConfirmProps>(\n function PopConfirm(\n {\n children,\n className,\n precision = 'high',\n dismissals = [PopperDismissal.CLICK_AWAY],\n ...props\n },\n ref\n ) {\n return (\n <ElementPopper\n ref={ref}\n precision={precision}\n className={clsx(className, 'tcn-pop-confirm')}\n dismissals={dismissals}\n {...props}\n >\n <Scaffold\n width={'100%'}\n height={'100%'}\n className={'tcn-overlay-content tcn-pop-confirm-scaffold'}\n >\n {children}\n </Scaffold>\n </ElementPopper>\n );\n }\n);\n"],"names":["PopConfirm","React","children","className","precision","dismissals","PopperDismissal","props","ref","jsx","ElementPopper","clsx","Scaffold"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAMA,IAAaC,EAAM;AAAA,EAC9B,SACE;AAAA,IACE,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC,IAAa,CAACC,EAAgB,UAAU;AAAA,IACxC,GAAGC;AAAA,EAAA,GAELC,GACA;AACA,WACE,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,WAAAJ;AAAA,QACA,WAAWO,EAAKR,GAAW,iBAAiB;AAAA,QAC5C,YAAAE;AAAA,QACC,GAAGE;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,WAAW;AAAA,YAEV,UAAAV;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AACF;"}
1
+ {"version":3,"file":"pop_confirm.js","sources":["../../../src/surfaces/pop_confirm/pop_confirm.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React from 'react';\nimport { Scaffold } from '../../layouts/index.js';\nimport { PopperDismissal } from '../../overlay/popper/base/dismissal_decorator.js';\nimport {\n ElementPopper,\n type ElementPopperProps,\n} from '../../overlay/popper/element_popper.js';\n\nexport type PopConfirmProps = ElementPopperProps;\n\nexport const PopConfirm = React.forwardRef<HTMLDivElement, PopConfirmProps>(\n function PopConfirm(\n {\n children,\n className,\n precision = 'high',\n dismissals = [PopperDismissal.CLICK_AWAY],\n ...props\n },\n ref\n ) {\n return (\n <ElementPopper\n ref={ref}\n precision={precision}\n className={clsx(className, 'tcn-pop-confirm')}\n dismissals={dismissals}\n {...props}\n >\n <Scaffold\n width={'100%'}\n height={'100%'}\n className={'tcn-overlay-content tcn-pop-confirm-scaffold'}\n >\n {children}\n </Scaffold>\n </ElementPopper>\n );\n }\n);\n"],"names":["PopConfirm","React","children","className","precision","dismissals","PopperDismissal","props","ref","jsx","ElementPopper","clsx","Scaffold"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAMA,IAAaC,EAAM;AAAA,EAC9B,SACE;AAAA,IACE,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,YAAAC,IAAa,CAACC,EAAgB,UAAU;AAAA,IACxC,GAAGC;AAAA,EAAA,GAELC,GACA;AACA,WACE,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,WAAAJ;AAAA,QACA,WAAWO,EAAKR,GAAW,iBAAiB;AAAA,QAC5C,YAAAE;AAAA,QACC,GAAGE;AAAA,QAEJ,UAAA,gBAAAE;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,WAAW;AAAA,YAEV,UAAAV;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAGN;AACF;"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ globalThis.ResizeObserver = class {
2
+ observe() {
3
+ }
4
+ unobserve() {
5
+ }
6
+ disconnect() {
7
+ }
8
+ };
9
+ globalThis.IS_REACT_ACT_ENVIRONMENT = !0;
10
+ //# sourceMappingURL=test-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.js","sources":["../src/test-setup.ts"],"sourcesContent":["// ResizeObserver is not available in vitest's jsdom environment.\n// `use_resize_observer.ts` instantiates a registry singleton at module load\n// time, so this stub must be in place before any imports run.\nglobalThis.ResizeObserver = class ResizeObserver {\n observe() {}\n unobserve() {}\n disconnect() {}\n};\n\n// Required for React's act() to work correctly in jsdom tests.\nglobalThis.IS_REACT_ACT_ENVIRONMENT = true;\n"],"names":[],"mappings":"AAGA,WAAW,iBAAiB,MAAqB;AAAA,EAC/C,UAAU;AAAA,EAAC;AAAA,EACX,YAAY;AAAA,EAAC;AAAA,EACb,aAAa;AAAA,EAAC;AAChB;AAGA,WAAW,2BAA2B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/themes/theme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,yBAAyB,CAAC;AAIjC,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,EAAE,UAAU,2CA4BlF"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/themes/theme.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAIxD,OAAO,yBAAyB,CAAC;AAGjC,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,EAAE,UAAU,2CAmBlF"}
@@ -1,36 +1,31 @@
1
- import { jsx as n } from "react/jsx-runtime";
2
- import { useLayoutEffect as r } from "react";
3
- import { Box as i } from "../stacks/box/box.js";
1
+ import { jsx as p } from "react/jsx-runtime";
2
+ import f, { useLayoutEffect as s } from "react";
3
+ import { Box as n } from "../stacks/box/box.js";
4
4
  import "../stacks/h_collapsible_box.js";
5
5
  import "../stacks/h_stack.js";
6
6
  import "../stacks/spacer.js";
7
7
  import "../stacks/v_collapsible_box.js";
8
8
  import "../stacks/v_stack.js";
9
9
  import "../stacks/z_stack.js";
10
- import { clsx as s } from "clsx";
10
+ import { clsx as c } from "clsx";
11
11
  import './stylesheets/reset.css';/* empty css */
12
- import { s as p } from "../theme_provider.module-ChZQ5Xsk.js";
13
- const d = `@layer tcn-reset, tcn-system, tcn-theme;
14
- `;
15
- function j({ styleSheets: e, children: o, className: m, ...c }) {
16
- return r(() => {
17
- document.adoptedStyleSheets = e;
18
- }, [e]), r(() => {
19
- if (document.getElementById("critical-css")) return;
20
- const t = document.createElement("style");
21
- return t.id = "critical-css", t.textContent = d, document.head.prepend(t), () => {
22
- document.getElementById("critical-css")?.remove();
23
- };
24
- }, []), /* @__PURE__ */ n(
25
- i,
12
+ import { s as u } from "../theme_provider.module-ChZQ5Xsk.js";
13
+ function v({ styleSheets: o, children: e, className: m, ...i }) {
14
+ const r = f.useRef(null);
15
+ return s(() => {
16
+ const t = r.current?.getRootNode();
17
+ !t || !("adoptedStyleSheets" in t) || (t.adoptedStyleSheets = o);
18
+ }, [o]), /* @__PURE__ */ p(
19
+ n,
26
20
  {
27
- className: s("tcn-theme-root", p["tcn-theme-provider"], m),
28
- ...c,
29
- children: o
21
+ ref: r,
22
+ className: c("tcn-theme-root", u["tcn-theme-provider"], m),
23
+ ...i,
24
+ children: e
30
25
  }
31
26
  );
32
27
  }
33
28
  export {
34
- j as Theme
29
+ v as Theme
35
30
  };
36
31
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sources":["../../src/css/layers.css?raw","../../src/themes/theme.tsx"],"sourcesContent":["export default \"@layer tcn-reset, tcn-system, tcn-theme;\\n\"","import React, { useLayoutEffect } from 'react';\nimport { Box, type BoxProps } from '../stacks/index.js';\nimport { clsx } from 'clsx';\n\n// Styles\nimport './stylesheets/reset.css';\nimport styles from './theme_provider.module.css';\nimport layers from '../css/layers.css?raw';\n\nexport interface ThemeProps extends BoxProps {\n styleSheets: CSSStyleSheet[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Theme({ styleSheets, children, className, ...boxProps }: ThemeProps) {\n useLayoutEffect(() => {\n document.adoptedStyleSheets = styleSheets;\n }, [styleSheets]);\n\n // I used this approach instead to guarantee the order of the stylesheets\n useLayoutEffect(() => {\n if (document.getElementById('critical-css')) return;\n\n const style = document.createElement('style');\n style.id = 'critical-css';\n style.textContent = layers;\n\n document.head.prepend(style);\n\n return () => {\n document.getElementById('critical-css')?.remove();\n };\n }, []);\n\n return (\n <Box\n className={clsx('tcn-theme-root', styles['tcn-theme-provider'], className)}\n {...boxProps}\n >\n {children}\n </Box>\n );\n}\n"],"names":["layers","Theme","styleSheets","children","className","boxProps","useLayoutEffect","style","jsx","Box","clsx","styles"],"mappings":";;;;;;;;;;;;AAAA,MAAAA,IAAe;AAAA;ACeR,SAASC,EAAM,EAAE,aAAAC,GAAa,UAAAC,GAAU,WAAAC,GAAW,GAAGC,KAAwB;AACnF,SAAAC,EAAgB,MAAM;AACpB,aAAS,qBAAqBJ;AAAA,EAChC,GAAG,CAACA,CAAW,CAAC,GAGhBI,EAAgB,MAAM;AACpB,QAAI,SAAS,eAAe,cAAc,EAAG;AAE7C,UAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,WAAAA,EAAM,KAAK,gBACXA,EAAM,cAAcP,GAEpB,SAAS,KAAK,QAAQO,CAAK,GAEpB,MAAM;AACX,eAAS,eAAe,cAAc,GAAG,OAAA;AAAA,IAC3C;AAAA,EACF,GAAG,CAAA,CAAE,GAGH,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,EAAK,kBAAkBC,EAAO,oBAAoB,GAAGP,CAAS;AAAA,MACxE,GAAGC;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"theme.js","sources":["../../src/themes/theme.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport { Box, type BoxProps } from '../stacks/index.js';\nimport { clsx } from 'clsx';\n\n// Styles\nimport './stylesheets/reset.css';\nimport styles from './theme_provider.module.css';\n\nexport interface ThemeProps extends BoxProps {\n styleSheets: CSSStyleSheet[];\n children: React.ReactNode;\n className?: string;\n}\n\nexport function Theme({ styleSheets, children, className, ...boxProps }: ThemeProps) {\n const ref = React.useRef<HTMLElement>(null);\n\n useLayoutEffect(() => {\n const root = ref.current?.getRootNode();\n if (!root || !('adoptedStyleSheets' in root)) return;\n\n (root as Document | ShadowRoot).adoptedStyleSheets = styleSheets;\n }, [styleSheets]);\n\n return (\n <Box\n ref={ref}\n className={clsx('tcn-theme-root', styles['tcn-theme-provider'], className)}\n {...boxProps}\n >\n {children}\n </Box>\n );\n}\n"],"names":["Theme","styleSheets","children","className","boxProps","ref","React","useLayoutEffect","root","jsx","Box","clsx","styles"],"mappings":";;;;;;;;;;;;AAcO,SAASA,EAAM,EAAE,aAAAC,GAAa,UAAAC,GAAU,WAAAC,GAAW,GAAGC,KAAwB;AACnF,QAAMC,IAAMC,EAAM,OAAoB,IAAI;AAE1C,SAAAC,EAAgB,MAAM;AACpB,UAAMC,IAAOH,EAAI,SAAS,YAAA;AAC1B,IAAI,CAACG,KAAQ,EAAE,wBAAwBA,OAEtCA,EAA+B,qBAAqBP;AAAA,EACvD,GAAG,CAACA,CAAW,CAAC,GAGd,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAK,kBAAkBC,EAAO,oBAAoB,GAAGT,CAAS;AAAA,MACxE,GAAGC;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP;"}