From 048a4a2f8ff48d7d9c4c03a5e5acfb278ebe7dee Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Wed, 27 Mar 2024 11:17:57 -0700 Subject: [PATCH 01/34] Create sampleRUM.js --- express/scripts/utils/sampleRUM.js | 78 ++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 express/scripts/utils/sampleRUM.js diff --git a/express/scripts/utils/sampleRUM.js b/express/scripts/utils/sampleRUM.js new file mode 100644 index 00000000..fd7c5b77 --- /dev/null +++ b/express/scripts/utils/sampleRUM.js @@ -0,0 +1,78 @@ +export function sampleRUM(checkpoint, data = {}, forceSampleRate) { + sampleRUM.defer = sampleRUM.defer || []; + const defer = (fnname) => { + sampleRUM[fnname] = sampleRUM[fnname] + || ((...args) => sampleRUM.defer.push({ fnname, args })); + }; + sampleRUM.drain = sampleRUM.drain + || ((dfnname, fn) => { + sampleRUM[dfnname] = fn; + sampleRUM.defer + .filter(({ fnname }) => dfnname === fnname) + .forEach(({ fnname, args }) => sampleRUM[fnname](...args)); + }); + sampleRUM.on = (chkpnt, fn) => { + sampleRUM.cases[chkpnt] = fn; + }; + defer('observe'); + defer('cwv'); + defer('stash'); + try { + window.hlx = window.hlx || {}; + if (!window.hlx.rum) { + const usp = new URLSearchParams(window.location.search); + const weight = (usp.get('rum') === 'on') ? 1 : forceSampleRate || window.RUM_LOW_SAMPLE_RATE; + // eslint-disable-next-line no-bitwise + const hashCode = (s) => s.split('').reduce((a, b) => (((a << 5) - a) + b.charCodeAt(0)) | 0, 0); + const id = `${hashCode(window.location.href)}-${new Date().getTime()}-${Math.random().toString(16).substr(2, 14)}`; + const random = Math.random(); + const isSelected = (random * weight < 1); + // eslint-disable-next-line object-curly-newline + window.hlx.rum = { weight, id, random, isSelected, sampleRUM }; + } + const { id } = window.hlx.rum; + if ((window.hlx && window.hlx.rum && window.hlx.rum.isSelected) || checkpoint === 'experiment') { + const sendPing = (pdata = data) => { + if (!window.hlx.rum.isSelected) { + return; + } + // eslint-disable-next-line object-curly-newline, max-len, no-use-before-define + const body = JSON.stringify({ weight: window.hlx.rum.weight, id, referer: window.location.href, generation: window.RUM_GENERATION, checkpoint, ...data }); + const url = `https://rum.hlx.page/.rum/${window.hlx.rum.weight}`; + // eslint-disable-next-line no-unused-expressions + navigator.sendBeacon(url, body); + // eslint-disable-next-line no-console + console.debug(`ping:${checkpoint}:${window.hlx.rum.weight}`, pdata); + }; + sampleRUM.cases = sampleRUM.cases || { + cwv: () => sampleRUM.cwv(data) || true, + lazy: () => { + // use classic script to avoid CORS issues + const script = document.createElement('script'); + script.src = 'https://rum.hlx.page/.rum/@adobe/helix-rum-enhancer@^1/src/index.js'; + document.head.appendChild(script); + sendPing(data); + return true; + }, + experiment: () => { + // track experiments with higher sampling rate + window.hlx.rum.weight = Math.min(window.hlx.rum.weight, window.RUM_HIGH_SAMPLE_RATE); + window.hlx.rum.isSelected = (window.hlx.rum.random * window.hlx.rum.weight < 1); + + sampleRUM.drain('stash', sampleRUM); + sendPing(data); + return true; + }, + }; + sendPing(data); + if (sampleRUM.cases[checkpoint]) { + sampleRUM.cases[checkpoint](); + } + } else { + sampleRUM.stash(checkpoint, data); // save the event for later + } + } catch (error) { + // something went wrong + } + } + \ No newline at end of file From 483766d548371044211e383d4d812581b3d8489b Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Wed, 27 Mar 2024 11:23:17 -0700 Subject: [PATCH 02/34] init --- .../blocks/search-marquee/search-marquee.css | 247 ++++++++++++ .../blocks/search-marquee/search-marquee.js | 366 ++++++++++++++++++ express/features/carousel/carousel.js | 193 +++++++++ express/scripts/utils/fetch-placeholders.js | 24 ++ express/scripts/utils/free-plan.js | 91 +++++ 5 files changed, 921 insertions(+) create mode 100755 express/blocks/search-marquee/search-marquee.css create mode 100755 express/blocks/search-marquee/search-marquee.js create mode 100644 express/features/carousel/carousel.js create mode 100644 express/scripts/utils/fetch-placeholders.js create mode 100644 express/scripts/utils/free-plan.js diff --git a/express/blocks/search-marquee/search-marquee.css b/express/blocks/search-marquee/search-marquee.css new file mode 100755 index 00000000..0d66ce60 --- /dev/null +++ b/express/blocks/search-marquee/search-marquee.css @@ -0,0 +1,247 @@ +main .section .search-marquee-wrapper { + max-width: none; +} + +main .search-marquee-wrapper > .backgroundimg, main .search-marquee > .backgroundimg { + object-fit: cover; + min-width: 100%; + max-height: 100%; + min-height: 100%; + position: absolute; + left: 0px; + z-index: -1; +} + +main .search-marquee { + padding: 32px 28px; + margin-bottom: 24px; + background-position: center; + background-size: cover; + display: flex; + flex-direction: column; + align-items: center; +} + +main .search-marquee > div:first-of-type h1 { + font-size: var(--heading-font-size-l); +} + +main .search-marquee > div:first-of-type p { + font-size: var(--body-font-size-m); + max-width: 640px; +} + +main .search-marquee .search-marquee-bg { + position: absolute; + left: 0; + top: 0; + height: 100%; + width: 100%; + object-fit: cover; + z-index: 0; +} + +main .search-marquee .search-dropdown-container { + background: #FFFFFF; + top: calc(100% + 6px); + border-radius: 12px; + box-shadow: 0 0 20px #00000029; + position: absolute; + width: 100%; + box-sizing: border-box; + left: 0; + z-index: 3; +} + +main .search-marquee .search-dropdown-container .dropdown-title { + margin: 0; + font-size: var(--body-font-size-s); + color: var(--color-gray-500); +} + +main .search-marquee .search-dropdown-container .trends-container, +main .search-marquee .search-dropdown-container .suggestions-container { + padding: 20px 28px 0; + text-align: left; +} + +main .search-marquee .search-dropdown-container .trends-container .from-scratch-link { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 16px; +} + +main .search-marquee .search-dropdown-container .trends-container ul { + padding-left: 0; + list-style: none; + max-height: 216px; + overflow: auto; +} + +main .search-marquee .search-dropdown-container .suggestions-container ul { + padding-left: 0; + list-style: none; + max-height: 164px; + overflow: auto; + margin: 0 0 16px -8px; +} + +main .search-marquee .search-dropdown-container .trends-container .trends-wrapper li, +main .search-marquee .search-dropdown-container .suggestions-container li { + margin-bottom: 16px; +} + +main .search-marquee .search-dropdown-container .suggestions-container li { + cursor: pointer; + margin: 0 8px 0 0; + padding: 8px; +} + +main .search-marquee .search-dropdown-container .suggestions-container li:hover, +main .search-marquee .search-dropdown-container .suggestions-container li:focus-visible { + background: var(--color-gray-200); + outline: none; + border-radius: 8px; +} + +main .search-marquee .search-dropdown-container .trends-container .trends-wrapper li a { + color: var(--color-black); +} + +main .search-marquee .search-dropdown-container .free-plans-container .free-plan-widget { + width: 100%; + border-radius: 0 0 12px 12px; + flex-direction: row; + align-items: center; + flex-wrap: wrap; + gap: 10px; + margin: 0; + justify-content: center; +} + +main .search-marquee .search-dropdown-container .free-plans-container .free-plan-widget .plan-widget-tag { + font-size: var(--body-font-size-s); +} + +main .search-marquee .search-bar-wrapper { + position: relative; + width: 100%; + max-width: 560px; + margin: 0 28px; + height: max-content; + transition: max-width 0.5s; +} + +main .search-marquee .search-bar-wrapper .search-bar { + scroll-margin: 65px; + box-sizing: border-box; + margin: 0; + font-family: var(--body-font-family); + font-weight: 400; + font-size: var(--body-font-size-m); + padding: 10px 40px; + border: var(--color-gray-200) 2px solid; + border-radius: 100px; + max-width: 560px; + width: 100%; + height: 41px; + transition: max-width 0.5s, padding-right 0.5s, padding-left 0.5s; +} + +main .search-marquee .search-bar-wrapper .search-bar::placeholder { + transition: color 0.5s; +} + +main .search-marquee .search-bar-wrapper .search-bar:focus-visible, +main .search-marquee .search-bar-wrapper .search-bar:focus { + border: #444444 2px solid; + outline: none; +} + +main .search-marquee .search-bar-wrapper .icon.icon-search { + position: absolute; + z-index: 1; + height: 16px; + width: 16px; + cursor: pointer; + top: 50%; + transform: translateY(-50%); + transition: left 0.5s; + left: 16px; +} + +main .search-marquee .search-bar-wrapper .icon.icon-search-clear { + position: absolute; + z-index: 1; + height: 16px; + width: 16px; + cursor: pointer; + top: 50%; + transform: translateY(-50%); + right: 40px; +} + +main .search-marquee .carousel-container { + margin-top: 32px; + margin-bottom: 0; +} + +main .search-marquee.spreadsheet-powered .carousel-container { + visibility: hidden; +} + +main .search-marquee.spreadsheet-powered .carousel-container.appear { + visibility: unset; +} + +main .search-marquee .carousel-container .carousel-platform { + margin: auto; +} + +main .search-marquee .carousel-container .carousel-platform p.button-container { + margin: 0; + border: none; +} + +main .search-marquee .carousel-container .carousel-platform a { + display: block; + box-sizing: border-box; + min-width: 160px; + min-height: 48px; + padding: 14px 27px; + color: var(--color-black); + font-size: var(--body-font-size-m); + line-height: 20px; + background: var(--color-white); + border-radius: 50px; + margin: 0 4px; + border: none; +} + +main .search-marquee .carousel-container .carousel-platform a:hover { + background-color: var(--color-gray-200); +} + +main .search-marquee .hidden { + display: none; +} + +@media (min-width: 900px) { + main .search-marquee > div:first-of-type h1 { + font-size: var(--heading-font-size-xl); + } + + main .search-marquee > div:first-of-type p { + font-size: var(--body-font-size-l); + max-width: 900px; + } + + main .search-marquee .search-dropdown-container .free-plans-container .free-plan-widget .plan-widget-tag { + font-size: var(--body-font-size-m); + } + + main .search-marquee .search-dropdown-container .suggestions-container ul { + max-height: 216px; + } +} diff --git a/express/blocks/search-marquee/search-marquee.js b/express/blocks/search-marquee/search-marquee.js new file mode 100755 index 00000000..2794136e --- /dev/null +++ b/express/blocks/search-marquee/search-marquee.js @@ -0,0 +1,366 @@ +import { getLibs +} from '../../scripts/utils.js'; + +import { fetchPlaceholders } from '../../scripts/utils/fetch-placeholders.js'; + +import { getIconElement } from '../../scripts/utils/icons.js'; +const { createTag, getConfig , getMetadata} = await import(`${getLibs()}/utils/utils.js`); +import { sampleRUM } from '../../scripts/utils/sampleRUM.js'; +import { addTempWrapperDeprecated } from '../../scripts/utils/decorate.js' +import { buildFreePlanWidget } from '../../scripts/utils/free-plan.js'; + +import buildCarousel from '../shared/carousel.js'; +import fetchAllTemplatesMetadata from '../../scripts/utils/all-templates-metadata.js' +import BlockMediator from '../../scripts/block-mediator.min.js'; + +function handlelize(str) { + return str.normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') // Remove accents + .replace(/(\W+|\s+)/g, '-') // Replace space and other characters by hyphen + .replace(/--+/g, '-') // Replaces multiple hyphens by one hyphen + .replace(/(^-+|-+$)/g, '') // Remove extra hyphens from beginning or end of the string + .toLowerCase(); // To lowercase +} + +function wordExistsInString(word, inputString) { + const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const regexPattern = new RegExp(`(?:^|\\s|[.,!?()'"\\-])${escapedWord}(?:$|\\s|[.,!?()'"\\-])`, 'i'); + return regexPattern.test(inputString); +} + +function cycleThroughSuggestions(block, targetIndex = 0) { + const suggestions = block.querySelectorAll('.suggestions-list li'); + if (targetIndex >= suggestions.length || targetIndex < 0) return; + if (suggestions.length > 0) suggestions[targetIndex].focus(); +} + +function initSearchFunction(block) { + const searchBarWrapper = block.querySelector('.search-bar-wrapper'); + + const searchDropdown = searchBarWrapper.querySelector('.search-dropdown-container'); + const searchForm = searchBarWrapper.querySelector('.search-form'); + const searchBar = searchBarWrapper.querySelector('input.search-bar'); + const clearBtn = searchBarWrapper.querySelector('.icon-search-clear'); + const trendsContainer = searchBarWrapper.querySelector('.trends-container'); + const suggestionsContainer = searchBarWrapper.querySelector('.suggestions-container'); + const suggestionsList = searchBarWrapper.querySelector('.suggestions-list'); + + clearBtn.style.display = 'none'; + + const searchBarWatcher = new IntersectionObserver((entries) => { + if (!entries[0].isIntersecting) { + BlockMediator.set('stickySearchBar', { + element: searchBarWrapper.cloneNode(true), + loadSearchBar: true, + }); + } else { + BlockMediator.set('stickySearchBar', { + element: searchBarWrapper.cloneNode(true), + loadSearchBar: false, + }); + } + }, { rootMargin: '0px', threshold: 1 }); + + searchBarWatcher.observe(searchBarWrapper); + + searchBar.addEventListener('click', (e) => { + e.stopPropagation(); + searchBar.scrollIntoView({ behavior: 'smooth' }); + searchDropdown.classList.remove('hidden'); + }, { passive: true }); + + searchBar.addEventListener('keyup', () => { + if (searchBar.value !== '') { + clearBtn.style.display = 'inline-block'; + trendsContainer.classList.add('hidden'); + suggestionsContainer.classList.remove('hidden'); + } else { + clearBtn.style.display = 'none'; + trendsContainer.classList.remove('hidden'); + suggestionsContainer.classList.add('hidden'); + } + }, { passive: true }); + + searchBar.addEventListener('keydown', (e) => { + if (e.key === 'ArrowDown' || e.keyCode === 40) { + e.preventDefault(); + cycleThroughSuggestions(block); + } + }); + + document.addEventListener('click', (e) => { + const { target } = e; + if (target !== searchBarWrapper && !searchBarWrapper.contains(target)) { + searchDropdown.classList.add('hidden'); + } + }, { passive: true }); + + const trimInput = (tasks, input) => { + let alteredInput = input; + tasks[0][1].sort((a, b) => b.length - a.length).forEach((word) => { + alteredInput = alteredInput.toLowerCase().replace(word.toLowerCase(), ''); + }); + + return alteredInput.trim(); + }; + + const findTask = (map) => Object.entries(map).filter((task) => task[1].some((word) => { + const searchValue = searchBar.value.toLowerCase(); + return wordExistsInString(word.toLowerCase(), searchValue); + })).sort((a, b) => b[0].length - a[0].length); + + const redirectSearch = async () => { + const placeholders = await fetchPlaceholders(); + const taskMap = placeholders['task-name-mapping'] ? JSON.parse(placeholders['task-name-mapping']) : {}; + const taskXMap = placeholders['x-task-name-mapping'] ? JSON.parse(placeholders['x-task-name-mapping']) : {}; + + const format = getMetadata('placeholder-format'); + const currentTasks = { + xCore: '', + content: '', + }; + let searchInput = searchBar.value || getMetadata('topics'); + + const tasksFoundInInput = findTask(taskMap); + const tasksXFoundInInput = findTask(taskXMap); + + if (tasksFoundInInput.length > 0) { + searchInput = trimInput(tasksFoundInInput, searchInput); + [[currentTasks.xCore]] = tasksFoundInInput; + } + + if (tasksXFoundInInput.length > 0) { + searchInput = trimInput(tasksXFoundInInput, searchInput); + [[currentTasks.content]] = tasksXFoundInInput; + } + const { prefix } = getConfig().locale; + const topicUrl = searchInput ? `/${searchInput}` : ''; + const taskUrl = `/${handlelize(currentTasks.xCore.toLowerCase())}`; + const taskXUrl = `/${handlelize(currentTasks.content.toLowerCase())}`; + const targetPath = `${prefix}/express/templates${taskUrl}${topicUrl}`; + const targetPathX = `${prefix}/express/templates${taskXUrl}${topicUrl}`; + const allTemplatesMetadata = await fetchAllTemplatesMetadata(); + const pathMatch = (e) => e.url === targetPath; + const pathMatchX = (e) => e.url === targetPathX; + if (allTemplatesMetadata.some(pathMatchX) && document.body.dataset.device !== 'mobile') { + window.location = `${window.location.origin}${targetPathX}`; + } else if (allTemplatesMetadata.some(pathMatch) && document.body.dataset.device !== 'desktop') { + window.location = `${window.location.origin}${targetPath}`; + } else { + const searchUrlTemplate = `/express/templates/search?tasks=${currentTasks.xCore}&tasksx=${currentTasks.content}&phformat=${format}&topics=${searchInput || "''"}&q=${searchBar.value || "''"}`; + window.location = `${window.location.origin}${prefix}${searchUrlTemplate}`; + } + }; + + const onSearchSubmit = async () => { + searchBar.disabled = true; + sampleRUM('search', { + source: block.dataset.blockName, + target: searchBar.value, + }, 1); + await redirectSearch(); + }; + + async function handleSubmitInteraction(item) { + if (item.query !== searchBar.value) { + searchBar.value = item.query; + searchBar.dispatchEvent(new Event('input')); + } + await onSearchSubmit(); + } + + searchForm.addEventListener('submit', async (e) => { + e.preventDefault(); + await onSearchSubmit(); + }); + + clearBtn.addEventListener('click', () => { + searchBar.value = ''; + suggestionsList.innerHTML = ''; + trendsContainer.classList.remove('hidden'); + suggestionsContainer.classList.add('hidden'); + clearBtn.style.display = 'none'; + }, { passive: true }); + + const suggestionsListUIUpdateCB = (suggestions) => { + suggestionsList.innerHTML = ''; + const searchBarVal = searchBar.value.toLowerCase(); + if (suggestions && !(suggestions.length <= 1 && suggestions[0]?.query === searchBarVal)) { + suggestions.forEach((item, index) => { + const li = createTag('li', { tabindex: 0 }); + const valRegEx = new RegExp(searchBar.value, 'i'); + li.innerHTML = item.query.replace(valRegEx, `${searchBarVal}`); + li.addEventListener('click', async () => { + await handleSubmitInteraction(item); + }); + + li.addEventListener('keydown', async (e) => { + if (e.key === 'Enter' || e.keyCode === 13) { + await handleSubmitInteraction(item); + } + }); + + li.addEventListener('keydown', (e) => { + if (e.key === 'ArrowDown' || e.keyCode === 40) { + e.preventDefault(); + cycleThroughSuggestions(block, index + 1); + } + }); + + li.addEventListener('keydown', (e) => { + if (e.key === 'ArrowUp' || e.keyCode === 38) { + e.preventDefault(); + cycleThroughSuggestions(block, index - 1); + } + }); + + suggestionsList.append(li); + }); + } + }; + + import('../../scripts/autocomplete-api-v3.js').then(({ default: useInputAutocomplete }) => { + const { inputHandler } = useInputAutocomplete( + suggestionsListUIUpdateCB, { throttleDelay: 300, debounceDelay: 500, limit: 7 }, + ); + searchBar.addEventListener('input', inputHandler); + }); +} + +async function decorateSearchFunctions(block) { + const placeholders = await fetchPlaceholders(); + const searchBarWrapper = createTag('div', { class: 'search-bar-wrapper' }); + const searchForm = createTag('form', { class: 'search-form' }); + const searchBar = createTag('input', { + class: 'search-bar', + type: 'text', + placeholder: placeholders['template-search-placeholder'] ?? 'Search for over 50,000 templates', + enterKeyHint: placeholders.search ?? 'Search', + }); + + searchForm.append(searchBar); + const searchIcon = getIconElement('search'); + searchIcon.loading = 'lazy'; + const searchClearIcon = getIconElement('search-clear'); + searchClearIcon.loading = 'lazy'; + searchBarWrapper.append(searchIcon, searchClearIcon); + searchBarWrapper.append(searchForm); + + block.append(searchBarWrapper); +} + +function decorateBackground(block) { + const mediaRow = block.querySelector('div:nth-child(2)'); + if (mediaRow) { + const media = mediaRow.querySelector('picture img'); + if (media) { + media.classList.add('backgroundimg'); + const wrapper = block.parentElement; + if (wrapper.classList.contains('search-marquee-wrapper')) { + wrapper.prepend(media); + } else { + block.prepend(media); + } + } + mediaRow.remove(); + } +} + +async function buildSearchDropdown(block) { + const placeholders = await fetchPlaceholders(); + + const searchBarWrapper = block.querySelector('.search-bar-wrapper'); + if (searchBarWrapper) { + const dropdownContainer = createTag('div', { class: 'search-dropdown-container hidden' }); + const trendsContainer = createTag('div', { class: 'trends-container' }); + const suggestionsContainer = createTag('div', { class: 'suggestions-container hidden' }); + const suggestionsTitle = createTag('p', { class: 'dropdown-title' }); + const suggestionsList = createTag('ul', { class: 'suggestions-list' }); + const freePlanContainer = createTag('div', { class: 'free-plans-container' }); + + const fromScratchLink = block.querySelector('a'); + const trendsTitle = placeholders['search-trends-title']; + let trends; + if (placeholders['search-trends']) trends = JSON.parse(placeholders['search-trends']); + + if (fromScratchLink) { + const linkDiv = fromScratchLink.parentElement.parentElement; + const templateFreeAccentIcon = getIconElement('template-free-accent'); + templateFreeAccentIcon.loading = 'lazy'; + const arrowRightIcon = getIconElement('arrow-right'); + arrowRightIcon.loading = 'lazy'; + fromScratchLink.prepend(templateFreeAccentIcon); + fromScratchLink.append(arrowRightIcon); + fromScratchLink.classList.remove('button'); + fromScratchLink.classList.add('from-scratch-link'); + fromScratchLink.href = getMetadata('search-marquee-from-scratch-link') || '/'; + trendsContainer.append(fromScratchLink); + linkDiv.remove(); + } + + if (trendsTitle) { + const trendsTitleEl = createTag('p', { class: 'dropdown-title' }); + trendsTitleEl.textContent = trendsTitle; + trendsContainer.append(trendsTitleEl); + } + + if (trends) { + const trendsWrapper = createTag('ul', { class: 'trends-wrapper' }); + for (const [key, value] of Object.entries(trends)) { + const trendLinkWrapper = createTag('li'); + const trendLink = createTag('a', { class: 'trend-link', href: value }); + trendLink.textContent = key; + trendLinkWrapper.append(trendLink); + trendsWrapper.append(trendLinkWrapper); + } + trendsContainer.append(trendsWrapper); + } + + suggestionsTitle.textContent = placeholders['search-suggestions-title'] ?? ''; + suggestionsContainer.append(suggestionsTitle, suggestionsList); + + const freePlanTags = await buildFreePlanWidget({ typeKey: 'branded', checkmarks: true }); + + freePlanContainer.append(freePlanTags); + dropdownContainer.append(trendsContainer, suggestionsContainer, freePlanContainer); + searchBarWrapper.append(dropdownContainer); + } +} + +function decorateLinkList(block) { + const carouselItemsWrapper = block.querySelector(':scope > div:nth-of-type(2) > div'); + if (carouselItemsWrapper) { + const showLinkList = getMetadata('show-search-marquee-link-list'); + if ((showLinkList && !['yes', 'true', 'on', 'Y'].includes(showLinkList)) + // no link list for templates root page + || window.location.pathname.endsWith('/express/templates/') + || window.location.pathname.endsWith('/express/templates')) { + carouselItemsWrapper.remove(); + } else { + buildCarousel(':scope > p', carouselItemsWrapper).then(() => { + const carousel = carouselItemsWrapper.querySelector('.carousel-container'); + block.append(carousel); + carouselItemsWrapper.parentElement.remove(); + }); + } + } +} + +export default async function decorate(block) { + addTempWrapperDeprecated(block, 'search-marquee'); + decorateBackground(block); + await decorateSearchFunctions(block); + await buildSearchDropdown(block); + initSearchFunction(block); + decorateLinkList(block); + + const blockLinks = block.querySelectorAll('a'); + if (blockLinks && blockLinks.length > 0) { + const linksPopulated = new CustomEvent('linkspopulated', { detail: blockLinks }); + document.dispatchEvent(linksPopulated); + } + if (window.location.href.includes('/express/templates/')) { + const { default: updateAsyncBlocks } = await import('../../scripts/template-ckg.js'); + updateAsyncBlocks(); + } +} diff --git a/express/features/carousel/carousel.js b/express/features/carousel/carousel.js new file mode 100644 index 00000000..a1daffc9 --- /dev/null +++ b/express/features/carousel/carousel.js @@ -0,0 +1,193 @@ +import { getLibs } from '../../scripts/utils.js' +const { createTag , loadStyle } = await import(`${getLibs()}/utils/utils.js`); + +function correctCenterAlignment(plat) { + if (plat.parentElement.offsetWidth <= plat.offsetWidth) return; + plat.parentElement.style.maxWidth = `${plat.offsetWidth}px`; +} + +function initToggleTriggers(parent) { + if (!parent) return; + + const isInHiddenSection = () => { + const parentSection = parent.closest('.section'); + if (!parentSection) return false; + + return parentSection.dataset.toggle && parentSection.style.display === 'none'; + }; + + const leftControl = parent.querySelector('.carousel-fader-left'); + const rightControl = parent.querySelector('.carousel-fader-right'); + const leftTrigger = parent.querySelector('.carousel-left-trigger'); + const rightTrigger = parent.querySelector('.carousel-right-trigger'); + const platform = parent.querySelector('.carousel-platform'); + + // If flex container has a gap, add negative margins to compensate + const gap = window.getComputedStyle(platform, null).getPropertyValue('gap'); + if (gap !== 'normal') { + const gapInt = parseInt(gap.replace('px', ''), 10); + leftTrigger.style.marginRight = `-${gapInt + 1}px`; + rightTrigger.style.marginLeft = `-${gapInt + 1}px`; + } + + // intersection observer to toggle right arrow and gradient + const onSlideIntersect = (entries) => { + if (isInHiddenSection()) return; + + entries.forEach((entry) => { + if (entry.target === leftTrigger) { + if (entry.isIntersecting) { + leftControl.classList.add('arrow-hidden'); + platform.classList.remove('left-fader'); + } else { + leftControl.classList.remove('arrow-hidden'); + platform.classList.add('left-fader'); + } + } + + if (entry.target === rightTrigger) { + if (entry.isIntersecting) { + rightControl.classList.add('arrow-hidden'); + platform.classList.remove('right-fader'); + } else { + rightControl.classList.remove('arrow-hidden'); + platform.classList.add('right-fader'); + } + } + }); + }; + + const options = { threshold: 0, root: parent }; + const slideObserver = new IntersectionObserver(onSlideIntersect, options); + slideObserver.observe(leftTrigger); + slideObserver.observe(rightTrigger); + // todo: should unobserve triggers where/when appropriate... +} + +export function onCarouselCSSLoad(selector, parent, options) { + const carouselContent = selector ? parent.querySelectorAll(selector) : parent.querySelectorAll(':scope > *'); + + carouselContent.forEach((el) => el.classList.add('carousel-element')); + + const container = createTag('div', { class: 'carousel-container' }); + const platform = createTag('div', { class: 'carousel-platform' }); + + const faderLeft = createTag('div', { class: 'carousel-fader-left arrow-hidden' }); + const faderRight = createTag('div', { class: 'carousel-fader-right arrow-hidden' }); + + const arrowLeft = createTag('a', { class: 'button carousel-arrow carousel-arrow-left' }); + const arrowRight = createTag('a', { class: 'button carousel-arrow carousel-arrow-right' }); + + platform.append(...carouselContent); + + if (!options.infinityScrollEnabled) { + const leftTrigger = createTag('div', { class: 'carousel-left-trigger' }); + const rightTrigger = createTag('div', { class: 'carousel-right-trigger' }); + + platform.prepend(leftTrigger); + platform.append(rightTrigger); + } + + container.append(platform, faderLeft, faderRight); + faderLeft.append(arrowLeft); + faderRight.append(arrowRight); + parent.append(container); + + // Scroll the carousel by clicking on the controls + const moveCarousel = (increment) => { + platform.scrollLeft -= increment; + }; + + faderLeft.addEventListener('click', () => { + const increment = Math.max((platform.offsetWidth / 4) * 3, 300); + moveCarousel(increment); + }); + faderRight.addEventListener('click', () => { + const increment = Math.max((platform.offsetWidth / 4) * 3, 300); + moveCarousel(-increment); + }); + + // Carousel loop functionality (if enabled) + const stopScrolling = () => { // To prevent safari shakiness + platform.style.overflowX = 'hidden'; + setTimeout(() => { + platform.style.removeProperty('overflow-x'); + }, 20); + }; + + const moveToCenterIfNearTheEdge = (e = null) => { + // Start at the center and snap back to center if the user scrolls to the edges + const scrollPos = platform.scrollLeft; + const maxScroll = platform.scrollWidth; + if ((scrollPos > (maxScroll / 5) * 4) || scrollPos < 30) { + if (e) e.preventDefault(); + stopScrolling(); + platform.scrollTo({ + left: ((maxScroll / 5) * 2), + behavior: 'instant', + }); + } + }; + + const infinityScroll = (children) => { + const duplicateContent = () => { + [...children].forEach((child) => { + const duplicate = child.cloneNode(true); + const duplicateLinks = duplicate.querySelectorAll('a'); + platform.append(duplicate); + if (duplicate.tagName.toLowerCase() === 'a') { + const linksPopulated = new CustomEvent('linkspopulated', { detail: [duplicate] }); + document.dispatchEvent(linksPopulated); + } + if (duplicateLinks) { + const linksPopulated = new CustomEvent('linkspopulated', { detail: duplicateLinks }); + document.dispatchEvent(linksPopulated); + } + }); + }; + + // Duplicate children to simulate smooth scrolling + for (let i = 0; i < 4; i += 1) { + duplicateContent(); + } + + platform.addEventListener('scroll', (e) => { + moveToCenterIfNearTheEdge(e); + }, { passive: false }); + }; + + // set initial states + const setInitialState = (scrollable, opts) => { + if (opts.infinityScrollEnabled) { + infinityScroll([...carouselContent]); + faderLeft.classList.remove('arrow-hidden'); + faderRight.classList.remove('arrow-hidden'); + platform.classList.add('left-fader', 'right-fader'); + } + + const onIntersect = ([entry], observer) => { + if (!entry.isIntersecting) return; + + if (opts.centerAlign) correctCenterAlignment(scrollable); + if (opts.startPosition === 'right') moveCarousel(-scrollable.scrollWidth); + if (!opts.infinityScrollEnabled) initToggleTriggers(container); + + observer.unobserve(scrollable); + }; + + const carouselObserver = new IntersectionObserver(onIntersect, { rootMargin: '1000px', threshold: 0 }); + carouselObserver.observe(scrollable); + }; + + setInitialState(platform, options); +} + +export default async function buildCarousel(selector, parent, options = {}) { + // Load CSS then build carousel + return new Promise((resolve) => { + loadStyle('/express/blocks/shared/carousel.css', () => { + onCarouselCSSLoad(selector, parent, options); + resolve(); + }); + }); +} diff --git a/express/scripts/utils/fetch-placeholders.js b/express/scripts/utils/fetch-placeholders.js new file mode 100644 index 00000000..a9eeab7b --- /dev/null +++ b/express/scripts/utils/fetch-placeholders.js @@ -0,0 +1,24 @@ +import { toClassName } from "../utils.js"; + +export async function fetchPlaceholders() { + const requestPlaceholders = async (url) => { + const resp = await fetch(url); + if (resp.ok) { + const json = await resp.json(); + window.placeholders = {}; + json.data.forEach((placeholder) => { + window.placeholders[toClassName(placeholder.Key)] = placeholder.Text; + }); + } + }; + if (!window.placeholders) { + try { + const { prefix } = getConfig().locale; + await requestPlaceholders(`${prefix}/express/placeholders.json`); + } catch { + await requestPlaceholders('/express/placeholders.json'); + } + } + return window.placeholders; + } + \ No newline at end of file diff --git a/express/scripts/utils/free-plan.js b/express/scripts/utils/free-plan.js new file mode 100644 index 00000000..6a10d999 --- /dev/null +++ b/express/scripts/utils/free-plan.js @@ -0,0 +1,91 @@ +import { + getLibs, + getLottie, + lazyLoadLottiePlayer, +} from '../utils.js'; + +import { fetchPlaceholders } from './fetch-placeholders.js'; +const { createTag, getConfig , getMetadata} = await import(`${getLibs()}/utils/utils.js`); + +const typeMap = { + branded: [ + 'free-plan-check-1', + 'free-plan-check-2', + ], + features: [ + 'free-plan-features-1', + 'free-plan-check-2', + ], + entitled: [ + 'entitled-plan-tag', + ], +}; + +export async function buildFreePlanWidget(config) { + const { typeKey, checkmarks } = config; + const placeholders = await fetchPlaceholders(); + const widget = createTag('div', { class: 'free-plan-widget' }); + + typeMap[typeKey].forEach((tagKey) => { + const tagText = placeholders[tagKey]; + + if (tagText) { + const textDiv = createTag('span', { class: 'plan-widget-tag' }); + textDiv.textContent = tagText; + widget.append(textDiv); + + if (checkmarks) { + textDiv.prepend(getIconElement('checkmark')); + } + } + }); + + return widget; +} + +export async function addFreePlanWidget(elem) { + const freePlanMeta = getMetadata('show-free-plan').toLowerCase(); + + if (!freePlanMeta || ['no', 'false', 'n', 'off'].includes(freePlanMeta)) return; + const placeholders = await fetchPlaceholders(); + let widget; + + if (elem && ['yes', 'true', 'y', 'on', 'branded'].includes(freePlanMeta)) { + widget = await buildFreePlanWidget({ typeKey: 'branded' }); + } + + if (elem && ['features'].includes(freePlanMeta)) { + widget = await buildFreePlanWidget({ typeKey: 'features' }); + } + + if (elem && ['entitled'].includes(freePlanMeta)) { + widget = await buildFreePlanWidget({ typeKey: 'entitled' }); + } + + document.addEventListener('planscomparisonloaded', () => { + const learnMoreButton = createTag('a', { + class: 'learn-more-button', + href: '#plans-comparison-container', + }); + const lottieWrapper = createTag('span', { class: 'lottie-wrapper' }); + + learnMoreButton.textContent = placeholders['learn-more']; + lottieWrapper.innerHTML = getLottie('purple-arrows', '/express/icons/purple-arrows.json'); + learnMoreButton.append(lottieWrapper); + lazyLoadLottiePlayer(); + widget.append(learnMoreButton); + + learnMoreButton.addEventListener('click', (e) => { + e.preventDefault(); + // temporarily disabling smooth scroll for accurate location + const html = document.querySelector('html'); + html.style.scrollBehavior = 'unset'; + const $plansComparison = document.querySelector('.plans-comparison-container'); + $plansComparison.scrollIntoView(); + html.style.removeProperty('scroll-behavior'); + }); + }); + + elem.append(widget); + elem.classList.add('free-plan-container'); +} From a767fd932438f3e2a16a120e6407ec25ef9c6a95 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Wed, 27 Mar 2024 14:05:32 -0700 Subject: [PATCH 03/34] implemented content replace in milo --- .../blocks/search-marquee/search-marquee.js | 5 +- express/blocks/template-x/template-x.js | 1625 +++++++++++++++++ express/scripts/content-replace.js | 206 +++ express/scripts/html-sanitizer.js | 182 ++ express/scripts/scripts.js | 5 +- express/scripts/utils/autocomplete-api-v3.js | 81 + express/scripts/utils/free-plan.js | 1 + express/scripts/utils/icons.js | 4 + 8 files changed, 2105 insertions(+), 4 deletions(-) create mode 100644 express/blocks/template-x/template-x.js create mode 100644 express/scripts/content-replace.js create mode 100644 express/scripts/html-sanitizer.js create mode 100755 express/scripts/utils/autocomplete-api-v3.js diff --git a/express/blocks/search-marquee/search-marquee.js b/express/blocks/search-marquee/search-marquee.js index 2794136e..d259e6c2 100755 --- a/express/blocks/search-marquee/search-marquee.js +++ b/express/blocks/search-marquee/search-marquee.js @@ -115,6 +115,7 @@ function initSearchFunction(block) { const taskXMap = placeholders['x-task-name-mapping'] ? JSON.parse(placeholders['x-task-name-mapping']) : {}; const format = getMetadata('placeholder-format'); + const currentTasks = { xCore: '', content: '', @@ -219,7 +220,7 @@ function initSearchFunction(block) { } }; - import('../../scripts/autocomplete-api-v3.js').then(({ default: useInputAutocomplete }) => { + import('../../scripts/utils/autocomplete-api-v3.js').then(({ default: useInputAutocomplete }) => { const { inputHandler } = useInputAutocomplete( suggestionsListUIUpdateCB, { throttleDelay: 300, debounceDelay: 500, limit: 7 }, ); @@ -360,7 +361,7 @@ export default async function decorate(block) { document.dispatchEvent(linksPopulated); } if (window.location.href.includes('/express/templates/')) { - const { default: updateAsyncBlocks } = await import('../../scripts/template-ckg.js'); + const { default: updateAsyncBlocks } = await import('../../scripts/utils/template-ckg.js'); updateAsyncBlocks(); } } diff --git a/express/blocks/template-x/template-x.js b/express/blocks/template-x/template-x.js new file mode 100644 index 00000000..7c5c2b1c --- /dev/null +++ b/express/blocks/template-x/template-x.js @@ -0,0 +1,1625 @@ +/* eslint-disable import/named, import/extensions */ + +import { + getLottie, + lazyLoadLottiePlayer, + toClassName, +} from '../../scripts/utils.js'; +import { titleCase } from '../../scripts/utils/string.js'; +import { getIconElement } from '../../scripts/utils/icons.js'; +import { getLibs } from '../../scripts/utils.js' +const { createTag, getConfig , getMetadata} = await import(`${getLibs()}/utils/utils.js`); +// const { fetchPlaceholders } = await import(`${getLibs()}/features/placeholders.js`); +import { fetchPlaceholders } from '../../scripts/utils/fetch-placeholders.js'; +import { sampleRUM} from '../../scripts/utils/sampleRUM.js' +import { transformLinkToAnimation, createOptimizedPicture } from '../../scripts/utils/media.js'; +import { addTempWrapperDeprecated } from '../../scripts/utils/decorate.js'; + +import { Masonry } from '../../features/masonry/masonry.js' +import buildCarousel from '../../features/carousel/carousel.js'; + +import { fetchTemplates, isValidTemplate, fetchTemplatesCategoryCount } from './template-search-api-v3.js'; + +import fetchAllTemplatesMetadata from '../../scripts/all-templates-metadata.js'; +import renderTemplate from './template-rendering.js'; +import isDarkOverlayReadable from '../../scripts/color-tools.js'; + +function wordStartsWithVowels(word) { + return word.match('^[aieouâêîôûäëïöüàéèùœAIEOUÂÊÎÔÛÄËÏÖÜÀÉÈÙŒ].*'); +} + +function camelize(str) { + return str.replace(/^\w|[A-Z]|\b\w/g, (word, index) => (index === 0 ? word.toLowerCase() : word.toUpperCase())).replace(/\s+/g, ''); +} + +function handlelize(str) { + return str.normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') // Remove accents + .replace(/(\W+|\s+)/g, '-') // Replace space and other characters by hyphen + .replace(/--+/g, '-') // Replaces multiple hyphens by one hyphen + .replace(/(^-+|-+$)/g, '') // Remove extra hyphens from beginning or end of the string + .toLowerCase(); // To lowercase +} + +async function getTemplates(response, phs, fallbackMsg) { + const filtered = response.items.filter((item) => isValidTemplate(item)); + const templates = await Promise.all(filtered.map((template) => renderTemplate(template, phs))); + return { + fallbackMsg, + templates, + }; +} + +async function fetchAndRenderTemplates(props) { + // import('../../scripts/mobile-beta-gating.js').then((gatingScript) => { + // gatingScript.default(); + // }); + console.log(fetchPlaceholders) + const [placeholders, { response, fallbackMsg }] = await Promise.all( + [fetchPlaceholders(), fetchTemplates(props)], + ); + if (!response || !response.items || !Array.isArray(response.items)) { + return { templates: null }; + } + + if ('_links' in response) { + // eslint-disable-next-line no-underscore-dangle + const nextQuery = response._links.next.href; + const starts = new URLSearchParams(nextQuery).get('start').split(','); + props.start = starts.join(','); + } else { + props.start = ''; + } + + props.total = response.metadata.totalHits; + + // eslint-disable-next-line no-return-await + return await getTemplates(response, placeholders, fallbackMsg); +} + +async function processContentRow(block, props) { + const templateTitle = createTag('div', { class: 'template-title' }); + const textWrapper = createTag('div', { class: 'text-wrapper' }); + textWrapper.innerHTML = props.contentRow.outerHTML; + templateTitle.append(textWrapper); + + const aTags = templateTitle.querySelectorAll(':scope a'); + + if (aTags.length > 0) { + templateTitle.classList.add('with-link'); + aTags.forEach((aTag) => { + aTag.className = 'template-title-link'; + + const p = aTag.closest('p'); + if (p) { + templateTitle.append(p); + p.className = 'view-all-link-wrapper'; + } + }); + + if (textWrapper.children.length === 1 && textWrapper.firstElementChild.className === 'button-container') { + templateTitle.classList.add('link-only'); + } + } + + block.prepend(templateTitle); + + if (props.orientation.toLowerCase() === 'horizontal') templateTitle.classList.add('horizontal'); +} + +async function formatHeadingPlaceholder(props) { + // special treatment for express/ root url + const placeholders = await fetchPlaceholders(); + const config = getConfig(); + const { region } = config.locale; + const lang = config.locale.ietf; + const templateCount = lang === 'es-ES' ? props.total.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ') : props.total.toLocaleString(lang); + let toolBarHeading = getMetadata('toolbar-heading') ? props.templateStats : placeholders['template-placeholder']; + + if (getMetadata('template-search-page') === 'Y' + && placeholders['template-search-heading-singular'] + && placeholders['template-search-heading-plural']) { + toolBarHeading = props.total === 1 ? placeholders['template-search-heading-singular'] : placeholders['template-search-heading-plural']; + } + + if (toolBarHeading) { + toolBarHeading = toolBarHeading + .replace('{{quantity}}', props.fallbackMsg ? '0' : templateCount) + .replace('{{Type}}', titleCase(getMetadata('short-title') || getMetadata('q') || getMetadata('topics'))) + .replace('{{type}}', getMetadata('short-title') || getMetadata('q') || getMetadata('topics')); + if (region === 'fr') { + toolBarHeading.split(' ').forEach((word, index, words) => { + if (index + 1 < words.length) { + if (word === 'de' && wordStartsWithVowels(words[index + 1])) { + words.splice(index, 2, `d'${words[index + 1].toLowerCase()}`); + toolBarHeading = words.join(' '); + } + } + }); + } + } + + return toolBarHeading; +} + +function constructProps(block) { + const props = { + templates: [], + filters: { + locales: 'en', + topics: '', + }, + renditionParams: { + format: 'jpg', + size: 151, + }, + tailButton: '', + limit: 70, + total: 0, + start: '', + collectionId: 'urn:aaid:sc:VA6C2:25a82757-01de-4dd9-b0ee-bde51dd3b418', + sort: '', + masonry: undefined, + headingTitle: null, + headingSlug: null, + viewAllLink: null, + holidayIcon: null, + backgroundColor: '#000B1D', + backgroundAnimation: null, + textColor: '#FFFFFF', + loadedOtherCategoryCounts: false, + }; + + Array.from(block.children).forEach((row) => { + const cols = row.querySelectorAll('div'); + const key = cols[0].querySelector('strong')?.textContent.trim().toLowerCase(); + if (cols.length === 1) { + [props.contentRow] = cols; + } else if (cols.length === 2) { + const value = cols[1].textContent.trim(); + + if (key && value) { + // FIXME: facebook-post + if (['tasks', 'topics', 'locales', 'behaviors'].includes(key) || (['premium', 'animated'].includes(key) && value.toLowerCase() !== 'all')) { + props.filters[camelize(key)] = value; + } else if (['yes', 'true', 'on', 'no', 'false', 'off'].includes(value.toLowerCase())) { + props[camelize(key)] = ['yes', 'true', 'on'].includes(value.toLowerCase()); + } else if (key === 'collection id') { + props[camelize(key)] = value.replaceAll('\\:', ':'); + } else { + props[camelize(key)] = value; + } + } + } else if (cols.length === 3) { + if (key === 'template stats' && ['yes', 'true', 'on'].includes(cols[1].textContent.trim().toLowerCase())) { + props[camelize(key)] = cols[2].textContent.trim(); + } + } else if (cols.length === 4) { + if (key === 'blank template') { + cols[0].remove(); + props.templates.push(row); + } + } else if (cols.length === 5) { + if (key === 'holiday block' && ['yes', 'true', 'on'].includes(cols[1].textContent.trim().toLowerCase())) { + const backgroundColor = cols[3].textContent.trim().toLowerCase(); + let holidayIcon = cols[2].querySelector('picture'); + + if (!holidayIcon) { + const link = cols[2].querySelector('a'); + if (link && (link.href.endsWith('.svg') || link.href.endsWith('.png'))) { + holidayIcon = createOptimizedPicture(link.href); + } + } + const backgroundAnimation = cols[4].querySelector('a'); + + props.holidayBlock = true; + props.holidayIcon = holidayIcon || null; + if (backgroundColor) { + props.backgroundColor = backgroundColor; + } + props.backgroundAnimation = backgroundAnimation || null; + props.textColor = isDarkOverlayReadable(backgroundColor) ? 'dark-text' : 'light-text'; + } + } + }); + + return props; +} + +function populateTemplates(block, props, templates) { + for (let tmplt of templates) { + const isPlaceholder = tmplt.querySelector(':scope > div:first-of-type > img[src*=".svg"], :scope > div:first-of-type > svg'); + const linkContainer = tmplt.querySelector(':scope > div:nth-of-type(2)'); + const rowWithLinkInFirstCol = tmplt.querySelector(':scope > div:first-of-type > a'); + const innerWrapper = block.querySelector('.template-x-inner-wrapper'); + + if (innerWrapper && linkContainer) { + const link = linkContainer.querySelector(':scope a'); + if (link) { + if (isPlaceholder) { + const aTag = createTag('a', { + href: link.href || '#', + }); + + aTag.append(...tmplt.children); + tmplt.remove(); + tmplt = aTag; + // convert A to SPAN + const newLink = createTag('span', { class: 'template-link' }); + newLink.append(link.textContent.trim()); + + linkContainer.innerHTML = ''; + linkContainer.append(newLink); + } + innerWrapper.append(tmplt); + } + } + + if (rowWithLinkInFirstCol && !tmplt.querySelector('img')) { + props.tailButton = rowWithLinkInFirstCol; + rowWithLinkInFirstCol.remove(); + } + + if (tmplt.children.length === 3) { + // look for options in last cell + const overlayCell = tmplt.querySelector(':scope > div:last-of-type'); + const option = overlayCell.textContent.trim(); + if (option) { + if (isPlaceholder) { + // add aspect ratio to template + const sep = option.includes(':') ? ':' : 'x'; + const ratios = option.split(sep).map((e) => +e); + props.placeholderFormat = ratios; + if (block.classList.contains('horizontal')) { + const height = block.classList.contains('mini') ? 100 : 200; + if (ratios[1]) { + const width = (ratios[0] / ratios[1]) * height; + tmplt.style = `width: ${width}px`; + if (width / height > 1.3) { + tmplt.classList.add('tall'); + } + } + } else { + const width = block.classList.contains('sixcols') || block.classList.contains('fullwidth') ? 165 : 200; + if (ratios[1]) { + const height = (ratios[1] / ratios[0]) * width; + tmplt.style = `height: ${height - 21}px`; + if (width / height > 1.3) { + tmplt.classList.add('wide'); + } + } + } + } else { + // add icon to 1st cell + const $icon = getIconElement(toClassName(option)); + $icon.setAttribute('title', option); + tmplt.children[0].append($icon); + } + } + overlayCell.remove(); + } + + if (!tmplt.querySelectorAll(':scope > div > *').length) { + // remove empty row + tmplt.remove(); + } + tmplt.classList.add('template'); + + if (isPlaceholder) { + tmplt.classList.add('placeholder'); + } + } +} + +function updateLoadMoreButton(props, loadMore) { + if (props.start === '') { + loadMore.style.display = 'none'; + } else { + loadMore.style.removeProperty('display'); + } +} + +async function decorateNewTemplates(block, props, options = { reDrawMasonry: false }) { + const { templates: newTemplates } = await fetchAndRenderTemplates(props); + const loadMore = block.parentElement.querySelector('.load-more'); + + props.templates = props.templates.concat(newTemplates); + populateTemplates(block, props, newTemplates); + + const newCells = Array.from(block.querySelectorAll('.template:not(.appear)')); + + if (options.reDrawMasonry) { + props.masonry.cells = [props.masonry.cells[0]].concat(newCells); + } else { + props.masonry.cells = props.masonry.cells.concat(newCells); + } + props.masonry.draw(newCells); + + if (loadMore) { + updateLoadMoreButton(props, loadMore); + } +} + +async function decorateLoadMoreButton(block, props) { + const placeholders = await fetchPlaceholders(); + const loadMoreDiv = createTag('div', { class: 'load-more' }); + const loadMoreButton = createTag('button', { class: 'load-more-button' }); + const loadMoreText = createTag('p', { class: 'load-more-text' }); + loadMoreDiv.append(loadMoreButton, loadMoreText); + loadMoreText.textContent = placeholders['load-more'] ?? ''; + block.append(loadMoreDiv); + loadMoreButton.append(getIconElement('plus-icon')); + + loadMoreButton.addEventListener('click', async () => { + loadMoreButton.classList.add('disabled'); + const scrollPosition = window.scrollY; + await decorateNewTemplates(block, props); + window.scrollTo({ + top: scrollPosition, + left: 0, + behavior: 'smooth', + }); + loadMoreButton.classList.remove('disabled'); + }); + + return loadMoreDiv; +} + +async function attachFreeInAppPills(block) { + const freeInAppText = await fetchPlaceholders().then((json) => json['free-in-app']); + + const templateLinks = block.querySelectorAll('a.template'); + for (const templateLink of templateLinks) { + if (!block.classList.contains('apipowered') + && templateLink.querySelectorAll('.icon-premium').length <= 0 + && !templateLink.classList.contains('placeholder') + && !templateLink.querySelector('.icon-free-badge') + && freeInAppText) { + const $freeInAppBadge = createTag('span', { class: 'icon icon-free-badge' }); + $freeInAppBadge.textContent = freeInAppText; + templateLink.querySelector('div').append($freeInAppBadge); + } + } +} + +function makeTemplateFunctions(placeholders) { + const functions = { + premium: { + placeholders: JSON.parse(placeholders['template-filter-premium'] ?? '{}'), + elements: {}, + icons: placeholders['template-filter-premium-icons']?.replace(/\s/g, '')?.split(',') + || ['template-premium-and-free', 'template-free', 'template-premium'], + }, + animated: { + placeholders: JSON.parse(placeholders['template-filter-animated'] ?? '{}'), + elements: {}, + icons: placeholders['template-filter-animated-icons']?.replace(/\s/g, '')?.split(',') + || ['template-static-and-animated', 'template-static', 'template-animated'], + }, + sort: { + placeholders: JSON.parse(placeholders['template-x-sort'] ?? '{}'), + elements: {}, + icons: placeholders['template-x-sort-icons']?.replace(/\s/g, '')?.split(',') + || ['sort', 'visibility-on', 'visibility-off', 'order-dsc', 'order-asc'], + }, + }; + + Object.entries(functions).forEach((entry) => { + entry[1].elements.wrapper = createTag('div', { + class: `function-wrapper function-${entry[0]}`, + 'data-param': entry[0], + }); + + entry[1].elements.wrapper.subElements = { + button: { + wrapper: createTag('div', { class: `button-wrapper button-wrapper-${entry[0]}` }), + subElements: { + iconHolder: createTag('span', { class: 'icon-holder' }), + textSpan: createTag('span', { class: `current-option current-option-${entry[0]}` }), + chevIcon: getIconElement('drop-down-arrow'), + }, + }, + options: { + wrapper: createTag('div', { class: `options-wrapper options-wrapper-${entry[0]}` }), + subElements: Object.entries(entry[1].placeholders).map((option, subIndex) => { + const icon = getIconElement(entry[1].icons[subIndex]); + const optionButton = createTag('div', { class: 'option-button', 'data-value': option[1] }); + [optionButton.textContent] = option; + optionButton.prepend(icon); + return optionButton; + }), + }, + }; + + const $span = entry[1].elements.wrapper.subElements.button.subElements.textSpan; + [[$span.textContent]] = Object.entries(entry[1].placeholders); + }); + + return functions; +} + +function updateFilterIcon(block) { + const functionWrapper = block.querySelectorAll('.function-wrapper'); + const optionsWrapper = block.querySelectorAll('.options-wrapper'); + + functionWrapper.forEach((wrap, index) => { + const iconHolder = wrap.querySelector('.icon-holder'); + const activeOption = optionsWrapper[index].querySelector('.option-button.active'); + if (iconHolder && activeOption) { + const activeIcon = activeOption.querySelector('.icon'); + if (activeIcon) { + iconHolder.innerHTML = activeIcon.outerHTML; + } + } + }); +} + +function decorateFunctionsContainer(block, functions, placeholders) { + const functionsContainer = createTag('div', { class: 'functions-container' }); + const functionContainerMobile = createTag('div', { class: 'functions-drawer' }); + + Object.values(functions).forEach((filter) => { + const filterWrapper = filter.elements.wrapper; + + Object.values(filterWrapper.subElements).forEach((part) => { + const innerWrapper = part.wrapper; + + Object.values(part.subElements).forEach((innerElement) => { + if (innerElement) { + innerWrapper.append(innerElement); + } + }); + + filterWrapper.append(innerWrapper); + }); + functionContainerMobile.append(filterWrapper.cloneNode({ deep: true })); + functionsContainer.append(filterWrapper); + }); + + // restructure drawer for mobile design + const filterContainer = createTag('div', { class: 'filter-container-mobile' }); + const mobileFilterButtonWrapper = createTag('div', { class: 'filter-button-mobile-wrapper' }); + const mobileFilterButton = createTag('span', { class: 'filter-button-mobile' }); + const drawer = createTag('div', { class: 'filter-drawer-mobile hidden retracted' }); + const drawerInnerWrapper = createTag('div', { class: 'filter-drawer-mobile-inner-wrapper' }); + const drawerBackground = createTag('div', { class: 'drawer-background hidden transparent' }); + const $closeButton = getIconElement('search-clear'); + const applyButtonWrapper = createTag('div', { class: 'apply-filter-button-wrapper hidden transparent' }); + const applyButton = createTag('a', { class: 'apply-filter-button button gradient', href: '#' }); + + $closeButton.classList.add('close-drawer'); + applyButton.textContent = placeholders['apply-filters']; + + functionContainerMobile.children[0] + .querySelector('.current-option-premium') + .textContent = `${placeholders.free} ${placeholders['versus-shorthand']} ${placeholders.premium}`; + + functionContainerMobile.children[1] + .querySelector('.current-option-animated') + .textContent = `${placeholders.static} ${placeholders['versus-shorthand']} ${placeholders.animated}`; + + drawerInnerWrapper.append( + functionContainerMobile.children[0], + functionContainerMobile.children[1], + ); + + drawer.append($closeButton, drawerInnerWrapper); + + const buttonsInDrawer = drawer.querySelectorAll('.button-wrapper'); + const optionsInDrawer = drawer.querySelectorAll('.options-wrapper'); + + [buttonsInDrawer, optionsInDrawer].forEach((category) => { + category.forEach((element) => { + element.classList.add('in-drawer'); + const heading = element.querySelector('.current-option'); + const iconHolder = element.querySelector('.icon-holder'); + if (heading) { + heading.className = 'filter-mobile-option-heading'; + } + if (iconHolder) { + iconHolder.remove(); + } + }); + }); + + mobileFilterButtonWrapper.append(getIconElement('scratch-icon-22'), mobileFilterButton); + applyButtonWrapper.append(applyButton); + filterContainer.append( + mobileFilterButtonWrapper, + drawer, + applyButtonWrapper, + drawerBackground, + ); + functionContainerMobile.prepend(filterContainer); + + mobileFilterButton.textContent = placeholders.filter; + const sortButton = functionContainerMobile.querySelector('.current-option-sort'); + if (sortButton) { + sortButton.textContent = placeholders.sort; + sortButton.className = 'filter-mobile-option-heading'; + } + + return { mobile: functionContainerMobile, desktop: functionsContainer }; +} + +function updateLottieStatus(block) { + const drawer = block.querySelector('.filter-drawer-mobile'); + const inWrapper = drawer.querySelector('.filter-drawer-mobile-inner-wrapper'); + const lottieArrows = drawer.querySelector('.lottie-wrapper'); + if (lottieArrows) { + if (inWrapper.scrollHeight - inWrapper.scrollTop === inWrapper.offsetHeight) { + lottieArrows.style.display = 'none'; + drawer.classList.remove('scrollable'); + } else { + lottieArrows.style.removeProperty('display'); + drawer.classList.add('scrollable'); + } + } +} + +async function fetchCntSpan(props, anchor, lang) { + const cntSpan = createTag('span', { class: 'category-list-template-count' }); + const cnt = await fetchTemplatesCategoryCount(props, anchor.dataset.tasks); + cntSpan.textContent = `(${cnt.toLocaleString(lang)})`; + return { cntSpan, anchor }; +} + +async function appendCategoryTemplatesCount(block, props) { + if (props.loadedOtherCategoryCounts) { + return; + } + props.loadedOtherCategoryCounts = true; + const categories = block.querySelectorAll('ul.category-list > li'); + const lang = getConfig().locale.ietf; + + const fetchCntSpanPromises = [...categories] + .map((li) => fetchCntSpan(props, li.querySelector('a'), lang)); + const res = await Promise.all(fetchCntSpanPromises); + + // append one by one to gain attention + for (const { cntSpan, anchor } of res) { + anchor.append(cntSpan); + // eslint-disable-next-line no-await-in-loop + await new Promise((resolve) => setTimeout(resolve, 25)); + } +} + +async function decorateCategoryList(block, props) { + const placeholders = await fetchPlaceholders(); + const { prefix } = getConfig().locale; + const mobileDrawerWrapper = block.querySelector('.filter-drawer-mobile'); + const drawerWrapper = block.querySelector('.filter-drawer-mobile-inner-wrapper'); + const categories = placeholders['x-task-categories'] ? JSON.parse(placeholders['x-task-categories']) : {}; + const categoryIcons = placeholders['task-category-icons']?.replace(/\s/g, '')?.split(','); + const categoriesDesktopWrapper = createTag('div', { class: 'category-list-wrapper' }); + const categoriesToggleWrapper = createTag('div', { class: 'category-list-toggle-wrapper' }); + const categoriesToggle = getIconElement('drop-down-arrow'); + const categoriesListHeading = createTag('div', { class: 'category-list-heading' }); + const categoriesList = createTag('ul', { class: 'category-list' }); + + categoriesListHeading.append(getIconElement('template-search'), placeholders['jump-to-category']); + categoriesToggleWrapper.append(categoriesToggle); + categoriesDesktopWrapper.append(categoriesToggleWrapper, categoriesListHeading, categoriesList); + + Object.entries(categories).forEach((category, index) => { + const format = `${props.placeholderFormat[0]}:${props.placeholderFormat[1]}`; + const targetTasks = category[1]; + const currentTasks = props.filters.tasks ? props.filters.tasks : "''"; + const currentTopic = props.filters.topics || props.q; + + const listItem = createTag('li'); + if (category[1] === currentTasks) { + listItem.classList.add('active'); + } + + let icon; + if (categoryIcons[index] && categoryIcons[index] !== '') { + icon = categoryIcons[index]; + } else { + icon = 'template-static'; + } + + const iconElement = getIconElement(icon); + const a = createTag('a', { + 'data-tasks': targetTasks, + href: `${prefix}/express/templates/search?tasks=${targetTasks}&tasksx=${targetTasks}&phformat=${format}&topics=${currentTopic || "''"}&q=${currentTopic || ''}`, + }); + [a.textContent] = category; + + a.prepend(iconElement); + listItem.append(a); + categoriesList.append(listItem); + }); + + categoriesDesktopWrapper.addEventListener('mouseover', () => { + appendCategoryTemplatesCount(block, props); + }, { once: true }); + + const categoriesMobileWrapper = categoriesDesktopWrapper.cloneNode({ deep: true }); + const mobileCategoriesToggle = createTag('span', { class: 'category-list-toggle' }); + mobileCategoriesToggle.textContent = placeholders['jump-to-category'] ?? ''; + categoriesMobileWrapper.querySelector('.category-list-toggle-wrapper > .icon')?.replaceWith(mobileCategoriesToggle); + const lottieArrows = createTag('a', { class: 'lottie-wrapper' }); + mobileDrawerWrapper.append(lottieArrows); + drawerWrapper.append(categoriesMobileWrapper); + lottieArrows.innerHTML = getLottie('purple-arrows', '/express/icons/purple-arrows.json'); + lazyLoadLottiePlayer(); + + block.prepend(categoriesDesktopWrapper); + block.classList.add('with-categories-list'); + + const toggleButton = categoriesMobileWrapper.querySelector('.category-list-toggle-wrapper'); + toggleButton.append(getIconElement('drop-down-arrow')); + toggleButton.addEventListener('click', () => { + const listWrapper = toggleButton.parentElement; + toggleButton.classList.toggle('collapsed'); + if (toggleButton.classList.contains('collapsed')) { + if (listWrapper.classList.contains('desktop-only')) { + listWrapper.classList.add('collapsed'); + listWrapper.style.maxHeight = '40px'; + } else { + listWrapper.classList.add('collapsed'); + listWrapper.style.maxHeight = '24px'; + } + } else { + listWrapper.classList.remove('collapsed'); + listWrapper.style.maxHeight = '1000px'; + } + + setTimeout(() => { + if (!listWrapper.classList.contains('desktop-only')) { + updateLottieStatus(block); + } + }, 510); + }, { passive: true }); + + lottieArrows.addEventListener('click', () => { + drawerWrapper.scrollBy({ + top: 300, + behavior: 'smooth', + }); + }, { passive: true }); + + drawerWrapper.addEventListener('scroll', () => { + updateLottieStatus(block); + }, { passive: true }); +} + +function closeDrawer(toolBar) { + const drawerBackground = toolBar.querySelector('.drawer-background'); + const drawer = toolBar.querySelector('.filter-drawer-mobile'); + const applyButton = toolBar.querySelector('.apply-filter-button-wrapper'); + + drawer.classList.add('retracted'); + drawerBackground.classList.add('transparent'); + applyButton.classList.add('transparent'); + + setTimeout(() => { + drawer.classList.add('hidden'); + drawerBackground.classList.add('hidden'); + applyButton.classList.add('hidden'); + }, 500); +} + +function updateOptionsStatus(block, props, toolBar) { + const wrappers = toolBar.querySelectorAll('.function-wrapper'); + const waysOfSort = { + 'Most Relevant': '', + 'Most Viewed': '&orderBy=-remixCount', + 'Rare & Original': '&orderBy=remixCount', + 'Newest to Oldest': '&orderBy=-availabilityDate', + 'Oldest to Newest': '&orderBy=availabilityDate', + }; + + wrappers.forEach((wrapper) => { + const currentOption = wrapper.querySelector('.current-option'); + const options = wrapper.querySelectorAll('.option-button'); + + options.forEach((option) => { + const paramType = wrapper.dataset.param; + const paramValue = option.dataset.value; + const filterValue = props.filters[paramType] ? props.filters[paramType] : 'remove'; + const sortValue = waysOfSort[props[paramType]] || props[paramType]; + + if (filterValue === paramValue || sortValue === paramValue) { + if (currentOption) { + currentOption.textContent = option.textContent; + } + + options.forEach((o) => { + if (option !== o) { + o.classList.remove('active'); + } + }); + + option.classList.add('active'); + } + }); + + updateFilterIcon(block); + }); +} + +function initDrawer(block, props, toolBar) { + const filterButton = toolBar.querySelector('.filter-button-mobile-wrapper'); + const drawerBackground = toolBar.querySelector('.drawer-background'); + const drawer = toolBar.querySelector('.filter-drawer-mobile'); + const closeDrawerBtn = toolBar.querySelector('.close-drawer'); + const applyButton = toolBar.querySelector('.apply-filter-button-wrapper'); + + const functionWrappers = drawer.querySelectorAll('.function-wrapper'); + + let currentFilters; + filterButton.addEventListener('click', () => { + appendCategoryTemplatesCount(block, props); + }, { once: true }); + filterButton.addEventListener('click', () => { + currentFilters = { ...props.filters }; + drawer.classList.remove('hidden'); + drawerBackground.classList.remove('hidden'); + applyButton.classList.remove('hidden'); + updateLottieStatus(block); + + setTimeout(() => { + drawer.classList.remove('retracted'); + drawerBackground.classList.remove('transparent'); + applyButton.classList.remove('transparent'); + functionWrappers.forEach((wrapper) => { + const button = wrapper.querySelector('.button-wrapper'); + if (button) { + button.style.maxHeight = `${button.nextElementSibling.offsetHeight}px`; + } + }); + }, 100); + }, { passive: true }); + + [drawerBackground, closeDrawerBtn].forEach((el) => { + el.addEventListener('click', async () => { + props.filters = { ...currentFilters }; + closeDrawer(toolBar); + updateOptionsStatus(block, props, toolBar); + }, { passive: true }); + }); + + drawer.classList.remove('hidden'); + functionWrappers.forEach((wrapper) => { + const button = wrapper.querySelector('.button-wrapper'); + let maxHeight; + if (button) { + const wrapperMaxHeightGrabbed = setInterval(() => { + if (wrapper.offsetHeight > 0) { + maxHeight = `${wrapper.offsetHeight}px`; + wrapper.style.maxHeight = maxHeight; + clearInterval(wrapperMaxHeightGrabbed); + } + }, 200); + + button.addEventListener('click', (e) => { + e.stopPropagation(); + const btnWrapper = wrapper.querySelector('.button-wrapper'); + if (btnWrapper) { + const minHeight = `${btnWrapper.offsetHeight - 8}px`; + wrapper.classList.toggle('collapsed'); + wrapper.style.maxHeight = wrapper.classList.contains('collapsed') ? minHeight : maxHeight; + } + }, { passive: true }); + } + }); + + drawer.classList.add('hidden'); +} + +function updateQuery(functionWrapper, props, option) { + const paramType = functionWrapper.dataset.param; + const paramValue = option.dataset.value; + + if (paramType === 'sort') { + props.sort = paramValue; + } else { + const filtersObj = props.filters; + + if (paramType in filtersObj) { + if (paramValue === 'remove') { + delete filtersObj[paramType]; + } else { + filtersObj[paramType] = `${paramValue}`; + } + } else if (paramValue !== 'remove') { + filtersObj[paramType] = `${paramValue}`; + } + + props.filters = filtersObj; + } +} + +async function redrawTemplates(block, existingProps, props, toolBar) { + if (JSON.stringify(props) === JSON.stringify(existingProps)) return; + const heading = toolBar.querySelector('h2'); + const currentTotal = props.total.toLocaleString('en-US'); + props.templates = [props.templates[0]]; + props.start = ''; + block.querySelectorAll('.template:not(.placeholder)').forEach((card) => { + card.remove(); + }); + + await decorateNewTemplates(block, props, { reDrawMasonry: true }); + + heading.textContent = heading.textContent.replace(`${currentTotal}`, props.total.toLocaleString('en-US')); + updateOptionsStatus(block, props, toolBar); + if (block.querySelectorAll('.template').length <= 0) { + const $viewButtons = toolBar.querySelectorAll('.view-toggle-button'); + $viewButtons.forEach((button) => { + button.classList.remove('active'); + }); + ['sm-view', 'md-view', 'lg-view'].forEach((className) => { + block.classList.remove(className); + }); + } +} + +async function initFilterSort(block, props, toolBar) { + const buttons = toolBar.querySelectorAll('.button-wrapper'); + const applyFilterButton = toolBar.querySelector('.apply-filter-button'); + let existingProps = { ...props, filters: { ...props.filters } }; + + if (buttons.length > 0) { + buttons.forEach((button) => { + const wrapper = button.parentElement; + const currentOption = wrapper.querySelector('span.current-option'); + const optionsList = button.nextElementSibling; + const options = optionsList.querySelectorAll('.option-button'); + + button.addEventListener('click', () => { + existingProps = { ...props, filters: { ...props.filters } }; + if (!button.classList.contains('in-drawer')) { + buttons.forEach((b) => { + if (button !== b) { + b.parentElement.classList.remove('opened'); + } + }); + + wrapper.classList.toggle('opened'); + } + }, { passive: true }); + + options.forEach((option) => { + const updateOptions = () => { + buttons.forEach((b) => { + b.parentElement.classList.remove('opened'); + }); + + if (currentOption) { + currentOption.textContent = option.textContent; + } + + options.forEach((o) => { + if (option !== o) { + o.classList.remove('active'); + } + }); + option.classList.add('active'); + }; + + option.addEventListener('click', async (e) => { + e.stopPropagation(); + updateOptions(); + updateQuery(wrapper, props, option); + updateFilterIcon(block); + + if (!button.classList.contains('in-drawer')) { + await redrawTemplates(block, existingProps, props, toolBar); + } + }, { passive: true }); + }); + + document.addEventListener('click', (e) => { + const { target } = e; + if (target !== wrapper && !wrapper.contains(target) && !button.classList.contains('in-drawer')) { + wrapper.classList.remove('opened'); + } + }, { passive: true }); + }); + + if (applyFilterButton) { + applyFilterButton.addEventListener('click', async (e) => { + e.preventDefault(); + await redrawTemplates(block, existingProps, props, toolBar); + closeDrawer(toolBar); + }); + } + + // sync current filter & sorting method with toolbar current options + updateOptionsStatus(block, props, toolBar); + } +} + +function getPlaceholderWidth(block) { + let width; + if (window.innerWidth >= 900) { + if (block.classList.contains('sm-view')) { + width = 165; + } + + if (block.classList.contains('md-view')) { + width = 258.5; + } + + if (block.classList.contains('lg-view')) { + width = 352; + } + } else if (window.innerWidth >= 600) { + if (block.classList.contains('sm-view')) { + width = 165; + } + + if (block.classList.contains('md-view')) { + width = 227.33; + } + + if (block.classList.contains('lg-view')) { + width = 352; + } + } else { + if (block.classList.contains('sm-view')) { + width = 106.33; + } + + if (block.classList.contains('md-view')) { + width = 165.5; + } + + if (block.classList.contains('lg-view')) { + width = 335; + } + } + + return width; +} + +function toggleMasonryView(block, props, button, toggleButtons) { + const templatesToView = block.querySelectorAll('.template:not(.placeholder)'); + const blockWrapper = block.closest('.template-x-wrapper'); + + if (!button.classList.contains('active') && templatesToView.length > 0) { + toggleButtons.forEach((b) => { + if (b !== button) { + b.classList.remove('active'); + } + }); + + ['sm-view', 'md-view', 'lg-view'].forEach((className) => { + if (className !== `${button.dataset.view}-view`) { + block.classList.remove(className); + blockWrapper.classList.remove(className); + } + }); + button.classList.add('active'); + block.classList.add(`${button.dataset.view}-view`); + blockWrapper.classList.add(`${button.dataset.view}-view`); + + props.masonry.draw(); + } + + const placeholder = block.querySelector('.template.placeholder'); + const ratios = props.placeholderFormat; + const width = getPlaceholderWidth(block); + + if (ratios[1]) { + const height = (ratios[1] / ratios[0]) * width; + placeholder.style = `height: ${height - 21}px`; + if (width / height > 1.3) { + placeholder.classList.add('wide'); + } + } +} + +function initViewToggle(block, props, toolBar) { + const toggleButtons = toolBar.querySelectorAll('.view-toggle-button '); + const authoredViewIndex = ['sm', 'md', 'lg'].findIndex((size) => getMetadata('initial-template-view')?.toLowerCase().trim() === size); + const initViewIndex = authoredViewIndex === -1 ? 0 : authoredViewIndex; + + toggleButtons.forEach((button, index) => { + if (index === initViewIndex) { + toggleMasonryView(block, props, button, toggleButtons); + } + + button.addEventListener('click', () => { + toggleMasonryView(block, props, button, toggleButtons); + }, { passive: true }); + }); +} + +function initToolbarShadow(block, toolbar) { + const toolbarWrapper = toolbar.parentElement; + document.addEventListener('scroll', () => { + if (toolbarWrapper.getBoundingClientRect().top <= 0) { + toolbarWrapper.classList.add('with-box-shadow'); + } else { + toolbarWrapper.classList.remove('with-box-shadow'); + } + }); +} + +async function decorateToolbar(block, props) { + const placeholders = await fetchPlaceholders(); + const sectionHeading = createTag('h2'); + const tBarWrapper = createTag('div', { class: 'toolbar-wrapper' }); + const tBar = createTag('div', { class: 'api-templates-toolbar' }); + const contentWrapper = createTag('div', { class: 'wrapper-content-search' }); + const functionsWrapper = createTag('div', { class: 'wrapper-functions' }); + + if (props.templateStats) { + sectionHeading.textContent = await formatHeadingPlaceholder(props) || ''; + } + + block.prepend(tBarWrapper); + tBarWrapper.append(tBar); + tBar.append(contentWrapper, functionsWrapper); + contentWrapper.append(sectionHeading); + + if (tBar) { + const viewsWrapper = createTag('div', { class: 'views' }); + + const smView = createTag('a', { class: 'view-toggle-button small-view', 'data-view': 'sm' }); + smView.append(getIconElement('small_grid')); + const mdView = createTag('a', { class: 'view-toggle-button medium-view', 'data-view': 'md' }); + mdView.append(getIconElement('medium_grid')); + const lgView = createTag('a', { class: 'view-toggle-button large-view', 'data-view': 'lg' }); + lgView.append(getIconElement('large_grid')); + + const functionsObj = makeTemplateFunctions(placeholders); + const functions = decorateFunctionsContainer(block, functionsObj, placeholders); + + viewsWrapper.append(smView, mdView, lgView); + functionsWrapper.append(viewsWrapper, functions.desktop); + + tBar.append(contentWrapper, functionsWrapper, functions.mobile); + + initDrawer(block, props, tBar); + initFilterSort(block, props, tBar); + initViewToggle(block, props, tBar); + initToolbarShadow(block, tBar); + } +} + +function initExpandCollapseToolbar(block, templateTitle, toggle, link) { + const onToggle = () => { + block.classList.toggle('expanded'); + + if (document.body.dataset.device === 'mobile' || block.classList.contains('mobile')) { + const tglBtn = block.querySelector('.toggle-button'); + const heading = templateTitle.querySelector('.toggle-bar-top > h4'); + + if (tglBtn && heading) { + const rect = heading.getBoundingClientRect(); + if (!block.classList.contains('expanded')) { + tglBtn.style.marginLeft = `${rect.x}px`; + } else { + tglBtn.style.removeProperty('margin-left'); + } + } + } + }; + + const chev = block.querySelector('.toggle-button-chev'); + templateTitle.addEventListener('click', () => onToggle()); + chev.addEventListener('click', (e) => { + e.stopPropagation(); + onToggle(); + }); + + toggle.addEventListener('click', () => onToggle()); + link.addEventListener('click', (e) => e.stopPropagation()); + + setTimeout(() => { + if (!block.matches(':hover')) { + onToggle(); + } + }, 3000); +} + +function decorateHoliday(block, props) { + const main = document.querySelector('main'); + const templateXSection = block.closest('div[class="section section-wrapper template-x-container"]'); + const mobileViewport = window.innerWidth < 901; + const templateTitle = block.querySelector('.template-title'); + const toggleBar = templateTitle.querySelector('div'); + const heading = templateTitle.querySelector('h4'); + const subheading = templateTitle.querySelector('p'); + const link = templateTitle.querySelector('.template-title-link'); + const linkWrapper = link.closest('p'); + const toggle = createTag('div', { class: 'toggle-button' }); + const topElements = createTag('div', { class: 'toggle-bar-top' }); + const bottomElements = createTag('div', { class: 'toggle-bar-bottom' }); + const toggleChev = createTag('div', { class: 'toggle-button-chev' }); + + if (props.holidayIcon) topElements.append(props.holidayIcon); + if (props.backgroundAnimation) { + const animation = transformLinkToAnimation(props.backgroundAnimation); + block.classList.add('animated'); + block.prepend(animation); + } + + if (templateXSection && templateXSection.querySelectorAll('div.block').length === 1) main.classList.add('with-holiday-templates-banner'); + block.classList.add('expanded', props.textColor); + toggleBar.classList.add('toggle-bar'); + topElements.append(heading); + toggle.append(link, toggleChev); + linkWrapper.remove(); + bottomElements.append(subheading); + toggleBar.append(topElements, bottomElements); + block.style.backgroundColor = props.backgroundColor; + + if (mobileViewport) { + block.classList.add('mobile'); + block.append(toggle); + } else { + toggleBar.append(toggle); + } + + initExpandCollapseToolbar(block, templateTitle, toggle, link); +} + +async function decorateTemplates(block, props) { + const innerWrapper = block.querySelector('.template-x-inner-wrapper'); + + let rows = block.children.length; + + const templates = Array.from(innerWrapper.children); + + rows = templates.length; + let breakpoints = [{ width: '400' }]; + + if (rows > 6 && !block.classList.contains('horizontal')) { + innerWrapper.classList.add('masonry'); + } + + if (rows === 1) { + block.classList.add('large'); + breakpoints = [{ + media: '(min-width: 600px)', + width: '2000', + }, { width: '750' }]; + } + + block.querySelectorAll(':scope picture > img').forEach((img) => { + const { src, alt } = img; + img.parentNode.replaceWith(createOptimizedPicture(src, alt, true, breakpoints)); + }); + + // find the edit link and turn the template DIV into the A + // A + // +- DIV + // +- PICTURE + // +- DIV + // +- SPAN + // +- "Edit this template" + // + // make copy of children to avoid modifying list while looping + + populateTemplates(block, props, templates); + if (props.orientation.toLowerCase() !== 'horizontal') { + if (rows > 6 || block.classList.contains('sixcols') || block.classList.contains('fullwidth')) { + /* flex masonry */ + + if (innerWrapper) { + const cells = Array.from(innerWrapper.children); + innerWrapper.classList.remove('masonry'); + innerWrapper.classList.add('flex-masonry'); + props.masonry = new Masonry(innerWrapper, cells); + } else { + block.remove(); + } + + props.masonry.draw(); + window.addEventListener('resize', () => { + props.masonry.draw(); + }); + } else { + block.classList.add('template-x-complete'); + } + } + + await attachFreeInAppPills(block); + + const templateLinks = block.querySelectorAll('.template .button-container > a, a.template.placeholder'); + const linksPopulated = new CustomEvent('linkspopulated', { detail: templateLinks }); + document.dispatchEvent(linksPopulated); +} + +async function decorateBreadcrumbs(block) { + // breadcrumbs are desktop-only + if (document.body.dataset.device !== 'desktop') return; + const { default: getBreadcrumbs } = await import('./breadcrumbs.js'); + const breadcrumbs = await getBreadcrumbs(); + if (breadcrumbs) block.prepend(breadcrumbs); +} + +function cycleThroughSuggestions(block, targetIndex = 0) { + const suggestions = block.querySelectorAll('.suggestions-list li'); + if (targetIndex >= suggestions.length || targetIndex < 0) return; + if (suggestions.length > 0) suggestions[targetIndex].focus(); +} + +function importSearchBar(block, blockMediator) { + blockMediator.subscribe('stickySearchBar', (e) => { + const parent = block.querySelector('.api-templates-toolbar .wrapper-content-search'); + if (parent) { + const existingStickySearchBar = parent.querySelector('.search-bar-wrapper'); + if (e.newValue.loadSearchBar && !existingStickySearchBar) { + const searchWrapper = e.newValue.element; + parent.prepend(searchWrapper); + searchWrapper.classList.add('show'); + searchWrapper.classList.add('collapsed'); + + const searchDropdown = searchWrapper.querySelector('.search-dropdown-container'); + const searchForm = searchWrapper.querySelector('.search-form'); + const searchBar = searchWrapper.querySelector('input.search-bar'); + const clearBtn = searchWrapper.querySelector('.icon-search-clear'); + const trendsContainer = searchWrapper.querySelector('.trends-container'); + const suggestionsContainer = searchWrapper.querySelector('.suggestions-container'); + const suggestionsList = searchWrapper.querySelector('.suggestions-list'); + + searchBar.addEventListener('click', (event) => { + event.stopPropagation(); + searchWrapper.classList.remove('collapsed'); + setTimeout(() => { + searchDropdown.classList.remove('hidden'); + }, 500); + }, { passive: true }); + + searchBar.addEventListener('keyup', () => { + if (searchBar.value !== '') { + clearBtn.style.display = 'inline-block'; + trendsContainer.classList.add('hidden'); + suggestionsContainer.classList.remove('hidden'); + } else { + clearBtn.style.display = 'none'; + trendsContainer.classList.remove('hidden'); + suggestionsContainer.classList.add('hidden'); + } + }, { passive: true }); + + searchBar.addEventListener('keydown', (event) => { + if (event.key === 'ArrowDown' || event.keyCode === 40) { + event.preventDefault(); + cycleThroughSuggestions(block); + } + }); + + document.addEventListener('click', (event) => { + const { target } = event; + if (target !== searchWrapper && !searchWrapper.contains(target)) { + searchWrapper.classList.add('collapsed'); + searchDropdown.classList.add('hidden'); + searchBar.value = ''; + suggestionsList.innerHTML = ''; + trendsContainer.classList.remove('hidden'); + suggestionsContainer.classList.add('hidden'); + clearBtn.style.display = 'none'; + } + }, { passive: true }); + + const redirectSearch = async () => { + const placeholders = await fetchPlaceholders(); + const taskMap = placeholders['task-name-mapping'] ? JSON.parse(placeholders['task-name-mapping']) : {}; + + const format = getMetadata('placeholder-format'); + let currentTasks = ''; + let searchInput = searchBar.value.toLowerCase() || getMetadata('topics'); + + const tasksFoundInInput = Object.entries(taskMap) + .filter((task) => task[1].some((word) => { + const searchValue = searchBar.value.toLowerCase(); + return searchValue.indexOf(word.toLowerCase()) >= 0; + })).sort((a, b) => b[0].length - a[0].length); + + if (tasksFoundInInput.length > 0) { + tasksFoundInInput[0][1].sort((a, b) => b.length - a.length).forEach((word) => { + searchInput = searchInput.toLowerCase().replace(word.toLowerCase(), ''); + }); + + searchInput = searchInput.trim(); + [[currentTasks]] = tasksFoundInInput; + } + + const { prefix } = getConfig().locale; + const topicUrl = searchInput ? `/${searchInput}` : ''; + const taskUrl = `/${handlelize(currentTasks.toLowerCase())}`; + const targetPath = `${prefix}/express/templates${taskUrl}${topicUrl}`; + const allTemplatesMetadata = await fetchAllTemplatesMetadata(); + const pathMatch = (event) => event.url === targetPath; + if (allTemplatesMetadata.some(pathMatch)) { + window.location = `${window.location.origin}${targetPath}`; + } else { + const searchUrlTemplate = `/express/templates/search?tasks=${currentTasks}&phformat=${format}&topics=${searchInput || "''"}&q=${searchInput || "''"}`; + window.location = `${window.location.origin}${prefix}${searchUrlTemplate}`; + } + }; + + const onSearchSubmit = async () => { + searchBar.disabled = true; + sampleRUM('search', { + source: block.dataset.blockName, + target: searchBar.value, + }, 1); + await redirectSearch(); + }; + + const handleSubmitInteraction = async (item) => { + if (item.query !== searchBar.value) { + searchBar.value = item.query; + searchBar.dispatchEvent(new Event('input')); + } + await onSearchSubmit(); + }; + + searchForm.addEventListener('submit', async (event) => { + event.preventDefault(); + searchBar.disabled = true; + sampleRUM('search', { + source: block.dataset.blockName, + target: searchBar.value, + }, 1); + await redirectSearch(); + }); + + clearBtn.addEventListener('click', () => { + searchBar.value = ''; + suggestionsList.innerHTML = ''; + trendsContainer.classList.remove('hidden'); + suggestionsContainer.classList.add('hidden'); + clearBtn.style.display = 'none'; + }, { passive: true }); + + const suggestionsListUIUpdateCB = (suggestions) => { + suggestionsList.innerHTML = ''; + const searchBarVal = searchBar.value.toLowerCase(); + if (suggestions && !(suggestions.length <= 1 && suggestions[0]?.query === searchBarVal)) { + suggestions.forEach((item, index) => { + const li = createTag('li', { tabindex: 0 }); + const valRegEx = new RegExp(searchBar.value, 'i'); + li.innerHTML = item.query.replace(valRegEx, `${searchBarVal}`); + li.addEventListener('click', async () => { + await handleSubmitInteraction(item); + }); + + li.addEventListener('keydown', async (event) => { + if (event.key === 'Enter' || event.keyCode === 13) { + await handleSubmitInteraction(item); + } + }); + + li.addEventListener('keydown', (event) => { + if (event.key === 'ArrowDown' || event.keyCode === 40) { + event.preventDefault(); + cycleThroughSuggestions(block, index + 1); + } + }); + + li.addEventListener('keydown', (event) => { + if (event.key === 'ArrowUp' || event.keyCode === 38) { + event.preventDefault(); + cycleThroughSuggestions(block, index - 1); + } + }); + + suggestionsList.append(li); + }); + } + }; + + import('../../scripts/utils/autocomplete-api-v3.js').then(({ default: useInputAutocomplete }) => { + const { inputHandler } = useInputAutocomplete( + suggestionsListUIUpdateCB, { throttleDelay: 300, debounceDelay: 500, limit: 7 }, + ); + searchBar.addEventListener('input', inputHandler); + }); + } + + if (e.newValue.loadSearchBar && existingStickySearchBar) { + existingStickySearchBar.classList.add('show'); + } + + if (!e.newValue.loadSearchBar && existingStickySearchBar) { + existingStickySearchBar.classList.remove('show'); + } + } + }); +} + +function wordExistsInString(word, inputString) { + const escapedWord = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const regexPattern = new RegExp(`(?:^|\\s|[.,!?()'"\\-])${escapedWord}(?:$|\\s|[.,!?()'"\\-])`, 'i'); + return regexPattern.test(inputString); +} + +async function getTaskNameInMapping(text) { + const placeholders = await fetchPlaceholders(); + const taskMap = placeholders['x-task-name-mapping'] ? JSON.parse(placeholders['x-task-name-mapping']) : {}; + return Object.entries(taskMap) + .filter((task) => task[1].some((word) => { + const searchValue = text.toLowerCase(); + return wordExistsInString(word.toLowerCase(), searchValue); + })) + .sort((a, b) => b[0].length - a[0].length); +} + +function renderFallbackMsgWrapper(block, { fallbackMsg }) { + let fallbackMsgWrapper = block.querySelector('.template-x-fallback-msg-wrapper'); + if (!fallbackMsgWrapper) { + fallbackMsgWrapper = createTag('div', { class: 'template-x-fallback-msg-wrapper' }); + block.append(fallbackMsgWrapper); + } + if (!fallbackMsg) { + fallbackMsgWrapper.textContent = ''; + } else { + fallbackMsgWrapper.textContent = fallbackMsg; + } +} + +async function buildTemplateList(block, props, type = []) { + if (type?.length > 0) { + type.forEach((typeName) => { + block.parentElement.classList.add(typeName); + block.classList.add(typeName); + }); + } + + if (!props.templateStats) { + await processContentRow(block, props); + } + + const { templates, fallbackMsg } = await fetchAndRenderTemplates(props); + + if (templates?.length > 0) { + props.fallbackMsg = fallbackMsg; + renderFallbackMsgWrapper(block, props); + const blockInnerWrapper = createTag('div', { class: 'template-x-inner-wrapper' }); + block.append(blockInnerWrapper); + props.templates = props.templates.concat(templates); + props.templates.forEach((template) => { + blockInnerWrapper.append(template); + }); + + await decorateTemplates(block, props); + } else { + window.lana.log(`failed to load templates with props: ${JSON.stringify(props)}`, { tags: 'templates-api' }); + // fixme: better error message. + block.innerHTML = 'Oops. Our templates delivery got stolen. Please try refresh the page.'; + } + + if (templates && props.tabs) { + block.classList.add('tabbed'); + const tabs = props.tabs.split(','); + const templatesWrapper = block.querySelector('.template-x-inner-wrapper'); + const textWrapper = block.querySelector('.template-title .text-wrapper > div'); + const tabsWrapper = createTag('div', { class: 'template-tabs' }); + const tabBtns = []; + + const promises = []; + + for (const tab of tabs) { + promises.push(getTaskNameInMapping(tab)); + } + + const tasksFoundInInput = await Promise.all(promises); + if (tasksFoundInInput.length === tabs.length) { + tasksFoundInInput.forEach((taskObj, index) => { + if (taskObj.length === 0) return; + const tabBtn = createTag('button', { class: 'template-tab-button' }); + tabBtn.textContent = tabs[index]; + tabsWrapper.append(tabBtn); + tabBtns.push(tabBtn); + + const [[task]] = taskObj; + + if (props.filters.tasks === task) { + tabBtn.classList.add('active'); + } + + tabBtn.addEventListener('click', async () => { + templatesWrapper.style.opacity = 0; + + if (tasksFoundInInput) { + const { + templates: newTemplates, + fallbackMsg: newFallbackMsg, + } = await fetchAndRenderTemplates({ + ...props, + start: '', + filters: { + ...props.filters, + tasks: task, + }, + }); + if (newTemplates?.length > 0) { + props.fallbackMsg = newFallbackMsg; + renderFallbackMsgWrapper(block, props); + + templatesWrapper.innerHTML = ''; + props.templates = newTemplates; + props.templates.forEach((template) => { + templatesWrapper.append(template); + }); + + await decorateTemplates(block, props); + buildCarousel(':scope > .template', templatesWrapper); + templatesWrapper.style.opacity = 1; + } + + tabsWrapper.querySelectorAll('.template-tab-button').forEach((btn) => { + if (btn !== tabBtn) btn.classList.remove('active'); + }); + tabBtn.classList.add('active'); + } + }, { passive: true }); + }); + + document.dispatchEvent(new CustomEvent('linkspopulated', { detail: tabBtns })); + } + + textWrapper.append(tabsWrapper); + } + + // templates are either finished rendering or API has crashed at this point. + + if (templates && props.loadMoreTemplates) { + const loadMore = await decorateLoadMoreButton(block, props); + if (loadMore) { + updateLoadMoreButton(props, loadMore); + } + } + + if (templates && props.toolBar) { + await decorateToolbar(block, props); + await decorateCategoryList(block, props); + } + + if (props.toolBar && props.searchBar) { + import('../../scripts/block-mediator.min.js').then(({ default: blockMediator }) => { + importSearchBar(block, blockMediator); + }); + } + + await decorateBreadcrumbs(block); + + if (templates && props.orientation && props.orientation.toLowerCase() === 'horizontal') { + const innerWrapper = block.querySelector('.template-x-inner-wrapper'); + if (innerWrapper) { + buildCarousel(':scope > .template', innerWrapper); + } else { + block.remove(); + } + } + + if (props.holidayBlock) { + decorateHoliday(block, props); + } +} + +function determineTemplateXType(props) { + // todo: build layers of aspects based on props conditions - i.e. orientation -> style -> use case + const type = []; + + // orientation aspect + if (props.orientation && props.orientation.toLowerCase() === 'horizontal') type.push('horizontal'); + + // style aspect + if (props.width && props.width.toLowerCase() === 'full') type.push('fullwidth'); + if (props.width && props.width.toLowerCase() === 'sixcols') type.push('sixcols'); + if (props.width && props.width.toLowerCase() === 'fourcols') type.push('fourcols'); + if (props.mini) type.push('mini'); + + // use case aspect + if (props.holidayBlock) type.push('holiday'); + + return type; +} + +export default async function decorate(block) { + addTempWrapperDeprecated(block, 'template-x'); + const props = constructProps(block); + block.innerHTML = ''; + await buildTemplateList(block, props, determineTemplateXType(props)); +} diff --git a/express/scripts/content-replace.js b/express/scripts/content-replace.js new file mode 100644 index 00000000..c2994700 --- /dev/null +++ b/express/scripts/content-replace.js @@ -0,0 +1,206 @@ + + +import { titleCase } from './utils/string.js'; +// import HtmlSanitizer from './html-sanitizer.js'; +import { fetchPlaceholders } from './utils/fetch-placeholders.js'; + +let getMetadata; + +async function replaceDefaultPlaceholders(block, components) { + block.innerHTML = block.innerHTML.replaceAll('https://www.adobe.com/express/templates/default-create-link', components.link); + + if (components.tasks === '') { + const placeholders = await fetchPlaceholders(); + block.innerHTML = block.innerHTML.replaceAll('default-create-link-text', placeholders['start-from-scratch'] || ''); + } else { + block.innerHTML = block.innerHTML.replaceAll('default-create-link-text', getMetadata('create-text') || ''); + } +} + +async function getReplacementsFromSearch() { + // FIXME: tasks and tasksx split to be removed after mobile GA + const params = new Proxy(new URLSearchParams(window.location.search), { + get: (searchParams, prop) => searchParams.get(prop), + }); + const { + tasks, + tasksx, + phformat, + topics, + q, + } = params; + if (!tasks && !phformat) { + return null; + } + const placeholders = await fetchPlaceholders(); + const categories = JSON.parse(placeholders['task-categories']); + const xCategories = JSON.parse(placeholders['x-task-categories']); + if (!categories) { + return null; + } + const tasksPair = Object.entries(categories).find((cat) => cat[1] === tasks); + const xTasksPair = Object.entries(xCategories).find((cat) => cat[1] === tasksx); + const exp = /['"<>?.;{}]/gm; + const sanitizedTasks = tasks?.match(exp) ? '' : tasks; + const sanitizedTopics = topics?.match(exp) ? '' : topics; + const sanitizedQuery = q?.match(exp) ? '' : q; + + let translatedTasks; + if (document.body.dataset.device === 'desktop') { + translatedTasks = xTasksPair?.[1] ? xTasksPair[0].toLowerCase() : tasksx; + } else { + translatedTasks = tasksPair?.[1] ? tasksPair[0].toLowerCase() : tasks; + } + return { + '{{queryTasks}}': sanitizedTasks || '', + '{{QueryTasks}}': titleCase(sanitizedTasks || ''), + '{{queryTasksX}}': tasksx || '', + '{{translatedTasks}}': translatedTasks || '', + '{{TranslatedTasks}}': titleCase(translatedTasks || ''), + '{{placeholderRatio}}': phformat || '', + '{{QueryTopics}}': titleCase(sanitizedTopics || ''), + '{{queryTopics}}': sanitizedTopics || '', + '{{query}}': sanitizedQuery || '', + }; +} + +const bladeRegex = /\{\{[a-zA-Z_-]+\}\}/g; +function replaceBladesInStr(str, replacements) { + if (!replacements) return str; + return str.replaceAll(bladeRegex, (match) => { + if (match in replacements) { + return replacements[match]; + } + return match; + }); +} + +async function updateMetadataForTemplates() { + if (!['yes', 'true', 'on', 'Y'].includes(getMetadata('template-search-page'))) { + return; + } + const head = document.querySelector('head'); + if (head) { + const replacements = await getReplacementsFromSearch(); + if (!replacements) return; + const title = head.getElementsByTagName('title')[0]; + title.innerText = replaceBladesInStr(title.innerText, replacements); + [...head.getElementsByTagName('meta')].forEach((meta) => { + meta.setAttribute('content', replaceBladesInStr(meta.getAttribute('content'), replacements)); + }); + } +} + +const ignoredMeta = [ + 'serp-content-type', + 'description', + 'primaryproductname', + 'theme', + 'show-free-plan', + 'sheet-powered', + 'viewport', +]; + +// async function sanitizeMeta(meta) { +// if (meta.property || meta.name.includes(':') || ignoredMeta.includes(meta.name)) return; +// await yieldToMain(); +// meta.content = HtmlSanitizer.SanitizeHtml(meta.content); +// } + +// metadata -> dom blades +async function autoUpdatePage(main) { + const wl = ['{{heading_placeholder}}', '{{type}}', '{{quantity}}']; + // FIXME: deprecate wl + if (!main) return; + + const regex = /\{\{([a-zA-Z0-9_-]+)}}/g; + + const metaTags = document.head.querySelectorAll('meta'); + + await Promise.all(Array.from(metaTags).map((meta) => sanitizeMeta(meta))); + + main.innerHTML = main.innerHTML.replaceAll(regex, (match, p1) => { + if (!wl.includes(match.toLowerCase())) { + return getMetadata(p1); + } + return match; + }); + + // handle link replacement on sheet-powered pages + main.querySelectorAll('a[href*="#"]').forEach((a) => { + try { + let url = new URL(a.href); + if (getMetadata(url.hash.replace('#', ''))) { + a.href = getMetadata(url.hash.replace('#', '')); + url = new URL(a.href); + } + } catch (e) { + window.lana?.log(`Error while attempting to replace link ${a.href}: ${e}`); + } + }); +} + +// cleanup remaining dom blades +async function updateNonBladeContent(main) { + const heroAnimation = main.querySelector('.hero-animation.wide'); + const templateList = main.querySelector('.template-list.fullwidth.apipowered'); + const templateX = main.querySelector('.template-x'); + const browseByCat = main.querySelector('.browse-by-category'); + const seoNav = main.querySelector('.seo-nav'); + + if (heroAnimation) { + if (getMetadata('hero-title')) { + heroAnimation.innerHTML = heroAnimation.innerHTML.replace('Default template title', getMetadata('hero-title')); + } + + if (getMetadata('hero-text')) { + heroAnimation.innerHTML = heroAnimation.innerHTML.replace('Default template text', getMetadata('hero-text')); + } + } + + if (templateList) { + await replaceDefaultPlaceholders(templateList, { + link: getMetadata('create-link') || '/', + tasks: getMetadata('tasks'), + }); + } + + if (templateX) { + await replaceDefaultPlaceholders(templateX, { + link: getMetadata('create-link-x') || getMetadata('create-link') || '/', + tasks: getMetadata('tasks-x'), + }); + } + + if (seoNav) { + if (getMetadata('top-templates-title')) { + seoNav.innerHTML = seoNav.innerHTML.replace('Default top templates title', getMetadata('top-templates-title')); + } + + if (getMetadata('top-templates-text')) { + seoNav.innerHTML = seoNav.innerHTML.replace('Default top templates text', getMetadata('top-templates-text')); + } else { + seoNav.innerHTML = seoNav.innerHTML.replace('Default top templates text', ''); + } + } + + if (browseByCat && !['yes', 'true', 'on', 'Y'].includes(getMetadata('show-browse-by-category'))) { + browseByCat.remove(); + } +} + +export function setBlockTheme(block) { + if (getMetadata(`${block.dataset.blockName}-theme`)) { + block.classList.add(getMetadata(`${block.dataset.blockName}-theme`)); + } +} + +export const yieldToMain = () => new Promise((resolve) => { setTimeout(resolve, 0); }); + +export default async function replaceContent(main, libs) { + const res = await import(`${libs}/utils/utils.js`); + getMetadata = res.getMetadata + await updateMetadataForTemplates(); + await autoUpdatePage(main); + await updateNonBladeContent(main); +} diff --git a/express/scripts/html-sanitizer.js b/express/scripts/html-sanitizer.js new file mode 100644 index 00000000..91974ab6 --- /dev/null +++ b/express/scripts/html-sanitizer.js @@ -0,0 +1,182 @@ +const HtmlSanitizer = new (function handSanitizer() { + const tagWL = { + A: true, + ABBR: true, + B: true, + BLOCKQUOTE: true, + BODY: true, + BR: true, + CENTER: true, + CODE: true, + DD: true, + DIV: true, + DL: true, + DT: true, + EM: true, + FONT: true, + H1: true, + H2: true, + H3: true, + H4: true, + H5: true, + H6: true, + HR: true, + I: true, + IMG: true, + LABEL: true, + LI: true, + OL: true, + P: true, + PRE: true, + PICTURE: true, + SMALL: true, + SOURCE: true, + SPAN: true, + STRONG: true, + SUB: true, + SUP: true, + TABLE: true, + TBODY: true, + TR: true, + TD: true, + TH: true, + THEAD: true, + UL: true, + U: true, + VIDEO: true, + }; + + const contentTagWL = { + FORM: true, + 'GOOGLE-SHEETS-HTML-ORIGIN': true, + }; // tags that will be converted to DIVs + + const attributeWL = { + align: true, + alt: true, + color: true, + controls: true, + height: true, + href: true, + id: true, + src: true, + srcset: true, + style: true, + target: true, + title: true, + type: true, + width: true, + class: true, + loading: true, + media: true, + 'data-align': true, + 'data-valign': true, + }; + + const cssWL = { + 'background-color': true, + color: true, + 'font-size': true, + 'font-weight': true, + 'text-align': true, + 'text-decoration': true, + display: true, + width: true, + }; + + const schemaWL = ['http:', 'https:', 'data:', 'm-files:', 'file:', 'ftp:', 'mailto:', 'pw:']; // which "protocols" are allowed in "href", "src" etc + + const uriAttributes = { + href: true, + action: true, + src: true, + }; + + function startsWithAny(str, substrings) { + for (let i = 0; i < substrings.length; i += 1) { + if (str.indexOf(substrings[i]) === 0) { + return true; + } + } + return false; + } + + const parser = new DOMParser(); + + this.SanitizeHtml = function sanitize(inputValue, extraSelector) { + let input = inputValue.trim(); + if (input === '') return ''; // to save performance + + // firefox "bogus node" workaround for wysiwyg's + if (input === '
') return ''; + + if (input.indexOf('${input}`; // add "body" otherwise some tags are skipped, like + + + + + + + \ No newline at end of file diff --git a/express/icons/add-filter-44-n.svg b/express/icons/add-filter-44-n.svg new file mode 100755 index 00000000..5c14783f --- /dev/null +++ b/express/icons/add-filter-44-n.svg @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/express/icons/add-sound-44-n.svg b/express/icons/add-sound-44-n.svg new file mode 100755 index 00000000..a0042da8 --- /dev/null +++ b/express/icons/add-sound-44-n.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/add-text-44-n.svg b/express/icons/add-text-44-n.svg new file mode 100755 index 00000000..9440d798 --- /dev/null +++ b/express/icons/add-text-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-beta-lockup-desktop.svg b/express/icons/adobe-express-beta-lockup-desktop.svg new file mode 100644 index 00000000..0e6d246d --- /dev/null +++ b/express/icons/adobe-express-beta-lockup-desktop.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-express-beta-lockup-mobile.svg b/express/icons/adobe-express-beta-lockup-mobile.svg new file mode 100644 index 00000000..3365b64b --- /dev/null +++ b/express/icons/adobe-express-beta-lockup-mobile.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-express-education-lockup-dark.svg b/express/icons/adobe-express-education-lockup-dark.svg new file mode 100644 index 00000000..dfa084a0 --- /dev/null +++ b/express/icons/adobe-express-education-lockup-dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-education-lockup-white.svg b/express/icons/adobe-express-education-lockup-white.svg new file mode 100644 index 00000000..97b1125e --- /dev/null +++ b/express/icons/adobe-express-education-lockup-white.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-logo.svg b/express/icons/adobe-express-logo.svg new file mode 100644 index 00000000..427bda0c --- /dev/null +++ b/express/icons/adobe-express-logo.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-rebrand-logo.svg b/express/icons/adobe-express-rebrand-logo.svg new file mode 100644 index 00000000..122a86da --- /dev/null +++ b/express/icons/adobe-express-rebrand-logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-express-stacked.svg b/express/icons/adobe-express-stacked.svg new file mode 100644 index 00000000..857d4865 --- /dev/null +++ b/express/icons/adobe-express-stacked.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-teachers-white.svg b/express/icons/adobe-express-teachers-white.svg new file mode 100644 index 00000000..aca817cd --- /dev/null +++ b/express/icons/adobe-express-teachers-white.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-teachers.svg b/express/icons/adobe-express-teachers.svg new file mode 100644 index 00000000..433cfa3a --- /dev/null +++ b/express/icons/adobe-express-teachers.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express-video-previous.svg b/express/icons/adobe-express-video-previous.svg new file mode 100644 index 00000000..c70f1e48 --- /dev/null +++ b/express/icons/adobe-express-video-previous.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/adobe-express-white-stroke.svg b/express/icons/adobe-express-white-stroke.svg new file mode 100644 index 00000000..dde04528 --- /dev/null +++ b/express/icons/adobe-express-white-stroke.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-express-white.svg b/express/icons/adobe-express-white.svg new file mode 100644 index 00000000..7b126889 --- /dev/null +++ b/express/icons/adobe-express-white.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-express.svg b/express/icons/adobe-express.svg new file mode 100644 index 00000000..8fc89fb6 --- /dev/null +++ b/express/icons/adobe-express.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-fc-bayern-edit.svg b/express/icons/adobe-fc-bayern-edit.svg new file mode 100644 index 00000000..7cb56687 --- /dev/null +++ b/express/icons/adobe-fc-bayern-edit.svg @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-fc-bayern-logo.svg b/express/icons/adobe-fc-bayern-logo.svg new file mode 100644 index 00000000..645f787b --- /dev/null +++ b/express/icons/adobe-fc-bayern-logo.svg @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-firefly.svg b/express/icons/adobe-firefly.svg new file mode 100644 index 00000000..e62f619c --- /dev/null +++ b/express/icons/adobe-firefly.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-fonts.svg b/express/icons/adobe-fonts.svg new file mode 100644 index 00000000..29368e14 --- /dev/null +++ b/express/icons/adobe-fonts.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/adobe-meta.svg b/express/icons/adobe-meta.svg new file mode 100644 index 00000000..b840277d --- /dev/null +++ b/express/icons/adobe-meta.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/adobe-mlb.svg b/express/icons/adobe-mlb.svg new file mode 100644 index 00000000..a08ef088 --- /dev/null +++ b/express/icons/adobe-mlb.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-spark.png b/express/icons/adobe-spark.png new file mode 100644 index 0000000000000000000000000000000000000000..98fdb6d24ddee82372e5e512aeba5aa636622e0c GIT binary patch literal 5713 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 D9JwD) literal 0 HcmV?d00001 diff --git a/express/icons/adobe-stock-photos.svg b/express/icons/adobe-stock-photos.svg new file mode 100644 index 00000000..ed022624 --- /dev/null +++ b/express/icons/adobe-stock-photos.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/express/icons/adobe-x-fcbayern-logo-206.svg b/express/icons/adobe-x-fcbayern-logo-206.svg new file mode 100644 index 00000000..85a715dc --- /dev/null +++ b/express/icons/adobe-x-fcbayern-logo-206.svg @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/adobe-x-fcbayern-logo.svg b/express/icons/adobe-x-fcbayern-logo.svg new file mode 100644 index 00000000..5f914d33 --- /dev/null +++ b/express/icons/adobe-x-fcbayern-logo.svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/aex-logo.svg b/express/icons/aex-logo.svg new file mode 100644 index 00000000..7433490d --- /dev/null +++ b/express/icons/aex-logo.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/ai-black.svg b/express/icons/ai-black.svg new file mode 100644 index 00000000..d2b037fe --- /dev/null +++ b/express/icons/ai-black.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/ai.svg b/express/icons/ai.svg new file mode 100644 index 00000000..9b7bc21a --- /dev/null +++ b/express/icons/ai.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/express/icons/all-design-assets.svg b/express/icons/all-design-assets.svg new file mode 100644 index 00000000..829a4ea6 --- /dev/null +++ b/express/icons/all-design-assets.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/all-templates.svg b/express/icons/all-templates.svg new file mode 100644 index 00000000..dcab5d43 --- /dev/null +++ b/express/icons/all-templates.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/animate-audio-black.svg b/express/icons/animate-audio-black.svg new file mode 100644 index 00000000..8a390163 --- /dev/null +++ b/express/icons/animate-audio-black.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/animate-character.svg b/express/icons/animate-character.svg new file mode 100644 index 00000000..330d96e3 --- /dev/null +++ b/express/icons/animate-character.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/animate-text-44-n.svg b/express/icons/animate-text-44-n.svg new file mode 100755 index 00000000..684fc6e5 --- /dev/null +++ b/express/icons/animate-text-44-n.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/express/icons/animation-44-n.svg b/express/icons/animation-44-n.svg new file mode 100755 index 00000000..6d0f8083 --- /dev/null +++ b/express/icons/animation-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/apple-store-borderless.svg b/express/icons/apple-store-borderless.svg new file mode 100644 index 00000000..a0c34025 --- /dev/null +++ b/express/icons/apple-store-borderless.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/apple-store.svg b/express/icons/apple-store.svg new file mode 100644 index 00000000..0fe477c5 --- /dev/null +++ b/express/icons/apple-store.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/arrow-down.json b/express/icons/arrow-down.json new file mode 100644 index 00000000..14fcda5f --- /dev/null +++ b/express/icons/arrow-down.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.0.2","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":240,"w":1000,"h":1000,"nm":"ArrowDown","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Rotation","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":90,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"left 2","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0]},{"t":121,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":198,"s":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.149],"y":[0.056]},"t":209,"s":[-67.2]},{"t":219,"s":[0]}],"ix":10},"p":{"a":0,"k":[196.049,54.163,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":207,"s":[0]},{"t":218,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":5,"op":605,"st":5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"left","parent":7,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[100]},{"t":121,"s":[1]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.075],"y":[0.943]},"t":21,"s":[0]},{"i":{"x":[0.203],"y":[0.967]},"o":{"x":[0.149],"y":[0.942]},"t":29,"s":[-67.2]},{"t":85,"s":[-45]}],"ix":10},"p":{"a":0,"k":[197,54,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.207],"y":[0.432]},"t":21,"s":[100]},{"t":33,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":5,"op":605,"st":5,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"right 2","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0]},{"t":121,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":197,"s":[45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.331],"y":[0.106]},"t":214,"s":[67.169]},{"t":225,"s":[0]}],"ix":10},"p":{"a":0,"k":[195.889,54.163,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":215,"s":[0]},{"t":227,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"right","parent":7,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[100]},{"t":121,"s":[1]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.409],"y":[0.915]},"t":16,"s":[0]},{"i":{"x":[0.203],"y":[1.033]},"o":{"x":[0.331],"y":[1.642]},"t":24,"s":[67.169]},{"t":80,"s":[45]}],"ix":10},"p":{"a":0,"k":[197,54,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.207],"y":[0.432]},"t":16,"s":[100]},{"t":28,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"center 2","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[0]},{"t":121,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":121,"s":[1.111]},{"i":{"x":[0.833],"y":[1.014]},"o":{"x":[0.167],"y":[0]},"t":184,"s":[0.611]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.153],"y":[0.001]},"t":229,"s":[29.667]},{"t":240,"s":[-89]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":209,"s":[-0.163]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":224,"s":[-0.135]},{"t":240,"s":[0]}],"ix":4}},"a":{"a":0,"k":[-6.5,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-210,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[0.5]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"center","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[100]},{"t":121,"s":[1]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.945],"y":[1]},"o":{"x":[1],"y":[0]},"t":0,"s":[-89]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.153],"y":[0.004]},"t":16,"s":[89]},{"t":57,"s":[0]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"t":27,"s":[0]}],"ix":4}},"a":{"a":0,"k":[-6.5,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-210,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254908681,0.768627464771,0.572549045086,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":74,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.944],"y":[0.928]},"o":{"x":[1],"y":[0]},"t":0,"s":[0.5]},{"t":16,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/express/icons/arrow-right.svg b/express/icons/arrow-right.svg new file mode 100644 index 00000000..9c4106b1 --- /dev/null +++ b/express/icons/arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/arrow-up-animated.json b/express/icons/arrow-up-animated.json new file mode 100644 index 00000000..043c9d04 --- /dev/null +++ b/express/icons/arrow-up-animated.json @@ -0,0 +1,1378 @@ +{ + "v":"4.8.0", + "meta":{ + "g":"LottieFiles AE 1.1.0", + "a":"", + "k":"", + "d":"", + "tc":"" + }, + "fr":60, + "ip":0, + "op":120, + "w":1000, + "h":1000, + "nm":"ArrowUp", + "ddd":0, + "assets":[ + + ], + "layers":[ + { + "ddd":0, + "ind":1, + "ty":3, + "nm":"Rotation", + "sr":1, + "ks":{ + "o":{ + "a":0, + "k":0, + "ix":11 + }, + "r":{ + "a":0, + "k":-90, + "ix":10 + }, + "p":{ + "a":0, + "k":[ + 500, + 500, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 0, + 0, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100, + 100 + ], + "ix":6 + } + }, + "ao":0, + "ip":0, + "op":600, + "st":0, + "bm":0 + }, + { + "ddd":0, + "ind":2, + "ty":4, + "nm":"Shape Layer 4", + "parent":4, + "sr":1, + "ks":{ + "o":{ + "a":0, + "k":100, + "ix":11 + }, + "r":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.667 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.075 + ], + "y":[ + 0.943 + ] + }, + "t":21, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.203 + ], + "y":[ + 0.967 + ] + }, + "o":{ + "x":[ + 0.149 + ], + "y":[ + 0.942 + ] + }, + "t":29, + "s":[ + -67.2 + ] + }, + { + "i":{ + "x":[ + 0.667 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":85, + "s":[ + -45 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.149 + ], + "y":[ + 0.05 + ] + }, + "t":99, + "s":[ + -67.2 + ] + }, + { + "t":108, + "s":[ + 0 + ] + } + ], + "ix":10 + }, + "p":{ + "a":0, + "k":[ + 197, + 54, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 197, + 54, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100, + 100 + ], + "ix":6 + } + }, + "ao":0, + "shapes":[ + { + "ty":"gr", + "it":[ + { + "ind":0, + "ty":"sh", + "ix":1, + "ks":{ + "a":0, + "k":{ + "i":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v":[ + [ + 8, + 54 + ], + [ + 197, + 54 + ] + ], + "c":false + }, + "ix":2 + }, + "nm":"Path 1", + "mn":"ADBE Vector Shape - Group", + "hd":false + }, + { + "ty":"st", + "c":{ + "a":0, + "k":[ + 1, + 1, + 1, + 1 + ], + "ix":3 + }, + "o":{ + "a":0, + "k":100, + "ix":4 + }, + "w":{ + "a":0, + "k":54, + "ix":5 + }, + "lc":2, + "lj":2, + "bm":0, + "nm":"Stroke 1", + "mn":"ADBE Vector Graphic - Stroke", + "hd":false + }, + { + "ty":"tr", + "p":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100 + ], + "ix":3 + }, + "r":{ + "a":0, + "k":0, + "ix":6 + }, + "o":{ + "a":0, + "k":100, + "ix":7 + }, + "sk":{ + "a":0, + "k":0, + "ix":4 + }, + "sa":{ + "a":0, + "k":0, + "ix":5 + }, + "nm":"Transform" + } + ], + "nm":"Shape 1", + "np":3, + "cix":2, + "bm":0, + "ix":1, + "mn":"ADBE Vector Group", + "hd":false + }, + { + "ty":"tm", + "s":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.27 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.207 + ], + "y":[ + 0.432 + ] + }, + "t":21, + "s":[ + 100 + ] + }, + { + "i":{ + "x":[ + 0.27 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":33, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":100, + "s":[ + 0 + ] + }, + { + "t":105, + "s":[ + 100 + ] + } + ], + "ix":1 + }, + "e":{ + "a":0, + "k":100, + "ix":2 + }, + "o":{ + "a":0, + "k":0, + "ix":3 + }, + "m":1, + "ix":2, + "nm":"Trim Paths 1", + "mn":"ADBE Vector Filter - Trim", + "hd":false + } + ], + "ip":5, + "op":605, + "st":5, + "bm":0 + }, + { + "ddd":0, + "ind":3, + "ty":4, + "nm":"Shape Layer 2", + "parent":4, + "sr":1, + "ks":{ + "o":{ + "a":0, + "k":100, + "ix":11 + }, + "r":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.667 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.409 + ], + "y":[ + 0.915 + ] + }, + "t":16, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.203 + ], + "y":[ + 1.033 + ] + }, + "o":{ + "x":[ + 0.331 + ], + "y":[ + 1.642 + ] + }, + "t":24, + "s":[ + 67.169 + ] + }, + { + "i":{ + "x":[ + 0.667 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":80, + "s":[ + 45 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.331 + ], + "y":[ + 0.087 + ] + }, + "t":99, + "s":[ + 67.169 + ] + }, + { + "t":108, + "s":[ + 0 + ] + } + ], + "ix":10 + }, + "p":{ + "a":0, + "k":[ + 197, + 54, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 197, + 54, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100, + 100 + ], + "ix":6 + } + }, + "ao":0, + "shapes":[ + { + "ty":"gr", + "it":[ + { + "ind":0, + "ty":"sh", + "ix":1, + "ks":{ + "a":0, + "k":{ + "i":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v":[ + [ + 8, + 54 + ], + [ + 197, + 54 + ] + ], + "c":false + }, + "ix":2 + }, + "nm":"Path 1", + "mn":"ADBE Vector Shape - Group", + "hd":false + }, + { + "ty":"st", + "c":{ + "a":0, + "k":[ + 1, + 1, + 1, + 1 + ], + "ix":3 + }, + "o":{ + "a":0, + "k":100, + "ix":4 + }, + "w":{ + "a":0, + "k":54, + "ix":5 + }, + "lc":2, + "lj":2, + "bm":0, + "nm":"Stroke 1", + "mn":"ADBE Vector Graphic - Stroke", + "hd":false + }, + { + "ty":"tr", + "p":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100 + ], + "ix":3 + }, + "r":{ + "a":0, + "k":0, + "ix":6 + }, + "o":{ + "a":0, + "k":100, + "ix":7 + }, + "sk":{ + "a":0, + "k":0, + "ix":4 + }, + "sa":{ + "a":0, + "k":0, + "ix":5 + }, + "nm":"Transform" + } + ], + "nm":"Shape 1", + "np":3, + "cix":2, + "bm":0, + "ix":1, + "mn":"ADBE Vector Group", + "hd":false + }, + { + "ty":"tm", + "s":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.27 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.207 + ], + "y":[ + 0.432 + ] + }, + "t":16, + "s":[ + 100 + ] + }, + { + "i":{ + "x":[ + 0.27 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":28, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":100, + "s":[ + 0 + ] + }, + { + "t":105, + "s":[ + 100 + ] + } + ], + "ix":1 + }, + "e":{ + "a":0, + "k":100, + "ix":2 + }, + "o":{ + "a":0, + "k":0, + "ix":3 + }, + "m":1, + "ix":2, + "nm":"Trim Paths 1", + "mn":"ADBE Vector Filter - Trim", + "hd":false + } + ], + "ip":0, + "op":600, + "st":0, + "bm":0 + }, + { + "ddd":0, + "ind":4, + "ty":4, + "nm":"Shape Layer 1", + "parent":1, + "sr":1, + "ks":{ + "o":{ + "a":0, + "k":100, + "ix":11 + }, + "r":{ + "a":0, + "k":0, + "ix":10 + }, + "p":{ + "s":true, + "x":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.945 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 1 + ], + "y":[ + 0 + ] + }, + "t":0, + "s":[ + -89 + ] + }, + { + "i":{ + "x":[ + 0 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.153 + ], + "y":[ + 0.004 + ] + }, + "t":16, + "s":[ + 89 + ] + }, + { + "i":{ + "x":[ + 0.945 + ], + "y":[ + 1.001 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":57, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 1 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0 + ] + }, + "t":100, + "s":[ + 89 + ] + }, + { + "t":105, + "s":[ + -89 + ] + } + ], + "ix":3 + }, + "y":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 0.833 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0.167 + ] + }, + "t":0, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 0.833 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0.167 + ] + }, + "t":16, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 0.833 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0.167 + ] + }, + "t":27, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 0.833 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0.167 + ] + }, + "t":85, + "s":[ + 0 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 0.833 + ] + }, + "o":{ + "x":[ + 0.167 + ], + "y":[ + 0.167 + ] + }, + "t":100, + "s":[ + 0 + ] + }, + { + "t":105, + "s":[ + 0 + ] + } + ], + "ix":4 + } + }, + "a":{ + "a":0, + "k":[ + -6.5, + 54, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100, + 100 + ], + "ix":6 + } + }, + "ao":0, + "shapes":[ + { + "ty":"gr", + "it":[ + { + "ind":0, + "ty":"sh", + "ix":1, + "ks":{ + "a":0, + "k":{ + "i":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "o":[ + [ + 0, + 0 + ], + [ + 0, + 0 + ] + ], + "v":[ + [ + -210, + 54 + ], + [ + 197, + 54 + ] + ], + "c":false + }, + "ix":2 + }, + "nm":"Path 1", + "mn":"ADBE Vector Shape - Group", + "hd":false + }, + { + "ty":"st", + "c":{ + "a":0, + "k":[ + 1, + 1, + 1, + 1 + ], + "ix":3 + }, + "o":{ + "a":0, + "k":100, + "ix":4 + }, + "w":{ + "a":0, + "k":54, + "ix":5 + }, + "lc":2, + "lj":2, + "bm":0, + "nm":"Stroke 1", + "mn":"ADBE Vector Graphic - Stroke", + "hd":false + }, + { + "ty":"tr", + "p":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":2 + }, + "a":{ + "a":0, + "k":[ + 0, + 0 + ], + "ix":1 + }, + "s":{ + "a":0, + "k":[ + 100, + 100 + ], + "ix":3 + }, + "r":{ + "a":0, + "k":0, + "ix":6 + }, + "o":{ + "a":0, + "k":100, + "ix":7 + }, + "sk":{ + "a":0, + "k":0, + "ix":4 + }, + "sa":{ + "a":0, + "k":0, + "ix":5 + }, + "nm":"Transform" + } + ], + "nm":"Shape 1", + "np":3, + "cix":2, + "bm":0, + "ix":1, + "mn":"ADBE Vector Group", + "hd":false + }, + { + "ty":"tm", + "s":{ + "a":0, + "k":0, + "ix":1 + }, + "e":{ + "a":1, + "k":[ + { + "i":{ + "x":[ + 0.944 + ], + "y":[ + 0.928 + ] + }, + "o":{ + "x":[ + 1 + ], + "y":[ + 0 + ] + }, + "t":0, + "s":[ + 0.5 + ] + }, + { + "i":{ + "x":[ + 0.709 + ], + "y":[ + -5.274 + ] + }, + "o":{ + "x":[ + 0.148 + ], + "y":[ + 0 + ] + }, + "t":16, + "s":[ + 100 + ] + }, + { + "i":{ + "x":[ + 0.713 + ], + "y":[ + 21.492 + ] + }, + "o":{ + "x":[ + 0.527 + ], + "y":[ + 2.125 + ] + }, + "t":91, + "s":[ + 100 + ] + }, + { + "i":{ + "x":[ + 0.642 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 0.312 + ], + "y":[ + 0.032 + ] + }, + "t":105, + "s":[ + 100 + ] + }, + { + "i":{ + "x":[ + 0.833 + ], + "y":[ + 1 + ] + }, + "o":{ + "x":[ + 1 + ], + "y":[ + 0 + ] + }, + "t":107, + "s":[ + 0.5 + ] + }, + { + "t":110, + "s":[ + 0 + ] + } + ], + "ix":2 + }, + "o":{ + "a":0, + "k":0, + "ix":3 + }, + "m":1, + "ix":2, + "nm":"Trim Paths 1", + "mn":"ADBE Vector Filter - Trim", + "hd":false + } + ], + "ip":0, + "op":600, + "st":0, + "bm":0 + } + ], + "markers":[ + + ] +} \ No newline at end of file diff --git a/express/icons/arrow-up-lottie.json b/express/icons/arrow-up-lottie.json new file mode 100644 index 00000000..834e789a --- /dev/null +++ b/express/icons/arrow-up-lottie.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 1.1.0","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":120,"w":1000,"h":1000,"nm":"ArrowUp","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Rotation","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.075],"y":[0.943]},"t":21,"s":[0]},{"i":{"x":[0.203],"y":[0.967]},"o":{"x":[0.149],"y":[0.942]},"t":29,"s":[-67.2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[-45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.149],"y":[0.05]},"t":99,"s":[-67.2]},{"t":108,"s":[0]}],"ix":10},"p":{"a":0,"k":[197,54,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":54,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.207],"y":[0.432]},"t":21,"s":[100]},{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":100,"s":[0]},{"t":105,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":5,"op":605,"st":5,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 2","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.409],"y":[0.915]},"t":16,"s":[0]},{"i":{"x":[0.203],"y":[1.033]},"o":{"x":[0.331],"y":[1.642]},"t":24,"s":[67.169]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":80,"s":[45]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.331],"y":[0.087]},"t":99,"s":[67.169]},{"t":108,"s":[0]}],"ix":10},"p":{"a":0,"k":[197,54,0],"ix":2},"a":{"a":0,"k":[197,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[8,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":54,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.207],"y":[0.432]},"t":16,"s":[100]},{"i":{"x":[0.27],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":100,"s":[0]},{"t":105,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 1","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.945],"y":[1]},"o":{"x":[1],"y":[0]},"t":0,"s":[-89]},{"i":{"x":[0],"y":[1]},"o":{"x":[0.153],"y":[0.004]},"t":16,"s":[89]},{"i":{"x":[0.945],"y":[1.001]},"o":{"x":[0.167],"y":[0]},"t":57,"s":[0]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":100,"s":[89]},{"t":105,"s":[-89]}],"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":16,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":100,"s":[0]},{"t":105,"s":[0]}],"ix":4}},"a":{"a":0,"k":[-6.5,54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-210,54],[197,54]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":54,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.944],"y":[0.928]},"o":{"x":[1],"y":[0]},"t":0,"s":[0.5]},{"i":{"x":[0.709],"y":[-5.274]},"o":{"x":[0.148],"y":[0]},"t":16,"s":[100]},{"i":{"x":[0.713],"y":[21.492]},"o":{"x":[0.527],"y":[2.125]},"t":91,"s":[100]},{"i":{"x":[0.642],"y":[1]},"o":{"x":[0.312],"y":[0.032]},"t":105,"s":[100]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":107,"s":[0.5]},{"t":110,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":600,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/express/icons/ax-dark-icon.svg b/express/icons/ax-dark-icon.svg new file mode 100644 index 00000000..5aafc2dc --- /dev/null +++ b/express/icons/ax-dark-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/banner-22.svg b/express/icons/banner-22.svg new file mode 100644 index 00000000..1dcced0f --- /dev/null +++ b/express/icons/banner-22.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/banner-icon-22.svg b/express/icons/banner-icon-22.svg new file mode 100644 index 00000000..25c21fee --- /dev/null +++ b/express/icons/banner-icon-22.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/banner.svg b/express/icons/banner.svg new file mode 100644 index 00000000..15a6783a --- /dev/null +++ b/express/icons/banner.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/bell-white.svg b/express/icons/bell-white.svg new file mode 100644 index 00000000..493aa3ad --- /dev/null +++ b/express/icons/bell-white.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/bell.svg b/express/icons/bell.svg new file mode 100644 index 00000000..4400c89b --- /dev/null +++ b/express/icons/bell.svg @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-aem-22.svg b/express/icons/black-aem-22.svg new file mode 100644 index 00000000..d7e9ce96 --- /dev/null +++ b/express/icons/black-aem-22.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-auto-translate-22.svg b/express/icons/black-auto-translate-22.svg new file mode 100644 index 00000000..d4b2f256 --- /dev/null +++ b/express/icons/black-auto-translate-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-brand-22.svg b/express/icons/black-brand-22.svg new file mode 100644 index 00000000..fc0437cb --- /dev/null +++ b/express/icons/black-brand-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/black-cloud-sync-22.svg b/express/icons/black-cloud-sync-22.svg new file mode 100644 index 00000000..ea927728 --- /dev/null +++ b/express/icons/black-cloud-sync-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-gen-fill-22.svg b/express/icons/black-gen-fill-22.svg new file mode 100644 index 00000000..ee00e666 --- /dev/null +++ b/express/icons/black-gen-fill-22.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-locked-templates-22.svg b/express/icons/black-locked-templates-22.svg new file mode 100644 index 00000000..1e8a7cba --- /dev/null +++ b/express/icons/black-locked-templates-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-premium-templates-22.svg b/express/icons/black-premium-templates-22.svg new file mode 100644 index 00000000..33600f9b --- /dev/null +++ b/express/icons/black-premium-templates-22.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-quick-actions.svg b/express/icons/black-quick-actions.svg new file mode 100644 index 00000000..0ff0de42 --- /dev/null +++ b/express/icons/black-quick-actions.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/black-stock-22.svg b/express/icons/black-stock-22.svg new file mode 100644 index 00000000..d27aa2da --- /dev/null +++ b/express/icons/black-stock-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-templates-22.svg b/express/icons/black-templates-22.svg new file mode 100644 index 00000000..5f29286f --- /dev/null +++ b/express/icons/black-templates-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/black-text-templates.svg b/express/icons/black-text-templates.svg new file mode 100644 index 00000000..5d992be2 --- /dev/null +++ b/express/icons/black-text-templates.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/black-users-22.svg b/express/icons/black-users-22.svg new file mode 100644 index 00000000..db13a34b --- /dev/null +++ b/express/icons/black-users-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/black-video-22.svg b/express/icons/black-video-22.svg new file mode 100644 index 00000000..f99a4608 --- /dev/null +++ b/express/icons/black-video-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/blank-22.svg b/express/icons/blank-22.svg new file mode 100644 index 00000000..4a09fb87 --- /dev/null +++ b/express/icons/blank-22.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/blank-white-22.svg b/express/icons/blank-white-22.svg new file mode 100644 index 00000000..dc02cb15 --- /dev/null +++ b/express/icons/blank-white-22.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/icons/blur-image-44-n.svg b/express/icons/blur-image-44-n.svg new file mode 100755 index 00000000..79f7aa6a --- /dev/null +++ b/express/icons/blur-image-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/brands.svg b/express/icons/brands.svg new file mode 100644 index 00000000..df8bcba2 --- /dev/null +++ b/express/icons/brands.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/brighten-44-n.svg b/express/icons/brighten-44-n.svg new file mode 100755 index 00000000..2e3125b0 --- /dev/null +++ b/express/icons/brighten-44-n.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/brighten-image-44-n.svg b/express/icons/brighten-image-44-n.svg new file mode 100755 index 00000000..2e33f88a --- /dev/null +++ b/express/icons/brighten-image-44-n.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/browse-icon-22.svg b/express/icons/browse-icon-22.svg new file mode 100644 index 00000000..dda069fc --- /dev/null +++ b/express/icons/browse-icon-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/business-card-black-22.svg b/express/icons/business-card-black-22.svg new file mode 100644 index 00000000..509492d6 --- /dev/null +++ b/express/icons/business-card-black-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/business-card-black-44.svg b/express/icons/business-card-black-44.svg new file mode 100644 index 00000000..dafd4ac8 --- /dev/null +++ b/express/icons/business-card-black-44.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/cal_44.svg b/express/icons/cal_44.svg new file mode 100644 index 00000000..3da4420a --- /dev/null +++ b/express/icons/cal_44.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/card_44.svg b/express/icons/card_44.svg new file mode 100644 index 00000000..2510aa3a --- /dev/null +++ b/express/icons/card_44.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/category-banner.svg b/express/icons/category-banner.svg new file mode 100644 index 00000000..75832a5d --- /dev/null +++ b/express/icons/category-banner.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-brochure.svg b/express/icons/category-brochure.svg new file mode 100644 index 00000000..b6f993b2 --- /dev/null +++ b/express/icons/category-brochure.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-card.svg b/express/icons/category-card.svg new file mode 100644 index 00000000..cd86f25a --- /dev/null +++ b/express/icons/category-card.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/express/icons/category-facebook.svg b/express/icons/category-facebook.svg new file mode 100644 index 00000000..9f9cf869 --- /dev/null +++ b/express/icons/category-facebook.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-flyer.svg b/express/icons/category-flyer.svg new file mode 100644 index 00000000..9ad9b800 --- /dev/null +++ b/express/icons/category-flyer.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/category-instagram.svg b/express/icons/category-instagram.svg new file mode 100644 index 00000000..dc8422ec --- /dev/null +++ b/express/icons/category-instagram.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-invitation.svg b/express/icons/category-invitation.svg new file mode 100644 index 00000000..e7d88b82 --- /dev/null +++ b/express/icons/category-invitation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-logo.svg b/express/icons/category-logo.svg new file mode 100644 index 00000000..cc27e549 --- /dev/null +++ b/express/icons/category-logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/category-poster.svg b/express/icons/category-poster.svg new file mode 100644 index 00000000..95f4f234 --- /dev/null +++ b/express/icons/category-poster.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/category-presentation.svg b/express/icons/category-presentation.svg new file mode 100644 index 00000000..652e67b2 --- /dev/null +++ b/express/icons/category-presentation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/category-resume.svg b/express/icons/category-resume.svg new file mode 100644 index 00000000..9ff4dad8 --- /dev/null +++ b/express/icons/category-resume.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/cc-express-logo.svg b/express/icons/cc-express-logo.svg new file mode 100644 index 00000000..427bda0c --- /dev/null +++ b/express/icons/cc-express-logo.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/cc-express-stacked.svg b/express/icons/cc-express-stacked.svg new file mode 100644 index 00000000..857d4865 --- /dev/null +++ b/express/icons/cc-express-stacked.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/cc-express.svg b/express/icons/cc-express.svg new file mode 100644 index 00000000..8fc89fb6 --- /dev/null +++ b/express/icons/cc-express.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/ccx-sheet_22.svg b/express/icons/ccx-sheet_22.svg new file mode 100644 index 00000000..b96a8d16 --- /dev/null +++ b/express/icons/ccx-sheet_22.svg @@ -0,0 +1,683 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/ccx.png b/express/icons/ccx.png new file mode 100644 index 0000000000000000000000000000000000000000..3ca0cedb43157cb7f130b93f7c28fbf818724c1d GIT binary patch literal 4955 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 literal 0 HcmV?d00001 diff --git a/express/icons/chart_44.svg b/express/icons/chart_44.svg new file mode 100644 index 00000000..422842dc --- /dev/null +++ b/express/icons/chart_44.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/chat-black.svg b/express/icons/chat-black.svg new file mode 100644 index 00000000..b5b5a5da --- /dev/null +++ b/express/icons/chat-black.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/checkmark-darkgreen.svg b/express/icons/checkmark-darkgreen.svg new file mode 100644 index 00000000..c38ca464 --- /dev/null +++ b/express/icons/checkmark-darkgreen.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/checkmark-green.svg b/express/icons/checkmark-green.svg new file mode 100644 index 00000000..96dccc01 --- /dev/null +++ b/express/icons/checkmark-green.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/checkmark-no-fill.svg b/express/icons/checkmark-no-fill.svg new file mode 100644 index 00000000..0a328740 --- /dev/null +++ b/express/icons/checkmark-no-fill.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/checkmark-purple.svg b/express/icons/checkmark-purple.svg new file mode 100644 index 00000000..90d0f189 --- /dev/null +++ b/express/icons/checkmark-purple.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/checkmark.svg b/express/icons/checkmark.svg new file mode 100644 index 00000000..051de2b7 --- /dev/null +++ b/express/icons/checkmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/clock-white.svg b/express/icons/clock-white.svg new file mode 100644 index 00000000..a9f7de8f --- /dev/null +++ b/express/icons/clock-white.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/express/icons/clock.svg b/express/icons/clock.svg new file mode 100644 index 00000000..ad626d63 --- /dev/null +++ b/express/icons/clock.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/express/icons/close-black.svg b/express/icons/close-black.svg new file mode 100644 index 00000000..b5637482 --- /dev/null +++ b/express/icons/close-black.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/close-button-x.svg b/express/icons/close-button-x.svg new file mode 100644 index 00000000..1b9a50d9 --- /dev/null +++ b/express/icons/close-button-x.svg @@ -0,0 +1 @@ + diff --git a/express/icons/close-icon.svg b/express/icons/close-icon.svg new file mode 100644 index 00000000..c42aca25 --- /dev/null +++ b/express/icons/close-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/close-white.svg b/express/icons/close-white.svg new file mode 100644 index 00000000..e8ca0ea4 --- /dev/null +++ b/express/icons/close-white.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/cloud-storage.svg b/express/icons/cloud-storage.svg new file mode 100644 index 00000000..d09be967 --- /dev/null +++ b/express/icons/cloud-storage.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/collage_44.svg b/express/icons/collage_44.svg new file mode 100644 index 00000000..4a21f28a --- /dev/null +++ b/express/icons/collage_44.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/collapse.svg b/express/icons/collapse.svg new file mode 100644 index 00000000..fb0c83dc --- /dev/null +++ b/express/icons/collapse.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/color-22.svg b/express/icons/color-22.svg new file mode 100644 index 00000000..b6e3c127 --- /dev/null +++ b/express/icons/color-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/color-palette-44-n.svg b/express/icons/color-palette-44-n.svg new file mode 100755 index 00000000..0d300c3c --- /dev/null +++ b/express/icons/color-palette-44-n.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/color-sprite.svg b/express/icons/color-sprite.svg new file mode 100644 index 00000000..1acbb056 --- /dev/null +++ b/express/icons/color-sprite.svg @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/combine-image-44-n.svg b/express/icons/combine-image-44-n.svg new file mode 100755 index 00000000..d64391b3 --- /dev/null +++ b/express/icons/combine-image-44-n.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/express/icons/combine-pdf.svg b/express/icons/combine-pdf.svg new file mode 100644 index 00000000..54f315aa --- /dev/null +++ b/express/icons/combine-pdf.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/content-calendar.svg b/express/icons/content-calendar.svg new file mode 100644 index 00000000..7c726be2 --- /dev/null +++ b/express/icons/content-calendar.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/content-scheduler.svg b/express/icons/content-scheduler.svg new file mode 100644 index 00000000..6bfa3bc1 --- /dev/null +++ b/express/icons/content-scheduler.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/convert-to-gif-22.svg b/express/icons/convert-to-gif-22.svg new file mode 100644 index 00000000..58fe5d39 --- /dev/null +++ b/express/icons/convert-to-gif-22.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/convert-video-44-n.svg b/express/icons/convert-video-44-n.svg new file mode 100755 index 00000000..b38f5503 --- /dev/null +++ b/express/icons/convert-video-44-n.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/copy.svg b/express/icons/copy.svg new file mode 100644 index 00000000..701fa0f2 --- /dev/null +++ b/express/icons/copy.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/create-pdf.svg b/express/icons/create-pdf.svg new file mode 100644 index 00000000..0bf65fa0 --- /dev/null +++ b/express/icons/create-pdf.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + diff --git a/express/icons/creative-cloud-express.svg b/express/icons/creative-cloud-express.svg new file mode 100644 index 00000000..8fc89fb6 --- /dev/null +++ b/express/icons/creative-cloud-express.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/creative-cloud-libraries.svg b/express/icons/creative-cloud-libraries.svg new file mode 100644 index 00000000..0c07f2ce --- /dev/null +++ b/express/icons/creative-cloud-libraries.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/creative-cloud.svg b/express/icons/creative-cloud.svg new file mode 100644 index 00000000..afb6ac8a --- /dev/null +++ b/express/icons/creative-cloud.svg @@ -0,0 +1 @@ +Asset 159 \ No newline at end of file diff --git a/express/icons/crop-video-44-n.svg b/express/icons/crop-video-44-n.svg new file mode 100755 index 00000000..880c2497 --- /dev/null +++ b/express/icons/crop-video-44-n.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/express/icons/crop.svg b/express/icons/crop.svg new file mode 100644 index 00000000..5d8323c3 --- /dev/null +++ b/express/icons/crop.svg @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/express/icons/custom-size-white.svg b/express/icons/custom-size-white.svg new file mode 100644 index 00000000..dc02cb15 --- /dev/null +++ b/express/icons/custom-size-white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/icons/customize-border-44-n.svg b/express/icons/customize-border-44-n.svg new file mode 100755 index 00000000..f4b63fdf --- /dev/null +++ b/express/icons/customize-border-44-n.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/dash-rectangle.svg b/express/icons/dash-rectangle.svg new file mode 100644 index 00000000..8c16dbc9 --- /dev/null +++ b/express/icons/dash-rectangle.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/dash-square.svg b/express/icons/dash-square.svg new file mode 100644 index 00000000..e05575e5 --- /dev/null +++ b/express/icons/dash-square.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/design-assets-22.svg b/express/icons/design-assets-22.svg new file mode 100644 index 00000000..088d03e9 --- /dev/null +++ b/express/icons/design-assets-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/document-accent.svg b/express/icons/document-accent.svg new file mode 100644 index 00000000..d69559f7 --- /dev/null +++ b/express/icons/document-accent.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/document.svg b/express/icons/document.svg new file mode 100644 index 00000000..c9316e8e --- /dev/null +++ b/express/icons/document.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/download-app-icon-22.svg b/express/icons/download-app-icon-22.svg new file mode 100644 index 00000000..4b5052fb --- /dev/null +++ b/express/icons/download-app-icon-22.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/icons/drag-and-drop-sound-44-n.svg b/express/icons/drag-and-drop-sound-44-n.svg new file mode 100755 index 00000000..f5abb498 --- /dev/null +++ b/express/icons/drag-and-drop-sound-44-n.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/express/icons/drop-down-arrow.svg b/express/icons/drop-down-arrow.svg new file mode 100644 index 00000000..b20c6ccd --- /dev/null +++ b/express/icons/drop-down-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/edit-22-n.svg b/express/icons/edit-22-n.svg new file mode 100644 index 00000000..5105219b --- /dev/null +++ b/express/icons/edit-22-n.svg @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/express/icons/edit-44-n.svg b/express/icons/edit-44-n.svg new file mode 100644 index 00000000..6b1d85ce --- /dev/null +++ b/express/icons/edit-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/express/icons/edit-pdf.svg b/express/icons/edit-pdf.svg new file mode 100644 index 00000000..a294ceb1 --- /dev/null +++ b/express/icons/edit-pdf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/editor-black.svg b/express/icons/editor-black.svg new file mode 100644 index 00000000..6811bd81 --- /dev/null +++ b/express/icons/editor-black.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/editor-choice.png b/express/icons/editor-choice.png new file mode 100644 index 0000000000000000000000000000000000000000..a278e632bfa63cc3e86aabea4b5778286f977aae GIT binary patch literal 10072 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 + + + diff --git a/express/icons/emoji-smiling-face.svg b/express/icons/emoji-smiling-face.svg new file mode 100644 index 00000000..83f4535b --- /dev/null +++ b/express/icons/emoji-smiling-face.svg @@ -0,0 +1,388 @@ + + + + diff --git a/express/icons/emoji-star-struck.svg b/express/icons/emoji-star-struck.svg new file mode 100644 index 00000000..c4b95271 --- /dev/null +++ b/express/icons/emoji-star-struck.svg @@ -0,0 +1,379 @@ + + + + diff --git a/express/icons/emoji-thinking-face.svg b/express/icons/emoji-thinking-face.svg new file mode 100644 index 00000000..986950cf --- /dev/null +++ b/express/icons/emoji-thinking-face.svg @@ -0,0 +1,320 @@ + + + + diff --git a/express/icons/emoji-upside-down-face.svg b/express/icons/emoji-upside-down-face.svg new file mode 100644 index 00000000..da14ad83 --- /dev/null +++ b/express/icons/emoji-upside-down-face.svg @@ -0,0 +1,287 @@ + + + + diff --git a/express/icons/enhance-image-44-n.svg b/express/icons/enhance-image-44-n.svg new file mode 100755 index 00000000..08b75d22 --- /dev/null +++ b/express/icons/enhance-image-44-n.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/express/icons/exchange.svg b/express/icons/exchange.svg new file mode 100644 index 00000000..91b222f4 --- /dev/null +++ b/express/icons/exchange.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/expand.svg b/express/icons/expand.svg new file mode 100644 index 00000000..7c1a4157 --- /dev/null +++ b/express/icons/expand.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/export-pdf-2.svg b/express/icons/export-pdf-2.svg new file mode 100644 index 00000000..fd6ebf48 --- /dev/null +++ b/express/icons/export-pdf-2.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/export-pdf.svg b/express/icons/export-pdf.svg new file mode 100644 index 00000000..23eb45c3 --- /dev/null +++ b/express/icons/export-pdf.svg @@ -0,0 +1,23 @@ + + + + + + + + + + diff --git a/express/icons/eye.svg b/express/icons/eye.svg new file mode 100644 index 00000000..b92a220b --- /dev/null +++ b/express/icons/eye.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/facebook-icon-white.svg b/express/icons/facebook-icon-white.svg new file mode 100644 index 00000000..a39d5b66 --- /dev/null +++ b/express/icons/facebook-icon-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/fb-icon-22.svg b/express/icons/fb-icon-22.svg new file mode 100644 index 00000000..c573c1ad --- /dev/null +++ b/express/icons/fb-icon-22.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/filter.svg b/express/icons/filter.svg new file mode 100644 index 00000000..f1fb6cd7 --- /dev/null +++ b/express/icons/filter.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/express/icons/flip-44-n.svg b/express/icons/flip-44-n.svg new file mode 100755 index 00000000..b6ad7921 --- /dev/null +++ b/express/icons/flip-44-n.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/flip-image-44-n.svg b/express/icons/flip-image-44-n.svg new file mode 100755 index 00000000..1f1ac18a --- /dev/null +++ b/express/icons/flip-image-44-n.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/flyer-22.svg b/express/icons/flyer-22.svg new file mode 100644 index 00000000..3e899d77 --- /dev/null +++ b/express/icons/flyer-22.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/flyer-icon-22.svg b/express/icons/flyer-icon-22.svg new file mode 100644 index 00000000..ad9494fb --- /dev/null +++ b/express/icons/flyer-icon-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/flyer.svg b/express/icons/flyer.svg new file mode 100644 index 00000000..f2d32761 --- /dev/null +++ b/express/icons/flyer.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/fonts-22.svg b/express/icons/fonts-22.svg new file mode 100644 index 00000000..2932c1f4 --- /dev/null +++ b/express/icons/fonts-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/free-icon.svg b/express/icons/free-icon.svg new file mode 100644 index 00000000..dbed0e9a --- /dev/null +++ b/express/icons/free-icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/galaxy-store.svg b/express/icons/galaxy-store.svg new file mode 100644 index 00000000..43811602 --- /dev/null +++ b/express/icons/galaxy-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/express/icons/gen-fill-upload.svg b/express/icons/gen-fill-upload.svg new file mode 100644 index 00000000..9ab09d6f --- /dev/null +++ b/express/icons/gen-fill-upload.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/google-store-borderless.svg b/express/icons/google-store-borderless.svg new file mode 100644 index 00000000..c29b8cbc --- /dev/null +++ b/express/icons/google-store-borderless.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/google-store.svg b/express/icons/google-store.svg new file mode 100644 index 00000000..a01a8d87 --- /dev/null +++ b/express/icons/google-store.svg @@ -0,0 +1,113 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/graphic-groups.svg b/express/icons/graphic-groups.svg new file mode 100644 index 00000000..c0bd4843 --- /dev/null +++ b/express/icons/graphic-groups.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/head-count.svg b/express/icons/head-count.svg new file mode 100644 index 00000000..50143446 --- /dev/null +++ b/express/icons/head-count.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/icon-brand.svg b/express/icons/icon-brand.svg new file mode 100644 index 00000000..1644449b --- /dev/null +++ b/express/icons/icon-brand.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/icon-calendar.svg b/express/icons/icon-calendar.svg new file mode 100644 index 00000000..6b07883c --- /dev/null +++ b/express/icons/icon-calendar.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/express/icons/icon-creative-cloud.svg b/express/icons/icon-creative-cloud.svg new file mode 100644 index 00000000..23a6ab93 --- /dev/null +++ b/express/icons/icon-creative-cloud.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/icon-device.svg b/express/icons/icon-device.svg new file mode 100644 index 00000000..d3cd0883 --- /dev/null +++ b/express/icons/icon-device.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/icon-editor-choice.svg b/express/icons/icon-editor-choice.svg new file mode 100644 index 00000000..7753d8c2 --- /dev/null +++ b/express/icons/icon-editor-choice.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/icon-editors-choice.png b/express/icons/icon-editors-choice.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec73296a291cde02a8b6d2162f5244189d73375 GIT binary patch literal 3369 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 + + + + + diff --git a/express/icons/icon-learnmore.svg b/express/icons/icon-learnmore.svg new file mode 100644 index 00000000..77757203 --- /dev/null +++ b/express/icons/icon-learnmore.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/icon-pdf.svg b/express/icons/icon-pdf.svg new file mode 100644 index 00000000..030d4b60 --- /dev/null +++ b/express/icons/icon-pdf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/express/icons/icon-quickaction-black.svg b/express/icons/icon-quickaction-black.svg new file mode 100644 index 00000000..0b03bf8b --- /dev/null +++ b/express/icons/icon-quickaction-black.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/icon-quickaction.svg b/express/icons/icon-quickaction.svg new file mode 100644 index 00000000..268c5002 --- /dev/null +++ b/express/icons/icon-quickaction.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/icon-stock.svg b/express/icons/icon-stock.svg new file mode 100644 index 00000000..1f026a7a --- /dev/null +++ b/express/icons/icon-stock.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/icon-storage.svg b/express/icons/icon-storage.svg new file mode 100644 index 00000000..d00dd5fa --- /dev/null +++ b/express/icons/icon-storage.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/icon-templates.svg b/express/icons/icon-templates.svg new file mode 100644 index 00000000..72a527a1 --- /dev/null +++ b/express/icons/icon-templates.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/ig-icon-22.svg b/express/icons/ig-icon-22.svg new file mode 100644 index 00000000..7b18e07c --- /dev/null +++ b/express/icons/ig-icon-22.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/illustrator.svg b/express/icons/illustrator.svg new file mode 100644 index 00000000..6dd41a7c --- /dev/null +++ b/express/icons/illustrator.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/express/icons/image-accent.svg b/express/icons/image-accent.svg new file mode 100644 index 00000000..64c3bb23 --- /dev/null +++ b/express/icons/image-accent.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/image-effect-44-n.svg b/express/icons/image-effect-44-n.svg new file mode 100755 index 00000000..d1f53a7c --- /dev/null +++ b/express/icons/image-effect-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/image-filter-44-n.svg b/express/icons/image-filter-44-n.svg new file mode 100755 index 00000000..28f09cb3 --- /dev/null +++ b/express/icons/image-filter-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/image-wire.svg b/express/icons/image-wire.svg new file mode 100644 index 00000000..2e4cbc15 --- /dev/null +++ b/express/icons/image-wire.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/included.svg b/express/icons/included.svg new file mode 100644 index 00000000..a4f68e1e --- /dev/null +++ b/express/icons/included.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/express/icons/indesign.svg b/express/icons/indesign.svg new file mode 100644 index 00000000..edef863c --- /dev/null +++ b/express/icons/indesign.svg @@ -0,0 +1,16 @@ + + +Adobe InDesign CC logo + + + + + + + + + + diff --git a/express/icons/info.svg b/express/icons/info.svg new file mode 100644 index 00000000..85760aaa --- /dev/null +++ b/express/icons/info.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/infographic.svg b/express/icons/infographic.svg new file mode 100644 index 00000000..50adbf64 --- /dev/null +++ b/express/icons/infographic.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/instagram-icon-white.svg b/express/icons/instagram-icon-white.svg new file mode 100644 index 00000000..fa7fadb5 --- /dev/null +++ b/express/icons/instagram-icon-white.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/invitation.svg b/express/icons/invitation.svg new file mode 100644 index 00000000..7e8bae1c --- /dev/null +++ b/express/icons/invitation.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/invite_44.svg b/express/icons/invite_44.svg new file mode 100644 index 00000000..d180ca55 --- /dev/null +++ b/express/icons/invite_44.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/invoice_44.svg b/express/icons/invoice_44.svg new file mode 100644 index 00000000..8a9e65cd --- /dev/null +++ b/express/icons/invoice_44.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/label_44.svg b/express/icons/label_44.svg new file mode 100644 index 00000000..7552841b --- /dev/null +++ b/express/icons/label_44.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/large_grid.svg b/express/icons/large_grid.svg new file mode 100644 index 00000000..e7335e17 --- /dev/null +++ b/express/icons/large_grid.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/link.svg b/express/icons/link.svg new file mode 100644 index 00000000..39aabf74 --- /dev/null +++ b/express/icons/link.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/logo-22.svg b/express/icons/logo-22.svg new file mode 100644 index 00000000..39b78979 --- /dev/null +++ b/express/icons/logo-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/logo-icon-22.svg b/express/icons/logo-icon-22.svg new file mode 100644 index 00000000..5533bba9 --- /dev/null +++ b/express/icons/logo-icon-22.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/logo-icon-white.svg b/express/icons/logo-icon-white.svg new file mode 100644 index 00000000..1090f2ef --- /dev/null +++ b/express/icons/logo-icon-white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/icons/logo_generator_22_n.svg b/express/icons/logo_generator_22_n.svg new file mode 100644 index 00000000..a0be2dc6 --- /dev/null +++ b/express/icons/logo_generator_22_n.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/logo_generator_44_n.svg b/express/icons/logo_generator_44_n.svg new file mode 100644 index 00000000..5536ff5c --- /dev/null +++ b/express/icons/logo_generator_44_n.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/logogenerator-22-n.svg b/express/icons/logogenerator-22-n.svg new file mode 100644 index 00000000..a0be2dc6 --- /dev/null +++ b/express/icons/logogenerator-22-n.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/logogenerator-44-n.svg b/express/icons/logogenerator-44-n.svg new file mode 100644 index 00000000..5536ff5c --- /dev/null +++ b/express/icons/logogenerator-44-n.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/looks-55-n.svg b/express/icons/looks-55-n.svg new file mode 100755 index 00000000..f557bc14 --- /dev/null +++ b/express/icons/looks-55-n.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/express/icons/lottie-scroll.json b/express/icons/lottie-scroll.json new file mode 100644 index 00000000..494f26d7 --- /dev/null +++ b/express/icons/lottie-scroll.json @@ -0,0 +1 @@ +{"v":"5.5.2","fr":30,"ip":0,"op":90,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Ball","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":5,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"t":70,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":250,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.689],"y":[1]},"o":{"x":[0.213],"y":[1.081]},"t":10,"s":[255]},{"i":{"x":[0.284],"y":[1]},"o":{"x":[0.918],"y":[0]},"t":24,"s":[242.838]},{"i":{"x":[0.348],"y":[1]},"o":{"x":[0.589],"y":[-0.009]},"t":50,"s":[426.703]},{"t":60,"s":[409.703]}],"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[114,114,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.594,28.594],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.3607843137254902,0.3607843137254902,0.8784313725490196,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.297,-72.703],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":90,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Mouse","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":0,"k":250,"ix":3},"y":{"a":0,"k":250,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,-58.818],[0,0],[-58.818,0],[0,0],[0,58.818],[0,0],[58.818,0]],"o":[[0,0],[-58.818,0],[0,0],[0,58.818],[0,0],[58.818,0],[0,0],[0,-58.818],[0,0]],"v":[[0.5,-186.5],[0.5,-186.5],[-106,-80],[-106,81],[0.5,187.5],[0.5,187.5],[107,81],[107,-80],[0.5,-186.5]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-47.696,0],[0,-47.696],[0,0],[47.696,0],[0,47.696],[0,0]],"o":[[47.696,0],[0,0],[0,47.696],[-47.696,0],[0,0],[0,-47.696]],"v":[[0,-167],[86.5,-80.5],[86.5,80.5],[0,167],[-86.5,80.5],[-86.5,-80.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.3607843137254902,0.3607843137254902,0.8784313725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":18,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":90,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/express/icons/medium_grid.svg b/express/icons/medium_grid.svg new file mode 100644 index 00000000..77a90f95 --- /dev/null +++ b/express/icons/medium_grid.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/meme-22.svg b/express/icons/meme-22.svg new file mode 100644 index 00000000..32426942 --- /dev/null +++ b/express/icons/meme-22.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/meme_44.svg b/express/icons/meme_44.svg new file mode 100644 index 00000000..3057ceb4 --- /dev/null +++ b/express/icons/meme_44.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/menu_44.svg b/express/icons/menu_44.svg new file mode 100644 index 00000000..a38585f5 --- /dev/null +++ b/express/icons/menu_44.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/merge-video-22.svg b/express/icons/merge-video-22.svg new file mode 100644 index 00000000..18aee8d0 --- /dev/null +++ b/express/icons/merge-video-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/merge.svg b/express/icons/merge.svg new file mode 100644 index 00000000..95bf28d8 --- /dev/null +++ b/express/icons/merge.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/express/icons/microsoft-store-rounded.svg b/express/icons/microsoft-store-rounded.svg new file mode 100644 index 00000000..dae3d9db --- /dev/null +++ b/express/icons/microsoft-store-rounded.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/express/icons/microsoft-store.svg b/express/icons/microsoft-store.svg new file mode 100644 index 00000000..36e524ee --- /dev/null +++ b/express/icons/microsoft-store.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/multi-fonts.svg b/express/icons/multi-fonts.svg new file mode 100644 index 00000000..c87567bd --- /dev/null +++ b/express/icons/multi-fonts.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/multipage-static-badge.svg b/express/icons/multipage-static-badge.svg new file mode 100755 index 00000000..df7e3f68 --- /dev/null +++ b/express/icons/multipage-static-badge.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/express/icons/multipage-video-badge.svg b/express/icons/multipage-video-badge.svg new file mode 100755 index 00000000..98774412 --- /dev/null +++ b/express/icons/multipage-video-badge.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/news-letter.svg b/express/icons/news-letter.svg new file mode 100644 index 00000000..23f111ff --- /dev/null +++ b/express/icons/news-letter.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/not-included.svg b/express/icons/not-included.svg new file mode 100644 index 00000000..9349adfa --- /dev/null +++ b/express/icons/not-included.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/express/icons/order-asc.svg b/express/icons/order-asc.svg new file mode 100644 index 00000000..3849c2f6 --- /dev/null +++ b/express/icons/order-asc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/express/icons/order-dsc.svg b/express/icons/order-dsc.svg new file mode 100644 index 00000000..d4357b6d --- /dev/null +++ b/express/icons/order-dsc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/express/icons/organize-pdf.svg b/express/icons/organize-pdf.svg new file mode 100644 index 00000000..1c421cf6 --- /dev/null +++ b/express/icons/organize-pdf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/organizer.svg b/express/icons/organizer.svg new file mode 100644 index 00000000..08544eaa --- /dev/null +++ b/express/icons/organizer.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/paint-black.svg b/express/icons/paint-black.svg new file mode 100644 index 00000000..643b8d8f --- /dev/null +++ b/express/icons/paint-black.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/pause-video-light.svg b/express/icons/pause-video-light.svg new file mode 100644 index 00000000..4e3d3805 --- /dev/null +++ b/express/icons/pause-video-light.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/pause-video.svg b/express/icons/pause-video.svg new file mode 100644 index 00000000..5a5ae9f8 --- /dev/null +++ b/express/icons/pause-video.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/pdf-quick-actions.svg b/express/icons/pdf-quick-actions.svg new file mode 100644 index 00000000..bc7c150f --- /dev/null +++ b/express/icons/pdf-quick-actions.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/express/icons/photos-22.svg b/express/icons/photos-22.svg new file mode 100644 index 00000000..e046ceea --- /dev/null +++ b/express/icons/photos-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/photoshop-express.svg b/express/icons/photoshop-express.svg new file mode 100644 index 00000000..a0c22104 --- /dev/null +++ b/express/icons/photoshop-express.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/photoshop.svg b/express/icons/photoshop.svg new file mode 100644 index 00000000..b8a06aea --- /dev/null +++ b/express/icons/photoshop.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/pinterest-icon-white.svg b/express/icons/pinterest-icon-white.svg new file mode 100644 index 00000000..4065e3e1 --- /dev/null +++ b/express/icons/pinterest-icon-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/play-button.svg b/express/icons/play-button.svg new file mode 100755 index 00000000..5fa4d974 --- /dev/null +++ b/express/icons/play-button.svg @@ -0,0 +1,7 @@ + + + + diff --git a/express/icons/play-video-light.svg b/express/icons/play-video-light.svg new file mode 100644 index 00000000..de45fd22 --- /dev/null +++ b/express/icons/play-video-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/play-video.svg b/express/icons/play-video.svg new file mode 100644 index 00000000..8129f9d3 --- /dev/null +++ b/express/icons/play-video.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/play.svg b/express/icons/play.svg new file mode 100644 index 00000000..f1f03e0e --- /dev/null +++ b/express/icons/play.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/express/icons/plus-animation.json b/express/icons/plus-animation.json new file mode 100644 index 00000000..aba3b3ba --- /dev/null +++ b/express/icons/plus-animation.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE ","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":69,"w":1920,"h":1080,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Dot 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.491],"y":[1]},"o":{"x":[0.518],"y":[0]},"t":12,"s":[0]},{"t":69,"s":[360]}],"ix":10},"p":{"a":0,"k":[960,539.875,0],"ix":2},"a":{"a":0,"k":[-639.738,-114.821,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.258,28.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-639.738,-263.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":70,"st":12,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Dot 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.491],"y":[1]},"o":{"x":[0.518],"y":[0]},"t":9,"s":[0]},{"t":67,"s":[360]}],"ix":10},"p":{"a":0,"k":[960,539.875,0],"ix":2},"a":{"a":0,"k":[-639.738,-114.821,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.258,28.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-639.738,-263.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":70,"st":9,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Dot 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.491],"y":[1]},"o":{"x":[0.518],"y":[0]},"t":6,"s":[0]},{"t":65,"s":[360]}],"ix":10},"p":{"a":0,"k":[960,539.875,0],"ix":2},"a":{"a":0,"k":[-639.738,-114.821,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.258,28.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-639.738,-263.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":6,"op":70,"st":6,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Dot 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.491],"y":[1]},"o":{"x":[0.518],"y":[0]},"t":3,"s":[0]},{"t":63,"s":[360]}],"ix":10},"p":{"a":0,"k":[960,539.875,0],"ix":2},"a":{"a":0,"k":[-639.738,-114.821,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.258,28.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-639.738,-263.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":3,"op":70,"st":3,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Dot","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.491],"y":[1]},"o":{"x":[0.518],"y":[0]},"t":0,"s":[0]},{"t":61,"s":[360]}],"ix":10},"p":{"a":0,"k":[960,539.875,0],"ix":2},"a":{"a":0,"k":[-639.738,-114.821,0],"ix":1},"s":{"a":0,"k":[150,150,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[28.258,28.258],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-639.738,-263.696],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":70,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":1920,"sh":1080,"sc":"#ffffff","ip":300,"op":300,"st":0,"bm":0,"hidden":0}],"markers":[]} \ No newline at end of file diff --git a/express/icons/plus-heavy.svg b/express/icons/plus-heavy.svg new file mode 100644 index 00000000..0be99e4a --- /dev/null +++ b/express/icons/plus-heavy.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/plus-icon-22.svg b/express/icons/plus-icon-22.svg new file mode 100644 index 00000000..f6272d88 --- /dev/null +++ b/express/icons/plus-icon-22.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/plus-icon.svg b/express/icons/plus-icon.svg new file mode 100644 index 00000000..b1eb7167 --- /dev/null +++ b/express/icons/plus-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/express/icons/plus.svg b/express/icons/plus.svg new file mode 100644 index 00000000..5b088c08 --- /dev/null +++ b/express/icons/plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/express/icons/poster-2.svg b/express/icons/poster-2.svg new file mode 100644 index 00000000..4754f60b --- /dev/null +++ b/express/icons/poster-2.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/poster-22.svg b/express/icons/poster-22.svg new file mode 100644 index 00000000..a2537413 --- /dev/null +++ b/express/icons/poster-22.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/poster-icon-22.svg b/express/icons/poster-icon-22.svg new file mode 100644 index 00000000..d2b0581a --- /dev/null +++ b/express/icons/poster-icon-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/poster.svg b/express/icons/poster.svg new file mode 100644 index 00000000..6706054d --- /dev/null +++ b/express/icons/poster.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/pr-express.svg b/express/icons/pr-express.svg new file mode 100644 index 00000000..f96349a9 --- /dev/null +++ b/express/icons/pr-express.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/premiere-express.svg b/express/icons/premiere-express.svg new file mode 100644 index 00000000..b98d2f89 --- /dev/null +++ b/express/icons/premiere-express.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/express/icons/premiere-rush.svg b/express/icons/premiere-rush.svg new file mode 100644 index 00000000..fa295f58 --- /dev/null +++ b/express/icons/premiere-rush.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/premium-crown-white.svg b/express/icons/premium-crown-white.svg new file mode 100644 index 00000000..755ac255 --- /dev/null +++ b/express/icons/premium-crown-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/premium-icon.svg b/express/icons/premium-icon.svg new file mode 100644 index 00000000..b775df15 --- /dev/null +++ b/express/icons/premium-icon.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/premium-remove-background.svg b/express/icons/premium-remove-background.svg new file mode 100644 index 00000000..5d2b307b --- /dev/null +++ b/express/icons/premium-remove-background.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/express/icons/premium-template.svg b/express/icons/premium-template.svg new file mode 100644 index 00000000..83da5abf --- /dev/null +++ b/express/icons/premium-template.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/premium.svg b/express/icons/premium.svg new file mode 100644 index 00000000..624d6fc9 --- /dev/null +++ b/express/icons/premium.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/presentation.svg b/express/icons/presentation.svg new file mode 100644 index 00000000..094f1ecb --- /dev/null +++ b/express/icons/presentation.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/pricing-admin.svg b/express/icons/pricing-admin.svg new file mode 100644 index 00000000..98997833 --- /dev/null +++ b/express/icons/pricing-admin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/pricing-corporate.svg b/express/icons/pricing-corporate.svg new file mode 100644 index 00000000..301d5897 --- /dev/null +++ b/express/icons/pricing-corporate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/icons/pricing-history.svg b/express/icons/pricing-history.svg new file mode 100644 index 00000000..48e4194b --- /dev/null +++ b/express/icons/pricing-history.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/pricing-import.svg b/express/icons/pricing-import.svg new file mode 100644 index 00000000..25b25897 --- /dev/null +++ b/express/icons/pricing-import.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/pricing-sharing.svg b/express/icons/pricing-sharing.svg new file mode 100644 index 00000000..74da8a1e --- /dev/null +++ b/express/icons/pricing-sharing.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/pricing-support.svg b/express/icons/pricing-support.svg new file mode 100644 index 00000000..dd58218e --- /dev/null +++ b/express/icons/pricing-support.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/profile_pic_44.svg b/express/icons/profile_pic_44.svg new file mode 100644 index 00000000..d8dd8bb8 --- /dev/null +++ b/express/icons/profile_pic_44.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/promote-accent.svg b/express/icons/promote-accent.svg new file mode 100644 index 00000000..f735992a --- /dev/null +++ b/express/icons/promote-accent.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/promote.svg b/express/icons/promote.svg new file mode 100644 index 00000000..c98bc3eb --- /dev/null +++ b/express/icons/promote.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/ps-express.svg b/express/icons/ps-express.svg new file mode 100644 index 00000000..456e4768 --- /dev/null +++ b/express/icons/ps-express.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/purple-arrows.json b/express/icons/purple-arrows.json new file mode 100644 index 00000000..3195cc2d --- /dev/null +++ b/express/icons/purple-arrows.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":30,"w":500,"h":500,"nm":"arrow animation","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Layer 5 Outlines","sr":1,"ks":{"o":{"a":0,"k":50,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":2,"s":[250,178,0],"to":[0,6.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[250,218.00000000000003,0],"to":[0,0,0],"ti":[0,6.667,0]},{"t":30,"s":[250,178,0]}],"ix":2},"a":{"a":0,"k":[72.596,41.955,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[57.596,-26.956],[-0.001,26.956],[-57.597,-26.956]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.3607843137254902,0.3607843137254902,0.8784313725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[72.596,41.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":35,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 4 Outlines","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":3,"s":[250,250.99999999999997,0],"to":[0,6.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":17,"s":[250,291,0],"to":[0,0,0],"ti":[0,6.667,0]},{"t":32,"s":[250,250.99999999999997,0]}],"ix":2},"a":{"a":0,"k":[72.596,41.955,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[57.596,-26.955],[-0.001,26.955],[-57.597,-26.955]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.3607843137254902,0.3607843137254902,0.8784313725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[72.596,41.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":35,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 3 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[250,324,0],"to":[0,6.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[250,364,0],"to":[0,0,0],"ti":[0,6.667,0]},{"t":34,"s":[250,324,0]}],"ix":2},"a":{"a":0,"k":[132.596,101.955,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[57.596,-26.955],[-0.001,26.955],[-57.597,-26.955]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.3607843137254902,0.3607843137254902,0.8784313725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":30,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[132.596,101.955],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":35,"op":35,"st":0,"bm":0,"hidden":0}],"markers":[]} \ No newline at end of file diff --git a/express/icons/qr-code.svg b/express/icons/qr-code.svg new file mode 100644 index 00000000..fa1708ad --- /dev/null +++ b/express/icons/qr-code.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/quick-action-accent.svg b/express/icons/quick-action-accent.svg new file mode 100644 index 00000000..41154658 --- /dev/null +++ b/express/icons/quick-action-accent.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/ratings-android.svg b/express/icons/ratings-android.svg new file mode 100644 index 00000000..b23357bc --- /dev/null +++ b/express/icons/ratings-android.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/express/icons/refine-cutout.svg b/express/icons/refine-cutout.svg new file mode 100644 index 00000000..e0ff5673 --- /dev/null +++ b/express/icons/refine-cutout.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/express/icons/remove-background-22.svg b/express/icons/remove-background-22.svg new file mode 100644 index 00000000..e2699b71 --- /dev/null +++ b/express/icons/remove-background-22.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/express/icons/remove-background.svg b/express/icons/remove-background.svg new file mode 100644 index 00000000..b1f2a1d2 --- /dev/null +++ b/express/icons/remove-background.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/report.svg b/express/icons/report.svg new file mode 100644 index 00000000..9e486a65 --- /dev/null +++ b/express/icons/report.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/resize-22.svg b/express/icons/resize-22.svg new file mode 100644 index 00000000..504dfd63 --- /dev/null +++ b/express/icons/resize-22.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/resize-content.svg b/express/icons/resize-content.svg new file mode 100644 index 00000000..967c2ad2 --- /dev/null +++ b/express/icons/resize-content.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/resize.svg b/express/icons/resize.svg new file mode 100644 index 00000000..604e6579 --- /dev/null +++ b/express/icons/resize.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/express/icons/resume.svg b/express/icons/resume.svg new file mode 100644 index 00000000..05ab9f08 --- /dev/null +++ b/express/icons/resume.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/reverse.svg b/express/icons/reverse.svg new file mode 100644 index 00000000..4f2ce2be --- /dev/null +++ b/express/icons/reverse.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/express/icons/rotate-44-n.svg b/express/icons/rotate-44-n.svg new file mode 100755 index 00000000..281fbe7e --- /dev/null +++ b/express/icons/rotate-44-n.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/express/icons/rotate-image-44-n.svg b/express/icons/rotate-image-44-n.svg new file mode 100755 index 00000000..dff54d23 --- /dev/null +++ b/express/icons/rotate-image-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/rotate-video-44-n.svg b/express/icons/rotate-video-44-n.svg new file mode 100755 index 00000000..5f0efd39 --- /dev/null +++ b/express/icons/rotate-video-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/scratch-icon-22.svg b/express/icons/scratch-icon-22.svg new file mode 100644 index 00000000..bcc39ae8 --- /dev/null +++ b/express/icons/scratch-icon-22.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/express/icons/search-clear.svg b/express/icons/search-clear.svg new file mode 100644 index 00000000..516d900f --- /dev/null +++ b/express/icons/search-clear.svg @@ -0,0 +1,4 @@ + + + diff --git a/express/icons/search.svg b/express/icons/search.svg new file mode 100644 index 00000000..99a1e099 --- /dev/null +++ b/express/icons/search.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/express/icons/share-arrow.svg b/express/icons/share-arrow.svg new file mode 100755 index 00000000..e0030531 --- /dev/null +++ b/express/icons/share-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/sharpen-44-n.svg b/express/icons/sharpen-44-n.svg new file mode 100755 index 00000000..e0336aa5 --- /dev/null +++ b/express/icons/sharpen-44-n.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/express/icons/sharpen-image-44-n.svg b/express/icons/sharpen-image-44-n.svg new file mode 100755 index 00000000..aed1026f --- /dev/null +++ b/express/icons/sharpen-image-44-n.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/express/icons/small_grid.svg b/express/icons/small_grid.svg new file mode 100644 index 00000000..631d166f --- /dev/null +++ b/express/icons/small_grid.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/social-content-22.svg b/express/icons/social-content-22.svg new file mode 100644 index 00000000..170aa715 --- /dev/null +++ b/express/icons/social-content-22.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/social-linkedin.svg b/express/icons/social-linkedin.svg new file mode 100644 index 00000000..f29954b9 --- /dev/null +++ b/express/icons/social-linkedin.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/social-twitter.svg b/express/icons/social-twitter.svg new file mode 100644 index 00000000..10d0682b --- /dev/null +++ b/express/icons/social-twitter.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/sort.svg b/express/icons/sort.svg new file mode 100644 index 00000000..eeb18357 --- /dev/null +++ b/express/icons/sort.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/spark.svg b/express/icons/spark.svg new file mode 100644 index 00000000..95ff0b19 --- /dev/null +++ b/express/icons/spark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/express/icons/spectrum-back.svg b/express/icons/spectrum-back.svg new file mode 100644 index 00000000..4b9237d9 --- /dev/null +++ b/express/icons/spectrum-back.svg @@ -0,0 +1,11 @@ + + + + + S Back 18 N + + diff --git a/express/icons/spectrum-close.svg b/express/icons/spectrum-close.svg new file mode 100644 index 00000000..f08f1530 --- /dev/null +++ b/express/icons/spectrum-close.svg @@ -0,0 +1,11 @@ + + + + + S Close 18 N + + diff --git a/express/icons/spectrum-copy.svg b/express/icons/spectrum-copy.svg new file mode 100644 index 00000000..ce8da52c --- /dev/null +++ b/express/icons/spectrum-copy.svg @@ -0,0 +1,31 @@ + + + + + S Copy 18 N + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/spectrum-preview.svg b/express/icons/spectrum-preview.svg new file mode 100644 index 00000000..4a6608d1 --- /dev/null +++ b/express/icons/spectrum-preview.svg @@ -0,0 +1,12 @@ + + + + + S Preview 18 N + + + diff --git a/express/icons/spectrum-search.svg b/express/icons/spectrum-search.svg new file mode 100644 index 00000000..7dda8a2c --- /dev/null +++ b/express/icons/spectrum-search.svg @@ -0,0 +1,11 @@ + + + + + S Search 18 N + + diff --git a/express/icons/split-video-44-n.svg b/express/icons/split-video-44-n.svg new file mode 100755 index 00000000..e331f2d6 --- /dev/null +++ b/express/icons/split-video-44-n.svg @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/express/icons/star-accent.svg b/express/icons/star-accent.svg new file mode 100644 index 00000000..7aac3b36 --- /dev/null +++ b/express/icons/star-accent.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/star-wire.svg b/express/icons/star-wire.svg new file mode 100644 index 00000000..333c1281 --- /dev/null +++ b/express/icons/star-wire.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/sticker_44.svg b/express/icons/sticker_44.svg new file mode 100644 index 00000000..fce2f567 --- /dev/null +++ b/express/icons/sticker_44.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/stock-pricing.svg b/express/icons/stock-pricing.svg new file mode 100644 index 00000000..e77eccbd --- /dev/null +++ b/express/icons/stock-pricing.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/express/icons/success-check.svg b/express/icons/success-check.svg new file mode 100644 index 00000000..55e384c7 --- /dev/null +++ b/express/icons/success-check.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/template-animated.svg b/express/icons/template-animated.svg new file mode 100644 index 00000000..b0660d0b --- /dev/null +++ b/express/icons/template-animated.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/express/icons/template-free-accent.svg b/express/icons/template-free-accent.svg new file mode 100755 index 00000000..86b10c70 --- /dev/null +++ b/express/icons/template-free-accent.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/template-free.svg b/express/icons/template-free.svg new file mode 100644 index 00000000..c4ae32d0 --- /dev/null +++ b/express/icons/template-free.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/template-lightning.svg b/express/icons/template-lightning.svg new file mode 100644 index 00000000..71f16c77 --- /dev/null +++ b/express/icons/template-lightning.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/template-premium-and-free.svg b/express/icons/template-premium-and-free.svg new file mode 100644 index 00000000..ecd1a4e3 --- /dev/null +++ b/express/icons/template-premium-and-free.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/express/icons/template-premium.svg b/express/icons/template-premium.svg new file mode 100644 index 00000000..f2467aee --- /dev/null +++ b/express/icons/template-premium.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/template-search.svg b/express/icons/template-search.svg new file mode 100644 index 00000000..c1bd9131 --- /dev/null +++ b/express/icons/template-search.svg @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/express/icons/template-static-and-animated.svg b/express/icons/template-static-and-animated.svg new file mode 100644 index 00000000..d3fd5552 --- /dev/null +++ b/express/icons/template-static-and-animated.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/express/icons/template-static.svg b/express/icons/template-static.svg new file mode 100644 index 00000000..6daa0b56 --- /dev/null +++ b/express/icons/template-static.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/express/icons/templates-22.svg b/express/icons/templates-22.svg new file mode 100644 index 00000000..5f29286f --- /dev/null +++ b/express/icons/templates-22.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/templates-black.svg b/express/icons/templates-black.svg new file mode 100644 index 00000000..d436e7f2 --- /dev/null +++ b/express/icons/templates-black.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/thumbup-accent.svg b/express/icons/thumbup-accent.svg new file mode 100644 index 00000000..c3af2578 --- /dev/null +++ b/express/icons/thumbup-accent.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/thumbup.svg b/express/icons/thumbup.svg new file mode 100644 index 00000000..e85bb2fc --- /dev/null +++ b/express/icons/thumbup.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/tiktok-icon-22.svg b/express/icons/tiktok-icon-22.svg new file mode 100644 index 00000000..71a79832 --- /dev/null +++ b/express/icons/tiktok-icon-22.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/tiktok.svg b/express/icons/tiktok.svg new file mode 100644 index 00000000..bc5fcd5f --- /dev/null +++ b/express/icons/tiktok.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/trim-video-22.svg b/express/icons/trim-video-22.svg new file mode 100644 index 00000000..448b84d7 --- /dev/null +++ b/express/icons/trim-video-22.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/express/icons/trim.svg b/express/icons/trim.svg new file mode 100644 index 00000000..129d5d16 --- /dev/null +++ b/express/icons/trim.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/express/icons/twitter-icon-white.svg b/express/icons/twitter-icon-white.svg new file mode 100644 index 00000000..25d67e05 --- /dev/null +++ b/express/icons/twitter-icon-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/express/icons/update-cloud-storage.svg b/express/icons/update-cloud-storage.svg new file mode 100644 index 00000000..4590685c --- /dev/null +++ b/express/icons/update-cloud-storage.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/express/icons/video-accent.svg b/express/icons/video-accent.svg new file mode 100644 index 00000000..d991c488 --- /dev/null +++ b/express/icons/video-accent.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/express/icons/video-badge.svg b/express/icons/video-badge.svg new file mode 100755 index 00000000..93f563ba --- /dev/null +++ b/express/icons/video-badge.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/video-creation.svg b/express/icons/video-creation.svg new file mode 100644 index 00000000..1a67ea38 --- /dev/null +++ b/express/icons/video-creation.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/express/icons/video.svg b/express/icons/video.svg new file mode 100644 index 00000000..e9b86dd6 --- /dev/null +++ b/express/icons/video.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/videocaption-44-n.svg b/express/icons/videocaption-44-n.svg new file mode 100644 index 00000000..870d6931 --- /dev/null +++ b/express/icons/videocaption-44-n.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/express/icons/videos-22.svg b/express/icons/videos-22.svg new file mode 100644 index 00000000..f99a4608 --- /dev/null +++ b/express/icons/videos-22.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/visibility-off.svg b/express/icons/visibility-off.svg new file mode 100644 index 00000000..60c452df --- /dev/null +++ b/express/icons/visibility-off.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/visibility-on.svg b/express/icons/visibility-on.svg new file mode 100644 index 00000000..b92a220b --- /dev/null +++ b/express/icons/visibility-on.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/express/icons/web-and-mobile-app.svg b/express/icons/web-and-mobile-app.svg new file mode 100644 index 00000000..8c8dbd95 --- /dev/null +++ b/express/icons/web-and-mobile-app.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/express/icons/worksheet.svg b/express/icons/worksheet.svg new file mode 100644 index 00000000..c392df3b --- /dev/null +++ b/express/icons/worksheet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/express/scripts/utils/icons.js b/express/scripts/utils/icons.js index a51d7494..07198fe2 100644 --- a/express/scripts/utils/icons.js +++ b/express/scripts/utils/icons.js @@ -2,7 +2,7 @@ import { getLibs, toClassName } from '../utils.js'; const { createTag, getConfig } = await import(`${getLibs()}/utils/utils.js`); -export function getIcon(icons, alt, size = 44) { +export function getIconDeprecated(icons, alt, size = 44) { // eslint-disable-next-line no-param-reassign icons = Array.isArray(icons) ? icons : [icons]; const [defaultIcon, mobileIcon] = icons; @@ -114,9 +114,9 @@ export function getIcon(icons, alt, size = 44) { }">`; } -export function getIconElement(icons, size, alt, additionalClassName) { +export function getIconElementDeprecated(icons, size, alt, additionalClassName) { const div = createTag('div'); - div.innerHTML = getIcon(icons, alt, size); + div.innerHTML = getIconDeprecated(icons, alt, size); if (additionalClassName) { div.firstElementChild.classList.add(additionalClassName); @@ -169,7 +169,7 @@ export async function fixIcons(el = document) { } } $picture.parentElement - .replaceChild(getIconElement([icon, mobileIcon], size, altText), $picture); + .replaceChild(getIconElementDeprecated([icon, mobileIcon], size, altText), $picture); } } }); diff --git a/express/scripts/widgets/free-plan.js b/express/scripts/widgets/free-plan.js index 0fb6d325..2616cd6e 100644 --- a/express/scripts/widgets/free-plan.js +++ b/express/scripts/widgets/free-plan.js @@ -1,5 +1,5 @@ import { getLibs, getLottie, lazyLoadLottiePlayer } from '../utils.js'; -import { getIconElement } from '../utils/icons.js'; +import { getIconElementDeprecated } from '../utils/icons.js'; let replaceKey; let getConfig; let createTag; let @@ -38,7 +38,7 @@ export async function buildFreePlanWidget(config) { widget.append(textDiv); if (checkmarks) { - textDiv.prepend(getIconElement('checkmark')); + textDiv.prepend(getIconElementDeprecated('checkmark')); } } }); From a34c8b204ae020a1d16b832b076505f225efa6e1 Mon Sep 17 00:00:00 2001 From: Victor Hargrave Date: Tue, 9 Apr 2024 13:25:50 +0200 Subject: [PATCH 28/34] update search marquee --- express/blocks/search-marquee/search-marquee.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/express/blocks/search-marquee/search-marquee.js b/express/blocks/search-marquee/search-marquee.js index 3c72006a..ae1613f0 100755 --- a/express/blocks/search-marquee/search-marquee.js +++ b/express/blocks/search-marquee/search-marquee.js @@ -1,6 +1,6 @@ import { getLibs } from '../../scripts/utils.js'; import { decorateButtonsDeprecated, addTempWrapperDeprecated } from '../../scripts/utils/decorate.js'; -import { getIconElement } from '../../scripts/utils/icons.js'; +import { getIconElementDeprecated } from '../../scripts/utils/icons.js'; import { buildFreePlanWidget } from '../../scripts/widgets/free-plan.js'; import buildCarousel from '../../scripts/widgets/carousel.js'; import fetchAllTemplatesMetadata from '../../scripts/utils/all-templates-metadata.js'; @@ -240,9 +240,9 @@ async function decorateSearchFunctions(block) { }); searchForm.append(searchBar); - const searchIcon = getIconElement('search'); + const searchIcon = getIconElementDeprecated('search'); searchIcon.loading = 'lazy'; - const searchClearIcon = getIconElement('search-clear'); + const searchClearIcon = getIconElementDeprecated('search-clear'); searchClearIcon.loading = 'lazy'; searchBarWrapper.append(searchIcon, searchClearIcon); searchBarWrapper.append(searchForm); @@ -284,9 +284,9 @@ async function buildSearchDropdown(block) { if (fromScratchLink) { const linkDiv = fromScratchLink.parentElement.parentElement; - const templateFreeAccentIcon = getIconElement('template-free-accent'); + const templateFreeAccentIcon = getIconElementDeprecated('template-free-accent'); templateFreeAccentIcon.loading = 'lazy'; - const arrowRightIcon = getIconElement('arrow-right'); + const arrowRightIcon = getIconElementDeprecated('arrow-right'); arrowRightIcon.loading = 'lazy'; fromScratchLink.prepend(templateFreeAccentIcon); fromScratchLink.append(arrowRightIcon); From 2db0b4eb8c87805609682d632932137954a2e180 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Mon, 22 Apr 2024 10:54:15 -0700 Subject: [PATCH 29/34] Update search-marquee.css --- express/blocks/search-marquee/search-marquee.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/express/blocks/search-marquee/search-marquee.css b/express/blocks/search-marquee/search-marquee.css index 0e2b1ebb..6914da70 100755 --- a/express/blocks/search-marquee/search-marquee.css +++ b/express/blocks/search-marquee/search-marquee.css @@ -231,6 +231,14 @@ main .search-marquee .hidden { display: none; } +main .search-marquee h1 { + margin : 0 +} + +main .search-marquee p { + margin : 32px; +} + @media (min-width: 900px) { main .search-marquee > div:first-of-type h1 { font-size: var(--heading-font-size-xl); From b3820d7b5b76b467fa5dbb257a6600eadf0a0403 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Mon, 22 Apr 2024 10:56:33 -0700 Subject: [PATCH 30/34] made CSS more specific --- express/blocks/search-marquee/search-marquee.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/express/blocks/search-marquee/search-marquee.css b/express/blocks/search-marquee/search-marquee.css index 6914da70..5303b2f7 100755 --- a/express/blocks/search-marquee/search-marquee.css +++ b/express/blocks/search-marquee/search-marquee.css @@ -231,11 +231,11 @@ main .search-marquee .hidden { display: none; } -main .search-marquee h1 { +main .search-marquee #hero-title { margin : 0 } -main .search-marquee p { +main .search-marquee #hero-title + p{ margin : 32px; } From 7e02bbb9b8fcad6e4f78e82407b0f80fc9a1a2a9 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Mon, 22 Apr 2024 11:06:01 -0700 Subject: [PATCH 31/34] Update decorate.js --- express/scripts/utils/decorate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/express/scripts/utils/decorate.js b/express/scripts/utils/decorate.js index d527067c..c23ddafd 100644 --- a/express/scripts/utils/decorate.js +++ b/express/scripts/utils/decorate.js @@ -1,4 +1,4 @@ -import { getIconElement } from './icons.js'; +import { getIconElementDeprecated } from './icons.js'; // This was only added for the blocks premigration. It is not to be used for new blocks. export function decorateButtonsDeprecated(el) { @@ -119,7 +119,7 @@ export function decorateSocialIcons($main) { if (icon) { $a.innerHTML = ''; - const $icon = getIconElement(icon, 22); + const $icon = getIconElementDeprecated(icon, 22); $icon.classList.add('social.is-visible'); $a.appendChild($icon); if ($parent.previousElementSibling && $parent.previousElementSibling.classList.contains('social-links')) { From a3633b3c67463eadd9a37f025d83b8e7c4e07806 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Mon, 22 Apr 2024 11:14:30 -0700 Subject: [PATCH 32/34] Update search-marquee.css --- express/blocks/search-marquee/search-marquee.css | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/express/blocks/search-marquee/search-marquee.css b/express/blocks/search-marquee/search-marquee.css index 5303b2f7..e0aeac6a 100755 --- a/express/blocks/search-marquee/search-marquee.css +++ b/express/blocks/search-marquee/search-marquee.css @@ -232,11 +232,13 @@ main .search-marquee .hidden { } main .search-marquee #hero-title { - margin : 0 + margin : 0; + text-align: center; } main .search-marquee #hero-title + p{ - margin : 32px; + margin : 32px 0 32px 0; + text-align: center; } @media (min-width: 900px) { From 660e70fef25857461b8244b89c2bd699d25d5888 Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Tue, 23 Apr 2024 08:23:19 -0700 Subject: [PATCH 33/34] Update template-list.js --- express/blocks/template-list/template-list.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/express/blocks/template-list/template-list.js b/express/blocks/template-list/template-list.js index 1c82beaa..8694cac6 100644 --- a/express/blocks/template-list/template-list.js +++ b/express/blocks/template-list/template-list.js @@ -9,7 +9,7 @@ import { import { addAnimationToggle, createOptimizedPicture, linkImage } from '../../scripts/utils/media.js'; import { fetchRelevantRows } from '../../scripts/utils/relevant.js'; -import { fixIcons, getIconElement } from '../../scripts/utils/icons.js'; +import { fixIcons, getIconElementDeprecated } from '../../scripts/utils/icons.js'; import { addTempWrapperDeprecated, decorateButtonsDeprecated, decorateSocialIcons } from '../../scripts/utils/decorate.js'; import { fetchBlockFragDeprecated } from '../../scripts/utils/loadBlock.js'; @@ -313,7 +313,7 @@ function populateTemplates(block, templates, props) { } } else { // add icon to 1st cell - const icon = getIconElement(toClassName(option)); + const icon = getIconElementDeprecated(toClassName(option)); icon.setAttribute('title', option); tmplt.children[0].append(icon); } From ca2e3b32dbc5ea01c17a2edb76aa0b593cc618fc Mon Sep 17 00:00:00 2001 From: Eric S Chen Date: Tue, 23 Apr 2024 08:30:07 -0700 Subject: [PATCH 34/34] Update template-list.js --- express/blocks/template-list/template-list.js | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/express/blocks/template-list/template-list.js b/express/blocks/template-list/template-list.js index 8694cac6..14f5b240 100644 --- a/express/blocks/template-list/template-list.js +++ b/express/blocks/template-list/template-list.js @@ -549,13 +549,13 @@ async function makeTemplateFunctions() { subElements: { iconHolder: createTag('span', { class: 'icon-holder' }), textSpan: createTag('span', { class: `current-option current-option-${entry[0]}` }), - chevIcon: getIconElement('drop-down-arrow'), + chevIcon: getIconElementDeprecated('drop-down-arrow'), }, }, options: { wrapper: createTag('div', { class: `options-wrapper options-wrapper-${entry[0]}` }), subElements: Object.entries(entry[1].placeholders).map((option, subIndex) => { - const icon = getIconElement(entry[1].icons[subIndex]); + const icon = getIconElementDeprecated(entry[1].icons[subIndex]); const optionButton = createTag('div', { class: 'option-button', 'data-value': option[1] }); [optionButton.textContent] = option; optionButton.prepend(icon); @@ -618,7 +618,7 @@ async function decorateFunctionsContainer(block, section, functions, props) { const drawer = createTag('div', { class: 'filter-drawer-mobile hidden retracted' }); const drawerInnerWrapper = createTag('div', { class: 'filter-drawer-mobile-inner-wrapper' }); const drawerBackground = createTag('div', { class: 'drawer-background hidden transparent' }); - const closeButton = getIconElement('search-clear'); + const closeButton = getIconElementDeprecated('search-clear'); const applyButtonWrapper = createTag('div', { class: 'apply-filter-button-wrapper hidden transparent' }); const applyButton = createTag('a', { class: 'apply-filter-button button gradient', href: '#' }); @@ -657,7 +657,7 @@ async function decorateFunctionsContainer(block, section, functions, props) { }); }); - mobileFilterButtonWrapper.append(getIconElement('scratch-icon-22'), mobileFilterButton); + mobileFilterButtonWrapper.append(getIconElementDeprecated('scratch-icon-22'), mobileFilterButton); applyButtonWrapper.append(applyButton); filterContainer.append( mobileFilterButtonWrapper, @@ -856,11 +856,11 @@ async function decorateCategoryList(block, section, props) { const categoriesToggleWrapper = createTag('div', { class: 'category-list-toggle-wrapper' }); const desktopCategoriesToggleWrapper = createTag('div', { class: 'category-list-toggle-wrapper' }); const categoriesToggle = createTag('span', { class: 'category-list-toggle' }); - const desktopCategoriesToggle = getIconElement('drop-down-arrow'); + const desktopCategoriesToggle = getIconElementDeprecated('drop-down-arrow'); const categoriesListHeading = createTag('div', { class: 'category-list-heading' }); const categoriesTag = createTag('ul', { class: 'category-list' }); - categoriesListHeading.append(getIconElement('template-search'), await placeholderMod.replaceKey('jump-to-category', getConfig())); + categoriesListHeading.append(getIconElementDeprecated('template-search'), await placeholderMod.replaceKey('jump-to-category', getConfig())); categoriesToggle.textContent = await placeholderMod.replaceKey('jump-to-category', getConfig()); const allTemplatesMetadata = await fetchAllTemplatesMetadata(); @@ -882,7 +882,7 @@ async function decorateCategoryList(block, section, props) { icon = 'template-static'; } - const iconElement = getIconElement(icon); + const iconElement = getIconElementDeprecated(icon); const redirectUrl = getRedirectUrl(targetTasks, currentTopic, format, allTemplatesMetadata); const a = createTag('a', { 'data-tasks': targetTasks, @@ -921,7 +921,7 @@ async function decorateCategoryList(block, section, props) { } const toggleButton = categoriesMobileWrapper.querySelector('.category-list-toggle-wrapper'); - toggleButton.append(getIconElement('drop-down-arrow')); + toggleButton.append(getIconElementDeprecated('drop-down-arrow')); toggleButton.addEventListener('click', () => { const listWrapper = toggleButton.parentElement; toggleButton.classList.toggle('collapsed'); @@ -972,7 +972,7 @@ async function decorateSearchFunctions(toolBar, section, props) { // Tasks Dropdown const taskDropdownContainer = createTag('div', { class: 'task-dropdown-container' }); const taskDropdown = createTag('div', { class: 'task-dropdown' }); - const taskDropdownChev = getIconElement('drop-down-arrow'); + const taskDropdownChev = getIconElementDeprecated('drop-down-arrow'); const taskDropdownToggle = createTag('button', { class: 'task-dropdown-toggle' }); const taskDropdownList = createTag('ul', { class: 'task-dropdown-list' }); const categories = JSON.parse(placeholderMod['task-categories']); @@ -980,7 +980,7 @@ async function decorateSearchFunctions(toolBar, section, props) { let optionMatched = false; Object.entries(categories).forEach((category, index) => { - const itemIcon = getIconElement(categoryIcons[index]); + const itemIcon = getIconElementDeprecated(categoryIcons[index]); const listItem = createTag('li', { class: 'option', 'data-tasks': category[1] }); [listItem.textContent] = category; listItem.prepend(itemIcon); @@ -1002,7 +1002,7 @@ async function decorateSearchFunctions(toolBar, section, props) { } searchForm.append(searchBar); - searchBarWrapper.append(getIconElement('search'), getIconElement('search-clear')); + searchBarWrapper.append(getIconElementDeprecated('search'), getIconElementDeprecated('search-clear')); taskDropdownContainer.append(taskDropdown); taskDropdown.append(taskDropdownToggle, taskDropdownList, taskDropdownChev); searchBarWrapper.append(searchForm, taskDropdownContainer); @@ -1443,11 +1443,11 @@ async function decorateToolbar(block, section, props) { const viewsWrapper = createTag('div', { class: 'views' }); const smView = createTag('a', { class: 'view-toggle-button small-view', 'data-view': 'sm' }); - smView.append(getIconElement('small_grid')); + smView.append(getIconElementDeprecated('small_grid')); const mdView = createTag('a', { class: 'view-toggle-button medium-view', 'data-view': 'md' }); - mdView.append(getIconElement('medium_grid')); + mdView.append(getIconElementDeprecated('medium_grid')); const lgView = createTag('a', { class: 'view-toggle-button large-view', 'data-view': 'lg' }); - lgView.append(getIconElement('large_grid')); + lgView.append(getIconElementDeprecated('large_grid')); const functionsObj = await makeTemplateFunctions(); const functions = await decorateFunctionsContainer( @@ -1775,7 +1775,7 @@ async function decorateLoadMoreButton(block, props) { loadMoreDiv.append(loadMoreButton, loadMoreText); loadMoreText.textContent = await placeholderMod.replaceKey('load-more', getConfig()); block.insertAdjacentElement('afterend', loadMoreDiv); - loadMoreButton.append(getIconElement('plus-icon')); + loadMoreButton.append(getIconElementDeprecated('plus-icon')); loadMoreButton.addEventListener('click', async () => { loadMoreButton.classList.add('disabled');