├── .gitignore
├── .prettierrc
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── rollup.config.js
├── src
├── Content.svelte
├── Overlay.svelte
└── index.svelte
└── www
├── now.json
├── package-lock.json
├── package.json
├── rollup.config.js
├── src
├── client.js
├── components
│ ├── Footer.svelte
│ └── Nav.svelte
├── routes
│ ├── _error.svelte
│ ├── _layout.svelte
│ ├── examples
│ │ ├── arrow.svelte
│ │ ├── basic.svelte
│ │ ├── eventPropagation.svelte
│ │ ├── github.js
│ │ ├── hover.svelte
│ │ ├── index.svelte
│ │ └── onOpenClose.svelte
│ ├── features.svelte
│ ├── index.svelte
│ └── usage.svelte
├── server.js
├── service-worker.js
└── template.html
├── static
├── favicon.png
├── global.css
├── logo-192.png
├── logo-512.png
└── manifest.json
└── webpack.config.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
63 | # www
64 | www/__sapper__/
65 | build/
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": false,
3 | "printWidth": 300,
4 | "tabWidth": 2,
5 | "semi": true,
6 | "trailingComma": "all",
7 | "singleQuote": true
8 | }
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Vahe
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # svelte-popover
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | 
21 |
22 | ## About
23 |
24 | - [x] 100% Svelte (or vanillajs) - no jQuery, no 3rd party dependencies
25 | - [x] Compatible with Sapper (SSR Svelte)
26 | - [x] Auto placement (Work in progress)
27 | - [x] Click, hover and touch events
28 | - [ ] Animation/Transition
29 |
30 | ## Installation
31 |
32 | **via NPM**
33 |
34 | ```code
35 | npm i svelte-popover --save-dev
36 | ```
37 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-popover",
3 | "version": "2.0.8",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/estree": {
8 | "version": "0.0.39",
9 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
10 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
11 | "dev": true
12 | },
13 | "@types/node": {
14 | "version": "12.7.5",
15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz",
16 | "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==",
17 | "dev": true
18 | },
19 | "@types/resolve": {
20 | "version": "0.0.8",
21 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz",
22 | "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==",
23 | "dev": true,
24 | "requires": {
25 | "@types/node": "*"
26 | }
27 | },
28 | "acorn": {
29 | "version": "7.0.0",
30 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
31 | "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==",
32 | "dev": true
33 | },
34 | "ansi-styles": {
35 | "version": "3.2.1",
36 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
37 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
38 | "dev": true,
39 | "requires": {
40 | "color-convert": "^1.9.0"
41 | }
42 | },
43 | "balanced-match": {
44 | "version": "1.0.0",
45 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
46 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
47 | "dev": true
48 | },
49 | "brace-expansion": {
50 | "version": "1.1.11",
51 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
52 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
53 | "dev": true,
54 | "requires": {
55 | "balanced-match": "^1.0.0",
56 | "concat-map": "0.0.1"
57 | }
58 | },
59 | "builtin-modules": {
60 | "version": "3.1.0",
61 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz",
62 | "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==",
63 | "dev": true
64 | },
65 | "chalk": {
66 | "version": "2.4.2",
67 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
68 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
69 | "dev": true,
70 | "requires": {
71 | "ansi-styles": "^3.2.1",
72 | "escape-string-regexp": "^1.0.5",
73 | "supports-color": "^5.3.0"
74 | }
75 | },
76 | "color-convert": {
77 | "version": "1.9.3",
78 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
79 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
80 | "dev": true,
81 | "requires": {
82 | "color-name": "1.1.3"
83 | }
84 | },
85 | "color-name": {
86 | "version": "1.1.3",
87 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
88 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
89 | "dev": true
90 | },
91 | "concat-map": {
92 | "version": "0.0.1",
93 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
94 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
95 | "dev": true
96 | },
97 | "cross-spawn": {
98 | "version": "6.0.5",
99 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
100 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
101 | "dev": true,
102 | "requires": {
103 | "nice-try": "^1.0.4",
104 | "path-key": "^2.0.1",
105 | "semver": "^5.5.0",
106 | "shebang-command": "^1.2.0",
107 | "which": "^1.2.9"
108 | }
109 | },
110 | "define-properties": {
111 | "version": "1.1.3",
112 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
113 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
114 | "dev": true,
115 | "requires": {
116 | "object-keys": "^1.0.12"
117 | }
118 | },
119 | "error-ex": {
120 | "version": "1.3.2",
121 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
122 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
123 | "dev": true,
124 | "requires": {
125 | "is-arrayish": "^0.2.1"
126 | }
127 | },
128 | "es-abstract": {
129 | "version": "1.14.2",
130 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
131 | "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==",
132 | "dev": true,
133 | "requires": {
134 | "es-to-primitive": "^1.2.0",
135 | "function-bind": "^1.1.1",
136 | "has": "^1.0.3",
137 | "has-symbols": "^1.0.0",
138 | "is-callable": "^1.1.4",
139 | "is-regex": "^1.0.4",
140 | "object-inspect": "^1.6.0",
141 | "object-keys": "^1.1.1",
142 | "string.prototype.trimleft": "^2.0.0",
143 | "string.prototype.trimright": "^2.0.0"
144 | }
145 | },
146 | "es-to-primitive": {
147 | "version": "1.2.0",
148 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
149 | "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
150 | "dev": true,
151 | "requires": {
152 | "is-callable": "^1.1.4",
153 | "is-date-object": "^1.0.1",
154 | "is-symbol": "^1.0.2"
155 | }
156 | },
157 | "escape-string-regexp": {
158 | "version": "1.0.5",
159 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
160 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
161 | "dev": true
162 | },
163 | "estree-walker": {
164 | "version": "0.6.1",
165 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
166 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
167 | "dev": true
168 | },
169 | "function-bind": {
170 | "version": "1.1.1",
171 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
172 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
173 | "dev": true
174 | },
175 | "graceful-fs": {
176 | "version": "4.2.2",
177 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
178 | "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==",
179 | "dev": true
180 | },
181 | "has": {
182 | "version": "1.0.3",
183 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
184 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
185 | "dev": true,
186 | "requires": {
187 | "function-bind": "^1.1.1"
188 | }
189 | },
190 | "has-flag": {
191 | "version": "3.0.0",
192 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
193 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
194 | "dev": true
195 | },
196 | "has-symbols": {
197 | "version": "1.0.0",
198 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
199 | "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
200 | "dev": true
201 | },
202 | "hosted-git-info": {
203 | "version": "2.8.4",
204 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
205 | "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==",
206 | "dev": true
207 | },
208 | "is-arrayish": {
209 | "version": "0.2.1",
210 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
211 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
212 | "dev": true
213 | },
214 | "is-callable": {
215 | "version": "1.1.4",
216 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
217 | "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
218 | "dev": true
219 | },
220 | "is-date-object": {
221 | "version": "1.0.1",
222 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
223 | "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
224 | "dev": true
225 | },
226 | "is-module": {
227 | "version": "1.0.0",
228 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
229 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
230 | "dev": true
231 | },
232 | "is-regex": {
233 | "version": "1.0.4",
234 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
235 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
236 | "dev": true,
237 | "requires": {
238 | "has": "^1.0.1"
239 | }
240 | },
241 | "is-symbol": {
242 | "version": "1.0.2",
243 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
244 | "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
245 | "dev": true,
246 | "requires": {
247 | "has-symbols": "^1.0.0"
248 | }
249 | },
250 | "isexe": {
251 | "version": "2.0.0",
252 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
253 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
254 | "dev": true
255 | },
256 | "json-parse-better-errors": {
257 | "version": "1.0.2",
258 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
259 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
260 | "dev": true
261 | },
262 | "load-json-file": {
263 | "version": "4.0.0",
264 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
265 | "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
266 | "dev": true,
267 | "requires": {
268 | "graceful-fs": "^4.1.2",
269 | "parse-json": "^4.0.0",
270 | "pify": "^3.0.0",
271 | "strip-bom": "^3.0.0"
272 | }
273 | },
274 | "memorystream": {
275 | "version": "0.3.1",
276 | "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
277 | "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=",
278 | "dev": true
279 | },
280 | "minimatch": {
281 | "version": "3.0.4",
282 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
283 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
284 | "dev": true,
285 | "requires": {
286 | "brace-expansion": "^1.1.7"
287 | }
288 | },
289 | "nice-try": {
290 | "version": "1.0.5",
291 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
292 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
293 | "dev": true
294 | },
295 | "normalize-package-data": {
296 | "version": "2.5.0",
297 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
298 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
299 | "dev": true,
300 | "requires": {
301 | "hosted-git-info": "^2.1.4",
302 | "resolve": "^1.10.0",
303 | "semver": "2 || 3 || 4 || 5",
304 | "validate-npm-package-license": "^3.0.1"
305 | }
306 | },
307 | "npm-run-all": {
308 | "version": "4.1.5",
309 | "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
310 | "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
311 | "dev": true,
312 | "requires": {
313 | "ansi-styles": "^3.2.1",
314 | "chalk": "^2.4.1",
315 | "cross-spawn": "^6.0.5",
316 | "memorystream": "^0.3.1",
317 | "minimatch": "^3.0.4",
318 | "pidtree": "^0.3.0",
319 | "read-pkg": "^3.0.0",
320 | "shell-quote": "^1.6.1",
321 | "string.prototype.padend": "^3.0.0"
322 | }
323 | },
324 | "object-inspect": {
325 | "version": "1.6.0",
326 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
327 | "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
328 | "dev": true
329 | },
330 | "object-keys": {
331 | "version": "1.1.1",
332 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
333 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
334 | "dev": true
335 | },
336 | "parse-json": {
337 | "version": "4.0.0",
338 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
339 | "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
340 | "dev": true,
341 | "requires": {
342 | "error-ex": "^1.3.1",
343 | "json-parse-better-errors": "^1.0.1"
344 | }
345 | },
346 | "path-key": {
347 | "version": "2.0.1",
348 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
349 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
350 | "dev": true
351 | },
352 | "path-parse": {
353 | "version": "1.0.6",
354 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
355 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
356 | "dev": true
357 | },
358 | "path-type": {
359 | "version": "3.0.0",
360 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
361 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
362 | "dev": true,
363 | "requires": {
364 | "pify": "^3.0.0"
365 | }
366 | },
367 | "pidtree": {
368 | "version": "0.3.0",
369 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz",
370 | "integrity": "sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg==",
371 | "dev": true
372 | },
373 | "pify": {
374 | "version": "3.0.0",
375 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
376 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
377 | "dev": true
378 | },
379 | "prettier": {
380 | "version": "1.18.2",
381 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
382 | "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
383 | "dev": true
384 | },
385 | "prettier-plugin-svelte": {
386 | "version": "0.7.0",
387 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-0.7.0.tgz",
388 | "integrity": "sha512-SuZSeMh48rx42kCFEpI/xE1XgjxQcS3r22Yo7jIhBYRhwbAa8laNxiIHsfeWWkX8BdyELkEayaTQp4ricckwTQ==",
389 | "dev": true,
390 | "requires": {
391 | "tslib": "^1.9.3"
392 | }
393 | },
394 | "read-pkg": {
395 | "version": "3.0.0",
396 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
397 | "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
398 | "dev": true,
399 | "requires": {
400 | "load-json-file": "^4.0.0",
401 | "normalize-package-data": "^2.3.2",
402 | "path-type": "^3.0.0"
403 | }
404 | },
405 | "require-relative": {
406 | "version": "0.8.7",
407 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
408 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
409 | "dev": true
410 | },
411 | "resolve": {
412 | "version": "1.12.0",
413 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
414 | "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
415 | "dev": true,
416 | "requires": {
417 | "path-parse": "^1.0.6"
418 | }
419 | },
420 | "rollup": {
421 | "version": "1.21.4",
422 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.21.4.tgz",
423 | "integrity": "sha512-Pl512XVCmVzgcBz5h/3Li4oTaoDcmpuFZ+kdhS/wLreALz//WuDAMfomD3QEYl84NkDu6Z6wV9twlcREb4qQsw==",
424 | "dev": true,
425 | "requires": {
426 | "@types/estree": "0.0.39",
427 | "@types/node": "^12.7.5",
428 | "acorn": "^7.0.0"
429 | }
430 | },
431 | "rollup-plugin-node-resolve": {
432 | "version": "5.2.0",
433 | "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz",
434 | "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==",
435 | "dev": true,
436 | "requires": {
437 | "@types/resolve": "0.0.8",
438 | "builtin-modules": "^3.1.0",
439 | "is-module": "^1.0.0",
440 | "resolve": "^1.11.1",
441 | "rollup-pluginutils": "^2.8.1"
442 | }
443 | },
444 | "rollup-plugin-svelte": {
445 | "version": "5.1.0",
446 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-5.1.0.tgz",
447 | "integrity": "sha512-4MRZG29dAWDpoxEs5uIHzDnYafQEOLaKIJAuDYUtFIzEm1F1IGSTlFyjd8/qk4wltlHdu6V7YfZY53+CKryhMg==",
448 | "dev": true,
449 | "requires": {
450 | "require-relative": "^0.8.7",
451 | "rollup-pluginutils": "^2.3.3",
452 | "sourcemap-codec": "^1.4.4"
453 | }
454 | },
455 | "rollup-pluginutils": {
456 | "version": "2.8.2",
457 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
458 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
459 | "dev": true,
460 | "requires": {
461 | "estree-walker": "^0.6.1"
462 | }
463 | },
464 | "semver": {
465 | "version": "5.7.1",
466 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
467 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
468 | "dev": true
469 | },
470 | "shebang-command": {
471 | "version": "1.2.0",
472 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
473 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
474 | "dev": true,
475 | "requires": {
476 | "shebang-regex": "^1.0.0"
477 | }
478 | },
479 | "shebang-regex": {
480 | "version": "1.0.0",
481 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
482 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
483 | "dev": true
484 | },
485 | "shell-quote": {
486 | "version": "1.7.2",
487 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
488 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==",
489 | "dev": true
490 | },
491 | "sourcemap-codec": {
492 | "version": "1.4.6",
493 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz",
494 | "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==",
495 | "dev": true
496 | },
497 | "spdx-correct": {
498 | "version": "3.1.0",
499 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
500 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
501 | "dev": true,
502 | "requires": {
503 | "spdx-expression-parse": "^3.0.0",
504 | "spdx-license-ids": "^3.0.0"
505 | }
506 | },
507 | "spdx-exceptions": {
508 | "version": "2.2.0",
509 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
510 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
511 | "dev": true
512 | },
513 | "spdx-expression-parse": {
514 | "version": "3.0.0",
515 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
516 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
517 | "dev": true,
518 | "requires": {
519 | "spdx-exceptions": "^2.1.0",
520 | "spdx-license-ids": "^3.0.0"
521 | }
522 | },
523 | "spdx-license-ids": {
524 | "version": "3.0.5",
525 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
526 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
527 | "dev": true
528 | },
529 | "string.prototype.padend": {
530 | "version": "3.0.0",
531 | "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz",
532 | "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=",
533 | "dev": true,
534 | "requires": {
535 | "define-properties": "^1.1.2",
536 | "es-abstract": "^1.4.3",
537 | "function-bind": "^1.0.2"
538 | }
539 | },
540 | "string.prototype.trimleft": {
541 | "version": "2.1.0",
542 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
543 | "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
544 | "dev": true,
545 | "requires": {
546 | "define-properties": "^1.1.3",
547 | "function-bind": "^1.1.1"
548 | }
549 | },
550 | "string.prototype.trimright": {
551 | "version": "2.1.0",
552 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
553 | "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
554 | "dev": true,
555 | "requires": {
556 | "define-properties": "^1.1.3",
557 | "function-bind": "^1.1.1"
558 | }
559 | },
560 | "strip-bom": {
561 | "version": "3.0.0",
562 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
563 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
564 | "dev": true
565 | },
566 | "supports-color": {
567 | "version": "5.5.0",
568 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
569 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
570 | "dev": true,
571 | "requires": {
572 | "has-flag": "^3.0.0"
573 | }
574 | },
575 | "svelte": {
576 | "version": "3.12.1",
577 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.12.1.tgz",
578 | "integrity": "sha512-t29WJNjHIqfrdMcVXqIyRfgLEaNz7MihKXTpb8qHlbzvf0WyOOIhIlwIGvl6ahJ9+9CLJwz0sjhFNAmPgo8BHg==",
579 | "dev": true
580 | },
581 | "tslib": {
582 | "version": "1.10.0",
583 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
584 | "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
585 | "dev": true
586 | },
587 | "validate-npm-package-license": {
588 | "version": "3.0.4",
589 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
590 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
591 | "dev": true,
592 | "requires": {
593 | "spdx-correct": "^3.0.0",
594 | "spdx-expression-parse": "^3.0.0"
595 | }
596 | },
597 | "which": {
598 | "version": "1.3.1",
599 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
600 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
601 | "dev": true,
602 | "requires": {
603 | "isexe": "^2.0.0"
604 | }
605 | }
606 | }
607 | }
608 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-popover",
3 | "version": "2.0.8",
4 | "description": "A smart popover component for Svelte",
5 | "svelte": "src/index.svelte",
6 | "module": "build/index.mjs",
7 | "main": "build/index.js",
8 | "scripts": {
9 | "test": "echo \"Error: no test specified\" && exit 1",
10 | "pretty": "prettier --config .prettierrc --write --svelte-sort-order styles-markup-scripts \"rollup.config.js\" \".prettierrc\" \"package.json\" \"src/*.svelte\" \"www/src/*.js\" \"www/src/*.html\" \"www/src/**/*.svelte\" \"www/src/**/*.svelte\" ",
11 | "build": "rollup -c",
12 | "go": "npm-run-all pretty build"
13 | },
14 | "keywords": [
15 | "popover",
16 | "svelte",
17 | "sveltejs",
18 | "svelte-popover"
19 | ],
20 | "repository": {
21 | "type": "git",
22 | "url": "git+https://github.com/vaheqelyan/svelte-popover.git"
23 | },
24 | "author": "Vahe Araqelyan ",
25 | "license": "ISC",
26 | "files": [
27 | "src",
28 | "build"
29 | ],
30 | "bugs": {
31 | "url": "https://github.com/vaheqelyan/svelte-popover/issues"
32 | },
33 | "homepage": "https://github.com/vaheqelyan/svelte-popover#readme",
34 | "devDependencies": {
35 | "npm-run-all": "^4.1.5",
36 | "prettier": "^1.18.2",
37 | "prettier-plugin-svelte": "^0.7.0",
38 | "rollup": "^1.21.4",
39 | "rollup-plugin-node-resolve": "^5.2.0",
40 | "rollup-plugin-svelte": "^5.1.0",
41 | "svelte": "^3.12.1"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import svelte from 'rollup-plugin-svelte';
2 | import resolve from 'rollup-plugin-node-resolve';
3 | import pkg from './package.json';
4 |
5 | const name = pkg.name
6 | .replace(/^(@\S+\/)?(svelte-)?(\S+)/, '$3')
7 | .replace(/^\w/, m => m.toUpperCase())
8 | .replace(/-\w/g, m => m[1].toUpperCase());
9 |
10 | export default [
11 | {
12 | input: 'src/index.svelte',
13 | output: [{ file: pkg.module, format: 'es' }, { file: pkg.main, format: 'umd', name }],
14 | plugins: [svelte(), resolve()],
15 | },
16 | ];
17 |
--------------------------------------------------------------------------------
/src/Content.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 | {#if arrow}
17 |
◥
18 | {/if}
19 |
20 |
21 |
22 |
23 |
279 |
--------------------------------------------------------------------------------
/src/Overlay.svelte:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
37 |
--------------------------------------------------------------------------------
/src/index.svelte:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 | {#if open}
16 |
17 |
18 |
19 | {/if}
20 |
21 |
22 |
72 |
--------------------------------------------------------------------------------
/www/now.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-popover",
3 | "alias": "svelte-popover",
4 | "public": true
5 | }
--------------------------------------------------------------------------------
/www/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "sapper dev",
4 | "dev": "sapper dev",
5 | "build": "sapper export"
6 | },
7 | "dependencies": {
8 | "compression": "^1.7.1",
9 | "cookie-session": "^1.3.3",
10 | "polka": "^0.5.0",
11 | "sirv": "^0.4.0"
12 | },
13 | "devDependencies": {
14 | "@babel/core": "^7.6.2",
15 | "@babel/plugin-syntax-dynamic-import": "^7.0.0",
16 | "@babel/plugin-transform-runtime": "^7.6.2",
17 | "@babel/preset-env": "^7.6.2",
18 | "@babel/runtime": "^7.6.2",
19 | "npm-run-all": "^4.1.5",
20 | "rollup": "^1.19.4",
21 | "rollup-plugin-babel": "^4.3.3",
22 | "rollup-plugin-commonjs": "^9.3.4",
23 | "rollup-plugin-node-resolve": "^4.2.4",
24 | "rollup-plugin-replace": "^2.0.0",
25 | "rollup-plugin-svelte": "^5.0.1",
26 | "rollup-plugin-terser": "^4.0.4",
27 | "sapper": "^0.27.9",
28 | "svelte": "^3.7.1",
29 | "svelte-loader": "^2.13.6",
30 | "svelte-popover": "^2.0.6",
31 | "webpack": "^4.39.1"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/www/rollup.config.js:
--------------------------------------------------------------------------------
1 | import resolve from 'rollup-plugin-node-resolve';
2 | import replace from 'rollup-plugin-replace';
3 | import commonjs from 'rollup-plugin-commonjs';
4 | import svelte from 'rollup-plugin-svelte';
5 | import babel from 'rollup-plugin-babel';
6 | import { terser } from 'rollup-plugin-terser';
7 | import config from 'sapper/config/rollup.js';
8 | import pkg from './package.json';
9 |
10 | const mode = process.env.NODE_ENV;
11 | const dev = mode === 'development';
12 | const legacy = !!process.env.SAPPER_LEGACY_BUILD;
13 |
14 | const onwarn = (warning, onwarn) => (warning.code === 'CIRCULAR_DEPENDENCY' && warning.message.includes('/@sapper/')) || onwarn(warning);
15 |
16 | export default {
17 | client: {
18 | input: config.client.input(),
19 | output: config.client.output(),
20 | plugins: [
21 | replace({
22 | 'process.browser': true,
23 | 'process.env.NODE_ENV': JSON.stringify(mode),
24 | }),
25 | svelte({
26 | dev,
27 | hydratable: true,
28 | emitCss: true,
29 | }),
30 | resolve({
31 | browser: true,
32 | }),
33 | commonjs(),
34 |
35 | legacy &&
36 | babel({
37 | extensions: ['.js', '.mjs', '.html', '.svelte'],
38 | runtimeHelpers: true,
39 | exclude: ['node_modules/@babel/**'],
40 | presets: [
41 | [
42 | '@babel/preset-env',
43 | {
44 | targets: '> 0.25%, not dead',
45 | },
46 | ],
47 | ],
48 | plugins: [
49 | '@babel/plugin-syntax-dynamic-import',
50 | [
51 | '@babel/plugin-transform-runtime',
52 | {
53 | useESModules: true,
54 | },
55 | ],
56 | ],
57 | }),
58 |
59 | !dev &&
60 | terser({
61 | module: true,
62 | }),
63 | ],
64 |
65 | onwarn,
66 | },
67 |
68 | server: {
69 | input: config.server.input(),
70 | output: config.server.output(),
71 | plugins: [
72 | replace({
73 | 'process.browser': false,
74 | 'process.env.NODE_ENV': JSON.stringify(mode),
75 | }),
76 | svelte({
77 | generate: 'ssr',
78 | dev,
79 | }),
80 | resolve(),
81 | commonjs(),
82 | ],
83 | external: Object.keys(pkg.dependencies).concat(require('module').builtinModules || Object.keys(process.binding('natives'))),
84 |
85 | onwarn,
86 | },
87 |
88 | serviceworker: {
89 | input: config.serviceworker.input(),
90 | output: config.serviceworker.output(),
91 | plugins: [
92 | resolve(),
93 | replace({
94 | 'process.browser': true,
95 | 'process.env.NODE_ENV': JSON.stringify(mode),
96 | }),
97 | commonjs(),
98 | !dev && terser(),
99 | ],
100 |
101 | onwarn,
102 | },
103 | };
104 |
--------------------------------------------------------------------------------
/www/src/client.js:
--------------------------------------------------------------------------------
1 | import * as sapper from '@sapper/app';
2 |
3 | sapper.start({
4 | target: document.querySelector('#sapper'),
5 | });
6 |
--------------------------------------------------------------------------------
/www/src/components/Footer.svelte:
--------------------------------------------------------------------------------
1 |
7 |
8 |
14 |
--------------------------------------------------------------------------------
/www/src/components/Nav.svelte:
--------------------------------------------------------------------------------
1 |
38 |
39 |
46 |
47 |
50 |
--------------------------------------------------------------------------------
/www/src/routes/_error.svelte:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 | {status}
26 |
27 |
28 | {status}
29 |
30 | {error.message}
31 |
32 | {#if dev && error.stack}
33 | {error.stack}
34 | {/if}
35 |
36 |
42 |
--------------------------------------------------------------------------------
/www/src/routes/_layout.svelte:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
26 |
--------------------------------------------------------------------------------
/www/src/routes/examples/arrow.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 | Example — Arrow
25 |
26 |
27 |
28 |
29 |
30 | Arrow
31 |
32 | → onOpen/onClose
33 |
34 |
35 | ← Hover
36 |
37 |
38 |
39 | An arrow is just a symbol ◥. You can change the color of the arrow by setting the
40 | arrowColor
41 | property, and turn off arrow by setting false for the
42 | arrow
43 | property
44 |
45 |
46 |
50 |
51 |
52 |
53 | Red arrow
54 | Content
55 |
56 |
57 |
58 | No arrow
59 | Content
60 |
61 |
62 |
63 |
67 |
--------------------------------------------------------------------------------
/www/src/routes/examples/basic.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Example — Basic
17 |
18 |
19 |
20 |
21 |
22 | Basic
23 |
24 | → preventDefault/stopPropagation
25 |
26 | Simply just click on the button
27 |
28 |
32 |
33 |
34 | Target
35 | Content
36 |
37 |
38 |
42 |
--------------------------------------------------------------------------------
/www/src/routes/examples/eventPropagation.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Example — preventDefault/stopPropagation
17 |
18 |
19 |
20 |
21 |
22 | preventDefault/stopPropagation
23 |
24 | → Hover
25 |
26 | ← Basic
27 |
28 |
29 |
30 | In this example the popover is wrapped in
31 | a
32 | tag. Pass the
33 | preventDefault
34 | prop to disable default behavior
35 |
36 |
37 |
41 |
42 |
43 | Link
44 |
45 | Popover
46 | Content
47 |
48 |
49 |
50 |
54 |
--------------------------------------------------------------------------------
/www/src/routes/examples/github.js:
--------------------------------------------------------------------------------
1 | const openInSource = 'https://github.com/vaheqelyan/svelte-popover/blob/master/www/src/routes/examples'
2 |
3 | export {
4 | openInSource
5 | }
--------------------------------------------------------------------------------
/www/src/routes/examples/hover.svelte:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 | Example — Hover
25 |
26 |
27 |
28 |
29 |
30 | Hover
31 |
32 | → Arrow
33 |
34 |
35 | ← preventDefault/stopPropagation
36 |
37 |
38 | Click, hover and touch events
39 |
40 |
44 |
45 |
46 |
47 | Click
48 | Content
49 |
50 |
51 |
52 | Hover
53 | Content
54 |
55 |
56 |
57 | None
58 | Content
59 |
60 |
61 |
62 |
66 |
--------------------------------------------------------------------------------
/www/src/routes/examples/index.svelte:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 | Svelte-popover — Examples
16 |
17 |
18 |
19 |
20 | Examples
21 |
22 |
39 |
--------------------------------------------------------------------------------
/www/src/routes/examples/onOpenClose.svelte:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 | Example — onOpen/onClose
17 |
18 |
19 |
20 |
21 |
22 | onOpen/onClose
23 |
24 |
25 | ← Arrow
26 |
27 |
28 |
29 | on:open
30 | is dispatched/called when the content is mounted,
31 | on:close
32 | is dispatched/called after the content is unmounted from the dom
33 |
34 |
35 |
39 |
40 | alert('open')} on:close={() => alert('close')}>
41 | Click
42 | Hello, world!
43 |
44 |
45 |
49 |
--------------------------------------------------------------------------------
/www/src/routes/features.svelte:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 | Svelte-popover — Features
19 |
20 |
21 |
22 |
23 | Features
24 |
25 |
26 | 100% Svlete (or vanillajs) - no jQuery, no 3rd party dependencies
27 | Compatible with Sapper (SSR Svelte)
28 | Auto placement (Work in progress)
29 | Click, hover and touch events
30 | With arrow and without
31 | Animation/Transition
32 |
33 |
34 | Suggest your feature
35 |
--------------------------------------------------------------------------------
/www/src/routes/index.svelte:
--------------------------------------------------------------------------------
1 |
61 |
62 |
63 | Svelte-popover — A smart popover component for Svelte.
64 |
65 |
66 |
67 |
68 |
69 |
70 |
Svelte-popover
71 | A smart and easy to use popover component for Svelte
72 |
73 |
74 |
75 |
76 | Click
77 |
78 |
Content
79 |
80 |
81 |
82 |
83 | Nested
84 |
85 |
Content
86 |
87 | Nested
88 |
89 |
Content
90 |
91 |
92 |
93 |
94 |
95 |
96 | Div container
97 |
98 |
Content
99 |
100 |
101 |
102 |
109 |
110 |
111 | isOpen && e.stopPropagation()} slot="target" type="text" />
112 |
113 | {#each new Array(10) as item}
114 |
List
115 | {/each}
116 |
117 |
118 |
119 |
120 | Hover
121 |
122 |
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy
123 |
124 |
125 |
126 |
127 | Pink
128 |
129 |
Content
130 |
131 |
132 |
133 |
134 | Black
135 |
136 |
Content
137 |
138 |
139 |
140 |
141 |
142 | preventDefault
143 |
144 |
Content
145 |
146 |
147 |
148 |
149 |
alert('clicked')} class="block">
150 |
151 | stopPropagation
152 |
153 |
stopPropagation
154 |
155 |
156 |
157 |
158 |
159 | Disabled
160 |
161 |
Content
162 |
163 |
164 |
165 |
166 |
167 |
168 | One
169 |
170 |
Content
171 |
172 |
173 |
174 |
175 |
176 | Two
177 |
178 |
Content
179 |
180 |
181 |
182 |
183 |
184 | Three
185 |
186 |
Content
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
197 |
--------------------------------------------------------------------------------
/www/src/routes/usage.svelte:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 | Svelte-popover — Usage
19 |
20 |
21 |
22 |
23 | Installation
24 |
25 |
26 | {`npm i svelte-popover --save-dev`}
27 |
28 |
29 | Usage
30 |
31 |
32 |
33 | The basic example
34 |
35 |
36 |
37 | {`
38 |
39 | Click
40 |
41 |
Content
42 |
43 |
44 | `}
45 |
46 |
47 |
48 |
49 | See more examples
50 |
51 | You can also use nested popovers
52 |
53 |
54 | {`
55 |
56 | Click
57 |
58 |
Content
59 |
60 |
61 |
62 |
Content
63 |
64 |
65 |
66 |
67 | `}
68 |
69 |
70 | Use
71 | let:open
72 | directive. For example
73 |
74 |
75 | {`
76 |
77 | Target
78 |
79 |
Content
80 |
81 |
82 | `}
83 |
84 |
85 |
86 | Props
87 |
88 |
245 |
--------------------------------------------------------------------------------
/www/src/server.js:
--------------------------------------------------------------------------------
1 | import sirv from 'sirv';
2 | import polka from 'polka';
3 | import compression from 'compression';
4 | import * as sapper from '@sapper/server';
5 |
6 | const { PORT, NODE_ENV } = process.env;
7 | const dev = NODE_ENV === 'development';
8 |
9 | polka() // You can also use Express
10 | .use(compression({ threshold: 0 }), sirv('static', { dev }), sapper.middleware())
11 | .listen(PORT, err => {
12 | if (err) console.log('error', err);
13 | });
14 |
--------------------------------------------------------------------------------
/www/src/service-worker.js:
--------------------------------------------------------------------------------
1 | import { timestamp, files, shell, routes } from '@sapper/service-worker';
2 |
3 | const ASSETS = `cache${timestamp}`;
4 |
5 | // `shell` is an array of all the files generated by the bundler,
6 | // `files` is an array of everything in the `static` directory
7 | const to_cache = shell.concat(files);
8 | const cached = new Set(to_cache);
9 |
10 | self.addEventListener('install', event => {
11 | event.waitUntil(
12 | caches
13 | .open(ASSETS)
14 | .then(cache => cache.addAll(to_cache))
15 | .then(() => {
16 | self.skipWaiting();
17 | }),
18 | );
19 | });
20 |
21 | self.addEventListener('activate', event => {
22 | event.waitUntil(
23 | caches.keys().then(async keys => {
24 | // delete old caches
25 | for (const key of keys) {
26 | if (key !== ASSETS) await caches.delete(key);
27 | }
28 |
29 | self.clients.claim();
30 | }),
31 | );
32 | });
33 |
34 | self.addEventListener('fetch', event => {
35 | if (event.request.method !== 'GET' || event.request.headers.has('range')) return;
36 |
37 | const url = new URL(event.request.url);
38 |
39 | // don't try to handle e.g. data: URIs
40 | if (!url.protocol.startsWith('http')) return;
41 |
42 | // ignore dev server requests
43 | if (url.hostname === self.location.hostname && url.port !== self.location.port) return;
44 |
45 | // always serve static files and bundler-generated assets from cache
46 | if (url.host === self.location.host && cached.has(url.pathname)) {
47 | event.respondWith(caches.match(event.request));
48 | return;
49 | }
50 |
51 | // for pages, you might want to serve a shell `service-worker-index.html` file,
52 | // which Sapper has generated for you. It's not right for every
53 | // app, but if it's right for yours then uncomment this section
54 | /*
55 | if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) {
56 | event.respondWith(caches.match('/service-worker-index.html'));
57 | return;
58 | }
59 | */
60 |
61 | if (event.request.cache === 'only-if-cached') return;
62 |
63 | // for everything else, try the network first, falling back to
64 | // cache if the user is offline. (If the pages never change, you
65 | // might prefer a cache-first approach to a network-first one.)
66 | event.respondWith(
67 | caches.open(`offline${timestamp}`).then(async cache => {
68 | try {
69 | const response = await fetch(event.request);
70 | cache.put(event.request, response.clone());
71 | return response;
72 | } catch (err) {
73 | const response = await cache.match(event.request);
74 | if (response) return response;
75 |
76 | throw err;
77 | }
78 | }),
79 | );
80 | });
81 |
--------------------------------------------------------------------------------
/www/src/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | %sapper.base%
9 |
10 |
11 |
12 |
13 |
14 |
17 | %sapper.styles%
18 |
19 |
21 | %sapper.head%
22 |
23 |
24 |
26 | %sapper.html%
27 |
28 |
31 | %sapper.scripts%
32 |
33 |
34 |
--------------------------------------------------------------------------------
/www/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vaheqelyan/svelte-popover/ea1171755c4ffdc96dba190b0166316a999cff03/www/static/favicon.png
--------------------------------------------------------------------------------
/www/static/global.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | position: relative;
3 | width: 100%;
4 | height: 100%;
5 | }
6 | * {font-weight: normal;}
7 |
8 | body {
9 | /*overflow:scroll;*/
10 | color: #333;
11 | margin: 0;
12 | padding: 8px;
13 | box-sizing: border-box;
14 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
15 | }
16 |
17 | a {
18 | color: rgb(0,100,200);
19 | text-decoration: none;
20 | }
21 |
22 | a:hover {
23 | text-decoration: underline;
24 | }
25 |
26 | a:visited {
27 | color: rgb(0,80,160);
28 | }
29 |
30 | label {
31 | display: block;
32 | }
33 |
34 | input, button, select, textarea {
35 | font-family: inherit;
36 | font-size: inherit;
37 | padding: 0.4em;
38 | margin: 0 0 0.2em 0;
39 | box-sizing: border-box;
40 | border: 1px solid #ccc;
41 | border-radius: 2px;
42 | }
43 |
44 | input:disabled {
45 | color: #ccc;
46 | }
47 |
48 | input[type="range"] {
49 | height: 0;
50 | }
51 |
52 | button {
53 | background-color: #f4f4f4;
54 | outline: none;
55 | }
56 |
57 | button:active {
58 | background-color: #ddd;
59 | }
60 |
61 | button:focus {
62 | border-color: #666;
63 | }
--------------------------------------------------------------------------------
/www/static/logo-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vaheqelyan/svelte-popover/ea1171755c4ffdc96dba190b0166316a999cff03/www/static/logo-192.png
--------------------------------------------------------------------------------
/www/static/logo-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vaheqelyan/svelte-popover/ea1171755c4ffdc96dba190b0166316a999cff03/www/static/logo-512.png
--------------------------------------------------------------------------------
/www/static/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "background_color": "#ffffff",
3 | "theme_color": "#333333",
4 | "name": "TODO",
5 | "short_name": "TODO",
6 | "display": "minimal-ui",
7 | "start_url": "/",
8 | "icons": [
9 | {
10 | "src": "logo-192.png",
11 | "sizes": "192x192",
12 | "type": "image/png"
13 | },
14 | {
15 | "src": "logo-512.png",
16 | "sizes": "512x512",
17 | "type": "image/png"
18 | }
19 | ]
20 | }
21 |
--------------------------------------------------------------------------------
/www/webpack.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack');
2 | const config = require('sapper/config/webpack.js');
3 | const pkg = require('./package.json');
4 |
5 | const mode = process.env.NODE_ENV;
6 | const dev = mode === 'development';
7 |
8 | const extensions = ['.mjs', '.js', '.json', '.svelte', '.html'];
9 | const mainFields = ['svelte', 'module', 'browser', 'main'];
10 |
11 | module.exports = {
12 | client: {
13 | entry: config.client.entry(),
14 | output: config.client.output(),
15 | resolve: { extensions, mainFields },
16 | module: {
17 | rules: [
18 | {
19 | test: /\.(svelte|html)$/,
20 | use: {
21 | loader: 'svelte-loader',
22 | options: {
23 | dev,
24 | hydratable: true,
25 | hotReload: false, // pending https://github.com/sveltejs/svelte/issues/2377
26 | },
27 | },
28 | },
29 | ],
30 | },
31 | mode,
32 | plugins: [
33 | // pending https://github.com/sveltejs/svelte/issues/2377
34 | // dev && new webpack.HotModuleReplacementPlugin(),
35 | new webpack.DefinePlugin({
36 | 'process.browser': true,
37 | 'process.env.NODE_ENV': JSON.stringify(mode),
38 | }),
39 | ].filter(Boolean),
40 | devtool: dev && 'inline-source-map',
41 | },
42 |
43 | server: {
44 | entry: config.server.entry(),
45 | output: config.server.output(),
46 | target: 'node',
47 | resolve: { extensions, mainFields },
48 | externals: Object.keys(pkg.dependencies).concat('encoding'),
49 | module: {
50 | rules: [
51 | {
52 | test: /\.(svelte|html)$/,
53 | use: {
54 | loader: 'svelte-loader',
55 | options: {
56 | css: false,
57 | generate: 'ssr',
58 | dev,
59 | },
60 | },
61 | },
62 | ],
63 | },
64 | mode: process.env.NODE_ENV,
65 | performance: {
66 | hints: false, // it doesn't matter if server.js is large
67 | },
68 | },
69 |
70 | serviceworker: {
71 | entry: config.serviceworker.entry(),
72 | output: config.serviceworker.output(),
73 | mode: process.env.NODE_ENV,
74 | },
75 | };
76 |
--------------------------------------------------------------------------------