react-panel-layout 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/{FloatingPanelFrame-SgYLc6Ud.js → FloatingPanelFrame-3eU9AwPo.js} +2 -2
  2. package/dist/{FloatingPanelFrame-SgYLc6Ud.js.map → FloatingPanelFrame-3eU9AwPo.js.map} +1 -1
  3. package/dist/FloatingWindow-CUXnEtrb.js +827 -0
  4. package/dist/FloatingWindow-CUXnEtrb.js.map +1 -0
  5. package/dist/FloatingWindow-DMwyK0eK.cjs +2 -0
  6. package/dist/FloatingWindow-DMwyK0eK.cjs.map +1 -0
  7. package/dist/GridLayout-DKTg_N61.cjs +2 -0
  8. package/dist/{GridLayout-B4VRsC0r.cjs.map → GridLayout-DKTg_N61.cjs.map} +1 -1
  9. package/dist/{GridLayout-BltqeCPK.js → GridLayout-UWNxXw77.js} +34 -35
  10. package/dist/{GridLayout-BltqeCPK.js.map → GridLayout-UWNxXw77.js.map} +1 -1
  11. package/dist/{HorizontalDivider-WF1k_qND.js → HorizontalDivider-DdxzfV0l.js} +3 -3
  12. package/dist/{HorizontalDivider-WF1k_qND.js.map → HorizontalDivider-DdxzfV0l.js.map} +1 -1
  13. package/dist/{HorizontalDivider-B5Z-KZLk.cjs → HorizontalDivider-_pgV4Mcv.cjs} +2 -2
  14. package/dist/{HorizontalDivider-B5Z-KZLk.cjs.map → HorizontalDivider-_pgV4Mcv.cjs.map} +1 -1
  15. package/dist/{PanelSystem-Dr1TBhxM.js → PanelSystem-BqUzNtf2.js} +5 -5
  16. package/dist/{PanelSystem-Dr1TBhxM.js.map → PanelSystem-BqUzNtf2.js.map} +1 -1
  17. package/dist/{PanelSystem-Bs8bQwQF.cjs → PanelSystem-D603LKKv.cjs} +2 -2
  18. package/dist/{PanelSystem-Bs8bQwQF.cjs.map → PanelSystem-D603LKKv.cjs.map} +1 -1
  19. package/dist/ResizeHandle-CBcAS918.cjs +2 -0
  20. package/dist/{ResizeHandle-CScipO5l.cjs.map → ResizeHandle-CBcAS918.cjs.map} +1 -1
  21. package/dist/{ResizeHandle-CdA_JYfN.js → ResizeHandle-CXjc1meV.js} +28 -29
  22. package/dist/{ResizeHandle-CdA_JYfN.js.map → ResizeHandle-CXjc1meV.js.map} +1 -1
  23. package/dist/SwipePivotTabBar-DWrCuwEI.js +411 -0
  24. package/dist/SwipePivotTabBar-DWrCuwEI.js.map +1 -0
  25. package/dist/SwipePivotTabBar-fjjXkpj7.cjs +2 -0
  26. package/dist/SwipePivotTabBar-fjjXkpj7.cjs.map +1 -0
  27. package/dist/components/gesture/SwipeSafeZone.d.ts +40 -0
  28. package/dist/components/window/Drawer.d.ts +3 -1
  29. package/dist/components/window/DrawerLayers.d.ts +1 -1
  30. package/dist/components/window/drawerStyles.d.ts +69 -0
  31. package/dist/components/window/drawerSwipeConfig.d.ts +29 -0
  32. package/dist/components/window/useDrawerSwipeTransform.d.ts +23 -0
  33. package/dist/config.cjs +1 -1
  34. package/dist/config.js +3 -3
  35. package/dist/constants/styles.d.ts +17 -0
  36. package/dist/dialog/index.d.ts +69 -0
  37. package/dist/floating.js +1 -1
  38. package/dist/grid.cjs +1 -1
  39. package/dist/grid.js +2 -2
  40. package/dist/hooks/gesture/testing/createGestureSimulator.d.ts +7 -0
  41. package/dist/hooks/gesture/types.d.ts +48 -5
  42. package/dist/hooks/gesture/utils.d.ts +19 -0
  43. package/dist/hooks/useAnimationFrame.d.ts +2 -0
  44. package/dist/hooks/useOperationContinuity.d.ts +64 -0
  45. package/dist/hooks/useResizeObserver.d.ts +33 -1
  46. package/dist/hooks/useSharedElementTransition.d.ts +112 -0
  47. package/dist/hooks/useSwipeContentTransform.d.ts +9 -2
  48. package/dist/index.cjs +1 -1
  49. package/dist/index.js +7 -7
  50. package/dist/modules/dialog/AlertDialog.d.ts +9 -0
  51. package/dist/modules/dialog/DialogContainer.d.ts +37 -0
  52. package/dist/modules/dialog/Modal.d.ts +26 -0
  53. package/dist/modules/dialog/SwipeDialogContainer.d.ts +16 -0
  54. package/dist/modules/dialog/dialogAnimationUtils.d.ts +113 -0
  55. package/dist/modules/dialog/types.d.ts +183 -0
  56. package/dist/modules/dialog/useDialog.d.ts +39 -0
  57. package/dist/modules/dialog/useDialogContainer.d.ts +47 -0
  58. package/dist/modules/dialog/useDialogSwipeInput.d.ts +70 -0
  59. package/dist/modules/dialog/useDialogTransform.d.ts +82 -0
  60. package/dist/modules/drawer/types.d.ts +74 -0
  61. package/dist/modules/drawer/useDrawerSwipeInput.d.ts +24 -0
  62. package/dist/modules/pivot/SwipePivotTabBar.d.ts +3 -0
  63. package/dist/modules/stack/SwipeStackContent.d.ts +6 -3
  64. package/dist/modules/stack/SwipeStackOutlet.d.ts +4 -4
  65. package/dist/modules/stack/computeSwipeStackTransform.d.ts +1 -1
  66. package/dist/panels.cjs +1 -1
  67. package/dist/panels.js +1 -1
  68. package/dist/pivot.cjs +1 -1
  69. package/dist/pivot.js +1 -1
  70. package/dist/resizer.cjs +1 -1
  71. package/dist/resizer.js +2 -2
  72. package/dist/stack.cjs +1 -1
  73. package/dist/stack.cjs.map +1 -1
  74. package/dist/stack.js +503 -762
  75. package/dist/stack.js.map +1 -1
  76. package/dist/sticky-header/calculateStickyMetrics.d.ts +28 -0
  77. package/dist/sticky-header.cjs +1 -1
  78. package/dist/sticky-header.cjs.map +1 -1
  79. package/dist/sticky-header.js +59 -51
  80. package/dist/sticky-header.js.map +1 -1
  81. package/dist/{styles-DPPuJ0sf.js → styles-NkjuMOVS.js} +13 -13
  82. package/dist/{styles-DPPuJ0sf.js.map → styles-NkjuMOVS.js.map} +1 -1
  83. package/dist/styles-qf6ptVLD.cjs.map +1 -1
  84. package/dist/types.d.ts +16 -0
  85. package/dist/useDocumentPointerEvents-DXxw3qWj.js +54 -0
  86. package/dist/useDocumentPointerEvents-DXxw3qWj.js.map +1 -0
  87. package/dist/useDocumentPointerEvents-DxDSOtip.cjs +2 -0
  88. package/dist/useDocumentPointerEvents-DxDSOtip.cjs.map +1 -0
  89. package/dist/useNativeGestureGuard-C7TSqEkr.cjs +2 -0
  90. package/dist/useNativeGestureGuard-C7TSqEkr.cjs.map +1 -0
  91. package/dist/useNativeGestureGuard-CGYo6O0r.js +347 -0
  92. package/dist/useNativeGestureGuard-CGYo6O0r.js.map +1 -0
  93. package/dist/window/index.d.ts +2 -0
  94. package/dist/window.cjs +1 -1
  95. package/dist/window.cjs.map +1 -1
  96. package/dist/window.js +114 -103
  97. package/dist/window.js.map +1 -1
  98. package/package.json +6 -1
  99. package/src/components/gesture/SwipeSafeZone.tsx +69 -0
  100. package/src/components/window/Drawer.tsx +249 -162
  101. package/src/components/window/DrawerLayers.tsx +13 -3
  102. package/src/components/window/drawerStyles.spec.ts +263 -0
  103. package/src/components/window/drawerStyles.ts +228 -0
  104. package/src/components/window/drawerSwipeConfig.spec.ts +131 -0
  105. package/src/components/window/drawerSwipeConfig.ts +112 -0
  106. package/src/components/window/useDrawerSwipeTransform.spec.ts +234 -0
  107. package/src/components/window/useDrawerSwipeTransform.ts +129 -0
  108. package/src/constants/styles.ts +19 -0
  109. package/src/demo/pages/Dialog/alerts/index.tsx +22 -0
  110. package/src/demo/pages/Dialog/card/index.tsx +22 -0
  111. package/src/demo/pages/Dialog/components/AlertDialogDemo.tsx +124 -0
  112. package/src/demo/pages/Dialog/components/CardExpandDemo.module.css +243 -0
  113. package/src/demo/pages/Dialog/components/CardExpandDemo.tsx +204 -0
  114. package/src/demo/pages/Dialog/components/CustomAlertDialogDemo.tsx +219 -0
  115. package/src/demo/pages/Dialog/components/DialogDemos.module.css +77 -0
  116. package/src/demo/pages/Dialog/components/ModalBasics.tsx +45 -0
  117. package/src/demo/pages/Dialog/components/SwipeDialogDemo.module.css +77 -0
  118. package/src/demo/pages/Dialog/components/SwipeDialogDemo.tsx +181 -0
  119. package/src/demo/pages/Dialog/custom-alert/index.tsx +22 -0
  120. package/src/demo/pages/Dialog/modal/index.tsx +17 -0
  121. package/src/demo/pages/Dialog/swipe/index.tsx +22 -0
  122. package/src/demo/pages/Drawer/components/DrawerSwipe.module.css +316 -0
  123. package/src/demo/pages/Drawer/components/DrawerSwipe.tsx +178 -0
  124. package/src/demo/pages/Drawer/swipe/index.tsx +17 -0
  125. package/src/demo/pages/Pivot/components/SwipeTabsPivot.tsx +54 -23
  126. package/src/demo/pages/Pivot/swipe-debug/index.tsx +1 -1
  127. package/src/demo/pages/Stack/components/StackBasics.spec.tsx +152 -0
  128. package/src/demo/pages/Stack/components/StackBasics.tsx +179 -95
  129. package/src/demo/pages/Stack/components/StackTablet.spec.tsx +120 -0
  130. package/src/demo/pages/Stack/components/StackTablet.tsx +42 -21
  131. package/src/demo/routes.tsx +22 -1
  132. package/src/dialog/index.ts +85 -0
  133. package/src/hooks/gesture/testing/createGestureSimulator.spec.ts +68 -64
  134. package/src/hooks/gesture/testing/createGestureSimulator.ts +112 -37
  135. package/src/hooks/gesture/types.ts +83 -6
  136. package/src/hooks/gesture/useEdgeSwipeInput.spec.ts +22 -14
  137. package/src/hooks/gesture/useNativeGestureGuard.spec.ts +91 -31
  138. package/src/hooks/gesture/useNativeGestureGuard.ts +3 -1
  139. package/src/hooks/gesture/utils.ts +91 -0
  140. package/src/hooks/useAnimatedVisibility.spec.ts +44 -24
  141. package/src/hooks/useAnimatedVisibility.ts +28 -2
  142. package/src/hooks/useAnimationFrame.ts +8 -0
  143. package/src/hooks/useOperationContinuity.spec.ts +387 -0
  144. package/src/hooks/useOperationContinuity.ts +135 -0
  145. package/src/hooks/useResizeObserver.spec.tsx +277 -0
  146. package/src/hooks/useResizeObserver.tsx +108 -39
  147. package/src/hooks/useScrollContainer.ts +4 -10
  148. package/src/hooks/useSharedElementTransition.ts +333 -0
  149. package/src/hooks/useSwipeContentTransform.spec.ts +18 -18
  150. package/src/hooks/useSwipeContentTransform.ts +166 -28
  151. package/src/modules/dialog/AlertDialog.spec.tsx +387 -0
  152. package/src/modules/dialog/AlertDialog.tsx +221 -0
  153. package/src/modules/dialog/DialogContainer.spec.tsx +228 -0
  154. package/src/modules/dialog/DialogContainer.tsx +188 -0
  155. package/src/modules/dialog/Modal.spec.tsx +220 -0
  156. package/src/modules/dialog/Modal.tsx +182 -0
  157. package/src/modules/dialog/SwipeDialogContainer.tsx +208 -0
  158. package/src/modules/dialog/dialogAnimationUtils.spec.ts +253 -0
  159. package/src/modules/dialog/dialogAnimationUtils.ts +297 -0
  160. package/src/modules/dialog/types.ts +186 -0
  161. package/src/modules/dialog/useDialog.spec.tsx +447 -0
  162. package/src/modules/dialog/useDialog.ts +214 -0
  163. package/src/modules/dialog/useDialogContainer.spec.ts +331 -0
  164. package/src/modules/dialog/useDialogContainer.ts +150 -0
  165. package/src/modules/dialog/useDialogSwipeInput.spec.ts +157 -0
  166. package/src/modules/dialog/useDialogSwipeInput.ts +319 -0
  167. package/src/modules/dialog/useDialogTransform.spec.ts +370 -0
  168. package/src/modules/dialog/useDialogTransform.ts +407 -0
  169. package/src/modules/drawer/types.ts +102 -0
  170. package/src/modules/drawer/useDrawerSwipeInput.spec.ts +566 -0
  171. package/src/modules/drawer/useDrawerSwipeInput.ts +399 -0
  172. package/src/modules/panels/rendering/ContentRegistry.spec.tsx +21 -14
  173. package/src/modules/pivot/SwipePivotContent.position.spec.tsx +12 -8
  174. package/src/modules/pivot/SwipePivotContent.spec.tsx +55 -25
  175. package/src/modules/pivot/SwipePivotContent.tsx +2 -2
  176. package/src/modules/pivot/SwipePivotTabBar.spec.tsx +85 -68
  177. package/src/modules/pivot/SwipePivotTabBar.tsx +75 -15
  178. package/src/modules/pivot/scaleInputState.spec.ts +11 -2
  179. package/src/modules/pivot/usePivot.spec.ts +17 -3
  180. package/src/modules/pivot/usePivotSwipeInput.spec.ts +182 -123
  181. package/src/modules/stack/SwipeStackContent.spec.tsx +387 -100
  182. package/src/modules/stack/SwipeStackContent.tsx +43 -33
  183. package/src/modules/stack/SwipeStackOutlet.spec.tsx +14 -16
  184. package/src/modules/stack/SwipeStackOutlet.tsx +6 -6
  185. package/src/modules/stack/computeSwipeStackTransform.spec.ts +5 -5
  186. package/src/modules/stack/computeSwipeStackTransform.ts +3 -3
  187. package/src/modules/stack/swipeTransitionContinuity.spec.tsx +1133 -0
  188. package/src/modules/stack/useStackAnimationState.spec.ts +3 -1
  189. package/src/modules/stack/useStackAnimationState.ts +18 -13
  190. package/src/modules/stack/useStackNavigation.spec.ts +198 -3
  191. package/src/modules/stack/useStackNavigation.tsx +113 -56
  192. package/src/modules/stack/useStackSwipeInput.spec.ts +65 -32
  193. package/src/modules/stack/useStackSwipeInput.ts +1 -1
  194. package/src/sticky-header/StickyArea.tsx +29 -57
  195. package/src/sticky-header/calculateStickyMetrics.spec.ts +105 -0
  196. package/src/sticky-header/calculateStickyMetrics.ts +50 -0
  197. package/src/types.ts +18 -0
  198. package/src/window/index.ts +2 -0
  199. package/dist/FloatingWindow-BpdOpg_L.js +0 -400
  200. package/dist/FloatingWindow-BpdOpg_L.js.map +0 -1
  201. package/dist/FloatingWindow-TCDNY5gE.cjs +0 -2
  202. package/dist/FloatingWindow-TCDNY5gE.cjs.map +0 -1
  203. package/dist/GridLayout-B4VRsC0r.cjs +0 -2
  204. package/dist/ResizeHandle-CScipO5l.cjs +0 -2
  205. package/dist/SwipePivotTabBar-BGO9X94m.js +0 -407
  206. package/dist/SwipePivotTabBar-BGO9X94m.js.map +0 -1
  207. package/dist/SwipePivotTabBar-BrQismcZ.cjs +0 -2
  208. package/dist/SwipePivotTabBar-BrQismcZ.cjs.map +0 -1
  209. package/dist/useDocumentPointerEvents-CKdhGXd0.js +0 -46
  210. package/dist/useDocumentPointerEvents-CKdhGXd0.js.map +0 -1
  211. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs +0 -2
  212. package/dist/useDocumentPointerEvents-ChqrKXDk.cjs.map +0 -1
  213. package/dist/useEffectEvent-Dp7HLCf0.js +0 -13
  214. package/dist/useEffectEvent-Dp7HLCf0.js.map +0 -1
  215. package/dist/useEffectEvent-huSsGUnl.cjs +0 -2
  216. package/dist/useEffectEvent-huSsGUnl.cjs.map +0 -1
