From 7b84fa6610d36729ce98ed13b88067c968de4767 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 19:48:26 +1100 Subject: [PATCH 001/179] move repo to submodule --- .gitmodules | 3 + repo | 1 + .../client.css | 9 - .../client.mjs | 33 - .../mod.json | 22 - .../client.css | 21 - .../client.mjs | 64 - .../mod.json | 22 - .../mod.json | 33 - .../blocks.mjs | 237 --- .../client.css | 69 - .../client.mjs | 59 - .../markdown.css | 165 -- .../menu.css | 25 - .../menu.html | 11 - .../menu.mjs | 370 ----- .../mod.json | 31 - .../notifications.mjs | 86 -- .../router.mjs | 72 - .../styles.mjs | 157 -- repo/registry.json | 8 - .../client.mjs | 20 - .../mod.json | 24 - .../prism.css | 156 -- .../theme.css | 1352 ----------------- .../variables.css | 364 ----- .../client.css | 61 - .../client.mjs | 49 - .../mod.json | 84 - 29 files changed, 4 insertions(+), 3604 deletions(-) create mode 160000 repo delete mode 100644 repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.css delete mode 100644 repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.mjs delete mode 100644 repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/mod.json delete mode 100644 repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.css delete mode 100644 repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.mjs delete mode 100644 repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/mod.json delete mode 100644 repo/components@36a2ffc9-27ff-480e-84a7-c7700a7d232d/mod.json delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/blocks.mjs delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.css delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.mjs delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/markdown.css delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.mjs delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/mod.json delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/notifications.mjs delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/router.mjs delete mode 100644 repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/styles.mjs delete mode 100644 repo/registry.json delete mode 100644 repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/client.mjs delete mode 100644 repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/mod.json delete mode 100644 repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/prism.css delete mode 100644 repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/theme.css delete mode 100644 repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/variables.css delete mode 100644 repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.css delete mode 100644 repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.mjs delete mode 100644 repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/mod.json diff --git a/.gitmodules b/.gitmodules index 65dd035..8907605 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "api"] path = api url = git@github.com:notion-enhancer/api.git +[submodule "repo"] + path = repo + url = git@github.com:notion-enhancer/repo.git diff --git a/repo b/repo new file mode 160000 index 0000000..d7b38bf --- /dev/null +++ b/repo @@ -0,0 +1 @@ +Subproject commit d7b38bf3aa609c1f1e71f9db45e4883ded769869 diff --git a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.css b/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.css deleted file mode 100644 index 7cf79f8..0000000 --- a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.css +++ /dev/null @@ -1,9 +0,0 @@ -/* - * notion-enhancer: bypass-preview - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -.notion-peek-renderer { - display: none; -} diff --git a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.mjs b/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.mjs deleted file mode 100644 index b510184..0000000 --- a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/client.mjs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * notion-enhancer: bypass-preview - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -export default async function (api, db) { - const { web, components } = api; - await web.whenReady(); - - let _lastPage = {}; - function getCurrentPage() { - if (web.queryParams().get('p')) return { type: 'preview', id: web.queryParams().get('p') }; - return { type: 'page', id: location.pathname.split(/(-|\/)/g).reverse()[0] }; - } - - web.addDocumentObserver((event) => { - const currentPage = getCurrentPage(); - if (currentPage.id !== _lastPage.id || currentPage.type !== _lastPage.type) { - const openAsPage = document.querySelector( - '.notion-peek-renderer [style*="height: 45px;"] a' - ); - if (openAsPage) { - if (currentPage.id === _lastPage.id && currentPage.type === 'preview') { - history.back(); - } else openAsPage.click(); - } - _lastPage = getCurrentPage(); - } - }); -} diff --git a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/mod.json b/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/mod.json deleted file mode 100644 index 1d0cfb4..0000000 --- a/repo/bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f/mod.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "bypass-preview", - "id": "cb6fd684-f113-4a7a-9423-8f0f0cff069f", - "version": "0.2.0", - "description": "go straight to the normal full view when opening a page.", - "tags": ["extension", "automation"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - } - ], - "js": { - "client": ["client.mjs"] - }, - "css": { - "client": ["client.css"] - }, - "options": [] -} diff --git a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.css b/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.css deleted file mode 100644 index 310c6f9..0000000 --- a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.css +++ /dev/null @@ -1,21 +0,0 @@ -/* - * notion-enhancer: calendar-scroll - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -#calendar-scroll-to-week { - background: var(--theme--button_hover); - border: 1px solid transparent; - font-size: var(--theme--font_label-size); - color: var(--theme--text); - height: 24px; - border-radius: 3px; - line-height: 1.2; - padding: 0 0.5em; - margin-right: 5px; -} -#calendar-scroll-to-week:hover { - background: transparent; - border: 1px solid var(--theme--button_hover); -} diff --git a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.mjs b/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.mjs deleted file mode 100644 index 96c893a..0000000 --- a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/client.mjs +++ /dev/null @@ -1,64 +0,0 @@ -/* - * notion-enhancer core: bypass-preview - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -import { web } from '../../api/_.mjs'; - -const $button = web.createElement( - web.html`` -); -$button.addEventListener('click', async (event) => { - let $day = document.querySelector('.notion-calendar-view-day[style*="background:"]'); - while (!$day) { - const $toolbar = document.querySelector( - '.notion-calendar-view > :first-child > :first-child > :first-child' - ), - year = +$toolbar.children[0].innerText.split(' ')[1], - month = { - 'January': 0, - 'February': 1, - 'March': 2, - 'April': 3, - 'May': 4, - 'June': 5, - 'July': 6, - 'August': 7, - 'September': 8, - 'October': 9, - 'November': 10, - 'December': 11, - }[$toolbar.children[0].innerText.split(' ')[0]], - now = new Date(); - switch (true) { - case now.getFullYear() < year: - case now.getFullYear() === year && now.getMonth() < month: - $toolbar.children[3].click(); - break; - case now.getFullYear() > year: - case now.getFullYear() === year && now.getMonth() > month: - $toolbar.children[5].click(); - break; - default: - await new Promise((res, rej) => requestAnimationFrame(res)); - $day = document.querySelector('.notion-calendar-view-day[style*="background:"]'); - } - await new Promise((res, rej) => requestAnimationFrame(res)); - } - const $scroller = document.querySelector('.notion-frame .notion-scroller'); - $scroller.scroll({ - top: $day.offsetParent.offsetParent.offsetTop + 70, - behavior: 'auto', - }); -}); - -web.addDocumentObserver((event) => { - if (document.contains($button)) return; - const toolbar = document.querySelector( - '.notion-calendar-view > :first-child > :first-child > :first-child' - ); - if (toolbar) toolbar.insertBefore($button, toolbar.children[2]); -}); diff --git a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/mod.json b/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/mod.json deleted file mode 100644 index 1e38790..0000000 --- a/repo/calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a/mod.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "calendar-scroll", - "id": "b1c7db33-dfee-489a-a76c-0dd66f7ed29a", - "version": "0.2.0", - "description": "add a button to jump down to the current week in fullpage/infinite-scroll calendars.", - "tags": ["extension", "shortcut"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - } - ], - "js": { - "client": ["client.mjs"] - }, - "css": { - "client": ["client.css"] - }, - "options": [] -} diff --git a/repo/components@36a2ffc9-27ff-480e-84a7-c7700a7d232d/mod.json b/repo/components@36a2ffc9-27ff-480e-84a7-c7700a7d232d/mod.json deleted file mode 100644 index bb0cc36..0000000 --- a/repo/components@36a2ffc9-27ff-480e-84a7-c7700a7d232d/mod.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "__comment": "pseudo-mod to allow configuration of API-provided components", - "name": "components", - "id": "36a2ffc9-27ff-480e-84a7-c7700a7d232d", - "version": "0.2.0", - "description": "shared notion-style elements.", - "tags": ["core"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - }, - { - "name": "CloudHill", - "email": "rh.cloudhill@gmail.com", - "homepage": "https://github.com/CloudHill", - "avatar": "https://avatars.githubusercontent.com/u/54142180" - } - ], - "js": {}, - "css": {}, - "options": [ - { - "type": "hotkey", - "key": "panel.hotkey", - "label": "toggle panel hotkey", - "value": "Ctrl+Alt+\\", - "tooltip": "opens/closes the side panel in notion - will only work if a mod is making use of it." - } - ] -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/blocks.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/blocks.mjs deleted file mode 100644 index 4f1a7e0..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/blocks.mjs +++ /dev/null @@ -1,237 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -import { fmt, web, registry, components } from '../../api/_.mjs'; -import { notifications } from './notifications.mjs'; -const profileDB = await registry.profileDB(); - -export const blocks = { - preview: (url) => web.html``, - title: (title) => web.html`

${web.escape(title)}

`, - version: (version) => web.html`v${web.escape(version)}`, - tags: (tags) => { - if (!tags.length) return ''; - return web.render( - web.html`

`, - tags.map((tag) => `#${web.escape(tag)}`).join(' ') - ); - }, - description: (description) => web.html`

- ${fmt.md.renderInline(description)} -

`, - authors: (authors) => { - const author = (author) => web.html` - ${web.escape(author.name)}'s avatar ${web.escape(author.name)} - `; - return web.render(web.html`

`, ...authors.map(author)); - }, - toggle: (label, checked) => { - const $label = web.html``, - $input = web.html``, - $feature = web.html``; - $label.addEventListener('keyup', (event) => { - if (['Enter', ' '].includes(event.key)) $input.checked = !$input.checked; - }); - return web.render($label, $input, $feature); - }, -}; - -export const options = { - toggle: async (mod, opt) => { - const checked = await profileDB.get([mod.id, opt.key], opt.value), - $toggle = blocks.toggle(opt.label, checked), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = $toggle.children[0], - $input = $toggle.children[1]; - if (opt.tooltip) { - $label.prepend($tooltip); - components.tooltip($tooltip, opt.tooltip); - } - $input.addEventListener('change', async (event) => { - await profileDB.set([mod.id, opt.key], $input.checked); - notifications.onChange(); - }); - return $toggle; - }, - select: async (mod, opt) => { - const value = await profileDB.get([mod.id, opt.key], opt.values[0]), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $options = opt.values.map( - (option) => web.raw`` - ), - $select = web.html``, - $icon = web.html`${await components.feather('chevron-down', { class: 'input-icon' })}`; - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $select.addEventListener('change', async (event) => { - await profileDB.set([mod.id, opt.key], $select.value); - notifications.onChange(); - }); - return web.render($label, $select, $icon); - }, - text: async (mod, opt) => { - const value = await profileDB.get([mod.id, opt.key], opt.value), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $input = web.html``, - $icon = web.html`${await components.feather('type', { class: 'input-icon' })}`; - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $input.addEventListener('change', async (event) => { - await profileDB.set([mod.id, opt.key], $input.value); - notifications.onChange(); - }); - return web.render($label, $input, $icon); - }, - number: async (mod, opt) => { - const value = await profileDB.get([mod.id, opt.key], opt.value), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $input = web.html``, - $icon = web.html`${await components.feather('hash', { class: 'input-icon' })}`; - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $input.addEventListener('change', async (event) => { - await profileDB.set([mod.id, opt.key], $input.value); - notifications.onChange(); - }); - return web.render($label, $input, $icon); - }, - color: async (mod, opt) => { - const value = await profileDB.get([mod.id, opt.key], opt.value), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $input = web.html``, - $icon = web.html`${await components.feather('droplet', { class: 'input-icon' })}`, - paint = () => { - $input.style.background = $picker.toBackground(); - $input.style.color = $picker.isLight() ? '#000' : '#fff'; - $input.style.padding = ''; - }, - $picker = new web.jscolor($input, { - value, - format: 'rgba', - previewSize: 0, - borderRadius: 3, - borderColor: 'var(--theme--ui_divider)', - controlBorderColor: 'var(--theme--ui_divider)', - backgroundColor: 'var(--theme--bg)', - onInput: paint, - onChange: paint, - }); - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $input.addEventListener('change', async (event) => { - await profileDB.set([mod.id, opt.key], $input.value); - notifications.onChange(); - }); - paint(); - return web.render($label, $input, $icon); - }, - file: async (mod, opt) => { - const { filename } = (await profileDB.get([mod.id, opt.key], {})) || {}, - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $pseudo = web.html`Upload file...`, - $input = web.html``, - $icon = web.html`${await components.feather('file', { class: 'input-icon' })}`, - $filename = web.html`${web.escape(filename || 'none')}`, - $latest = web.render(web.html``, $filename); - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $input.addEventListener('change', (event) => { - const file = event.target.files[0], - reader = new FileReader(); - reader.onload = async (progress) => { - $filename.innerText = file.name; - await profileDB.set([mod.id, opt.key], { - filename: file.name, - content: progress.currentTarget.result, - }); - notifications.onChange(); - }; - reader.readAsText(file); - }); - $latest.addEventListener('click', (event) => { - $filename.innerText = 'none'; - profileDB.set([mod.id, opt.key], {}); - }); - return web.render( - web.html`
`, - web.render($label, $input, $pseudo, $icon), - $latest - ); - }, - hotkey: async (mod, opt) => { - const value = await profileDB.get([mod.id, opt.key], opt.value), - $tooltip = web.html`${await components.feather('info', { class: 'input-tooltip' })}`, - $label = web.render( - web.html``, - web.render(web.html`

`, opt.tooltip ? $tooltip : '', opt.label) - ), - $input = web.html``, - $icon = web.html`${await components.feather('command', { class: 'input-icon' })}`; - if (opt.tooltip) components.tooltip($tooltip, opt.tooltip); - $input.addEventListener('keydown', async (event) => { - event.preventDefault(); - const pressed = [], - modifiers = { - metaKey: 'Meta', - ctrlKey: 'Control', - altKey: 'Alt', - shiftKey: 'Shift', - }; - for (const modifier in modifiers) { - if (event[modifier]) pressed.push(modifiers[modifier]); - } - const empty = ['Backspace', 'Delete'].includes(event.key) && !pressed.length; - if (!empty && !pressed.includes(event.key)) { - let key = event.key; - if (key === ' ') key = 'Space'; - if (key.length === 1) key = event.key.toUpperCase(); - pressed.push(key); - } - $input.value = pressed.join('+'); - await profileDB.set([mod.id, opt.key], $input.value); - notifications.onChange(); - }); - return web.render($label, $input, $icon); - }, -}; diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.css b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.css deleted file mode 100644 index e21c00a..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.css +++ /dev/null @@ -1,69 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -.enhancer--sidebarMenuLink { - user-select: none; - -webkit-user-select: none; - transition: background 20ms ease-in 0s; - cursor: pointer; - color: var(--theme--text_secondary); -} -.enhancer--sidebarMenuLink:hover { - background: var(--theme--ui_interactive-hover); -} -.enhancer--sidebarMenuLink svg { - width: 16px; - height: 16px; - margin-left: 2px; -} -.enhancer--sidebarMenuLink > div { - display: flex; - align-items: center; - min-height: 27px; - font-size: 14px; - padding: 2px 14px; - width: 100%; -} -.enhancer--sidebarMenuLink > div > :first-child { - flex-shrink: 0; - flex-grow: 0; - border-radius: 3px; - width: 22px; - height: 22px; - display: flex; - align-items: center; - justify-content: center; - margin-right: 8px; -} -.enhancer--sidebarMenuLink > div > :nth-child(2) { - flex: 1 1 auto; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.enhancer--sidebarMenuLink[data-has-notifications] { - color: var(--theme--text); -} -.enhancer--sidebarMenuLink > div > .enhancer--notificationBubble { - display: flex; -} -.enhancer--sidebarMenuLink > div > .enhancer--notificationBubble > div { - display: inline-flex; - align-items: center; - justify-content: center; - width: 16px; - height: 16px; - font-size: 10px; - font-weight: 600; - border-radius: 3px; - color: var(--theme--accent_red-text); - background: var(--theme--accent_red); -} -.enhancer--sidebarMenuLink > div > .enhancer--notificationBubble > div > span { - margin-bottom: 1px; - margin-left: -0.5px; -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.mjs deleted file mode 100644 index bee0597..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.mjs +++ /dev/null @@ -1,59 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -export default async function (api, db) { - const { env, fs, storage, registry, web } = api; - - web.addHotkeyListener(await db.get(['hotkey']), env.focusMenu); - - const updateTheme = () => - storage.set(['theme'], document.querySelector('.notion-dark-theme') ? 'dark' : 'light'); - web.addDocumentObserver((mutation) => { - if (mutation.target === document.body && document.hasFocus()) updateTheme(); - }); - if (document.hasFocus()) updateTheme(); - document.addEventListener('visibilitychange', updateTheme); - - const sidebarSelector = '.notion-sidebar-container .notion-sidebar > div:nth-child(4)'; - await web.whenReady([sidebarSelector]); - - const $sidebarLink = web.html``; - $sidebarLink.addEventListener('click', env.focusMenu); - - const notifications = { - cache: await storage.get(['notifications'], []), - provider: [ - registry.welcomeNotification, - ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), - ], - count: (await registry.errors()).length, - }; - for (const notification of notifications.provider) { - if ( - !notifications.cache.includes(notification.id) && - notification.version === env.version && - (!notification.environments || notification.environments.includes(env.name)) - ) { - notifications.count++; - } - } - if (notifications.count) { - $sidebarLink.dataset.hasNotifications = true; - web.render( - $sidebarLink.children[0], - web.html`
${notifications.count}
` - ); - } - - web.render(document.querySelector(sidebarSelector), $sidebarLink); -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/markdown.css b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/markdown.css deleted file mode 100644 index dc41b90..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/markdown.css +++ /dev/null @@ -1,165 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -.markdown table { - border-spacing: 0; - border: 1px solid var(--theme--ui_divider); -} -.markdown table th { - text-align: left; -} -.markdown table th, -.markdown table td { - padding: 5px 8px 6px; - border: 1px solid var(--theme--ui_divider); -} -.markdown h1 { - font-size: 1.875rem; - margin: 1rem 0 0.5rem 0; -} -.markdown h2 { - font-size: 1.5rem; - margin: 1rem 0 0.5rem 0; -} -.markdown h3 { - font-size: 1.25rem; - margin: 1rem 0 0.5rem 0; -} -.markdown ul, -.markdown ol { - padding-left: 1.25rem; -} -.markdown li { - margin: 0.4rem 0; -} -.markdown ol li { - padding-left: 0.25rem; -} -.markdown blockquote { - border-left: 2px solid currentColor; - padding-left: 0.75rem; - margin: 0.5rem 0; -} -.markdown hr { - border: 0.5px solid var(--theme--ui_divider); -} -.markdown.markdown-inline a { - opacity: 0.7; - text-decoration: none; - border-bottom: 0.05em solid var(--theme--text_secondary); -} -.markdown.markdown-inline a:hover { - opacity: 0.9; -} - -.markdown :not(pre) > code, -.markdown-inline code { - padding: 0.2em 0.4em; - border-radius: 3px; - background: var(--theme--code_inline); - color: var(--theme--code_inline-text); -} -.markdown pre { - padding: 2em 1.25em; - border-radius: 3px; - tab-size: 2; - white-space: pre; - overflow-x: auto; - background: var(--theme--code); - color: var(--theme--code_plain); -} -.markdown pre, -.markdown.markdown-inline code { - font-family: var(--theme--font_code); - font-size: 0.796875rem; - text-align: left; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - hyphens: none; - line-height: 1.5; -} - -/* - * https://prismjs.com/plugins/inline-color/ - */ -.markdown .inline-color-wrapper { - /* - * base64 svg (https://stackoverflow.com/a/21626701/7595472 - prevents visual glitches) - * - * - * - * - */ - background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyIDIiPjxwYXRoIGZpbGw9ImdyYXkiIGQ9Ik0wIDBoMnYySDB6Ii8+PHBhdGggZmlsbD0id2hpdGUiIGQ9Ik0wIDBoMXYxSDB6TTEgMWgxdjFIMXoiLz48L3N2Zz4='); - background-position: center; - background-size: 110%; - display: inline-block; - height: 1.333ch; - width: 1.333ch; - margin: 0 0.333ch; - box-sizing: border-box; - border: 0.5px solid var(--theme--code_plain); - overflow: hidden; -} -.markdown .inline-color { - display: block; - height: 120%; - width: 120%; -} - -/* - * https://prismjs.com/plugins/match-braces/ - */ -.markdown .token.punctuation.brace-hover, -.markdown .token.punctuation.brace-selected { - outline: solid 1px; -} - -/* - * https://prismjs.com/plugins/show-language/ - * https://prismjs.com/plugins/copy-to-clipboard/ - */ -.markdown .code-toolbar { - position: relative; -} -.markdown .code-toolbar .toolbar-item { - position: absolute; - top: 0.35rem; - display: inline-block; - transition: opacity 200ms ease-in-out; - opacity: 0; -} -.markdown .code-toolbar .toolbar-item:first-child { - left: 0.8rem; -} -.markdown .code-toolbar .toolbar-item:last-child { - right: 0.8rem; -} -.markdown .code-toolbar:hover .toolbar-item, -.markdown .code-toolbar:focus-within .toolbar-item { - opacity: 1; -} -.markdown .code-toolbar .toolbar-item > * { - padding: 0.25rem 0.35rem; - color: var(--theme--text_secondary); - font-size: 11px; - font-family: inherit; -} -.markdown .code-toolbar .toolbar-item .copy-to-clipboard-button { - border: none; - background: none; - cursor: pointer; - border-radius: 3px; - transition: background 100ms ease-in-out; -} -.markdown .code-toolbar .toolbar-item .copy-to-clipboard-button:hover { - background: var(--theme--button-hover); -} -.markdown .code-toolbar .toolbar-item .copy-to-clipboard-button svg { - width: 1em; - margin-right: 0.5em; -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css deleted file mode 100644 index ecf5bee..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.css +++ /dev/null @@ -1,25 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -::selection { - background: var(--theme--accent_blue-selection); -} - -::-webkit-scrollbar { - width: 10px; - height: 10px; - background: transparent; -} -::-webkit-scrollbar-track, -::-webkit-scrollbar-corner { - background: var(--theme--scrollbar_track) !important; -} -::-webkit-scrollbar-thumb { - background: var(--theme--scrollbar_thumb) !important; -} -::-webkit-scrollbar-thumb:hover { - background: var(--theme--scrollbar_thumb-hover) !important; -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html deleted file mode 100644 index ec6337a..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - notion-enhancer menu - - - - - diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.mjs deleted file mode 100644 index e171d69..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.mjs +++ /dev/null @@ -1,370 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -import { env, fs, storage, registry, web, components } from '../../api/_.mjs'; -import { notifications } from './notifications.mjs'; -import { blocks, options } from './blocks.mjs'; -import './styles.mjs'; - -const db = await registry.db('a6621988-551d-495a-97d8-3c568bca2e9e'), - profileName = await registry.profileName(), - profileDB = await registry.profileDB(); - -for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { - for (const sheet of mod.css?.menu || []) { - web.loadStylesheet(`repo/${mod._dir}/${sheet}`); - } -} - -web.addHotkeyListener(await db.get(['hotkey']), env.focusNotion); - -const loadTheme = async () => { - document.documentElement.className = - (await storage.get(['theme'], 'light')) === 'dark' ? 'dark' : ''; -}; -document.addEventListener('visibilitychange', loadTheme); -loadTheme(); - -window.addEventListener('beforeunload', (event) => { - // trigger input save - document.activeElement.blur(); -}); - -const $main = web.html`
`, - $sidebar = web.html``, - $options = web.html`
-

Select a mod to view and configure its options.

-
`, - $profile = web.html``; - -let _$profileConfig; -$profile.addEventListener('click', async (event) => { - for (const $selected of document.querySelectorAll('.mod-selected')) { - $selected.className = 'mod'; - } - if (!_$profileConfig) { - const profileNames = [ - ...new Set([ - ...Object.keys(await storage.get(['profiles'], { default: {} })), - profileName, - ]), - ], - $options = profileNames.map( - (profile) => web.raw`` - ), - $select = web.html``, - $edit = web.html``, - $export = web.html``, - $import = web.html``, - $save = web.html``, - $delete = web.html``, - $error = web.html`

`; - $export.addEventListener('click', async (event) => { - const now = new Date(), - $a = web.html``; - web.render(document.body, $a); - $a.click(); - $a.remove(); - }); - $import.addEventListener('change', (event) => { - const file = event.target.files[0], - reader = new FileReader(); - reader.onload = async (progress) => { - try { - const profileUpload = JSON.parse(progress.currentTarget.result); - if (!profileUpload) throw Error; - await storage.set(['profiles', $select.value], profileUpload); - env.reload(); - } catch { - web.render(web.empty($error), 'Invalid JSON uploaded.'); - } - }; - reader.readAsText(file); - }); - $select.addEventListener('change', async (event) => { - if ($select.value === '--') { - $edit.value = ''; - } else $edit.value = $select.value; - }); - $save.addEventListener('click', async (event) => { - if (profileNames.includes($edit.value) && $select.value !== $edit.value) { - web.render( - web.empty($error), - `The profile "${web.escape($edit.value)}" already exists.` - ); - return false; - } - if (!$edit.value) { - web.render(web.empty($error), 'Profile names cannot be empty.'); - return false; - } - if (!$edit.value.match(/^[A-Za-z0-9_-]+$/)) { - web.render( - web.empty($error), - 'Profile names can only contain letters, numbers, dashes and underscores.' - ); - return false; - } - await storage.set(['currentprofile'], $edit.value); - if ($select.value === '--') { - await storage.set(['profiles', $edit.value], {}); - } else if ($select.value !== $edit.value) { - await storage.set( - ['profiles', $edit.value], - await storage.get(['profiles', $select.value], {}) - ); - await storage.set(['profiles', $select.value], undefined); - } - env.reload(); - }); - $delete.addEventListener('click', async (event) => { - await storage.set(['profiles', $select.value], undefined); - await storage.set( - ['currentprofile'], - profileNames.find((profile) => profile !== $select.value) || 'default' - ); - env.reload(); - }); - - _$profileConfig = web.render( - web.html`
`, - web.html`

- Profiles are used to switch entire configurations. - Here they can be selected, renamed or deleted. - Profile names can only contain letters, numbers, - dashes and underscores.
- Be careful - deleting a profile deletes all configuration - related to it. -

`, - web.render( - web.html``, - $select, - web.html`${await components.feather('chevron-down', { class: 'input-icon' })}` - ), - web.render( - web.html``, - $edit, - web.html`${await components.feather('type', { class: 'input-icon' })}` - ), - web.render(web.html`

`, $export, $import, $save, $delete), - $error - ); - } - web.render(web.empty($options), _$profileConfig); -}); - -const _$modListCache = {}, - generators = { - options: async (mod) => { - const $fragment = document.createDocumentFragment(); - for (const opt of mod.options) { - web.render($fragment, await options[opt.type](mod, opt)); - } - if (!mod.options.length) { - web.render($fragment, web.html`

No options.

`); - } - return $fragment; - }, - mod: async (mod) => { - const $mod = web.html`
`, - $toggle = blocks.toggle('', await registry.enabled(mod.id)); - $toggle.addEventListener('change', async (event) => { - if (event.target.checked && mod.tags.includes('theme')) { - const mode = mod.tags.includes('light') ? 'light' : 'dark', - id = mod.id, - mods = await registry.list( - (mod) => - mod.environments.includes(env.name) && - mod.tags.includes('theme') && - mod.tags.includes(mode) && - mod.id !== id - ); - for (const mod of mods) { - profileDB.set(['_mods', mod.id], false); - document.querySelector( - `[data-id="${web.escape(mod.id)}"] .toggle-check` - ).checked = false; - } - } - profileDB.set(['_mods', mod.id], event.target.checked); - notifications.onChange(); - }); - $mod.addEventListener('click', async (event) => { - if ($mod.className === 'mod-selected') return; - for (const $selected of document.querySelectorAll('.mod-selected')) { - $selected.className = 'mod'; - } - $mod.className = 'mod-selected'; - const fragment = [ - web.render(blocks.title(mod.name), blocks.version(mod.version)), - blocks.tags(mod.tags), - await generators.options(mod), - ]; - web.render(web.empty($options), ...fragment); - }); - return web.render( - web.html`
`, - web.render( - $mod, - mod.preview - ? blocks.preview( - mod.preview.startsWith('http') - ? mod.preview - : fs.localPath(`repo/${mod._dir}/${mod.preview}`) - ) - : '', - web.render( - web.html`
`, - web.render(blocks.title(mod.name), blocks.version(mod.version)), - blocks.tags(mod.tags), - blocks.description(mod.description), - blocks.authors(mod.authors), - mod.environments.includes(env.name) && !registry.core.includes(mod.id) - ? $toggle - : '' - ) - ) - ); - }, - modList: async (category, message = '') => { - if (!_$modListCache[category]) { - const $search = web.html``, - $list = web.html`
`, - mods = await registry.list( - (mod) => mod.environments.includes(env.name) && mod.tags.includes(category) - ); - web.addHotkeyListener(['/'], () => $search.focus()); - $search.addEventListener('input', (event) => { - const query = $search.value.toLowerCase(); - for (const $mod of $list.children) { - const matches = !query || $mod.innerText.toLowerCase().includes(query); - $mod.classList[matches ? 'remove' : 'add']('hidden'); - } - }); - for (const mod of mods) { - mod.tags = mod.tags.filter((tag) => tag !== category); - web.render($list, await generators.mod(mod)); - mod.tags.unshift(category); - } - _$modListCache[category] = web.render( - web.html`
`, - web.render( - web.html``, - $search, - web.html`${await components.feather('search', { class: 'input-icon' })}` - ), - message ? web.html`

${web.escape(message)}

` : '', - $list - ); - } - return _$modListCache[category]; - }, - }; - -const $notionNavItem = web.html`

- ${(await fs.getText('icon/colour.svg')).replace( - /width="\d+" height="\d+"/, - `class="nav-notion-icon"` - )} - notion-enhancer -

`; -$notionNavItem.addEventListener('click', env.focusNotion); - -const $coreNavItem = web.html`core`, - $extensionsNavItem = web.html`extensions`, - $themesNavItem = web.html`themes`; - -web.render( - document.body, - web.render( - web.html`
`, - web.render( - web.html`
`, - web.render( - web.html``, - $notionNavItem, - $coreNavItem, - $extensionsNavItem, - $themesNavItem, - web.html`docs`, - web.html`community` - ), - $main - ), - web.render($sidebar, $profile, $options) - ) -); - -function selectNavItem($item) { - for (const $selected of document.querySelectorAll('.nav-item-selected')) { - $selected.className = 'nav-item'; - } - $item.className = 'nav-item-selected'; -} - -import * as router from './router.mjs'; - -router.addView('core', async () => { - web.empty($main); - selectNavItem($coreNavItem); - return web.render($main, await generators.modList('core')); -}); - -router.addView('extensions', async () => { - web.empty($main); - selectNavItem($extensionsNavItem); - return web.render($main, await generators.modList('extension')); -}); - -router.addView('themes', async () => { - web.empty($main); - selectNavItem($themesNavItem); - return web.render( - $main, - await generators.modList( - 'theme', - `Dark themes will only work when Notion is in dark mode, - and light themes will only work when Notion is in light mode. - Only one theme of each mode can be enabled at a time.` - ) - ); -}); - -router.loadView('extensions', $main); diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/mod.json b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/mod.json deleted file mode 100644 index 0aa7b7f..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/mod.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "menu", - "id": "a6621988-551d-495a-97d8-3c568bca2e9e", - "version": "0.11.0", - "description": "the enhancer's graphical menu, related buttons and shortcuts.", - "tags": ["core"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - } - ], - "css": { - "client": ["client.css"], - "menu": ["menu.css", "markdown.css"] - }, - "js": { - "client": ["client.mjs"] - }, - "options": [ - { - "type": "hotkey", - "key": "hotkey", - "label": "toggle focus hotkey", - "value": "Ctrl+Alt+E", - "tooltip": "switches between notion & the enhancer menu" - } - ] -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/notifications.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/notifications.mjs deleted file mode 100644 index 97e0f93..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/notifications.mjs +++ /dev/null @@ -1,86 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -import { env, fs, storage, fmt, registry, web, components } from '../../api/_.mjs'; -import { tw } from './styles.mjs'; - -export const notifications = { - $container: web.html`
`, - cache: await storage.get(['notifications'], []), - provider: [ - registry.welcomeNotification, - ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), - ], - async add({ icon, message, id = undefined, color = undefined, link = undefined }) { - const $notification = link - ? web.html`` - : web.html``, - resolve = async () => { - if (id !== undefined) { - notifications.cache.push(id); - await storage.set(['notifications'], notifications.cache); - } - $notification.remove(); - }; - $notification.addEventListener('click', resolve); - $notification.addEventListener('keyup', (event) => { - if (['Enter', ' '].includes(event.key)) resolve(); - }); - web.render( - notifications.$container, - web.render( - $notification, - web.html` - ${fmt.md.renderInline(message)} - `, - web.html`${await components.feather(icon, { class: 'notification-icon' })}` - ) - ); - return $notification; - }, - _onChange: false, - async onChange() { - if (this._onChange) return; - this._onChange = true; - const $notification = await this.add({ - icon: 'refresh-cw', - message: 'Reload to apply changes.', - }); - $notification.addEventListener('click', env.reload); - }, -}; -web.render(document.body, notifications.$container); -for (const notification of notifications.provider) { - if ( - !notifications.cache.includes(notification.id) && - notification.version === env.version && - (!notification.environments || notification.environments.includes(env.name)) - ) { - notifications.add(notification); - } -} - -const errors = await registry.errors(); -if (errors.length) { - console.log('[notion-enhancer] registry errors:'); - console.table(errors); - notifications.add({ - icon: 'alert-circle', - message: 'Failed to load mods (check console).', - color: 'red', - }); -} diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/router.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/router.mjs deleted file mode 100644 index 8a5e70e..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/router.mjs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -import { web } from '../../api/_.mjs'; - -let _defaultView = ''; -const _views = new Map(); - -export function addView(name, loadFunc) { - _views.set(name, loadFunc); -} -export function removeView(name) { - _views.delete(name); -} - -function router(event) { - event.preventDefault(); - const anchor = event.path - ? event.path.find((anchor) => anchor.nodeName === 'A') - : event.target; - if (location.search !== anchor.getAttribute('href')) { - window.history.pushState(null, null, anchor.href); - loadView(); - } -} -function navigator(event) { - event.preventDefault(); - const anchor = event.path - ? event.path.find((anchor) => anchor.nodeName === 'A') - : event.target, - hash = anchor.getAttribute('href').slice(1); - document.getElementById(hash).scrollIntoView(true); - document.documentElement.scrollTop = 0; - history.replaceState({ search: location.search, hash }, null, `#${hash}`); -} - -export async function loadView(defaultView = null) { - if (defaultView) _defaultView = defaultView; - if (!_defaultView) throw new Error('no view root set.'); - - const query = web.queryParams(), - fallbackView = () => { - window.history.replaceState(null, null, `?view=${_defaultView}`); - return loadView(); - }; - if (!query.get('view') || document.body.dataset.view !== query.get('view')) { - if (_views.get(query.get('view'))) { - await _views.get(query.get('view'))(); - } else return fallbackView(); - } else return fallbackView(); -} - -window.addEventListener('popstate', (event) => { - if (event.state) loadView(); - document.getElementById(location.hash.slice(1))?.scrollIntoView(true); - document.documentElement.scrollTop = 0; -}); -web.addDocumentObserver((mutation) => { - mutation.target.querySelectorAll('a[href^="?"]').forEach((a) => { - a.removeEventListener('click', router); - a.addEventListener('click', router); - }); - mutation.target.querySelectorAll('a[href^="#"]').forEach((a) => { - a.removeEventListener('click', navigator); - a.addEventListener('click', navigator); - }); -}); diff --git a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/styles.mjs b/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/styles.mjs deleted file mode 100644 index 22e0604..0000000 --- a/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/styles.mjs +++ /dev/null @@ -1,157 +0,0 @@ -/* - * notion-enhancer core: menu - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -// css-in-js for better component generation - -import { tw, apply, setup } from '../../dep/twind.mjs'; -import { content } from '../../dep/twind-content.mjs'; -const pseudoContent = content('""'); - -const mapColorVariables = (color) => ({ - 'text': `var(--theme--text_${color})`, - 'highlight': `var(--theme--highlight_${color})`, - 'highlight-text': `var(--theme--highlight_${color}-text)`, - 'block': `var(--theme--block_${color})`, - 'block-text': `var(--theme--block_${color}-text)`, - 'tag': `var(--theme--tag_${color})`, - 'tag-text': `var(--theme--tag_${color}-text)`, - 'callout': `var(--theme--callout_${color})`, - 'callout-text': `var(--theme--callout_${color}-text)`, -}); - -const customClasses = { - 'notifications-container': apply`absolute bottom-0 right-0 px-4 py-3 max-w-full w-96`, - 'notification': ([color = 'default']) => - apply`p-2 ${ - color === 'default' - ? 'bg-tag text-tag-text hover:bg-interactive-hover border border-divider' - : `bg-${color}-tag text-${color}-tag-text border border-${color}-text hover:bg-${color}-text` - } flex items-center rounded-full mt-3 shadow-md cursor-pointer`, - 'notification-text': apply`font-semibold text-xs mx-2 flex-auto`, - 'notification-icon': apply`fill-current opacity-75 h-4 w-4 mx-2`, - 'body-container': apply`flex w-full h-full overflow-hidden`, - 'content-container': apply`h-full w-full-96`, - 'nav': apply`px-4 py-3 flex flex-wrap items-center border-b border-divider h-64 sm:h-48 md:h-32 lg:h-16`, - 'nav-notion': apply`flex items-center font-semibold text-xl cursor-pointer select-none mr-4 - ml-4 sm:mb-4 md:w-full lg:(w-auto ml-0 mb-0)`, - 'nav-notion-icon': apply`h-12 w-12 mr-5 sm:(h-6 w-6 mr-3)`, - 'nav-item': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium hover:bg-interactive-hover focus:bg-interactive-active`, - 'nav-item-selected': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium ring-1 ring-divider bg-notion-secondary`, - 'main': apply`transition px-4 py-3 overflow-y-auto max-h-full-64 sm:max-h-full-48 md:max-h-full-32 lg:max-h-full-16`, - 'main-message': apply`mx-2.5 my-2.5 px-px text-sm text-foreground-secondary text-justify`, - 'mods-list': apply`flex flex-wrap`, - 'mod-container': apply`w-full md:w-1/2 lg:w-1/3 xl:w-1/4 2xl:w-1/5 px-2.5 py-2.5 box-border`, - 'mod': apply`relative h-full w-full flex flex-col overflow-hidden rounded-lg shadow-lg - bg-notion-secondary border border-divider cursor-pointer`, - 'mod-selected': apply`mod ring ring-accent-blue-focus`, - 'mod-body': apply`px-4 py-3 flex flex-col flex-auto children:cursor-pointer`, - 'mod-preview': apply`object-cover w-full h-32`, - 'mod-title': apply`mb-2 text-xl font-semibold tracking-tight flex items-center`, - 'mod-version': apply`mt-px ml-3 p-1 font-normal text-xs leading-none bg-tag text-tag-text rounded`, - 'mod-tags': apply`text-foreground-secondary mb-2 text-xs`, - 'mod-description': apply`mb-2 text-sm`, - 'mod-authors-container': apply`text-sm font-medium`, - 'mod-author': apply`flex items-center mb-2`, - 'mod-author-avatar': apply`inline object-cover w-5 h-5 rounded-full mr-2`, - 'sidebar': apply`h-full w-96 px-4 pt-3 pb-32 flex flex-col bg-notion-secondary border-l border-divider`, - 'profile-trigger': apply`block px-4 py-3 mb-2 rounded-md text-sm text-left font-semibold shadow-inner - bg-accent-red-hover border border-accent-red text-accent-red focus:(outline-none ring ring-inset ring-accent-red)`, - 'profile-actions': apply`flex`, - 'profile-save': apply`text-sm px-3 py-2 font-medium mt-2 bg-accent-blue text-accent-blue-text rounded-md flex-grow - hover:bg-accent-blue-hover focus:(bg-accent-blue-focus outline-none) text-center`, - 'profile-delete': apply`text-sm px-3 py-2 font-medium ml-3 mt-2 bg-red-tag text-red-tag-text rounded-md flex-grow - border border-red-text hover:bg-red-text focus:(outline-none bg-red-text) text-center`, - 'profile-export': apply`profile-save mr-2`, - 'profile-import': apply`profile-save mr-2`, - 'profile-error': apply`text-xs mt-2 text-red-text`, - 'profile-icon-action': apply`w-4 h-4 -mt-1 inline-block`, - 'profile-icon-text': apply`w-4 h-4 -mt-1 inline-block mr-1`, - 'options-container': apply`px-4 py-3 shadow-inner rounded-lg bg-notion border border-divider space-y-3`, - 'options-placeholder': apply`text-sm text-foreground-secondary`, - 'toggle-box': apply`w-9 h-5 p-0.5 flex items-center bg-toggle-off rounded-full duration-300 ease-in-out cursor-pointer`, - 'toggle-label': apply`relative text-sm flex w-full mt-auto`, - 'toggle-check': apply`appearance-none ml-auto checked:sibling:(bg-toggle-on after::translate-x-4)`, - 'toggle-feature': apply`after::(${pseudoContent} w-4 h-4 bg-toggle-feature rounded-full duration-300) cursor-pointer`, - 'input-label': apply`block text-sm mt-2 relative`, - 'input': apply`transition block w-full mt-2 pl-3 pr-14 py-2 text-sm rounded-md flex bg-input text-foreground - appearance-none placeholder-foreground-secondary ring-1 ring-divider focus:(outline-none ring ring-accent-blue-focus)`, - 'input-tooltip': apply`h-4 w-4 -mt-1 inline-block mr-2`, - 'input-icon': apply`absolute w-11 h-9 right-0 bottom-0 py-2 px-3 bg-notion-secondary rounded-r-md text-icon`, - 'input-placeholder': apply`text-foreground-secondary`, - 'select-option': apply`bg-notion-secondary`, - 'file-latest': apply`block w-full text-left text-foreground-secondary text-xs mt-2 hover:line-through cursor-pointer`, - 'search-container': apply`block mx-2.5 my-2.5 relative`, - 'search': apply`input pr-12`, -}; - -setup({ - preflight: { - html: apply`w-full h-full`, - body: apply`w-full h-full bg-notion font-sans text-foreground`, - }, - theme: { - fontFamily: { - sans: ['var(--theme--font_sans)'], - mono: ['var(--theme--font_mono)'], - }, - colors: { - 'notion': 'var(--theme--bg)', - 'notion-secondary': 'var(--theme--bg_secondary)', - 'notion-popup': 'var(--theme--bg_popup)', - 'divider': 'var(--theme--ui_divider)', - 'input': 'var(--theme--ui_input)', - 'icon': 'var(--theme--icon)', - 'icon-secondary': 'var(--theme--icon_secondary)', - 'foreground': 'var(--theme--text)', - 'foreground-secondary': 'var(--theme--text_secondary)', - 'interactive-hover': 'var(--theme--ui_interactive-hover)', - 'interactive-active': 'var(--theme--ui_interactive-active)', - 'tag': 'var(--theme--tag_default)', - 'tag-text': 'var(--theme--tag_default-text)', - 'toggle': { - 'on': 'var(--theme--ui_toggle-on)', - 'off': 'var(--theme--ui_toggle-off)', - 'feature': 'var(--theme--ui_toggle-feature)', - }, - 'accent': { - 'blue': 'var(--theme--accent_blue)', - 'blue-hover': 'var(--theme--accent_blue-hover)', - 'blue-focus': 'var(--theme--accent_blue-focus)', - 'blue-text': 'var(--theme--accent_blue-text)', - 'red': 'var(--theme--accent_red)', - 'red-hover': 'var(--theme--accent_red-hover)', - 'red-text': 'var(--theme--accent_red-text)', - }, - 'grey': mapColorVariables('grey'), - 'brown': mapColorVariables('brown'), - 'orange': mapColorVariables('orange'), - 'yellow': mapColorVariables('yellow'), - 'green': mapColorVariables('green'), - 'blue': mapColorVariables('blue'), - 'purple': mapColorVariables('purple'), - 'pink': mapColorVariables('pink'), - 'red': mapColorVariables('red'), - }, - extend: { - width: { - 'full-96': 'calc(100% - 24rem)', - }, - maxHeight: { - 'full-16': 'calc(100% - 4rem)', - 'full-32': 'calc(100% - 8rem)', - 'full-48': 'calc(100% - 12rem)', - 'full-64': 'calc(100% - 16rem)', - }, - }, - }, - plugins: customClasses, -}); - -tw`hidden ${Object.keys(customClasses).join(' ')}`; - -export { tw }; diff --git a/repo/registry.json b/repo/registry.json deleted file mode 100644 index 7977fb3..0000000 --- a/repo/registry.json +++ /dev/null @@ -1,8 +0,0 @@ -[ - "menu@a6621988-551d-495a-97d8-3c568bca2e9e", - "theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082", - "components@36a2ffc9-27ff-480e-84a7-c7700a7d232d", - "tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2", - "bypass-preview@cb6fd684-f113-4a7a-9423-8f0f0cff069f", - "calendar-scroll@b1c7db33-dfee-489a-a76c-0dd66f7ed29a" -] diff --git a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/client.mjs b/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/client.mjs deleted file mode 100644 index 4ec6ac3..0000000 --- a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/client.mjs +++ /dev/null @@ -1,20 +0,0 @@ -/* - * notion-enhancer core: theming - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -export default function (api, db) { - const { web } = api; - - const updateTheme = () => - document.documentElement.classList[ - document.body.classList.contains('dark') ? 'add' : 'remove' - ]('dark'); - updateTheme(); - web.addDocumentObserver((mutation) => { - if (mutation.target === document.body) updateTheme(); - }); -} diff --git a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/mod.json b/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/mod.json deleted file mode 100644 index 27b6db1..0000000 --- a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/mod.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "theming", - "id": "0f0bf8b6-eae6-4273-b307-8fc43f2ee082", - "version": "0.11.0", - "description": "the default theme variables, required by other themes & extensions.", - "tags": ["core"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - } - ], - "css": { - "frame": ["variables.css"], - "client": ["variables.css", "prism.css", "theme.css"], - "menu": ["variables.css", "prism.css"] - }, - "js": { - "client": ["client.mjs"] - }, - "options": [] -} diff --git a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/prism.css b/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/prism.css deleted file mode 100644 index 6d9ae4f..0000000 --- a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/prism.css +++ /dev/null @@ -1,156 +0,0 @@ -/* - * notion-enhancer core: theming - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -.token.property { - color: var(--theme--code_property) !important; -} -.token.tag { - color: var(--theme--code_tag) !important; -} -.token.boolean { - color: var(--theme--code_boolean) !important; -} -.token.number { - color: var(--theme--code_number) !important; -} -.token.constant { - color: var(--theme--code_constant) !important; -} -.token.symbol { - color: var(--theme--code_symbol) !important; -} -.token.deleted { - color: var(--theme--code_deleted) !important; -} -.token.selector { - color: var(--theme--code_selector) !important; -} -.token.attr-name { - color: var(--theme--code_attr-name) !important; -} -.token.string { - color: var(--theme--code_string) !important; -} -.token.char { - color: var(--theme--code_char) !important; -} -.token.builtin { - color: var(--theme--code_builtin) !important; -} -.token.inserted { - color: var(--theme--code_inserted) !important; -} -.token.operator { - color: var(--theme--code_operator) !important; -} -.token.entity { - color: var(--theme--code_entity) !important; -} -.token.url { - color: var(--theme--code_url) !important; -} -.token.variable { - color: var(--theme--code_variable) !important; -} -.token.comment { - color: var(--theme--code_comment) !important; -} -.token.cdata { - color: var(--theme--code_cdata) !important; -} -.token.prolog { - color: var(--theme--code_prolog) !important; -} -.token.doctype { - color: var(--theme--code_doctype) !important; -} -.token.atrule { - color: var(--theme--code_atrule) !important; -} -.token.attr-value { - color: var(--theme--code_attr-value) !important; -} -.token.keyword { - color: var(--theme--code_keyword) !important; -} -.token.regex { - color: var(--theme--code_regex) !important; -} -.token.important { - color: var(--theme--code_important) !important; -} -.token.function { - color: var(--theme--code_function) !important; -} -.token.class-name { - color: var(--theme--code_class-name) !important; -} -.token.parameter { - color: var(--theme--code_parameter) !important; -} -.token.decorator { - color: var(--theme--code_decorator) !important; -} -.token.id { - color: var(--theme--code_id) !important; -} -.token.class { - color: var(--theme--code_class) !important; -} -.token.pseudo-element { - color: var(--theme--code_pseudo-element) !important; -} -.token.pseudo-class { - color: var(--theme--code_pseudo-class) !important; -} -.token.attribute { - color: var(--theme--code_attribute) !important; -} -.token.value { - color: var(--theme--code_value) !important; -} -.token.unit { - color: var(--theme--code_unit) !important; -} -.token.punctuation { - color: var(--theme--code_punctuation) !important; - opacity: 0.7 !important; -} -.token.annotation { - color: var(--theme--code_annotation) !important; -} - -.token.operator { - background: transparent !important; -} -.token.namespace { - opacity: 0.7 !important; -} -.token.important, -.token.bold { - font-weight: bold !important; -} -.token.italic { - font-style: italic !important; -} -.token.entity { - cursor: help !important; -} -.token a { - color: inherit !important; -} -.token.punctuation.brace-hover, -.token.punctuation.brace-selected { - outline: solid 1px !important; -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - background: none !important; -} diff --git a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/theme.css b/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/theme.css deleted file mode 100644 index 7a4f74f..0000000 --- a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/theme.css +++ /dev/null @@ -1,1352 +0,0 @@ -/* - * notion-enhancer core: theming - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -/** layout **/ - -.notion-frame .notion-scroller [style*='env(safe-area-inset-'][style*=' width: 900px'], -.notion-frame .notion-scroller [style*='env(safe-area-inset-'][style*=';width: 900px'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 900px'] { - width: var(--theme--page-width) !important; -} -.notion-frame .notion-scroller [style*='env(safe-area-inset-'][style*=' width: 100%'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 100%'] { - width: var(--theme--page-width_full) !important; -} -.notion-frame - [style*='padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right));'] { - padding-left: var(--theme--page-padding) !important; - padding-right: var(--theme--page-padding) !important; -} -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'], -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'] - img { - height: var(--theme--page_banner-height) !important; -} - -.notion-peek-renderer > :nth-child(2) { - max-width: var(--theme--page_preview-width) !important; -} - -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-left: calc(126px + env(safe-area-inset-left));'] { - padding-left: var(--theme--page_preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-right: calc(126px + env(safe-area-inset-right));'] { - padding-right: var(--theme--page_preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-left: calc(126px + env(safe-area-inset-left));'] { - margin-left: var(--theme--page_preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-right: calc(126px + env(safe-area-inset-right));'] { - margin-right: var(--theme--page_preview-padding) !important; -} -.notion-peek-renderer .notion-page-content { - padding-left: var(--theme--page_preview-padding) !important; - padding-right: var(--theme--page_preview-padding) !important; - width: 100%; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'], -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'] - img { - height: var(--theme--page_preview_banner-height) !important; -} - -/* backgrounds */ - -body, -.notion-cursor-listener, -.notion-frame, -.notion-timeline-view, -.notion-cursor-listener > div > :first-child[style*='z-index: 100;'], -.notion-space-settings > div > div > div:nth-child(2) > div, -.notion-body.dark .notion-collection_view_page-block > [style*='background: rgb(47, 52, 55)'], -.notion-body.dark .notion-collection_view_page-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) .notion-collection_view_page-block > [style*='background: white'], -.notion-body:not(.dark) .notion-collection_view_page-block[style*='background: white'], -.notion-body.dark .notion-collection_view-block > [style*='background: rgb(47, 52, 55)'], -.notion-body.dark .notion-collection_view-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) .notion-collection_view-block > [style*='background: white'], -.notion-body:not(.dark) .notion-collection_view-block[style*='background: white'], -.notion-body.dark .notion-timeline-view [style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-timeline-view - [style*='background: white']:not(.notion-timeline-item), -.notion-body:not(.dark) .notion-timeline-view [style*='background: rgb(253, 253, 253);'], -.notion-updates-menu footer > div[style*='background'], -:not(.notion-sidebar-container) > div > div > .notion-sidebar > :nth-child(2), -:not(.notion-sidebar-container) > div > div > .notion-sidebar > :nth-child(3), -:not(.notion-sidebar-container) > div > div > .notion-sidebar > :nth-child(3) > :nth-child(2), -.notion-peek-renderer > div[style*='background'], -.notion-peek-renderer > div[style*='background'] > :first-child, -.notion-peek-renderer > div[style*='background'] > :first-child > div > :nth-child(3), -.notion-page-template-modal { - background: var(--theme--bg) !important; -} -.notion-timeline-item-row + div > div > div, -.notion-timeline-view > :nth-child(2) > :first-child > div > div { - border: 1px solid var(--theme--bg) !important; - background: var(--theme--ui_toggle-off) !important; -} -.notion-timeline-item-row + div > div > div svg, -.notion-timeline-view > :nth-child(2) > :first-child > div > div svg { - fill: var(--theme--bg) !important; -} - -.notion-sidebar-container, -.notion-sidebar > [style*='border-top-right-radius'], -.notion-space-settings > div > div > div:first-child, -.notion-body.dark .notion-collection_view_page-block [style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-collection_view_page-block - [style*='background: rgb(247, 246, 243)'], -.notion-body.dark .notion-collection_view-block [style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-collection_view-block - [style*='background: rgb(247, 246, 243)'], -.notion-body.dark .notion-timeline-view [style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) .notion-timeline-view [style*='background: rgb(247, 246, 243)'], -.notion-space-settings - > div - > div - > div:nth-child(2) - table - td[style*='background:']:not([style*='background: transparent']), -.notion-timeline-view > :first-child > div, -.notion-body:not(.dark) - .notion-timeline-view - > div - > div - > [style*='background: rgb(247, 247, 247); border-radius: 11px;'], -.notion-page-template-modal > :last-child, -.notion-page-template-modal > :last-child > div > :last-child { - background: var(--theme--bg_secondary) !important; -} - -.notion-default-overlay-container - [style*='position: absolute; inset: 0px; background: rgba(15, 15, 15, 0.6);']:empty { - background: var(--theme--ui_shadow) !important; -} - -.notion-overlay-container.notion-default-overlay-container - [style*='display: flex'] - > [style*='position: relative; max-width:'][style*='overflow: hidden']:not([style*='border-radius: 3px;'][style*='position: relative; max-width: calc(100vw - 24px); box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 4px; overflow: hidden;'][style*='padding: 4px 8px; font-size: 12px; line-height: 1.4; font-weight: 500;']), -.notion-overlay-container.notion-default-overlay-container - [style*='display: flex'] - > [style*='position: relative; max-width:'][style*='overflow: hidden'] - footer - > [style*='background-color:'], -.notion-updates-menu > :first-child > div[style*='background'], -#notion-app - > div - > div.notion-overlay-container.notion-default-overlay-container - > div:nth-child(2) - > div - > div:nth-child(2)[style*='margin-bottom: 0px; top: 90px; overflow: hidden; width: 75%;'], -.notion-default-overlay-container - > div - > div:not(.notion-peek-renderer) - > [style*='box-shadow'], -.notion-page-block.notion-collection-item > a[style*='background:'], -[style*='z-index:'][style*='box-shadow: '][style*='font-size: 12px;'][style*='min-height: 24px; overflow: hidden; pointer-events:'], -.notion-focusable[role='button'][tabindex='0'][style*='box-shadow:'][style*='background:'][style*='transition: background 20ms ease-in 0s; cursor: pointer;']:not([style*='rgb(46, 170, 220);']):not([style*='rgb(6, 156, 205);']):not([style*='rgb(0, 141, 190);']):not([style*='flex: 1 1 0%; white-space: nowrap; height: 26px; border-radius: 3px 0px 0px 3px;']), -.notion-text-action-menu > div > div, -.notion-default-overlay-container - [style*='min-width: 300px;'] - [style*='width: 240px'] - > .notion-focusable:not(:hover), -.notion-transclusion_reference-block > div > div > :nth-child(3), -.notion-transclusion_container-block > div > div > :nth-child(3), -.notion-page-block > div > div > div > .notion-focusable:not(:hover) { - background: var(--theme--bg_popup) !important; - box-shadow: var(--theme--ui_shadow, rgba(15, 15, 15, 0.05)) 0px 0px 0px 1px, - var(--theme--ui_shadow, rgba(15, 15, 15, 0.1)) 0px 3px 6px, - var(--theme--ui_shadow, rgba(15, 15, 15, 0.2)) 0px 9px 24px !important; -} - -.notion-media-menu > div > div > div[style*='background'], -.notion-media-menu > div > div > div > div[style*='background']:not(.notion-focusable), -.notion-body.dark - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'], -.notion-focusable[style*='background: rgb(80, 85, 88);'], -.notion-body:not(.dark) - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'] - .notion-focusable[style*='background: white;'], -.notion-timeline-item { - background: var(--theme--bg_popup) !important; -} - -.notion-discussion-input > div > div[style*='background'], -.notion-body.dark - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'] - [style*='grid-column: property-start / value-end; background: rgba(255, 255, 255, 0.02);'], -.notion-body:not(.dark) - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'] - [style*='grid-column: property-start / value-end; background: rgba(0, 0, 0, 0.02);'], -.notion-board-view [style*='width: 20px; margin-left: -20px; margin-top: -8px;'], -.notion-page-block > div > div > div[style*='background-color: white;'], -.line-numbers.notion-code-block + div .notion-focusable:not(:hover), -.notion-overlay-container - [style*='position: relative; max-width: calc(100vw - 24px); box-shadow:'] - > [style*='display: flex; align-items: center; padding: 8px 10px; width: 100%; background:'], -.notion-default-overlay-container - > div:nth-child(3) - > div - > div:nth-child(2) - > div:nth-child(2) - > div - > div - > div - > div - > div - > div:nth-child(2)[style*='position: absolute; display: inline-flex; min-width: 100%; height: 32px; z-index: 1; background:'], -.notion-default-overlay-container - > div:nth-child(2) - > div - > div:nth-child(2) - > div:nth-child(2) - > div - > div - > div - > div - > div - > div:nth-child(2)[style*='position: absolute; display: inline-flex; min-width: 100%; height: 32px; z-index: 1; background:'] { - background: transparent !important; -} - -.notion-timeline-view - > div - > div - > [style*='height: 100%; background-image: linear-gradient(to right, '] { - background-image: linear-gradient( - to right, - var(--theme--bg) 20%, - transparent 100% - ) !important; -} -.notion-timeline-view - > div - > div - > [style*='height: 100%; background-image: linear-gradient(to left, '] { - background-image: linear-gradient( - to left, - var(--theme--bg) 20%, - transparent 100% - ) !important; -} - -/** scrollbars **/ - -::-webkit-scrollbar-track, -::-webkit-scrollbar-corner { - background: var(--theme--scrollbar_track) !important; -} -::-webkit-scrollbar-thumb { - background: var(--theme--scrollbar_thumb) !important; -} -::-webkit-scrollbar-thumb:hover { - background: var(--theme--scrollbar_thumb-hover) !important; -} - -/** typography **/ - -[style*='Segoe UI'] { - font-family: var(--theme--font_sans) !important; -} -[style*='Georgia'] { - font-family: var(--theme--font_serif) !important; -} -[style*='iawriter-mono'] { - font-family: var(--theme--font_mono) !important; -} -[style*='SFMono-Regular'] { - font-family: var(--theme--font_code) !important; -} -.notion-selectable.notion-quote-block div[spellcheck='true'] { - font-family: var(--theme--font_quote) !important; -} -[placeholder='Heading 1'], -[placeholder='Heading 2'], -[placeholder='Heading 3'] { - font-family: var(--theme--font_headings) !important; -} - -/** ui **/ - -.notion-page-mention-token.notion-enable-hover:hover { - box-shadow: 0 0 0 3px var(--theme--ui_interactive-hover) !important; - background: var(--theme--ui_interactive-hover) !important; -} - -.notion-to_do-block [style*='background: rgb(46, 170, 220);'], -.notion-focusable - > [style*='width: 16px; height: 16px;'][style*='background: rgb(46, 170, 220);'], -.notion-focusable > [style*='border-radius: 44px;'][style*='background: rgb(46, 170, 220);'] { - background: var(--theme--ui_toggle-on) !important; -} -.notion-body.dark - .notion-focusable - > [style*='border-radius: 44px;'][style*='background: rgba(202, 204, 206, 0.3);'], -.notion-body:not(.dark) - .notion-focusable - > [style*='border-radius: 44px;'][style*='background: rgba(135, 131, 120, 0.3);'] { - background: var(--theme--ui_toggle-off) !important; -} - -.notion-focusable - > [style*='width: 16px; height: 16px;'][style*='background: rgb(46, 170, 220);'] - .check, -.notion-to_do-block .checkboxSquare[style*='fill: inherit'], -.notion-to_do-block .check { - fill: var(--theme--ui_toggle-feature) !important; -} -.notion-focusable > [style*='border-radius: 44px;'] > div:empty { - background: var(--theme--ui_toggle-feature) !important; -} - -.notion-body.dark [style*='background: rgb(71, 76, 80);'], -.notion-body:not(.dark) [style*='background: rgba(55, 53, 47, 0.08)'], -.notion-focusable[style*='z-index:'][style*='box-shadow: '][style*='font-size: 12px;'][style*='min-height: 24px; overflow: hidden; pointer-events:']:hover, -.notion-focusable[role='button'][tabindex='0'][style*='box-shadow:'][style*='background:'][style*='transition: background 20ms ease-in 0s; cursor: pointer;']:not([style*='rgb(6, 156, 205);']):not([style*='rgb(0, 141, 190);']):hover, -[style*='z-index:'][style*='box-shadow: '][style*='font-size: 12px;'][style*='min-height: 24px; overflow: hidden; pointer-events:'] - > .notion-focusable[style*='background']:hover, -.notion-body:not(.dark) - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'] - .notion-focusable[style*='background: rgb(239, 239, 238);'], -.line-numbers.notion-code-block + div .notion-focusable:hover { - background: var(--theme--ui_interactive-hover) !important; -} -.notion-body.dark .notion-focusable[role='button'][style*='background: rgb(63, 68, 71);'], -.notion-body:not(.dark) - .notion-focusable[role='button'][style*='background: rgba(55, 53, 47, 0.16)'], -[style*='z-index:'][style*='box-shadow: '][style*='font-size: 12px;'][style*='min-height: 24px; overflow: hidden; pointer-events:'] - > .notion-focusable[style*='background']:active, -.notion-body:not(.dark) - .notion-default-overlay-container - [style*='grid-template-columns: [boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end];'] - .notion-focusable[style*='background: rgb(223, 223, 222);'] { - background: var(--theme--ui_interactive-active) !important; -} - -.notion-focusable-within, -.notion-share-menu - .notion-block-permission-settings-public-access - + div - > div - > div - > div - > div - > .notion-focusable:first-child[role='button'][tabindex='0'][style*='user-select: none;'], -.notion-overlay-container - > div:nth-child(2) - > div - > div:nth-child(2) - > div:nth-child(2) - > div - > div - > div - > div - > div - > div:nth-child(1)[style*='display: flex; width: 100%; position: relative; z-index: 2; padding: 6px 10px; font-size: 14px; background:'], -.notion-overlay-container - > div:nth-child(3) - > div - > div:nth-child(2) - > div:nth-child(2) - > div - > div - > div - > div - > div - > div:nth-child(1)[style*='display: flex; width: 100%; position: relative; z-index: 2; padding: 6px 10px; font-size: 14px; background:'] { - background: var(--theme--ui_input) !important; -} - -.notion-overlay-container - [style*='border-radius: 3px;'][style*='position: relative; max-width: calc(100vw - 24px); box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 4px; overflow: hidden;'][style*='padding: 4px 8px; font-size: 12px; line-height: 1.4; font-weight: 500;'] { - background: var(--theme--ui_tooltip) !important; - box-shadow: var(--theme--ui_shadow) 0px 1px 4px !important; - color: var(--theme--ui_tooltip-title) !important; -} -.notion-overlay-container - [style*='border-radius: 3px;'][style*='position: relative; max-width: calc(100vw - 24px); box-shadow: rgba(0, 0, 0, 0.3) 0px 1px 4px; overflow: hidden;'][style*='padding: 4px 8px; font-size: 12px; line-height: 1.4; font-weight: 500;'] - [style*='color: '] { - color: var(--theme--ui_tooltip-description) !important; -} - -.notion-help-button { - background: var(--theme--tag_default) !important; - box-shadow: var(--theme--ui_shadow, rgba(15, 15, 15, 0.15)) 0px 0px 0px 1px, - var(--theme--ui_shadow, rgba(15, 15, 15, 0.15)) 0px 2px 4px !important; -} - -.notion-body.dark - [style*='border-radius: 20px; box-shadow: rgba(255, 255, 255, 0.07) 0px 0px 0px 2px inset;'], -.notion-body:not(.dark) - [style*='border-radius: 20px; box-shadow: rgba(55, 53, 47, 0.09) 0px 0px 0px 2px inset;'] { - box-shadow: var(--theme--ui_divider) 0px 0px 0px 2px inset !important; -} -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px 0px 0px 1px inset; border-radius: 3px;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px 0px 0px 1px inset; border-radius: 3px;'], -.notion-gallery-view - .notion-focusable[role='button'][style*='font-size: 14px; border-radius: 3px; box-shadow:']:last-child { - box-shadow: var(--theme--ui_divider) 0px 0px 0px 1px inset !important; -} -.notion-body.dark - [style*='border-radius: 3px; box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 0px 1px;'], -.notion-body:not(.dark) - [style*='border-radius: 3px; box-shadow: rgba(55, 53, 47, 0.1) 0px 0px 0px 1px;'] { - box-shadow: var(--theme--ui_divider) 0px 0px 0px 1px !important; -} - -#notion-app - .DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end) { - color: var(--theme--accent_red-text) !important; -} -#notion-app - .DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end)::after, -.notion-timeline-view [style*='background: rgb(211, 79, 67); width: 22px;'], -.notion-timeline-view - [style*='width: 7px; height: 7px; background: rgb(211, 79, 67); border-radius: 100%;'] { - background: var(--theme--accent_red) !important; -} -#notion-app - .DayPicker-Day.DayPicker-Day--range.DayPicker-Day--start:not([style*='color: white'])::after, -#notion-app - .DayPicker-Day.DayPicker-Day--range.DayPicker-Day--end:not([style*='color: white'])::after { - content: ''; - background-color: var(--theme--accent_blue-selection) !important; - position: absolute; - width: 32px; - height: 30px; -} -#notion-app - .DayPicker-Day.DayPicker-Day--range.DayPicker-Day--start:not([style*='color: white'])::after { - border-top-left-radius: 3px; - border-bottom-left-radius: 3px; -} -#notion-app - .DayPicker-Day.DayPicker-Day--range.DayPicker-Day--end:not([style*='color: white'])::after { - border-top-right-radius: 3px; - border-bottom-right-radius: 3px; -} -.notion-calendar-view-day[style*='background'] { - background-color: var(--theme--accent_red) !important; - color: var(--theme--accent_red-text) !important; -} -.DayPicker-Day--outside, -.DayPicker-Weekday { - color: var(--theme--text_secondary) !important; -} -.notion-timeline-view [style*='height: 100%; border-right: 1px solid rgb(211, 79, 67);'] { - border-right: 1px solid var(--theme--accent_red) !important; -} - -/* link underline */ - -.notion-body.dark - [style*='background-image: linear-gradient(to right, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.14) 100%);'], -.notion-body:not(.dark) - [style*='background-image: linear-gradient(to right, rgba(55, 53, 47, 0.16) 0%, rgba(55, 53, 47, 0.16) 100%);'] { - background-image: linear-gradient( - to right, - var(--theme--ui_divider) 0%, - var(--theme--ui_divider) 100% - ) !important; -} - -/** dividers **/ - -.notion-body.dark - .notion-page-content - .notranslate[style*='border-bottom: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body:not(.dark) - .notion-page-content - .notranslate[style*='border-bottom: 1px solid rgba(55, 53, 47, 0.16);'] { - border-bottom: 1px solid var(--theme--ui_divider) !important; -} - -.notion-body.dark [style*='border-top: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border-top: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border-top: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-top: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgba(55, 53, 47, 0.16)'] { - border-top: 1px solid var(--theme--ui_divider) !important; -} -.notion-body.dark [style*='border-bottom: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border-bottom: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border-bottom: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-bottom: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border-bottom: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border-bottom: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border-bottom: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border-bottom: 1px solid rgba(55, 53, 47, 0.16)'] { - border-bottom: 1px solid var(--theme--ui_divider) !important; -} -.notion-body.dark [style*='border-right: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border-right: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border-right: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-right: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border-right: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border-right: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border-right: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border-right: 1px solid rgba(55, 53, 47, 0.16)'] { - border-right: 1px solid var(--theme--ui_divider) !important; -} -.notion-body.dark [style*='border-left: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border-left: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border-left: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-left: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border-left: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border-left: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border-left: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border-left: 1px solid rgba(55, 53, 47, 0.16)'] { - border-left: 1px solid var(--theme--ui_divider) !important; -} -.notion-body.dark [style*='border: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border: 1px solid rgba(55, 53, 47, 0.16)'] { - border: 1px solid var(--theme--ui_divider) !important; -} -.notion-body.dark [style*='border-color: 1px solid rgb(77, 81, 83)'], -.notion-body.dark [style*='border-color: 1px solid rgb(63, 66, 69)'], -.notion-body.dark [style*='border-color: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-color: 1px solid rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='border-color: 1px solid rgb(223, 223, 222)'], -.notion-body:not(.dark) [style*='border-color: 1px solid rgb(237, 237, 236)'], -.notion-body:not(.dark) [style*='border-color: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border-color: 1px solid rgba(55, 53, 47, 0.16)'], -.notion-callout-block > div > :not([style*='border-color: transparent']) { - border-color: var(--theme--ui_divider) !important; -} - -.notion-body.dark [style*='box-shadow: rgb(77, 81, 83) -1px 0px 0px'], -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) -1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(223, 223, 222) -1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgba(55, 53, 47, 0.09) -1px 0px 0px'], -.notion-body.dark [style*='box-shadow: rgb(63, 66, 69) -1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(237, 237, 236) -1px 0px 0px'] { - box-shadow: var(--theme--ui_divider) -1px 0px 0px !important; -} -.notion-body.dark [style*='box-shadow: rgb(77, 81, 83) 1px 0px 0px'], -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(223, 223, 222) 1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgba(55, 53, 47, 0.09) 1px 0px 0px'], -.notion-body.dark [style*='box-shadow: rgb(63, 66, 69) 1px 0px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(237, 237, 236) 1px 0px 0px'] { - box-shadow: var(--theme--ui_divider) 1px 0px 0px !important; -} -.notion-body.dark [style*='box-shadow: rgb(77, 81, 83) 0px -1px 0px'], -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px -1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(223, 223, 222) 0px -1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px -1px 0px'], -.notion-body.dark [style*='box-shadow: rgb(63, 66, 69) 0px -1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(237, 237, 236) 0px -1px 0px'] { - box-shadow: var(--theme--ui_divider) 0px -1px 0px !important; -} -.notion-body.dark [style*='box-shadow: rgb(77, 81, 83) 0px 1px 0px'], -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px 1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(223, 223, 222) 0px 1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px 1px 0px'], -.notion-body.dark [style*='box-shadow: rgb(63, 66, 69) 0px 1px 0px'], -.notion-body:not(.dark) [style*='box-shadow: rgb(237, 237, 236) 0px 1px 0px'] { - box-shadow: var(--theme--ui_divider) 0px 1px 0px !important; -} - -.notion-body.dark [style*='height: 1px;'][style*='background: rgba(255, 255, 255, 0.07);'], -.notion-body:not(.dark) [style*='height: 1px;'][style*='background: rgba(55, 53, 47, 0.09);'] { - background: var(--theme--ui_divider) !important; -} -.notion-body.dark - [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px, rgb(77, 81, 83) 0px 1px 0px;'], -.notion-body:not(.dark) - [style*='box-shadow: white -3px 0px 0px, rgb(223, 223, 222) 0px 1px 0px;'] { - box-shadow: var(--theme--ui_divider) 0px 1px 0px !important; -} -.notion-body.dark - .notion-collection_view_page-block - > [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px;'], -.notion-body:not(.dark) - .notion-collection_view_page-block - > [style*='box-shadow: white -3px 0px 0px;'], -.notion-body.dark - .notion-collection_view-block - > [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px;'], -.notion-body:not(.dark) - .notion-collection_view-block - > [style*='box-shadow: white -3px 0px 0px;'] { - box-shadow: transparent -3px 0px 0px !important; - margin-left: 20px; -} -.notion-focusable[role='button'][style*='box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px;'] { - box-shadow: var(--theme--ui_divider) 0px 0px 0px 1px !important; -} - -.notion-sidebar-container[style*='box-shadow:'] { - box-shadow: var(--theme--ui_divider) -2px 0px 0px 0px inset !important; -} - -/** colours **/ - -[style*='background: rgb(46, 170, 220)'] { - background: var(--theme--accent_blue) !important; -} -[style*=' color: rgb(46, 170, 220)'], -[style^='color: rgb(46, 170, 220)'] { - color: var(--theme--accent_blue) !important; -} -[style*='background-color: rgba(46, 170, 220, 0.'] { - background-color: var(--theme--accent_blue-selection) !important; -} -*::selection { - background: var(--theme--accent_blue-selection, rgba(26, 170, 220, 0.3)) !important; -} -.notion-page-mention-token::selection, -.notion-selectable-halo { - background: var(--theme--accent_blue-selection, rgba(26, 170, 220, 0.2)) !important; -} -.notion-focusable-within:focus-within, -.notion-focusable:focus-visible { - box-shadow: var(--theme--accent_blue-focus, rgba(26, 170, 220, 0.7)) 0px 0px 0px 1px inset, - var(--theme--accent_blue-focus, rgba(26, 170, 220, 0.4)) 0px 0px 0px 2px !important; -} - -@keyframes pulsing-button-border { - 0% { - border-color: var(--theme--accent_blue) !important; - } - 50% { - border-color: rgba(255, 255, 255, 0) !important; - } - 100% { - border-color: var(--theme--accent_blue) !important; - } -} - -[style*='background: rgb(6, 156, 205);'] { - background: var(--theme--accent_blue-hover) !important; -} -[style*='background: rgb(0, 141, 190);'] { - background: var(--theme--accent_blue-focus) !important; -} - -[style*='background-color: rgb(235, 87, 87); height: 28px; width: 28px;'] { - background: var(--theme--accent_red) !important; -} -[style*='background: rgb(235, 87, 87); color: white; border-radius: 3px;']:not([role='button']) { - background: var(--theme--accent_red) !important; - color: var(--theme--accent_red-text) !important; -} -[style*='color: rgb(235, 87, 87); border: 1px solid rgba(235, 87, 87, 0.5);'][role='button'] { - color: var(--theme--accent_red) !important; - border: 1px solid var(--theme--accent_red) !important; -} -.notion-focusable[style*='border-radius: 3px;'][style*='color: rgb(235, 87, 87);'][role='button'], -[style*='font-size: 12px; font-weight: 600; color: rgb(235, 87, 87);'], -[style*='flex-shrink: 0; margin-top: -1px; margin-right: 4px; fill: rgb(235, 87, 87);'], -[style*='font-size: 12px;'] > [style*='pointer-events: none; color: rgb(235, 87, 87);'] { - color: var(--theme--accent_red) !important; - fill: var(--theme--accent_red) !important; -} -.notion-focusable[style*='border-radius: 3px;'][style*='background: rgba(235, 87, 87, 0.1);'][role='button']:hover { - background: var(--theme--accent_red-hover) !important; -} - -.notion-transclusion_container-block > div > div > div[style*='border: 2px'], -.notion-transclusion_reference-block > div > div > div[style*='border: 2px'] { - border-color: var(--theme--accent_red, #e38676) !important; -} - -.notion-text-mention-token[style*='color:#2EAADC;'] { - color: var(--theme--accent_blue) !important; -} -.notion-text-mention-token[style*='color:#EB5757;'], -.notion-link:hover { - color: var(--theme--accent_red) !important; -} - -.notion-body.dark [style*='fill: rgb(202, 204, 206)'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.8)'] { - fill: var(--theme--icon) !important; -} -.notion-body.dark [style*='fill: rgba(202, 204, 206, 0.'], -.notion-body.dark [style*='fill: rgba(255, 255, 255, 0.'], -.notion-body:not(.dark) [style*='fill: rgba(25, 23, 17, 0.'], -.notion-body:not(.dark) [style*='fill: rgb(55, 53, 47)'], -.notion-body:not(.dark) - [style*='fill: rgba(55, 53, 47, 0.']:not([style*='fill: rgba(55, 53, 47, 0.8)']) { - fill: var(--theme--icon_secondary) !important; -} -.alarmClock { - fill: currentColor !important; -} - -.notion-app-inner, -.notion-page-content, -.notion-selectable.notion-page-block .notion-focusable > [style*=';color:'], -.notion-record-icon.notranslate.notion-focusable, -.notion-topbar-share-menu.notion-focusable, -.notion-collection-view-select.notion-focusable, -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.9);'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) [style*=' color: rgb(55, 53, 47)'], -.notion-body:not(.dark) [style^='color: rgb(55, 53, 47)'] { - color: var(--theme--text) !important; -} -.notion-body.dark [style*='border-bottom: 2px solid rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) [style*='border-bottom: 2px solid rgb(55, 53, 47);'] { - border-bottom: 2px solid var(--theme--text) !important; -} -.notion-body.dark [style*='caret-color: rgba(255, 255, 255, 0.9)'], -.notion-body:not(.dark) [style*='caret-color: rgb(55, 53, 47)'] { - caret-color: var(--theme--text) !important; -} -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.6)'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.6)'], -.notion-body.dark [style^='color:rgba(255, 255, 255, 0.6)'], -.notion-body:not(.dark) [style*=' color: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) [style^='color: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) [style^='color:rgba(55, 53, 47, 0.6)'], -.notion-sidebar-container > [style*='color'], -.notion-gallery-view - .notion-focusable[role='button'][style*='font-size: 14px; border-radius: 3px; box-shadow:']:last-child - svg - + div { - color: var(--theme--text_secondary) !important; -} -.notion-page-mention-token__title { - border-bottom: 0.05em solid var(--theme--text_secondary) !important; -} -.notion-to_do-block [placeholder='To-do'][style*='text-decoration: line-through'] { - text-decoration: line-through var(--theme--text_secondary) !important; -} -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.4)'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.4)'], -.notion-body:not(.dark) [style*=' color: rgba(55, 53, 47, 0.4)'], -.notion-body:not(.dark) [style^='color: rgba(55, 53, 47, 0.4)'], -.notion-page-controls, -.notion-page-details-controls, -.notion-calendar-view-day { - color: var(--theme--text_secondary) !important; -} -.notion-body.dark [style*='-webkit-text-fill-color: rgba(255, 255, 255, 0.4)'], -.notion-body:not(.dark) [style*='-webkit-text-fill-color: rgba(55, 53, 47, 0.4)'] { - -webkit-text-fill-color: var(--theme--text_secondary) !important; -} -.notion-body.dark [style*='border-color:rgba(255,255,255,0.4)'], -.notion-body:not(.dark) [style*='border-color:rgba(55,53,47,0.4)'] { - border-color: var(--theme--text_secondary) !important; -} - -.notion-body.dark [style*='background: rgb(80, 85, 88)']:not([role='button']), -.notion-body.dark [style*='background-color: rgb(80, 85, 88)']:not([role='button']), -.notion-body:not(.dark) [style*='background: rgba(206, 205, 202, 0.5)']:not([role='button']), -.notion-body:not(.dark) - [style*='background-color: rgba(206, 205, 202, 0.5)']:not([role='button']) { - background: var(--theme--tag_default) !important; - color: var(--theme--tag_default-text) !important; -} - -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > div:nth-child(3) - > div - > div - > div:nth-child(2) - > div - > div - > div - > div - > div - > div - > div:nth-child(2) - > div:nth-child(3) - > div - > div:nth-child(1) - > [style^='color: rgba(255, 255, 255, 0.6)'], -.notion-body.dark .notion-text-block > [style^='color: rgba(255, 255, 255, 0.6)'], -.notion-body.dark .notion-callout-block > div > [style*=' color: rgba(255, 255, 255, 0.6)'], -.notion-body.dark [style*='color:rgba(151,154,155,0.95)'][data-token-index], -.notion-body.dark [style*='color: rgba(151, 154, 155, 0.95)'][data-token-index], -.notion-body:not(.dark) [style*='color:rgb(155,154,151)'][data-token-index], -.notion-body:not(.dark) [style*='color: rgb(155, 154, 151)'][data-token-index], -.notion-body:not(.dark) .notion-text-block > [style^='color: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > div:nth-child(3) - > div - > div - > div:nth-child(2) - > div - > div - > div - > div - > div - > div - > div:nth-child(2) - > div:nth-child(3) - > div - > div:nth-child(1) - > [style*=' color: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) - .notion-callout-block - > div - > [style*=' color: rgba(55, 53, 47, 0.6)'] { - color: var(--theme--text_grey) !important; - fill: var(--theme--text_grey) !important; -} -.notion-body.dark [style*='fill: rgba(255, 255, 255, 0.6);'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.6);'] { - fill: var(--theme--text_grey) !important; -} -.notion-body.dark [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) [style*='background:rgb(235,236,237)'] { - background: var(--theme--highlight_grey) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(235,236,237)'] { - color: var(--theme--highlight_grey-text) !important; -} -.notion-body.dark [style*='color:rgba(151,154,155,0.95)'] [style*='background:rgb(69,75,78)'], -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); fill: rgba(255, 255, 255, 0.6);'] - [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) - [style*='color:rgb(155,154,151)'] - [style*='background:rgb(235,236,237)'], -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); fill: rgba(55, 53, 47, 0.6);'] - [style*='background:rgb(235,236,237)'] { - background: var(--theme--highlight_grey) !important; - color: var(--theme--text_grey) !important; - fill: var(--theme--text_grey) !important; -} -.notion-body.dark [style*='background: rgb(69, 75, 78)'], -.notion-body:not(.dark) [style*='background: rgb(235, 236, 237)'] { - background: var(--theme--block_grey) !important; - color: var(--theme--block_grey-text) !important; -} -.notion-body.dark [style*='background: rgba(151, 154, 155, 0.5)'], -.notion-body.dark [style*='background-color: rgba(151, 154, 155, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(140, 46, 0, 0.2)'], -.notion-body:not(.dark) [style*='background: rgba(155, 154, 151, 0.4)'] { - background: var(--theme--tag_grey) !important; - color: var(--theme--tag_grey-text) !important; -} -.notion-body.dark [style*='background: rgba(69, 75, 78, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(235, 236, 237, 0.3)'] { - background: var(--theme--callout_grey) !important; - color: var(--theme--callout_grey-text) !important; -} - -.notion-body.dark [style*='color:rgb(147,114,100)'], -.notion-body.dark [style^='color: rgb(147, 114, 100)'], -.notion-body.dark [style*=' color: rgb(147, 114, 100)'], -.notion-body:not(.dark) [style*='color:rgb(100,71,58)'], -.notion-body:not(.dark) [style^='color: rgb(100, 71, 58)'], -.notion-body:not(.dark) [style*=' color: rgb(100, 71, 58)'] { - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='fill: rgb(147, 114, 100);'], -.notion-body:not(.dark) [style*='fill: rgb(100, 71, 58);'] { - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) [style*='background:rgb(233,229,227)'] { - background: var(--theme--highlight_brown) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(233,229,227)'] { - color: var(--theme--highlight_brown-text) !important; -} -.notion-body.dark [style*='color:rgb(147,114,100)'] [style*='background:rgb(67,64,64)'], -.notion-body.dark - [style*='color: rgb(147, 114, 100); fill: rgb(147, 114, 100);'] - [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) [style*='color:rgb(100,71,58)'] [style*='background:rgb(233,229,227)'], -.notion-body:not(.dark) - [style*='color: rgb(100, 71, 58); fill: rgb(100, 71, 58);'] - [style*='background:rgb(233,229,227)'] { - background: var(--theme--highlight_brown) !important; - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background: rgb(67, 64, 64)'], -.notion-body:not(.dark) [style*='background: rgb(233, 229, 227)'] { - background: var(--theme--block_brown) !important; - color: var(--theme--block_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(147, 114, 100, 0.5)'], -.notion-body.dark [style*='background-color: rgba(147, 114, 100, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(140, 46, 0, 0.2)'] { - background: var(--theme--tag_brown) !important; - color: var(--theme--tag_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(67, 64, 64, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(233, 229, 227, 0.3)'] { - background: var(--theme--callout_brown) !important; - color: var(--theme--callout_brown-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,163,68)'], -.notion-body.dark [style^='color: rgb(255, 163, 68)'], -.notion-body.dark [style*=' color: rgb(255, 163, 68)'], -.notion-body:not(.dark) [style*='color:rgb(217,115,13)'], -.notion-body:not(.dark) [style^='color: rgb(217, 115, 13)'], -.notion-body:not(.dark) [style*=' color: rgb(217, 115, 13)'] { - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='fill: rgb(255, 163, 68);'], -.notion-body:not(.dark) [style*='fill: rgb(217, 115, 13);'] { - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) [style*='background:rgb(250,235,221)'] { - background: var(--theme--highlight_orange) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(250,235,221)'] { - color: var(--theme--highlight_orange-text) !important; -} -.notion-body.dark [style*='color:rgb(255,163,68)'] [style*='background:rgb(89,74,58)'], -.notion-body.dark - [style*='color: rgb(255, 163, 68); fill: rgb(255, 163, 68);'] - [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) - [style*='color:rgb(217,115,13)'] - [style*='background:rgb(250,235,221)'], -.notion-body:not(.dark) - [style*='color: rgb(217, 115, 13); fill: rgb(217, 115, 13);'] - [style*='background:rgb(250,235,221)'] { - background: var(--theme--highlight_orange) !important; - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background: rgb(89, 74, 58)'], -.notion-body:not(.dark) [style*='background: rgb(250, 235, 221)'] { - background: var(--theme--block_orange) !important; - color: var(--theme--block_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 163, 68, 0.5)'], -.notion-body.dark [style*='background-color: rgba(255, 163, 68, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(245, 93, 0, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(245, 93, 0, 0.2)'] { - background: var(--theme--tag_orange) !important; - color: var(--theme--tag_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 74, 58, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(250, 235, 221, 0.3)'] { - background: var(--theme--callout_orange) !important; - color: var(--theme--callout_orange-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,220,73)'], -.notion-body.dark [style^='fill: rgb(255, 220, 73)'], -.notion-body.dark [style*=' fill: rgb(255, 220, 73)'], -.notion-body:not(.dark) [style*='color:rgb(223,171,1)'], -.notion-body:not(.dark) [style^='fill: rgb(223, 171, 1)'], -.notion-body:not(.dark) [style*=' fill: rgb(223, 171, 1)'] { - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='color: rgb(255, 220, 73);'], -.notion-body:not(.dark) [style*='color: rgb(223, 171, 1);'] { - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) [style*='background:rgb(251,243,219)'] { - background: var(--theme--highlight_yellow) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,243,219)'] { - color: var(--theme--highlight_yellow-text) !important; -} -.notion-body.dark [style*='color:rgb(255,220,73)'] [style*='background:rgb(89,86,59)'], -.notion-body.dark - [style*='color: rgb(255, 220, 73); fill: rgb(255, 220, 73);'] - [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) [style*='color:rgb(223,171,1)'] [style*='background:rgb(251,243,219)'], -.notion-body:not(.dark) - [style*='color: rgb(223, 171, 1); fill: rgb(223, 171, 1);'] - [style*='background:rgb(251,243,219)'] { - background: var(--theme--highlight_yellow) !important; - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background: rgb(89, 86, 59)'], -.notion-body:not(.dark) [style*='background: rgb(251, 243, 219)'] { - background: var(--theme--block_yellow) !important; - color: var(--theme--block_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 220, 73, 0.5)'], -.notion-body.dark [style*='background-color: rgba(255, 220, 73, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(233, 168, 0, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(233, 168, 0, 0.2)'] { - background: var(--theme--tag_yellow) !important; - color: var(--theme--tag_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 86, 59, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 243, 219, 0.3)'] { - background: var(--theme--callout_yellow) !important; - color: var(--theme--callout_yellow-text) !important; -} - -.notion-body.dark [style*='color:rgb(77,171,154)'], -.notion-body.dark [style^='color: rgb(77, 171, 154)'], -.notion-body.dark [style*=' color: rgb(77, 171, 154)'], -.notion-body:not(.dark) [style*='color:rgb(15,123,108)'], -.notion-body:not(.dark) [style^='color: rgb(15, 123, 108)'], -.notion-body:not(.dark) [style*=' color: rgb(15, 123, 108)'] { - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='fill: rgb(77, 171, 154);'], -.notion-body:not(.dark) [style*='fill: rgb(15, 123, 108);'] { - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) [style*='background:rgb(221,237,234)'] { - background: var(--theme--highlight_green) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(221,237,234)'] { - color: var(--theme--highlight_green-text) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,243,219)'] { - color: var(--theme--highlight_green-text) !important; -} -.notion-body.dark [style*='color:rgb(77,171,154)'] [style*='background:rgb(53,76,75)'], -.notion-body.dark - [style*='color: rgb(77, 171, 154); fill: rgb(77, 171, 154);'] - [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) - [style*='color:rgb(15,123,108)'] - [style*='background:rgb(221,237,234)'], -.notion-body:not(.dark) - [style*='color: rgb(15, 123, 108); fill: rgb(15, 123, 108);'] - [style*='background:rgb(221,237,234)'] { - background: var(--theme--highlight_green) !important; - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background: rgb(53, 76, 75)'], -.notion-body:not(.dark) [style*='background: rgb(221, 237, 234)'] { - background: var(--theme--block_green) !important; - color: var(--theme--block_green-text) !important; -} -.notion-body.dark [style*='background: rgba(77, 171, 154, 0.5)'], -.notion-body.dark [style*='background-color: rgba(77, 171, 154, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 135, 107, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(0, 135, 107, 0.2)'] { - background: var(--theme--tag_green) !important; - color: var(--theme--tag_green-text) !important; -} -.notion-body.dark [style*='background: rgba(53, 76, 75, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 237, 234, 0.3)'] { - background: var(--theme--callout_green) !important; - color: var(--theme--callout_green-text) !important; -} - -.notion-body.dark [style*='color:rgb(82,156,202)'], -.notion-body.dark [style^='color: rgb(82, 156, 202)'], -.notion-body.dark [style*=' color: rgb(82, 156, 202)'], -.notion-body:not(.dark) [style*='color:rgb(11,110,153)'], -.notion-body:not(.dark) [style^='color: rgb(11, 110, 153)'], -.notion-body:not(.dark) [style*=' color: rgb(11, 110, 153)'] { - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='fill: rgb(82, 156, 202);'], -.notion-body:not(.dark) [style*='fill: rgb(11, 110, 153);'] { - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) [style*='background:rgb(221,235,241)'] { - background: var(--theme--highlight_blue) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(221,235,241)'] { - color: var(--theme--highlight_blue-text) !important; -} -.notion-body.dark [style*='color:rgb(82,156,202)'] [style*='background:rgb(54,73,84)'], -.notion-body.dark - [style*='color: rgb(82, 156, 202); fill: rgb(82, 156, 202);'] - [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) - [style*='color:rgb(11,110,153)'] - [style*='background:rgb(221,235,241)'], -.notion-body:not(.dark) - [style*='color: rgb(11, 110, 153); fill: rgb(11, 110, 153);'] - [style*='background:rgb(221,235,241)'] { - background: var(--theme--highlight_blue) !important; - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background: rgb(54, 73, 84)'], -.notion-body:not(.dark) [style*='background: rgb(221, 235, 241)'] { - background: var(--theme--block_blue) !important; - color: var(--theme--block_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(82, 156, 202, 0.5)'], -.notion-body.dark [style*='background-color: rgba(82, 156, 202, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 120, 223, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(0, 120, 223, 0.2)'] { - background: var(--theme--tag_blue) !important; - color: var(--theme--tag_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(54, 73, 84, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 235, 241, 0.3)'] { - background: var(--theme--callout_blue) !important; - color: var(--theme--callout_blue-text) !important; -} - -.notion-body.dark [style*='color:rgb(154,109,215)'], -.notion-body.dark [style^='color: rgb(154, 109, 215)'], -.notion-body.dark [style*=' color: rgb(154, 109, 215)'], -.notion-body:not(.dark) [style*='color:rgb(105,64,165)'], -.notion-body:not(.dark) [style^='color: rgb(105, 64, 165)'], -.notion-body:not(.dark) [style*=' color: rgb(105, 64, 165)'] { - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='fill: rgb(154, 109, 215);'], -.notion-body:not(.dark) [style*='fill: rgb(105, 64, 165);'] { - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) [style*='background:rgb(234,228,242)'] { - background: var(--theme--highlight_purple) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(234,228,242)'] { - color: var(--theme--highlight_purple-text) !important; -} -.notion-body.dark [style*='color:rgb(154,109,215)'] [style*='background:rgb(68,63,87)'], -.notion-body.dark - [style*='color: rgb(154, 109, 215); fill: rgb(154, 109, 215);'] - [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) - [style*='color:rgb(105,64,165)'] - [style*='background:rgb(234,228,242)'], -.notion-body:not(.dark) - [style*='color: rgb(105, 64, 165); fill: rgb(105, 64, 165);'] - [style*='background:rgb(234,228,242)'] { - background: var(--theme--highlight_purple) !important; - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background: rgb(68, 63, 87)'], -.notion-body:not(.dark) [style*='background: rgb(234, 228, 242)'] { - background: var(--theme--block_purple) !important; - color: var(--theme--block_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(154, 109, 215, 0.5)'], -.notion-body.dark [style*='background-color: rgba(154, 109, 215, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(103, 36, 222, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(103, 36, 222, 0.2)'] { - background: var(--theme--tag_purple) !important; - color: var(--theme--tag_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(68, 63, 87, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(234, 228, 242, 0.3)'] { - background: var(--theme--callout_purple) !important; - color: var(--theme--callout_purple-text) !important; -} - -.notion-body.dark [style*='color:rgb(226,85,161)'], -.notion-body.dark [style^='color: rgb(226, 85, 161)'], -.notion-body.dark [style*=' color: rgb(226, 85, 161)'], -.notion-body:not(.dark) [style*='color:rgb(173,26,114)'], -.notion-body:not(.dark) [style^='color: rgb(173, 26, 114)'], -.notion-body:not(.dark) [style*=' color: rgb(173, 26, 114)'] { - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='fill: rgb(226, 85, 161);'], -.notion-body:not(.dark) [style*='fill: rgb(173, 26, 114);'] { - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) [style*='background:rgb(244,223,235)'] { - background: var(--theme--highlight_pink) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(244,223,235)'] { - color: var(--theme--highlight_pink-text) !important; -} -.notion-body.dark [style*='color:rgb(226,85,161)'] [style*='background:rgb(83,59,76)'], -.notion-body.dark - [style*='color: rgb(226, 85, 161); fill: rgb(226, 85, 161);'] - [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) - [style*='color:rgb(173,26,114)'] - [style*='background:rgb(244,223,235)'], -.notion-body:not(.dark) - [style*='color: rgb(173, 26, 114); fill: rgb(173, 26, 114);'] - [style*='background:rgb(244,223,235)'] { - background: var(--theme--highlight_pink) !important; - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background: rgb(83, 59, 76)'], -.notion-body:not(.dark) [style*='background: rgb(244, 223, 235)'] { - background: var(--theme--block_pink) !important; - color: var(--theme--block_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(226, 85, 161, 0.5)'], -.notion-body.dark [style*='background-color: rgba(226, 85, 161, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(221, 0, 129, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(221, 0, 129, 0.2)'] { - background: var(--theme--tag_pink) !important; - color: var(--theme--tag_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(83, 59, 76, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(244, 223, 235, 0.3)'] { - background: var(--theme--callout_pink) !important; - color: var(--theme--callout_pink-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,115,105)'], -.notion-body.dark [style^='color: rgb(255, 115, 105)'], -.notion-body.dark [style*=' color: rgb(255, 115, 105)'], -.notion-body:not(.dark) [style*='color:rgb(224,62,62)'], -.notion-body:not(.dark) [style^='color: rgb(224, 62, 62)'], -.notion-body:not(.dark) [style*=' color: rgb(224, 62, 62)'] { - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='fill: rgb(255, 115, 105);'], -.notion-body:not(.dark) [style*='fill: rgb(224, 62, 62);'] { - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) [style*='background:rgb(251,228,228)'] { - background: var(--theme--highlight_red) !important; -} -.notion-body.dark [style*='color: inherit'] > div > div > [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,228,228)'] { - color: var(--theme--highlight_red-text) !important; -} -.notion-body.dark [style*='color:rgb(255,115,105)'] [style*='background:rgb(89,65,65)'], -.notion-body.dark - [style*='color: rgb(255, 115, 105); fill: rgb(255, 115, 105);'] - [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) [style*='color:rgb(224,62,62)'] [style*='background:rgb(251,228,228)'], -.notion-body:not(.dark) - [style*='color: rgb(224, 62, 62); fill: rgb(224, 62, 62);'] - [style*='background:rgb(251,228,228)'] { - background: var(--theme--highlight_red) !important; - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background: rgb(89, 65, 65)'], -.notion-body:not(.dark) [style*='background: rgb(251, 228, 228)'] { - background: var(--theme--block_red) !important; - color: var(--theme--block_red-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 115, 105, 0.5);'], -.notion-body.dark [style*='background-color: rgba(255, 115, 105, 0.5);'], -.notion-body:not(.dark) [style*='background: rgba(255, 0, 26, 0.2)'], -.notion-body:not(.dark) [style*='background-color: rgba(255, 0, 26, 0.2)'] { - background: var(--theme--tag_red) !important; - color: var(--theme--tag_red-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 65, 65, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 228, 228, 0.3)'] { - background: var(--theme--callout_red) !important; - color: var(--theme--callout_red-text) !important; -} - -/** code **/ - -.notion-page-content [style*='color:#EB5757']:not(.notion-text-mention-token) { - color: var(--theme--code_inline-text) !important; - background: var(--theme--code_inline) !important; -} - -.notion-code-block > div > div { - background: var(--theme--code) !important; -} -.notion-code-block > div { - color: var(--theme--code_plain) !important; -} diff --git a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/variables.css b/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/variables.css deleted file mode 100644 index b7bf564..0000000 --- a/repo/theming@0f0bf8b6-eae6-4273-b307-8fc43f2ee082/variables.css +++ /dev/null @@ -1,364 +0,0 @@ -/* - * notion-enhancer core: theming - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - * - * (rgb|hsl|#)[^;]+; - */ - -:root { - --theme--page-padding: calc(96px + env(safe-area-inset-left)); - --theme--page-width: 900px; - --theme--page-width_full: 100%; - --theme--page_banner-height: 30vh; - --theme--page_preview-padding: 8rem; - --theme--page_preview-width: 977px; - --theme--page_preview_banner-height: 20vh; - - --theme--font_sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, - 'Apple Color Emoji', Arial, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; - --theme--font_serif: Lyon-Text, Georgia, YuMincho, 'Yu Mincho', 'Hiragino Mincho ProN', - 'Hiragino Mincho Pro', 'Songti TC', 'Songti SC', SimSun, 'Nanum Myeongjo', NanumMyeongjo, - Batang, serif; - --theme--font_mono: iawriter-mono, Nitti, Menlo, Courier, monospace; - --theme--font_code: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, Courier, monospace; - --theme--font_quote: var(--theme--font_sans); - --theme--font_headings: var(--theme--font_sans); - - --theme--accent_blue: rgb(46, 170, 220); - --theme--accent_blue-selection: rgb(46, 170, 220, 0.25); - --theme--accent_blue-hover: rgb(6, 156, 205); - --theme--accent_blue-focus: rgb(0, 141, 190); - --theme--accent_blue-text: #fff; - --theme--accent_red: #eb5757; - --theme--accent_red-hover: rgba(235, 87, 87, 0.1); - --theme--accent_red-text: #fff; -} - -:root { - --theme--bg: #fff; - --theme--bg_secondary: rgb(247, 246, 243); - --theme--bg_popup: #fff; - - --theme--scrollbar_track: #edece9; - --theme--scrollbar_thumb: #d3d1cb; - --theme--scrollbar_thumb-hover: #aeaca6; - - --theme--ui_shadow: rgba(15, 15, 15, 0.15); - --theme--ui_divider: rgb(237, 237, 236); - --theme--ui_interactive-hover: rgba(55, 53, 47, 0.08); - --theme--ui_interactive-active: rgba(55, 53, 47, 0.16); - --theme--ui_toggle-on: var(--theme--accent_blue); - --theme--ui_toggle-off: rgba(135, 131, 120, 0.3); - --theme--ui_toggle-feature: #fff; - --theme--ui_input: rgba(242, 241, 238, 0.6); - --theme--ui_tooltip: rgb(15, 15, 15); - --theme--ui_tooltip-title: rgba(255, 255, 255, 0.9); - --theme--ui_tooltip-description: rgba(206, 205, 202, 0.6); - - --theme--icon: rgba(55, 53, 47, 0.8); - --theme--icon_secondary: rgba(55, 53, 47, 0.4); - - --theme--text: rgb(55, 43, 47); - --theme--text_secondary: rgba(55, 43, 47, 0.6); - --theme--text_grey: rgb(155, 154, 151); - --theme--text_brown: rgb(100, 71, 58); - --theme--text_orange: rgb(217, 115, 13); - --theme--text_yellow: rgb(223, 171, 1); - --theme--text_green: rgb(15, 123, 108); - --theme--text_blue: rgb(11, 110, 153); - --theme--text_purple: rgb(105, 64, 165); - --theme--text_pink: rgb(173, 26, 114); - --theme--text_red: rgb(224, 62, 62); - - --theme--highlight-text: var(--theme--text); - --theme--highlight_grey: rgb(235, 236, 237); - --theme--highlight_grey-text: var(--theme--highlight-text); - --theme--highlight_brown: rgb(233, 229, 227); - --theme--highlight_brown-text: var(--theme--highlight-text); - --theme--highlight_orange: rgb(250, 235, 221); - --theme--highlight_orange-text: var(--theme--highlight-text); - --theme--highlight_yellow: rgb(251, 243, 219); - --theme--highlight_yellow-text: var(--theme--highlight-text); - --theme--highlight_green: rgb(221, 237, 234); - --theme--highlight_green-text: var(--theme--highlight-text); - --theme--highlight_blue: rgb(221, 235, 241); - --theme--highlight_blue-text: var(--theme--highlight-text); - --theme--highlight_purple: rgb(234, 228, 242); - --theme--highlight_purple-text: var(--theme--highlight-text); - --theme--highlight_pink: rgb(244, 223, 235); - --theme--highlight_pink-text: var(--theme--highlight-text); - --theme--highlight_red: rgb(251, 228, 228); - --theme--highlight_red-text: var(--theme--highlight-text); - - --theme--block-text: var(--theme--text); - --theme--block_grey: rgb(235, 236, 237); - --theme--block_grey-text: var(--theme--block-text); - --theme--block_brown: rgb(233, 229, 227); - --theme--block_brown-text: var(--theme--block-text); - --theme--block_orange: rgb(250, 235, 221); - --theme--block_orange-text: var(--theme--block-text); - --theme--block_yellow: rgb(251, 243, 219); - --theme--block_yellow-text: var(--theme--block-text); - --theme--block_green: rgb(221, 237, 234); - --theme--block_green-text: var(--theme--block-text); - --theme--block_blue: rgb(221, 235, 241); - --theme--block_blue-text: var(--theme--block-text); - --theme--block_purple: rgb(234, 228, 242); - --theme--block_purple-text: var(--theme--block-text); - --theme--block_pink: rgb(244, 223, 235); - --theme--block_pink-text: var(--theme--block-text); - --theme--block_red: rgb(251, 228, 228); - --theme--block_red-text: var(--theme--block-text); - - --theme--tag-text: var(--theme--text); - --theme--tag_default: rgba(206, 205, 202, 0.5); - --theme--tag_default-text: var(--theme--tag-text); - --theme--tag_grey: rgba(140, 46, 0, 0.2); - --theme--tag_grey-text: var(--theme--tag-text); - --theme--tag_brown: rgba(140, 46, 0, 0.2); - --theme--tag_brown-text: var(--theme--tag-text); - --theme--tag_orange: rgba(245, 93, 0, 0.2); - --theme--tag_orange-text: var(--theme--tag-text); - --theme--tag_yellow: rgba(233, 168, 0, 0.2); - --theme--tag_yellow-text: var(--theme--tag-text); - --theme--tag_green: rgba(0, 135, 107, 0.2); - --theme--tag_green-text: var(--theme--tag-text); - --theme--tag_blue: rgba(0, 120, 223, 0.2); - --theme--tag_blue-text: var(--theme--tag-text); - --theme--tag_purple: rgba(103, 36, 222, 0.2); - --theme--tag_purple-text: var(--theme--tag-text); - --theme--tag_pink: rgba(221, 0, 129, 0.2); - --theme--tag_pink-text: var(--theme--tag-text); - --theme--tag_red: rgba(255, 0, 26, 0.2); - --theme--tag_red-text: var(--theme--tag-text); - - --theme--callout-text: var(--theme--text); - --theme--callout_grey: rgba(235, 236, 237, 0.3); - --theme--callout_grey-text: var(--theme--callout-text); - --theme--callout_brown: rgba(233, 229, 227, 0.3); - --theme--callout_brown-text: var(--theme--callout-text); - --theme--callout_orange: rgba(250, 235, 221, 0.3); - --theme--callout_orange-text: var(--theme--callout-text); - --theme--callout_yellow: rgba(251, 243, 219, 0.3); - --theme--callout_yellow-text: var(--theme--callout-text); - --theme--callout_green: rgba(221, 237, 234, 0.3); - --theme--callout_green-text: var(--theme--callout-text); - --theme--callout_blue: rgba(221, 235, 241, 0.3); - --theme--callout_blue-text: var(--theme--callout-text); - --theme--callout_purple: rgba(234, 228, 242, 0.3); - --theme--callout_purple-text: var(--theme--callout-text); - --theme--callout_pink: rgba(244, 223, 235, 0.3); - --theme--callout_pink-text: var(--theme--callout-text); - --theme--callout_red: rgba(251, 228, 228, 0.3); - --theme--callout_red-text: var(--theme--callout-text); - - --theme--code_inline: rgba(135, 131, 120, 0.15); - --theme--code_inline-text: #eb5757; - - --theme--code: #f7f6f3; - --theme--code_plain: var(--theme--text); - --theme--code_property: #905; - --theme--code_tag: var(--theme--code_property); - --theme--code_boolean: var(--theme--code_property); - --theme--code_number: var(--theme--code_property); - --theme--code_constant: var(--theme--code_property); - --theme--code_symbol: var(--theme--code_property); - --theme--code_deleted: var(--theme--code_property); - --theme--code_selector: #690; - --theme--code_attr-name: var(--theme--code_selector); - --theme--code_string: var(--theme--code_selector); - --theme--code_char: var(--theme--code_selector); - --theme--code_builtin: var(--theme--code_selector); - --theme--code_inserted: var(--theme--code_selector); - --theme--code_operator: #9a6e3a; - --theme--code_entity: var(--theme--code_operator); - --theme--code_url: var(--theme--code_operator); - --theme--code_variable: var(--theme--code_regex); - --theme--code_comment: slategrey; - --theme--code_cdata: var(--theme--code_comment); - --theme--code_prolog: var(--theme--code_comment); - --theme--code_doctype: var(--theme--code_comment); - --theme--code_atrule: #07a; - --theme--code_attr-value: var(--theme--code_atrule); - --theme--code_keyword: var(--theme--code_atrule); - --theme--code_regex: #e90; - --theme--code_important: var(--theme--code_regex); - --theme--code_function: #dd4a68; - --theme--code_class-name: var(--theme--code_function); - --theme--code_parameter: var(--theme--code_plain); - --theme--code_decorator: var(--theme--code_plain); - --theme--code_id: var(--theme--code_plain); - --theme--code_class: var(--theme--code_plain); - --theme--code_pseudo-element: var(--theme--code_plain); - --theme--code_pseudo-class: var(--theme--code_plain); - --theme--code_attribute: var(--theme--code_plain); - --theme--code_value: var(--theme--code_plain); - --theme--code_unit: var(--theme--code_plain); - --theme--code_punctuation: #999; - --theme--code_annotation: var(--theme--code_plain); -} - -:root.dark { - --theme--bg: rgb(47, 52, 55); - --theme--bg_secondary: rgb(55, 60, 63); - --theme--bg_popup: rgb(63, 68, 71); - - --theme--scrollbar_track: rgba(202, 204, 206, 0.04); - --theme--scrollbar_thumb: #474c50; - --theme--scrollbar_thumb-hover: rgba(202, 204, 206, 0.3); - - --theme--ui_shadow: rgba(15, 15, 15, 0.15); - --theme--ui_divider: rgb(255, 255, 255, 0.07); - --theme--ui_interactive-hover: rgb(71, 76, 80); - --theme--ui_interactive-active: rgb(63, 68, 71); - --theme--ui_toggle-on: var(--theme--accent_blue); - --theme--ui_toggle-off: rgba(202, 204, 206, 0.3); - --theme--ui_toggle-feature: #fff; - --theme--ui_input: rgba(15, 15, 15, 0.3); - --theme--ui_tooltip: rgb(202, 204, 206); - --theme--ui_tooltip-title: rgb(15, 15, 15); - --theme--ui_tooltip-description: rgba(47, 52, 55, 0.6); - - --theme--icon: rgba(202, 204, 206); - --theme--icon_secondary: rgb(202, 204, 206, 0.6); - - --theme--text: rgba(255, 255, 255, 0.9); - --theme--text_secondary: rgba(255, 255, 255, 0.6); - --theme--text_grey: rgba(151, 154, 155, 0.95); - --theme--text_brown: rgb(147, 114, 100); - --theme--text_orange: rgb(255, 163, 68); - --theme--text_yellow: rgb(255, 220, 73); - --theme--text_green: rgb(77, 171, 154); - --theme--text_blue: rgb(82, 156, 202); - --theme--text_purple: rgb(154, 109, 215); - --theme--text_pink: rgb(226, 85, 161); - --theme--text_red: rgb(255, 115, 105); - - --theme--highlight-text: var(--theme--text); - --theme--highlight_grey: rgb(69, 75, 78); - --theme--highlight_grey-text: var(--theme--highlight-text); - --theme--highlight_brown: rgb(67, 64, 64); - --theme--highlight_brown-text: var(--theme--highlight-text); - --theme--highlight_orange: rgb(89, 74, 58); - --theme--highlight_orange-text: var(--theme--highlight-text); - --theme--highlight_yellow: rgb(89, 86, 59); - --theme--highlight_yellow-text: var(--theme--highlight-text); - --theme--highlight_green: rgb(53, 76, 75); - --theme--highlight_green-text: var(--theme--highlight-text); - --theme--highlight_blue: rgb(54, 73, 84); - --theme--highlight_blue-text: var(--theme--highlight-text); - --theme--highlight_purple: rgb(68, 63, 87); - --theme--highlight_purple-text: var(--theme--highlight-text); - --theme--highlight_pink: rgb(83, 59, 76); - --theme--highlight_pink-text: var(--theme--highlight-text); - --theme--highlight_red: rgb(89, 65, 65); - --theme--highlight_red-text: var(--theme--highlight-text); - - --theme--block-text: var(--theme--text); - --theme--block_grey: rgb(69, 75, 78); - --theme--block_grey-text: var(--theme--block-text); - --theme--block_brown: rgb(67, 64, 64); - --theme--block_brown-text: var(--theme--block-text); - --theme--block_orange: rgb(89, 74, 58); - --theme--block_orange-text: var(--theme--block-text); - --theme--block_yellow: rgb(89, 86, 59); - --theme--block_yellow-text: var(--theme--block-text); - --theme--block_green: rgb(53, 76, 75); - --theme--block_green-text: var(--theme--block-text); - --theme--block_blue: rgb(54, 73, 84); - --theme--block_blue-text: var(--theme--block-text); - --theme--block_purple: rgb(68, 63, 87); - --theme--block_purple-text: var(--theme--block-text); - --theme--block_pink: rgb(83, 59, 76); - --theme--block_pink-text: var(--theme--block-text); - --theme--block_red: rgb(89, 65, 65); - --theme--block_red-text: var(--theme--block-text); - - --theme--tag-text: var(--theme--text); - --theme--tag_default: rgb(80, 85, 88); - --theme--tag_default-text: var(--theme--tag-text); - --theme--tag_grey: rgba(151, 154, 155, 0.5); - --theme--tag_grey-text: var(--theme--tag-text); - --theme--tag_brown: rgba(147, 114, 100, 0.5); - --theme--tag_brown-text: var(--theme--tag-text); - --theme--tag_orange: rgba(255, 163, 68, 0.5); - --theme--tag_orange-text: var(--theme--tag-text); - --theme--tag_yellow: rgba(255, 220, 73, 0.5); - --theme--tag_yellow-text: var(--theme--tag-text); - --theme--tag_green: rgba(77, 171, 154, 0.5); - --theme--tag_green-text: var(--theme--tag-text); - --theme--tag_blue: rgba(82, 156, 202, 0.5); - --theme--tag_blue-text: var(--theme--tag-text); - --theme--tag_purple: rgba(154, 109, 215, 0.5); - --theme--tag_purple-text: var(--theme--tag-text); - --theme--tag_pink: rgba(226, 85, 161, 0.5); - --theme--tag_pink-text: var(--theme--tag-text); - --theme--tag_red: rgba(255, 115, 105, 0.5); - --theme--tag_red-text: var(--theme--tag-text); - - --theme--callout-text: var(--theme--text); - --theme--callout_grey: rgba(69, 75, 78, 0.3); - --theme--callout_grey-text: var(--theme--callout-text); - --theme--callout_brown: rgba(67, 64, 64, 0.3); - --theme--callout_brown-text: var(--theme--callout-text); - --theme--callout_orange: rgba(89, 74, 58, 0.3); - --theme--callout_orange-text: var(--theme--callout-text); - --theme--callout_yellow: rgba(89, 86, 59, 0.3); - --theme--callout_yellow-text: var(--theme--callout-text); - --theme--callout_green: rgba(53, 76, 75, 0.3); - --theme--callout_green-text: var(--theme--callout-text); - --theme--callout_blue: rgba(54, 73, 84, 0.3); - --theme--callout_blue-text: var(--theme--callout-text); - --theme--callout_purple: rgba(68, 63, 87, 0.3); - --theme--callout_purple-text: var(--theme--callout-text); - --theme--callout_pink: rgba(83, 59, 76, 0.3); - --theme--callout_pink-text: var(--theme--callout-text); - --theme--callout_red: rgba(89, 65, 65, 0.3); - --theme--callout_red-text: var(--theme--callout-text); - - --theme--code_inline: rgba(135, 131, 120, 0.15); - --theme--code_inline-text: #eb5757; - - --theme--code: rgb(63, 68, 71); - --theme--code_plain: var(--theme--text); - --theme--code_property: hsl(350, 40%, 70%); - --theme--code_tag: var(--theme--code_property); - --theme--code_boolean: var(--theme--code_property); - --theme--code_number: var(--theme--code_property); - --theme--code_constant: var(--theme--code_property); - --theme--code_symbol: var(--theme--code_property); - --theme--code_deleted: #f00; - --theme--code_selector: hsl(75, 70%, 60%); - --theme--code_attr-name: var(--theme--code_selector); - --theme--code_string: var(--theme--code_selector); - --theme--code_char: var(--theme--code_selector); - --theme--code_builtin: var(--theme--code_selector); - --theme--code_inserted: var(--theme--code_selector); - --theme--code_operator: hsl(40, 90%, 60%); - --theme--code_entity: var(--theme--code_operator); - --theme--code_url: var(--theme--code_operator); - --theme--code_variable: var(--theme--code_operator); - --theme--code_comment: hsl(30, 20%, 50%); - --theme--code_cdata: var(--theme--code_comment); - --theme--code_prolog: var(--theme--code_comment); - --theme--code_doctype: var(--theme--code_comment); - --theme--code_atrule: hsl(350, 40%, 70%); - --theme--code_attr-value: var(--theme--code_atrule); - --theme--code_keyword: var(--theme--code_atrule); - --theme--code_regex: #e90; - --theme--code_important: var(--theme--code_regex); - --theme--code_function: var(--theme--code_plain); - --theme--code_class-name: var(--theme--code_function); - --theme--code_parameter: var(--theme--code_plain); - --theme--code_decorator: var(--theme--code_plain); - --theme--code_id: var(--theme--code_plain); - --theme--code_class: var(--theme--code_plain); - --theme--code_pseudo-element: var(--theme--code_plain); - --theme--code_pseudo-class: var(--theme--code_plain); - --theme--code_attribute: var(--theme--code_plain); - --theme--code_value: var(--theme--code_plain); - --theme--code_unit: var(--theme--code_plain); - --theme--code_punctuation: var(--theme--code_plain); - --theme--code_annotation: var(--theme--code_plain); -} diff --git a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.css b/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.css deleted file mode 100644 index b0bca23..0000000 --- a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.css +++ /dev/null @@ -1,61 +0,0 @@ -/* - * notion-enhancer: tweaks - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (c) 2020 arecsu - * (https://notion-enhancer.github.io/) under the MIT license - */ - -.tweak--snappy_transitions * { - animation-duration: 0s !important; - transition-duration: 0s !important; -} -.tweak--snappy_transitions .notion-selectable-halo { - opacity: 1 !important; -} - -.tweak--hide_help .notion-help-button { - display: none !important; -} - -.tweak--thicker_bold .notion-page-content span[style*='font-weight:600'] { - font-weight: 700 !important; -} - -.tweak--spaced_lines .notion-page-content .notion-selectable.notion-text-block { - line-height: 1.65 !important; - margin-top: 0.75em !important; -} - -.tweak--condensed_bullets .notion-selectable.notion-bulleted_list-block { - margin-top: -1.5px !important; - margin-bottom: -1.5px !important; -} - -.tweak--responsive_breakpoint .notion-column_list-block [style='display: flex;'] > div { - width: 100% !important; -} -.tweak--responsive_breakpoint .notion-column_list-block [style='display: flex;'] { - flex-direction: column !important; -} -.tweak--responsive_breakpoint .notion-app-inner { - --theme--page-width: 100%; - --theme--page-padding: calc(48px + env(safe-area-inset-left)); -} - -.tweak--bracketed_links .notion-link-token span { - border-bottom: none !important; -} -.tweak--bracketed_links .notion-link-token:before { - content: '[['; - opacity: 0.7; - transition: opacity 100ms ease-in; -} -.tweak--bracketed_links .notion-link-token:after { - content: ']]'; - opacity: 0.7; - transition: opacity 100ms ease-in; -} -.tweak--bracketed_links .notion-link-token:hover::before, -.tweak--bracketed_links .notion-link-token:hover::after { - opacity: 1; -} diff --git a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.mjs b/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.mjs deleted file mode 100644 index 42ae21c..0000000 --- a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/client.mjs +++ /dev/null @@ -1,49 +0,0 @@ -/* - * notion-enhancer: tweaks - * (c) 2021 dragonwocky (https://dragonwocky.me/) - * (https://notion-enhancer.github.io/) under the MIT license - */ - -'use strict'; - -const _id = '5174a483-c88d-4bf8-a95f-35cd330b76e2'; -import { env, storage, web } from '../../api/_.mjs'; - -web.whenReady().then(async () => { - const cssInsert = await storage.get(_id, '_file.insert.css'); - if (cssInsert) { - document.body.append( - web.createElement( - web.html` - ` - ) - ); - } - - if (['linux', 'win32'].includes(env.name)) { - // dragarea_height - } - - for (const tweak of [ - 'snappy_transitions', - 'thicker_bold', - 'spaced_lines', - 'hide_help', - 'condensed_bullets', - 'bracketed_links', - ]) { - if (await storage.get(_id, `tweak.${tweak}`)) { - document.body.classList.add(`tweak--${tweak}`); - } - } - - const responsiveBreakpoint = await storage.get(_id, 'tweak.responsive_breakpoint'), - addResponsiveBreakpoint = () => { - document.body.classList.remove('tweak--responsive_breakpoint'); - if (window.innerWidth <= responsiveBreakpoint) { - document.body.classList.add('tweak--responsive_breakpoint'); - } - }; - window.addEventListener('resize', addResponsiveBreakpoint); - addResponsiveBreakpoint(); -}); diff --git a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/mod.json b/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/mod.json deleted file mode 100644 index 6b5203e..0000000 --- a/repo/tweaks@5174a483-c88d-4bf8-a95f-35cd330b76e2/mod.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "tweaks", - "id": "5174a483-c88d-4bf8-a95f-35cd330b76e2", - "version": "0.2.0", - "description": "common style/layout changes and custom CSS insertion.", - "tags": ["extension", "customisation"], - "authors": [ - { - "name": "dragonwocky", - "email": "thedragonring.bod@gmail.com", - "homepage": "https://dragonwocky.me/", - "avatar": "https://dragonwocky.me/avatar.jpg" - } - ], - "css": { - "client": ["client.css"] - }, - "js": { - "client": ["client.mjs"] - }, - "options": [ - { - "type": "file", - "key": "insert.css", - "label": "css insert", - "extensions": [".css"] - }, - { - "key": "tweak.dragarea_height", - "label": "height of frameless dragarea:", - "tooltip": "the rectangle added at the top of a window in 'integrated titlebar' mode, used to drag/move the window.", - "type": "number", - "value": 15, - "environments": ["linux", "win32"] - }, - { - "key": "tweak.responsive_breakpoint", - "label": "responsive columns breakpoint (px)", - "tooltip": "the width in pixels below which in-page columns are resized to appear full-width so content isn't squished.", - "type": "number", - "value": 600 - }, - { - "key": "tweak.snappy_transitions", - "label": "snappy transitions", - "tooltip": "set animation time for all css-driven animations to 0s. may not affect element motion e.g. the sidebar popping out.", - "type": "toggle", - "value": false - }, - { - "key": "tweak.hide_help", - "label": "hide help button", - "type": "toggle", - "value": false - }, - { - "key": "tweak.thicker_bold", - "label": "thicker bold text", - "type": "toggle", - "value": true - }, - { - "key": "tweak.spaced_lines", - "label": "readable line spacing", - "tooltip": "greater line spacing between text blocks.", - "type": "toggle", - "value": false - }, - { - "key": "tweak.condensed_bullets", - "label": "condense bullet points", - "tooltip": "tighter line spacing between bullet point blocks.", - "type": "toggle", - "value": false - }, - { - "key": "tweak.bracketed_links", - "label": "bracketed links", - "tooltip": "render links surrounded with [[brackets]] instead of __underlined__.", - "type": "toggle", - "value": false - } - ] -} From 933bbde32d27f1adb7972e92167fc056ad362cb8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 20:48:42 +1100 Subject: [PATCH 002/179] move icon to media submodule --- .gitmodules | 3 ++ icon/animated.gif | Bin 56415 -> 0 bytes icon/blackwhite-x128.png | Bin 5245 -> 0 bytes icon/blackwhite-x16.png | Bin 623 -> 0 bytes icon/blackwhite-x256.png | Bin 10747 -> 0 bytes icon/blackwhite-x32.png | Bin 1296 -> 0 bytes icon/blackwhite-x48.png | Bin 2017 -> 0 bytes icon/blackwhite-x512.png | Bin 21266 -> 0 bytes icon/blackwhite.svg | 30 ------------------ icon/colour-x128.png | Bin 5434 -> 0 bytes icon/colour-x16.png | Bin 634 -> 0 bytes icon/colour-x256.png | Bin 11335 -> 0 bytes icon/colour-x32.png | Bin 1314 -> 0 bytes icon/colour-x48.png | Bin 2042 -> 0 bytes icon/colour-x512.png | Bin 24227 -> 0 bytes icon/colour.svg | 64 --------------------------------------- manifest.json | 14 ++++----- media | 1 + repo | 2 +- 19 files changed, 12 insertions(+), 102 deletions(-) delete mode 100644 icon/animated.gif delete mode 100644 icon/blackwhite-x128.png delete mode 100644 icon/blackwhite-x16.png delete mode 100644 icon/blackwhite-x256.png delete mode 100644 icon/blackwhite-x32.png delete mode 100644 icon/blackwhite-x48.png delete mode 100644 icon/blackwhite-x512.png delete mode 100644 icon/blackwhite.svg delete mode 100644 icon/colour-x128.png delete mode 100644 icon/colour-x16.png delete mode 100644 icon/colour-x256.png delete mode 100644 icon/colour-x32.png delete mode 100644 icon/colour-x48.png delete mode 100644 icon/colour-x512.png delete mode 100644 icon/colour.svg create mode 160000 media diff --git a/.gitmodules b/.gitmodules index 8907605..653c230 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "repo"] path = repo url = git@github.com:notion-enhancer/repo.git +[submodule "media"] + path = media + url = git@github.com:notion-enhancer/media.git diff --git a/icon/animated.gif b/icon/animated.gif deleted file mode 100644 index 56f8300808300876598170857d35ebfc5e92e137..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56415 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 Vi|3?CA5S4~h8&!St5fbOYXED&skQ(B diff --git a/icon/blackwhite-x128.png b/icon/blackwhite-x128.png deleted file mode 100644 index bc0b6577e9f585803a3be5d63e74a374be467fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5245 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 DykIqA diff --git a/icon/blackwhite-x16.png b/icon/blackwhite-x16.png deleted file mode 100644 index 69224de629abdce6dc81a6f0b3d0abb103df671d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmV-#0+9WQP)d!Oh;(aFq$#X0-lz1KPWaU>8FMG4aKmS`lph!RmIz9H&~*7+vsw+6yE+d|AFcuz9kZgn|5;BIrdorcA}ywkx1n3Je&nMg^kY?RJahaw!7({XQrKvDRv}Z(@+>VSFNyck~9{+iW)B$P;HU7{nuTI2__u zOt!fz(P)(2zDgI}kZCE>>LbAw?SBz}6ZrvbPCVNO;t%qx{Q-xhP)`hzzV!eA002ov JPDHLkV1fy{4N?FA diff --git a/icon/blackwhite-x256.png b/icon/blackwhite-x256.png deleted file mode 100644 index 6d288a95949fe03b2b1721638cd0f61e49e0af10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10747 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 diff --git a/icon/blackwhite-x512.png b/icon/blackwhite-x512.png deleted file mode 100644 index 0ecf16c34d3762a5f7a655cb433e7a6fdb4d4686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21266 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 QUO50ZmJSw$X7rf<0Zo*Y8vp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/icon/colour-x128.png b/icon/colour-x128.png deleted file mode 100644 index 40126720c50143e7dcebc9067282457abcf3f0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5434 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 Uv+F7GvH$=807*qoM6N<$f)5}JC;$Ke diff --git a/icon/colour-x256.png b/icon/colour-x256.png deleted file mode 100644 index 30c25a0d665270c0667a1de6fdfd9cd159ba0253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11335 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 YKPbCphPdkO(EtDd07*qoM6N<$g3gt0@c;k- diff --git a/icon/colour-x48.png b/icon/colour-x48.png deleted file mode 100644 index 1e52a45f3a486f4fff19292281fe0dcf901d2375..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2042 zcmVcNq5*v10jlvuzyv|mH=`^~lp4SX8tj`X zVyafL8fwG{B_%2mS&D7#zAtp&j^97`oSW0q+H-HtEquv$=bV{2cmDsMnSW;f(cl1d zU5{ZBMQUU`nL@^qv1BlrU_7T9`7qK5vYq^g{FeMo)3kr#1GF&&N-`QtCPNKMUZT;k zFr1uDy2&YU2KD3#D)EWk4>XI=Q<=O+?jmClAPfu)puWByO-)T`X=y=BObiw+S~Rj+ z9=Vf>l#Ta)N&yP*V)8w?8aC0_*N29N2K4v$qr1Bs<>lq5t*uqUb#-;2v$Io`S65e~ ztgKAcH@^`jte87@E)E_%i0#|ATeHi^!&KsP*ihgElf7o@Nqat0SeWOwM5O}mzUoBt095-&F zvXGvhZvERbGM!4?8chKifPczMZf-6%ZrtcCjE;_0jf+KQ&6=g2#`uLPtl3Dic>~da%~kR^`3Km5Q5{XUUWAD9pGr6crU=?b@{{ zEG#r-Sk3PeY$+fpDJfACHX$KFd6KraHng|5V#yZ#*&u2J3(a2Y{|GcqHQqWUwB7A>az=y{*vO?mU#=k`S+eCSCoPo-p9jp`!-hGcVqc=cmwJRpxh+7X)?=7^r2)s_r|=cMW)QClE%9C-3s40xc|>6WOK4lijgzBH(Vck(RGyz^0$i zoh`s$9|O%ifd_{VucyVYf|m3Gd__QepqE3Y>`Ml-;Bl3@kxqGnqsuj-vJVs2ihwE5 zL*Z{`GVS&Vu6`)|{4E?hv2Y9lQ{e9$E?AA8XWbBf_IhrO7sF8mM1hiT=tb`smWM|H zH@!`2Ivj`N3Y7i?-1!jT5I4PI>IG9eI_k4DuhHqTksB?hV(!=JU1g)vt|uetXKhGaf@TV@^@Oi zm)+UxNmHJu^hd@^$P?%lY1 z_b$$yIb-{eR?tn(TSx0N&=xiojzZ$EW5Mf2sRZ}4_`rNWcI+4yFZONOj7)T1c)|7S z*T*aywvbVY6YPlve0)Pfh8HhhR98+CMK&S#WD>`83KAridpBuA?&Bm{Ef$xHK#5>8 z9wGw+_A=zx+Bpf<)Xw-|3i6#xI^M1h;ONGP6To+kE%&zWecLhLhU%@h}>;{?9H3oYu!g2?Q z2BW-!yiLJ}&3;>EqY|=SyiRT>pCK91RJ+(lqajI$jOS*9bw)a92r7b98+Do}NH-k7 Yf3KXo-yXuHSO5S307*qoM6N<$f?*ZEc>n+a diff --git a/icon/colour-x512.png b/icon/colour-x512.png deleted file mode 100644 index f3adbacfd282e2f559ebc77ef763748b597d9388..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24227 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 Kx#SW){Qm$Zgd{5f diff --git a/icon/colour.svg b/icon/colour.svg deleted file mode 100644 index 99027d9..0000000 --- a/icon/colour.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/manifest.json b/manifest.json index c0e7351..698dd0e 100644 --- a/manifest.json +++ b/manifest.json @@ -6,12 +6,12 @@ "description": "an enhancer/customiser for the all-in-one productivity workspace notion.so", "homepage_url": "https://notion-enhancer.github.io", "icons": { - "16": "icon/colour-x16.png", - "32": "icon/colour-x32.png", - "48": "icon/colour-x48.png", - "128": "icon/colour-x128.png", - "256": "icon/colour-x256.png", - "512": "icon/colour-x512.png" + "16": "media/colour-x16.png", + "32": "media/colour-x32.png", + "48": "media/colour-x48.png", + "128": "media/colour-x128.png", + "256": "media/colour-x256.png", + "512": "media/colour-x512.png" }, "browser_action": {}, "background": { "scripts": ["worker.js"] }, @@ -19,7 +19,7 @@ "page": "repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html", "open_in_tab": true }, - "web_accessible_resources": ["env/*", "api/*", "dep/*", "icon/*", "repo/*"], + "web_accessible_resources": ["env/*", "api/*", "dep/*", "media/*", "repo/*"], "content_scripts": [ { "matches": ["https://*.notion.so/*", "https://*.notion.site/*"], diff --git a/media b/media new file mode 160000 index 0000000..97e6743 --- /dev/null +++ b/media @@ -0,0 +1 @@ +Subproject commit 97e6743f192f510959123c3332976d2d9522d686 diff --git a/repo b/repo index d7b38bf..6982568 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit d7b38bf3aa609c1f1e71f9db45e4883ded769869 +Subproject commit 6982568a113331e55ddf1731aa43118badb07493 From cb441f6ef9a5416facd5e5aad367e68088808392 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 21:02:22 +1100 Subject: [PATCH 003/179] move dep to submodule --- .gitmodules | 3 + dep | 1 + dep/feather-sprite.svg | 1 - dep/jscolor.min.js | 6 - dep/markdown-it.min.js | 12 - dep/prism.min.js | 13 - dep/style-vendorizer.mjs | 58 - dep/twind-content.mjs | 43 - dep/twind-css.mjs | 134 --- dep/twind.mjs | 2402 -------------------------------------- 10 files changed, 4 insertions(+), 2669 deletions(-) create mode 160000 dep delete mode 100644 dep/feather-sprite.svg delete mode 100644 dep/jscolor.min.js delete mode 100644 dep/markdown-it.min.js delete mode 100644 dep/prism.min.js delete mode 100644 dep/style-vendorizer.mjs delete mode 100644 dep/twind-content.mjs delete mode 100644 dep/twind-css.mjs delete mode 100644 dep/twind.mjs diff --git a/.gitmodules b/.gitmodules index 653c230..eb813ff 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "media"] path = media url = git@github.com:notion-enhancer/media.git +[submodule "dep"] + path = dep + url = git@github.com:notion-enhancer/dep.git diff --git a/dep b/dep new file mode 160000 index 0000000..8c9dca0 --- /dev/null +++ b/dep @@ -0,0 +1 @@ +Subproject commit 8c9dca0c84ecc0120537da6d74b45c3f74b8768a diff --git a/dep/feather-sprite.svg b/dep/feather-sprite.svg deleted file mode 100644 index 6e20a2c..0000000 --- a/dep/feather-sprite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/dep/jscolor.min.js b/dep/jscolor.min.js deleted file mode 100644 index 8bb82f9..0000000 --- a/dep/jscolor.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * JSColor v2.4.6 - * @licence GNU GLP v3 - * @source https://jscolor.com/ - */ -(function (global, factory) { "use strict"; if (typeof module === "object" && typeof module.exports === "object") { module.exports = global.document ? factory(global) : function (win) { if (!win.document) { throw new Error("jscolor needs a window with document") } return factory(win) }; return } factory(global) })(typeof window !== "undefined" ? window : this, function (window) { "use strict"; var jscolor = function () { var jsc = { initialized: false, instances: [], readyQueue: [], register: function () { if (typeof window !== "undefined" && window.document) { window.document.addEventListener("DOMContentLoaded", jsc.pub.init, false) } }, installBySelector: function (selector, rootNode) { rootNode = rootNode ? jsc.node(rootNode) : window.document; if (!rootNode) { throw new Error("Missing root node") } var elms = rootNode.querySelectorAll(selector); var matchClass = new RegExp("(^|\\s)(" + jsc.pub.lookupClass + ")(\\s*(\\{[^}]*\\})|\\s|$)", "i"); for (var i = 0; i < elms.length; i += 1){ if (elms[i].jscolor && elms[i].jscolor instanceof jsc.pub) { continue } if (elms[i].type !== undefined && elms[i].type.toLowerCase() == "color" && jsc.isColorAttrSupported) { continue } var dataOpts, m; if ((dataOpts = jsc.getDataAttr(elms[i], "jscolor")) !== null || elms[i].className && (m = elms[i].className.match(matchClass))) { var targetElm = elms[i]; var optsStr = ""; if (dataOpts !== null) { optsStr = dataOpts } else if (m) { console.warn('Installation using class name is DEPRECATED. Use data-jscolor="" attribute instead.' + jsc.docsRef); if (m[4]) { optsStr = m[4] } } var opts = null; if (optsStr.trim()) { try { opts = jsc.parseOptionsStr(optsStr) } catch (e) { console.warn(e + "\n" + optsStr) } } try { new jsc.pub(targetElm, opts) } catch (e) { console.warn(e) } } } }, parseOptionsStr: function (str) { var opts = null; try { opts = JSON.parse(str) } catch (eParse) { if (!jsc.pub.looseJSON) { throw new Error("Could not parse jscolor options as JSON: " + eParse) } else { try { opts = new Function("var opts = (" + str + '); return typeof opts === "object" ? opts : {};')() } catch (eEval) { throw new Error("Could not evaluate jscolor options: " + eEval) } } } return opts }, getInstances: function () { var inst = []; for (var i = 0; i < jsc.instances.length; i += 1){ if (jsc.instances[i] && jsc.instances[i].targetElement) { inst.push(jsc.instances[i]) } } return inst }, createEl: function (tagName) { var el = window.document.createElement(tagName); jsc.setData(el, "gui", true); return el }, node: function (nodeOrSelector) { if (!nodeOrSelector) { return null } if (typeof nodeOrSelector === "string") { var sel = nodeOrSelector; var el = null; try { el = window.document.querySelector(sel) } catch (e) { console.warn(e); return null } if (!el) { console.warn("No element matches the selector: %s", sel) } return el } if (jsc.isNode(nodeOrSelector)) { return nodeOrSelector } console.warn("Invalid node of type %s: %s", typeof nodeOrSelector, nodeOrSelector); return null }, isNode: function (val) { if (typeof Node === "object") { return val instanceof Node } return val && typeof val === "object" && typeof val.nodeType === "number" && typeof val.nodeName === "string" }, nodeName: function (node) { if (node && node.nodeName) { return node.nodeName.toLowerCase() } return false }, removeChildren: function (node) { while (node.firstChild) { node.removeChild(node.firstChild) } }, isTextInput: function (el) { return el && jsc.nodeName(el) === "input" && el.type.toLowerCase() === "text" }, isButton: function (el) { if (!el) { return false } var n = jsc.nodeName(el); return n === "button" || n === "input" && ["button", "submit", "reset"].indexOf(el.type.toLowerCase()) > -1 }, isButtonEmpty: function (el) { switch (jsc.nodeName(el)) { case "input": return !el.value || el.value.trim() === ""; case "button": return el.textContent.trim() === "" }return null }, isPassiveEventSupported: function () { var supported = false; try { var opts = Object.defineProperty({}, "passive", { get: function () { supported = true } }); window.addEventListener("testPassive", null, opts); window.removeEventListener("testPassive", null, opts) } catch (e) { } return supported }(), isColorAttrSupported: function () { var elm = window.document.createElement("input"); if (elm.setAttribute) { elm.setAttribute("type", "color"); if (elm.type.toLowerCase() == "color") { return true } } return false }(), dataProp: "_data_jscolor", setData: function () { var obj = arguments[0]; if (arguments.length === 3) { var data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : obj[jsc.dataProp] = {}; var prop = arguments[1]; var value = arguments[2]; data[prop] = value; return true } else if (arguments.length === 2 && typeof arguments[1] === "object") { var data = obj.hasOwnProperty(jsc.dataProp) ? obj[jsc.dataProp] : obj[jsc.dataProp] = {}; var map = arguments[1]; for (var prop in map) { if (map.hasOwnProperty(prop)) { data[prop] = map[prop] } } return true } throw new Error("Invalid arguments") }, removeData: function () { var obj = arguments[0]; if (!obj.hasOwnProperty(jsc.dataProp)) { return true } for (var i = 1; i < arguments.length; i += 1){ var prop = arguments[i]; delete obj[jsc.dataProp][prop] } return true }, getData: function (obj, prop, setDefault) { if (!obj.hasOwnProperty(jsc.dataProp)) { if (setDefault !== undefined) { obj[jsc.dataProp] = {} } else { return undefined } } var data = obj[jsc.dataProp]; if (!data.hasOwnProperty(prop) && setDefault !== undefined) { data[prop] = setDefault } return data[prop] }, getDataAttr: function (el, name) { var attrName = "data-" + name; var attrValue = el.getAttribute(attrName); return attrValue }, setDataAttr: function (el, name, value) { var attrName = "data-" + name; el.setAttribute(attrName, value) }, _attachedGroupEvents: {}, attachGroupEvent: function (groupName, el, evnt, func) { if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) { jsc._attachedGroupEvents[groupName] = [] } jsc._attachedGroupEvents[groupName].push([el, evnt, func]); el.addEventListener(evnt, func, false) }, detachGroupEvents: function (groupName) { if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) { for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1){ var evt = jsc._attachedGroupEvents[groupName][i]; evt[0].removeEventListener(evt[1], evt[2], false) } delete jsc._attachedGroupEvents[groupName] } }, preventDefault: function (e) { if (e.preventDefault) { e.preventDefault() } e.returnValue = false }, captureTarget: function (target) { if (target.setCapture) { jsc._capturedTarget = target; jsc._capturedTarget.setCapture() } }, releaseTarget: function () { if (jsc._capturedTarget) { jsc._capturedTarget.releaseCapture(); jsc._capturedTarget = null } }, triggerEvent: function (el, eventName, bubbles, cancelable) { if (!el) { return } var ev = null; if (typeof Event === "function") { ev = new Event(eventName, { bubbles: bubbles, cancelable: cancelable }) } else { ev = window.document.createEvent("Event"); ev.initEvent(eventName, bubbles, cancelable) } if (!ev) { return false } jsc.setData(ev, "internal", true); el.dispatchEvent(ev); return true }, triggerInputEvent: function (el, eventName, bubbles, cancelable) { if (!el) { return } if (jsc.isTextInput(el)) { jsc.triggerEvent(el, eventName, bubbles, cancelable) } }, eventKey: function (ev) { var keys = { 9: "Tab", 13: "Enter", 27: "Escape" }; if (typeof ev.code === "string") { return ev.code } else if (ev.keyCode !== undefined && keys.hasOwnProperty(ev.keyCode)) { return keys[ev.keyCode] } return null }, strList: function (str) { if (!str) { return [] } return str.replace(/^\s+|\s+$/g, "").split(/\s+/) }, hasClass: function (elm, className) { if (!className) { return false } if (elm.classList !== undefined) { return elm.classList.contains(className) } return -1 != (" " + elm.className.replace(/\s+/g, " ") + " ").indexOf(" " + className + " ") }, addClass: function (elm, className) { var classNames = jsc.strList(className); if (elm.classList !== undefined) { for (var i = 0; i < classNames.length; i += 1){ elm.classList.add(classNames[i]) } return } for (var i = 0; i < classNames.length; i += 1){ if (!jsc.hasClass(elm, classNames[i])) { elm.className += (elm.className ? " " : "") + classNames[i] } } }, removeClass: function (elm, className) { var classNames = jsc.strList(className); if (elm.classList !== undefined) { for (var i = 0; i < classNames.length; i += 1){ elm.classList.remove(classNames[i]) } return } for (var i = 0; i < classNames.length; i += 1){ var repl = new RegExp("^\\s*" + classNames[i] + "\\s*|" + "\\s*" + classNames[i] + "\\s*$|" + "\\s+" + classNames[i] + "(\\s+)", "g"); elm.className = elm.className.replace(repl, "$1") } }, getCompStyle: function (elm) { var compStyle = window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle; if (!compStyle) { return {} } return compStyle }, setStyle: function (elm, styles, important, reversible) { var priority = important ? "important" : ""; var origStyle = null; for (var prop in styles) { if (styles.hasOwnProperty(prop)) { var setVal = null; if (styles[prop] === null) { if (!origStyle) { origStyle = jsc.getData(elm, "origStyle") } if (origStyle && origStyle.hasOwnProperty(prop)) { setVal = origStyle[prop] } } else { if (reversible) { if (!origStyle) { origStyle = jsc.getData(elm, "origStyle", {}) } if (!origStyle.hasOwnProperty(prop)) { origStyle[prop] = elm.style[prop] } } setVal = styles[prop] } if (setVal !== null) { elm.style.setProperty(prop, setVal, priority) } } } }, hexColor: function (r, g, b) { return "#" + (("0" + Math.round(r).toString(16)).substr(-2) + ("0" + Math.round(g).toString(16)).substr(-2) + ("0" + Math.round(b).toString(16)).substr(-2)).toUpperCase() }, hexaColor: function (r, g, b, a) { return "#" + (("0" + Math.round(r).toString(16)).substr(-2) + ("0" + Math.round(g).toString(16)).substr(-2) + ("0" + Math.round(b).toString(16)).substr(-2) + ("0" + Math.round(a * 255).toString(16)).substr(-2)).toUpperCase() }, rgbColor: function (r, g, b) { return "rgb(" + Math.round(r) + "," + Math.round(g) + "," + Math.round(b) + ")" }, rgbaColor: function (r, g, b, a) { return "rgba(" + Math.round(r) + "," + Math.round(g) + "," + Math.round(b) + "," + Math.round((a === undefined || a === null ? 1 : a) * 100) / 100 + ")" }, linearGradient: function () { function getFuncName() { var stdName = "linear-gradient"; var prefixes = ["", "-webkit-", "-moz-", "-o-", "-ms-"]; var helper = window.document.createElement("div"); for (var i = 0; i < prefixes.length; i += 1){ var tryFunc = prefixes[i] + stdName; var tryVal = tryFunc + "(to right, rgba(0,0,0,0), rgba(0,0,0,0))"; helper.style.background = tryVal; if (helper.style.background) { return tryFunc } } return stdName } var funcName = getFuncName(); return function () { return funcName + "(" + Array.prototype.join.call(arguments, ", ") + ")" } }(), setBorderRadius: function (elm, value) { jsc.setStyle(elm, { "border-radius": value || "0" }) }, setBoxShadow: function (elm, value) { jsc.setStyle(elm, { "box-shadow": value || "none" }) }, getElementPos: function (e, relativeToViewport) { var x = 0, y = 0; var rect = e.getBoundingClientRect(); x = rect.left; y = rect.top; if (!relativeToViewport) { var viewPos = jsc.getViewPos(); x += viewPos[0]; y += viewPos[1] } return [x, y] }, getElementSize: function (e) { return [e.offsetWidth, e.offsetHeight] }, getAbsPointerPos: function (e) { var x = 0, y = 0; if (typeof e.changedTouches !== "undefined" && e.changedTouches.length) { x = e.changedTouches[0].clientX; y = e.changedTouches[0].clientY } else if (typeof e.clientX === "number") { x = e.clientX; y = e.clientY } return { x: x, y: y } }, getRelPointerPos: function (e) { var target = e.target || e.srcElement; var targetRect = target.getBoundingClientRect(); var x = 0, y = 0; var clientX = 0, clientY = 0; if (typeof e.changedTouches !== "undefined" && e.changedTouches.length) { clientX = e.changedTouches[0].clientX; clientY = e.changedTouches[0].clientY } else if (typeof e.clientX === "number") { clientX = e.clientX; clientY = e.clientY } x = clientX - targetRect.left; y = clientY - targetRect.top; return { x: x, y: y } }, getViewPos: function () { var doc = window.document.documentElement; return [(window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0), (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)] }, getViewSize: function () { var doc = window.document.documentElement; return [window.innerWidth || doc.clientWidth, window.innerHeight || doc.clientHeight] }, RGB_HSV: function (r, g, b) { r /= 255; g /= 255; b /= 255; var n = Math.min(Math.min(r, g), b); var v = Math.max(Math.max(r, g), b); var m = v - n; if (m === 0) { return [null, 0, 100 * v] } var h = r === n ? 3 + (b - g) / m : g === n ? 5 + (r - b) / m : 1 + (g - r) / m; return [60 * (h === 6 ? 0 : h), 100 * (m / v), 100 * v] }, HSV_RGB: function (h, s, v) { var u = 255 * (v / 100); if (h === null) { return [u, u, u] } h /= 60; s /= 100; var i = Math.floor(h); var f = i % 2 ? h - i : 1 - (h - i); var m = u * (1 - s); var n = u * (1 - s * f); switch (i) { case 6: case 0: return [u, n, m]; case 1: return [n, u, m]; case 2: return [m, u, n]; case 3: return [m, n, u]; case 4: return [n, m, u]; case 5: return [u, m, n] } }, parseColorString: function (str) { var ret = { rgba: null, format: null }; var m; if (m = str.match(/^\W*([0-9A-F]{3,8})\W*$/i)) { if (m[1].length === 8) { ret.format = "hexa"; ret.rgba = [parseInt(m[1].substr(0, 2), 16), parseInt(m[1].substr(2, 2), 16), parseInt(m[1].substr(4, 2), 16), parseInt(m[1].substr(6, 2), 16) / 255] } else if (m[1].length === 6) { ret.format = "hex"; ret.rgba = [parseInt(m[1].substr(0, 2), 16), parseInt(m[1].substr(2, 2), 16), parseInt(m[1].substr(4, 2), 16), null] } else if (m[1].length === 3) { ret.format = "hex"; ret.rgba = [parseInt(m[1].charAt(0) + m[1].charAt(0), 16), parseInt(m[1].charAt(1) + m[1].charAt(1), 16), parseInt(m[1].charAt(2) + m[1].charAt(2), 16), null] } else { return false } return ret } if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) { var par = m[1].split(","); var re = /^\s*(\d+|\d*\.\d+|\d+\.\d*)\s*$/; var mR, mG, mB, mA; if (par.length >= 3 && (mR = par[0].match(re)) && (mG = par[1].match(re)) && (mB = par[2].match(re))) { ret.format = "rgb"; ret.rgba = [parseFloat(mR[1]) || 0, parseFloat(mG[1]) || 0, parseFloat(mB[1]) || 0, null]; if (par.length >= 4 && (mA = par[3].match(re))) { ret.format = "rgba"; ret.rgba[3] = parseFloat(mA[1]) || 0 } return ret } } return false }, parsePaletteValue: function (mixed) { var vals = []; if (typeof mixed === "string") { mixed.replace(/#[0-9A-F]{3}([0-9A-F]{3})?|rgba?\(([^)]*)\)/gi, function (val) { vals.push(val) }) } else if (Array.isArray(mixed)) { vals = mixed } var colors = []; for (var i = 0; i < vals.length; i++){ var color = jsc.parseColorString(vals[i]); if (color) { colors.push(color) } } return colors }, containsTranparentColor: function (colors) { for (var i = 0; i < colors.length; i++){ var a = colors[i].rgba[3]; if (a !== null && a < 1) { return true } } return false }, isAlphaFormat: function (format) { switch (format.toLowerCase()) { case "hexa": case "rgba": return true }return false }, scaleCanvasForHighDPR: function (canvas) { var dpr = window.devicePixelRatio || 1; canvas.width *= dpr; canvas.height *= dpr; var ctx = canvas.getContext("2d"); ctx.scale(dpr, dpr) }, genColorPreviewCanvas: function (color, separatorPos, specWidth, scaleForHighDPR) { var sepW = Math.round(jsc.pub.previewSeparator.length); var sqSize = jsc.pub.chessboardSize; var sqColor1 = jsc.pub.chessboardColor1; var sqColor2 = jsc.pub.chessboardColor2; var cWidth = specWidth ? specWidth : sqSize * 2; var cHeight = sqSize * 2; var canvas = jsc.createEl("canvas"); var ctx = canvas.getContext("2d"); canvas.width = cWidth; canvas.height = cHeight; if (scaleForHighDPR) { jsc.scaleCanvasForHighDPR(canvas) } ctx.fillStyle = sqColor1; ctx.fillRect(0, 0, cWidth, cHeight); ctx.fillStyle = sqColor2; for (var x = 0; x < cWidth; x += sqSize * 2){ ctx.fillRect(x, 0, sqSize, sqSize); ctx.fillRect(x + sqSize, sqSize, sqSize, sqSize) } if (color) { ctx.fillStyle = color; ctx.fillRect(0, 0, cWidth, cHeight) } var start = null; switch (separatorPos) { case "left": start = 0; ctx.clearRect(0, 0, sepW / 2, cHeight); break; case "right": start = cWidth - sepW; ctx.clearRect(cWidth - sepW / 2, 0, sepW / 2, cHeight); break }if (start !== null) { ctx.lineWidth = 1; for (var i = 0; i < jsc.pub.previewSeparator.length; i += 1){ ctx.beginPath(); ctx.strokeStyle = jsc.pub.previewSeparator[i]; ctx.moveTo(.5 + start + i, 0); ctx.lineTo(.5 + start + i, cHeight); ctx.stroke() } } return { canvas: canvas, width: cWidth, height: cHeight } }, genColorPreviewGradient: function (color, position, width) { var params = []; if (position && width) { params = ["to " + { left: "right", right: "left" }[position], color + " 0%", color + " " + width + "px", "rgba(0,0,0,0) " + (width + 1) + "px", "rgba(0,0,0,0) 100%"] } else { params = ["to right", color + " 0%", color + " 100%"] } return jsc.linearGradient.apply(this, params) }, redrawPosition: function () { if (!jsc.picker || !jsc.picker.owner) { return } var thisObj = jsc.picker.owner; var tp, vp; if (thisObj.fixed) { tp = jsc.getElementPos(thisObj.targetElement, true); vp = [0, 0] } else { tp = jsc.getElementPos(thisObj.targetElement); vp = jsc.getViewPos() } var ts = jsc.getElementSize(thisObj.targetElement); var vs = jsc.getViewSize(); var pd = jsc.getPickerDims(thisObj); var ps = [pd.borderW, pd.borderH]; var a, b, c; switch (thisObj.position.toLowerCase()) { case "left": a = 1; b = 0; c = -1; break; case "right": a = 1; b = 0; c = 1; break; case "top": a = 0; b = 1; c = -1; break; default: a = 0; b = 1; c = 1; break }var l = (ts[b] + ps[b]) / 2; if (!thisObj.smartPosition) { var pp = [tp[a], tp[b] + ts[b] - l + l * c] } else { var pp = [-vp[a] + tp[a] + ps[a] > vs[a] ? -vp[a] + tp[a] + ts[a] / 2 > vs[a] / 2 && tp[a] + ts[a] - ps[a] >= 0 ? tp[a] + ts[a] - ps[a] : tp[a] : tp[a], -vp[b] + tp[b] + ts[b] + ps[b] - l + l * c > vs[b] ? -vp[b] + tp[b] + ts[b] / 2 > vs[b] / 2 && tp[b] + ts[b] - l - l * c >= 0 ? tp[b] + ts[b] - l - l * c : tp[b] + ts[b] - l + l * c : tp[b] + ts[b] - l + l * c >= 0 ? tp[b] + ts[b] - l + l * c : tp[b] + ts[b] - l - l * c] } var x = pp[a]; var y = pp[b]; var positionValue = thisObj.fixed ? "fixed" : "absolute"; var contractShadow = (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) && pp[1] + ps[1] < tp[1] + ts[1]; jsc._drawPosition(thisObj, x, y, positionValue, contractShadow) }, _drawPosition: function (thisObj, x, y, positionValue, contractShadow) { var vShadow = contractShadow ? 0 : thisObj.shadowBlur; jsc.picker.wrap.style.position = positionValue; jsc.picker.wrap.style.left = x + "px"; jsc.picker.wrap.style.top = y + "px"; jsc.setBoxShadow(jsc.picker.boxS, thisObj.shadow ? new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) : null) }, getPickerDims: function (thisObj) { var w = 2 * thisObj.controlBorderWidth + thisObj.width; var h = 2 * thisObj.controlBorderWidth + thisObj.height; var sliderSpace = 2 * thisObj.controlBorderWidth + 2 * jsc.getControlPadding(thisObj) + thisObj.sliderSize; if (jsc.getSliderChannel(thisObj)) { w += sliderSpace } if (thisObj.hasAlphaChannel()) { w += sliderSpace } var pal = jsc.getPaletteDims(thisObj, w); if (pal.height) { h += pal.height + thisObj.padding } if (thisObj.closeButton) { h += 2 * thisObj.controlBorderWidth + thisObj.padding + thisObj.buttonHeight } var pW = w + 2 * thisObj.padding; var pH = h + 2 * thisObj.padding; return { contentW: w, contentH: h, paddedW: pW, paddedH: pH, borderW: pW + 2 * thisObj.borderWidth, borderH: pH + 2 * thisObj.borderWidth, palette: pal } }, getPaletteDims: function (thisObj, width) { var cols = 0, rows = 0, cellW = 0, cellH = 0, height = 0; var sampleCount = thisObj._palette ? thisObj._palette.length : 0; if (sampleCount) { cols = thisObj.paletteCols; rows = cols > 0 ? Math.ceil(sampleCount / cols) : 0; cellW = Math.max(1, Math.floor((width - (cols - 1) * thisObj.paletteSpacing) / cols)); cellH = thisObj.paletteHeight ? Math.min(thisObj.paletteHeight, cellW) : cellW } if (rows) { height = rows * cellH + (rows - 1) * thisObj.paletteSpacing } return { cols: cols, rows: rows, cellW: cellW, cellH: cellH, width: width, height: height } }, getControlPadding: function (thisObj) { return Math.max(thisObj.padding / 2, 2 * thisObj.pointerBorderWidth + thisObj.pointerThickness - thisObj.controlBorderWidth) }, getPadYChannel: function (thisObj) { switch (thisObj.mode.charAt(1).toLowerCase()) { case "v": return "v"; break }return "s" }, getSliderChannel: function (thisObj) { if (thisObj.mode.length > 2) { switch (thisObj.mode.charAt(2).toLowerCase()) { case "s": return "s"; break; case "v": return "v"; break } } return null }, triggerCallback: function (thisObj, prop) { if (!thisObj[prop]) { return } var callback = null; if (typeof thisObj[prop] === "string") { try { callback = new Function(thisObj[prop]) } catch (e) { console.error(e) } } else { callback = thisObj[prop] } if (callback) { callback.call(thisObj) } }, triggerGlobal: function (eventNames) { var inst = jsc.getInstances(); for (var i = 0; i < inst.length; i += 1){ inst[i].trigger(eventNames) } }, _pointerMoveEvent: { mouse: "mousemove", touch: "touchmove" }, _pointerEndEvent: { mouse: "mouseup", touch: "touchend" }, _pointerOrigin: null, _capturedTarget: null, onDocumentKeyUp: function (e) { if (["Tab", "Escape"].indexOf(jsc.eventKey(e)) !== -1) { if (jsc.picker && jsc.picker.owner) { jsc.picker.owner.tryHide() } } }, onWindowResize: function (e) { jsc.redrawPosition() }, onWindowScroll: function (e) { jsc.redrawPosition() }, onParentScroll: function (e) { if (jsc.picker && jsc.picker.owner) { jsc.picker.owner.tryHide() } }, onDocumentMouseDown: function (e) { var target = e.target || e.srcElement; if (target.jscolor && target.jscolor instanceof jsc.pub) { if (target.jscolor.showOnClick && !target.disabled) { target.jscolor.show() } } else if (jsc.getData(target, "gui")) { var control = jsc.getData(target, "control"); if (control) { jsc.onControlPointerStart(e, target, jsc.getData(target, "control"), "mouse") } } else { if (jsc.picker && jsc.picker.owner) { jsc.picker.owner.tryHide() } } }, onPickerTouchStart: function (e) { var target = e.target || e.srcElement; if (jsc.getData(target, "control")) { jsc.onControlPointerStart(e, target, jsc.getData(target, "control"), "touch") } }, onControlPointerStart: function (e, target, controlName, pointerType) { var thisObj = jsc.getData(target, "instance"); jsc.preventDefault(e); jsc.captureTarget(target); var registerDragEvents = function (doc, offset) { jsc.attachGroupEvent("drag", doc, jsc._pointerMoveEvent[pointerType], jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset)); jsc.attachGroupEvent("drag", doc, jsc._pointerEndEvent[pointerType], jsc.onDocumentPointerEnd(e, target, controlName, pointerType)) }; registerDragEvents(window.document, [0, 0]); if (window.parent && window.frameElement) { var rect = window.frameElement.getBoundingClientRect(); var ofs = [-rect.left, -rect.top]; registerDragEvents(window.parent.window.document, ofs) } var abs = jsc.getAbsPointerPos(e); var rel = jsc.getRelPointerPos(e); jsc._pointerOrigin = { x: abs.x - rel.x, y: abs.y - rel.y }; switch (controlName) { case "pad": if (jsc.getSliderChannel(thisObj) === "v" && thisObj.channels.v === 0) { thisObj.fromHSVA(null, null, 100, null) } jsc.setPad(thisObj, e, 0, 0); break; case "sld": jsc.setSld(thisObj, e, 0); break; case "asld": jsc.setASld(thisObj, e, 0); break }thisObj.trigger("input") }, onDocumentPointerMove: function (e, target, controlName, pointerType, offset) { return function (e) { var thisObj = jsc.getData(target, "instance"); switch (controlName) { case "pad": jsc.setPad(thisObj, e, offset[0], offset[1]); break; case "sld": jsc.setSld(thisObj, e, offset[1]); break; case "asld": jsc.setASld(thisObj, e, offset[1]); break }thisObj.trigger("input") } }, onDocumentPointerEnd: function (e, target, controlName, pointerType) { return function (e) { var thisObj = jsc.getData(target, "instance"); jsc.detachGroupEvents("drag"); jsc.releaseTarget(); thisObj.trigger("input"); thisObj.trigger("change") } }, onPaletteSampleClick: function (e) { var target = e.currentTarget; var thisObj = jsc.getData(target, "instance"); var color = jsc.getData(target, "color"); if (thisObj.format.toLowerCase() === "any") { thisObj._setFormat(color.format); if (!jsc.isAlphaFormat(thisObj.getFormat())) { color.rgba[3] = 1 } } if (color.rgba[3] === null) { if (thisObj.paletteSetsAlpha === true || thisObj.paletteSetsAlpha === "auto" && thisObj._paletteHasTransparency) { color.rgba[3] = 1 } } thisObj.fromRGBA.apply(thisObj, color.rgba); thisObj.trigger("input"); thisObj.trigger("change"); if (thisObj.hideOnPaletteClick) { thisObj.hide() } }, setPad: function (thisObj, e, ofsX, ofsY) { var pointerAbs = jsc.getAbsPointerPos(e); var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.controlBorderWidth; var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth; var xVal = x * (360 / (thisObj.width - 1)); var yVal = 100 - y * (100 / (thisObj.height - 1)); switch (jsc.getPadYChannel(thisObj)) { case "s": thisObj.fromHSVA(xVal, yVal, null, null); break; case "v": thisObj.fromHSVA(xVal, null, yVal, null); break } }, setSld: function (thisObj, e, ofsY) { var pointerAbs = jsc.getAbsPointerPos(e); var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth; var yVal = 100 - y * (100 / (thisObj.height - 1)); switch (jsc.getSliderChannel(thisObj)) { case "s": thisObj.fromHSVA(null, yVal, null, null); break; case "v": thisObj.fromHSVA(null, null, yVal, null); break } }, setASld: function (thisObj, e, ofsY) { var pointerAbs = jsc.getAbsPointerPos(e); var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.controlBorderWidth; var yVal = 1 - y * (1 / (thisObj.height - 1)); if (yVal < 1) { var fmt = thisObj.getFormat(); if (thisObj.format.toLowerCase() === "any" && !jsc.isAlphaFormat(fmt)) { thisObj._setFormat(fmt === "hex" ? "hexa" : "rgba") } } thisObj.fromHSVA(null, null, null, yVal) }, createPadCanvas: function () { var ret = { elm: null, draw: null }; var canvas = jsc.createEl("canvas"); var ctx = canvas.getContext("2d"); var drawFunc = function (width, height, type) { canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, canvas.width, canvas.height); var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0); hGrad.addColorStop(0 / 6, "#F00"); hGrad.addColorStop(1 / 6, "#FF0"); hGrad.addColorStop(2 / 6, "#0F0"); hGrad.addColorStop(3 / 6, "#0FF"); hGrad.addColorStop(4 / 6, "#00F"); hGrad.addColorStop(5 / 6, "#F0F"); hGrad.addColorStop(6 / 6, "#F00"); ctx.fillStyle = hGrad; ctx.fillRect(0, 0, canvas.width, canvas.height); var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height); switch (type.toLowerCase()) { case "s": vGrad.addColorStop(0, "rgba(255,255,255,0)"); vGrad.addColorStop(1, "rgba(255,255,255,1)"); break; case "v": vGrad.addColorStop(0, "rgba(0,0,0,0)"); vGrad.addColorStop(1, "rgba(0,0,0,1)"); break }ctx.fillStyle = vGrad; ctx.fillRect(0, 0, canvas.width, canvas.height) }; ret.elm = canvas; ret.draw = drawFunc; return ret }, createSliderGradient: function () { var ret = { elm: null, draw: null }; var canvas = jsc.createEl("canvas"); var ctx = canvas.getContext("2d"); var drawFunc = function (width, height, color1, color2) { canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, canvas.width, canvas.height); var grad = ctx.createLinearGradient(0, 0, 0, canvas.height); grad.addColorStop(0, color1); grad.addColorStop(1, color2); ctx.fillStyle = grad; ctx.fillRect(0, 0, canvas.width, canvas.height) }; ret.elm = canvas; ret.draw = drawFunc; return ret }, createASliderGradient: function () { var ret = { elm: null, draw: null }; var canvas = jsc.createEl("canvas"); var ctx = canvas.getContext("2d"); var drawFunc = function (width, height, color) { canvas.width = width; canvas.height = height; ctx.clearRect(0, 0, canvas.width, canvas.height); var sqSize = canvas.width / 2; var sqColor1 = jsc.pub.chessboardColor1; var sqColor2 = jsc.pub.chessboardColor2; ctx.fillStyle = sqColor1; ctx.fillRect(0, 0, canvas.width, canvas.height); if (sqSize > 0) { for (var y = 0; y < canvas.height; y += sqSize * 2){ ctx.fillStyle = sqColor2; ctx.fillRect(0, y, sqSize, sqSize); ctx.fillRect(sqSize, y + sqSize, sqSize, sqSize) } } var grad = ctx.createLinearGradient(0, 0, 0, canvas.height); grad.addColorStop(0, color); grad.addColorStop(1, "rgba(0,0,0,0)"); ctx.fillStyle = grad; ctx.fillRect(0, 0, canvas.width, canvas.height) }; ret.elm = canvas; ret.draw = drawFunc; return ret }, BoxShadow: function () { var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) { this.hShadow = hShadow; this.vShadow = vShadow; this.blur = blur; this.spread = spread; this.color = color; this.inset = !!inset }; BoxShadow.prototype.toString = function () { var vals = [Math.round(this.hShadow) + "px", Math.round(this.vShadow) + "px", Math.round(this.blur) + "px", Math.round(this.spread) + "px", this.color]; if (this.inset) { vals.push("inset") } return vals.join(" ") }; return BoxShadow }(), flags: { leaveValue: 1 << 0, leaveAlpha: 1 << 1, leavePreview: 1 << 2 }, enumOpts: { format: ["auto", "any", "hex", "hexa", "rgb", "rgba"], previewPosition: ["left", "right"], mode: ["hsv", "hvs", "hs", "hv"], position: ["left", "right", "top", "bottom"], alphaChannel: ["auto", true, false], paletteSetsAlpha: ["auto", true, false] }, deprecatedOpts: { styleElement: "previewElement", onFineChange: "onInput", overwriteImportant: "forceStyle", closable: "closeButton", insetWidth: "controlBorderWidth", insetColor: "controlBorderColor", refine: null }, docsRef: " " + "See https://jscolor.com/docs/", pub: function (targetElement, opts) { var THIS = this; if (!opts) { opts = {} } this.channels = { r: 255, g: 255, b: 255, h: 0, s: 0, v: 100, a: 1 }; this.format = "auto"; this.value = undefined; this.alpha = undefined; this.random = false; this.onChange = undefined; this.onInput = undefined; this.valueElement = undefined; this.alphaElement = undefined; this.previewElement = undefined; this.previewPosition = "left"; this.previewSize = 32; this.previewPadding = 8; this.required = true; this.hash = true; this.uppercase = true; this.forceStyle = true; this.width = 181; this.height = 101; this.mode = "HSV"; this.alphaChannel = "auto"; this.position = "bottom"; this.smartPosition = true; this.showOnClick = true; this.hideOnLeave = true; this.palette = []; this.paletteCols = 10; this.paletteSetsAlpha = "auto"; this.paletteHeight = 16; this.paletteSpacing = 4; this.hideOnPaletteClick = false; this.sliderSize = 16; this.crossSize = 8; this.closeButton = false; this.closeText = "Close"; this.buttonColor = "rgba(0,0,0,1)"; this.buttonHeight = 18; this.padding = 12; this.backgroundColor = "rgba(255,255,255,1)"; this.borderWidth = 1; this.borderColor = "rgba(187,187,187,1)"; this.borderRadius = 8; this.controlBorderWidth = 1; this.controlBorderColor = "rgba(187,187,187,1)"; this.shadow = true; this.shadowBlur = 15; this.shadowColor = "rgba(0,0,0,0.2)"; this.pointerColor = "rgba(76,76,76,1)"; this.pointerBorderWidth = 1; this.pointerBorderColor = "rgba(255,255,255,1)"; this.pointerThickness = 2; this.zIndex = 5e3; this.container = undefined; this.minS = 0; this.maxS = 100; this.minV = 0; this.maxV = 100; this.minA = 0; this.maxA = 1; this.option = function () { if (!arguments.length) { throw new Error("No option specified") } if (arguments.length === 1 && typeof arguments[0] === "string") { try { return getOption(arguments[0]) } catch (e) { console.warn(e) } return false } else if (arguments.length >= 2 && typeof arguments[0] === "string") { try { if (!setOption(arguments[0], arguments[1])) { return false } } catch (e) { console.warn(e); return false } this.redraw(); this.exposeColor(); return true } else if (arguments.length === 1 && typeof arguments[0] === "object") { var opts = arguments[0]; var success = true; for (var opt in opts) { if (opts.hasOwnProperty(opt)) { try { if (!setOption(opt, opts[opt])) { success = false } } catch (e) { console.warn(e); success = false } } } this.redraw(); this.exposeColor(); return success } throw new Error("Invalid arguments") }; this.channel = function (name, value) { if (typeof name !== "string") { throw new Error("Invalid value for channel name: " + name) } if (value === undefined) { if (!this.channels.hasOwnProperty(name.toLowerCase())) { console.warn("Getting unknown channel: " + name); return false } return this.channels[name.toLowerCase()] } else { var res = false; switch (name.toLowerCase()) { case "r": res = this.fromRGBA(value, null, null, null); break; case "g": res = this.fromRGBA(null, value, null, null); break; case "b": res = this.fromRGBA(null, null, value, null); break; case "h": res = this.fromHSVA(value, null, null, null); break; case "s": res = this.fromHSVA(null, value, null, null); break; case "v": res = this.fromHSVA(null, null, value, null); break; case "a": res = this.fromHSVA(null, null, null, value); break; default: console.warn("Setting unknown channel: " + name); return false }if (res) { this.redraw(); return true } } return false }; this.trigger = function (eventNames) { var evs = jsc.strList(eventNames); for (var i = 0; i < evs.length; i += 1){ var ev = evs[i].toLowerCase(); var callbackProp = null; switch (ev) { case "input": callbackProp = "onInput"; break; case "change": callbackProp = "onChange"; break }if (callbackProp) { jsc.triggerCallback(this, callbackProp) } jsc.triggerInputEvent(this.valueElement, ev, true, true) } }; this.fromHSVA = function (h, s, v, a, flags) { if (h === undefined) { h = null } if (s === undefined) { s = null } if (v === undefined) { v = null } if (a === undefined) { a = null } if (h !== null) { if (isNaN(h)) { return false } this.channels.h = Math.max(0, Math.min(360, h)) } if (s !== null) { if (isNaN(s)) { return false } this.channels.s = Math.max(0, Math.min(100, this.maxS, s), this.minS) } if (v !== null) { if (isNaN(v)) { return false } this.channels.v = Math.max(0, Math.min(100, this.maxV, v), this.minV) } if (a !== null) { if (isNaN(a)) { return false } this.channels.a = this.hasAlphaChannel() ? Math.max(0, Math.min(1, this.maxA, a), this.minA) : 1 } var rgb = jsc.HSV_RGB(this.channels.h, this.channels.s, this.channels.v); this.channels.r = rgb[0]; this.channels.g = rgb[1]; this.channels.b = rgb[2]; this.exposeColor(flags); return true }; this.fromRGBA = function (r, g, b, a, flags) { if (r === undefined) { r = null } if (g === undefined) { g = null } if (b === undefined) { b = null } if (a === undefined) { a = null } if (r !== null) { if (isNaN(r)) { return false } r = Math.max(0, Math.min(255, r)) } if (g !== null) { if (isNaN(g)) { return false } g = Math.max(0, Math.min(255, g)) } if (b !== null) { if (isNaN(b)) { return false } b = Math.max(0, Math.min(255, b)) } if (a !== null) { if (isNaN(a)) { return false } this.channels.a = this.hasAlphaChannel() ? Math.max(0, Math.min(1, this.maxA, a), this.minA) : 1 } var hsv = jsc.RGB_HSV(r === null ? this.channels.r : r, g === null ? this.channels.g : g, b === null ? this.channels.b : b); if (hsv[0] !== null) { this.channels.h = Math.max(0, Math.min(360, hsv[0])) } if (hsv[2] !== 0) { this.channels.s = Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1])) } this.channels.v = Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2])); var rgb = jsc.HSV_RGB(this.channels.h, this.channels.s, this.channels.v); this.channels.r = rgb[0]; this.channels.g = rgb[1]; this.channels.b = rgb[2]; this.exposeColor(flags); return true }; this.fromHSV = function (h, s, v, flags) { console.warn("fromHSV() method is DEPRECATED. Using fromHSVA() instead." + jsc.docsRef); return this.fromHSVA(h, s, v, null, flags) }; this.fromRGB = function (r, g, b, flags) { console.warn("fromRGB() method is DEPRECATED. Using fromRGBA() instead." + jsc.docsRef); return this.fromRGBA(r, g, b, null, flags) }; this.fromString = function (str, flags) { if (!this.required && str.trim() === "") { this.setPreviewElementBg(null); this.setValueElementValue(""); return true } var color = jsc.parseColorString(str); if (!color) { return false } if (this.format.toLowerCase() === "any") { this._setFormat(color.format); if (!jsc.isAlphaFormat(this.getFormat())) { color.rgba[3] = 1 } } this.fromRGBA(color.rgba[0], color.rgba[1], color.rgba[2], color.rgba[3], flags); return true }; this.randomize = function (minV, maxV, minS, maxS, minH, maxH, minA, maxA) { if (minV === undefined) { minV = 0 } if (maxV === undefined) { maxV = 100 } if (minS === undefined) { minS = 0 } if (maxS === undefined) { maxS = 100 } if (minH === undefined) { minH = 0 } if (maxH === undefined) { maxH = 359 } if (minA === undefined) { minA = 1 } if (maxA === undefined) { maxA = 1 } this.fromHSVA(minH + Math.floor(Math.random() * (maxH - minH + 1)), minS + Math.floor(Math.random() * (maxS - minS + 1)), minV + Math.floor(Math.random() * (maxV - minV + 1)), (100 * minA + Math.floor(Math.random() * (100 * (maxA - minA) + 1))) / 100) }; this.toString = function (format) { if (format === undefined) { format = this.getFormat() } switch (format.toLowerCase()) { case "hex": return this.toHEXString(); break; case "hexa": return this.toHEXAString(); break; case "rgb": return this.toRGBString(); break; case "rgba": return this.toRGBAString(); break }return false }; this.toHEXString = function () { return jsc.hexColor(this.channels.r, this.channels.g, this.channels.b) }; this.toHEXAString = function () { return jsc.hexaColor(this.channels.r, this.channels.g, this.channels.b, this.channels.a) }; this.toRGBString = function () { return jsc.rgbColor(this.channels.r, this.channels.g, this.channels.b) }; this.toRGBAString = function () { return jsc.rgbaColor(this.channels.r, this.channels.g, this.channels.b, this.channels.a) }; this.toGrayscale = function () { return .213 * this.channels.r + .715 * this.channels.g + .072 * this.channels.b }; this.toCanvas = function () { return jsc.genColorPreviewCanvas(this.toRGBAString()).canvas }; this.toDataURL = function () { return this.toCanvas().toDataURL() }; this.toBackground = function () { return jsc.pub.background(this.toRGBAString()) }; this.isLight = function () { return this.toGrayscale() > 255 / 2 }; this.hide = function () { if (isPickerOwner()) { detachPicker() } }; this.show = function () { drawPicker() }; this.redraw = function () { if (isPickerOwner()) { drawPicker() } }; this.getFormat = function () { return this._currentFormat }; this._setFormat = function (format) { this._currentFormat = format.toLowerCase() }; this.hasAlphaChannel = function () { if (this.alphaChannel === "auto") { return this.format.toLowerCase() === "any" || jsc.isAlphaFormat(this.getFormat()) || this.alpha !== undefined || this.alphaElement !== undefined } return this.alphaChannel }; this.processValueInput = function (str) { if (!this.fromString(str)) { this.exposeColor() } }; this.processAlphaInput = function (str) { if (!this.fromHSVA(null, null, null, parseFloat(str))) { this.exposeColor() } }; this.exposeColor = function (flags) { var colorStr = this.toString(); var fmt = this.getFormat(); jsc.setDataAttr(this.targetElement, "current-color", colorStr); if (!(flags & jsc.flags.leaveValue) && this.valueElement) { if (fmt === "hex" || fmt === "hexa") { if (!this.uppercase) { colorStr = colorStr.toLowerCase() } if (!this.hash) { colorStr = colorStr.replace(/^#/, "") } } this.setValueElementValue(colorStr) } if (!(flags & jsc.flags.leaveAlpha) && this.alphaElement) { var alphaVal = Math.round(this.channels.a * 100) / 100; this.setAlphaElementValue(alphaVal) } if (!(flags & jsc.flags.leavePreview) && this.previewElement) { var previewPos = null; if (jsc.isTextInput(this.previewElement) || jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) { previewPos = this.previewPosition } this.setPreviewElementBg(this.toRGBAString()) } if (isPickerOwner()) { redrawPad(); redrawSld(); redrawASld() } }; this.setPreviewElementBg = function (color) { if (!this.previewElement) { return } var position = null; var width = null; if (jsc.isTextInput(this.previewElement) || jsc.isButton(this.previewElement) && !jsc.isButtonEmpty(this.previewElement)) { position = this.previewPosition; width = this.previewSize } var backgrounds = []; if (!color) { backgrounds.push({ image: "none", position: "left top", size: "auto", repeat: "no-repeat", origin: "padding-box" }) } else { backgrounds.push({ image: jsc.genColorPreviewGradient(color, position, width ? width - jsc.pub.previewSeparator.length : null), position: "left top", size: "auto", repeat: position ? "repeat-y" : "repeat", origin: "padding-box" }); var preview = jsc.genColorPreviewCanvas("rgba(0,0,0,0)", position ? { left: "right", right: "left" }[position] : null, width, true); backgrounds.push({ image: "url('" + preview.canvas.toDataURL() + "')", position: (position || "left") + " top", size: preview.width + "px " + preview.height + "px", repeat: position ? "repeat-y" : "repeat", origin: "padding-box" }) } var bg = { image: [], position: [], size: [], repeat: [], origin: [] }; for (var i = 0; i < backgrounds.length; i += 1){ bg.image.push(backgrounds[i].image); bg.position.push(backgrounds[i].position); bg.size.push(backgrounds[i].size); bg.repeat.push(backgrounds[i].repeat); bg.origin.push(backgrounds[i].origin) } var sty = { "background-image": bg.image.join(", "), "background-position": bg.position.join(", "), "background-size": bg.size.join(", "), "background-repeat": bg.repeat.join(", "), "background-origin": bg.origin.join(", ") }; jsc.setStyle(this.previewElement, sty, this.forceStyle); var padding = { left: null, right: null }; if (position) { padding[position] = this.previewSize + this.previewPadding + "px" } var sty = { "padding-left": padding.left, "padding-right": padding.right }; jsc.setStyle(this.previewElement, sty, this.forceStyle, true) }; this.setValueElementValue = function (str) { if (this.valueElement) { if (jsc.nodeName(this.valueElement) === "input") { this.valueElement.value = str } else { this.valueElement.innerHTML = str } } }; this.setAlphaElementValue = function (str) { if (this.alphaElement) { if (jsc.nodeName(this.alphaElement) === "input") { this.alphaElement.value = str } else { this.alphaElement.innerHTML = str } } }; this._processParentElementsInDOM = function () { if (this._parentElementsProcessed) { return } this._parentElementsProcessed = true; var elm = this.targetElement; do { var compStyle = jsc.getCompStyle(elm); if (compStyle.position && compStyle.position.toLowerCase() === "fixed") { this.fixed = true } if (elm !== this.targetElement) { if (!jsc.getData(elm, "hasScrollListener")) { elm.addEventListener("scroll", jsc.onParentScroll, false); jsc.setData(elm, "hasScrollListener", true) } } } while ((elm = elm.parentNode) && jsc.nodeName(elm) !== "body") }; this.tryHide = function () { if (this.hideOnLeave) { this.hide() } }; this.set__palette = function (val) { this.palette = val; this._palette = jsc.parsePaletteValue(val); this._paletteHasTransparency = jsc.containsTranparentColor(this._palette) }; function setOption(option, value) { if (typeof option !== "string") { throw new Error("Invalid value for option name: " + option) } if (jsc.enumOpts.hasOwnProperty(option)) { if (typeof value === "string") { value = value.toLowerCase() } if (jsc.enumOpts[option].indexOf(value) === -1) { throw new Error("Option '" + option + "' has invalid value: " + value) } } if (jsc.deprecatedOpts.hasOwnProperty(option)) { var oldOpt = option; var newOpt = jsc.deprecatedOpts[option]; if (newOpt) { console.warn("Option '%s' is DEPRECATED, using '%s' instead." + jsc.docsRef, oldOpt, newOpt); option = newOpt } else { throw new Error("Option '" + option + "' is DEPRECATED") } } var setter = "set__" + option; if (typeof THIS[setter] === "function") { THIS[setter](value); return true } else if (option in THIS) { THIS[option] = value; return true } throw new Error("Unrecognized configuration option: " + option) } function getOption(option) { if (typeof option !== "string") { throw new Error("Invalid value for option name: " + option) } if (jsc.deprecatedOpts.hasOwnProperty(option)) { var oldOpt = option; var newOpt = jsc.deprecatedOpts[option]; if (newOpt) { console.warn("Option '%s' is DEPRECATED, using '%s' instead." + jsc.docsRef, oldOpt, newOpt); option = newOpt } else { throw new Error("Option '" + option + "' is DEPRECATED") } } var getter = "get__" + option; if (typeof THIS[getter] === "function") { return THIS[getter](value) } else if (option in THIS) { return THIS[option] } throw new Error("Unrecognized configuration option: " + option) } function detachPicker() { jsc.removeClass(THIS.targetElement, jsc.pub.activeClassName); jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap); delete jsc.picker.owner } function drawPicker() { THIS._processParentElementsInDOM(); if (!jsc.picker) { jsc.picker = { owner: null, wrap: jsc.createEl("div"), box: jsc.createEl("div"), boxS: jsc.createEl("div"), boxB: jsc.createEl("div"), pad: jsc.createEl("div"), padB: jsc.createEl("div"), padM: jsc.createEl("div"), padCanvas: jsc.createPadCanvas(), cross: jsc.createEl("div"), crossBY: jsc.createEl("div"), crossBX: jsc.createEl("div"), crossLY: jsc.createEl("div"), crossLX: jsc.createEl("div"), sld: jsc.createEl("div"), sldB: jsc.createEl("div"), sldM: jsc.createEl("div"), sldGrad: jsc.createSliderGradient(), sldPtrS: jsc.createEl("div"), sldPtrIB: jsc.createEl("div"), sldPtrMB: jsc.createEl("div"), sldPtrOB: jsc.createEl("div"), asld: jsc.createEl("div"), asldB: jsc.createEl("div"), asldM: jsc.createEl("div"), asldGrad: jsc.createASliderGradient(), asldPtrS: jsc.createEl("div"), asldPtrIB: jsc.createEl("div"), asldPtrMB: jsc.createEl("div"), asldPtrOB: jsc.createEl("div"), pal: jsc.createEl("div"), btn: jsc.createEl("div"), btnT: jsc.createEl("span") }; jsc.picker.pad.appendChild(jsc.picker.padCanvas.elm); jsc.picker.padB.appendChild(jsc.picker.pad); jsc.picker.cross.appendChild(jsc.picker.crossBY); jsc.picker.cross.appendChild(jsc.picker.crossBX); jsc.picker.cross.appendChild(jsc.picker.crossLY); jsc.picker.cross.appendChild(jsc.picker.crossLX); jsc.picker.padB.appendChild(jsc.picker.cross); jsc.picker.box.appendChild(jsc.picker.padB); jsc.picker.box.appendChild(jsc.picker.padM); jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm); jsc.picker.sldB.appendChild(jsc.picker.sld); jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB); jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB); jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB); jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS); jsc.picker.box.appendChild(jsc.picker.sldB); jsc.picker.box.appendChild(jsc.picker.sldM); jsc.picker.asld.appendChild(jsc.picker.asldGrad.elm); jsc.picker.asldB.appendChild(jsc.picker.asld); jsc.picker.asldB.appendChild(jsc.picker.asldPtrOB); jsc.picker.asldPtrOB.appendChild(jsc.picker.asldPtrMB); jsc.picker.asldPtrMB.appendChild(jsc.picker.asldPtrIB); jsc.picker.asldPtrIB.appendChild(jsc.picker.asldPtrS); jsc.picker.box.appendChild(jsc.picker.asldB); jsc.picker.box.appendChild(jsc.picker.asldM); jsc.picker.box.appendChild(jsc.picker.pal); jsc.picker.btn.appendChild(jsc.picker.btnT); jsc.picker.box.appendChild(jsc.picker.btn); jsc.picker.boxB.appendChild(jsc.picker.box); jsc.picker.wrap.appendChild(jsc.picker.boxS); jsc.picker.wrap.appendChild(jsc.picker.boxB); jsc.picker.wrap.addEventListener("touchstart", jsc.onPickerTouchStart, jsc.isPassiveEventSupported ? { passive: false } : false) } var p = jsc.picker; var displaySlider = !!jsc.getSliderChannel(THIS); var displayAlphaSlider = THIS.hasAlphaChannel(); var pickerDims = jsc.getPickerDims(THIS); var crossOuterSize = 2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize; var controlPadding = jsc.getControlPadding(THIS); var borderRadius = Math.min(THIS.borderRadius, Math.round(THIS.padding * Math.PI)); var padCursor = "crosshair"; p.wrap.className = "jscolor-picker-wrap"; p.wrap.style.clear = "both"; p.wrap.style.width = pickerDims.borderW + "px"; p.wrap.style.height = pickerDims.borderH + "px"; p.wrap.style.zIndex = THIS.zIndex; p.box.className = "jscolor-picker"; p.box.style.width = pickerDims.paddedW + "px"; p.box.style.height = pickerDims.paddedH + "px"; p.box.style.position = "relative"; p.boxS.className = "jscolor-picker-shadow"; p.boxS.style.position = "absolute"; p.boxS.style.left = "0"; p.boxS.style.top = "0"; p.boxS.style.width = "100%"; p.boxS.style.height = "100%"; jsc.setBorderRadius(p.boxS, borderRadius + "px"); p.boxB.className = "jscolor-picker-border"; p.boxB.style.position = "relative"; p.boxB.style.border = THIS.borderWidth + "px solid"; p.boxB.style.borderColor = THIS.borderColor; p.boxB.style.background = THIS.backgroundColor; jsc.setBorderRadius(p.boxB, borderRadius + "px"); p.padM.style.background = "rgba(255,0,0,.2)"; p.sldM.style.background = "rgba(0,255,0,.2)"; p.asldM.style.background = "rgba(0,0,255,.2)"; p.padM.style.opacity = p.sldM.style.opacity = p.asldM.style.opacity = "0"; p.pad.style.position = "relative"; p.pad.style.width = THIS.width + "px"; p.pad.style.height = THIS.height + "px"; p.padCanvas.draw(THIS.width, THIS.height, jsc.getPadYChannel(THIS)); p.padB.style.position = "absolute"; p.padB.style.left = THIS.padding + "px"; p.padB.style.top = THIS.padding + "px"; p.padB.style.border = THIS.controlBorderWidth + "px solid"; p.padB.style.borderColor = THIS.controlBorderColor; p.padM.style.position = "absolute"; p.padM.style.left = 0 + "px"; p.padM.style.top = 0 + "px"; p.padM.style.width = THIS.padding + 2 * THIS.controlBorderWidth + THIS.width + controlPadding + "px"; p.padM.style.height = 2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height + "px"; p.padM.style.cursor = padCursor; jsc.setData(p.padM, { instance: THIS, control: "pad" }); p.cross.style.position = "absolute"; p.cross.style.left = p.cross.style.top = "0"; p.cross.style.width = p.cross.style.height = crossOuterSize + "px"; p.crossBY.style.position = p.crossBX.style.position = "absolute"; p.crossBY.style.background = p.crossBX.style.background = THIS.pointerBorderColor; p.crossBY.style.width = p.crossBX.style.height = 2 * THIS.pointerBorderWidth + THIS.pointerThickness + "px"; p.crossBY.style.height = p.crossBX.style.width = crossOuterSize + "px"; p.crossBY.style.left = p.crossBX.style.top = Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth + "px"; p.crossBY.style.top = p.crossBX.style.left = "0"; p.crossLY.style.position = p.crossLX.style.position = "absolute"; p.crossLY.style.background = p.crossLX.style.background = THIS.pointerColor; p.crossLY.style.height = p.crossLX.style.width = crossOuterSize - 2 * THIS.pointerBorderWidth + "px"; p.crossLY.style.width = p.crossLX.style.height = THIS.pointerThickness + "px"; p.crossLY.style.left = p.crossLX.style.top = Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) + "px"; p.crossLY.style.top = p.crossLX.style.left = THIS.pointerBorderWidth + "px"; p.sld.style.overflow = "hidden"; p.sld.style.width = THIS.sliderSize + "px"; p.sld.style.height = THIS.height + "px"; p.sldGrad.draw(THIS.sliderSize, THIS.height, "#000", "#000"); p.sldB.style.display = displaySlider ? "block" : "none"; p.sldB.style.position = "absolute"; p.sldB.style.left = THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + 2 * controlPadding + "px"; p.sldB.style.top = THIS.padding + "px"; p.sldB.style.border = THIS.controlBorderWidth + "px solid"; p.sldB.style.borderColor = THIS.controlBorderColor; p.sldM.style.display = displaySlider ? "block" : "none"; p.sldM.style.position = "absolute"; p.sldM.style.left = THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding + "px"; p.sldM.style.top = 0 + "px"; p.sldM.style.width = THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth + (displayAlphaSlider ? 0 : Math.max(0, THIS.padding - controlPadding)) + "px"; p.sldM.style.height = 2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height + "px"; p.sldM.style.cursor = "default"; jsc.setData(p.sldM, { instance: THIS, control: "sld" }); p.sldPtrIB.style.border = p.sldPtrOB.style.border = THIS.pointerBorderWidth + "px solid " + THIS.pointerBorderColor; p.sldPtrOB.style.position = "absolute"; p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + "px"; p.sldPtrOB.style.top = "0"; p.sldPtrMB.style.border = THIS.pointerThickness + "px solid " + THIS.pointerColor; p.sldPtrS.style.width = THIS.sliderSize + "px"; p.sldPtrS.style.height = jsc.pub.sliderInnerSpace + "px"; p.asld.style.overflow = "hidden"; p.asld.style.width = THIS.sliderSize + "px"; p.asld.style.height = THIS.height + "px"; p.asldGrad.draw(THIS.sliderSize, THIS.height, "#000"); p.asldB.style.display = displayAlphaSlider ? "block" : "none"; p.asldB.style.position = "absolute"; p.asldB.style.left = THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding + (displaySlider ? THIS.sliderSize + 3 * controlPadding + 2 * THIS.controlBorderWidth : 0) + "px"; p.asldB.style.top = THIS.padding + "px"; p.asldB.style.border = THIS.controlBorderWidth + "px solid"; p.asldB.style.borderColor = THIS.controlBorderColor; p.asldM.style.display = displayAlphaSlider ? "block" : "none"; p.asldM.style.position = "absolute"; p.asldM.style.left = THIS.padding + THIS.width + 2 * THIS.controlBorderWidth + controlPadding + (displaySlider ? THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth : 0) + "px"; p.asldM.style.top = 0 + "px"; p.asldM.style.width = THIS.sliderSize + 2 * controlPadding + 2 * THIS.controlBorderWidth + Math.max(0, THIS.padding - controlPadding) + "px"; p.asldM.style.height = 2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height + "px"; p.asldM.style.cursor = "default"; jsc.setData(p.asldM, { instance: THIS, control: "asld" }); p.asldPtrIB.style.border = p.asldPtrOB.style.border = THIS.pointerBorderWidth + "px solid " + THIS.pointerBorderColor; p.asldPtrOB.style.position = "absolute"; p.asldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + "px"; p.asldPtrOB.style.top = "0"; p.asldPtrMB.style.border = THIS.pointerThickness + "px solid " + THIS.pointerColor; p.asldPtrS.style.width = THIS.sliderSize + "px"; p.asldPtrS.style.height = jsc.pub.sliderInnerSpace + "px"; p.pal.className = "jscolor-palette"; p.pal.style.display = pickerDims.palette.rows ? "block" : "none"; p.pal.style.position = "absolute"; p.pal.style.left = THIS.padding + "px"; p.pal.style.top = 2 * THIS.controlBorderWidth + 2 * THIS.padding + THIS.height + "px"; p.pal.innerHTML = ""; var chessboard = jsc.genColorPreviewCanvas("rgba(0,0,0,0)"); var si = 0; for (var r = 0; r < pickerDims.palette.rows; r++){ for (var c = 0; c < pickerDims.palette.cols && si < THIS._palette.length; c++, si++){ var sampleColor = THIS._palette[si]; var sampleCssColor = jsc.rgbaColor.apply(null, sampleColor.rgba); var sc = jsc.createEl("div"); sc.style.width = pickerDims.palette.cellW - 2 * THIS.controlBorderWidth + "px"; sc.style.height = pickerDims.palette.cellH - 2 * THIS.controlBorderWidth + "px"; sc.style.backgroundColor = sampleCssColor; var sw = jsc.createEl("div"); sw.className = "jscolor-palette-sample"; sw.style.display = "block"; sw.style.position = "absolute"; sw.style.left = (pickerDims.palette.cols <= 1 ? 0 : Math.round(10 * (c * ((pickerDims.contentW - pickerDims.palette.cellW) / (pickerDims.palette.cols - 1)))) / 10) + "px"; sw.style.top = r * (pickerDims.palette.cellH + THIS.paletteSpacing) + "px"; sw.style.border = THIS.controlBorderWidth + "px solid"; sw.style.borderColor = THIS.controlBorderColor; sw.style.cursor = "pointer"; if (sampleColor.rgba[3] !== null && sampleColor.rgba[3] < 1) { sw.style.backgroundImage = "url('" + chessboard.canvas.toDataURL() + "')"; sw.style.backgroundRepeat = "repeat"; sw.style.backgroundPosition = "center center" } jsc.setData(sw, { instance: THIS, control: "palette-sample", color: sampleColor }); sw.addEventListener("click", jsc.onPaletteSampleClick, false); sw.appendChild(sc); p.pal.appendChild(sw) } } function setBtnBorder() { var insetColors = THIS.controlBorderColor.split(/\s+/); var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + " " + insetColors[0] + " " + insetColors[0] + " " + insetColors[1]; p.btn.style.borderColor = outsetColor } var btnPadding = 15; p.btn.className = "jscolor-btn-close"; p.btn.style.display = THIS.closeButton ? "block" : "none"; p.btn.style.position = "absolute"; p.btn.style.left = THIS.padding + "px"; p.btn.style.bottom = THIS.padding + "px"; p.btn.style.padding = "0 " + btnPadding + "px"; p.btn.style.maxWidth = pickerDims.contentW - 2 * THIS.controlBorderWidth - 2 * btnPadding + "px"; p.btn.style.overflow = "hidden"; p.btn.style.height = THIS.buttonHeight + "px"; p.btn.style.whiteSpace = "nowrap"; p.btn.style.border = THIS.controlBorderWidth + "px solid"; setBtnBorder(); p.btn.style.color = THIS.buttonColor; p.btn.style.font = "12px sans-serif"; p.btn.style.textAlign = "center"; p.btn.style.cursor = "pointer"; p.btn.onmousedown = function () { THIS.hide() }; p.btnT.style.lineHeight = THIS.buttonHeight + "px"; p.btnT.innerHTML = ""; p.btnT.appendChild(window.document.createTextNode(THIS.closeText)); redrawPad(); redrawSld(); redrawASld(); if (jsc.picker.owner && jsc.picker.owner !== THIS) { jsc.removeClass(jsc.picker.owner.targetElement, jsc.pub.activeClassName) } jsc.picker.owner = THIS; if (THIS.container === window.document.body) { jsc.redrawPosition() } else { jsc._drawPosition(THIS, 0, 0, "relative", false) } if (p.wrap.parentNode !== THIS.container) { THIS.container.appendChild(p.wrap) } jsc.addClass(THIS.targetElement, jsc.pub.activeClassName) } function redrawPad() { var yChannel = jsc.getPadYChannel(THIS); var x = Math.round(THIS.channels.h / 360 * (THIS.width - 1)); var y = Math.round((1 - THIS.channels[yChannel] / 100) * (THIS.height - 1)); var crossOuterSize = 2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize; var ofs = -Math.floor(crossOuterSize / 2); jsc.picker.cross.style.left = x + ofs + "px"; jsc.picker.cross.style.top = y + ofs + "px"; switch (jsc.getSliderChannel(THIS)) { case "s": var rgb1 = jsc.HSV_RGB(THIS.channels.h, 100, THIS.channels.v); var rgb2 = jsc.HSV_RGB(THIS.channels.h, 0, THIS.channels.v); var color1 = "rgb(" + Math.round(rgb1[0]) + "," + Math.round(rgb1[1]) + "," + Math.round(rgb1[2]) + ")"; var color2 = "rgb(" + Math.round(rgb2[0]) + "," + Math.round(rgb2[1]) + "," + Math.round(rgb2[2]) + ")"; jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); break; case "v": var rgb = jsc.HSV_RGB(THIS.channels.h, THIS.channels.s, 100); var color1 = "rgb(" + Math.round(rgb[0]) + "," + Math.round(rgb[1]) + "," + Math.round(rgb[2]) + ")"; var color2 = "#000"; jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2); break }jsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString()) } function redrawSld() { var sldChannel = jsc.getSliderChannel(THIS); if (sldChannel) { var y = Math.round((1 - THIS.channels[sldChannel] / 100) * (THIS.height - 1)); jsc.picker.sldPtrOB.style.top = y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2) + "px" } jsc.picker.asldGrad.draw(THIS.sliderSize, THIS.height, THIS.toHEXString()) } function redrawASld() { var y = Math.round((1 - THIS.channels.a) * (THIS.height - 1)); jsc.picker.asldPtrOB.style.top = y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(jsc.pub.sliderInnerSpace / 2) + "px" } function isPickerOwner() { return jsc.picker && jsc.picker.owner === THIS } function onValueKeyDown(ev) { if (jsc.eventKey(ev) === "Enter") { if (THIS.valueElement) { THIS.processValueInput(THIS.valueElement.value) } THIS.tryHide() } } function onAlphaKeyDown(ev) { if (jsc.eventKey(ev) === "Enter") { if (THIS.alphaElement) { THIS.processAlphaInput(THIS.alphaElement.value) } THIS.tryHide() } } function onValueChange(ev) { if (jsc.getData(ev, "internal")) { return } var oldVal = THIS.valueElement.value; THIS.processValueInput(THIS.valueElement.value); jsc.triggerCallback(THIS, "onChange"); if (THIS.valueElement.value !== oldVal) { jsc.triggerInputEvent(THIS.valueElement, "change", true, true) } } function onAlphaChange(ev) { if (jsc.getData(ev, "internal")) { return } var oldVal = THIS.alphaElement.value; THIS.processAlphaInput(THIS.alphaElement.value); jsc.triggerCallback(THIS, "onChange"); jsc.triggerInputEvent(THIS.valueElement, "change", true, true); if (THIS.alphaElement.value !== oldVal) { jsc.triggerInputEvent(THIS.alphaElement, "change", true, true) } } function onValueInput(ev) { if (jsc.getData(ev, "internal")) { return } if (THIS.valueElement) { THIS.fromString(THIS.valueElement.value, jsc.flags.leaveValue) } jsc.triggerCallback(THIS, "onInput") } function onAlphaInput(ev) { if (jsc.getData(ev, "internal")) { return } if (THIS.alphaElement) { THIS.fromHSVA(null, null, null, parseFloat(THIS.alphaElement.value), jsc.flags.leaveAlpha) } jsc.triggerCallback(THIS, "onInput"); jsc.triggerInputEvent(THIS.valueElement, "input", true, true) } if (jsc.pub.options) { for (var opt in jsc.pub.options) { if (jsc.pub.options.hasOwnProperty(opt)) { try { setOption(opt, jsc.pub.options[opt]) } catch (e) { console.warn(e) } } } } var presetsArr = []; if (opts.preset) { if (typeof opts.preset === "string") { presetsArr = opts.preset.split(/\s+/) } else if (Array.isArray(opts.preset)) { presetsArr = opts.preset.slice() } else { console.warn("Unrecognized preset value") } } if (presetsArr.indexOf("default") === -1) { presetsArr.push("default") } for (var i = presetsArr.length - 1; i >= 0; i -= 1){ var pres = presetsArr[i]; if (!pres) { continue } if (!jsc.pub.presets.hasOwnProperty(pres)) { console.warn("Unknown preset: %s", pres); continue } for (var opt in jsc.pub.presets[pres]) { if (jsc.pub.presets[pres].hasOwnProperty(opt)) { try { setOption(opt, jsc.pub.presets[pres][opt]) } catch (e) { console.warn(e) } } } } var nonProperties = ["preset"]; for (var opt in opts) { if (opts.hasOwnProperty(opt)) { if (nonProperties.indexOf(opt) === -1) { try { setOption(opt, opts[opt]) } catch (e) { console.warn(e) } } } } if (this.container === undefined) { this.container = window.document.body } else { this.container = jsc.node(this.container) } if (!this.container) { throw new Error("Cannot instantiate color picker without a container element") } this.targetElement = jsc.node(targetElement); if (!this.targetElement) { if (typeof targetElement === "string" && /^[a-zA-Z][\w:.-]*$/.test(targetElement)) { var possiblyId = targetElement; throw new Error("If '" + possiblyId + "' is supposed to be an ID, please use '#" + possiblyId + "' or any valid CSS selector.") } throw new Error("Cannot instantiate color picker without a target element") } if (this.targetElement.jscolor && this.targetElement.jscolor instanceof jsc.pub) { throw new Error("Color picker already installed on this element") } this.targetElement.jscolor = this; jsc.addClass(this.targetElement, jsc.pub.className); jsc.instances.push(this); if (jsc.isButton(this.targetElement)) { if (this.targetElement.type.toLowerCase() !== "button") { this.targetElement.type = "button" } if (jsc.isButtonEmpty(this.targetElement)) { jsc.removeChildren(this.targetElement); this.targetElement.appendChild(window.document.createTextNode(" ")); var compStyle = jsc.getCompStyle(this.targetElement); var currMinWidth = parseFloat(compStyle["min-width"]) || 0; if (currMinWidth < this.previewSize) { jsc.setStyle(this.targetElement, { "min-width": this.previewSize + "px" }, this.forceStyle) } } } if (this.valueElement === undefined) { if (jsc.isTextInput(this.targetElement)) { this.valueElement = this.targetElement } else { } } else if (this.valueElement === null) { } else { this.valueElement = jsc.node(this.valueElement) } if (this.alphaElement) { this.alphaElement = jsc.node(this.alphaElement) } if (this.previewElement === undefined) { this.previewElement = this.targetElement } else if (this.previewElement === null) { } else { this.previewElement = jsc.node(this.previewElement) } if (this.valueElement && jsc.isTextInput(this.valueElement)) { var valueElementOrigEvents = { onInput: this.valueElement.oninput }; this.valueElement.oninput = null; this.valueElement.addEventListener("keydown", onValueKeyDown, false); this.valueElement.addEventListener("change", onValueChange, false); this.valueElement.addEventListener("input", onValueInput, false); if (valueElementOrigEvents.onInput) { this.valueElement.addEventListener("input", valueElementOrigEvents.onInput, false) } this.valueElement.setAttribute("autocomplete", "off"); this.valueElement.setAttribute("autocorrect", "off"); this.valueElement.setAttribute("autocapitalize", "off"); this.valueElement.setAttribute("spellcheck", false) } if (this.alphaElement && jsc.isTextInput(this.alphaElement)) { this.alphaElement.addEventListener("keydown", onAlphaKeyDown, false); this.alphaElement.addEventListener("change", onAlphaChange, false); this.alphaElement.addEventListener("input", onAlphaInput, false); this.alphaElement.setAttribute("autocomplete", "off"); this.alphaElement.setAttribute("autocorrect", "off"); this.alphaElement.setAttribute("autocapitalize", "off"); this.alphaElement.setAttribute("spellcheck", false) } var initValue = "FFFFFF"; if (this.value !== undefined) { initValue = this.value } else if (this.valueElement && this.valueElement.value !== undefined) { initValue = this.valueElement.value } var initAlpha = undefined; if (this.alpha !== undefined) { initAlpha = "" + this.alpha } else if (this.alphaElement && this.alphaElement.value !== undefined) { initAlpha = this.alphaElement.value } this._currentFormat = null; if (["auto", "any"].indexOf(this.format.toLowerCase()) > -1) { var color = jsc.parseColorString(initValue); this._currentFormat = color ? color.format : "hex" } else { this._currentFormat = this.format.toLowerCase() } this.processValueInput(initValue); if (initAlpha !== undefined) { this.processAlphaInput(initAlpha) } if (this.random) { this.randomize.apply(this, Array.isArray(this.random) ? this.random : []) } } }; jsc.pub.className = "jscolor"; jsc.pub.activeClassName = "jscolor-active"; jsc.pub.looseJSON = true; jsc.pub.presets = {}; jsc.pub.presets["default"] = {}; jsc.pub.presets["light"] = { backgroundColor: "rgba(255,255,255,1)", controlBorderColor: "rgba(187,187,187,1)", buttonColor: "rgba(0,0,0,1)" }; jsc.pub.presets["dark"] = { backgroundColor: "rgba(51,51,51,1)", controlBorderColor: "rgba(153,153,153,1)", buttonColor: "rgba(240,240,240,1)" }; jsc.pub.presets["small"] = { width: 101, height: 101, padding: 10, sliderSize: 14, paletteCols: 8 }; jsc.pub.presets["medium"] = { width: 181, height: 101, padding: 12, sliderSize: 16, paletteCols: 10 }; jsc.pub.presets["large"] = { width: 271, height: 151, padding: 12, sliderSize: 24, paletteCols: 15 }; jsc.pub.presets["thin"] = { borderWidth: 1, controlBorderWidth: 1, pointerBorderWidth: 1 }; jsc.pub.presets["thick"] = { borderWidth: 2, controlBorderWidth: 2, pointerBorderWidth: 2 }; jsc.pub.sliderInnerSpace = 3; jsc.pub.chessboardSize = 8; jsc.pub.chessboardColor1 = "#666666"; jsc.pub.chessboardColor2 = "#999999"; jsc.pub.previewSeparator = ["rgba(255,255,255,.65)", "rgba(128,128,128,.65)"]; jsc.pub.init = function () { if (jsc.initialized) { return } window.document.addEventListener("mousedown", jsc.onDocumentMouseDown, false); window.document.addEventListener("keyup", jsc.onDocumentKeyUp, false); window.addEventListener("resize", jsc.onWindowResize, false); window.addEventListener("scroll", jsc.onWindowScroll, false); jsc.pub.install(); jsc.initialized = true; while (jsc.readyQueue.length) { var func = jsc.readyQueue.shift(); func() } }; jsc.pub.install = function (rootNode) { var success = true; try { jsc.installBySelector("[data-jscolor]", rootNode) } catch (e) { success = false; console.warn(e) } if (jsc.pub.lookupClass) { try { jsc.installBySelector("input." + jsc.pub.lookupClass + ", " + "button." + jsc.pub.lookupClass, rootNode) } catch (e) { } } return success }; jsc.pub.ready = function (func) { if (typeof func !== "function") { console.warn("Passed value is not a function"); return false } if (jsc.initialized) { func() } else { jsc.readyQueue.push(func) } return true }; jsc.pub.trigger = function (eventNames) { var triggerNow = function () { jsc.triggerGlobal(eventNames) }; if (jsc.initialized) { triggerNow() } else { jsc.pub.ready(triggerNow) } }; jsc.pub.hide = function () { if (jsc.picker && jsc.picker.owner) { jsc.picker.owner.hide() } }; jsc.pub.chessboard = function (color) { if (!color) { color = "rgba(0,0,0,0)" } var preview = jsc.genColorPreviewCanvas(color); return preview.canvas.toDataURL() }; jsc.pub.background = function (color) { var backgrounds = []; backgrounds.push(jsc.genColorPreviewGradient(color)); var preview = jsc.genColorPreviewCanvas(); backgrounds.push(["url('" + preview.canvas.toDataURL() + "')", "left top", "repeat"].join(" ")); return backgrounds.join(", ") }; jsc.pub.options = {}; jsc.pub.lookupClass = "jscolor"; jsc.pub.installByClassName = function () { console.error('jscolor.installByClassName() is DEPRECATED. Use data-jscolor="" attribute instead of a class name.' + jsc.docsRef); return false }; jsc.register(); return jsc.pub }(); if (typeof window.jscolor === "undefined") { window.jscolor = window.JSColor = jscolor } return jscolor }); diff --git a/dep/markdown-it.min.js b/dep/markdown-it.min.js deleted file mode 100644 index 943e1f9..0000000 --- a/dep/markdown-it.min.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * markdown-it 12.2.0 - * @licence MIT - * @source https://github.com/markdown-it/markdown-it - */ -!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):(e="undefined"!=typeof globalThis?globalThis:e||self).markdownit=r()}(this,(function(){"use strict";function e(e){if(e.__esModule)return e;var r=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})})),r}var r={Aacute:"\xc1",aacute:"\xe1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223e",acd:"\u223f",acE:"\u223e\u0333",Acirc:"\xc2",acirc:"\xe2",acute:"\xb4",Acy:"\u0410",acy:"\u0430",AElig:"\xc6",aelig:"\xe6",af:"\u2061",Afr:"\ud835\udd04",afr:"\ud835\udd1e",Agrave:"\xc0",agrave:"\xe0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03b1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2a3f",amp:"&",AMP:"&",andand:"\u2a55",And:"\u2a53",and:"\u2227",andd:"\u2a5c",andslope:"\u2a58",andv:"\u2a5a",ang:"\u2220",ange:"\u29a4",angle:"\u2220",angmsdaa:"\u29a8",angmsdab:"\u29a9",angmsdac:"\u29aa",angmsdad:"\u29ab",angmsdae:"\u29ac",angmsdaf:"\u29ad",angmsdag:"\u29ae",angmsdah:"\u29af",angmsd:"\u2221",angrt:"\u221f",angrtvb:"\u22be",angrtvbd:"\u299d",angsph:"\u2222",angst:"\xc5",angzarr:"\u237c",Aogon:"\u0104",aogon:"\u0105",Aopf:"\ud835\udd38",aopf:"\ud835\udd52",apacir:"\u2a6f",ap:"\u2248",apE:"\u2a70",ape:"\u224a",apid:"\u224b",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224a",Aring:"\xc5",aring:"\xe5",Ascr:"\ud835\udc9c",ascr:"\ud835\udcb6",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224d",Atilde:"\xc3",atilde:"\xe3",Auml:"\xc4",auml:"\xe4",awconint:"\u2233",awint:"\u2a11",backcong:"\u224c",backepsilon:"\u03f6",backprime:"\u2035",backsim:"\u223d",backsimeq:"\u22cd",Backslash:"\u2216",Barv:"\u2ae7",barvee:"\u22bd",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23b5",bbrktbrk:"\u23b6",bcong:"\u224c",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201e",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29b0",bepsi:"\u03f6",bernou:"\u212c",Bernoullis:"\u212c",Beta:"\u0392",beta:"\u03b2",beth:"\u2136",between:"\u226c",Bfr:"\ud835\udd05",bfr:"\ud835\udd1f",bigcap:"\u22c2",bigcirc:"\u25ef",bigcup:"\u22c3",bigodot:"\u2a00",bigoplus:"\u2a01",bigotimes:"\u2a02",bigsqcup:"\u2a06",bigstar:"\u2605",bigtriangledown:"\u25bd",bigtriangleup:"\u25b3",biguplus:"\u2a04",bigvee:"\u22c1",bigwedge:"\u22c0",bkarow:"\u290d",blacklozenge:"\u29eb",blacksquare:"\u25aa",blacktriangle:"\u25b4",blacktriangledown:"\u25be",blacktriangleleft:"\u25c2",blacktriangleright:"\u25b8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20e5",bnequiv:"\u2261\u20e5",bNot:"\u2aed",bnot:"\u2310",Bopf:"\ud835\udd39",bopf:"\ud835\udd53",bot:"\u22a5",bottom:"\u22a5",bowtie:"\u22c8",boxbox:"\u29c9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250c",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252c",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229f",boxplus:"\u229e",boxtimes:"\u22a0",boxul:"\u2518",boxuL:"\u255b",boxUl:"\u255c",boxUL:"\u255d",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255a",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253c",boxvH:"\u256a",boxVh:"\u256b",boxVH:"\u256c",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251c",boxvR:"\u255e",boxVr:"\u255f",boxVR:"\u2560",bprime:"\u2035",breve:"\u02d8",Breve:"\u02d8",brvbar:"\xa6",bscr:"\ud835\udcb7",Bscr:"\u212c",bsemi:"\u204f",bsim:"\u223d",bsime:"\u22cd",bsolb:"\u29c5",bsol:"\\",bsolhsub:"\u27c8",bull:"\u2022",bullet:"\u2022",bump:"\u224e",bumpE:"\u2aae",bumpe:"\u224f",Bumpeq:"\u224e",bumpeq:"\u224f",Cacute:"\u0106",cacute:"\u0107",capand:"\u2a44",capbrcup:"\u2a49",capcap:"\u2a4b",cap:"\u2229",Cap:"\u22d2",capcup:"\u2a47",capdot:"\u2a40",CapitalDifferentialD:"\u2145",caps:"\u2229\ufe00",caret:"\u2041",caron:"\u02c7",Cayleys:"\u212d",ccaps:"\u2a4d",Ccaron:"\u010c",ccaron:"\u010d",Ccedil:"\xc7",ccedil:"\xe7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2a4c",ccupssm:"\u2a50",Cdot:"\u010a",cdot:"\u010b",cedil:"\xb8",Cedilla:"\xb8",cemptyv:"\u29b2",cent:"\xa2",centerdot:"\xb7",CenterDot:"\xb7",cfr:"\ud835\udd20",Cfr:"\u212d",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03a7",chi:"\u03c7",circ:"\u02c6",circeq:"\u2257",circlearrowleft:"\u21ba",circlearrowright:"\u21bb",circledast:"\u229b",circledcirc:"\u229a",circleddash:"\u229d",CircleDot:"\u2299",circledR:"\xae",circledS:"\u24c8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25cb",cirE:"\u29c3",cire:"\u2257",cirfnint:"\u2a10",cirmid:"\u2aef",cirscir:"\u29c2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201d",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2a74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2a6d",Congruent:"\u2261",conint:"\u222e",Conint:"\u222f",ContourIntegral:"\u222e",copf:"\ud835\udd54",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xa9",COPY:"\xa9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21b5",cross:"\u2717",Cross:"\u2a2f",Cscr:"\ud835\udc9e",cscr:"\ud835\udcb8",csub:"\u2acf",csube:"\u2ad1",csup:"\u2ad0",csupe:"\u2ad2",ctdot:"\u22ef",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22de",cuesc:"\u22df",cularr:"\u21b6",cularrp:"\u293d",cupbrcap:"\u2a48",cupcap:"\u2a46",CupCap:"\u224d",cup:"\u222a",Cup:"\u22d3",cupcup:"\u2a4a",cupdot:"\u228d",cupor:"\u2a45",cups:"\u222a\ufe00",curarr:"\u21b7",curarrm:"\u293c",curlyeqprec:"\u22de",curlyeqsucc:"\u22df",curlyvee:"\u22ce",curlywedge:"\u22cf",curren:"\xa4",curvearrowleft:"\u21b6",curvearrowright:"\u21b7",cuvee:"\u22ce",cuwed:"\u22cf",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232d",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21a1",dArr:"\u21d3",dash:"\u2010",Dashv:"\u2ae4",dashv:"\u22a3",dbkarow:"\u290f",dblac:"\u02dd",Dcaron:"\u010e",dcaron:"\u010f",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21ca",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2a77",deg:"\xb0",Del:"\u2207",Delta:"\u0394",delta:"\u03b4",demptyv:"\u29b1",dfisht:"\u297f",Dfr:"\ud835\udd07",dfr:"\ud835\udd21",dHar:"\u2965",dharl:"\u21c3",dharr:"\u21c2",DiacriticalAcute:"\xb4",DiacriticalDot:"\u02d9",DiacriticalDoubleAcute:"\u02dd",DiacriticalGrave:"`",DiacriticalTilde:"\u02dc",diam:"\u22c4",diamond:"\u22c4",Diamond:"\u22c4",diamondsuit:"\u2666",diams:"\u2666",die:"\xa8",DifferentialD:"\u2146",digamma:"\u03dd",disin:"\u22f2",div:"\xf7",divide:"\xf7",divideontimes:"\u22c7",divonx:"\u22c7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231e",dlcrop:"\u230d",dollar:"$",Dopf:"\ud835\udd3b",dopf:"\ud835\udd55",Dot:"\xa8",dot:"\u02d9",DotDot:"\u20dc",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22a1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222f",DoubleDot:"\xa8",DoubleDownArrow:"\u21d3",DoubleLeftArrow:"\u21d0",DoubleLeftRightArrow:"\u21d4",DoubleLeftTee:"\u2ae4",DoubleLongLeftArrow:"\u27f8",DoubleLongLeftRightArrow:"\u27fa",DoubleLongRightArrow:"\u27f9",DoubleRightArrow:"\u21d2",DoubleRightTee:"\u22a8",DoubleUpArrow:"\u21d1",DoubleUpDownArrow:"\u21d5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21d3",DownArrowUpArrow:"\u21f5",DownBreve:"\u0311",downdownarrows:"\u21ca",downharpoonleft:"\u21c3",downharpoonright:"\u21c2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295e",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21bd",DownRightTeeVector:"\u295f",DownRightVectorBar:"\u2957",DownRightVector:"\u21c1",DownTeeArrow:"\u21a7",DownTee:"\u22a4",drbkarow:"\u2910",drcorn:"\u231f",drcrop:"\u230c",Dscr:"\ud835\udc9f",dscr:"\ud835\udcb9",DScy:"\u0405",dscy:"\u0455",dsol:"\u29f6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22f1",dtri:"\u25bf",dtrif:"\u25be",duarr:"\u21f5",duhar:"\u296f",dwangle:"\u29a6",DZcy:"\u040f",dzcy:"\u045f",dzigrarr:"\u27ff",Eacute:"\xc9",eacute:"\xe9",easter:"\u2a6e",Ecaron:"\u011a",ecaron:"\u011b",Ecirc:"\xca",ecirc:"\xea",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042d",ecy:"\u044d",eDDot:"\u2a77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\ud835\udd08",efr:"\ud835\udd22",eg:"\u2a9a",Egrave:"\xc8",egrave:"\xe8",egs:"\u2a96",egsdot:"\u2a98",el:"\u2a99",Element:"\u2208",elinters:"\u23e7",ell:"\u2113",els:"\u2a95",elsdot:"\u2a97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25fb",emptyv:"\u2205",EmptyVerySmallSquare:"\u25ab",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014a",eng:"\u014b",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\ud835\udd3c",eopf:"\ud835\udd56",epar:"\u22d5",eparsl:"\u29e3",eplus:"\u2a71",epsi:"\u03b5",Epsilon:"\u0395",epsilon:"\u03b5",epsiv:"\u03f5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2a96",eqslantless:"\u2a95",Equal:"\u2a75",equals:"=",EqualTilde:"\u2242",equest:"\u225f",Equilibrium:"\u21cc",equiv:"\u2261",equivDD:"\u2a78",eqvparsl:"\u29e5",erarr:"\u2971",erDot:"\u2253",escr:"\u212f",Escr:"\u2130",esdot:"\u2250",Esim:"\u2a73",esim:"\u2242",Eta:"\u0397",eta:"\u03b7",ETH:"\xd0",eth:"\xf0",Euml:"\xcb",euml:"\xeb",euro:"\u20ac",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\ufb03",fflig:"\ufb00",ffllig:"\ufb04",Ffr:"\ud835\udd09",ffr:"\ud835\udd23",filig:"\ufb01",FilledSmallSquare:"\u25fc",FilledVerySmallSquare:"\u25aa",fjlig:"fj",flat:"\u266d",fllig:"\ufb02",fltns:"\u25b1",fnof:"\u0192",Fopf:"\ud835\udd3d",fopf:"\ud835\udd57",forall:"\u2200",ForAll:"\u2200",fork:"\u22d4",forkv:"\u2ad9",Fouriertrf:"\u2131",fpartint:"\u2a0d",frac12:"\xbd",frac13:"\u2153",frac14:"\xbc",frac15:"\u2155",frac16:"\u2159",frac18:"\u215b",frac23:"\u2154",frac25:"\u2156",frac34:"\xbe",frac35:"\u2157",frac38:"\u215c",frac45:"\u2158",frac56:"\u215a",frac58:"\u215d",frac78:"\u215e",frasl:"\u2044",frown:"\u2322",fscr:"\ud835\udcbb",Fscr:"\u2131",gacute:"\u01f5",Gamma:"\u0393",gamma:"\u03b3",Gammad:"\u03dc",gammad:"\u03dd",gap:"\u2a86",Gbreve:"\u011e",gbreve:"\u011f",Gcedil:"\u0122",Gcirc:"\u011c",gcirc:"\u011d",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2a8c",gel:"\u22db",geq:"\u2265",geqq:"\u2267",geqslant:"\u2a7e",gescc:"\u2aa9",ges:"\u2a7e",gesdot:"\u2a80",gesdoto:"\u2a82",gesdotol:"\u2a84",gesl:"\u22db\ufe00",gesles:"\u2a94",Gfr:"\ud835\udd0a",gfr:"\ud835\udd24",gg:"\u226b",Gg:"\u22d9",ggg:"\u22d9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2aa5",gl:"\u2277",glE:"\u2a92",glj:"\u2aa4",gnap:"\u2a8a",gnapprox:"\u2a8a",gne:"\u2a88",gnE:"\u2269",gneq:"\u2a88",gneqq:"\u2269",gnsim:"\u22e7",Gopf:"\ud835\udd3e",gopf:"\ud835\udd58",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22db",GreaterFullEqual:"\u2267",GreaterGreater:"\u2aa2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2a7e",GreaterTilde:"\u2273",Gscr:"\ud835\udca2",gscr:"\u210a",gsim:"\u2273",gsime:"\u2a8e",gsiml:"\u2a90",gtcc:"\u2aa7",gtcir:"\u2a7a",gt:">",GT:">",Gt:"\u226b",gtdot:"\u22d7",gtlPar:"\u2995",gtquest:"\u2a7c",gtrapprox:"\u2a86",gtrarr:"\u2978",gtrdot:"\u22d7",gtreqless:"\u22db",gtreqqless:"\u2a8c",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\ufe00",gvnE:"\u2269\ufe00",Hacek:"\u02c7",hairsp:"\u200a",half:"\xbd",hamilt:"\u210b",HARDcy:"\u042a",hardcy:"\u044a",harrcir:"\u2948",harr:"\u2194",hArr:"\u21d4",harrw:"\u21ad",Hat:"^",hbar:"\u210f",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22b9",hfr:"\ud835\udd25",Hfr:"\u210c",HilbertSpace:"\u210b",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21ff",homtht:"\u223b",hookleftarrow:"\u21a9",hookrightarrow:"\u21aa",hopf:"\ud835\udd59",Hopf:"\u210d",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\ud835\udcbd",Hscr:"\u210b",hslash:"\u210f",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224e",HumpEqual:"\u224f",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xcd",iacute:"\xed",ic:"\u2063",Icirc:"\xce",icirc:"\xee",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xa1",iff:"\u21d4",ifr:"\ud835\udd26",Ifr:"\u2111",Igrave:"\xcc",igrave:"\xec",ii:"\u2148",iiiint:"\u2a0c",iiint:"\u222d",iinfin:"\u29dc",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012a",imacr:"\u012b",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22b7",imped:"\u01b5",Implies:"\u21d2",incare:"\u2105",in:"\u2208",infin:"\u221e",infintie:"\u29dd",inodot:"\u0131",intcal:"\u22ba",int:"\u222b",Int:"\u222c",integers:"\u2124",Integral:"\u222b",intercal:"\u22ba",Intersection:"\u22c2",intlarhk:"\u2a17",intprod:"\u2a3c",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012e",iogon:"\u012f",Iopf:"\ud835\udd40",iopf:"\ud835\udd5a",Iota:"\u0399",iota:"\u03b9",iprod:"\u2a3c",iquest:"\xbf",iscr:"\ud835\udcbe",Iscr:"\u2110",isin:"\u2208",isindot:"\u22f5",isinE:"\u22f9",isins:"\u22f4",isinsv:"\u22f3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xcf",iuml:"\xef",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\ud835\udd0d",jfr:"\ud835\udd27",jmath:"\u0237",Jopf:"\ud835\udd41",jopf:"\ud835\udd5b",Jscr:"\ud835\udca5",jscr:"\ud835\udcbf",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039a",kappa:"\u03ba",kappav:"\u03f0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041a",kcy:"\u043a",Kfr:"\ud835\udd0e",kfr:"\ud835\udd28",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040c",kjcy:"\u045c",Kopf:"\ud835\udd42",kopf:"\ud835\udd5c",Kscr:"\ud835\udca6",kscr:"\ud835\udcc0",lAarr:"\u21da",Lacute:"\u0139",lacute:"\u013a",laemptyv:"\u29b4",lagran:"\u2112",Lambda:"\u039b",lambda:"\u03bb",lang:"\u27e8",Lang:"\u27ea",langd:"\u2991",langle:"\u27e8",lap:"\u2a85",Laplacetrf:"\u2112",laquo:"\xab",larrb:"\u21e4",larrbfs:"\u291f",larr:"\u2190",Larr:"\u219e",lArr:"\u21d0",larrfs:"\u291d",larrhk:"\u21a9",larrlp:"\u21ab",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21a2",latail:"\u2919",lAtail:"\u291b",lat:"\u2aab",late:"\u2aad",lates:"\u2aad\ufe00",lbarr:"\u290c",lBarr:"\u290e",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298b",lbrksld:"\u298f",lbrkslu:"\u298d",Lcaron:"\u013d",lcaron:"\u013e",Lcedil:"\u013b",lcedil:"\u013c",lceil:"\u2308",lcub:"{",Lcy:"\u041b",lcy:"\u043b",ldca:"\u2936",ldquo:"\u201c",ldquor:"\u201e",ldrdhar:"\u2967",ldrushar:"\u294b",ldsh:"\u21b2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27e8",LeftArrowBar:"\u21e4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21d0",LeftArrowRightArrow:"\u21c6",leftarrowtail:"\u21a2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27e6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21c3",LeftFloor:"\u230a",leftharpoondown:"\u21bd",leftharpoonup:"\u21bc",leftleftarrows:"\u21c7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21d4",leftrightarrows:"\u21c6",leftrightharpoons:"\u21cb",leftrightsquigarrow:"\u21ad",LeftRightVector:"\u294e",LeftTeeArrow:"\u21a4",LeftTee:"\u22a3",LeftTeeVector:"\u295a",leftthreetimes:"\u22cb",LeftTriangleBar:"\u29cf",LeftTriangle:"\u22b2",LeftTriangleEqual:"\u22b4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21bf",LeftVectorBar:"\u2952",LeftVector:"\u21bc",lEg:"\u2a8b",leg:"\u22da",leq:"\u2264",leqq:"\u2266",leqslant:"\u2a7d",lescc:"\u2aa8",les:"\u2a7d",lesdot:"\u2a7f",lesdoto:"\u2a81",lesdotor:"\u2a83",lesg:"\u22da\ufe00",lesges:"\u2a93",lessapprox:"\u2a85",lessdot:"\u22d6",lesseqgtr:"\u22da",lesseqqgtr:"\u2a8b",LessEqualGreater:"\u22da",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2aa1",lesssim:"\u2272",LessSlantEqual:"\u2a7d",LessTilde:"\u2272",lfisht:"\u297c",lfloor:"\u230a",Lfr:"\ud835\udd0f",lfr:"\ud835\udd29",lg:"\u2276",lgE:"\u2a91",lHar:"\u2962",lhard:"\u21bd",lharu:"\u21bc",lharul:"\u296a",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21c7",ll:"\u226a",Ll:"\u22d8",llcorner:"\u231e",Lleftarrow:"\u21da",llhard:"\u296b",lltri:"\u25fa",Lmidot:"\u013f",lmidot:"\u0140",lmoustache:"\u23b0",lmoust:"\u23b0",lnap:"\u2a89",lnapprox:"\u2a89",lne:"\u2a87",lnE:"\u2268",lneq:"\u2a87",lneqq:"\u2268",lnsim:"\u22e6",loang:"\u27ec",loarr:"\u21fd",lobrk:"\u27e6",longleftarrow:"\u27f5",LongLeftArrow:"\u27f5",Longleftarrow:"\u27f8",longleftrightarrow:"\u27f7",LongLeftRightArrow:"\u27f7",Longleftrightarrow:"\u27fa",longmapsto:"\u27fc",longrightarrow:"\u27f6",LongRightArrow:"\u27f6",Longrightarrow:"\u27f9",looparrowleft:"\u21ab",looparrowright:"\u21ac",lopar:"\u2985",Lopf:"\ud835\udd43",lopf:"\ud835\udd5d",loplus:"\u2a2d",lotimes:"\u2a34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25ca",lozenge:"\u25ca",lozf:"\u29eb",lpar:"(",lparlt:"\u2993",lrarr:"\u21c6",lrcorner:"\u231f",lrhar:"\u21cb",lrhard:"\u296d",lrm:"\u200e",lrtri:"\u22bf",lsaquo:"\u2039",lscr:"\ud835\udcc1",Lscr:"\u2112",lsh:"\u21b0",Lsh:"\u21b0",lsim:"\u2272",lsime:"\u2a8d",lsimg:"\u2a8f",lsqb:"[",lsquo:"\u2018",lsquor:"\u201a",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2aa6",ltcir:"\u2a79",lt:"<",LT:"<",Lt:"\u226a",ltdot:"\u22d6",lthree:"\u22cb",ltimes:"\u22c9",ltlarr:"\u2976",ltquest:"\u2a7b",ltri:"\u25c3",ltrie:"\u22b4",ltrif:"\u25c2",ltrPar:"\u2996",lurdshar:"\u294a",luruhar:"\u2966",lvertneqq:"\u2268\ufe00",lvnE:"\u2268\ufe00",macr:"\xaf",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21a6",mapsto:"\u21a6",mapstodown:"\u21a7",mapstoleft:"\u21a4",mapstoup:"\u21a5",marker:"\u25ae",mcomma:"\u2a29",Mcy:"\u041c",mcy:"\u043c",mdash:"\u2014",mDDot:"\u223a",measuredangle:"\u2221",MediumSpace:"\u205f",Mellintrf:"\u2133",Mfr:"\ud835\udd10",mfr:"\ud835\udd2a",mho:"\u2127",micro:"\xb5",midast:"*",midcir:"\u2af0",mid:"\u2223",middot:"\xb7",minusb:"\u229f",minus:"\u2212",minusd:"\u2238",minusdu:"\u2a2a",MinusPlus:"\u2213",mlcp:"\u2adb",mldr:"\u2026",mnplus:"\u2213",models:"\u22a7",Mopf:"\ud835\udd44",mopf:"\ud835\udd5e",mp:"\u2213",mscr:"\ud835\udcc2",Mscr:"\u2133",mstpos:"\u223e",Mu:"\u039c",mu:"\u03bc",multimap:"\u22b8",mumap:"\u22b8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20d2",nap:"\u2249",napE:"\u2a70\u0338",napid:"\u224b\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266e",naturals:"\u2115",natur:"\u266e",nbsp:"\xa0",nbump:"\u224e\u0338",nbumpe:"\u224f\u0338",ncap:"\u2a43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2a6d\u0338",ncup:"\u2a42",Ncy:"\u041d",ncy:"\u043d",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21d7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200b",NegativeThickSpace:"\u200b",NegativeThinSpace:"\u200b",NegativeVeryThinSpace:"\u200b",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226b",NestedLessLess:"\u226a",NewLine:"\n",nexist:"\u2204",nexists:"\u2204",Nfr:"\ud835\udd11",nfr:"\ud835\udd2b",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2a7e\u0338",nges:"\u2a7e\u0338",nGg:"\u22d9\u0338",ngsim:"\u2275",nGt:"\u226b\u20d2",ngt:"\u226f",ngtr:"\u226f",nGtv:"\u226b\u0338",nharr:"\u21ae",nhArr:"\u21ce",nhpar:"\u2af2",ni:"\u220b",nis:"\u22fc",nisd:"\u22fa",niv:"\u220b",NJcy:"\u040a",njcy:"\u045a",nlarr:"\u219a",nlArr:"\u21cd",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219a",nLeftarrow:"\u21cd",nleftrightarrow:"\u21ae",nLeftrightarrow:"\u21ce",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2a7d\u0338",nles:"\u2a7d\u0338",nless:"\u226e",nLl:"\u22d8\u0338",nlsim:"\u2274",nLt:"\u226a\u20d2",nlt:"\u226e",nltri:"\u22ea",nltrie:"\u22ec",nLtv:"\u226a\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xa0",nopf:"\ud835\udd5f",Nopf:"\u2115",Not:"\u2aec",not:"\xac",NotCongruent:"\u2262",NotCupCap:"\u226d",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226f",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226b\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2a7e\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224e\u0338",NotHumpEqual:"\u224f\u0338",notin:"\u2209",notindot:"\u22f5\u0338",notinE:"\u22f9\u0338",notinva:"\u2209",notinvb:"\u22f7",notinvc:"\u22f6",NotLeftTriangleBar:"\u29cf\u0338",NotLeftTriangle:"\u22ea",NotLeftTriangleEqual:"\u22ec",NotLess:"\u226e",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226a\u0338",NotLessSlantEqual:"\u2a7d\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2aa2\u0338",NotNestedLessLess:"\u2aa1\u0338",notni:"\u220c",notniva:"\u220c",notnivb:"\u22fe",notnivc:"\u22fd",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2aaf\u0338",NotPrecedesSlantEqual:"\u22e0",NotReverseElement:"\u220c",NotRightTriangleBar:"\u29d0\u0338",NotRightTriangle:"\u22eb",NotRightTriangleEqual:"\u22ed",NotSquareSubset:"\u228f\u0338",NotSquareSubsetEqual:"\u22e2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22e3",NotSubset:"\u2282\u20d2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2ab0\u0338",NotSucceedsSlantEqual:"\u22e1",NotSucceedsTilde:"\u227f\u0338",NotSuperset:"\u2283\u20d2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2afd\u20e5",npart:"\u2202\u0338",npolint:"\u2a14",npr:"\u2280",nprcue:"\u22e0",nprec:"\u2280",npreceq:"\u2aaf\u0338",npre:"\u2aaf\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219b",nrArr:"\u21cf",nrarrw:"\u219d\u0338",nrightarrow:"\u219b",nRightarrow:"\u21cf",nrtri:"\u22eb",nrtrie:"\u22ed",nsc:"\u2281",nsccue:"\u22e1",nsce:"\u2ab0\u0338",Nscr:"\ud835\udca9",nscr:"\ud835\udcc3",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22e2",nsqsupe:"\u22e3",nsub:"\u2284",nsubE:"\u2ac5\u0338",nsube:"\u2288",nsubset:"\u2282\u20d2",nsubseteq:"\u2288",nsubseteqq:"\u2ac5\u0338",nsucc:"\u2281",nsucceq:"\u2ab0\u0338",nsup:"\u2285",nsupE:"\u2ac6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20d2",nsupseteq:"\u2289",nsupseteqq:"\u2ac6\u0338",ntgl:"\u2279",Ntilde:"\xd1",ntilde:"\xf1",ntlg:"\u2278",ntriangleleft:"\u22ea",ntrianglelefteq:"\u22ec",ntriangleright:"\u22eb",ntrianglerighteq:"\u22ed",Nu:"\u039d",nu:"\u03bd",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224d\u20d2",nvdash:"\u22ac",nvDash:"\u22ad",nVdash:"\u22ae",nVDash:"\u22af",nvge:"\u2265\u20d2",nvgt:">\u20d2",nvHarr:"\u2904",nvinfin:"\u29de",nvlArr:"\u2902",nvle:"\u2264\u20d2",nvlt:"<\u20d2",nvltrie:"\u22b4\u20d2",nvrArr:"\u2903",nvrtrie:"\u22b5\u20d2",nvsim:"\u223c\u20d2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21d6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xd3",oacute:"\xf3",oast:"\u229b",Ocirc:"\xd4",ocirc:"\xf4",ocir:"\u229a",Ocy:"\u041e",ocy:"\u043e",odash:"\u229d",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2a38",odot:"\u2299",odsold:"\u29bc",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29bf",Ofr:"\ud835\udd12",ofr:"\ud835\udd2c",ogon:"\u02db",Ograve:"\xd2",ograve:"\xf2",ogt:"\u29c1",ohbar:"\u29b5",ohm:"\u03a9",oint:"\u222e",olarr:"\u21ba",olcir:"\u29be",olcross:"\u29bb",oline:"\u203e",olt:"\u29c0",Omacr:"\u014c",omacr:"\u014d",Omega:"\u03a9",omega:"\u03c9",Omicron:"\u039f",omicron:"\u03bf",omid:"\u29b6",ominus:"\u2296",Oopf:"\ud835\udd46",oopf:"\ud835\udd60",opar:"\u29b7",OpenCurlyDoubleQuote:"\u201c",OpenCurlyQuote:"\u2018",operp:"\u29b9",oplus:"\u2295",orarr:"\u21bb",Or:"\u2a54",or:"\u2228",ord:"\u2a5d",order:"\u2134",orderof:"\u2134",ordf:"\xaa",ordm:"\xba",origof:"\u22b6",oror:"\u2a56",orslope:"\u2a57",orv:"\u2a5b",oS:"\u24c8",Oscr:"\ud835\udcaa",oscr:"\u2134",Oslash:"\xd8",oslash:"\xf8",osol:"\u2298",Otilde:"\xd5",otilde:"\xf5",otimesas:"\u2a36",Otimes:"\u2a37",otimes:"\u2297",Ouml:"\xd6",ouml:"\xf6",ovbar:"\u233d",OverBar:"\u203e",OverBrace:"\u23de",OverBracket:"\u23b4",OverParenthesis:"\u23dc",para:"\xb6",parallel:"\u2225",par:"\u2225",parsim:"\u2af3",parsl:"\u2afd",part:"\u2202",PartialD:"\u2202",Pcy:"\u041f",pcy:"\u043f",percnt:"%",period:".",permil:"\u2030",perp:"\u22a5",pertenk:"\u2031",Pfr:"\ud835\udd13",pfr:"\ud835\udd2d",Phi:"\u03a6",phi:"\u03c6",phiv:"\u03d5",phmmat:"\u2133",phone:"\u260e",Pi:"\u03a0",pi:"\u03c0",pitchfork:"\u22d4",piv:"\u03d6",planck:"\u210f",planckh:"\u210e",plankv:"\u210f",plusacir:"\u2a23",plusb:"\u229e",pluscir:"\u2a22",plus:"+",plusdo:"\u2214",plusdu:"\u2a25",pluse:"\u2a72",PlusMinus:"\xb1",plusmn:"\xb1",plussim:"\u2a26",plustwo:"\u2a27",pm:"\xb1",Poincareplane:"\u210c",pointint:"\u2a15",popf:"\ud835\udd61",Popf:"\u2119",pound:"\xa3",prap:"\u2ab7",Pr:"\u2abb",pr:"\u227a",prcue:"\u227c",precapprox:"\u2ab7",prec:"\u227a",preccurlyeq:"\u227c",Precedes:"\u227a",PrecedesEqual:"\u2aaf",PrecedesSlantEqual:"\u227c",PrecedesTilde:"\u227e",preceq:"\u2aaf",precnapprox:"\u2ab9",precneqq:"\u2ab5",precnsim:"\u22e8",pre:"\u2aaf",prE:"\u2ab3",precsim:"\u227e",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2ab9",prnE:"\u2ab5",prnsim:"\u22e8",prod:"\u220f",Product:"\u220f",profalar:"\u232e",profline:"\u2312",profsurf:"\u2313",prop:"\u221d",Proportional:"\u221d",Proportion:"\u2237",propto:"\u221d",prsim:"\u227e",prurel:"\u22b0",Pscr:"\ud835\udcab",pscr:"\ud835\udcc5",Psi:"\u03a8",psi:"\u03c8",puncsp:"\u2008",Qfr:"\ud835\udd14",qfr:"\ud835\udd2e",qint:"\u2a0c",qopf:"\ud835\udd62",Qopf:"\u211a",qprime:"\u2057",Qscr:"\ud835\udcac",qscr:"\ud835\udcc6",quaternions:"\u210d",quatint:"\u2a16",quest:"?",questeq:"\u225f",quot:'"',QUOT:'"',rAarr:"\u21db",race:"\u223d\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221a",raemptyv:"\u29b3",rang:"\u27e9",Rang:"\u27eb",rangd:"\u2992",range:"\u29a5",rangle:"\u27e9",raquo:"\xbb",rarrap:"\u2975",rarrb:"\u21e5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21a0",rArr:"\u21d2",rarrfs:"\u291e",rarrhk:"\u21aa",rarrlp:"\u21ac",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21a3",rarrw:"\u219d",ratail:"\u291a",rAtail:"\u291c",ratio:"\u2236",rationals:"\u211a",rbarr:"\u290d",rBarr:"\u290f",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298c",rbrksld:"\u298e",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201d",rdquor:"\u201d",rdsh:"\u21b3",real:"\u211c",realine:"\u211b",realpart:"\u211c",reals:"\u211d",Re:"\u211c",rect:"\u25ad",reg:"\xae",REG:"\xae",ReverseElement:"\u220b",ReverseEquilibrium:"\u21cb",ReverseUpEquilibrium:"\u296f",rfisht:"\u297d",rfloor:"\u230b",rfr:"\ud835\udd2f",Rfr:"\u211c",rHar:"\u2964",rhard:"\u21c1",rharu:"\u21c0",rharul:"\u296c",Rho:"\u03a1",rho:"\u03c1",rhov:"\u03f1",RightAngleBracket:"\u27e9",RightArrowBar:"\u21e5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21d2",RightArrowLeftArrow:"\u21c4",rightarrowtail:"\u21a3",RightCeiling:"\u2309",RightDoubleBracket:"\u27e7",RightDownTeeVector:"\u295d",RightDownVectorBar:"\u2955",RightDownVector:"\u21c2",RightFloor:"\u230b",rightharpoondown:"\u21c1",rightharpoonup:"\u21c0",rightleftarrows:"\u21c4",rightleftharpoons:"\u21cc",rightrightarrows:"\u21c9",rightsquigarrow:"\u219d",RightTeeArrow:"\u21a6",RightTee:"\u22a2",RightTeeVector:"\u295b",rightthreetimes:"\u22cc",RightTriangleBar:"\u29d0",RightTriangle:"\u22b3",RightTriangleEqual:"\u22b5",RightUpDownVector:"\u294f",RightUpTeeVector:"\u295c",RightUpVectorBar:"\u2954",RightUpVector:"\u21be",RightVectorBar:"\u2953",RightVector:"\u21c0",ring:"\u02da",risingdotseq:"\u2253",rlarr:"\u21c4",rlhar:"\u21cc",rlm:"\u200f",rmoustache:"\u23b1",rmoust:"\u23b1",rnmid:"\u2aee",roang:"\u27ed",roarr:"\u21fe",robrk:"\u27e7",ropar:"\u2986",ropf:"\ud835\udd63",Ropf:"\u211d",roplus:"\u2a2e",rotimes:"\u2a35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2a12",rrarr:"\u21c9",Rrightarrow:"\u21db",rsaquo:"\u203a",rscr:"\ud835\udcc7",Rscr:"\u211b",rsh:"\u21b1",Rsh:"\u21b1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22cc",rtimes:"\u22ca",rtri:"\u25b9",rtrie:"\u22b5",rtrif:"\u25b8",rtriltri:"\u29ce",RuleDelayed:"\u29f4",ruluhar:"\u2968",rx:"\u211e",Sacute:"\u015a",sacute:"\u015b",sbquo:"\u201a",scap:"\u2ab8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2abc",sc:"\u227b",sccue:"\u227d",sce:"\u2ab0",scE:"\u2ab4",Scedil:"\u015e",scedil:"\u015f",Scirc:"\u015c",scirc:"\u015d",scnap:"\u2aba",scnE:"\u2ab6",scnsim:"\u22e9",scpolint:"\u2a13",scsim:"\u227f",Scy:"\u0421",scy:"\u0441",sdotb:"\u22a1",sdot:"\u22c5",sdote:"\u2a66",searhk:"\u2925",searr:"\u2198",seArr:"\u21d8",searrow:"\u2198",sect:"\xa7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\ud835\udd16",sfr:"\ud835\udd30",sfrown:"\u2322",sharp:"\u266f",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xad",Sigma:"\u03a3",sigma:"\u03c3",sigmaf:"\u03c2",sigmav:"\u03c2",sim:"\u223c",simdot:"\u2a6a",sime:"\u2243",simeq:"\u2243",simg:"\u2a9e",simgE:"\u2aa0",siml:"\u2a9d",simlE:"\u2a9f",simne:"\u2246",simplus:"\u2a24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2a33",smeparsl:"\u29e4",smid:"\u2223",smile:"\u2323",smt:"\u2aaa",smte:"\u2aac",smtes:"\u2aac\ufe00",SOFTcy:"\u042c",softcy:"\u044c",solbar:"\u233f",solb:"\u29c4",sol:"/",Sopf:"\ud835\udd4a",sopf:"\ud835\udd64",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\ufe00",sqcup:"\u2294",sqcups:"\u2294\ufe00",Sqrt:"\u221a",sqsub:"\u228f",sqsube:"\u2291",sqsubset:"\u228f",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25a1",Square:"\u25a1",SquareIntersection:"\u2293",SquareSubset:"\u228f",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25aa",squ:"\u25a1",squf:"\u25aa",srarr:"\u2192",Sscr:"\ud835\udcae",sscr:"\ud835\udcc8",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22c6",Star:"\u22c6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03f5",straightphi:"\u03d5",strns:"\xaf",sub:"\u2282",Sub:"\u22d0",subdot:"\u2abd",subE:"\u2ac5",sube:"\u2286",subedot:"\u2ac3",submult:"\u2ac1",subnE:"\u2acb",subne:"\u228a",subplus:"\u2abf",subrarr:"\u2979",subset:"\u2282",Subset:"\u22d0",subseteq:"\u2286",subseteqq:"\u2ac5",SubsetEqual:"\u2286",subsetneq:"\u228a",subsetneqq:"\u2acb",subsim:"\u2ac7",subsub:"\u2ad5",subsup:"\u2ad3",succapprox:"\u2ab8",succ:"\u227b",succcurlyeq:"\u227d",Succeeds:"\u227b",SucceedsEqual:"\u2ab0",SucceedsSlantEqual:"\u227d",SucceedsTilde:"\u227f",succeq:"\u2ab0",succnapprox:"\u2aba",succneqq:"\u2ab6",succnsim:"\u22e9",succsim:"\u227f",SuchThat:"\u220b",sum:"\u2211",Sum:"\u2211",sung:"\u266a",sup1:"\xb9",sup2:"\xb2",sup3:"\xb3",sup:"\u2283",Sup:"\u22d1",supdot:"\u2abe",supdsub:"\u2ad8",supE:"\u2ac6",supe:"\u2287",supedot:"\u2ac4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27c9",suphsub:"\u2ad7",suplarr:"\u297b",supmult:"\u2ac2",supnE:"\u2acc",supne:"\u228b",supplus:"\u2ac0",supset:"\u2283",Supset:"\u22d1",supseteq:"\u2287",supseteqq:"\u2ac6",supsetneq:"\u228b",supsetneqq:"\u2acc",supsim:"\u2ac8",supsub:"\u2ad4",supsup:"\u2ad6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21d9",swarrow:"\u2199",swnwar:"\u292a",szlig:"\xdf",Tab:"\t",target:"\u2316",Tau:"\u03a4",tau:"\u03c4",tbrk:"\u23b4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20db",telrec:"\u2315",Tfr:"\ud835\udd17",tfr:"\ud835\udd31",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03b8",thetasym:"\u03d1",thetav:"\u03d1",thickapprox:"\u2248",thicksim:"\u223c",ThickSpace:"\u205f\u200a",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223c",THORN:"\xde",thorn:"\xfe",tilde:"\u02dc",Tilde:"\u223c",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2a31",timesb:"\u22a0",times:"\xd7",timesd:"\u2a30",tint:"\u222d",toea:"\u2928",topbot:"\u2336",topcir:"\u2af1",top:"\u22a4",Topf:"\ud835\udd4b",topf:"\ud835\udd65",topfork:"\u2ada",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25b5",triangledown:"\u25bf",triangleleft:"\u25c3",trianglelefteq:"\u22b4",triangleq:"\u225c",triangleright:"\u25b9",trianglerighteq:"\u22b5",tridot:"\u25ec",trie:"\u225c",triminus:"\u2a3a",TripleDot:"\u20db",triplus:"\u2a39",trisb:"\u29cd",tritime:"\u2a3b",trpezium:"\u23e2",Tscr:"\ud835\udcaf",tscr:"\ud835\udcc9",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040b",tshcy:"\u045b",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226c",twoheadleftarrow:"\u219e",twoheadrightarrow:"\u21a0",Uacute:"\xda",uacute:"\xfa",uarr:"\u2191",Uarr:"\u219f",uArr:"\u21d1",Uarrocir:"\u2949",Ubrcy:"\u040e",ubrcy:"\u045e",Ubreve:"\u016c",ubreve:"\u016d",Ucirc:"\xdb",ucirc:"\xfb",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21c5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296e",ufisht:"\u297e",Ufr:"\ud835\udd18",ufr:"\ud835\udd32",Ugrave:"\xd9",ugrave:"\xf9",uHar:"\u2963",uharl:"\u21bf",uharr:"\u21be",uhblk:"\u2580",ulcorn:"\u231c",ulcorner:"\u231c",ulcrop:"\u230f",ultri:"\u25f8",Umacr:"\u016a",umacr:"\u016b",uml:"\xa8",UnderBar:"_",UnderBrace:"\u23df",UnderBracket:"\u23b5",UnderParenthesis:"\u23dd",Union:"\u22c3",UnionPlus:"\u228e",Uogon:"\u0172",uogon:"\u0173",Uopf:"\ud835\udd4c",uopf:"\ud835\udd66",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21d1",UpArrowDownArrow:"\u21c5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21d5",UpEquilibrium:"\u296e",upharpoonleft:"\u21bf",upharpoonright:"\u21be",uplus:"\u228e",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03c5",Upsi:"\u03d2",upsih:"\u03d2",Upsilon:"\u03a5",upsilon:"\u03c5",UpTeeArrow:"\u21a5",UpTee:"\u22a5",upuparrows:"\u21c8",urcorn:"\u231d",urcorner:"\u231d",urcrop:"\u230e",Uring:"\u016e",uring:"\u016f",urtri:"\u25f9",Uscr:"\ud835\udcb0",uscr:"\ud835\udcca",utdot:"\u22f0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25b5",utrif:"\u25b4",uuarr:"\u21c8",Uuml:"\xdc",uuml:"\xfc",uwangle:"\u29a7",vangrt:"\u299c",varepsilon:"\u03f5",varkappa:"\u03f0",varnothing:"\u2205",varphi:"\u03d5",varpi:"\u03d6",varpropto:"\u221d",varr:"\u2195",vArr:"\u21d5",varrho:"\u03f1",varsigma:"\u03c2",varsubsetneq:"\u228a\ufe00",varsubsetneqq:"\u2acb\ufe00",varsupsetneq:"\u228b\ufe00",varsupsetneqq:"\u2acc\ufe00",vartheta:"\u03d1",vartriangleleft:"\u22b2",vartriangleright:"\u22b3",vBar:"\u2ae8",Vbar:"\u2aeb",vBarv:"\u2ae9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22a2",vDash:"\u22a8",Vdash:"\u22a9",VDash:"\u22ab",Vdashl:"\u2ae6",veebar:"\u22bb",vee:"\u2228",Vee:"\u22c1",veeeq:"\u225a",vellip:"\u22ee",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200a",Vfr:"\ud835\udd19",vfr:"\ud835\udd33",vltri:"\u22b2",vnsub:"\u2282\u20d2",vnsup:"\u2283\u20d2",Vopf:"\ud835\udd4d",vopf:"\ud835\udd67",vprop:"\u221d",vrtri:"\u22b3",Vscr:"\ud835\udcb1",vscr:"\ud835\udccb",vsubnE:"\u2acb\ufe00",vsubne:"\u228a\ufe00",vsupnE:"\u2acc\ufe00",vsupne:"\u228b\ufe00",Vvdash:"\u22aa",vzigzag:"\u299a",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2a5f",wedge:"\u2227",Wedge:"\u22c0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\ud835\udd1a",wfr:"\ud835\udd34",Wopf:"\ud835\udd4e",wopf:"\ud835\udd68",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\ud835\udcb2",wscr:"\ud835\udccc",xcap:"\u22c2",xcirc:"\u25ef",xcup:"\u22c3",xdtri:"\u25bd",Xfr:"\ud835\udd1b",xfr:"\ud835\udd35",xharr:"\u27f7",xhArr:"\u27fa",Xi:"\u039e",xi:"\u03be",xlarr:"\u27f5",xlArr:"\u27f8",xmap:"\u27fc",xnis:"\u22fb",xodot:"\u2a00",Xopf:"\ud835\udd4f",xopf:"\ud835\udd69",xoplus:"\u2a01",xotime:"\u2a02",xrarr:"\u27f6",xrArr:"\u27f9",Xscr:"\ud835\udcb3",xscr:"\ud835\udccd",xsqcup:"\u2a06",xuplus:"\u2a04",xutri:"\u25b3",xvee:"\u22c1",xwedge:"\u22c0",Yacute:"\xdd",yacute:"\xfd",YAcy:"\u042f",yacy:"\u044f",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042b",ycy:"\u044b",yen:"\xa5",Yfr:"\ud835\udd1c",yfr:"\ud835\udd36",YIcy:"\u0407",yicy:"\u0457",Yopf:"\ud835\udd50",yopf:"\ud835\udd6a",Yscr:"\ud835\udcb4",yscr:"\ud835\udcce",YUcy:"\u042e",yucy:"\u044e",yuml:"\xff",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017a",Zcaron:"\u017d",zcaron:"\u017e",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017b",zdot:"\u017c",zeetrf:"\u2128",ZeroWidthSpace:"\u200b",Zeta:"\u0396",zeta:"\u03b6",zfr:"\ud835\udd37",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21dd",zopf:"\ud835\udd6b",Zopf:"\u2124",Zscr:"\ud835\udcb5",zscr:"\ud835\udccf",zwj:"\u200d",zwnj:"\u200c"},t=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,n={};function s(e,r,t){var o,i,a,c,l,u="";for("string"!=typeof r&&(t=r,r=s.defaultChars),void 0===t&&(t=!0),l=function(e){var r,t,s=n[e];if(s)return s;for(s=n[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),/^[0-9a-z]$/i.test(t)?s.push(t):s.push("%"+("0"+r.toString(16).toUpperCase()).slice(-2));for(r=0;r=55296&&a<=57343){if(a>=55296&&a<=56319&&o+1=56320&&c<=57343){u+=encodeURIComponent(e[o]+e[o+1]),o++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[o]);return u}s.defaultChars=";/?:@&=+$,-_.!~*'()#",s.componentChars="-_.!~*'()";var o=s,i={};function a(e,r){var t;return"string"!=typeof r&&(r=a.defaultChars),t=function(e){var r,t,n=i[e];if(n)return n;for(n=i[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),n.push(t);for(r=0;r=55296&&c<=57343?"\ufffd\ufffd\ufffd":String.fromCharCode(c),r+=6):240==(248&s)&&r+91114111?l+="\ufffd\ufffd\ufffd\ufffd":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),r+=9):l+="\ufffd";return l}))}a.defaultChars=";/?:@&=+$,#",a.componentChars="";var c=a;function l(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var u=/^([a-z0-9.+-]+:)/i,p=/:[0-9]*$/,h=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,f=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),d=["'"].concat(f),m=["%","/","?",";","#"].concat(d),g=["/","?","#"],_=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,k={javascript:!0,"javascript:":!0},v={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};l.prototype.parse=function(e,r){var t,n,s,o,i,a=e;if(a=a.trim(),!r&&1===e.split("#").length){var c=h.exec(a);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}var l=u.exec(a);if(l&&(s=(l=l[0]).toLowerCase(),this.protocol=l,a=a.substr(l.length)),(r||l||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(i="//"===a.substr(0,2))||l&&k[l]||(a=a.substr(2),this.slashes=!0)),!k[l]&&(i||l&&!v[l])){var p,f,d=-1;for(t=0;t127?D+="x":D+=x[w];if(!D.match(_)){var q=A.slice(0,t),S=A.slice(t+1),F=x.match(b);F&&(q.push(F[1]),S.unshift(F[2])),S.length&&(a=S.join(".")+a),this.hostname=q.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var L=a.indexOf("#");-1!==L&&(this.hash=a.substr(L),a=a.slice(0,L));var z=a.indexOf("?");return-1!==z&&(this.search=a.substr(z),a=a.slice(0,z)),a&&(this.pathname=a),v[s]&&this.hostname&&!this.pathname&&(this.pathname=""),this},l.prototype.parseHost=function(e){var r=p.exec(e);r&&(":"!==(r=r[0])&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)};var C={encode:o,decode:c,format:function(e){var r="";return r+=e.protocol||"",r+=e.slashes?"//":"",r+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?r+="["+e.hostname+"]":r+=e.hostname||"",r+=e.port?":"+e.port:"",r+=e.pathname||"",r+=e.search||"",r+=e.hash||""},parse:function(e,r){if(e&&e instanceof l)return e;var t=new l;return t.parse(e,r),t}},y=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,A=/[\0-\x1F\x7F-\x9F]/,x=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,D={Any:y,Cc:A,Cf:/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,P:t,Z:x},w=function(e,r,t){return e(t={path:r,exports:{},require:function(e,r){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==r&&t.path)}},t.exports),t.exports}((function(e,n){var s=Object.prototype.hasOwnProperty;function o(e,r){return s.call(e,r)}function i(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function a(e){if(e>65535){var r=55296+((e-=65536)>>10),t=56320+(1023&e);return String.fromCharCode(r,t)}return String.fromCharCode(e)}var c=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,l=new RegExp(c.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),u=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;var p=/[&<>"]/,h=/[&<>"]/g,f={"&":"&","<":"<",">":">",'"':"""};function d(e){return f[e]}var m=/[.?*+^$[\]\\(){}|-]/g;n.lib={},n.lib.mdurl=C,n.lib.ucmicro=D,n.assign=function(e){var r=Array.prototype.slice.call(arguments,1);return r.forEach((function(r){if(r){if("object"!=typeof r)throw new TypeError(r+"must be object");Object.keys(r).forEach((function(t){e[t]=r[t]}))}})),e},n.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},n.has=o,n.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(c,"$1")},n.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(l,(function(e,t,n){return t||function(e,t){var n=0;return o(r,t)?r[t]:35===t.charCodeAt(0)&&u.test(t)&&i(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?a(n):e}(e,n)}))},n.isValidEntityCode=i,n.fromCodePoint=a,n.escapeHtml=function(e){return p.test(e)?e.replace(h,d):e},n.arrayReplaceAt=function(e,r,t){return[].concat(e.slice(0,r),t,e.slice(r+1))},n.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},n.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},n.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},n.isPunctChar=function(e){return t.test(e)},n.escapeRE=function(e){return e.replace(m,"\\$&")},n.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"\u1e7e"==="\u1e9e".toLowerCase()&&(e=e.replace(/\u1e9e/g,"\xdf")),e.toLowerCase().toUpperCase()}})),E=w.unescapeAll,q=w.unescapeAll,S={parseLinkLabel:function(e,r,t){var n,s,o,i,a=-1,c=e.posMax,l=e.pos;for(e.pos=r+1,n=1;e.pos32)return i;if(41===n){if(0===s)break;s--}r++}return o===r||0!==s||(i.str=E(e.slice(o,r)),i.lines=0,i.pos=r,i.ok=!0),i},parseLinkTitle:function(e,r,t){var n,s,o=0,i=r,a={ok:!1,pos:0,lines:0,str:""};if(r>=t)return a;if(34!==(s=e.charCodeAt(r))&&39!==s&&40!==s)return a;for(r++,40===s&&(s=41);r"+z(e[r].content)+""},T.code_block=function(e,r,t,n,s){var o=e[r];return""+z(e[r].content)+"\n"},T.fence=function(e,r,t,n,s){var o,i,a,c,l,u=e[r],p=u.info?L(u.info).trim():"",h="",f="";return p&&(h=(a=p.split(/(\s+)/g))[0],f=a.slice(2).join("")),0===(o=t.highlight&&t.highlight(u.content,h,f)||z(u.content)).indexOf(""+o+"\n"):"
"+o+"
\n"},T.image=function(e,r,t,n,s){var o=e[r];return o.attrs[o.attrIndex("alt")][1]=s.renderInlineAsText(o.children,t,n),s.renderToken(e,r,t)},T.hardbreak=function(e,r,t){return t.xhtmlOut?"
\n":"
\n"},T.softbreak=function(e,r,t){return t.breaks?t.xhtmlOut?"
\n":"
\n":"\n"},T.text=function(e,r){return z(e[r].content)},T.html_block=function(e,r){return e[r].content},T.html_inline=function(e,r){return e[r].content},I.prototype.renderAttrs=function(e){var r,t,n;if(!e.attrs)return"";for(n="",r=0,t=e.attrs.length;r\n":">")},I.prototype.renderInline=function(e,r,t){for(var n,s="",o=this.rules,i=0,a=e.length;i/i.test(e)}var U=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,V=/\((c|tm|r|p)\)/i,Z=/\((c|tm|r|p)\)/gi,G={c:"\xa9",r:"\xae",p:"\xa7",tm:"\u2122"};function $(e,r){return G[r.toLowerCase()]}function H(e){var r,t,n=0;for(r=e.length-1;r>=0;r--)"text"!==(t=e[r]).type||n||(t.content=t.content.replace(Z,$)),"link_open"===t.type&&"auto"===t.info&&n--,"link_close"===t.type&&"auto"===t.info&&n++}function J(e){var r,t,n=0;for(r=e.length-1;r>=0;r--)"text"!==(t=e[r]).type||n||U.test(t.content)&&(t.content=t.content.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1\u2014").replace(/(^|\s)--(?=\s|$)/gm,"$1\u2013").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1\u2013")),"link_open"===t.type&&"auto"===t.info&&n--,"link_close"===t.type&&"auto"===t.info&&n++}var W=w.isWhiteSpace,Y=w.isPunctChar,K=w.isMdAsciiPunct,Q=/['"]/,X=/['"]/g;function ee(e,r,t){return e.substr(0,r)+t+e.substr(r+1)}function re(e,r){var t,n,s,o,i,a,c,l,u,p,h,f,d,m,g,_,b,k,v,C,y;for(v=[],t=0;t=0&&!(v[b].level<=c);b--);if(v.length=b+1,"text"===n.type){i=0,a=(s=n.content).length;e:for(;i=0)u=s.charCodeAt(o.index-1);else for(b=t-1;b>=0&&("softbreak"!==e[b].type&&"hardbreak"!==e[b].type);b--)if(e[b].content){u=e[b].content.charCodeAt(e[b].content.length-1);break}if(p=32,i=48&&u<=57&&(_=g=!1),g&&_&&(g=h,_=f),g||_){if(_)for(b=v.length-1;b>=0&&(l=v[b],!(v[b].level=0&&(t=this.attrs[r][1]),t},te.prototype.attrJoin=function(e,r){var t=this.attrIndex(e);t<0?this.attrPush([e,r]):this.attrs[t][1]=this.attrs[t][1]+" "+r};var ne=te;function se(e,r,t){this.src=e,this.env=t,this.tokens=[],this.inlineMode=!1,this.md=r}se.prototype.Token=ne;var oe=se,ie=[["normalize",function(e){var r;r=(r=e.src.replace(N,"\n")).replace(O,"\ufffd"),e.src=r}],["block",function(e){var r;e.inlineMode?((r=new e.Token("inline","",0)).content=e.src,r.map=[0,1],r.children=[],e.tokens.push(r)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}],["inline",function(e){var r,t,n,s=e.tokens;for(t=0,n=s.length;t=0;r--)if("link_close"!==(i=s[r]).type){if("html_inline"===i.type&&(b=i.content,/^\s]/i.test(b)&&f>0&&f--,j(i.content)&&f++),!(f>0)&&"text"===i.type&&e.md.linkify.test(i.content)){for(l=i.content,_=e.md.linkify.match(l),a=[],h=i.level,p=0,c=0;c<_.length;c++)d=_[c].url,m=e.md.normalizeLink(d),e.md.validateLink(m)&&(g=_[c].text,g=_[c].schema?"mailto:"!==_[c].schema||/^mailto:/i.test(g)?e.md.normalizeLinkText(g):e.md.normalizeLinkText("mailto:"+g).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+g).replace(/^http:\/\//,""),(u=_[c].index)>p&&((o=new e.Token("text","",0)).content=l.slice(p,u),o.level=h,a.push(o)),(o=new e.Token("link_open","a",1)).attrs=[["href",m]],o.level=h++,o.markup="linkify",o.info="auto",a.push(o),(o=new e.Token("text","",0)).content=g,o.level=h,a.push(o),(o=new e.Token("link_close","a",-1)).level=--h,o.markup="linkify",o.info="auto",a.push(o),p=_[c].lastIndex);p=0;r--)"inline"===e.tokens[r].type&&(V.test(e.tokens[r].content)&&H(e.tokens[r].children),U.test(e.tokens[r].content)&&J(e.tokens[r].children))}],["smartquotes",function(e){var r;if(e.md.options.typographer)for(r=e.tokens.length-1;r>=0;r--)"inline"===e.tokens[r].type&&Q.test(e.tokens[r].content)&&re(e.tokens[r].children,e)}]];function ae(){this.ruler=new B;for(var e=0;e=o)return-1;if((t=e.src.charCodeAt(s++))<48||t>57)return-1;for(;;){if(s>=o)return-1;if(!((t=e.src.charCodeAt(s++))>=48&&t<=57)){if(41===t||46===t)break;return-1}if(s-n>=10)return-1}return s`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",ve="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",Ce={HTML_TAG_RE:new RegExp("^(?:"+ke+"|"+ve+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?][\\s\\S]*?[?]>|]*>|)"),HTML_OPEN_CLOSE_TAG_RE:new RegExp("^(?:"+ke+"|"+ve+")")},ye=Ce.HTML_OPEN_CLOSE_TAG_RE,Ae=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(ye.source+"\\s*$"),/^$/,!1]],xe=w.isSpace,De=w.isSpace;function we(e,r,t,n){var s,o,i,a,c,l,u,p;for(this.src=e,this.md=r,this.env=t,this.tokens=n,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",p=!1,i=a=l=u=0,c=(o=this.src).length;a0&&this.level++,this.tokens.push(n),n},we.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},we.prototype.skipEmptyLines=function(e){for(var r=this.lineMax;er;)if(!De(this.src.charCodeAt(--e)))return e+1;return e},we.prototype.skipChars=function(e,r){for(var t=this.src.length;et;)if(r!==this.src.charCodeAt(--e))return e+1;return e},we.prototype.getLines=function(e,r,t,n){var s,o,i,a,c,l,u,p=e;if(e>=r)return"";for(l=new Array(r-e),s=0;pt?new Array(o-t+1).join(" ")+this.src.slice(a,c):this.src.slice(a,c)}return l.join("")},we.prototype.Token=ne;var Ee=we,qe=[["table",function(e,r,t,n){var s,o,i,a,c,l,u,p,h,f,d,m,g,_,b,k,v,C;if(r+2>t)return!1;if(l=r+1,e.sCount[l]=4)return!1;if((i=e.bMarks[l]+e.tShift[l])>=e.eMarks[l])return!1;if(124!==(v=e.src.charCodeAt(i++))&&45!==v&&58!==v)return!1;if(i>=e.eMarks[l])return!1;if(124!==(C=e.src.charCodeAt(i++))&&45!==C&&58!==C&&!le(C))return!1;if(45===v&&le(C))return!1;for(;i=4)return!1;if((u=pe(o)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),0===(p=u.length)||p!==f.length)return!1;if(n)return!0;for(_=e.parentType,e.parentType="table",k=e.md.block.ruler.getRules("blockquote"),(h=e.push("table_open","table",1)).map=m=[r,0],(h=e.push("thead_open","thead",1)).map=[r,r+1],(h=e.push("tr_open","tr",1)).map=[r,r+1],a=0;a=4)break;for((u=pe(o)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),l===r+2&&((h=e.push("tbody_open","tbody",1)).map=g=[r+2,0]),(h=e.push("tr_open","tr",1)).map=[l,l+1],a=0;a=4))break;s=++n}return e.line=s,(o=e.push("code_block","code",0)).content=e.getLines(r,s,4+e.blkIndent,!1)+"\n",o.map=[r,e.line],!0}],["fence",function(e,r,t,n){var s,o,i,a,c,l,u,p=!1,h=e.bMarks[r]+e.tShift[r],f=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(h+3>f)return!1;if(126!==(s=e.src.charCodeAt(h))&&96!==s)return!1;if(c=h,(o=(h=e.skipChars(h,s))-c)<3)return!1;if(u=e.src.slice(c,h),i=e.src.slice(h,f),96===s&&i.indexOf(String.fromCharCode(s))>=0)return!1;if(n)return!0;for(a=r;!(++a>=t)&&!((h=c=e.bMarks[a]+e.tShift[a])<(f=e.eMarks[a])&&e.sCount[a]=4||(h=e.skipChars(h,s))-c=4)return!1;if(62!==e.src.charCodeAt(D++))return!1;if(n)return!0;for(a=h=e.sCount[r]+1,32===e.src.charCodeAt(D)?(D++,a++,h++,s=!1,k=!0):9===e.src.charCodeAt(D)?(k=!0,(e.bsCount[r]+h)%4==3?(D++,a++,h++,s=!1):s=!0):k=!1,f=[e.bMarks[r]],e.bMarks[r]=D;D=w,_=[e.sCount[r]],e.sCount[r]=h-a,b=[e.tShift[r]],e.tShift[r]=D-e.bMarks[r],C=e.md.block.ruler.getRules("blockquote"),g=e.parentType,e.parentType="blockquote",p=r+1;p=(w=e.eMarks[p])));p++)if(62!==e.src.charCodeAt(D++)||A){if(l)break;for(v=!1,i=0,c=C.length;i=w,d.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(k?1:0),_.push(e.sCount[p]),e.sCount[p]=h-a,b.push(e.tShift[p]),e.tShift[p]=D-e.bMarks[p]}for(m=e.blkIndent,e.blkIndent=0,(y=e.push("blockquote_open","blockquote",1)).markup=">",y.map=u=[r,0],e.md.block.tokenize(e,r,p),(y=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=x,e.parentType=g,u[1]=e.line,i=0;i=4)return!1;if(42!==(s=e.src.charCodeAt(c++))&&45!==s&&95!==s)return!1;for(o=1;c=4)return!1;if(e.listIndent>=0&&e.sCount[r]-e.listIndent>=4&&e.sCount[r]=e.blkIndent&&(z=!0),(w=ge(e,r))>=0){if(u=!0,q=e.bMarks[r]+e.tShift[r],g=Number(e.src.slice(q,w-1)),z&&1!==g)return!1}else{if(!((w=me(e,r))>=0))return!1;u=!1}if(z&&e.skipSpaces(w)>=e.eMarks[r])return!1;if(m=e.src.charCodeAt(w-1),n)return!0;for(d=e.tokens.length,u?(L=e.push("ordered_list_open","ol",1),1!==g&&(L.attrs=[["start",g]])):L=e.push("bullet_list_open","ul",1),L.map=f=[r,0],L.markup=String.fromCharCode(m),b=r,E=!1,F=e.md.block.ruler.getRules("list"),C=e.parentType,e.parentType="list";b=_?1:k-l)>4&&(c=1),a=l+c,(L=e.push("list_item_open","li",1)).markup=String.fromCharCode(m),L.map=p=[r,0],u&&(L.info=e.src.slice(q,w-1)),x=e.tight,A=e.tShift[r],y=e.sCount[r],v=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=a,e.tight=!0,e.tShift[r]=o-e.bMarks[r],e.sCount[r]=k,o>=_&&e.isEmpty(r+1)?e.line=Math.min(e.line+2,t):e.md.block.tokenize(e,r,t,!0),e.tight&&!E||(T=!1),E=e.line-r>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=v,e.tShift[r]=A,e.sCount[r]=y,e.tight=x,(L=e.push("list_item_close","li",-1)).markup=String.fromCharCode(m),b=r=e.line,p[1]=b,o=e.bMarks[r],b>=t)break;if(e.sCount[b]=4)break;for(S=!1,i=0,h=F.length;i=4)return!1;if(91!==e.src.charCodeAt(C))return!1;for(;++C3||e.sCount[A]<0)){for(_=!1,l=0,u=b.length;l=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(c))return!1;for(a=e.src.slice(c,l),s=0;s=4)return!1;if(35!==(s=e.src.charCodeAt(c))||c>=l)return!1;for(o=1,s=e.src.charCodeAt(++c);35===s&&c6||cc&&xe(e.src.charCodeAt(i-1))&&(l=i),e.line=r+1,(a=e.push("heading_open","h"+String(o),1)).markup="########".slice(0,o),a.map=[r,e.line],(a=e.push("inline","",0)).content=e.src.slice(c,l).trim(),a.map=[r,e.line],a.children=[],(a=e.push("heading_close","h"+String(o),-1)).markup="########".slice(0,o)),!0)},["paragraph","reference","blockquote"]],["lheading",function(e,r,t){var n,s,o,i,a,c,l,u,p,h,f=r+1,d=e.md.block.ruler.getRules("paragraph");if(e.sCount[r]-e.blkIndent>=4)return!1;for(h=e.parentType,e.parentType="paragraph";f3)){if(e.sCount[f]>=e.blkIndent&&(c=e.bMarks[f]+e.tShift[f])<(l=e.eMarks[f])&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l)){u=61===p?1:2;break}if(!(e.sCount[f]<0)){for(s=!1,o=0,i=d.length;o3||e.sCount[c]<0)){for(n=!1,s=0,o=l.length;s=t))&&!(e.sCount[i]=c){e.line=t;break}for(n=0;n?@[]^_`{|}~-".split("").forEach((function(e){Ie[e.charCodeAt(0)]=1}));function Re(e,r){var t,n,s,o,i,a=[],c=r.length;for(t=0;t=0;t--)95!==(n=r[t]).marker&&42!==n.marker||-1!==n.end&&(s=r[n.end],a=t>0&&r[t-1].end===n.end+1&&r[t-1].token===n.token-1&&r[n.end+1].token===s.token+1&&r[t-1].marker===n.marker,i=String.fromCharCode(n.marker),(o=e.tokens[n.token]).type=a?"strong_open":"em_open",o.tag=a?"strong":"em",o.nesting=1,o.markup=a?i+i:i,o.content="",(o=e.tokens[s.token]).type=a?"strong_close":"em_close",o.tag=a?"strong":"em",o.nesting=-1,o.markup=a?i+i:i,o.content="",a&&(e.tokens[r[t-1].token].content="",e.tokens[r[n.end+1].token].content="",t--))}var Oe={tokenize:function(e,r){var t,n,s=e.pos,o=e.src.charCodeAt(s);if(r)return!1;if(95!==o&&42!==o)return!1;for(n=e.scanDelims(e.pos,42===o),t=0;t\x00-\x20]*)$/,$e=Ce.HTML_TAG_RE;var He=w.has,Je=w.isValidEntityCode,We=w.fromCodePoint,Ye=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,Ke=/^&([a-z][a-z0-9]{1,31});/i;function Qe(e,r){var t,n,s,o,i,a,c,l,u={},p=r.length;for(t=0;ti;n-=o.jump+1)if((o=r[n]).marker===s.marker&&o.open&&o.end<0&&(c=!1,(o.close||s.open)&&(o.length+s.length)%3==0&&(o.length%3==0&&s.length%3==0||(c=!0)),!c)){l=n>0&&!r[n-1].open?r[n-1].jump+1:0,s.jump=t-n+l,s.open=!1,o.end=t,o.jump=l,o.close=!1,a=-1;break}-1!==a&&(u[s.marker][(s.open?3:0)+(s.length||0)%3]=a)}}var Xe=w.isWhiteSpace,er=w.isPunctChar,rr=w.isMdAsciiPunct;function tr(e,r,t,n){this.src=e,this.env=t,this.md=r,this.tokens=n,this.tokens_meta=Array(n.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1}tr.prototype.pushPending=function(){var e=new ne("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},tr.prototype.push=function(e,r,t){this.pending&&this.pushPending();var n=new ne(e,r,t),s=null;return t<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),n.level=this.level,t>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],s={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(n),this.tokens_meta.push(s),n},tr.prototype.scanDelims=function(e,r){var t,n,s,o,i,a,c,l,u,p=e,h=!0,f=!0,d=this.posMax,m=this.src.charCodeAt(e);for(t=e>0?this.src.charCodeAt(e-1):32;p=0&&32===e.pending.charCodeAt(t)?t>=1&&32===e.pending.charCodeAt(t-1)?(e.pending=e.pending.replace(/ +$/,""),e.push("hardbreak","br",0)):(e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0)):e.push("softbreak","br",0)),s++;s=f)return!1;if(d=a,(c=e.md.helpers.parseLinkDestination(e.src,a,e.posMax)).ok){for(u=e.md.normalizeLink(c.str),e.md.validateLink(u)?a=c.pos:u="",d=a;a=f||41!==e.src.charCodeAt(a))&&(m=!0),a++}if(m){if(void 0===e.env.references)return!1;if(a=0?s=e.src.slice(d,a++):a=o+1):a=o+1,s||(s=e.src.slice(i,o)),!(l=e.env.references[Pe(s)]))return e.pos=h,!1;u=l.href,p=l.title}return r||(e.pos=i,e.posMax=o,e.push("link_open","a",1).attrs=t=[["href",u]],p&&t.push(["title",p]),e.md.inline.tokenize(e),e.push("link_close","a",-1)),e.pos=a,e.posMax=f,!0}],["image",function(e,r){var t,n,s,o,i,a,c,l,u,p,h,f,d,m="",g=e.pos,_=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(a=e.pos+2,(i=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((c=i+1)<_&&40===e.src.charCodeAt(c)){for(c++;c<_&&(n=e.src.charCodeAt(c),Ve(n)||10===n);c++);if(c>=_)return!1;for(d=c,(u=e.md.helpers.parseLinkDestination(e.src,c,e.posMax)).ok&&(m=e.md.normalizeLink(u.str),e.md.validateLink(m)?c=u.pos:m=""),d=c;c<_&&(n=e.src.charCodeAt(c),Ve(n)||10===n);c++);if(u=e.md.helpers.parseLinkTitle(e.src,c,e.posMax),c<_&&d!==c&&u.ok)for(p=u.str,c=u.pos;c<_&&(n=e.src.charCodeAt(c),Ve(n)||10===n);c++);else p="";if(c>=_||41!==e.src.charCodeAt(c))return e.pos=g,!1;c++}else{if(void 0===e.env.references)return!1;if(c<_&&91===e.src.charCodeAt(c)?(d=c+1,(c=e.md.helpers.parseLinkLabel(e,c))>=0?o=e.src.slice(d,c++):c=i+1):c=i+1,o||(o=e.src.slice(a,i)),!(l=e.env.references[Ue(o)]))return e.pos=g,!1;m=l.href,p=l.title}return r||(s=e.src.slice(a,i),e.md.inline.parse(s,e.md,e.env,f=[]),(h=e.push("image","img",0)).attrs=t=[["src",m],["alt",""]],h.children=f,h.content=s,p&&t.push(["title",p])),e.pos=c,e.posMax=_,!0}],["autolink",function(e,r){var t,n,s,o,i,a,c=e.pos;if(60!==e.src.charCodeAt(c))return!1;for(i=e.pos,a=e.posMax;;){if(++c>=a)return!1;if(60===(o=e.src.charCodeAt(c)))return!1;if(62===o)break}return t=e.src.slice(i+1,c),Ge.test(t)?(n=e.md.normalizeLink(t),!!e.md.validateLink(n)&&(r||((s=e.push("link_open","a",1)).attrs=[["href",n]],s.markup="autolink",s.info="auto",(s=e.push("text","",0)).content=e.md.normalizeLinkText(t),(s=e.push("link_close","a",-1)).markup="autolink",s.info="auto"),e.pos+=t.length+2,!0)):!!Ze.test(t)&&(n=e.md.normalizeLink("mailto:"+t),!!e.md.validateLink(n)&&(r||((s=e.push("link_open","a",1)).attrs=[["href",n]],s.markup="autolink",s.info="auto",(s=e.push("text","",0)).content=e.md.normalizeLinkText(t),(s=e.push("link_close","a",-1)).markup="autolink",s.info="auto"),e.pos+=t.length+2,!0))}],["html_inline",function(e,r){var t,n,s,o=e.pos;return!!e.md.options.html&&(s=e.posMax,!(60!==e.src.charCodeAt(o)||o+2>=s)&&(!(33!==(t=e.src.charCodeAt(o+1))&&63!==t&&47!==t&&!function(e){var r=32|e;return r>=97&&r<=122}(t))&&(!!(n=e.src.slice(o).match($e))&&(r||(e.push("html_inline","",0).content=e.src.slice(o,o+n[0].length)),e.pos+=n[0].length,!0))))}],["entity",function(e,t){var n,s,o=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(o))return!1;if(o+10&&n++,"text"===s[r].type&&r+1=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},ir.prototype.parse=function(e,r,t,n){var s,o,i,a=new this.State(e,r,t,n);for(this.tokenize(a),i=(o=this.ruler2.getRules("")).length,s=0;s=3&&":"===e[r-3]||r>=3&&"/"===e[r-3]?0:n.match(t.re.no_http)[0].length:0}},"mailto:":{validate:function(e,r,t){var n=e.slice(r);return t.re.mailto||(t.re.mailto=new RegExp("^"+t.re.src_email_name+"@"+t.re.src_host_strict,"i")),t.re.mailto.test(n)?n.match(t.re.mailto)[0].length:0}}},dr="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|\u0440\u0444".split("|");function mr(e){var r=e.re=function(e){var r={};return r.src_Any=y.source,r.src_Cc=A.source,r.src_Z=x.source,r.src_P=t.source,r.src_ZPCc=[r.src_Z,r.src_P,r.src_Cc].join("|"),r.src_ZCc=[r.src_Z,r.src_Cc].join("|"),r.src_pseudo_letter="(?:(?![><\uff5c]|"+r.src_ZPCc+")"+r.src_Any+")",r.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",r.src_auth="(?:(?:(?!"+r.src_ZCc+"|[@/\\[\\]()]).)+@)?",r.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",r.src_host_terminator="(?=$|[><\uff5c]|"+r.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+r.src_ZPCc+"))",r.src_path="(?:[/?#](?:(?!"+r.src_ZCc+"|[><\uff5c]|[()[\\]{}.,\"'?!\\-]).|\\[(?:(?!"+r.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+r.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+r.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+r.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+r.src_ZCc+"|[']).)+\\'|\\'(?="+r.src_pseudo_letter+"|[-]).|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+r.src_ZCc+"|[.]).|"+(e&&e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+"\\,(?!"+r.src_ZCc+").|\\!+(?!"+r.src_ZCc+"|[!]).|\\?(?!"+r.src_ZCc+"|[?]).)+|\\/)?",r.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',r.src_xn="xn--[a-z0-9\\-]{1,59}",r.src_domain_root="(?:"+r.src_xn+"|"+r.src_pseudo_letter+"{1,63})",r.src_domain="(?:"+r.src_xn+"|(?:"+r.src_pseudo_letter+")|(?:"+r.src_pseudo_letter+"(?:-|"+r.src_pseudo_letter+"){0,61}"+r.src_pseudo_letter+"))",r.src_host="(?:(?:(?:(?:"+r.src_domain+")\\.)*"+r.src_domain+"))",r.tpl_host_fuzzy="(?:"+r.src_ip4+"|(?:(?:(?:"+r.src_domain+")\\.)+(?:%TLDS%)))",r.tpl_host_no_ip_fuzzy="(?:(?:(?:"+r.src_domain+")\\.)+(?:%TLDS%))",r.src_host_strict=r.src_host+r.src_host_terminator,r.tpl_host_fuzzy_strict=r.tpl_host_fuzzy+r.src_host_terminator,r.src_host_port_strict=r.src_host+r.src_port+r.src_host_terminator,r.tpl_host_port_fuzzy_strict=r.tpl_host_fuzzy+r.src_port+r.src_host_terminator,r.tpl_host_port_no_ip_fuzzy_strict=r.tpl_host_no_ip_fuzzy+r.src_port+r.src_host_terminator,r.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+r.src_ZPCc+"|>|$))",r.tpl_email_fuzzy='(^|[><\uff5c]|"|\\(|'+r.src_ZCc+")("+r.src_email_name+"@"+r.tpl_host_fuzzy_strict+")",r.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+r.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+r.tpl_host_port_fuzzy_strict+r.src_path+")",r.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`|\uff5c]|"+r.src_ZPCc+"))((?![$+<=>^`|\uff5c])"+r.tpl_host_port_no_ip_fuzzy_strict+r.src_path+")",r}(e.__opts__),n=e.__tlds__.slice();function s(e){return e.replace("%TLDS%",r.src_tlds)}e.onCompile(),e.__tlds_replaced__||n.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),n.push(r.src_xn),r.src_tlds=n.join("|"),r.email_fuzzy=RegExp(s(r.tpl_email_fuzzy),"i"),r.link_fuzzy=RegExp(s(r.tpl_link_fuzzy),"i"),r.link_no_ip_fuzzy=RegExp(s(r.tpl_link_no_ip_fuzzy),"i"),r.host_fuzzy_test=RegExp(s(r.tpl_host_fuzzy_test),"i");var o=[];function i(e,r){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+r)}e.__compiled__={},Object.keys(e.__schemas__).forEach((function(r){var t=e.__schemas__[r];if(null!==t){var n={validate:null,link:null};if(e.__compiled__[r]=n,"[object Object]"===lr(t))return!function(e){return"[object RegExp]"===lr(e)}(t.validate)?ur(t.validate)?n.validate=t.validate:i(r,t):n.validate=function(e){return function(r,t){var n=r.slice(t);return e.test(n)?n.match(e)[0].length:0}}(t.validate),void(ur(t.normalize)?n.normalize=t.normalize:t.normalize?i(r,t):n.normalize=function(e,r){r.normalize(e)});!function(e){return"[object String]"===lr(e)}(t)?i(r,t):o.push(r)}})),o.forEach((function(r){e.__compiled__[e.__schemas__[r]]&&(e.__compiled__[r].validate=e.__compiled__[e.__schemas__[r]].validate,e.__compiled__[r].normalize=e.__compiled__[e.__schemas__[r]].normalize)})),e.__compiled__[""]={validate:null,normalize:function(e,r){r.normalize(e)}};var a=Object.keys(e.__compiled__).filter((function(r){return r.length>0&&e.__compiled__[r]})).map(pr).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><\uff5c]|"+r.src_ZPCc+"))("+a+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><\uff5c]|"+r.src_ZPCc+"))("+a+")","ig"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function gr(e,r){var t=e.__index__,n=e.__last_index__,s=e.__text_cache__.slice(t,n);this.schema=e.__schema__.toLowerCase(),this.index=t+r,this.lastIndex=n+r,this.raw=s,this.text=s,this.url=s}function _r(e,r){var t=new gr(e,r);return e.__compiled__[t.schema].normalize(t,e),t}function br(e,r){if(!(this instanceof br))return new br(e,r);var t;r||(t=e,Object.keys(t||{}).reduce((function(e,r){return e||hr.hasOwnProperty(r)}),!1)&&(r=e,e={})),this.__opts__=cr({},hr,r),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=cr({},fr,e),this.__compiled__={},this.__tlds__=dr,this.__tlds_replaced__=!1,this.re={},mr(this)}br.prototype.add=function(e,r){return this.__schemas__[e]=r,mr(this),this},br.prototype.set=function(e){return this.__opts__=cr(this.__opts__,e),this},br.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var r,t,n,s,o,i,a,c;if(this.re.schema_test.test(e))for((a=this.re.schema_search).lastIndex=0;null!==(r=a.exec(e));)if(s=this.testSchemaAt(e,r[2],a.lastIndex)){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+s;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c=0&&null!==(n=e.match(this.re.email_fuzzy))&&(o=n.index+n[1].length,i=n.index+n[0].length,(this.__index__<0||othis.__last_index__)&&(this.__schema__="mailto:",this.__index__=o,this.__last_index__=i)),this.__index__>=0},br.prototype.pretest=function(e){return this.re.pretest.test(e)},br.prototype.testSchemaAt=function(e,r,t){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(e,t,this):0},br.prototype.match=function(e){var r=0,t=[];this.__index__>=0&&this.__text_cache__===e&&(t.push(_r(this,r)),r=this.__last_index__);for(var n=r?e.slice(r):e;this.test(n);)t.push(_r(this,r)),n=n.slice(this.__last_index__),r+=this.__last_index__;return t.length?t:null},br.prototype.tlds=function(e,r){return e=Array.isArray(e)?e:[e],r?(this.__tlds__=this.__tlds__.concat(e).sort().filter((function(e,r,t){return e!==t[r-1]})).reverse(),mr(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,mr(this),this)},br.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},br.prototype.onCompile=function(){};var kr=br,vr=2147483647,Cr=36,yr=/^xn--/,Ar=/[^\x20-\x7E]/,xr=/[\x2E\u3002\uFF0E\uFF61]/g,Dr={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},wr=Math.floor,Er=String.fromCharCode; -/** - * Punycode v1.4.1 - * @license MIT - * @source https://mths.be/punycode - */ -function qr(e){throw new RangeError(Dr[e])}function Sr(e,r){for(var t=e.length,n=[];t--;)n[t]=r(e[t]);return n}function Fr(e,r){var t=e.split("@"),n="";return t.length>1&&(n=t[0]+"@",e=t[1]),n+Sr((e=e.replace(xr,".")).split("."),r).join(".")}function Lr(e){for(var r,t,n=[],s=0,o=e.length;s=55296&&r<=56319&&s65535&&(r+=Er((e-=65536)>>>10&1023|55296),e=56320|1023&e),r+=Er(e)})).join("")}function Tr(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function Ir(e,r,t){var n=0;for(e=t?wr(e/700):e>>1,e+=wr(e/r);e>455;n+=Cr)e=wr(e/35);return wr(n+36*e/(e+38))}function Mr(e){var r,t,n,s,o,i,a,c,l,u,p,h=[],f=e.length,d=0,m=128,g=72;for((t=e.lastIndexOf("-"))<0&&(t=0),n=0;n=128&&qr("not-basic"),h.push(e.charCodeAt(n));for(s=t>0?t+1:0;s=f&&qr("invalid-input"),((c=(p=e.charCodeAt(s++))-48<10?p-22:p-65<26?p-65:p-97<26?p-97:Cr)>=Cr||c>wr((vr-d)/i))&&qr("overflow"),d+=c*i,!(c<(l=a<=g?1:a>=g+26?26:a-g));a+=Cr)i>wr(vr/(u=Cr-l))&&qr("overflow"),i*=u;g=Ir(d-o,r=h.length+1,0==o),wr(d/r)>vr-m&&qr("overflow"),m+=wr(d/r),d%=r,h.splice(d++,0,m)}return zr(h)}function Rr(e){var r,t,n,s,o,i,a,c,l,u,p,h,f,d,m,g=[];for(h=(e=Lr(e)).length,r=128,t=0,o=72,i=0;i=r&&pwr((vr-t)/(f=n+1))&&qr("overflow"),t+=(a-r)*f,r=a,i=0;ivr&&qr("overflow"),p==r){for(c=t,l=Cr;!(c<(u=l<=o?1:l>=o+26?26:l-o));l+=Cr)m=c-u,d=Cr-u,g.push(Er(Tr(u+m%d,0))),c=wr(m/d);g.push(Er(Tr(c,0))),o=Ir(t,f,n==s),t=0,++n}++t,++r}return g.join("")}function Br(e){return Fr(e,(function(e){return yr.test(e)?Mr(e.slice(4).toLowerCase()):e}))}function Nr(e){return Fr(e,(function(e){return Ar.test(e)?"xn--"+Rr(e):e}))}var Or="1.4.1",Pr={decode:Lr,encode:zr},jr={version:Or,ucs2:Pr,toASCII:Nr,toUnicode:Br,encode:Rr,decode:Mr},Ur=e(Object.freeze({__proto__:null,decode:Mr,encode:Rr,toUnicode:Br,toASCII:Nr,version:Or,ucs2:Pr,default:jr})),Vr={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}},zero:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","text_collapse"]}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","text_collapse"]}}}},Zr=/^(vbscript|javascript|file|data):/,Gr=/^data:image\/(gif|png|jpeg|webp);/;function $r(e){var r=e.trim().toLowerCase();return!Zr.test(r)||!!Gr.test(r)}var Hr=["http:","https:","mailto:"];function Jr(e){var r=C.parse(e,!0);if(r.hostname&&(!r.protocol||Hr.indexOf(r.protocol)>=0))try{r.hostname=Ur.toASCII(r.hostname)}catch(e){}return C.encode(C.format(r))}function Wr(e){var r=C.parse(e,!0);if(r.hostname&&(!r.protocol||Hr.indexOf(r.protocol)>=0))try{r.hostname=Ur.toUnicode(r.hostname)}catch(e){}return C.decode(C.format(r),C.decode.defaultChars+"%")}function Yr(e,r){if(!(this instanceof Yr))return new Yr(e,r);r||w.isString(e)||(r=e||{},e="default"),this.inline=new ar,this.block=new Fe,this.core=new ce,this.renderer=new M,this.linkify=new kr,this.validateLink=$r,this.normalizeLink=Jr,this.normalizeLinkText=Wr,this.utils=w,this.helpers=w.assign({},S),this.options={},this.configure(e),r&&this.set(r)}return Yr.prototype.set=function(e){return w.assign(this.options,e),this},Yr.prototype.configure=function(e){var r,t=this;if(w.isString(e)&&!(e=Vr[r=e]))throw new Error('Wrong `markdown-it` preset "'+r+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach((function(r){e.components[r].rules&&t[r].ruler.enableOnly(e.components[r].rules),e.components[r].rules2&&t[r].ruler2.enableOnly(e.components[r].rules2)})),this},Yr.prototype.enable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.enable(e,!0))}),this),t=t.concat(this.inline.ruler2.enable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+n);return this},Yr.prototype.disable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.disable(e,!0))}),this),t=t.concat(this.inline.ruler2.disable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+n);return this},Yr.prototype.use=function(e){var r=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,r),this},Yr.prototype.parse=function(e,r){if("string"!=typeof e)throw new Error("Input data should be a String");var t=new this.core.State(e,this,r);return this.core.process(t),t.tokens},Yr.prototype.render=function(e,r){return r=r||{},this.renderer.render(this.parse(e,r),this.options,r)},Yr.prototype.parseInline=function(e,r){var t=new this.core.State(e,this,r);return t.inlineMode=!0,this.core.process(t),t.tokens},Yr.prototype.renderInline=function(e,r){return r=r||{},this.renderer.render(this.parseInline(e,r),this.options,r)},Yr})); \ No newline at end of file diff --git a/dep/prism.min.js b/dep/prism.min.js deleted file mode 100644 index e027665..0000000 --- a/dep/prism.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * PrismJS 1.25.0 - * @licence MIT - * @source https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+powershell+regex - */ -var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); -Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; -!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism); -Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; -Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; -!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o/,lookbehind:!0},{pattern:/(^|[^`])#.*/,lookbehind:!0}],string:[{pattern:/"(?:`[\s\S]|[^`"])*"/,greedy:!0,inside:{function:{pattern:/(^|[^`])\$\((?:\$\([^\r\n()]*\)|(?!\$\()[^\r\n)])*\)/,lookbehind:!0,inside:{}}}},{pattern:/'(?:[^']|'')*'/,greedy:!0}],namespace:/\[[a-z](?:\[(?:\[[^\]]*\]|[^\[\]])*\]|[^\[\]])*\]/i,boolean:/\$(?:true|false)\b/i,variable:/\$\w+\b/,function:[/\b(?:Add|Approve|Assert|Backup|Block|Checkpoint|Clear|Close|Compare|Complete|Compress|Confirm|Connect|Convert|ConvertFrom|ConvertTo|Copy|Debug|Deny|Disable|Disconnect|Dismount|Edit|Enable|Enter|Exit|Expand|Export|Find|ForEach|Format|Get|Grant|Group|Hide|Import|Initialize|Install|Invoke|Join|Limit|Lock|Measure|Merge|Move|New|Open|Optimize|Out|Ping|Pop|Protect|Publish|Push|Read|Receive|Redo|Register|Remove|Rename|Repair|Request|Reset|Resize|Resolve|Restart|Restore|Resume|Revoke|Save|Search|Select|Send|Set|Show|Skip|Sort|Split|Start|Step|Stop|Submit|Suspend|Switch|Sync|Tee|Test|Trace|Unblock|Undo|Uninstall|Unlock|Unprotect|Unpublish|Unregister|Update|Use|Wait|Watch|Where|Write)-[a-z]+\b/i,/\b(?:ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i],keyword:/\b(?:Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,operator:{pattern:/(\W?)(?:!|-(?:eq|ne|gt|ge|lt|le|sh[lr]|not|b?(?:and|x?or)|(?:Not)?(?:Like|Match|Contains|In)|Replace|Join|is(?:Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,lookbehind:!0},punctuation:/[|{}[\];(),.]/},r=i.string[0].inside;r.boolean=i.boolean,r.variable=i.variable,r.function.inside=i}(); -!function(a){var e={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|c[a-zA-Z]|0[0-7]{0,2}|[123][0-7]{2}|.)/,t="(?:[^\\\\-]|"+n.source+")",s=RegExp(t+"-"+t),i={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"};a.languages.regex={charset:{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"charset-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"charset-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:s,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":e,charclass:{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":e,charclass:{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":i}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]| t.join('-'), - s = (t) => { - switch (t[0]) { - case 'data': - return `attr(${n(t)})`; - case 'attr': - case 'counter': - return `${t[0]}(${n(t.slice(1))})`; - case 'var': - return `var(--${n(t)})`; - case void 0: - return 'attr(data-content)'; - default: - return JSON.stringify(n(t)); - } - }, - i = (t, { theme: r }) => { - let e = Array.isArray(t) ? n(t) : t; - return { - content: - (e && r('content', [e], '')) || (c.has(e) && e) || (Array.isArray(t) ? s(t) : e), - }; - }, - u = (t, r) => (Array.isArray(t) ? i(t, r) : o(i, t)); -export { u as content }; diff --git a/dep/twind-css.mjs b/dep/twind-css.mjs deleted file mode 100644 index f337731..0000000 --- a/dep/twind-css.mjs +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Twind v0.16.16 - * @license MIT - * @source https://unpkg.com/twind@0.16.16/css/css.js?module - */ - -// src/css/index.ts -import { apply, hash, directive } from "./twind.mjs"; - -// src/internal/util.ts -var includes = (value, search) => !!~value.indexOf(search); -var join = (parts, separator = "-") => parts.join(separator); -var hyphenate = value => value.replace(/[A-Z]/g, "-$&").toLowerCase(); -var evalThunk = (value, context) => { - while (typeof value == "function") { - value = value(context); - } - return value; -}; -var isCSSProperty = (key, value) => !includes("@:&", key[0]) && (includes("rg", (typeof value)[5]) || Array.isArray(value)); -var merge = (target, source, context) => source ? Object.keys(source).reduce((target2, key) => { - const value = evalThunk(source[key], context); - if (isCSSProperty(key, value)) { - target2[hyphenate(key)] = value; - } else { - target2[key] = key[0] == "@" && includes("figa", key[1]) ? (target2[key] || []).concat(value) : merge(target2[key] || {}, value, context); - } - return target2; -}, target) : target; -var escape = typeof CSS !== "undefined" && CSS.escape || (className => className.replace(/[!"'`*+.,;:\\/<=>?@#$%&^|~()[\]{}]/g, "\\$&").replace(/^\d/, "\\3$& ")); -var buildMediaQuery = screen2 => { - if (!Array.isArray(screen2)) { - screen2 = [screen2]; - } - return "@media " + join(screen2.map(screen3 => { - if (typeof screen3 == "string") { - screen3 = { min: screen3 }; - } - return screen3.raw || join(Object.keys(screen3).map(feature => `(${feature}-width:${screen3[feature]})`), " and "); - }), ","); -}; - -// src/css/index.ts -var translate = (tokens, context) => { - const collect = (target, token) => Array.isArray(token) ? token.reduce(collect, target) : merge(target, evalThunk(token, context), context); - return tokens.reduce(collect, {}); -}; -var newRule = /\s*(?:([\w-%@]+)\s*:?\s*([^{;]+?)\s*(?:;|$|})|([^;}{]*?)\s*{)|(})/gi; -var ruleClean = /\/\*[\s\S]*?\*\/|\s+|\n/gm; -var decorate = (selectors, currentBlock) => selectors.reduceRight((rules, selector) => ({ [selector]: rules }), currentBlock); -var saveBlock = (rules, selectors, currentBlock) => { - if (currentBlock) { - rules.push(decorate(selectors, currentBlock)); - } -}; -var interleave = (strings, interpolations, context) => { - let buffer = strings[0]; - const result = []; - for (let index = 0; index < interpolations.length;) { - const interpolation = evalThunk(interpolations[index], context); - if (interpolation && typeof interpolation == "object") { - result.push(buffer, interpolation); - buffer = strings[++index]; - } else { - buffer += (interpolation || "") + strings[++index]; - } - } - result.push(buffer); - return result; -}; -var astish = (values, context) => { - const selectors = []; - const rules = []; - let currentBlock; - let match; - for (let index = 0; index < values.length; index++) { - const value = values[index]; - if (typeof value == "string") { - while (match = newRule.exec(value.replace(ruleClean, " "))) { - if (!match[0]) - continue; - if (match[4]) { - currentBlock = saveBlock(rules, selectors, currentBlock); - selectors.pop(); - } - if (match[3]) { - currentBlock = saveBlock(rules, selectors, currentBlock); - selectors.push(match[3]); - } else if (!match[4]) { - if (!currentBlock) - currentBlock = {}; - const value2 = match[2] && /\S/.test(match[2]) ? match[2] : values[++index]; - if (value2) { - if (match[1] == "@apply") { - merge(currentBlock, evalThunk(apply(value2), context), context); - } else { - currentBlock[match[1]] = value2; - } - } - } - } - } else { - currentBlock = saveBlock(rules, selectors, currentBlock); - rules.push(decorate(selectors, value)); - } - } - saveBlock(rules, selectors, currentBlock); - return rules; -}; -var cssFactory = (tokens, context) => translate(Array.isArray(tokens[0]) && Array.isArray(tokens[0].raw) ? astish(interleave(tokens[0], tokens.slice(1), context), context) : tokens, context); -var css = (...tokens) => directive(cssFactory, tokens); -var keyframesFactory = (tokens, context) => { - const waypoints = cssFactory(tokens, context); - const id = hash(JSON.stringify(waypoints)); - context.tw(() => ({ [`@keyframes ${id}`]: waypoints })); - return id; -}; -var keyframes = (...tokens) => directive(keyframesFactory, tokens); -var animation = (value, waypoints) => waypoints === void 0 ? (...args) => animation(value, keyframes(...args)) : css({ - ...(value && typeof value == "object" ? value : { animation: value }), - animationName: typeof waypoints == "function" ? waypoints : keyframes(waypoints) }); - -var screenFactory = ({ size, rules }, context) => { - const media = buildMediaQuery(context.theme("screens", size)); - return rules === void 0 ? media : { - [media]: typeof rules == "function" ? evalThunk(rules, context) : cssFactory([rules], context) }; - -}; -var screen = (size, rules) => directive(screenFactory, { size, rules }); -export { -animation, -css, -keyframes, -screen }; \ No newline at end of file diff --git a/dep/twind.mjs b/dep/twind.mjs deleted file mode 100644 index 6d0ad35..0000000 --- a/dep/twind.mjs +++ /dev/null @@ -1,2402 +0,0 @@ -/** - * Twind v0.16.16 - * @license MIT - * @source https://unpkg.com/twind@0.16.16/twind.js?module - */ - -// src/internal/util.ts -var includes = (value, search) => !!~value.indexOf(search); -var join = (parts, separator = '-') => parts.join(separator); -var joinTruthy = (parts, separator) => join(parts.filter(Boolean), separator); -var tail = (array, startIndex = 1) => array.slice(startIndex); -var identity = (value) => value; -var noop = () => {}; -var capitalize = (value) => value[0].toUpperCase() + tail(value); -var hyphenate = (value) => value.replace(/[A-Z]/g, '-$&').toLowerCase(); -var evalThunk = (value, context) => { - while (typeof value == 'function') { - value = value(context); - } - return value; -}; -var ensureMaxSize = (map, max) => { - if (map.size > max) { - map.delete(map.keys().next().value); - } -}; -var isCSSProperty = (key, value) => - !includes('@:&', key[0]) && (includes('rg', (typeof value)[5]) || Array.isArray(value)); -var merge = (target, source, context) => - source - ? Object.keys(source).reduce((target2, key) => { - const value = evalThunk(source[key], context); - if (isCSSProperty(key, value)) { - target2[hyphenate(key)] = value; - } else { - target2[key] = - key[0] == '@' && includes('figa', key[1]) - ? (target2[key] || []).concat(value) - : merge(target2[key] || {}, value, context); - } - return target2; - }, target) - : target; -var escape = - (typeof CSS !== 'undefined' && CSS.escape) || - ((className) => - className.replace(/[!"'`*+.,;:\\/<=>?@#$%&^|~()[\]{}]/g, '\\$&').replace(/^\d/, '\\3$& ')); -var buildMediaQuery = (screen) => { - if (!Array.isArray(screen)) { - screen = [screen]; - } - return ( - '@media ' + - join( - screen.map((screen2) => { - if (typeof screen2 == 'string') { - screen2 = { min: screen2 }; - } - return ( - screen2.raw || - join( - Object.keys(screen2).map((feature) => `(${feature}-width:${screen2[feature]})`), - ' and ' - ) - ); - }), - ',' - ) - ); -}; -var cyrb32 = (value) => { - for (var h = 9, index = value.length; index--; ) { - h = Math.imul(h ^ value.charCodeAt(index), 1597334677); - } - return 'tw-' + ((h ^ (h >>> 9)) >>> 0).toString(36); -}; -var sortedInsertionIndex = (array, element) => { - for (var low = 0, high = array.length; low < high; ) { - const pivot = (high + low) >> 1; - if (array[pivot] <= element) { - low = pivot + 1; - } else { - high = pivot; - } - } - return high; -}; - -// src/twind/parse.ts -var groupings; -var rules; -var startGrouping = (value = '') => { - groupings.push(value); - return ''; -}; -var endGrouping = (isWhitespace) => { - groupings.length = Math.max(groupings.lastIndexOf('') + ~~isWhitespace, 0); -}; -var onlyPrefixes = (s) => s && !includes('!:', s[0]); -var onlyVariants = (s) => s[0] == ':'; -var addRule = (directive2, negate) => { - rules.push({ - v: groupings.filter(onlyVariants), - d: directive2, - n: negate, - i: includes(groupings, '!'), - $: '', - }); -}; -var saveRule = (buffer) => { - const negate = buffer[0] == '-'; - if (negate) { - buffer = tail(buffer); - } - const prefix = join(groupings.filter(onlyPrefixes)); - addRule(buffer == '&' ? prefix : (prefix && prefix + '-') + buffer, negate); - return ''; -}; -var parseString = (token, isVariant) => { - let buffer = ''; - for (let char, dynamic = false, position2 = 0; (char = token[position2++]); ) { - if (dynamic || char == '[') { - buffer += char; - dynamic = char != ']'; - continue; - } - switch (char) { - case ':': - buffer = - buffer && - startGrouping(':' + (token[position2] == char ? token[position2++] : '') + buffer); - break; - case '(': - buffer = buffer && startGrouping(buffer); - startGrouping(); - break; - case '!': - startGrouping(char); - break; - case ')': - case ' ': - case ' ': - case '\n': - case '\r': - buffer = buffer && saveRule(buffer); - endGrouping(char !== ')'); - break; - default: - buffer += char; - } - } - if (buffer) { - if (isVariant) { - startGrouping(':' + buffer); - } else if (buffer.slice(-1) == '-') { - startGrouping(buffer.slice(0, -1)); - } else { - saveRule(buffer); - } - } -}; -var parseGroupedToken = (token) => { - startGrouping(); - parseToken(token); - endGrouping(); -}; -var parseGroup = (key, token) => { - if (token) { - startGrouping(); - const isVariant = includes('tbu', (typeof token)[1]); - parseString(key, isVariant); - if (isVariant) { - parseGroupedToken(token); - } - endGrouping(); - } -}; -var parseToken = (token) => { - switch (typeof token) { - case 'string': - parseString(token); - break; - case 'function': - addRule(token); - break; - case 'object': - if (Array.isArray(token)) { - token.forEach(parseGroupedToken); - } else if (token) { - Object.keys(token).forEach((key) => { - parseGroup(key, token[key]); - }); - } - } -}; -var staticsCaches = new WeakMap(); -var buildStatics = (strings) => { - let statics = staticsCaches.get(strings); - if (!statics) { - let slowModeIndex = NaN; - let buffer = ''; - statics = strings.map((token, index) => { - if ( - slowModeIndex !== slowModeIndex && - (token.slice(-1) == '[' || includes(':-(', (strings[index + 1] || '')[0])) - ) { - slowModeIndex = index; - } - if (index >= slowModeIndex) { - return (interpolation) => { - if (index == slowModeIndex) { - buffer = ''; - } - buffer += token; - if (includes('rg', (typeof interpolation)[5])) { - buffer += interpolation; - } else if (interpolation) { - parseString(buffer); - buffer = ''; - parseToken(interpolation); - } - if (index == strings.length - 1) { - parseString(buffer); - } - }; - } - const staticRules = (rules = []); - parseString(token); - const activeGroupings = [...groupings]; - rules = []; - return (interpolation) => { - rules.push(...staticRules); - groupings = [...activeGroupings]; - if (interpolation) { - parseToken(interpolation); - } - }; - }); - staticsCaches.set(strings, statics); - } - return statics; -}; -var parse = (tokens) => { - groupings = []; - rules = []; - if (Array.isArray(tokens[0]) && Array.isArray(tokens[0].raw)) { - buildStatics(tokens[0]).forEach((apply2, index) => apply2(tokens[index + 1])); - } else { - parseToken(tokens); - } - return rules; -}; - -// src/twind/directive.ts -var isFunctionFree; -var detectFunction = (key, value) => { - if (typeof value == 'function') { - isFunctionFree = false; - } - return value; -}; -var stringify = (data) => { - isFunctionFree = true; - const key = JSON.stringify(data, detectFunction); - return isFunctionFree && key; -}; -var cacheByFactory = new WeakMap(); -var directive = (factory, data) => { - const key = stringify(data); - let directive2; - if (key) { - var cache = cacheByFactory.get(factory); - if (!cache) { - cacheByFactory.set(factory, (cache = new Map())); - } - directive2 = cache.get(key); - } - if (!directive2) { - directive2 = Object.defineProperty( - (params, context) => { - context = Array.isArray(params) ? context : params; - return evalThunk(factory(data, context), context); - }, - 'toJSON', - { - value: () => key || data, - } - ); - - if (cache) { - cache.set(key, directive2); - ensureMaxSize(cache, 1e4); - } - } - return directive2; -}; - -// src/twind/apply.ts -var applyFactory = (tokens, { css }) => css(parse(tokens)); -var apply = (...tokens) => directive(applyFactory, tokens); - -// src/twind/helpers.ts -var positions = (resolve) => (value, position2, prefix, suffix) => { - if (value) { - const properties = position2 && resolve(position2); - if (properties && properties.length > 0) { - return properties.reduce((declarations, property2) => { - declarations[joinTruthy([prefix, property2, suffix])] = value; - return declarations; - }, {}); - } - } -}; -var corners = /* @__PURE__ */ positions( - (key) => - ({ - t: ['top-left', 'top-right'], - r: ['top-right', 'bottom-right'], - b: ['bottom-left', 'bottom-right'], - l: ['bottom-left', 'top-left'], - tl: ['top-left'], - tr: ['top-right'], - bl: ['bottom-left'], - br: ['bottom-right'], - }[key]) -); -var expandEdges = (key) => { - const parts = ({ x: 'lr', y: 'tb' }[key] || key || '').split('').sort(); - for (let index = parts.length; index--; ) { - if ( - !(parts[index] = { - t: 'top', - r: 'right', - b: 'bottom', - l: 'left', - }[parts[index]]) - ) - return; - } - if (parts.length) return parts; -}; -var edges = /* @__PURE__ */ positions(expandEdges); - -// src/twind/plugins.ts -var _; -var __; -var $; -var toColumnsOrRows = (x) => (x == 'cols' ? 'columns' : 'rows'); -var property = (property2) => (params, context, id) => ({ - [property2]: id + ((_ = join(params)) && '-' + _), -}); - -var propertyValue = (property2, separator) => (params, context, id) => - (_ = join(params, separator)) && { - [property2 || id]: _, - }; - -var themeProperty = - (section) => - (params, { theme: theme2 }, id) => - (_ = theme2(section || id, params)) && { - [section || id]: _, - }; - -var themePropertyFallback = - (section, separator) => - (params, { theme: theme2 }, id) => - (_ = theme2(section || id, params, join(params, separator))) && { - [section || id]: _, - }; - -var alias = (handler, name) => (params, context) => handler(params, context, name); -var display = property('display'); -var position = property('position'); -var textTransform = property('textTransform'); -var textDecoration = property('textDecoration'); -var fontStyle = property('fontStyle'); -var fontVariantNumeric = (key) => (params, context, id) => ({ - ['--tw-' + key]: id, - fontVariantNumeric: - 'var(--tw-ordinal,/*!*/ /*!*/) var(--tw-slashed-zero,/*!*/ /*!*/) var(--tw-numeric-figure,/*!*/ /*!*/) var(--tw-numeric-spacing,/*!*/ /*!*/) var(--tw-numeric-fraction,/*!*/ /*!*/)', -}); - -var inset = (params, { theme: theme2 }, id) => (_ = theme2('inset', params)) && { [id]: _ }; -var opacityProperty = (params, theme2, id, section = id) => - (_ = theme2(section + 'Opacity', tail(params))) && { - [`--tw-${id}-opacity`]: _, - }; - -var parseColorComponent = (chars, factor) => Math.round(parseInt(chars, 16) * factor); -var asRGBA = (color, opacityProperty2, opacityDefault) => { - if ( - color && - color[0] == '#' && - (_ = (color.length - 1) / 3) && - ($ = [17, 1, 0.062272][_ - 1]) - ) { - return `rgba(${parseColorComponent(color.substr(1, _), $)},${parseColorComponent( - color.substr(1 + _, _), - $ - )},${parseColorComponent(color.substr(1 + 2 * _, _), $)},${ - opacityProperty2 - ? `var(--tw-${opacityProperty2}${opacityDefault ? ',' + opacityDefault : ''})` - : opacityDefault || 1 - })`; - } - return color; -}; -var withOpacityFallback = (property2, kind, color) => - color && typeof color == 'string' - ? (_ = asRGBA(color, kind + '-opacity')) && _ !== color - ? { - [`--tw-${kind}-opacity`]: '1', - [property2]: [color, _], - } - : { [property2]: color } - : void 0; -var transparentTo = (color) => (($ = asRGBA(color, '', '0')) == _ ? 'transparent' : $); -var reversableEdge = (params, { theme: theme2 }, id, section, prefix, suffix) => - (_ = { x: ['right', 'left'], y: ['bottom', 'top'] }[params[0]]) && - ($ = `--tw-${id}-${params[0]}-reverse`) - ? params[1] == 'reverse' - ? { - [$]: '1', - } - : { - [$]: '0', - [joinTruthy([prefix, _[0], suffix])]: - (__ = theme2(section, tail(params))) && `calc(${__} * var(${$}))`, - [joinTruthy([prefix, _[1], suffix])]: __ && [ - __, - `calc(${__} * calc(1 - var(${$})))`, - ], - } - : void 0; -var placeHelper = (property2, params) => - params[0] && { - [property2]: (includes('wun', (params[0] || '')[3]) ? 'space-' : '') + params[0], - }; - -var contentPluginFor = (property2) => (params) => - includes(['start', 'end'], params[0]) - ? { [property2]: 'flex-' + params[0] } - : placeHelper(property2, params); -var gridPlugin = - (kind) => - (params, { theme: theme2 }) => { - if ((_ = theme2('grid' + capitalize(kind), params, ''))) { - return { ['grid-' + kind]: _ }; - } - switch (params[0]) { - case 'span': - return ( - params[1] && { - ['grid-' + kind]: `span ${params[1]} / span ${params[1]}`, - } - ); - - case 'start': - case 'end': - return ( - (_ = theme2( - 'grid' + capitalize(kind) + capitalize(params[0]), - tail(params), - join(tail(params)) - )) && { - [`grid-${kind}-${params[0]}`]: _, - } - ); - } - }; -var border = (params, { theme: theme2 }, id) => { - switch (params[0]) { - case 'solid': - case 'dashed': - case 'dotted': - case 'double': - case 'none': - return propertyValue('borderStyle')(params); - case 'collapse': - case 'separate': - return propertyValue('borderCollapse')(params); - case 'opacity': - return opacityProperty(params, theme2, id); - } - - return (_ = theme2(id + 'Width', params, '')) - ? { borderWidth: _ } - : withOpacityFallback('borderColor', id, theme2(id + 'Color', params)); -}; -var transform = (gpu) => - (gpu - ? 'translate3d(var(--tw-translate-x,0),var(--tw-translate-y,0),0)' - : 'translateX(var(--tw-translate-x,0)) translateY(var(--tw-translate-y,0))') + - ' rotate(var(--tw-rotate,0)) skewX(var(--tw-skew-x,0)) skewY(var(--tw-skew-y,0)) scaleX(var(--tw-scale-x,1)) scaleY(var(--tw-scale-y,1))'; -var transformXYFunction = (params, context, id) => - params[0] && - (_ = context.theme(id, params[1] || params[0])) && { - [`--tw-${id}-x`]: params[0] !== 'y' && _, - [`--tw-${id}-y`]: params[0] !== 'x' && _, - transform: [`${id}${params[1] ? params[0].toUpperCase() : ''}(${_})`, transform()], - }; - -var edgesPluginFor = (key) => (params, context, id) => - id[1] - ? edges(context.theme(key, params), id[1], key) - : themeProperty(key)(params, context, id); -var padding = edgesPluginFor('padding'); -var margin = edgesPluginFor('margin'); -var minMax = (params, { theme: theme2 }, id) => - (_ = { w: 'width', h: 'height' }[params[0]]) && { - [(_ = `${id}${capitalize(_)}`)]: theme2(_, tail(params)), - }; - -var filter = (params, { theme: theme2 }, id) => { - const parts = id.split('-'); - const prefix = parts[0] == 'backdrop' ? parts[0] + '-' : ''; - if (!prefix) { - params.unshift(...parts); - } - if (params[0] == 'filter') { - const filters = [ - 'blur', - 'brightness', - 'contrast', - 'grayscale', - 'hue-rotate', - 'invert', - prefix && 'opacity', - 'saturate', - 'sepia', - !prefix && 'drop-shadow', - ].filter(Boolean); - return params[1] == 'none' - ? { [prefix + 'filter']: 'none' } - : filters.reduce( - (css, key) => { - css['--tw-' + prefix + key] = 'var(--tw-empty,/*!*/ /*!*/)'; - return css; - }, - { - [prefix + 'filter']: filters.map((key) => `var(--tw-${prefix}${key})`).join(' '), - } - ); - } - $ = params.shift(); - if (includes(['hue', 'drop'], $)) $ += capitalize(params.shift()); - return ( - (_ = theme2(prefix ? 'backdrop' + capitalize($) : $, params)) && { - ['--tw-' + prefix + $]: (Array.isArray(_) ? _ : [_]) - .map((_4) => `${hyphenate($)}(${_4})`) - .join(' '), - } - ); -}; -var corePlugins = { - group: (params, { tag }, id) => tag(join([id, ...params])), - hidden: alias(display, 'none'), - inline: display, - block: display, - contents: display, - flow: display, - table: (params, context, id) => - includes(['auto', 'fixed'], params[0]) - ? { tableLayout: params[0] } - : display(params, context, id), - flex(params, context, id) { - switch (params[0]) { - case 'row': - case 'col': - return { - flexDirection: join(params[0] == 'col' ? ['column', ...tail(params)] : params), - }; - - case 'nowrap': - case 'wrap': - return { flexWrap: join(params) }; - case 'grow': - case 'shrink': - _ = context.theme('flex' + capitalize(params[0]), tail(params), params[1] || 1); - return ( - _ != null && { - ['flex-' + params[0]]: '' + _, - } - ); - } - - return (_ = context.theme('flex', params, '')) - ? { flex: _ } - : display(params, context, id); - }, - grid(params, context, id) { - switch (params[0]) { - case 'cols': - case 'rows': - return ( - (_ = context.theme( - 'gridTemplate' + capitalize(toColumnsOrRows(params[0])), - tail(params), - params.length == 2 && Number(params[1]) - ? `repeat(${params[1]},minmax(0,1fr))` - : join(tail(params)) - )) && { - ['gridTemplate-' + toColumnsOrRows(params[0])]: _, - } - ); - - case 'flow': - return ( - params.length > 1 && { - gridAutoFlow: join( - params[1] == 'col' ? ['column', ...tail(params, 2)] : tail(params), - ' ' - ), - } - ); - } - - return display(params, context, id); - }, - auto: (params, { theme: theme2 }) => - includes(['cols', 'rows'], params[0]) && - (_ = theme2( - 'gridAuto' + capitalize(toColumnsOrRows(params[0])), - tail(params), - join(tail(params)) - )) && { - ['gridAuto-' + toColumnsOrRows(params[0])]: _, - }, - - static: position, - fixed: position, - absolute: position, - relative: position, - sticky: position, - visible: { visibility: 'visible' }, - invisible: { visibility: 'hidden' }, - antialiased: { - WebkitFontSmoothing: 'antialiased', - MozOsxFontSmoothing: 'grayscale', - }, - - 'subpixel-antialiased': { - WebkitFontSmoothing: 'auto', - MozOsxFontSmoothing: 'auto', - }, - - truncate: { - overflow: 'hidden', - whiteSpace: 'nowrap', - textOverflow: 'ellipsis', - }, - - 'sr-only': { - position: 'absolute', - width: '1px', - height: '1px', - padding: '0', - margin: '-1px', - overflow: 'hidden', - whiteSpace: 'nowrap', - clip: 'rect(0,0,0,0)', - borderWidth: '0', - }, - - 'not-sr-only': { - position: 'static', - width: 'auto', - height: 'auto', - padding: '0', - margin: '0', - overflow: 'visible', - whiteSpace: 'normal', - clip: 'auto', - }, - - resize: (params) => ({ - resize: { x: 'horizontal', y: 'vertical' }[params[0]] || params[0] || 'both', - }), - - box: (params) => params[0] && { boxSizing: params[0] + '-box' }, - appearance: propertyValue(), - cursor: themePropertyFallback(), - float: propertyValue(), - clear: propertyValue(), - decoration: propertyValue('boxDecorationBreak'), - isolate: { isolation: 'isolate' }, - isolation: propertyValue(), - 'mix-blend': propertyValue('mixBlendMode'), - top: inset, - right: inset, - bottom: inset, - left: inset, - inset: (params, { theme: theme2 }) => - (_ = expandEdges(params[0])) - ? edges(theme2('inset', tail(params)), params[0]) - : (_ = theme2('inset', params)) && { - top: _, - right: _, - bottom: _, - left: _, - }, - - underline: textDecoration, - 'line-through': textDecoration, - 'no-underline': alias(textDecoration, 'none'), - 'text-underline': alias(textDecoration, 'underline'), - 'text-no-underline': alias(textDecoration, 'none'), - 'text-line-through': alias(textDecoration, 'line-through'), - uppercase: textTransform, - lowercase: textTransform, - capitalize: textTransform, - 'normal-case': alias(textTransform, 'none'), - 'text-normal-case': alias(textTransform, 'none'), - italic: fontStyle, - 'not-italic': alias(fontStyle, 'normal'), - 'font-italic': alias(fontStyle, 'italic'), - 'font-not-italic': alias(fontStyle, 'normal'), - font: (params, context, id) => - (_ = context.theme('fontFamily', params, '')) - ? { fontFamily: _ } - : themeProperty('fontWeight')(params, context, id), - items: (params) => - params[0] && { - alignItems: includes(['start', 'end'], params[0]) ? 'flex-' + params[0] : join(params), - }, - - 'justify-self': propertyValue(), - 'justify-items': propertyValue(), - justify: contentPluginFor('justifyContent'), - content: contentPluginFor('alignContent'), - self: contentPluginFor('alignSelf'), - place: (params) => params[0] && placeHelper('place-' + params[0], tail(params)), - overscroll: (params) => - params[0] && { - ['overscrollBehavior' + (params[1] ? '-' + params[0] : '')]: params[1] || params[0], - }, - - col: gridPlugin('column'), - row: gridPlugin('row'), - duration: themeProperty('transitionDuration'), - delay: themeProperty('transitionDelay'), - tracking: themeProperty('letterSpacing'), - leading: themeProperty('lineHeight'), - z: themeProperty('zIndex'), - opacity: themeProperty(), - ease: themeProperty('transitionTimingFunction'), - p: padding, - py: padding, - px: padding, - pt: padding, - pr: padding, - pb: padding, - pl: padding, - m: margin, - my: margin, - mx: margin, - mt: margin, - mr: margin, - mb: margin, - ml: margin, - w: themeProperty('width'), - h: themeProperty('height'), - min: minMax, - max: minMax, - fill: themeProperty(), - order: themeProperty(), - origin: themePropertyFallback('transformOrigin', ' '), - select: propertyValue('userSelect'), - 'pointer-events': propertyValue(), - align: propertyValue('verticalAlign'), - whitespace: propertyValue('whiteSpace'), - 'normal-nums': { fontVariantNumeric: 'normal' }, - ordinal: fontVariantNumeric('ordinal'), - 'slashed-zero': fontVariantNumeric('slashed-zero'), - 'lining-nums': fontVariantNumeric('numeric-figure'), - 'oldstyle-nums': fontVariantNumeric('numeric-figure'), - 'proportional-nums': fontVariantNumeric('numeric-spacing'), - 'tabular-nums': fontVariantNumeric('numeric-spacing'), - 'diagonal-fractions': fontVariantNumeric('numeric-fraction'), - 'stacked-fractions': fontVariantNumeric('numeric-fraction'), - overflow: (params, context, id) => - includes(['ellipsis', 'clip'], params[0]) - ? propertyValue('textOverflow')(params) - : params[1] - ? { ['overflow-' + params[0]]: params[1] } - : propertyValue()(params, context, id), - transform: (params) => - params[0] == 'none' - ? { transform: 'none' } - : { - '--tw-translate-x': '0', - '--tw-translate-y': '0', - '--tw-rotate': '0', - '--tw-skew-x': '0', - '--tw-skew-y': '0', - '--tw-scale-x': '1', - '--tw-scale-y': '1', - transform: transform(params[0] == 'gpu'), - }, - - rotate: (params, { theme: theme2 }) => - (_ = theme2('rotate', params)) && { - '--tw-rotate': _, - transform: [`rotate(${_})`, transform()], - }, - - scale: transformXYFunction, - translate: transformXYFunction, - skew: transformXYFunction, - gap: (params, context, id) => - (_ = { x: 'column', y: 'row' }[params[0]]) - ? { [_ + 'Gap']: context.theme('gap', tail(params)) } - : themeProperty('gap')(params, context, id), - stroke: (params, context, id) => - (_ = context.theme('stroke', params, '')) - ? { stroke: _ } - : themeProperty('strokeWidth')(params, context, id), - outline: (params, { theme: theme2 }) => - (_ = theme2('outline', params)) && { - outline: _[0], - outlineOffset: _[1], - }, - - 'break-normal': { - wordBreak: 'normal', - overflowWrap: 'normal', - }, - - 'break-words': { overflowWrap: 'break-word' }, - 'break-all': { wordBreak: 'break-all' }, - text(params, { theme: theme2 }, id) { - switch (params[0]) { - case 'left': - case 'center': - case 'right': - case 'justify': - return { textAlign: params[0] }; - case 'uppercase': - case 'lowercase': - case 'capitalize': - return textTransform([], _, params[0]); - case 'opacity': - return opacityProperty(params, theme2, id); - } - - const fontSize = theme2('fontSize', params, ''); - if (fontSize) { - return typeof fontSize == 'string' - ? { fontSize } - : { - fontSize: fontSize[0], - ...(typeof fontSize[1] == 'string' ? { lineHeight: fontSize[1] } : fontSize[1]), - }; - } - return withOpacityFallback('color', 'text', theme2('textColor', params)); - }, - bg(params, { theme: theme2 }, id) { - switch (params[0]) { - case 'fixed': - case 'local': - case 'scroll': - return propertyValue('backgroundAttachment', ',')(params); - case 'bottom': - case 'center': - case 'left': - case 'right': - case 'top': - return propertyValue('backgroundPosition', ' ')(params); - case 'no': - return params[1] == 'repeat' && propertyValue('backgroundRepeat')(params); - case 'repeat': - return includes('xy', params[1]) - ? propertyValue('backgroundRepeat')(params) - : { backgroundRepeat: params[1] || params[0] }; - case 'opacity': - return opacityProperty(params, theme2, id, 'background'); - case 'clip': - case 'origin': - return ( - params[1] && { - ['background-' + params[0]]: params[1] + (params[1] == 'text' ? '' : '-box'), - } - ); - - case 'blend': - return propertyValue('background-blend-mode')(tail(params)); - case 'gradient': - if (params[1] == 'to' && (_ = expandEdges(params[2]))) { - return { - backgroundImage: `linear-gradient(to ${join(_, ' ')},var(--tw-gradient-stops))`, - }; - } - } - - return (_ = theme2('backgroundPosition', params, '')) - ? { backgroundPosition: _ } - : (_ = theme2('backgroundSize', params, '')) - ? { backgroundSize: _ } - : (_ = theme2('backgroundImage', params, '')) - ? { backgroundImage: _ } - : withOpacityFallback('backgroundColor', 'bg', theme2('backgroundColor', params)); - }, - from: (params, { theme: theme2 }) => - (_ = theme2('gradientColorStops', params)) && { - '--tw-gradient-from': _, - '--tw-gradient-stops': `var(--tw-gradient-from),var(--tw-gradient-to,${transparentTo( - _ - )})`, - }, - - via: (params, { theme: theme2 }) => - (_ = theme2('gradientColorStops', params)) && { - '--tw-gradient-stops': `var(--tw-gradient-from),${_},var(--tw-gradient-to,${transparentTo( - _ - )})`, - }, - - to: (params, { theme: theme2 }) => - (_ = theme2('gradientColorStops', params)) && { - '--tw-gradient-to': _, - }, - - border: (params, context, id) => - expandEdges(params[0]) - ? edges(context.theme('borderWidth', tail(params)), params[0], 'border', 'width') - : border(params, context, id), - divide: (params, context, id) => - (_ = - reversableEdge(params, context, id, 'divideWidth', 'border', 'width') || - border(params, context, id)) && { - '&>:not([hidden])~:not([hidden])': _, - }, - - space: (params, context, id) => - (_ = reversableEdge(params, context, id, 'space', 'margin')) && { - '&>:not([hidden])~:not([hidden])': _, - }, - - placeholder: (params, { theme: theme2 }, id) => - (_ = - params[0] == 'opacity' - ? opacityProperty(params, theme2, id) - : withOpacityFallback('color', 'placeholder', theme2('placeholderColor', params))) && { - '&::placeholder': _, - }, - - shadow: (params, { theme: theme2 }) => - (_ = theme2('boxShadow', params)) && { - ':global': { - '*': { - '--tw-shadow': '0 0 transparent', - }, - }, - - '--tw-shadow': _ == 'none' ? '0 0 transparent' : _, - boxShadow: [ - _, - `var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)`, - ], - }, - - animate: (params, { theme: theme2, tag }) => { - if (($ = theme2('animation', params))) { - const parts = $.split(' '); - if ((_ = theme2('keyframes', parts[0], (__ = {}))) !== __) { - return ( - ($ = tag(parts[0])) && { - animation: $ + ' ' + join(tail(parts), ' '), - ['@keyframes ' + $]: _, - } - ); - } - return { animation: $ }; - } - }, - ring(params, { theme: theme2 }, id) { - switch (params[0]) { - case 'inset': - return { '--tw-ring-inset': 'inset' }; - case 'opacity': - return opacityProperty(params, theme2, id); - case 'offset': - return (_ = theme2('ringOffsetWidth', tail(params), '')) - ? { - '--tw-ring-offset-width': _, - } - : { - '--tw-ring-offset-color': theme2('ringOffsetColor', tail(params)), - }; - } - - return (_ = theme2('ringWidth', params, '')) - ? { - '--tw-ring-offset-shadow': `var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)`, - '--tw-ring-shadow': `var(--tw-ring-inset) 0 0 0 calc(${_} + var(--tw-ring-offset-width)) var(--tw-ring-color)`, - boxShadow: `var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)`, - ':global': { - '*': { - '--tw-ring-inset': 'var(--tw-empty,/*!*/ /*!*/)', - '--tw-ring-offset-width': theme2('ringOffsetWidth', '', '0px'), - '--tw-ring-offset-color': theme2('ringOffsetColor', '', '#fff'), - '--tw-ring-color': asRGBA( - theme2('ringColor', '', '#93c5fd'), - 'ring-opacity', - theme2('ringOpacity', '', '0.5') - ), - '--tw-ring-offset-shadow': '0 0 transparent', - '--tw-ring-shadow': '0 0 transparent', - }, - }, - } - : { - '--tw-ring-opacity': '1', - '--tw-ring-color': asRGBA(theme2('ringColor', params), 'ring-opacity'), - }; - }, - object: (params, context, id) => - includes(['contain', 'cover', 'fill', 'none', 'scale-down'], join(params)) - ? { objectFit: join(params) } - : themePropertyFallback('objectPosition', ' ')(params, context, id), - list: (params, context, id) => - join(params) == 'item' - ? display(params, context, id) - : includes(['inside', 'outside'], join(params)) - ? { listStylePosition: params[0] } - : themePropertyFallback('listStyleType')(params, context, id), - rounded: (params, context, id) => - corners(context.theme('borderRadius', tail(params), ''), params[0], 'border', 'radius') || - themeProperty('borderRadius')(params, context, id), - 'transition-none': { transitionProperty: 'none' }, - transition: (params, { theme: theme2 }) => ({ - transitionProperty: theme2('transitionProperty', params), - transitionTimingFunction: theme2('transitionTimingFunction', ''), - transitionDuration: theme2('transitionDuration', ''), - }), - - container: (params, { theme: theme2 }) => { - const { screens = theme2('screens'), center, padding: padding2 } = theme2('container'); - const paddingFor = (screen) => - (_ = - padding2 && - (typeof padding2 == 'string' ? padding2 : padding2[screen] || padding2.DEFAULT)) - ? { - paddingRight: _, - paddingLeft: _, - } - : {}; - return Object.keys(screens).reduce( - (rules2, screen) => { - if (($ = screens[screen]) && typeof $ == 'string') { - rules2[buildMediaQuery($)] = { - '&': { - 'max-width': $, - ...paddingFor(screen), - }, - }; - } - return rules2; - }, - { - width: '100%', - ...(center ? { marginRight: 'auto', marginLeft: 'auto' } : {}), - ...paddingFor('xs'), - } - ); - }, - filter, - blur: filter, - brightness: filter, - contrast: filter, - grayscale: filter, - 'hue-rotate': filter, - invert: filter, - saturate: filter, - sepia: filter, - 'drop-shadow': filter, - backdrop: filter, -}; - -// src/twind/preflight.ts -var createPreflight = (theme2) => ({ - ':root': { tabSize: 4 }, - 'body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre,fieldset,ol,ul': { margin: '0' }, - button: { backgroundColor: 'transparent', backgroundImage: 'none' }, - 'button,[type="button"],[type="reset"],[type="submit"]': { WebkitAppearance: 'button' }, - 'button:focus': { outline: ['1px dotted', '5px auto -webkit-focus-ring-color'] }, - 'fieldset,ol,ul,legend': { padding: '0' }, - 'ol,ul': { listStyle: 'none' }, - html: { - lineHeight: '1.5', - WebkitTextSizeAdjust: '100%', - fontFamily: theme2('fontFamily.sans', 'ui-sans-serif,system-ui,sans-serif'), - }, - - body: { fontFamily: 'inherit', lineHeight: 'inherit' }, - '*,::before,::after': { - boxSizing: 'border-box', - border: `0 solid ${theme2('borderColor.DEFAULT', 'currentColor')}`, - }, - - hr: { height: '0', color: 'inherit', borderTopWidth: '1px' }, - img: { borderStyle: 'solid' }, - textarea: { resize: 'vertical' }, - 'input::placeholder,textarea::placeholder': { - opacity: '1', - color: theme2('placeholderColor.DEFAULT', theme2('colors.gray.400', '#a1a1aa')), - }, - - 'button,[role="button"]': { cursor: 'pointer' }, - table: { textIndent: '0', borderColor: 'inherit', borderCollapse: 'collapse' }, - 'h1,h2,h3,h4,h5,h6': { fontSize: 'inherit', fontWeight: 'inherit' }, - a: { color: 'inherit', textDecoration: 'inherit' }, - 'button,input,optgroup,select,textarea': { - fontFamily: 'inherit', - fontSize: '100%', - margin: '0', - padding: '0', - lineHeight: 'inherit', - color: 'inherit', - }, - - 'button,select': { textTransform: 'none' }, - '::-moz-focus-inner': { borderStyle: 'none', padding: '0' }, - ':-moz-focusring': { outline: '1px dotted ButtonText' }, - ':-moz-ui-invalid': { boxShadow: 'none' }, - progress: { verticalAlign: 'baseline' }, - '::-webkit-inner-spin-button,::-webkit-outer-spin-button': { height: 'auto' }, - '[type="search"]': { WebkitAppearance: 'textfield', outlineOffset: '-2px' }, - '::-webkit-search-decoration': { WebkitAppearance: 'none' }, - '::-webkit-file-upload-button': { WebkitAppearance: 'button', font: 'inherit' }, - summary: { display: 'list-item' }, - 'abbr[title]': { textDecoration: 'underline dotted' }, - 'b,strong': { fontWeight: 'bolder' }, - 'pre,code,kbd,samp': { - fontFamily: theme2('fontFamily', 'mono', 'ui-monospace,monospace'), - fontSize: '1em', - }, - - 'sub,sup': { - fontSize: '75%', - lineHeight: '0', - position: 'relative', - verticalAlign: 'baseline', - }, - sub: { bottom: '-0.25em' }, - sup: { top: '-0.5em' }, - 'img,svg,video,canvas,audio,iframe,embed,object': { - display: 'block', - verticalAlign: 'middle', - }, - 'img,video': { maxWidth: '100%', height: 'auto' }, -}); - -// src/twind/variants.ts -var coreVariants = { - dark: '@media (prefers-color-scheme:dark)', - sticky: '@supports ((position: -webkit-sticky) or (position:sticky))', - 'motion-reduce': '@media (prefers-reduced-motion:reduce)', - 'motion-safe': '@media (prefers-reduced-motion:no-preference)', - first: '&:first-child', - last: '&:last-child', - even: '&:nth-child(2n)', - odd: '&:nth-child(odd)', - children: '&>*', - siblings: '&~*', - sibling: '&+*', - override: '&&', -}; - -// src/internal/dom.ts -var STYLE_ELEMENT_ID = '__twind'; -var getStyleElement = (nonce) => { - let element = self[STYLE_ELEMENT_ID]; - if (!element) { - element = document.head.appendChild(document.createElement('style')); - element.id = STYLE_ELEMENT_ID; - nonce && (element.nonce = nonce); - element.appendChild(document.createTextNode('')); - } - return element; -}; - -// src/twind/sheets.ts -var cssomSheet = ({ nonce, target = getStyleElement(nonce).sheet } = {}) => { - const offset = target.cssRules.length; - return { - target, - insert: (rule, index) => target.insertRule(rule, offset + index), - }; -}; -var voidSheet = () => ({ - target: null, - insert: noop, -}); - -// src/twind/modes.ts -var mode = (report) => ({ - unknown(section, key = [], optional, context) { - if (!optional) { - this.report({ id: 'UNKNOWN_THEME_VALUE', key: section + '.' + join(key) }, context); - } - }, - report({ id, ...info }) { - return report(`[${id}] ${JSON.stringify(info)}`); - }, -}); - -var warn = /* @__PURE__ */ mode((message) => console.warn(message)); -var strict = /* @__PURE__ */ mode((message) => { - throw new Error(message); -}); -var silent = /* @__PURE__ */ mode(noop); - -// src/twind/prefix.ts -import { - cssPropertyAlias, - cssPropertyPrefixFlags, - cssValuePrefixFlags, -} from './style-vendorizer.mjs'; -var noprefix = (property2, value, important) => - `${property2}:${value}${important ? ' !important' : ''}`; -var autoprefix = (property2, value, important) => { - let cssText = ''; - const propertyAlias = cssPropertyAlias(property2); - if (propertyAlias) cssText += `${noprefix(propertyAlias, value, important)};`; - let flags = cssPropertyPrefixFlags(property2); - if (flags & 1) cssText += `-webkit-${noprefix(property2, value, important)};`; - if (flags & 2) cssText += `-moz-${noprefix(property2, value, important)};`; - if (flags & 4) cssText += `-ms-${noprefix(property2, value, important)};`; - flags = cssValuePrefixFlags(property2, value); - if (flags & 1) cssText += `${noprefix(property2, `-webkit-${value}`, important)};`; - if (flags & 2) cssText += `${noprefix(property2, `-moz-${value}`, important)};`; - if (flags & 4) cssText += `${noprefix(property2, `-ms-${value}`, important)};`; - cssText += noprefix(property2, value, important); - return cssText; -}; - -// src/twind/theme.ts -var ratios = (start, end) => { - const result = {}; - do { - for (let dividend = 1; dividend < start; dividend++) { - result[`${dividend}/${start}`] = Number(((dividend / start) * 100).toFixed(6)) + '%'; - } - } while (++start <= end); - return result; -}; -var exponential = (stop, unit, start = 0) => { - const result = {}; - for (; start <= stop; start = start * 2 || 1) { - result[start] = start + unit; - } - return result; -}; -var linear = (stop, unit = '', divideBy = 1, start = 0, step = 1, result = {}) => { - for (; start <= stop; start += step) { - result[start] = start / divideBy + unit; - } - return result; -}; -var alias2 = (section) => (theme2) => theme2(section); -var themeFactory = (args, { theme: theme2 }) => theme2(...args); -var theme = (...args) => directive(themeFactory, args); -var defaultTheme = { - screens: { - sm: '640px', - md: '768px', - lg: '1024px', - xl: '1280px', - '2xl': '1536px', - }, - - colors: { - transparent: 'transparent', - current: 'currentColor', - black: '#000', - white: '#fff', - gray: { - 50: '#f9fafb', - 100: '#f3f4f6', - 200: '#e5e7eb', - 300: '#d1d5db', - 400: '#9ca3af', - 500: '#6b7280', - 600: '#4b5563', - 700: '#374151', - 800: '#1f2937', - 900: '#111827', - }, - - red: { - 50: '#fef2f2', - 100: '#fee2e2', - 200: '#fecaca', - 300: '#fca5a5', - 400: '#f87171', - 500: '#ef4444', - 600: '#dc2626', - 700: '#b91c1c', - 800: '#991b1b', - 900: '#7f1d1d', - }, - - yellow: { - 50: '#fffbeb', - 100: '#fef3c7', - 200: '#fde68a', - 300: '#fcd34d', - 400: '#fbbf24', - 500: '#f59e0b', - 600: '#d97706', - 700: '#b45309', - 800: '#92400e', - 900: '#78350f', - }, - - green: { - 50: '#ecfdf5', - 100: '#d1fae5', - 200: '#a7f3d0', - 300: '#6ee7b7', - 400: '#34d399', - 500: '#10b981', - 600: '#059669', - 700: '#047857', - 800: '#065f46', - 900: '#064e3b', - }, - - blue: { - 50: '#eff6ff', - 100: '#dbeafe', - 200: '#bfdbfe', - 300: '#93c5fd', - 400: '#60a5fa', - 500: '#3b82f6', - 600: '#2563eb', - 700: '#1d4ed8', - 800: '#1e40af', - 900: '#1e3a8a', - }, - - indigo: { - 50: '#eef2ff', - 100: '#e0e7ff', - 200: '#c7d2fe', - 300: '#a5b4fc', - 400: '#818cf8', - 500: '#6366f1', - 600: '#4f46e5', - 700: '#4338ca', - 800: '#3730a3', - 900: '#312e81', - }, - - purple: { - 50: '#f5f3ff', - 100: '#ede9fe', - 200: '#ddd6fe', - 300: '#c4b5fd', - 400: '#a78bfa', - 500: '#8b5cf6', - 600: '#7c3aed', - 700: '#6d28d9', - 800: '#5b21b6', - 900: '#4c1d95', - }, - - pink: { - 50: '#fdf2f8', - 100: '#fce7f3', - 200: '#fbcfe8', - 300: '#f9a8d4', - 400: '#f472b6', - 500: '#ec4899', - 600: '#db2777', - 700: '#be185d', - 800: '#9d174d', - 900: '#831843', - }, - }, - - spacing: { - px: '1px', - 0: '0px', - .../* @__PURE__ */ linear(4, 'rem', 4, 0.5, 0.5), - .../* @__PURE__ */ linear(12, 'rem', 4, 5), - 14: '3.5rem', - .../* @__PURE__ */ linear(64, 'rem', 4, 16, 4), - 72: '18rem', - 80: '20rem', - 96: '24rem', - }, - - durations: { - 75: '75ms', - 100: '100ms', - 150: '150ms', - 200: '200ms', - 300: '300ms', - 500: '500ms', - 700: '700ms', - 1e3: '1000ms', - }, - - animation: { - none: 'none', - spin: 'spin 1s linear infinite', - ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite', - pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', - bounce: 'bounce 1s infinite', - }, - - backdropBlur: /* @__PURE__ */ alias2('blur'), - backdropBrightness: /* @__PURE__ */ alias2('brightness'), - backdropContrast: /* @__PURE__ */ alias2('contrast'), - backdropGrayscale: /* @__PURE__ */ alias2('grayscale'), - backdropHueRotate: /* @__PURE__ */ alias2('hueRotate'), - backdropInvert: /* @__PURE__ */ alias2('invert'), - backdropOpacity: /* @__PURE__ */ alias2('opacity'), - backdropSaturate: /* @__PURE__ */ alias2('saturate'), - backdropSepia: /* @__PURE__ */ alias2('sepia'), - backgroundColor: /* @__PURE__ */ alias2('colors'), - backgroundImage: { - none: 'none', - }, - - backgroundOpacity: /* @__PURE__ */ alias2('opacity'), - backgroundSize: { - auto: 'auto', - cover: 'cover', - contain: 'contain', - }, - - blur: { - 0: '0', - sm: '4px', - DEFAULT: '8px', - md: '12px', - lg: '16px', - xl: '24px', - '2xl': '40px', - '3xl': '64px', - }, - - brightness: { - .../* @__PURE__ */ linear(200, '', 100, 0, 50), - .../* @__PURE__ */ linear(110, '', 100, 90, 5), - 75: '0.75', - 125: '1.25', - }, - - borderColor: (theme2) => ({ - ...theme2('colors'), - DEFAULT: theme2('colors.gray.200', 'currentColor'), - }), - - borderOpacity: /* @__PURE__ */ alias2('opacity'), - borderRadius: { - none: '0px', - sm: '0.125rem', - DEFAULT: '0.25rem', - md: '0.375rem', - lg: '0.5rem', - xl: '0.75rem', - '2xl': '1rem', - '3xl': '1.5rem', - '1/2': '50%', - full: '9999px', - }, - - borderWidth: { - DEFAULT: '1px', - .../* @__PURE__ */ exponential(8, 'px'), - }, - - boxShadow: { - sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)', - DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)', - md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)', - lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', - xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)', - '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)', - inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)', - none: 'none', - }, - - contrast: { - .../* @__PURE__ */ linear(200, '', 100, 0, 50), - 75: '0.75', - 125: '1.25', - }, - - divideColor: /* @__PURE__ */ alias2('borderColor'), - divideOpacity: /* @__PURE__ */ alias2('borderOpacity'), - divideWidth: /* @__PURE__ */ alias2('borderWidth'), - dropShadow: { - sm: '0 1px 1px rgba(0,0,0,0.05)', - DEFAULT: ['0 1px 2px rgba(0, 0, 0, 0.1)', '0 1px 1px rgba(0, 0, 0, 0.06)'], - md: ['0 4px 3px rgba(0, 0, 0, 0.07)', '0 2px 2px rgba(0, 0, 0, 0.06)'], - lg: ['0 10px 8px rgba(0, 0, 0, 0.04)', '0 4px 3px rgba(0, 0, 0, 0.1)'], - xl: ['0 20px 13px rgba(0, 0, 0, 0.03)', '0 8px 5px rgba(0, 0, 0, 0.08)'], - '2xl': '0 25px 25px rgba(0, 0, 0, 0.15)', - none: '0 0 #0000', - }, - - fill: { current: 'currentColor' }, - grayscale: { - 0: '0', - DEFAULT: '100%', - }, - - hueRotate: { - 0: '0deg', - 15: '15deg', - 30: '30deg', - 60: '60deg', - 90: '90deg', - 180: '180deg', - }, - - invert: { - 0: '0', - DEFAULT: '100%', - }, - - flex: { - 1: '1 1 0%', - auto: '1 1 auto', - initial: '0 1 auto', - none: 'none', - }, - - fontFamily: { - sans: 'ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"'.split( - ',' - ), - serif: 'ui-serif,Georgia,Cambria,"Times New Roman",Times,serif'.split(','), - mono: 'ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'.split( - ',' - ), - }, - - fontSize: { - xs: ['0.75rem', '1rem'], - sm: ['0.875rem', '1.25rem'], - base: ['1rem', '1.5rem'], - lg: ['1.125rem', '1.75rem'], - xl: ['1.25rem', '1.75rem'], - '2xl': ['1.5rem', '2rem'], - '3xl': ['1.875rem', '2.25rem'], - '4xl': ['2.25rem', '2.5rem'], - '5xl': ['3rem', '1'], - '6xl': ['3.75rem', '1'], - '7xl': ['4.5rem', '1'], - '8xl': ['6rem', '1'], - '9xl': ['8rem', '1'], - }, - - fontWeight: { - thin: '100', - extralight: '200', - light: '300', - normal: '400', - medium: '500', - semibold: '600', - bold: '700', - extrabold: '800', - black: '900', - }, - - gridTemplateColumns: {}, - gridTemplateRows: {}, - gridAutoColumns: { - min: 'min-content', - max: 'max-content', - fr: 'minmax(0,1fr)', - }, - - gridAutoRows: { - min: 'min-content', - max: 'max-content', - fr: 'minmax(0,1fr)', - }, - - gridColumn: { - auto: 'auto', - 'span-full': '1 / -1', - }, - - gridRow: { - auto: 'auto', - 'span-full': '1 / -1', - }, - - gap: /* @__PURE__ */ alias2('spacing'), - gradientColorStops: /* @__PURE__ */ alias2('colors'), - height: (theme2) => ({ - auto: 'auto', - ...theme2('spacing'), - ...ratios(2, 6), - full: '100%', - screen: '100vh', - }), - - inset: (theme2) => ({ - auto: 'auto', - ...theme2('spacing'), - ...ratios(2, 4), - full: '100%', - }), - - keyframes: { - spin: { - from: { - transform: 'rotate(0deg)', - }, - - to: { - transform: 'rotate(360deg)', - }, - }, - - ping: { - '0%': { - transform: 'scale(1)', - opacity: '1', - }, - - '75%,100%': { - transform: 'scale(2)', - opacity: '0', - }, - }, - - pulse: { - '0%,100%': { - opacity: '1', - }, - - '50%': { - opacity: '.5', - }, - }, - - bounce: { - '0%, 100%': { - transform: 'translateY(-25%)', - animationTimingFunction: 'cubic-bezier(0.8,0,1,1)', - }, - - '50%': { - transform: 'none', - animationTimingFunction: 'cubic-bezier(0,0,0.2,1)', - }, - }, - }, - - letterSpacing: { - tighter: '-0.05em', - tight: '-0.025em', - normal: '0em', - wide: '0.025em', - wider: '0.05em', - widest: '0.1em', - }, - - lineHeight: { - none: '1', - tight: '1.25', - snug: '1.375', - normal: '1.5', - relaxed: '1.625', - loose: '2', - .../* @__PURE__ */ linear(10, 'rem', 4, 3), - }, - - margin: (theme2) => ({ - auto: 'auto', - ...theme2('spacing'), - }), - - maxHeight: (theme2) => ({ - ...theme2('spacing'), - full: '100%', - screen: '100vh', - }), - - maxWidth: (theme2, { breakpoints }) => ({ - none: 'none', - 0: '0rem', - xs: '20rem', - sm: '24rem', - md: '28rem', - lg: '32rem', - xl: '36rem', - '2xl': '42rem', - '3xl': '48rem', - '4xl': '56rem', - '5xl': '64rem', - '6xl': '72rem', - '7xl': '80rem', - full: '100%', - min: 'min-content', - max: 'max-content', - prose: '65ch', - ...breakpoints(theme2('screens')), - }), - - minHeight: { - 0: '0px', - full: '100%', - screen: '100vh', - }, - - minWidth: { - 0: '0px', - full: '100%', - min: 'min-content', - max: 'max-content', - }, - - opacity: { - .../* @__PURE__ */ linear(100, '', 100, 0, 10), - 5: '0.05', - 25: '0.25', - 75: '0.75', - 95: '0.95', - }, - - order: { - first: '-9999', - last: '9999', - none: '0', - .../* @__PURE__ */ linear(12, '', 1, 1), - }, - - outline: { - none: ['2px solid transparent', '2px'], - white: ['2px dotted white', '2px'], - black: ['2px dotted black', '2px'], - }, - - padding: /* @__PURE__ */ alias2('spacing'), - placeholderColor: /* @__PURE__ */ alias2('colors'), - placeholderOpacity: /* @__PURE__ */ alias2('opacity'), - ringColor: (theme2) => ({ - DEFAULT: theme2('colors.blue.500', '#3b82f6'), - ...theme2('colors'), - }), - - ringOffsetColor: /* @__PURE__ */ alias2('colors'), - ringOffsetWidth: /* @__PURE__ */ exponential(8, 'px'), - ringOpacity: (theme2) => ({ - DEFAULT: '0.5', - ...theme2('opacity'), - }), - - ringWidth: { - DEFAULT: '3px', - .../* @__PURE__ */ exponential(8, 'px'), - }, - - rotate: { - .../* @__PURE__ */ exponential(2, 'deg'), - .../* @__PURE__ */ exponential(12, 'deg', 3), - .../* @__PURE__ */ exponential(180, 'deg', 45), - }, - - saturate: /* @__PURE__ */ linear(200, '', 100, 0, 50), - scale: { - .../* @__PURE__ */ linear(150, '', 100, 0, 50), - .../* @__PURE__ */ linear(110, '', 100, 90, 5), - 75: '0.75', - 125: '1.25', - }, - - sepia: { - 0: '0', - DEFAULT: '100%', - }, - - skew: { - .../* @__PURE__ */ exponential(2, 'deg'), - .../* @__PURE__ */ exponential(12, 'deg', 3), - }, - - space: /* @__PURE__ */ alias2('spacing'), - stroke: { - current: 'currentColor', - }, - - strokeWidth: /* @__PURE__ */ linear(2), - textColor: /* @__PURE__ */ alias2('colors'), - textOpacity: /* @__PURE__ */ alias2('opacity'), - transitionDuration: (theme2) => ({ - DEFAULT: '150ms', - ...theme2('durations'), - }), - - transitionDelay: /* @__PURE__ */ alias2('durations'), - transitionProperty: { - none: 'none', - all: 'all', - DEFAULT: - 'background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter', - colors: 'background-color,border-color,color,fill,stroke', - opacity: 'opacity', - shadow: 'box-shadow', - transform: 'transform', - }, - - transitionTimingFunction: { - DEFAULT: 'cubic-bezier(0.4,0,0.2,1)', - linear: 'linear', - in: 'cubic-bezier(0.4,0,1,1)', - out: 'cubic-bezier(0,0,0.2,1)', - 'in-out': 'cubic-bezier(0.4,0,0.2,1)', - }, - - translate: (theme2) => ({ - ...theme2('spacing'), - ...ratios(2, 4), - full: '100%', - }), - - width: (theme2) => ({ - auto: 'auto', - ...theme2('spacing'), - ...ratios(2, 6), - ...ratios(12, 12), - screen: '100vw', - full: '100%', - min: 'min-content', - max: 'max-content', - }), - - zIndex: { - auto: 'auto', - .../* @__PURE__ */ linear(50, '', 1, 0, 10), - }, -}; - -var flattenColorPalette = (colors, target = {}, prefix = []) => { - Object.keys(colors).forEach((property2) => { - const value = colors[property2]; - if (property2 == 'DEFAULT') { - target[join(prefix)] = value; - target[join(prefix, '.')] = value; - } - const key = [...prefix, property2]; - target[join(key)] = value; - target[join(key, '.')] = value; - if (value && typeof value == 'object') { - flattenColorPalette(value, target, key); - } - }, target); - return target; -}; -var resolveContext = { - negative: () => ({}), - breakpoints: (screens) => - Object.keys(screens) - .filter((key) => typeof screens[key] == 'string') - .reduce((target, key) => { - target['screen-' + key] = screens[key]; - return target; - }, {}), -}; - -var handleArbitraryValues = (section, key) => - (key = key[0] == '[' && key.slice(-1) == ']' && key.slice(1, -1)) && - includes(section, 'olor') == /^(#|(hsl|rgb)a?\(|[a-z]+$)/.test(key) && - (includes(key, 'calc(') - ? key.replace( - /(-?\d*\.?\d(?!\b-.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g, - '$1 $2 ' - ) - : key); -var makeThemeResolver = (config) => { - const cache = new Map(); - const theme2 = { ...defaultTheme, ...config }; - const deref = (theme3, section) => { - const base = theme3 && theme3[section]; - const value = typeof base == 'function' ? base(resolve, resolveContext) : base; - return value && section == 'colors' ? flattenColorPalette(value) : value; - }; - const resolve = (section, key, defaultValue) => { - const keypath = section.split('.'); - section = keypath[0]; - if (keypath.length > 1) { - defaultValue = key; - key = join(tail(keypath), '.'); - } - let base = cache.get(section); - if (!base) { - cache.set(section, (base = { ...deref(theme2, section) })); - Object.assign(base, deref(theme2.extend, section)); - } - if (key != null) { - key = (Array.isArray(key) ? join(key) : key) || 'DEFAULT'; - const value = handleArbitraryValues(section, key) || base[key]; - return value == null - ? defaultValue - : Array.isArray(value) && !includes(['fontSize', 'outline', 'dropShadow'], section) - ? join(value, ',') - : value; - } - return base; - }; - return resolve; -}; - -// src/twind/translate.ts -var translate = (plugins, context) => (rule, isTranslating) => { - if (typeof rule.d == 'function') { - return rule.d(context); - } - const parameters = rule.d.split(/-(?![^[]*])/g); - if (!isTranslating && parameters[0] == 'tw' && rule.$ == rule.d) { - return rule.$; - } - for (let index = parameters.length; index; index--) { - const id = join(parameters.slice(0, index)); - const plugin = plugins[id]; - if (plugin) { - return typeof plugin == 'function' - ? plugin(tail(parameters, index), context, id) - : typeof plugin == 'string' - ? context[isTranslating ? 'css' : 'tw'](plugin) - : plugin; - } - } -}; - -// src/twind/decorate.ts -var _2; -var GROUP_RE = /^:(group(?:(?!-focus).+?)*)-(.+)$/; -var NOT_PREFIX_RE = /^(:not)-(.+)/; -var prepareVariantSelector = (variant) => (variant[1] == '[' ? tail(variant) : variant); -var decorate = (darkMode, variants, { theme: theme2, tag }) => { - const applyVariant = (translation, variant) => { - if ((_2 = theme2('screens', tail(variant), ''))) { - return { [buildMediaQuery(_2)]: translation }; - } - if (variant == ':dark' && darkMode == 'class') { - return { '.dark &': translation }; - } - if ((_2 = GROUP_RE.exec(variant))) { - return { [`.${escape(tag(_2[1]))}:${_2[2]} &`]: translation }; - } - return { - [variants[tail(variant)] || - '&' + - variant.replace( - NOT_PREFIX_RE, - (_4, not, variant2) => not + '(' + prepareVariantSelector(':' + variant2) + ')' - )]: translation, - }; - }; - return (translation, rule) => rule.v.reduceRight(applyVariant, translation); -}; - -// src/twind/presedence.ts -var _3; -var responsivePrecedence = (css) => - (((_3 = /(?:^|min-width: *)(\d+(?:.\d+)?)(p)?/.exec(css)) - ? +_3[1] / (_3[2] ? 15 : 1) / 10 - : 0) & - 31) << - 22; -var seperatorPrecedence = (string) => { - _3 = 0; - for (let index = string.length; index--; ) { - _3 += includes('-:,', string[index]); - } - return _3; -}; -var atRulePresedence = (css) => (seperatorPrecedence(css) & 15) << 18; -var PRECEDENCES_BY_PSEUDO_CLASS = [ - 'rst', - 'st', - 'en', - 'd', - 'nk', - 'sited', - 'pty', - 'ecked', - 'cus-w', - 'ver', - 'cus', - 'cus-v', - 'tive', - 'sable', - 'ad-on', - 'tiona', - 'quire', -]; - -var pseudoPrecedence = (pseudoClass) => - 1 << - (~(_3 = PRECEDENCES_BY_PSEUDO_CLASS.indexOf( - pseudoClass.replace(GROUP_RE, ':$2').slice(3, 8) - )) - ? _3 - : 17); -var makeVariantPresedenceCalculator = (theme2, variants) => (presedence, variant) => - presedence | - ((_3 = theme2('screens', tail(variant), '')) - ? (1 << 27) | responsivePrecedence(buildMediaQuery(_3)) - : variant == ':dark' - ? 1 << 30 - : (_3 = variants[variant] || variant.replace(NOT_PREFIX_RE, ':$2'))[0] == '@' - ? atRulePresedence(_3) - : pseudoPrecedence(variant)); -var declarationPropertyPrecedence = (property2) => - property2[0] == '-' - ? 0 - : seperatorPrecedence(property2) + - ((_3 = /^(?:(border-(?!w|c|sty)|[tlbr].{2,4}m?$|c.{7}$)|([fl].{5}l|g.{8}$|pl))/.exec( - property2 - )) - ? +!!_3[1] || -!!_3[2] - : 0) + - 1; - -// src/twind/serialize.ts -var stringifyBlock = (body, selector) => selector + '{' + body + '}'; -var serialize = (prefix, variants, context) => { - const { theme: theme2, tag } = context; - const tagVar = (_4, property2) => '--' + tag(property2); - const tagVars = (value) => `${value}`.replace(/--(tw-[\w-]+)\b/g, tagVar); - const stringifyDeclaration = (property2, value, important) => { - property2 = tagVars(property2); - return Array.isArray(value) - ? join( - value.filter(Boolean).map((value2) => prefix(property2, tagVars(value2), important)), - ';' - ) - : prefix(property2, tagVars(value), important); - }; - let rules2; - const stringify3 = (atRules, selector, presedence, css, important) => { - if (Array.isArray(css)) { - css.forEach( - (css2) => css2 && stringify3(atRules, selector, presedence, css2, important) - ); - return; - } - let declarations = ''; - let maxPropertyPresedence = 0; - let numberOfDeclarations = 0; - if (css['@apply']) { - css = merge( - evalThunk(apply(css['@apply']), context), - { ...css, '@apply': void 0 }, - context - ); - } - Object.keys(css).forEach((key) => { - const value = evalThunk(css[key], context); - if (isCSSProperty(key, value)) { - if (value !== '' && key.length > 1) { - const property2 = hyphenate(key); - numberOfDeclarations += 1; - maxPropertyPresedence = Math.max( - maxPropertyPresedence, - declarationPropertyPrecedence(property2) - ); - declarations = - (declarations && declarations + ';') + - stringifyDeclaration(property2, value, important); - } - } else if (value) { - if (key == ':global') { - key = '@global'; - } - if (key[0] == '@') { - if (key[1] == 'g') { - stringify3([], '', 0, value, important); - } else if (key[1] == 'f') { - stringify3([], key, 0, value, important); - } else if (key[1] == 'k') { - const currentSize = rules2.length; - stringify3([], '', 0, value, important); - const waypoints = rules2.splice(currentSize, rules2.length - currentSize); - rules2.push({ - r: stringifyBlock( - join( - waypoints.map((p) => p.r), - '' - ), - key - ), - p: waypoints.reduce((sum, p) => sum + p.p, 0), - }); - } else if (key[1] == 'i') { - (Array.isArray(value) ? value : [value]).forEach( - (value2) => value2 && rules2.push({ p: 0, r: `${key} ${value2};` }) - ); - } else { - if (key[2] == 'c') { - key = buildMediaQuery(context.theme('screens', tail(key, 8).trim())); - } - stringify3( - [...atRules, key], - selector, - presedence | responsivePrecedence(key) | atRulePresedence(key), - value, - important - ); - } - } else { - stringify3( - atRules, - selector - ? join( - selector.split(/,(?![^[]*])/g).map((selectorPart) => - join( - key - .split(/,(?![^[]*])/g) - .map((keyPart) => - includes(keyPart, '&') - ? keyPart.replace(/&/g, selectorPart) - : (selectorPart && selectorPart + ' ') + keyPart - ), - ',' - ) - ), - ',' - ) - : key, - presedence, - value, - important - ); - } - } - }); - if (numberOfDeclarations) { - rules2.push({ - r: atRules.reduceRight(stringifyBlock, stringifyBlock(declarations, selector)), - p: - presedence * (1 << 8) + - (((Math.max(0, 15 - numberOfDeclarations) & 15) << 4) | - ((maxPropertyPresedence || 15) & 15)), - }); - } - }; - const variantPresedence = makeVariantPresedenceCalculator(theme2, variants); - return (css, className, rule, layer = 0) => { - layer <<= 28; - rules2 = []; - stringify3( - [], - className ? '.' + escape(className) : '', - rule ? rule.v.reduceRight(variantPresedence, layer) : layer, - css, - rule && rule.i - ); - return rules2; - }; -}; - -// src/twind/inject.ts -var inject = (sheet, mode2, init, context) => { - let sortedPrecedences; - init((value = []) => (sortedPrecedences = value)); - let insertedRules; - init((value = new Set()) => (insertedRules = value)); - return ({ r: css, p: presedence }) => { - if (!insertedRules.has(css)) { - insertedRules.add(css); - const index = sortedInsertionIndex(sortedPrecedences, presedence); - try { - sheet.insert(css, index); - sortedPrecedences.splice(index, 0, presedence); - } catch (error) { - if (!/:-[mwo]/.test(css)) { - mode2.report({ id: 'INJECT_CSS_ERROR', css, error }, context); - } - } - } - }; -}; - -// src/twind/configure.ts -var sanitize = (value, defaultValue, disabled, enabled = defaultValue) => - value === false ? disabled : value === true ? enabled : value || defaultValue; -var loadMode = (mode2) => - (typeof mode2 == 'string' ? { t: strict, a: warn, i: silent }[mode2[1]] : mode2) || warn; -var stringifyVariant = (selector, variant) => - selector + (variant[1] == ':' ? tail(variant, 2) + ':' : tail(variant)) + ':'; -var stringify2 = (rule, directive2 = rule.d) => - typeof directive2 == 'function' - ? '' - : rule.v.reduce(stringifyVariant, '') + - (rule.i ? '!' : '') + - (rule.n ? '-' : '') + - directive2; -var COMPONENT_PROPS = { _: { value: '', writable: true } }; -var configure = (config = {}) => { - const theme2 = makeThemeResolver(config.theme); - const mode2 = loadMode(config.mode); - const hash = sanitize(config.hash, false, false, cyrb32); - const important = config.important; - let activeRule = { v: [] }; - let translateDepth = 0; - const lastTranslations = []; - const context = { - tw: (...tokens) => process(tokens), - theme: (section, key, defaultValue) => { - var _a; - const value = - (_a = theme2(section, key, defaultValue)) != null - ? _a - : mode2.unknown( - section, - key == null || Array.isArray(key) ? key : key.split('.'), - defaultValue != null, - context - ); - return activeRule.n && value && includes('rg', (typeof value)[5]) - ? `calc(${value} * -1)` - : value; - }, - tag: (value) => (hash ? hash(value) : value), - css: (rules2) => { - translateDepth++; - const lastTranslationsIndex = lastTranslations.length; - try { - (typeof rules2 == 'string' ? parse([rules2]) : rules2).forEach(convert); - const css = Object.create(null, COMPONENT_PROPS); - for (let index = lastTranslationsIndex; index < lastTranslations.length; index++) { - const translation = lastTranslations[index]; - if (translation) { - switch (typeof translation) { - case 'object': - merge(css, translation, context); - break; - case 'string': - css._ += (css._ && ' ') + translation; - } - } - } - return css; - } finally { - lastTranslations.length = lastTranslationsIndex; - translateDepth--; - } - }, - }; - - const translate2 = translate({ ...corePlugins, ...config.plugins }, context); - const doTranslate = (rule) => { - const parentRule = activeRule; - activeRule = rule; - try { - return evalThunk(translate2(rule), context); - } finally { - activeRule = parentRule; - } - }; - const variants = { ...coreVariants, ...config.variants }; - const decorate2 = decorate(config.darkMode || 'media', variants, context); - const serialize2 = serialize( - sanitize(config.prefix, autoprefix, noprefix), - variants, - context - ); - const sheet = - config.sheet || (typeof window == 'undefined' ? voidSheet() : cssomSheet(config)); - const { init = (callback) => callback() } = sheet; - const inject2 = inject(sheet, mode2, init, context); - let idToClassName; - init((value = new Map()) => (idToClassName = value)); - const inlineDirectiveName = new WeakMap(); - const evaluateFunctions = (key, value) => - key == '_' - ? void 0 - : typeof value == 'function' - ? JSON.stringify(evalThunk(value, context), evaluateFunctions) - : value; - const convert = (rule) => { - if (!translateDepth && activeRule.v.length) { - rule = { ...rule, v: [...activeRule.v, ...rule.v], $: '' }; - } - if (!rule.$) { - rule.$ = stringify2(rule, inlineDirectiveName.get(rule.d)); - } - let className = translateDepth ? null : idToClassName.get(rule.$); - if (className == null) { - let translation = doTranslate(rule); - if (!rule.$) { - rule.$ = cyrb32(JSON.stringify(translation, evaluateFunctions)); - inlineDirectiveName.set(rule.d, rule.$); - rule.$ = stringify2(rule, rule.$); - } - if (translation && typeof translation == 'object') { - rule.v = rule.v.map(prepareVariantSelector); - if (important) rule.i = important; - translation = decorate2(translation, rule); - if (translateDepth) { - lastTranslations.push(translation); - } else { - const layer = - typeof rule.d == 'function' ? (typeof translation._ == 'string' ? 1 : 3) : 2; - className = - hash || typeof rule.d == 'function' ? (hash || cyrb32)(layer + rule.$) : rule.$; - serialize2(translation, className, rule, layer).forEach(inject2); - if (translation._) { - className += ' ' + translation._; - } - } - } else { - if (typeof translation == 'string') { - className = translation; - } else { - className = rule.$; - mode2.report({ id: 'UNKNOWN_DIRECTIVE', rule: className }, context); - } - if (translateDepth && typeof rule.d !== 'function') { - lastTranslations.push(className); - } - } - if (!translateDepth) { - idToClassName.set(rule.$, className); - ensureMaxSize(idToClassName, 3e4); - } - } - return className; - }; - const process = (tokens) => join(parse(tokens).map(convert).filter(Boolean), ' '); - const preflight = sanitize(config.preflight, identity, false); - if (preflight) { - const css = createPreflight(theme2); - const styles = serialize2( - typeof preflight == 'function' - ? evalThunk(preflight(css, context), context) || css - : { ...css, ...preflight } - ); - init((injected = (styles.forEach(inject2), true)) => injected); - } - return { - init: () => mode2.report({ id: 'LATE_SETUP_CALL' }, context), - process, - }; -}; - -// src/twind/instance.ts -var create = (config) => { - let process = (tokens) => { - init(); - return process(tokens); - }; - let init = (config2) => { - ({ process, init } = configure(config2)); - }; - if (config) init(config); - let context; - const fromContext = (key) => () => { - if (!context) { - process([ - (_4) => { - context = _4; - return ''; - }, - ]); - } - return context[key]; - }; - return { - tw: Object.defineProperties((...tokens) => process(tokens), { - theme: { - get: fromContext('theme'), - }, - }), - - setup: (config2) => init(config2), - }; -}; - -// src/twind/default.ts -var { tw, setup } = /* @__PURE__ */ create(); -export { - apply, - autoprefix, - create, - cssomSheet, - directive, - cyrb32 as hash, - mode, - noprefix, - setup, - silent, - strict, - theme, - tw, - voidSheet, - warn, -}; From f5173b6bf0a4cabbbe42ff1a3b6a08a51a13bf74 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 21:32:31 +1100 Subject: [PATCH 004/179] add update submodules workflow --- .github/workflows/submodules.yml | 20 ++++++++++++++++++++ .gitmodules | 4 ++++ dep | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/submodules.yml diff --git a/.github/workflows/submodules.yml b/.github/workflows/submodules.yml new file mode 100644 index 0000000..463aa5e --- /dev/null +++ b/.github/workflows/submodules.yml @@ -0,0 +1,20 @@ +name: 'update submodules' + +on: + workflow_dispatch: + +jobs: + sync: + name: 'update submodules' + runs-on: ubuntu-latest + steps: + - name: checkout repo + uses: actions/checkout@v2 + with: + submodules: true + - name: pull updates + run: | + git pull --recurse-submodules + git submodule update --remote --recursive + - name: commit changes + uses: stefanzweifel/git-auto-commit-action@v4 diff --git a/.gitmodules b/.gitmodules index eb813ff..5786be6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,12 +1,16 @@ [submodule "api"] path = api url = git@github.com:notion-enhancer/api.git + branch = dev [submodule "repo"] path = repo url = git@github.com:notion-enhancer/repo.git + branch = dev [submodule "media"] path = media url = git@github.com:notion-enhancer/media.git + branch = main [submodule "dep"] path = dep url = git@github.com:notion-enhancer/dep.git + branch = main diff --git a/dep b/dep index 8c9dca0..6c21847 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 8c9dca0c84ecc0120537da6d74b45c3f74b8768a +Subproject commit 6c2184738964a477246cc06b47567d692982797d From bb794a186cf408d9aa1d408ae1a39a32d2a3dfe6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 11:35:10 +0000 Subject: [PATCH 005/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6982568..d77061e 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6982568a113331e55ddf1731aa43118badb07493 +Subproject commit d77061e86c03318cd6f3c302f1a1b1213cf5318c From 579674b4761f45155588e51e45b589c25eb6a6a8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 11:43:21 +0000 Subject: [PATCH 006/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index d77061e..b482b41 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit d77061e86c03318cd6f3c302f1a1b1213cf5318c +Subproject commit b482b41ec95c21a9943389cd1011f2a81c515d48 From 60e9630aee932a719bda3a2e37375d8379055d03 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:00:14 +0000 Subject: [PATCH 007/179] update submodule: api --- api | 2 +- dep | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api b/api index 5030fe2..a62891b 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 5030fe2b0fd71b397796b055934ec50f7e909a5c +Subproject commit a62891b464621877778132b4c8575c069aaf9d44 diff --git a/dep b/dep index 6c21847..a45e0a5 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 6c2184738964a477246cc06b47567d692982797d +Subproject commit a45e0a589bc7d03d2d3fdb63b39185f76bab6406 From f6fdfbfaaecd465d0900fd437d90b79aa5a298de Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:05:28 +0000 Subject: [PATCH 008/179] update submodule: media --- media | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media b/media index 97e6743..f889f0a 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 97e6743f192f510959123c3332976d2d9522d686 +Subproject commit f889f0ae0693c8118e511bc8afb75c77d7a79e40 From 32ac7b6c4f402d83e947a0457978fa2cc23e19ec Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:06:31 +0000 Subject: [PATCH 009/179] update submodule: media --- media | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media b/media index f889f0a..2004df4 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit f889f0ae0693c8118e511bc8afb75c77d7a79e40 +Subproject commit 2004df482fdbb93560d115474c28a330fa447b01 From 213815d0aa7a0a4bb5e5369cdd8909f7d4216ff3 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:06:59 +0000 Subject: [PATCH 010/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index b482b41..707c875 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit b482b41ec95c21a9943389cd1011f2a81c515d48 +Subproject commit 707c875f22600c0a1dc6109798336e95eba096ec From 2adb2a642ae6d9425825c9e6f50c237cb3ffeeaf Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:07:35 +0000 Subject: [PATCH 011/179] update submodule: dep --- dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dep b/dep index a45e0a5..918799f 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit a45e0a589bc7d03d2d3fdb63b39185f76bab6406 +Subproject commit 918799fc82281fd6b0af079db9ee34d0e4f641ee From 04481bfb90084e709136fc6ec89b2d4c377327d8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:08:05 +0000 Subject: [PATCH 012/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index a62891b..da34382 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit a62891b464621877778132b4c8575c069aaf9d44 +Subproject commit da34382bc0776d478b7aa7957326d941f834562f From 62c1187f6144fa21dee62e61e4086a3b1231437c Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 3 Oct 2021 12:55:41 +0000 Subject: [PATCH 013/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 707c875..8eed6c1 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 707c875f22600c0a1dc6109798336e95eba096ec +Subproject commit 8eed6c173fa5540d97fe72dae86c15a2e906dc67 From 64c93cf21cf1d7892eb90e701915053b67e250ed Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 07:32:38 +0000 Subject: [PATCH 014/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index da34382..af3d8af 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit da34382bc0776d478b7aa7957326d941f834562f +Subproject commit af3d8afe72d74d87a45f3ee7030fb4e254831f6a From 7f4a800b3c183870a96081a0d7ede695d971e126 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 07:35:52 +0000 Subject: [PATCH 015/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index af3d8af..bc565f6 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit af3d8afe72d74d87a45f3ee7030fb4e254831f6a +Subproject commit bc565f608d89ad662e33827adf37bdbee1f3d188 From 1fe1017add070443e5383d5abde27b1dfe9b491a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 07:40:24 +0000 Subject: [PATCH 016/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index bc565f6..e11c4f5 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit bc565f608d89ad662e33827adf37bdbee1f3d188 +Subproject commit e11c4f5e117c7874eecec950001b539416cfbe06 From 9560e9a15c7a3ad192a70a24128bbb7329c1e4f3 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 22:10:41 +1100 Subject: [PATCH 017/179] more reliable launcher check --- launcher.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/launcher.js b/launcher.js index 730ba8f..6b7b018 100644 --- a/launcher.js +++ b/launcher.js @@ -7,12 +7,12 @@ 'use strict'; (async () => { - if (location.pathname === '/') await new Promise((res, rej) => setTimeout(res, 500)); - const site = location.host.endsWith('.notion.site'), - page = location.pathname.split(/[/-]/g).reverse()[0].length === 32; + page = location.pathname.split(/[/-]/g).reverse()[0].length === 32, + root = location.pathname === '/', + signedIn = localStorage['LRU:KeyValueStore2:current-user-id']; - if (site || page) { + if (site || page || (root && signedIn)) { import(chrome.runtime.getURL('api/_.mjs')).then(async (api) => { const { fs, registry, web } = api; for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { From b7579f88d06addcdaaa9434943bca8342e83aa15 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 11:45:18 +0000 Subject: [PATCH 018/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 8eed6c1..391f522 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 8eed6c173fa5540d97fe72dae86c15a2e906dc67 +Subproject commit 391f52212ee00601c9f8a3b56429d59e21e94fe2 From 9acba942105369584daf2cb839fd700162f1b2ab Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 13:04:13 +0000 Subject: [PATCH 019/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 391f522..b6bd77c 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 391f52212ee00601c9f8a3b56429d59e21e94fe2 +Subproject commit b6bd77c2967fc142c39fe6124715575db6ed7706 From 6d021353e5a4230457264822e306c548c673e0c5 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 4 Oct 2021 13:05:11 +0000 Subject: [PATCH 020/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index e11c4f5..f6d7879 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit e11c4f5e117c7874eecec950001b539416cfbe06 +Subproject commit f6d7879b98d20653a91708b8c8dd03a33d6a54df From 9ad6cf3f1d06e3df81b6933e728c921679f8a7bf Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 5 Oct 2021 00:09:39 +1100 Subject: [PATCH 021/179] more robust storage path handling --- env/storage.mjs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/env/storage.mjs b/env/storage.mjs index 91674f2..132f2f7 100644 --- a/env/storage.mjs +++ b/env/storage.mjs @@ -21,6 +21,7 @@ const _queue = [], * @returns {Promise} value ?? fallback */ export const get = (path, fallback = undefined) => { + if (typeof path === 'string') path = [path]; if (!path.length) return fallback; return new Promise((res, rej) => chrome.storage.local.get(async (values) => { @@ -44,6 +45,7 @@ export const get = (path, fallback = undefined) => { * @returns {Promise} resolves when data has been saved */ export const set = (path, value) => { + if (typeof path === 'string') path = [path]; if (!path.length) return undefined; const precursor = _queue[_queue.length - 1] || undefined, interaction = new Promise(async (res, rej) => { @@ -86,6 +88,7 @@ export const set = (path, value) => { * @returns {object} an object with the wrapped get/set functions */ export const db = (namespace, getFunc = get, setFunc = set) => { + if (typeof namespace === 'string') namespace = [namespace]; return { get: (path = [], fallback = undefined) => getFunc([...namespace, ...path], fallback), set: (path, value) => setFunc([...namespace, ...path], value), From db21f4b9fa201693420240cba3c975ef95a8195f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 06:06:49 +0000 Subject: [PATCH 022/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index b6bd77c..260a173 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit b6bd77c2967fc142c39fe6124715575db6ed7706 +Subproject commit 260a173eaa3500700f973e62c266bd96e1b7ea55 From d23a004a915a917bdf199c930c47c6085780d147 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 06:55:54 +0000 Subject: [PATCH 023/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 260a173..79c4595 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 260a173eaa3500700f973e62c266bd96e1b7ea55 +Subproject commit 79c459577a2f7d8ac46da1cb26de0997a7b82604 From 5a725ba215f64d8f2e62ad25de1f50bd35b61274 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 07:00:22 +0000 Subject: [PATCH 024/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 79c4595..30d57bb 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 79c459577a2f7d8ac46da1cb26de0997a7b82604 +Subproject commit 30d57bb47567fa5c5b558519561d8c0b5ffb94cb From a4623d6147c6cc12eda028610d1384e183c3f9b9 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 09:37:49 +0000 Subject: [PATCH 025/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 30d57bb..3210319 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 30d57bb47567fa5c5b558519561d8c0b5ffb94cb +Subproject commit 32103192569f55f09fc2628d6f823964c7deae39 From a5ecc0eb99a8b03a98f9d6882805ed9e53b329a2 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 10:56:36 +0000 Subject: [PATCH 026/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 3210319..ab76af0 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 32103192569f55f09fc2628d6f823964c7deae39 +Subproject commit ab76af013bb311585ebe69858308569f2daae83a From cb6cd4e5a8d0bb86577b0d5ad6e3cae3f7b732fe Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 21:57:28 +1100 Subject: [PATCH 027/179] apply on onboarding page --- launcher.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/launcher.js b/launcher.js index 6b7b018..8398839 100644 --- a/launcher.js +++ b/launcher.js @@ -9,10 +9,10 @@ (async () => { const site = location.host.endsWith('.notion.site'), page = location.pathname.split(/[/-]/g).reverse()[0].length === 32, - root = location.pathname === '/', + whitelisted = ['/', '/onboarding'].includes(location.pathname), signedIn = localStorage['LRU:KeyValueStore2:current-user-id']; - if (site || page || (root && signedIn)) { + if (site || page || (whitelisted && signedIn)) { import(chrome.runtime.getURL('api/_.mjs')).then(async (api) => { const { fs, registry, web } = api; for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { From 1f79c27f91c0ffe881ee319e9b48e24a017aa30d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 6 Oct 2021 12:03:16 +0000 Subject: [PATCH 028/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index ab76af0..6c74f29 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit ab76af013bb311585ebe69858308569f2daae83a +Subproject commit 6c74f29b609cd722686c47ceaa392535a6703281 From 5d9d410b6488aa8a82cf3e71f9c5f6b3eaa63c00 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 7 Oct 2021 11:36:53 +0000 Subject: [PATCH 029/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6c74f29..7878160 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6c74f29b609cd722686c47ceaa392535a6703281 +Subproject commit 787816010172406cf84b40fb88566ab89dcc3bbe From 554ac3dad00bbca0511da57499466e931cd962ed Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 7 Oct 2021 12:07:39 +0000 Subject: [PATCH 030/179] update submodule: repo --- api | 2 +- repo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api b/api index f6d7879..944ca18 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit f6d7879b98d20653a91708b8c8dd03a33d6a54df +Subproject commit 944ca182ef6f0a983deff80a6f88c9ee570d8a84 diff --git a/repo b/repo index 7878160..6ba77da 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 787816010172406cf84b40fb88566ab89dcc3bbe +Subproject commit 6ba77da39558bcf39a5535b46cdbf040f6eb1fc0 From 7252688fce06ba9c72fe1c70c417d16b78a164cf Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 01:29:12 +0000 Subject: [PATCH 031/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6ba77da..73b4c65 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6ba77da39558bcf39a5535b46cdbf040f6eb1fc0 +Subproject commit 73b4c65948eb26d8f1f00d0ccdb9447ab05db059 From 38838b9b770d7285c22832e3dc38901d5577f79d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 12:31:18 +1100 Subject: [PATCH 032/179] remove id from path to menu --- manifest.json | 2 +- worker.js | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/manifest.json b/manifest.json index 698dd0e..4b8c8a3 100644 --- a/manifest.json +++ b/manifest.json @@ -16,7 +16,7 @@ "browser_action": {}, "background": { "scripts": ["worker.js"] }, "options_ui": { - "page": "repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html", + "page": "repo/menu/menu.html", "open_in_tab": true }, "web_accessible_resources": ["env/*", "api/*", "dep/*", "media/*", "repo/*"], diff --git a/worker.js b/worker.js index 0ec184d..0381e09 100644 --- a/worker.js +++ b/worker.js @@ -8,9 +8,7 @@ async function focusMenu() { chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT }, (tabs) => { - const url = chrome.runtime.getURL( - 'repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html' - ), + const url = chrome.runtime.getURL('repo/menu/menu.html'), menu = tabs.find((tab) => tab.url.startsWith(url)); if (menu) { chrome.tabs.highlight({ 'tabs': menu.index }); @@ -34,9 +32,7 @@ async function focusNotion() { async function reload() { chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT }, (tabs) => { - const menu = chrome.runtime.getURL( - 'repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.html' - ); + const menu = chrome.runtime.getURL('repo/menu/menu.html'); tabs.forEach((tab) => { const url = new URL(tab.url), matches = From cdbe60c01c72eb5157ba35ea5721eba77b7ef78b Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 02:31:14 +0000 Subject: [PATCH 033/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 73b4c65..3981bc6 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 73b4c65948eb26d8f1f00d0ccdb9447ab05db059 +Subproject commit 3981bc683b074be4714608f744d29078e9f69ddf From fe0e14fd64fcce42ad3005e383522df42b6fa547 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:26:14 +0000 Subject: [PATCH 034/179] update submodule: repo --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 3981bc6..9e26713 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 3981bc683b074be4714608f744d29078e9f69ddf +Subproject commit 9e2671331c33f97a9a29eb65b8a1413a78a235b9 From daef740af720661af3a44c24b7c429e8a63a0552 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:32:11 +0000 Subject: [PATCH 035/179] update submodule: api --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 944ca18..09fd57b 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 944ca182ef6f0a983deff80a6f88c9ee570d8a84 +Subproject commit 09fd57b1a271ea6e86a8ea2c14cbf1ecbd61c7a3 From 262d3d26c272924154234b8f2549717e269d8a4c Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:42:26 +0000 Subject: [PATCH 036/179] repo submodule: include commit msg in submodule update --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 9e26713..a3397e6 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 9e2671331c33f97a9a29eb65b8a1413a78a235b9 +Subproject commit a3397e6295b492b961e489b0fcb6f17cdad1560a From 7f52346653ca4670530aef799b1b0bcec26ba11b Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:44:49 +0000 Subject: [PATCH 037/179] [media] include commit msg in submodule update --- media | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media b/media index 2004df4..0e56fb9 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 2004df482fdbb93560d115474c28a330fa447b01 +Subproject commit 0e56fb9242a00e41132b9ad30adef9ae910a2159 From 5f4bad1d3145abfccbf0214522fca18f0015620f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:45:30 +0000 Subject: [PATCH 038/179] [dep] include commit msg in submodule update --- dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dep b/dep index 918799f..9a3893f 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 918799fc82281fd6b0af079db9ee34d0e4f641ee +Subproject commit 9a3893fbd5af4d02b89ea4c6f2b35971a3a91408 From 9260f77abbde217641ae9f04765b050d8af47f8c Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 04:46:12 +0000 Subject: [PATCH 039/179] [api] include commit msg in submodule update --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 09fd57b..249b79a 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 09fd57b1a271ea6e86a8ea2c14cbf1ecbd61c7a3 +Subproject commit 249b79ac488b4f2bad0846be386bc5a8e890e595 From 996e60949e27d49aa79d311e11fc7c89a8803ab4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 05:53:47 +0000 Subject: [PATCH 040/179] [repo] theme: gruvbox light (sepia) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index a3397e6..91bed9f 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit a3397e6295b492b961e489b0fcb6f17cdad1560a +Subproject commit 91bed9f1e05ef2f1cfedc2362c542d620d938dc0 From 31f43d9c2e0d2d80e4fa745a0e272f5007fde51e Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 8 Oct 2021 06:03:55 +0000 Subject: [PATCH 041/179] [repo] remove csp-blocked fonts from themes --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 91bed9f..7c07829 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 91bed9f1e05ef2f1cfedc2362c542d620d938dc0 +Subproject commit 7c07829d95c7cba0e5c629c14716dc89def0d26d From 12ba093c7822580a8b975a1849ac520d8c7fbe6f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 9 Oct 2021 07:17:25 +0000 Subject: [PATCH 042/179] [repo] themes: light+, pinky boom, playful purple + quotation marks tweak extracted from prev. littlepig --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7c07829..87eb233 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 7c07829d95c7cba0e5c629c14716dc89def0d26d +Subproject commit 87eb233ed8c8e0888cbf1b5001c2ec4188582b5b From c2c614525a9d05e64f359cf89cd65016e18a08fa Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 9 Oct 2021 13:01:29 +0000 Subject: [PATCH 043/179] [api] prevent double-reading of registry, allow menu/frame scripts --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 249b79a..e1ee787 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 249b79ac488b4f2bad0846be386bc5a8e890e595 +Subproject commit e1ee787aa4cee4edccb101757afedc2bf9675d7e From 2518582c51e2a38c276dd33cd8da40dfe7d6ac4b Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 9 Oct 2021 14:00:33 +0000 Subject: [PATCH 044/179] [api] shade/contrast rgb helpers --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index e1ee787..da003fc 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit e1ee787aa4cee4edccb101757afedc2bf9675d7e +Subproject commit da003fc85c85ac27cc7477b6ef03451382dad7ac From 7f6ade0703dc6e30ced965dba1b62320d7b9aef0 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 9 Oct 2021 14:28:50 +0000 Subject: [PATCH 045/179] [repo] load js in menu, configurable accents in dark+/light+ --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 87eb233..41799cc 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 87eb233ed8c8e0888cbf1b5001c2ec4188582b5b +Subproject commit 41799cc6e26e05a641998b5d3e61e24766c0050f From 35fdf3e4462908780c9ddbc34215caac2b804ff1 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 01:28:12 +0000 Subject: [PATCH 046/179] [api] adjust rgb contrast constant --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index da003fc..a9be1a9 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit da003fc85c85ac27cc7477b6ef03451382dad7ac +Subproject commit a9be1a94c2eae3c80907a47baa90d659fb1344b9 From c8576900b72f8f969afd8ccff7c34fb6b2b81228 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 01:30:39 +0000 Subject: [PATCH 047/179] [repo] light+ configurable highlight color for text/lines etc. --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 41799cc..5103a58 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 41799cc6e26e05a641998b5d3e61e24766c0050f +Subproject commit 5103a58db39687ed8675bb5bd2ec8528bd33d5d9 From 6b30116abcec919ccb5f417adcf54c4eaad55424 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 02:03:54 +0000 Subject: [PATCH 048/179] [repo] upload theme previews --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 5103a58..a03b4ea 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5103a58db39687ed8675bb5bd2ec8528bd33d5d9 +Subproject commit a03b4ea7be8b34e1a68d50d67221e1b34e056e45 From 59bc615fb78c635d7be4b36e1b8be519ef94efc6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 03:21:46 +0000 Subject: [PATCH 049/179] [repo] tweak: responsive columns breakpoint (%) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index a03b4ea..a703ee7 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit a03b4ea7be8b34e1a68d50d67221e1b34e056e45 +Subproject commit a703ee74b436c3ab3f6315545aed60754cea1937 From 6a7f5c6a0ddd65053ec167ca50782c1b14463728 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 04:19:30 +0000 Subject: [PATCH 050/179] [repo] tweak: accented links --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index a703ee7..bd60017 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit a703ee74b436c3ab3f6315545aed60754cea1937 +Subproject commit bd600177a6b6d416b28b2c330a0365a0d26b8e36 From 2c4075c81de79622e86d875c51b533a55b3d2d68 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 05:33:32 +0000 Subject: [PATCH 051/179] [repo] tweak: full width pages + table wrap bugfixes + neutral theme font size fix + menu focused mod b/w tab switching fix --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index bd60017..cd3ac87 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit bd600177a6b6d416b28b2c330a0365a0d26b8e36 +Subproject commit cd3ac87f02df59615bd961268c48bda882c35c37 From 91eaae2ce7161d6c7d367b506b34870fe0add1ce Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 10 Oct 2021 16:36:31 +1100 Subject: [PATCH 052/179] update changelog: tweaks + themes --- CHANGELOG.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14fb0c9..9cfcf15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,13 +11,29 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - new: separate menu profiles for mod configurations. - new: a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. - improved: split the core mod into separate mods for specific features. -- improved: theming variables that are more specific, less laggy, and less complicated. +- improved: theming variables that are applied more specifically, less laggy, and less complicated. - improved: merged bracketed-links into tweaks. - improved: a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. +- improved: simplified and smoothened the side panel + moved it to the core so any mod can hook into it. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. - removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. - bugfix: bypass csp restrictions. +- theme: "nord" = an arctic, north-bluish color palette. +- theme: "gruvbox light" = a sepia, 'retro groove' palette based on the vim theme of the same name. +- theme: "gruvbox dark" = a gray, 'retro groove' palette based on the vim theme of the same name. +- theme: "light+" = a simple white theme that brightens coloured text and blocks, + with configurable accents (formerly littlepig light). +- theme: "playful purple" = a purple-shaded theme with bright highlights (formerly littlepig dark and gameish). +- theme: "pinky boom" = pinkify your life. +- extension: "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. +- tweak: wrap tables to page width. +- tweak: hide "Type '/' for commands". +- tweak: quote block quotation marks. +- tweak: responsive columns breakpoint (%). +- tweak: accented links. +- tweak: full width pages. +- bugfixes: many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything.) **below this point the enhancer was desktop-only. in v0.11.0 it was been ported to also** **run as a chrome extension. changes made to both are indicated above.** From bf6d799fb70dbe33ad4ff1302ae490cad2917f94 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 12 Oct 2021 07:39:03 +0000 Subject: [PATCH 053/179] [repo] extension: font chooser --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index cd3ac87..6e34f83 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit cd3ac87f02df59615bd961268c48bda882c35c37 +Subproject commit 6e34f83d0dd124359eccd28d1ecf8d891fb6233b From bfe7b7ebf4d5017907fc12ee4f773d78fb2e5e8f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 12 Oct 2021 07:39:29 +0000 Subject: [PATCH 054/179] [api] allow empty strings as option values --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index a9be1a9..9004c78 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit a9be1a94c2eae3c80907a47baa90d659fb1344b9 +Subproject commit 9004c7837366fcea9806698d1f30bcf3deb1877a From 00110224422dab89137d5f74b59a989cfdef46c7 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 12 Oct 2021 23:16:04 +0000 Subject: [PATCH 055/179] [repo] incomplete theme colour mapping update https://discord.com/channels/748161877045149706/748162220424167534/897602187067269130 more changes to come --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6e34f83..cca09b3 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6e34f83d0dd124359eccd28d1ecf8d891fb6233b +Subproject commit cca09b3bf1c1f58f3e6eb964ecc2de90d7ab3f6b From 67f51b031c1ada7bd819a2665e7975411df904a0 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 13 Oct 2021 00:20:15 +0000 Subject: [PATCH 056/179] [repo] extension: collapse properties formerly property-layout, added per-page memory --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index cca09b3..0ed85dd 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit cca09b3bf1c1f58f3e6eb964ecc2de90d7ab3f6b +Subproject commit 0ed85dddac128a6795084f5fd2dc26b6dd5d8cc0 From 7160364b3991b04ebb84bcdbaca57ea6de5d6810 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 13 Oct 2021 03:05:14 +0000 Subject: [PATCH 057/179] [repo] extension: scroll to top --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 0ed85dd..1547f7a 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 0ed85dddac128a6795084f5fd2dc26b6dd5d8cc0 +Subproject commit 1547f7a69318821733bd75afcb7f15c5149d456b From 1758d958a08e6da4f86292f6973d90c4a5ee5e5d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 13 Oct 2021 03:05:47 +0000 Subject: [PATCH 058/179] [api] component: corner action --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 9004c78..0d0592c 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 9004c7837366fcea9806698d1f30bcf3deb1877a +Subproject commit 0d0592cd64402b4393bab8fcfcba4a31c7f0e70a From 89eba577368355bf592652d0f8b41bc00f5a5862 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 13 Oct 2021 14:08:04 +1100 Subject: [PATCH 059/179] update changelog: font chooser, property layout, scroll to top --- CHANGELOG.md | 3 +++ env/env.mjs | 2 +- env/fs.mjs | 2 +- env/storage.mjs | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cfcf15..0039b2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,9 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - improved: merged bracketed-links into tweaks. - improved: a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. - improved: simplified and smoothened the side panel + moved it to the core so any mod can hook into it. +- improved: font chooser option for heading fonts. +- improved: renamed "property-layout" to "collapse properties", added per-page memory of collapse state. +- improved: chevron icon instead of arrow for scroll to top. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. - removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. diff --git a/env/env.mjs b/env/env.mjs index af15ca2..98bc080 100644 --- a/env/env.mjs +++ b/env/env.mjs @@ -1,5 +1,5 @@ /* - * notion-enhancer: api + * notion-enhancer core: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ diff --git a/env/fs.mjs b/env/fs.mjs index 8183ff3..376440f 100644 --- a/env/fs.mjs +++ b/env/fs.mjs @@ -1,5 +1,5 @@ /* - * notion-enhancer: api + * notion-enhancer core: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ diff --git a/env/storage.mjs b/env/storage.mjs index 132f2f7..5204138 100644 --- a/env/storage.mjs +++ b/env/storage.mjs @@ -1,5 +1,5 @@ /* - * notion-enhancer: api + * notion-enhancer core: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ From 2eed3edcf914becb630616f30d7d03cc6939795a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 15 Oct 2021 12:21:58 +0000 Subject: [PATCH 060/179] [repo] extension: indentation lines + new feature: toc support --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 1547f7a..bc148f5 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 1547f7a69318821733bd75afcb7f15c5149d456b +Subproject commit bc148f5bcd0ffa95489aa8f6a431f18e077c772a From e79727087755a681d8f1974e49ba9efa7bbd63e3 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 17 Oct 2021 11:18:13 +0000 Subject: [PATCH 061/179] [repo] rainbow indentation lines + block dragger bg fix --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index bc148f5..7bcc7c4 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit bc148f5bcd0ffa95489aa8f6a431f18e077c772a +Subproject commit 7bcc7c45b66d7c7042470ba240896d028cc01ffb From 8c4fa99db36fa76d9471ec6c6776954ee59cf018 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 17 Oct 2021 11:58:12 +0000 Subject: [PATCH 062/179] [repo] extension: focus mode + only inject theming css if a theme is enabled, to reduce lag --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7bcc7c4..fd8ed21 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 7bcc7c45b66d7c7042470ba240896d028cc01ffb +Subproject commit fd8ed21993d61d994d59d1d182f6e01c88ebd80f From c07e089db64ca58b6e40964389c0445f32c0db09 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 17 Oct 2021 12:12:22 +0000 Subject: [PATCH 063/179] [repo] restore theme patches to perma-applied --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index fd8ed21..5e4232c 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit fd8ed21993d61d994d59d1d182f6e01c88ebd80f +Subproject commit 5e4232c047e5a89c3664c2a4f77e0c4f81142508 From 3627b0d7f9c8516193ee57143b880e9fcfae5c7d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 06:28:24 +0000 Subject: [PATCH 064/179] [api] panel: work without right-sidebar pre-existing + smaller tweaks inc. icon pos, default uuid gen, clickthrough hover area to topbar --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 0d0592c..0387622 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0d0592cd64402b4393bab8fcfcba4a31c7f0e70a +Subproject commit 038762234e5383ed1f09f4b246992c480a7e0e58 From 2dfa6a7e6b0143a9bcf60567829f719502b130ab Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 06:28:54 +0000 Subject: [PATCH 065/179] [repo] extension: word counter (moved to panel) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 5e4232c..540c9df 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5e4232c047e5a89c3664c2a4f77e0c4f81142508 +Subproject commit 540c9dfb477eecaa2b7362f9daba281d8abb7ed6 From 2bfe67e28a2381bcd111fb34f801f710a4e6f4af Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 17:29:18 +1100 Subject: [PATCH 066/179] update changelog, add clipboardwrite perm to manifest --- CHANGELOG.md | 6 +++++- env/storage.mjs | 2 -- manifest.json | 1 + repo | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0039b2f..0de64c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - new: simplify user installs by depending on the chrome web store and [notion-repackaged](https://github.com/notion-enhancer/notion-repackaged). - new: separate menu profiles for mod configurations. - new: a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. +- new: a rainbow indentation lines style. - improved: split the core mod into separate mods for specific features. - improved: theming variables that are applied more specifically, less laggy, and less complicated. - improved: merged bracketed-links into tweaks. @@ -18,6 +19,8 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - improved: font chooser option for heading fonts. - improved: renamed "property-layout" to "collapse properties", added per-page memory of collapse state. - improved: chevron icon instead of arrow for scroll to top. +- improved: moved word counter to display in the side panel instead of within the page, + implemented a more accurate word counter method. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. - removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. @@ -36,7 +39,8 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - tweak: responsive columns breakpoint (%). - tweak: accented links. - tweak: full width pages. -- bugfixes: many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything.) +- bugfixes: many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything, + but reported extension-specific bugs were all intentionally fixed.) **below this point the enhancer was desktop-only. in v0.11.0 it was been ported to also** **run as a chrome extension. changes made to both are indicated above.** diff --git a/env/storage.mjs b/env/storage.mjs index 5204138..3003231 100644 --- a/env/storage.mjs +++ b/env/storage.mjs @@ -21,7 +21,6 @@ const _queue = [], * @returns {Promise} value ?? fallback */ export const get = (path, fallback = undefined) => { - if (typeof path === 'string') path = [path]; if (!path.length) return fallback; return new Promise((res, rej) => chrome.storage.local.get(async (values) => { @@ -45,7 +44,6 @@ export const get = (path, fallback = undefined) => { * @returns {Promise} resolves when data has been saved */ export const set = (path, value) => { - if (typeof path === 'string') path = [path]; if (!path.length) return undefined; const precursor = _queue[_queue.length - 1] || undefined, interaction = new Promise(async (res, rej) => { diff --git a/manifest.json b/manifest.json index 4b8c8a3..84b6b78 100644 --- a/manifest.json +++ b/manifest.json @@ -29,6 +29,7 @@ "permissions": [ "tabs", "storage", + "clipboardWrite", "unlimitedStorage", "https://*.notion.so/*", "https://*.notion.site/*", diff --git a/repo b/repo index 5e4232c..540c9df 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5e4232c047e5a89c3664c2a4f77e0c4f81142508 +Subproject commit 540c9dfb477eecaa2b7362f9daba281d8abb7ed6 From 780490337f345b9d0f87895b91fdb3cc5d954672 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 09:34:16 +0000 Subject: [PATCH 067/179] [api] observe child changes better --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 0387622..dbdae0e 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 038762234e5383ed1f09f4b246992c480a7e0e58 +Subproject commit dbdae0e72dcee759f5f0065ea9e9345eb965bd5d From e3affc42e968a4c17c494facc53551f8ea01944e Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 09:35:15 +0000 Subject: [PATCH 068/179] [repo] extension: emoji sets --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 540c9df..f640779 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 540c9dfb477eecaa2b7362f9daba281d8abb7ed6 +Subproject commit f64077920ed48b3279f299c5421d793cc0bc1cc5 From 0632a47b234f844aebd09c0436565e92d022162e Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 11:16:22 +0000 Subject: [PATCH 069/179] [repo] emoji-sets: fix native emoji alignment --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index f640779..936ad32 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit f64077920ed48b3279f299c5421d793cc0bc1cc5 +Subproject commit 936ad32732b4fbc44ea9f158e9e98aedf224bb05 From 88f9df64c7a9cf57b586cc0a75cf82383bf59fda Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 12:28:02 +0000 Subject: [PATCH 070/179] [repo] extension: topbar icons --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 936ad32..4d70243 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 936ad32732b4fbc44ea9f158e9e98aedf224bb05 +Subproject commit 4d702439776f799313e21645299775c64d482b29 From 7ed75824c7fbf2f6abcfd0d8e466075cd70ee37e Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 18 Oct 2021 12:54:10 +0000 Subject: [PATCH 071/179] [repo] observe topbar icons for in previews --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 4d70243..760f7d4 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4d702439776f799313e21645299775c64d482b29 +Subproject commit 760f7d4ddd947bccdb37a338c5f525f7e2cd8bb3 From adeee5fa38e51a9aedc03da5e596d4ed98a6b1f7 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 05:39:15 +0000 Subject: [PATCH 072/179] [api] focus/blur listeners on side panel --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index dbdae0e..35b38f2 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit dbdae0e72dcee759f5f0065ea9e9345eb965bd5d +Subproject commit 35b38f280670dc18f49186ca2e19c9796f62a0f5 From 9dbe5b6b70b3a447591837799c26473594720c38 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 05:41:15 +0000 Subject: [PATCH 073/179] [repo] extension: outliner --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 760f7d4..1f7740d 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 760f7d4ddd947bccdb37a338c5f525f7e2cd8bb3 +Subproject commit 1f7740d2823ff23fa12cf4d495cb55db24e1d422 From 2368b8010a55d23ce2103717d0568cb5d5f30d92 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 10:26:38 +0000 Subject: [PATCH 074/179] [repo] extension: right-to-left --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 1f7740d..6caab3b 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 1f7740d2823ff23fa12cf4d495cb55db24e1d422 +Subproject commit 6caab3b9a22f5fec4b25bbdea797450bf0d7dc63 From bae9cf699f52be95f0a82bf82c9ebd1a1007d1f1 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 10:28:27 +0000 Subject: [PATCH 075/179] [api] adjust url regex --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 35b38f2..a928d22 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 35b38f280670dc18f49186ca2e19c9796f62a0f5 +Subproject commit a928d22d756dce10bd1d4a188f06e64e71a32eeb From d59f970ad6a8688d7eeac20c271fbd9da77ee801 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 21:29:41 +1100 Subject: [PATCH 076/179] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de64c6..cf52899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,10 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - improved: chevron icon instead of arrow for scroll to top. - improved: moved word counter to display in the side panel instead of within the page, implemented a more accurate word counter method. +- improved: the topbar icons extension defaults to the notion default topbar icons for comment/updates/favorite/more, + but can revert them to text (it still adds a custom icon for the share button). +- improved: relative indenting in outliner. +- improved: rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. - removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. From 73a91341c6ee6a77fae29b8027c1b4aa6f586cb0 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 19 Oct 2021 12:43:18 +0000 Subject: [PATCH 077/179] [repo] extension: weekly view --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6caab3b..598b523 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6caab3b9a22f5fec4b25bbdea797450bf0d7dc63 +Subproject commit 598b523011b2a389b2070101f411431a9f6c0e9f From 5507657012bdd08690fa6fb47cdb6fd32d6b4f19 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 20 Oct 2021 10:02:27 +0000 Subject: [PATCH 078/179] [repo] extension: truncated titles --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 598b523..8edd125 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 598b523011b2a389b2070101f411431a9f6c0e9f +Subproject commit 8edd12540b129da03cfd33bf0158e525eb0893f4 From fd2378703e0a7274ff9e280ac022fa3513ba954f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 20 Oct 2021 10:03:48 +0000 Subject: [PATCH 079/179] [api] smoother tooltips, delay arg --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index a928d22..0c3191d 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit a928d22d756dce10bd1d4a188f06e64e71a32eeb +Subproject commit 0c3191d8a20c9c42c694d4f0c345adb45ea43027 From 913adf13764fe6c6dfc728dc8c7fd6c4f827848b Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 20 Oct 2021 12:02:54 +0000 Subject: [PATCH 080/179] [api] clipboard helpers --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 0c3191d..5e6e34b 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0c3191d8a20c9c42c694d4f0c345adb45ea43027 +Subproject commit 5e6e34bdbedef0d9827a7209c1390569ec55a371 From 5d60b5081f4da3d9538babcd762e5832af3a25f0 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 20 Oct 2021 23:04:55 +1100 Subject: [PATCH 081/179] update changelog, clipboard read perm --- CHANGELOG.md | 7 ++++++- api | 2 +- manifest.json | 1 + repo | 2 +- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf52899..8968a27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,17 @@ ### v0.11.0 (dev) -a complete rework of the enhancer including a port to the browser as a chrome extension. +a complete rework of the enhancer, with new features and a port to the browser as a chrome extension. - new: cross-environment and properly documented api to replace helpers. - new: cross-environment mod loader structure. +- new: "integrations", a category of mods that can access/use an unofficial notion api. - new: notifications sourced from an online endpoint for sending global user alerts. - new: simplify user installs by depending on the chrome web store and [notion-repackaged](https://github.com/notion-enhancer/notion-repackaged). - new: separate menu profiles for mod configurations. - new: a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. - new: a rainbow indentation lines style. +- new: border & background style options for the code line numbers extension. - improved: split the core mod into separate mods for specific features. - improved: theming variables that are applied more specifically, less laggy, and less complicated. - improved: merged bracketed-links into tweaks. @@ -25,6 +27,8 @@ a complete rework of the enhancer including a port to the browser as a chrome ex but can revert them to text (it still adds a custom icon for the share button). - improved: relative indenting in outliner. - improved: rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. +- improved: replaced the "truncated table titles" extension with a "truncated titles" extension + with an option to truncate timeline item titles. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. - removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. @@ -37,6 +41,7 @@ a complete rework of the enhancer including a port to the browser as a chrome ex - theme: "playful purple" = a purple-shaded theme with bright highlights (formerly littlepig dark and gameish). - theme: "pinky boom" = pinkify your life. - extension: "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. +- extension: "global block links" = easily copy the global link of a page or block. - tweak: wrap tables to page width. - tweak: hide "Type '/' for commands". - tweak: quote block quotation marks. diff --git a/api b/api index a928d22..5e6e34b 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit a928d22d756dce10bd1d4a188f06e64e71a32eeb +Subproject commit 5e6e34bdbedef0d9827a7209c1390569ec55a371 diff --git a/manifest.json b/manifest.json index 84b6b78..f92eb84 100644 --- a/manifest.json +++ b/manifest.json @@ -29,6 +29,7 @@ "permissions": [ "tabs", "storage", + "clipboardRead", "clipboardWrite", "unlimitedStorage", "https://*.notion.so/*", diff --git a/repo b/repo index 6caab3b..52321e9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6caab3b9a22f5fec4b25bbdea797450bf0d7dc63 +Subproject commit 52321e9c355d39f011225c46a80232c247a1e60f From b390b0ac2db061cad86d4326872abc6402d0ac9a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 20 Oct 2021 12:04:57 +0000 Subject: [PATCH 082/179] [repo] extension: global block links --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 8edd125..52321e9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 8edd12540b129da03cfd33bf0158e525eb0893f4 +Subproject commit 52321e9c355d39f011225c46a80232c247a1e60f From 71c12148b92e42a93856354e912e09cdfeb89248 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 21 Oct 2021 12:28:28 +0000 Subject: [PATCH 083/179] [repo] extension: collapsible headers --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 52321e9..8e1e8f5 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 52321e9c355d39f011225c46a80232c247a1e60f +Subproject commit 8e1e8f580ac2cbd38343c7baf49d9f01d87b1701 From 8b1e75854970d795e8857b827eeb72429f7b03fa Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 23 Oct 2021 12:12:29 +0000 Subject: [PATCH 084/179] [repo] extension: simpler databases --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 8e1e8f5..76dd63d 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 8e1e8f580ac2cbd38343c7baf49d9f01d87b1701 +Subproject commit 76dd63dbd786dd1f4c4157eccfcfe66c5014a64a From e855639aa8f5a81f83e727711c1dbc7036b5ceea Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 23 Oct 2021 12:13:06 +0000 Subject: [PATCH 085/179] [api] add keydown & in-input hotkey opts --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 5e6e34b..d8d84eb 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 5e6e34bdbedef0d9827a7209c1390569ec55a371 +Subproject commit d8d84eb15f2fa7fa5a5c306ab4fd98f5aea9c26e From d430e22635bd2514930028ba24629c7a1a73ac9d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 24 Oct 2021 02:31:01 +0000 Subject: [PATCH 086/179] [repo] tweak: image alignment (center/left/right) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 76dd63d..a5b8dd0 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 76dd63dbd786dd1f4c4157eccfcfe66c5014a64a +Subproject commit a5b8dd0d338d114d4c66e39fc599784fdd811ae7 From 4bb048b5eb728985104aeda6af828f2584ea00fe Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 29 Oct 2021 01:22:50 +0000 Subject: [PATCH 087/179] [repo] menu: sidebar responds to changes in history, restores on reload --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index a5b8dd0..cfbde17 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit a5b8dd0d338d114d4c66e39fc599784fdd811ae7 +Subproject commit cfbde17a63762b3cc520489d3537428945787001 From c40c3d4bcf927121a2c0bedeec2c4a8cb2df1560 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 30 Oct 2021 08:14:00 +0000 Subject: [PATCH 088/179] [api] notion api upload file, registry integration tag --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index d8d84eb..e887283 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit d8d84eb15f2fa7fa5a5c306ab4fd98f5aea9c26e +Subproject commit e887283c9965efe799731bc270b7af6f96ba68b7 From a029f79df50e729374121a73314a4c8833070768 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 30 Oct 2021 08:14:48 +0000 Subject: [PATCH 089/179] [repo] extension: icon sets part 1 (save/reuse recent uploads) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index cfbde17..35d9f49 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit cfbde17a63762b3cc520489d3537428945787001 +Subproject commit 35d9f49734077db1956bc52ee73a42a0c8428f34 From 056581db6ddadf9346a9692a161df816402494a5 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 30 Oct 2021 11:32:15 +0000 Subject: [PATCH 090/179] [repo] extension: icon sets part 2 (enhancer + custom sets, sprites & spinners) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 35d9f49..b3c304e 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 35d9f49734077db1956bc52ee73a42a0c8428f34 +Subproject commit b3c304edda98529a536804793a83c31929a26f58 From 09ace09173c0e5cc47a6ce92f00a7e7ad5bfaa0a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 30 Oct 2021 22:37:36 +1100 Subject: [PATCH 091/179] changelog: icon sets, collapse headers, simpler dbs, img alignment --- CHANGELOG.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8968a27..4984815 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ a complete rework of the enhancer, with new features and a port to the browser a - improved: a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. - improved: simplified and smoothened the side panel + moved it to the core so any mod can hook into it. - improved: font chooser option for heading fonts. -- improved: renamed "property-layout" to "collapse properties", added per-page memory of collapse state. +- improved: renamed "property-layout" to "collapsible properties", added per-page memory of collapse state. - improved: chevron icon instead of arrow for scroll to top. - improved: moved word counter to display in the side panel instead of within the page, implemented a more accurate word counter method. @@ -29,9 +29,12 @@ a complete rework of the enhancer, with new features and a port to the browser a - improved: rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. - improved: replaced the "truncated table titles" extension with a "truncated titles" extension with an option to truncate timeline item titles. +- improved: renamed "notion-icons" to "icon sets" with new support for uploading/reusing custom icons + directly within the icon picker. - removed: integrated scrollbar tweak (notion now includes by default). - removed: js insert. css insert moved to tweaks mod. -- removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +` for latter. +- removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +`/`ctrl -` for latter. +- removed: the "panel sites" extension, due to it's limited/buggy functionality and incompatibility with reimplementation. - bugfix: bypass csp restrictions. - theme: "nord" = an arctic, north-bluish color palette. - theme: "gruvbox light" = a sepia, 'retro groove' palette based on the vim theme of the same name. @@ -42,12 +45,15 @@ a complete rework of the enhancer, with new features and a port to the browser a - theme: "pinky boom" = pinkify your life. - extension: "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. - extension: "global block links" = easily copy the global link of a page or block. +- extension: "collapsible headers" = adds toggles to collapse header sections of pages. +- extension: "simpler databases" = adds a menu to inline databases to toggle ui elements. - tweak: wrap tables to page width. - tweak: hide "Type '/' for commands". - tweak: quote block quotation marks. - tweak: responsive columns breakpoint (%). - tweak: accented links. - tweak: full width pages. +- tweak: image alignment (center/left/right). - bugfixes: many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything, but reported extension-specific bugs were all intentionally fixed.) From d9c485563f6e7b85973aab21dca3dab379bea941 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 01:21:33 +0000 Subject: [PATCH 092/179] [api] handle space and plus in hotkeys --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index e887283..3741e96 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit e887283c9965efe799731bc270b7af6f96ba68b7 +Subproject commit 3741e961ecb18d653723cd80fd24802cde39b57c From bc42f51d95610feecfd3c4c28b17b9966ec4428d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 01:22:01 +0000 Subject: [PATCH 093/179] [repo] integration: quick note --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index b3c304e..2bba4d1 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit b3c304edda98529a536804793a83c31929a26f58 +Subproject commit 2bba4d1fe4cf1e28a6729e70a4a5f5aec5dbaa7f From 597c9d23875aa7e595649b5074a1c25b454ad40f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 07:25:30 +0000 Subject: [PATCH 094/179] [api] removed welcome notification from registry --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 3741e96..2e9671c 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 3741e961ecb18d653723cd80fd24802cde39b57c +Subproject commit 2e9671c15cb49bde9994ca0f747f73704d552b97 From 40b911cdd0c1beae97147e98ee3371f842af6fb4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 07:36:34 +0000 Subject: [PATCH 095/179] [repo] added welcome/changelog/license acceptance modal --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 2bba4d1..cce7b1c 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 2bba4d1fe4cf1e28a6729e70a4a5f5aec5dbaa7f +Subproject commit cce7b1cc2b2d873fc6fe54b489a44c3ec29cd4bd From 06f977ce878a20b894e56dd728186238a5e8c0d8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 18:37:50 +1100 Subject: [PATCH 096/179] reformat changelog under headers --- CHANGELOG.md | 117 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 70 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4984815..4d8f535 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,59 +4,82 @@ a complete rework of the enhancer, with new features and a port to the browser as a chrome extension. -- new: cross-environment and properly documented api to replace helpers. -- new: cross-environment mod loader structure. -- new: "integrations", a category of mods that can access/use an unofficial notion api. -- new: notifications sourced from an online endpoint for sending global user alerts. -- new: simplify user installs by depending on the chrome web store and [notion-repackaged](https://github.com/notion-enhancer/notion-repackaged). -- new: separate menu profiles for mod configurations. -- new: a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. -- new: a rainbow indentation lines style. -- new: border & background style options for the code line numbers extension. -- improved: split the core mod into separate mods for specific features. -- improved: theming variables that are applied more specifically, less laggy, and less complicated. -- improved: merged bracketed-links into tweaks. -- improved: a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. -- improved: simplified and smoothened the side panel + moved it to the core so any mod can hook into it. -- improved: font chooser option for heading fonts. -- improved: renamed "property-layout" to "collapsible properties", added per-page memory of collapse state. -- improved: chevron icon instead of arrow for scroll to top. -- improved: moved word counter to display in the side panel instead of within the page, +#### new + +- cross-environment and properly documented api to replace helpers. +- cross-environment mod loader structure. +- "integrations", a category of mods that can access/use an unofficial notion api. +- notifications sourced from an online endpoint for sending global user alerts. +- simplify user installations by depending on the chrome web store and [notion-repackaged](https://github.com/notion-enhancer/notion-repackaged). +- separate menu profiles for mod configurations. +- a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. +- a rainbow indentation lines style. +- border & background style options for the code line numbers extension. + +#### improved + +- split the core mod into separate mods for specific features. +- theming variables that are applied more specifically, less laggy, and less complicated. +- merged bracketed-links into tweaks. +- a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. +- simplified and smoothened the side panel + moved it to the core so any mod can hook into it. +- font chooser option for heading fonts. +- renamed "property-layout" to "collapsible properties", added per-page memory of collapse state. +- chevron icon instead of arrow for scroll to top. +- moved word counter to display in the side panel instead of within the page, implemented a more accurate word counter method. -- improved: the topbar icons extension defaults to the notion default topbar icons for comment/updates/favorite/more, +- the topbar icons extension defaults to the notion default topbar icons for comment/updates/favorite/more, but can revert them to text (it still adds a custom icon for the share button). -- improved: relative indenting in outliner. -- improved: rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. -- improved: replaced the "truncated table titles" extension with a "truncated titles" extension +- relative indenting in outliner. +- rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. +- replaced the "truncated table titles" extension with a "truncated titles" extension with an option to truncate timeline item titles. -- improved: renamed "notion-icons" to "icon sets" with new support for uploading/reusing custom icons +- renamed "notion icons" to "icon sets" with new support for uploading/reusing custom icons directly within the icon picker. -- removed: integrated scrollbar tweak (notion now includes by default). -- removed: js insert. css insert moved to tweaks mod. -- removed: majority of layout and font size variables - better to leave former to notion and use `ctrl +`/`ctrl -` for latter. -- removed: the "panel sites" extension, due to it's limited/buggy functionality and incompatibility with reimplementation. -- bugfix: bypass csp restrictions. -- theme: "nord" = an arctic, north-bluish color palette. -- theme: "gruvbox light" = a sepia, 'retro groove' palette based on the vim theme of the same name. -- theme: "gruvbox dark" = a gray, 'retro groove' palette based on the vim theme of the same name. -- theme: "light+" = a simple white theme that brightens coloured text and blocks, - with configurable accents (formerly littlepig light). -- theme: "playful purple" = a purple-shaded theme with bright highlights (formerly littlepig dark and gameish). -- theme: "pinky boom" = pinkify your life. -- extension: "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. -- extension: "global block links" = easily copy the global link of a page or block. -- extension: "collapsible headers" = adds toggles to collapse header sections of pages. -- extension: "simpler databases" = adds a menu to inline databases to toggle ui elements. -- tweak: wrap tables to page width. -- tweak: hide "Type '/' for commands". -- tweak: quote block quotation marks. -- tweak: responsive columns breakpoint (%). -- tweak: accented links. -- tweak: full width pages. -- tweak: image alignment (center/left/right). -- bugfixes: many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything, + +#### removed + +- integrated scrollbar tweak (notion now includes by default). +- js insert. css insert moved to tweaks mod. +- majority of layout and font size variables - better to leave former to notion and use `ctrl +`/`ctrl -` for latter. +- the "panel sites" extension, due to it's limited/buggy functionality and incompatibility with reimplementation. + +#### fixed + +- bypass csp restrictions. +- many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything, but reported extension-specific bugs were all intentionally fixed.) +#### themes + +- "nord" = an arctic, north-bluish color palette. +- "gruvbox light" = a sepia, 'retro groove' palette based on the vim theme of the same name. +- "gruvbox dark" = a gray, 'retro groove' palette based on the vim theme of the same name. +- "light+" = a simple white theme that brightens coloured text and blocks, + with configurable accents (formerly littlepig light). +- "playful purple" = a purple-shaded theme with bright highlights (formerly littlepig dark and gameish). +- "pinky boom" = pinkify your life. + +#### extensions + +- "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. +- "global block links" = easily copy the global link of a page or block. +- "collapsible headers" = adds toggles to collapse header sections of pages. +- "simpler databases" = adds a menu to inline databases to toggle ui elements. + +#### tweaks + +- wrap tables to page width. - hide "Type '/' for commands". +- quote block quotation marks. +- responsive columns breakpoint (%). +- accented links. +- full width pages. +- image alignment (center/left/right). + +#### integrations + +- "quick note" = adds a hotkey & a button in the bottom right corner to jump to a new page in a notes database (target database id must be set). + **below this point the enhancer was desktop-only. in v0.11.0 it was been ported to also** **run as a chrome extension. changes made to both are indicated above.** From 3e5a660e198ba81cafe3f2762d51b7d92966de46 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 31 Oct 2021 09:46:31 +0000 Subject: [PATCH 097/179] [repo] tweak welcome text and add modal to notif badge count --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index cce7b1c..24166e2 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit cce7b1cc2b2d873fc6fe54b489a44c3ec29cd4bd +Subproject commit 24166e2aa49d449df7e3dd59192d6e5bf3948e72 From d5c55ecef2584a24eecf8cd55242dfded93a0b85 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 1 Nov 2021 11:58:38 +0000 Subject: [PATCH 098/179] [repo] extension + integration screenshots --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 24166e2..913ad13 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 24166e2aa49d449df7e3dd59192d6e5bf3948e72 +Subproject commit 913ad13856be0282d79fd36d1e6028280070f3f6 From 19962138832a5beda895e1f9bf42ba2f39925afc Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 1 Nov 2021 23:44:07 +0000 Subject: [PATCH 099/179] [repo] Merge pull request #1 from notion-enhancer/imgbot [ImgBot] Optimize images --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 913ad13..1c6e106 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 913ad13856be0282d79fd36d1e6028280070f3f6 +Subproject commit 1c6e10641d41fc3ca5e527d420abd786451f39ae From ba2ec3ecb00a1e2b2bed82b1ef6df467477ef3f5 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 1 Nov 2021 23:46:07 +0000 Subject: [PATCH 100/179] [repo] optimise preview imgs --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 1c6e106..8cc95e0 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 1c6e10641d41fc3ca5e527d420abd786451f39ae +Subproject commit 8cc95e0321b009dcd0b10d4670f603496b516c3d From 2e82d03a4f89f0d925640e1fdf2b5dda5815aaa6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 2 Nov 2021 06:40:52 +0000 Subject: [PATCH 101/179] [repo] map updated notion colours to theming system --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 8cc95e0..29e65de 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 8cc95e0321b009dcd0b10d4670f603496b516c3d +Subproject commit 29e65de22e035006db1cd07f643ba55ec3cd4d0c From 090d046e47890566f20ba2af091ffdb996dcd439 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 2 Nov 2021 09:22:23 +0000 Subject: [PATCH 102/179] [repo] light board colors --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 29e65de..7849d86 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 29e65de22e035006db1cd07f643ba55ec3cd4d0c +Subproject commit 7849d86e803b3c24b4b6a1a6adceadb95af24685 From 86d00f9516ca87c6eea447a4d0935174b41f4115 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 2 Nov 2021 11:19:59 +0000 Subject: [PATCH 103/179] [repo] update themes to match new colour variables --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7849d86..6981f28 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 7849d86e803b3c24b4b6a1a6adceadb95af24685 +Subproject commit 6981f2805eb1a2c5bc5bebc1c976de4cffee2940 From 33d910526912e863a7b355ee3d1fcb1a89fbcb6a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 3 Nov 2021 10:53:27 +0000 Subject: [PATCH 104/179] [repo] corner button cross-theme readability --- api | 2 +- repo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api b/api index 2e9671c..aff6f2d 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 2e9671c15cb49bde9994ca0f747f73704d552b97 +Subproject commit aff6f2dafa9d2666306f4e088da86528aeee0cd8 diff --git a/repo b/repo index 6981f28..28e3fc3 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6981f2805eb1a2c5bc5bebc1c976de4cffee2940 +Subproject commit 28e3fc396e72680d8c3c0a6ff02e75672fa8663c From abba9df0fa5e3e812dc0d83b745df10a4733590c Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 00:08:17 +0000 Subject: [PATCH 105/179] [repo] update menu colour var mapping --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 28e3fc3..4c589ec 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 28e3fc396e72680d8c3c0a6ff02e75672fa8663c +Subproject commit 4c589ec5915cccfb004098caf08e8934eb73ade7 From f9459077172cafdc4d46f37c9ade67e502cce83a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 11:13:31 +1100 Subject: [PATCH 106/179] rename launcher to init --- launcher.js => init.js | 0 manifest.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename launcher.js => init.js (100%) diff --git a/launcher.js b/init.js similarity index 100% rename from launcher.js rename to init.js diff --git a/manifest.json b/manifest.json index f92eb84..c10a7b2 100644 --- a/manifest.json +++ b/manifest.json @@ -23,7 +23,7 @@ "content_scripts": [ { "matches": ["https://*.notion.so/*", "https://*.notion.site/*"], - "js": ["launcher.js"] + "js": ["init.js"] } ], "permissions": [ From 022691e998ab2eb187b40167656385d8bf6451b8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 05:10:21 +0000 Subject: [PATCH 107/179] [api] link to notion-enhancer/desktop repo --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index aff6f2d..f8e961e 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit aff6f2dafa9d2666306f4e088da86528aeee0cd8 +Subproject commit f8e961e68f99d778dc832545b72d2090e6a17166 From ddaef26436c00b24b7722508911f3ca95ef9523f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 05:10:52 +0000 Subject: [PATCH 108/179] [repo] link to notion-enhancer/desktop repo --- media | 2 +- repo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/media b/media index 0e56fb9..5472e23 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 0e56fb9242a00e41132b9ad30adef9ae910a2159 +Subproject commit 5472e23e983ab893b72af6493bbf582017c182be diff --git a/repo b/repo index 4c589ec..bede50b 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4c589ec5915cccfb004098caf08e8934eb73ade7 +Subproject commit bede50bedaacfe198de2e9a0015b454295dbb1e4 From 32fb5b6ff5e146afedbad431920c2ab888a14bca Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 05:11:06 +0000 Subject: [PATCH 109/179] [media] link to notion-enhancer/desktop repo --- dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dep b/dep index 9a3893f..0682d5d 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 9a3893fbd5af4d02b89ea4c6f2b35971a3a91408 +Subproject commit 0682d5db9035780baceb4aafdf83ff67bd57dadc From 3a7216c547acf1a676c1f4520446dfaf1db8e4e0 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 06:49:41 +0000 Subject: [PATCH 110/179] [dep] add mime db (stream protocol intercept) --- dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dep b/dep index 0682d5d..65ae194 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 0682d5db9035780baceb4aafdf83ff67bd57dadc +Subproject commit 65ae1944a75b9525ee79610586438facf14d8531 From b3960144129a8ae46c056d6b18d94f65cf922e49 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 7 Nov 2021 05:08:51 +0000 Subject: [PATCH 111/179] [api] port to cjs --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index f8e961e..465e5a1 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit f8e961e68f99d778dc832545b72d2090e6a17166 +Subproject commit 465e5a10ccf526ea0f6567650c0603d44ecd631c From c1ca59831814e6a843edb4f053559890ec9b5ada Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 7 Nov 2021 07:49:08 +0000 Subject: [PATCH 112/179] [api] env.notionRequire --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 465e5a1..0ff69ab 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 465e5a10ccf526ea0f6567650c0603d44ecd631c +Subproject commit 0ff69abb37c32146de4d93060b5c233a0ac2df6d From 6bf726d6dc7c77698d34afb5ef458df12fbd9032 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 7 Nov 2021 07:53:50 +0000 Subject: [PATCH 113/179] [repo] scope all await statements --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index bede50b..9725eb9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit bede50bedaacfe198de2e9a0015b454295dbb1e4 +Subproject commit 9725eb9983edb8e3e1958e38bcfd73e34f199eb5 From cbf247c4e15c225d91095814b450d60b7103270b Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 7 Nov 2021 18:57:22 +1100 Subject: [PATCH 114/179] move changelog --- CHANGELOG.md | 422 --------------------------------------------------- init.js | 31 ++-- 2 files changed, 16 insertions(+), 437 deletions(-) delete mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 4d8f535..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,422 +0,0 @@ -# changelog - -### v0.11.0 (dev) - -a complete rework of the enhancer, with new features and a port to the browser as a chrome extension. - -#### new - -- cross-environment and properly documented api to replace helpers. -- cross-environment mod loader structure. -- "integrations", a category of mods that can access/use an unofficial notion api. -- notifications sourced from an online endpoint for sending global user alerts. -- simplify user installations by depending on the chrome web store and [notion-repackaged](https://github.com/notion-enhancer/notion-repackaged). -- separate menu profiles for mod configurations. -- a hotkey option type that allows typing in/pressing a hotkey to enter it, instead of typing. -- a rainbow indentation lines style. -- border & background style options for the code line numbers extension. - -#### improved - -- split the core mod into separate mods for specific features. -- theming variables that are applied more specifically, less laggy, and less complicated. -- merged bracketed-links into tweaks. -- a redesigned menu with nicer ui, separate categories for mods and a sidebar for configuration. -- simplified and smoothened the side panel + moved it to the core so any mod can hook into it. -- font chooser option for heading fonts. -- renamed "property-layout" to "collapsible properties", added per-page memory of collapse state. -- chevron icon instead of arrow for scroll to top. -- moved word counter to display in the side panel instead of within the page, - implemented a more accurate word counter method. -- the topbar icons extension defaults to the notion default topbar icons for comment/updates/favorite/more, - but can revert them to text (it still adds a custom icon for the share button). -- relative indenting in outliner. -- rtl support for toggles, indentation lines, table of contents and databases + force inline math to ltr. -- replaced the "truncated table titles" extension with a "truncated titles" extension - with an option to truncate timeline item titles. -- renamed "notion icons" to "icon sets" with new support for uploading/reusing custom icons - directly within the icon picker. - -#### removed - -- integrated scrollbar tweak (notion now includes by default). -- js insert. css insert moved to tweaks mod. -- majority of layout and font size variables - better to leave former to notion and use `ctrl +`/`ctrl -` for latter. -- the "panel sites" extension, due to it's limited/buggy functionality and incompatibility with reimplementation. - -#### fixed - -- bypass csp restrictions. -- many. like many many. all the bugfixes. (mostly a side effect of completely rewriting everything, - but reported extension-specific bugs were all intentionally fixed.) - -#### themes - -- "nord" = an arctic, north-bluish color palette. -- "gruvbox light" = a sepia, 'retro groove' palette based on the vim theme of the same name. -- "gruvbox dark" = a gray, 'retro groove' palette based on the vim theme of the same name. -- "light+" = a simple white theme that brightens coloured text and blocks, - with configurable accents (formerly littlepig light). -- "playful purple" = a purple-shaded theme with bright highlights (formerly littlepig dark and gameish). -- "pinky boom" = pinkify your life. - -#### extensions - -- "calendar scroll" = add a button to jump down to the current week in fullpage/infinite-scroll calendars. -- "global block links" = easily copy the global link of a page or block. -- "collapsible headers" = adds toggles to collapse header sections of pages. -- "simpler databases" = adds a menu to inline databases to toggle ui elements. - -#### tweaks - -- wrap tables to page width. - hide "Type '/' for commands". -- quote block quotation marks. -- responsive columns breakpoint (%). -- accented links. -- full width pages. -- image alignment (center/left/right). - -#### integrations - -- "quick note" = adds a hotkey & a button in the bottom right corner to jump to a new page in a notes database (target database id must be set). - -**below this point the enhancer was desktop-only. in v0.11.0 it was been ported to also** -**run as a chrome extension. changes made to both are indicated above.** - -### v0.10.2 (2020-12-05) - -again, an emergency release for bugfixes. -not properly documented and new features have not yet been fully reviewed/edited. - -- new: side panel - adds an extra sidebar on the right for use by other mods, - toggleable with `ctrl+shift+backslash`. -- improved: notion icons uses spritesheets for faster loading of icons. -- improved: icon sets can be hidden/toggled. -- improved: toggles in the enhancer menu follow the same style as notion's toggles. -- improved: separate quote font variable & option in the font chooser mod (`--theme_[dark|light]--font_quote`). -- improved: option to hide the "page details" text for the word counter extension. -- bugfix: notion icons tab is now visible in fullpage databases. -- bugfix: code line numbers handles wrapped code blocks. -- bugfix: file explorer no longer opens when enhancer menu is opened. -- bugfix: enable the remote module in webviews (windows/tabs) for compatibility with the - updated version of electron used by new notion builds (>= 2.0.10). -- bugfix: add support for enhancing an `app` folder if there is no `app.asar` file present. -- extension: "outliner" = table of contents in right sidebar. -- extension: "panel sites" = embed sites on the site panel. -- extension: "indentation lines" = adds vertical relationship lines to make list trees easier to follow. -- extension: "truncated table titles" = see the full text of the truncated table titles on hover over. - -> 📥 `npm i -g notion-enhancer@0.10.2` - -### v0.10.1 (2020-11-18) - -essentially a prerelease for v0.11.0: pushed out for urgent bugfixes during -exam/study weeks when there's no time to code a full release. - -note that this means new features have not yet been fully documented and -may not be fully ready for ideal use yet. however, things overall will -work more reliably than v0.10.0. - -- new: different css entrypoints for different components (tabs, menu, app). -- improved: use an svg for the scroll-to-top button. -- improved: use a better-matching icon and add transitions to the property layout toggle. -- improved: themes are directly applied to tabs and menu rather than sync-ed between (infinite loading). -- improved: error message "is notion running?" --> clearer "make sure notion isn't running!" -- improved: auto-shrink system for tabs (max of 15 open in a window). -- bugfix: disable fadein of selected block halo with snappy transitions. -- bugfix: increase contrast of `--theme_dark--interactive_hover` in dark+ and dracula. -- bugfix: tabs are focused properly for input. -- bugfix: keyboard shortcut listeners are stricter so they don't conflict. -- bugfix: dots indicating draggability are no longer next to the tabs mod in the menu. -- bugfix: prevent empty hotkeys from triggering every keypress. -- bugfix: don't try loading an empty default page url (infinite loading). -- bugfix: remove `* { z-index: 1}` rule so format dropdowns in table view can be opened. -- extension: "topbar icons" = replaces the topbar buttons with icons. -- extension: "code line numbers" = adds line numbers to code blocks. -- extension: "notion icons" = use custom icon sets directly in notion. -- tweak: vertical indentation/relationship lines for lists. -- tweak: scroll database toolbars horizontally if partially hidden. -- tweak: condense bullet points (decrease line spacing). - -> 📥 `npm i -g notion-enhancer@0.10.1` - -### v0.10.0 (2020-11-02) - -a flexibility update. - -- new: mods can be reordered in the menu to control what order styling/scripts are added/executed in. - higher up on the list = higher priority of application = loaded last in order to override others. - (excluding the core, which though pinned to the top of the list is always loaded first so theming - variables can be modified.) -- new: relaunch button in tray menu. -- new: a core mod option for a default page id/url (all new windows will load it instead of the - normal "most recent" page). -- new: css variables for increasing line spacing/paragraph margins. -- new: patch the notion:// url scheme/protocol to work on linux. -- new: menu shows theme conflicts + a core mod option to auto-resolve theme conflicts. -- new: a `-n` cli option. -- improved: menu will now respect integrated titlebar setting. -- improved: use keyup listeners instead of a globalShortcut for the enhancements menu toggle. -- improved: overwrite `app.asar.bak` if already exists (e.g. for app updates). -- improved: additional menu option descriptions on hover. -- improved: listen to prefers-color-scheme to better change theme in night shift. -- improved: platform-specific option overrides for features not required on macOS. -- improved: made extra padding at the bottom with the "focus mode" extension toggleable. -- bugfix: removed messenger emoji set as the provider no longer supports it. -- bugfix: remove shadow around light mode board headers. -- bugfix: properly detect/respond to `EACCES`/`EBUSY` errors. -- bugfix: night shift checks every interaction, - will respond to system changes without any manual changes. -- bugfix: toc blocks can have text colours. -- bugfix: bypass preview extension works with the back/forward keyboard shortcuts. -- bugfix: (maybe) fix csp issues under proxy. -- bugfix: remove focus mode footer from neutral theme + better contrast in calendar views. -- bugfix: improvements to the colour theming, particularly to make real- and fake-light/dark - modes (as applied by the night shift extension) look consistent. - relevant variables (assuming all are prefixed by `--theme_[dark|light]--`): - `box-shadow`, `box-shadow_strong`, `select_input`, and `ui-border` -- bugfix: font sizing applied to overlays/previews. -- bugfix: removed typo in variable name for brown text. -- bugfix: primary-colour text (mainly in "add a \_" popups) is now properly themed. -- bugfix: right-to-left extension applies to text in columns. -- bugfix: block text colour applies to text with backgrounds. -- bugfix: font applied to wrong mode with littlepig dark. -- bugfix: keep "empty" top bar visible in the menu. -- bugfix: set NSRequiresAquaSystemAppearance to false in /Applications/Notion.app/Contents/Info.plist - so system dark/light mode can be properly detected. -- bugfix: make ctrl+f popover shadow less extreme. -- bugfix: "weekly" calendar view name made case insensitive. -- bugfix: re-show hidden windows when clicking on the dock. -- tweak: sticky table/list rows. -- theme: "material ocean" = an oceanic colour palette. -- theme: "cherry cola" = a delightfully plummy, cherry cola flavored theme. -- theme: "dracula" = a theme based on the popular dracula color palette - originally by zeno rocha and friends. -- extension: "tabs" = have multiple notion pages open in a single window. tabs can be controlled - with keyboard shortcuts and dragged/reordered within/between windows. -- extension: "scroll to top" = add an arrow above the help button to scroll back to the top of a page. -- extension: "tweaks" = common style/layout changes. includes: - - new: make transitions snappy/0s. - - new: in-page columns are disabled/wrapped and pages are wider when - the window is narrower than 600px for improved responsiveness. - - new: thicker bold text for better visibility. - - new: more readable line spacing. - - moved: smooth scrollbars. - - moved: change dragarea height. - - moved: hide help. - -a fork of notion-deb-builder that does generate an app.asar has been created and is once again supported. - -> 📥 `npm i -g notion-enhancer@0.10.0` - -### v0.9.1 (2020-09-26) - -- bugfix: font chooser will continue iterating through fonts after encountering a blank option. -- bugfix: block indents are no longer overriden. -- bugfix: neutral does not force full width pages. -- bugfix: bypass preview extension works with the back/forward arrows. -- bugfix: check all views on a page for a weekly calendar. -- bugfix: emoji sets no longer modifies the user agent = doesn't break hotkeys. - -> 📥 `npm i -g notion-enhancer@0.9.1` - -### v0.9.0 (2020-09-20) - -a feature and cleanup update. - -- improved: halved the number of css rules used -> much better performance. -- improved: font imports must be define in the `mod.js` so that they can also be used in - the enhancements menu. -- improved: tiling window-manager support (can hide titlebars entirely without dragarea/buttons). -- improved: extensions menu search is now case insensitive and includes options, inputs and versions. - the search box can also for focused with `CMD/CTRL+F`. -- improved: extensions menu filters shown either a ✓ or × to help understand the current state. -- improved: added individual text-colour rules for different background colours. -- improved: added variables for callout colouring. -- improved: replaced with `helpers.getNotion()` with the constant `helpers.__notion` to reduce - repeated function calls. -- improved: added variables for page width. -- improved/bugfix: emoji sets extension should now work on macOS and will change user agent to use - real emojis instead of downloading images when system default is selected. -- bugfix: enhancer settings should no longer reset on update (though this will not have - effect until the release after this one). -- bugfix: blue select tags are no longer purple. -- bugfix: page titles now respond to small-text mode. -- bugfix: weekly calendar view height is now sized correctly according to its contents. -- bugfix: made the open enhancements menu hotkey configurable and changed the default to `ALT+E`. - to remove conflict with the inline code highlight shortcut. -- bugfix: update property-layout to match notion changes again. -- bugfix: updated some of the tweak styling to match notion changes. -- bugfix: block-level text colours are now changed properly. -- bugfix: do not require data folder during installation, to prevent `sudo` attempting to - create it in `/var/root/`. -- bugfix: bullet points/checkboxes will now align properly in the right-to-left extension. -- themes: "littlepig" (light + dark) = monospaced themes using emojis and colourful text. -- extension: "font chooser" = customize fonts. for each option, type in the name of the font you would like to use, - or leave it blank to not change anything. -- extension: "always on top" = add an arrow/button to show the notion window on top of other windows - even if it's not focused. -- extension: "calendar scroll" = add a button to scroll down to the current week in fullpage/infinite-scroll calendars. -- extension: "hide help button" = hide the help button if you don't need it. -- extension: "bypass preview" = go straight to the normal full view when opening a page. -- extension: "word counter" = add page details: word/character/sentence/block count & speaking/reading times. - -notion-deb-builder has been discovered to not generate an app.asar and so is no longer supported. - -> 📥 `npm i -g notion-enhancer@0.9.0` - -### v0.8.5 (2020-08-29) - -- bugfix: separate text highlight and select tag variables. -- bugfix: bypass CSP for the `enhancement://` protocol - was failing on some platforms? - -> 📥 `npm i -g notion-enhancer@0.8.5` - -### v0.8.4 (2020-08-29) - -- bugfix: property-layout now works consistently with or without a banner. - -> 📥 `npm i -g notion-enhancer@0.8.4` - -### v0.8.3 (2020-08-29) - -previous release was a mistake: it did as intended on linux, but broke windows. -this should achieve the same thing in a more compatible way. - -> 📥 `npm i -g notion-enhancer@0.8.3` - -### v0.8.2 (2020-08-28) - -some things you just can't test until production... fixed the auto-installer -to use `./bin.js` instead of `notion-enhancer` - -> 📥 `npm i -g notion-enhancer@0.8.2` - -### v0.8.1 (2020-08-28) - -a clarity and stability update. - -- improved: more informative cli error messages (original ones can be accessed with the `-d/--dev` flag). -- bugfix: gallery variable didn't apply on fullpage. -- bugfix: date picker hid current date number. -- bugfix: small-text pages should now work as expected. -- bugfix: padding issues in page previews. -- bugfix: property-layout extension had been broken by internal notion changes. -- bugfix: linux installer path typo. -- bugfix: caret-color was being mistaken for color and block-level text colouring was broken. -- improved: auto-application on install. - -> 📥 `npm i -g notion-enhancer@0.8.1` - -### v0.8.0 (2020-08-27) - -complete rewrite with node.js. - -- new: simpler cli installation system (inc. commands: `apply`, `remove`, and `check`). -- new: mod loading system (easier to create new mods, adds to notion rather than overwriting). -- new: mod configuration menu. -- improved: more theming variable coverage - inc. light theme and sizing/spacing. -- bugfix: non-reproducable errors with python. -- bugfix: better launcher patching on linux. -- bugfix: fix frameless window issue introduced by notion desktop 2.0.9. -- extension: "custom inserts" = link files for small client-side tweaks. -- extension: "bracketed links" = render links surrounded with \[\[brackets]] instead of underlined. -- extension: "focus mode" = hide the titlebar/menubar if the sidebar is closed (will be shown on hover). -- theme: "dark+" = a vivid-colour near-black theme. -- theme: "neutral" = smoother colours and fonts, designed to be more pleasing to the eye. -- theme: "gameish" = a purple, "gamer-styled" theme with a blocky-font. -- theme: "pastel dark" = a smooth-transition true dark theme with a hint of pastel. -- extension: "emoji sets" = pick from a variety of emoji styles to use. -- extension: "night shift" = sync dark/light theme with the system (overrides normal theme setting). -- extension: "right-to-left" = enables auto rtl/ltr text direction detection. (ported from [github.com/obahareth/notion-rtl](https://github.com/obahareth/notion-rtl).) -- extension: "weekly view" = calendar views named "weekly" will show only the 7 days of this week. (ported from [github.com/adihd/notionweeklyview](https://github.com/adihd/notionweeklyview).)] -- extension: "property layout" = auto-collapse page properties that usually push down page content. (ported from [github.com/alexander-kazakov/notion-layout-extension](https://github.com/alexander-kazakov/notion-layout-extension).) - -> 📥 `npm i -g notion-enhancer@0.8.0` - -### v0.7.0 (2020-07-09) - -- new: tray option to use system default emojis (instead of twitter's emojiset). -- new: mac support (identical functionality to other platforms with the - exception of the native minimise/maximise/close buttons being kept, as they integrate - better with the OS while not being out-of-place in notion). -- new: notion-deb-builder support for linux. -- new: an alert will be shown if there is an update available for the enhancer. -- improved: replaced button symbols with svgs for multi-platform support. -- improved: window close button is now red on hover (thanks to [@torchatlas](https://github.com/torchatlas)). -- bugfix: `cleaner.py` patched for linux. -- bugfix: tray now operates as expected on linux. -- bugfix: odd mix of `\\` and `/` being used for windows filepaths. -- bugfix: app no longer crashes when sidebar is toggled. - -> 📥 [notion-enhancer.v0.7.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.7.0.zip) - -### v0.6.0 (2020-06-30) - -- style: custom fonts. -- style: font resizing. -- style: hide discussions (thanks to [u/Roosmaryn](https://www.reddit.com/user/Roosmaryn/)). -- new: custom colour theming, demonstrated via the dark+ theme. -- new: linux support (thanks to [@Blacksuan19](https://github.com/Blacksuan19)). -- improved: if hotkey is pressed while notion is unfocused, it will bring it to the front rather than hiding it. -- improved: stop window buttons breaking at smaller widths. -- improved: more obviously visible drag area. -- bugfix: specify UTF-8 encoding to prevent multibyte/gbk codec errors (thanks to [@etnperlong](https://github.com/etnperlong)). - -> 📥 [notion-enhancer.v0.6.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.6.0.zip) - -### v0.5.0 (2020-05-23) - -- new: running from the wsl. -- new: reload window with f5. -- improved: code has been refactored and cleaned up, - inc. file renaming and a `customiser.py` that doesn't require - a run of `cleaner.py` to build modifications. - improved: scrollbar colours that fit better with notion's theming. -- bugfix: un-break having multiple notion windows open. - -> 📥 [notion-enhancer.v0.5.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.5.0.zip) - -**development here taken over by [@dragonwocky](https://github.com/dragonwocky).** - -**the ~~crossed out~~ features below are no longer features included by default,** -**but can still easily be added as [custom tweaks](https://github.com/notion-enhancer/tweaks).** - -### v0.4.1 (2020-02-13) - -- bugfix: wider table & the "+" button not working in database pages. - -> 📥 [notion-enhancer.v4.1.zip](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d239a3cf-d553-4ef3-ab04-8b47892d9f9a/Notion_Customization_v4.1.zip) - -### v0.4.0 - -- new: tray icon. -- new: app startup options (+ saving). -- new: `Reset.py` -- improved: better output from `Customization Patcher.py`. -- bugfix: wider tables in "short page" mode. -- bugfix: unclickable buttons/draggable area (of titlebar). - -### v0.3.0 - -- new: show/hide window hotkey. -- new: app startup options. -- ~~style: smaller table icons.~~ - -> 📥 [notion-enhancer.v3.zip](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b01aa446-5727-476a-a25e-395472bfb1be/NotionScriptsV3.zip) - -### v0.2.0 - -- new: light/dark theme support for window control buttons + scrollbars. -- new: custom styles directly linked to the enhancer resources + compatible with web version. -- ~~improved: making table column width go below 100px.~~ - -### v0.1.0 - -- new: custom window control buttons. -- removed: default titlebar/menubar. -- ~~removed: huge padding of board view.~~ -- ~~removed: huge padding of table view.~~ -- ~~optional: making table column width go below 100px.~~ -- ~~style: thinner cover image + higher content block.~~ -- style: scrollbars. diff --git a/init.js b/init.js index 8398839..a56037c 100644 --- a/init.js +++ b/init.js @@ -13,22 +13,23 @@ signedIn = localStorage['LRU:KeyValueStore2:current-user-id']; if (site || page || (whitelisted && signedIn)) { - import(chrome.runtime.getURL('api/_.mjs')).then(async (api) => { - const { fs, registry, web } = api; - for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { - for (const sheet of mod.css?.client || []) { - web.loadStylesheet(`repo/${mod._dir}/${sheet}`); - } - for (let script of mod.js?.client || []) { - script = await import(fs.localPath(`repo/${mod._dir}/${script}`)); - script.default(api, await registry.db(mod.id)); - } + const api = await import(chrome.runtime.getURL('api/_.mjs')), + { fs, registry, web } = api; + + for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { + for (const sheet of mod.css?.client || []) { + web.loadStylesheet(`repo/${mod._dir}/${sheet}`); } - const errors = await registry.errors(); - if (errors.length) { - console.log('[notion-enhancer] registry errors:'); - console.table(errors); + for (let script of mod.js?.client || []) { + script = await import(fs.localPath(`repo/${mod._dir}/${script}`)); + script.default(api, await registry.db(mod.id)); } - }); + } + + const errors = await registry.errors(); + if (errors.length) { + console.log('[notion-enhancer] registry errors:'); + console.table(errors); + } } })(); From f038e8587d5af9d0664902832b7f454b408e9925 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 7 Nov 2021 11:57:54 +0000 Subject: [PATCH 115/179] [api] require() just before use --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 0ff69ab..7b48867 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0ff69abb37c32146de4d93060b5c233a0ac2df6d +Subproject commit 7b488677b7e97dc80befc4281058f51ff3d7cd07 From f3fe1920c1af986da9bb11942dd0c6c7c3055e41 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 8 Nov 2021 11:16:01 +0000 Subject: [PATCH 116/179] [api] remove conflict with corner buttons --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 7b48867..cf53ec6 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 7b488677b7e97dc80befc4281058f51ff3d7cd07 +Subproject commit cf53ec6eb71154ece1c1086c104e409113b6af61 From fa9fe5992b2d21010b46b63784b42a6bdfac2865 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 8 Nov 2021 11:20:57 +0000 Subject: [PATCH 117/179] [repo] misc fixes (see desc) themes: remove mono text hue rotate word-counter/outliner: update properly on focus collapsible headers: dont error if addedNodes is text node theming: style quick search, force help button opaque --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 9725eb9..7d5cd5a 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 9725eb9983edb8e3e1958e38bcfd73e34f199eb5 +Subproject commit 7d5cd5a2903ea92303bbd3598296c8fb7377d081 From 407170aa88dd5e2071326ca0a996b3711823d13f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 07:00:24 +0000 Subject: [PATCH 118/179] [api] cleanup folder structure, fix storage callback doc --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index cf53ec6..869b3e6 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit cf53ec6eb71154ece1c1086c104e409113b6af61 +Subproject commit 869b3e6a7ce35c780d0877507e1063d1dd6a278e From a4d4ac698ff179f05bc74a60865d05218e29ef84 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 07:01:45 +0000 Subject: [PATCH 119/179] [repo] update imports for api folder structure --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7d5cd5a..204d694 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 7d5cd5a2903ea92303bbd3598296c8fb7377d081 +Subproject commit 204d6946447e8e1f7d0f5096429ce06c7f5c6025 From d506badcc84cca6b101240a2fa8b000e61a71495 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 18:12:04 +1100 Subject: [PATCH 120/179] _.mjs -> index.mjs, fix storage callback doc --- env/storage.mjs | 6 ++---- init.js | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/env/storage.mjs b/env/storage.mjs index 3003231..f630963 100644 --- a/env/storage.mjs +++ b/env/storage.mjs @@ -68,7 +68,7 @@ export const set = (path, value) => { } chrome.storage.local.set({ [namespace]: values[namespace] }, () => { _onChangeListeners.forEach((listener) => - listener({ type: 'set', path: pathClone, new: value, old }) + listener({ path: pathClone, new: value, old }) ); res(value); }); @@ -113,9 +113,7 @@ export const removeChangeListener = (callback) => { /** * @callback onStorageChangeCallback * @param {object} event - * @param {string} event.type - 'set' or 'reset' - * @param {string} event.namespace- the name of the store, e.g. a mod id - * @param {string} [event.key] - the key associated with the changed value + * @param {string} event.path- the path of keys to the changed value * @param {string} [event.new] - the new value being persisted to the store * @param {string} [event.old] - the previous value associated with the key */ diff --git a/init.js b/init.js index a56037c..e8de939 100644 --- a/init.js +++ b/init.js @@ -13,7 +13,7 @@ signedIn = localStorage['LRU:KeyValueStore2:current-user-id']; if (site || page || (whitelisted && signedIn)) { - const api = await import(chrome.runtime.getURL('api/_.mjs')), + const api = await import(chrome.runtime.getURL('api/index.mjs')), { fs, registry, web } = api; for (const mod of await registry.list((mod) => registry.enabled(mod.id))) { From f6f3c9e3b2e87f3a318f9bb39a1fa281d84abb92 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 07:14:04 +0000 Subject: [PATCH 121/179] [api] update component stylesheet paths --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 869b3e6..8626fb7 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 869b3e6a7ce35c780d0877507e1063d1dd6a278e +Subproject commit 8626fb790cd6271562600b3cb1bc0051f13c119a From fe56527ef5b33c25a6b5fa40a55780f501eff87f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 07:14:49 +0000 Subject: [PATCH 122/179] [repo] collapsible properties: remove 'hide/show' from button title --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 204d694..3bd7a0b 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 204d6946447e8e1f7d0f5096429ce06c7f5c6025 +Subproject commit 3bd7a0b8f9ad46281a846aa45f345fad8682002c From 5310a3b86aefea513f1930f7989d60421e18d0c7 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 09:43:55 +0000 Subject: [PATCH 123/179] [repo] patch notion theme changes bar at top of db, cards, db groups, simple tables, calendar tags, calendar selection, code captions, corner actions, etc. --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 3bd7a0b..948f6c7 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 3bd7a0b8f9ad46281a846aa45f345fad8682002c +Subproject commit 948f6c785e9556bb9b5934109d4b443caf2f1cd2 From 0b1db1ffc0ef2a75267849b83848e1119edc8da1 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 09:44:33 +0000 Subject: [PATCH 124/179] [api] push mit license, corner action color vars --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 8626fb7..32e51cf 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 8626fb790cd6271562600b3cb1bc0051f13c119a +Subproject commit 32e51cfe45c90f9757ef3427cf60bb54aa95427a From e83c57ec27b1131de579402249f049d8cccae698 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 10:19:50 +0000 Subject: [PATCH 125/179] [repo] outliner: more reliable page detection --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 948f6c7..9a71eb9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 948f6c785e9556bb9b5934109d4b443caf2f1cd2 +Subproject commit 9a71eb94e23dd8cb02cd103c98f7eb8191ece251 From 0bc1fc169a4652151979d6c47cbe16c35f5c0f7a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 11:47:10 +0000 Subject: [PATCH 126/179] [repo] icon sets: encode imgs to data url to prevent quality reduction --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 9a71eb9..7707136 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 9a71eb94e23dd8cb02cd103c98f7eb8191ece251 +Subproject commit 7707136dfecd1d2b69bcb1db6d56dca35ea2b329 From d0d32e3df3fe964da997376d1d3ce312a8d18989 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 30 Nov 2021 12:04:31 +0000 Subject: [PATCH 127/179] [repo] use .reverse()[0] instead of .at(-1): not supported in older app env --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7707136..780f840 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 7707136dfecd1d2b69bcb1db6d56dca35ea2b329 +Subproject commit 780f840e2802c08d725da4a3824af3bf00be54bb From 5b97dd62bb51b66e4b752682421fa0d011b6ae23 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 2 Dec 2021 06:58:04 +0000 Subject: [PATCH 128/179] [api] fix cjs internal reference to registry.get --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 32e51cf..31835e9 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 32e51cfe45c90f9757ef3427cf60bb54aa95427a +Subproject commit 31835e966e93b686c24b5b6c76ea72a87ae987e1 From 807dd97f85bbbfa821a8d41f9d1f1bb01a096992 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 2 Dec 2021 06:58:48 +0000 Subject: [PATCH 129/179] [repo] desktop-only extension: integrated titlebar (inc. customisable icons) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 780f840..4bba513 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 780f840e2802c08d725da4a3824af3bf00be54bb +Subproject commit 4bba5136828cb36ff8d6a8b38779b9e5537fae9a From afe32db4c5c40bf6f28318a3cc4cb02cc4203ec2 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 2 Dec 2021 13:01:32 +0000 Subject: [PATCH 130/179] [repo] tray: hotkey, run in background window management features patched to reduce unexpected behaviour e.g. duplicate windows --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 4bba513..0bdaede 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4bba5136828cb36ff8d6a8b38779b9e5537fae9a +Subproject commit 0bdaede15880f211015963b14b7bcdb212e4acc1 From 25406dcd920a8d7cf7f2b08dfed80b04a9775cf1 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 3 Dec 2021 03:12:04 +0000 Subject: [PATCH 131/179] [repo] desktop-only extension: always on top (inc. customisable icons) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 0bdaede..05565d8 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 0bdaede15880f211015963b14b7bcdb212e4acc1 +Subproject commit 05565d85767237112007e2b54fb9dabfa384d5e3 From f9a44ff9aea53d1af5daa212675ece496b4ba5dd Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 4 Dec 2021 02:11:12 +0000 Subject: [PATCH 132/179] [repo] extension: view scale by @SP12893678 --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 05565d8..4d414da 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 05565d85767237112007e2b54fb9dabfa384d5e3 +Subproject commit 4d414da3fa577d1581ae0f5cd2f7cf2774589027 From 1cb0e648cc858cc310a53077e978d75ae91e7efa Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 4 Dec 2021 02:14:10 +0000 Subject: [PATCH 133/179] [repo] make view scale desktop-only (browsers have zoom builtin already) --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 4d414da..6ab3013 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4d414da3fa577d1581ae0f5cd2f7cf2774589027 +Subproject commit 6ab30139be95bca0d3cffdb8d5127da36624bab4 From 7063e71006857eac7687b3e7fe165f2253e1ac03 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 4 Dec 2021 06:36:35 +0000 Subject: [PATCH 134/179] [api] add api.electron to access __enhancerElectronApi --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 31835e9..f6ba894 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 31835e966e93b686c24b5b6c76ea72a87ae987e1 +Subproject commit f6ba894c4ffe737aafd487013a46a589ee09fbac From e9d414158a3d1bf152873d3b0a58ef8247735a7a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 5 Dec 2021 02:39:28 +0000 Subject: [PATCH 135/179] [repo] prevent topbar collapse, api.electron, treat menu as hideable window --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 6ab3013..7244741 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 6ab30139be95bca0d3cffdb8d5127da36624bab4 +Subproject commit 724474154744e2bcf61447e6b4aecb9c6c9d32d1 From 25b380b1338658d54c867603678eaa4d4d7a47fd Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 5 Dec 2021 06:53:20 +0000 Subject: [PATCH 136/179] [api] overhauled tooltips: directional positioning, wrapping to max lines --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index f6ba894..02d4357 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit f6ba894c4ffe737aafd487013a46a589ee09fbac +Subproject commit 02d4357c85075bfbb3ddbb7fa0fde3600ee5cb60 From b1451f9a8716dfc478b15be6ba5030afe4a3f7e2 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 5 Dec 2021 06:54:02 +0000 Subject: [PATCH 137/179] [repo] added tooltips to topbar mods, centered/tightened menu nav --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 7244741..8eb2810 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 724474154744e2bcf61447e6b4aecb9c6c9d32d1 +Subproject commit 8eb2810a1bedb96ea82e20dadefdcd328b6978f9 From 34f3b34e340b1f11cfe75a0e049ebeeb5950f1cd Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 7 Dec 2021 11:13:17 +0000 Subject: [PATCH 138/179] [api] use esbuild to compile .mjs to .cjs --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 02d4357..be9864f 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 02d4357c85075bfbb3ddbb7fa0fde3600ee5cb60 +Subproject commit be9864f90b60cc48837efb32bb4bc7f0d1a5acae From 85a3c268acf91684d4889e97f65b73495bfeb975 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 7 Dec 2021 12:18:06 +0000 Subject: [PATCH 139/179] [repo] ctrl+click open in new window, style ctrl+f popup --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 8eb2810..d7b78f4 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 8eb2810a1bedb96ea82e20dadefdcd328b6978f9 +Subproject commit d7b78f4836aea7ea0754c3bf10b49488897d90a0 From 568a8d6f7a785fc4152384152d4df64a00b7d4b7 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 8 Dec 2021 11:40:43 +0000 Subject: [PATCH 140/179] [api] fs.notionPath, minify index.cjs --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index be9864f..0357dac 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit be9864f90b60cc48837efb32bb4bc7f0d1a5acae +Subproject commit 0357dac3b0b23a83b4f33f28a5c44b59496ac599 From 1eb496e2c7582796657ca91a71efee7fb9b98f54 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 8 Dec 2021 11:41:47 +0000 Subject: [PATCH 141/179] [repo] tabs progress: recreate default webview + search --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index d7b78f4..859e363 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit d7b78f4836aea7ea0754c3bf10b49488897d90a0 +Subproject commit 859e3637b763f934d353058317a321327556de81 From 13f1c92b77411781d2cb217e4b8f25284d2b450c Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 9 Dec 2021 10:15:24 +0000 Subject: [PATCH 142/179] [repo] stricter theme application, ipc broadcasting --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 859e363..5bf3662 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 859e3637b763f934d353058317a321327556de81 +Subproject commit 5bf3662c964230108d120ebc9a96f99739974e81 From 204a04081776eb0faf19d31ebbe401ae5500c1b7 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 9 Dec 2021 13:05:09 +0000 Subject: [PATCH 143/179] [api] optionally imitate notion ipc channels --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 0357dac..4091fcb 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 0357dac3b0b23a83b4f33f28a5c44b59496ac599 +Subproject commit 4091fcba3fbbe7bb28daa458824107cb4790e8af From 55675f9bbc07dfd79d712778d03457b796cf0f80 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 9 Dec 2021 13:05:54 +0000 Subject: [PATCH 144/179] [repo] basic tabs: open/close/navigate between, integrated titlebar btns --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 5bf3662..4cd33f4 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5bf3662c964230108d120ebc9a96f99739974e81 +Subproject commit 4cd33f48a01dadaf493987296995a01600c926bf From e73f6cc17d236fd4f3547a1ba01ef37d57f03389 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 10 Dec 2021 03:41:20 +0000 Subject: [PATCH 145/179] [repo] draggable & slide-in/out tabs --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 4cd33f4..9892843 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4cd33f48a01dadaf493987296995a01600c926bf +Subproject commit 98928439deb52b2a326292f8cbcb16219c99317e From 0300086047a6a8d5ad4a4243ae872b340a6cb839 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 10 Dec 2021 03:41:58 +0000 Subject: [PATCH 146/179] [api] perf: only observe if window/document/tab is focused --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 4091fcb..4d5ecdd 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 4091fcba3fbbe7bb28daa458824107cb4790e8af +Subproject commit 4d5ecdd1eb7bcae6151b7b428dfad9a8f6192c74 From 0b5fff87165c9bfd4822db86e5dd5cc08d71c01e Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 10 Dec 2021 12:37:28 +0000 Subject: [PATCH 147/179] [repo] tabs: inter-window drag, titles & icons --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 9892843..94e0694 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 98928439deb52b2a326292f8cbcb16219c99317e +Subproject commit 94e069426beeb7e90cd7a5df55b6499353028163 From 3c6b589283db6bae63fbadb635f3544511468e74 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 10 Dec 2021 12:39:17 +0000 Subject: [PATCH 148/179] [api] remove hasFocus checks: not all events were being responded to --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 4d5ecdd..b98db17 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 4d5ecdd1eb7bcae6151b7b428dfad9a8f6192c74 +Subproject commit b98db17e400ec8ba1cd41185a3e9995fedd41c48 From e82a5d63789f02380c6be2ec1894ff33c50c265a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 11 Dec 2021 03:20:04 +0000 Subject: [PATCH 149/179] [repo] tab layout & label styles --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 94e0694..5f4f2d2 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 94e069426beeb7e90cd7a5df55b6499353028163 +Subproject commit 5f4f2d2833b46dec3a256d9e7feb7c31396cc902 From ef5dda70434e6da72b438fa5251a9d71ca352fed Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 11 Dec 2021 03:20:42 +0000 Subject: [PATCH 150/179] [api] make tooltip text alignment match relative pos --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index b98db17..c5f4146 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit b98db17e400ec8ba1cd41185a3e9995fedd41c48 +Subproject commit c5f41462e9b51351514bc2e63f2444887cf7b28b From 087ef790b068cd51840bf9722ff7f658678f670d Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 11 Dec 2021 07:02:51 +0000 Subject: [PATCH 151/179] [repo] tab hotkeys: close, open, select + better drag indicator --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 5f4f2d2..4817c10 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5f4f2d2833b46dec3a256d9e7feb7c31396cc902 +Subproject commit 4817c105ffd8f8db9663ef5d5ba1f19bd6b95dd0 From ec2d73550138063aaa538df1452afc4392dfa1f6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 11 Dec 2021 07:03:29 +0000 Subject: [PATCH 152/179] [api] tooltip text-align: auto -> start --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index c5f4146..069a172 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit c5f41462e9b51351514bc2e63f2444887cf7b28b +Subproject commit 069a17207a45c6e13af7c884b5ff67fa9f195543 From a60e59efeb0b8f2282f4b07cbb1f510b5bf12688 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 02:33:30 +0000 Subject: [PATCH 153/179] [repo] focus mode + tabs integration --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 4817c10..0298578 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 4817c105ffd8f8db9663ef5d5ba1f19bd6b95dd0 +Subproject commit 0298578df4d088dd4ad847b9311c72c8caa7aee8 From 87ff9a025736f2572d0d91b452e130be51ba9222 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 06:10:42 +0000 Subject: [PATCH 154/179] [repo] tabs: intercept ctrl+click & 'open in desktop app' create a new tab instead of a new window --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 0298578..ceeafb9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 0298578df4d088dd4ad847b9311c72c8caa7aee8 +Subproject commit ceeafb95910f207573135514b233643271c3c08b From 499a83dbd8a8eaaa8bae0986319b6a19f6f37dac Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 06:18:24 +0000 Subject: [PATCH 155/179] [repo] theme tag colours in selection input --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index ceeafb9..667abda 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit ceeafb95910f207573135514b233643271c3c08b +Subproject commit 667abdacc5602893539777390dd1d9c3f3bf5d40 From 3fb540e40fe1c6a5a7f960cc11d36120e8d1c046 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 11:24:48 +0000 Subject: [PATCH 156/179] [repo] tabs: restore prev. hotkey --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 667abda..69db4a3 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 667abdacc5602893539777390dd1d9c3f3bf5d40 +Subproject commit 69db4a3bc9b5541107665fe2779444532096c862 From 1bedd3021baef3675cd9cd68c25b20edc6f830ab Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 12:12:08 +0000 Subject: [PATCH 157/179] [repo] prevent attempts to open notion urls in menu window --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 69db4a3..2f602a3 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 69db4a3bc9b5541107665fe2779444532096c862 +Subproject commit 2f602a34b3293a7ece50dfa2bc8d22997102e65f From c83000e9a5db23258f3de79ed50d588b591cba75 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 12:13:05 +0000 Subject: [PATCH 158/179] [api] strict hotkey modifiers + electron window helpers --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 069a172..f5613ab 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 069a17207a45c6e13af7c884b5ff67fa9f195543 +Subproject commit f5613ab6b1ca4abffb597a81433a1557fc642533 From 1ef3fc0b61f5be4f08c9523fc7f86d98260cd870 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sun, 12 Dec 2021 12:56:38 +0000 Subject: [PATCH 159/179] [repo] tabs: remember last open --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 2f602a3..635b081 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 2f602a34b3293a7ece50dfa2bc8d22997102e65f +Subproject commit 635b0815f0bcdf0afceb6200110f634ab7e6bd89 From f393dd5b74b7ea477541d3269285f0633f4d5b0a Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 13 Dec 2021 02:35:09 +0000 Subject: [PATCH 160/179] [api] make fs ops depend on __enhancerElectronApi for relative paths (update bundled index.cjs) --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index f5613ab..cf0c264 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit f5613ab6b1ca4abffb597a81433a1557fc642533 +Subproject commit cf0c26434f8085823d1add0390befbb899866423 From 34159c5ed81f824f50d73d002a39c4230caf6479 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 13 Dec 2021 07:02:47 +0000 Subject: [PATCH 161/179] [repo] desktop-only ext. screenshots + fix custom icons in tab --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 635b081..5a03954 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 635b0815f0bcdf0afceb6200110f634ab7e6bd89 +Subproject commit 5a039543b275503ee0df6a888390821dae9807b4 From d908858ccc50494e77d5b30b7013fc1f2feaf0bf Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 13 Dec 2021 07:14:07 +0000 Subject: [PATCH 162/179] [repo] [imgbot] optimize screenshots --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 5a03954..33d70f9 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 5a039543b275503ee0df6a888390821dae9807b4 +Subproject commit 33d70f998901cf1c9cbf857f68c1d2bf4d5c8ceb From 92d286bac9bcc10b77bc39e71d84050f56676842 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 13 Dec 2021 07:40:12 +0000 Subject: [PATCH 163/179] [api] electron fs: use notion:// for api reqs instead of http:// --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index cf0c264..15fcbf6 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit cf0c26434f8085823d1add0390befbb899866423 +Subproject commit 15fcbf6d2e8fefa44b0b4508f57b3e18f117418d From f3ff2bee26bf5a5c23062bb3b5a07a1676add996 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 14 Dec 2021 10:12:14 +0000 Subject: [PATCH 164/179] [repo] detect tab icons when sidebar closed, weekly view support expanded cal rows --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 33d70f9..417ddad 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 33d70f998901cf1c9cbf857f68c1d2bf4d5c8ceb +Subproject commit 417ddadf345287fd3f78283c042646e6faa88793 From 643850ac59f9ebcc72e48fe8de285bd9ed4bc464 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 20 Dec 2021 01:07:05 +0000 Subject: [PATCH 165/179] [dep] remove prism.js --- dep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dep b/dep index 65ae194..f438863 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit 65ae1944a75b9525ee79610586438facf14d8531 +Subproject commit f438863d13399168b3429f2a2bad16a9394de5b5 From 4f4c3871ba7f3e0d77410d229698d1f2e811cd75 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Mon, 20 Dec 2021 01:14:30 +0000 Subject: [PATCH 166/179] [api] var -> const --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 15fcbf6..25e1f9e 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 15fcbf6d2e8fefa44b0b4508f57b3e18f117418d +Subproject commit 25e1f9ee2fd3099f8f13906671bcd18306354c04 From 987870702db65729a828e33f474662f76c9f17b8 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 24 Dec 2021 12:29:02 +0000 Subject: [PATCH 167/179] [api] minor cleanups, jsdoc changes --- api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api b/api index 25e1f9e..c019268 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit 25e1f9ee2fd3099f8f13906671bcd18306354c04 +Subproject commit c019268eb4abc8d2f436f47b4d2c4844809fe86e From 59f048747a2fef5d80920c0b9754f4a0939262b5 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 24 Dec 2021 12:30:24 +0000 Subject: [PATCH 168/179] [repo] icons/tweaks page links, remove unnecessary async, update profiles explanation --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 417ddad..57a85c8 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 417ddadf345287fd3f78283c042646e6faa88793 +Subproject commit 57a85c819edbbe208aea11197ee431eea4f84667 From 334e2dc0834adcf31411f677349339908cd31a22 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 24 Dec 2021 23:36:46 +1100 Subject: [PATCH 169/179] env jsdoc changes --- env/env.mjs | 7 ++----- env/fs.mjs | 11 ++++------- env/storage.mjs | 25 +++++++++++-------------- 3 files changed, 17 insertions(+), 26 deletions(-) diff --git a/env/env.mjs b/env/env.mjs index 98bc080..17c905d 100644 --- a/env/env.mjs +++ b/env/env.mjs @@ -1,15 +1,12 @@ /* - * notion-enhancer core: api + * notion-enhancer: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ 'use strict'; -/** - * environment-specific methods and constants - * @module notion-enhancer/api/env - */ +/** environment-specific methods and constants */ /** * the environment/platform name code is currently being executed in diff --git a/env/fs.mjs b/env/fs.mjs index 376440f..020a37d 100644 --- a/env/fs.mjs +++ b/env/fs.mjs @@ -1,15 +1,12 @@ /* - * notion-enhancer core: api + * notion-enhancer: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ 'use strict'; -/** - * environment-specific filesystem reading - * @module notion-enhancer/api/fs - */ +/** environment-specific file reading */ /** * transform a path relative to the enhancer root directory into an absolute path @@ -21,7 +18,7 @@ export const localPath = chrome.runtime.getURL; /** * fetch and parse a json file's contents * @param {string} path - a url or within-the-enhancer filepath - * @param {object} [opts] - the second argument of a fetch() request + * @param {object=} opts - the second argument of a fetch() request * @returns {object} the json value of the requested file as a js object */ export const getJSON = (path, opts = {}) => @@ -30,7 +27,7 @@ export const getJSON = (path, opts = {}) => /** * fetch a text file's contents * @param {string} path - a url or within-the-enhancer filepath - * @param {object} [opts] - the second argument of a fetch() request + * @param {object=} opts - the second argument of a fetch() request * @returns {string} the text content of the requested file */ export const getText = (path, opts = {}) => diff --git a/env/storage.mjs b/env/storage.mjs index f630963..0018513 100644 --- a/env/storage.mjs +++ b/env/storage.mjs @@ -1,23 +1,20 @@ /* - * notion-enhancer core: api + * notion-enhancer: api * (c) 2021 dragonwocky (https://dragonwocky.me/) * (https://notion-enhancer.github.io/) under the MIT license */ 'use strict'; -/** - * environment-specific data persistence - * @module notion-enhancer/api/storage - */ +/** environment-specific data persistence */ const _queue = [], _onChangeListeners = []; /** * get persisted data - * @param {array} path - the path of keys to the value being fetched - * @param {*} [fallback] - a default value if the path is not matched + * @param {string[]} path - the path of keys to the value being fetched + * @param {unknown=} fallback - a default value if the path is not matched * @returns {Promise} value ?? fallback */ export const get = (path, fallback = undefined) => { @@ -39,8 +36,8 @@ export const get = (path, fallback = undefined) => { /** * persist data - * @param {array} path - the path of keys to the value being set - * @param {*} value - the data to save + * @param {string[]} path - the path of keys to the value being set + * @param {unknown} value - the data to save * @returns {Promise} resolves when data has been saved */ export const set = (path, value) => { @@ -80,9 +77,9 @@ export const set = (path, value) => { /** * create a wrapper for accessing a partition of the storage - * @param {array} namespace - the path of keys to prefix all storage requests with - * @param {function} [get] - the storage get function to be wrapped - * @param {function} [set] - the storage set function to be wrapped + * @param {string[]} namespace - the path of keys to prefix all storage requests with + * @param {function=} get - the storage get function to be wrapped + * @param {function=} set - the storage set function to be wrapped * @returns {object} an object with the wrapped get/set functions */ export const db = (namespace, getFunc = get, setFunc = set) => { @@ -114,6 +111,6 @@ export const removeChangeListener = (callback) => { * @callback onStorageChangeCallback * @param {object} event * @param {string} event.path- the path of keys to the changed value - * @param {string} [event.new] - the new value being persisted to the store - * @param {string} [event.old] - the previous value associated with the key + * @param {string=} event.new - the new value being persisted to the store + * @param {string=} event.old - the previous value associated with the key */ From 3274697baf01ef8ba3075e8c0375bff8e9f67522 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 05:23:19 +0000 Subject: [PATCH 170/179] [dep] update README with link to new website --- api | 2 +- dep | 2 +- repo | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api b/api index c019268..9815d73 160000 --- a/api +++ b/api @@ -1 +1 @@ -Subproject commit c019268eb4abc8d2f436f47b4d2c4844809fe86e +Subproject commit 9815d73b9277e96864654a8d8dd48762039c9845 diff --git a/dep b/dep index f438863..1a47625 160000 --- a/dep +++ b/dep @@ -1 +1 @@ -Subproject commit f438863d13399168b3429f2a2bad16a9394de5b5 +Subproject commit 1a4762550fe185706be26678f734b0475066c3e4 diff --git a/repo b/repo index 57a85c8..ca25ae1 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 57a85c819edbbe208aea11197ee431eea4f84667 +Subproject commit ca25ae14aa61a31deedb2c6a97f72ad7e1ce1996 From eda8326cbd5f2729705cbf8d69c99ebd5391affd Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 05:23:26 +0000 Subject: [PATCH 171/179] [api] update README with link to new website --- media | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media b/media index 5472e23..0b254a2 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 5472e23e983ab893b72af6493bbf582017c182be +Subproject commit 0b254a205051f664889d0a6c2fb952b2680449c1 From 535942ca346e7cace7c5d6ab29e9c0002ad248d4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 05:24:09 +0000 Subject: [PATCH 172/179] [repo] change donation link, update README with link to new website --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index ca25ae1..076a580 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit ca25ae14aa61a31deedb2c6a97f72ad7e1ce1996 +Subproject commit 076a5801331d50fa95fc428657cdedfffb1069d3 From fd56422efdffb1824fd9a530fb925519545e356f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 16:28:34 +1100 Subject: [PATCH 173/179] update README with link to new website --- README.md | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2059e78..6c3c0b1 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,5 @@ -# extension +# notion-enhancer/extension -bringing all your favourite notion-enhancer features to the browser (wip) +an enhancer/customiser for the all-in-one productivity workspace notion.so (website) -> considering that using notion in the browser is more lightweight & probably preferred for some people since it means they have less apps open, i've always planned to eventually port the enhancer to be a chrome extension. -> -> since the enhancer focuses on being able to manipulate notion's app files, it's not going to be a very friendly transfer to web - a few features will have to be lost (e.g. frameless mode & tabs, of course) and the extensions system will need to be completely rebuilt. -> -> to make this work better, i'm splitting things up: an mod repository, a chrome extension, and an app loader. -> -> i'll be building the enhancer chrome-first from now on, since it'll be more limited there (and it's easier to add extra features when porting than to take features out), and then releasing the app loader a little afterwards. both the app loader and the chrome extension will source the same themes & extensions from the mod repository, and updates & releases of individual mods won't require waiting for the enhancer version anymore. - --- from the #announcements channel of the [notion-enhancer discord](https://discord.gg/sFWPXtA) +[read the docs online](https://notion-enhancer.github.io/) From 254ec24a9154b470cc61b53f2ebf974f33c4ff4f Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 22:44:59 +1100 Subject: [PATCH 174/179] remove unnecessary async in worker --- worker.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/worker.js b/worker.js index 0381e09..48f5833 100644 --- a/worker.js +++ b/worker.js @@ -6,7 +6,7 @@ 'use strict'; -async function focusMenu() { +function focusMenu() { chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT }, (tabs) => { const url = chrome.runtime.getURL('repo/menu/menu.html'), menu = tabs.find((tab) => tab.url.startsWith(url)); @@ -17,7 +17,7 @@ async function focusMenu() { } chrome.browserAction.onClicked.addListener(focusMenu); -async function focusNotion() { +function focusNotion() { chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT }, (tabs) => { const notion = tabs.find((tab) => { const url = new URL(tab.url), @@ -30,7 +30,7 @@ async function focusNotion() { }); } -async function reload() { +function reload() { chrome.tabs.query({ windowId: chrome.windows.WINDOW_ID_CURRENT }, (tabs) => { const menu = chrome.runtime.getURL('repo/menu/menu.html'); tabs.forEach((tab) => { From c80038d74e0d5ec3a5f14321d2a7b043f00617e1 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Tue, 28 Dec 2021 23:00:13 +1100 Subject: [PATCH 175/179] remove unnecessary host permissions --- manifest.json | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index c10a7b2..4d4d969 100644 --- a/manifest.json +++ b/manifest.json @@ -26,14 +26,5 @@ "js": ["init.js"] } ], - "permissions": [ - "tabs", - "storage", - "clipboardRead", - "clipboardWrite", - "unlimitedStorage", - "https://*.notion.so/*", - "https://*.notion.site/*", - "" - ] + "permissions": ["tabs", "storage", "clipboardRead", "clipboardWrite", "unlimitedStorage"] } From a5718a8edf27f4170ec7f8807e62e7354287f0c4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 29 Dec 2021 04:25:57 +0000 Subject: [PATCH 176/179] [repo] adjust menu input icon position --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index 076a580..f31c59e 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit 076a5801331d50fa95fc428657cdedfffb1069d3 +Subproject commit f31c59e98a7c8b9d150ba31278b5da3792a0c10a From 7d2610299206f219a8c1f4a12ea49b0655ceefb2 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 29 Dec 2021 04:40:56 +0000 Subject: [PATCH 177/179] [repo] theming: remove block on left of table head --- repo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repo b/repo index f31c59e..76e36ab 160000 --- a/repo +++ b/repo @@ -1 +1 @@ -Subproject commit f31c59e98a7c8b9d150ba31278b5da3792a0c10a +Subproject commit 76e36ab47ca2ffd354280b5c907f9ebb827c30c4 From 9a6749f432109f48019661a620fdb269a8b277c4 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 29 Dec 2021 07:14:49 +0000 Subject: [PATCH 178/179] [media] upload chrome webstore promo imgs --- media | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media b/media index 0b254a2..2a0a179 160000 --- a/media +++ b/media @@ -1 +1 @@ -Subproject commit 0b254a205051f664889d0a6c2fb952b2680449c1 +Subproject commit 2a0a17998385f1d86148b9213451b3a5deff6bae From 2bd9da0b44876dc94ccb540f889d1ea028362790 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Fri, 31 Dec 2021 20:47:34 +1100 Subject: [PATCH 179/179] readme: website -> browser --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c3c0b1..420700e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # notion-enhancer/extension -an enhancer/customiser for the all-in-one productivity workspace notion.so (website) +an enhancer/customiser for the all-in-one productivity workspace notion.so (browser) [read the docs online](https://notion-enhancer.github.io/)