diff --git a/Jenkinsfile b/Jenkinsfile index 9d708b1fdc..89f5cffd3f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,13 +1,11 @@ -@Library('Lucca@v0.62.0') _ +@Library('Lucca@v0.63.6') _ import hudson.Util import fr.lucca.CI ciBuildProperties script:this -node(label: CI.getSelectedNode(script:this)) { - notifyStartStats() - +node(label: CI.getSelectedLinuxNode(script:this)) { def projectTechnicalName = 'lucca-front' def repoName = "lucca-front" @@ -24,80 +22,66 @@ node(label: CI.getSelectedNode(script:this)) { try { timeout(time: 10, unit: 'MINUTES') { - loggableStage('Cleanup') { - // storybook static - if (fileExists('storybook')) { - dir('storybook') { - deleteDir() - } - } - } - loggableStage('Checkout') { scmVars = checkout scm } - loggableStage('Restore') { - npmCi() - } - - if (!isPR) { - loggableStage('Qualif') { - // it must be buildable - bat "npm run build" - // it must break no test - bat "npm run jenkins-test" - // it must be lint compliant - bat "npm run lint" + npmCi() + + npmScript(script: 'build') + npmScript(script: 'jenkins-test', skip: isPR) + npmScript(script: 'lint', skip: isPR) + + def shouldDeploy = isPR || isRc || isMaster; + + loggableStage('Deploy', !shouldDeploy) { + echo "deploying ${branchName}" + npmScript(script: 'build-storybook') + npmScript(script: 'build-compodoc') + + // FIXME Deploy with windows node for now + stash(name: "storybook-static", includes: "storybook-static/**") + stash(name: "compodoc-static", includes: "compodoc-static/**") + node("windows") { + unstash(name: "storybook-static") + powershell "Remove-Item \\\\RBX1-SH1-TECH\\lucca-front\\${env.BRANCH_NAME}\\storybook -Recurse" + powershell "Copy-Item storybook-static \\\\RBX1-SH1-TECH\\lucca-front\\${env.BRANCH_NAME}\\storybook -Recurse" + unstash(name: "compodoc-static") + powershell "Remove-Item \\\\RBX1-SH1-TECH\\lucca-front\\${env.BRANCH_NAME}\\compodoc -Recurse" + powershell "Copy-Item compodoc-static \\\\RBX1-SH1-TECH\\lucca-front\\${env.BRANCH_NAME}\\compodoc -Recurse" } } - if (isPR || isRc || isMaster) { - loggableStage('Deploy') { - echo "deploying ${branchName}" - bat "npm run build-storybook" - bat "npm run build-compodoc" - powershell "Remove-Item \\\\RBX1-SH1-TECH\\lucca-front\\${branchName}\\storybook -Recurse" - powershell "Remove-Item \\\\RBX1-SH1-TECH\\lucca-front\\${branchName}\\compodoc -Recurse" - powershell "Copy-Item storybook-static \\\\RBX1-SH1-TECH\\lucca-front\\${branchName}\\storybook -Recurse" - powershell "Copy-Item compodoc-static \\\\RBX1-SH1-TECH\\lucca-front\\${branchName}\\compodoc -Recurse" - } - - loggableStage('e2e') { - publishE2e(loggableStageName: 'e2e', slnFilepath: 'e2e\\LuccaFront.e2e.sln', framework: "net6.0") - archiveElements(e2e: true) - } - - commentOnPR( - credentialsId: 'ux-comment-token', - body: ":woman_cook: https://lucca-front.lucca.tech/${branchName}/storybook", - repoName: projectTechnicalName, - skip: !isPR - ) + loggableStage('e2e', !shouldDeploy) { + publishE2e(loggableStageName: 'e2e', slnFilepath: 'e2e/LuccaFront.e2e.sln', framework: "net6.0") + archiveElements(e2e: true) } - if (!isPR) { - loggableStage('Publish') { - def version = env.BRANCH_NAME + commentOnPR( + credentialsId: 'ux-comment-token', + body: ":woman_cook: https://lucca-front.lucca.tech/${branchName}/storybook", + repoName: projectTechnicalName, + skip: !isPR + ) - def iconsPackageJson = readFile(file: 'dist/icons/package.json'); - def scssPackageJson = readFile(file: 'dist/scss/package.json'); - def ngPackageJson = readFile(file: 'dist/ng/package.json'); + loggableStage('Publish', isPR) { + def version = env.BRANCH_NAME - writeFile(file: 'dist/icons/package.json', text: iconsPackageJson.replaceAll('"\\*"', "\"${version}\"")); - writeFile(file: 'dist/scss/package.json', text: scssPackageJson.replaceAll('"\\*"', "\"${version}\"")); - writeFile(file: 'dist/ng/package.json', text: ngPackageJson.replaceAll('"\\*"', "\"${version}\"")); + def iconsPackageJson = readFile(file: 'dist/icons/package.json'); + def scssPackageJson = readFile(file: 'dist/scss/package.json'); + def ngPackageJson = readFile(file: 'dist/ng/package.json'); - publishNpmOnReleaseTag(publishFolder: 'dist/icons') - publishNpmOnReleaseTag(publishFolder: 'dist/scss') - publishNpmOnReleaseTag(publishFolder: 'dist/ng') - } + writeFile(file: 'dist/icons/package.json', text: iconsPackageJson.replaceAll('"\\*"', "\"${version}\"")); + writeFile(file: 'dist/scss/package.json', text: scssPackageJson.replaceAll('"\\*"', "\"${version}\"")); + writeFile(file: 'dist/ng/package.json', text: ngPackageJson.replaceAll('"\\*"', "\"${version}\"")); + + publishNpmOnReleaseTag(publishFolder: 'dist/icons') + publishNpmOnReleaseTag(publishFolder: 'dist/scss') + publishNpmOnReleaseTag(publishFolder: 'dist/ng') } } } catch(err) { println err currentBuild.result = 'failure' } - - notifyEndStats() } diff --git a/build.js b/build.js index c44f878dcf..6ecfb68ea0 100644 --- a/build.js +++ b/build.js @@ -62,7 +62,7 @@ runTask('Lucca Front compilation', async () => { output: OUTPUT_ICONS, }); copyFiles({ - patterns: ['lucca-icon.d.ts', 'package.json', 'src/**'], + patterns: ['index.d.ts', 'package.json', 'src/**'], context: ICONS, output: OUTPUT_ICONS, }); diff --git a/package-lock.json b/package-lock.json index 147422d730..5974e348b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,6 +40,7 @@ "@compodoc/compodoc": "^1.1.21", "@ngneat/spectator": "^14.0.0", "@storybook/addon-a11y": "^7.4.0", + "@storybook/addon-docs": "^7.5.1", "@storybook/addon-essentials": "^7.4.0", "@storybook/addon-mdx-gfm": "^7.4.0", "@storybook/angular": "^7.4.0", @@ -7884,26 +7885,26 @@ } }, "node_modules/@storybook/addon-docs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.0.tgz", - "integrity": "sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.5.1.tgz", + "integrity": "sha512-+wE67oWIhGK9+kv2sxoY2KDXm3v62RfEgxiksdhtffTP/joOK3p88S0lO+8g0G4xfNGUnBhPtzGMuUxWwaH2Pw==", "dev": true, "dependencies": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.4.0", - "@storybook/client-logger": "7.4.0", - "@storybook/components": "7.4.0", - "@storybook/csf-plugin": "7.4.0", - "@storybook/csf-tools": "7.4.0", + "@storybook/blocks": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/components": "7.5.1", + "@storybook/csf-plugin": "7.5.1", + "@storybook/csf-tools": "7.5.1", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.0", - "@storybook/postinstall": "7.4.0", - "@storybook/preview-api": "7.4.0", - "@storybook/react-dom-shim": "7.4.0", - "@storybook/theming": "7.4.0", - "@storybook/types": "7.4.0", + "@storybook/node-logger": "7.5.1", + "@storybook/postinstall": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/react-dom-shim": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", @@ -7918,6 +7919,731 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/blocks": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.5.1.tgz", + "integrity": "sha512-7b69p6kDdgmlejEMM2mW6/Lz4OmU/R3Qr+TpKnPcV5iS7ADxRQEQCTEMoQ5RyLJf0vDRh/7Ljn/RMo8Ux3X7JA==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/components": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/docs-tools": "7.5.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/channels": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", + "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/client-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", + "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/components": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.5.1.tgz", + "integrity": "sha512-fdzzxGBV/Fj9pYwfYL3RZsVUHeBqlfLMBP/L6mPmjaZSwHFqkaRZZUajZc57lCtI+TOy2gY6WH3cPavEtqtgLw==", + "dev": true, + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/core-common": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.5.1.tgz", + "integrity": "sha512-/rQ0/xvxFHSGCgIkK74HrgDMnzfYtDYTCoSod/qCTojfs9aciX+JYgvo5ChPnI/LEKWwxRTkrE7pl2u5+C4XGA==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.5.1", + "@storybook/node-logger": "7.5.1", + "@storybook/types": "7.5.1", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/core-events": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", + "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/csf-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.5.1.tgz", + "integrity": "sha512-YChGbT1/odLS4RLb2HtK7ixM7mH5s7G5nOsWGKXalbza4SFKZIU2UzllEUsA+X8YfxMHnCD5TC3xLfK0ByxmzQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.5.1", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/docs-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.5.1.tgz", + "integrity": "sha512-tDtQGeKU5Kc2XoqZ5vpeGQrOkRg2UoDiSRS6cLy+M/sMB03Annq0ZngnJXaMiv0DLi2zpWSgWqPgYA3TJTZHBw==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/types": "7.5.1", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/manager-api": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.5.1.tgz", + "integrity": "sha512-ygwJywluhhE1dpA0jC2D/3NFhMXzFCt+iW4m3cOwexYTuiDWF66AbGOFBx9peE7Wk/Z9doKkf9E3v11enwaidA==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/node-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.5.1.tgz", + "integrity": "sha512-xRMdL5YPe8C9sgJ1R0QD3YbiLjDGrfQk91+GplRD8N9FVCT5dki55Bv5Kp0FpemLYYg6uxAZL5nHmsZHKDKQoA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/preview-api": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.5.1.tgz", + "integrity": "sha512-8xjUbuGmHLmw8tfTUCjXSvMM9r96JaexPFmHdwW6XLe71KKdWp8u96vRDRE5648cd+/of15OjaRtakRKqluA/A==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.5.1", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/router": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.5.1.tgz", + "integrity": "sha512-BvKo+IxWwo3dfIG1+vLtZLT4qqkNHL5GTIozTyX04uqt9ByYZL6SJEzxEa1Xn6Qq/fbdQwzCanNHbTlwiTMf7Q==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.5.1", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/theming": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.5.1.tgz", + "integrity": "sha512-ETLAOn10hI4Mkmjsr0HGcM6HbzaURrrPBYmfXOrdbrzEVN+AHW4FlvP9d8fYyP1gdjPE1F39XvF0jYgt1zXiHQ==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.5.1", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-docs/node_modules/@storybook/types": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", + "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.5.1", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-docs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/addon-docs/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/addon-docs/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "node_modules/@storybook/addon-docs/node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -7932,6 +8658,27 @@ "node": ">=14.14" } }, + "node_modules/@storybook/addon-docs/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/addon-docs/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@storybook/addon-essentials": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.4.0.tgz", @@ -7962,6 +8709,93 @@ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-docs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.0.tgz", + "integrity": "sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.4.0", + "@storybook/client-logger": "7.4.0", + "@storybook/components": "7.4.0", + "@storybook/csf-plugin": "7.4.0", + "@storybook/csf-tools": "7.4.0", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.4.0", + "@storybook/postinstall": "7.4.0", + "@storybook/preview-api": "7.4.0", + "@storybook/react-dom-shim": "7.4.0", + "@storybook/theming": "7.4.0", + "@storybook/types": "7.4.0", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/csf-plugin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.0.tgz", + "integrity": "sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==", + "dev": true, + "dependencies": { + "@storybook/csf-tools": "7.4.0", + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/postinstall": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.0.tgz", + "integrity": "sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/react-dom-shim": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.0.tgz", + "integrity": "sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-essentials/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@storybook/addon-highlight": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.4.0.tgz", @@ -9625,12 +10459,12 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.0.tgz", - "integrity": "sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.5.1.tgz", + "integrity": "sha512-jhV2aCZhSIXUiQDcHtuCg3dyYMzjYHTwLb4cJtkNw4sXqQoTGydTSWYwWigcHFfKGoyQp82rSgE1hE4YYx6iew==", "dev": true, "dependencies": { - "@storybook/csf-tools": "7.4.0", + "@storybook/csf-tools": "7.5.1", "unplugin": "^1.3.1" }, "funding": { @@ -9638,6 +10472,101 @@ "url": "https://opencollective.com/storybook" } }, + "node_modules/@storybook/csf-plugin/node_modules/@storybook/channels": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", + "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-plugin/node_modules/@storybook/client-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", + "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-plugin/node_modules/@storybook/core-events": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", + "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-plugin/node_modules/@storybook/csf-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.5.1.tgz", + "integrity": "sha512-YChGbT1/odLS4RLb2HtK7ixM7mH5s7G5nOsWGKXalbza4SFKZIU2UzllEUsA+X8YfxMHnCD5TC3xLfK0ByxmzQ==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.5.1", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-plugin/node_modules/@storybook/types": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", + "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.5.1", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-plugin/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@storybook/csf-tools": { "version": "7.4.0", "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.4.0.tgz", @@ -9761,9 +10690,9 @@ } }, "node_modules/@storybook/postinstall": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.0.tgz", - "integrity": "sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.5.1.tgz", + "integrity": "sha512-+LFUe2nNbmmLPKNt34RXSSC1r40yGGOoP/qlaPFwNOgQN2AZUrfqk6ZYnw6LjmcuHpQInZ4y4WDgbzg6QQL3+w==", "dev": true, "funding": { "type": "opencollective", @@ -9807,9 +10736,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.0.tgz", - "integrity": "sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.5.1.tgz", + "integrity": "sha512-bzTIfLm91O9h3rPYJLtRbmsPARerY3z7MoyvadGp8TikvIvf+WyT/vHujw+20SxnqiZVq5Jv65FFlxc46GGB1Q==", "dev": true, "funding": { "type": "opencollective", @@ -12446,9 +13375,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -16036,9 +16965,9 @@ "dev": true }, "node_modules/esbuild-register": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", - "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", "dev": true, "dependencies": { "debug": "^4.3.4" @@ -33177,12 +34106,12 @@ } }, "node_modules/unplugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.4.0.tgz", - "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", + "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.10.0", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" @@ -39904,32 +40833,464 @@ } }, "@storybook/addon-docs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.0.tgz", - "integrity": "sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.5.1.tgz", + "integrity": "sha512-+wE67oWIhGK9+kv2sxoY2KDXm3v62RfEgxiksdhtffTP/joOK3p88S0lO+8g0G4xfNGUnBhPtzGMuUxWwaH2Pw==", "dev": true, "requires": { "@jest/transform": "^29.3.1", "@mdx-js/react": "^2.1.5", - "@storybook/blocks": "7.4.0", - "@storybook/client-logger": "7.4.0", - "@storybook/components": "7.4.0", - "@storybook/csf-plugin": "7.4.0", - "@storybook/csf-tools": "7.4.0", + "@storybook/blocks": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/components": "7.5.1", + "@storybook/csf-plugin": "7.5.1", + "@storybook/csf-tools": "7.5.1", "@storybook/global": "^5.0.0", "@storybook/mdx2-csf": "^1.0.0", - "@storybook/node-logger": "7.4.0", - "@storybook/postinstall": "7.4.0", - "@storybook/preview-api": "7.4.0", - "@storybook/react-dom-shim": "7.4.0", - "@storybook/theming": "7.4.0", - "@storybook/types": "7.4.0", + "@storybook/node-logger": "7.5.1", + "@storybook/postinstall": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/react-dom-shim": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", "fs-extra": "^11.1.0", "remark-external-links": "^8.0.0", "remark-slug": "^6.0.0", "ts-dedent": "^2.0.0" }, "dependencies": { + "@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "dev": true, + "optional": true + }, + "@storybook/blocks": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.5.1.tgz", + "integrity": "sha512-7b69p6kDdgmlejEMM2mW6/Lz4OmU/R3Qr+TpKnPcV5iS7ADxRQEQCTEMoQ5RyLJf0vDRh/7Ljn/RMo8Ux3X7JA==", + "dev": true, + "requires": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/components": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/docs-tools": "7.5.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", + "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", + "dev": true, + "requires": { + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", + "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/components": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.5.1.tgz", + "integrity": "sha512-fdzzxGBV/Fj9pYwfYL3RZsVUHeBqlfLMBP/L6mPmjaZSwHFqkaRZZUajZc57lCtI+TOy2gY6WH3cPavEtqtgLw==", + "dev": true, + "requires": { + "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-toolbar": "^1.0.4", + "@storybook/client-logger": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.5.1.tgz", + "integrity": "sha512-/rQ0/xvxFHSGCgIkK74HrgDMnzfYtDYTCoSod/qCTojfs9aciX+JYgvo5ChPnI/LEKWwxRTkrE7pl2u5+C4XGA==", + "dev": true, + "requires": { + "@storybook/core-events": "7.5.1", + "@storybook/node-logger": "7.5.1", + "@storybook/types": "7.5.1", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^18.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.5.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/core-events": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", + "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/csf-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.5.1.tgz", + "integrity": "sha512-YChGbT1/odLS4RLb2HtK7ixM7mH5s7G5nOsWGKXalbza4SFKZIU2UzllEUsA+X8YfxMHnCD5TC3xLfK0ByxmzQ==", + "dev": true, + "requires": { + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.5.1", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/docs-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.5.1.tgz", + "integrity": "sha512-tDtQGeKU5Kc2XoqZ5vpeGQrOkRg2UoDiSRS6cLy+M/sMB03Annq0ZngnJXaMiv0DLi2zpWSgWqPgYA3TJTZHBw==", + "dev": true, + "requires": { + "@storybook/core-common": "7.5.1", + "@storybook/preview-api": "7.5.1", + "@storybook/types": "7.5.1", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + } + }, + "@storybook/manager-api": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.5.1.tgz", + "integrity": "sha512-ygwJywluhhE1dpA0jC2D/3NFhMXzFCt+iW4m3cOwexYTuiDWF66AbGOFBx9peE7Wk/Z9doKkf9E3v11enwaidA==", + "dev": true, + "requires": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.5.1", + "@storybook/theming": "7.5.1", + "@storybook/types": "7.5.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/node-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.5.1.tgz", + "integrity": "sha512-xRMdL5YPe8C9sgJ1R0QD3YbiLjDGrfQk91+GplRD8N9FVCT5dki55Bv5Kp0FpemLYYg6uxAZL5nHmsZHKDKQoA==", + "dev": true + }, + "@storybook/preview-api": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.5.1.tgz", + "integrity": "sha512-8xjUbuGmHLmw8tfTUCjXSvMM9r96JaexPFmHdwW6XLe71KKdWp8u96vRDRE5648cd+/of15OjaRtakRKqluA/A==", + "dev": true, + "requires": { + "@storybook/channels": "7.5.1", + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.5.1", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/router": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.5.1.tgz", + "integrity": "sha512-BvKo+IxWwo3dfIG1+vLtZLT4qqkNHL5GTIozTyX04uqt9ByYZL6SJEzxEa1Xn6Qq/fbdQwzCanNHbTlwiTMf7Q==", + "dev": true, + "requires": { + "@storybook/client-logger": "7.5.1", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + } + }, + "@storybook/theming": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.5.1.tgz", + "integrity": "sha512-ETLAOn10hI4Mkmjsr0HGcM6HbzaURrrPBYmfXOrdbrzEVN+AHW4FlvP9d8fYyP1gdjPE1F39XvF0jYgt1zXiHQ==", + "dev": true, + "requires": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.5.1", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + } + }, + "@storybook/types": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", + "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", + "dev": true, + "requires": { + "@storybook/channels": "7.5.1", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, "fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -39940,6 +41301,21 @@ "jsonfile": "^6.0.1", "universalify": "^2.0.0" } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -39963,6 +41339,69 @@ "@storybook/node-logger": "7.4.0", "@storybook/preview-api": "7.4.0", "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@storybook/addon-docs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.4.0.tgz", + "integrity": "sha512-LJE92LUeVTgi8W4tLBEbSvCqF54snmBfTFCr46vhCFov2CE2VBgEvIX1XT3dfUgYUOtPu3RXR2C89fYgU6VYZw==", + "dev": true, + "requires": { + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.4.0", + "@storybook/client-logger": "7.4.0", + "@storybook/components": "7.4.0", + "@storybook/csf-plugin": "7.4.0", + "@storybook/csf-tools": "7.4.0", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.4.0", + "@storybook/postinstall": "7.4.0", + "@storybook/preview-api": "7.4.0", + "@storybook/react-dom-shim": "7.4.0", + "@storybook/theming": "7.4.0", + "@storybook/types": "7.4.0", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/csf-plugin": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.0.tgz", + "integrity": "sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==", + "dev": true, + "requires": { + "@storybook/csf-tools": "7.4.0", + "unplugin": "^1.3.1" + } + }, + "@storybook/postinstall": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.0.tgz", + "integrity": "sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==", + "dev": true + }, + "@storybook/react-dom-shim": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.0.tgz", + "integrity": "sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==", + "dev": true, + "requires": {} + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "@storybook/addon-highlight": { @@ -40992,13 +42431,87 @@ } }, "@storybook/csf-plugin": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.4.0.tgz", - "integrity": "sha512-X1L3l/dpz2UYjCEQlFLkW7w1A13pmzDZpJ0lotkV79PALlakMXBeoX3I2E0VMjJATV8wC9RSj56COBAs6HsPeg==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.5.1.tgz", + "integrity": "sha512-jhV2aCZhSIXUiQDcHtuCg3dyYMzjYHTwLb4cJtkNw4sXqQoTGydTSWYwWigcHFfKGoyQp82rSgE1hE4YYx6iew==", "dev": true, "requires": { - "@storybook/csf-tools": "7.4.0", + "@storybook/csf-tools": "7.5.1", "unplugin": "^1.3.1" + }, + "dependencies": { + "@storybook/channels": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.5.1.tgz", + "integrity": "sha512-7hTGHqvtdFTqRx8LuCznOpqPBYfUeMUt/0IIp7SFuZT585yMPxrYoaK//QmLEWnPb80B8HVTSQi7caUkJb32LA==", + "dev": true, + "requires": { + "@storybook/client-logger": "7.5.1", + "@storybook/core-events": "7.5.1", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.2.0", + "tiny-invariant": "^1.3.1" + } + }, + "@storybook/client-logger": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.5.1.tgz", + "integrity": "sha512-XxbLvg0aQRoBrzxYLcVYCbjDkGbkU8Rfb74XbV2CLiO2bIbFPmA1l1Nwbp+wkCGA+O6Z1zwzSl6wcKKqZ6XZCg==", + "dev": true, + "requires": { + "@storybook/global": "^5.0.0" + } + }, + "@storybook/core-events": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.5.1.tgz", + "integrity": "sha512-2eyaUhTfmEEqOEZVoCXVITCBn6N7QuZCG2UNxv0l//ED+7MuMiFhVw7kS7H3WOVk65R7gb8qbKFTNX8HFTgBHg==", + "dev": true, + "requires": { + "ts-dedent": "^2.0.0" + } + }, + "@storybook/csf-tools": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.5.1.tgz", + "integrity": "sha512-YChGbT1/odLS4RLb2HtK7ixM7mH5s7G5nOsWGKXalbza4SFKZIU2UzllEUsA+X8YfxMHnCD5TC3xLfK0ByxmzQ==", + "dev": true, + "requires": { + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.5.1", + "fs-extra": "^11.1.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/types": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.5.1.tgz", + "integrity": "sha512-ZcMSaqFNx1E+G00nRDUi8kKL7gxJVlnCvbKLNj3V85guy4DkIYAZr31yDqze07gDWbjvKoHIp3tKpgE+2i8upQ==", + "dev": true, + "requires": { + "@storybook/channels": "7.5.1", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + } + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "@storybook/csf-tools": { @@ -41099,9 +42612,9 @@ "dev": true }, "@storybook/postinstall": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.4.0.tgz", - "integrity": "sha512-ZVBZggqkuj7ysfuHSCd/J7ovWV06zY9uWf+VU+Zw7ZeojDT8QHFrCurPsN7D9679j9vRU1/kSzqvAiStALS33g==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.5.1.tgz", + "integrity": "sha512-+LFUe2nNbmmLPKNt34RXSSC1r40yGGOoP/qlaPFwNOgQN2AZUrfqk6ZYnw6LjmcuHpQInZ4y4WDgbzg6QQL3+w==", "dev": true }, "@storybook/preview": { @@ -41133,9 +42646,9 @@ } }, "@storybook/react-dom-shim": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.4.0.tgz", - "integrity": "sha512-TLpb8a2hnWJoRLqoXpMADh82BFfRZll6JI2Waf1FjnvJ4SF9eS0zBbxybrjW3lFAHWy2XJi+rwcK8FiPj0iBoQ==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.5.1.tgz", + "integrity": "sha512-bzTIfLm91O9h3rPYJLtRbmsPARerY3z7MoyvadGp8TikvIvf+WyT/vHujw+20SxnqiZVq5Jv65FFlxc46GGB1Q==", "dev": true, "requires": {} }, @@ -43167,9 +44680,9 @@ } }, "acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true }, "acorn-globals": { @@ -45963,9 +47476,9 @@ "dev": true }, "esbuild-register": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", - "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz", + "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==", "dev": true, "requires": { "debug": "^4.3.4" @@ -58752,12 +60265,12 @@ "dev": true }, "unplugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.4.0.tgz", - "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.0.tgz", + "integrity": "sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==", "dev": true, "requires": { - "acorn": "^8.9.0", + "acorn": "^8.10.0", "chokidar": "^3.5.3", "webpack-sources": "^3.2.3", "webpack-virtual-modules": "^0.5.0" diff --git a/package.json b/package.json index 87cc1e643a..0c890f8477 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "@compodoc/compodoc": "^1.1.21", "@ngneat/spectator": "^14.0.0", "@storybook/addon-a11y": "^7.4.0", + "@storybook/addon-docs": "^7.5.1", "@storybook/addon-essentials": "^7.4.0", "@storybook/addon-mdx-gfm": "^7.4.0", "@storybook/angular": "^7.4.0", diff --git a/packages/icons/package.json b/packages/icons/package.json index c3b60281ba..9e8b30a3fa 100644 --- a/packages/icons/package.json +++ b/packages/icons/package.json @@ -7,7 +7,7 @@ "url": "git+https://github.com/LuccaSA/lucca-front.git" }, "scripts": {}, - "main": "lucca-icon.d.ts", + "main": "index.d.ts", "keywords": [ "lucca", "icons" diff --git a/packages/ng/core-select/input/select-input.component.ts b/packages/ng/core-select/input/select-input.component.ts index 3690c35d76..f6a8049e58 100644 --- a/packages/ng/core-select/input/select-input.component.ts +++ b/packages/ng/core-select/input/select-input.component.ts @@ -179,6 +179,7 @@ export abstract class ALuSelectInputComponent implements OnDest if (!this.isPanelOpen) { return; } + this.onTouched?.(); this.isPanelOpen$.next(false); this.panelRef.close(); this._panelRef = undefined; diff --git a/packages/ng/core/date/native/native-date.adapter.ts b/packages/ng/core/date/native/native-date.adapter.ts index 13e10973c8..781a792b4d 100644 --- a/packages/ng/core/date/native/native-date.adapter.ts +++ b/packages/ng/core/date/native/native-date.adapter.ts @@ -64,14 +64,18 @@ export class LuNativeDateAdapter extends ALuDateAdapter implements ILuDate return false; } const groups = text.split(this._regex); - if (groups.length !== 3 && groups.length !== 2) { + const dayTextInvalid = granularity === ELuDateGranularity.day && groups.length !== 3; + const monthTextInvalid = granularity === ELuDateGranularity.month && groups.length !== 2; + const yearTextInvalid = granularity === ELuDateGranularity.year && groups.length !== 1; + if (dayTextInvalid || monthTextInvalid || yearTextInvalid) { return false; } + try { const { date, month, year } = this.extract(text, granularity); - // When year is greater than 10_000 ISO string goes from 2000-01-01 to +010000-01-01 which is not supported by backends - if (year > 10_000) { + // When year is equal or greater than 10_000 ISO string goes from 2000-01-01 to +010000-01-01 which is not supported by backends + if (year >= 10_000) { return false; } @@ -123,6 +127,7 @@ export class LuNativeDateAdapter extends ALuDateAdapter implements ILuDate if (!text) { return undefined; } + if (!this.isParsable(text, granularity)) { return this.forgeInvalid(); } diff --git a/packages/ng/establishment/establishment-select.spec.ts b/packages/ng/establishment/establishment-select.spec.ts index ba2f27cc1f..3907c9e211 100644 --- a/packages/ng/establishment/establishment-select.spec.ts +++ b/packages/ng/establishment/establishment-select.spec.ts @@ -3,7 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import { HttpClientModule } from '@angular/common/http'; import { discardPeriodicTasks, fakeAsync, tick } from '@angular/core/testing'; -import { fireEvent, render, screen } from '@testing-library/angular'; +import { RenderTemplateOptions, fireEvent, render, screen } from '@testing-library/angular'; import { createMock } from '@testing-library/angular/jest-utils'; import '@testing-library/jest-dom'; import userEvent from '@testing-library/user-event'; @@ -55,13 +55,25 @@ describe('establishment select', () => { Establishment Multiple Select `; + const rendererTemplateOptions: RenderTemplateOptions = { + imports: [LuEstablishmentSelectInputComponent, HttpClientModule], + componentProviders: [ + { + provide: ALuEstablishmentService, + useValue: mockEstablishment, + }, + { + provide: ALuLegalUnitService, + useValue: mockLegalUnit, + }, + ], + }; + describe('Basic', () => { it('should display dialog with a click on a lu select ', async () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = screen.getByTestId('lu-select'); await userEvent.click(luSelectElement); @@ -74,19 +86,7 @@ describe('establishment select', () => { discardPeriodicTasks(); // eslint-disable-next-line @typescript-eslint/no-explicit-any - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - componentProviders: [ - { - provide: ALuEstablishmentService, - useValue: mockEstablishment, - }, - { - provide: ALuLegalUnitService, - useValue: mockLegalUnit, - }, - ], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = await screen.findByTestId('lu-select'); expect(luSelectElement).toBeInTheDocument(); @@ -101,9 +101,7 @@ describe('establishment select', () => { })); it('should check a11y', async () => { - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = screen.getByTestId('lu-select'); const results = await axe(luSelectElement); @@ -114,9 +112,7 @@ describe('establishment select', () => { describe('multiple', () => { it('should display dialog with a click on a lu select ', async () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = screen.getByTestId('lu-select-multiple'); await userEvent.click(luSelectElement); const dial = screen.getByRole('dialog'); @@ -125,19 +121,7 @@ describe('establishment select', () => { it('should select all establishment', fakeAsync(async () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - componentProviders: [ - { - provide: ALuEstablishmentService, - useValue: mockEstablishment, - }, - { - provide: ALuLegalUnitService, - useValue: mockLegalUnit, - }, - ], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = await screen.findByTestId('lu-select-multiple'); expect(luSelectElement).toBeInTheDocument(); @@ -153,19 +137,7 @@ describe('establishment select', () => { it('should deselect all establishment', fakeAsync(async () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - componentProviders: [ - { - provide: ALuEstablishmentService, - useValue: mockEstablishment, - }, - { - provide: ALuLegalUnitService, - useValue: mockLegalUnit, - }, - ], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = await screen.findByTestId('lu-select-multiple'); fireEvent.click(luSelectElement); tick(300); // debouncetime du composant @@ -181,9 +153,7 @@ describe('establishment select', () => { })); it('should check a11y', async () => { - await render(testingStoryTemplate, { - imports: [LuEstablishmentSelectInputComponent, HttpClientModule], - }); + await render(testingStoryTemplate, rendererTemplateOptions); const luSelectElement = screen.getByTestId('lu-select-multiple'); const results = await axe(luSelectElement); expect(results).toHaveNoViolations(); // of course not diff --git a/packages/ng/form-field/form-field.component.scss b/packages/ng/form-field/form-field.component.scss index 9361ecc187..dc8b402183 100644 --- a/packages/ng/form-field/form-field.component.scss +++ b/packages/ng/form-field/form-field.component.scss @@ -1 +1 @@ -@use '@lucca-front/scss/src/components/textfield'; +@use '@lucca-front/scss/src/components/textField'; diff --git a/packages/ng/forms/checkboxfield/checkboxfield.component.html b/packages/ng/forms/checkboxfield/checkboxfield.component.html index 8a46f96287..a79f17a9cc 100644 --- a/packages/ng/forms/checkboxfield/checkboxfield.component.html +++ b/packages/ng/forms/checkboxfield/checkboxfield.component.html @@ -6,6 +6,7 @@ [inlineMessageState]="inlineMessageState" [size]="size" [invalid]="ngControl.control.touched && ngControl.control.invalid" + [tooltip]="tooltip" layout="checkbox" > diff --git a/packages/ng/forms/switchfield/switchfield.component.html b/packages/ng/forms/switchfield/switchfield.component.html index 73cc5df663..7444875111 100644 --- a/packages/ng/forms/switchfield/switchfield.component.html +++ b/packages/ng/forms/switchfield/switchfield.component.html @@ -6,6 +6,7 @@ [inlineMessageState]="inlineMessageState" [size]="size" [invalid]="ngControl.control.touched && ngControl.control.invalid" + [tooltip]="tooltip" layout="checkbox" > diff --git a/packages/ng/simple-select/api/api-v4.directive.ts b/packages/ng/simple-select/api/api-v4.directive.ts index 13a92efa11..425451d78d 100644 --- a/packages/ng/simple-select/api/api-v4.directive.ts +++ b/packages/ng/simple-select/api/api-v4.directive.ts @@ -27,7 +27,7 @@ export class LuSimpleSelectApiV4Directive extends ALuSimpl } protected url$ = new ReplaySubject(1); - protected sort$ = new BehaviorSubject('name,asc'); + protected sort$ = new BehaviorSubject('+name'); protected filters$ = new BehaviorSubject>({}); protected httpClient = inject(HttpClient); diff --git a/packages/scss/src/components/checkboxField/index.scss b/packages/scss/src/components/checkboxField/index.scss index 9b9ea2fac1..55bc5bf079 100644 --- a/packages/scss/src/components/checkboxField/index.scss +++ b/packages/scss/src/components/checkboxField/index.scss @@ -7,14 +7,6 @@ &.mod-S { @include S; } - - &.mod-withArrow { - @include withArrow; - - &.mod-S { - @include withArrowS; - } - } } .checkboxField-input { diff --git a/packages/scss/src/components/checkboxField/mods.scss b/packages/scss/src/components/checkboxField/mods.scss index 972797ed9b..a0be4c840e 100644 --- a/packages/scss/src/components/checkboxField/mods.scss +++ b/packages/scss/src/components/checkboxField/mods.scss @@ -7,25 +7,3 @@ --component-checkboxField-label-fontSize: var(--sizes-S-fontSize); --component-checkboxField-label-lineHeight: var(--sizes-S-lineHeight); } - -@mixin withArrow { - padding-bottom: var(--spacings-S); - - .checkboxField-arrow { - @include box.arrow; - } - - .checkboxField-input:not(:checked) { - ~ .checkboxField-arrow { - display: none; - } - } -} - -@mixin withArrowS { - padding-bottom: var(--spacings-XS); - - .checkboxField-arrow { - @include box.arrowS; - } -} diff --git a/packages/scss/src/components/form/component.scss b/packages/scss/src/components/form/component.scss index a3e3708322..8265bed4a5 100644 --- a/packages/scss/src/components/form/component.scss +++ b/packages/scss/src/components/form/component.scss @@ -11,6 +11,7 @@ @at-root ($atRoot) { .form-field { + position: relative; display: flex; flex-direction: column; gap: var(--spacings-XXS); diff --git a/packages/scss/src/components/form/index.scss b/packages/scss/src/components/form/index.scss index ffda0e81ad..5bb647ca16 100644 --- a/packages/scss/src/components/form/index.scss +++ b/packages/scss/src/components/form/index.scss @@ -14,6 +14,15 @@ @include XS; } + &.mod-withArrow { + @include withArrow; + + + &.mod-S { + @include withArrowS; + } + } + &.mod-checkable, &:has(.checkboxField), &:has(.switchField) { diff --git a/packages/scss/src/components/form/mods.scss b/packages/scss/src/components/form/mods.scss index 8b94547590..a19caab5a0 100644 --- a/packages/scss/src/components/form/mods.scss +++ b/packages/scss/src/components/form/mods.scss @@ -7,6 +7,7 @@ @use '@lucca-front/scss/src/components/textField/exports' as textField; @use '@lucca-front/scss/src/components/switchField/exports' as switchField; @use '@lucca-front/scss/src/components/checkboxField/exports' as checkboxField; +@use '@lucca-front/scss/src/components/box/exports' as box; @mixin S { .formLabel { @@ -55,6 +56,40 @@ } } +@mixin withArrow { + padding-bottom: var(--spacings-S); + + .form-field-arrow { + @include box.arrow; + } + + &:has(.switchField) { + .form-field-arrow { + @include box.arrowSwitch; // Arrow position for switch + } + } + + &:not(:has(:checked)) { + .form-field-arrow { + display: none; + } + } +} + +@mixin withArrowS { + padding-bottom: var(--spacings-XS); + + .form-field-arrow { + @include box.arrowS; + } + + &:has(.switchField) { + .form-field-arrow { + @include box.arrowSwitchS; // Arrow position for switch + } + } +} + // deprecated @mixin overlay { diff --git a/packages/scss/src/components/switchField/index.scss b/packages/scss/src/components/switchField/index.scss index fa09551a1d..83fe0615b8 100644 --- a/packages/scss/src/components/switchField/index.scss +++ b/packages/scss/src/components/switchField/index.scss @@ -7,14 +7,6 @@ &.mod-S { @include S; } - - &.mod-withArrow { - @include withArrow; - - &.mod-S { - @include withArrowS; - } - } } .switchField-input { diff --git a/packages/scss/src/components/switchField/mods.scss b/packages/scss/src/components/switchField/mods.scss index 6272c0a95e..558473611b 100644 --- a/packages/scss/src/components/switchField/mods.scss +++ b/packages/scss/src/components/switchField/mods.scss @@ -9,27 +9,3 @@ --component-switchField-label-fontSize: var(--sizes-S-fontSize); --component-switchField-label-lineHeight: var(--sizes-S-lineHeight); } - -@mixin withArrow { - padding-bottom: var(--spacings-S); - - .switchField-arrow { - @include box.arrow; - @include box.arrowSwitch; - } - - .switchField-input:not(:checked) { - ~ .switchField-arrow { - display: none; - } - } -} - -@mixin withArrowS { - padding-bottom: var(--spacings-XS); - - .switchField-arrow { - @include box.arrowS; - @include box.arrowSwitchS; - } -} diff --git a/stories/documentation/forms/arrow/arrow-basic.stories.ts b/stories/documentation/forms/arrow/arrow-basic.stories.ts deleted file mode 100644 index f02fd64edf..0000000000 --- a/stories/documentation/forms/arrow/arrow-basic.stories.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { Meta, Story } from '@storybook/angular'; - -interface ArrowBasicStory { - s: boolean; - label: Text; - grey: boolean; - field: string; - checked: boolean; -} - -export default { - title: 'Documentation/Forms/Arrow/Basic', - argTypes: { - checked: { - control: { - type: 'boolean', - }, - }, - s: { - description: 'Taille : Small', - control: { - type: 'boolean', - }, - }, - label: { - control: { - type: 'text', - }, - }, - grey: { - control: { - type: 'boolean', - }, - }, - field: { - description: 'field', - options: ['radio', 'checkbox', 'switch'], - control: { - type: 'select', - }, - }, - }, -} as Meta; - -function getTemplate(args: ArrowBasicStory): string { - const label = args.label; - const s = args.s ? ' mod-S' : ''; - const boxGrey = args.grey ? 'box mod-grey' : ''; - const grey = args.grey ? '' : ' mod-grey'; - const checked = args.checked ? ' checked' : ''; - - if (args.field === 'radio') { - return ` -
-
-
- - -
-
-
- - -
-
-
-
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
-
`; - } else if (args.field === 'checkbox') { - return ` -
-
- - -
-
-
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
-
`; - } else { - return ` -
-
- - -
-
-
Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
-
`; - } -} - -const Template: Story = (args: ArrowBasicStory) => ({ - props: args, - template: getTemplate(args), -}); - -export const Basic = Template.bind({}); -Basic.args = { s: false, label: 'Label', grey: false, field: 'radio', checked: true }; diff --git a/stories/documentation/forms/fields/checkbox/angular/checkboxfield.stories.ts b/stories/documentation/forms/fields/checkbox/angular/checkboxfield.stories.ts new file mode 100644 index 0000000000..e49fbecc91 --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/angular/checkboxfield.stories.ts @@ -0,0 +1,48 @@ +import { CheckboxfieldComponent } from '@lucca-front/ng/forms'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { cleanupTemplate } from 'stories/helpers/stories'; + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/Angular', + component: CheckboxfieldComponent, + decorators: [ + moduleMetadata({ + imports: [CheckboxfieldComponent, FormsModule, ReactiveFormsModule], + }), + ], +} as Meta; + +export const Basic: StoryObj = { + render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState, tooltip }) => { + return { + props: { + example: false, + }, + template: cleanupTemplate(` + + +{{example}}`), + moduleMetadata: { + imports: [CheckboxfieldComponent, FormsModule, BrowserAnimationsModule], + }, + }; + }, + args: { + label: 'Label', + hiddenLabel: false, + required: true, + inlineMessage: 'Helper Text', + inlineMessageState: 'default', + size: 'M', + tooltip: "Je suis un message d'aide", + }, +}; diff --git a/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-disabled.stories.ts b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-disabled.stories.ts new file mode 100644 index 0000000000..b6079e344d --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-disabled.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface CheckboxDisabledStory { +} + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: CheckboxDisabledStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: CheckboxDisabledStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Disabled = Template.bind({}); +Disabled.args = { }; diff --git a/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-invalid.stories.ts b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-invalid.stories.ts new file mode 100644 index 0000000000..6549130d2f --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-invalid.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface CheckboxInvalidStory { +} + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: CheckboxInvalidStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: CheckboxInvalidStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Invalid = Template.bind({}); +Invalid.args = { }; diff --git a/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-mixed.stories.ts b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-mixed.stories.ts new file mode 100644 index 0000000000..ad19d6e56b --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-mixed.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface CheckboxMixedStory { +} + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: CheckboxMixedStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: CheckboxMixedStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Mixed = Template.bind({}); +Mixed.args = { }; diff --git a/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-size.stories.ts b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-size.stories.ts new file mode 100644 index 0000000000..0f1b7d78e4 --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield-size.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface CheckboxSizeStory { +} + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: CheckboxSizeStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: CheckboxSizeStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Size = Template.bind({}); +Size.args = { }; diff --git a/stories/documentation/forms/fields/checkbox/html&css/checkboxfield.stories.ts b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield.stories.ts new file mode 100644 index 0000000000..94e2fa596b --- /dev/null +++ b/stories/documentation/forms/fields/checkbox/html&css/checkboxfield.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface CheckboxBasicStory { +} + +export default { + title: 'Documentation/Forms/Fields/CheckboxField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: CheckboxBasicStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: CheckboxBasicStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Basic = Template.bind({}); +Basic.args = { }; diff --git a/stories/documentation/forms/fields/checkboxfield.stories.ts b/stories/documentation/forms/fields/checkboxfield.stories.ts deleted file mode 100644 index e18a4f0882..0000000000 --- a/stories/documentation/forms/fields/checkboxfield.stories.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { CheckboxfieldComponent } from '@lucca-front/ng/forms'; -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; - -export default { - title: 'Documentation/Forms/Fields/Checkbox Field', - component: CheckboxfieldComponent, - decorators: [ - moduleMetadata({ - imports: [CheckboxfieldComponent, FormsModule, ReactiveFormsModule], - }), - ], -} as Meta; - -export const withNgModel: StoryObj = { - name: 'With NgModel', - render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState }) => { - return { - props: { - example: false, - }, - template: ` - - - -{{example}}`, - moduleMetadata: { - imports: [CheckboxfieldComponent, FormsModule], - }, - }; - }, - args: { - label: 'Label', - hiddenLabel: false, - required: true, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - }, -}; -export const withReactiveForm: StoryObj = { - name: 'With ReactiveForm (and Validators.requiredTrue)', - render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState }) => { - return { - props: { - form: new FormGroup({ - example: new FormControl(false, [Validators.requiredTrue]), - }), - }, - template: ` -
- - -
- -{{form.value.example}}`, - moduleMetadata: { - imports: [CheckboxfieldComponent, ReactiveFormsModule], - }, - }; - }, - args: { - label: 'Label', - required: true, - hiddenLabel: false, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - }, -}; diff --git a/stories/documentation/forms/fields/switch/angular/switchfield.stories.ts b/stories/documentation/forms/fields/switch/angular/switchfield.stories.ts new file mode 100644 index 0000000000..f3a8c28ea5 --- /dev/null +++ b/stories/documentation/forms/fields/switch/angular/switchfield.stories.ts @@ -0,0 +1,48 @@ +import { CheckboxfieldComponent, SwitchfieldComponent } from '@lucca-front/ng/forms'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { cleanupTemplate } from 'stories/helpers/stories'; + +export default { + title: 'Documentation/Forms/Fields/SwitchField/Angular', + component: SwitchfieldComponent, + decorators: [ + moduleMetadata({ + imports: [SwitchfieldComponent, FormsModule, ReactiveFormsModule], + }), + ], +} as Meta; + +export const Basic: StoryObj = { + render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState, tooltip }) => { + return { + props: { + example: false, + }, + template: cleanupTemplate(` + + +{{example}}`), + moduleMetadata: { + imports: [CheckboxfieldComponent, FormsModule, BrowserAnimationsModule], + }, + }; + }, + args: { + label: 'Label', + hiddenLabel: false, + required: true, + inlineMessage: 'Helper Text', + inlineMessageState: 'default', + size: 'M', + tooltip: "Je suis un message d'aide", + }, +}; diff --git a/stories/documentation/forms/fields/switch/html&css/switchfield-disabled.stories.ts b/stories/documentation/forms/fields/switch/html&css/switchfield-disabled.stories.ts new file mode 100644 index 0000000000..a4a54e007e --- /dev/null +++ b/stories/documentation/forms/fields/switch/html&css/switchfield-disabled.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SwitchDisabledStory { +} + +export default { + title: 'Documentation/Forms/Fields/SwitchField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: SwitchDisabledStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: SwitchDisabledStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Disabled = Template.bind({}); +Disabled.args = { }; diff --git a/stories/documentation/forms/fields/switch/html&css/switchfield-invalid.stories.ts b/stories/documentation/forms/fields/switch/html&css/switchfield-invalid.stories.ts new file mode 100644 index 0000000000..f100db044d --- /dev/null +++ b/stories/documentation/forms/fields/switch/html&css/switchfield-invalid.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SwitchInvlidStory { +} + +export default { + title: 'Documentation/Forms/Fields/SwitchField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: SwitchInvlidStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: SwitchInvlidStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Invlid = Template.bind({}); +Invlid.args = { }; diff --git a/stories/documentation/forms/fields/switch/html&css/switchfield-size.stories.ts b/stories/documentation/forms/fields/switch/html&css/switchfield-size.stories.ts new file mode 100644 index 0000000000..98492ed46b --- /dev/null +++ b/stories/documentation/forms/fields/switch/html&css/switchfield-size.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SwitchSizeStory { +} + +export default { + title: 'Documentation/Forms/Fields/SwitchField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: SwitchSizeStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: SwitchSizeStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Size = Template.bind({}); +Size.args = { }; diff --git a/stories/documentation/forms/fields/switch/html&css/switchfield.stories.ts b/stories/documentation/forms/fields/switch/html&css/switchfield.stories.ts new file mode 100644 index 0000000000..4d5958a2a7 --- /dev/null +++ b/stories/documentation/forms/fields/switch/html&css/switchfield.stories.ts @@ -0,0 +1,29 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SwitchBasicStory { +} + +export default { + title: 'Documentation/Forms/Fields/SwitchField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: SwitchBasicStory): string { + return `
+ + + + + +
Helper text
+
`; +} + +const Template: StoryFn = (args: SwitchBasicStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Basic = Template.bind({}); +Basic.args = { }; diff --git a/stories/documentation/forms/fields/switchfield.stories.ts b/stories/documentation/forms/fields/switchfield.stories.ts deleted file mode 100644 index 3a4a5cdb17..0000000000 --- a/stories/documentation/forms/fields/switchfield.stories.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { SwitchfieldComponent } from '@lucca-front/ng/forms'; -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; - -export default { - title: 'Documentation/Forms/Fields/Switch Field', - component: SwitchfieldComponent, - decorators: [ - moduleMetadata({ - imports: [SwitchfieldComponent, FormsModule, ReactiveFormsModule], - }), - ], -} as Meta; - -export const withNgModel: StoryObj = { - name: 'With NgModel', - render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState }) => { - return { - props: { - example: false, - }, - template: ` - - - -{{example}}`, - moduleMetadata: { - imports: [SwitchfieldComponent, FormsModule], - }, - }; - }, - args: { - label: 'Label', - hiddenLabel: false, - required: true, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - }, -}; -export const withReactiveForm: StoryObj = { - name: 'With ReactiveForm (and Validators.requiredTrue)', - render: ({ label, required, hiddenLabel, inlineMessage, size, inlineMessageState }) => { - return { - props: { - form: new FormGroup({ - example: new FormControl(false, [Validators.requiredTrue]), - }), - }, - template: ` -
- - -
- -{{form.value.example}}`, - moduleMetadata: { - imports: [SwitchfieldComponent, ReactiveFormsModule], - }, - }; - }, - args: { - label: 'Label', - required: true, - hiddenLabel: false, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - }, -}; diff --git a/stories/documentation/forms/fields/text/angular/textfield.stories.ts b/stories/documentation/forms/fields/text/angular/textfield.stories.ts new file mode 100644 index 0000000000..942d1c824c --- /dev/null +++ b/stories/documentation/forms/fields/text/angular/textfield.stories.ts @@ -0,0 +1,74 @@ +import { TextfieldComponent } from '@lucca-front/ng/forms'; +import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; +import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { cleanupTemplate } from 'stories/helpers/stories'; + +export default { + title: 'Documentation/Forms/Fields/TextField/Angular', + component: TextfieldComponent, + decorators: [ + moduleMetadata({ + imports: [TextfieldComponent, FormsModule, ReactiveFormsModule, BrowserAnimationsModule], + }), + ], + argTypes: { + tooltip: { + type: 'string', + }, + }, +} as Meta; + +export const Basic: StoryObj = { + render: ({ label, required, hiddenLabel, inlineMessage, size, placeholder, prefix, suffix, inlineMessageState, hasClearer, disabled, tooltip, hasSearchIcon, searchIcon }) => { + return { + props: { + prefix, + suffix, + }, + template: cleanupTemplate(` + + +{{example}}`), + moduleMetadata: { + imports: [TextfieldComponent, FormsModule, BrowserAnimationsModule], + }, + }; + }, + args: { + label: 'Label', + required: true, + hiddenLabel: false, + hasClearer: true, + hasSearchIcon: false, + searchIcon: 'search', + disabled: false, + inlineMessage: 'Helper Text', + inlineMessageState: 'default', + size: 'M', + placeholder: 'Placeholder', + tooltip: "Je suis un message d'aide", + prefix: { + icon: 'dollar', + ariaLabel: 'Dollar', + }, + suffix: { + content: '€/j', + ariaLabel: 'euros par jour', + }, + }, +}; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-disabled.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-disabled.stories.ts new file mode 100644 index 0000000000..dec8d479cb --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-disabled.stories.ts @@ -0,0 +1,30 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldDisabledStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldDisabledStory): string { + return `
+ +
+
+ +
+
+
Helper text
+
`; +} + +const Template: StoryFn = (args: TextfieldDisabledStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Disabled = Template.bind({}); +Disabled.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-info.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-info.stories.ts new file mode 100644 index 0000000000..6461c63a43 --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-info.stories.ts @@ -0,0 +1,32 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldInfoStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldInfoStory): string { + return `
+ +
+
+ +
+
+
Helper text
+
`; +} + +const Template: StoryFn = (args: TextfieldInfoStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Info = Template.bind({}); +Info.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-invalid.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-invalid.stories.ts new file mode 100644 index 0000000000..a31d6c1458 --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-invalid.stories.ts @@ -0,0 +1,30 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldInvalidStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldInvalidStory): string { + return `
+ +
+
+ +
+
+
Error message
+
`; +} + +const Template: StoryFn = (args: TextfieldInvalidStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Invalid = Template.bind({}); +Invalid.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-prefix-suffix.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-prefix-suffix.stories.ts new file mode 100644 index 0000000000..d6e51e8b3a --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-prefix-suffix.stories.ts @@ -0,0 +1,35 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldPrefixSuffixStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldPrefixSuffixStory): string { + return `
+ +
+ + $ + + + €/j + +
+ +
+
+
`; +} + +const Template: StoryFn = (args: TextfieldPrefixSuffixStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const PrefixSuffix = Template.bind({}); +PrefixSuffix.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-required.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-required.stories.ts new file mode 100644 index 0000000000..83c04a401f --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-required.stories.ts @@ -0,0 +1,30 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldRequiredStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldRequiredStory): string { + return `
+ +
+
+ +
+
+
Helper text
+
`; +} + +const Template: StoryFn = (args: TextfieldRequiredStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Required = Template.bind({}); +Required.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-search-clear.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-search-clear.stories.ts new file mode 100644 index 0000000000..2dfd5f3798 --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-search-clear.stories.ts @@ -0,0 +1,36 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldSearchClearStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldSearchClearStory): string { + return `
+ +
+
+ +
+ + +
+
+
+
`; +} + +const Template: StoryFn = (args: TextfieldSearchClearStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const SearchClear = Template.bind({}); +SearchClear.args = {}; diff --git a/stories/documentation/forms/fields/text/html&css/textfield-sizes.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield-sizes.stories.ts new file mode 100644 index 0000000000..a4d5322dbe --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield-sizes.stories.ts @@ -0,0 +1,44 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldSizeStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldSizeStory): string { + return `
+ +
+
+ +
+
+
Helper text
+
+
+ +
+
+ +
+
+
Helper text
+
`; +} + +const Template: StoryFn = (args: TextfieldSizeStory) => ({ + props: args, + template: getTemplate(args), + styles: [ + `.form-field { + margin-bottom: var(--spacings-S); + }`, + ], +}); + +export const Size = Template.bind({}); +Size.args = { }; diff --git a/stories/documentation/forms/fields/text/html&css/textfield.stories.ts b/stories/documentation/forms/fields/text/html&css/textfield.stories.ts new file mode 100644 index 0000000000..20891a77de --- /dev/null +++ b/stories/documentation/forms/fields/text/html&css/textfield.stories.ts @@ -0,0 +1,30 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface TextfieldBasicStory { +} + +export default { + title: 'Documentation/Forms/Fields/TextField/HTML&CSS', + argTypes: { + }, +} as Meta; + +function getTemplate(args: TextfieldBasicStory): string { + return `
+ +
+
+ +
+
+
Helper text
+
`; +} + +const Template: StoryFn = (args: TextfieldBasicStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Basic = Template.bind({}); +Basic.args = { }; diff --git a/stories/documentation/forms/fields/textfield.stories.ts b/stories/documentation/forms/fields/textfield.stories.ts deleted file mode 100644 index b27fad7eb8..0000000000 --- a/stories/documentation/forms/fields/textfield.stories.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { TextfieldComponent } from '@lucca-front/ng/forms'; -import { Meta, moduleMetadata, StoryObj } from '@storybook/angular'; -import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; - -export default { - title: 'Documentation/Forms/Fields/TextField', - component: TextfieldComponent, - decorators: [ - moduleMetadata({ - imports: [TextfieldComponent, FormsModule, ReactiveFormsModule, BrowserAnimationsModule], - }), - ], - argTypes: { - tooltip: { - type: 'string', - }, - }, -} as Meta; - -export const withNgModel: StoryObj = { - name: 'With NgModel', - render: ({ label, required, hiddenLabel, inlineMessage, size, placeholder, prefix, suffix, inlineMessageState, hasClearer, disabled, tooltip, hasSearchIcon, searchIcon }) => { - return { - props: { - prefix, - suffix, - }, - template: ` - - - -{{example}}`, - moduleMetadata: { - imports: [TextfieldComponent, FormsModule], - }, - }; - }, - args: { - label: 'Label', - required: true, - hiddenLabel: false, - hasClearer: true, - hasSearchIcon: false, - searchIcon: 'search', - disabled: false, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - placeholder: 'Placeholder', - tooltip: '', - prefix: { - icon: 'dollar', - ariaLabel: 'Dollar', - }, - suffix: { - content: '€/j', - ariaLabel: 'euros par jour', - }, - }, -}; -export const withReactiveForm: StoryObj = { - name: 'With ReactiveForm', - render: ({ label, required, hiddenLabel, inlineMessage, size, placeholder, prefix, suffix, inlineMessageState, hasClearer }) => { - return { - props: { - form: new FormGroup({ - example: new FormControl({ value: '', disabled: true }, required ? [Validators.required] : []), - }), - prefix, - suffix, - }, - template: ` -
- - -
- -{{form.value.example}}`, - moduleMetadata: { - imports: [TextfieldComponent, ReactiveFormsModule], - }, - }; - }, - args: { - label: 'Label', - required: true, - hiddenLabel: false, - hasClearer: true, - inlineMessage: 'Helper Text', - inlineMessageState: 'default', - size: 'M', - placeholder: 'Placeholder', - prefix: { - content: '$', - ariaLabel: 'Dollar', - }, - suffix: { - content: '€/j', - ariaLabel: 'euros par jour', - }, - }, -}; diff --git a/stories/documentation/forms/select/multi-select.stories.ts b/stories/documentation/forms/select/multi-select.stories.ts index 9986c33ac7..9b0f699290 100644 --- a/stories/documentation/forms/select/multi-select.stories.ts +++ b/stories/documentation/forms/select/multi-select.stories.ts @@ -7,6 +7,18 @@ import { LuSimpleSelectApiV3Directive, LuSimpleSelectApiV4Directive } from '@luc import { LuTooltipModule } from '@lucca-front/ng/tooltip'; import { applicationConfig, Meta, moduleMetadata } from '@storybook/angular'; import { allLegumes, FilterLegumesPipe, generateStory, LuSelectInputStoryComponent } from './select.utils'; +import { HiddenArgType } from 'stories/helpers/common-arg-types'; + +// We have to declare it here to avoid type conflict with autogenerated story type from the generateStory function call. +const hiddenArgTypes = { + expandedPositionStrategy: HiddenArgType, + panelRef: HiddenArgType, + valuesTpl: HiddenArgType, + optionComparer: HiddenArgType, + options: HiddenArgType, + overlayConfig: HiddenArgType, + valueTpl: HiddenArgType, +}; export const Basic = generateStory({ name: 'Basic', @@ -38,7 +50,7 @@ export const Basic = generateStory({ }, }); // Override argTypes to display loading/clearable/disabled/placeholder controls -Basic.argTypes = {}; +Basic.argTypes = hiddenArgTypes; export const WithMultiDisplayer = generateStory({ name: 'With MultiDisplayer', diff --git a/stories/documentation/forms/select/simple-select.stories.ts b/stories/documentation/forms/select/simple-select.stories.ts index b1028a5288..92718221f8 100644 --- a/stories/documentation/forms/select/simple-select.stories.ts +++ b/stories/documentation/forms/select/simple-select.stories.ts @@ -7,7 +7,16 @@ import { LuSimpleSelectApiV3Directive, LuSimpleSelectApiV4Directive } from '@luc import { Meta, applicationConfig, moduleMetadata } from '@storybook/angular'; import { useDocumentationStory } from 'stories/helpers/stories'; import { ILegume, LuSelectInputStoryComponent, allLegumes, generateStory } from './select.utils'; +import { HiddenArgType } from 'stories/helpers/common-arg-types'; +// We have to declare it here to avoid type conflict with autogenerated story type from the generateStory function call. +const hiddenArgTypes = { + optionComparer: HiddenArgType, + options: HiddenArgType, + optionTpl: HiddenArgType, + overlayConfig: HiddenArgType, + valueTpl: HiddenArgType, +}; export const Basic = generateStory({ name: 'Basic', description: '', @@ -33,7 +42,7 @@ export const Basic = generateStory({ }, }); // Override argTypes to display loading/clearable/disabled/placeholder controls -Basic.argTypes = {}; +Basic.argTypes = hiddenArgTypes; export const Minimal = generateStory({ name: 'Minimal', diff --git a/stories/documentation/loaders/skeleton/skeleton-circle.stories.ts b/stories/documentation/loaders/skeleton/skeleton-circle.stories.ts new file mode 100644 index 0000000000..2bb9b13d02 --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-circle.stories.ts @@ -0,0 +1,26 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonCircleStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonCircleStory): string { + return `
+ + + + + + +
`; +} + +const Template: StoryFn = (args: SkeletonCircleStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Circle = Template.bind({}); +Circle.args = {}; diff --git a/stories/documentation/loaders/skeleton/skeleton-dark.stories.ts b/stories/documentation/loaders/skeleton/skeleton-dark.stories.ts new file mode 100644 index 0000000000..3e135c4690 --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-dark.stories.ts @@ -0,0 +1,22 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonDarkStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonDarkStory): string { + return `
+

+ +
`; +} + +const Template: StoryFn = (args: SkeletonDarkStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Dark = Template.bind({}); +Dark.args = {}; diff --git a/stories/documentation/loaders/skeleton/skeleton-square.stories.ts b/stories/documentation/loaders/skeleton/skeleton-square.stories.ts new file mode 100644 index 0000000000..18dd08c1d2 --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-square.stories.ts @@ -0,0 +1,26 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonSquareStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonSquareStory): string { + return `
+ + + + + + +
`; +} + +const Template: StoryFn = (args: SkeletonSquareStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Square = Template.bind({}); +Square.args = {}; diff --git a/stories/documentation/loaders/skeleton/skeleton-texts.stories.ts b/stories/documentation/loaders/skeleton/skeleton-texts.stories.ts new file mode 100644 index 0000000000..93453be155 --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-texts.stories.ts @@ -0,0 +1,26 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonTextsStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonTextsStory): string { + return `
+ + + + + + +
`; +} + +const Template: StoryFn = (args: SkeletonTextsStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Texts = Template.bind({}); +Texts.args = {}; diff --git a/stories/documentation/loaders/skeleton/skeleton-titles.stories.ts b/stories/documentation/loaders/skeleton/skeleton-titles.stories.ts new file mode 100644 index 0000000000..3ee2fc7902 --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-titles.stories.ts @@ -0,0 +1,24 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonTitlesStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonTitlesStory): string { + return `
+

+

+

+

+
`; +} + +const Template: StoryFn = (args: SkeletonTitlesStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Titles = Template.bind({}); +Titles.args = {}; diff --git a/stories/documentation/loaders/skeleton/skeleton-width.stories.ts b/stories/documentation/loaders/skeleton/skeleton-width.stories.ts new file mode 100644 index 0000000000..2fde9b803a --- /dev/null +++ b/stories/documentation/loaders/skeleton/skeleton-width.stories.ts @@ -0,0 +1,26 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface SkeletonWidthStory {} + +export default { + title: 'Documentation/Loaders/Skeleton', +} as Meta; + +function getTemplate(args: SkeletonWidthStory): string { + return `
+ + + + + + +
`; +} + +const Template: StoryFn = (args: SkeletonWidthStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Width = Template.bind({}); +Width.args = {}; diff --git a/stories/documentation/navigation/vertical-navigation/vertical-navigation-basic.stories.ts b/stories/documentation/navigation/vertical-navigation/vertical-navigation-basic.stories.ts index abc027d2a9..5bf0dabb87 100644 --- a/stories/documentation/navigation/vertical-navigation/vertical-navigation-basic.stories.ts +++ b/stories/documentation/navigation/vertical-navigation/vertical-navigation-basic.stories.ts @@ -29,7 +29,7 @@ function getTemplate(args: VerticalNavigationBasicStory): string { Item
  • - Disabled item + Item
  • @@ -40,7 +40,7 @@ function getTemplate(args: VerticalNavigationBasicStory): string { Item
  • - Disabled item + Item
  • `; @@ -52,4 +52,4 @@ const Template: Story = (args: VerticalNavigationB }); export const Basic = Template.bind({}); -Basic.args = { disabled: false }; +Basic.args = { }; diff --git a/stories/documentation/navigation/vertical-navigation/vertical-navigation-disabled.stories.ts b/stories/documentation/navigation/vertical-navigation/vertical-navigation-disabled.stories.ts new file mode 100644 index 0000000000..bb82c798eb --- /dev/null +++ b/stories/documentation/navigation/vertical-navigation/vertical-navigation-disabled.stories.ts @@ -0,0 +1,55 @@ +import { Meta, Story } from '@storybook/angular'; + +interface VerticalNavigationDisabledStory { +} + +export default { + title: 'Documentation/Navigation/VerticalNavigation/Disabled', +} as Meta; + +function getTemplate(args: VerticalNavigationDisabledStory): string { + return ``; +} + +const Template: Story = (args: VerticalNavigationDisabledStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Disabled = Template.bind({}); +Disabled.args = { }; diff --git a/stories/documentation/skeleton/skeleton-basic.stories.ts b/stories/documentation/skeleton/skeleton-basic.stories.ts deleted file mode 100644 index bee88008ba..0000000000 --- a/stories/documentation/skeleton/skeleton-basic.stories.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Meta, StoryFn } from '@storybook/angular'; - -interface SkeletonBasicStory {} - -export default { - title: 'Documentation/Skeleton/Basic', -} as Meta; - -function getTemplate(args: SkeletonBasicStory): string { - return ` -
    -

    .u-text* Skeletons

    - - - - - - -

    h* Skeletons

    -

    -

    -

    -

    -
    -
    -

    .u-h* Skeletons

    - - - - - - -
    - `; -} - -const Template: StoryFn = (args: SkeletonBasicStory) => ({ - props: args, - template: getTemplate(args), -}); - -export const Basic = Template.bind({}); -Basic.args = {}; diff --git a/stories/documentation/skeleton/skeleton-shapes.stories.ts b/stories/documentation/skeleton/skeleton-shapes.stories.ts deleted file mode 100644 index 1815359ec6..0000000000 --- a/stories/documentation/skeleton/skeleton-shapes.stories.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Meta, StoryFn } from '@storybook/angular'; - -interface SkeletonShapesStory {} - -export default { - title: 'Documentation/Skeleton/Shapes', -} as Meta; - -function getTemplate(args: SkeletonShapesStory): string { - return ` -
    -

    Square Skeletons

    -
    - - - - - - -
    -

    Circle Skeletons

    -
    - - - - - - -
    -
    - `; -} - -const Template: StoryFn = (args: SkeletonShapesStory) => ({ - props: args, - template: getTemplate(args), -}); - -export const Basic = Template.bind({}); -Basic.args = {}; diff --git a/stories/documentation/structure/box/box-arrow.stories.ts b/stories/documentation/structure/box/box-arrow.stories.ts new file mode 100644 index 0000000000..2f81082dd3 --- /dev/null +++ b/stories/documentation/structure/box/box-arrow.stories.ts @@ -0,0 +1,108 @@ +import { Meta, Story } from '@storybook/angular'; + +interface ArrowBasicStory { + s: boolean; + label: Text; + grey: boolean; + field: string; + checked: boolean; +} + +export default { + title: 'Documentation/Structure/Box/Arrow', + argTypes: { + checked: { + control: { + type: 'boolean', + }, + }, + s: { + description: 'Taille : Small', + control: { + type: 'boolean', + }, + }, + label: { + control: { + type: 'text', + }, + }, + grey: { + control: { + type: 'boolean', + }, + }, + field: { + description: 'field', + options: ['radio', 'checkbox', 'switch'], + control: { + type: 'select', + }, + }, + }, +} as Meta; + +function getTemplate(args: ArrowBasicStory): string { + const label = args.label; + const s = args.s ? ' mod-S' : ''; + const grey = args.grey ? ' mod-grey' : ' '; + const checked = args.checked ? ' checked' : ''; + + if (args.field === 'radio') { + return `
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
    `; + } else if (args.field === 'checkbox') { + return `
    + + + + + +
    +
    +
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
    `; + } else { + return `
    + + + + + +
    +
    +
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Nam illo nostrum tenetur expedita. Accusantium cumque nisi excepturi eius corporis, iusto quaerat temporibus dolorum necessitatibus laboriosam quidem quibusdam quae aperiam! Vitae!
    `; + } +} + +const Template: Story = (args: ArrowBasicStory) => ({ + props: args, + template: getTemplate(args), +}); + +export const Basic = Template.bind({}); +Basic.args = { s: false, label: 'Label', grey: true, field: 'radio', checked: true }; diff --git a/stories/documentation/feedback/box/box-basic.stories.ts b/stories/documentation/structure/box/box-basic.stories.ts similarity index 95% rename from stories/documentation/feedback/box/box-basic.stories.ts rename to stories/documentation/structure/box/box-basic.stories.ts index 2dd126e4fa..fcd99d433f 100644 --- a/stories/documentation/feedback/box/box-basic.stories.ts +++ b/stories/documentation/structure/box/box-basic.stories.ts @@ -5,7 +5,7 @@ interface BoxBasicStory { } export default { - title: 'Documentation/Feedback/Box/Basic', + title: 'Documentation/Structure/Box/Basic', argTypes: { grey: { control: { diff --git a/stories/documentation/feedback/box/box-killable.stories.ts b/stories/documentation/structure/box/box-killable.stories.ts similarity index 96% rename from stories/documentation/feedback/box/box-killable.stories.ts rename to stories/documentation/structure/box/box-killable.stories.ts index 024b96aa08..bd94ee0a1d 100644 --- a/stories/documentation/feedback/box/box-killable.stories.ts +++ b/stories/documentation/structure/box/box-killable.stories.ts @@ -5,7 +5,7 @@ interface BoxKillableStory { } export default { - title: 'Documentation/Feedback/Box/Killable', + title: 'Documentation/Structure/Box/Killable', argTypes: { grey: { control: { diff --git a/stories/documentation/feedback/box/box-toggle.stories.ts b/stories/documentation/structure/box/box-toggle.stories.ts similarity index 96% rename from stories/documentation/feedback/box/box-toggle.stories.ts rename to stories/documentation/structure/box/box-toggle.stories.ts index 343f1093cd..c4934f98c6 100644 --- a/stories/documentation/feedback/box/box-toggle.stories.ts +++ b/stories/documentation/structure/box/box-toggle.stories.ts @@ -5,7 +5,7 @@ interface BoxToggleStory { } export default { - title: 'Documentation/Feedback/Box/Toggle', + title: 'Documentation/Structure/Box/Toggle', argTypes: { grey: { control: { diff --git a/stories/documentation/texts/icons/icon-angular.stories.ts b/stories/documentation/texts/icons/Angular/icon-angular.stories.ts similarity index 100% rename from stories/documentation/texts/icons/icon-angular.stories.ts rename to stories/documentation/texts/icons/Angular/icon-angular.stories.ts diff --git a/stories/documentation/texts/icons/HTML&CSS/icon-basic.stories.ts b/stories/documentation/texts/icons/HTML&CSS/icon-basic.stories.ts new file mode 100644 index 0000000000..8e98be5163 --- /dev/null +++ b/stories/documentation/texts/icons/HTML&CSS/icon-basic.stories.ts @@ -0,0 +1,19 @@ +import { Meta, StoryFn } from '@storybook/angular'; + +interface IconBasicStory {} + +export default { + title: 'Documentation/Texts/Icons/HTML&CSS', +} as Meta; + +function getTemplate(args: IconBasicStory): string { + return `