Compare commits

...

18 Commits

Author SHA1 Message Date
6cfda1ebf3 1.0.230 2023-10-31 13:44:19 +01:00
8e0062fdd5 fix(core): update 2023-10-31 13:44:18 +01:00
844cc30551 1.0.229 2023-10-24 14:18:04 +02:00
64074e37fc fix(core): update 2023-10-24 14:18:03 +02:00
cd9b028e9b 1.0.228 2023-10-23 21:23:19 +02:00
81da871e38 fix(core): update 2023-10-23 21:23:18 +02:00
90e78a2e31 1.0.227 2023-10-23 17:26:04 +02:00
5cec1fea73 fix(core): update 2023-10-23 17:26:03 +02:00
52130d67e2 1.0.226 2023-10-23 16:13:02 +02:00
a73ad40eb1 fix(core): update 2023-10-23 16:13:02 +02:00
6589818b0b 1.0.225 2023-10-20 11:17:43 +02:00
555fa32ac2 fix(core): update 2023-10-20 11:17:42 +02:00
50a84f2422 1.0.224 2023-10-20 10:47:54 +02:00
c724a3e85b fix(core): update 2023-10-20 10:47:53 +02:00
b47530e254 1.0.223 2023-10-18 15:18:50 +02:00
b80fdf113e fix(core): update 2023-10-18 15:18:49 +02:00
963edbffa3 1.0.222 2023-10-17 20:07:46 +02:00
f3687f724f fix(core): update 2023-10-17 20:07:45 +02:00
22 changed files with 785 additions and 273 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@design.estate/dees-catalog",
"version": "1.0.221",
"version": "1.0.230",
"private": false,
"description": "website for lossless.com",
"main": "dist_ts_web/index.js",
@ -15,17 +15,19 @@
"author": "Lossless GmbH",
"license": "MIT",
"dependencies": {
"@design.estate/dees-domtools": "^2.0.51",
"@design.estate/dees-element": "^2.0.29",
"@design.estate/dees-domtools": "^2.0.55",
"@design.estate/dees-element": "^2.0.31",
"@design.estate/dees-wcctools": "^1.0.81",
"@fortawesome/fontawesome-svg-core": "^6.4.2",
"@fortawesome/free-brands-svg-icons": "^6.4.2",
"@fortawesome/free-regular-svg-icons": "^6.4.2",
"@fortawesome/free-solid-svg-icons": "^6.4.2",
"@push.rocks/smarti18n": "^1.0.4",
"@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartstring": "^4.0.9",
"@tsclass/tsclass": "^4.0.43",
"highlight.js": "11.8.0",
"@tsclass/tsclass": "^4.0.46",
"highlight.js": "11.9.0",
"ibantools": "^4.3.5",
"pdfjs-dist": "^3.11.174"
},
"devDependencies": {
@ -35,7 +37,7 @@
"@gitzone/tswatch": "^2.0.7",
"@push.rocks/projectinfo": "^5.0.2",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.8.3"
"@types/node": "^20.8.7"
},
"files": [
"ts/**/*",

251
pnpm-lock.yaml generated
View File

@ -6,11 +6,11 @@ settings:
dependencies:
'@design.estate/dees-domtools':
specifier: ^2.0.51
version: 2.0.51
specifier: ^2.0.55
version: 2.0.55
'@design.estate/dees-element':
specifier: ^2.0.29
version: 2.0.29
specifier: ^2.0.31
version: 2.0.31
'@design.estate/dees-wcctools':
specifier: ^1.0.81
version: 1.0.81
@ -26,6 +26,9 @@ dependencies:
'@fortawesome/free-solid-svg-icons':
specifier: ^6.4.2
version: 6.4.2
'@push.rocks/smarti18n':
specifier: ^1.0.4
version: 1.0.4
'@push.rocks/smartpromise':
specifier: ^4.0.3
version: 4.0.3
@ -33,11 +36,14 @@ dependencies:
specifier: ^4.0.9
version: 4.0.9
'@tsclass/tsclass':
specifier: ^4.0.43
version: 4.0.43
specifier: ^4.0.46
version: 4.0.46
highlight.js:
specifier: 11.8.0
version: 11.8.0
specifier: 11.9.0
version: 11.9.0
ibantools:
specifier: ^4.3.5
version: 4.3.5
pdfjs-dist:
specifier: ^3.11.174
version: 3.11.174
@ -51,19 +57,19 @@ devDependencies:
version: 2.0.8
'@gitzone/tstest':
specifier: ^1.0.77
version: 1.0.77(@types/node@20.8.3)(sinon@16.1.0)
version: 1.0.77(@types/node@20.8.7)(sinon@17.0.0)
'@gitzone/tswatch':
specifier: ^2.0.7
version: 2.0.7(@types/node@20.8.3)
version: 2.0.7(@types/node@20.8.7)
'@push.rocks/projectinfo':
specifier: ^5.0.2
version: 5.0.2
'@push.rocks/tapbundle':
specifier: ^5.0.15
version: 5.0.15(sinon@16.1.0)
version: 5.0.15(sinon@17.0.0)
'@types/node':
specifier: ^20.8.3
version: 20.8.3
specifier: ^20.8.7
version: 20.8.7
packages:
@ -82,15 +88,15 @@ packages:
resolution: {integrity: sha512-eR2Cr01BYRwIq/X2ajOenWhm8l+/YE4A5kK/9V6I8ZnhtEBMFHG6YjF6Fg8npLJWbvhZXhOms+axZ6JKI71o8g==}
dev: false
/@api.global/typedrequest@3.0.1:
resolution: {integrity: sha512-ed7wIqK7ErjHsiy+5UMB6lhtRzwfnaurNu/pbjQz67Pugk5DLUuuw36YyIlDhRepoPS4L2EY6zL+wsCciTCcoQ==}
/@api.global/typedrequest@3.0.2:
resolution: {integrity: sha512-qO3kynyGKF7Mds7s+Mo1v26V7o7I0oHzyLk/u702OIdnHk02umt/hxp69aGDXW+GDYEyvR8Wa1Ys4VHyUlpi0A==}
dependencies:
'@api.global/typedrequest-interfaces': 3.0.1
'@push.rocks/isounique': 1.0.5
'@push.rocks/lik': 6.0.5
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/webrequest': 3.0.33
'@push.rocks/webrequest': 3.0.34
dev: false
/@apiglobal/typedrequest-interfaces@1.0.20:
@ -139,7 +145,7 @@ packages:
'@pushrocks/smartsitemap': 2.0.1
'@pushrocks/smarttime': 4.0.1
'@pushrocks/webstore': 2.0.8
'@tsclass/tsclass': 4.0.43
'@tsclass/tsclass': 4.0.46
'@types/express': 4.17.17
body-parser: 1.20.2
cors: 2.8.5
@ -190,8 +196,8 @@ packages:
js-tokens: 4.0.0
dev: true
/@babel/runtime@7.23.1:
resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==}
/@babel/runtime@7.23.2:
resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
@ -207,16 +213,16 @@ packages:
/@design.estate/dees-comms@1.0.24:
resolution: {integrity: sha512-IQrTzQrga8gY17fblRdUmxvWJ64f+xpI9ebj1zYAIsypWYlCS7krREUwH/8iow5fze2FJ1t+gUdMCV1CGqdklg==}
dependencies:
'@api.global/typedrequest': 3.0.1
'@api.global/typedrequest': 3.0.2
'@api.global/typedrequest-interfaces': 3.0.1
'@push.rocks/smartdelay': 3.0.5
broadcast-channel: 3.7.0
dev: false
/@design.estate/dees-domtools@2.0.51:
resolution: {integrity: sha512-zSjcSmPZBM7e0Rpq4QzII5dh7asrB23LbKmdf1cqr43xIGqL4F59eu3EexPNWSVgV5XP0EQzwLsoM52gMNkmBA==}
/@design.estate/dees-domtools@2.0.55:
resolution: {integrity: sha512-a3uM5vHRpqp7fRvZTQpcFSnI+njlCQz64flKRlD7OHMZQyL4zCTIQgvSioA1cQfhlpd3yWTkJ9DVM0iZ4/kv7A==}
dependencies:
'@api.global/typedrequest': 3.0.1
'@api.global/typedrequest': 3.0.2
'@design.estate/dees-comms': 1.0.24
'@push.rocks/lik': 6.0.5
'@push.rocks/smartdelay': 3.0.5
@ -226,27 +232,27 @@ packages:
'@push.rocks/smartrx': 3.0.6
'@push.rocks/smartstate': 2.0.17
'@push.rocks/smarturl': 3.0.7
'@push.rocks/webrequest': 3.0.33
'@push.rocks/webrequest': 3.0.34
'@push.rocks/websetup': 3.0.19
'@push.rocks/webstore': 2.0.13
lit: 2.8.0
lit: 3.0.0
sweet-scroll: 4.0.0
dev: false
/@design.estate/dees-element@2.0.29:
resolution: {integrity: sha512-aFVxWHfhyf+PqvD8tm90W86P1GKmwL0zUXTKi/G63gs/hCr5KOHlpQTkzbf66x3lVuWLX/TgvcvIYz/eQb0lmA==}
/@design.estate/dees-element@2.0.31:
resolution: {integrity: sha512-Xu+cUM8kEP0wGuAFS5UrvwlGrBmIbVfULuIZAYHv/rDEI2nWzDGPf3He2VSgdJfXji0xgTgg3y6tpMkQrfnf+g==}
dependencies:
'@design.estate/dees-domtools': 2.0.51
'@design.estate/dees-domtools': 2.0.55
'@push.rocks/isounique': 1.0.5
'@push.rocks/smartrx': 3.0.6
lit: 2.8.0
lit: 3.0.0
dev: false
/@design.estate/dees-wcctools@1.0.81:
resolution: {integrity: sha512-dHGs5UsDu9GGdoGsyPQ+yerljzuk2OIHykJECSj4E5uvCzJcvSXQ8cpM2KEtISc3EtYgc8j7j49A7cGKj4+DVg==}
dependencies:
'@design.estate/dees-domtools': 2.0.51
'@design.estate/dees-element': 2.0.29
'@design.estate/dees-domtools': 2.0.55
'@design.estate/dees-element': 2.0.31
'@push.rocks/smartdelay': 3.0.5
lit: 2.8.0
dev: false
@ -521,13 +527,13 @@ packages:
- supports-color
dev: true
/@gitzone/tsrun@1.2.44(@types/node@20.8.3):
/@gitzone/tsrun@1.2.44(@types/node@20.8.7):
resolution: {integrity: sha512-7AfL9u+TmD7gLiRaTCimhWm5rq9GGBQnOF4q1FnFh2CAb1FbK5fzUVbj6wo3zGS2H+MSm6dqFA6mvdBI1ox0mQ==}
hasBin: true
dependencies:
'@push.rocks/smartfile': 10.0.28
'@push.rocks/smartshell': 3.0.3
ts-node: 10.9.1(@types/node@20.8.3)(typescript@5.1.6)
ts-node: 10.9.1(@types/node@20.8.7)(typescript@5.1.6)
typescript: 5.1.6
transitivePeerDependencies:
- '@swc/core'
@ -535,13 +541,13 @@ packages:
- '@types/node'
dev: true
/@gitzone/tstest@1.0.77(@types/node@20.8.3)(sinon@16.1.0):
/@gitzone/tstest@1.0.77(@types/node@20.8.7)(sinon@17.0.0):
resolution: {integrity: sha512-YzBXnNqkYOiFf8xAA+m8owblrmAut8ukINghYy4DXoUR+5g1IKrpTjK4A8HzIsvVsQRyHPsQ2YFtsk+utqdivQ==}
hasBin: true
dependencies:
'@apiglobal/typedserver': 2.0.65
'@gitzone/tsbundle': 2.0.8
'@gitzone/tsrun': 1.2.44(@types/node@20.8.3)
'@gitzone/tsrun': 1.2.44(@types/node@20.8.7)
'@push.rocks/consolecolor': 2.0.1
'@push.rocks/smartbrowser': 2.0.5
'@push.rocks/smartdelay': 3.0.5
@ -549,7 +555,7 @@ packages:
'@push.rocks/smartlog': 3.0.3
'@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartshell': 3.0.3
'@push.rocks/tapbundle': 5.0.15(sinon@16.1.0)
'@push.rocks/tapbundle': 5.0.15(sinon@17.0.0)
figures: 5.0.0
transitivePeerDependencies:
- '@swc/core'
@ -562,13 +568,13 @@ packages:
- utf-8-validate
dev: true
/@gitzone/tswatch@2.0.7(@types/node@20.8.3):
/@gitzone/tswatch@2.0.7(@types/node@20.8.7):
resolution: {integrity: sha512-rKvyYXsILinp/3OzGkM4KLDPJhleSlF+KFzl90vHh1DuLzJCELWxgl/BSqrBe/UUd5Qyakyf8ZCojUSYUqU5tw==}
hasBin: true
dependencies:
'@apiglobal/typedserver': 2.0.65
'@gitzone/tsbundle': 2.0.8
'@gitzone/tsrun': 1.2.44(@types/node@20.8.3)
'@gitzone/tsrun': 1.2.44(@types/node@20.8.7)
'@pushrocks/early': 4.0.3
'@pushrocks/lik': 6.0.2
'@pushrocks/smartchok': 1.0.23
@ -622,11 +628,21 @@ packages:
/@lit-labs/ssr-dom-shim@1.1.1:
resolution: {integrity: sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ==}
/@lit-labs/ssr-dom-shim@1.1.2:
resolution: {integrity: sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==}
dev: false
/@lit/reactive-element@1.6.3:
resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==}
dependencies:
'@lit-labs/ssr-dom-shim': 1.1.1
/@lit/reactive-element@2.0.0:
resolution: {integrity: sha512-wn+2+uDcs62ROBmVAwssO4x5xue/uKD3MGGZOXL2sMxReTRIT0JXKyMXeu7gh0aJ4IJNEIG/3aOnUaQvM7BMzQ==}
dependencies:
'@lit-labs/ssr-dom-shim': 1.1.2
dev: false
/@mapbox/node-pre-gyp@1.0.11:
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
hasBin: true
@ -709,7 +725,7 @@ packages:
lit-html: 1.4.1
dev: true
/@open-wc/testing@2.5.33(sinon@16.1.0):
/@open-wc/testing@2.5.33(sinon@17.0.0):
resolution: {integrity: sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==}
dependencies:
'@open-wc/chai-dom-equals': 0.12.36
@ -723,7 +739,7 @@ packages:
chai-a11y-axe: 1.5.0
chai-dom: 1.11.0(chai@4.3.7)(mocha@6.2.3)
mocha: 6.2.3
sinon-chai: 3.7.0(chai@4.3.7)(sinon@16.1.0)
sinon-chai: 3.7.0(chai@4.3.7)(sinon@17.0.0)
transitivePeerDependencies:
- bufferutil
- sinon
@ -847,11 +863,15 @@ packages:
through2: 4.0.2
dev: true
/@push.rocks/smarti18n@1.0.4:
resolution: {integrity: sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==}
dev: false
/@push.rocks/smartjson@5.0.10:
resolution: {integrity: sha512-yuntSMGZ+XNHMrbS9RxotaD+eOgoNTcuDoWsttis+N3Mkc9DIam0pt/ER4NU8TgfMmhT/hKwQH+3DJceDzntoA==}
dependencies:
'@push.rocks/smartstring': 4.0.9
'@types/buffer-json': 2.0.1
'@types/buffer-json': 2.0.2
buffer-json: 2.0.0
fast-json-stable-stringify: 2.1.0
lodash.clonedeep: 4.5.0
@ -981,10 +1001,10 @@ packages:
/@push.rocks/smarturl@3.0.7:
resolution: {integrity: sha512-nx4EWjQD9JeO7QVbOsxd1PFeDQYoSQOOOYCZ+r7QWXHLJG52iYzgvJDCQyX6p705HDkYMJWozW2ZzhR22qLKbw==}
/@push.rocks/tapbundle@5.0.15(sinon@16.1.0):
/@push.rocks/tapbundle@5.0.15(sinon@17.0.0):
resolution: {integrity: sha512-vVTVmQCovYq9xhif96z7wN8pFiB3UB9MZSkqMDgfNTWhlU19ZZR1azCZn+zXsYxgJmD8wKNYhvZYgdRz73KbBg==}
dependencies:
'@open-wc/testing': 2.5.33(sinon@16.1.0)
'@open-wc/testing': 2.5.33(sinon@17.0.0)
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartenv': 5.0.5
'@push.rocks/smartexpect': 1.0.21
@ -997,8 +1017,8 @@ packages:
- utf-8-validate
dev: true
/@push.rocks/webrequest@3.0.33:
resolution: {integrity: sha512-wO2ibVdTMIE4hwsK9pZSNMl1OcFNbn0/ZUjZS18wzHKR4WMMaVUPmI4eHUzc7fWR6PWvkseNGn3JFxA9YK4p1Q==}
/@push.rocks/webrequest@3.0.34:
resolution: {integrity: sha512-3gqJb58ZukPsOcS26ya2M/nAEOP7lMYyc2Syh45ljgwdM3X8PwHquk5pdc1MMdDWAo1aiYrxReEw6BgMCJUlNQ==}
dependencies:
'@push.rocks/smartdelay': 3.0.5
'@push.rocks/smartenv': 5.0.10
@ -1012,7 +1032,7 @@ packages:
dependencies:
'@pushrocks/smartdelay': 3.0.1
'@pushrocks/smartpromise': 4.0.2
'@tsclass/tsclass': 4.0.43
'@tsclass/tsclass': 4.0.46
dev: false
/@push.rocks/webstore@2.0.13:
@ -1196,7 +1216,7 @@ packages:
'@pushrocks/smartrequest': 2.0.15
'@pushrocks/smartsitemap': 2.0.1
'@pushrocks/smarttime': 4.0.1
'@tsclass/tsclass': 4.0.43
'@tsclass/tsclass': 4.0.46
'@types/compression': 1.7.2
'@types/cors': 2.8.13
'@types/express': 4.17.17
@ -1379,7 +1399,7 @@ packages:
'@pushrocks/smartpromise': 3.1.10
'@pushrocks/smartpuppeteer': 2.0.2
'@pushrocks/smartunique': 3.0.3
'@tsclass/tsclass': 4.0.43
'@tsclass/tsclass': 4.0.46
'@types/express': 4.17.17
express: 4.18.2
pdf-merger-js: 3.4.0
@ -1678,6 +1698,12 @@ packages:
'@sinonjs/commons': 3.0.0
dev: true
/@sinonjs/fake-timers@11.2.2:
resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==}
dependencies:
'@sinonjs/commons': 3.0.0
dev: true
/@sinonjs/samsam@8.0.0:
resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==}
dependencies:
@ -1707,10 +1733,10 @@ packages:
type-fest: 2.19.0
dev: true
/@tsclass/tsclass@4.0.43:
resolution: {integrity: sha512-BGihF65KjD/pqQIrTUemff7OMvQi22FBZCti+7NHWIb7ZxtFrJsciEyAFQrx0de5GQWOFTwQx6HNKqwgkP2Mhg==}
/@tsclass/tsclass@4.0.46:
resolution: {integrity: sha512-UovPUvlozv1ftJp4KW5tt4MP/LQCNP3lSCinjyIrLkopOymczyzONUGvSAAwOBf1XBE9bO0tI4KtRuXWN9XBXQ==}
dependencies:
type-fest: 4.3.1
type-fest: 4.5.0
/@tsconfig/node10@1.0.9:
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
@ -1731,7 +1757,7 @@ packages:
/@types/accepts@1.3.5:
resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/babel__code-frame@7.0.3:
@ -1742,12 +1768,16 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/buffer-json@2.0.1:
resolution: {integrity: sha512-y2q2QGDqpS8NBtgKg8si+vKfanyd8smKzTglDCm7dXrco1VclSR8G1/uezK+sWbEUxsVPTomv5RxsTl3JAzxLA==}
/@types/buffer-json@2.0.2:
resolution: {integrity: sha512-ypA1MmZb3NBma+R0qOnXryMU8tIQf27+TQ6PLgXaGQy0G0C1WkjmIjzPbKS84RoZJXOz88AV9AQnSEwhY/4PwA==}
dev: false
/@types/chai-dom@0.0.9:
resolution: {integrity: sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==}
dependencies:
@ -1768,14 +1798,14 @@ packages:
/@types/clean-css@4.2.6:
resolution: {integrity: sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
source-map: 0.6.1
dev: true
/@types/co-body@6.1.0:
resolution: {integrity: sha512-3e0q2jyDAnx/DSZi0z2H0yoZ2wt5yRDZ+P7ymcMObvq0ufWRT4tsajyO+Q1VwVWiv9PRR4W3YEjEzBjeZlhF+w==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
'@types/qs': 6.9.7
dev: true
@ -1788,7 +1818,7 @@ packages:
/@types/connect@3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/content-disposition@0.5.5:
@ -1809,13 +1839,13 @@ packages:
'@types/connect': 3.4.35
'@types/express': 4.17.17
'@types/keygrip': 1.0.2
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/cors@2.8.13:
resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/debounce@1.2.1:
@ -1829,7 +1859,7 @@ packages:
/@types/express-serve-static-core@4.17.35:
resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
'@types/send': 0.17.1
@ -1847,27 +1877,27 @@ packages:
/@types/finalhandler@1.2.0:
resolution: {integrity: sha512-NgEZKOhxUSXkwNnWNaMXZaopQ5aFGPAYiEpEWIkQ6Dzc4iS0M1oQsvWne2t+ex9QZUAdTz/ZT4tOXJhWtP6mCw==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/from2@2.3.2:
resolution: {integrity: sha512-s1pdctxW2+CA4FOxxTBRxC3RKQL9Br1a2s2LngP4jh1BI84JBL3mDXj87EwcckN9z/IXp8o3ySmvZveGEAAwqw==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/fs-extra@11.0.1:
resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==}
dependencies:
'@types/jsonfile': 6.1.1
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/glob@8.1.0:
resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==}
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/html-minifier@4.0.2:
@ -1917,7 +1947,7 @@ packages:
/@types/jsonfile@6.1.1:
resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/keygrip@1.0.2:
@ -1940,7 +1970,7 @@ packages:
'@types/http-errors': 2.0.1
'@types/keygrip': 1.0.2
'@types/koa-compose': 3.2.5
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/mime-types@2.1.1:
@ -1966,8 +1996,10 @@ packages:
resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==}
dev: true
/@types/node@20.8.3:
resolution: {integrity: sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==}
/@types/node@20.8.7:
resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==}
dependencies:
undici-types: 5.25.3
/@types/parse5@6.0.3:
resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
@ -1996,7 +2028,7 @@ packages:
resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==}
dependencies:
'@types/mime': 1.3.2
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/serve-static@1.15.2:
@ -2004,7 +2036,7 @@ packages:
dependencies:
'@types/http-errors': 2.0.1
'@types/mime': 3.0.1
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/shortid@0.0.29:
@ -2034,11 +2066,15 @@ packages:
/@types/through2@2.0.38:
resolution: {integrity: sha512-YFu+nHmjxMurkH1BSzA0Z1WrKDAY8jUKPZctNQn7mc+/KKtp2XxnclHFXxdB1m7Iqnzb5aywgP8TMK283LezGQ==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
/@types/trusted-types@2.0.3:
resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==}
/@types/trusted-types@2.0.5:
resolution: {integrity: sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==}
dev: false
/@types/uglify-js@3.17.1:
resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==}
dependencies:
@ -2060,14 +2096,14 @@ packages:
/@types/ws@7.4.7:
resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
/@types/yauzl@2.10.1:
resolution: {integrity: sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==}
/@types/yauzl@2.10.2:
resolution: {integrity: sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==}
requiresBuild: true
dependencies:
'@types/node': 20.8.3
'@types/node': 20.8.7
dev: true
optional: true
@ -2466,7 +2502,7 @@ packages:
/broadcast-channel@3.7.0:
resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==}
dependencies:
'@babel/runtime': 7.23.1
'@babel/runtime': 7.23.2
detect-node: 2.1.0
js-sha3: 0.8.0
microseconds: 0.2.0
@ -3064,7 +3100,7 @@ packages:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.13
'@types/node': 20.8.3
'@types/node': 20.8.7
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.4.2
@ -3084,7 +3120,7 @@ packages:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.13
'@types/node': 20.8.3
'@types/node': 20.8.7
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.4.2
@ -3296,7 +3332,7 @@ packages:
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
'@types/yauzl': 2.10.1
'@types/yauzl': 2.10.2
transitivePeerDependencies:
- supports-color
dev: true
@ -3701,8 +3737,8 @@ packages:
hasBin: true
dev: true
/highlight.js@11.8.0:
resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==}
/highlight.js@11.9.0:
resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==}
engines: {node: '>=12.0.0'}
dev: false
@ -3791,6 +3827,10 @@ packages:
ms: 2.1.3
dev: true
/ibantools@4.3.5:
resolution: {integrity: sha512-RIEM1nv01QfsazrvA7f9QswQaXPa+K70aNngGPm7ayoPiK8IDXJYZXC54+qsYOfSF4FqYEyu1o3p0ZLstyJWHg==}
dev: false
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@ -4248,6 +4288,14 @@ packages:
'@lit/reactive-element': 1.6.3
lit-html: 2.8.0
/lit-element@4.0.0:
resolution: {integrity: sha512-N6+f7XgusURHl69DUZU6sTBGlIN+9Ixfs3ykkNDfgfTkDYGGOWwHAYBhDqVswnFGyWgQYR2KiSpu4J76Kccs/A==}
dependencies:
'@lit-labs/ssr-dom-shim': 1.1.2
'@lit/reactive-element': 2.0.0
lit-html: 3.0.0
dev: false
/lit-html@1.4.1:
resolution: {integrity: sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==}
dev: true
@ -4257,6 +4305,12 @@ packages:
dependencies:
'@types/trusted-types': 2.0.3
/lit-html@3.0.0:
resolution: {integrity: sha512-DNJIE8dNY0dQF2Gs0sdMNUppMQT2/CvV4OVnSdg7BXAsGqkVwsE5bqQ04POfkYH5dBIuGnJYdFz5fYYyNnOxiA==}
dependencies:
'@types/trusted-types': 2.0.5
dev: false
/lit@2.8.0:
resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==}
dependencies:
@ -4264,6 +4318,14 @@ packages:
lit-element: 3.3.3
lit-html: 2.8.0
/lit@3.0.0:
resolution: {integrity: sha512-nQ0teRzU1Kdj++VdmttS2WvIen8M79wChJ6guRKIIym2M3Ansg3Adj9O6yuQh2IpjxiUXlNuS81WKlQ4iL3BmA==}
dependencies:
'@lit/reactive-element': 2.0.0
lit-element: 4.0.0
lit-html: 3.0.0
dev: false
/locate-path@3.0.0:
resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
engines: {node: '>=6'}
@ -4656,8 +4718,8 @@ packages:
engines: {node: '>= 0.6'}
dev: true
/nise@5.1.4:
resolution: {integrity: sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==}
/nise@5.1.5:
resolution: {integrity: sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==}
dependencies:
'@sinonjs/commons': 2.0.0
'@sinonjs/fake-timers': 10.3.0
@ -5413,24 +5475,24 @@ packages:
dev: false
optional: true
/sinon-chai@3.7.0(chai@4.3.7)(sinon@16.1.0):
/sinon-chai@3.7.0(chai@4.3.7)(sinon@17.0.0):
resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==}
peerDependencies:
chai: ^4.0.0
sinon: '>=4.0.0'
dependencies:
chai: 4.3.7
sinon: 16.1.0
sinon: 17.0.0
dev: true
/sinon@16.1.0:
resolution: {integrity: sha512-ZSgzF0vwmoa8pq0GEynqfdnpEDyP1PkYmEChnkjW0Vyh8IDlyFEJ+fkMhCP0il6d5cJjPl2PUsnUSAuP5sttOQ==}
/sinon@17.0.0:
resolution: {integrity: sha512-p4lJiYKBoOEVUxxVIC9H1MM2znG1/c8gud++I2BauJA5hsz7hHsst35eurNWXTusBsIq66FzOQbZ/uMdpvbPIQ==}
dependencies:
'@sinonjs/commons': 3.0.0
'@sinonjs/fake-timers': 10.3.0
'@sinonjs/fake-timers': 11.2.2
'@sinonjs/samsam': 8.0.0
diff: 5.1.0
nise: 5.1.4
nise: 5.1.5
supports-color: 7.2.0
dev: true
@ -5772,7 +5834,7 @@ packages:
hasBin: true
dev: true
/ts-node@10.9.1(@types/node@20.8.3)(typescript@5.1.6):
/ts-node@10.9.1(@types/node@20.8.7)(typescript@5.1.6):
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}
hasBin: true
peerDependencies:
@ -5791,7 +5853,7 @@ packages:
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.8.3
'@types/node': 20.8.7
acorn: 8.10.0
acorn-walk: 8.2.0
arg: 4.1.3
@ -5825,8 +5887,8 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
/type-fest@4.3.1:
resolution: {integrity: sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==}
/type-fest@4.5.0:
resolution: {integrity: sha512-diLQivFzddJl4ylL3jxSkEc39Tpw7o1QeEHIPxVwryDK2lpB7Nqhzhuo6v5/Ls08Z0yPSAhsyAWlv1/H0ciNmw==}
engines: {node: '>=16'}
/type-is@1.6.18:
@ -5915,6 +5977,9 @@ packages:
through: 2.3.8
dev: true
/undici-types@5.25.3:
resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==}
/unicode-trie@0.3.1:
resolution: {integrity: sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=}
dependencies:
@ -5930,7 +5995,7 @@ packages:
/unload@2.2.0:
resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==}
dependencies:
'@babel/runtime': 7.23.1
'@babel/runtime': 7.23.2
detect-node: 2.1.0
dev: false

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@design.estate/dees-catalog',
version: '1.0.221',
version: '1.0.230',
description: 'website for lossless.com'
}

