shipscreens 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -8
- package/bin/shipscreens.js +223 -28
- package/cli/assets/demo-screens/01.png +0 -0
- package/cli/assets/demo-screens/02.png +0 -0
- package/cli/assets/demo-screens/03.png +0 -0
- package/cli/assets/demo-screens/04.png +0 -0
- package/cli/commands/build.js +27 -27
- package/cli/schema.js +59 -20
- package/dist/app/assets/{AgentCli-8e28laT4.js → AgentCli-FWNCO1pb.js} +5 -5
- package/dist/app/assets/AgentCli-FWNCO1pb.js.map +1 -0
- package/dist/app/assets/App-yU7CFXCv.js +13 -0
- package/dist/app/assets/App-yU7CFXCv.js.map +1 -0
- package/dist/app/assets/{AppReviewAso-OLwc4Rw_.js → AppReviewAso-BYfaP1Lu.js} +3 -3
- package/dist/{assets/AppReviewAso-OLwc4Rw_.js.map → app/assets/AppReviewAso-BYfaP1Lu.js.map} +1 -1
- package/dist/app/assets/{Cancelled-BoeZQa1S.js → Cancelled-66ixTUrm.js} +2 -2
- package/dist/app/assets/{Cancelled-BoeZQa1S.js.map → Cancelled-66ixTUrm.js.map} +1 -1
- package/dist/app/assets/CliPreflightCard-D7utpFux.js +2 -0
- package/dist/app/assets/{CliPreflightCard-CxYyogdF.js.map → CliPreflightCard-D7utpFux.js.map} +1 -1
- package/dist/app/assets/CopyButton-CmVmSaYn.js +2 -0
- package/dist/app/assets/CopyButton-CmVmSaYn.js.map +1 -0
- package/dist/app/assets/{FastlaneScreenshots-CFT6IiRb.js → FastlaneScreenshots-CRMcetq-.js} +4 -4
- package/dist/{assets/FastlaneScreenshots-CFT6IiRb.js.map → app/assets/FastlaneScreenshots-CRMcetq-.js.map} +1 -1
- package/dist/app/assets/{FirstExport-B_UDacZm.js → FirstExport-C0WgL4Hl.js} +3 -3
- package/dist/{assets/FirstExport-B_UDacZm.js.map → app/assets/FirstExport-C0WgL4Hl.js.map} +1 -1
- package/dist/app/assets/{FivePanelFramework-C1z_xUbe.js → FivePanelFramework-BwCRmXIK.js} +3 -3
- package/dist/{assets/FivePanelFramework-C1z_xUbe.js.map → app/assets/FivePanelFramework-BwCRmXIK.js.map} +1 -1
- package/dist/app/assets/{ForgotPassword-ZQ8U3ejz.js → ForgotPassword-B9_si1tH.js} +2 -2
- package/dist/{assets/ForgotPassword-ZQ8U3ejz.js.map → app/assets/ForgotPassword-B9_si1tH.js.map} +1 -1
- package/dist/app/assets/Landing-s1ni1n-7.js +2 -0
- package/dist/app/assets/Landing-s1ni1n-7.js.map +1 -0
- package/dist/app/assets/{LanguageSwitcher-D93nCuuR.js → LanguageSwitcher-BD9N-dla.js} +2 -2
- package/dist/{assets/LanguageSwitcher-D93nCuuR.js.map → app/assets/LanguageSwitcher-BD9N-dla.js.map} +1 -1
- package/dist/app/assets/{Legal-Koe7vi6H.js → Legal-D3cAXQXw.js} +2 -2
- package/dist/app/assets/{Legal-Koe7vi6H.js.map → Legal-D3cAXQXw.js.map} +1 -1
- package/dist/app/assets/{NotFound-CfY31vMZ.js → NotFound-ClV-6RmP.js} +2 -2
- package/dist/app/assets/{NotFound-CfY31vMZ.js.map → NotFound-ClV-6RmP.js.map} +1 -1
- package/dist/app/assets/{Privacy-CaHf2UM7.js → Privacy-DfxgWwC3.js} +2 -2
- package/dist/{assets/Privacy-CaHf2UM7.js.map → app/assets/Privacy-DfxgWwC3.js.map} +1 -1
- package/dist/app/assets/{SignIn-Cyi2_-Mn.js → SignIn-ghQCKcPe.js} +2 -2
- package/dist/app/assets/{SignIn-Cyi2_-Mn.js.map → SignIn-ghQCKcPe.js.map} +1 -1
- package/dist/app/assets/{SignUp-C9QH5po_.js → SignUp-BKB87hd4.js} +2 -2
- package/dist/app/assets/{SignUp-C9QH5po_.js.map → SignUp-BKB87hd4.js.map} +1 -1
- package/dist/app/assets/SiteHeader-DxsqNPnt.js +2 -0
- package/dist/app/assets/SiteHeader-DxsqNPnt.js.map +1 -0
- package/dist/app/assets/{StickyMobileCta-uyWGVhdc.js → StickyMobileCta-C_x2pUIF.js} +2 -2
- package/dist/app/assets/{StickyMobileCta-uyWGVhdc.js.map → StickyMobileCta-C_x2pUIF.js.map} +1 -1
- package/dist/{assets/StoreAssetsPipeline-BJlnD3kD.js → app/assets/StoreAssetsPipeline-4hXRONUd.js} +3 -3
- package/dist/app/assets/{StoreAssetsPipeline-BJlnD3kD.js.map → StoreAssetsPipeline-4hXRONUd.js.map} +1 -1
- package/dist/app/assets/{Success-B7k7FvJj.js → Success-819qvzmp.js} +2 -2
- package/dist/app/assets/{Success-B7k7FvJj.js.map → Success-819qvzmp.js.map} +1 -1
- package/dist/app/assets/{Terms-DgJWOeUD.js → Terms-7k3nA4SU.js} +2 -2
- package/dist/app/assets/{Terms-DgJWOeUD.js.map → Terms-7k3nA4SU.js.map} +1 -1
- package/dist/app/assets/{ToolsIndex-xMPoFom9.js → ToolsIndex-CzrxymnM.js} +3 -3
- package/dist/{assets/ToolsIndex-xMPoFom9.js.map → app/assets/ToolsIndex-CzrxymnM.js.map} +1 -1
- package/dist/app/assets/{WorkloadCalculator-Bdt6qPR3.js → WorkloadCalculator-D2TuKS4B.js} +4 -4
- package/dist/app/assets/{WorkloadCalculator-Bdt6qPR3.js.map → WorkloadCalculator-D2TuKS4B.js.map} +1 -1
- package/dist/app/assets/{calculator-CWfp5Day.js → calculator-CiqKFdRp.js} +2 -2
- package/dist/app/assets/{calculator-CWfp5Day.js.map → calculator-CiqKFdRp.js.map} +1 -1
- package/dist/app/assets/chevron-down-_xIkRLaA.js +2 -0
- package/dist/app/assets/{chevron-down-DbSAem1L.js.map → chevron-down-_xIkRLaA.js.map} +1 -1
- package/dist/app/assets/{clipboard-copy-DgTgnK84.js → clipboard-copy-DCJioqIc.js} +2 -2
- package/dist/app/assets/{clipboard-copy-DgTgnK84.js.map → clipboard-copy-DCJioqIc.js.map} +1 -1
- package/dist/app/assets/{copy-C9t_FzCZ.js → copy-AQdWJCcs.js} +2 -2
- package/dist/app/assets/{copy-C9t_FzCZ.js.map → copy-AQdWJCcs.js.map} +1 -1
- package/dist/app/assets/{crop-B7IxIx6D.js → crop-DOMVp18h.js} +2 -2
- package/dist/app/assets/{crop-B7IxIx6D.js.map → crop-DOMVp18h.js.map} +1 -1
- package/dist/app/assets/{download-65Zuvgwm.js → download-D5RbyXDm.js} +2 -2
- package/dist/app/assets/{download-65Zuvgwm.js.map → download-D5RbyXDm.js.map} +1 -1
- package/dist/app/assets/{eye-ouNo8Nv5.js → eye-CLcZi_uk.js} +2 -2
- package/dist/{assets/eye-ouNo8Nv5.js.map → app/assets/eye-CLcZi_uk.js.map} +1 -1
- package/dist/app/assets/{grid-3x3-U1Nk_ppf.js → grid-3x3-AKmIrhzv.js} +2 -2
- package/dist/{assets/grid-3x3-U1Nk_ppf.js.map → app/assets/grid-3x3-AKmIrhzv.js.map} +1 -1
- package/dist/app/assets/hero/demo-25s-poster.jpg +0 -0
- package/dist/app/assets/hero/demo-25s.mp4 +0 -0
- package/dist/app/assets/hero/demo-25s.webm +0 -0
- package/dist/app/assets/hero/demo-poster.jpg +0 -0
- package/dist/app/assets/hero/demo.mp4 +0 -0
- package/dist/app/assets/hero/demo.webm +0 -0
- package/dist/{assets/index-B8Y8Y-Mi.js → app/assets/index-Bqv2NztY.js} +6 -6
- package/dist/app/assets/index-Bqv2NztY.js.map +1 -0
- package/dist/{assets/index-hyiQFYGv.css → app/assets/index-DGVMa-P7.css} +1 -1
- package/dist/app/assets/{layout-grid-X9Sgull2.js → layout-grid-CpGXUPMR.js} +2 -2
- package/dist/app/assets/{layout-grid-X9Sgull2.js.map → layout-grid-CpGXUPMR.js.map} +1 -1
- package/dist/app/assets/proof/output-01.png +0 -0
- package/dist/app/assets/proof/output-02.png +0 -0
- package/dist/app/assets/proof/output-03.png +0 -0
- package/dist/app/assets/proof/output-04.png +0 -0
- package/dist/app/assets/{rocket-BjOXauLe.js → rocket-IzRFv1aW.js} +2 -2
- package/dist/app/assets/{rocket-BjOXauLe.js.map → rocket-IzRFv1aW.js.map} +1 -1
- package/dist/app/assets/{shield-check-CFNhE_aD.js → shield-check-CngdN3zn.js} +2 -2
- package/dist/{assets/shield-check-CFNhE_aD.js.map → app/assets/shield-check-CngdN3zn.js.map} +1 -1
- package/dist/app/assets/{signIn-CVoSzqCz.js → signIn-Cn6FaQYi.js} +2 -2
- package/dist/{assets/signIn-CVoSzqCz.js.map → app/assets/signIn-Cn6FaQYi.js.map} +1 -1
- package/dist/app/assets/{smartphone-BcQB9gIh.js → smartphone-CpNG_Pfk.js} +2 -2
- package/dist/app/assets/{smartphone-BcQB9gIh.js.map → smartphone-CpNG_Pfk.js.map} +1 -1
- package/dist/app/assets/{terminal-CGhryJds.js → terminal-BbBESfoU.js} +2 -2
- package/dist/{assets/terminal-CGhryJds.js.map → app/assets/terminal-BbBESfoU.js.map} +1 -1
- package/dist/{assets/useAuth-lZZC20Tl.js → app/assets/useAuth-3WWZ3GCD.js} +2 -2
- package/dist/app/assets/{useAuth-lZZC20Tl.js.map → useAuth-3WWZ3GCD.js.map} +1 -1
- package/dist/app/index.html +2 -2
- package/dist/assets/{AgentCli-8e28laT4.js → AgentCli-FWNCO1pb.js} +5 -5
- package/dist/assets/AgentCli-FWNCO1pb.js.map +1 -0
- package/dist/assets/App-yU7CFXCv.js +13 -0
- package/dist/assets/App-yU7CFXCv.js.map +1 -0
- package/dist/assets/{AppReviewAso-OLwc4Rw_.js → AppReviewAso-BYfaP1Lu.js} +3 -3
- package/dist/{app/assets/AppReviewAso-OLwc4Rw_.js.map → assets/AppReviewAso-BYfaP1Lu.js.map} +1 -1
- package/dist/assets/{Cancelled-BoeZQa1S.js → Cancelled-66ixTUrm.js} +2 -2
- package/dist/assets/{Cancelled-BoeZQa1S.js.map → Cancelled-66ixTUrm.js.map} +1 -1
- package/dist/assets/CliPreflightCard-D7utpFux.js +2 -0
- package/dist/assets/{CliPreflightCard-CxYyogdF.js.map → CliPreflightCard-D7utpFux.js.map} +1 -1
- package/dist/assets/CopyButton-CmVmSaYn.js +2 -0
- package/dist/assets/CopyButton-CmVmSaYn.js.map +1 -0
- package/dist/assets/{FastlaneScreenshots-CFT6IiRb.js → FastlaneScreenshots-CRMcetq-.js} +4 -4
- package/dist/{app/assets/FastlaneScreenshots-CFT6IiRb.js.map → assets/FastlaneScreenshots-CRMcetq-.js.map} +1 -1
- package/dist/assets/{FirstExport-B_UDacZm.js → FirstExport-C0WgL4Hl.js} +3 -3
- package/dist/{app/assets/FirstExport-B_UDacZm.js.map → assets/FirstExport-C0WgL4Hl.js.map} +1 -1
- package/dist/assets/{FivePanelFramework-C1z_xUbe.js → FivePanelFramework-BwCRmXIK.js} +3 -3
- package/dist/{app/assets/FivePanelFramework-C1z_xUbe.js.map → assets/FivePanelFramework-BwCRmXIK.js.map} +1 -1
- package/dist/assets/{ForgotPassword-ZQ8U3ejz.js → ForgotPassword-B9_si1tH.js} +2 -2
- package/dist/{app/assets/ForgotPassword-ZQ8U3ejz.js.map → assets/ForgotPassword-B9_si1tH.js.map} +1 -1
- package/dist/assets/Landing-s1ni1n-7.js +2 -0
- package/dist/assets/Landing-s1ni1n-7.js.map +1 -0
- package/dist/assets/{LanguageSwitcher-D93nCuuR.js → LanguageSwitcher-BD9N-dla.js} +2 -2
- package/dist/{app/assets/LanguageSwitcher-D93nCuuR.js.map → assets/LanguageSwitcher-BD9N-dla.js.map} +1 -1
- package/dist/assets/{Legal-Koe7vi6H.js → Legal-D3cAXQXw.js} +2 -2
- package/dist/assets/{Legal-Koe7vi6H.js.map → Legal-D3cAXQXw.js.map} +1 -1
- package/dist/assets/{NotFound-CfY31vMZ.js → NotFound-ClV-6RmP.js} +2 -2
- package/dist/assets/{NotFound-CfY31vMZ.js.map → NotFound-ClV-6RmP.js.map} +1 -1
- package/dist/assets/{Privacy-CaHf2UM7.js → Privacy-DfxgWwC3.js} +2 -2
- package/dist/{app/assets/Privacy-CaHf2UM7.js.map → assets/Privacy-DfxgWwC3.js.map} +1 -1
- package/dist/assets/{SignIn-Cyi2_-Mn.js → SignIn-ghQCKcPe.js} +2 -2
- package/dist/assets/{SignIn-Cyi2_-Mn.js.map → SignIn-ghQCKcPe.js.map} +1 -1
- package/dist/assets/{SignUp-C9QH5po_.js → SignUp-BKB87hd4.js} +2 -2
- package/dist/assets/{SignUp-C9QH5po_.js.map → SignUp-BKB87hd4.js.map} +1 -1
- package/dist/assets/SiteHeader-DxsqNPnt.js +2 -0
- package/dist/assets/SiteHeader-DxsqNPnt.js.map +1 -0
- package/dist/assets/{StickyMobileCta-uyWGVhdc.js → StickyMobileCta-C_x2pUIF.js} +2 -2
- package/dist/assets/{StickyMobileCta-uyWGVhdc.js.map → StickyMobileCta-C_x2pUIF.js.map} +1 -1
- package/dist/{app/assets/StoreAssetsPipeline-BJlnD3kD.js → assets/StoreAssetsPipeline-4hXRONUd.js} +3 -3
- package/dist/assets/{StoreAssetsPipeline-BJlnD3kD.js.map → StoreAssetsPipeline-4hXRONUd.js.map} +1 -1
- package/dist/assets/{Success-B7k7FvJj.js → Success-819qvzmp.js} +2 -2
- package/dist/assets/{Success-B7k7FvJj.js.map → Success-819qvzmp.js.map} +1 -1
- package/dist/assets/{Terms-DgJWOeUD.js → Terms-7k3nA4SU.js} +2 -2
- package/dist/assets/{Terms-DgJWOeUD.js.map → Terms-7k3nA4SU.js.map} +1 -1
- package/dist/assets/{ToolsIndex-xMPoFom9.js → ToolsIndex-CzrxymnM.js} +3 -3
- package/dist/{app/assets/ToolsIndex-xMPoFom9.js.map → assets/ToolsIndex-CzrxymnM.js.map} +1 -1
- package/dist/assets/{WorkloadCalculator-Bdt6qPR3.js → WorkloadCalculator-D2TuKS4B.js} +4 -4
- package/dist/assets/{WorkloadCalculator-Bdt6qPR3.js.map → WorkloadCalculator-D2TuKS4B.js.map} +1 -1
- package/dist/assets/{calculator-CWfp5Day.js → calculator-CiqKFdRp.js} +2 -2
- package/dist/assets/{calculator-CWfp5Day.js.map → calculator-CiqKFdRp.js.map} +1 -1
- package/dist/assets/chevron-down-_xIkRLaA.js +2 -0
- package/dist/assets/{chevron-down-DbSAem1L.js.map → chevron-down-_xIkRLaA.js.map} +1 -1
- package/dist/assets/{clipboard-copy-DgTgnK84.js → clipboard-copy-DCJioqIc.js} +2 -2
- package/dist/assets/{clipboard-copy-DgTgnK84.js.map → clipboard-copy-DCJioqIc.js.map} +1 -1
- package/dist/assets/{copy-C9t_FzCZ.js → copy-AQdWJCcs.js} +2 -2
- package/dist/assets/{copy-C9t_FzCZ.js.map → copy-AQdWJCcs.js.map} +1 -1
- package/dist/assets/{crop-B7IxIx6D.js → crop-DOMVp18h.js} +2 -2
- package/dist/assets/{crop-B7IxIx6D.js.map → crop-DOMVp18h.js.map} +1 -1
- package/dist/assets/{download-65Zuvgwm.js → download-D5RbyXDm.js} +2 -2
- package/dist/assets/{download-65Zuvgwm.js.map → download-D5RbyXDm.js.map} +1 -1
- package/dist/assets/{eye-ouNo8Nv5.js → eye-CLcZi_uk.js} +2 -2
- package/dist/{app/assets/eye-ouNo8Nv5.js.map → assets/eye-CLcZi_uk.js.map} +1 -1
- package/dist/assets/{grid-3x3-U1Nk_ppf.js → grid-3x3-AKmIrhzv.js} +2 -2
- package/dist/{app/assets/grid-3x3-U1Nk_ppf.js.map → assets/grid-3x3-AKmIrhzv.js.map} +1 -1
- package/dist/assets/hero/demo-25s-poster.jpg +0 -0
- package/dist/assets/hero/demo-25s.mp4 +0 -0
- package/dist/assets/hero/demo-25s.webm +0 -0
- package/dist/assets/hero/demo-poster.jpg +0 -0
- package/dist/assets/hero/demo.mp4 +0 -0
- package/dist/assets/hero/demo.webm +0 -0
- package/dist/{app/assets/index-B8Y8Y-Mi.js → assets/index-Bqv2NztY.js} +6 -6
- package/dist/assets/index-Bqv2NztY.js.map +1 -0
- package/dist/{app/assets/index-hyiQFYGv.css → assets/index-DGVMa-P7.css} +1 -1
- package/dist/assets/{layout-grid-X9Sgull2.js → layout-grid-CpGXUPMR.js} +2 -2
- package/dist/assets/{layout-grid-X9Sgull2.js.map → layout-grid-CpGXUPMR.js.map} +1 -1
- package/dist/assets/proof/output-01.png +0 -0
- package/dist/assets/proof/output-02.png +0 -0
- package/dist/assets/proof/output-03.png +0 -0
- package/dist/assets/proof/output-04.png +0 -0
- package/dist/assets/{rocket-BjOXauLe.js → rocket-IzRFv1aW.js} +2 -2
- package/dist/assets/{rocket-BjOXauLe.js.map → rocket-IzRFv1aW.js.map} +1 -1
- package/dist/assets/{shield-check-CFNhE_aD.js → shield-check-CngdN3zn.js} +2 -2
- package/dist/{app/assets/shield-check-CFNhE_aD.js.map → assets/shield-check-CngdN3zn.js.map} +1 -1
- package/dist/assets/{signIn-CVoSzqCz.js → signIn-Cn6FaQYi.js} +2 -2
- package/dist/{app/assets/signIn-CVoSzqCz.js.map → assets/signIn-Cn6FaQYi.js.map} +1 -1
- package/dist/assets/{smartphone-BcQB9gIh.js → smartphone-CpNG_Pfk.js} +2 -2
- package/dist/assets/{smartphone-BcQB9gIh.js.map → smartphone-CpNG_Pfk.js.map} +1 -1
- package/dist/assets/{terminal-CGhryJds.js → terminal-BbBESfoU.js} +2 -2
- package/dist/{app/assets/terminal-CGhryJds.js.map → assets/terminal-BbBESfoU.js.map} +1 -1
- package/dist/{app/assets/useAuth-lZZC20Tl.js → assets/useAuth-3WWZ3GCD.js} +2 -2
- package/dist/assets/{useAuth-lZZC20Tl.js.map → useAuth-3WWZ3GCD.js.map} +1 -1
- package/dist/cancelled/index.html +2 -2
- package/dist/forgot-password/index.html +2 -2
- package/dist/index.html +2 -2
- package/dist/legal/index.html +2 -2
- package/dist/privacy/index.html +2 -2
- package/dist/signin/index.html +2 -2
- package/dist/signup/index.html +2 -2
- package/dist/sitemap.xml +0 -4
- package/dist/success/index.html +2 -2
- package/dist/terms/index.html +2 -2
- package/dist/tools/5-panel-screenshot-framework/index.html +2 -2
- package/dist/tools/agent-cli/index.html +2 -2
- package/dist/tools/app-review-aso/index.html +2 -2
- package/dist/tools/fastlane-screenshots/index.html +2 -2
- package/dist/tools/first-export/index.html +2 -2
- package/dist/tools/index.html +2 -2
- package/dist/tools/screenshot-workload-calculator/index.html +2 -2
- package/dist/tools/store-assets-pipeline/index.html +2 -2
- package/package.json +3 -3
- package/templates/agent/agent-prompt.txt +8 -0
- package/dist/app/assets/AgentCli-8e28laT4.js.map +0 -1
- package/dist/app/assets/App-DU0xew0e.js +0 -13
- package/dist/app/assets/App-DU0xew0e.js.map +0 -1
- package/dist/app/assets/CliPreflightCard-CxYyogdF.js +0 -2
- package/dist/app/assets/CopyButton-CGfuSJtU.js +0 -2
- package/dist/app/assets/CopyButton-CGfuSJtU.js.map +0 -1
- package/dist/app/assets/Landing-DAIP71DD.js +0 -2
- package/dist/app/assets/Landing-DAIP71DD.js.map +0 -1
- package/dist/app/assets/Pricing-BQwtFVbj.js +0 -2
- package/dist/app/assets/Pricing-BQwtFVbj.js.map +0 -1
- package/dist/app/assets/SiteHeader-Dj3gDOnR.js +0 -2
- package/dist/app/assets/SiteHeader-Dj3gDOnR.js.map +0 -1
- package/dist/app/assets/check-BWCiUZ-C.js +0 -2
- package/dist/app/assets/check-BWCiUZ-C.js.map +0 -1
- package/dist/app/assets/chevron-down-DbSAem1L.js +0 -2
- package/dist/app/assets/circle-check-CeakjiXC.js +0 -2
- package/dist/app/assets/circle-check-CeakjiXC.js.map +0 -1
- package/dist/app/assets/hero/cli-build-tree-15s.mp4 +0 -0
- package/dist/app/assets/hero/cli-build-tree-15s.webm +0 -0
- package/dist/app/assets/hero/cli-build-tree-25s.mp4 +0 -0
- package/dist/app/assets/hero/cli-build-tree-25s.webm +0 -0
- package/dist/app/assets/hero/cli-build-tree-poster.png +0 -0
- package/dist/app/assets/hero/demo.gif +0 -0
- package/dist/app/assets/index-B8Y8Y-Mi.js.map +0 -1
- package/dist/assets/AgentCli-8e28laT4.js.map +0 -1
- package/dist/assets/App-DU0xew0e.js +0 -13
- package/dist/assets/App-DU0xew0e.js.map +0 -1
- package/dist/assets/CliPreflightCard-CxYyogdF.js +0 -2
- package/dist/assets/CopyButton-CGfuSJtU.js +0 -2
- package/dist/assets/CopyButton-CGfuSJtU.js.map +0 -1
- package/dist/assets/Landing-DAIP71DD.js +0 -2
- package/dist/assets/Landing-DAIP71DD.js.map +0 -1
- package/dist/assets/Pricing-BQwtFVbj.js +0 -2
- package/dist/assets/Pricing-BQwtFVbj.js.map +0 -1
- package/dist/assets/SiteHeader-Dj3gDOnR.js +0 -2
- package/dist/assets/SiteHeader-Dj3gDOnR.js.map +0 -1
- package/dist/assets/check-BWCiUZ-C.js +0 -2
- package/dist/assets/check-BWCiUZ-C.js.map +0 -1
- package/dist/assets/chevron-down-DbSAem1L.js +0 -2
- package/dist/assets/circle-check-CeakjiXC.js +0 -2
- package/dist/assets/circle-check-CeakjiXC.js.map +0 -1
- package/dist/assets/hero/cli-build-tree-15s.mp4 +0 -0
- package/dist/assets/hero/cli-build-tree-15s.webm +0 -0
- package/dist/assets/hero/cli-build-tree-25s.mp4 +0 -0
- package/dist/assets/hero/cli-build-tree-25s.webm +0 -0
- package/dist/assets/hero/cli-build-tree-poster.png +0 -0
- package/dist/assets/hero/demo.gif +0 -0
- package/dist/assets/index-B8Y8Y-Mi.js.map +0 -1
- package/dist/pricing/index.html +0 -33
package/dist/assets/{WorkloadCalculator-Bdt6qPR3.js.map → WorkloadCalculator-D2TuKS4B.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkloadCalculator-Bdt6qPR3.js","sources":["../../src/pages/WorkloadCalculator.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowRight, Calculator, ChevronDown, ClipboardCopy, Download } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CopyButton from '../components/CopyButton';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst clampNumber = (value, { min, max, fallback }) => {\n const num = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(min, Math.min(max, num));\n};\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Screenshot workload & size buckets',\n title: 'Screenshot Workload Calculator',\n subtitle:\n 'Estimate the device × locale explosion from manual Figma/Canva edits, then choose a minimum ship set before you commit.',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard → build (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP (local/CI).',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix batch exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun build with --require-pro.',\n navTools: 'Tools',\n presetsTitle: 'Presets',\n presetIosOnly: 'iOS only',\n presetIosAndroid: 'iOS + Android',\n inputsTitle: 'Inputs',\n resultsTitle: 'Results',\n screenshotsPerLocaleLabel: 'Screenshots per locale',\n screenshotsPerLocaleHelp: 'Typical: 5–8',\n localesLabel: 'Locales',\n localesHelp: 'Typical: 1–12',\n iosDeviceSizesLabel: 'iOS device sizes',\n iosDeviceSizesToggle: 'Include iOS',\n iosDeviceSizesHelp: 'Example: 4 (iPhone + iPad variants)',\n androidDeviceSizesLabel: 'Android device sizes',\n androidDeviceSizesToggle: 'Include Android',\n androidDeviceSizesHelp: 'Example: 2 (phone + tablet)',\n minutesPerImageLabel: 'Manual minutes per image',\n minutesPerImageHelp: 'Estimate: export + rename + folder sorting',\n totalImagesLabel: 'Total images',\n totalImagesFormula: ({ shots, locales, deviceSizes }) => `${shots} shots × ${locales} locales × ${deviceSizes} device sizes`,\n multiplierLabel: 'Multiplier',\n multiplierSuffix: '×',\n multiplierHelp: ({ multiplier }) => `1 base shot turns into ${multiplier} variants`,\n manualTimeLabel: 'Manual time estimate',\n manualTimeFormula: ({ images, minutesPerImage }) => `${images} images × ${minutesPerImage} min/image`,\n withShipScreensLabel: 'With ShipScreens',\n withShipScreensNote:\n 'Bring translations. Wizard scaffolds config + placeholders. ShipScreens locks layout, exports Fastlane-ready folders (deliver/supply), and reruns reproducibly in CI. verify + stage catch mixed folders and store constraints before upload — screenshots stay local.',\n downloadCsv: 'Download CSV copy template',\n startFree: 'Run CLI first export',\n example: 'Example: 5 screenshots × 10 locales × 4 device sizes = 200 images.',\n minSetTitle: 'Suggested v1 minimum set',\n minSetBody: 'Use size buckets to avoid the full matrix on day one.',\n minSetBullets: {\n iosBase: 'iPhone-only: start with the largest iPhone bucket + 5 frames.',\n iosIpad: 'Add iPad 13-inch only if you ship iPad-first.',\n androidPhone: 'Android: start with 1 phone bucket.',\n androidTablet: 'Add tablet only if you need it.',\n none: 'Select at least one platform to see a suggested minimum set.',\n },\n minSetNote: 'You can expand later; rerunnable exports make it safe.',\n nextTitle: 'Next: structure your screenshots',\n nextBody: 'Use the 5-panel framework (Hook → Problem → Proof → How → CTA) and start from a sample project.',\n nextCtaSample: 'Open sample project',\n nextCta: 'Open 5-panel framework',\n feedbackText:\n 'Want feedback on your screenshot workflow? We are talking to early users and can help set up a reproducible export pipeline.',\n feedbackCta: 'DM @shipscreenscom on X',\n },\n ja: {\n badge: 'スクショ作業量 + サイズバケット',\n title: 'スクショ作業量 計算ツール',\n subtitle: '端末×言語の爆発を見積もり(Figma/Canvaの手作業前提)。最小セットで出すための判断材料に。',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard → build(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP(ローカル/CI)。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は --require-pro で再実行。',\n navTools: 'ツール',\n presetsTitle: 'プリセット',\n presetIosOnly: 'iOS のみ',\n presetIosAndroid: 'iOS + Android',\n inputsTitle: '入力',\n resultsTitle: '結果',\n screenshotsPerLocaleLabel: '言語あたりのスクショ枚数',\n screenshotsPerLocaleHelp: '目安: 5〜8',\n localesLabel: '言語数',\n localesHelp: '目安: 1〜12',\n iosDeviceSizesLabel: 'iOS 端末サイズ数',\n iosDeviceSizesToggle: 'iOS を含める',\n iosDeviceSizesHelp: '例: 4(iPhone + iPad など)',\n androidDeviceSizesLabel: 'Android 端末サイズ数',\n androidDeviceSizesToggle: 'Android を含める',\n androidDeviceSizesHelp: '例: 2(スマホ + タブレット)',\n minutesPerImageLabel: '1枚あたりの手作業(分)',\n minutesPerImageHelp: '目安: エクスポート + リネーム + フォルダ整理',\n totalImagesLabel: '合計画像数',\n totalImagesFormula: ({ shots, locales, deviceSizes }) => `${shots} 枚 × ${locales} 言語 × ${deviceSizes} サイズ`,\n multiplierLabel: '増加倍率',\n multiplierSuffix: '倍',\n multiplierHelp: ({ multiplier }) => `1枚が ${multiplier} 枚に増える`,\n manualTimeLabel: '手作業の見積もり',\n manualTimeFormula: ({ images, minutesPerImage }) => `${images} 枚 × ${minutesPerImage} 分/枚`,\n withShipScreensLabel: 'ShipScreens なら',\n withShipScreensNote:\n '翻訳は外部でOK。wizard で雛形を作り、レイアウト固定 → Fastlane公式パスへ再現性出力。verify + stage で混在や制約をアップロード前に検知(スクショはローカル)。',\n downloadCsv: 'CSVコピー雛形をDL',\n startFree: 'CLIで初回エクスポート',\n example: '例: 5枚 × 10言語 × 4サイズ = 200枚',\n minSetTitle: 'v1最小セットの目安',\n minSetBody: 'サイズバケットでまず出す。',\n minSetBullets: {\n iosBase: 'iPhone-only: 最大サイズ1バケット + 5枚',\n iosIpad: 'iPadは13-inchが必要な場合のみ',\n androidPhone: 'Androidはスマホ1バケットから',\n androidTablet: '必要ならタブレットを追加',\n none: '少なくとも1つのプラットフォームを選択してください。',\n },\n minSetNote: '後から増やせる。再実行できるから安心。',\n nextTitle: '次: スクショの構成を固める',\n nextBody: '5枚構成テンプレ(Hook→Problem→Proof→How→CTA)で、サンプルから最短で形にできます。',\n nextCtaSample: 'サンプルを開く',\n nextCta: '5枚構成テンプレを開く',\n feedbackText: 'スクショ作業フローの相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。',\n feedbackCta: 'XでDM: @shipscreenscom',\n },\n};\n\nconst WorkloadCalculator = () => {\n const { t, i18n } = useTranslation();\n usePageTitle('titles.workloadCalculator');\n\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const numberLocale = lang === 'ja' ? 'ja-JP' : 'en-US';\n const copy = COPY[lang] || COPY.en;\n const openAppHref = '/app/?sample=5panel&entry_source=screenshot_workload_calculator_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const firstExportHref = '/tools/first-export/?entry_source=screenshot_workload_calculator_primary_cta';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=screenshot_workload_calculator_open_sample_project';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n const codeToggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\n const defaultCodeOpen = typeof window === 'undefined' ? true : window.matchMedia('(min-width: 640px)').matches;\n\n const numberFormatter = useMemo(() => new Intl.NumberFormat(numberLocale), [numberLocale]);\n const formatNumber = useCallback((value) => numberFormatter.format(value), [numberFormatter]);\n const formatDuration = useCallback(\n (minutes) => {\n if (!Number.isFinite(minutes) || minutes <= 0) return lang === 'ja' ? '0分' : '0m';\n if (minutes < 60) return `${Math.round(minutes)}${lang === 'ja' ? '分' : 'm'}`;\n const hours = minutes / 60;\n if (hours < 24) return `${hours.toFixed(hours < 10 ? 1 : 0)}${lang === 'ja' ? '時間' : 'h'}`;\n const days = hours / 24;\n return `${days.toFixed(days < 10 ? 1 : 0)}${lang === 'ja' ? '日' : 'd'}`;\n },\n [lang]\n );\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'screenshot_workload_calculator' });\n }, []);\n\n const hasInteractedRef = useRef(false);\n const markInteracted = useCallback(() => {\n if (hasInteractedRef.current) return;\n hasInteractedRef.current = true;\n trackEvent('tool_interact', { tool: 'screenshot_workload_calculator' });\n }, []);\n\n const [screenshotsPerLocale, setScreenshotsPerLocale] = useState(5);\n const [localeCount, setLocaleCount] = useState(10);\n const [includeIOS, setIncludeIOS] = useState(true);\n const [includeAndroid, setIncludeAndroid] = useState(true);\n const [iosDeviceSizes, setIosDeviceSizes] = useState(4);\n const [androidDeviceSizes, setAndroidDeviceSizes] = useState(2);\n const [minutesPerImage, setMinutesPerImage] = useState(2);\n\n const minSetBullets = useMemo(() => {\n const bullets = [];\n if (includeIOS) {\n if (copy.minSetBullets?.iosBase) bullets.push(copy.minSetBullets.iosBase);\n if (copy.minSetBullets?.iosIpad) bullets.push(copy.minSetBullets.iosIpad);\n }\n if (includeAndroid) {\n if (copy.minSetBullets?.androidPhone) bullets.push(copy.minSetBullets.androidPhone);\n if (androidDeviceSizes > 1 && copy.minSetBullets?.androidTablet) {\n bullets.push(copy.minSetBullets.androidTablet);\n }\n }\n if (!bullets.length && copy.minSetBullets?.none) {\n bullets.push(copy.minSetBullets.none);\n }\n return bullets;\n }, [copy, includeIOS, includeAndroid, androidDeviceSizes]);\n\n const presets = useMemo(\n () => [\n {\n key: 'ios_only',\n label: copy.presetIosOnly,\n localeCount: 6,\n screenshotsPerLocale: 5,\n includeIOS: true,\n iosDeviceSizes: 2,\n includeAndroid: false,\n androidDeviceSizes: 0,\n },\n {\n key: 'ios_android',\n label: copy.presetIosAndroid,\n localeCount: 6,\n screenshotsPerLocale: 5,\n includeIOS: true,\n iosDeviceSizes: 2,\n includeAndroid: true,\n androidDeviceSizes: 1,\n },\n ],\n [copy.presetIosAndroid, copy.presetIosOnly]\n );\n\n const applyPreset = useCallback(\n (preset) => {\n if (!preset) return;\n markInteracted();\n setLocaleCount(preset.localeCount);\n setScreenshotsPerLocale(preset.screenshotsPerLocale);\n setIncludeIOS(preset.includeIOS);\n setIosDeviceSizes(preset.iosDeviceSizes);\n setIncludeAndroid(preset.includeAndroid);\n setAndroidDeviceSizes(preset.androidDeviceSizes);\n },\n [markInteracted]\n );\n\n const totals = useMemo(() => {\n const shots = clampNumber(screenshotsPerLocale, { min: 1, max: 50, fallback: 5 });\n const locales = clampNumber(localeCount, { min: 1, max: 50, fallback: 10 });\n const iosSizes = includeIOS ? clampNumber(iosDeviceSizes, { min: 1, max: 10, fallback: 4 }) : 0;\n const androidSizes = includeAndroid ? clampNumber(androidDeviceSizes, { min: 1, max: 10, fallback: 2 }) : 0;\n const deviceSizes = iosSizes + androidSizes;\n const totalImages = shots * locales * deviceSizes;\n const multiplier = locales * deviceSizes;\n const manualMinutes = totalImages * clampNumber(minutesPerImage, { min: 0.25, max: 30, fallback: 2 });\n\n return {\n shots,\n locales,\n iosSizes,\n androidSizes,\n deviceSizes,\n totalImages,\n multiplier,\n manualMinutes,\n };\n }, [androidDeviceSizes, includeAndroid, includeIOS, iosDeviceSizes, localeCount, minutesPerImage, screenshotsPerLocale]);\n\n const downloadCsvTemplate = () => {\n const slideCount = Math.min(50, Math.max(1, Math.trunc(totals.shots)));\n const headerCells = ['Locale'];\n for (let i = 1; i <= slideCount; i += 1) {\n headerCells.push(`Header_${i}`, `Subtitle_${i}`);\n }\n const enRow = ['en-US'];\n const jaRow = ['ja-JP'];\n for (let i = 1; i <= slideCount; i += 1) {\n enRow.push(`Headline ${i}`, `Subtitle ${i}`);\n jaRow.push(`ヘッドライン${i}`, `サブタイトル${i}`);\n }\n const csvLines = [headerCells.join(','), enRow.join(','), jaRow.join(',')];\n const csvContent = `\\ufeff${csvLines.join('\\n')}`;\n const csv = `data:text/csv;charset=utf-8,${encodeURIComponent(csvContent)}`;\n const link = document.createElement('a');\n link.href = csv;\n link.download = 'shipscreens-copy-template.csv';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'csv_template' });\n };\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_app_header' })\n }\n primaryCta={{\n href: firstExportHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {t('landing.nav.primaryCta')} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_first_export_header',\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-10\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <Calculator size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">\n {copy.subtitle}\n </p>\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.heroCliTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.heroCliNote}</p>\n <p className=\"text-xs text-slate-500\">{copy.heroCliSummary}</p>\n <CopyButton\n value={copy.heroCliCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'copy_cli_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copy.heroCliCopyLabel : copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <details className=\"group\" open={defaultCodeOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{codeToggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <div className=\"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroCliCmd}</pre>\n </div>\n </details>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n </div>\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_cli_preflight' })\n }\n className=\"max-w-xl mx-auto\"\n />\n <section className=\"max-w-xl mx-auto\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{copy.proUnlockTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {copy.proUnlockBody && <p className=\"text-sm text-slate-300\">{copy.proUnlockBody}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.proUnlockCmd}</pre>\n </div>\n <CopyButton\n value={copy.proUnlockCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.proUnlockNote && <div className=\"text-xs text-slate-500\">{copy.proUnlockNote}</div>}\n </div>\n </section>\n </section>\n\n <section className=\"grid lg:grid-cols-2 gap-6\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-5\">\n <h2 className=\"text-lg font-bold text-white\">{copy.inputsTitle}</h2>\n\n <div className=\"space-y-2\">\n <div className=\"text-[10px] font-bold text-slate-400 uppercase tracking-wider\">\n {copy.presetsTitle}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {presets.map((preset) => (\n <button\n key={preset.key}\n type=\"button\"\n onClick={() => applyPreset(preset)}\n className=\"px-3 py-1.5 rounded-lg border border-slate-700 bg-slate-950 text-xs font-semibold text-slate-200 hover:bg-slate-900 transition-colors\"\n >\n {preset.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.screenshotsPerLocaleLabel}</div>\n <input\n type=\"number\"\n min={1}\n max={50}\n value={screenshotsPerLocale}\n onChange={(e) => {\n markInteracted();\n setScreenshotsPerLocale(clampNumber(e.target.value, { min: 1, max: 50, fallback: 5 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.screenshotsPerLocaleHelp}</div>\n </label>\n\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.localesLabel}</div>\n <input\n type=\"number\"\n min={1}\n max={50}\n value={localeCount}\n onChange={(e) => {\n markInteracted();\n setLocaleCount(clampNumber(e.target.value, { min: 1, max: 50, fallback: 10 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.localesHelp}</div>\n </label>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.iosDeviceSizesLabel}</div>\n <label className=\"flex items-center gap-2 text-xs text-slate-400\">\n <input\n type=\"checkbox\"\n checked={includeIOS}\n onChange={(e) => {\n markInteracted();\n setIncludeIOS(e.target.checked);\n }}\n />\n {copy.iosDeviceSizesToggle}\n </label>\n </div>\n <input\n type=\"number\"\n min={1}\n max={10}\n disabled={!includeIOS}\n value={iosDeviceSizes}\n onChange={(e) => {\n markInteracted();\n setIosDeviceSizes(clampNumber(e.target.value, { min: 1, max: 10, fallback: 4 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white disabled:opacity-40 focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.iosDeviceSizesHelp}</div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.androidDeviceSizesLabel}</div>\n <label className=\"flex items-center gap-2 text-xs text-slate-400\">\n <input\n type=\"checkbox\"\n checked={includeAndroid}\n onChange={(e) => {\n markInteracted();\n setIncludeAndroid(e.target.checked);\n }}\n />\n {copy.androidDeviceSizesToggle}\n </label>\n </div>\n <input\n type=\"number\"\n min={1}\n max={10}\n disabled={!includeAndroid}\n value={androidDeviceSizes}\n onChange={(e) => {\n markInteracted();\n setAndroidDeviceSizes(clampNumber(e.target.value, { min: 1, max: 10, fallback: 2 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white disabled:opacity-40 focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.androidDeviceSizesHelp}</div>\n </div>\n\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.minutesPerImageLabel}</div>\n <input\n type=\"number\"\n min={0.25}\n max={30}\n step={0.25}\n value={minutesPerImage}\n onChange={(e) => {\n markInteracted();\n setMinutesPerImage(clampNumber(e.target.value, { min: 0.25, max: 30, fallback: 2 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.minutesPerImageHelp}</div>\n </label>\n </div>\n\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-5\">\n <h2 className=\"text-lg font-bold text-white\">{copy.resultsTitle}</h2>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"text-xs text-slate-500\">{copy.totalImagesLabel}</div>\n <div className=\"text-3xl font-black text-white\">{formatNumber(totals.totalImages)}</div>\n <div className=\"text-xs text-slate-500 mt-1\">\n {copy.totalImagesFormula({\n shots: formatNumber(totals.shots),\n locales: formatNumber(totals.locales),\n deviceSizes: formatNumber(totals.deviceSizes),\n })}\n </div>\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"text-xs text-slate-500\">{copy.multiplierLabel}</div>\n <div className=\"text-3xl font-black text-white\">\n {formatNumber(totals.multiplier)}\n {copy.multiplierSuffix}\n </div>\n <div className=\"text-xs text-slate-500 mt-1\">{copy.multiplierHelp({ multiplier: formatNumber(totals.multiplier) })}</div>\n </div>\n </div>\n\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4 space-y-2\">\n <div className=\"text-xs text-slate-500\">{copy.manualTimeLabel}</div>\n <div className=\"text-2xl font-black text-white\">{formatDuration(totals.manualMinutes)}</div>\n <div className=\"text-xs text-slate-500\">\n {copy.manualTimeFormula({ images: formatNumber(totals.totalImages), minutesPerImage: formatNumber(minutesPerImage) })}\n </div>\n </div>\n\n <div className=\"rounded-2xl border border-blue-500/40 bg-blue-500/10 p-4 space-y-2\">\n <div className=\"text-xs text-blue-200 font-semibold\">{copy.withShipScreensLabel}</div>\n <div className=\"text-sm text-slate-200\">\n {lang === 'ja' ? (\n <>\n 元スクショ <span className=\"font-bold text-white\">{formatNumber(totals.shots)}</span> 枚と CSV{' '}\n <span className=\"font-bold text-white\">{formatNumber(totals.locales)}</span> 行を用意して、一括で出力できます。\n </>\n ) : (\n <>\n Prepare <span className=\"font-bold text-white\">{formatNumber(totals.shots)}</span> base screenshots, import{' '}\n <span className=\"font-bold text-white\">{formatNumber(totals.locales)}</span> locales, then export the full set.\n </>\n )}\n </div>\n <div className=\"text-xs text-slate-300\">{copy.withShipScreensNote}</div>\n </div>\n\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4 space-y-2\">\n <div className=\"text-xs text-slate-500\">{copy.minSetTitle}</div>\n <div className=\"text-sm text-slate-200\">{copy.minSetBody}</div>\n <ul className=\"text-xs text-slate-400 space-y-1 list-disc list-inside\">\n {minSetBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n <div className=\"text-xs text-slate-500\">{copy.minSetNote}</div>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <button\n type=\"button\"\n onClick={downloadCsvTemplate}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadCsv}\n </button>\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_agent_cli_results',\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.startFree} <ArrowRight size={16} />\n </a>\n </div>\n\n <div className=\"text-xs text-slate-500\">\n {lang === 'ja' ? (\n <>\n 例: 5枚 × 10言語 × 4サイズ = <span className=\"text-slate-200 font-semibold\">200枚</span>.\n </>\n ) : (\n <>\n Example: 5 screenshots × 10 locales × 4 device sizes = <span className=\"text-slate-200 font-semibold\">200 images</span>.\n </>\n )}\n </div>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto text-center space-y-3 pt-4\">\n <p className=\"text-sm text-slate-400\">\n {copy.feedbackText}\n </p>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'dm_x' })}\n className=\"text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4\"\n >\n {copy.feedbackCta}\n </a>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{copy.nextTitle}</div>\n <div className=\"text-sm text-slate-300\">{copy.nextBody}</div>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3 w-full md:w-auto\">\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_sample_project',\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition w-full md:w-auto\"\n >\n {copy.nextCtaSample} <ArrowRight size={16} />\n </a>\n <a\n href=\"/tools/5-panel-screenshot-framework/\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_framework' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full md:w-auto\"\n >\n {copy.nextCta} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.startFree,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'sticky_primary',\n }),\n }}\n secondary={{\n label: copy.nextCtaSample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'sticky_secondary',\n }),\n }}\n />\n </div>\n );\n};\n\nexport default WorkloadCalculator;\n"],"names":["clampNumber","value","min","max","fallback","num","normalizeLang","lang","COPY","shots","locales","deviceSizes","multiplier","images","minutesPerImage","WorkloadCalculator","t","i18n","useTranslation","usePageTitle","numberLocale","copy","openAppHref","agentCliHref","firstExportHref","configDownloadHref","csvDownloadHref","sampleProjectHref","copyButtonLabel","codeToggleLabel","defaultCodeOpen","numberFormatter","useMemo","formatNumber","useCallback","formatDuration","minutes","hours","days","useEffect","trackEvent","hasInteractedRef","useRef","markInteracted","screenshotsPerLocale","setScreenshotsPerLocale","useState","localeCount","setLocaleCount","includeIOS","setIncludeIOS","includeAndroid","setIncludeAndroid","iosDeviceSizes","setIosDeviceSizes","androidDeviceSizes","setAndroidDeviceSizes","setMinutesPerImage","minSetBullets","bullets","presets","applyPreset","preset","totals","iosSizes","androidSizes","totalImages","manualMinutes","downloadCsvTemplate","slideCount","headerCells","i","enRow","jaRow","csvContent","csv","link","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","Calculator","CopyButton","copyLabel","copyState","Fragment","ClipboardCopy","ChevronDown","CliPreflightCard","e","item","Download","StickyMobileCta"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WorkloadCalculator-D2TuKS4B.js","sources":["../../src/pages/WorkloadCalculator.jsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ArrowRight, Calculator, ChevronDown, ClipboardCopy, Download } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport CopyButton from '../components/CopyButton';\nimport CliPreflightCard from '../components/CliPreflightCard';\nimport StagingBadge from '../components/StagingBadge';\nimport StickyMobileCta from '../components/StickyMobileCta';\nimport SiteHeader from '../components/SiteHeader';\nimport usePageTitle from '../hooks/usePageTitle';\nimport { trackEvent, trackEventAndFollowLink } from '../lib/analytics';\n\nconst clampNumber = (value, { min, max, fallback }) => {\n const num = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(num)) return fallback;\n return Math.max(min, Math.min(max, num));\n};\n\nconst normalizeLang = (lang) => {\n const base = (lang || '').split('-')[0];\n return base === 'ja' ? 'ja' : 'en';\n};\n\nconst COPY = {\n en: {\n badge: 'Screenshot workload & size buckets',\n title: 'Screenshot Workload Calculator',\n subtitle:\n 'Estimate the device × locale explosion from manual Figma/Canva edits, then choose a minimum ship set before you commit.',\n heroCliTitle: 'CLI quickstart (2 steps)',\n heroCliNote: 'wizard → build (raw mode, no Playwright).',\n heroCliSummary: 'Outputs: fastlane/ + reproducible ZIP (local/CI).',\n heroCliCopyLabel: 'Copy all commands',\n heroCliTemplatesLabel: 'Starter templates',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Unlock Pro (CLI)',\n proUnlockBody: 'Remove the watermark and unlock full matrix batch exports via CLI auth:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: 'Completes a one-time browser sign-in; then rerun build with --require-pro.',\n navTools: 'Tools',\n presetsTitle: 'Presets',\n presetIosOnly: 'iOS only',\n presetIosAndroid: 'iOS + Android',\n inputsTitle: 'Inputs',\n resultsTitle: 'Results',\n screenshotsPerLocaleLabel: 'Screenshots per locale',\n screenshotsPerLocaleHelp: 'Typical: 5–8',\n localesLabel: 'Locales',\n localesHelp: 'Typical: 1–12',\n iosDeviceSizesLabel: 'iOS device sizes',\n iosDeviceSizesToggle: 'Include iOS',\n iosDeviceSizesHelp: 'Example: 4 (iPhone + iPad variants)',\n androidDeviceSizesLabel: 'Android device sizes',\n androidDeviceSizesToggle: 'Include Android',\n androidDeviceSizesHelp: 'Example: 2 (phone + tablet)',\n minutesPerImageLabel: 'Manual minutes per image',\n minutesPerImageHelp: 'Estimate: export + rename + folder sorting',\n totalImagesLabel: 'Total images',\n totalImagesFormula: ({ shots, locales, deviceSizes }) => `${shots} shots × ${locales} locales × ${deviceSizes} device sizes`,\n multiplierLabel: 'Multiplier',\n multiplierSuffix: '×',\n multiplierHelp: ({ multiplier }) => `1 base shot turns into ${multiplier} variants`,\n manualTimeLabel: 'Manual time estimate',\n manualTimeFormula: ({ images, minutesPerImage }) => `${images} images × ${minutesPerImage} min/image`,\n withShipScreensLabel: 'With ShipScreens',\n withShipScreensNote:\n 'Bring translations. Wizard scaffolds config + placeholders. ShipScreens locks layout, exports Fastlane-ready folders (deliver/supply), and reruns reproducibly in CI. verify + stage catch mixed folders and store constraints before upload — screenshots stay local.',\n downloadCsv: 'Download CSV copy template',\n startFree: 'Run CLI first export',\n example: 'Example: 5 screenshots × 10 locales × 4 device sizes = 200 images.',\n minSetTitle: 'Suggested v1 minimum set',\n minSetBody: 'Use size buckets to avoid the full matrix on day one.',\n minSetBullets: {\n iosBase: 'iPhone-only: start with the largest iPhone bucket + 5 frames.',\n iosIpad: 'Add iPad 13-inch only if you ship iPad-first.',\n androidPhone: 'Android: start with 1 phone bucket.',\n androidTablet: 'Add tablet only if you need it.',\n none: 'Select at least one platform to see a suggested minimum set.',\n },\n minSetNote: 'You can expand later; rerunnable exports make it safe.',\n nextTitle: 'Next: structure your screenshots',\n nextBody: 'Use the 5-panel framework (Hook → Problem → Proof → How → CTA) and start from a sample project.',\n nextCtaSample: 'Open sample project',\n nextCta: 'Open 5-panel framework',\n feedbackText:\n 'Want feedback on your screenshot workflow? We are talking to early users and can help set up a reproducible export pipeline.',\n feedbackCta: 'DM @shipscreenscom on X',\n },\n ja: {\n badge: 'スクショ作業量 + サイズバケット',\n title: 'スクショ作業量 計算ツール',\n subtitle: '端末×言語の爆発を見積もり(Figma/Canvaの手作業前提)。最小セットで出すための判断材料に。',\n heroCliTitle: 'CLIクイックスタート(2ステップ)',\n heroCliNote: 'wizard → build(raw / Playwright不要)。',\n heroCliSummary: '出力: fastlane/ + 再現性ZIP(ローカル/CI)。',\n heroCliCopyLabel: 'コマンドをすべてコピー',\n heroCliTemplatesLabel: 'スターター雛形',\n heroCliConfigLabel: 'config.yml',\n heroCliCsvLabel: 'copy.csv',\n heroCliCmd: [\n 'npx --yes shipscreens wizard',\n 'npx --yes shipscreens build --mode raw --zip --out out/agent',\n ].join('\\n'),\n proUnlockTitle: 'Proを解除(CLI)',\n proUnlockBody: '透かし解除&フル一括(端末×言語)のために、まずはCLI認証を実行:',\n proUnlockCmd: 'npx --yes shipscreens auth login',\n proUnlockNote: '初回のみブラウザでサインインします。以後は --require-pro で再実行。',\n navTools: 'ツール',\n presetsTitle: 'プリセット',\n presetIosOnly: 'iOS のみ',\n presetIosAndroid: 'iOS + Android',\n inputsTitle: '入力',\n resultsTitle: '結果',\n screenshotsPerLocaleLabel: '言語あたりのスクショ枚数',\n screenshotsPerLocaleHelp: '目安: 5〜8',\n localesLabel: '言語数',\n localesHelp: '目安: 1〜12',\n iosDeviceSizesLabel: 'iOS 端末サイズ数',\n iosDeviceSizesToggle: 'iOS を含める',\n iosDeviceSizesHelp: '例: 4(iPhone + iPad など)',\n androidDeviceSizesLabel: 'Android 端末サイズ数',\n androidDeviceSizesToggle: 'Android を含める',\n androidDeviceSizesHelp: '例: 2(スマホ + タブレット)',\n minutesPerImageLabel: '1枚あたりの手作業(分)',\n minutesPerImageHelp: '目安: エクスポート + リネーム + フォルダ整理',\n totalImagesLabel: '合計画像数',\n totalImagesFormula: ({ shots, locales, deviceSizes }) => `${shots} 枚 × ${locales} 言語 × ${deviceSizes} サイズ`,\n multiplierLabel: '増加倍率',\n multiplierSuffix: '倍',\n multiplierHelp: ({ multiplier }) => `1枚が ${multiplier} 枚に増える`,\n manualTimeLabel: '手作業の見積もり',\n manualTimeFormula: ({ images, minutesPerImage }) => `${images} 枚 × ${minutesPerImage} 分/枚`,\n withShipScreensLabel: 'ShipScreens なら',\n withShipScreensNote:\n '翻訳は外部でOK。wizard で雛形を作り、レイアウト固定 → Fastlane公式パスへ再現性出力。verify + stage で混在や制約をアップロード前に検知(スクショはローカル)。',\n downloadCsv: 'CSVコピー雛形をDL',\n startFree: 'CLIで初回エクスポート',\n example: '例: 5枚 × 10言語 × 4サイズ = 200枚',\n minSetTitle: 'v1最小セットの目安',\n minSetBody: 'サイズバケットでまず出す。',\n minSetBullets: {\n iosBase: 'iPhone-only: 最大サイズ1バケット + 5枚',\n iosIpad: 'iPadは13-inchが必要な場合のみ',\n androidPhone: 'Androidはスマホ1バケットから',\n androidTablet: '必要ならタブレットを追加',\n none: '少なくとも1つのプラットフォームを選択してください。',\n },\n minSetNote: '後から増やせる。再実行できるから安心。',\n nextTitle: '次: スクショの構成を固める',\n nextBody: '5枚構成テンプレ(Hook→Problem→Proof→How→CTA)で、サンプルから最短で形にできます。',\n nextCtaSample: 'サンプルを開く',\n nextCta: '5枚構成テンプレを開く',\n feedbackText: 'スクショ作業フローの相談があれば、15分だけ聞かせてください。改善案やテンプレをご案内します。',\n feedbackCta: 'XでDM: @shipscreenscom',\n },\n};\n\nconst WorkloadCalculator = () => {\n const { t, i18n } = useTranslation();\n usePageTitle('titles.workloadCalculator');\n\n const lang = normalizeLang(i18n.resolvedLanguage || i18n.language);\n const numberLocale = lang === 'ja' ? 'ja-JP' : 'en-US';\n const copy = COPY[lang] || COPY.en;\n const openAppHref = '/app/?sample=5panel&entry_source=screenshot_workload_calculator_open_app_header';\n const agentCliHref = '/tools/agent-cli/';\n const firstExportHref = '/tools/first-export/?entry_source=screenshot_workload_calculator_primary_cta';\n const configDownloadHref = '/downloads/shipscreens-agent-cli-config.yml';\n const csvDownloadHref = '/downloads/shipscreens-agent-cli-copy.csv';\n const sampleProjectHref = '/app/?sample=5panel&entry_source=screenshot_workload_calculator_open_sample_project';\n const copyButtonLabel = t('common.copy', { defaultValue: 'Copy' });\n const codeToggleLabel = t('common.showCommands', { defaultValue: 'Show commands' });\n const defaultCodeOpen = typeof window === 'undefined' ? true : window.matchMedia('(min-width: 640px)').matches;\n\n const numberFormatter = useMemo(() => new Intl.NumberFormat(numberLocale), [numberLocale]);\n const formatNumber = useCallback((value) => numberFormatter.format(value), [numberFormatter]);\n const formatDuration = useCallback(\n (minutes) => {\n if (!Number.isFinite(minutes) || minutes <= 0) return lang === 'ja' ? '0分' : '0m';\n if (minutes < 60) return `${Math.round(minutes)}${lang === 'ja' ? '分' : 'm'}`;\n const hours = minutes / 60;\n if (hours < 24) return `${hours.toFixed(hours < 10 ? 1 : 0)}${lang === 'ja' ? '時間' : 'h'}`;\n const days = hours / 24;\n return `${days.toFixed(days < 10 ? 1 : 0)}${lang === 'ja' ? '日' : 'd'}`;\n },\n [lang]\n );\n\n useEffect(() => {\n trackEvent('tool_view', { tool: 'screenshot_workload_calculator' });\n }, []);\n\n const hasInteractedRef = useRef(false);\n const markInteracted = useCallback(() => {\n if (hasInteractedRef.current) return;\n hasInteractedRef.current = true;\n trackEvent('tool_interact', { tool: 'screenshot_workload_calculator' });\n }, []);\n\n const [screenshotsPerLocale, setScreenshotsPerLocale] = useState(5);\n const [localeCount, setLocaleCount] = useState(10);\n const [includeIOS, setIncludeIOS] = useState(true);\n const [includeAndroid, setIncludeAndroid] = useState(true);\n const [iosDeviceSizes, setIosDeviceSizes] = useState(4);\n const [androidDeviceSizes, setAndroidDeviceSizes] = useState(2);\n const [minutesPerImage, setMinutesPerImage] = useState(2);\n\n const minSetBullets = useMemo(() => {\n const bullets = [];\n if (includeIOS) {\n if (copy.minSetBullets?.iosBase) bullets.push(copy.minSetBullets.iosBase);\n if (copy.minSetBullets?.iosIpad) bullets.push(copy.minSetBullets.iosIpad);\n }\n if (includeAndroid) {\n if (copy.minSetBullets?.androidPhone) bullets.push(copy.minSetBullets.androidPhone);\n if (androidDeviceSizes > 1 && copy.minSetBullets?.androidTablet) {\n bullets.push(copy.minSetBullets.androidTablet);\n }\n }\n if (!bullets.length && copy.minSetBullets?.none) {\n bullets.push(copy.minSetBullets.none);\n }\n return bullets;\n }, [copy, includeIOS, includeAndroid, androidDeviceSizes]);\n\n const presets = useMemo(\n () => [\n {\n key: 'ios_only',\n label: copy.presetIosOnly,\n localeCount: 6,\n screenshotsPerLocale: 5,\n includeIOS: true,\n iosDeviceSizes: 2,\n includeAndroid: false,\n androidDeviceSizes: 0,\n },\n {\n key: 'ios_android',\n label: copy.presetIosAndroid,\n localeCount: 6,\n screenshotsPerLocale: 5,\n includeIOS: true,\n iosDeviceSizes: 2,\n includeAndroid: true,\n androidDeviceSizes: 1,\n },\n ],\n [copy.presetIosAndroid, copy.presetIosOnly]\n );\n\n const applyPreset = useCallback(\n (preset) => {\n if (!preset) return;\n markInteracted();\n setLocaleCount(preset.localeCount);\n setScreenshotsPerLocale(preset.screenshotsPerLocale);\n setIncludeIOS(preset.includeIOS);\n setIosDeviceSizes(preset.iosDeviceSizes);\n setIncludeAndroid(preset.includeAndroid);\n setAndroidDeviceSizes(preset.androidDeviceSizes);\n },\n [markInteracted]\n );\n\n const totals = useMemo(() => {\n const shots = clampNumber(screenshotsPerLocale, { min: 1, max: 50, fallback: 5 });\n const locales = clampNumber(localeCount, { min: 1, max: 50, fallback: 10 });\n const iosSizes = includeIOS ? clampNumber(iosDeviceSizes, { min: 1, max: 10, fallback: 4 }) : 0;\n const androidSizes = includeAndroid ? clampNumber(androidDeviceSizes, { min: 1, max: 10, fallback: 2 }) : 0;\n const deviceSizes = iosSizes + androidSizes;\n const totalImages = shots * locales * deviceSizes;\n const multiplier = locales * deviceSizes;\n const manualMinutes = totalImages * clampNumber(minutesPerImage, { min: 0.25, max: 30, fallback: 2 });\n\n return {\n shots,\n locales,\n iosSizes,\n androidSizes,\n deviceSizes,\n totalImages,\n multiplier,\n manualMinutes,\n };\n }, [androidDeviceSizes, includeAndroid, includeIOS, iosDeviceSizes, localeCount, minutesPerImage, screenshotsPerLocale]);\n\n const downloadCsvTemplate = () => {\n const slideCount = Math.min(50, Math.max(1, Math.trunc(totals.shots)));\n const headerCells = ['Locale'];\n for (let i = 1; i <= slideCount; i += 1) {\n headerCells.push(`Header_${i}`, `Subtitle_${i}`);\n }\n const enRow = ['en-US'];\n const jaRow = ['ja-JP'];\n for (let i = 1; i <= slideCount; i += 1) {\n enRow.push(`Headline ${i}`, `Subtitle ${i}`);\n jaRow.push(`ヘッドライン${i}`, `サブタイトル${i}`);\n }\n const csvLines = [headerCells.join(','), enRow.join(','), jaRow.join(',')];\n const csvContent = `\\ufeff${csvLines.join('\\n')}`;\n const csv = `data:text/csv;charset=utf-8,${encodeURIComponent(csvContent)}`;\n const link = document.createElement('a');\n link.href = csv;\n link.download = 'shipscreens-copy-template.csv';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'csv_template' });\n };\n\n return (\n <div className=\"min-h-screen bg-gradient-to-b from-slate-950 via-slate-900 to-slate-950 text-white\">\n <StagingBadge />\n <SiteHeader\n variant=\"dark\"\n active=\"tools\"\n openAppHref={openAppHref}\n onToolsClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_tools_header' })\n }\n onPricingClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'pricing_header' })\n }\n onOpenAppClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_app_header' })\n }\n primaryCta={{\n href: firstExportHref,\n label: (\n <span className=\"inline-flex items-center gap-2\">\n {t('landing.nav.primaryCta')} <ArrowRight size={16} />\n </span>\n ),\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_first_export_header',\n }),\n }}\n />\n\n <main className=\"max-w-5xl mx-auto px-6 pb-24 space-y-10\">\n <section className=\"max-w-3xl mx-auto text-center space-y-4\">\n <div className=\"inline-flex items-center gap-2 px-3 py-1.5 rounded-full border border-slate-800 bg-slate-900/60 text-slate-200 text-xs font-semibold\">\n <Calculator size={14} />\n {copy.badge}\n </div>\n <h1 className=\"text-3xl md:text-5xl font-black leading-tight\">{copy.title}</h1>\n <p className=\"text-slate-300 text-lg leading-relaxed\">\n {copy.subtitle}\n </p>\n <div className=\"max-w-xl mx-auto text-left bg-slate-900/60 border border-slate-800 rounded-2xl p-4 space-y-2\">\n <div className=\"text-[11px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">{copy.heroCliTitle}</div>\n <p className=\"text-xs text-slate-400\">{copy.heroCliNote}</p>\n <p className=\"text-xs text-slate-500\">{copy.heroCliSummary}</p>\n <CopyButton\n value={copy.heroCliCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'copy_cli_hero' })}\n className=\"inline-flex items-center justify-center gap-2 px-3 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-xs font-semibold\"\n >\n {({ copyLabel, copyState }) => (\n <>\n <ClipboardCopy size={14} />\n {copyState === 'idle' ? copy.heroCliCopyLabel : copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n <details className=\"group\" open={defaultCodeOpen}>\n <summary className=\"flex items-center justify-between text-[11px] font-semibold text-slate-400 cursor-pointer list-none\">\n <span>{codeToggleLabel}</span>\n <ChevronDown size={14} className=\"text-slate-500 transition-transform duration-200 group-open:rotate-180\" />\n </summary>\n <div className=\"mt-2 rounded-xl border border-slate-800 bg-slate-950 p-3\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.heroCliCmd}</pre>\n </div>\n </details>\n <div className=\"pt-1 space-y-2\">\n <div className=\"text-[10px] uppercase tracking-[0.2em] text-slate-500 font-semibold\">\n {copy.heroCliTemplatesLabel}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <a\n href={configDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'config_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliConfigLabel}\n </a>\n <a\n href={csvDownloadHref}\n download\n onClick={() => trackEvent('tool_download', { tool: 'screenshot_workload_calculator', asset: 'copy_template' })}\n className=\"inline-flex items-center justify-center gap-2 px-2.5 py-1.5 rounded-md border border-slate-700 bg-slate-950 text-[11px] text-slate-200 hover:bg-slate-900 transition\"\n >\n {copy.heroCliCsvLabel}\n </a>\n </div>\n </div>\n </div>\n <CliPreflightCard\n compact\n href=\"/tools/agent-cli/#preflight\"\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_cli_preflight' })\n }\n className=\"max-w-xl mx-auto\"\n />\n <section className=\"max-w-xl mx-auto\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-5 space-y-3\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"text-sm font-bold text-white\">{copy.proUnlockTitle}</div>\n <span className=\"text-[10px] font-semibold tracking-[0.2em] text-amber-200 bg-amber-500/10 border border-amber-400/30 px-2 py-1 rounded-full\">\n PRO\n </span>\n </div>\n {copy.proUnlockBody && <p className=\"text-sm text-slate-300\">{copy.proUnlockBody}</p>}\n <div className=\"rounded-xl border border-slate-800 bg-slate-950/80 p-4\">\n <pre className=\"text-xs text-slate-200 whitespace-pre-wrap\">{copy.proUnlockCmd}</pre>\n </div>\n <CopyButton\n value={copy.proUnlockCmd}\n onCopied={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'copy_cli_pro_unlock' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-2 rounded-lg border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition text-sm font-semibold\"\n >\n {({ copyLabel }) => (\n <>\n <ClipboardCopy size={14} />\n {copyLabel || copyButtonLabel}\n </>\n )}\n </CopyButton>\n {copy.proUnlockNote && <div className=\"text-xs text-slate-500\">{copy.proUnlockNote}</div>}\n </div>\n </section>\n </section>\n\n <section className=\"grid lg:grid-cols-2 gap-6\">\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-5\">\n <h2 className=\"text-lg font-bold text-white\">{copy.inputsTitle}</h2>\n\n <div className=\"space-y-2\">\n <div className=\"text-[10px] font-bold text-slate-400 uppercase tracking-wider\">\n {copy.presetsTitle}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {presets.map((preset) => (\n <button\n key={preset.key}\n type=\"button\"\n onClick={() => applyPreset(preset)}\n className=\"px-3 py-1.5 rounded-lg border border-slate-700 bg-slate-950 text-xs font-semibold text-slate-200 hover:bg-slate-900 transition-colors\"\n >\n {preset.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.screenshotsPerLocaleLabel}</div>\n <input\n type=\"number\"\n min={1}\n max={50}\n value={screenshotsPerLocale}\n onChange={(e) => {\n markInteracted();\n setScreenshotsPerLocale(clampNumber(e.target.value, { min: 1, max: 50, fallback: 5 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.screenshotsPerLocaleHelp}</div>\n </label>\n\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.localesLabel}</div>\n <input\n type=\"number\"\n min={1}\n max={50}\n value={localeCount}\n onChange={(e) => {\n markInteracted();\n setLocaleCount(clampNumber(e.target.value, { min: 1, max: 50, fallback: 10 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.localesHelp}</div>\n </label>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.iosDeviceSizesLabel}</div>\n <label className=\"flex items-center gap-2 text-xs text-slate-400\">\n <input\n type=\"checkbox\"\n checked={includeIOS}\n onChange={(e) => {\n markInteracted();\n setIncludeIOS(e.target.checked);\n }}\n />\n {copy.iosDeviceSizesToggle}\n </label>\n </div>\n <input\n type=\"number\"\n min={1}\n max={10}\n disabled={!includeIOS}\n value={iosDeviceSizes}\n onChange={(e) => {\n markInteracted();\n setIosDeviceSizes(clampNumber(e.target.value, { min: 1, max: 10, fallback: 4 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white disabled:opacity-40 focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.iosDeviceSizesHelp}</div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.androidDeviceSizesLabel}</div>\n <label className=\"flex items-center gap-2 text-xs text-slate-400\">\n <input\n type=\"checkbox\"\n checked={includeAndroid}\n onChange={(e) => {\n markInteracted();\n setIncludeAndroid(e.target.checked);\n }}\n />\n {copy.androidDeviceSizesToggle}\n </label>\n </div>\n <input\n type=\"number\"\n min={1}\n max={10}\n disabled={!includeAndroid}\n value={androidDeviceSizes}\n onChange={(e) => {\n markInteracted();\n setAndroidDeviceSizes(clampNumber(e.target.value, { min: 1, max: 10, fallback: 2 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white disabled:opacity-40 focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.androidDeviceSizesHelp}</div>\n </div>\n\n <label className=\"space-y-1\">\n <div className=\"text-sm font-semibold text-slate-200\">{copy.minutesPerImageLabel}</div>\n <input\n type=\"number\"\n min={0.25}\n max={30}\n step={0.25}\n value={minutesPerImage}\n onChange={(e) => {\n markInteracted();\n setMinutesPerImage(clampNumber(e.target.value, { min: 0.25, max: 30, fallback: 2 }));\n }}\n className=\"w-full rounded-xl bg-slate-950 border border-slate-800 px-3 py-2 text-white focus:outline-none focus:ring-2 focus:ring-blue-500/60\"\n />\n <div className=\"text-xs text-slate-500\">{copy.minutesPerImageHelp}</div>\n </label>\n </div>\n\n <div className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 space-y-5\">\n <h2 className=\"text-lg font-bold text-white\">{copy.resultsTitle}</h2>\n\n <div className=\"grid sm:grid-cols-2 gap-4\">\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"text-xs text-slate-500\">{copy.totalImagesLabel}</div>\n <div className=\"text-3xl font-black text-white\">{formatNumber(totals.totalImages)}</div>\n <div className=\"text-xs text-slate-500 mt-1\">\n {copy.totalImagesFormula({\n shots: formatNumber(totals.shots),\n locales: formatNumber(totals.locales),\n deviceSizes: formatNumber(totals.deviceSizes),\n })}\n </div>\n </div>\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4\">\n <div className=\"text-xs text-slate-500\">{copy.multiplierLabel}</div>\n <div className=\"text-3xl font-black text-white\">\n {formatNumber(totals.multiplier)}\n {copy.multiplierSuffix}\n </div>\n <div className=\"text-xs text-slate-500 mt-1\">{copy.multiplierHelp({ multiplier: formatNumber(totals.multiplier) })}</div>\n </div>\n </div>\n\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4 space-y-2\">\n <div className=\"text-xs text-slate-500\">{copy.manualTimeLabel}</div>\n <div className=\"text-2xl font-black text-white\">{formatDuration(totals.manualMinutes)}</div>\n <div className=\"text-xs text-slate-500\">\n {copy.manualTimeFormula({ images: formatNumber(totals.totalImages), minutesPerImage: formatNumber(minutesPerImage) })}\n </div>\n </div>\n\n <div className=\"rounded-2xl border border-blue-500/40 bg-blue-500/10 p-4 space-y-2\">\n <div className=\"text-xs text-blue-200 font-semibold\">{copy.withShipScreensLabel}</div>\n <div className=\"text-sm text-slate-200\">\n {lang === 'ja' ? (\n <>\n 元スクショ <span className=\"font-bold text-white\">{formatNumber(totals.shots)}</span> 枚と CSV{' '}\n <span className=\"font-bold text-white\">{formatNumber(totals.locales)}</span> 行を用意して、一括で出力できます。\n </>\n ) : (\n <>\n Prepare <span className=\"font-bold text-white\">{formatNumber(totals.shots)}</span> base screenshots, import{' '}\n <span className=\"font-bold text-white\">{formatNumber(totals.locales)}</span> locales, then export the full set.\n </>\n )}\n </div>\n <div className=\"text-xs text-slate-300\">{copy.withShipScreensNote}</div>\n </div>\n\n <div className=\"rounded-2xl border border-slate-800 bg-slate-950 p-4 space-y-2\">\n <div className=\"text-xs text-slate-500\">{copy.minSetTitle}</div>\n <div className=\"text-sm text-slate-200\">{copy.minSetBody}</div>\n <ul className=\"text-xs text-slate-400 space-y-1 list-disc list-inside\">\n {minSetBullets.map((item) => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n <div className=\"text-xs text-slate-500\">{copy.minSetNote}</div>\n </div>\n\n <div className=\"flex flex-col sm:flex-row gap-3\">\n <button\n type=\"button\"\n onClick={downloadCsvTemplate}\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 hover:bg-slate-900 transition\"\n >\n <Download size={16} />\n {copy.downloadCsv}\n </button>\n <a\n href={agentCliHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_agent_cli_results',\n })\n }\n className=\"flex-1 inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition\"\n >\n {copy.startFree} <ArrowRight size={16} />\n </a>\n </div>\n\n <div className=\"text-xs text-slate-500\">\n {lang === 'ja' ? (\n <>\n 例: 5枚 × 10言語 × 4サイズ = <span className=\"text-slate-200 font-semibold\">200枚</span>.\n </>\n ) : (\n <>\n Example: 5 screenshots × 10 locales × 4 device sizes = <span className=\"text-slate-200 font-semibold\">200 images</span>.\n </>\n )}\n </div>\n </div>\n </section>\n\n <section className=\"max-w-3xl mx-auto text-center space-y-3 pt-4\">\n <p className=\"text-sm text-slate-400\">\n {copy.feedbackText}\n </p>\n <a\n href=\"https://x.com/shipscreenscom\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'dm_x' })}\n className=\"text-sm text-blue-300 hover:text-blue-200 transition-colors underline underline-offset-4\"\n >\n {copy.feedbackCta}\n </a>\n </section>\n\n <section className=\"bg-slate-900/60 border border-slate-800 rounded-2xl p-6 flex flex-col md:flex-row items-start md:items-center justify-between gap-4\">\n <div className=\"space-y-1\">\n <div className=\"text-sm font-bold text-white\">{copy.nextTitle}</div>\n <div className=\"text-sm text-slate-300\">{copy.nextBody}</div>\n </div>\n <div className=\"flex flex-col sm:flex-row gap-3 w-full md:w-auto\">\n <a\n href={sampleProjectHref}\n onClick={(event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'open_sample_project',\n })\n }\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl bg-blue-500 text-white font-bold hover:bg-blue-600 transition w-full md:w-auto\"\n >\n {copy.nextCtaSample} <ArrowRight size={16} />\n </a>\n <a\n href=\"/tools/5-panel-screenshot-framework/\"\n onClick={() => trackEvent('tool_cta_click', { tool: 'screenshot_workload_calculator', cta: 'open_framework' })}\n className=\"inline-flex items-center justify-center gap-2 px-4 py-3 rounded-xl border border-slate-700 bg-slate-950 text-slate-200 font-bold hover:bg-slate-900 transition w-full md:w-auto\"\n >\n {copy.nextCta} <ArrowRight size={16} />\n </a>\n </div>\n </section>\n </main>\n <StickyMobileCta\n primary={{\n label: copy.startFree,\n href: agentCliHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'sticky_primary',\n }),\n }}\n secondary={{\n label: copy.nextCtaSample,\n href: sampleProjectHref,\n onClick: (event) =>\n trackEventAndFollowLink(event, 'tool_cta_click', {\n tool: 'screenshot_workload_calculator',\n cta: 'sticky_secondary',\n }),\n }}\n />\n </div>\n );\n};\n\nexport default WorkloadCalculator;\n"],"names":["clampNumber","value","min","max","fallback","num","normalizeLang","lang","COPY","shots","locales","deviceSizes","multiplier","images","minutesPerImage","WorkloadCalculator","t","i18n","useTranslation","usePageTitle","numberLocale","copy","openAppHref","agentCliHref","firstExportHref","configDownloadHref","csvDownloadHref","sampleProjectHref","copyButtonLabel","codeToggleLabel","defaultCodeOpen","numberFormatter","useMemo","formatNumber","useCallback","formatDuration","minutes","hours","days","useEffect","trackEvent","hasInteractedRef","useRef","markInteracted","screenshotsPerLocale","setScreenshotsPerLocale","useState","localeCount","setLocaleCount","includeIOS","setIncludeIOS","includeAndroid","setIncludeAndroid","iosDeviceSizes","setIosDeviceSizes","androidDeviceSizes","setAndroidDeviceSizes","setMinutesPerImage","minSetBullets","bullets","presets","applyPreset","preset","totals","iosSizes","androidSizes","totalImages","manualMinutes","downloadCsvTemplate","slideCount","headerCells","i","enRow","jaRow","csvContent","csv","link","jsxs","jsx","StagingBadge","SiteHeader","event","trackEventAndFollowLink","ArrowRight","Calculator","CopyButton","copyLabel","copyState","Fragment","ClipboardCopy","ChevronDown","CliPreflightCard","e","item","Download","StickyMobileCta"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as e}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=calculator-
|
|
1
|
+
import{c as e}from"./LanguageSwitcher-BD9N-dla.js";const t=[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]],y=e("calculator",t);export{y as C};
|
|
2
|
+
//# sourceMappingURL=calculator-CiqKFdRp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calculator-
|
|
1
|
+
{"version":3,"file":"calculator-CiqKFdRp.js","sources":["../../node_modules/lucide-react/dist/esm/icons/calculator.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"16\", height: \"20\", x: \"4\", y: \"2\", rx: \"2\", key: \"1nb95v\" }],\n [\"line\", { x1: \"8\", x2: \"16\", y1: \"6\", y2: \"6\", key: \"x4nwl0\" }],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"14\", y2: \"18\", key: \"wjye3r\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }],\n [\"path\", { d: \"M12 18h.01\", key: \"mhygvu\" }],\n [\"path\", { d: \"M8 18h.01\", key: \"lrp35t\" }]\n];\nconst Calculator = createLucideIcon(\"calculator\", __iconNode);\n\nexport { __iconNode, Calculator as default };\n//# sourceMappingURL=calculator.js.map\n"],"names":["__iconNode","Calculator","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,GAAI,IAAK,GAAI,KAAM,GAAI,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC/D,CAAC,OAAQ,CAAE,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,GAAI,KAAM,IAAK,QAAQ,CAAE,EAClE,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,CAC5C,EACMC,EAAaC,EAAiB,aAAcF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chevron-down-
|
|
1
|
+
{"version":3,"file":"chevron-down-_xIkRLaA.js","sources":["../../node_modules/lucide-react/dist/esm/icons/chevron-down.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]];\nconst ChevronDown = createLucideIcon(\"chevron-down\", __iconNode);\n\nexport { __iconNode, ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n"],"names":["__iconNode","ChevronDown","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,eAAgB,IAAK,QAAQ,CAAE,CAAC,EAC5DC,EAAcC,EAAiB,eAAgBF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as a}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=clipboard-copy-
|
|
1
|
+
import{c as a}from"./LanguageSwitcher-BD9N-dla.js";const d=[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2",key:"4jdomd"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v4",key:"3hqy98"}],["path",{d:"M21 14H11",key:"1bme5i"}],["path",{d:"m15 10-4 4 4 4",key:"5dvupr"}]],o=a("clipboard-copy",d);export{o as C};
|
|
2
|
+
//# sourceMappingURL=clipboard-copy-DCJioqIc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard-copy-
|
|
1
|
+
{"version":3,"file":"clipboard-copy-DCJioqIc.js","sources":["../../node_modules/lucide-react/dist/esm/icons/clipboard-copy.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\"path\", { d: \"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\", key: \"4jdomd\" }],\n [\"path\", { d: \"M16 4h2a2 2 0 0 1 2 2v4\", key: \"3hqy98\" }],\n [\"path\", { d: \"M21 14H11\", key: \"1bme5i\" }],\n [\"path\", { d: \"m15 10-4 4 4 4\", key: \"5dvupr\" }]\n];\nconst ClipboardCopy = createLucideIcon(\"clipboard-copy\", __iconNode);\n\nexport { __iconNode, ClipboardCopy as default };\n//# sourceMappingURL=clipboard-copy.js.map\n"],"names":["__iconNode","ClipboardCopy","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,IAAK,OAAQ,IAAK,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACrF,CAAC,OAAQ,CAAE,EAAG,4DAA6D,IAAK,QAAQ,CAAE,EAC1F,CAAC,OAAQ,CAAE,EAAG,0BAA2B,IAAK,QAAQ,CAAE,EACxD,CAAC,OAAQ,CAAE,EAAG,YAAa,IAAK,QAAQ,CAAE,EAC1C,CAAC,OAAQ,CAAE,EAAG,iBAAkB,IAAK,QAAQ,CAAE,CACjD,EACMC,EAAgBC,EAAiB,iBAAkBF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=copy-
|
|
1
|
+
import{c}from"./LanguageSwitcher-BD9N-dla.js";const e=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],t=c("copy",e);export{t as C};
|
|
2
|
+
//# sourceMappingURL=copy-AQdWJCcs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-
|
|
1
|
+
{"version":3,"file":"copy-AQdWJCcs.js","sources":["../../node_modules/lucide-react/dist/esm/icons/copy.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n];\nconst Copy = createLucideIcon(\"copy\", __iconNode);\n\nexport { __iconNode, Copy as default };\n//# sourceMappingURL=copy.js.map\n"],"names":["__iconNode","Copy","createLucideIcon"],"mappings":"8CASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,SAAU,EACvF,CAAC,OAAQ,CAAE,EAAG,0DAA2D,IAAK,QAAQ,CAAE,CAC1F,EACMC,EAAOC,EAAiB,OAAQF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as o}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=crop-
|
|
1
|
+
import{c as o}from"./LanguageSwitcher-BD9N-dla.js";const a=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],e=o("crop",a);export{e as C};
|
|
2
|
+
//# sourceMappingURL=crop-DOMVp18h.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crop-
|
|
1
|
+
{"version":3,"file":"crop-DOMVp18h.js","sources":["../../node_modules/lucide-react/dist/esm/icons/crop.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M6 2v14a2 2 0 0 0 2 2h14\", key: \"ron5a4\" }],\n [\"path\", { d: \"M18 22V8a2 2 0 0 0-2-2H2\", key: \"7s9ehn\" }]\n];\nconst Crop = createLucideIcon(\"crop\", __iconNode);\n\nexport { __iconNode, Crop as default };\n//# sourceMappingURL=crop.js.map\n"],"names":["__iconNode","Crop","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,EACzD,CAAC,OAAQ,CAAE,EAAG,2BAA4B,IAAK,QAAQ,CAAE,CAC3D,EACMC,EAAOC,EAAiB,OAAQF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as o}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=download-
|
|
1
|
+
import{c as o}from"./LanguageSwitcher-BD9N-dla.js";const a=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],e=o("download",a);export{e as D};
|
|
2
|
+
//# sourceMappingURL=download-D5RbyXDm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-
|
|
1
|
+
{"version":3,"file":"download-D5RbyXDm.js","sources":["../../node_modules/lucide-react/dist/esm/icons/download.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M12 15V3\", key: \"m9g1x1\" }],\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"path\", { d: \"m7 10 5 5 5-5\", key: \"brsn70\" }]\n];\nconst Download = createLucideIcon(\"download\", __iconNode);\n\nexport { __iconNode, Download as default };\n//# sourceMappingURL=download.js.map\n"],"names":["__iconNode","Download","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,4CAA6C,IAAK,QAAQ,CAAE,EAC1E,CAAC,OAAQ,CAAE,EAAG,gBAAiB,IAAK,QAAQ,CAAE,CAChD,EACMC,EAAWC,EAAiB,WAAYF,CAAU","x_google_ignoreList":[0]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as e}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=eye-
|
|
1
|
+
import{c as e}from"./LanguageSwitcher-BD9N-dla.js";const c=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],t=e("eye-off",c);const a=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],y=e("eye",a);export{t as E,y as a};
|
|
2
|
+
//# sourceMappingURL=eye-CLcZi_uk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eye-
|
|
1
|
+
{"version":3,"file":"eye-CLcZi_uk.js","sources":["../../node_modules/lucide-react/dist/esm/icons/eye-off.js","../../node_modules/lucide-react/dist/esm/icons/eye.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\",\n key: \"ct8e1f\"\n }\n ],\n [\"path\", { d: \"M14.084 14.158a3 3 0 0 1-4.242-4.242\", key: \"151rxh\" }],\n [\n \"path\",\n {\n d: \"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\",\n key: \"13bj9a\"\n }\n ],\n [\"path\", { d: \"m2 2 20 20\", key: \"1ooewy\" }]\n];\nconst EyeOff = createLucideIcon(\"eye-off\", __iconNode);\n\nexport { __iconNode, EyeOff as default };\n//# sourceMappingURL=eye-off.js.map\n","/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\",\n key: \"1nclc0\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nconst Eye = createLucideIcon(\"eye\", __iconNode);\n\nexport { __iconNode, Eye as default };\n//# sourceMappingURL=eye.js.map\n"],"names":["__iconNode","EyeOff","createLucideIcon","Eye"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CACE,OACA,CACE,EAAG,iGACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,uCAAwC,IAAK,QAAQ,CAAE,EACrE,CACE,OACA,CACE,EAAG,+FACH,IAAK,QACX,CACA,EACE,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,CAC7C,EACMC,EAASC,EAAiB,UAAWF,CAAU,EClBrD,MAAMA,EAAa,CACjB,CACE,OACA,CACE,EAAG,wGACH,IAAK,QACX,CACA,EACE,CAAC,SAAU,CAAE,GAAI,KAAM,GAAI,KAAM,EAAG,IAAK,IAAK,QAAQ,CAAE,CAC1D,EACMG,EAAMD,EAAiB,MAAOF,CAAU","x_google_ignoreList":[0,1]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{c as t}from"./LanguageSwitcher-
|
|
2
|
-
//# sourceMappingURL=grid-3x3-
|
|
1
|
+
import{c as t}from"./LanguageSwitcher-BD9N-dla.js";const e=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],d=t("grid-3x3",e);export{d as G};
|
|
2
|
+
//# sourceMappingURL=grid-3x3-AKmIrhzv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grid-3x3-
|
|
1
|
+
{"version":3,"file":"grid-3x3-AKmIrhzv.js","sources":["../../node_modules/lucide-react/dist/esm/icons/grid-3x3.js"],"sourcesContent":["/**\n * @license lucide-react v0.563.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M3 9h18\", key: \"1pudct\" }],\n [\"path\", { d: \"M3 15h18\", key: \"5xshup\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }],\n [\"path\", { d: \"M15 3v18\", key: \"14nvp0\" }]\n];\nconst Grid3x3 = createLucideIcon(\"grid-3x3\", __iconNode);\n\nexport { __iconNode, Grid3x3 as default };\n//# sourceMappingURL=grid-3x3.js.map\n"],"names":["__iconNode","Grid3x3","createLucideIcon"],"mappings":"mDASA,MAAMA,EAAa,CACjB,CAAC,OAAQ,CAAE,MAAO,KAAM,OAAQ,KAAM,EAAG,IAAK,EAAG,IAAK,GAAI,IAAK,IAAK,QAAQ,CAAE,EAC9E,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACMC,EAAUC,EAAiB,WAAYF,CAAU","x_google_ignoreList":[0]}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|