├── .browserslistrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ └── feature_request.md
└── workflows
│ └── blank.yml
├── .gitignore
├── .markdownlint.ignore
├── .markdownlint.json
├── .prettierignore
├── .prettierrc
├── .stylelintignore
├── .travis.yml
├── .vscode
├── extensions.json
├── launch.json
└── settings.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── TODO.md
├── _config.yml
├── babel.config.js
├── commitlint.config.js
├── dist
├── VueCssDoodle.common.js
├── VueCssDoodle.css
├── VueCssDoodle.umd.js
└── VueCssDoodle.umd.min.js
├── docs
├── android-chrome-144x144.png
├── android-chrome-96x96.png
├── apple-touch-icon-57x57-precomposed.png
├── apple-touch-icon-57x57.png
├── apple-touch-icon-60x60-precomposed.png
├── apple-touch-icon-60x60.png
├── apple-touch-icon-72x72-precomposed.png
├── apple-touch-icon-72x72.png
├── apple-touch-icon-76x76-precomposed.png
├── apple-touch-icon-76x76.png
├── apple-touch-icon-precomposed.png
├── apple-touch-icon.png
├── browserconfig.xml
├── css
│ ├── app.1dec7612.css
│ └── chunk-vendors.883ea51b.css
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── favicon.png
├── humans.txt
├── img
│ └── lighthouse-audit.91ed377c.jpg
├── index.html
├── js
│ ├── app-legacy.2d7f44cf.js
│ ├── app.f68a7ff0.js
│ ├── chunk-vendors-legacy.b8ca30c8.js
│ └── chunk-vendors.770cc8cf.js
├── mstile-150x150.png
├── mstile-310x150.png
├── mstile-70x70.png
├── og-image.jpg
├── robots.txt
├── safari-pinned-tab.svg
└── site.webmanifest
├── husky.config.js
├── jest.config.js
├── lighthouse-audit.jpg
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── android-chrome-144x144.png
├── android-chrome-96x96.png
├── apple-touch-icon-57x57-precomposed.png
├── apple-touch-icon-57x57.png
├── apple-touch-icon-60x60-precomposed.png
├── apple-touch-icon-60x60.png
├── apple-touch-icon-72x72-precomposed.png
├── apple-touch-icon-72x72.png
├── apple-touch-icon-76x76-precomposed.png
├── apple-touch-icon-76x76.png
├── apple-touch-icon-precomposed.png
├── apple-touch-icon.png
├── browserconfig.xml
├── favicon-16x16.png
├── favicon-32x32.png
├── favicon.ico
├── favicon.png
├── humans.txt
├── index.html
├── mstile-150x150.png
├── mstile-310x150.png
├── mstile-70x70.png
├── og-image.jpg
├── robots.txt
├── safari-pinned-tab.svg
└── site.webmanifest
├── renovate.json
├── src
├── VApp
│ ├── VApp.vue
│ ├── demo.scss
│ ├── index.js
│ └── style.scss
├── VueCssDoodle
│ ├── VueCssDoodle.vue
│ ├── index.js
│ └── style.scss
├── library.js
├── main.js
└── main.scss
├── stylelint.config.js
└── vue.config.js
/.browserslistrc:
--------------------------------------------------------------------------------
1 | defaults
2 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 4
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.yml]
12 | indent_size = 2
13 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/
2 | docs/
3 |
4 | bower_components/
5 | node_modules/
6 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parserOptions: {
4 | parser: 'babel-eslint',
5 | sourceType: 'module',
6 | },
7 | extends: [
8 | '@nuxtjs',
9 | '@vue/prettier',
10 | 'eslint:recommended',
11 | 'plugin:nuxt/recommended',
12 | 'plugin:vue/recommended',
13 | ],
14 | plugins: [
15 | 'standard',
16 | 'compat',
17 | 'import',
18 | 'promise',
19 | 'unicorn',
20 | ],
21 | rules: {
22 | 'indent': 'off',
23 | 'no-console': [
24 | 'warn',
25 | {
26 | allow: [
27 | 'info',
28 | 'error',
29 | ],
30 | }
31 | ],
32 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
33 | 'one-var': [
34 | 'warn',
35 | {
36 | separateRequires: true,
37 | var: 'consecutive',
38 | let: 'consecutive',
39 | const: 'consecutive',
40 | }
41 | ],
42 | 'spaced-comment': [ 'warn', 'always' ],
43 | 'function-call-argument-newline': [ 'warn', 'always' ],
44 | 'prefer-const': 'warn',
45 | 'no-useless-rename': [
46 | 'warn',
47 | {
48 | ignoreExport: true,
49 | },
50 | ],
51 | 'rest-spread-spacing': [
52 | 'warn',
53 | 'always',
54 | ],
55 | 'template-curly-spacing': [
56 | 'warn',
57 | 'always',
58 | ],
59 | 'array-element-newline': [
60 | 'warn',
61 | {
62 | minItems: 2,
63 | multiline: true,
64 | }
65 | ],
66 | 'array-bracket-newline': [
67 | 'warn',
68 | {
69 | minItems: 2,
70 | multiline: true,
71 | }
72 | ],
73 | 'function-paren-newline': [
74 | 'warn',
75 | {
76 | minItems: 1,
77 | }
78 | ],
79 | 'brace-style': [
80 | 'warn',
81 | '1tbs',
82 | {
83 | allowSingleLine: true,
84 | }
85 | ],
86 | 'comma-style': [
87 | 'warn',
88 | 'first',
89 | {
90 | exceptions: {
91 | ArrayExpression: true,
92 | ObjectExpression: true,
93 | }
94 | }
95 | ],
96 | 'comma-spacing': [
97 | 'warn',
98 | {
99 | before: false,
100 | after: true,
101 | }
102 | ],
103 | quotes: [
104 | 'warn',
105 | 'single',
106 | {
107 | avoidEscape: true,
108 | allowTemplateLiterals: true,
109 | }
110 | ],
111 | semi: [
112 | 'warn',
113 | 'always',
114 | ],
115 | 'no-unreachable': 'warn',
116 | 'no-confusing-arrow': 'warn',
117 | 'no-constant-condition': 'warn',
118 | curly: [
119 | 'warn',
120 | 'multi-or-nest',
121 | ],
122 | 'padding-line-between-statements': [
123 | 'warn',
124 | {
125 | blankLine: 'always',
126 | prev: [
127 | 'const',
128 | 'let',
129 | 'var',
130 | ],
131 | next: '*',
132 | },
133 | {
134 | blankLine: 'any',
135 | prev: [
136 | 'const',
137 | 'let',
138 | 'var',
139 | ],
140 | next: [
141 | 'const',
142 | 'let',
143 | 'var',
144 | ]
145 | }
146 | ],
147 | 'no-empty': 'warn',
148 | 'no-return-await': 'warn',
149 | 'no-multiple-empty-lines': [
150 | 'warn',
151 | {
152 | max: 1,
153 | maxEOF: 1,
154 | maxBOF: 1,
155 | }
156 | ],
157 | 'lines-around-comment': [
158 | 'warn',
159 | {
160 | beforeBlockComment: false,
161 | afterBlockComment: false,
162 | beforeLineComment: false,
163 | afterLineComment: false,
164 | allowBlockStart: true,
165 | allowBlockEnd: true,
166 | allowObjectStart: true,
167 | allowObjectEnd: true,
168 | allowArrayStart: true,
169 | allowArrayEnd: true,
170 | }
171 | ],
172 | 'no-inner-declarations': [
173 | 'warn',
174 | 'functions',
175 | ],
176 | 'no-tabs': 'warn',
177 | 'operator-linebreak': [
178 | 'warn',
179 | 'before',
180 | ],
181 | 'block-spacing': [
182 | 'warn',
183 | 'always',
184 | ],
185 | 'dot-location': [
186 | 'warn',
187 | 'property',
188 | ],
189 | 'func-call-spacing': [
190 | 'warn',
191 | 'never',
192 | ],
193 | 'key-spacing': [
194 | 'warn',
195 | {
196 | beforeColon: false,
197 | }
198 | ],
199 | 'new-cap': [
200 | 'warn',
201 | {
202 | newIsCap: true,
203 | }
204 | ],
205 | 'no-duplicate-imports': [
206 | 'warn',
207 | {
208 | includeExports: true,
209 | }
210 | ],
211 | 'no-floating-decimal': 'warn',
212 | 'no-multi-spaces': 'warn',
213 | 'no-return-assign': [
214 | 'warn',
215 | 'except-parens',
216 | ],
217 | 'require-await': 'warn',
218 | 'no-undef': 'warn',
219 | 'no-undef-init': 'warn',
220 | 'no-whitespace-before-property': 'warn',
221 | 'object-property-newline': [
222 | 'warn',
223 | {
224 | allowAllPropertiesOnSameLine: false,
225 | }
226 | ],
227 | 'object-curly-newline': [
228 | 'warn',
229 | {
230 | ObjectExpression: {
231 | multiline: true,
232 | minProperties: 1,
233 | },
234 | ObjectPattern: {
235 | multiline: true,
236 | minProperties: 2,
237 | },
238 | ImportDeclaration: {
239 | multiline: true,
240 | consistent: false,
241 | minProperties: 3,
242 | },
243 | ExportDeclaration: {
244 | multiline: true,
245 | consistent: false,
246 | minProperties: 2,
247 | }
248 | }
249 | ],
250 | 'padded-blocks': [
251 | 'warn',
252 | {
253 | switches: 'never',
254 | blocks: 'always',
255 | }
256 | ],
257 | 'yield-star-spacing': [
258 | 'warn',
259 | 'both',
260 | ],
261 | 'one-var-declaration-per-line': [
262 | 'warn',
263 | 'always',
264 | ],
265 | 'space-infix-ops': 'warn',
266 | 'require-atomic-updates': 'warn',
267 | 'comma-dangle': [
268 | 'warn',
269 | {
270 | arrays: 'always-multiline',
271 | objects: 'always-multiline',
272 | exports: 'always-multiline',
273 | imports: 'always-multiline',
274 | functions: 'only-multiline',
275 | }
276 | ],
277 | 'dot-notation': 'warn',
278 | 'eqeqeq': [ 'warn', 'always' ],
279 | 'camelcase': [
280 | 'off',
281 | {
282 | ignoreDestructuring: true,
283 | },
284 | ],
285 | 'no-prototype-builtins': 'warn',
286 | 'no-extra-semi': 'warn',
287 | 'no-new-object': 'warn',
288 | 'no-array-constructor': 'warn',
289 | 'no-new-wrappers': 'warn',
290 | 'no-mixed-spaces-and-tabs': 'warn',
291 | 'space-before-function-paren': [
292 | 'warn',
293 | 'never',
294 | ],
295 | 'space-before-blocks': 'warn',
296 | 'array-bracket-spacing': [
297 | 'warn',
298 | 'always',
299 | {
300 | singleValue: true,
301 | objectsInArrays: false,
302 | arraysInArrays: true,
303 | }
304 | ],
305 | 'computed-property-spacing': [
306 | 'warn',
307 | 'always'
308 | ],
309 | 'space-in-parens': [
310 | 1,
311 | 'always'
312 | ],
313 | 'object-curly-spacing': [
314 | 'warn',
315 | 'always'
316 | ],
317 | 'keyword-spacing': [
318 | 'warn',
319 | {
320 | after: false,
321 | overrides: {
322 | const: {
323 | after: true,
324 | },
325 | else: {
326 | before: true,
327 | after: true,
328 | },
329 | from: {
330 | before: true,
331 | after: true,
332 | },
333 | return: {
334 | after: true,
335 | },
336 | default: {
337 | after: true,
338 | },
339 | export: {
340 | after: true,
341 | },
342 | import: {
343 | after: true,
344 | },
345 | case: {
346 | after: true,
347 | },
348 | try: {
349 | after: true,
350 | },
351 | catch: {
352 | before: true,
353 | after: false,
354 | }
355 | }
356 | }
357 | ],
358 | 'arrow-parens': [
359 | 'warn',
360 | 'as-needed'
361 | ],
362 | 'no-irregular-whitespace': 'warn',
363 | 'space-unary-ops': [
364 | 'warn',
365 | {
366 | words: true,
367 | nonwords: true,
368 | }
369 | ],
370 | 'arrow-spacing': [
371 | 1,
372 | {
373 | before: true,
374 | after: true,
375 | }
376 | ],
377 | 'object-shorthand': [
378 | 'warn',
379 | 'always',
380 | ],
381 | 'no-unused-vars': [
382 | 'warn',
383 | {
384 | vars: 'all',
385 | args: 'after-used',
386 | ignoreRestSiblings: true,
387 | caughtErrors: 'all',
388 | argsIgnorePattern: '^_',
389 | }
390 | ],
391 | 'max-len': [
392 | 'warn',
393 | 300,
394 | 4,
395 | {
396 | ignoreUrls: true,
397 | ignoreTemplateLiterals: true,
398 | ignoreStrings: true,
399 | }
400 | ],
401 | 'max-statements': [
402 | 'warn',
403 | 72,
404 | {
405 | ignoreTopLevelFunctions: true,
406 | }
407 | ],
408 | 'lines-between-class-members': [
409 | 'warn',
410 | 'always',
411 | {
412 | exceptAfterSingleLine: true,
413 | }
414 | ],
415 | // Plugins
416 | // Standard
417 | 'unicorn/prefer-includes': 'warn',
418 | 'standard/computed-property-even-spacing': [
419 | 'warn',
420 | 'always',
421 | ],
422 | 'standard/object-curly-even-spacing': [
423 | 'warn',
424 | 'either',
425 | ],
426 | // Import
427 | 'import/order': 'warn',
428 | 'import/first': 'warn',
429 | 'import/namespace': [
430 | 'warn',
431 | {
432 | allowComputed: true,
433 | }
434 | ],
435 | // Compat
436 | 'compat/compat': 'warn',
437 | // Vuejs
438 | 'vue/require-default-prop': 'warn',
439 | 'vue/require-prop-types': 'warn',
440 | 'vue/no-v-html': 'off',
441 | 'vue/no-unused-vars': 'warn',
442 | 'vue/no-unused-components': 'warn',
443 | 'vue/no-use-v-if-with-v-for': [
444 | 'warn',
445 | {
446 | allowUsingIterationVar: true,
447 | }
448 | ],
449 | 'vue/component-name-in-template-casing': [
450 | 'warn',
451 | 'kebab-case',
452 | ],
453 | 'vue/name-property-casing': [
454 | 'warn',
455 | 'kebab-case'
456 | ],
457 | 'vue/multiline-html-element-content-newline': [
458 | 'warn',
459 | {
460 | ignoreWhenEmpty: false,
461 | allowEmptyLines: true,
462 | }
463 | ],
464 | 'vue/attribute-hyphenation': [
465 | 'warn',
466 | 'always'
467 | ],
468 | 'vue/max-attributes-per-line': [
469 | 'warn',
470 | {
471 | 'singleline': 2,
472 | 'multiline': {
473 | 'max': 1,
474 | 'allowFirstLine': false
475 | }
476 | }
477 | ],
478 | 'vue/html-end-tags': 'warn',
479 | 'vue/html-indent': [
480 | 'warn',
481 | 4
482 | ],
483 | 'vue/html-self-closing': 'warn',
484 | 'vue/attributes-order': 'warn',
485 | 'vue/html-quotes': [
486 | 'warn',
487 | 'double'
488 | ],
489 | 'vue/order-in-components': 'warn',
490 | 'vue/html-closing-bracket-newline': [
491 | 'warn',
492 | {
493 | singleline: 'never',
494 | multiline: 'always'
495 | }
496 | ],
497 | 'vue/html-closing-bracket-spacing': [
498 | 'warn',
499 | {
500 | startTag: 'never',
501 | endTag: 'never',
502 | selfClosingTag: 'always'
503 | }
504 | ],
505 | 'vue/script-indent': [
506 | 'warn',
507 | 4,
508 | {
509 | baseIndent: 1
510 | }
511 | ],
512 | },
513 | };
514 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | patreon: luxdamore
4 | open_collective: luca-iaconelli
5 | ko_fi: luxdamore
6 | liberapay: luxdamore
7 | issuehunt: luxdamore
8 | otechie: luxdamore
9 | custom: ['https://www.paypal.me/luxdamore']
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/.github/workflows/blank.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build:
7 |
8 | runs-on: ubuntu-latest
9 |
10 | steps:
11 | - uses: actions/checkout@v1
12 | - name: Run a one-line script
13 | run: echo Hello, world!
14 | - name: Run a multi-line script
15 | run: |
16 | echo Add other actions to build,
17 | echo test, and deploy your project.
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Common
2 | .DS_Store
3 | .env
4 | desktop.ini
5 | node_modules/
6 | bower_components/
7 |
8 | # Library
9 | dist/demo.html
10 |
11 | # Log files
12 | npm-debug.log*
13 | yarn-debug.log*
14 | yarn-error.log*
15 | report.*
16 | *.heapsnapshot
17 |
18 | # Editor directories and files
19 | .idea
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw*
25 |
--------------------------------------------------------------------------------
/.markdownlint.ignore:
--------------------------------------------------------------------------------
1 | {
2 | "markdownlint.ignore": [
3 | "CHANGELOG.md"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/.markdownlint.json:
--------------------------------------------------------------------------------
1 | {
2 | "MD013": false,
3 | "MD024": false,
4 | "MD036": false
5 | }
6 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | dist/
2 | docs/
3 |
4 | bower_components/
5 | node_modules/
6 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "printWidth": 120,
3 | "singleQuote": true,
4 | "trailingComma": "all",
5 | "bracketSpacing": true,
6 | "jsxBracketSameLine": true,
7 | "semi": true,
8 | "requirePragma": true,
9 | "insertPragma": true,
10 | "useTabs": false,
11 | "tabWidth": 4,
12 | "arrowParens": "avoid",
13 | "proseWrap": "preserve"
14 | }
15 |
--------------------------------------------------------------------------------
/.stylelintignore:
--------------------------------------------------------------------------------
1 | dist/
2 | docs/
3 |
4 | bower_components/
5 | node_modules/
6 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '8'
4 | script:
5 | - npm run test
6 | - npm run publish
7 | branches:
8 | only:
9 | - master
10 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
3 | // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
4 | // List of extensions which should be recommended for users of this workspace.
5 | "recommendations": [
6 | "formulahendry.auto-close-tag",
7 | "formulahendry.auto-rename-tag",
8 | "kevinkyang.auto-comment-blocks",
9 | "dzannotti.vscode-babel-coloring",
10 | "editorconfig.editorconfig",
11 | "davidanson.vscode-markdownlint",
12 | "dbaeumer.vscode-eslint",
13 | "mohseenrm.lit-it",
14 | "mubaidr.vuejs-extension-pack",
15 | "jeremyrajan.webpack",
16 | "sysoev.language-stylus",
17 | "mikestead.dotenv",
18 | "eg2.vscode-npm-script",
19 | "wallabyjs.quokka-vscode",
20 | "mrmlnc.vscode-attrs-sorter",
21 | "wayou.vscode-todo-highlight",
22 | "jock.svg",
23 | "octref.vetur",
24 | "dariofuzinato.vue-peek",
25 | "christian-kohler.npm-intellisense",
26 | "sdras.vue-vscode-snippets",
27 | "redhat.vscode-yaml",
28 | "hookyqr.beautify",
29 | "wmaurer.change-case",
30 | "naumovs.color-highlight",
31 | "wix.vscode-import-cost",
32 | "xabikos.javascriptsnippets",
33 | "esbenp.prettier-vscode",
34 | "cssho.vscode-svgviewer",
35 | "dotjoshjohnson.xml",
36 | "cpylua.language-postcss",
37 | "donjayamanne.githistory",
38 | "eamodio.gitlens",
39 | "bradlc.vscode-tailwindcss",
40 | "kumar-harsh.graphql-for-vscode",
41 | "tombonnike.vscode-status-bar-format-toggle"
42 | ],
43 | // List of extensions recommended by VS Code that should not be recommended for users of this workspace.
44 | "unwantedRecommendations": []
45 | }
46 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "type": "node",
6 | "request": "attach",
7 | "name": "Attach to Nuxt",
8 | "port": 9229,
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | // CSS
3 | "css.validate": false,
4 | "less.validate": false,
5 | "scss.validate": false,
6 | "html.validate.styles": false,
7 | // ESLint
8 | "eslint.enable": true,
9 | "eslint.alwaysShowStatus": true,
10 | "eslint.options": {
11 | "extensions": [
12 | ".js",
13 | ".vue"
14 | ]
15 | },
16 | "stylelint.enable": true,
17 | // Vue
18 | "vetur.format.styleInitialIndent": true,
19 | "vetur.format.defaultFormatter.js": "prettier-eslint",
20 | "vetur.format.defaultFormatter.ts": "prettier-tslint",
21 | "prettier.singleQuote": true,
22 | "prettier.tabWidth": 4,
23 | "prettier.trailingComma": "all",
24 | "prettier.printWidth": 120,
25 | "prettier.jsxSingleQuote": true,
26 | // Colors
27 | "workbench.colorCustomizations": {
28 | "activityBar.background": "#65c89b",
29 | "activityBar.activeBorder": "#945bc4",
30 | "activityBar.foreground": "#15202b",
31 | "activityBar.inactiveForeground": "#15202b99",
32 | "activityBarBadge.background": "#945bc4",
33 | "activityBarBadge.foreground": "#e7e7e7",
34 | "titleBar.activeBackground": "#42b883",
35 | "titleBar.inactiveBackground": "#42b88399",
36 | "titleBar.activeForeground": "#15202b",
37 | "titleBar.inactiveForeground": "#15202b99",
38 | "statusBar.background": "#42b883",
39 | "statusBarItem.hoverBackground": "#359268",
40 | "statusBar.foreground": "#15202b"
41 | },
42 | "peacock.color": "#42b883",
43 | "cSpell.words": [
44 | "iaconelli",
45 | "lerps",
46 | "luxdamore",
47 | "otechie",
48 | "patreon",
49 | "paypal",
50 | "preload",
51 | "tympanus"
52 | ],
53 | "editor.codeActionsOnSave": {
54 | "source.fixAll.eslint": true
55 | },
56 | "markdownlint.ignore": [
57 | "CHANGELOG.md"
58 | ],
59 | "cSpell.ignoreWords": [
60 | "commitlint",
61 | "hljs",
62 | "multicolumn",
63 | "navbutton"
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4 |
5 | ### [1.0.1](https://github.com/LuXDAmore/vue-css-doodle/compare/v1.0.0...v1.0.1) (2020-01-08)
6 |
7 | ### [0.0.7](https://github.com/LuXDAmore/vue-css-doodle/compare/v0.0.6...v0.0.7) (2020-01-08)
8 |
9 |
10 | ### Features
11 |
12 | * accessibility, added title ([a71b5c6](https://github.com/LuXDAmore/vue-css-doodle/commit/a71b5c6ba622e7a37a6d3e436ebfd8e99b67d9e8))
13 | * webpack-lightouhse-cli ([2db2684](https://github.com/LuXDAmore/vue-css-doodle/commit/2db2684f48cc23078748edba6360b70b9a8b6b72))
14 |
15 | ### [0.0.6](https://github.com/LuXDAmore/vue-css-doodle/compare/v0.0.5...v0.0.6) (2020-01-08)
16 |
17 |
18 | ### Features
19 |
20 | * build before release ([2096139](https://github.com/LuXDAmore/vue-css-doodle/commit/2096139d45a9e306a5b07ab40be900ac27b59c54))
21 | * compilerOptions ([6c478f4](https://github.com/LuXDAmore/vue-css-doodle/commit/6c478f48cf4a644f52ca5b0a040274c02bc82be4))
22 |
23 | ### [0.0.5](https://github.com/LuXDAmore/vue-css-doodle/compare/v0.0.4...v0.0.5) (2020-01-08)
24 |
25 | ### [0.0.4](https://github.com/LuXDAmore/vue-css-doodle/compare/v0.0.3...v0.0.4) (2020-01-08)
26 |
27 |
28 | ### Features
29 |
30 | * check lint before build ([1e1e7c2](https://github.com/LuXDAmore/vue-css-doodle/commit/1e1e7c29de656b2854fd04cf13c72f85dc2629ba))
31 |
32 | ### [0.0.3](https://github.com/LuXDAmore/vue-css-doodle/compare/v0.0.2...v0.0.3) (2020-01-08)
33 |
34 | ### 0.0.2 (2020-01-08)
35 |
36 | ### Bug Fixes
37 |
38 | * css-doodle errors ([9c7ea02](https://github.com/LuXDAmore/vue-css-doodle/commit/9c7ea02e2bf5583ae07b25a9b60ab726a662db74))
39 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Luca Iaconelli
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 | # 🎉 Vue Css Doodle
2 |
3 | > Porting of css-doodle to VueJs, a web component for drawing patterns with CSS
4 |
5 | [![npm version][npm-version-src]][npm-version-href]
6 | [![npm downloads][npm-downloads-src]][npm-downloads-href]
7 | [![License][license-src]][license-href]
8 |
9 | ## Installation
10 |
11 | This package is available on npm.
12 |
13 | ```bash
14 |
15 | # Deps
16 | npm install --save @luxdamore/vue-css-doodle
17 |
18 | ```
19 |
20 | ### Usage
21 |
22 | #### As a component
23 |
24 | ```js
25 |
26 | // Component
27 | import { VueCssDoodle } from '@luxdamore/vue-css-doodle';
28 | import '@luxdamore/vue-css-doodle/dist/VueCssDoodle.css';
29 |
30 | // Install
31 | Vue.component(
32 | VueCssDoodle.name,
33 | VueCssDoodle
34 | );
35 |
36 | // Or in a .vue file
37 | export default {
38 | components: {
39 | 'vue-css-doodle': VueCssDoodle,
40 | },
41 | };
42 |
43 | // Add this line to your main.js
44 | Vue.config.ignoredElements = [ 'css-doodle' ];
45 |
46 | ```
47 |
48 | #### As a plugin
49 |
50 | ```js
51 |
52 | // Plugin
53 | import VueCssDoodle from '@luxdamore/vue-css-doodle';
54 | import '@luxdamore/vue-css-doodle/dist/VueCssDoodle.css';
55 |
56 | // Install
57 | Vue.use(
58 | VueCssDoodle
59 | );
60 |
61 | ```
62 |
63 | #### Browser's way
64 |
65 | ```html
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | ```
99 |
100 | #### Markup
101 |
102 | ```html
103 |
104 |
105 | :doodle {
106 | @grid: 50x1 / 80%;
107 | }
108 |
109 | @place-cell: center;
110 | @size: calc(100% / @size * @i);
111 |
112 | transform: rotate(calc(@i * 5deg));
113 |
114 | border-radius: 30%;
115 | border: 1px solid hsla(
116 | calc(10 + 4 * @i), 70%, 68%, @r.8
117 | );
118 |
119 |
120 | ```
121 |
122 | #### Integrations
123 |
124 | #### NuxtJS
125 |
126 | - Create a file in the `plugins` folder;
127 | - Name it `vue-css-doodle.client.js`;
128 | - Install it _as a plugin_;
129 | - Import it in the `nuxt.config.js` file as [*client side only*](https://nuxtjs.org/guide/plugins/#client-side-only).
130 |
131 | ### Options
132 |
133 | #### Slots
134 |
135 | ```bash
136 |
137 | # Available
138 | slot="default" # Add the content, it expose v-slot="{ generate }" method to refresh the doodle
139 |
140 | ```
141 |
142 | #### Props
143 |
144 | | Attribute | Type | Default | Required | About |
145 | |:--------------------:|--------------------|:-------:|:--------:|-------------------------------------|
146 | | title | String | null | false | The title |
147 | | grid | String or Number | null | false | Value of `grid-attr` |
148 | | use | String | null | false | Value of `use-attr` |
149 | | height | String | null | false | Height of the doodle |
150 | | width | String | null | false | Width of the doodle |
151 | | mx-auto | Boolean | false | false | Add `margin-left|right-auto` to the doodle |
152 | | fit-width | Boolean | false | false | Force the doodle to fit in a `max-width` |
153 | | fit-height | Boolean | false | false | Force the doodle to fit in a `max-height` |
154 | | fill-height | Boolean | false | false | Expand the doodle to an `height of 100%` |
155 | | click-to-update | Boolean | false | false | Refresh on click |
156 | | overflow-hidden | Boolean | false | false | Add `overflow-hidden` to the container |
157 | | absolute | Boolean | false | false | Set position to `absolute` |
158 |
159 | Check the [DOCS for more information](https://css-doodle.com/#usage).
160 | ___
161 |
162 | [npm-version-src]: https://img.shields.io/npm/v/@luxdamore/vue-css-doodle/latest.svg?style=flat-square
163 | [npm-version-href]: https://npmjs.com/package/@luxdamore/vue-css-doodle
164 |
165 | [npm-downloads-src]: https://img.shields.io/npm/dt/@luxdamore/vue-css-doodle.svg?style=flat-square
166 | [npm-downloads-href]: https://npmjs.com/package/@luxdamore/vue-css-doodle
167 |
168 | [license-src]: https://img.shields.io/npm/l/@luxdamore/vue-css-doodle.svg?style=flat-square
169 | [license-href]: https://npmjs.com/package/@luxdamore/vue-css-doodle
170 |
171 | ## 🐞 Issues
172 |
173 | Please make sure to read the [Issue Reporting Checklist](/.github/ISSUE_TEMPLATE/bug_report.md) before opening an issue. Issues not conforming to the guidelines may be closed immediately.
174 |
175 | ## 👥 Contribution
176 |
177 | Please make sure to read the [Contributing Guide](/.github/ISSUE_TEMPLATE/feature_request.md) before making a pull request.
178 |
179 | ## 📖 Changelog
180 |
181 | Details changes for each release are documented in the [**release notes**](./CHANGELOG.md).
182 |
183 | ### 📃 License
184 |
185 | [MIT License](./LICENSE) // Copyright (©) 2019-present [Luca Iaconelli](https://lucaiaconelli.it)
186 |
187 | ___
188 |
189 | #### 💸 Are you feeling generous today? :)
190 |
191 | Do you want to share a beer? We can be good friends.. __[Paypal](https://www.paypal.me/luxdamore) // [Patreon](https://www.patreon.com/luxdamore)__
192 |
193 | > _It's always a good day to be magnanimous - cit_
194 |
195 | #### 💼 Hire me
196 |
197 | [](https://otechie.com/luxdamore)
198 |
199 | [](https://ko-fi.com/luxdamore)
200 |
201 | #### 💘 Inspired by
202 |
203 | A web component for drawing patterns with CSS, [css-doodle](https://css-doodle.com)
204 |
205 | > Check the [full list of doodle on Codepen](https://codepen.io/collection/XyVkpQ)
206 |
207 | ___
208 |
209 | ##### 💡 Lighthouse
210 |
211 | 
212 |
--------------------------------------------------------------------------------
/TODO.md:
--------------------------------------------------------------------------------
1 | # TODO
2 |
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | theme:
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | [
4 | '@vue/app',
5 | {
6 | useBuiltIns: false,
7 | },
8 | ],
9 | ],
10 | };
11 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: [ '@commitlint/config-conventional' ],
3 | };
4 |
--------------------------------------------------------------------------------
/dist/VueCssDoodle.css:
--------------------------------------------------------------------------------
1 | .vue-css-doodle--mx-auto>css-doodle[data-v-5c11e18e]{margin-right:auto;margin-left:auto}.vue-css-doodle--fill-height>css-doodle[data-v-5c11e18e]{height:100%}.vue-css-doodle--fit-width>css-doodle[data-v-5c11e18e]{max-width:100%}.vue-css-doodle--fit-height>css-doodle[data-v-5c11e18e]{max-height:100%}.vue-css-doodle--overflow-hidden[data-v-5c11e18e]{overflow:hidden}.vue-css-doodle--absolute[data-v-5c11e18e]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0}
--------------------------------------------------------------------------------
/dist/VueCssDoodle.umd.min.js:
--------------------------------------------------------------------------------
1 | (function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["VueCssDoodle"]=t():e["VueCssDoodle"]=t()})("undefined"!==typeof self?self:this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s="fb15")}({1054:function(e,t,r){var n,i;(function(s){n=s,i="function"===typeof n?n.call(t,r,t,e):n,void 0===i||(e.exports=i)})((function(){"use strict";function e(e){let t=0,r=1,n=1;return{curr(r=0){return e[t+r]},end(){return e.length<=t},info(){return{index:t,col:r,line:n}},index(e){return void 0===e?t:t=e},next(){let i=e[t++];return"\n"==i?(n++,r=0):r++,i}}}function t(e){let t="",r=[],n=[],i={};while(!e.end()){let s=e.curr();if("("==s)r.push(s),t="";else if(")"==s||","==s){if(/^\-\-.+/.test(t)&&(i.name?(i.alternative||(i.alternative=[]),i.alternative.push({name:t})):i.name=t),")"==s){if("("!=r[r.length-1])throw new Error("bad match");r.pop()}","==s&&(r.length||(n.push(i),i={})),t=""}else/\s/.test(s)||(t+=s);e.next()}return r.length?[]:(i.name&&n.push(i),n)}function r(r){r=r.trim();let n=[];if(!/^var\(/.test(r))return n;let i=e(r);try{n=t(i)}catch(s){console.error(s&&s.message||"Bad variables.")}return n}function n(e){return Array.isArray(e)?e:[e]}function i(e,t="\n"){return(e||[]).join(t)}function s(e,t=1){return e[e.length-t]}function o(e){return e[0]}function l(e){return JSON.parse(JSON.stringify(e))}function u(e){let t=Array.from?Array.from(e):e.slice(),r=e.length;while(r){let e=~~(Math.random()*r--),n=t[r];t[r]=t[e],t[e]=n}return t}function a(e,t){return Array.prototype.flatMap?e.flatMap(t):e.reduce((e,r)=>e.concat(t(r)),[])}const c={func(e=""){return{type:"func",name:e,arguments:[]}},argument(){return{type:"argument",value:[]}},text(e=""){return{type:"text",value:e}},pseudo(e=""){return{type:"pseudo",selector:e,styles:[]}},cond(e=""){return{type:"cond",name:e,styles:[],arguments:[]}},rule(e=""){return{type:"rule",property:e,value:[]}},keyframes(e=""){return{type:"keyframes",name:e,steps:[]}},step(e=""){return{type:"step",name:e,styles:[]}}},h={white_space(e){return/[\s\n\t]/.test(e)},line_break(e){return/\n/.test(e)},number(e){return!isNaN(e)},pair(e){return['"',"(",")","'"].includes(e)},pair_of(e,t){return{'"':'"',"'":"'","(":")"}[e]==t}},p={"π":Math.PI,"∏":Math.PI};function f(e,{col:t,line:r}){console.error(`(at line ${r}, column ${t}) ${e}`)}function d(e){return e.trim().length?h.number(+e)?+e:e.trim():e}function y(e){return function(t,r){let n=t.index(),i="";while(!t.end()){let r=t.next();if(e(r))break;i+=r}return r&&t.index(n),i}}function g(e,t){let r=e=>/[^\w@]/.test(e);return y(r)(e,t)}function m(e){return y(e=>/[\s\{]/.test(e))(e)}function v(e,t){let r=e=>h.line_break(e)||"{"==e;return y(r)(e,t)}function b(e,t){let r,n=c.step();while(!e.end()){if("}"==(r=e.curr()))break;if(h.white_space(r))e.next();else{if(n.name.length){if(n.styles.push(C(e,t)),"}"==e.curr())break}else n.name=L(e);e.next()}}return n}function x(e,t){const r=[];let n;while(!e.end()){if("}"==(n=e.curr()))break;h.white_space(n)?e.next():(r.push(b(e,t)),e.next())}return r}function w(e,t){let r,n=c.keyframes();while(!e.end()){if("}"==(r=e.curr()))break;if(n.name.length){if("{"==r){e.next(),n.steps=x(e,t);break}e.next()}else if(g(e),n.name=m(e),!n.name.length){f("missing keyframes name",e.info());break}}return n}function _(e,t={}){e.next();while(!e.end()){let r=e.curr();if(t.inline){if("\n"==r)break}else if("*"==(r=e.curr())&&"/"==e.curr(1))break;e.next()}t.inline||(e.next(),e.next())}function k(e){let t,r="";while(!e.end()){if(":"==(t=e.curr()))break;h.white_space(t)||(r+=t),e.next()}return r}function $(e){let t,r=[],n=[],i=[],o="";while(!e.end()){if(t=e.curr(),/[\('"`]/.test(t)&&"\\"!==e.curr(-1))i.length&&"("!=t&&t===s(i)?i.pop():i.push(t),o+=t;else if("@"==t)n.length||(o=o.trimLeft()),o.length&&(n.push(c.text(o)),o=""),n.push(j(e));else if(/[,)]/.test(t))if(i.length)")"==t&&i.pop(),o+=t;else{if(o.length&&(n.length?n.push(c.text(o)):n.push(c.text(d(o))),o.startsWith("±"))){let e=o.substr(1),t=l(n);s(t).value="-"+e,r.push(z(t)),s(n).value=e}if(r.push(z(n)),[n,o]=[[],""],")"==t)break}else p[t]&&(t=p[t]),o+=t;e.next()}return r}function z(e){let t=e.map(e=>{if("text"==e.type&&"string"==typeof e.value){let t=String(e.value);t.includes("`")&&(e.value=t=t.replace(/`/g,'"')),e.value=t.replace(/\n+|\s+/g," ")}return e}),r=o(t)||{},n=s(t)||{};if("text"==r.type&&"text"==n.type){let e=o(r.value),t=s(n.value);"string"==typeof r.value&&"string"==typeof n.value&&h.pair(e)&&h.pair_of(e,t)&&(r.value=r.value.slice(1),n.value=n.value.slice(0,n.value.length-1))}return t}function S(e){let t="",r="";if(/\D$/.test(e))return{fname:e,extra:r};for(let n=e.length-1;n>=0;n--){let i=e[n];if(!/[\d.]/.test(i)){t=e.substring(0,n+1);break}r=i+r}return{fname:t,extra:r}}function j(e){let t,r=c.func(),n="@",i=!1;e.next();while(!e.end()){t=e.curr();let s=e.curr(1);if("("==t){i=!0,e.next(),r.arguments=$(e);break}if(!i&&"("!==s&&!/[0-9a-zA-Z_\-.]/.test(s)){n+=t;break}n+=t,e.next()}let{fname:s,extra:o}=S(n);return r.name=s,o.length&&r.arguments.unshift([{type:"text",value:o}]),r.position=e.info().index,r}function E(e){let t,r=c.text(),n=0,i=!0;const s=[],o=[];s[n]=[];while(!e.end())if(t=e.curr(),i&&h.white_space(t))e.next();else{if(i=!1,"\n"!=t||h.white_space(e.curr(-1)))if(","!=t||o.length){if(/[;}]/.test(t)){r.value.length&&(s[n].push(r),r=c.text());break}"@"==t?(r.value.length&&(s[n].push(r),r=c.text()),s[n].push(j(e))):h.white_space(t)&&h.white_space(e.curr(-1))||("("==t&&o.push(t),")"==t&&o.pop(),p[t]&&(t=p[t]),r.value+=t)}else r.value.length&&(s[n].push(r),r=c.text()),s[++n]=[],i=!0;else r.value+=" ";e.next()}return r.value.length&&s[n].push(r),s}function L(e){let t,r="";while(!e.end()){if("{"==(t=e.curr()))break;h.white_space(t)||(r+=t),e.next()}return r}function O(e){let t,r={name:"",arguments:[]};while(!e.end()){if("("==(t=e.curr()))e.next(),r.arguments=$(e);else{if(/[){]/.test(t))break;h.white_space(t)||(r.name+=t)}e.next()}return r}function T(e,t){let r,n=c.pseudo();while(!e.end()){if("}"==(r=e.curr()))break;if(h.white_space(r))e.next();else{if(n.selector){let r=C(e,t);if("@use"==r.property?n.styles=n.styles.concat(r.value):n.styles.push(r),"}"==e.curr())break}else n.selector=L(e);e.next()}}return n}function C(e,t){let r,n=c.rule();while(!e.end()){if(";"==(r=e.curr()))break;if(n.property.length){n.value=E(e);break}if(n.property=k(e),"@use"==n.property){n.value=N(e,t);break}e.next()}return n}function A(e,t){let r,n=c.cond();while(!e.end()){if("}"==(r=e.curr()))break;if(n.name.length)if(":"==r){let t=T(e);t.selector&&n.styles.push(t)}else if("@"!=r||v(e,!0).includes(":")){if(!h.white_space(r)){let r=C(e,t);if(r.property&&n.styles.push(r),"}"==e.curr())break}}else n.styles.push(A(e));else Object.assign(n,O(e));e.next()}return n}function M(e,t){let r="";return e&&e.get_custom_property_value&&(r=e.get_custom_property_value(t)),r}function P(e,t){e.forEach&&e.forEach(e=>{if("text"==e.type&&e.value){let n=r(e.value);e.value=n.reduce((e,r)=>{let n,i="",s="";i=M(t,r.name),!i&&r.alternative&&r.alternative.every(e=>{if(s=M(t,e.name),s)return i=s,!1});try{n=H(i,t)}catch(o){}return n&&e.push.apply(e,n),e},[])}"func"==e.type&&e.arguments&&e.arguments.forEach(e=>{P(e,t)})})}function N(e,t){e.next();let r=E(e)||[];return r.reduce((e,r)=>{P(r,t);let[n]=r;return n.value&&n.value.length&&e.push(...n.value),e},[])}function H(t,r){const n=e(t),i=[];while(!n.end()){let e=n.curr();if(h.white_space(e))n.next();else{if("/"==e&&"*"==n.curr(1))_(n);else if("/"==e&&"/"==n.curr(1))_(n,{inline:!0});else if(":"==e){let e=T(n,r);e.selector&&i.push(e)}else if("@"==e&&"@keyframes"===g(n,!0)){let e=w(n,r);i.push(e)}else if("@"!=e||v(n,!0).includes(":")){if(!h.white_space(e)){let e=C(n,r);e.property&&i.push(e)}}else{let e=A(n,r);e.name.length&&i.push(e)}n.next()}}return i}function R(e,...t){return t.reduce((e,t)=>e.apply(null,n(t)),e)}function B(e,t,r){return Math.max(t,Math.min(r,e))}function I(e,t){return e?"function"===typeof t?t():t:""}function F(e,t,r){let n=0,i=e,s=e=>e>0&&e<1?.1:1,o=arguments.length;1==o&&([e,t]=[s(e),e]),o<3&&(r=s(e));let l=[];while(r>=0&&e<=t||r<0&&e>t)if(l.push(e),e+=r,n++>=1e3)break;return l.length||l.push(i),l}function U(e,t){return Object.keys(t).forEach(r=>{e[r]=e[t[r]]}),e}function W(e){return/^[a-zA-Z]$/.test(e)}function G(e){let t=()=>e;return t.lazy=!0,t}function V(e,t){let r=[];for(let n=0;n${e}`),e.includes("xmlns")||(e=e.replace(/