From 7adda3e71f8d7e39cbd2ac30cb30799c431a34cb Mon Sep 17 00:00:00 2001 From: sairaj mote Date: Wed, 10 Nov 2021 04:04:09 +0530 Subject: [PATCH] Feature update -- Added text basic text formatting toolbar as floating widget for selected text -- Implement unique content sanitization and upload --- components.js | 243 ++++++++++++++++++- css/main.css | 88 ++++--- css/main.min.css | 2 +- css/main.scss | 80 ++++--- index.html | 599 ++++++++++++++++++++++++++-------------------- package-lock.json | 13 + package.json | 22 ++ 7 files changed, 707 insertions(+), 340 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json diff --git a/components.js b/components.js index 369eb45..4c81c44 100644 --- a/components.js +++ b/components.js @@ -2257,6 +2257,7 @@ smSelect.innerHTML = ` -o-text-overflow: ellipsis; text-overflow: ellipsis; white-space: nowrap; + font-weight: 700; } .selection{ border-radius: 0.3rem; @@ -2356,6 +2357,7 @@ customElements.define('sm-select', class extends HTMLElement { this.availableOptions this.previousOption this.isOpen = false; + this.label = '' this.slideDown = [{ transform: `translateY(-0.5rem)`, opacity: 0 @@ -2386,7 +2388,7 @@ customElements.define('sm-select', class extends HTMLElement { this.selectedOptionText = this.shadowRoot.querySelector('.selected-option-text') } static get observedAttributes() { - return ['value', 'disabled'] + return ['disabled', 'label'] } get value() { return this.getAttribute('value') @@ -2403,7 +2405,7 @@ customElements.define('sm-select', class extends HTMLElement { } firstElement.classList.add('check-selected') this.value = firstElement.getAttribute('value') - this.selectedOptionText.textContent = firstElement.textContent + this.selectedOptionText.textContent = `${this.label}${firstElement.textContent}` this.previousOption = firstElement; if (fire) { this.fireEvent() @@ -2464,7 +2466,7 @@ customElements.define('sm-select', class extends HTMLElement { handleOptionSelection(e) { if (this.previousOption !== document.activeElement) { this.value = document.activeElement.getAttribute('value') - this.selectedOptionText.textContent = document.activeElement.textContent; + this.selectedOptionText.textContent = `${this.label}${document.activeElement.textContent}`; this.fireEvent() if (this.previousOption) { this.previousOption.classList.remove('check-selected') @@ -2534,6 +2536,8 @@ customElements.define('sm-select', class extends HTMLElement { } else { this.selection.setAttribute('tabindex', '0') } + } else if (name === 'label') { + this.label = this.hasAttribute('label') ? `${this.getAttribute('label')} ` : '' } } }) @@ -3190,4 +3194,237 @@ customElements.define('sm-tab-panels', class extends HTMLElement { intersectionObserver.disconnect() document.removeEventListener(`switchedtab${this.id}`, this.handleTabChange) } +}) + +const smSwitch = document.createElement('template') +smSwitch.innerHTML = ` + +` + +customElements.define('sm-switch', class extends HTMLElement { + constructor() { + super() + this.attachShadow({ + mode: 'open' + }).append(smSwitch.content.cloneNode(true)) + this.switch = this.shadowRoot.querySelector('.switch'); + this.input = this.shadowRoot.querySelector('input') + this.isChecked = false + this.isDisabled = false + + this.dispatch = this.dispatch.bind(this) + } + + static get observedAttributes() { + return ['disabled', 'checked'] + } + + get disabled() { + return this.isDisabled + } + + set disabled(val) { + if (val) { + this.setAttribute('disabled', '') + } else { + this.removeAttribute('disabled') + } + } + + get checked() { + return this.isChecked + } + + set checked(value) { + if (value) { + this.setAttribute('checked', '') + } else { + this.removeAttribute('checked') + } + } + + dispatch() { + this.dispatchEvent(new CustomEvent('change', { + bubbles: true, + composed: true, + detail: { + value: this.isChecked + } + })) + } + + connectedCallback() { + this.addEventListener('keydown', e => { + if (e.code === "Space" && !this.isDisabled) { + e.preventDefault() + this.input.click() + } + }) + this.input.addEventListener('click', e => { + if (this.input.checked) + this.checked = true + else + this.checked = false + this.dispatch() + }) + } + attributeChangedCallback(name, oldValue, newValue) { + if (oldValue !== newValue) { + if (name === 'disabled') { + if (this.hasAttribute('disabled')) { + this.disabled = true + } + else { + this.disabled = false + } + } + else if (name === 'checked') { + if (this.hasAttribute('checked')) { + this.isChecked = true + this.input.checked = true + } + else { + this.isChecked = false + this.input.checked = false + } + } + } + } + }) \ No newline at end of file diff --git a/css/main.css b/css/main.css index 729c463..7918eb6 100644 --- a/css/main.css +++ b/css/main.css @@ -137,7 +137,6 @@ a:any-link:focus-visible { sm-input { font-size: 0.9rem; --border-radius: 0.3rem; - --background: var(--accent-color--light); } sm-button { @@ -385,7 +384,7 @@ ul { .icon-button { padding: 0.6rem; border-radius: 0.8rem; - background-color: var(--accent-color--light); + background-color: rgba(var(--text-color), 0.1); height: -webkit-max-content; height: -moz-max-content; height: max-content; @@ -463,7 +462,7 @@ button:active, align-items: center; width: 100%; grid-template-columns: auto 1fr; - gap: 0 0.3rem; + gap: 0 0.5rem; margin-right: 1rem; } .logo h4 { @@ -499,26 +498,6 @@ details[open] > summary .icon { transform: rotate(180deg); } -strip-select { - --gap: 0; - background-color: var(--accent-color--light); - border-radius: 0.3rem; -} - -strip-option { - font-weight: 500; - font-size: 0.8rem; - --border-radius: 0; - --active-option-color: rgba(var(--background-color), 1); - --active-option-background-color: var(--accent-color); -} -strip-option:first-of-type { - --border-radius: 0.3rem 0 0 0.3rem; -} -strip-option:last-of-type { - --border-radius: 0 0.3rem 0.3rem 0; -} - sm-select, sm-option { font-size: 0.9rem; @@ -553,15 +532,13 @@ sm-checkbox { #main_header { display: grid; gap: 1rem; - padding: 1rem; + padding: 1rem 1.5rem; -webkit-box-align: center; -ms-flex-align: center; align-items: center; grid-template-columns: auto 1fr auto auto; grid-column: 1/-1; background-color: var(--foreground-color); - border-radius: 0 0 1rem 1rem; - border: solid thin rgba(var(--text-color), 0.16); } .label { @@ -607,18 +584,17 @@ sm-checkbox { } .content-card { - width: min(70ch, 100%); + width: min(60ch, 100%); border-radius: 0.5rem; background-color: var(--foreground-color); border: solid thin rgba(var(--text-color), 0.16); } - .content__area { border-radius: inherit; padding: 1rem; - line-height: 1.7; white-space: pre-line; - font-size: 0.9rem !important; + font-size: 0.9rem; + line-height: 1.7; color: rgba(var(--text-color), 0.8); background-color: rgba(var(--text-color), 0.02); border-radius: 0.5rem; @@ -626,6 +602,12 @@ sm-checkbox { transition: -webkit-box-shadow 0.1s; transition: box-shadow 0.1s; transition: box-shadow 0.1s, -webkit-box-shadow 0.1s; + min-height: 70vh; +} +.content__area:empty::before { + content: attr(placeholder); + opacity: 0.6; + pointer-events: none; } .content__area:focus-within { outline: none; @@ -653,6 +635,11 @@ sm-checkbox { .formatting-button { padding: 0.2rem; border-radius: 0.3rem; + -webkit-transition: background-color 0.1s; + transition: background-color 0.1s; +} +.formatting-button.active:hover { + background-color: var(--accent-color); } .active { @@ -670,22 +657,45 @@ sm-checkbox { -webkit-box-shadow: 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); box-shadow: 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); border-radius: 0.5rem; + overflow: hidden; justify-self: center; + padding-left: 1.3rem; } -.quote-template .icon { - fill: var(--accent-color); - height: 4rem; - width: 4rem; - -webkit-transform: scaleX(-1); - transform: scaleX(-1); +.quote-template::before { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + position: absolute; + content: ""; + height: 100%; + width: 0.3rem; + background-color: var(--accent-color); +} +.quote-template blockquote { + display: -webkit-box; + display: -ms-flexbox; + display: flex; } .quote-template figcaption { margin-top: 0.5rem; color: rgba(var(--text-color), 0.8); font-size: 0.8rem; } -.quote-template figcaption::before { - content: "- "; + +#text_toolbar { + position: absolute; + z-index: 1; + left: 0; + top: 0; + -webkit-transition: -webkit-transform 0.3s; + transition: -webkit-transform 0.3s; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + background-color: var(--foreground-color); + padding: 0.3rem; + border-radius: 0.3rem; + -webkit-box-shadow: 0 0.1rem 0.2rem rgba(0, 0, 0, 0.06), 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); + box-shadow: 0 0.1rem 0.2rem rgba(0, 0, 0, 0.06), 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); } @media screen and (max-width: 40rem) and (any-hover: none) { @@ -772,7 +782,7 @@ button { } .interact:hover, button:hover { - background-color: var(--accent-color--light); + background-color: rgba(var(--text-color), 0.1); } .transaction-card button { diff --git a/css/main.min.css b/css/main.min.css index c8165fc..b066a08 100644 --- a/css/main.min.css +++ b/css/main.min.css @@ -1 +1 @@ -*{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Inter",sans-serif}:root{font-size:clamp(1rem, 1.2vmax, 1.2rem)}html,body{height:100%;scroll-behavior:smooth}body{color:rgba(var(--text-color), 1);background:rgba(var(--background-color), 1)}body,body *{--accent-color: #504dff;--accent-color--light: #eeeeff;--text-color: 36, 36, 36;--background-color: 248, 248, 248;--foreground-color: rgb(255, 255, 255);--danger-color: rgb(255, 75, 75);--green: #1cad59;--yellow: #f3a600;--loan-color: rgb(255, 171, 93);scrollbar-width:thin}body[data-theme=dark],body[data-theme=dark] *{--accent-color: #a3a1ff;--accent-color--light: rgba(142, 140, 255, 0.06);--text-color: 230, 230, 230;--text-color-light: 170, 170, 170;--background-color: 10, 10, 10;--foreground-color: rgb(24, 24, 24);--danger-color: rgb(255, 106, 106);--green: #00e676;--yellow: #ffd13a;--loan-color: rgb(255, 232, 170)}body[data-theme=dark] sm-popup::part(popup){background-color:var(--foreground-color)}p,strong{font-size:.9rem;max-width:70ch;line-height:1.7;color:rgba(var(--text-color), 0.8)}p:not(:last-of-type),strong:not(:last-of-type){margin-bottom:1.5rem}a:where([class]){color:inherit;text-decoration:none}a:where([class]):focus-visible{-webkit-box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset;box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}a{color:var(--accent-color)}button,.button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border:none;background-color:transparent;overflow:hidden;color:inherit;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:.9rem;font-weight:500}.button{white-space:nowrap;padding:.6rem 1rem;border-radius:.3rem;background-color:rgba(var(--text-color), 0.06);color:rgba(var(--text-color), 0.8);-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.button--primary{background-color:var(--accent-color);color:rgba(var(--background-color), 1)}button:disabled{opacity:.5}a:-webkit-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:-moz-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}sm-input{font-size:.9rem;--border-radius: 0.3rem;--background: var(--accent-color--light)}sm-button{--padding: 0.7rem 1rem}sm-button[variant=primary] .icon{fill:rgba(var(--background-color), 1)}sm-button[disabled] .icon{fill:rgba(var(--text-color), 0.6)}sm-button.uppercase{letter-spacing:.05em}sm-button.danger{--background: var(--danger-color);color:rgba(var(--background-color), 1)}ul{list-style:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full-bleed{grid-column:1/4}.h1{font-size:1.5rem}.h2{font-size:1.2rem}.h3{font-size:1rem}.h4{font-size:.9rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.grid-3{grid-template-columns:1fr auto auto}.flow-column{grid-auto-flow:column}.gap-0-5{gap:.5rem}.gap-1{gap:1rem}.gap-1-5{gap:1.5rem}.gap-2{gap:2rem}.gap-3{gap:3rem}.text-align-right{text-align:right}.align-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.align-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.text-center{text-align:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-right{margin-left:auto}.align-self-center{-ms-flex-item-align:center;align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.direction-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.w-100{width:100%}.interact{position:relative;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent}.empty-state{display:grid;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;width:100%;padding:1.5rem}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)+.empty-state{display:none}.icon{width:1.2rem;height:1.2rem;fill:rgba(var(--text-color), 0.8)}.button__icon{height:1.2rem;width:1.2rem}.button__icon--left{margin-right:.5rem}.button__icon--right{margin-left:.5rem}.icon-button{padding:.6rem;border-radius:.8rem;background-color:var(--accent-color--light);height:-webkit-max-content;height:-moz-max-content;height:max-content}.icon-button .icon{fill:var(--accent-color)}#confirmation_popup,#prompt_popup{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:1rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}#prompt_message{margin-bottom:1.5rem}button:active,.button:active,.interact:active{-webkit-transform:scale(0.96);transform:scale(0.96)}.popup__header{display:grid;gap:.5rem;width:100%;padding:0 1.5rem 0 .5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto}.popup__header__close{padding:.5rem;cursor:pointer}#main_page{padding:1.5rem}#main_page>section:nth-of-type(1){-ms-flex-line-pack:start;align-content:flex-start}.logo{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;grid-template-columns:auto 1fr;gap:0 .3rem;margin-right:1rem}.logo h4{text-transform:capitalize;font-size:.9rem;font-weight:600}.logo .main-logo{height:1.4rem;width:1.4rem;fill:rgba(var(--text-color), 1);stroke:none}details summary{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}details[open]>summary{margin-bottom:1rem}details[open]>summary .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}strip-select{--gap: 0;background-color:var(--accent-color--light);border-radius:.3rem}strip-option{font-weight:500;font-size:.8rem;--border-radius: 0;--active-option-color: rgba(var(--background-color), 1);--active-option-background-color: var(--accent-color)}strip-option:first-of-type{--border-radius: 0.3rem 0 0 0.3rem}strip-option:last-of-type{--border-radius: 0 0.3rem 0.3rem 0}sm-select,sm-option{font-size:.9rem}sm-checkbox{--height: 1rem;--width: 1rem;-webkit-tap-highlight-color:transparent}.warning{background-color:khaki;color:rgba(0,0,0,.7);padding:1rem;border-radius:.5rem;line-height:1.5}.page-layout{display:grid;grid-template-columns:1rem minmax(0, 1fr) 1rem}.page-layout>*{grid-column:2/3}.page{height:100%}#main_header{display:grid;gap:1rem;padding:1rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto auto;grid-column:1/-1;background-color:var(--foreground-color);border-radius:0 0 1rem 1rem;border:solid thin rgba(var(--text-color), 0.16)}.label{font-size:.8rem;color:rgba(var(--text-color), 0.8);margin-bottom:.2rem}.icon--success{fill:var(--green)}.icon--failure,.icon--error{fill:var(--danger-color)}#article_wrapper{justify-self:center;padding:1rem 0;gap:.5rem 0}.heading{display:-webkit-box;display:-ms-flexbox;display:flex}.heading::before{content:"";width:.3rem;height:100%;margin-right:.7rem;border-radius:.5rem;background-color:var(--accent-color)}.section-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;gap:1rem}.content-card{width:min(70ch, 100%);border-radius:.5rem;background-color:var(--foreground-color);border:solid thin rgba(var(--text-color), 0.16)}.content__area{border-radius:inherit;padding:1rem;line-height:1.7;white-space:pre-line;font-size:.9rem !important;color:rgba(var(--text-color), 0.8);background-color:rgba(var(--text-color), 0.02);border-radius:.5rem;-webkit-transition:-webkit-box-shadow .1s;transition:-webkit-box-shadow .1s;transition:box-shadow .1s;transition:box-shadow .1s, -webkit-box-shadow .1s}.content__area:focus-within{outline:none;-webkit-box-shadow:0 0 0 .1rem var(--accent-color) inset;box-shadow:0 0 0 .1rem var(--accent-color) inset}.content__options{gap:1rem;padding:.5rem 1rem;grid-template-columns:auto auto 1fr auto}.actionable-button{padding:.5rem .8rem;background-color:rgba(var(--text-color), 0.1);border-radius:2rem;border:solid thin rgba(var(--text-color), 0.3)}.actionable-button__title{font-size:.8rem;margin-left:.3rem}.formatting-button{padding:.2rem;border-radius:.3rem}.active{background-color:var(--accent-color)}.active .icon{fill:#fff}.quote-template{position:relative;padding:1rem;margin:1rem;background-color:var(--foreground-color);-webkit-box-shadow:0 .5rem 1rem -0.5rem rgba(0,0,0,.1);box-shadow:0 .5rem 1rem -0.5rem rgba(0,0,0,.1);border-radius:.5rem;justify-self:center}.quote-template .icon{fill:var(--accent-color);height:4rem;width:4rem;-webkit-transform:scaleX(-1);transform:scaleX(-1)}.quote-template figcaption{margin-top:.5rem;color:rgba(var(--text-color), 0.8);font-size:.8rem}.quote-template figcaption::before{content:"- "}@media screen and (max-width: 40rem)and (any-hover: none){.cancel-order span{display:none}}@media screen and (max-width: 40rem){sm-button{--padding: 0.9rem 1.6rem}.hide-on-mobile{display:none}}@media screen and (min-width: 40rem){sm-popup{--width: 24rem}.h1{font-size:2rem}.h2{font-size:1.8rem}.h3{font-size:1.3rem}.h4{font-size:1rem}.popup__header{padding:1rem 1.5rem 0 .5rem}#confirmation_popup{--width: 24rem}.page-layout{grid-template-columns:1fr 90vw 1fr}.hide-on-desktop{display:none}}@media screen and (min-width: 72rem){.page-layout{grid-template-columns:1fr 90vw 1fr}}@media screen and (min-width: 120rem){.page-layout{grid-template-columns:1fr 90vw 1fr}}@media(any-hover: hover){::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color), 0.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color), 0.5)}.interact,button{-webkit-transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,transform .3s;transition:background-color .3s,transform .3s,-webkit-transform .3s}.interact:hover,button:hover{background-color:var(--accent-color--light)}.transaction-card button{opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.transaction-card:hover button{opacity:1}} \ No newline at end of file +*{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Inter",sans-serif}:root{font-size:clamp(1rem, 1.2vmax, 1.2rem)}html,body{height:100%;scroll-behavior:smooth}body{color:rgba(var(--text-color), 1);background:rgba(var(--background-color), 1)}body,body *{--accent-color: #504dff;--accent-color--light: #eeeeff;--text-color: 36, 36, 36;--background-color: 248, 248, 248;--foreground-color: rgb(255, 255, 255);--danger-color: rgb(255, 75, 75);--green: #1cad59;--yellow: #f3a600;--loan-color: rgb(255, 171, 93);scrollbar-width:thin}body[data-theme=dark],body[data-theme=dark] *{--accent-color: #a3a1ff;--accent-color--light: rgba(142, 140, 255, 0.06);--text-color: 230, 230, 230;--text-color-light: 170, 170, 170;--background-color: 10, 10, 10;--foreground-color: rgb(24, 24, 24);--danger-color: rgb(255, 106, 106);--green: #00e676;--yellow: #ffd13a;--loan-color: rgb(255, 232, 170)}body[data-theme=dark] sm-popup::part(popup){background-color:var(--foreground-color)}p,strong{font-size:.9rem;max-width:70ch;line-height:1.7;color:rgba(var(--text-color), 0.8)}p:not(:last-of-type),strong:not(:last-of-type){margin-bottom:1.5rem}a:where([class]){color:inherit;text-decoration:none}a:where([class]):focus-visible{-webkit-box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset;box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}a{color:var(--accent-color)}button,.button{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;border:none;background-color:transparent;overflow:hidden;color:inherit;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:.9rem;font-weight:500}.button{white-space:nowrap;padding:.6rem 1rem;border-radius:.3rem;background-color:rgba(var(--text-color), 0.06);color:rgba(var(--text-color), 0.8);-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.button--primary{background-color:var(--accent-color);color:rgba(var(--background-color), 1)}button:disabled{opacity:.5}a:-webkit-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:-moz-any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}a:any-link:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}sm-input{font-size:.9rem;--border-radius: 0.3rem}sm-button{--padding: 0.7rem 1rem}sm-button[variant=primary] .icon{fill:rgba(var(--background-color), 1)}sm-button[disabled] .icon{fill:rgba(var(--text-color), 0.6)}sm-button.uppercase{letter-spacing:.05em}sm-button.danger{--background: var(--danger-color);color:rgba(var(--background-color), 1)}ul{list-style:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.full-bleed{grid-column:1/4}.h1{font-size:1.5rem}.h2{font-size:1.2rem}.h3{font-size:1rem}.h4{font-size:.9rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.grid{display:grid}.grid-3{grid-template-columns:1fr auto auto}.flow-column{grid-auto-flow:column}.gap-0-5{gap:.5rem}.gap-1{gap:1rem}.gap-1-5{gap:1.5rem}.gap-2{gap:2rem}.gap-3{gap:3rem}.text-align-right{text-align:right}.align-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.align-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.text-center{text-align:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.justify-right{margin-left:auto}.align-self-center{-ms-flex-item-align:center;align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.justify-self-end{justify-self:end}.direction-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.w-100{width:100%}.interact{position:relative;cursor:pointer;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;-webkit-tap-highlight-color:transparent}.empty-state{display:grid;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center;width:100%;padding:1.5rem}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)+.empty-state{display:none}.icon{width:1.2rem;height:1.2rem;fill:rgba(var(--text-color), 0.8)}.button__icon{height:1.2rem;width:1.2rem}.button__icon--left{margin-right:.5rem}.button__icon--right{margin-left:.5rem}.icon-button{padding:.6rem;border-radius:.8rem;background-color:rgba(var(--text-color), 0.1);height:-webkit-max-content;height:-moz-max-content;height:max-content}.icon-button .icon{fill:var(--accent-color)}#confirmation_popup,#prompt_popup{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:1rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}#prompt_message{margin-bottom:1.5rem}button:active,.button:active,.interact:active{-webkit-transform:scale(0.96);transform:scale(0.96)}.popup__header{display:grid;gap:.5rem;width:100%;padding:0 1.5rem 0 .5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto}.popup__header__close{padding:.5rem;cursor:pointer}#main_page{padding:1.5rem}#main_page>section:nth-of-type(1){-ms-flex-line-pack:start;align-content:flex-start}.logo{display:grid;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;grid-template-columns:auto 1fr;gap:0 .5rem;margin-right:1rem}.logo h4{text-transform:capitalize;font-size:.9rem;font-weight:600}.logo .main-logo{height:1.4rem;width:1.4rem;fill:rgba(var(--text-color), 1);stroke:none}details summary{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}details[open]>summary{margin-bottom:1rem}details[open]>summary .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}sm-select,sm-option{font-size:.9rem}sm-checkbox{--height: 1rem;--width: 1rem;-webkit-tap-highlight-color:transparent}.warning{background-color:khaki;color:rgba(0,0,0,.7);padding:1rem;border-radius:.5rem;line-height:1.5}.page-layout{display:grid;grid-template-columns:1rem minmax(0, 1fr) 1rem}.page-layout>*{grid-column:2/3}.page{height:100%}#main_header{display:grid;gap:1rem;padding:1rem 1.5rem;-webkit-box-align:center;-ms-flex-align:center;align-items:center;grid-template-columns:auto 1fr auto auto;grid-column:1/-1;background-color:var(--foreground-color)}.label{font-size:.8rem;color:rgba(var(--text-color), 0.8);margin-bottom:.2rem}.icon--success{fill:var(--green)}.icon--failure,.icon--error{fill:var(--danger-color)}#article_wrapper{justify-self:center;padding:1rem 0;gap:.5rem 0}.heading{display:-webkit-box;display:-ms-flexbox;display:flex}.heading::before{content:"";width:.3rem;height:100%;margin-right:.7rem;border-radius:.5rem;background-color:var(--accent-color)}.section-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;gap:1rem}.content-card{width:min(60ch, 100%);border-radius:.5rem;background-color:var(--foreground-color);border:solid thin rgba(var(--text-color), 0.16)}.content__area{border-radius:inherit;padding:1rem;white-space:pre-line;font-size:.9rem;line-height:1.7;color:rgba(var(--text-color), 0.8);background-color:rgba(var(--text-color), 0.02);border-radius:.5rem;-webkit-transition:-webkit-box-shadow .1s;transition:-webkit-box-shadow .1s;transition:box-shadow .1s;transition:box-shadow .1s, -webkit-box-shadow .1s;min-height:70vh}.content__area:empty::before{content:attr(placeholder);opacity:.6;pointer-events:none}.content__area:focus-within{outline:none;-webkit-box-shadow:0 0 0 .1rem var(--accent-color) inset;box-shadow:0 0 0 .1rem var(--accent-color) inset}.content__options{gap:1rem;padding:.5rem 1rem;grid-template-columns:auto auto 1fr auto}.actionable-button{padding:.5rem .8rem;background-color:rgba(var(--text-color), 0.1);border-radius:2rem;border:solid thin rgba(var(--text-color), 0.3)}.actionable-button__title{font-size:.8rem;margin-left:.3rem}.formatting-button{padding:.2rem;border-radius:.3rem;-webkit-transition:background-color .1s;transition:background-color .1s}.formatting-button.active:hover{background-color:var(--accent-color)}.active{background-color:var(--accent-color)}.active .icon{fill:#fff}.quote-template{position:relative;padding:1rem;margin:1rem;background-color:var(--foreground-color);-webkit-box-shadow:0 .5rem 1rem -0.5rem rgba(0,0,0,.1);box-shadow:0 .5rem 1rem -0.5rem rgba(0,0,0,.1);border-radius:.5rem;overflow:hidden;justify-self:center;padding-left:1.3rem}.quote-template::before{display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;content:"";height:100%;width:.3rem;background-color:var(--accent-color)}.quote-template blockquote{display:-webkit-box;display:-ms-flexbox;display:flex}.quote-template figcaption{margin-top:.5rem;color:rgba(var(--text-color), 0.8);font-size:.8rem}#text_toolbar{position:absolute;z-index:1;left:0;top:0;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;background-color:var(--foreground-color);padding:.3rem;border-radius:.3rem;-webkit-box-shadow:0 .1rem .2rem rgba(0,0,0,.06),0 .5rem 1rem -0.5rem rgba(0,0,0,.1);box-shadow:0 .1rem .2rem rgba(0,0,0,.06),0 .5rem 1rem -0.5rem rgba(0,0,0,.1)}@media screen and (max-width: 40rem)and (any-hover: none){.cancel-order span{display:none}}@media screen and (max-width: 40rem){sm-button{--padding: 0.9rem 1.6rem}.hide-on-mobile{display:none}}@media screen and (min-width: 40rem){sm-popup{--width: 24rem}.h1{font-size:2rem}.h2{font-size:1.8rem}.h3{font-size:1.3rem}.h4{font-size:1rem}.popup__header{padding:1rem 1.5rem 0 .5rem}#confirmation_popup{--width: 24rem}.page-layout{grid-template-columns:1fr 90vw 1fr}.hide-on-desktop{display:none}}@media screen and (min-width: 72rem){.page-layout{grid-template-columns:1fr 90vw 1fr}}@media screen and (min-width: 120rem){.page-layout{grid-template-columns:1fr 90vw 1fr}}@media(any-hover: hover){::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color), 0.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color), 0.5)}.interact,button{-webkit-transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,-webkit-transform .3s;transition:background-color .3s,transform .3s;transition:background-color .3s,transform .3s,-webkit-transform .3s}.interact:hover,button:hover{background-color:rgba(var(--text-color), 0.1)}.transaction-card button{opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.transaction-card:hover button{opacity:1}} \ No newline at end of file diff --git a/css/main.scss b/css/main.scss index 356a8ab..98d214d 100644 --- a/css/main.scss +++ b/css/main.scss @@ -118,7 +118,6 @@ a:any-link:focus-visible { sm-input { font-size: 0.9rem; --border-radius: 0.3rem; - --background: var(--accent-color--light); } sm-button { --padding: 0.7rem 1rem; @@ -348,7 +347,7 @@ ul { .icon-button { padding: 0.6rem; border-radius: 0.8rem; - background-color: var(--accent-color--light); + background-color: rgba(var(--text-color), 0.1); height: max-content; .icon { fill: var(--accent-color); @@ -409,7 +408,7 @@ button:active, align-items: center; width: 100%; grid-template-columns: auto 1fr; - gap: 0 0.3rem; + gap: 0 0.5rem; margin-right: 1rem; h4 { @@ -440,24 +439,6 @@ details { } } } -strip-select { - --gap: 0; - background-color: var(--accent-color--light); - border-radius: 0.3rem; -} -strip-option { - font-weight: 500; - font-size: 0.8rem; - --border-radius: 0; - --active-option-color: rgba(var(--background-color), 1); - --active-option-background-color: var(--accent-color); - &:first-of-type { - --border-radius: 0.3rem 0 0 0.3rem; - } - &:last-of-type { - --border-radius: 0 0.3rem 0.3rem 0; - } -} sm-select, sm-option { font-size: 0.9rem; @@ -488,13 +469,11 @@ sm-checkbox { #main_header { display: grid; gap: 1rem; - padding: 1rem; + padding: 1rem 1.5rem; align-items: center; grid-template-columns: auto 1fr auto auto; grid-column: 1/-1; background-color: var(--foreground-color); - border-radius: 0 0 1rem 1rem; - border: solid thin rgba(var(--text-color), 0.16); } .label { @@ -534,21 +513,29 @@ sm-checkbox { } .content-card { - width: min(70ch, 100%); + width: min(60ch, 100%); border-radius: 0.5rem; background-color: var(--foreground-color); border: solid thin rgba(var(--text-color), 0.16); + &--empty { + } } .content__area { border-radius: inherit; padding: 1rem; - line-height: 1.7; white-space: pre-line; - font-size: 0.9rem !important; + font-size: 0.9rem; + line-height: 1.7; color: rgba(var(--text-color), 0.8); background-color: rgba(var(--text-color), 0.02); border-radius: 0.5rem; transition: box-shadow 0.1s; + min-height: 70vh; + &:empty::before { + content: attr(placeholder); + opacity: 0.6; + pointer-events: none; + } &:focus-within { outline: none; box-shadow: 0 0 0 0.1rem var(--accent-color) inset; @@ -573,6 +560,10 @@ sm-checkbox { .formatting-button { padding: 0.2rem; border-radius: 0.3rem; + transition: background-color 0.1s; + &.active:hover { + background-color: var(--accent-color); + } } .active { background-color: var(--accent-color); @@ -588,12 +579,19 @@ sm-checkbox { background-color: var(--foreground-color); box-shadow: 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); border-radius: 0.5rem; + overflow: hidden; justify-self: center; - .icon { - fill: var(--accent-color); - height: 4rem; - width: 4rem; - transform: scaleX(-1); + padding-left: 1.3rem; + &::before { + display: flex; + position: absolute; + content: ""; + height: 100%; + width: 0.3rem; + background-color: var(--accent-color); + } + blockquote { + display: flex; } .quote { } @@ -601,12 +599,22 @@ sm-checkbox { margin-top: 0.5rem; color: rgba(var(--text-color), 0.8); font-size: 0.8rem; - &::before { - content: "- "; - } } } +#text_toolbar { + position: absolute; + z-index: 1; + left: 0; + top: 0; + transition: transform 0.3s; + background-color: var(--foreground-color); + padding: 0.3rem; + border-radius: 0.3rem; + box-shadow: 0 0.1rem 0.2rem rgba(0, 0, 0, 0.06), + 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); +} + @media screen and (max-width: 40rem) and (any-hover: none) { .cancel-order { span { @@ -686,7 +694,7 @@ sm-checkbox { button { transition: background-color 0.3s, transform 0.3s; &:hover { - background-color: var(--accent-color--light); + background-color: rgba(var(--text-color), 0.1); } } .transaction-card { diff --git a/index.html b/index.html index 2cd29f8..b9ee982 100644 --- a/index.html +++ b/index.html @@ -35,9 +35,7 @@ //for cloud apps subAdmins: [], application: "TEST_MODE", - appObjects: { - cc: {} - }, + appObjects: {}, generalData: {}, lastVC: {} } @@ -60,10 +58,12 @@
+

-
-
- - - - -
+
-
@@ -159,9 +153,64 @@
+ + + + + + + + +
+ Set as default +

+ This article will be opened by default for everyone when CC is first loaded. +

+
+
+ + Create +
+
+ + +