View File

@ -0,0 +1,41 @@
import { html } from '@design.estate/dees-element';
export const demoFunc = () => html`
<style>
.demoContainer {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
background: #222;
}
</style>
<div class="demoContainer">
<dees-chips
selectionMode="none"
.selectableChips=${[
{ key: 'account1', value: 'Payment Account 1' },
{ key: 'account2', value: 'PaymentAccount2' },
{ key: 'account3', value: 'Payment Account 3' },
]}
></dees-chips>
<dees-chips
selectionMode="single"
chipsAreRemovable
.selectableChips=${[
{ key: 'account1', value: 'Payment Account 1' },
{ key: 'account2', value: 'PaymentAccount2' },
{ key: 'account3', value: 'Payment Account 3' },
]}
></dees-chips>
<dees-chips
selectionMode="multiple"
.selectableChips=${[
{ key: 'account1', value: 'Payment Account 1' },
{ key: 'account2', value: 'PaymentAccount2' },
{ key: 'account3', value: 'Payment Account 3' },
]}
></dees-chips>
</div>
`;

View File

@ -11,6 +11,7 @@ import {
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
import { demoFunc } from './dees-chips.demo.js';
declare global {
interface HTMLElementTagNameMap {
@ -18,30 +19,32 @@ declare global {
}
}
type Tag = { key: string; value: string };
@customElement('dees-chips')
export class DeesChips extends DeesElement {
public static demo = () => html`
<dees-chips .selectableChips=${['Payment Account 1', 'PaymentAccount2', 'Payment Account 3']}></dees-chips>
<dees-chips selectionMode="multiple" .selectableChips=${['Payment Account 1', 'PaymentAccount2', 'Payment Account 3']}></dees-chips>
`;
public static demo = demoFunc;
@property()
public selectionMode: 'single' | 'multiple' = 'single';
public selectionMode: 'none' | 'single' | 'multiple' = 'single';
@property({
type: Array
type: Boolean,
})
public selectableChips: string[] = [];
public chipsAreRemovable: boolean = false;
@property({
type: Array,
})
public selectableChips: Tag[] = [];
@property()
public selectedChip: string = null;
public selectedChip: Tag = null;
@property({
type: Array
type: Array,
})
public selectedChips: string[] = [];
public selectedChips: Tag[] = [];
constructor() {
super();
@ -50,47 +53,88 @@ export class DeesChips extends DeesElement {
public static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
box-sizing: border-box;
}
.mainbox {
user-select: none;
}
.chip {
background: #494949;
display: inline-block;
padding: 8px 12px;
font-size: 14px;
border-top: ${cssManager.bdTheme('1px solid #CCC', '1px solid #444')};
background: #333333;
display: inline-flex;
height: 20px;
line-height: 20px;
padding: 0px 8px;
font-size: 12px;
color: #fff;
border-radius: 40px;
margin-right: 4px;
margin-bottom: 8px;
margin-bottom: 4px;
position: relative;
overflow: hidden;
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);
}
.chip:hover {
background: #666666;
cursor: pointer;
cursor: pointer;
}
.chip.selected {
background: #00A3FF;
background: #00a3ff;
}
.chipKey {
background: rgba(0, 0, 0, 0.3);
height: 100%;
display: inline-block;
margin-left: -8px;
padding-left: 8px;
padding-right: 8px;
margin-right: 8px;
}
dees-icon {
padding: 0px 6px 0px 4px;
margin-left: 4px;
margin-right: -8px;
background: rgba(0, 0, 0, 0.3);
}
dees-icon:hover {
background: #e4002b;
}
`,
];
public render(): TemplateResult {
return html`
<div class="mainbox">
${this.selectableChips.map(chipArg => html`
<div @click=${() => this.selectChip(chipArg)} class="chip ${this.selectedChip === chipArg || this.selectedChips.includes(chipArg) ? 'selected' : ''}">
${chipArg}
</div>
`)}
${this.selectableChips.map(
(chip) => html`
<div
@click=${() => this.selectChip(chip)}
class="chip ${this.isSelected(chip) ? 'selected' : ''}"
>
${chip.key ? html`<div class="chipKey">${chip.key}</div>` : html``} ${chip.value}
${this.chipsAreRemovable
? html`
<dees-icon
@click=${(event: Event) => {
event.stopPropagation(); // prevent the selectChip event from being triggered
this.removeChip(chip);
}}
.iconFA=${'xmark'}
></dees-icon>
`
: html``}
</div>
`
)}
</div>
`;
}
@ -102,23 +146,51 @@ export class DeesChips extends DeesElement {
}
}
public async selectChip(chipArg: string) {
private isSelected(chip: Tag): boolean {
if (this.selectionMode === 'single') {
if (this.selectedChip === chipArg) {
return this.selectedChip?.key === chip.key;
} else {
return this.selectedChips.some((selected) => selected.key === chip.key);
}
}
public async selectChip(chip: Tag) {
if (this.selectionMode === 'none') {
return;
}
if (this.selectionMode === 'single') {
if (this.isSelected(chip)) {
this.selectedChip = null;
this.selectedChips = [];
} else {
this.selectedChip = chipArg;
this.selectedChips = [chipArg];
this.selectedChip = chip;
this.selectedChips = [chip];
}
} else if(this.selectionMode === 'multiple') {
if (this.selectedChips.includes(chipArg)) {
this.selectedChips = this.selectedChips.filter(chipArg2 => chipArg !== chipArg2)
} else if (this.selectionMode === 'multiple') {
if (this.isSelected(chip)) {
this.selectedChips = this.selectedChips.filter((selected) => selected.key !== chip.key);
} else {
this.selectedChips.push(chipArg);
this.selectedChips = [...this.selectedChips, chip];
}
this.requestUpdate();
}
console.log(this.selectedChips);
}
public removeChip(chipToRemove: Tag): void {
// Remove the chip from selectableChips
this.selectableChips = this.selectableChips.filter((chip) => chip.key !== chipToRemove.key);
// Remove the chip from selectedChips if present
this.selectedChips = this.selectedChips.filter((chip) => chip.key !== chipToRemove.key);
// If the removed chip was the selectedChip, set selectedChip to null
if (this.selectedChip && this.selectedChip.key === chipToRemove.key) {
this.selectedChip = null;
}
// Trigger an update to re-render the component
this.requestUpdate();
}
}

View File

@ -27,7 +27,42 @@ export class DeesContextmenu extends DeesElement {
public static demo = demoFunc
// STATIC
// This will store all the accumulated menu items
public static contextMenuDeactivated = false;
public static accumulatedMenuItems: plugins.tsclass.website.IMenuItem[] = [];
// Add a global event listener for the right-click context menu
public static initializeGlobalListener() {
document.addEventListener('contextmenu', (event: MouseEvent) => {
if (this.contextMenuDeactivated) {
return;
}
event.preventDefault();
// Get the target element of the right-click
let target: EventTarget | null = event.target;
// Clear previously accumulated items
DeesContextmenu.accumulatedMenuItems = [];
// Traverse up the DOM tree to accumulate menu items
while (target) {
if ((target as any).getContextMenuItems) {
DeesContextmenu.accumulatedMenuItems.push(...(target as any).getContextMenuItems());
}
target = (target as Node).parentNode;
}
// Open the context menu with the accumulated items
DeesContextmenu.openContextMenuWithOptions(event, DeesContextmenu.accumulatedMenuItems);
});
}
// allows opening of a contextmenu with options
public static async openContextMenuWithOptions(eventArg: MouseEvent, menuItemsArg: plugins.tsclass.website.IMenuItem[]) {
if (this.contextMenuDeactivated) {
return;
}
eventArg.preventDefault();
eventArg.stopPropagation();
const contextMenu = new DeesContextmenu();
@ -49,6 +84,7 @@ export class DeesContextmenu extends DeesElement {
contextMenu.style.transform = 'scale(1,1)';
}
// INSTANCE
@property({
type: Array,
})
@ -59,6 +95,9 @@ export class DeesContextmenu extends DeesElement {
super();
}
/**
* STATIC STYLES
*/
public static styles = [
cssManager.defaultStyles,
css`
@ -115,10 +154,11 @@ export class DeesContextmenu extends DeesElement {
})}
${this.menuItems.length === 0 ? html`
<div class="menuitem" @click=${() => {
alert('No menu items...')
DeesContextmenu.contextMenuDeactivated = true;
this.destroy();
}}>
<dees-icon .iconFA=${'xmark'}></dees-icon
>No menu item present...
>Deactivate Contextmenu globally.
</div>
` : html``}
</div>
@ -144,3 +184,5 @@ export class DeesContextmenu extends DeesElement {
this.parentElement.removeChild(this);
}
}
DeesContextmenu.initializeGlobalListener();

