Add the ConfirmButton component.
This commit is contained in:
		
							parent
							
								
									3ae3960d79
								
							
						
					
					
						commit
						ad32b07691
					
				| 
						 | 
				
			
			@ -17,6 +17,7 @@ pnpm add @holllo/gram htm preact
 | 
			
		|||
 | 
			
		||||
## Components
 | 
			
		||||
 | 
			
		||||
* [ConfirmButton](source/buttons/confirm-button.ts)
 | 
			
		||||
* [PrivacyLink](source/links/privacy-link.ts)
 | 
			
		||||
 | 
			
		||||
## License
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,7 @@
 | 
			
		|||
    "test:snapshots": "ava --update-snapshots"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@happy-dom/global-registrator": "^2.47.3",
 | 
			
		||||
    "ava": "^4.0.1",
 | 
			
		||||
    "c8": "^7.11.0",
 | 
			
		||||
    "htm": "^3.1.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										446
									
								
								pnpm-lock.yaml
								
								
								
								
							
							
						
						
									
										446
									
								
								pnpm-lock.yaml
								
								
								
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
lockfileVersion: 5.3
 | 
			
		||||
 | 
			
		||||
specifiers:
 | 
			
		||||
  '@happy-dom/global-registrator': ^2.47.3
 | 
			
		||||
  ava: ^4.0.1
 | 
			
		||||
  c8: ^7.11.0
 | 
			
		||||
  htm: ^3.1.0
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +12,7 @@ specifiers:
 | 
			
		|||
  xo: ^0.48.0
 | 
			
		||||
 | 
			
		||||
