diff --git a/.gitignore b/.gitignore index 6dc4bf3..5972a0f 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,5 @@ api/.env # Claude settings .claude /.claude/* + +doc-conception.md diff --git a/public/assets/css/pagedjs-interface.css b/public/assets/css/pagedjs-interface.css index c03eeb7..2361147 100644 --- a/public/assets/css/pagedjs-interface.css +++ b/public/assets/css/pagedjs-interface.css @@ -161,7 +161,7 @@ .element-selected { outline: 2px dashed #7136ff !important; - background-color: #7136ff1a !important; + /* background-color: #7136ff1a !important; */ } .element-hover-label { diff --git a/public/assets/css/src/_actions-btn.scss b/public/assets/css/src/_actions-btn.scss new file mode 100644 index 0000000..d7ff436 --- /dev/null +++ b/public/assets/css/src/_actions-btn.scss @@ -0,0 +1,178 @@ +#actions-btn{ + +position: fixed; +bottom: 0.5rem; +left: 0rem; +padding: 2em; +width: calc(var(--panel-w) - 4em); + z-index: 1000; + --color-bg: var(--color-panel-bg); + --color-text: var(--color-interface-800); + + display: flex; + align-items: center; + // align-content: stretch; + gap: 1em; + // background-color: var(--color-panel-bg); + + button{ + color: var(--color-text); + + // font-size: 1.2rem; + font-family: var(--sans-serif); + height: calc(var(--input-h)*1.25); + padding: 0 1ch; + border: 1px solid currentColor; + border-radius: 5px; + font-weight: 500; + background-color: var(--color-panel-bg); + // width: 14ch; + + display: flex; + align-items: center; + // justify-content: center; + gap: 0.5ch; + margin-top: var(--space-xs); + cursor: pointer; + + + .icon{ + position: relative; + top: 2px; + } + svg{ + width: 20px; + height: 20px; + fill: var(--color-text); + } + + &.has-changes { +outline-offset: 2px; + outline: 3px solid rgb(247, 98, 98); + + } + } + + .error-tooltip{ + position: absolute; + top: 0em; + font-size: 10px; + max-width: 20ch; + color: rgb(247, 98, 98); + } + +} + + + + + +.last-saved{ + position: absolute; + padding-top: 0.75em; + font-size: 10px; + max-width: 20ch; + color: var(--color-interface-400); + + +} + + +.save-button-wrapper { + // position: fixed; + // top: 2rem; + // right: 5rem; + // z-index: 1000; + // display: flex; + // flex-direction: column; + // align-items: flex-end; + // gap: 0.5rem; +} + +// .save-btn { +// width: 3.5rem; +// height: 3.5rem; +// border-radius: 50%; +// border: none; +// background: var(--color-interface-300, #ccc); +// color: white; +// cursor: not-allowed; +// display: flex; +// align-items: center; +// justify-content: center; +// box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2); +// transition: all 0.2s ease; +// position: relative; +// } + +// .save-btn.has-changes { +// background: var(--color-page-highlight, #ff8a50); +// cursor: pointer; +// } + +// .save-btn.has-changes:hover { +// transform: scale(1.1); +// box-shadow: 0 6px 16px rgba(0, 0, 0, 0.3); +// } + +// .save-btn.is-saving { +// cursor: wait; +// } + +// .save-btn.has-error { +// background: #e74c3c; +// } + +// .save-btn.save-success { +// background: #2ecc71; +// } + +// .save-icon, +// .success-icon { +// width: 1.5rem; +// height: 1.5rem; +// } + +.spinner { + width: 1.5rem; + height: 1.5rem; + border-radius: 50%; + border-top: 2px solid white; + border-right: 2px solid transparent; + animation: rotation 1s linear infinite; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} + +// .last-saved { +// font-size: 0.75rem; +// color: var(--color-interface-600, #666); +// background: white; +// padding: 0.25rem 0.5rem; +// border-radius: 0.25rem; +// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +// white-space: nowrap; +// } + +// .error-tooltip { +// position: absolute; +// top: calc(100% + 0.5rem); +// right: 0; +// background: #e74c3c; +// color: white; +// padding: 0.5rem 0.75rem; +// border-radius: 0.25rem; +// font-size: 0.875rem; +// white-space: nowrap; +// box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); +// max-width: 15rem; +// word-wrap: break-word; +// white-space: normal; +// } \ No newline at end of file diff --git a/public/assets/css/src/_buttons.scss b/public/assets/css/src/_buttons.scss deleted file mode 100644 index 33cf881..0000000 --- a/public/assets/css/src/_buttons.scss +++ /dev/null @@ -1,60 +0,0 @@ - -.unit-toggle{ - button:not(.spinner-btn) { - cursor: pointer; - - border: 1px solid var(--color-interface-400); - color: var(--color-interface-400); - background-color: var(--color-panel-bg); - border-radius: var(--border-radius); - padding: 0.1rem 0.3rem; - height: calc(var(--input-h)*0.75); - - - &:not(.active):hover{ - background-color: var(--color-interface-100); - } - - &.active { - // border: 1px solid var(--color-interface-700); - color: var(--color-interface-050); - background-color: var(--color-interface-500); - cursor: auto; - } - - - } -} - - -#editor-panel .tabs{ - .tab{ - color: var(--color-interface-600); - font-size: 1rem; - font-family: var(--sans-serif); - height: var(--input-h); - padding: 0 1ch; - border: 1px solid currentColor; - border-radius: calc(var(--input-h)); - font-weight: 500; - background-color: var(--color-panel-bg); - - &.active{ - background-color: var(--color-interface-400); - border-color: var(--color-interface-400); - color: var(--color-panel-bg); - } - - &:not(.active):hover{ - cursor: pointer; - background-color: var(--color-interface-100); - } - } - // .tab { - // &.active { - // background-color: var(--color-txt); - // color: #fff; - // border: none; - // } - // } -} diff --git a/public/assets/css/src/_colors.scss b/public/assets/css/src/_colors.scss index 3bd46fd..41c7892 100644 --- a/public/assets/css/src/_colors.scss +++ b/public/assets/css/src/_colors.scss @@ -91,7 +91,7 @@ } -[data-color-type="elem"]{ +[data-color-type="text"]{ --color-050: #f4f0ff; --color-100: #e7e1ff; --color-200: #dacfff; diff --git a/public/assets/css/src/_forms-section.scss b/public/assets/css/src/_forms-section.scss deleted file mode 100644 index a9cae5d..0000000 --- a/public/assets/css/src/_forms-section.scss +++ /dev/null @@ -1,34 +0,0 @@ -.settings-section { - margin: var(--space-m) 0; - - h2 { - margin-bottom: var(--space); - - font-weight: 600; - font-size: 1.4rem; - - border-bottom: 1px solid var(--color-200); - color: var(--color-800); - } - - .infos { - font-size: 0.8rem; - color: var(--color-interface-400); - } -} - -.settings-subsection:not(:last-child) { - border-bottom: 1px solid var(--color-interface-100); -} - -.settings-subsection { - padding: var(--space-xs) 0; - - h3 { - margin-top: calc(var(--space-xs) * 1.5); - margin-bottom: calc(var(--space-xs) * 2); - // color: var(--color-600); - font-size: 1rem; - font-weight: 600; - } -} diff --git a/public/assets/css/src/_forms.scss b/public/assets/css/src/_forms.scss index b472c84..097184b 100644 --- a/public/assets/css/src/_forms.scss +++ b/public/assets/css/src/_forms.scss @@ -8,119 +8,71 @@ input[type="number"] { color: var(--color-txt); font-size: 1rem; padding-left: 0.5ch; - // min-width: var(--input-w); - // width: 100%; - // padding: 0 1ch; + padding-right: 0.5ch; } -.field { +input[type="number"]{ + padding-left: 0.75ch; +} + +select{ + flex-grow: 1; + width: 100%; +} + +.input-with-unit{ + display: flex; + align-items: center; + gap: 0.5ch; - label { - font-weight: 600; - color: var(--color-800); + input[type="range"]{ + flex-grow: 1; + margin-right: 1ch; } - .input-with-unit { - display: flex; - gap: 0.3rem; + .number-input{ + --input-w: 4ch; + flex-grow: 1; + max-width: calc(var(--input-w)*1.75); + display: flex; + align-items: center; + + .number-input{ + flex-grow: 1; + display: flex; + align-items: center; + + + } + input[type="number"]{ + width: var(--input-w); + padding-right: calc(var(--input-w)*0.5); + + } } - .unit-toggle { - height: var(--input-h); + .unit-toggle{ display: flex; - gap: 0.3rem; align-items: center; + gap: 0.25ch; + } - - .input-with-color { - width: 100%; - .clr-field { - width: 100%; - display: grid; - grid-template-columns: var(--input-h) 1fr; - grid-gap: 1ch; - button { - grid-column: 1; - position: relative; - border-radius: var(--border-radius); - cursor: pointer; - pointer-events: auto; - } - input { - grid-column: 2; - } - } - } + } -.field { - display: grid; - grid-template-columns: var(--label-w) 1fr; - label { - align-self: center; +.field-checkbox{ + display: flex; + align-items: center; + gap: 0.5ch; + input[type="checkbox"]{ + accent-color: var(--color-interface-800); } + } -.field-font { - display: grid; - grid-template-columns: var(--label-w) 1fr; - grid-template-rows: var(--input-h) var(--input-h); - select { - width: 100%; - } - .field-checkbox { - grid-column: 2; - padding-top: var(--space-xs); - label { - font-weight: 400; - margin-left: 0.75ch; - color: var(--color-txt); - } - } -} - -.field-text-size { - input[type="number"] { - width: var(--input-w-small); - padding-left: 0.75ch; - } - input[type="range"] { - flex-grow: 2; - flex-shrink: 2; - } -} - -.field-margin, -.field-size { - display: inline-grid; - width: calc(50% - 1ch); - grid-template-columns: 6.5ch var(--input-w-small) 1fr; - margin-bottom: var(--space-xs); - input { - width: var(--input-w-small); - padding-left: 0.75ch; - } - &:nth-of-type(odd) { - margin-right: 2ch; - } -} - -.checkbox-field { - margin: calc(var(--space-xs) * 2) 0; - grid-template-columns: 3ch 1fr; - input { - justify-self: left; - margin: 0; - } -} - -.field--view-only { - opacity: 0.3; -} - -/* Label with CSS tooltip */ +/* Label with tooltip ---------------------------------------------- */ .label-with-tooltip { text-decoration: underline dotted 1px var(--color-200); text-underline-offset: 2px; @@ -154,9 +106,82 @@ input[type="number"] { } } -// INPUT NUMBER =============================================== -// Masquer les spinners natifs partout +// INPUT COLOR ------------------------------------------------ + +.input-with-color { + width: 100%; + .clr-field { + width: 100%; + display: grid; + grid-template-columns: var(--input-h) minmax(0, 1fr); + grid-gap: 1ch; + button { + grid-column: 1; + position: relative; + border-radius: var(--border-radius); + cursor: pointer; + pointer-events: auto; + } + input { + grid-column: 2; + } + } + } + + +// INPUT RANGE --------------------------------------------- + +input[type="range"] { + -webkit-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; + + &::-webkit-slider-runnable-track { + height: 6px; + background: linear-gradient(to right, var(--color-interface-400) var(--progress, 0%), var(--color-interface-200) var(--progress, 0%)); + border: none; + border-radius: 2px; + } + &::-moz-range-track { + height: 6px; + background: linear-gradient(to right, var(--color-interface-400) var(--progress, 0%), var(--color-interface-200) var(--progress, 0%)); + border: none; + border-radius: 2px; + } + + + &::-moz-range-progress { + height: 6px; + background: var(--color-interface-400); + border: none; + border-radius: 2px; + } + + // Thumb + &::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + background: var(--color-interface-900); + border: none; + border-radius: 3px; + margin-top: -5px; + } + &::-moz-range-thumb { + width: 14px; + height: 14px; + background: var(--color-interface-900); + border: none; + border-radius: 3px; + } +} + +// INPUT NUMBER --------------------------------------------- + +// disable natif input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { -webkit-appearance: none; @@ -170,7 +195,6 @@ input[type="number"] { .number-input { position: relative; - // padding: 0 1ch!important; input { padding-top: 0; padding-bottom: 0; @@ -209,66 +233,3 @@ input[type="number"] { } } } -// Composant NumberInput avec boutons personnalisés -// .number-input { -// position: relative; -// display: flex; -// align-items: center; -// width: 100%; -// position: relative; - -// input[type="number"] { -// width: 100%; -// box-sizing: border-box; -// } - -// .spinner-buttons { -// background-color: red; -// position: absolute; -// right: 1px; -// top: 1px; -// bottom: 1px; -// display: flex; -// flex-direction: column; -// justify-content: center; -// gap: 1px; -// z-index: 10; - -// .spinner-btn { -// display: flex; -// align-items: center; -// justify-content: center; -// width: 20px; -// height: 10px; -// padding: 0; -// margin: 0; -// background-color: var(--color-interface-200); -// border: 1px solid var(--color-interface-300); -// border-radius: 2px; -// cursor: pointer; -// transition: background-color 0.15s ease; -// color: var(--color-interface-700); -// line-height: 0; - -// svg { -// width: 8px; -// height: 6px; -// display: block; -// } - -// &:hover:not(:disabled) { -// background-color: var(--color-interface-300); -// color: var(--color-interface-900); -// } - -// &:active:not(:disabled) { -// background-color: var(--color-interface-400); -// } - -// &:disabled { -// opacity: 0.3; -// cursor: not-allowed; -// } -// } -// } -// } diff --git a/public/assets/css/src/_panel-settings.scss b/public/assets/css/src/_panel-settings.scss new file mode 100644 index 0000000..67730b8 --- /dev/null +++ b/public/assets/css/src/_panel-settings.scss @@ -0,0 +1,75 @@ +.panel-settings__container { + // margin-top: var(--space-m); + margin-bottom: var(--space-s); + + border: 1px solid var(--color-300); + border-radius: var(--border-radius); + padding: var(--space-s); + + .settings__header { + display: flex; + align-items: center; + gap: var(--space-xs); + margin-bottom: var(--space-s); + + + .icon { + position: relative; + top: 2px; + + svg { + width: 20px; + height: 20px; + fill: var(--color-600); + } + } + + .title { + font-size: 1.2rem; + color: var(--color-600); + } + + } + + + .setting__section { + .setting__header { + color: var(--color-600); + } + } + + .setting__section[data-setting="format"] { + border-bottom: none; + padding-bottom: var(--space-xs); + + } + + .setting__section[data-setting="dimensions"] { + border-top: none; + padding-top: 0; + + .setting__header { + display: none; + } + + .setting__body { + grid-column: 2; + width: 0; + display: flex; + gap: var(--space-s); + + .field-size-page { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-xs); + + } + } + + .field-size-page:first-of-type .unit-toggle { + display: none; + } + + } +} \ No newline at end of file diff --git a/public/assets/css/src/_panel-tabs.scss b/public/assets/css/src/_panel-tabs.scss new file mode 100644 index 0000000..bbe2a71 --- /dev/null +++ b/public/assets/css/src/_panel-tabs.scss @@ -0,0 +1,26 @@ + + +#editor-panel .tabs{ + .tab{ + color: var(--color-interface-600); + font-size: 1rem; + font-family: var(--sans-serif); + height: var(--input-h); + padding: 0 1ch; + border: 1px solid currentColor; + border-radius: calc(var(--input-h)); + font-weight: 500; + background-color: var(--color-panel-bg); + + &.active{ + background-color: var(--color-interface-400); + border-color: var(--color-interface-400); + color: var(--color-panel-bg); + } + + &:not(.active):hover{ + cursor: pointer; + background-color: var(--color-interface-100); + } + } +} diff --git a/public/assets/css/src/_setting__section.scss b/public/assets/css/src/_setting__section.scss new file mode 100644 index 0000000..eeeb346 --- /dev/null +++ b/public/assets/css/src/_setting__section.scss @@ -0,0 +1,133 @@ +.setting__section{ + display: grid; + grid-template-columns: 17ch 1fr; + padding: var(--space-s) 0; + + &:not(:last-child) { + border-bottom: 1px solid var(--color-interface-100); +} + + .setting__header{ + height: var(--input-h); + display: flex; + align-items: center; + gap: 1ch; + align-self: start; + + + .label-with-tooltip{ + font-weight: bold; + } + } + + .info-default{ + font-size: 0.7rem; + color: var(--color-interface-500); + margin: 0; + grid-column: 2; + padding-top: 4px; + + } + + +.unit-toggle{ + button:not(.spinner-btn) { + cursor: pointer; + + border: 1px solid var(--color-interface-400); + color: var(--color-interface-400); + background-color: var(--color-panel-bg); + border-radius: var(--border-radius); + padding: 0.1rem 0.3rem; + height: calc(var(--input-h)*0.75); + + + &:not(.active):hover{ + background-color: var(--color-interface-100); + } + + &.active { + // border: 1px solid var(--color-interface-700); + color: var(--color-interface-050); + background-color: var(--color-interface-500); + cursor: auto; + } + + + } +} + + + +} + +.setting-disabled .setting__body { + opacity: 0.4; + pointer-events: none; +} + + +.setting__section[data-setting="font"] { + .setting__body{ + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + column-gap: 1ch; + margin-bottom: var(--space-xs); + + select{ + grid-column: span 2; + margin-bottom: var(--space-xs); + } + +} + +} + +.setting__section[data-setting="textDecoration"], +.setting__section[data-setting="border"] { + .setting__body{ + padding-top: 4px; + } + .field__option{ + display: grid; + width: 100%; + grid-template-columns: 9ch minmax(0, 1fr); + margin-bottom: var(--space-xs); + } +} + + +.setting__section[data-setting="margin"], +.setting__section[data-setting="padding"]{ + display: block; + + .setting__header{ + margin-bottom: var(--space-s); + .label-with-tooltip{ + flex-grow: 1; + } + + .lock-toggle svg{ + color: var(--color-interface-400); + } + .lock-toggle.locked svg{ + color: var(--color-interface-800); + } + } + + .setting__body{ + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + grid-row-gap: var(--space-xs); + grid-column-gap: var(--space-m); + } + + .field-margin{ + display: flex; + align-items: center; + .label-with-tooltip{ + flex-grow: 1; + align-items: center; + } + } +} \ No newline at end of file diff --git a/public/assets/css/src/_settings-popup.scss b/public/assets/css/src/_settings-popup.scss index 1cc55dc..123ed9e 100644 --- a/public/assets/css/src/_settings-popup.scss +++ b/public/assets/css/src/_settings-popup.scss @@ -1,4 +1,3 @@ -// Common styles for ElementPopup and PagePopup components .settings-popup { position: fixed; @@ -50,11 +49,11 @@ background-color: var(--color-panel-bg); } -.settings-subsection h4 { - margin: 0 0 0.5rem 0; - font-size: 0.875rem; - font-weight: 600; -} +// .setting__section h4 { +// margin: 0 0 0.5rem 0; +// font-size: 0.875rem; +// font-weight: 600; +// } // Label with CSS tooltip // .label-with-tooltip { @@ -91,27 +90,27 @@ // } // Inheritance lock/unlock button -.inheritance-btn { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0; - background: transparent; - border: none; - cursor: pointer; - font-size: 0.875rem; - color: #666; - transition: color 0.2s; +// .inheritance-btn { +// display: flex; +// align-items: center; +// gap: 0.5rem; +// padding: 0; +// background: transparent; +// border: none; +// cursor: pointer; +// font-size: 0.875rem; +// color: #666; +// transition: color 0.2s; - &:hover { - color: #333; - } +// &:hover { +// color: #333; +// } - svg { - width: 1.25rem; - height: 1.25rem; - } -} +// svg { +// width: 1.25rem; +// height: 1.25rem; +// } +// } // CSS Editor panel .popup-css { diff --git a/public/assets/css/src/_toggle-setting.scss b/public/assets/css/src/_toggle-setting.scss new file mode 100644 index 0000000..5871089 --- /dev/null +++ b/public/assets/css/src/_toggle-setting.scss @@ -0,0 +1,38 @@ +.toggle-setting { + position: absolute; + opacity: 0; + width: 0; + height: 0; + +} + +.toggle-setting + label { + position: relative; + display: inline-block; + width: 24px; + height: 14px; + background: #ccc; + border-radius: 18px; + transition: background 0.2s ease; + cursor: pointer; + + &::after { + content: ""; + position: absolute; + top: 2px; + left: 2px; + width: 10px; + height: 10px; + background: white; + border-radius: 50%; + transition: transform 0.2s ease; + } +} + +.toggle-setting:checked + label{ + background: var(--color-purple); + + &::after { + transform: translateX(10px); + } +} \ No newline at end of file diff --git a/public/assets/css/src/_variables.scss b/public/assets/css/src/_variables.scss index a9667b8..9156d46 100644 --- a/public/assets/css/src/_variables.scss +++ b/public/assets/css/src/_variables.scss @@ -5,10 +5,6 @@ --color-browngray-050: #f5f3f0; --color-browngray-200: #d0c4ba; - - - - --color-txt: var(--color-interface-900); --color-panel-bg: var(--color-interface-050); @@ -35,6 +31,6 @@ --label-w: 18ch; font-size: 14px; - --panel-w: 540px; + --panel-w: 560px; --panel-nav-h: 60px; } diff --git a/public/assets/css/style.css b/public/assets/css/style.css index 91c2e11..091e050 100644 --- a/public/assets/css/style.css +++ b/public/assets/css/style.css @@ -176,7 +176,7 @@ --color-900: #d96a30; } -[data-color-type=elem] { +[data-color-type=text] { --color-050: #f4f0ff; --color-100: #e7e1ff; --color-200: #dacfff; @@ -241,7 +241,7 @@ img { --input-w-small: 45px; --label-w: 18ch; font-size: 14px; - --panel-w: 540px; + --panel-w: 560px; --panel-nav-h: 60px; } @@ -269,6 +269,61 @@ h2 { string-set: title content(text); } +.panel-settings__container { + margin-bottom: var(--space-s); + border: 1px solid var(--color-300); + border-radius: var(--border-radius); + padding: var(--space-s); +} +.panel-settings__container .settings__header { + display: flex; + align-items: center; + gap: var(--space-xs); + margin-bottom: var(--space-s); +} +.panel-settings__container .settings__header .icon { + position: relative; + top: 2px; +} +.panel-settings__container .settings__header .icon svg { + width: 20px; + height: 20px; + fill: var(--color-600); +} +.panel-settings__container .settings__header .title { + font-size: 1.2rem; + color: var(--color-600); +} +.panel-settings__container .setting__section .setting__header { + color: var(--color-600); +} +.panel-settings__container .setting__section[data-setting=format] { + border-bottom: none; + padding-bottom: var(--space-xs); +} +.panel-settings__container .setting__section[data-setting=dimensions] { + border-top: none; + padding-top: 0; +} +.panel-settings__container .setting__section[data-setting=dimensions] .setting__header { + display: none; +} +.panel-settings__container .setting__section[data-setting=dimensions] .setting__body { + grid-column: 2; + width: 0; + display: flex; + gap: var(--space-s); +} +.panel-settings__container .setting__section[data-setting=dimensions] .setting__body .field-size-page { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--space-xs); +} +.panel-settings__container .setting__section[data-setting=dimensions] .field-size-page:first-of-type .unit-toggle { + display: none; +} + select, input[type=text], input[type=number] { @@ -279,111 +334,59 @@ input[type=number] { color: var(--color-txt); font-size: 1rem; padding-left: 0.5ch; + padding-right: 0.5ch; } -.field { - display: flex; +input[type=number] { + padding-left: 0.75ch; } -.field label { - font-weight: 600; - color: var(--color-800); + +select { + flex-grow: 1; + width: 100%; } -.field .input-with-unit { + +.input-with-unit { display: flex; - gap: 0.3rem; + align-items: center; + gap: 0.5ch; } -.field .unit-toggle { - height: var(--input-h); +.input-with-unit input[type=range] { + flex-grow: 1; + margin-right: 1ch; +} +.input-with-unit .number-input { + --input-w: 4ch; + flex-grow: 1; + max-width: calc(var(--input-w) * 1.75); display: flex; - gap: 0.3rem; align-items: center; } -.field .input-with-color { - width: 100%; +.input-with-unit .number-input .number-input { + flex-grow: 1; + display: flex; + align-items: center; } -.field .input-with-color .clr-field { - width: 100%; - display: grid; - grid-template-columns: var(--input-h) 1fr; - grid-gap: 1ch; +.input-with-unit .number-input input[type=number] { + width: var(--input-w); + padding-right: calc(var(--input-w) * 0.5); } -.field .input-with-color .clr-field button { - grid-column: 1; - position: relative; - border-radius: var(--border-radius); - cursor: pointer; - pointer-events: auto; -} -.field .input-with-color .clr-field input { - grid-column: 2; +.input-with-unit .unit-toggle { + display: flex; + align-items: center; + gap: 0.25ch; } -.field { - display: grid; - grid-template-columns: var(--label-w) 1fr; +.field-checkbox { + display: flex; + align-items: center; + gap: 0.5ch; } -.field label { - align-self: center; +.field-checkbox input[type=checkbox] { + accent-color: var(--color-interface-800); } -.field-font { - display: grid; - grid-template-columns: var(--label-w) 1fr; - grid-template-rows: var(--input-h) var(--input-h); -} -.field-font select { - width: 100%; -} -.field-font .field-checkbox { - grid-column: 2; - padding-top: var(--space-xs); -} -.field-font .field-checkbox label { - font-weight: 400; - margin-left: 0.75ch; - color: var(--color-txt); -} - -.field-text-size input[type=number] { - width: var(--input-w-small); - padding-left: 0.75ch; -} -.field-text-size input[type=range] { - flex-grow: 2; - flex-shrink: 2; -} - -.field-margin, -.field-size { - display: inline-grid; - width: calc(50% - 1ch); - grid-template-columns: 6.5ch var(--input-w-small) 1fr; - margin-bottom: var(--space-xs); -} -.field-margin input, -.field-size input { - width: var(--input-w-small); - padding-left: 0.75ch; -} -.field-margin:nth-of-type(odd), -.field-size:nth-of-type(odd) { - margin-right: 2ch; -} - -.checkbox-field { - margin: calc(var(--space-xs) * 2) 0; - grid-template-columns: 3ch 1fr; -} -.checkbox-field input { - justify-self: left; - margin: 0; -} - -.field--view-only { - opacity: 0.3; -} - -/* Label with CSS tooltip */ +/* Label with tooltip ---------------------------------------------- */ .label-with-tooltip { -webkit-text-decoration: underline dotted 1px var(--color-200); text-decoration: underline dotted 1px var(--color-200); @@ -414,6 +417,69 @@ input[type=number] { visibility: visible; } +.input-with-color { + width: 100%; +} +.input-with-color .clr-field { + width: 100%; + display: grid; + grid-template-columns: var(--input-h) minmax(0, 1fr); + grid-gap: 1ch; +} +.input-with-color .clr-field button { + grid-column: 1; + position: relative; + border-radius: var(--border-radius); + cursor: pointer; + pointer-events: auto; +} +.input-with-color .clr-field input { + grid-column: 2; +} + +input[type=range] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: transparent; + cursor: pointer; +} +input[type=range]::-webkit-slider-runnable-track { + height: 6px; + background: linear-gradient(to right, var(--color-interface-400) var(--progress, 0%), var(--color-interface-200) var(--progress, 0%)); + border: none; + border-radius: 2px; +} +input[type=range]::-moz-range-track { + height: 6px; + background: linear-gradient(to right, var(--color-interface-400) var(--progress, 0%), var(--color-interface-200) var(--progress, 0%)); + border: none; + border-radius: 2px; +} +input[type=range]::-moz-range-progress { + height: 6px; + background: var(--color-interface-400); + border: none; + border-radius: 2px; +} +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 14px; + height: 14px; + background: var(--color-interface-900); + border: none; + border-radius: 3px; + margin-top: -5px; +} +input[type=range]::-moz-range-thumb { + width: 14px; + height: 14px; + background: var(--color-interface-900); + border: none; + border-radius: 3px; +} + input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { -webkit-appearance: none; @@ -456,53 +522,6 @@ input[type=number] { .number-input .spinner-buttons button:hover svg path { fill: var(--color-interface-900); } -.settings-section { - margin: var(--space-m) 0; -} -.settings-section h2 { - margin-bottom: var(--space); - font-weight: 600; - font-size: 1.4rem; - border-bottom: 1px solid var(--color-200); - color: var(--color-800); -} -.settings-section .infos { - font-size: 0.8rem; - color: var(--color-interface-400); -} - -.settings-subsection:not(:last-child) { - border-bottom: 1px solid var(--color-interface-100); -} - -.settings-subsection { - padding: var(--space-xs) 0; -} -.settings-subsection h3 { - margin-top: calc(var(--space-xs) * 1.5); - margin-bottom: calc(var(--space-xs) * 2); - font-size: 1rem; - font-weight: 600; -} - -.unit-toggle button:not(.spinner-btn) { - cursor: pointer; - border: 1px solid var(--color-interface-400); - color: var(--color-interface-400); - background-color: var(--color-panel-bg); - border-radius: var(--border-radius); - padding: 0.1rem 0.3rem; - height: calc(var(--input-h) * 0.75); -} -.unit-toggle button:not(.spinner-btn):not(.active):hover { - background-color: var(--color-interface-100); -} -.unit-toggle button:not(.spinner-btn).active { - color: var(--color-interface-050); - background-color: var(--color-interface-500); - cursor: auto; -} - #editor-panel .tabs .tab { color: var(--color-interface-600); font-size: 1rem; @@ -524,6 +543,116 @@ input[type=number] { background-color: var(--color-interface-100); } +#actions-btn { + position: fixed; + bottom: 0.5rem; + left: 0rem; + padding: 2em; + width: calc(var(--panel-w) - 4em); + z-index: 1000; + --color-bg: var(--color-panel-bg); + --color-text: var(--color-interface-800); + display: flex; + align-items: center; + gap: 1em; +} +#actions-btn button { + color: var(--color-text); + font-family: var(--sans-serif); + height: calc(var(--input-h) * 1.25); + padding: 0 1ch; + border: 1px solid currentColor; + border-radius: 5px; + font-weight: 500; + background-color: var(--color-panel-bg); + display: flex; + align-items: center; + gap: 0.5ch; + margin-top: var(--space-xs); + cursor: pointer; +} +#actions-btn button .icon { + position: relative; + top: 2px; +} +#actions-btn button svg { + width: 20px; + height: 20px; + fill: var(--color-text); +} +#actions-btn button.has-changes { + outline-offset: 2px; + outline: 3px solid rgb(247, 98, 98); +} +#actions-btn .error-tooltip { + position: absolute; + top: 0em; + font-size: 10px; + max-width: 20ch; + color: rgb(247, 98, 98); +} + +.last-saved { + position: absolute; + padding-top: 0.75em; + font-size: 10px; + max-width: 20ch; + color: var(--color-interface-400); +} + +.spinner { + width: 1.5rem; + height: 1.5rem; + border-radius: 50%; + border-top: 2px solid white; + border-right: 2px solid transparent; + animation: rotation 1s linear infinite; +} + +@keyframes rotation { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.toggle-setting { + position: absolute; + opacity: 0; + width: 0; + height: 0; +} + +.toggle-setting + label { + position: relative; + display: inline-block; + width: 24px; + height: 14px; + background: #ccc; + border-radius: 18px; + transition: background 0.2s ease; + cursor: pointer; +} +.toggle-setting + label::after { + content: ""; + position: absolute; + top: 2px; + left: 2px; + width: 10px; + height: 10px; + background: white; + border-radius: 50%; + transition: transform 0.2s ease; +} + +.toggle-setting:checked + label { + background: var(--color-purple); +} +.toggle-setting:checked + label::after { + transform: translateX(10px); +} + .settings-popup { position: fixed; background: white; @@ -574,32 +703,6 @@ input[type=number] { background-color: var(--color-panel-bg); } -.settings-subsection h4 { - margin: 0 0 0.5rem 0; - font-size: 0.875rem; - font-weight: 600; -} - -.inheritance-btn { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0; - background: transparent; - border: none; - cursor: pointer; - font-size: 0.875rem; - color: #666; - transition: color 0.2s; -} -.inheritance-btn:hover { - color: #333; -} -.inheritance-btn svg { - width: 1.25rem; - height: 1.25rem; -} - .popup-css { flex: 1; background: #f5f5f5; @@ -690,6 +793,116 @@ input[type=number] { outline: none; } +.setting__section { + display: grid; + grid-template-columns: 17ch 1fr; + padding: var(--space-s) 0; +} +.setting__section:not(:last-child) { + border-bottom: 1px solid var(--color-interface-100); +} +.setting__section .setting__header { + height: var(--input-h); + display: flex; + align-items: center; + gap: 1ch; + align-self: start; +} +.setting__section .setting__header .label-with-tooltip { + font-weight: bold; +} +.setting__section .info-default { + font-size: 0.7rem; + color: var(--color-interface-500); + margin: 0; + grid-column: 2; + padding-top: 4px; +} +.setting__section .unit-toggle button:not(.spinner-btn) { + cursor: pointer; + border: 1px solid var(--color-interface-400); + color: var(--color-interface-400); + background-color: var(--color-panel-bg); + border-radius: var(--border-radius); + padding: 0.1rem 0.3rem; + height: calc(var(--input-h) * 0.75); +} +.setting__section .unit-toggle button:not(.spinner-btn):not(.active):hover { + background-color: var(--color-interface-100); +} +.setting__section .unit-toggle button:not(.spinner-btn).active { + color: var(--color-interface-050); + background-color: var(--color-interface-500); + cursor: auto; +} + +.setting-disabled .setting__body { + opacity: 0.4; + pointer-events: none; +} + +.setting__section[data-setting=font] .setting__body { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + -moz-column-gap: 1ch; + column-gap: 1ch; + margin-bottom: var(--space-xs); +} +.setting__section[data-setting=font] .setting__body select { + grid-column: span 2; + margin-bottom: var(--space-xs); +} + +.setting__section[data-setting=textDecoration] .setting__body, +.setting__section[data-setting=border] .setting__body { + padding-top: 4px; +} +.setting__section[data-setting=textDecoration] .field__option, +.setting__section[data-setting=border] .field__option { + display: grid; + width: 100%; + grid-template-columns: 9ch minmax(0, 1fr); + margin-bottom: var(--space-xs); +} + +.setting__section[data-setting=margin], +.setting__section[data-setting=padding] { + display: block; +} +.setting__section[data-setting=margin] .setting__header, +.setting__section[data-setting=padding] .setting__header { + margin-bottom: var(--space-s); +} +.setting__section[data-setting=margin] .setting__header .label-with-tooltip, +.setting__section[data-setting=padding] .setting__header .label-with-tooltip { + flex-grow: 1; +} +.setting__section[data-setting=margin] .setting__header .lock-toggle svg, +.setting__section[data-setting=padding] .setting__header .lock-toggle svg { + color: var(--color-interface-400); +} +.setting__section[data-setting=margin] .setting__header .lock-toggle.locked svg, +.setting__section[data-setting=padding] .setting__header .lock-toggle.locked svg { + color: var(--color-interface-800); +} +.setting__section[data-setting=margin] .setting__body, +.setting__section[data-setting=padding] .setting__body { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + grid-row-gap: var(--space-xs); + grid-column-gap: var(--space-m); +} +.setting__section[data-setting=margin] .field-margin, +.setting__section[data-setting=padding] .field-margin { + display: flex; + align-items: center; +} +.setting__section[data-setting=margin] .field-margin .label-with-tooltip, +.setting__section[data-setting=padding] .field-margin .label-with-tooltip { + flex-grow: 1; + align-items: center; +} + button[disabled] { cursor: not-allowed !important; opacity: 0.6; diff --git a/public/assets/css/style.css.map b/public/assets/css/style.css.map index 7512c9a..eafcd95 100644 --- a/public/assets/css/style.css.map +++ b/public/assets/css/style.css.map @@ -1 +1 @@ -{"version":3,"sources":["src/_fonts.scss","style.css","src/_colors.scss","src/_reset.scss","src/_variables.scss","src/_text.scss","src/_print-styles.scss","src/_forms.scss","src/_forms-section.scss","src/_buttons.scss","src/_settings-popup.scss","src/_global.scss"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file +{"version":3,"sources":["src/_fonts.scss","style.css","src/_colors.scss","src/_reset.scss","src/_variables.scss","src/_text.scss","src/_print-styles.scss","src/_panel-settings.scss","src/_forms.scss","src/_panel-tabs.scss","src/_actions-btn.scss","src/_toggle-setting.scss","src/_settings-popup.scss","src/_setting__section.scss","src/_global.scss"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/public/assets/css/style.scss b/public/assets/css/style.scss index e05b0f7..240aa4e 100644 --- a/public/assets/css/style.scss +++ b/public/assets/css/style.scss @@ -4,8 +4,11 @@ @use "src/_variables.scss" as *; @use "src/_text.scss" as *; @use "src/_print-styles.scss" as *; +@use "src/_panel-settings.scss" as *; @use "src/_forms.scss" as *; -@use "src/_forms-section.scss" as *; -@use "src/_buttons.scss" as *; +@use "src/_panel-tabs.scss" as *; +@use "src/_actions-btn.scss" as *; +@use "src/_toggle-setting.scss" as *; @use "src/_settings-popup.scss" as *; +@use "src/_setting__section.scss" as *; @use "src/_global.scss" as *; diff --git a/public/assets/css/stylesheet.print.css b/public/assets/css/stylesheet.print.css index 12776e7..2002186 100644 --- a/public/assets/css/stylesheet.print.css +++ b/public/assets/css/stylesheet.print.css @@ -1,8 +1,4 @@ -@page { - size: A5; - margin: 20mm 15mm 26mm 15mm; - background: rgba(255, 255, 255, 1); -} + @page { @bottom-center { @@ -10,9 +6,6 @@ } } -body { - font-family: "DM Sans", sans-serif; -} @@ -21,10 +14,7 @@ figure, img{ margin: 0; } -p{ - font-size: 14px; - line-height: 18px; -} + /* ─────────────────────────────────────────── @@ -40,31 +30,6 @@ p{ z-index: -1; } - -h1{ - font-size: 38px; - background: rgba(255, 255, 255, 0.521); - padding: 10px 20px; - margin: 0; - margin-top: 60px; -} - -p.author{ - font-size: 24px; - font-weight: bold; - background: rgba(255, 255, 255, 0.521); - padding: 10px 20px; - margin: 0; - margin-top: 20px; -} - -.introduction{ - font-size: 26px; - background: rgba(255, 255, 255, 0.521); - padding: 10px 20px; - margin: 0; - margin-top: 60px; -} .figure-backgroung-cover img{ width: 100%; height: 100%; @@ -72,6 +37,16 @@ p.author{ } +/* +.introduction{ + font-size: 26px; + background: rgba(255, 255, 255, 0.521); + padding: 10px 20px; + margin: 0; + margin-top: 60px; +} + */ + /* ─────────────────────────────────────────── @@ -84,15 +59,9 @@ p.author{ h2{ - font-size: 38px; - margin-top: 36px; - background-color: #cfcfcf; - padding: 20px; break-after: avoid; } - - - + /* ─────────────────────────────────────────── CHAPITRES @@ -100,8 +69,7 @@ h2{ h3{ - margin-top: 30px; - break-after: avoid; + break-after: avoid; } @@ -111,9 +79,6 @@ h3{ h4{ break-after: avoid; - margin-top: 30px; - text-decoration: underline; - } @@ -121,13 +86,22 @@ h4{ MARKERS ─────────────────────────────────────────── */ - -h5{ + +.marker-title{ display: flex; align-items: center; + } .marker-title img{ - width: 40px; + width: 30px; +} + + +h5{ + font-weight: bold; + font-size: 16px; + margin-top: 20px; + margin-bottom: 10px; } diff --git a/public/assets/fonts/webfont/Inconsolata-Black.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Black.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Black.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Black.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-Bold.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Bold.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Bold.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Bold.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-ExtraBold.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-ExtraBold.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-ExtraBold.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-ExtraBold.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-ExtraLight.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-ExtraLight.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-ExtraLight.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-ExtraLight.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-Light.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Light.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Light.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Light.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-Medium.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Medium.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Medium.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Medium.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-Regular.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Regular.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Regular.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Regular.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-SemiBold.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-SemiBold.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-SemiBold.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-SemiBold.woff2 diff --git a/public/assets/fonts/webfont/Inconsolata-Thin.woff2 b/public/assets/fonts/Inconsolata/Inconsolata-Thin.woff2 similarity index 100% rename from public/assets/fonts/webfont/Inconsolata-Thin.woff2 rename to public/assets/fonts/Inconsolata/Inconsolata-Thin.woff2 diff --git a/public/assets/fonts/webfont/stylesheet.css b/public/assets/fonts/Inconsolata/stylesheet.css similarity index 100% rename from public/assets/fonts/webfont/stylesheet.css rename to public/assets/fonts/Inconsolata/stylesheet.css diff --git a/public/assets/fonts/project/Alegreya/Alegreya-Italic-VariableFont_wght.ttf b/public/assets/fonts/project/Alegreya/Alegreya-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..bb33596 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/Alegreya-Italic-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Alegreya/Alegreya-VariableFont_wght.ttf b/public/assets/fonts/project/Alegreya/Alegreya-VariableFont_wght.ttf new file mode 100644 index 0000000..cc69fc6 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/Alegreya-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Alegreya/OFL.txt b/public/assets/fonts/project/Alegreya/OFL.txt new file mode 100644 index 0000000..0042c66 --- /dev/null +++ b/public/assets/fonts/project/Alegreya/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Alegreya Project Authors (https://github.com/huertatipografica/Alegreya) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/Alegreya/README.txt b/public/assets/fonts/project/Alegreya/README.txt new file mode 100644 index 0000000..6c8e9b0 --- /dev/null +++ b/public/assets/fonts/project/Alegreya/README.txt @@ -0,0 +1,75 @@ +Alegreya Variable Font +====================== + +This download contains Alegreya as both variable fonts and static fonts. + +Alegreya is a variable font with this axis: + wght + +This means all the styles are contained in these files: + Alegreya/Alegreya-VariableFont_wght.ttf + Alegreya/Alegreya-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Alegreya: + Alegreya/static/Alegreya-Regular.ttf + Alegreya/static/Alegreya-Medium.ttf + Alegreya/static/Alegreya-SemiBold.ttf + Alegreya/static/Alegreya-Bold.ttf + Alegreya/static/Alegreya-ExtraBold.ttf + Alegreya/static/Alegreya-Black.ttf + Alegreya/static/Alegreya-Italic.ttf + Alegreya/static/Alegreya-MediumItalic.ttf + Alegreya/static/Alegreya-SemiBoldItalic.ttf + Alegreya/static/Alegreya-BoldItalic.ttf + Alegreya/static/Alegreya-ExtraBoldItalic.ttf + Alegreya/static/Alegreya-BlackItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-Black.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-Black.ttf new file mode 100644 index 0000000..d9b85af Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-Black.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-BlackItalic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-BlackItalic.ttf new file mode 100644 index 0000000..7207a0f Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-BlackItalic.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-Bold.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-Bold.ttf new file mode 100644 index 0000000..7ca725a Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-Bold.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-BoldItalic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-BoldItalic.ttf new file mode 100644 index 0000000..ab39d11 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBold.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBold.ttf new file mode 100644 index 0000000..3e2edc0 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBoldItalic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBoldItalic.ttf new file mode 100644 index 0000000..ef00269 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-Italic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-Italic.ttf new file mode 100644 index 0000000..ee5972f Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-Italic.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-Medium.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-Medium.ttf new file mode 100644 index 0000000..13d8e00 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-Medium.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-MediumItalic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-MediumItalic.ttf new file mode 100644 index 0000000..792b2c3 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-Regular.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-Regular.ttf new file mode 100644 index 0000000..a921a6f Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-Regular.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBold.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBold.ttf new file mode 100644 index 0000000..d620b2e Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBoldItalic.ttf b/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBoldItalic.ttf new file mode 100644 index 0000000..82afcd0 Binary files /dev/null and b/public/assets/fonts/project/Alegreya/static/Alegreya-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/EBGaramond-Italic-VariableFont_wght.ttf b/public/assets/fonts/project/EB_Garamond/EBGaramond-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..9cb1376 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/EBGaramond-Italic-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/EBGaramond-VariableFont_wght.ttf b/public/assets/fonts/project/EB_Garamond/EBGaramond-VariableFont_wght.ttf new file mode 100644 index 0000000..baf64b2 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/EBGaramond-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/OFL.txt b/public/assets/fonts/project/EB_Garamond/OFL.txt new file mode 100644 index 0000000..132cf64 --- /dev/null +++ b/public/assets/fonts/project/EB_Garamond/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2017 The EB Garamond Project Authors (https://github.com/octaviopardo/EBGaramond12) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/EB_Garamond/README.txt b/public/assets/fonts/project/EB_Garamond/README.txt new file mode 100644 index 0000000..47f3e3f --- /dev/null +++ b/public/assets/fonts/project/EB_Garamond/README.txt @@ -0,0 +1,73 @@ +EB Garamond Variable Font +========================= + +This download contains EB Garamond as both variable fonts and static fonts. + +EB Garamond is a variable font with this axis: + wght + +This means all the styles are contained in these files: + EB_Garamond/EBGaramond-VariableFont_wght.ttf + EB_Garamond/EBGaramond-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for EB Garamond: + EB_Garamond/static/EBGaramond-Regular.ttf + EB_Garamond/static/EBGaramond-Medium.ttf + EB_Garamond/static/EBGaramond-SemiBold.ttf + EB_Garamond/static/EBGaramond-Bold.ttf + EB_Garamond/static/EBGaramond-ExtraBold.ttf + EB_Garamond/static/EBGaramond-Italic.ttf + EB_Garamond/static/EBGaramond-MediumItalic.ttf + EB_Garamond/static/EBGaramond-SemiBoldItalic.ttf + EB_Garamond/static/EBGaramond-BoldItalic.ttf + EB_Garamond/static/EBGaramond-ExtraBoldItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Bold.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Bold.ttf new file mode 100644 index 0000000..c7f629e Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Bold.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-BoldItalic.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-BoldItalic.ttf new file mode 100644 index 0000000..6df3637 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBold.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBold.ttf new file mode 100644 index 0000000..74b8274 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBoldItalic.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBoldItalic.ttf new file mode 100644 index 0000000..a2e13f9 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Italic.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Italic.ttf new file mode 100644 index 0000000..231d7e9 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Italic.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Medium.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Medium.ttf new file mode 100644 index 0000000..e9e3b1e Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Medium.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-MediumItalic.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-MediumItalic.ttf new file mode 100644 index 0000000..7027943 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Regular.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Regular.ttf new file mode 100644 index 0000000..fd54ab4 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-Regular.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBold.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBold.ttf new file mode 100644 index 0000000..3202ac5 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBold.ttf differ diff --git a/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBoldItalic.ttf b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBoldItalic.ttf new file mode 100644 index 0000000..e297855 Binary files /dev/null and b/public/assets/fonts/project/EB_Garamond/static/EBGaramond-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Black.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Black.ttf new file mode 100644 index 0000000..113cd3b Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Black.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-BlackItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-BlackItalic.ttf new file mode 100644 index 0000000..1c49fb2 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-BlackItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Bold.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Bold.ttf new file mode 100644 index 0000000..e3593fb Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Bold.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-BoldItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-BoldItalic.ttf new file mode 100644 index 0000000..305b0b8 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBold.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBold.ttf new file mode 100644 index 0000000..83744c1 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBoldItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..54bcaca Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLight.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLight.ttf new file mode 100644 index 0000000..2d4e331 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLight.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLightItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLightItalic.ttf new file mode 100644 index 0000000..ef666ad Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-ExtraLightItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Italic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Italic.ttf new file mode 100644 index 0000000..27d32ed Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Italic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Light.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Light.ttf new file mode 100644 index 0000000..663d1de Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Light.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-LightItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-LightItalic.ttf new file mode 100644 index 0000000..d1b1fc5 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Medium.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Medium.ttf new file mode 100644 index 0000000..001ebe7 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Medium.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-MediumItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-MediumItalic.ttf new file mode 100644 index 0000000..b7640be Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Regular.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Regular.ttf new file mode 100644 index 0000000..6f80647 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Regular.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBold.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBold.ttf new file mode 100644 index 0000000..0c93b7e Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBoldItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBoldItalic.ttf new file mode 100644 index 0000000..e1a2989 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-Thin.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-Thin.ttf new file mode 100644 index 0000000..c925f94 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-Thin.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/FiraSans-ThinItalic.ttf b/public/assets/fonts/project/Fira_Sans/FiraSans-ThinItalic.ttf new file mode 100644 index 0000000..dd39092 Binary files /dev/null and b/public/assets/fonts/project/Fira_Sans/FiraSans-ThinItalic.ttf differ diff --git a/public/assets/fonts/project/Fira_Sans/OFL.txt b/public/assets/fonts/project/Fira_Sans/OFL.txt new file mode 100644 index 0000000..fc506b8 --- /dev/null +++ b/public/assets/fonts/project/Fira_Sans/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/Montserrat/Montserrat-Italic-VariableFont_wght.ttf b/public/assets/fonts/project/Montserrat/Montserrat-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..76e3f9d Binary files /dev/null and b/public/assets/fonts/project/Montserrat/Montserrat-Italic-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Montserrat/Montserrat-VariableFont_wght.ttf b/public/assets/fonts/project/Montserrat/Montserrat-VariableFont_wght.ttf new file mode 100644 index 0000000..451e692 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/Montserrat-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Montserrat/OFL.txt b/public/assets/fonts/project/Montserrat/OFL.txt new file mode 100644 index 0000000..8e618c8 --- /dev/null +++ b/public/assets/fonts/project/Montserrat/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2024 The Montserrat.Git Project Authors (https://github.com/JulietaUla/Montserrat.git) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/Montserrat/README.txt b/public/assets/fonts/project/Montserrat/README.txt new file mode 100644 index 0000000..930137d --- /dev/null +++ b/public/assets/fonts/project/Montserrat/README.txt @@ -0,0 +1,81 @@ +Montserrat Variable Font +======================== + +This download contains Montserrat as both variable fonts and static fonts. + +Montserrat is a variable font with this axis: + wght + +This means all the styles are contained in these files: + Montserrat/Montserrat-VariableFont_wght.ttf + Montserrat/Montserrat-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Montserrat: + Montserrat/static/Montserrat-Thin.ttf + Montserrat/static/Montserrat-ExtraLight.ttf + Montserrat/static/Montserrat-Light.ttf + Montserrat/static/Montserrat-Regular.ttf + Montserrat/static/Montserrat-Medium.ttf + Montserrat/static/Montserrat-SemiBold.ttf + Montserrat/static/Montserrat-Bold.ttf + Montserrat/static/Montserrat-ExtraBold.ttf + Montserrat/static/Montserrat-Black.ttf + Montserrat/static/Montserrat-ThinItalic.ttf + Montserrat/static/Montserrat-ExtraLightItalic.ttf + Montserrat/static/Montserrat-LightItalic.ttf + Montserrat/static/Montserrat-Italic.ttf + Montserrat/static/Montserrat-MediumItalic.ttf + Montserrat/static/Montserrat-SemiBoldItalic.ttf + Montserrat/static/Montserrat-BoldItalic.ttf + Montserrat/static/Montserrat-ExtraBoldItalic.ttf + Montserrat/static/Montserrat-BlackItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Black.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Black.ttf new file mode 100644 index 0000000..2fab7ab Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Black.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-BlackItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-BlackItalic.ttf new file mode 100644 index 0000000..04d3b47 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-BlackItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Bold.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Bold.ttf new file mode 100644 index 0000000..4033587 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Bold.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-BoldItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-BoldItalic.ttf new file mode 100644 index 0000000..0cc5c2c Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBold.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBold.ttf new file mode 100644 index 0000000..476ec30 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBoldItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBoldItalic.ttf new file mode 100644 index 0000000..a1ac9a9 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLight.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLight.ttf new file mode 100644 index 0000000..efaeab0 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLight.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLightItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLightItalic.ttf new file mode 100644 index 0000000..a8d18de Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-ExtraLightItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Italic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Italic.ttf new file mode 100644 index 0000000..5f08df0 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Italic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Light.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Light.ttf new file mode 100644 index 0000000..881f12d Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Light.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-LightItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-LightItalic.ttf new file mode 100644 index 0000000..b2991d0 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Medium.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Medium.ttf new file mode 100644 index 0000000..c9a39ea Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Medium.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-MediumItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-MediumItalic.ttf new file mode 100644 index 0000000..086dd6e Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Regular.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Regular.ttf new file mode 100644 index 0000000..895e220 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Regular.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBold.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBold.ttf new file mode 100644 index 0000000..161477a Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBoldItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBoldItalic.ttf new file mode 100644 index 0000000..73dc6c6 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-Thin.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-Thin.ttf new file mode 100644 index 0000000..c9cf195 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-Thin.ttf differ diff --git a/public/assets/fonts/project/Montserrat/static/Montserrat-ThinItalic.ttf b/public/assets/fonts/project/Montserrat/static/Montserrat-ThinItalic.ttf new file mode 100644 index 0000000..e6dfc05 Binary files /dev/null and b/public/assets/fonts/project/Montserrat/static/Montserrat-ThinItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/OFL.txt b/public/assets/fonts/project/Open_Sans/OFL.txt new file mode 100644 index 0000000..4fc6170 --- /dev/null +++ b/public/assets/fonts/project/Open_Sans/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf b/public/assets/fonts/project/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..8a2c9d9 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf b/public/assets/fonts/project/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..9c57fbd Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/OpenSans-VariableFont_wdth,wght.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/README.txt b/public/assets/fonts/project/Open_Sans/README.txt new file mode 100644 index 0000000..9b94759 --- /dev/null +++ b/public/assets/fonts/project/Open_Sans/README.txt @@ -0,0 +1,100 @@ +Open Sans Variable Font +======================= + +This download contains Open Sans as both variable fonts and static fonts. + +Open Sans is a variable font with these axes: + wdth + wght + +This means all the styles are contained in these files: + Open_Sans/OpenSans-VariableFont_wdth,wght.ttf + Open_Sans/OpenSans-Italic-VariableFont_wdth,wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Open Sans: + Open_Sans/static/OpenSans_Condensed-Light.ttf + Open_Sans/static/OpenSans_Condensed-Regular.ttf + Open_Sans/static/OpenSans_Condensed-Medium.ttf + Open_Sans/static/OpenSans_Condensed-SemiBold.ttf + Open_Sans/static/OpenSans_Condensed-Bold.ttf + Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf + Open_Sans/static/OpenSans_SemiCondensed-Light.ttf + Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf + Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf + Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf + Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf + Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf + Open_Sans/static/OpenSans-Light.ttf + Open_Sans/static/OpenSans-Regular.ttf + Open_Sans/static/OpenSans-Medium.ttf + Open_Sans/static/OpenSans-SemiBold.ttf + Open_Sans/static/OpenSans-Bold.ttf + Open_Sans/static/OpenSans-ExtraBold.ttf + Open_Sans/static/OpenSans_Condensed-LightItalic.ttf + Open_Sans/static/OpenSans_Condensed-Italic.ttf + Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf + Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf + Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf + Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf + Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf + Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf + Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf + Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf + Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf + Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf + Open_Sans/static/OpenSans-LightItalic.ttf + Open_Sans/static/OpenSans-Italic.ttf + Open_Sans/static/OpenSans-MediumItalic.ttf + Open_Sans/static/OpenSans-SemiBoldItalic.ttf + Open_Sans/static/OpenSans-BoldItalic.ttf + Open_Sans/static/OpenSans-ExtraBoldItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-Bold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-Bold.ttf new file mode 100644 index 0000000..8570eee Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-Bold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-BoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000..e246ffa Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000..dfb9d6f Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..02288dc Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-Italic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-Italic.ttf new file mode 100644 index 0000000..569e6b0 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-Italic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-Light.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-Light.ttf new file mode 100644 index 0000000..e2d5717 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-Light.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-LightItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-LightItalic.ttf new file mode 100644 index 0000000..6d6d917 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-Medium.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-Medium.ttf new file mode 100644 index 0000000..04d88fb Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-Medium.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-MediumItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-MediumItalic.ttf new file mode 100644 index 0000000..c238154 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-Regular.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-Regular.ttf new file mode 100644 index 0000000..134d225 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-Regular.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBold.ttf new file mode 100644 index 0000000..2310e8a Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000..7a7d9cd Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Bold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Bold.ttf new file mode 100644 index 0000000..58c5768 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Bold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf new file mode 100644 index 0000000..52ca54b Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf new file mode 100644 index 0000000..4b3d7bd Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf new file mode 100644 index 0000000..df5d41a Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Italic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Italic.ttf new file mode 100644 index 0000000..96f7e9f Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Italic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Light.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Light.ttf new file mode 100644 index 0000000..c7c891c Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Light.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf new file mode 100644 index 0000000..8270601 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Medium.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Medium.ttf new file mode 100644 index 0000000..79f586e Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Medium.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf new file mode 100644 index 0000000..f55f42e Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Regular.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Regular.ttf new file mode 100644 index 0000000..67a73b8 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-Regular.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf new file mode 100644 index 0000000..950774b Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf new file mode 100644 index 0000000..651a2f4 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_Condensed-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf new file mode 100644 index 0000000..80322ef Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Bold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf new file mode 100644 index 0000000..a160f1e Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf new file mode 100644 index 0000000..3607b60 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf new file mode 100644 index 0000000..22ee523 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf new file mode 100644 index 0000000..a15b76b Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Italic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf new file mode 100644 index 0000000..e3555b3 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Light.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf new file mode 100644 index 0000000..35bf909 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf new file mode 100644 index 0000000..0220183 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Medium.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf new file mode 100644 index 0000000..8278f42 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf new file mode 100644 index 0000000..cf1646b Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-Regular.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf new file mode 100644 index 0000000..9d9822b Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf new file mode 100644 index 0000000..3d05fd7 Binary files /dev/null and b/public/assets/fonts/project/Open_Sans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/OFL.txt b/public/assets/fonts/project/Source_Code_Pro/OFL.txt new file mode 100644 index 0000000..54da4a4 --- /dev/null +++ b/public/assets/fonts/project/Source_Code_Pro/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/public/assets/fonts/project/Source_Code_Pro/README.txt b/public/assets/fonts/project/Source_Code_Pro/README.txt new file mode 100644 index 0000000..b2ead00 --- /dev/null +++ b/public/assets/fonts/project/Source_Code_Pro/README.txt @@ -0,0 +1,79 @@ +Source Code Pro Variable Font +============================= + +This download contains Source Code Pro as both variable fonts and static fonts. + +Source Code Pro is a variable font with this axis: + wght + +This means all the styles are contained in these files: + Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf + Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Source Code Pro: + Source_Code_Pro/static/SourceCodePro-ExtraLight.ttf + Source_Code_Pro/static/SourceCodePro-Light.ttf + Source_Code_Pro/static/SourceCodePro-Regular.ttf + Source_Code_Pro/static/SourceCodePro-Medium.ttf + Source_Code_Pro/static/SourceCodePro-SemiBold.ttf + Source_Code_Pro/static/SourceCodePro-Bold.ttf + Source_Code_Pro/static/SourceCodePro-ExtraBold.ttf + Source_Code_Pro/static/SourceCodePro-Black.ttf + Source_Code_Pro/static/SourceCodePro-ExtraLightItalic.ttf + Source_Code_Pro/static/SourceCodePro-LightItalic.ttf + Source_Code_Pro/static/SourceCodePro-Italic.ttf + Source_Code_Pro/static/SourceCodePro-MediumItalic.ttf + Source_Code_Pro/static/SourceCodePro-SemiBoldItalic.ttf + Source_Code_Pro/static/SourceCodePro-BoldItalic.ttf + Source_Code_Pro/static/SourceCodePro-ExtraBoldItalic.ttf + Source_Code_Pro/static/SourceCodePro-BlackItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf b/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000..d754a85 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-Italic-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf b/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf new file mode 100644 index 0000000..cf59205 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/SourceCodePro-VariableFont_wght.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Black.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Black.ttf new file mode 100644 index 0000000..77ad095 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Black.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BlackItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BlackItalic.ttf new file mode 100644 index 0000000..1148577 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BlackItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Bold.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Bold.ttf new file mode 100644 index 0000000..a7dac6b Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Bold.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BoldItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BoldItalic.ttf new file mode 100644 index 0000000..1d0682f Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-BoldItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBold.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBold.ttf new file mode 100644 index 0000000..9eb7f20 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBold.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBoldItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBoldItalic.ttf new file mode 100644 index 0000000..082fcbd Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraBoldItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLight.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLight.ttf new file mode 100644 index 0000000..205c083 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLight.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLightItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLightItalic.ttf new file mode 100644 index 0000000..e75f3f6 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-ExtraLightItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Italic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Italic.ttf new file mode 100644 index 0000000..4f0d7c0 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Italic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Light.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Light.ttf new file mode 100644 index 0000000..7506643 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Light.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-LightItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-LightItalic.ttf new file mode 100644 index 0000000..1d841b8 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-LightItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Medium.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Medium.ttf new file mode 100644 index 0000000..1a27075 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Medium.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-MediumItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-MediumItalic.ttf new file mode 100644 index 0000000..07b421f Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-MediumItalic.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Regular.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Regular.ttf new file mode 100644 index 0000000..fd02539 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-Regular.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBold.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBold.ttf new file mode 100644 index 0000000..210f974 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBold.ttf differ diff --git a/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBoldItalic.ttf b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBoldItalic.ttf new file mode 100644 index 0000000..a4f8ff8 Binary files /dev/null and b/public/assets/fonts/project/Source_Code_Pro/static/SourceCodePro-SemiBoldItalic.ttf differ diff --git a/public/assets/svg/book.svg b/public/assets/svg/book.svg new file mode 100644 index 0000000..4165e2c --- /dev/null +++ b/public/assets/svg/book.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/assets/svg/text.svg b/public/assets/svg/text.svg new file mode 100644 index 0000000..363f37d --- /dev/null +++ b/public/assets/svg/text.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/public/content/cohesion-des-mondes/5_test-avec-geoformat/1_plongez-dans-les-sources/3_la-nouvelle-ere/chapter.txt b/public/content/cohesion-des-mondes/5_test-avec-geoformat/1_plongez-dans-les-sources/3_la-nouvelle-ere/chapter.txt index c32c6fa..71f38af 100644 --- a/public/content/cohesion-des-mondes/5_test-avec-geoformat/1_plongez-dans-les-sources/3_la-nouvelle-ere/chapter.txt +++ b/public/content/cohesion-des-mondes/5_test-avec-geoformat/1_plongez-dans-les-sources/3_la-nouvelle-ere/chapter.txt @@ -4,7 +4,7 @@ Title: La nouvelle ère Body: -[{"content":{"text":"

Là c'est le moment moins marrant où je vous mets une looooongue liste d'articles, de pages internet et de vidéos en tout genre. Mais c'est intéressant, promis !

♣ Les légendes Japonaises et Yôkais :

 

Roadtrip à vos risques et périls !

• Abura-Akago :

• Kappa :

Vidéo :

• Akaatama :

 

• Kitsune:

Prêts à frissonner ?

• Le tunnel de Kitotaki:

Vidéos :

• Kuchisake-Onna :

Vidéo :

• Aokigahara :

Vidéos :

Que la chance soit avec vous !

• Maneki-Neko :

• Teru Teru Bōzu :

Vidéo :

• Daruma :

Plongez dans les sources...

• Le maître des Yôkais :

Vidéo :

"},"id":"38715100-a428-49da-8aa9-cc2d04e9a7d7","isHidden":false,"type":"text"}] +[{"content":{"text":"

Là c'est le moment moins marrant où je vous mets une looooongue liste d'articles, de pages internet et de vidéos en tout genre. Mais c'est intéressant, promis !

♣ Les légendes Japonaises et Yôkais :

Roadtrip à vos risques et périls !

• Abura-Akago :

• Kappa :

Vidéo :

• Akaatama :

 

• Kitsune:

Prêts à frissonner ?

• Le tunnel de Kitotaki:

Vidéos :

• Kuchisake-Onna :

Vidéo :

• Aokigahara :

Vidéos :

Que la chance soit avec vous !

• Maneki-Neko :

• Teru Teru Bōzu :

Vidéo :

• Daruma :

Plongez dans les sources...

• Le maître des Yôkais :

Vidéo :

"},"id":"38715100-a428-49da-8aa9-cc2d04e9a7d7","isHidden":false,"type":"text"}] ---- diff --git a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/.regenerate-map-image b/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/.regenerate-map-image deleted file mode 100644 index c8d700e..0000000 --- a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/.regenerate-map-image +++ /dev/null @@ -1 +0,0 @@ -1772466016 \ No newline at end of file diff --git a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png b/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png index e6a1148..27629ef 100644 Binary files a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png and b/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png differ diff --git a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png.txt b/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png.txt index 577d333..6b24936 100644 --- a/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png.txt +++ b/public/content/cohesion-des-mondes/5_test-avec-geoformat/2_roadtrip-a-vos-risques-et-perils/map-static.png.txt @@ -1 +1 @@ -Uuid: eozkssgjffkkux34 \ No newline at end of file +Uuid: rbrttd19ethtb0ue \ No newline at end of file diff --git a/public/content/cohesion-des-mondes/5_test-avec-geoformat/narrative.txt b/public/content/cohesion-des-mondes/5_test-avec-geoformat/narrative.txt index 65468c9..9186dc5 100644 --- a/public/content/cohesion-des-mondes/5_test-avec-geoformat/narrative.txt +++ b/public/content/cohesion-des-mondes/5_test-avec-geoformat/narrative.txt @@ -18,7 +18,113 @@ Intro:

Ah le Japon... Quel beau pays où nous trouvons des créatures en tout ---- -Customcss: +Customcss: + +@page { + size: A5; + margin: 16mm 16mm 16mm 16mm; +} + +body { + font-family: sans-serif; + color: rgb(0, 0, 0); +} + +p { + font-size: 22px; + line-height: 18px; +} + +h1 { + font-size: 28px; + line-height: 38px; + background: rgba(60, 143, 66, 0.52); + padding-top: 10px; + padding-right: 20px; + padding-bottom: 10px; + padding-left: 20px; + margin-top: 60px; + margin-bottom: 30px; + font-family: "EB Garamond"; + font-weight: normal; + margin-right: 0mm; + margin-left: 0mm; + color: rgb(224, 9, 9); + border-style: solid; + border-color: #e01b1b; + border-width: 3px; + text-align: right; + font-style: italic; +} + +em { + font-style: italic; +} + +i { + font-style: italic; +} + +strong { + font-weight: bold; +} + +b { + font-weight: bold; +} + +a { + color: #0000ee; + text-decoration-line: underline; +} +h5 { + font-weight: bold; +} + +h4 { + font-size: 20px; + background: #dedede; + font-weight: bold; + text-align: center; + margin-bottom: 30px; +} + +h3 { + font-size: 20px; + border-width: 2px; + font-weight: bold; + border-style: dotted; + border-color: #000000; + margin-top: 30px; + margin-bottom: 20px; +} + +h2 { + font-size: 38px; + border-width: 2px; + font-weight: bold; + border-style: solid; + border-color: #000000; + padding-top: 20px; + padding-right: 20px; + padding-bottom: 20px; + padding-left: 20px; + margin-top: 36px; +} + +p.author { + font-size: 24px; + background: rgba(255, 255, 255, 0.521); + font-weight: bold; + padding-top: 10px; + padding-right: 20px; + padding-bottom: 10px; + padding-left: 20px; + margin-top: 20px; + margin-right: 0px; + margin-bottom: 0px; + margin-left: 0px; +} ---- diff --git a/public/site/cache/index.html b/public/site/cache/index.html deleted file mode 100644 index e69de29..0000000 diff --git a/public/site/templates/narrative.json.php b/public/site/templates/narrative.json.php index 6fbd992..1eedce0 100644 --- a/public/site/templates/narrative.json.php +++ b/public/site/templates/narrative.json.php @@ -22,6 +22,13 @@ function resolveFileUrl($field, $page) { return null; } +/** + * Supprime les

imbriqués dans les

  • (générés par Kirby pour les listes "loose") + */ +function stripParagraphsInListItems($html) { + return preg_replace('/
  • \s*

    (.*?)<\/p>\s*<\/li>/s', '

  • $1
  • ', $html); +} + /** * Résout les images dans le contenu HTML */ @@ -63,7 +70,7 @@ function parseBlocks($blocksField, $page) { switch ($block->type()) { case 'text': $blockData['content'] = [ - 'text' => resolveImagesInHtml($block->text()->value(), $page) + 'text' => stripParagraphsInListItems(resolveImagesInHtml($block->text()->value(), $page)) ]; break; @@ -87,7 +94,7 @@ function parseBlocks($blocksField, $page) { case 'list': $blockData['content'] = [ - 'text' => $block->text()->value() + 'text' => stripParagraphsInListItems($block->text()->value()) ]; break; diff --git a/src/App.vue b/src/App.vue index ca080d6..f84f12e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,6 +5,8 @@ import ElementPopup from './components/ElementPopup.vue'; // import PagePopup from './components/PagePopup.vue'; // DISABLED: page template styling feature import PreviewLoader from './components/PreviewLoader.vue'; import SaveButton from './components/SaveButton.vue'; +import PrintButton from './components/PrintButton.vue'; +import ZoomControls from './components/ui/ZoomControls.vue'; import { onMounted, ref, computed, provide } from 'vue'; import { useStylesheetStore } from './stores/stylesheet'; import { useNarrativeStore } from './stores/narrative'; @@ -12,9 +14,11 @@ import { useKeyboardShortcuts } from './composables/useKeyboardShortcuts'; import { useIframeInteractions } from './composables/useIframeInteractions'; import { usePreviewRenderer } from './composables/usePreviewRenderer'; import { usePrintPreview } from './composables/usePrintPreview'; +import { useProjectFonts } from './composables/useProjectFonts'; const stylesheetStore = useStylesheetStore(); const narrativeStore = useNarrativeStore(); +const { loadFontsFromCss } = useProjectFonts(); const previewFrame1 = ref(null); const previewFrame2 = ref(null); @@ -72,6 +76,10 @@ const { handleKeyboardShortcut, isMac } = useKeyboardShortcuts({ // Attach keyboard shortcut handler to renderer setKeyboardShortcutHandler(handleKeyboardShortcut); +// Zoom +const zoomControls = ref(null); +const zoomStyle = computed(() => zoomControls.value?.zoomStyle ?? {}); + // Lifecycle: Initialize app on mount onMounted(async () => { // Load narrative data (narrativeUrl constructed from location, always present) @@ -80,6 +88,8 @@ onMounted(async () => { // Initialize stylesheet with custom CSS if (narrativeStore.data) { await stylesheetStore.initializeFromNarrative(narrativeStore.data); + // Pre-load any fonts referenced in the saved CSS so @font-face rules are ready for the preview + await loadFontsFromCss(stylesheetStore.customCss); } // Render preview after data is loaded @@ -98,16 +108,18 @@ onMounted(async () => { ref="previewFrame1" class="preview-frame" :class="{ shifted: activeTab.length > 0 }" + :style="zoomStyle" > - + { /> --> - + + + +
    + + +
    + diff --git a/src/components/PagePopup.vue b/src/components/PagePopup.vue index fcaebae..5f26d1c 100644 --- a/src/components/PagePopup.vue +++ b/src/components/PagePopup.vue @@ -18,7 +18,7 @@ + + diff --git a/src/composables/useElementSettings.js b/src/composables/useElementSettings.js new file mode 100644 index 0000000..a32e61c --- /dev/null +++ b/src/composables/useElementSettings.js @@ -0,0 +1,944 @@ +import { ref, reactive, computed, watch, nextTick } from 'vue'; +import { ELEMENT_DEFAULTS, INLINE_DEFAULTS } from '../utils/defaults'; +import { useStylesheetStore } from '../stores/stylesheet'; +import { useDebounce } from './useDebounce'; +import { useTextDefaults } from './useTextDefaults'; +import { useProjectFonts } from './useProjectFonts'; + +export function useElementSettings({ margin, padding, basePopup }) { + const stylesheetStore = useStylesheetStore(); + const textDefaults = useTextDefaults(); + const { fonts: projectFonts, loadFont, loadAllFontPreviews } = useProjectFonts(); + const { debouncedUpdate } = useDebounce(500); + + let isUpdatingFromStore = false; + + // --- Selector state --- + const selector = ref(''); + const currentTag = ref(''); + + // --- Style refs (initial values from defaults.js) --- + const fontFamily = ref(ELEMENT_DEFAULTS.fontFamily); + const italic = ref(ELEMENT_DEFAULTS.italic); + const bold = ref(ELEMENT_DEFAULTS.bold); + const textAlign = ref(ELEMENT_DEFAULTS.textAlign); + const color = ref(ELEMENT_DEFAULTS.color); + const background = ref(ELEMENT_DEFAULTS.background); + const fontSize = reactive({ ...ELEMENT_DEFAULTS.fontSize }); + const fontSizeModel = computed({ + get: () => ({ value: fontSize.value, unit: fontSize.unit }), + set: (v) => { fontSize.value = v.value; fontSize.unit = v.unit; }, + }); + const lineHeight = reactive({ ...ELEMENT_DEFAULTS.lineHeight }); + const lineHeightModel = computed({ + get: () => ({ value: lineHeight.value, unit: lineHeight.unit }), + set: (v) => { lineHeight.value = v.value; lineHeight.unit = v.unit; }, + }); + const borderWidth = reactive({ ...ELEMENT_DEFAULTS.borderWidth }); + const borderStyle = ref(ELEMENT_DEFAULTS.borderStyle); + const borderColor = ref(ELEMENT_DEFAULTS.borderColor); + const textDecorationLine = ref(ELEMENT_DEFAULTS.textDecorationLine); + const textDecorationStyle = ref(ELEMENT_DEFAULTS.textDecorationStyle); + const textDecorationThickness = reactive({ ...ELEMENT_DEFAULTS.textDecorationThickness }); + const textDecorationColor = ref(ELEMENT_DEFAULTS.textDecorationColor); + const textUnderlineOffset = reactive({ ...ELEMENT_DEFAULTS.textUnderlineOffset }); + + // --- Toggle state --- + const settingEnabled = reactive({ + font: false, + fontSize: false, + lineHeight: false, + textAlign: false, + color: false, + background: false, + border: false, + textDecoration: false, + margin: false, + padding: false, + }); + + // --- Cache for special groups --- + const settingCache = reactive({ + font: null, + fontSize: null, + lineHeight: null, + color: null, + }); + + // --- Persistent state per element selector --- + const elementStates = new Map(); + + const saveElementState = () => { + if (!selector.value) return; + elementStates.set(selector.value, { + toggles: { ...settingEnabled }, + cache: { + font: settingCache.font ? { ...settingCache.font } : null, + fontSize: settingCache.fontSize ? { ...settingCache.fontSize } : null, + lineHeight: settingCache.lineHeight ? { ...settingCache.lineHeight } : null, + color: settingCache.color ?? null, + }, + values: { + fontFamily: fontFamily.value, + italic: italic.value, + bold: bold.value, + fontSize: { value: fontSize.value, unit: fontSize.unit }, + lineHeight: { value: lineHeight.value, unit: lineHeight.unit }, + color: color.value, + }, + }); + }; + + // --- Property descriptors --- + const styleProps = [ + { css: 'font-family', group: 'font', get: () => fontFamily.value === 'sans-serif' ? 'sans-serif' : `"${fontFamily.value}"`, set: v => fontFamily.value = v.replace(/['"]/g, ''), debounce: false, skipWatch: true }, + { css: 'font-style', group: 'font', get: () => italic.value ? 'italic' : 'normal', set: v => italic.value = v === 'italic', debounce: false, skipWhenDefault: v => v !== 'italic' }, + { css: 'font-weight', group: 'font', get: () => bold.value ? 'bold' : 'normal', set: v => bold.value = v === 'bold' || parseInt(v) >= 700, debounce: false, skipWhenDefault: v => v === 'normal' }, + { css: 'text-align', group: 'textAlign', get: () => textAlign.value, set: v => textAlign.value = v, debounce: false }, + { css: 'color', group: 'color', get: () => color.value, set: v => color.value = v, debounce: true }, + { css: 'background', group: 'background', get: () => background.value, set: v => background.value = v, debounce: true }, + { css: 'border-style', group: 'border', get: () => borderStyle.value, set: v => borderStyle.value = v || 'solid', debounce: false }, + { css: 'border-color', group: 'border', get: () => borderColor.value, set: v => borderColor.value = v, debounce: true }, + { css: 'text-decoration-line', group: 'textDecoration', get: () => textDecorationLine.value, set: v => textDecorationLine.value = v || 'underline', debounce: false }, + { css: 'text-decoration-style', group: 'textDecoration', get: () => textDecorationStyle.value, set: v => textDecorationStyle.value = v || 'solid', debounce: false }, + { css: 'text-decoration-color', group: 'textDecoration', get: () => textDecorationColor.value, set: v => textDecorationColor.value = v, debounce: true }, + ]; + + const unitProps = [ + { css: 'font-size', group: 'fontSize', ref: fontSize, debounce: true }, + { css: 'line-height', group: 'lineHeight', ref: lineHeight, debounce: true }, + { css: 'border-width', group: 'border', ref: borderWidth, debounce: true }, + { css: 'text-decoration-thickness', group: 'textDecoration', ref: textDecorationThickness, debounce: true }, + { css: 'text-underline-offset', group: 'textDecoration', ref: textUnderlineOffset, debounce: true }, + ]; + + const settingGroups = { + font: ['font-family', 'font-style', 'font-weight'], + fontSize: ['font-size'], + lineHeight: ['line-height'], + textAlign: ['text-align'], + color: ['color'], + background: ['background'], + border: ['border-width', 'border-style', 'border-color'], + textDecoration: ['text-decoration-line', 'text-decoration-style', 'text-decoration-thickness', 'text-decoration-color', 'text-underline-offset'], + margin: ['margin-top', 'margin-right', 'margin-bottom', 'margin-left'], + padding: ['padding-top', 'padding-right', 'padding-bottom', 'padding-left'], + }; + + // --- CSS helpers --- + const removeProps = (cssProps) => { + if (!selector.value) return; + const block = stylesheetStore.extractBlock(selector.value); + if (!block || !stylesheetStore.customCss.includes(block)) return; + + let newBlock = block; + for (const prop of cssProps) { + const escaped = prop.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + newBlock = newBlock.replace( + new RegExp('[ \\t]*' + escaped + '\\s*:[^;]*;[ \\t]*\\n?', 'g'), + '' + ); + } + + const inner = newBlock.replace(/^[^{]*\{/, '').replace(/\}[^}]*$/, ''); + if (!inner.trim()) { + stylesheetStore.replaceInCustomCss(block, ''); + } else { + stylesheetStore.replaceBlock(block, newBlock); + } + }; + + const updateProp = (cssProp, value, unit) => { + if (!selector.value) return; + stylesheetStore.updateProperty(selector.value, cssProp, value, unit); + }; + + // --- Group apply/toggle --- + const applyGroup = (group) => { + if (!selector.value) return; + + for (const prop of styleProps) { + if (prop.group !== group) continue; + if (prop.skipWhenDefault && prop.skipWhenDefault(prop.get())) continue; + updateProp(prop.css, prop.get()); + } + for (const prop of unitProps) { + if (prop.group === group) updateProp(prop.css, prop.ref.value, prop.ref.unit); + } + if (group === 'margin') { + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`margin-${side}`, margin[side].value, margin[side].unit); + } + } + if (group === 'padding') { + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`padding-${side}`, padding[side].value, padding[side].unit); + } + } + }; + + const applyAllEnabledGroups = () => { + for (const group of Object.keys(settingEnabled)) { + if (settingEnabled[group]) applyGroup(group); + } + }; + + // --- Special group cache --- + const saveToCache = (group) => { + if (group === 'fontSize') { + settingCache.fontSize = { value: fontSize.value, unit: fontSize.unit }; + } else if (group === 'lineHeight') { + settingCache.lineHeight = { value: lineHeight.value, unit: lineHeight.unit }; + } else if (group === 'font') { + settingCache.font = { fontFamily: fontFamily.value, italic: italic.value, bold: bold.value }; + } else if (group === 'color') { + settingCache.color = color.value; + } + }; + + const restoreFromCache = (group) => { + if (group === 'fontSize' && settingCache.fontSize) { + fontSize.value = settingCache.fontSize.value; + fontSize.unit = settingCache.fontSize.unit; + settingCache.fontSize = null; + } else if (group === 'lineHeight' && settingCache.lineHeight) { + lineHeight.value = settingCache.lineHeight.value; + lineHeight.unit = settingCache.lineHeight.unit; + settingCache.lineHeight = null; + } else if (group === 'font' && settingCache.font) { + fontFamily.value = settingCache.font.fontFamily; + italic.value = settingCache.font.italic; + bold.value = settingCache.font.bold; + settingCache.font = null; + } else if (group === 'color' && settingCache.color !== null) { + color.value = settingCache.color; + settingCache.color = null; + } + }; + + const removeSpecialGroupProps = (group) => { + if (!selector.value) return; + if (group === 'fontSize') { + removeProps(['font-size']); + stylesheetStore.updateProperty('p', 'font-size', textDefaults.fontSize.value, textDefaults.fontSize.unit); + } else if (group === 'lineHeight') { + removeProps(['line-height']); + stylesheetStore.updateProperty('p', 'line-height', textDefaults.lineHeight.value, textDefaults.lineHeight.unit); + } else if (group === 'color') { + removeProps(['color']); + stylesheetStore.updateProperty('body', 'color', textDefaults.color); + } else if (group === 'font') { + removeProps(['font-family', 'font-style']); + // Write font-weight: normal explicitly so applyDefaultsCss() won't re-apply bold defaults on reload + stylesheetStore.updateProperty(selector.value, 'font-weight', 'normal'); + const fontVal = textDefaults.fontFamily === 'sans-serif' ? 'sans-serif' : `"${textDefaults.fontFamily}"`; + stylesheetStore.updateProperty('body', 'font-family', fontVal); + } + }; + + // --- Reset refs to inherited/default values when toggle is turned off --- + const resetRefsToDefaults = (group) => { + if (group === 'font') { + fontFamily.value = textDefaults.fontFamily; + italic.value = ELEMENT_DEFAULTS.italic; + bold.value = ELEMENT_DEFAULTS.bold; + // Re-apply inline defaults if applicable + const inlineDefaults = INLINE_DEFAULTS[currentTag.value]; + if (inlineDefaults) { + if (inlineDefaults.fontStyle === 'italic') italic.value = true; + if (inlineDefaults.fontWeight === 'bold') bold.value = true; + } + } else if (group === 'fontSize') { + fontSize.value = textDefaults.fontSize.value; + fontSize.unit = textDefaults.fontSize.unit; + } else if (group === 'lineHeight') { + lineHeight.value = textDefaults.lineHeight.value; + lineHeight.unit = textDefaults.lineHeight.unit; + } else if (group === 'color') { + color.value = textDefaults.color; + // Re-apply inline default color if applicable + const inlineDefaults = INLINE_DEFAULTS[currentTag.value]; + if (inlineDefaults?.color) color.value = inlineDefaults.color; + } + }; + + // --- Toggle actions --- + const onSubsectionClick = (group) => { + if (settingEnabled[group]) return; + onToggleSetting(group, true); + }; + + const onToggleSetting = (group, enabled) => { + settingEnabled[group] = enabled; + isUpdatingFromStore = true; + if (enabled) { + restoreFromCache(group); + applyAllEnabledGroups(); + } else { + saveToCache(group); + const specialGroups = ['font', 'fontSize', 'lineHeight', 'color']; + if (specialGroups.includes(group)) { + removeSpecialGroupProps(group); + } else { + removeProps(settingGroups[group]); + } + // Reset refs to defaults so displayedCss shows inherited values + resetRefsToDefaults(group); + } + saveElementState(); + nextTick(() => { isUpdatingFromStore = false; }); + }; + + // --- CSS display computeds --- + const elementCss = computed(() => { + if (!selector.value) return ''; + return stylesheetStore.extractBlock(selector.value) || ''; + }); + + const displayedCssOrder = [ + { css: 'font-family', group: 'font', special: true, + getValue: () => { const val = fontFamily.value; return val === 'sans-serif' ? 'sans-serif' : `"${val}"`; } }, + { css: 'font-style', group: 'font', + getValue: () => italic.value ? 'italic' : (INLINE_DEFAULTS[currentTag.value]?.fontStyle || null), + skip: () => !italic.value && !INLINE_DEFAULTS[currentTag.value]?.fontStyle && !hasInCss('font-style') }, + { css: 'font-weight', group: 'font', + getValue: () => bold.value ? 'bold' : (INLINE_DEFAULTS[currentTag.value]?.fontWeight || null), + skip: () => !bold.value && !INLINE_DEFAULTS[currentTag.value]?.fontWeight && !hasInCss('font-weight') }, + { css: 'font-size', group: 'fontSize', special: true, + getValue: () => `${fontSize.value}${fontSize.unit}`, + skip: () => isIndependentElement.value && !settingEnabled.fontSize && !hasInCss('font-size') }, + { css: 'line-height', group: 'lineHeight', special: true, + getValue: () => `${lineHeight.value}${lineHeight.unit}`, + skip: () => isIndependentElement.value && !settingEnabled.lineHeight && !hasInCss('line-height') }, + { css: 'text-align', group: 'textAlign', + getValue: () => textAlign.value, + skip: () => !settingEnabled.textAlign && !hasInCss('text-align') }, + { css: 'color', group: 'color', special: true, + getValue: () => color.value }, + { css: 'background', group: 'background', + getValue: () => background.value, + skip: () => !settingEnabled.background && !hasInCss('background') }, + { css: 'border-width', group: 'border', + getValue: () => `${borderWidth.value}${borderWidth.unit}`, + skip: () => !settingEnabled.border && !hasInCss('border-width') }, + { css: 'border-style', group: 'border', + getValue: () => borderStyle.value, + skip: () => (!settingEnabled.border && !hasInCss('border-style')) || borderWidth.value === 0 }, + { css: 'border-color', group: 'border', + getValue: () => borderColor.value, + skip: () => (!settingEnabled.border && !hasInCss('border-color')) || borderWidth.value === 0 }, + { css: 'text-decoration-line', group: 'textDecoration', + getValue: () => textDecorationLine.value || (INLINE_DEFAULTS[currentTag.value]?.textDecorationLine || null), + skip: () => !settingEnabled.textDecoration && !INLINE_DEFAULTS[currentTag.value]?.textDecorationLine && !hasInCss('text-decoration-line') }, + { css: 'text-decoration-style', group: 'textDecoration', + getValue: () => textDecorationStyle.value, + skip: () => !settingEnabled.textDecoration && !hasInCss('text-decoration-style') }, + { css: 'text-decoration-thickness', group: 'textDecoration', + getValue: () => `${textDecorationThickness.value}${textDecorationThickness.unit}`, + skip: () => !settingEnabled.textDecoration && !hasInCss('text-decoration-thickness') }, + { css: 'text-decoration-color', group: 'textDecoration', + getValue: () => textDecorationColor.value, + skip: () => !settingEnabled.textDecoration && !hasInCss('text-decoration-color') }, + { css: 'text-underline-offset', group: 'textDecoration', + getValue: () => `${textUnderlineOffset.value}${textUnderlineOffset.unit}`, + skip: () => !settingEnabled.textDecoration && !hasInCss('text-underline-offset') }, + ]; + + const isInlineElement = computed(() => !!INLINE_DEFAULTS[currentTag.value]); + + // Elements that don't inherit font-size/line-height from

    — fully independent of TextSettings p-level + const INDEPENDENT_TAGS = new Set(['li', 'ul', 'ol', 'dt', 'dd', 'dl', 'table', 'tr', 'td', 'th', 'caption', 'figure', 'figcaption', 'pre', 'blockquote']); + const isIndependentElement = computed(() => INDEPENDENT_TAGS.has(currentTag.value)); + + // Check if the current selector has a CSS property in the store (active CSS only, not commented) + const hasInCss = (cssProp) => { + if (!selector.value) return false; + return !!stylesheetStore.extractValue(selector.value, cssProp, false); + }; + + const displayedCss = computed(() => { + if (!selector.value) return ''; + const lines = []; + for (const entry of displayedCssOrder) { + if (entry.skip && entry.skip()) continue; + const groupEnabled = settingEnabled[entry.group]; + // For inline elements, skip special groups (TextSettings defaults) when toggle is OFF + // Exception: keep if the current tag has an inline default for this CSS property + if (entry.special && isInlineElement.value && !groupEnabled) { + const tagDefaults = INLINE_DEFAULTS[currentTag.value]; + const cssToDefaultKey = { 'color': 'color', 'font-family': 'fontFamily' }; + const defaultKey = cssToDefaultKey[entry.css]; + if (!defaultKey || !tagDefaults?.[defaultKey]) continue; + } + const val = entry.getValue(); + if (val === null || val === undefined) continue; + + // Determine inheritance comment for disabled groups + let comment = ''; + if (!groupEnabled) { + if (entry.special) { + // Special groups: show "hérité de la page" when value matches page-level default + const textDefaultValues = { + 'font-family': textDefaults.fontFamily === 'sans-serif' ? 'sans-serif' : `"${textDefaults.fontFamily}"`, + 'font-size': `${textDefaults.fontSize.value}${textDefaults.fontSize.unit}`, + 'line-height': `${textDefaults.lineHeight.value}${textDefaults.lineHeight.unit}`, + 'color': textDefaults.color, + }; + if (val === textDefaultValues[entry.css]) { + comment = ' /* hérité de la page */'; + } + } else if (hasInCss(entry.css)) { + // Non-special groups: show comment when CSS exists but toggle is off + comment = ' /* hérité de la page */'; + } + } + lines.push(` ${entry.css}: ${val};${comment}`); + } + for (const side of ['top', 'right', 'bottom', 'left']) { + if (settingEnabled.margin || hasInCss(`margin-${side}`)) { + lines.push(` margin-${side}: ${margin[side].value}${margin[side].unit};`); + } + } + for (const side of ['top', 'right', 'bottom', 'left']) { + if (settingEnabled.padding || hasInCss(`padding-${side}`)) { + lines.push(` padding-${side}: ${padding[side].value}${padding[side].unit};`); + } + } + return `${selector.value} {\n${lines.join('\n')}\n}`; + }); + + const editableFullCss = computed(() => { + return displayedCss.value.replace(/ \/\* (?:valeur par défaut|hérité de la page) \*\//g, ''); + }); + + // --- CSS parsing & sync --- + const parseCssProperties = (cssText) => { + const result = {}; + const match = cssText.match(/\{([\s\S]*)\}/); + if (!match) return result; + for (const decl of match[1].split(';')) { + const clean = decl.replace(/\/\*[\s\S]*?\*\//g, '').trim(); + if (!clean) continue; + const idx = clean.indexOf(':'); + if (idx === -1) continue; + const prop = clean.substring(0, idx).trim(); + const val = clean.substring(idx + 1).trim(); + if (prop && val) result[prop] = val; + } + return result; + }; + + const specialGroupDiffersFromDefault = (group, parsed) => { + switch (group) { + case 'font': + return 'font-family' in parsed || 'font-style' in parsed || 'font-weight' in parsed; + case 'fontSize': + return 'font-size' in parsed; + case 'lineHeight': + return 'line-height' in parsed; + case 'color': + return 'color' in parsed; + } + return false; + }; + + const syncRefsFromCss = (cssText) => { + const parsed = parseCssProperties(cssText); + const specialGroupNames = ['font', 'fontSize', 'lineHeight', 'color']; + + for (const [group, cssProps] of Object.entries(settingGroups)) { + const hasAnyProp = cssProps.some(p => p in parsed); + + if (hasAnyProp) { + for (const prop of styleProps) { + if (prop.group !== group) continue; + if (prop.css in parsed) { + if (prop.css === 'font-family') { + const firstFont = parsed[prop.css].split(',')[0].trim().replace(/['"]/g, ''); + fontFamily.value = firstFont; + } else { + prop.set(parsed[prop.css]); + } + } else { + // Property removed from CSS: reset to default + prop.set('normal'); + } + } + for (const prop of unitProps) { + if (prop.group !== group || !(prop.css in parsed)) continue; + const m = parsed[prop.css].match(/([\d.]+)(px|rem|em|mm|cm|in)?/); + if (m) { + prop.ref.value = parseFloat(m[1]); + prop.ref.unit = m[2] || 'px'; + } + } + if (group === 'margin') { + for (const side of ['top', 'right', 'bottom', 'left']) { + if (`margin-${side}` in parsed) { + const m = parsed[`margin-${side}`].match(/([\d.]+)(px|rem|em|mm|cm|in)?/); + if (m) { margin[side].value = parseFloat(m[1]); margin[side].unit = m[2] || 'mm'; } + } + } + } + if (group === 'padding') { + for (const side of ['top', 'right', 'bottom', 'left']) { + if (`padding-${side}` in parsed) { + const m = parsed[`padding-${side}`].match(/([\d.]+)(px|rem|em|mm|cm|in)?/); + if (m) { padding[side].value = parseFloat(m[1]); padding[side].unit = m[2] || 'mm'; } + } + } + } + + if (!settingEnabled[group]) { + if (specialGroupNames.includes(group)) { + if (specialGroupDiffersFromDefault(group, parsed)) { + settingEnabled[group] = true; + settingCache[group] = null; + } + } else { + settingEnabled[group] = true; + } + } + } else if (settingEnabled[group]) { + settingEnabled[group] = false; + if (group === 'font') { + fontFamily.value = textDefaults.fontFamily; + italic.value = false; + bold.value = false; + settingCache.font = null; + } else if (group === 'fontSize') { + fontSize.value = textDefaults.fontSize.value; + fontSize.unit = textDefaults.fontSize.unit; + settingCache.fontSize = null; + } else if (group === 'lineHeight') { + lineHeight.value = textDefaults.lineHeight.value; + lineHeight.unit = textDefaults.lineHeight.unit; + settingCache.lineHeight = null; + } else if (group === 'color') { + color.value = textDefaults.color; + settingCache.color = null; + } + } + } + + saveElementState(); + }; + + const handleCssInput = (newCss) => { + isUpdatingFromStore = true; + + syncRefsFromCss(newCss); + + const parsed = parseCssProperties(newCss); + const specialGroupPropsMap = { + font: ['font-family', 'font-style', 'font-weight'], + fontSize: ['font-size'], + lineHeight: ['line-height'], + color: ['color'], + }; + const excludedProps = new Set(); + for (const [group, props] of Object.entries(specialGroupPropsMap)) { + if (!settingEnabled[group]) { + props.forEach(p => excludedProps.add(p)); + } + } + + const storeParts = []; + for (const [prop, val] of Object.entries(parsed)) { + if (!excludedProps.has(prop)) { + storeParts.push(` ${prop}: ${val};`); + } + } + + const storeBlock = storeParts.length + ? `${selector.value} {\n${storeParts.join('\n')}\n}\n` + : ''; + + const oldBlock = elementCss.value; + if (oldBlock && storeBlock) { + stylesheetStore.replaceInCustomCss(oldBlock, storeBlock); + } else if (oldBlock && !storeBlock) { + stylesheetStore.replaceInCustomCss(oldBlock, ''); + } else if (!oldBlock && storeBlock) { + stylesheetStore.setCustomCss( + (stylesheetStore.customCss ? stylesheetStore.customCss + '\n' : '') + storeBlock + ); + } + + nextTick(() => { isUpdatingFromStore = false; }); + }; + + // --- Reapply stored values (shared selector protection) --- + const reapplyStoredEnabledGroups = () => { + const currentSel = basePopup.value?.visible ? selector.value : null; + + for (const [sel, state] of elementStates) { + if (!state.toggles || !state.values) continue; + if (sel === currentSel) continue; + + if (state.toggles.font) { + const val = state.values.fontFamily === 'sans-serif' ? 'sans-serif' : `"${state.values.fontFamily}"`; + stylesheetStore.updateProperty(sel, 'font-family', val); + } + if (state.toggles.fontSize) { + stylesheetStore.updateProperty(sel, 'font-size', state.values.fontSize.value, state.values.fontSize.unit); + } + if (state.toggles.lineHeight) { + stylesheetStore.updateProperty(sel, 'line-height', state.values.lineHeight.value, state.values.lineHeight.unit); + } + if (state.toggles.color) { + stylesheetStore.updateProperty(sel, 'color', state.values.color); + } + } + + if (currentSel) { + applyAllEnabledGroups(); + } + }; + + // --- Load values from stylesheet --- + const loadValuesFromStylesheet = (isInitialLoad = false) => { + if (!selector.value) return; + if (!isInitialLoad) return; + + try { + for (const prop of styleProps) { + const data = stylesheetStore.extractValue(selector.value, prop.css); + if (data) { + const value = typeof data === 'string' ? data : data.value; + prop.set(value); + } + } + + for (const prop of unitProps) { + const data = stylesheetStore.extractValue(selector.value, prop.css); + if (data && data.value !== undefined) { + prop.ref.value = data.value; + prop.ref.unit = data.unit; + } + } + + const spacingSides = ['top', 'right', 'bottom', 'left']; + for (const side of spacingSides) { + const data = stylesheetStore.extractValue(selector.value, `margin-${side}`); + if (data && data.value !== undefined) { + margin[side].value = data.value; + margin[side].unit = data.unit; + } + } + for (const side of spacingSides) { + const data = stylesheetStore.extractValue(selector.value, `padding-${side}`); + if (data && data.value !== undefined) { + padding[side].value = data.value; + padding[side].unit = data.unit; + } + } + + // Fallback to TextSettings defaults only if the selector doesn't already have the value. + // Independent elements (li, ul, ol, table...) don't inherit from

    — only body-level fallbacks apply. + const independent = isIndependentElement.value; + + if (!settingEnabled.font && !settingCache.font) { + if (!stylesheetStore.extractValue(selector.value, 'font-family')) { + const ff = stylesheetStore.extractValue('body', 'font-family'); + if (ff) fontFamily.value = (typeof ff === 'string' ? ff : ff.value).replace(/['"]/g, ''); + } + if (!independent) { + if (!stylesheetStore.extractValue(selector.value, 'font-style')) { + const fs = stylesheetStore.extractValue('p', 'font-style'); + if (fs) italic.value = (typeof fs === 'string' ? fs : fs.value) === 'italic'; + } + if (!stylesheetStore.extractValue(selector.value, 'font-weight')) { + const fw = stylesheetStore.extractValue('p', 'font-weight'); + if (fw) { const v = typeof fw === 'string' ? fw : fw.value; bold.value = v === 'bold' || parseInt(v) >= 700; } + } + } + } + if (!independent && !settingEnabled.fontSize && !settingCache.fontSize) { + if (!stylesheetStore.extractValue(selector.value, 'font-size')) { + const data = stylesheetStore.extractValue('p', 'font-size'); + if (data && data.value !== undefined) { fontSize.value = data.value; fontSize.unit = data.unit; } + } + } + if (!independent && !settingEnabled.lineHeight && !settingCache.lineHeight) { + if (!stylesheetStore.extractValue(selector.value, 'line-height')) { + const data = stylesheetStore.extractValue('p', 'line-height'); + if (data && data.value !== undefined) { lineHeight.value = data.value; lineHeight.unit = data.unit; } + } + } + if (!settingEnabled.color && settingCache.color === null) { + if (!stylesheetStore.extractValue(selector.value, 'color')) { + const c = stylesheetStore.extractValue('body', 'color'); + if (c) color.value = typeof c === 'string' ? c : c.value; + } + } + } catch (error) { + console.error('Error loading values from stylesheet:', error); + } + }; + + // --- Open / Close --- + const open = (element, event, { getSelectorFromElement, getInstanceCount, selectedElement, elementInstanceCount }) => { + isUpdatingFromStore = true; + + selectedElement.value = element; + selector.value = getSelectorFromElement(element); + currentTag.value = element.tagName.toLowerCase(); + elementInstanceCount.value = getInstanceCount(selector.value); + + const stored = elementStates.get(selector.value); + if (stored) { + Object.assign(settingEnabled, stored.toggles); + settingCache.font = stored.cache.font ? { ...stored.cache.font } : null; + settingCache.fontSize = stored.cache.fontSize ? { ...stored.cache.fontSize } : null; + settingCache.lineHeight = stored.cache.lineHeight ? { ...stored.cache.lineHeight } : null; + settingCache.color = stored.cache.color ?? null; + } else { + for (const group of Object.keys(settingEnabled)) { + settingEnabled[group] = false; + } + settingCache.font = null; + settingCache.fontSize = null; + settingCache.lineHeight = null; + settingCache.color = null; + } + + // Reset inline-specific values, then apply tag-based defaults + italic.value = ELEMENT_DEFAULTS.italic; + bold.value = ELEMENT_DEFAULTS.bold; + color.value = ELEMENT_DEFAULTS.color; + textDecorationLine.value = ELEMENT_DEFAULTS.textDecorationLine; + + const tag = element.tagName.toLowerCase(); + const inlineDefaults = INLINE_DEFAULTS[tag]; + if (inlineDefaults) { + if (inlineDefaults.fontStyle === 'italic') italic.value = true; + if (inlineDefaults.fontWeight === 'bold') bold.value = true; + if (inlineDefaults.color) color.value = inlineDefaults.color; + if (inlineDefaults.textDecorationLine) textDecorationLine.value = inlineDefaults.textDecorationLine; + } + + loadValuesFromStylesheet(true); + + // If no session state, sync toggles from custom CSS block (handles page reload with saved CSS) + // Uses extractCustomBlock (not extractBlock) to avoid activating toggles for base stylesheet rules + if (!stored) { + const cssBlock = stylesheetStore.extractCustomBlock(selector.value); + if (cssBlock) syncRefsFromCss(cssBlock); + } + + if (stored && stored.values) { + if (settingEnabled.font) { + fontFamily.value = stored.values.fontFamily; + italic.value = stored.values.italic; + bold.value = stored.values.bold; + } else if (settingCache.font) { + fontFamily.value = settingCache.font.fontFamily; + italic.value = settingCache.font.italic; + bold.value = settingCache.font.bold; + } + if (settingEnabled.fontSize) { + fontSize.value = stored.values.fontSize.value; + fontSize.unit = stored.values.fontSize.unit; + } else if (settingCache.fontSize) { + fontSize.value = settingCache.fontSize.value; + fontSize.unit = settingCache.fontSize.unit; + } + if (settingEnabled.lineHeight) { + lineHeight.value = stored.values.lineHeight.value; + lineHeight.unit = stored.values.lineHeight.unit; + } else if (settingCache.lineHeight) { + lineHeight.value = settingCache.lineHeight.value; + lineHeight.unit = settingCache.lineHeight.unit; + } + if (settingEnabled.color) { + color.value = stored.values.color; + } else if (settingCache.color !== null) { + color.value = settingCache.color; + } + } + + basePopup.value.open(event); + nextTick(() => { isUpdatingFromStore = false; }); + }; + + const close = ({ selectedElement, emit }) => { + saveElementState(); + basePopup.value?.close(); + selector.value = ''; + currentTag.value = ''; + selectedElement.value = null; + emit('close'); + }; + + // --- Watchers --- + + // Font family: load font then update CSS + watch(fontFamily, async (val) => { + if (val && val !== 'sans-serif') await loadFont(val); + if (isUpdatingFromStore) return; + if (!settingEnabled.font) return; + const cssValue = val === 'sans-serif' ? 'sans-serif' : `"${val}"`; + updateProp('font-family', cssValue); + }); + + // Sync special groups with TextSettings defaults + watch(() => textDefaults.fontFamily, (val) => { + if (!settingEnabled.font && settingCache.font === null) fontFamily.value = val; + }); + watch(() => textDefaults.fontSize, (val) => { + if (!settingEnabled.fontSize && settingCache.fontSize === null) { + fontSize.value = val.value; + fontSize.unit = val.unit; + } + }, { deep: true }); + watch(() => textDefaults.lineHeight, (val) => { + if (!settingEnabled.lineHeight && settingCache.lineHeight === null) { + lineHeight.value = val.value; + lineHeight.unit = val.unit; + } + }, { deep: true }); + watch(() => textDefaults.color, (val) => { + if (!settingEnabled.color && settingCache.color === null) color.value = val; + }); + + // Simple props watchers + for (const prop of styleProps) { + if (prop.skipWatch) continue; + watch(prop.get, () => { + if (isUpdatingFromStore) return; + if (!settingEnabled[prop.group]) return; + const fn = () => updateProp(prop.css, prop.get()); + prop.debounce ? debouncedUpdate(fn) : fn(); + }); + } + + // Unit props watchers + for (const prop of unitProps) { + watch(() => prop.ref.value, () => { + if (isUpdatingFromStore) return; + if (!settingEnabled[prop.group]) return; + const fn = () => updateProp(prop.css, prop.ref.value, prop.ref.unit); + prop.debounce ? debouncedUpdate(fn) : fn(); + }); + watch(() => prop.ref.unit, () => { + if (isUpdatingFromStore) return; + if (!settingEnabled[prop.group]) return; + updateProp(prop.css, prop.ref.value, prop.ref.unit); + }); + } + + // Margin watchers + watch( + () => [margin.top.value, margin.right.value, margin.bottom.value, margin.left.value], + () => { + if (isUpdatingFromStore) return; + if (!settingEnabled.margin) return; + debouncedUpdate(() => { + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`margin-${side}`, margin[side].value, margin[side].unit); + } + }); + } + ); + watch( + () => [margin.top.unit, margin.right.unit, margin.bottom.unit, margin.left.unit], + () => { + if (isUpdatingFromStore) return; + if (!settingEnabled.margin) return; + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`margin-${side}`, margin[side].value, margin[side].unit); + } + } + ); + + // Padding watchers + watch( + () => [padding.top.value, padding.right.value, padding.bottom.value, padding.left.value], + () => { + if (isUpdatingFromStore) return; + if (!settingEnabled.padding) return; + debouncedUpdate(() => { + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`padding-${side}`, padding[side].value, padding[side].unit); + } + }); + } + ); + watch( + () => [padding.top.unit, padding.right.unit, padding.bottom.unit, padding.left.unit], + () => { + if (isUpdatingFromStore) return; + if (!settingEnabled.padding) return; + for (const side of ['top', 'right', 'bottom', 'left']) { + updateProp(`padding-${side}`, padding[side].value, padding[side].unit); + } + } + ); + + // Stylesheet change watcher (shared selector protection) + watch( + () => stylesheetStore.customCss, + () => { + if (isUpdatingFromStore) return; + if (stylesheetStore.isEditing) return; + isUpdatingFromStore = true; + reapplyStoredEnabledGroups(); + nextTick(() => { isUpdatingFromStore = false; }); + }, + { flush: 'sync' } + ); + + // Watch edit mode exit + watch( + () => stylesheetStore.isEditing, + (isEditing, wasEditing) => { + if (basePopup.value?.visible && wasEditing && !isEditing && !isUpdatingFromStore) { + isUpdatingFromStore = true; + loadValuesFromStylesheet(); + nextTick(() => { isUpdatingFromStore = false; }); + } + } + ); + + return { + // State + selector, + fontFamily, + italic, + bold, + textAlign, + color, + background, + fontSize, + fontSizeModel, + lineHeight, + lineHeightModel, + borderWidth, + borderStyle, + borderColor, + textDecorationLine, + textDecorationStyle, + textDecorationThickness, + textDecorationColor, + textUnderlineOffset, + settingEnabled, + settingCache, + textDefaults, + projectFonts, + loadAllFontPreviews, + + // Computeds + elementCss, + displayedCss, + editableFullCss, + + // Actions + onSubsectionClick, + onToggleSetting, + handleCssInput, + open, + close, + saveElementState, + }; +} diff --git a/src/composables/usePreviewRenderer.js b/src/composables/usePreviewRenderer.js index 66bd267..01a8384 100644 --- a/src/composables/usePreviewRenderer.js +++ b/src/composables/usePreviewRenderer.js @@ -57,10 +57,12 @@ export function usePreviewRenderer({ } // Render to the hidden frame + // Font-face CSS is injected as a separate style block so PagedJS doesn't try to parse its URLs hiddenFrame.srcdoc = ` +