View File

@ -0,0 +1,35 @@
import { html, domtools } from '@design.estate/dees-element';
import type { DeesForm } from './dees-form.js';
export const demoFunc = () => html`
<style>
.demoContainer {
max-width: 400px;
margin: auto;
padding: 16px;
background: #111;
}
</style>
<div class="demoContainer">
<dees-form
style="display: block; margin:auto; max-width: 500px; padding: 20px"
@formData=${async (eventArg) => {
const form: DeesForm = eventArg.currentTarget;
form.setStatus('pending', 'authenticating...');
await domtools.plugins.smartdelay.delayFor(1000);
form.setStatus('success', 'authenticated!');
}}
>
<dees-input-text .required="${true}" key="hello1" label="a text"></dees-input-text>
<dees-input-text .required="${true}" key="hello2" label="also a text"></dees-input-text>
<dees-input-text .required="${true}" key="hello3" label="a password" isPasswordBool></dees-input-text>
<dees-input-checkbox
.required="${true}"
key="hello3"
label="another text"
></dees-input-checkbox>
<dees-input-iban></dees-input-iban>
<dees-form-submit>Submit</dees-form-submit>
</dees-form>
</div>
`;

View File

@ -1,4 +1,10 @@
import { customElement, html, type TemplateResult, DeesElement, type CSSResult, } from '@design.estate/dees-element';
import {
customElement,
html,
type TemplateResult,
DeesElement,
type CSSResult,
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
import { DeesInputCheckbox } from './dees-input-checkbox.js';
@ -6,16 +12,27 @@ import { DeesInputText } from './dees-input-text.js';
import { DeesInputQuantitySelector } from './dees-input-quantityselector.js';
import { DeesInputRadio } from './dees-input-radio.js';
import { DeesFormSubmit } from './dees-form-submit.js';
import { DeesTable } from './dees-table.js';
import { demoFunc } from './dees-form.demo.js';
import { DeesInputIban } from './dees-input-iban.js';
// Unified set for form input types
const FORM_INPUT_TYPES = [
DeesInputCheckbox,
DeesInputIban,
DeesInputText,
DeesInputQuantitySelector,
DeesInputRadio
DeesInputRadio,
DeesTable,
];
export type TFormInputElement = DeesInputCheckbox | DeesInputText | DeesInputQuantitySelector | DeesInputRadio;
export type TFormInputElement =
| DeesInputCheckbox
| DeesInputIban
| DeesInputText
| DeesInputQuantitySelector
| DeesInputRadio
| DeesTable<any>;
declare global {
interface HTMLElementTagNameMap {
@ -25,26 +42,10 @@ declare global {
@customElement('dees-form')
export class DeesForm extends DeesElement {
public static demo = () => html`
<dees-form
style="display: block; margin:auto; max-width: 500px; padding: 20px"
@formData=${async (eventArg) => {
const form: DeesForm = eventArg.currentTarget;
form.setStatus('pending', 'authenticating...');
await domtools.plugins.smartdelay.delayFor(1000);
form.setStatus('success', 'authenticated!');
}}
>
<dees-input-text .required="${true}" key="hello1" label="a text"></dees-input-text>
<dees-input-text .required="${true}" key="hello2" label="also a text"></dees-input-text>
<dees-input-checkbox .required="${true}" key="hello3" label="another text"></dees-input-checkbox>
<dees-form-submit>Submit</dees-form-submit>
</dees-form>
`;
public static demo = demoFunc;
public name: string = 'myform';
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
public readyDeferred = domtools.plugins.smartpromise.defer();
public render(): TemplateResult {
@ -75,14 +76,14 @@ export class DeesForm extends DeesElement {
}
public getFormElements(): Array<TFormInputElement> {
return (Array.from(this.children)).filter(child =>
return Array.from(this.children).filter((child) =>
FORM_INPUT_TYPES.includes(child.constructor as any)
) as unknown as TFormInputElement[];
}
public getSubmitButton(): DeesFormSubmit | undefined {
return Array.from(this.children).find(child =>
child instanceof DeesFormSubmit
return Array.from(this.children).find(
(child) => child instanceof DeesFormSubmit
) as DeesFormSubmit;
}
@ -102,7 +103,7 @@ export class DeesForm extends DeesElement {
public async collectFormData() {
const children = this.getFormElements();
const valueObject: { [key: string]: string | number | boolean } = {};
const valueObject: { [key: string]: string | number | boolean | any[] } = {};
for (const child of children) {
if (!child.key) {
console.log(`form element with label "${child.label}" has no key. skipping.`);

View File

@ -22,7 +22,7 @@ export class DeesInputCheckbox extends DeesElement {
public static demo = () => html`<dees-input-checkbox></dees-input-checkbox>`;
// INSTANCE
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
@property({
type: String,

View File

@ -20,7 +20,7 @@ export class DeesInputDropdown extends DeesElement {
`
// INSTANCE
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
@property({
type: String,

View File

@ -8,10 +8,9 @@ import {
unsafeCSS,
cssManager,
type CSSResult,
domtools,
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
declare global {
interface HTMLElementTagNameMap {
'dees-input-fileupload': DeesInputFileupload;
@ -23,7 +22,7 @@ export class DeesInputFileupload extends DeesElement {
public static demo = () => html`<dees-input-fileupload .label=${'Attachments'}></dees-input-fileupload>`;
// INSTANCE
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
@property({
type: String,

View File

@ -0,0 +1,3 @@
import { html } from '@design.estate/dees-element';
export const demoFunc = () => html`<dees-input-iban .label=${'IBAN'}></dees-input-iban>`;

View File

@ -0,0 +1,98 @@
import {
customElement,
DeesElement,
type TemplateResult,
state,
html,
domtools,
property,
} from '@design.estate/dees-element';
import * as ibantools from 'ibantools';
import { demoFunc } from './dees-input-iban.demo.js';
@customElement('dees-input-iban')
export class DeesInputIban extends DeesElement {
// STATIC
public static demo = demoFunc;
// INSTANCE
@state()
enteredString: string = '';
@state()
enteredIbanIsValid: boolean = false;
@property({
type: Boolean,
})
public disabled = false;
@property({
type: Boolean,
})
public required = false;
@property({
type: String,
})
public label = '';
@property({
type: String,
})
public key = '';
@property({
type: String,
})
public value = '';
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject<DeesInputIban>();
public render(): TemplateResult {
return html`
<style>
input[type='text'] {
line-height: 20px;
padding: 5px;
width: 250px;
}
</style>
<dees-input-text
.label=${'IBAN'}
.value=${this.value}
@input=${(eventArg: InputEvent) => {
this.validateIban(eventArg);
}}
></dees-input-text>
`;
}
public async firstUpdated() {
const deesInputText = this.shadowRoot.querySelector('dees-input-text');
deesInputText.disabled = this.disabled;
deesInputText.required = this.required;
deesInputText.changeSubject.subscribe(valueArg => {
this.value = valueArg.value;
this.changeSubject.next(this);
})
}
public async validateIban(eventArg: InputEvent): Promise<void> {
const inputElement: HTMLInputElement = eventArg.target as HTMLInputElement;
let enteredString = inputElement?.value;
enteredString = enteredString || '';
if (this.enteredString !== enteredString) {
this.enteredString = ibantools.friendlyFormatIBAN(enteredString) || '';
if (inputElement) {
inputElement.value = this.enteredString;
this.value = this.enteredString;
this.changeSubject.next(this);
}
}
this.enteredIbanIsValid = ibantools.isValidIBAN(this.enteredString.replace(/ /g, ''));
const deesInputText = this.shadowRoot.querySelector('dees-input-text');
deesInputText.validationText = `IBAN is valid: ${this.enteredIbanIsValid}`;
}
}

View File

@ -0,0 +1,3 @@
import { html } from '@design.estate/dees-element';
export const demoFunc = () => html`<dees-input-phone .label=${'Phone Number'}></dees-input-phone>`;

View File

@ -0,0 +1,29 @@
import {
customElement,
DeesElement,
type TemplateResult,
property,
html,
css,
unsafeCSS,
cssManager,
type CSSResult,
} from '@design.estate/dees-element';
import { demoFunc } from './dees-input-phone.demo.js';
declare global {
interface HTMLElementTagNameMap {
'dees-input-phone': DeesInputPhone;
}
}
@customElement('dees-input-phone')
export class DeesInputPhone extends DeesElement {
// STATIC
public static demo = demoFunc;
// INSTANCE
public render() {
return html`<div>Phone Input</div>`;
}
}

View File

@ -12,7 +12,7 @@ export class DeesInputQuantitySelector extends DeesElement {
public static demo = () => html`<dees-input-quantityselector></dees-input-quantityselector>`;
// INSTANCE
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
@property()
public label: string = 'Label';

View File

@ -12,7 +12,7 @@ export class DeesInputRadio extends DeesElement {
public static demo = () => html`<dees-input-radio></dees-input-radio>`;
// INSTANCE
public changeSubject = new domtools.rxjs.Subject();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject();
@property({
type: String,

View File

View File

@ -1,4 +1,13 @@
import {customElement, DeesElement, type TemplateResult, property, html, cssManager, type CSSResult,} from '@design.estate/dees-element';
import {
customElement,
DeesElement,
type TemplateResult,
property,
html,
cssManager,
css,
type CSSResult,
} from '@design.estate/dees-element';
import * as domtools from '@design.estate/dees-domtools';
declare global {
@ -15,11 +24,10 @@ export class DeesInputText extends DeesElement {
`;
// INSTANCE
public changeSubject = new domtools.rxjs.Subject<DeesInputText>();
public valueChangeSubject = new domtools.rxjs.Subject<string>();
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject<DeesInputText>();
@property({
type: String
type: String,
})
public label: string;
@ -36,12 +44,12 @@ export class DeesInputText extends DeesElement {
public value: string = '';
@property({
type: Boolean
type: Boolean,
})
public required: boolean = false;
@property({
type: Boolean
type: Boolean,
})
public disabled: boolean = false;
@ -57,93 +65,160 @@ export class DeesInputText extends DeesElement {
})
public showPasswordBool = false;
@property({
type: Boolean,
reflect: true,
})
public validationState: 'valid' | 'warn' | 'invalid';
@property({
reflect: true,
})
public validationText: string = '';
@property({})
validationFunction: (value: string) => boolean;
public static styles = [
cssManager.defaultStyles,
css`
* {
box-sizing: border-box;
}
:host {
position: relative;
display: grid;
margin: 8px 0px;
margin-bottom: 24px;
z-index: auto;
}
.maincontainer {
color: ${cssManager.bdTheme('#333', '#ccc')};
}
.label {
font-size: 14px;
margin-bottom: 4px;
}
input {
margin-top: 5px;
background: ${cssManager.bdTheme('#fafafa', '#222')};
border-top: ${cssManager.bdTheme('1px solid #CCC', '1px solid #444')};
border-bottom: ${cssManager.bdTheme('1px solid #CCC', '1px solid #333')};
border-right: ${cssManager.bdTheme('1px solid #CCC', 'none')};
border-left: ${cssManager.bdTheme('1px solid #CCC', 'none')};
padding-left: 10px;
padding-right: 10px;
border-radius: 2px;
width: 100%;
line-height: 36px;
transition: all 0.2s;
outline: none;
font-size: 16px;
position: relative;
z-index: 2;
// see template for more
}
input:disabled {
background: ${cssManager.bdTheme('#ffffff00', '#11111100')};
border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')};
color: #9b9b9e;
cursor: default;
}
input:focus {
outline: none;
border-bottom: 1px solid #e4002b;
}
.showPassword {
position: absolute;
bottom: 7px;
right: 10px;
border: 1px dashed #444;
border-radius: 7px;
padding: 4px 0px;
width: 40px;
}
.showPassword:hover {
cursor: pointer;
background: ${cssManager.bdTheme('#00000010', '#ffffff10')};
}
.validationContainer {
text-align: center;
padding: 6px 2px 2px 2px;
margin-top: -4px;
font-size: 12px;
color: #fff;
background: #e4002b;
position: relative;
z-index: 1;
border-radius: 3px;
transition: all 0.2s;
}
`,
];
public render(): TemplateResult {
return html `
return html`
<style>
* {
box-sizing: border-box;
}
:host {
position: relative;
display: grid;
margin: 10px 0px;
margin-bottom: 24px;
}
.maincontainer {
color: ${this.goBright ? '#333' : '#ccc'};
}
.label {
font-size: 14px;
margin-bottom: 5px;
}
input {
margin-top: 5px;
background: ${this.goBright ? '#fafafa' : '#222'};
border-top: ${this.goBright ? '1px solid #CCC' : '1px solid #444'};
border-bottom: ${this.goBright ? '1px solid #CCC' : '1px solid #333'};
border-right: ${this.goBright ? '1px solid #CCC' : 'none'};
border-left: ${this.goBright ? '1px solid #CCC' : 'none'};
padding-left:10px;
padding-right: 10px;
border-radius: 2px;
width: 100%;
line-height: 48px;
transition: all 0.2s;
outline: none;
font-size: 16px;
font-family: ${this.isPasswordBool ? 'monospace': 'Inter'};
letter-spacing: ${this.isPasswordBool ? '1px': 'normal'};
font-family: ${this.isPasswordBool ? 'monospace' : 'Inter'};
letter-spacing: ${this.isPasswordBool ? '1px' : 'normal'};
color: ${this.goBright ? '#333' : '#ccc'};
}
input:disabled {
background: ${cssManager.bdTheme('#ffffff00', '#11111100')};
border: 1px dashed ${cssManager.bdTheme('#666666', '#666666')};
color: #9b9b9e;
cursor: default;
}
input:focus {
outline: none;
border-bottom: 1px solid #e4002b;
}
.showPassword {
position: absolute;
bottom: 8px;
right: 10px;
border: 1px dashed #444;
border-radius: 7px;
padding: 8px 0px;
width: 40px;
}
.showPassword:hover {
cursor: pointer;
background: ${cssManager.bdTheme('#00000010', '#ffffff10')};
}
${this.validationText ? css`
.validationContainer {
height: 22px;
opacity: 1;
}
` : css`
.validationContainer {
height: 4px;
padding: 2px !important;
opacity: 0;
}
`}
</style>
<div class="maincontainer">
${this.label ? html`<div class="label">${this.label}</div>` : html``}
<input type="${this.isPasswordBool && !this.showPasswordBool ? 'password' : 'text'}" .value=${this.value} @input="${this.updateValue}" .disabled=${this.disabled} />
${this.isPasswordBool ? html`
<div class="showPassword" @click=${this.togglePasswordView}>
<dees-icon .iconFA=${this.showPasswordBool ? 'eye' : 'eyeSlash'}></dees-icon>
</div>
` : html``}
<input
type="${this.isPasswordBool && !this.showPasswordBool ? 'password' : 'text'}"
.value=${this.value}
@input="${this.updateValue}"
.disabled=${this.disabled}
/>
<div class="validationContainer">
${this.validationText}
</div>
${this.isPasswordBool
? html`
<div class="showPassword" @click=${this.togglePasswordView}>
<dees-icon .iconFA=${this.showPasswordBool ? 'eye' : 'eyeSlash'}></dees-icon>
</div>
`
: html``}
</div>
`;
}
firstUpdated() {
const input = this.shadowRoot.querySelector('input');
input.addEventListener('input', (eventArg: InputEvent) => {
});
}
public async updateValue(eventArg: Event) {
const target: any = eventArg.target;
this.value = target.value;
this.changeSubject.next(this);
this.valueChangeSubject.next(this.value);
}
public async freeze() {
@ -154,10 +229,10 @@ export class DeesInputText extends DeesElement {
this.disabled = false;
}
public async togglePasswordView () {
public async togglePasswordView() {
const domtools = await this.domtoolsPromise;
this.showPasswordBool = !this.showPasswordBool;
console.log(`this.showPasswordBool is: ${this.showPasswordBool}`)
console.log(`this.showPasswordBool is: ${this.showPasswordBool}`);
}
public async focus() {

View File

@ -61,8 +61,8 @@ export interface ITableAction<T = any> {
}
export interface ITableActionDataArg<T> {
item: T,
table: DeesTable<T>,
item: T;
table: DeesTable<T>;
}
export type TDisplayFunction<T = any> = (itemArg: T) => object;
@ -88,6 +88,34 @@ export class DeesTable<T> extends DeesElement {
})
public data: T[] = [];
// dees-form compatibility -----------------------------------------
@property({
type: String,
})
public key: string;
@property({
type: String,
})
public label: string;
@property({
type: Boolean,
})
public disabled: boolean = false;
@property({
type: Boolean,
})
public required: boolean = false;
get value() {
return this.data;
}
set value(valueArg) {}
public changeSubject = new domtools.plugins.smartrx.rxjs.Subject<DeesTable<T>>();
// end dees-form compatibility -----------------------------------------
@property({
type: String,
reflect: true,
@ -235,6 +263,8 @@ export class DeesTable<T> extends DeesElement {
th,
td {
position: relative;
vertical-align: top;
padding: 0px;
border-right: 1px dashed ${cssManager.bdTheme('#999', '#808080')};
}
@ -335,7 +365,7 @@ export class DeesTable<T> extends DeesElement {
<!-- the heading part -->
<div class="header">
<div class="headingContainer">
<div class="heading heading1">${this.heading1}</div>
<div class="heading heading1">${this.label || this.heading1}</div>
<div class="heading heading2">${this.heading2}</div>
</div>
<div class="headerActions">
@ -366,6 +396,8 @@ export class DeesTable<T> extends DeesElement {
</div>
<div class="headingSeparation"></div>
<dees-input-text></dees-input-text>
<!-- the actual table -->
<style></style>
${this.data.length > 0
@ -494,10 +526,11 @@ export class DeesTable<T> extends DeesElement {
${this.getActionsForType('inRow').map(
(actionArg) => html`<div
class="action"
@click=${() => actionArg.actionFunc({
item: itemArg,
table: this,
})}
@click=${() =>
actionArg.actionFunc({
item: itemArg,
table: this,
})}
>
${actionArg.iconName
? html`
@ -558,40 +591,51 @@ export class DeesTable<T> extends DeesElement {
public async updated(changedProperties: Map<string | number | symbol, unknown>): Promise<void> {
super.updated(changedProperties);
this.freezeColumnWidths();
this.determineColumnWidths();
}
freezeColumnWidths() {
public async determineColumnWidths() {
const domtools = await this.domtoolsPromise;
await domtools.convenience.smartdelay.delayFor(0);
// Get the table element
const table = this.shadowRoot.querySelector('table');
if (!table) return;
// Create a colgroup if it doesn't exist
let colgroup = table.querySelector('colgroup');
if (!colgroup) {
colgroup = document.createElement('colgroup');
table.insertBefore(colgroup, table.firstChild);
}
// Get the first row's cells to measure the widths
const cells = table.rows[0].cells;
for (let i = 0; i < cells.length; i++) {
const handleColumnByIndex = async (i: number, waitForRenderArg: boolean = false) => {
const done = plugins.smartpromise.defer();
const cell = cells[i];
// Get computed width
const width = window.getComputedStyle(cell).width;
// Check if there's already a <col> for this cell
let col = colgroup.children[i] as HTMLElement;
if (!col) {
col = document.createElement('col');
colgroup.appendChild(col);
if (cell.textContent.includes('Actions')) {
const neededWidth =
this.dataActions.filter((actionArg) => actionArg.type.includes('inRow')).length * 35;
cell.style.width = `${Math.max(neededWidth, 68)}px`;
} else {
cell.style.width = width;
}
if (waitForRenderArg) {
requestAnimationFrame(() => {
done.resolve();
});
await done.promise;
}
};
// Set the width
col.style.width = width;
if (cells[cells.length - 1].textContent.includes('Actions')) {
await handleColumnByIndex(cells.length - 1, true);
}
for (let i = 0; i < cells.length; i++) {
if (cells[i].textContent.includes('Actions')) {
continue;
}
await handleColumnByIndex(i);
}
table.style.tableLayout = 'fixed';
}
getActionsForType(typeArg: ITableAction['type'][0]) {
@ -621,6 +665,7 @@ export class DeesTable<T> extends DeesElement {
}
if (saveArg) {
itemArg[key] = input.value as any; // Convert string to T (you might need better type casting depending on your data structure)
this.changeSubject.next(this);
}
input.remove();
target.style.color = originalColor;

View File

@ -11,6 +11,8 @@ export * from './dees-icon.js';
export * from './dees-input-checkbox.js';
export * from './dees-input-dropdown.js';
export * from './dees-input-fileupload.js';
export * from './dees-input-iban.js';
export * from './dees-input-phone.js';
export * from './dees-input-quantityselector.js';
export * from './dees-input-radio.js';
export * from './dees-input-text.js';