@@ -0,0 +1,77 @@
1
+ .container {
2
+ padding: 24px;
3
+ min-height: 400px;
4
+ }
5
+
6
+ .section {
7
+ margin-bottom: 24px;
8
+ }
9
+
10
+ .section h3 {
11
+ margin: 0 0 8px 0;
12
+ font-size: 18px;
13
+ font-weight: 600;
14
+ }
15
+
16
+ .section p {
17
+ margin: 0 0 16px 0;
18
+ color: #666;
19
+ }
20
+
21
+ .modalContent {
22
+ min-width: 300px;
23
+ }
24
+
25
+ .modalContent p {
26
+ margin: 0 0 16px 0;
27
+ color: #666;
28
+ line-height: 1.5;
29
+ }
30
+
31
+ .formGroup {
32
+ margin-bottom: 16px;
33
+ }
34
+
35
+ .formGroup label {
36
+ display: block;
37
+ margin-bottom: 4px;
38
+ font-weight: 500;
39
+ font-size: 14px;
40
+ }
41
+
42
+ .input {
43
+ width: 100%;
44
+ padding: 8px 12px;
45
+ border: 1px solid #e5e7eb;
46
+ border-radius: 4px;
47
+ font-size: 14px;
48
+ box-sizing: border-box;
49
+ }
50
+
51
+ .input:focus {
52
+ outline: none;
53
+ border-color: #2196f3;
54
+ box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);
55
+ }
56
+
57
+ .buttonRow {
58
+ display: flex;
59
+ justify-content: flex-end;
60
+ gap: 8px;
61
+ margin-top: 24px;
62
+ }
63
+
64
+ .resultBox {
65
+ margin-top: 16px;
66
+ padding: 12px;
67
+ background: #f5f5f5;
68
+ border-radius: 4px;
69
+ font-family: monospace;
70
+ font-size: 13px;
71
+ }
72
+
73
+ .buttonGroup {
74
+ display: flex;
75
+ flex-wrap: wrap;
76
+ gap: 8px;
77
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @file Modal basics demo
3
+ */
4
+ import * as React from "react";
5
+ import { Modal } from "../../../../modules/dialog/Modal";
6
+ import { DemoButton } from "../../../components/ui/DemoButton";
7
+ import styles from "./DialogDemos.module.css";
8
+
9
+ export const ModalBasics: React.FC = () => {
10
+ const [isOpen, setIsOpen] = React.useState(false);
11
+
12
+ return (
13
+ <div className={styles.container}>
14
+ <div className={styles.section}>
15
+ <h3>Basic Modal</h3>
16
+ <p>A simple modal dialog centered on the screen. Click outside or press Escape to close.</p>
17
+ <DemoButton variant="primary" size="md" onClick={() => setIsOpen(true)}>
18
+ Open Modal
19
+ </DemoButton>
20
+ </div>
21
+
22
+ <Modal visible={isOpen} onClose={() => setIsOpen(false)} header={{ title: "Settings" }}>
23
+ <div className={styles.modalContent}>
24
+ <p>This is a modal dialog. It uses the native HTML dialog element to ensure it appears above all other content.</p>
25
+ <div className={styles.formGroup}>
26
+ <label>Username</label>
27
+ <input type="text" placeholder="Enter username" className={styles.input} />
28
+ </div>
29
+ <div className={styles.formGroup}>
30
+ <label>Email</label>
31
+ <input type="email" placeholder="Enter email" className={styles.input} />
32
+ </div>
33
+ <div className={styles.buttonRow}>
34
+ <DemoButton variant="secondary" size="md" onClick={() => setIsOpen(false)}>
35
+ Cancel
36
+ </DemoButton>
37
+ <DemoButton variant="primary" size="md" onClick={() => setIsOpen(false)}>
38
+ Save
39
+ </DemoButton>
40
+ </div>
41
+ </div>
42
+ </Modal>
43
+ </div>
44
+ );
45
+ };
@@ -0,0 +1,77 @@
1
+ .container {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 16px;
5
+ padding: 24px;
6
+ }
7
+
8
+ .section {
9
+ margin-bottom: 24px;
10
+ }
11
+
12
+ .label {
13
+ font-size: 12px;
14
+ font-weight: 600;
15
+ color: var(--color-text-secondary, #6b7280);
16
+ margin-bottom: 8px;
17
+ text-transform: uppercase;
18
+ letter-spacing: 0.05em;
19
+ }
20
+
21
+ .buttonGroup {
22
+ display: flex;
23
+ gap: 12px;
24
+ flex-wrap: wrap;
25
+ }
26
+
27
+ .modalContent {
28
+ padding: 24px;
29
+ min-height: 200px;
30
+ display: flex;
31
+ flex-direction: column;
32
+ gap: 16px;
33
+ }
34
+
35
+ .scrollableContent {
36
+ padding: 24px;
37
+ height: 400px;
38
+ overflow: auto;
39
+ }
40
+
41
+ .infoBox {
42
+ padding: 16px;
43
+ background-color: rgba(59, 130, 246, 0.1);
44
+ border-radius: 8px;
45
+ font-size: 14px;
46
+ line-height: 1.6;
47
+ }
48
+
49
+ .actionSheet {
50
+ width: 100%;
51
+ max-width: 400px;
52
+ background-color: var(--color-bg-primary, #fff);
53
+ border-radius: 16px 16px 0 0;
54
+ overflow: hidden;
55
+ }
56
+
57
+ .actionItem {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 12px;
61
+ width: 100%;
62
+ padding: 16px 20px;
63
+ border: none;
64
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
65
+ background-color: transparent;
66
+ font-size: 16px;
67
+ cursor: pointer;
68
+ text-align: left;
69
+ }
70
+
71
+ .actionItem:hover {
72
+ background-color: rgba(0, 0, 0, 0.05);
73
+ }
74
+
75
+ .actionIcon {
76
+ font-size: 20px;
77
+ }
@@ -0,0 +1,181 @@
1
+ /**
2
+ * @file SwipeDialogDemo - Demonstration of swipeable dialog functionality
3
+ */
4
+ import * as React from "react";
5
+ import { Modal } from "../../../../modules/dialog/Modal.js";
6
+ import { DialogContainer } from "../../../../modules/dialog/DialogContainer.js";
7
+ import {
8
+ FloatingPanelFrame,
9
+ FloatingPanelHeader,
10
+ FloatingPanelTitle,
11
+ FloatingPanelContent,
12
+ } from "../../../../components/paneling/FloatingPanelFrame.js";
13
+ import { DemoButton } from "../../../components/ui/DemoButton.js";
14
+ import styles from "./SwipeDialogDemo.module.css";
15
+
16
+ /**
17
+ * Demo component for swipeable dialogs
18
+ */
19
+ export const SwipeDialogDemo: React.FC = () => {
20
+ const [bottomModal, setBottomModal] = React.useState(false);
21
+ const [centerModal, setCenterModal] = React.useState(false);
22
+ const [scrollableModal, setScrollableModal] = React.useState(false);
23
+ const [customSheet, setCustomSheet] = React.useState(false);
24
+
25
+ return (
26
+ <div className={styles.container}>
27
+ {/* Bottom Sheet Style */}
28
+ <div className={styles.section}>
29
+ <div className={styles.label}>Bottom Sheet (Swipe Down)</div>
30
+ <div className={styles.buttonGroup}>
31
+ <DemoButton onClick={() => setBottomModal(true)}>
32
+ Open Bottom Sheet
33
+ </DemoButton>
34
+ </div>
35
+ </div>
36
+
37
+ {/* Center Modal with Swipe */}
38
+ <div className={styles.section}>
39
+ <div className={styles.label}>Center Modal (Swipe Down)</div>
40
+ <div className={styles.buttonGroup}>
41
+ <DemoButton variant="secondary" onClick={() => setCenterModal(true)}>
42
+ Open Center Modal
43
+ </DemoButton>
44
+ </div>
45
+ </div>
46
+
47
+ {/* Scrollable Content */}
48
+ <div className={styles.section}>
49
+ <div className={styles.label}>With Scrollable Content</div>
50
+ <div className={styles.buttonGroup}>
51
+ <DemoButton variant="secondary" onClick={() => setScrollableModal(true)}>
52
+ Open Scrollable Modal
53
+ </DemoButton>
54
+ </div>
55
+ </div>
56
+
57
+ {/* Custom Action Sheet */}
58
+ <div className={styles.section}>
59
+ <div className={styles.label}>Custom Action Sheet</div>
60
+ <div className={styles.buttonGroup}>
61
+ <DemoButton onClick={() => setCustomSheet(true)}>
62
+ Open Action Sheet
63
+ </DemoButton>
64
+ </div>
65
+ </div>
66
+
67
+ {/* Bottom Sheet Modal */}
68
+ <Modal
69
+ visible={bottomModal}
70
+ onClose={() => setBottomModal(false)}
71
+ transitionMode="swipe"
72
+ openDirection="bottom"
73
+ swipeDismissible={true}
74
+ header={{ title: "Bottom Sheet" }}
75
+ width={400}
76
+ >
77
+ <div className={styles.modalContent}>
78
+ <div className={styles.infoBox}>
79
+ Swipe down to close this modal. The animation has two phases: translate movement followed by a scale-down
80
+ effect.
81
+ </div>
82
+ <p>This modal opens from the bottom and can be dismissed by swiping down.</p>
83
+ <DemoButton variant="secondary" onClick={() => setBottomModal(false)}>
84
+ Close
85
+ </DemoButton>
86
+ </div>
87
+ </Modal>
88
+
89
+ {/* Center Modal */}
90
+ <Modal
91
+ visible={centerModal}
92
+ onClose={() => setCenterModal(false)}
93
+ transitionMode="swipe"
94
+ openDirection="center"
95
+ swipeDismissible={true}
96
+ header={{ title: "Swipeable Modal" }}
97
+ width={400}
98
+ >
99
+ <div className={styles.modalContent}>
100
+ <div className={styles.infoBox}>
101
+ Even centered modals can be dismissed by swiping down. The threshold is 30% of the container height or a
102
+ quick flick.
103
+ </div>
104
+ <p>Try swiping this modal down to dismiss it.</p>
105
+ <DemoButton variant="secondary" onClick={() => setCenterModal(false)}>
106
+ Close
107
+ </DemoButton>
108
+ </div>
109
+ </Modal>
110
+
111
+ {/* Scrollable Content Modal */}
112
+ <Modal
113
+ visible={scrollableModal}
114
+ onClose={() => setScrollableModal(false)}
115
+ transitionMode="swipe"
116
+ openDirection="bottom"
117
+ swipeDismissible={true}
118
+ header={{ title: "Scrollable Content" }}
119
+ width={400}
120
+ height={500}
121
+ >
122
+ <div className={styles.scrollableContent}>
123
+ <div className={styles.infoBox} style={{ marginBottom: "16px" }}>
124
+ Swipe gestures are detected only when NOT scrolling. Try scrolling the content below, then swipe down from
125
+ the header area.
126
+ </div>
127
+ {Array.from({ length: 20 }).map((_, i) => (
128
+ <p key={i} style={{ marginBottom: "12px" }}>
129
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et
130
+ dolore magna aliqua. Item {i + 1}.
131
+ </p>
132
+ ))}
133
+ </div>
134
+ </Modal>
135
+
136
+ {/* Custom Action Sheet */}
137
+ <DialogContainer
138
+ visible={customSheet}
139
+ onClose={() => setCustomSheet(false)}
140
+ transitionMode="swipe"
141
+ openDirection="bottom"
142
+ swipeDismissible={true}
143
+ >
144
+ <div className={styles.actionSheet}>
145
+ <FloatingPanelFrame>
146
+ <FloatingPanelHeader>
147
+ <FloatingPanelTitle>Actions</FloatingPanelTitle>
148
+ </FloatingPanelHeader>
149
+ <FloatingPanelContent style={{ padding: 0 }}>
150
+ <ActionItem icon="📷" label="Take Photo" onClick={() => setCustomSheet(false)} />
151
+ <ActionItem icon="🖼️" label="Choose from Library" onClick={() => setCustomSheet(false)} />
152
+ <ActionItem icon="📁" label="Browse Files" onClick={() => setCustomSheet(false)} />
153
+ <ActionItem icon="❌" label="Cancel" onClick={() => setCustomSheet(false)} isDestructive />
154
+ </FloatingPanelContent>
155
+ </FloatingPanelFrame>
156
+ </div>
157
+ </DialogContainer>
158
+ </div>
159
+ );
160
+ };
161
+
162
+ type ActionItemProps = {
163
+ icon: string;
164
+ label: string;
165
+ onClick: () => void;
166
+ isDestructive?: boolean;
167
+ };
168
+
169
+ const ActionItem: React.FC<ActionItemProps> = ({ icon, label, onClick, isDestructive }) => {
170
+ return (
171
+ <button
172
+ type="button"
173
+ onClick={onClick}
174
+ className={styles.actionItem}
175
+ style={{ color: isDestructive ? "#ef4444" : undefined }}
176
+ >
177
+ <span className={styles.actionIcon}>{icon}</span>
178
+ <span>{label}</span>
179
+ </button>
180
+ );
181
+ };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @file Dialog - Custom Alert page
3
+ */
4
+ import * as React from "react";
5
+ import { CustomAlertDialogDemo } from "../components/CustomAlertDialogDemo";
6
+ import CustomAlertDialogDemoSource from "../components/CustomAlertDialogDemo.tsx?raw";
7
+ import { SingleSamplePage } from "../../../components/layout";
8
+
9
+ const Page: React.FC = () => {
10
+ return (
11
+ <SingleSamplePage
12
+ title="Dialog / Custom Alert Component"
13
+ code={CustomAlertDialogDemoSource}
14
+ codeTitle="CustomAlertDialogDemo.tsx"
15
+ previewHeight={520}
16
+ >
17
+ <CustomAlertDialogDemo />
18
+ </SingleSamplePage>
19
+ );
20
+ };
21
+
22
+ export default Page;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @file Dialog - Modal page
3
+ */
4
+ import * as React from "react";
5
+ import { ModalBasics } from "../components/ModalBasics";
6
+ import ModalBasicsSource from "../components/ModalBasics.tsx?raw";
7
+ import { SingleSamplePage } from "../../../components/layout";
8
+
9
+ const Page: React.FC = () => {
10
+ return (
11
+ <SingleSamplePage title="Dialog / Modal" code={ModalBasicsSource} codeTitle="ModalBasics.tsx" previewHeight={480}>
12
+ <ModalBasics />
13
+ </SingleSamplePage>
14
+ );
15
+ };
16
+
17
+ export default Page;
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @file Dialog - Swipe Dismiss page
3
+ */
4
+ import * as React from "react";
5
+ import { SwipeDialogDemo } from "../components/SwipeDialogDemo.js";
6
+ import SwipeDialogDemoSource from "../components/SwipeDialogDemo.tsx?raw";
7
+ import { SingleSamplePage } from "../../../components/layout/index.js";
8
+
9
+ const Page: React.FC = () => {
10
+ return (
11
+ <SingleSamplePage
12
+ title="Dialog / Swipe Dismiss"
13
+ code={SwipeDialogDemoSource}
14
+ codeTitle="SwipeDialogDemo.tsx"
15
+ previewHeight={600}
16
+ >
17
+ <SwipeDialogDemo />
18
+ </SingleSamplePage>
19
+ );
20
+ };
21
+
22
+ export default Page;