devDependencies:
 | 
			
		||||
  '@happy-dom/global-registrator': 2.47.3
 | 
			
		||||
  ava: 4.1.0
 | 
			
		||||
  c8: 7.11.0
 | 
			
		||||
  htm: 3.1.0
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +78,14 @@ packages:
 | 
			
		|||
      - supports-color
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@happy-dom/global-registrator/2.47.3:
 | 
			
		||||
    resolution: {integrity: sha512-TmW5yvfFLkfHpMzff+Ph6pDoxbJHJu/K1kkF4xls9tRAEKbh6yF59WAvYf/VrgqmHpcJcr9FxGav0rfgjoYRcg==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      happy-dom: 2.47.3
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - encoding
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@humanwhocodes/config-array/0.9.5:
 | 
			
		||||
    resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==}
 | 
			
		||||
    engines: {node: '>=10.10.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -133,6 +143,12 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/concat-stream/1.6.1:
 | 
			
		||||
    resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/node': 8.10.66
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/eslint/7.29.0:
 | 
			
		||||
    resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
| 
						 | 
				
			
			@ -144,6 +160,12 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/form-data/0.0.33:
 | 
			
		||||
    resolution: {integrity: sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/node': 8.10.66
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/istanbul-lib-coverage/2.0.4:
 | 
			
		||||
    resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -160,6 +182,14 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/node/10.17.60:
 | 
			
		||||
    resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/node/8.10.66:
 | 
			
		||||
    resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/normalize-package-data/2.4.1:
 | 
			
		||||
    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -168,6 +198,136 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@types/qs/6.9.7:
 | 
			
		||||
    resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/eslint-plugin/5.15.0_f2c49ce7d0e93ebcfdb4b7d25b131b28:
 | 
			
		||||
    resolution: {integrity: sha512-u6Db5JfF0Esn3tiAKELvoU5TpXVSkOpZ78cEGn/wXtT2RVqs2vkt4ge6N8cRCyw7YVKhmmLDbwI2pg92mlv7cA==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      '@typescript-eslint/parser': ^5.0.0
 | 
			
		||||
      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
 | 
			
		||||
      typescript: '*'
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      typescript:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/parser': 5.15.0_eslint@8.11.0+typescript@4.6.2
 | 
			
		||||
      '@typescript-eslint/scope-manager': 5.15.0
 | 
			
		||||
      '@typescript-eslint/type-utils': 5.15.0_eslint@8.11.0+typescript@4.6.2
 | 
			
		||||
      '@typescript-eslint/utils': 5.15.0_eslint@8.11.0+typescript@4.6.2
 | 
			
		||||
      debug: 4.3.3
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      functional-red-black-tree: 1.0.1
 | 
			
		||||
      ignore: 5.2.0
 | 
			
		||||
      regexpp: 3.2.0
 | 
			
		||||
      semver: 7.3.5
 | 
			
		||||
      tsutils: 3.21.0_typescript@4.6.2
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - supports-color
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/parser/5.15.0_eslint@8.11.0+typescript@4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-NGAYP/+RDM2sVfmKiKOCgJYPstAO40vPAgACoWPO/+yoYKSgAXIFaBKsV8P0Cc7fwKgvj27SjRNX4L7f4/jCKQ==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
 | 
			
		||||
      typescript: '*'
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      typescript:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/scope-manager': 5.15.0
 | 
			
		||||
      '@typescript-eslint/types': 5.15.0
 | 
			
		||||
      '@typescript-eslint/typescript-estree': 5.15.0_typescript@4.6.2
 | 
			
		||||
      debug: 4.3.3
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - supports-color
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/scope-manager/5.15.0:
 | 
			
		||||
    resolution: {integrity: sha512-EFiZcSKrHh4kWk0pZaa+YNJosvKE50EnmN4IfgjkA3bTHElPtYcd2U37QQkNTqwMCS7LXeDeZzEqnsOH8chjSg==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/types': 5.15.0
 | 
			
		||||
      '@typescript-eslint/visitor-keys': 5.15.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/type-utils/5.15.0_eslint@8.11.0+typescript@4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-KGeDoEQ7gHieLydujGEFLyLofipe9PIzfvA/41urz4hv+xVxPEbmMQonKSynZ0Ks2xDhJQ4VYjB3DnRiywvKDA==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      eslint: '*'
 | 
			
		||||
      typescript: '*'
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      typescript:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/utils': 5.15.0_eslint@8.11.0+typescript@4.6.2
 | 
			
		||||
      debug: 4.3.3
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      tsutils: 3.21.0_typescript@4.6.2
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - supports-color
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/types/5.15.0:
 | 
			
		||||
    resolution: {integrity: sha512-yEiTN4MDy23vvsIksrShjNwQl2vl6kJeG9YkVJXjXZnkJElzVK8nfPsWKYxcsGWG8GhurYXP4/KGj3aZAxbeOA==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/typescript-estree/5.15.0_typescript@4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-Hb0e3dGc35b75xLzixM3cSbG1sSbrTBQDfIScqdyvrfJZVEi4XWAT+UL/HMxEdrJNB8Yk28SKxPLtAhfCbBInA==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      typescript: '*'
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      typescript:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/types': 5.15.0
 | 
			
		||||
      '@typescript-eslint/visitor-keys': 5.15.0
 | 
			
		||||
      debug: 4.3.3
 | 
			
		||||
      globby: 11.1.0
 | 
			
		||||
      is-glob: 4.0.3
 | 
			
		||||
      semver: 7.3.5
 | 
			
		||||
      tsutils: 3.21.0_typescript@4.6.2
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - supports-color
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/utils/5.15.0_eslint@8.11.0+typescript@4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-081rWu2IPKOgTOhHUk/QfxuFog8m4wxW43sXNOMSCdh578tGJ1PAaWPsj42LOa7pguh173tNlMigsbrHvh/mtA==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/json-schema': 7.0.9
 | 
			
		||||
      '@typescript-eslint/scope-manager': 5.15.0
 | 
			
		||||
      '@typescript-eslint/types': 5.15.0
 | 
			
		||||
      '@typescript-eslint/typescript-estree': 5.15.0_typescript@4.6.2
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      eslint-scope: 5.1.1
 | 
			
		||||
      eslint-utils: 3.0.0_eslint@8.11.0
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - supports-color
 | 
			
		||||
      - typescript
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /@typescript-eslint/visitor-keys/5.15.0:
 | 
			
		||||
    resolution: {integrity: sha512-+vX5FKtgvyHbmIJdxMJ2jKm9z2BIlXJiuewI8dsDYMp5LzPUcuTT78Ya5iwvQg3VqSVdmxyM8Anj1Jeq7733ZQ==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/types': 5.15.0
 | 
			
		||||
      eslint-visitor-keys: 3.3.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /acorn-jsx/5.3.2_acorn@8.7.0:
 | 
			
		||||
    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
| 
						 | 
				
			
			@ -319,6 +479,14 @@ packages:
 | 
			
		|||
    engines: {node: '>=12'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /asap/2.0.6:
 | 
			
		||||
    resolution: {integrity: sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /asynckit/0.4.0:
 | 
			
		||||
    resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /ava/4.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-QD6MBWHzagAwb9vxduXzVWx6Q77DUHLxvIebSY6+enL+Ri6KzSZYj0IBOFifA26wfpJPZnWKLUh3vwx1LyVh/g==}
 | 
			
		||||
    engines: {node: '>=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=17'}
 | 
			
		||||
| 
						 | 
				
			
			@ -405,6 +573,10 @@ packages:
 | 
			
		|||
      fill-range: 7.0.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /buffer-from/1.1.2:
 | 
			
		||||
    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /builtin-modules/3.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==}
 | 
			
		||||
    engines: {node: '>=6'}
 | 
			
		||||
| 
						 | 
				
			
			@ -461,6 +633,10 @@ packages:
 | 
			
		|||
    engines: {node: '>=10'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /caseless/0.12.0:
 | 
			
		||||
    resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /cbor/8.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==}
 | 
			
		||||
    engines: {node: '>=12.19'}
 | 
			
		||||
| 
						 | 
				
			
			@ -585,6 +761,13 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /combined-stream/1.0.8:
 | 
			
		||||
    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
 | 
			
		||||
    engines: {node: '>= 0.8'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      delayed-stream: 1.0.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /common-path-prefix/3.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -597,6 +780,16 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /concat-stream/1.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
 | 
			
		||||
    engines: {'0': node >= 0.8}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      buffer-from: 1.1.2
 | 
			
		||||
      inherits: 2.0.4
 | 
			
		||||
      readable-stream: 2.3.7
 | 
			
		||||
      typedarray: 0.0.6
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /concordance/5.0.4:
 | 
			
		||||
    resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==}
 | 
			
		||||
    engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'}
 | 
			
		||||
| 
						 | 
				
			
			@ -626,6 +819,10 @@ packages:
 | 
			
		|||
    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /core-util-is/1.0.3:
 | 
			
		||||
    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /cosmiconfig/7.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==}
 | 
			
		||||
    engines: {node: '>=10'}
 | 
			
		||||
| 
						 | 
				
			
			@ -650,6 +847,10 @@ packages:
 | 
			
		|||
      which: 2.0.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /css.escape/1.5.1:
 | 
			
		||||
    resolution: {integrity: sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /currently-unhandled/0.4.1:
 | 
			
		||||
    resolution: {integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -741,6 +942,11 @@ packages:
 | 
			
		|||
      slash: 3.0.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /delayed-stream/1.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=}
 | 
			
		||||
    engines: {node: '>=0.4.0'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /diff/4.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
 | 
			
		||||
    engines: {node: '>=0.3.1'}
 | 
			
		||||
| 
						 | 
				
			
			@ -880,6 +1086,19 @@ packages:
 | 
			
		|||
      eslint: 8.11.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /eslint-config-xo-typescript/0.50.0_e21934fc1887d480d46bdd084e788a81:
 | 
			
		||||
    resolution: {integrity: sha512-Ru2tXB8y2w9fFHLm4v2AVfY6P81UbfEuDZuxEpeXlfV65Ezlk0xO4nBaT899ojIFkWfr60rP9Ye4CdVUUT1UYg==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      '@typescript-eslint/eslint-plugin': '>=5.8.0'
 | 
			
		||||
      eslint: '>=8.0.0'
 | 
			
		||||
      typescript: '>=4.4'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@typescript-eslint/eslint-plugin': 5.15.0_f2c49ce7d0e93ebcfdb4b7d25b131b28
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /eslint-config-xo/0.40.0_eslint@8.11.0:
 | 
			
		||||
    resolution: {integrity: sha512-msI1O0JGxeK2bbExg3U6EGaWKcjhOFzEjwzObywG/DC5GSNZTOyJT+b2l9MZGBeZsVdxfIGwdXTNeWXl8cN9iw==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
| 
						 | 
				
			
			@ -1070,6 +1289,14 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-egHz9A1WG7b8CS0x1P6P/Rj5FqZOjray/VjpJa14tMZalfRKvpE2ONJ3plCM7+PcinmU4tcmbPLv0VtwzSdLVA==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /eslint-scope/5.1.1:
 | 
			
		||||
    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
 | 
			
		||||
    engines: {node: '>=8.0.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      esrecurse: 4.3.0
 | 
			
		||||
      estraverse: 4.3.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /eslint-scope/7.1.1:
 | 
			
		||||
    resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==}
 | 
			
		||||
    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 | 
			
		||||
| 
						 | 
				
			
			@ -1191,6 +1418,11 @@ packages:
 | 
			
		|||
      estraverse: 5.3.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /estraverse/4.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
 | 
			
		||||
    engines: {node: '>=4.0'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /estraverse/5.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
 | 
			
		||||
    engines: {node: '>=4.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -1335,6 +1567,15 @@ packages:
 | 
			
		|||
      signal-exit: 3.0.7
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /form-data/2.5.1:
 | 
			
		||||
    resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==}
 | 
			
		||||
    engines: {node: '>= 0.12'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      asynckit: 0.4.0
 | 
			
		||||
      combined-stream: 1.0.8
 | 
			
		||||
      mime-types: 2.1.35
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /fs.realpath/1.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -1368,6 +1609,11 @@ packages:
 | 
			
		|||
      has-symbols: 1.0.3
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /get-port/3.2.0:
 | 
			
		||||
    resolution: {integrity: sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=}
 | 
			
		||||
    engines: {node: '>=4'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /get-set-props/0.1.0:
 | 
			
		||||
    resolution: {integrity: sha1-mYR1wXhEVobQsyJG2l3428++jqM=}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -1450,6 +1696,20 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /happy-dom/2.47.3:
 | 
			
		||||
    resolution: {integrity: sha512-92M1InRC2S9wEN1MN242g2YNYfx9y3nPVuzw1z2RI6VGpSCjGVm5z8WAJiw3p6CQAZK64MqE2FtSf7hzohLfVA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      css.escape: 1.5.1
 | 
			
		||||
      he: 1.2.0
 | 
			
		||||
      node-fetch: 2.6.7
 | 
			
		||||
      sync-request: 6.1.0
 | 
			
		||||
      webidl-conversions: 7.0.0
 | 
			
		||||
      whatwg-encoding: 1.0.5
 | 
			
		||||
      whatwg-mimetype: 2.3.0
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - encoding
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /hard-rejection/2.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
 | 
			
		||||
    engines: {node: '>=6'}
 | 
			
		||||
| 
						 | 
				
			
			@ -1488,6 +1748,11 @@ packages:
 | 
			
		|||
      function-bind: 1.1.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /he/1.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /hosted-git-info/2.8.9:
 | 
			
		||||
    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -1507,11 +1772,34 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /http-basic/8.1.3:
 | 
			
		||||
    resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==}
 | 
			
		||||
    engines: {node: '>=6.0.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      caseless: 0.12.0
 | 
			
		||||
      concat-stream: 1.6.2
 | 
			
		||||
      http-response-object: 3.0.2
 | 
			
		||||
      parse-cache-control: 1.0.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /http-response-object/3.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/node': 10.17.60
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /human-signals/2.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
 | 
			
		||||
    engines: {node: '>=10.17.0'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /iconv-lite/0.4.24:
 | 
			
		||||
    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
 | 
			
		||||
    engines: {node: '>=0.10.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      safer-buffer: 2.1.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /ignore-by-default/2.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==}
 | 
			
		||||
    engines: {node: '>=10 <11 || >=12 <13 || >=14'}
 | 
			
		||||
| 
						 | 
				
			
			@ -1816,6 +2104,10 @@ packages:
 | 
			
		|||
      is-docker: 2.2.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /isarray/1.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /isexe/2.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -2081,6 +2373,18 @@ packages:
 | 
			
		|||
      picomatch: 2.3.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /mime-db/1.52.0:
 | 
			
		||||
    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
 | 
			
		||||
    engines: {node: '>= 0.6'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /mime-types/2.1.35:
 | 
			
		||||
    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
 | 
			
		||||
    engines: {node: '>= 0.6'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      mime-db: 1.52.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /mimic-fn/2.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
 | 
			
		||||
    engines: {node: '>=6'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2131,6 +2435,18 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /node-fetch/2.6.7:
 | 
			
		||||
    resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
 | 
			
		||||
    engines: {node: 4.x || >=6.0.0}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      encoding: ^0.1.0
 | 
			
		||||
    peerDependenciesMeta:
 | 
			
		||||
      encoding:
 | 
			
		||||
        optional: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      whatwg-url: 5.0.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /nofilter/3.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==}
 | 
			
		||||
    engines: {node: '>=12.19'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2348,6 +2664,10 @@ packages:
 | 
			
		|||
      callsites: 3.1.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /parse-cache-control/1.0.1:
 | 
			
		||||
    resolution: {integrity: sha1-juqz5U+laSD+Fro493+iGqzC104=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /parse-json/5.2.0:
 | 
			
		||||
    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2485,6 +2805,16 @@ packages:
 | 
			
		|||
      parse-ms: 2.1.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /process-nextick-args/2.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /promise/8.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      asap: 2.0.6
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /proto-props/2.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==}
 | 
			
		||||
    engines: {node: '>=4'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2495,6 +2825,13 @@ packages:
 | 
			
		|||
    engines: {node: '>=6'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /qs/6.10.3:
 | 
			
		||||
    resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
 | 
			
		||||
    engines: {node: '>=0.6'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      side-channel: 1.0.4
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /queue-microtask/1.2.3:
 | 
			
		||||
    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -2542,6 +2879,18 @@ packages:
 | 
			
		|||
      type-fest: 1.4.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /readable-stream/2.3.7:
 | 
			
		||||
    resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      core-util-is: 1.0.3
 | 
			
		||||
      inherits: 2.0.4
 | 
			
		||||
      isarray: 1.0.0
 | 
			
		||||
      process-nextick-args: 2.0.1
 | 
			
		||||
      safe-buffer: 5.1.2
 | 
			
		||||
      string_decoder: 1.1.1
 | 
			
		||||
      util-deprecate: 1.0.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /readdirp/3.6.0:
 | 
			
		||||
    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
 | 
			
		||||
    engines: {node: '>=8.10.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2626,6 +2975,10 @@ packages:
 | 
			
		|||
      regexp-tree: 0.1.24
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /safer-buffer/2.1.2:
 | 
			
		||||
    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /semver/5.7.1:
 | 
			
		||||
    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
 | 
			
		||||
    hasBin: true
 | 
			
		||||
| 
						 | 
				
			
			@ -2763,6 +3116,12 @@ packages:
 | 
			
		|||
      define-properties: 1.1.3
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /string_decoder/1.1.1:
 | 
			
		||||
    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      safe-buffer: 5.1.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /strip-ansi/6.0.1:
 | 
			
		||||
    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
 | 
			
		||||
    engines: {node: '>=8'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2843,6 +3202,21 @@ packages:
 | 
			
		|||
    engines: {node: '>= 0.4'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /sync-request/6.1.0:
 | 
			
		||||
    resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==}
 | 
			
		||||
    engines: {node: '>=8.0.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      http-response-object: 3.0.2
 | 
			
		||||
      sync-rpc: 1.3.6
 | 
			
		||||
      then-request: 6.0.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /sync-rpc/1.3.6:
 | 
			
		||||
    resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      get-port: 3.2.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /tapable/0.1.10:
 | 
			
		||||
    resolution: {integrity: sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=}
 | 
			
		||||
    engines: {node: '>=0.6'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2866,6 +3240,23 @@ packages:
 | 
			
		|||
    resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /then-request/6.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==}
 | 
			
		||||
    engines: {node: '>=6.0.0'}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@types/concat-stream': 1.6.1
 | 
			
		||||
      '@types/form-data': 0.0.33
 | 
			
		||||
      '@types/node': 8.10.66
 | 
			
		||||
      '@types/qs': 6.9.7
 | 
			
		||||
      caseless: 0.12.0
 | 
			
		||||
      concat-stream: 1.6.2
 | 
			
		||||
      form-data: 2.5.1
 | 
			
		||||
      http-basic: 8.1.3
 | 
			
		||||
      http-response-object: 3.0.2
 | 
			
		||||
      promise: 8.1.0
 | 
			
		||||
      qs: 6.10.3
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /time-zone/1.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=}
 | 
			
		||||
    engines: {node: '>=4'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2886,6 +3277,10 @@ packages:
 | 
			
		|||
      is-number: 7.0.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /tr46/0.0.3:
 | 
			
		||||
    resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /trim-newlines/4.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2930,6 +3325,20 @@ packages:
 | 
			
		|||
      strip-bom: 3.0.0
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /tslib/1.14.1:
 | 
			
		||||
    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /tsutils/3.21.0_typescript@4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
 | 
			
		||||
    engines: {node: '>= 6'}
 | 
			
		||||
    peerDependencies:
 | 
			
		||||
      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
 | 
			
		||||
    dependencies:
 | 
			
		||||
      tslib: 1.14.1
 | 
			
		||||
      typescript: 4.6.2
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /type-check/0.4.0:
 | 
			
		||||
    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
 | 
			
		||||
    engines: {node: '>= 0.8.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2972,6 +3381,10 @@ packages:
 | 
			
		|||
    engines: {node: '>=12.20'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /typedarray/0.0.6:
 | 
			
		||||
    resolution: {integrity: sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /typescript/4.6.2:
 | 
			
		||||
    resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==}
 | 
			
		||||
    engines: {node: '>=4.2.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -2998,6 +3411,10 @@ packages:
 | 
			
		|||
      punycode: 2.1.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /util-deprecate/1.0.2:
 | 
			
		||||
    resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /v8-compile-cache-lib/3.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==}
 | 
			
		||||
    dev: true
 | 
			
		||||
| 
						 | 
				
			
			@ -3022,11 +3439,37 @@ packages:
 | 
			
		|||
      spdx-expression-parse: 3.0.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /webidl-conversions/3.0.1:
 | 
			
		||||
    resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /webidl-conversions/7.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /well-known-symbols/2.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==}
 | 
			
		||||
    engines: {node: '>=6'}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /whatwg-encoding/1.0.5:
 | 
			
		||||
    resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      iconv-lite: 0.4.24
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /whatwg-mimetype/2.3.0:
 | 
			
		||||
    resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==}
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /whatwg-url/5.0.0:
 | 
			
		||||
    resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=}
 | 
			
		||||
    dependencies:
 | 
			
		||||
      tr46: 0.0.3
 | 
			
		||||
      webidl-conversions: 3.0.1
 | 
			
		||||
    dev: true
 | 
			
		||||
 | 
			
		||||
  /which-boxed-primitive/1.0.2:
 | 
			
		||||
    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
 | 
			
		||||
    dependencies:
 | 
			
		||||
| 
						 | 
				
			
			@ -3077,12 +3520,15 @@ packages:
 | 
			
		|||
    hasBin: true
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@eslint/eslintrc': 1.2.1
 | 
			
		||||
      '@typescript-eslint/eslint-plugin': 5.15.0_f2c49ce7d0e93ebcfdb4b7d25b131b28
 | 
			
		||||
      '@typescript-eslint/parser': 5.15.0_eslint@8.11.0+typescript@4.6.2
 | 
			
		||||
      arrify: 3.0.0
 | 
			
		||||
      cosmiconfig: 7.0.1
 | 
			
		||||
      define-lazy-prop: 3.0.0
 | 
			
		||||
      eslint: 8.11.0
 | 
			
		||||
      eslint-config-prettier: 8.5.0_eslint@8.11.0
 | 
			
		||||
      eslint-config-xo: 0.40.0_eslint@8.11.0
 | 
			
		||||
      eslint-config-xo-typescript: 0.50.0_e21934fc1887d480d46bdd084e788a81
 | 
			
		||||
      eslint-formatter-pretty: 4.1.0
 | 
			
		||||
      eslint-import-resolver-webpack: 0.13.2_eslint-plugin-import@2.25.4
 | 
			
		||||
      eslint-plugin-ava: 13.2.0_eslint@8.11.0
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,88 @@
 | 
			
		|||
import {html} from 'htm/preact';
 | 
			
		||||
import {Component, VNode} from 'preact';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Component properties for {@linkcode ConfirmButton}.
 | 
			
		||||
 */
 | 
			
		||||
export type ConfirmButtonProps = {
 | 
			
		||||
  class: string;
 | 
			
		||||
  click: (event: MouseEvent) => unknown;
 | 
			
		||||
  confirmClass: string;
 | 
			
		||||
  confirmText: string;
 | 
			
		||||
  extraAttributes: Record<string, string>;
 | 
			
		||||
  preventDefault: boolean;
 | 
			
		||||
  text: string;
 | 
			
		||||
  timeout: number;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Component state for {@linkcode ConfirmButton}.
 | 
			
		||||
 */
 | 
			
		||||
export type ConfirmButtonState = {
 | 
			
		||||
  timeoutHandle: number | undefined;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A {@linkcode https://developer.mozilla.org/docs/Web/HTML/Element/button <button>}
 | 
			
		||||
 * element wrapper that requires 2 clicks within a given time to call the click
 | 
			
		||||
 * function. For example to confirm removal of something.
 | 
			
		||||
 */
 | 
			
		||||
export class ConfirmButton extends Component<
 | 
			
		||||
  ConfirmButtonProps,
 | 
			
		||||
  ConfirmButtonState
 | 
			
		||||
> {
 | 
			
		||||
  constructor(props: ConfirmButtonProps) {
 | 
			
		||||
    super(props);
 | 
			
		||||
 | 
			
		||||
    this.state = {
 | 
			
		||||
      timeoutHandle: undefined,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  click = (event: MouseEvent) => {
 | 
			
		||||
    const {click, preventDefault, timeout} = this.props;
 | 
			
		||||
    const {timeoutHandle} = this.state;
 | 
			
		||||
 | 
			
		||||
    if (preventDefault) {
 | 
			
		||||
      event.preventDefault();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (timeoutHandle === undefined) {
 | 
			
		||||
      this.setState({
 | 
			
		||||
        timeoutHandle: window.setTimeout(this.resetTimeout, timeout),
 | 
			
		||||
      });
 | 
			
		||||
    } else {
 | 
			
		||||
      click(event);
 | 
			
		||||
      this.resetTimeout();
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  resetTimeout = () => {
 | 
			
		||||
    window.clearTimeout(this.state.timeoutHandle);
 | 
			
		||||
    this.setState({timeoutHandle: undefined});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  render(): VNode {
 | 
			
		||||
    const timeoutActive = this.state.timeoutHandle !== undefined;
 | 
			
		||||
 | 
			
		||||
    let text = this.props.text;
 | 
			
		||||
    const props: Record<string, string> = {
 | 
			
		||||
      class: this.props.class,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if (timeoutActive) {
 | 
			
		||||
      text = this.props.confirmText;
 | 
			
		||||
      props.class = `${props.class} ${this.props.confirmClass}`;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return html`
 | 
			
		||||
      <button
 | 
			
		||||
        ...${this.props.extraAttributes}
 | 
			
		||||
        ...${props}
 | 
			
		||||
        onclick=${this.click}
 | 
			
		||||
      >
 | 
			
		||||
        ${text}
 | 
			
		||||
      </button>
 | 
			
		||||
    `;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +1,5 @@
 | 
			
		|||
// Button Exports
 | 
			
		||||
export * from './buttons/confirm-button.js';
 | 
			
		||||
 | 
			
		||||
// Link Exports
 | 
			
		||||
export {PrivacyLink, PrivacyLinkProps} from './links/privacy-link.js';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
import {GlobalRegistrator} from '@happy-dom/global-registrator';
 | 
			
		||||
import test from 'ava';
 | 
			
		||||
import {html} from 'htm/preact';
 | 
			
		||||
import {render} from 'preact';
 | 
			
		||||
 | 
			
		||||
import {ConfirmButton, ConfirmButtonProps} from '../../source/gram.js';
 | 
			
		||||
 | 
			
		||||
test.before(() => {
 | 
			
		||||
  GlobalRegistrator.register();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
test('ConfirmButton', async (t) => {
 | 
			
		||||
  t.plan(3);
 | 
			
		||||
 | 
			
		||||
  const props: ConfirmButtonProps = {
 | 
			
		||||
    class: 'button',
 | 
			
		||||
    click: (event) => t.true(event !== undefined),
 | 
			
		||||
    confirmClass: 'confirm',
 | 
			
		||||
    confirmText: 'Confirm Button',
 | 
			
		||||
    extraAttributes: {
 | 
			
		||||
      id: 'confirm-button',
 | 
			
		||||
    },
 | 
			
		||||
    preventDefault: true,
 | 
			
		||||
    text: 'Button',
 | 
			
		||||
    timeout: 1000,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  render(html`<${ConfirmButton} ...${props} />`, document);
 | 
			
		||||
 | 
			
		||||
  const buttonElement =
 | 
			
		||||
    document.querySelector<HTMLButtonElement>('#confirm-button')!;
 | 
			
		||||
 | 
			
		||||
  t.snapshot(buttonElement.outerHTML, 'Default state');
 | 
			
		||||
  buttonElement.click();
 | 
			
		||||
 | 
			
		||||
  // Wait for Preact to do its stuff.
 | 
			
		||||
  await sleep();
 | 
			
		||||
 | 
			
		||||
  t.snapshot(buttonElement.outerHTML, 'Confirm state');
 | 
			
		||||
  buttonElement.click();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
const sleep = async (timeout = 250): Promise<void> => {
 | 
			
		||||
  return new Promise((resolve) => {
 | 
			
		||||
    setTimeout(() => {
 | 
			
		||||
      resolve();
 | 
			
		||||
    }, timeout);
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
# Snapshot report for `tests/buttons/confirm-button.test.ts`
 | 
			
		||||
 | 
			
		||||
The actual snapshot is saved in `confirm-button.test.ts.snap`.
 | 
			
		||||
 | 
			
		||||
Generated by [AVA](https://avajs.dev).
 | 
			
		||||
 | 
			
		||||
## ConfirmButton
 | 
			
		||||
 | 
			
		||||
> Default state
 | 
			
		||||
 | 
			
		||||
    '<button id="confirm-button" class="button">Button</button>'
 | 
			
		||||
 | 
			
		||||
> Confirm state
 | 
			
		||||
 | 
			
		||||
    '<button id="confirm-button" class="button confirm">Confirm Button</button>'
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue