@os-design/core 1.0.148 → 1.0.149

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.
@@ -68,10 +68,13 @@ var GalleryHelp = _styled["default"].div(_templateObject3 || (_templateObject3 =
68
68
  return p.theme.borderRadius;
69
69
  });
70
70
 
71
+ var MIN_DIST_PX = 10;
72
+ var MAX_ANGLE = 30;
71
73
  /**
72
74
  * The image gallery. Change the cursor/touch position to change images.
73
75
  * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.
74
76
  */
77
+
75
78
  var Gallery = function Gallery(_ref) {
76
79
  var urls = _ref.urls,
77
80
  _ref$aspectRatio = _ref.aspectRatio,
@@ -104,6 +107,8 @@ var Gallery = function Gallery(_ref) {
104
107
  setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);
105
108
  }, [imageIndex, urls]);
106
109
  var containerRef = (0, _react.useRef)(null);
110
+ var allowedRef = (0, _react.useRef)(false);
111
+ var startPosRef = (0, _react.useRef)(null);
107
112
  var size = (0, _utils.useSize)(containerRef);
108
113
  var sizeRef = (0, _react.useRef)(size);
109
114
  (0, _react.useEffect)(function () {
@@ -130,16 +135,53 @@ var Gallery = function Gallery(_ref) {
130
135
  var mouseMoveHandler = (0, _react.useCallback)(function (e) {
131
136
  return updateGalleryImage(e.clientX);
132
137
  }, [updateGalleryImage]);
138
+ var touchStartHandler = (0, _react.useCallback)(function (e) {
139
+ var _e$touches$ = e.touches[0],
140
+ clientX = _e$touches$.clientX,
141
+ clientY = _e$touches$.clientY;
142
+ startPosRef.current = {
143
+ x: clientX,
144
+ y: clientY
145
+ };
146
+ }, []);
133
147
  var touchMoveHandler = (0, _react.useCallback)(function (e) {
134
- return updateGalleryImage(e.touches[0].clientX);
148
+ if (!allowedRef.current) {
149
+ if (!startPosRef.current) return;
150
+ var _startPosRef$current = startPosRef.current,
151
+ x = _startPosRef$current.x,
152
+ y = _startPosRef$current.y;
153
+ var _e$touches$2 = e.touches[0],
154
+ clientX = _e$touches$2.clientX,
155
+ clientY = _e$touches$2.clientY;
156
+ var diffX = Math.abs(x - clientX);
157
+ var diffY = Math.abs(y - clientY);
158
+ var diff = Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2));
159
+ if (diff < MIN_DIST_PX) return;
160
+ var angle = Math.atan(diffY / diffX) * 180 / Math.PI;
161
+
162
+ if (angle > MAX_ANGLE) {
163
+ startPosRef.current = null;
164
+ return;
165
+ }
166
+
167
+ allowedRef.current = true;
168
+ }
169
+
170
+ updateGalleryImage(e.touches[0].clientX);
135
171
  }, [updateGalleryImage]);
172
+ var touchEndHandler = (0, _react.useCallback)(function () {
173
+ allowedRef.current = false;
174
+ startPosRef.current = null;
175
+ }, []);
136
176
  return /*#__PURE__*/_react["default"].createElement(_theming.ThemeOverrider, {
137
177
  activeTheme: "dark"
138
178
  }, /*#__PURE__*/_react["default"].createElement(Container, _extends({
139
179
  ref: containerRef,
140
180
  heightPercent: heightPercent,
141
181
  onMouseMove: mouseMoveHandler,
142
- onTouchMove: touchMoveHandler
182
+ onTouchStart: touchStartHandler,
183
+ onTouchMove: touchMoveHandler,
184
+ onTouchEnd: touchEndHandler
143
185
  }, rest), /*#__PURE__*/_react["default"].createElement(StyledImage, _extends({
144
186
  url: imageUrl
145
187
  }, imageProps)), urls.length > 1 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, imageIndex !== null && /*#__PURE__*/_react["default"].createElement(_Status["default"], {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Container","styled","omitEmotionProps","p","heightPercent","clr","theme","galleryColorBg","borderRadius","StyledImage","Image","GalleryHelp","div","galleryHelpColorBg","galleryHelpColorText","sizes","small","Gallery","urls","aspectRatio","help","imageProps","children","rest","useState","undefined","imageUrl","setImageUrl","length","imageIndex","setImageIndex","useMemo","Math","round","imageIndexRef","useRef","useEffect","current","containerRef","size","useSize","sizeRef","statusHeight","height","updateGalleryImage","useCallback","clientX","getBoundingClientRect","x","widthPerImage","width","xPos","nextIndex","floor","mouseMoveHandler","e","touchMoveHandler","touches"],"sources":["../../../src/Gallery/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useSize } from '@os-design/utils';\nimport React, {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Image, { ImageProps } from '../Image';\nimport GalleryStatus from './Status';\n\ninterface ContainerProps {\n heightPercent: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('heightPercent')\n)<ContainerProps>`\n position: relative;\n padding-bottom: ${(p) => p.heightPercent}%;\n\n display: flex;\n justify-content: center;\n\n background-color: ${(p) => clr(p.theme.galleryColorBg)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n overflow: hidden;\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n width: auto;\n height: 100%;\n border-radius: 0;\n`;\n\nconst GalleryHelp = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n\n background-color: ${(p) => clr(p.theme.galleryHelpColorBg)};\n color: ${(p) => clr(p.theme.galleryHelpColorText)};\n backdrop-filter: blur(0.2em);\n\n font-size: ${(p) => p.theme.sizes.small}em;\n font-weight: 500;\n\n border-bottom-left-radius: ${(p) => p.theme.borderRadius}em;\n padding: 0.1em 0.5em;\n`;\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface GalleryProps extends JsxDivProps {\n /**\n * The image urls.\n */\n urls: string[] | ReadonlyArray<string>;\n /**\n * The aspect ratio of the gallery.\n * E.g. [16,9] – 16:9.\n */\n aspectRatio?: [number, number];\n /**\n * The help message that is displayed in the upper right corner.\n */\n help?: string;\n /**\n * The props of the image component.\n */\n imageProps?: Omit<ImageProps, 'url'>;\n /**\n * The children that can be displayed on top of the image.\n * E.g. tags.\n */\n children?: React.ReactNode;\n}\n\n/**\n * The image gallery. Change the cursor/touch position to change images.\n * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.\n */\nconst Gallery: React.FC<GalleryProps> = ({\n urls,\n aspectRatio = [16, 9],\n help,\n imageProps = {},\n children,\n ...rest\n}) => {\n const [imageUrl, setImageUrl] = useState<string | undefined>(undefined);\n const [imageIndex, setImageIndex] = useState(urls.length > 0 ? 0 : null);\n\n const heightPercent = useMemo(\n () => Math.round((aspectRatio[1] / aspectRatio[0]) * 1000000) / 10000,\n [aspectRatio]\n );\n\n const imageIndexRef = useRef(imageIndex);\n useEffect(() => {\n imageIndexRef.current = imageIndex;\n }, [imageIndex]);\n\n // Update the image if the index was changed\n useEffect(() => {\n setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);\n }, [imageIndex, urls]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const size = useSize(containerRef);\n const sizeRef = useRef(size);\n useEffect(() => {\n sizeRef.current = size;\n }, [size]);\n\n const statusHeight = useMemo(\n () => Math.round(size.height / 70),\n [size.height]\n );\n\n const updateGalleryImage = useCallback(\n (clientX: number) => {\n if (!containerRef.current) return;\n const { x } = containerRef.current.getBoundingClientRect();\n const widthPerImage = sizeRef.current.width / urls.length;\n const xPos = clientX - x;\n if (xPos < 0) return;\n const nextIndex = Math.floor(xPos / widthPerImage);\n if (imageIndexRef.current !== nextIndex) {\n setImageIndex(nextIndex);\n }\n },\n [urls.length]\n );\n\n const mouseMoveHandler = useCallback<MouseEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.clientX),\n [updateGalleryImage]\n );\n\n const touchMoveHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.touches[0].clientX),\n [updateGalleryImage]\n );\n\n return (\n <ThemeOverrider activeTheme='dark'>\n <Container\n ref={containerRef}\n heightPercent={heightPercent}\n onMouseMove={mouseMoveHandler}\n onTouchMove={touchMoveHandler}\n {...rest}\n >\n <StyledImage url={imageUrl} {...imageProps} />\n {urls.length > 1 && (\n <>\n {imageIndex !== null && (\n <GalleryStatus\n count={urls.length}\n current={imageIndex}\n height={statusHeight}\n />\n )}\n {help && <GalleryHelp>{help}</GalleryHelp>}\n </>\n )}\n {children}\n </Container>\n </ThemeOverrider>\n );\n};\n\nexport default Gallery;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["Container","styled","omitEmotionProps","p","heightPercent","clr","theme","galleryColorBg","borderRadius","StyledImage","Image","GalleryHelp","div","galleryHelpColorBg","galleryHelpColorText","sizes","small","MIN_DIST_PX","MAX_ANGLE","Gallery","urls","aspectRatio","help","imageProps","children","rest","useState","undefined","imageUrl","setImageUrl","length","imageIndex","setImageIndex","useMemo","Math","round","imageIndexRef","useRef","useEffect","current","containerRef","allowedRef","startPosRef","size","useSize","sizeRef","statusHeight","height","updateGalleryImage","useCallback","clientX","getBoundingClientRect","x","widthPerImage","width","xPos","nextIndex","floor","mouseMoveHandler","e","touchStartHandler","touches","clientY","y","touchMoveHandler","diffX","abs","diffY","diff","sqrt","angle","atan","PI","touchEndHandler"],"sources":["../../../src/Gallery/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useSize } from '@os-design/utils';\nimport React, {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Image, { ImageProps } from '../Image';\nimport GalleryStatus from './Status';\n\ninterface ContainerProps {\n heightPercent: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('heightPercent')\n)<ContainerProps>`\n position: relative;\n padding-bottom: ${(p) => p.heightPercent}%;\n\n display: flex;\n justify-content: center;\n\n background-color: ${(p) => clr(p.theme.galleryColorBg)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n overflow: hidden;\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n width: auto;\n height: 100%;\n border-radius: 0;\n`;\n\nconst GalleryHelp = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n\n background-color: ${(p) => clr(p.theme.galleryHelpColorBg)};\n color: ${(p) => clr(p.theme.galleryHelpColorText)};\n backdrop-filter: blur(0.2em);\n\n font-size: ${(p) => p.theme.sizes.small}em;\n font-weight: 500;\n\n border-bottom-left-radius: ${(p) => p.theme.borderRadius}em;\n padding: 0.1em 0.5em;\n`;\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface GalleryProps extends JsxDivProps {\n /**\n * The image urls.\n */\n urls: string[] | ReadonlyArray<string>;\n /**\n * The aspect ratio of the gallery.\n * E.g. [16,9] – 16:9.\n */\n aspectRatio?: [number, number];\n /**\n * The help message that is displayed in the upper right corner.\n */\n help?: string;\n /**\n * The props of the image component.\n */\n imageProps?: Omit<ImageProps, 'url'>;\n /**\n * The children that can be displayed on top of the image.\n * E.g. tags.\n */\n children?: React.ReactNode;\n}\n\nconst MIN_DIST_PX = 10;\nconst MAX_ANGLE = 30;\n\n/**\n * The image gallery. Change the cursor/touch position to change images.\n * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.\n */\nconst Gallery: React.FC<GalleryProps> = ({\n urls,\n aspectRatio = [16, 9],\n help,\n imageProps = {},\n children,\n ...rest\n}) => {\n const [imageUrl, setImageUrl] = useState<string | undefined>(undefined);\n const [imageIndex, setImageIndex] = useState(urls.length > 0 ? 0 : null);\n\n const heightPercent = useMemo(\n () => Math.round((aspectRatio[1] / aspectRatio[0]) * 1000000) / 10000,\n [aspectRatio]\n );\n\n const imageIndexRef = useRef(imageIndex);\n useEffect(() => {\n imageIndexRef.current = imageIndex;\n }, [imageIndex]);\n\n // Update the image if the index was changed\n useEffect(() => {\n setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);\n }, [imageIndex, urls]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const allowedRef = useRef(false);\n const startPosRef = useRef<{ x: number; y: number } | null>(null);\n\n const size = useSize(containerRef);\n const sizeRef = useRef(size);\n useEffect(() => {\n sizeRef.current = size;\n }, [size]);\n\n const statusHeight = useMemo(\n () => Math.round(size.height / 70),\n [size.height]\n );\n\n const updateGalleryImage = useCallback(\n (clientX: number) => {\n if (!containerRef.current) return;\n const { x } = containerRef.current.getBoundingClientRect();\n const widthPerImage = sizeRef.current.width / urls.length;\n const xPos = clientX - x;\n if (xPos < 0) return;\n const nextIndex = Math.floor(xPos / widthPerImage);\n if (imageIndexRef.current !== nextIndex) {\n setImageIndex(nextIndex);\n }\n },\n [urls.length]\n );\n\n const mouseMoveHandler = useCallback<MouseEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.clientX),\n [updateGalleryImage]\n );\n\n const touchStartHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => {\n const { clientX, clientY } = e.touches[0];\n startPosRef.current = { x: clientX, y: clientY };\n },\n []\n );\n\n const touchMoveHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => {\n if (!allowedRef.current) {\n if (!startPosRef.current) return;\n const { x, y } = startPosRef.current;\n const { clientX, clientY } = e.touches[0];\n const diffX = Math.abs(x - clientX);\n const diffY = Math.abs(y - clientY);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff < MIN_DIST_PX) return;\n const angle = (Math.atan(diffY / diffX) * 180) / Math.PI;\n if (angle > MAX_ANGLE) {\n startPosRef.current = null;\n return;\n }\n allowedRef.current = true;\n }\n updateGalleryImage(e.touches[0].clientX);\n },\n [updateGalleryImage]\n );\n\n const touchEndHandler = useCallback<TouchEventHandler<HTMLDivElement>>(() => {\n allowedRef.current = false;\n startPosRef.current = null;\n }, []);\n\n return (\n <ThemeOverrider activeTheme='dark'>\n <Container\n ref={containerRef}\n heightPercent={heightPercent}\n onMouseMove={mouseMoveHandler}\n onTouchStart={touchStartHandler}\n onTouchMove={touchMoveHandler}\n onTouchEnd={touchEndHandler}\n {...rest}\n >\n <StyledImage url={imageUrl} {...imageProps} />\n {urls.length > 1 && (\n <>\n {imageIndex !== null && (\n <GalleryStatus\n count={urls.length}\n current={imageIndex}\n height={statusHeight}\n />\n )}\n {help && <GalleryHelp>{help}</GalleryHelp>}\n </>\n )}\n {children}\n </Container>\n </ThemeOverrider>\n );\n};\n\nexport default Gallery;\n"],"mappings":"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"}
@@ -38,11 +38,13 @@ const GalleryHelp = styled.div`
38
38
  border-bottom-left-radius: ${p => p.theme.borderRadius}em;
39
39
  padding: 0.1em 0.5em;
40
40
  `;
41
-
41
+ const MIN_DIST_PX = 10;
42
+ const MAX_ANGLE = 30;
42
43
  /**
43
44
  * The image gallery. Change the cursor/touch position to change images.
44
45
  * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.
45
46
  */
47
+
46
48
  const Gallery = ({
47
49
  urls,
48
50
  aspectRatio = [16, 9],
@@ -63,6 +65,8 @@ const Gallery = ({
63
65
  setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);
64
66
  }, [imageIndex, urls]);
65
67
  const containerRef = useRef(null);
68
+ const allowedRef = useRef(false);
69
+ const startPosRef = useRef(null);
66
70
  const size = useSize(containerRef);
67
71
  const sizeRef = useRef(size);
68
72
  useEffect(() => {
@@ -84,14 +88,56 @@ const Gallery = ({
84
88
  }
85
89
  }, [urls.length]);
86
90
  const mouseMoveHandler = useCallback(e => updateGalleryImage(e.clientX), [updateGalleryImage]);
87
- const touchMoveHandler = useCallback(e => updateGalleryImage(e.touches[0].clientX), [updateGalleryImage]);
91
+ const touchStartHandler = useCallback(e => {
92
+ const {
93
+ clientX,
94
+ clientY
95
+ } = e.touches[0];
96
+ startPosRef.current = {
97
+ x: clientX,
98
+ y: clientY
99
+ };
100
+ }, []);
101
+ const touchMoveHandler = useCallback(e => {
102
+ if (!allowedRef.current) {
103
+ if (!startPosRef.current) return;
104
+ const {
105
+ x,
106
+ y
107
+ } = startPosRef.current;
108
+ const {
109
+ clientX,
110
+ clientY
111
+ } = e.touches[0];
112
+ const diffX = Math.abs(x - clientX);
113
+ const diffY = Math.abs(y - clientY);
114
+ const diff = Math.sqrt(diffX ** 2 + diffY ** 2);
115
+ if (diff < MIN_DIST_PX) return;
116
+ const angle = Math.atan(diffY / diffX) * 180 / Math.PI;
117
+
118
+ if (angle > MAX_ANGLE) {
119
+ startPosRef.current = null;
120
+ return;
121
+ }
122
+
123
+ allowedRef.current = true;
124
+ }
125
+
126
+ updateGalleryImage(e.touches[0].clientX);
127
+ }, [updateGalleryImage]);
128
+ const touchEndHandler = useCallback(() => {
129
+ allowedRef.current = false;
130
+ startPosRef.current = null;
131
+ }, []);
88
132
  return /*#__PURE__*/React.createElement(ThemeOverrider, {
89
133
  activeTheme: "dark"
90
134
  }, /*#__PURE__*/React.createElement(Container, _extends({
91
135
  ref: containerRef,
92
136
  heightPercent: heightPercent,
93
137
  onMouseMove: mouseMoveHandler,
94
- onTouchMove: touchMoveHandler
138
+ onTouchStart: touchStartHandler,
139
+ onTouchMove: touchMoveHandler,
140
+ onTouchEnd: touchEndHandler
95
141
  }, rest), /*#__PURE__*/React.createElement(StyledImage, _extends({
96
142
  url: imageUrl
97
143
  }, imageProps)), urls.length > 1 && /*#__PURE__*/React.createElement(React.Fragment, null, imageIndex !== null && /*#__PURE__*/React.createElement(GalleryStatus, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["styled","clr","ThemeOverrider","omitEmotionProps","useSize","React","useCallback","useEffect","useMemo","useRef","useState","Image","GalleryStatus","Container","p","heightPercent","theme","galleryColorBg","borderRadius","StyledImage","GalleryHelp","div","galleryHelpColorBg","galleryHelpColorText","sizes","small","Gallery","urls","aspectRatio","help","imageProps","children","rest","imageUrl","setImageUrl","undefined","imageIndex","setImageIndex","length","Math","round","imageIndexRef","current","containerRef","size","sizeRef","statusHeight","height","updateGalleryImage","clientX","x","getBoundingClientRect","widthPerImage","width","xPos","nextIndex","floor","mouseMoveHandler","e","touchMoveHandler","touches"],"sources":["../../../src/Gallery/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useSize } from '@os-design/utils';\nimport React, {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Image, { ImageProps } from '../Image';\nimport GalleryStatus from './Status';\n\ninterface ContainerProps {\n heightPercent: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('heightPercent')\n)<ContainerProps>`\n position: relative;\n padding-bottom: ${(p) => p.heightPercent}%;\n\n display: flex;\n justify-content: center;\n\n background-color: ${(p) => clr(p.theme.galleryColorBg)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n overflow: hidden;\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n width: auto;\n height: 100%;\n border-radius: 0;\n`;\n\nconst GalleryHelp = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n\n background-color: ${(p) => clr(p.theme.galleryHelpColorBg)};\n color: ${(p) => clr(p.theme.galleryHelpColorText)};\n backdrop-filter: blur(0.2em);\n\n font-size: ${(p) => p.theme.sizes.small}em;\n font-weight: 500;\n\n border-bottom-left-radius: ${(p) => p.theme.borderRadius}em;\n padding: 0.1em 0.5em;\n`;\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface GalleryProps extends JsxDivProps {\n /**\n * The image urls.\n */\n urls: string[] | ReadonlyArray<string>;\n /**\n * The aspect ratio of the gallery.\n * E.g. [16,9] – 16:9.\n */\n aspectRatio?: [number, number];\n /**\n * The help message that is displayed in the upper right corner.\n */\n help?: string;\n /**\n * The props of the image component.\n */\n imageProps?: Omit<ImageProps, 'url'>;\n /**\n * The children that can be displayed on top of the image.\n * E.g. tags.\n */\n children?: React.ReactNode;\n}\n\n/**\n * The image gallery. Change the cursor/touch position to change images.\n * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.\n */\nconst Gallery: React.FC<GalleryProps> = ({\n urls,\n aspectRatio = [16, 9],\n help,\n imageProps = {},\n children,\n ...rest\n}) => {\n const [imageUrl, setImageUrl] = useState<string | undefined>(undefined);\n const [imageIndex, setImageIndex] = useState(urls.length > 0 ? 0 : null);\n\n const heightPercent = useMemo(\n () => Math.round((aspectRatio[1] / aspectRatio[0]) * 1000000) / 10000,\n [aspectRatio]\n );\n\n const imageIndexRef = useRef(imageIndex);\n useEffect(() => {\n imageIndexRef.current = imageIndex;\n }, [imageIndex]);\n\n // Update the image if the index was changed\n useEffect(() => {\n setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);\n }, [imageIndex, urls]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n const size = useSize(containerRef);\n const sizeRef = useRef(size);\n useEffect(() => {\n sizeRef.current = size;\n }, [size]);\n\n const statusHeight = useMemo(\n () => Math.round(size.height / 70),\n [size.height]\n );\n\n const updateGalleryImage = useCallback(\n (clientX: number) => {\n if (!containerRef.current) return;\n const { x } = containerRef.current.getBoundingClientRect();\n const widthPerImage = sizeRef.current.width / urls.length;\n const xPos = clientX - x;\n if (xPos < 0) return;\n const nextIndex = Math.floor(xPos / widthPerImage);\n if (imageIndexRef.current !== nextIndex) {\n setImageIndex(nextIndex);\n }\n },\n [urls.length]\n );\n\n const mouseMoveHandler = useCallback<MouseEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.clientX),\n [updateGalleryImage]\n );\n\n const touchMoveHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.touches[0].clientX),\n [updateGalleryImage]\n );\n\n return (\n <ThemeOverrider activeTheme='dark'>\n <Container\n ref={containerRef}\n heightPercent={heightPercent}\n onMouseMove={mouseMoveHandler}\n onTouchMove={touchMoveHandler}\n {...rest}\n >\n <StyledImage url={imageUrl} {...imageProps} />\n {urls.length > 1 && (\n <>\n {imageIndex !== null && (\n <GalleryStatus\n count={urls.length}\n current={imageIndex}\n height={statusHeight}\n />\n )}\n {help && <GalleryHelp>{help}</GalleryHelp>}\n </>\n )}\n {children}\n </Container>\n </ThemeOverrider>\n );\n};\n\nexport default Gallery;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["styled","clr","ThemeOverrider","omitEmotionProps","useSize","React","useCallback","useEffect","useMemo","useRef","useState","Image","GalleryStatus","Container","p","heightPercent","theme","galleryColorBg","borderRadius","StyledImage","GalleryHelp","div","galleryHelpColorBg","galleryHelpColorText","sizes","small","MIN_DIST_PX","MAX_ANGLE","Gallery","urls","aspectRatio","help","imageProps","children","rest","imageUrl","setImageUrl","undefined","imageIndex","setImageIndex","length","Math","round","imageIndexRef","current","containerRef","allowedRef","startPosRef","size","sizeRef","statusHeight","height","updateGalleryImage","clientX","x","getBoundingClientRect","widthPerImage","width","xPos","nextIndex","floor","mouseMoveHandler","e","touchStartHandler","clientY","touches","y","touchMoveHandler","diffX","abs","diffY","diff","sqrt","angle","atan","PI","touchEndHandler"],"sources":["../../../src/Gallery/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useSize } from '@os-design/utils';\nimport React, {\n MouseEventHandler,\n TouchEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport Image, { ImageProps } from '../Image';\nimport GalleryStatus from './Status';\n\ninterface ContainerProps {\n heightPercent: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('heightPercent')\n)<ContainerProps>`\n position: relative;\n padding-bottom: ${(p) => p.heightPercent}%;\n\n display: flex;\n justify-content: center;\n\n background-color: ${(p) => clr(p.theme.galleryColorBg)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n overflow: hidden;\n`;\n\nconst StyledImage = styled(Image)`\n position: absolute;\n width: auto;\n height: 100%;\n border-radius: 0;\n`;\n\nconst GalleryHelp = styled.div`\n position: absolute;\n top: 0;\n right: 0;\n\n background-color: ${(p) => clr(p.theme.galleryHelpColorBg)};\n color: ${(p) => clr(p.theme.galleryHelpColorText)};\n backdrop-filter: blur(0.2em);\n\n font-size: ${(p) => p.theme.sizes.small}em;\n font-weight: 500;\n\n border-bottom-left-radius: ${(p) => p.theme.borderRadius}em;\n padding: 0.1em 0.5em;\n`;\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface GalleryProps extends JsxDivProps {\n /**\n * The image urls.\n */\n urls: string[] | ReadonlyArray<string>;\n /**\n * The aspect ratio of the gallery.\n * E.g. [16,9] – 16:9.\n */\n aspectRatio?: [number, number];\n /**\n * The help message that is displayed in the upper right corner.\n */\n help?: string;\n /**\n * The props of the image component.\n */\n imageProps?: Omit<ImageProps, 'url'>;\n /**\n * The children that can be displayed on top of the image.\n * E.g. tags.\n */\n children?: React.ReactNode;\n}\n\nconst MIN_DIST_PX = 10;\nconst MAX_ANGLE = 30;\n\n/**\n * The image gallery. Change the cursor/touch position to change images.\n * The lib 'lazysizes/plugins/attrchange/ls.attrchange' must be imported.\n */\nconst Gallery: React.FC<GalleryProps> = ({\n urls,\n aspectRatio = [16, 9],\n help,\n imageProps = {},\n children,\n ...rest\n}) => {\n const [imageUrl, setImageUrl] = useState<string | undefined>(undefined);\n const [imageIndex, setImageIndex] = useState(urls.length > 0 ? 0 : null);\n\n const heightPercent = useMemo(\n () => Math.round((aspectRatio[1] / aspectRatio[0]) * 1000000) / 10000,\n [aspectRatio]\n );\n\n const imageIndexRef = useRef(imageIndex);\n useEffect(() => {\n imageIndexRef.current = imageIndex;\n }, [imageIndex]);\n\n // Update the image if the index was changed\n useEffect(() => {\n setImageUrl(imageIndex !== null ? urls[imageIndex] : undefined);\n }, [imageIndex, urls]);\n\n const containerRef = useRef<HTMLDivElement>(null);\n const allowedRef = useRef(false);\n const startPosRef = useRef<{ x: number; y: number } | null>(null);\n\n const size = useSize(containerRef);\n const sizeRef = useRef(size);\n useEffect(() => {\n sizeRef.current = size;\n }, [size]);\n\n const statusHeight = useMemo(\n () => Math.round(size.height / 70),\n [size.height]\n );\n\n const updateGalleryImage = useCallback(\n (clientX: number) => {\n if (!containerRef.current) return;\n const { x } = containerRef.current.getBoundingClientRect();\n const widthPerImage = sizeRef.current.width / urls.length;\n const xPos = clientX - x;\n if (xPos < 0) return;\n const nextIndex = Math.floor(xPos / widthPerImage);\n if (imageIndexRef.current !== nextIndex) {\n setImageIndex(nextIndex);\n }\n },\n [urls.length]\n );\n\n const mouseMoveHandler = useCallback<MouseEventHandler<HTMLDivElement>>(\n (e) => updateGalleryImage(e.clientX),\n [updateGalleryImage]\n );\n\n const touchStartHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => {\n const { clientX, clientY } = e.touches[0];\n startPosRef.current = { x: clientX, y: clientY };\n },\n []\n );\n\n const touchMoveHandler = useCallback<TouchEventHandler<HTMLDivElement>>(\n (e) => {\n if (!allowedRef.current) {\n if (!startPosRef.current) return;\n const { x, y } = startPosRef.current;\n const { clientX, clientY } = e.touches[0];\n const diffX = Math.abs(x - clientX);\n const diffY = Math.abs(y - clientY);\n const diff = Math.sqrt(diffX ** 2 + diffY ** 2);\n if (diff < MIN_DIST_PX) return;\n const angle = (Math.atan(diffY / diffX) * 180) / Math.PI;\n if (angle > MAX_ANGLE) {\n startPosRef.current = null;\n return;\n }\n allowedRef.current = true;\n }\n updateGalleryImage(e.touches[0].clientX);\n },\n [updateGalleryImage]\n );\n\n const touchEndHandler = useCallback<TouchEventHandler<HTMLDivElement>>(() => {\n allowedRef.current = false;\n startPosRef.current = null;\n }, []);\n\n return (\n <ThemeOverrider activeTheme='dark'>\n <Container\n ref={containerRef}\n heightPercent={heightPercent}\n onMouseMove={mouseMoveHandler}\n onTouchStart={touchStartHandler}\n onTouchMove={touchMoveHandler}\n onTouchEnd={touchEndHandler}\n {...rest}\n >\n <StyledImage url={imageUrl} {...imageProps} />\n {urls.length > 1 && (\n <>\n {imageIndex !== null && (\n <GalleryStatus\n count={urls.length}\n current={imageIndex}\n height={statusHeight}\n />\n )}\n {help && <GalleryHelp>{help}</GalleryHelp>}\n </>\n )}\n {children}\n </Container>\n </ThemeOverrider>\n );\n};\n\nexport default Gallery;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Gallery/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA4C7C,aAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,YAAa,SAAQ,WAAW;IAI/C,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAKvC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAI/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAKrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAMD,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA0FnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Gallery/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAQN,MAAM,OAAO,CAAC;AACf,OAAc,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA4C7C,aAAK,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7D,MAAM,WAAW,YAAa,SAAQ,WAAW;IAI/C,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAKvC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAI/B,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAKrC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AASD,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA4HnC,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@os-design/core",
3
- "version": "1.0.148",
3
+ "version": "1.0.149",
4
4
  "license": "UNLICENSED",
5
5
  "repository": "git@gitlab.com:os-team/libs/os-design.git",
6
6
  "main": "dist/cjs/index.js",
@@ -57,5 +57,5 @@
57
57
  "react": ">=18",
58
58
  "react-dom": ">=18"
59
59
  },
60
- "gitHead": "45e65ea32b3fb5795eefb498e15721fd0ad09b33"
60
+ "gitHead": "24100242b45e89c6f8285535d0b4ac7774b2cdb5"
61
61
  }