@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.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/dist/bundles.json +1 -1
- package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{6546-lite-991b6e8255.chunk.css → 6596-lite-e22262b911.chunk.css} +2 -1
- package/dist/css/{1867-lite-991b6e8255.chunk.css → 9010-lite-e22262b911.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
- package/dist/scripts/1063-5a732288dc-lite.chunk.js +2 -0
- package/dist/scripts/1063-5a732288dc-lite.chunk.js.map +1 -0
- package/dist/scripts/{9173-2392d447a6-lite.chunk.js → 1104-f057c6dea1-lite.chunk.js} +3 -3
- package/dist/scripts/{9173-2392d447a6-lite.chunk.js.map → 1104-f057c6dea1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1125-aac132b88f-lite.chunk.js → 1125-c5138ef662-lite.chunk.js} +2 -2
- package/dist/scripts/1125-c5138ef662-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-9b7d850bab-lite.chunk.js +2 -0
- package/dist/scripts/1169-9b7d850bab-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-ca519ec56b-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-ca519ec56b-lite.chunk.js.map} +1 -1
- package/dist/scripts/1672-0d1fc90529-lite.chunk.js +3 -0
- package/dist/scripts/1672-0d1fc90529-lite.chunk.js.map +1 -0
- package/dist/scripts/1725-99450ed637-lite.chunk.js +2 -0
- package/dist/scripts/1725-99450ed637-lite.chunk.js.map +1 -0
- package/dist/scripts/1891-5914c54eca-lite.chunk.js +2 -0
- package/dist/scripts/1891-5914c54eca-lite.chunk.js.map +1 -0
- package/dist/scripts/1896-399a91d18c-lite.chunk.js +2 -0
- package/dist/scripts/1896-399a91d18c-lite.chunk.js.map +1 -0
- package/dist/scripts/193-797b89797a-lite.chunk.js +2 -0
- package/dist/scripts/193-797b89797a-lite.chunk.js.map +1 -0
- package/dist/scripts/209-fe96739cb5-lite.chunk.js +2 -0
- package/dist/scripts/209-fe96739cb5-lite.chunk.js.map +1 -0
- package/dist/scripts/2134-b8d5c46887-lite.chunk.js +2 -0
- package/dist/scripts/2134-b8d5c46887-lite.chunk.js.map +1 -0
- package/dist/scripts/2142-f71cf5c71f-lite.chunk.js +2 -0
- package/dist/scripts/2142-f71cf5c71f-lite.chunk.js.map +1 -0
- package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js +2 -0
- package/dist/scripts/2402-ff1b4adf1a-lite.chunk.js.map +1 -0
- package/dist/scripts/2548-c5dd2899df-lite.chunk.js +2 -0
- package/dist/scripts/2548-c5dd2899df-lite.chunk.js.map +1 -0
- package/dist/scripts/2952-c3a826b714-lite.chunk.js +2 -0
- package/dist/scripts/2952-c3a826b714-lite.chunk.js.map +1 -0
- package/dist/scripts/3404-23125f10ea-lite.chunk.js +2 -0
- package/dist/scripts/3404-23125f10ea-lite.chunk.js.map +1 -0
- package/dist/scripts/3633-f3609526a5-lite.chunk.js +2 -0
- package/dist/scripts/3633-f3609526a5-lite.chunk.js.map +1 -0
- package/dist/scripts/3728-eed9e78985-lite.chunk.js +2 -0
- package/dist/scripts/3728-eed9e78985-lite.chunk.js.map +1 -0
- package/dist/scripts/4063-5fa157657f-lite.chunk.js +2 -0
- package/dist/scripts/4063-5fa157657f-lite.chunk.js.map +1 -0
- package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js +2 -0
- package/dist/scripts/4182-ba03f3ce3c-lite.chunk.js.map +1 -0
- package/dist/scripts/4273-e42f763f00-lite.chunk.js +3 -0
- package/dist/scripts/4273-e42f763f00-lite.chunk.js.map +1 -0
- package/dist/scripts/4395-d0815835c8-lite.chunk.js +2 -0
- package/dist/scripts/4395-d0815835c8-lite.chunk.js.map +1 -0
- package/dist/scripts/4502-af4903784e-lite.chunk.js +2 -0
- package/dist/scripts/4502-af4903784e-lite.chunk.js.map +1 -0
- package/dist/scripts/4850-bb9541d3ed-lite.chunk.js +2 -0
- package/dist/scripts/4850-bb9541d3ed-lite.chunk.js.map +1 -0
- package/dist/scripts/5573-4352a3537e-lite.chunk.js +2 -0
- package/dist/scripts/5573-4352a3537e-lite.chunk.js.map +1 -0
- package/dist/scripts/5595-3acc9593bf-lite.chunk.js +2 -0
- package/dist/scripts/5595-3acc9593bf-lite.chunk.js.map +1 -0
- package/dist/scripts/5606-69c0ca2b97-lite.chunk.js +2 -0
- package/dist/scripts/5606-69c0ca2b97-lite.chunk.js.map +1 -0
- package/dist/scripts/5877-628732da21-lite.chunk.js +2 -0
- package/dist/scripts/5877-628732da21-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-cd98109a7b-lite.chunk.js +2 -0
- package/dist/scripts/5936-cd98109a7b-lite.chunk.js.map +1 -0
- package/dist/scripts/{5940-f335f8c290-lite.chunk.js → 5940-2767b40c40-lite.chunk.js} +2 -2
- package/dist/scripts/5940-2767b40c40-lite.chunk.js.map +1 -0
- package/dist/scripts/6054-1e9b86d631-lite.chunk.js +2 -0
- package/dist/scripts/6054-1e9b86d631-lite.chunk.js.map +1 -0
- package/dist/scripts/6138-2ef7ee071a-lite.chunk.js +2 -0
- package/dist/scripts/6138-2ef7ee071a-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-09b51a9d32-lite.chunk.js} +3 -3
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-09b51a9d32-lite.chunk.js.map} +1 -1
- package/dist/scripts/6263-8a7931bf51-lite.chunk.js +2 -0
- package/dist/scripts/6263-8a7931bf51-lite.chunk.js.map +1 -0
- package/dist/scripts/6290-28ae0e8a60-lite.chunk.js +2 -0
- package/dist/scripts/6290-28ae0e8a60-lite.chunk.js.map +1 -0
- package/dist/scripts/6470-9a700cabce-lite.chunk.js +2 -0
- package/dist/scripts/6470-9a700cabce-lite.chunk.js.map +1 -0
- package/dist/scripts/6481-035d218a77-lite.chunk.js +2 -0
- package/dist/scripts/6481-035d218a77-lite.chunk.js.map +1 -0
- package/dist/scripts/6532-59e9abf69d-lite.chunk.js +2 -0
- package/dist/scripts/6532-59e9abf69d-lite.chunk.js.map +1 -0
- package/dist/scripts/6596-f75129c039-lite.chunk.js +2 -0
- package/dist/scripts/6596-f75129c039-lite.chunk.js.map +1 -0
- package/dist/scripts/6604-9adec889c7-lite.chunk.js +2 -0
- package/dist/scripts/6604-9adec889c7-lite.chunk.js.map +1 -0
- package/dist/scripts/6746-3f501b95cf-lite.chunk.js +2 -0
- package/dist/scripts/6746-3f501b95cf-lite.chunk.js.map +1 -0
- package/dist/scripts/714-c00ad56229-lite.chunk.js +2 -0
- package/dist/scripts/714-c00ad56229-lite.chunk.js.map +1 -0
- package/dist/scripts/7163-84c2b15394-lite.chunk.js +2 -0
- package/dist/scripts/7163-84c2b15394-lite.chunk.js.map +1 -0
- package/dist/scripts/7178-ed74c33056-lite.chunk.js +2 -0
- package/dist/scripts/7178-ed74c33056-lite.chunk.js.map +1 -0
- package/dist/scripts/7223-0bfab7e57a-lite.chunk.js +2 -0
- package/dist/scripts/7223-0bfab7e57a-lite.chunk.js.map +1 -0
- package/dist/scripts/7234-84c087600e-lite.chunk.js +2 -0
- package/dist/scripts/7234-84c087600e-lite.chunk.js.map +1 -0
- package/dist/scripts/7267-fd5085f5c9-lite.chunk.js +2 -0
- package/dist/scripts/7267-fd5085f5c9-lite.chunk.js.map +1 -0
- package/dist/scripts/7633-6c1ffdd082-lite.chunk.js +2 -0
- package/dist/scripts/7633-6c1ffdd082-lite.chunk.js.map +1 -0
- package/dist/scripts/7679-8f2d6a3487-lite.chunk.js +2 -0
- package/dist/scripts/7679-8f2d6a3487-lite.chunk.js.map +1 -0
- package/dist/scripts/7757-7e293be936-lite.chunk.js +2 -0
- package/dist/scripts/7757-7e293be936-lite.chunk.js.map +1 -0
- package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js +2 -0
- package/dist/scripts/7795-c6d38bc3e5-lite.chunk.js.map +1 -0
- package/dist/scripts/7818-230982fc27-lite.chunk.js +2 -0
- package/dist/scripts/7818-230982fc27-lite.chunk.js.map +1 -0
- package/dist/scripts/8323-360541a2a8-lite.chunk.js +3 -0
- package/dist/scripts/8323-360541a2a8-lite.chunk.js.map +1 -0
- package/dist/scripts/8709-c4f1068232-lite.chunk.js +2 -0
- package/dist/scripts/8709-c4f1068232-lite.chunk.js.map +1 -0
- package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js +2 -0
- package/dist/scripts/8982-a3dc4a6b3c-lite.chunk.js.map +1 -0
- package/dist/scripts/9010-024dcc8f9a-lite.chunk.js +2 -0
- package/dist/scripts/9010-024dcc8f9a-lite.chunk.js.map +1 -0
- package/dist/scripts/9016-82d7e0afb9-lite.chunk.js +3 -0
- package/dist/scripts/9016-82d7e0afb9-lite.chunk.js.map +1 -0
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js +2 -0
- package/dist/scripts/9173-f9708ec0de-lite.chunk.js.map +1 -0
- package/dist/scripts/9230-ae200d2bd3-lite.chunk.js +3 -0
- package/dist/scripts/9230-ae200d2bd3-lite.chunk.js.map +1 -0
- package/dist/scripts/9359-1fb4413e0d-lite.chunk.js +2 -0
- package/dist/scripts/9359-1fb4413e0d-lite.chunk.js.map +1 -0
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-e1a02b01ce-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-e1a02b01ce-lite.chunk.js.map} +1 -1
- package/dist/scripts/9399-d7a92ce84a-lite.chunk.js +2 -0
- package/dist/scripts/9399-d7a92ce84a-lite.chunk.js.map +1 -0
- package/dist/scripts/{9478-99486906b9-lite.chunk.js → 9478-abfa7ed3cc-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-99486906b9-lite.chunk.js.map → 9478-abfa7ed3cc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-225db845ab-lite.chunk.js} +3 -3
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-225db845ab-lite.chunk.js.map} +1 -1
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
- package/dist/scripts/9719-9736913451-lite.chunk.js +3 -0
- package/dist/scripts/9719-9736913451-lite.chunk.js.map +1 -0
- package/dist/scripts/999-bdc7956050-lite.chunk.js +2 -0
- package/dist/scripts/999-bdc7956050-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-9f8729bedb.min.js +3 -0
- package/dist/scripts/bundle-9f8729bedb.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1125-aac132b88f-lite.chunk.js.map +0 -1
- package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
- package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
- package/dist/scripts/1672-672f298d82-lite.chunk.js +0 -3
- package/dist/scripts/1672-672f298d82-lite.chunk.js.map +0 -1
- package/dist/scripts/1725-075015497e-lite.chunk.js +0 -2
- package/dist/scripts/1725-075015497e-lite.chunk.js.map +0 -1
- package/dist/scripts/1818-64a145c5fe-lite.chunk.js +0 -2
- package/dist/scripts/1818-64a145c5fe-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-993521951d-lite.chunk.js +0 -2
- package/dist/scripts/1820-993521951d-lite.chunk.js.map +0 -1
- package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
- package/dist/scripts/1867-260ef9f8c2-lite.chunk.js.map +0 -1
- package/dist/scripts/1891-e80f9f17ee-lite.chunk.js +0 -2
- package/dist/scripts/1891-e80f9f17ee-lite.chunk.js.map +0 -1
- package/dist/scripts/1896-32a6eeda5c-lite.chunk.js +0 -2
- package/dist/scripts/1896-32a6eeda5c-lite.chunk.js.map +0 -1
- package/dist/scripts/193-f08b054631-lite.chunk.js +0 -2
- package/dist/scripts/193-f08b054631-lite.chunk.js.map +0 -1
- package/dist/scripts/209-de1729d1b1-lite.chunk.js +0 -2
- package/dist/scripts/209-de1729d1b1-lite.chunk.js.map +0 -1
- package/dist/scripts/2134-bca2f4697e-lite.chunk.js +0 -2
- package/dist/scripts/2134-bca2f4697e-lite.chunk.js.map +0 -1
- package/dist/scripts/2703-591ccf069c-lite.chunk.js +0 -2
- package/dist/scripts/2703-591ccf069c-lite.chunk.js.map +0 -1
- package/dist/scripts/3404-171fdee802-lite.chunk.js +0 -2
- package/dist/scripts/3404-171fdee802-lite.chunk.js.map +0 -1
- package/dist/scripts/3633-66d28be6f8-lite.chunk.js +0 -2
- package/dist/scripts/3633-66d28be6f8-lite.chunk.js.map +0 -1
- package/dist/scripts/3728-d7ecfc6667-lite.chunk.js +0 -2
- package/dist/scripts/3728-d7ecfc6667-lite.chunk.js.map +0 -1
- package/dist/scripts/4182-7aecc28a6f-lite.chunk.js +0 -2
- package/dist/scripts/4182-7aecc28a6f-lite.chunk.js.map +0 -1
- package/dist/scripts/4395-64da004753-lite.chunk.js +0 -2
- package/dist/scripts/4395-64da004753-lite.chunk.js.map +0 -1
- package/dist/scripts/4502-2e30d86385-lite.chunk.js +0 -2
- package/dist/scripts/4502-2e30d86385-lite.chunk.js.map +0 -1
- package/dist/scripts/5143-b6896dad98-lite.chunk.js +0 -2
- package/dist/scripts/5143-b6896dad98-lite.chunk.js.map +0 -1
- package/dist/scripts/5573-6cd98b69f2-lite.chunk.js +0 -2
- package/dist/scripts/5573-6cd98b69f2-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-c4397e12a8-lite.chunk.js +0 -2
- package/dist/scripts/5595-c4397e12a8-lite.chunk.js.map +0 -1
- package/dist/scripts/5606-6c25caedc4-lite.chunk.js +0 -2
- package/dist/scripts/5606-6c25caedc4-lite.chunk.js.map +0 -1
- package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js +0 -2
- package/dist/scripts/5877-ddfaf6a7f5-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-6fe810d3cb-lite.chunk.js +0 -2
- package/dist/scripts/5936-6fe810d3cb-lite.chunk.js.map +0 -1
- package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +0 -1
- package/dist/scripts/6054-14d4ceeae3-lite.chunk.js +0 -2
- package/dist/scripts/6054-14d4ceeae3-lite.chunk.js.map +0 -1
- package/dist/scripts/6094-24c430efb3-lite.chunk.js +0 -2
- package/dist/scripts/6094-24c430efb3-lite.chunk.js.map +0 -1
- package/dist/scripts/6138-21ae042a7b-lite.chunk.js +0 -2
- package/dist/scripts/6138-21ae042a7b-lite.chunk.js.map +0 -1
- package/dist/scripts/6263-3455286798-lite.chunk.js +0 -2
- package/dist/scripts/6263-3455286798-lite.chunk.js.map +0 -1
- package/dist/scripts/6290-56412c6663-lite.chunk.js +0 -2
- package/dist/scripts/6290-56412c6663-lite.chunk.js.map +0 -1
- package/dist/scripts/6415-b29029aa1b-lite.chunk.js +0 -2
- package/dist/scripts/6415-b29029aa1b-lite.chunk.js.map +0 -1
- package/dist/scripts/6470-6216086d63-lite.chunk.js +0 -2
- package/dist/scripts/6470-6216086d63-lite.chunk.js.map +0 -1
- package/dist/scripts/6481-899eba8b3d-lite.chunk.js +0 -2
- package/dist/scripts/6481-899eba8b3d-lite.chunk.js.map +0 -1
- package/dist/scripts/6532-a6b65c91a7-lite.chunk.js +0 -2
- package/dist/scripts/6532-a6b65c91a7-lite.chunk.js.map +0 -1
- package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
- package/dist/scripts/6546-faa6f93a0e-lite.chunk.js.map +0 -1
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
- package/dist/scripts/6604-92193d6d68-lite.chunk.js +0 -2
- package/dist/scripts/6604-92193d6d68-lite.chunk.js.map +0 -1
- package/dist/scripts/6746-b5b2739944-lite.chunk.js +0 -2
- package/dist/scripts/6746-b5b2739944-lite.chunk.js.map +0 -1
- package/dist/scripts/679-e18e7956d0-lite.chunk.js +0 -2
- package/dist/scripts/679-e18e7956d0-lite.chunk.js.map +0 -1
- package/dist/scripts/714-432082f4fa-lite.chunk.js +0 -2
- package/dist/scripts/714-432082f4fa-lite.chunk.js.map +0 -1
- package/dist/scripts/7178-e603ea6b58-lite.chunk.js +0 -2
- package/dist/scripts/7178-e603ea6b58-lite.chunk.js.map +0 -1
- package/dist/scripts/7223-135cc7d675-lite.chunk.js +0 -2
- package/dist/scripts/7223-135cc7d675-lite.chunk.js.map +0 -1
- package/dist/scripts/729-c704d587d3-lite.chunk.js +0 -2
- package/dist/scripts/729-c704d587d3-lite.chunk.js.map +0 -1
- package/dist/scripts/7679-b01da2c09d-lite.chunk.js +0 -2
- package/dist/scripts/7679-b01da2c09d-lite.chunk.js.map +0 -1
- package/dist/scripts/7757-320e868e90-lite.chunk.js +0 -2
- package/dist/scripts/7757-320e868e90-lite.chunk.js.map +0 -1
- package/dist/scripts/7795-3ca0855d3a-lite.chunk.js +0 -2
- package/dist/scripts/7795-3ca0855d3a-lite.chunk.js.map +0 -1
- package/dist/scripts/7818-2eafc5f812-lite.chunk.js +0 -2
- package/dist/scripts/7818-2eafc5f812-lite.chunk.js.map +0 -1
- package/dist/scripts/8323-99cb03891e-lite.chunk.js +0 -3
- package/dist/scripts/8323-99cb03891e-lite.chunk.js.map +0 -1
- package/dist/scripts/8766-bcc7f11eac-lite.chunk.js +0 -2
- package/dist/scripts/8766-bcc7f11eac-lite.chunk.js.map +0 -1
- package/dist/scripts/8800-335154fe11-lite.chunk.js +0 -2
- package/dist/scripts/8800-335154fe11-lite.chunk.js.map +0 -1
- package/dist/scripts/8982-63c31685bf-lite.chunk.js +0 -2
- package/dist/scripts/8982-63c31685bf-lite.chunk.js.map +0 -1
- package/dist/scripts/9016-0c078a39cb-lite.chunk.js +0 -3
- package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +0 -1
- package/dist/scripts/9226-c236c0eeb1-lite.chunk.js +0 -2
- package/dist/scripts/9226-c236c0eeb1-lite.chunk.js.map +0 -1
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +0 -3
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +0 -1
- package/dist/scripts/9308-362f86711f-lite.chunk.js +0 -3
- package/dist/scripts/9308-362f86711f-lite.chunk.js.map +0 -1
- package/dist/scripts/9359-cc085d48a4-lite.chunk.js +0 -2
- package/dist/scripts/9359-cc085d48a4-lite.chunk.js.map +0 -1
- package/dist/scripts/9399-2a314327ac-lite.chunk.js +0 -2
- package/dist/scripts/9399-2a314327ac-lite.chunk.js.map +0 -1
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
- package/dist/scripts/9719-cf7d4172b6-lite.chunk.js +0 -3
- package/dist/scripts/9719-cf7d4172b6-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-724fc2e388.min.js +0 -3
- package/dist/scripts/bundle-724fc2e388.min.js.map +0 -1
- /package/dist/css/{5143-lite-676baa8218.chunk.css → 1063-lite-676baa8218.chunk.css} +0 -0
- /package/dist/css/{9173-lite-b361d438f6.chunk.css → 1104-lite-b361d438f6.chunk.css} +0 -0
- /package/dist/css/{679-lite-00eb7dadb2.chunk.css → 2952-lite-00eb7dadb2.chunk.css} +0 -0
- /package/dist/css/{4860-lite-93d7fad455.chunk.css → 4063-lite-93d7fad455.chunk.css} +0 -0
- /package/dist/css/{9308-lite-a3c7435ba4.chunk.css → 4273-lite-a3c7435ba4.chunk.css} +0 -0
- /package/dist/css/{729-lite-93d7fad455.chunk.css → 4850-lite-93d7fad455.chunk.css} +0 -0
- /package/dist/css/{8766-lite-8c5d7658ec.chunk.css → 7163-lite-8c5d7658ec.chunk.css} +0 -0
- /package/dist/css/{1818-lite-5ef1706d69.chunk.css → 7234-lite-5ef1706d69.chunk.css} +0 -0
- /package/dist/css/{6415-lite-707657102b.chunk.css → 9173-lite-707657102b.chunk.css} +0 -0
- /package/dist/css/{1820-lite-c88eb54bee.chunk.css → 999-lite-c88eb54bee.chunk.css} +0 -0
- /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1104-f057c6dea1-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{1672-672f298d82-lite.chunk.js.LICENSE.txt → 1379-ca519ec56b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 1672-0d1fc90529-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8323-99cb03891e-lite.chunk.js.LICENSE.txt → 4273-e42f763f00-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9173-2392d447a6-lite.chunk.js.LICENSE.txt → 624-09b51a9d32-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9230-6dee40b1fb-lite.chunk.js.LICENSE.txt → 8323-360541a2a8-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9016-0c078a39cb-lite.chunk.js.LICENSE.txt → 9016-82d7e0afb9-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9308-362f86711f-lite.chunk.js.LICENSE.txt → 9230-ae200d2bd3-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-e1a02b01ce-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-99486906b9-lite.chunk.js.LICENSE.txt → 9478-abfa7ed3cc-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-225db845ab-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9719-cf7d4172b6-lite.chunk.js.LICENSE.txt → 9719-9736913451-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-9f8729bedb.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6587-ba8e36be0b-lite.chunk.js","mappings":"mJAGaA,EAAe,CAC1BC,uBAAsB,SAACC,EAA+BC,GACpD,OAAIA,GACK,IAAAC,cAAaF,EAAWC,GAE1BD,CACT,E,mFCRF,SAAgB,oBAAsB,QAAQ,iBAAmB,S,sGCQjE,IAAMG,EAAY,6BAEZC,EAAmB,IAQnB,SAAUC,EAAoBC,GAClC,I,MAA8D,G,GAAlC,OAA+B,CAAC,G,EAAE,E,o4BAAtDC,EAAG,KAAEC,EAAU,KAQvB,OACE,uBAAKD,IAAKA,EAAKE,UAAWH,EAAMG,WAC9B,qBAAGA,UAAS,UAAK,sBAA0B,UAAS,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,yBACvF,gBAACC,EAAA,EAAO,CACNC,OAAQN,EAAIO,QACZC,KAAMP,EACNQ,UAAWV,EAAMW,mBAXFC,SAASC,gBAAgBC,cAA0B,QAAX,EAAAb,EAAIO,eAAO,eAAEO,wBAAwBC,QAE5ElB,EAS0CE,EAAMW,kBAAoBX,EAAMU,WAE1F,uBAAKP,UAAS,UAAK,mBAAuB,0CACxC,yBAAG,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aACtC,qBAAGF,UAAU,oBAAmB,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,eAK7E,C,qLCxBaY,EAAmB,QAAW,SAASjB,G,MACpCkB,EAAkDlB,EAAxDmB,KAAYC,EAA4CpB,EAA5CoB,cAAeC,EAA6BrB,EAA7BqB,aAAcC,EAAetB,EAAfsB,WAC3CC,GAAiB,OAAmD,QAAjC,EAAAL,EAAKM,oCAA4B,eAAEL,KAAMnB,EAAMyB,WAExF,OACE,uBAAKtB,UAAS,qCACZ,gBAACuB,EAAA,EAAc,CACbC,KAAK,SACLC,aAAcC,EAAA,cACdC,MAAOZ,EACPa,QAAST,EAAWJ,GACpBc,aAAc,CAAEC,KAAMb,GACtBc,QAASb,EACTc,cAAenC,EAAMmC,cACrBC,iBAAkBpC,EAAMoC,iBACxBC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBC,YAAavC,EAAMuC,YACnBC,SAAUjB,EACVkB,cAAc,EACdC,SAAU1C,EAAM0C,SAChBC,UAAW3C,EAAM2C,YAGnB,uBAAKxC,UAAU,QACb,gBAACyC,EAAA,EAAa,iBACR5C,EAAK,CACT8B,MAAOZ,EACPa,QAAS/B,EAAMsB,WAAWJ,OAKpC,ICnCMrB,EAAY,yBAgBZ,SAAUgD,EAAc7C,G,MAC5B,IAAKA,EAAM8C,gBAA4B,QAAX,EAAA9C,EAAM+C,aAAK,eAAEC,QACvC,OAAO,iCAET,IAAMC,EAAgBC,EAAA,UAAoBlD,EAAM8B,OAiB1CqB,EAAQC,EAAA,YACZvD,EACAoD,EAAgB,QAAU,aAC1B,CAAEI,MAAOrD,EAAM+C,MAAMC,SAGvB,OACE,2BACE7C,UAAU,oBACVmD,GAAIC,EAAA,QACJtD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAIH,EAAA,QAAsBC,EAC1F,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAUC,EAAA,UACVC,WAAY9D,EAAM+C,MAClBgB,YAAU,EACVC,gBAAiB,SAAC9C,GAChB,MAAO,CACL+C,YAAa,UACbC,OAAQ,oBACRC,KAAM,CAAEjD,EAAKoC,GAAIc,EAAA,UAAmBlD,EAAKyC,OAE7C,EACA5B,QAxCAmB,EAAA,UAAoBlD,EAAM8B,OACrB,CACLoC,OAAQ,uBACRD,YAAa,WACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAIc,EAAA,UAAmBpE,EAAM8B,MAAM6B,QAGpD,CACLO,OAAQ,qBACRD,YAAa,UACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAIc,EAAA,UAAmBpE,EAAM8B,MAAM6B,QA+BrDU,eAAgBpD,EAChBqD,yBAA0B,CACxBC,WAAYvE,EAAMuE,WAClB9C,UAAWzB,EAAMyB,UACjBc,YAAavC,EAAMuC,YACnBF,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBI,SAAU1C,EAAM0C,SAChBC,WAAW,GAEbR,cAAenC,EAAMmC,gBAI7B,C,oNC9FA,SAAgB,kBAAoB,SCuBpC,IAAMtC,EAAY,wBACZ2E,EAAYpB,EAAA,mBAAiCvD,GAQnD,SAAS4E,EAAUzE,GACjB,IAAQ0E,EAA4B1E,EAA5B0E,MAAOC,EAAqB3E,EAArB2E,MAAOxE,EAAcH,EAAdG,UAItB,KAFiBwE,GAASA,EAAMxD,MAAQwD,EAAMxD,KAAK6B,QAGjD,OAAO,iCAET,IAAM4B,EAAiBD,EAAMxD,KAAK0D,KAAI,SAAAC,GAAC,OAAIA,EAAEnB,IAAI,IAAEoB,KAAK,MAExD,OACE,uBAAK5E,UAAWA,GAAYuE,EAAK,KAAIE,EAEzC,CAEA,SAASI,EAAehF,G,sBACd8B,EAAU9B,EAAV8B,MAER,IAAKoB,EAAA,UAAoBpB,KAAWoB,EAAA,SAAmBpB,GACrD,OAAO,iCAET,IAAMmD,EAAc/B,EAAA,iBAA2BpB,GAE/C,OACE,uBAAK3B,UAAW2B,EAAMoD,YAAc,gCAAkC,UACpE,sBAAI/E,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACC,OAAO,eAClC4E,EAAYE,gBACb,uBAAKhF,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,iBAAiB+E,QAAS,CAAEC,KAAMJ,EAAYE,mBAG/D,gBAACV,EAAS,CACRC,MAAOF,EAAU,sBAAuB,CAAEc,WAAiD,QAArC,EAA+B,QAA/B,EAAAL,EAAYM,2BAAmB,eAAEpE,YAAI,eAAE6B,SAC7F2B,MAAOM,EAAYM,oBACnBpF,UAAU,SAEZ,gBAACsE,EAAS,CACRC,MAAOF,EAAU,eAAgB,CAAEc,WAA0C,QAA9B,EAAwB,QAAxB,EAAAL,EAAYO,oBAAY,eAAErE,YAAI,eAAE6B,SAC/E2B,MAAOM,EAAYO,aACnBrF,UAAU,SAEZ,gBAACsE,EAAS,CACRC,MAAOF,EAAU,YAAa,CAAEc,WAAuC,QAA3B,EAAqB,QAArB,EAAAL,EAAYQ,iBAAS,eAAEtE,YAAI,eAAE6B,SACzE2B,MAAOM,EAAYQ,UACnBtF,UAAU,SAEZ,gBAACsE,EAAS,CACRC,MAAOF,EAAU,YAAa,CAAEc,WAAuC,QAA3B,EAAqB,QAArB,EAAAL,EAAYS,iBAAS,eAAEvE,YAAI,eAAE6B,SACzE2B,MAAOM,EAAYS,UACnBvF,UAAU,WAET8E,EAAYU,eACb,uBAAKxF,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,gBAAgB+E,QAAS,CAAEQ,KAAMC,EAAA,SAAkBZ,EAAYU,cAAe,oBAG5FV,EAAYa,SACb,uBAAK3F,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,UAAU+E,QAAS,CAAEU,QAASb,EAAYa,QAAQnC,YAGrC,QAAzB,EAAA7B,EAAMiE,2BAAmB,eAAEC,SAASlE,EAAMmE,cAC7C,uBAAK9F,UAAU,QACb,gBAACC,EAAA,EAAI,CAACC,OAAO,eAAe+E,QAAS,CAAEQ,KAAMC,EAAA,SAAkB/D,EAAMmE,YAAa,kBAK5F,CAaM,SAAUC,EAA4BlG,G,MAClC8B,EAA6C9B,EAA7C8B,MAAK,EAAwC9B,EAAtCmG,UAAAA,OAAS,IAAG,MAAqB,EAE1ClB,EAAc/B,EAAA,iBAA2BpB,GAEzCsE,IAAoBpG,EAAM8B,MAAMoD,YAEhCmB,GACJ,OAAQrG,EAAM8B,UACZmD,EAAYE,kBACZF,EAAYU,iBACZV,EAAYa,YACXhE,EAAMmE,cAAyC,QAAzB,EAAAnE,EAAMiE,2BAAmB,eAAEC,QAGtD,IAAKI,IAAoBC,EACvB,OAAO,iCAQT,IAAMC,EANN,W,YACE,OAAItG,EAAMuG,UAAYrD,EAAA,gBAA0BlD,EAAM8B,UAAiC,QAAtB,EAAgB,QAAhB,EAAA9B,EAAM8B,MAAMwE,YAAI,eAAEnF,YAAI,eAAE6B,QAChF,KAEoB,QAAtB,EAAgB,QAAhB,EAAAhD,EAAM8B,MAAMwE,YAAI,eAAEnF,YAAI,eAAEqF,QAAO,SAAAC,GAAG,OAAIA,EAAIC,UAAYC,EAAA,QAAc,GAC7E,CACaC,GAEb,OACE,gBAAC,aAAiC,CAACZ,MAAOnG,GACxC,2BACEyD,GAAIC,EAAA,eACJtD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAIH,EAAA,eAA6BC,EACjG,EACArD,UAAU,qBAEV,uBAAKA,UAAU,wCACb,gBAAC,KAAU,CAAC0G,YAAU,EAACC,cAAeX,GACpC,uBAAKhG,UAAU,WACZiG,GACC,uBAAKjG,UAAWkG,EAAc,GAAH,OAAM,oBAAwB,kBAAmB,UAC1E,uBAAKlG,UAAU,6BACb,sBAAIA,UAAU,WACZ,gBAACC,EAAA,EAAI,CAACC,OAAO,iBAEf,gBAAC0G,EAAA,EAAe,CACdC,KAAMlF,EAAMoD,YACZ/B,MAAOrB,EAAM6B,KACbxD,UAAU,OACV8G,SAAUjH,EAAMkH,wBAChBC,OAAQnH,EAAMoH,sBACdhF,iBAAkB,CAChBiF,SAAU,cACVC,OAAQ,WACRC,WAAY,WACZC,WAAY,4BAEdrF,cAAe,CAAEmB,GAAIxB,EAAMwB,GAAI3B,KAAM,kBAGzC,qBAAGxB,UAAU,OAAOsH,wBAAyB,CAAEC,OAAQC,EAAA,cAA0B3H,EAAM8B,MAAMoD,YAAa,CAAE0C,OAAO,QAItHvB,GACC,gBAACrB,EAAc,iBAAKhF,QAIrBsG,aAAI,EAAJA,EAAMtD,SACP,uBAAK7C,UAAU,QACb,sBAAIA,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACC,OAAO,gBACrC,gBAACwH,EAAA,EAAO,eACNvB,KAAMA,GACFwB,EAAA,oBAA4B9H,EAAM+H,cAAe,KAAM/H,EAAMgI,uBAAsB,CACvF7H,UAAU,WAKf+C,EAAA,cAAwBlD,EAAM8B,QAAU,gBAAC/B,EAAA,EAAmB,CAACW,UAAU,eAAeP,UAAU,+CAO7G,C,uNC9LA,IAAM8H,EAAgB,iCAYhB,SAAUC,EACdpG,EACAqG,G,UAEsD,G,GAAZ,IAAAC,UAAS,I,EAAG,E,o4BAA9CC,EAAY,KAAEC,EAAe,KAWrC,OATA,IAAAC,YAAU,WACR,GAAKJ,EAAL,CAGA,IAAMK,GAhBwBC,EAgBW3G,EAAM2G,OAf3CC,EAA+CD,EAAOD,QAJvCG,QAAQV,EAAe,IAMrC,EAAOS,IAeZJ,EAAgBE,EAJR,CAdZ,IAAkCC,EAC1BC,CAkBN,GAAG,CAAc,QAAZ,EAAA5G,EAAM2G,cAAM,eAAED,QAASL,IAErBE,CACT,CAEM,SAAUF,EAAcrG,G,QAC5B,OAAmB,QAAZ,EAAAA,EAAM2G,cAAM,eAAED,UAAoC,mBAAb,QAAZ,EAAA1G,EAAM2G,cAAM,eAAEG,OAChD,CAEM,SAAUC,EACdC,EACAC,GAEA,IAAM9I,GAAM,IAAA+I,UAgCZ,SAASC,IACHH,GACF,YAAsB,uBAAwBA,EAClD,CAEA,SAASI,IACP,YAAsB,wBACxB,CAEA,OAvCA,OAA0B,wBAgB1B,SAA8BC,G,WACvBA,aAAU,EAAVA,EAAY7F,MAAyB,QAAnB,EAAAwF,aAAe,EAAfA,EAAiBxF,UAAE,eAAE8F,eAA6B,QAAd,EAAAD,aAAU,EAAVA,EAAY7F,UAAE,eAAE8F,cAGhE,QAAX,EAAAnJ,EAAIO,eAAO,SAAE6I,UAAUC,IAAI,kBAC7B,GArBwE,KAAMP,IAC9E,OAA0B,yBAsB1B,W,MACa,QAAX,EAAA9I,EAAIO,eAAO,SAAE6I,UAAUE,OAAO,iBAChC,GAxB0E,KAAMR,IAEhF,IAAAR,YAAU,W,QACR,GAAKtI,EAAIO,SAAYuI,EAMrB,OAHW,QAAX,EAAA9I,EAAIO,eAAO,SAAEgJ,iBAAiB,YAAaP,GAChC,QAAX,EAAAhJ,EAAIO,eAAO,SAAEgJ,iBAAiB,aAAcN,GAErC,W,QACM,QAAX,EAAAjJ,EAAIO,eAAO,SAAEiJ,oBAAoB,YAAaR,GACnC,QAAX,EAAAhJ,EAAIO,eAAO,SAAEiJ,oBAAoB,aAAcP,EACjD,CACF,GAAG,CAACjJ,EAAIO,UAyBDP,CACT,C,8JCzFA,SAAgB,SAAW,QAAQ,QAAU,QAAQ,OAAS,QAAQ,aAAe,SCgBrF,SAASyJ,EAAgB1J,GACvB,IAAM2J,EAAYC,EAAA,oBAAuD,IAAtB5J,EAAM6J,IAAIC,WAEvD7J,GAAM,QAA4BD,EAAM6J,KAAM7J,EAAMgI,uBAE1D,OAAIhI,EAAMgI,sBAEN,uBAAK7H,UAAS,iBAAY,WAAe,UACvC,wBAAMA,UAAS,4GAAuG,iBAAwBwJ,GAC9I,uBAAKxJ,UAAS,UAAK,SAAa,UAAUH,EAAM6J,IAAI3E,cAMxD,gBAAC6E,EAAA,EAAS,CACRC,IAAKhK,EAAM6J,IAAIC,UACf3J,UAAS,iBAAY,WAAe,wBACpC8J,QAAS,kBAAMjK,EAAMkK,eAAelK,EAAM6J,IAAIC,UAAU,EACxD7J,IAAKA,GAEL,uBAAKE,UAAS,4GAAuG,iBAAwBwJ,GAC7I,uBAAKxJ,UAAS,eAAU,YAAmBH,EAAM6J,IAAI3E,aAG3D,CAQA,IAAMrF,EAAY,8BAEZ,SAAUsK,EAAoBnK,GAClC,OACE,2BACE,sBAAIG,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,aAE3D,2BACGL,EAAMoK,iBAAiBvF,KAAI,SAAAgF,GAC1B,OACE,gBAACH,EAAe,CACdM,IAAKH,EAAIC,UACTD,IAAKA,EACL7B,sBAAuBhI,EAAMgI,sBAC7BkC,eAAgBlK,EAAMkK,gBAG5B,KAKR,C,kMC/CA,IAAM,EAAY,0BACZ1F,EAAYpB,EAAA,mBAAiC,GAE7CiH,EAAoB,IAM1B,SAASC,EAAiBtK,GACxB,OAAIA,EAAMuK,cACD,gCAAGvK,EAAMwK,UAGhB,uBAAKrK,UAAU,gCACb,gBAAC,KAAU,CACT0G,YAAU,EACVC,cAAeuD,GAEf,uBAAKlK,UAAU,uBACZH,EAAMwK,WAKjB,CAaM,SAAUC,EAAiBzK,G,UACzB0K,GAAgC,QAA6B1K,EAAM8B,MAAO9B,EAAM2K,eAC9B,G,EAAlB,WAAe,I,EAAG,E,o4BAAhDC,EAAU,KAAEC,EAAa,KAwB3BvE,EANN,W,YACE,OAAIpD,EAAA,gBAA0BlD,EAAM8B,UAAiC,QAAtB,EAAgB,QAAhB,EAAA9B,EAAM8B,MAAMwE,YAAI,eAAEnF,YAAI,eAAE6B,QAC9D,KAEoB,QAAtB,EAAgB,QAAhB,EAAAhD,EAAM8B,MAAMwE,YAAI,eAAEnF,YAAI,eAAEqF,QAAO,SAAAC,GAAG,OAAIA,EAAIC,UAAYC,EAAA,YAAoBF,EAAIC,UAAYC,EAAA,OAAa,GAChH,CACaC,GAEP3G,EAAM,SAA6B,MAOzC,OALA,aAAgB,W,OACC,QAAX,EAAAA,EAAIO,eAAO,eAAEsK,YACfD,EAAc5K,EAAIO,QAAQsK,UAC9B,GAAG,CAAY,QAAX,EAAA7K,EAAIO,eAAO,eAAEsK,YAEZ9K,EAAM2K,cAQT,2BAASxK,UAAU,qBACjB,gBAACmK,EAAgB,CAACC,cAAevK,EAAMuK,eACrC,sBAAIpK,UAAU,WAAU,gBAACC,EAAA,EAAI,CAACP,UAAW,EAAWQ,OAAO,uBAE3D,uBAAKF,UAAS,eAAU,wBACtB,gBAAC4K,EAAA,EAAO,CAAC5H,MAAOqB,EAAU,QAASwG,UAAQ,EAACC,kBAAmB,UAC7D,gBAAC,IAAe,CAACjE,KAAM4D,GACrB,gBAACM,EAAA,EAAY,CACX/K,UAAU,oCACVgL,QAAS,UACTlJ,KAAMiJ,EAAAE,EAAA,MACNnB,QAlDd,WACE,IAAM9H,EAAgB,CACpBmB,GAAItD,EAAM8B,MAAM2G,OAAOnF,GACvB+H,QAASrL,EAAM8B,MAAMwB,GACrBgI,UAAWtL,EAAM8B,MAAM6B,KACvB+E,kBAAmBkC,GAGfxI,EAAmB,CACvBmF,WAAY,UACZD,OAAQ,YACRD,SAAU,eAEZkE,EAAA,gBAA8BpJ,EAAeC,EAC/C,MAyCQ,uBACEqF,wBAAyB,CAAEC,OAAQgD,GACnCvK,UAAU,WACVF,IAAKA,QAKNqG,aAAI,EAAJA,EAAMtD,SACP,uBAAK7C,UAAU,QACb,gBAAC0H,EAAA,EAAO,eACNvB,KAAMA,GACFwB,EAAA,oBAA4B9H,EAAM+H,cAAe/H,EAAMwL,WAAYxL,EAAMgI,uBAAsB,CACnG7H,UAAU,aAKbH,EAAMoK,iBAAiBpH,QACxB,gBAACmH,EAAmB,CAClBC,iBAAkBpK,EAAMoK,iBACxBpC,sBAAuBhI,EAAMgI,sBAC7BkC,eA3CV,SAAwBuB,GACtBzL,EAAM0L,aAAaD,EACrB,MAJS,gCAmDX,C,yGC9HaE,EAA0B,QAAW,SAAS3L,G,QAC3C4L,EAA6C5L,EAAnDmB,KAAmBC,EAAgCpB,EAAhCoB,cAAeC,EAAiBrB,EAAjBqB,aAEpCwK,EAAgB,+BACjB7L,EAAM6L,kBAAgB,CACzB1H,KAAM,CAACnE,EAAMmB,KAAKmC,MAGdwI,EAAgD,QAA9B,EAAuB,QAAvB,EAAAF,EAAYG,mBAAW,eAAE/F,aAAK,eAAEhD,OAExD,OACE,uBAAK7C,UAAS,qCACZ,gBAAC,IAAc,CACbwB,KAAK,SACLC,aAAc,gBACdE,MAAO8J,EACP7J,QAAS/B,EAAMsB,WAAWsK,GAC1B5J,aAAc,CAAEC,KAAMb,GACtBc,QAASb,EACTc,cAAenC,EAAMmC,cACrBC,iBAAkBpC,EAAMoC,iBACxBC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBG,cAAc,EACdF,YAAavC,EAAMuC,YACnBG,SAAU1C,EAAM0C,SAChBC,UAAW3C,EAAM2C,YAGnB,uBAAKxC,UAAU,QACb,gBAAC,IAAa,iBACRH,EAAK,CACT8B,MAAO8J,EACP7J,QAAS/B,EAAMsB,WAAWsK,OAI9B,uBAAKzL,UAAU,QACb,gBAAC,IAAO,CAAC4B,QAAS8J,EAAkB1L,UAAU,kBAC5C,gBAAC,IAAI,CAACN,UAnDE,iCAmDoBQ,OAAO,mBAAmB+E,QAAS,CAAE/B,MAAOyI,EAAiBxG,WAAYwG,OAM/G,G,qJCpDMjM,EAAY,gCAeZ,SAAUmM,EAAqBhM,G,MACnC,IAAKA,EAAMiM,uBAA0C,QAAlB,EAAAjM,EAAMkM,oBAAY,eAAElJ,QACrD,OAAO,iCAiBT,IAAMG,EAAQ,cAA0BtD,EAAW,eAAgB,CAAEwD,MAAOrD,EAAMkM,aAAalJ,SAE/F,OACE,2BAAS7C,UAAU,oBACjBmD,GAAI,iBACJrD,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAI,iBAA6BF,EACjG,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAU,mBACVE,WAAY9D,EAAMkM,aAClBnI,YAAU,EACVC,gBAAiB,SAAC4H,GAChB,MAAO,CACL3H,YAAa,iBACbC,OAAQ,kCACRC,KAAM,CAAEyH,EAAYtI,GAAI,YAAmBsI,EAAYjI,OAE3D,EACA5B,QAnCA,YAAoB/B,EAAM8B,OACrB,CACLoC,OAAQ,8BACRD,YAAa,WACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAI,YAAmBtD,EAAM8B,MAAM6B,QAGpD,CACLO,OAAQ,4BACRD,YAAa,UACbE,KAAM,CAAEnE,EAAM8B,MAAMwB,GAAI,YAAmBtD,EAAM8B,MAAM6B,QA0BrDU,eAAgB,IAChBC,yBAA0B,CACxBC,WAAYvE,EAAMuE,WAClBlC,aAAcrC,EAAMqC,aACpBC,aAActC,EAAMsC,aACpBC,YAAavC,EAAMuC,YACnBsJ,iBAAkB,CAChB5H,YAAa,iBACbC,OAAQ,oCAEVxB,SAAU1C,EAAM0C,SAChBC,WAAW,GAEbR,cAAenC,EAAMmC,gBAI7B,C,i3BCxEA,IAAMtC,EAAY,2BA6BZ,SAAUsM,EAAkBnM,GAChC,IAAQoM,GAAmB,SAAnBA,eAUFC,EAtCR,SACEvK,EACAwK,G,YAEMD,EAAiC,QAArB,EAAe,QAAf,EAAAvK,EAAMuK,iBAAS,eAAElL,YAAI,QAAI,GACrCoL,EAAyB,QAAjB,EAAW,QAAX,EAAAzK,EAAMyK,aAAK,eAAEpL,YAAI,QAAI,GAEnC,IAAKmL,EACH,MAAO,GAAP,SAAYD,GAAS,EAAKE,IAE5B,IAAMC,EAAoBH,EAAU7F,QAAO,SAAAiG,G,MACzC,MAAO,CAAE,uBAAwB,oBAAqBC,SAAmB,QAAV,EAAAD,EAAEE,gBAAQ,eAAEC,aAC7E,IAEA,MAAO,GAAP,SAAYJ,GAAiB,EAAKD,GACpC,CAuBoBM,CAAa7M,EAAM8B,MAAOsK,EAAe,wBACrDjJ,EAAQ,cAA0BtD,EAAW,YAAa,CAAEwD,MAAOgJ,EAAUrJ,SAEnF,OAAKqJ,EAAUrJ,OAIb,2BACEM,GAAI,cACJnD,UAAU,oBACVF,IAAK,SAAAuD,G,MACFA,IAAsB,QAAhB,EAAAxD,EAAMyD,kBAAU,eAAEjD,UAAYR,EAAMyD,WAAWjD,QAAQkD,IAAI,cAA0BF,EAC9F,GAEA,gBAAC,KAAW,CACVG,KAAMR,EACNS,SAAU,wBACVE,WAAYuI,EACZtI,YAAU,EACVM,eAAgB,KAChBC,yBAA0B,CACxB/B,YAAavC,EAAMuC,YACnBuK,sBAAuB9M,EAAM+M,6BAC7BC,gBAAiBhN,EAAMiN,iBAAmB,SAAW,SACrD5F,SAAU,YACV6F,cAAe,QACfC,gBAAiBnN,EAAMiN,iBAlC/B,SAAyBG,GACvB,qBACEA,EACApN,EAAMmC,cACN,CAAEkF,SAAU,cAA0BE,WAAY,cAAqBD,OAAQ,eAEnF,EA4BoE,MAE9DtD,gBAAiBhE,EAAMsB,WACvBc,iBACMpC,EAAMiN,iBACD,CAAC,EAEH,CACLI,cAAe,WACf7F,WAAY,KAAA8F,QAGhBnL,cAAenC,EAAMmC,iBAlClB,gCAsCX,C,4PCnGA,SAAgB,WAAa,QAAQ,KAAO,QAAQ,UAAY,QAAQ,SAAW,QAAQ,YAAc,QAAQ,eAAiB,QAAQ,eAAiB,QAAQ,QAAU,QAAQ,WAAa,QAAQ,mBAAqB,QAAQ,WAAa,QAAQ,YAAc,QAAQ,KAAO,QAAQ,WAAa,QAAQ,UAAY,QAAQ,gBAAkB,QAAQ,oBAAsB,QAAQ,aAAe,QAAQ,kBAAoB,QAAQ,SAAW,SCyC1b,SAAUoL,EAAsBpM,EAAuB6L,G,MACrDQ,GAAc,EAAAC,EAAA,KAMpB,MAAwB,WAApBT,IAGAQ,EAAYE,KAAMF,EAAYG,IAGhB,aAAdxM,EAAKQ,MAIH,aAAcR,IAIhBA,EAAKwL,SAAShL,OAASiM,EAAA,UAIvBzM,EAAKwL,SAAShL,OAASiM,EAAA,QAChBzM,EAAK0M,OAGC,QAAR,EAAA1M,EAAK2M,WAAG,eAAED,MACrB,CAgCM,SAAUE,EAAe/N,G,YACzB2M,EAAW,KAEX,aAAc3M,EAAMmB,OACtBwL,EAAW3M,EAAMmB,KAAKwL,UAGxB,IAAMqB,EAAaC,EAAA,SAAkCjO,EAAMmB,KAAM+M,EAAA,YA6BjE,OACE,gCACE,uBAAK/N,UAAW,eACd,uBAAKA,UAAW,kBACd,uBAAKA,UA/Bb,SAAgCyM,G,MAC1BuB,EAAY,8GAAH,OAvFjB,SAAmBvB,GACjB,OAAQA,GACN,IAAK,aACH,OAAO,YACT,IAAK,mBACH,OAAO,kBACT,IAAK,eACH,OAAO,cACT,IAAK,uBACH,OAAO,sBACT,QACE,OAAO,eAEb,CA4E0BwB,CAAUxB,GAAa,YAAI,kBAYjD,OAVe,QAAX,EAAA5M,EAAMqO,aAAK,eAAEC,gBACfH,GAAa,IAAJ,OAAQnO,EAAMqO,MAAMC,gBAE7BH,GAAa,aAGXnO,EAAMuO,kBACRJ,GAAa,IAAJ,OAAQ,eAGZA,CACT,CAewBK,CAAuB7B,aAAQ,EAARA,EAAUC,eACtB,UAAxB5M,EAAMkN,eACL,gBAACnC,EAAA,EAAO,CAAC5H,MAAOnD,EAAMmB,KAAKwC,MACzB,sBAAIxD,UAAS,yCAAoC,SAC/C,wBAAMA,UAAU,WAAWH,EAAMmB,KAAKwC,QAK5C,uBAAKxD,UAAS,0BAC0B,QAApC,EAAW,QAAX,EAAAH,EAAMqO,aAAK,eAAEI,+BAAuB,QAAI,GAAE,iDAC1C,qBAAyB,YAA4B,UAAxBzO,EAAMkN,cAA4B,aAAoB,GAAE,4BACrF,aAAiB,mBAEnB,gBAACwB,EAAA,EAAiB,CAChBtB,SAAUpN,EAAMmB,KAChBoB,YAAavC,EAAMuC,YACnBuK,sBAAuB9M,EAAM8M,sBAC7BzL,aAAcrB,EAAMqB,aACpBsN,yBAA0B3O,EAAM2O,4BAInCX,GAAchO,EAAMmN,iBAA6C,WAA1BnN,EAAMgN,iBAC5C,uBAAK7M,UAAW,WACd,gBAAC4J,EAAA,EAAS,CACRE,QAAS,SAAA2E,GACPA,EAAEC,iBACFD,EAAEE,kBAxCbb,EAAA,aAA4BjO,EAAMmB,OAGF,mBAA1BnB,EAAMmN,iBACfnN,EAAMmN,gBAAgBnN,EAAMmB,KAsChB,EACAhB,UAAS,UAAK,WAAe,sDAE7B,gBAAC+K,EAAA,EAAY,CAACC,QAAS,mBAK3BnL,EAAM+O,eAAiBf,GACvB,gBAACgB,EAAA,EAAS,CAACC,OAAQf,EAAA,gBAKF,UAAxBlO,EAAMkN,eACL,uBAAK/M,UAAS,eAAU,eAEpB8N,EAAA,SAAkCjO,EAAMmB,KAAM+M,EAAA,gBACxB,QAApB,EAAU,QAAV,EAAAlO,EAAMmB,YAAI,eAAEwL,gBAAQ,eAAEC,eAExB,gBAACsC,EAAA,EAAY,KACVC,EAAA,sBAAmCnP,EAAMmB,KAAKwL,SAASC,eAI5D,sBAAIzM,UAAU,cACXH,EAAMmB,KAAKwC,OAMxB,CAhHAoK,EAAeqB,aAAe,CAC5B/N,cAAc,EACd2L,gBAAiB,UAoHZ,IAAMqC,EAAuB,QAAW,SAASrP,GAEtD,IAAMsP,EAAa/B,EAAsBvN,EAAMmB,KAAMnB,EAAMgN,iBASrD7K,EAAgB,OAAH,wBAAQnC,EAAMmC,eAAkBnC,EAAMmB,MAEnDiB,EAAgB,+BACjBpC,EAAMoC,kBAAgB,CACzBmF,WAAY,WACZD,OAAQtH,EAAMmB,KAAK8N,SAAWf,EAAA,WAAsB,cAAsB,YAG5E,SAASqB,IACPhE,EAAA,gBAA8BpJ,EAAeC,EAC/C,CAEA,IASYjC,EATNqP,EAAS,+BACVxP,GAAK,CAERuO,gBAAiBe,KAAgBtP,EAAMmB,KAAK0M,MAG9C,OACE,uBAAK1N,UAAS,6BAAwB,OAAW,YAzB1B,cAAnBH,EAAMqH,SACD,WAEF,YAsBgE,YAAIoI,EAAA,4BAEjEtP,EAAY,wBAGM,SAApBH,EAAMmB,KAAKQ,KAEX,qBAAG+N,KAAM1P,EAAMmB,KAAK0M,IAAKtN,OAAO,SAASJ,UAAWA,EAAW8J,QAASsF,GACtE,gBAACxB,EAAc,iBAAKyB,KAKtBF,EAM4B,WAA1BtP,EAAMgN,gBAEN,uBAAK7M,UAAS,UAAKA,EAAS,4BAA4B8J,QAAS,WAC/DsF,IACA,aAAsBvP,EAAMsB,WAAWtB,EAAMmB,MAC/C,GACE,gBAAC4M,EAAc,iBAAKyB,KAMxB,gBAACG,EAAA,EAAO,CACN5N,QAAS/B,EAAMsB,WAAWtB,EAAMmB,MAChChB,UAAWA,EACXgC,cAAeA,EACfC,iBAAkBA,GAElB,gBAAC2L,EAAc,iBAAKyB,KAMtBxP,EAAMmB,KAAK0M,IAEX,qBAAG6B,KAAM1P,EAAMmB,KAAK0M,IAAK1N,UAAWA,EAAW8J,QAASsF,GACtD,gBAACxB,EAAc,iBAAKyB,KAOxB,uBAAKrP,UAAWA,GACd,gBAAC4N,EAAc,iBAAKyB,MAMhC,G,8FC7SA,SAAgB,aAAe,QAAQ,cAAgB,QAAQ,QAAU,QAAQ,aAAe,QAAQ,SAAW,QAAQ,UAAY,QAAQ,UAAY,QAAQ,SAAW,SC4BxK,SAAUI,EAAsC5P,GACpD,IAAMoC,EAAmB,CACvBmF,WAAY,WACZD,OAAQ,YACRD,SAAU,sBAGZ,OACE,uBAAKlH,UAAS,UAAK,iBAChBH,EAAM2E,MAAME,KAAI,SAACgL,EAAMC,GACtB,OAAI9P,EAAM+P,WAEN,gBAAChG,EAAA,EAAS,CACRC,IAAK6F,EAAKvM,GACVnD,UAAS,UAAK,gBAAoB,YAAIH,EAAMgQ,WAAaH,EAAKvM,GAAK,eAAsB,IACzF2G,QAAS,W,MACPgG,EAAA,qBACAjQ,EAAMkQ,gBAAgBL,EAAKvM,IAEV,QAAjB,EAAAtD,EAAMmQ,mBAAW,gBAAGN,EACtB,GAEA,uBAAK1P,UAAS,UAAMH,EAAMgQ,UAAoB,IAARF,EAA6B,GAAjB,UAAmB,MAClED,EAAKlM,OAOZ,gBAACgM,EAAA,EAAO,CACN3F,IAAK6F,EAAKvM,GACVvB,QAAS/B,EAAMsB,WAAWuO,GAC1BO,eAAgB,CAAEzH,SAAS,GAC3BxI,UAAS,UAAK,gBAAoB,YAAIH,EAAMgQ,WAAaH,EAAKvM,GAAK,eAAsB,IACzF2G,QAAS,W,MACPgG,EAAA,qBACAjQ,EAAMkQ,gBAAgBL,EAAKvM,IAEV,QAAjB,EAAAtD,EAAMmQ,mBAAW,gBAAGN,EACtB,EACA1N,cAAa,+BACRnC,EAAMmC,eAAa,CACtBmB,GAAIuM,EAAKvM,GACTK,KAAMkM,EAAKlM,OAEbvB,iBAAkBA,GAElB,uBAAKjC,UAAS,UAAMH,EAAMgQ,UAAoB,IAARF,EAA6B,GAAjB,UAAmB,MAClED,EAAKlM,MAId,IAGN,C,uCC5EI0M,E,WAESC,EAAkC,SAAH,GAExC,IADAC,EAAW,EAAXA,YAAaC,EAAe,EAAfA,gBAAiBC,EAAY,EAAZA,aAAcP,EAAe,EAAfA,gBAExCQ,EAAoB,SAAa,GAEvC,aAAgB,WACd,IAyBMC,EAAW,IAAIC,sBAzBJ,SAACC,GAChBA,EAASC,SAAQ,SAAAC,GACf,GAAIN,EAMF,OALAF,EAAYE,QAEZJ,EAAQW,OAAOC,YAAW,WACxBf,EAAgB,GAClB,GAAG,MAGL,GAAIa,EAAQG,eACVX,EAAYQ,EAAQxQ,OAAO+C,IAC3BoN,EAAkBlQ,QAAUwQ,OAAOG,YAC9B,CACL,IACMC,EADiBV,EAAkBlQ,QAAUwQ,OAAOG,QACnB,EACjCE,EAAWb,EAAgBc,WAAU,SAAAC,GAAC,OAAIA,EAAEjO,KAAOyN,EAAQxQ,OAAO+C,EAAE,IACpEkO,EAAchB,EAAgBa,EAAW,GAC3CD,IAAiBI,aAAW,EAAXA,EAAalO,KAChCiN,EAAYiB,aAAW,EAAXA,EAAalO,GAE5B,CACH,GACF,GAEoD,CAElDmO,WAAY,uBAKd,OAFAjB,EAAgBM,SAAQ,SAAAY,GAAO,OAAIf,EAASgB,QAAQD,EAAQ,IAErD,WACLrB,GAASW,OAAOY,aAAavB,GAC7BM,EAASkB,YACX,CACF,GAAG,CAAEtB,EAAaC,EAAgBxN,OAAQyN,GAC5C,C,wEC9CIqB,EAAiC,KAExBC,EAAiB,CAC5BC,oBAAmB,SAACC,EAA0BC,GAC5C,OAAO,kBAAwB,cAAoBD,GAAmB,mBAAF,OAAqBC,GAC3F,EAEAC,iBAAgB,SACd/E,EACAjL,EACAC,G,MAEIgQ,EAASN,EAERA,IACHM,EAASN,EAAclR,SAASyR,cAAc,UAC9CzR,SAAS0R,KAAKC,YAAYH,GAE1BA,EAAOI,MAAMC,QAAU,QAGzBL,EAAOM,IAAMtF,EAASS,IAEtB,kBAA8B,OAAD,QAC3BvK,GAAI8J,aAAQ,EAARA,EAAU9J,GACdK,KAAMyJ,aAAQ,EAARA,EAAUzJ,KAChBiJ,aAAgC,QAAlB,EAAAQ,aAAQ,EAARA,EAAUT,gBAAQ,eAAEC,cAC/BzK,GAAa,eAEhBoF,WAAY,cACZD,OAAQ,cACR+F,cAAe,eACZjL,GAEP,E,oJCzCF,SAAgB,UAAY,QAAQ,MAAQ,QAAQ,SAAW,QAAQ,cAAgB,QAAQ,UAAY,QAAQ,SAAW,SCkB9H,IAAMvC,EAAY,kBAkBlB,SAAS8S,EAAoB3S,GAW3B,SAAS4S,IAVT,IACQxQ,EAUNpC,EAAM6S,eAAe7S,EAAM8S,YAVrB1Q,EAAmB,CACvBmF,WAAavH,EAAM8S,WAA+B,UAAlB,UAChCxL,OAAQ,qBACRD,SAAU,eAGZkE,EAAA,gBAA8BvL,EAAMmC,cAAeC,EAMrD,CAEA,OACE,uBAAKjC,UAAU,8BACb,uBAAKA,UAAW,aACd,uBAAKA,UAAS,UAAK,kBACjB,gBAAC4S,EAAA,EAAU,CACT5S,UAAS,+BAA0B,YACnCgL,QAAS,qBACTlB,QAAS2I,IAGX,gBAACG,EAAA,EAAU,CACT5S,UAAS,+BAA0B,aACnCgL,QAAUnL,EAAM8S,WAAuC,mBAA1B,gBAC7B7I,QAAS2I,MAMrB,CAEA,SAASI,EAAgBhT,GAiCvB,OACE,uBAAKG,UAAYH,EAAMiT,WAAqC,GAAxB,uBAClC,yBAAO9S,UAAS,UAAK,QAAY,8BAAuBH,EAAMiT,WAAsE,aAAzD,yDACzE,uBAAK9S,UAAW,aACbH,EAAMiT,YACL,gBAACF,EAAA,EAAU,CACT5S,UAAS,gCAA2B,YACpCgL,QAAS,mBACTlB,QAAS,WAxCrB,IACQ7H,EAwCMpC,EAAM6S,eAAc,GAxC1BzQ,EAAmB,CACvBmF,WAAY,UACZD,OAAQ,qBACRD,SAAU,eAGZkE,EAAA,gBAA8BvL,EAAMmC,cAAeC,EAoCzC,IAGJ,sBAAIjC,UAAU,MAAK,gBAACC,EAAA,EAAI,CAACP,UAAWA,EAAWQ,OAAO,gBAEtD,gBAACuP,EAAA,EAAmB,CAClBjL,MAAO3E,EAAM2E,MACbqL,SAAUhQ,EAAMgQ,SAChB1O,WAzCV,SAAoBuO,GAClB,IAAMqD,EAAiBC,EAAA,oBAAiCpR,QAElDqR,EAAqBF,EAAeE,OACvC,iBAAOF,EAAeE,QACrB,CAAC,EAIL,OAFAA,EAAOC,MAAQxD,EAAKvM,GAEb,OAAP,wBACK4P,GAAc,CACjBE,OAAAA,GAEJ,EA6BUlD,gBAAiBlQ,EAAMkQ,gBACvB/N,cAAenC,EAAMmC,cACrBgO,YAAa,WA5BhBnQ,EAAMiT,YAETjT,EAAM6S,eAAc,EA0BoC,OAMtD7S,EAAMiT,YAAc,gBAACN,EAAmB,iBAAK3S,IAGrD,CAEM,SAAUsT,EAAyBtT,GACvC,OACE,gCACGR,EAAA,yBACCQ,EAAM8S,WACF,gBAACE,EAAe,iBAAKhT,IACrB,gBAAC2S,EAAmB,iBAAK3S,IAC7BY,SAAS2S,eAAe,MAIhC,C,6DC1IM/O,EAAY,qBADA,eAGLgP,EAAgB,CAC3BC,kBAAiB,SAACnQ,EAAoB8B,GACpC,OAAQ9B,GACN,KAAK,cACH,OAAOkB,EAAU,mBAAoB,CAAEnB,MAAO+B,EAAQiH,UAAUrJ,SAElE,KAAK,UACH,OAAIoC,EAAQsO,eACHlP,EAAU,oBAAqB,CAAEnB,MAAO+B,EAAQrC,MAAMC,OAAS,IACjEwB,EAAU,eAAgB,CAAEnB,MAAO+B,EAAQrC,MAAMC,SAE1D,KAAK,iBACH,OAAOwB,EAAU,sBAAuB,CAAEnB,MAAO+B,EAAQ8G,aAAalJ,SAExE,KAAK,UACH,OAAOwB,EAAU,gBAEnB,KAAK,iBACH,OAAOA,EAAU,uBAEnB,KAAK,kBACH,OAAOA,EAAU,iBAEnB,KAAK,oBACH,OAAOA,EAAU,0BAEnB,KAAK,gBACH,OAAOA,EAAU,sBAEnB,QACE,MAAO,GAEb,E,wkCCzCF,IAAMmP,EAAyB,yBAEzB,SAAUC,EAA0BP,GACxC,IAAMJ,GAAa,SAEbY,GAAgE,IAAnD,SAAuBF,GACpCG,IAAsBb,GAAqBY,EAEoB,IAA3B,WAAeR,GAAS,IAAG,GAA7D5C,EAAY,KAAEP,EAAe,KACqD,IAA1B,WAAuB,IAAG,GAAlF6D,EAAuB,KAAEC,EAA0B,KACuC,IAAlC,WAAeF,GAAmB,GAA1FG,EAAuB,KAAEC,EAA0B,KAgB3D,OAdA,aAAgB,WAKZA,IAJGjB,GAIwBY,EAE/B,GAAG,CAACZ,IAOG,CACLxC,aAAAA,EACAP,gBAAAA,EACA+D,wBAAAA,EACAF,wBAAAA,EACAC,2BAAAA,EACAG,wBAXF,WACED,GAA4BD,GAC5B,SAAuBN,GAAyBM,EAClD,EAUF,C,6DCtCaG,EAA2B,CACtC7Q,EAAA,QACAA,EAAA,kBACAA,EAAA,YACAA,EAAA,eACAA,EAAA,QACAA,EAAA,eACAA,EAAA,cACAA,EAAA,iBAGW8Q,EAAqC,CAChD9Q,EAAA,QACAA,EAAA,eACAA,EAAA,kBACAA,EAAA,YACAA,EAAA,eACAA,EAAA,QACAA,EAAA,cACAA,EAAA,iBCfI,SAAU+Q,EAAmBC,GACjC,IAAM9Q,EAAa,SAA+C,IAAI+Q,KAChEhE,GAAmB+D,EAAYH,EAA2BC,GAAoCxP,KAAI,SAAAvB,GACtG,OAAOG,EAAWjD,QAAQiU,IAAInR,EAChC,IAAGkD,OAAOkO,SAEV,MAAO,CAAEjR,WAAAA,EAAY+M,gBAAAA,EACvB,C,kDCVM,SAAUmE,IACd,IAAMnH,GAAc,SAEpB,OADsCA,EAAYoH,IAAMpH,EAAYqH,IAAMrH,EAAYsH,GAExF,C,mCCNA,SAAgB,kBAAoB,QAAQ,aAAe,QAAQ,KAAO,Q","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/ClipWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/PlayPageClips.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-details.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/VideoDetailsV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceUtilsV2.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/points-of-interest-list.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/PlayPageInteractives.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/PlayPageResources.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/ResourceWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/table-of-contents.scss","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/TableOfContents.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayPageUtilV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/usePlayPageTableOfContent.ts","file:///app/packages/projects/lite/src/shared/constants/PlayPageSectionsOrder.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useSectionHeadings.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useShouldShowTableOfContents.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\n\nexport interface ClipWidgetItemV2Props extends FixedWidgetItemProps<Clip> {\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const ClipWidgetItemV2 = React.memo(function(props: ClipWidgetItemV2Props): JSX.Element {\n const { data: clip, thumbnailSize, preloadImage, getAppLink } = props;\n const mergedAudience = useMergeAudiences(clip.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={clip}\n appLink={getAppLink(clip)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideDuration={false}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={clip}\n appLink={props.getAppLink(clip)}\n />\n </div>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClipWidgetItemV2, ClipWidgetItemV2Props } from './ClipWidgetItemV2';\n\nconst namespace = 'shared.playPageClipsV2';\n\ninterface PlayPageClipsProps {\n video: Video | Clip;\n clips: Clip[];\n canViewClips: boolean;\n yearGroups: YearGroup[];\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData: HashObject;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n}\n\nexport function PlayPageClips(props: PlayPageClipsProps): JSX.Element {\n if (!props.canViewClips || !props.clips?.length)\n return <></>;\n\n const parentIsVideo = VideoHelper.isVideo(props.video);\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video)) {\n return {\n action: Actions.Videos.VIDEO_CLIPS,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n return {\n action: Actions.Clips.CLIP_CLIPS,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(\n namespace,\n parentIsVideo ? 'clips' : 'otherClips',\n { count: props.clips.length }\n );\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.Clips}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Clips, el);\n }}\n >\n <FixedWidget<ClipWidgetItemV2Props>\n name={title}\n contents={WidgetContents.ClipsV2}\n collection={props.clips}\n prefetched\n getChildAppLink={(clip: Clip) => {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ clip.id, TextHelper.slugify(clip.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={ClipWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n audiences: props.audiences,\n imageCdnUrl: props.imageCdnUrl,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"descriptionBorder\":\"YUC62\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { hasPPDD } from 'libs/shared/components/video-details/VideoDetailsUtils';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function VideoDetailsWithScrollbarV2(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n if (!showDescription && !showDetails)\n return <></>;\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Normal);\n }\n const tags = getTags();\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <section\n id={PlayPageAnchor.VideoDetails}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.VideoDetails, el);\n }}\n className='play-page-section'\n >\n <div className='rounded border p-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n <p className='mb-0' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true }) }} />\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n\n {!!tags?.length && (\n <div className='mt-3'>\n <h2 className='h6 mb-1'><Text phrase='normalTags' /></h2>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n </div>\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-start' className='d-flex justify-content-start mt-2 mb-n1' />}\n\n </Scrollbars>\n </div>\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PointOfInterest } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { useHighlightPointOfInterest } from '../VideoAtAGlanceUtilsV2';\n\nimport styles from './points-of-interest-list.scss';\n\ninterface PointOfInterestProps {\n poi: PointOfInterest;\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void;\n}\n\nfunction PointOfInterest(props: PointOfInterestProps): JSX.Element {\n const timeStamp = DurationHelper.ToDisplayDuration(props.poi.startTime * 1000);\n\n const ref = useHighlightPointOfInterest(props.poi, !props.suppressInteractivity);\n\n if (props.suppressInteractivity) {\n return (\n <div className={`d-flex ${styles.poiEntry} mb-2`}>\n <span className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</span>\n <div className={`${styles.public} ms-2`}>{props.poi.description}</div>\n </div>\n );\n }\n\n return (\n <DivButton\n key={props.poi.startTime}\n className={`d-flex ${styles.poiEntry} mb-2 cursor-pointer`}\n onClick={() => props.onClickPoiItem(props.poi.startTime)}\n ref={ref}\n >\n <div className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</div>\n <div className={`ms-2 ${styles.poiText}`}>{props.poi.description}</div>\n </DivButton>\n );\n}\n\ninterface PointOfInterestListProps{\n pointsOfInterest: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void\n}\n\nconst namespace = 'shared.pointsOfInterestList';\n\nexport function PointOfInterestList(props: PointOfInterestListProps) {\n return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {props.pointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\n />\n );\n })}\n\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useLearningIntentionMarkdown } from './VideoAtAGlanceUtilsV2';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlanceV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 350; // in px\n\ninterface ScrollbarWrapperProps {\n hideScrollbar?: boolean;\n}\n\nfunction ScrollbarWrapper(props: React.PropsWithChildren<ScrollbarWrapperProps>): JSX.Element {\n if (props.hideScrollbar)\n return <>{props.children}</>;\n\n return (\n <div className='rounded border mb-4 bg-white'>\n <Scrollbars\n autoHeight\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 px-3 pt-3 pb-2'>\n {props.children}\n </div>\n </Scrollbars>\n </div>\n );\n}\n\ninterface VideoAtAGlanceV2Props {\n video: Video;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onClickTag?: () => void;\n hideScrollbar?: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoAtAGlanceV2(props: VideoAtAGlanceV2Props): JSX.Element {\n const learningIntentionMarkdownHTML = useLearningIntentionMarkdown(props.video, props.canViewGlance);\n const [ textToCopy, setTextToCopy ] = React.useState('');\n\n function logUserAction(): void {\n const analyticsData = {\n id: props.video.glance.id,\n videoId: props.video.id,\n videoName: props.video.name,\n learningIntention: textToCopy\n };\n\n const analyticsOptions = {\n actionType: UserAction.Copy,\n entity: EntityType.Glance,\n location: LocationContext.PlayPage\n };\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n function getTags(): Tag[] {\n if (VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Pedagogy || tag.tagType === TagType.Skill);\n }\n const tags = getTags();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ref.current?.innerText)\n setTextToCopy(ref.current.innerText);\n }, [ref.current?.innerText]);\n\n if (!props.canViewGlance)\n return <></>;\n\n function onClickPoiItem(time: number) {\n props.setStartTime(time);\n }\n\n return (\n <section className='play-page-section'>\n <ScrollbarWrapper hideScrollbar={props.hideScrollbar}>\n <h2 className='h6 mb-2'><Text namespace={namespace} phrase='learningIntention' /></h2>\n \n <div className={`mb-3 ${styles.learningIntention}`}>\n <Tooltip title={getPhrase('copy')} spanHack spanHackClassName={styles.icon}>\n <CopyToClipboard text={textToCopy}>\n <SvgContainer\n className='svg-container me-1 cursor-pointer'\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Small}\n onClick={logUserAction}\n />\n </CopyToClipboard>\n </Tooltip>\n \n <div\n dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}\n className='d-inline'\n ref={ref}\n >\n </div>\n </div>\n\n {!!tags?.length && (\n <div className='mb-1'>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, props.onClickTag, props.suppressInteractivity)}\n className='mt-2'\n />\n </div>\n )}\n\n {!!props.pointsOfInterest.length && (\n <PointOfInterestList\n pointsOfInterest={props.pointsOfInterest}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={onClickPoiItem}\n />\n )}\n </ScrollbarWrapper>\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-1'>\n <AppLink appLink={questionsAppLink} className='cursor-pointer'>\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n\n </div>\n );\n});\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, Interactive, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from './InteractiveWidgetItemV2';\n\nconst namespace = 'shared.playPageInteractivesV2';\n\ninterface PlayPageInteractivesProps {\n canViewInteractives: boolean;\n video: Video | Clip;\n interactives: InteractiveMetadata[];\n imageCdnUrl: string;\n analyticsData: HashObject;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageInteractives(props: PlayPageInteractivesProps): JSX.Element {\n if (!props.canViewInteractives || !props.interactives?.length)\n return <></>;\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video))\n return {\n action: Actions.Videos.VIDEO_INTERACTIVES,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n\n return {\n action: Actions.Clips.CLIP_INTERACTIVES,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(namespace, 'interactives', { count: props.interactives.length });\n \n return (\n <section className='play-page-section'\n id={PlayPageAnchor.Interactives}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Interactives, el);\n }}\n >\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={title}\n contents={WidgetContents.InteractivesV2}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { ResourceWidgetItemV2, ResourceWidgetItemV2Props } from './ResourceWidgetItemV2';\n\nconst namespace = 'shared.playPageResources';\n\nfunction getResources(\n video: Video,\n isLearner: boolean\n): Array<Resource | Link> {\n const resources = video.resources?.data ?? [];\n const links = video.links?.data ?? [];\n\n if (!isLearner)\n return [ ...resources, ...links ];\n\n const filteredResources = resources.filter(r => {\n return [ 'additional-materials', 'student-activity' ].includes(r.metadata?.resourceType);\n });\n\n return [ ...filteredResources, ...links ];\n}\n\ninterface PlayPageResourcesProps {\n video: Video | Clip;\n imageCdnUrl: string;\n canViewResources: boolean;\n getAppLink: (resource: Resource) => Core.AppLink;\n analyticsData: HashObject;\n resourceThumbnailFallbackUrl: string;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageResources(props: PlayPageResourcesProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n function onClickDownload(resource: Resource): void {\n DownloadHelper.downloadResource(\n resource,\n props.analyticsData,\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n }\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const title = LanguageService.getPhrase(namespace, 'resources', { count: resources.length });\n\n if (!resources.length)\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.Resources}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Resources, el);\n }}\n >\n <FixedWidget<ResourceWidgetItemV2Props>\n name={title}\n contents={WidgetContents.PlayPageResourcesV2}\n collection={resources}\n prefetched\n childComponent={ResourceWidgetItemV2}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackUrl,\n actionBehaviour: props.canViewResources ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'below',\n onClickDownload: props.canViewResources ? onClickDownload : null\n }}\n getChildAppLink={props.getAppLink}\n analyticsOptions={(() => {\n if (props.canViewResources)\n return {};\n \n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"bYRn8\",\"item\":\"CjuxU\",\"dashboard\":\"IuRN0\",\"playPage\":\"VdJvp\",\"aspectRatio\":\"QK8Jh\",\"outerContainer\":\"eiC_H\",\"innerContainer\":\"huIRg\",\"actions\":\"FsIJm\",\"titleBelow\":\"DpeSr\",\"thumbnailContainer\":\"ZbalL\",\"titleAbove\":\"PwOSX\",\"teacherPack\":\"ZHAEj\",\"text\":\"k3ei6\",\"hoverState\":\"BLrWL\",\"atomGuide\":\"Qz8JE\",\"studentActivity\":\"qNspk\",\"additionalMaterials\":\"R0huw\",\"userUploaded\":\"H_zGf\",\"imageTypeResource\":\"AgeLb\",\"download\":\"DKneu\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"qA4yj\",\"aside\":\"j28IY\",\"collapse\":\"sFoPk\",\"iconContainer\":\"PYyBV\",\"arrowIcon\":\"MTodB\",\"listIcon\":\"W76p8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PLAY_PAGE_TOC_PORTAL_ID } from 'shared/layouts/teacher-layout/TeacherLayoutComponent';\n\nimport styles from './table-of-contents.scss';\n\nconst namespace = 'shared.playPage';\n\nexport interface TableOfContentsItem {\n name: string;\n id: PlayPageAnchor;\n}\n\ninterface TableOfContentsProps {\n items: TableOfContentsItem[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isExpanded: boolean;\n setIsExpanded: (arg: boolean) => void;\n showInSide: boolean;\n}\n\nfunction TableOfContentsIcon(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: !props.isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n props.setIsExpanded(!props.isExpanded);\n logUserAction();\n }\n\n return (\n <div className='d-flex justify-content-end'>\n <div className={styles.container}>\n <div className={`${styles.iconContainer}`} >\n <IconButton\n className={`btn btn-outline-dark ${styles.listIcon}`}\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n \n <IconButton\n className={`btn btn-outline-dark ${styles.arrowIcon}`}\n svgName={!props.isExpanded ? cvSvgLibrary.ExpandLeft : cvSvgLibrary.CollapseRight}\n onClick={onClickIcon}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function getAppLink(item: any): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n\n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = item.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n function onClickTableOfContentsHeading() {\n if (!props.showInSide) {\n // in mobile version, collapse once user hit the TOC item\n props.setIsExpanded(false);\n }\n }\n\n return (\n <div className={!props.showInSide ? 'd-inline-flex gap-1' : ''}>\n <aside className={`${styles.aside} position-relative ${!props.showInSide ? 'px-3 pt-3 pb-2 border border-dark rounded-1 bg-white' : 'pe-1 pt-1 '}`}>\n <div className={styles.container}>\n {props.showInSide && (\n <IconButton\n className={`btn position-absolute ${styles.collapse}`}\n svgName={cvSvgLibrary.CollapseRight}\n onClick={() => {\n props.setIsExpanded(false);\n logUserAction();\n }}\n />\n )}\n <h2 className='h5'><Text namespace={namespace} phrase='tocHeading' /></h2>\n \n <TableOfContentsList\n items={props.items}\n activeId={props.activeId}\n getAppLink={getAppLink}\n setControlledId={props.setControlledId}\n analyticsData={props.analyticsData}\n onItemClick={() => onClickTableOfContentsHeading()}\n />\n </div>\n \n </aside>\n {/* in mobile version, always show icon on the right */}\n {!props.showInSide && <TableOfContentsIcon {...props}/>}\n </div>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsProps): JSX.Element {\n return (\n <>\n {PortalHelper.renderInPortalIfExists(\n props.isExpanded\n ? <TableOfContents {...props} />\n : <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Clip, InteractiveMetadata, Resource } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\ninterface SectionHeadingOptions{\n clips: Clip[];\n interactives: InteractiveMetadata[];\n resources: Resource[];\n isPlayClipPage?: boolean;\n}\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const PlayPageUtils = {\n getSectionHeading(id: PlayPageAnchor, options: SectionHeadingOptions) {\n switch (id) {\n case PlayPageAnchor.Resources:\n return getPhrase('resourcesHeading', { count: options.resources.length });\n\n case PlayPageAnchor.Clips:\n if (options.isPlayClipPage)\n return getPhrase('otherClipsHeading', { count: options.clips.length - 1 });\n return getPhrase('clipsHeading', { count: options.clips.length });\n\n case PlayPageAnchor.Interactives:\n return getPhrase('interactivesHeading', { count: options.interactives.length });\n\n case PlayPageAnchor.Video:\n return getPhrase('videoHeading');\n\n case PlayPageAnchor.VideoDetails:\n return getPhrase('videoDetailsHeading');\n\n case PlayPageAnchor.RelatedVideos:\n return getPhrase('upNextHeading');\n \n case PlayPageAnchor.CurriculumLinks:\n return getPhrase('curriculumLinksHeading');\n \n case PlayPageAnchor.ClippedFrom:\n return getPhrase('clippedFromHeading');\n\n default:\n return '';\n }\n }\n\n};","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nconst PLAY_PAGE_TOC_EXPANDED = 'play-page-toc-expanded';\n\nexport function usePlayPageTableOfContent(tocId: string) {\n const showInSide = useShouldShowSideTableOfContents();\n\n const localValue = LocalStorageHelper.get(PLAY_PAGE_TOC_EXPANDED) !== false;\n const tocDefaultExpanded = !showInSide ? false : localValue;\n\n const [ controlledId, setControlledId ] = React.useState(tocId || '');\n const [ tableOfContentsActiveId, setTableOfContentsActiveId ] = React.useState<string>('');\n const [ tableOfContentsExpanded, setTableOfContentsExpanded ] = React.useState(tocDefaultExpanded);\n \n React.useEffect(() => {\n if (!showInSide) {\n // automatically collpase on mobile version\n setTableOfContentsExpanded(false);\n } else {\n setTableOfContentsExpanded(localValue);\n }\n }, [showInSide]);\n\n function onToggleTableOfContents() {\n setTableOfContentsExpanded(!tableOfContentsExpanded);\n LocalStorageHelper.set(PLAY_PAGE_TOC_EXPANDED, !tableOfContentsExpanded);\n }\n\n return {\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n onToggleTableOfContents\n };\n}","import { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nexport const PLAY_PAGE_SECTIONS_ORDER = [\n PlayPageAnchor.Video,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];\n\nexport const PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE = [\n PlayPageAnchor.Video,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];","import React from 'react';\n\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { PLAY_PAGE_SECTIONS_ORDER, PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE } from 'shared/constants/PlayPageSectionsOrder';\n\nexport function useSectionHeadings(hasGlance: boolean) {\n const headingRef = React.useRef<Map<PlayPageAnchor, HTMLElement>>(new Map());\n const headingElements = (hasGlance ? PLAY_PAGE_SECTIONS_ORDER : PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE).map(id => {\n return headingRef.current.get(id);\n }).filter(Boolean);\n\n return { headingRef, headingElements };\n}","import { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\n// returns boolean value for if we should show the TOC on the side\nexport function useShouldShowSideTableOfContents(): boolean {\n const breakpoints = useBreakpoints();\n const shouldShowSideTableOfContents = breakpoints.lg || breakpoints.xl || breakpoints.xxl;\n return shouldShowSideTableOfContents;\n}","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\",\"icon\":\"H1xbT\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","namespace","CONTAINER_HEIGHT","CopyrightDisclaimer","props","ref","isHovering","className","Text","phrase","Overlay","target","current","show","placement","overflowPlacement","document","documentElement","clientHeight","getBoundingClientRect","bottom","ClipWidgetItemV2","clip","data","thumbnailSize","preloadImage","getAppLink","mergedAudience","subjectPresentationAudiences","audiences","VideoThumbnail","type","textPosition","ThumbnailTextPosition","video","appLink","imageOptions","size","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","imageCdnUrl","audience","hideDuration","isPlugin","showOwner","ThumbnailText","PlayPageClips","canViewClips","clips","length","parentIsVideo","VideoHelper","title","LanguageService","count","id","PlayPageAnchor","el","headingRef","set","name","contents","WidgetContents","collection","prefetched","getChildAppLink","application","action","args","TextHelper","childComponent","extraChildComponentProps","yearGroups","getPhrase","CommaList","label","items","commaSeperated","map","i","join","DetailsSection","parentVideo","description","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","dangerouslySetInnerHTML","__html","LinkifyHelper","nl2br","TagList","TagHelper","getTagAppLink","suppressInteractivity","POI_LINK_LINE","useLearningIntentionMarkdown","hasGlanceData","useState","markdownHTML","setMarkdownHTML","useEffect","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","toString","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","DivButton","key","onClick","onClickPoiItem","PointOfInterestList","pointsOfInterest","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","textToCopy","setTextToCopy","innerText","Tooltip","spanHack","spanHackClassName","SvgContainer","svgName","S","videoId","videoName","AnalyticsHelper","onClickTag","time","setStartTime","InteractiveWidgetItemV2","interactive","questionsAppLink","questionsNumber","_timepoints","PlayPageInteractives","canViewInteractives","interactives","PlayPageResources","hasPermissions","resources","isLearner","links","filteredResources","r","includes","metadata","resourceType","getResources","imageErrorFallbackUrl","resourceThumbnailFallbackUrl","actionBehaviour","canViewResources","titlePosition","onClickDownload","resource","workflowPhase","SignUp","useCanPreviewResource","breakpoints","useBreakpoints","xs","sm","ResourceFileType","url","pdf","ResourceTileV2","isResource","MasterTypeHelper","MasterType","baseClass","getColour","theme","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","ResourceThumbnail","dynamicRatioImageOptions","e","preventDefault","stopPropagation","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItemV2","canPreview","logAction","tileProps","SeoConstants","href","AppLink","TableOfContentsList","item","idx","localState","activeId","ScrollHelper","setControlledId","onItemClick","appLinkOptions","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","forEach","heading","window","setTimeout","isIntersecting","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","downloadRef","DownloadHelper","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","createElement","body","appendChild","style","display","src","TableOfContentsIcon","onClickIcon","setIsExpanded","isExpanded","IconButton","TableOfContents","showInSide","currentAppLink","ContextService","params","tocId","TableOfContentsContainer","getElementById","PlayPageUtils","getSectionHeading","isPlayClipPage","PLAY_PAGE_TOC_EXPANDED","usePlayPageTableOfContent","localValue","tocDefaultExpanded","tableOfContentsActiveId","setTableOfContentsActiveId","tableOfContentsExpanded","setTableOfContentsExpanded","onToggleTableOfContents","PLAY_PAGE_SECTIONS_ORDER","PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE","useSectionHeadings","hasGlance","Map","get","Boolean","useShouldShowSideTableOfContents","lg","xl","xxl"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6604],{49935:(e,t,n)=>{n.d(t,{Oo:()=>u,b2:()=>d});var a=n(32735),r=n(36848),i=n(86764),l=n(3747),o=n(5859),c=n(35223),s=n(83914),m=function(e){var t=e.breadcrumb,n=t.name,i=t.appLink,l=t.active,o=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(l?" active":"")},l?a.createElement("strong",null,n):a.createElement(r.F,{appLink:i},o&&a.createElement(s.x,{svgName:c.vn.ChevronLeft,size:s.S.Small}),a.createElement("span",{className:o?"ms-2":""},n)))},u=function(e){var t=e.breadcrumbs,n=(0,l.a)(i.r.XS),r=null==t?void 0:t.length;return!r||n&&r<2?a.createElement(a.Fragment,null):n?a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(m,{breadcrumb:t[r-2],withBackIcon:!0}))):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return a.createElement(m,{key:t,breadcrumb:e})}))))},d=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,l.a)(i.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},o.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},94644:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(50242),r=n(81886),i=n(67058),l=n(14553),o=n(49267),c=n(49075),s={notFound:i.d,forbidden:{rating:l.q,yearLevel:l.q,region:o.a,privacy:l.q},badRequest:c._};function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var l=Object.assign(Object.assign({},s),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==a.o.NotFound?i!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new l.badRequest):n.forbidden||r.Q.Ry.throw(new l.forbidden.privacy):n.notFound||r.Q.Ry.throw(new l.notFound))}}},91286:(e,t,n)=>{n.d(t,{v:()=>l});var a=n(32735),r=n(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function l(e,t,n){var l=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){l.forEach((function(e){(0,r.r)(e.statusCode,t,n)}))}),[i(l),t,n])}},5859:(e,t,n)=>{function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.d(t,{u:()=>i});var r={numItems:5,minWidth:50,maxWidth:100},i={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},28496:(e,t,n)=>{n.d(t,{_:()=>r});var a=n(99940),r={getConsumers:function(){return{url:"/api/lti/consumers",key:"lti:consumers",normalize:!1}},getPlatforms:function(){return{url:"/api/lti/platforms",key:"lti:platforms",formatData:function(e){return e.map((function(e){return e.publicJwk=JSON.stringify(e.publicJwk),e}))},normalize:!1}},getConsumer:function(e){return{url:"/api/lti/consumers/".concat(e),key:"lti:consumer:".concat(e),normalize:!1}},getPlatform:function(e){return{url:"/api/lti/platforms/".concat(e),key:"lti:platform:".concat(e),formatData:function(e){return e.publicJwk=JSON.stringify(e.publicJwk),e},normalize:!1}},createConsumer:function(e,t,n){return{url:"/api/lti/consumers",key:"create:consumer",type:a.k.POST,invalidationKeys:["lti:consumers"],data:e,success:t,error:n}},createPlatform:function(e,t,n){return{url:"/api/lti/platforms",key:"create:platform",type:a.k.POST,invalidationKeys:["lti:platforms"],data:e,success:t,error:n}},updateConsumer:function(e,t,n){return{url:"/api/lti/consumers/".concat(e.key),key:"update:consumer",type:a.k.PUT,invalidationKeys:["lti:consumers","lti:consumer:".concat(e.key)],data:e,success:t,error:n}},updatePlatform:function(e,t,n){return{url:"/api/lti/platforms/".concat(e.id),key:"update:platform",type:a.k.PUT,invalidationKeys:["lti:platforms","lti:platform:".concat(e.id)],data:e,success:t,error:n}},deleteConsumer:function(e,t,n){return{url:"/api/lti/consumers/".concat(e),key:"delete:consumer",type:a.k.DELETE,invalidationKeys:"lti:consumers",success:t,error:n}},deletePlatform:function(e,t,n){return{url:"/api/lti/platforms/".concat(e),key:"delete:platform",type:a.k.DELETE,invalidationKeys:"lti:platforms",success:t,error:n}}}},42384:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(65858),i=n(37802);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var o=function(){var e,t,n=(e=a.useState(void 0),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,l,o=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(o.push(a.value),o.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=n[0],c=n[1],s=(0,i.r)(r.LZ.Settings).hasLti;return a.useEffect((function(){s&&!0!==o?c(!0):s||!1===o||c(!1)}),[s]),{canAccess:o}}},36604:(e,t,n)=>{n.r(t),n.d(t,{LtiPlatformsView:()=>_});var a,r=n(32735),i=n(23481),l=n(81886),o=n(20354),c=n(49935),s=n(10874),m=n(83345),u=n(91286),d=n(35223),p=n(14070),f=n(97291),b=n(36848),v=n(11607),y=n(83914),E="settings.ltiPlatformListItem";function g(e){return r.createElement(b.F,{appLink:e.editAppLink,onClick:function(t){t.preventDefault(),l.Q.C$.trigger(e.editAppLink)},className:"border border-secondary rounded px-3 py-2 d-flex justify-content-between align-items-center mb-2"},r.createElement("span",{className:"fw-semibold"},e.name," (",e.version,")",e.incomplete&&r.createElement("span",{className:"text-danger"}," ",r.createElement(m.x,{namespace:E,phrase:"incomplete"}))),r.createElement(v.L,{onClick:function(t){t.stopPropagation(),t.preventDefault(),l.Q.C$.trigger(e.deleteAppLink)}},r.createElement(y.x,{svgName:d.vn.Delete,title:i.T.getPhrase(E,"deleteTooltip")})))}!function(e){e[e.Incomplete=0]="Incomplete",e[e.Complete=1]="Complete"}(a||(a={}));const k={list:"W7bNX"};function h(e){return r.createElement("ul",{className:"list-unstyled ".concat(k.list)},e.platforms.map((function(e){return r.createElement("li",{key:e.id},r.createElement(g,{name:e.name,version:1.3,editAppLink:{application:f.O.SETTINGS,action:p.e.Settings.EDIT_LTI_PLATFORM,args:[e.id]},deleteAppLink:{application:f.O.SETTINGS,action:p.e.Settings.DELETE_LTI_PLATFORM,params:{platformId:e.id}},incomplete:e.status===a.Incomplete}))})),e.consumers.map((function(e){return r.createElement("li",{key:e.key},r.createElement(g,{name:e.name,version:1.1,editAppLink:{application:f.O.SETTINGS,action:p.e.Settings.EDIT_LTI_CONSUMER,args:[e.key]},deleteAppLink:{application:f.O.SETTINGS,action:p.e.Settings.DELETE_LTI_PLATFORM,params:{consumerKey:e.key}}}))})))}var S=n(28496),I=n(42384),L=n(23232),T=n(99742);function N(e){var t=e.createAppLink;return r.createElement(L.u,null,r.createElement(L.u.Image,{src:T.W.EmptyStates.LTI,size:"small"}),r.createElement(L.u.Heading,null,"You have not configured any platforms yet"),r.createElement(L.u.Info,null,"Embed videos directly into your learning tools and see interactive results in your gradebook."),r.createElement(L.u.Cta,{text:"Add platform",appLink:t,icon:d.vn.Plus,className:"btn btn-outline-dark"}))}const A={platformList:"wyIYe",platformItem:"lRt_C"};function w(){return r.createElement("div",{className:A.platformList},r.createElement("div",{className:"".concat(A.platformItem," partial-loading-background mb-2 rounded")}),r.createElement("div",{className:"".concat(A.platformItem," partial-loading-background mb-2 rounded")}),r.createElement("div",{className:"".concat(A.platformItem," partial-loading-background mb-2 rounded")}))}var O="settings.ltiPlatforms",P=i.T.encloseNamespace(O),C={application:f.O.SETTINGS,action:p.e.Settings.CREATE_LTI_PLATFORM};function _(){var e=o.a.useBasicFetch(S._.getConsumers()),t=o.a.useBasicFetch(S._.getPlatforms());(0,u.v)(e),(0,u.v)(t);var n,a,i=(0,I.P)().canAccess;return r.useEffect((function(){!1===i&&l.Q.C$.trigger({application:f.O.SETTINGS,action:p.e.Settings.HOME})}),[i]),!0!==i?r.createElement(r.Fragment,null):r.createElement("div",{className:"px-3"},r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("h1",{className:"h2"},r.createElement(m.x,{namespace:O,phrase:"heading"})),r.createElement(s.h,{svgName:d.vn.Plus,appLink:C,className:"btn btn-outline-dark"},r.createElement(m.x,{namespace:O,phrase:"addPlatform"}))),r.createElement("div",{className:"pb-3"},r.createElement(c.Oo,{breadcrumbs:[{name:P("settings"),appLink:{application:f.O.SETTINGS,action:p.e.Settings.HOME}},{name:P("ltiPlatforms"),active:!0}]})),t.data&&e.data?(null===(n=t.data)||void 0===n?void 0:n.length)||(null===(a=e.data)||void 0===a?void 0:a.length)?r.createElement(h,{platforms:t.data,consumers:e.data}):r.createElement(N,{createAppLink:C}):r.createElement(w,null))}}}]);
|
|
2
|
-
//# sourceMappingURL=6604-92193d6d68-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6604-92193d6d68-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/flight-requests/LtiRequests.ts","file:///app/packages/projects/lite/src/apps/settings/hooks/useCanManageLti.ts","file:///app/packages/projects/lite/src/apps/settings/enums/LtiPlatformStatus.ts","file:///app/packages/projects/lite/src/apps/settings/components/lti/lti-platform-list-item/LtiPlatformListItem.tsx","file:///app/packages/projects/lite/src/apps/settings/components/lti/lti-platform-list/lti-platform-list.scss","file:///app/packages/projects/lite/src/apps/settings/components/lti/lti-platform-list/LtiPlatformList.tsx","file:///app/packages/projects/lite/src/apps/settings/views/lti/lti-platforms/empty-state/LtiPlatformsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/lti/lti-platforms/partial-loading/partial-lti-platforms.scss","file:///app/packages/projects/lite/src/apps/settings/views/lti/lti-platforms/partial-loading/PartialLtiPlatforms.tsx","file:///app/packages/projects/lite/src/apps/settings/views/lti/lti-platforms/LtiPlatformsView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { LtiConsumer } from 'apps/settings/interfaces/lti/LtiConsumer';\nimport { LtiPlatform } from 'apps/settings/interfaces/lti/LtiPlatform';\nimport { CreateLtiConsumerRequest } from 'apps/settings/interfaces/lti/requests/CreateLtiConsumerRequest';\nimport { CreateLtiPlatformRequest } from 'apps/settings/interfaces/lti/requests/CreateLtiPlatformRequest';\nimport { UpdateLtiConsumerRequest } from 'apps/settings/interfaces/lti/requests/UpdateLtiConsumerRequest';\n\nexport const LtiRequests = {\n getConsumers(): Flight.Request {\n return {\n url: `/api/lti/consumers`,\n key: 'lti:consumers',\n normalize: false\n };\n },\n\n getPlatforms(): Flight.Request {\n return {\n url: `/api/lti/platforms`,\n key: 'lti:platforms',\n formatData: (data: LtiPlatform[]) => {\n return data.map(platform => {\n platform.publicJwk = JSON.stringify(platform.publicJwk);\n return platform;\n });\n },\n normalize: false\n };\n },\n\n getConsumer(consumerKey: string): Flight.Request {\n return {\n url: `/api/lti/consumers/${consumerKey}`,\n key: `lti:consumer:${consumerKey}`,\n normalize: false\n };\n },\n\n getPlatform(platformId: string): Flight.Request {\n return {\n url: `/api/lti/platforms/${platformId}`,\n key: `lti:platform:${platformId}`,\n formatData: (platform: LtiPlatform) => {\n platform.publicJwk = JSON.stringify(platform.publicJwk);\n return platform;\n },\n normalize: false\n };\n },\n\n createConsumer(\n data: CreateLtiConsumerRequest,\n success?: (consumer: LtiConsumer) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/consumers`,\n key: 'create:consumer',\n type: HttpVerbs.POST,\n invalidationKeys: ['lti:consumers'],\n data,\n success,\n error\n };\n },\n\n createPlatform(\n data: CreateLtiPlatformRequest,\n success?: (platform: LtiPlatform) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/platforms`,\n key: 'create:platform',\n type: HttpVerbs.POST,\n invalidationKeys: ['lti:platforms'],\n data,\n success,\n error\n };\n },\n\n updateConsumer(\n data: UpdateLtiConsumerRequest,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/consumers/${data.key}`,\n key: 'update:consumer',\n type: HttpVerbs.PUT,\n invalidationKeys: [ `lti:consumers`, `lti:consumer:${data.key}` ],\n data,\n success,\n error\n };\n },\n\n updatePlatform(\n data: LtiPlatform,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/platforms/${data.id}`,\n key: 'update:platform',\n type: HttpVerbs.PUT,\n invalidationKeys: [ `lti:platforms`, `lti:platform:${data.id}` ],\n data,\n success,\n error\n };\n },\n\n deleteConsumer(\n consumerKey: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/consumers/${consumerKey}`,\n key: 'delete:consumer',\n type: HttpVerbs.DELETE,\n invalidationKeys: 'lti:consumers',\n success,\n error\n };\n },\n\n deletePlatform(\n platformId: string,\n success?: () => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: `/api/lti/platforms/${platformId}`,\n key: 'delete:platform',\n type: HttpVerbs.DELETE,\n invalidationKeys: 'lti:platforms',\n success,\n error\n };\n }\n};","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\n/**\n * Checks if the user can access LTI based on if they have the LTI domain option enabled\n * on their customer.\n */\nexport const useCanManageLti = () => {\n const [ canAccess, setCanAccess ] = React.useState<boolean>(undefined);\n\n const { hasLti } = useSettings(LocationContext.Settings);\n\n React.useEffect(() => {\n if (hasLti && canAccess !== true) {\n setCanAccess(true);\n return;\n }\n\n if (!hasLti && canAccess !== false)\n setCanAccess(false);\n }, [hasLti]);\n\n return { canAccess };\n};","export enum LtiPlatformStatus {\n Incomplete = 0,\n Complete = 1\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'settings.ltiPlatformListItem';\n\ninterface LtiPlatformListItemProps {\n name: string;\n version: number;\n deleteAppLink: Core.AppLink;\n editAppLink: Core.AppLink;\n incomplete?: boolean;\n}\n\nexport function LtiPlatformListItem(props: LtiPlatformListItemProps): JSX.Element {\n function onClickEdit(e: React.MouseEvent): void {\n e.preventDefault();\n\n Core.AppLinkHelper.trigger(props.editAppLink);\n }\n\n function onClickDelete(e: React.MouseEvent): void {\n e.stopPropagation();\n e.preventDefault();\n\n Core.AppLinkHelper.trigger(props.deleteAppLink);\n }\n\n return (\n <AppLink\n appLink={props.editAppLink}\n onClick={onClickEdit}\n className='border border-secondary rounded px-3 py-2 d-flex justify-content-between align-items-center mb-2'\n >\n <span className='fw-semibold'>\n {props.name} ({props.version})\n {props.incomplete && (\n <span className='text-danger'> <Text namespace={namespace} phrase='incomplete' /></span>\n )}\n </span>\n\n <DivButton onClick={onClickDelete}>\n <SvgContainer svgName={cvSvgLibrary.Delete} title={LanguageService.getPhrase(namespace, 'deleteTooltip')} />\n </DivButton>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"list\":\"W7bNX\"};","import React from 'react';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { LtiPlatformListItem } from 'apps/settings/components/lti/lti-platform-list-item/LtiPlatformListItem';\nimport { LtiPlatformStatus } from 'apps/settings/enums/LtiPlatformStatus';\nimport { LtiConsumer } from 'apps/settings/interfaces/lti/LtiConsumer';\nimport { LtiPlatform } from 'apps/settings/interfaces/lti/LtiPlatform';\n\nimport styles from './lti-platform-list.scss';\n\ninterface LtiPlatformListProps {\n platforms: LtiPlatform[];\n consumers: LtiConsumer[];\n}\n\nexport function LtiPlatformList(props: LtiPlatformListProps): JSX.Element {\n return (\n <ul className={`list-unstyled ${styles.list}`}>\n {props.platforms.map(platform => (\n <li key={platform.id}>\n <LtiPlatformListItem\n name={platform.name}\n version={1.3}\n editAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.EDIT_LTI_PLATFORM,\n args: [platform.id]\n }}\n deleteAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.DELETE_LTI_PLATFORM,\n params: { platformId: platform.id }\n }}\n incomplete={platform.status === LtiPlatformStatus.Incomplete}\n />\n </li>\n ))}\n\n {props.consumers.map(consumer => (\n <li key={consumer.key}>\n <LtiPlatformListItem\n name={consumer.name}\n version={1.1}\n editAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.EDIT_LTI_CONSUMER,\n args: [consumer.key]\n }}\n deleteAppLink={{\n application: AppChannels.SETTINGS,\n action: Actions.Settings.DELETE_LTI_PLATFORM,\n params: { consumerKey: consumer.key }\n }}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\ninterface LtiPlatformsEmptyStateProps {\n createAppLink: Core.AppLink;\n}\n\nexport function LtiPlatformsEmptyState({ createAppLink }: LtiPlatformsEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.LTI} size='small'/>\n\n <EmptyState.Heading>\n You have not configured any platforms yet\n </EmptyState.Heading>\n\n <EmptyState.Info>\n Embed videos directly into your learning tools and see interactive results in your gradebook.\n </EmptyState.Info>\n\n <EmptyState.Cta\n text='Add platform'\n appLink={createAppLink}\n icon={cvSvgLibrary.Plus}\n className='btn btn-outline-dark'\n />\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"platformList\":\"wyIYe\",\"platformItem\":\"lRt_C\"};","import React from 'react';\n\nimport styles from './partial-lti-platforms.scss';\n\nexport function PartialLtiPlatforms(): JSX.Element {\n return (\n <div className={styles.platformList}>\n <div className={`${styles.platformItem} partial-loading-background mb-2 rounded`} />\n <div className={`${styles.platformItem} partial-loading-background mb-2 rounded`} />\n <div className={`${styles.platformItem} partial-loading-background mb-2 rounded`} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { LtiPlatformList } from 'apps/settings/components/lti/lti-platform-list/LtiPlatformList';\nimport { LtiRequests } from 'apps/settings/flight-requests/LtiRequests';\nimport { useCanManageLti } from 'apps/settings/hooks/useCanManageLti';\nimport { LtiConsumer } from 'apps/settings/interfaces/lti/LtiConsumer';\nimport { LtiPlatform } from 'apps/settings/interfaces/lti/LtiPlatform';\n\nimport { LtiPlatformsEmptyState } from './empty-state/LtiPlatformsEmptyState';\nimport { PartialLtiPlatforms } from './partial-loading/PartialLtiPlatforms';\n\nconst namespace = 'settings.ltiPlatforms';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst createAppLink: Core.AppLink = {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.CREATE_LTI_PLATFORM\n};\n\nexport function LtiPlatformsView(): JSX.Element {\n const consumers = Flight.useBasicFetch<LtiConsumer[]>(LtiRequests.getConsumers());\n\n const platforms = Flight.useBasicFetch<LtiPlatform[]>(LtiRequests.getPlatforms());\n\n useHandleObjectError(consumers);\n useHandleObjectError(platforms);\n\n const { canAccess } = useCanManageLti();\n\n React.useEffect(() => {\n if (canAccess === false) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n });\n }\n }, [canAccess]);\n\n if (canAccess !== true)\n return <></>;\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'><Text namespace={namespace} phrase='heading' /></h1>\n \n <IconButton svgName={cvSvgLibrary.Plus} appLink={createAppLink} className='btn btn-outline-dark'>\n <Text namespace={namespace} phrase='addPlatform' />\n </IconButton>\n </div>\n\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n { name: getPhrase('settings'), appLink: { application: AppChannels.SETTINGS, action: Actions.Settings.HOME } },\n { name: getPhrase('ltiPlatforms'), active: true }\n ]}\n />\n </div>\n\n {(() => {\n if (!platforms.data || !consumers.data)\n return <PartialLtiPlatforms />;\n\n if (!platforms.data?.length && !consumers.data?.length)\n return <LtiPlatformsEmptyState createAppLink={createAppLink} />;\n\n return (\n <LtiPlatformList\n platforms={platforms.data}\n consumers={consumers.data}\n />\n );\n })()}\n </div>\n );\n}"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","LtiRequests","getConsumers","url","normalize","getPlatforms","formatData","data","platform","publicJwk","JSON","stringify","getConsumer","consumerKey","getPlatform","platformId","createConsumer","success","error","type","invalidationKeys","createPlatform","updateConsumer","updatePlatform","id","deleteConsumer","deletePlatform","useCanManageLti","undefined","canAccess","setCanAccess","hasLti","LtiPlatformStatus","namespace","LtiPlatformListItem","props","AppLink","editAppLink","onClick","e","preventDefault","version","incomplete","Text","phrase","DivButton","stopPropagation","deleteAppLink","SvgContainer","title","LanguageService","LtiPlatformList","platforms","application","action","args","params","Incomplete","consumers","consumer","LtiPlatformsEmptyState","createAppLink","EmptyState","src","ImageUrls","text","icon","PartialLtiPlatforms","getPhrase","LtiPlatformsView","IconButton"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6746],{49935:(e,t,r)=>{r.d(t,{Oo:()=>u,b2:()=>d});var a=r(32735),n=r(36848),i=r(86764),c=r(3747),l=r(5859),s=r(35223),m=r(83914),o=function(e){var t=e.breadcrumb,r=t.name,i=t.appLink,c=t.active,l=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(c?" active":"")},c?a.createElement("strong",null,r):a.createElement(n.F,{appLink:i},l&&a.createElement(m.x,{svgName:s.vn.ChevronLeft,size:m.S.Small}),a.createElement("span",{className:l?"ms-2":""},r)))},u=function(e){var t=e.breadcrumbs,r=(0,c.a)(i.r.XS),n=null==t?void 0:t.length;return!n||r&&n<2?a.createElement(a.Fragment,null):r?a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(o,{breadcrumb:t[n-2],withBackIcon:!0}))):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return a.createElement(o,{key:t,breadcrumb:e})}))))},d=a.memo((function(e){var t=e.numItems,r=void 0===t?3:t;return(0,c.a)(i.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},l.u.getPartialLoadingItems({numItems:r}).map((function(e,t){var r=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:r},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},5859:(e,t,r)=>{function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}r.d(t,{u:()=>i});var n={numItems:5,minWidth:50,maxWidth:100},i={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=Object.assign(Object.assign({},n),t);return(e=Array(r.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*r.maxWidth),r.minWidth),"px")}}))}}},81803:(e,t,r)=>{r.d(t,{d:()=>p});var a=r(32735),n=r(81886),i=r(23481),c=r(49935),l=r(22902),s=r(14070),m=r(97291),o=r(96368);function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}var d="settings.settingsLayout",b=function(e){var t=(0,l.T)().hasPermissions,r=(0,o.e)();if(e)return t(e);var a=n.Q.C$.getCurrentAppLink();return a.application!==m.O.SETTINGS||r.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===a.action}))}))};function p(e){var t,r=b(e.requiredPermissions);if(a.useEffect((function(){r||n.Q.C$.trigger({application:m.O.SETTINGS,action:s.e.Settings.HOME},{replace:!0})}),[r]),!r)return a.createElement(a.Fragment,null);var l,o=e.breadcrumbs.map((function(t,r){return{name:t,appLink:{application:m.O.SETTINGS,action:s.e.Settings.HOME},active:r===e.breadcrumbs.length-1}}));return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(c.Oo,{breadcrumbs:[{name:i.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:m.O.SETTINGS,action:s.e.Settings.HOME}}].concat((l=o,function(e){if(Array.isArray(e))return u(e)}(l)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(l)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?u(e,t):void 0}}(l)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},56746:(e,t,r)=>{r.r(t),r.d(t,{LibrariesPermissionsView:()=>w});var a=r(32735),n=r(23481),i=r(20354),c=r(65858),l=r(60376),s=r(83914),m=r(83345),o=r(83523),u=r(54610),d=r(77963),b=r(65728),p=r(39151),v=r(98064),f=r(31949),g=r(69883),h=r(37802),E=r(67453),y=r(35223),S=r(81803);const N={library:"OpkQB",svgWrapper:"M3KDT"};var k="settings.librariesPermissions",L=n.T.encloseNamespace(k);function w(){var e=i.a.useBasicFetch(p.L.config()),t=i.a.useBasicFetch(f.N.currentUser()),r=(0,h.r)(c.LZ.Settings),n=r.liteStudentCustomLibraries,w=r.isLoadingSettings,I=r.updateSetting,A=i.a.useBasicFetch(v.D.domainLibraries(["customLibrary","sharedLibrary"])),T=(0,g.Z)();return t.data&&e.data&&A.data&&!w?a.createElement(S.d,{heading:L("heading"),breadcrumbs:[L("breadcrumb")]},a.createElement("div",{className:"w-50"},a.createElement("div",{className:"d-flex justify-content-between"},a.createElement("p",{className:"fw-semibold mb-1"},a.createElement(m.x,{namespace:k,phrase:"label"})),a.createElement(o.Z,{onClick:function(){var e={name:b.E.LiteStudentCustomLibraries,value:!n,kind:d.g.Temporary};I(t.data.customerId,e,(function(){T.success(L("success"))}),(function(){T.error(L("error"))}))},on:n})),a.createElement("p",{className:"mb-2"},a.createElement(m.x,{namespace:k,phrase:"description"})),a.createElement("div",{className:"border rounded-3 p-2"},A.data.map((function(e){var t,r,n,i;return a.createElement("div",{key:e.id,className:"d-flex py-1"},a.createElement("div",{className:"".concat(N.library," border rounded-circle")},a.createElement(l.f,{imageUrl:E.j.createUrl(null===(r=null===(t=e.owner)||void 0===t?void 0:t.logo)||void 0===r?void 0:r.url,{size:u.h2.Small}),svgSize:s.S.Small,svgWrapperClassName:"bg-teal ".concat(N.svgWrapper),svgName:!(null===(i=null===(n=e.owner)||void 0===n?void 0:n.logo)||void 0===i?void 0:i.url)&&y.vn.School})),a.createElement("div",{className:"ms-2"},e.name))}))))):a.createElement(a.Fragment,null)}}}]);
|
|
2
|
-
//# sourceMappingURL=6746-b5b2739944-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6746-b5b2739944-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/views/libraries-visibility/libraries-permissions.scss","file:///app/packages/projects/lite/src/apps/settings/views/libraries-visibility/LibrariesPermissionsView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"library\":\"OpkQB\",\"svgWrapper\":\"M3KDT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Library } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport styles from './libraries-permissions.scss';\n\nconst namespace = 'settings.librariesPermissions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function LibrariesPermissionsView(): React.ReactElement {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { liteStudentCustomLibraries, isLoadingSettings, updateSetting } = useSettings(LocationContext.Settings);\n\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries([ 'customLibrary', 'sharedLibrary' ]));\n\n const alerts = useAlerts();\n\n function onToggle() {\n const newSetting = {\n name: SettingName.LiteStudentCustomLibraries,\n value: !liteStudentCustomLibraries,\n kind: SettingKind.Temporary\n };\n\n updateSetting(\n currentUser.data.customerId,\n newSetting,\n () => {\n alerts.success(getPhrase('success'));\n },\n () => {\n alerts.error(getPhrase('error'));\n }\n );\n }\n\n if (\n !currentUser.data ||\n !config.data ||\n !libraries.data ||\n isLoadingSettings\n )\n return <></>;\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n >\n <div className='w-50'>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-1'><Text namespace={namespace} phrase='label' /></p>\n \n <ToggleSwitch\n onClick={onToggle}\n on={liteStudentCustomLibraries}\n />\n </div>\n\n <p className='mb-2'><Text namespace={namespace} phrase='description' /></p>\n <div className='border rounded-3 p-2'>\n {libraries.data.map(lib => (\n <div key={lib.id} className='d-flex py-1'>\n <div className={`${styles.library} border rounded-circle`}>\n <IconCircle\n imageUrl={ImageHelper.createUrl(lib.owner?.logo?.url, { size: ImageSize.Small })}\n svgSize={SvgContainerSize.Small}\n svgWrapperClassName={`bg-teal ${styles.svgWrapper}`}\n svgName={!(lib.owner?.logo?.url) && cvSvgLibrary.School}\n />\n </div>\n <div className='ms-2'>\n {lib.name}\n </div>\n </div>\n ))}\n </div>\n </div>\n \n </SettingsLayout>\n );\n}"],"names":["BreadcrumbItem","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","map","b","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Array","Math","max","floor","random","namespace","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","props","canAccess","replace","i","heading","headingButton","description","children","getPhrase","LanguageService","LibrariesPermissionsView","config","ConfigRequests","currentUser","UserRequests","useSettings","liteStudentCustomLibraries","isLoadingSettings","updateSetting","libraries","LibraryRequests","alerts","data","Text","phrase","ToggleSwitch","onClick","newSetting","SettingName","value","kind","SettingKind","customerId","success","error","on","lib","id","IconCircle","imageUrl","ImageHelper","owner","logo","url","svgSize","SvgContainer","svgWrapperClassName"],"sourceRoot":""}
|