Jake Vanderwerf
2026-09-04 32ce5c542c90be348895328078e392dde2052957
=Working at adding defined fields to a dedicated panel in the gutenberg editor. Registrar now has AddCustomFields.php, which currently only supports post fields. Added a @wordpress/plugins base _meta/fields in /build and /src that successfully creates a panel. Next steps: determine sections and fields, group fields by section (each section to a panel), and save output
5 files deleted
17 files added
66 files modified
1 files renamed
11855 ■■■■■ changed files
assets/css/copy-hours.min.css 2 ●●●●● patch | view | raw | blame | history
assets/css/copyHours.min.css 1 ●●●●● patch | view | raw | blame | history
assets/css/dash.css 1 ●●●●● patch | view | raw | blame | history
assets/css/dash.min.css 2 ●●●●● patch | view | raw | blame | history
assets/css/feed.min.css 2 ●●●●● patch | view | raw | blame | history
assets/css/forms.css 1 ●●●●● patch | view | raw | blame | history
assets/css/forms.min.css 2 ●●●●● patch | view | raw | blame | history
assets/css/icons.css 1 ●●●●● patch | view | raw | blame | history
assets/css/icons.min.css 1 ●●●●● patch | view | raw | blame | history
assets/css/nav.min.css 2 ●●●●● patch | view | raw | blame | history
assets/js/concise/WooCommerceCart.js 6 ●●●●● patch | view | raw | blame | history
assets/js/min/cartCheck.min.js 1 ●●●●● patch | view | raw | blame | history
assets/js/min/selector.min.js 2 ●●●●● patch | view | raw | blame | history
base/Options.php 8 ●●●●● patch | view | raw | blame | history
build/_meta/fields.asset.php 1 ●●●●● patch | view | raw | blame | history
build/_meta/fields.js 1 ●●●●● patch | view | raw | blame | history
build/drawer-menu/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/drawer-menu/index.js 2 ●●●●● patch | view | raw | blame | history
build/faq/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/faq/index.js 2 ●●●●● patch | view | raw | blame | history
build/faq/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/faq/style-index.css 2 ●●●●● patch | view | raw | blame | history
build/feed/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/feed/index.js 2 ●●●●● patch | view | raw | blame | history
build/feed/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/feed/style-index.css 2 ●●●●● patch | view | raw | blame | history
build/feed/view.asset.php 2 ●●●●● patch | view | raw | blame | history
build/feed/view.js 2 ●●●●● patch | view | raw | blame | history
build/forms/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/forms/index.js 2 ●●●●● patch | view | raw | blame | history
build/glossary/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/glossary/index.js 2 ●●●●● patch | view | raw | blame | history
build/glossary/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/glossary/style-index.css 2 ●●●●● patch | view | raw | blame | history
build/gmbreviews/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/gmbreviews/index.js 2 ●●●●● patch | view | raw | blame | history
build/gmbreviews/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/gmbreviews/style-index.css 2 ●●●●● patch | view | raw | blame | history
build/menu/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/menu/index.js 2 ●●●●● patch | view | raw | blame | history
build/menu/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/menu/style-index.css 2 ●●●●● patch | view | raw | blame | history
build/simple-calendar/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/simple-calendar/index.js 2 ●●●●● patch | view | raw | blame | history
build/summary/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/summary/index.js 2 ●●●●● patch | view | raw | blame | history
build/timeline/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/timeline/index.js 2 ●●●●● patch | view | raw | blame | history
build/video/index.asset.php 2 ●●●●● patch | view | raw | blame | history
build/video/index.js 2 ●●●●● patch | view | raw | blame | history
build/video/style-index-rtl.css 2 ●●●●● patch | view | raw | blame | history
build/video/style-index.css 2 ●●●●● patch | view | raw | blame | history
checks.php 6 ●●●●● patch | view | raw | blame | history
cleanup.php 3 ●●●●● patch | view | raw | blame | history
inc/blocks/CustomBlocks.php 8 ●●●●● patch | view | raw | blame | history
inc/blocks/MenuBlock.php 98 ●●●●● patch | view | raw | blame | history
inc/helpers/all.php 1 ●●●●● patch | view | raw | blame | history
inc/helpers/foodmenu.php 36 ●●●●● patch | view | raw | blame | history
inc/helpers/time.php 6 ●●●●● patch | view | raw | blame | history
inc/integrations/SyncDefaults.php 6 ●●●●● patch | view | raw | blame | history
inc/managers/SEO/render/SchemaOutput.php 121 ●●●●● patch | view | raw | blame | history
inc/managers/ScriptLoader.php 18 ●●●●● patch | view | raw | blame | history
inc/managers/_setup.php 9 ●●●●● patch | view | raw | blame | history
inc/meta/Meta.php 45 ●●●●● patch | view | raw | blame | history
inc/meta/MetaOld.php 4 ●●●●● patch | view | raw | blame | history
inc/meta/MetaTypeManager.php 2 ●●●●● patch | view | raw | blame | history
inc/registrar/Fields.php 16 ●●●●● patch | view | raw | blame | history
inc/registrar/Registrar.php 8 ●●●●● patch | view | raw | blame | history
inc/registrar/_setup.php 1 ●●●●● patch | view | raw | blame | history
inc/registrar/fields/Field.php 4 ●●●●● patch | view | raw | blame | history
inc/registrar/helpers/AddCustomFields.php 220 ●●●●● patch | view | raw | blame | history
inc/registrar/helpers/MakeCalendarType.php 3 ●●●●● patch | view | raw | blame | history
inc/rest/routes/OptionsRoutes.php 4 ●●●●● patch | view | raw | blame | history
jvb.php 11 ●●●●● patch | view | raw | blame | history
package-lock.json 10418 ●●●●● patch | view | raw | blame | history
package.json 6 ●●●●● patch | view | raw | blame | history
src/editor-fields/Fields.js 26 ●●●●● patch | view | raw | blame | history
src/editor-fields/SidePanel.js 85 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/checkbox-field.js 25 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/repeater-field.js 64 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/select-field.js 29 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/selector-field.js 96 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/switch-field.js 7 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/text-field.js 29 ●●●●● patch | view | raw | blame | history
src/editor-fields/fields/upload-field.js 77 ●●●●● patch | view | raw | blame | history
src/editor-fields/index.js 35 ●●●●● patch | view | raw | blame | history
src/menu/style.scss 212 ●●●●● patch | view | raw | blame | history
webpack.config.js 9 ●●●●● patch | view | raw | blame | history
webpack.jvb.js 1 ●●●●● patch | view | raw | blame | history
assets/css/copy-hours.min.css
@@ -1 +1 @@
.group-fields{position:relative}.hours-copy-btn:hover{background-color:rgb(var(--action-50));transform:scale(1.05)}.hours-copy-btn:active{transform:scale(.95)}.hours-copy-btn .icon{--w:0.875rem}.copy-hours-content h3{margin:0 0 1rem 0;color:rgb(var(--contrast));font-size:var(--txt-large)}.copy-hours-source{background-color:rgb(var(--base-100));padding:1rem;border-radius:var(--radius);margin-bottom:1.5rem;border:1px solid rgb(var(--base-200))}.copy-hours-source h4{margin:0 0 .5rem 0;color:rgb(var(--contrast-100));text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.source-info{--gap:.25rem}.source-day{font-weight:600;color:rgb(var(--contrast));text-transform:capitalize}.source-hours{--gap:1rem;font-weight:500;color:rgb(var(--contrast))}.source-hours.closed{color:rgb(var(--contrast-200));font-style:italic}.copy-hours-targets{margin-bottom:2rem}.copy-hours-targets h4{margin:0 0 1rem 0;color:rgb(var(--contrast-100));text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.day-checkboxes{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem}.feedback{position:fixed;top:2rem;right:2rem;background-color:rgb(var(--action-50));color:var(--action-contrast);padding:1rem 1.5rem;border-radius:var(--radius);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);z-index:10000;opacity:0;transform:translateX(100px);transition:all var(--trans-base);display:flex;align-items:center;gap:.5rem}.feedback.show{opacity:1;transform:translateX(0)}.feedback .icon{--w:1.25rem}
.group-fields{position:relative}.hours-copy-btn:hover{background-color:rgb(var(--action-50));transform:scale(1.05)}.hours-copy-btn:active{transform:scale(0.95)}.hours-copy-btn .icon{--w: 0.875rem}.copy-hours-content h3{margin:0 0 1rem 0;color:rgb(var(--contrast));font-size:var(--txt-large)}.copy-hours-source{background-color:rgb(var(--base-100));padding:1rem;border-radius:var(--radius);margin-bottom:1.5rem;border:1px solid rgb(var(--base-200))}.copy-hours-source h4{margin:0 0 .5rem 0;color:rgb(var(--contrast-100));text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.source-info{--gap: .25rem}.source-day{font-weight:600;color:rgb(var(--contrast));text-transform:capitalize}.source-hours{--gap: 1rem;font-weight:500;color:rgb(var(--contrast))}.source-hours.closed{color:rgb(var(--contrast-200));font-style:italic}.copy-hours-targets{margin-bottom:2rem}.copy-hours-targets h4{margin:0 0 1rem 0;color:rgb(var(--contrast-100));text-transform:uppercase;font-size:var(--txt-small);font-weight:600}.day-checkboxes{display:grid;grid-template-columns:repeat(auto-fit, minmax(120px, 1fr));gap:.75rem}.feedback{position:fixed;top:2rem;right:2rem;background-color:rgb(var(--action-50));color:var(--action-contrast);padding:1rem 1.5rem;border-radius:var(--radius);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);z-index:10000;opacity:0;transform:translateX(100px);transition:all var(--trans-base);display:flex;align-items:center;gap:.5rem}.feedback.show{opacity:1;transform:translateX(0)}.feedback .icon{--w: 1.25rem}/*# sourceMappingURL=copy-hours.min.css.map */
assets/css/copyHours.min.css
File was deleted
assets/css/dash.css
File was deleted
assets/css/dash.min.css
@@ -1 +1 @@
.replace{margin-left:var(--btn_)!important;padding:0}.dashboard aside.main.left{bottom:0}.dashboard .qtoggle{left:0;bottom:0;margin:0!important}.dashboard>header{padding-left:var(--btn_)}.dashboard nav.tabs{max-width:none;flex-wrap:nowrap}nav.sidebar{--wrap:nowrap;--align:flex-start;position:fixed;bottom:0;top:var(--btn);z-index:var(--z-4);height:calc(100% - var(--btn));background-color:rgb(var(--base));box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);width:var(--btn);transition:var(--trans-size);overflow:hidden auto;margin-left:0!important;padding-bottom:var(--btn)}nav.sidebar.left{left:0}nav.sidebar.right{right:0}nav.sidebar .icon{--w:var(--chip_);width:var(--w);transition:var(--trans-size)}nav.sidebar.open{width:fit-content;max-width:85vw}nav.sidebar.open .icon{--w:var(--chip)}nav.sidebar ul{height:max-content;width:100%;--gap:0;--dir:column}nav.sidebar li{--justify:center;--wrap:nowrap;--align:flex-start;overflow:hidden;height:max-content;width:100%;--gap:0}nav.sidebar ul ul{max-height:0;overflow:hidden;transform:scaleY(0);transform-origin:top;transition:var(--trans-base)}nav.sidebar li.open>ul{max-height:max-content;transform:scaleY(1)}nav.sidebar.open li>div{width:100%;padding-right:var(--btn);gap:0}nav.sidebar.open li.has-submenu>div{padding-right:0}nav.sidebar.open li.has-submenu>ul{padding-left:var(--chip)}nav.sidebar .has-submenu.open>ul{background-color:rgba(var(--base-200),var(--op-2));border:none}nav.sidebar button{box-shadow:var(--shdw-none);border:0}nav.sidebar .title{display:none}nav.sidebar.open .title{display:block;white-space:nowrap}nav.sidebar a{--justify:flex-start}nav.sidebar .a{gap:.5rem;display:flex;width:100%;justify-content:flex-start;align-items:center;min-height:var(--btn);padding:var(--padding)}nav.sidebar .toggle:not(.main){display:none;width:var(--btn);height:var(--chipchip)}nav.sidebar.open .toggle{display:flex}nav.sidebar .toggle.main{position:fixed;left:unset;bottom:0;right:0;width:var(--btn);height:var(--btn);z-index:var(--z-8);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw)}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));padding:0;border-radius:0 0 var(--radius-outer) var(--radius-outer)}.all-filters summary:hover,.all-filters[open] summary{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover::after{background-color:rgb(var(--action-contrast))}.all-filters summary{width:100%}.all-filters>.row.row{padding:0 .75rem;width:var(--content);position:relative}.all-filters>.row>.label,.all-filters>.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row>.label{width:20%}.all-filters>.row>.row>.label{white-space:nowrap}.all-filters .btn+label,.all-filters button{width:var(--chipchip);min-height:var(--chipchip);padding:0}.all-filters .btn+label,.all-filters button{position:unset}.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.all-filters button .label,.btn+label .label{position:absolute;top:2rem;left:1rem;width:max-content;white-space:nowrap;opacity:0;z-index:var(--z-4)}.all-filters .radio-options.order>.row{position:relative;padding-bottom:2rem}.all-filters .radio-options .row .btn+label .label{bottom:0;top:unset;left:0;height:max-content}.all-filters button:hover .label,.btn+label:hover .label,.btn:checked+label .label{opacity:1}.all-filters .radio-options.order>.row{max-width:49%}.all-filters .radio-options.order{margin-top:1rem}.all-filters .filters select,.all-filters .filters>.row{width:max-content}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{transform:scaleX(0);transform-origin:left;width:0;padding:0;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}section.main-actions.main-actions{padding:0;position:absolute;left:var(--offScreen)}.dashboard main>footer{padding:0;margin:0;position:absolute;left:var(--offScreen)}.item .select-item-label{width:100%;height:100%;aspect-ratio:1}dialog form nav.tabs{--wrap:nowrap!important;--gap:0!important;overflow-x:auto;touch-action:pan-x;position:absolute;top:0;left:0;right:0;max-width:100%;height:var(--chipchip);padding:0;background-color:rgba(var(--base),var(--op-5))}dialog form nav.tabs button{min-height:var(--chipchip);padding:0 1rem}dialog nav.tabs button:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}dialog:has(nav.tabs) .wrap{padding-top:3rem}dialog{height:100%!important}.dashboard-page{max-width:calc(100% - var(--btn));margin-left:0}.toggle-text input{display:none}.toggle-text input+label{font-weight:400;color:var(--contrast)!important;text-transform:none;cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggle-text label::after,.toggle-text label::before{display:none!important}.toggle-text label{padding-left:0!important}.toggle-text input+label .text{position:relative;margin:0;--gap:0;font-weight:700;width:fit-content;padding:2px 4px;border:1px solid var(--action-50);border-radius:4px;color:var(--action-50)!important}table .toggle-text input+label .text{color:var(--contrast)!important;border-color:var(--contrast)}.toggle-text:hover .text,table .toggle-text:hover .text{background-color:var(--action-50);color:var(--light-0)!important;border-color:var(--action-50)}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off{opacity:1;max-width:100%;transform:none}.toggle-text input+label .on{opacity:0;max-width:0;transform:translate3d(0,100%,0)}.toggle-text input:checked+label .off{opacity:0;max-width:0;transform:translate3d(0,-100%,0)}.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:none}
.replace{margin-left:var(--btn_) !important;padding:0}.dashboard aside.main.left{bottom:0}.dashboard .qtoggle{left:0;bottom:0;margin:0 !important}.dashboard>header{padding-left:var(--btn_)}.dashboard nav.tabs{max-width:none;flex-wrap:nowrap}nav.sidebar{--wrap: nowrap;--align: flex-start;position:fixed;bottom:0;top:var(--btn);z-index:var(--z-4);height:calc(100% - var(--btn));background-color:rgb(var(--base));box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);width:var(--btn);transition:var(--trans-size);overflow:hidden auto;margin-left:0 !important;padding-bottom:var(--btn)}nav.sidebar.left{left:0}nav.sidebar.right{right:0}nav.sidebar .icon{--w: var(--chip_);width:var(--w);transition:var(--trans-size)}nav.sidebar.open{width:fit-content;max-width:85vw}nav.sidebar.open .icon{--w: var(--chip)}nav.sidebar ul{height:max-content;width:100%;--gap: 0;--dir: column}nav.sidebar li{--justify: center;--wrap: nowrap;--align: flex-start;overflow:hidden;height:max-content;width:100%;--gap: 0}nav.sidebar ul ul{max-height:0;overflow:hidden;transform:scaleY(0);transform-origin:top;transition:var(--trans-base)}nav.sidebar li.open>ul{max-height:max-content;transform:scaleY(1)}nav.sidebar.open li>div{width:100%;padding-right:var(--btn);gap:0}nav.sidebar.open li.has-submenu>div{padding-right:0}nav.sidebar.open li.has-submenu>ul{padding-left:var(--chip)}nav.sidebar .has-submenu.open>ul{background-color:rgba(var(--base-200), var(--op-2));border:none}nav.sidebar button{box-shadow:var(--shdw-none);border:0}nav.sidebar .title{display:none}nav.sidebar.open .title{display:block;white-space:nowrap}nav.sidebar a{--justify: flex-start}nav.sidebar .a{gap:.5rem;display:flex;width:100%;justify-content:flex-start;align-items:center;min-height:var(--btn);padding:var(--padding)}nav.sidebar .toggle:not(.main){display:none;width:var(--btn);height:var(--chipchip)}nav.sidebar.open .toggle{display:flex}nav.sidebar .toggle.main{position:fixed;left:unset;bottom:0;right:0;width:var(--btn);height:var(--btn);z-index:var(--z-8);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw)}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));padding:0;border-radius:0 0 var(--radius-outer) var(--radius-outer)}.all-filters[open] summary,.all-filters summary:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover::after{background-color:rgb(var(--action-contrast))}.all-filters summary{width:100%}.all-filters>.row.row{padding:0 .75rem;width:var(--content);position:relative}.all-filters>.row>.label,.all-filters>.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row>.label{width:20%}.all-filters>.row>.row>.label{white-space:nowrap}.all-filters button,.all-filters .btn+label{width:var(--chipchip);min-height:var(--chipchip);padding:0}.all-filters button,.all-filters .btn+label{position:unset}.all-filters button .label,.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.btn+label .label{position:absolute;top:2rem;left:1rem;width:max-content;white-space:nowrap;opacity:0;z-index:var(--z-4)}.all-filters .radio-options.order>.row{position:relative;padding-bottom:2rem}.all-filters .radio-options .row .btn+label .label{bottom:0;top:unset;left:0;height:max-content}.all-filters button:hover .label,.btn:checked+label .label,.btn+label:hover .label{opacity:1}.all-filters .radio-options.order>.row{max-width:49%}.all-filters .radio-options.order{margin-top:1rem}.all-filters .filters>.row,.all-filters .filters select{width:max-content}.search-container:not(.open) input[type=search],.search-container:not(.open) .clear-search{transform:scaleX(0);transform-origin:left;width:0;padding:0;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.search-container button{padding:.5rem}.search-container .icon{--w: 1.5rem}.search-container.open input[type=search],.search-container.open .clear-search{transform:scaleX(1);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,input[type=search],.search-container{width:100%}section.main-actions.main-actions{padding:0;position:absolute;left:var(--offScreen)}.dashboard main>footer{padding:0;margin:0;position:absolute;left:var(--offScreen)}.item .select-item-label{width:100%;height:100%;aspect-ratio:1}dialog form nav.tabs{--wrap: nowrap!important;--gap:0!important;overflow-x:auto;touch-action:pan-x;position:absolute;top:0;left:0;right:0;max-width:100%;height:var(--chipchip);padding:0;background-color:rgba(var(--base), var(--op-5))}dialog form nav.tabs button{min-height:var(--chipchip);padding:0 1rem}dialog nav.tabs button:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}dialog:has(nav.tabs) .wrap{padding-top:3rem}dialog{height:100% !important}.dashboard-page{max-width:calc(100% - var(--btn));margin-left:0}.toggle-text input{display:none}.toggle-text input+label{font-weight:normal;color:var(--contrast) !important;text-transform:none;cursor:pointer;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggle-text label::before,.toggle-text label::after{display:none !important}.toggle-text label{padding-left:0 !important}.toggle-text input+label .text{position:relative;margin:0;--gap: 0;font-weight:bold;width:fit-content;padding:2px 4px;border:1px solid var(--action-50);border-radius:4px;color:var(--action-50) !important}table .toggle-text input+label .text{color:var(--contrast) !important;border-color:var(--contrast)}.toggle-text:hover .text,table .toggle-text:hover .text{background-color:var(--action-50);color:var(--light-0) !important;border-color:var(--action-50)}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off{opacity:1;max-width:100%;transform:none}.toggle-text input+label .on{opacity:0;max-width:0;transform:translate3d(0, 100%, 0)}.toggle-text input:checked+label .off{opacity:0;max-width:0;transform:translate3d(0, -100%, 0)}.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:none}/*# sourceMappingURL=dash.min.css.map */
assets/css/feed.min.css
@@ -1 +1 @@
.feed-block{max-width:var(--full);margin:0 auto}.feed-block>:not(.feed-grid,h2){max-width:var(--alignWide);margin:1rem var(--mr) 1rem var(--ml)}.feed-block>h2{max-width:var(--content)}.feed-block[data-loading=true]{opacity:.7}.feed-block:empty::before{content:"Looks like there's nothing here yet.";display:block;text-align:center;padding:2rem}.feed-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem;margin-bottom:2rem}@media (min-width:768px){.feed-grid{grid-template-columns:repeat(4,1fr);gap:1rem}.feed-empty-state{grid-column:2/span 2!important}}@media (min-width:1200px){.feed-grid{grid-template-columns:repeat(6,1fr)}.feed-empty-state{grid-column:2/span 4!important}}.feed-item{position:relative;border-radius:.5rem;overflow:hidden;background:var(--base-50);box-shadow:0 2px 4px rgba(0,0,0,.1);opacity:0;transition:opacity var(--transition-base) var(--delay);height:fit-content;padding:0}.feed-item[data-loaded]{opacity:1}.feed-item[data-loaded]+.feed-item[data-loaded]{--delay:var(--delay) + var(--increase)}.feed-item.artist{grid-column:span 2}.feed-item.highlighted{animation:highlight 2s ease-out}.feed-image{display:block;aspect-ratio:1;overflow:hidden;width:100%;height:100%}.artist-tattoos img,.feed-image img{width:100%;height:100%;object-fit:cover;transition:transform var(--timing) var(--function)}.artist-tattoos a:hover img,.feed-image:hover img{transform:scale(1.05)}.item-info{padding:.25rem 1rem}.item-info h3{margin:0!important;font-size:1.1rem;font-family:var(--body);font-weight:var(--bWeight);text-align:center}.item-info span{text-transform:uppercase;display:flex;align-items:center}.item-info .icon{margin-right:1em}.taxonomy-lists{margin:.5rem 0}.taxonomy-group{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem;margin-bottom:.25rem}.taxonomy-group ul{list-style:none;margin:0;padding:0}.item-labels{margin-top:.5rem;display:flex;flex-wrap:wrap;gap:.5rem}.label{display:flex;align-items:center;gap:.25rem;font-size:.9rem}.label a{color:inherit;text-decoration:none}.label a:hover{color:var(--pink-0)}.favourite-button{position:absolute;top:.5rem;right:.5rem;z-index:10;background:var(--overlay-medium);border-radius:50%;box-shadow:var(--subtle);border:none;cursor:pointer;width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;backdrop-filter:blur(5px);transition:all var(--transition-base)}.favourite-button:hover{transform:scale(1.1);color:var(--pink-0);background:var(--base);box-shadow:0 4px 8px rgba(0,0,0,.15)}.favourite-button.favourited{animation:favourite-pop .4s cubic-bezier(.25,.46,.45,.94)}.feed-filters{margin:2rem auto;position:relative}.feed-filters .feed-controls{display:flex;justify-content:space-between;align-items:center;gap:2rem;width:100%}.feed-filters details summary{justify-content:flex-start;padding:2rem .5rem .5rem}.feed-filters details[open] summary{background-color:var(--base-50)}.feed-filters summary:after{position:absolute;right:.5rem;top:.5rem}.feed-filters .filter-toggle,.feed-filters .type-filter>label,.radio-group-label>label{display:flex;justify-content:center;align-items:center;padding:.35rem;white-space:nowrap;width:fit-content;height:fit-content;cursor:pointer;border:1px solid var(--base-200);border-radius:4px;font-size:.875rem;transition:border-color var(--transition-base);margin-bottom:.5rem}.filter-toggle .icon{margin-right:.5rem}.type-filter:hover{color:var(--pink-0);border-color:var(--pink-0);transition:var(--transition-color)}.feed-filters .type-filter>label{flex-direction:column}.type-filter.favourites-toggle{margin-left:auto}.type-filter.favourites-toggle label{position:relative}.type-filter.favourites-toggle label .label{top:100%;right:0}input[hidden]+label{display:none}.feed-filters svg{width:25px;height:25px}.order-options{position:relative;display:flex;justify-content:space-between}.order-options .order-by{display:flex}.order-options .order-by .radio-group-label,.order-options .order-direction{display:flex;padding-top:1.5rem;position:relative}.order-options .order-by>.label{margin-right:2rem}.radio-group-label{display:flex;gap:.5rem}.feed-filters .radio-group-label label .label{top:.5rem;right:.5rem}.feed-filters .order-options label svg{width:20px;height:20px}.feed-filters input:checked+label,.feed-filters label:hover,.radio-group-label input:checked+label{background-color:var(--white);border-color:var(--pink);color:var(--pink)}.feed-filters label .label{position:absolute;visibility:hidden;top:.5rem;right:4rem;opacity:0;transition:transform var(--timing) var(--function);transition-property:max-width,transform}.feed-filters input:checked+label .label{visibility:visible;opacity:1}.feed-filters .filters{padding:1rem;margin-top:1rem;background-color:transparent}.has-filters.filters{background-color:var(--base-50)}.filter-group{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:.25rem;position:relative}.feed-overlay{display:none;opacity:0;visibility:hidden}.loading .feed-overlay{position:fixed;top:0;left:0;right:0;bottom:0;margin:0!important;max-width:none!important;width:100%;height:100%;background:var(--overlay-medium);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);display:flex;justify-content:center;align-items:center;z-index:999999;opacity:1;visibility:visible;transition:opacity .3s ease,visibility .3s ease}.feed-overlay-content{background:var(--base);padding:2rem;border-radius:1rem;box-shadow:var(--shadow);text-align:center;width:min(400px,60vw)}.loading .loading-icon-container{position:relative;margin-bottom:1.5rem;animation:dance 1s ease-in-out infinite;transition:opacity .2s ease;will-change:transform,opacity}.loading .loading-message .icon{width:3em;height:3em}.loading .loading-message .icon svg{width:100%;height:100%;margin-right:1rem;animation:dance 2s ease-in-out infinite;transition:color .3s ease}.loading .loading-message{will-change:opacity;font-size:1rem;color:#666;text-align:center;min-height:24px;transition:opacity .2s ease;margin-bottom:1rem}.loading .loading-dots{color:var(--pink-0);width:4px;aspect-ratio:1;border-radius:50%;box-shadow:19px 0 0 7px,38px 0 0 3px,57px 0 0 0;transform:translateX(-38px) scale(.666);animation:bubble .5s infinite alternate linear}.feed-empty-state{grid-column-start:1;grid-column-end:2;text-align:center;padding:2rem;background:var(--base);border-radius:1rem;margin:0 auto;max-width:600px}.feed-empty-state h3{text-align:center;font-family:var(--heading);font-size:clamp(1.5rem,3vw,2.5rem);margin:0 0 2rem 0;color:var(--pink-0)}.feed-empty-state p{font-family:var(--body);margin:1rem 0;font-size:clamp(1rem,2vw,1.2rem);line-height:1.4}.feed-empty-state p:last-child{color:var(--pink-0);margin-top:2rem}@keyframes highlight{0%,100%{box-shadow:none}50%{box-shadow:0 0 0 4px var(--pink-0)}}@keyframes favourite-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}75%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes bubble{50%{box-shadow:19px 0 0 3px,38px 0 0 7px,57px 0 0 3px}100%{box-shadow:19px 0 0 0,38px 0 0 3px,57px 0 0 7px}}@keyframes dance{0%,100%{transform:rotate(-5deg) scale(1)}50%{transform:rotate(5deg) scale(1.1)}}.artist-tattoos{display:grid;grid-template-columns:repeat(3,1fr);gap:.25em}.artist-tattoos a:has(img){overflow:hidden;background-color:var(--base-100)}.artist-tattoos a:not(.feed-image) img{width:100%;height:100%;object-fit:cover}.artist-tattoos a::after,.artist-tattoos a::before{display:none}.artist-tattoos .feed-image{grid-row:span 2;grid-column:span 2}.feed-item summary .handle{position:absolute;bottom:0;left:0;right:0;background-color:var(--overlay-light);backdrop-filter:blur(5px);border-radius:var(--innerRadius);z-index:1;padding:.25rem .25rem .25rem 1.1rem}.feed-item:hover summary .handle,.feed-item[open] summary .handle{background-color:var(--overlay-pink-medium);backdrop-filter:blur(5px)}.feed-item summary:after{z-index:11;position:absolute;bottom:.35rem;right:.7rem;width:1.5rem;height:1.5rem;cursor:pointer}.loading .feed-overlay h2{width:fit-content;margin:1rem auto!important;color:transparent;-webkit-text-stroke:1px var(--contrast);--g:conic-gradient(var(--pink-0) 0 0) no-repeat text;background:var(--g) 0,var(--g) 1ch,var(--g) 2ch,var(--g) 3ch,var(--g) 4ch,var(--g) 5ch,var(--g) 6ch;animation:l17-0 1s linear infinite alternate,l17-1 2s linear infinite}@keyframes l17-0{0%{background-size:1ch 0}100%{background-size:1ch 100%}}@keyframes l17-1{0%,50%{background-position-y:100%,0}50.01%,to{background-position-y:0,100%}}.loading .loading-message{display:flex;justify-content:center;align-items:center;overflow:hidden}.loading .dots-wrapper{display:flex;justify-content:center;align-items:center}.loading .loading-message p{opacity:1;transform:scaleY(1);transform-origin:bottom;transition:opacity var(--transition-base),transform var(--transition-base)}.loading .changing .loading-message p{opacity:0;transform:scaleY(0);transform-origin:top}.loading .feed-overlay::after{content:'';position:absolute;z-index:-1;inset:0;background:linear-gradient(90deg,var(--shimmer));animation:shimmer 3s ease-in-out infinite}@keyframes shimmer{0%{transform:translateX(-100%)}100%,50%{transform:translateX(100%)}}@media (max-width:768px){.feed-filters .feed-controls{flex-direction:column;gap:1rem}.feed-empty-state{grid-column-end:none;padding:2rem 1rem;margin:1rem}.feed-filters details summary{gap:.5rem;justify-content:flex-start}}[hidden],[hidden]+label{display:none}.feed-loader{display:flex;flex-direction:column;align-items:center;gap:1rem;margin:2rem auto 0!important}.load-more{opacity:1;display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;background:var(--base-200);color:var(--contrast-200);border:none;border-radius:4px;font-size:var(--medium);cursor:pointer;transition:all var(--transition-base)}.load-more[hidden]{opacity:0;transition:all var(--transition-base)}.load-more:hover{background:var(--pink-0);transform:translateY(-2px)}.load-more:focus-visible{outline:2px solid var(--pink-0);outline-offset:2px}.feed-filters:not(:has(details)){display:flex;flex-direction:column;position:relative}.feed-filters:not(:has(details)) .favourites-toggle{position:absolute;top:1.5rem;left:-3.5rem;z-index:10}@media (min-width:768px){.feed-filters:not(:has(details)) .favourites-toggle{right:0;left:auto}}.icon.colour{background:#ff0080;background:linear-gradient(180deg,rgba(255,0,128,1) 0,rgba(250,71,101,1) 14%,rgba(251,121,35,1) 28%,rgba(176,190,19,1) 42%,rgba(14,204,0,1) 56%,rgba(14,225,166,1) 70%,rgba(63,152,253,1) 84%,rgba(166,90,196,1) 100%);mask-image:var(--colour);-webkit-mask-image:var(--colour);-webkit-mask-repeat:no-repeat;-webkit-mask-size:contain;mask-repeat:no-repeat;mask-size:contain;width:1.25rem;height:1.25rem}.feed-item:focus,.feed-item:focus-visible,[role=button]:focus,[role=button]:focus-visible,a:focus,a:focus-visible,button:focus,button:focus-visible,input:focus,input:focus-visible,select:focus,select:focus-visible,textarea:focus,textarea:focus-visible{outline:2px solid #ff0080!important;outline-offset:2px!important;box-shadow:0 0 0 4px rgba(255,0,128,.2)!important}:focus:not(:focus-visible){outline:0!important;box-shadow:none!important}.skip-to-content{background:#ff0080;color:#fff;height:auto;left:50%;padding:8px;position:absolute;transform:translateY(-100%) translateX(-50%);transition:transform .3s;width:auto;z-index:100}.skip-to-content:focus{transform:translateY(0) translateX(-50%)}[aria-busy=true]{cursor:progress}[aria-disabled=true],[disabled]{cursor:not-allowed;opacity:.7}@media (forced-colors:active){.feed-item{border:1px solid CanvasText}[role=button],button{border:1px solid ButtonText}.favourite-button.favourited{background-color:Highlight;color:HighlightText}}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important;scroll-behavior:auto!important}.feed-overlay-content,.gallery-modal,.loading-dots{animation:none!important;transition:none!important}.feed-item{transition:none!important}}.feed-item[tabindex="0"]{cursor:pointer;position:relative}.feed-item[tabindex="0"]::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;border:2px solid transparent;transition:border-color .2s ease}.feed-item[tabindex="0"]:focus::after{border-color:#ff0080}.feed-item.highlighted{box-shadow:0 0 0 4px #ff0080,0 8px 16px rgba(0,0,0,.1);animation:highlight-pulse 2s ease-in-out}@keyframes highlight-pulse{0%,100%{box-shadow:0 0 0 4px #ff0080,0 8px 16px rgba(0,0,0,.1)}50%{box-shadow:0 0 0 8px #ff0080,0 12px 24px rgba(0,0,0,.15)}}.error-state{padding:2rem;border:1px solid #ff0080;border-radius:.5rem;margin:2rem 0;text-align:center}.error-state h3{color:#ff0080;margin-top:0}.error-state button{margin-top:1rem}.error-feedback-modal{padding:2rem;border:2px solid #ff0080;border-radius:.5rem;max-width:500px;width:100%}.error-feedback-modal h2{margin-top:0;color:#ff0080}.error-feedback-modal textarea{width:100%;min-height:100px;margin:1rem 0;padding:.5rem;border:1px solid #ccc;border-radius:.25rem}.error-feedback-modal .actions{display:flex;justify-content:flex-end;gap:1rem}.error-feedback-modal button{padding:.5rem 1rem;border:1px solid #ccc;border-radius:.25rem;background:#f5f5f5;cursor:pointer}.error-feedback-modal button.primary{background:#ff0080;color:#fff;border-color:#ff0080}dialog::backdrop{background-color:rgba(0,0,0,.5)}dialog.filter-dropdown{max-height:80vh;overflow:auto}dialog.filter-dropdown .cancel{position:sticky;top:0;z-index:1}.term-divider{position:relative;text-align:center;margin:1rem 0;border-bottom:1px solid var(--base-200)}.term-divider span{background:var(--base);padding:0 1rem;color:var(--contrast);font-size:.9rem;position:relative;top:.5em}.common-term{background:var(--base-50);border-radius:var(--innerRadius)}.loading-indicator{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:1rem;color:var(--contrast-100);font-size:.9rem}.loading-indicator svg{animation:spin 1s linear infinite}.pagination-info{text-align:center;padding:.5rem;font-size:.9rem;color:var(--contrast-100);border-top:1px solid var(--base-100)}@keyframes spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.term-breadcrumb{margin-bottom:1rem;padding:.5rem;background:var(--base-50);border-radius:4px}.back-to-parent{display:flex;align-items:center;gap:.5rem;border:none;background:0 0;color:var(--contrast);cursor:pointer;padding:.5rem;border-radius:4px;font-size:var(--small)}.back-to-parent:hover{background:var(--base-100)}.term-row{display:flex;align-items:center;gap:.5rem;width:100%;padding:.25rem 0}.toggle-children{border:none;background:0 0;padding:.25rem;cursor:pointer;color:var(--contrast);display:flex;align-items:center;justify-content:center;margin-left:auto;border-radius:4px}.toggle-children:hover{background:var(--base-50)}.loading-indicator{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.loading-indicator .loading{width:16px;height:16px;border:2px solid var(--base-100);border-top-color:var(--contrast);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.term-breadcrumb{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;padding:.5rem;background:var(--base-50);border-radius:4px}.term-breadcrumb .path{display:flex;align-items:center;gap:.25rem;flex-wrap:wrap}.term-breadcrumb button{border:none;background:0 0;padding:.25rem .5rem;border-radius:4px;cursor:pointer;color:var(--contrast);font-size:var(--small)}.term-breadcrumb button:hover{background:var(--base-100)}.path-separator{color:var(--contrast-50)}.path-level{white-space:nowrap}.create-term-section{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--base-100)}.suggestion-prompt{font-size:var(--small);color:var(--contrast-50);margin-bottom:1rem}.create-term-form{display:flex;flex-direction:column;gap:.5rem}.form-row{display:flex;align-items:center;gap:.5rem}.name-row{position:relative}.name-row input{width:100%;padding:.5rem;border:2px solid var(--base-100);border-radius:4px;background:var(--base);color:var(--contrast)}.name-row input:focus{border-color:var(--pink-0);outline:0}.parent-row{font-size:var(--small)}.parent-row label{display:flex;align-items:center;gap:.5rem;cursor:pointer}dialog[open].gallery-modal{width:calc(100vw - var(--padding) * 2);height:99vh;background:var(--base);display:flex;align-items:center;justify-content:center}.gallery-content{position:relative;max-width:100%;max-height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.gallery-favourite .favourite-button{top:unset;bottom:1rem;right:1rem}.gallery-image{max-width:100%;max-height:calc(100vh - 4rem);object-fit:contain}.gallery-close{position:absolute;top:1rem;right:1rem;background:0 0;border:none;color:#fff;cursor:pointer;padding:.5rem;z-index:10;transition:color .3s ease}.gallery-close:hover{color:#ff0080}.gallery-nav{position:absolute;top:50%;height:50%;z-index:5;transform:translateY(-50%);border:none;color:var(--contrast);cursor:pointer;padding:1rem;transition:color .3s ease;display:flex;justify-content:center;align-items:center}.gallery-nav:hover{background-color:var(--overlay-heavy)}.gallery-nav:hover{color:#ff0080}.gallery-prev{left:1rem}.gallery-next{right:1rem}.gallery-counter{position:absolute;top:1rem;left:1rem;color:#fff;font-size:.875rem}.gallery-content details{position:absolute;bottom:1rem;left:2rem;width:calc(100% - 4rem);background-color:var(--overlay-light);padding:0}.gallery-content details:hover,.gallery-content details[open]{background-color:var(--overlay-heavy);backdrop-filter:blur(5px)}
.feed-block{max-width:var(--full);margin:0 auto}.feed-block>*:not(.feed-grid,h2){max-width:var(--wide);margin:1rem var(--mr) 1rem var(--ml)}.feed-block>h2{max-width:var(--content)}.feed-block[data-loading=true]{opacity:.7}.feed-block:empty::before{content:"Looks like there's nothing here yet.";display:block;text-align:center;padding:2rem}.feed-grid{display:grid;grid-template-columns:repeat(2, 1fr);gap:.5rem;margin-bottom:2rem}@media(min-width: 768px){.feed-grid{grid-template-columns:repeat(4, 1fr);gap:1rem}.feed-empty-state{grid-column:2/span 2 !important}}@media(min-width: 1200px){.feed-grid{grid-template-columns:repeat(6, 1fr)}.feed-empty-state{grid-column:2/span 4 !important}}.feed-item{position:relative;border-radius:.5rem;overflow:hidden;background:rgb(var(--base-50));box-shadow:0 2px 4px rgba(0, 0, 0, 0.1);opacity:0;transition:opacity var(--trans-base) var(--delay);height:fit-content;padding:0}.feed-item[data-loaded]{opacity:1}.feed-item[data-loaded]+.feed-item[data-loaded]{--delay: var(--delay) + var(--increase)}.feed-item.artist{grid-column:span 2}.feed-item.highlighted{animation:highlight 2s ease-out}.feed-image{display:block;aspect-ratio:1;overflow:hidden;width:100%;height:100%}.artist-tattoos img,.feed-image img{width:100%;height:100%;object-fit:cover;transition:transform var(--trans-t) var(--trans-fn)}.artist-tattoos a:hover img,.feed-image:hover img{transform:scale(1.05)}.item-info{padding:.25rem 1rem}.item-info h3{margin:0 !important;font-size:1.1rem;font-family:var(--body);font-weight:var(--fw-b);text-align:center}.item-info span{text-transform:uppercase;display:flex;align-items:center}.item-info .icon{margin-right:1em}.taxonomy-lists{margin:.5rem 0}.taxonomy-group{display:flex;flex-direction:column;align-items:flex-start;gap:.5rem;margin-bottom:.25rem}.taxonomy-group ul{list-style:none;margin:0;padding:0}.item-labels{margin-top:.5rem;display:flex;flex-wrap:wrap;gap:.5rem}.label{display:flex;align-items:center;gap:.25rem;font-size:.9rem}.label a{color:inherit;text-decoration:none}.label a:hover{color:rgb(var(--action-0))}button.favourite{position:absolute;top:.5rem;right:.5rem;z-index:10;background:rgba(var(--base), var(--op-4));border-radius:50%;box-shadow:var(--subtle);border:none;cursor:pointer;width:2rem;height:2rem;display:flex;justify-content:center;align-items:center;backdrop-filter:blur(5px);transition:all var(--trans-base)}button.favourite:hover{transform:scale(1.1);color:rgb(var(--action-0));background:rgb(var(--base));box-shadow:0 4px 8px rgba(0, 0, 0, 0.15)}button.favourite.favourited{animation:favourite-pop .4s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.feed-filters{margin:2rem auto;position:relative}.feed-filters .feed-controls{display:flex;justify-content:space-between;align-items:center;gap:2rem;width:100%}.feed-filters details summary{justify-content:flex-start;padding:2rem .5rem .5rem}.feed-filters details[open] summary{background-color:rgb(var(--base-50))}.feed-filters summary:after{position:absolute;right:.5rem;top:.5rem}.radio-group-label>label,.feed-filters .filter-toggle,.feed-filters .type-filter>label{display:flex;justify-content:center;align-items:center;padding:.35rem;white-space:nowrap;width:fit-content;height:fit-content;cursor:pointer;border:1px solid rgb(var(--base-200));border-radius:4px;font-size:.875rem;transition:border-color var(--trans-base);margin-bottom:.5rem}.filter-toggle .icon{margin-right:.5rem}.type-filter:hover{color:rgb(var(--action-0));border-color:rgb(var(--action-0));transition:var(--trans-color)}.feed-filters .type-filter>label{flex-direction:column}.type-filter.favourites-toggle{margin-left:auto}.type-filter.favourites-toggle label{position:relative}.type-filter.favourites-toggle label .label{top:100%;right:0}input[hidden]+label{display:none}.feed-filters svg{width:25px;height:25px}.order-options{position:relative;display:flex;justify-content:space-between}.order-options .order-by{display:flex}.order-options .order-direction,.order-options .order-by .radio-group-label{display:flex;padding-top:1.5rem;position:relative}.order-options .order-by>.label{margin-right:2rem}.radio-group-label{display:flex;gap:.5rem}.feed-filters .radio-group-label label .label{top:.5rem;right:.5rem}.feed-filters .order-options label svg{width:20px;height:20px}.radio-group-label input:checked+label,.feed-filters label:hover,.feed-filters input:checked+label{background-color:var(--light-0);border-color:var(--pink);color:var(--pink)}.feed-filters label .label{position:absolute;visibility:hidden;top:.5rem;right:4rem;opacity:0;transition:transform var(--trans-t) var(--trans-fn);transition-property:max-width,transform}.feed-filters input:checked+label .label{visibility:visible;opacity:1}.feed-filters .filters{padding:1rem;margin-top:1rem;background-color:transparent}.has-filters.filters{background-color:rgb(var(--base-50))}.filter-group{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:.25rem;position:relative}.feed-overlay{display:none;opacity:0;visibility:hidden}.loading .feed-overlay{position:fixed;top:0;left:0;right:0;bottom:0;margin:0 !important;max-width:none !important;width:100%;height:100%;background:rgba(var(--base), var(--op-4));backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);display:flex;justify-content:center;align-items:center;z-index:999999;opacity:1;visibility:visible;transition:opacity .3s ease,visibility .3s ease}.feed-overlay-content{background:rgb(var(--base));padding:2rem;border-radius:1rem;box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);text-align:center;width:min(400px,60vw)}.loading .loading-icon-container{position:relative;margin-bottom:1.5rem;animation:dance 1s ease-in-out infinite;transition:opacity .2s ease;will-change:transform,opacity}.loading .loading-message .icon{width:3em;height:3em}.loading .loading-message .icon{animation:dance 2s ease-in-out infinite;transition:color .3s ease}.loading .loading-message{will-change:opacity;font-size:1rem;color:#666;text-align:center;min-height:24px;transition:opacity .2s ease;margin-bottom:1rem}.loading .loading-dots{color:rgb(var(--action-0));width:4px;aspect-ratio:1;border-radius:50%;box-shadow:19px 0 0 7px,38px 0 0 3px,57px 0 0 0;transform:translateX(-38px) scale(0.666);animation:bubble .5s infinite alternate linear}.feed-empty-state{grid-column-start:1;grid-column-end:2;text-align:center;padding:2rem;background:rgb(var(--base));border-radius:1rem;margin:0 auto;max-width:600px}.feed-empty-state h3{text-align:center;font-family:var(--heading);font-size:clamp(1.5rem,3vw,2.5rem);margin:0 0 2rem 0;color:rgb(var(--action-0))}.feed-empty-state p{font-family:var(--body);margin:1rem 0;font-size:clamp(1rem,2vw,1.2rem);line-height:1.4}.feed-empty-state p:last-child{color:rgb(var(--action-0));margin-top:2rem}@keyframes highlight{0%,100%{box-shadow:none}50%{box-shadow:0 0 0 4px rgb(var(--action-0))}}@keyframes favourite-pop{0%{transform:scale(1)}50%{transform:scale(1.3)}75%{transform:scale(0.9)}100%{transform:scale(1)}}@keyframes bubble{50%{box-shadow:19px 0 0 3px,38px 0 0 7px,57px 0 0 3px}100%{box-shadow:19px 0 0 0,38px 0 0 3px,57px 0 0 7px}}@keyframes dance{0%,100%{transform:rotate(-5deg) scale(1)}50%{transform:rotate(5deg) scale(1.1)}}.artist-tattoos{display:grid;grid-template-columns:repeat(3, 1fr);gap:.25em}.artist-tattoos a:has(img){overflow:hidden;background-color:rgb(var(--base-100))}.artist-tattoos a:not(.feed-image) img{width:100%;height:100%;object-fit:cover}.artist-tattoos a::before,.artist-tattoos a::after{display:none}.artist-tattoos .feed-image{grid-row:span 2;grid-column:span 2}.feed-item summary .handle{position:absolute;bottom:0;left:0;right:0;background-color:rgba(var(--base), var(--op-3));backdrop-filter:blur(5px);border-radius:var(--radius);z-index:1;padding:.25rem .25rem .25rem 1.1rem}.feed-item:hover summary .handle,.feed-item[open] summary .handle{background-color:var(--overlay-action-medium);backdrop-filter:blur(5px)}.feed-item summary:after{z-index:11;position:absolute;bottom:.35rem;right:.7rem;width:1.5rem;height:1.5rem;cursor:pointer}.loading .feed-overlay h2{width:fit-content;margin:1rem auto !important;color:transparent;-webkit-text-stroke:1px rgb(var(--contrast));--g: conic-gradient(rgb(var(--action-0)) 0 0) no-repeat text;background:var(--g) 0,var(--g) 1ch,var(--g) 2ch,var(--g) 3ch,var(--g) 4ch,var(--g) 5ch,var(--g) 6ch;animation:l17-0 1s linear infinite alternate,l17-1 2s linear infinite}@keyframes l17-0{0%{background-size:1ch 0}100%{background-size:1ch 100%}}@keyframes l17-1{0%,50%{background-position-y:100%,0}50.01%,to{background-position-y:0,100%}}.loading .loading-message{display:flex;justify-content:center;align-items:center;overflow:hidden}.loading .dots-wrapper{display:flex;justify-content:center;align-items:center}.loading .loading-message p{opacity:1;transform:scaleY(1);transform-origin:bottom;transition:opacity var(--trans-base),transform var(--trans-base)}.loading .changing .loading-message p{opacity:0;transform:scaleY(0);transform-origin:top}.loading .feed-overlay::after{content:"";position:absolute;z-index:-1;inset:0;background:linear-gradient(90deg, var(--shimmer));animation:shimmer 3s ease-in-out infinite}@keyframes shimmer{0%{transform:translateX(-100%)}50%,100%{transform:translateX(100%)}}@media(max-width: 768px){.feed-filters .feed-controls{flex-direction:column;gap:1rem}.feed-empty-state{grid-column-end:none;padding:2rem 1rem;margin:1rem}.feed-filters details summary{gap:.5rem;justify-content:flex-start}}*[hidden],*[hidden]+label{display:none}.feed-loader{display:flex;flex-direction:column;align-items:center;gap:1rem;margin:2rem auto 0 !important}.load-more{opacity:1;display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem;background:rgb(var(--base-200));color:rgb(var(--contrast-200));border:none;border-radius:4px;font-size:var(--txt-medium);cursor:pointer;transition:all var(--trans-base)}.load-more[hidden]{opacity:0;transition:all var(--trans-base)}.load-more:hover{background:rgb(var(--action-0));transform:translateY(-2px)}.load-more:focus-visible{outline:2px solid rgb(var(--action-0));outline-offset:2px}.feed-filters:not(:has(details)){display:flex;flex-direction:column;position:relative}.feed-filters:not(:has(details)) .favourites-toggle{position:absolute;top:1.5rem;left:-3.5rem;z-index:10}@media(min-width: 768px){.feed-filters:not(:has(details)) .favourites-toggle{right:0;left:auto}}.icon.colour{background:rgb(183, 51, 46);background:linear-gradient(180deg, rgba(183, 51, 46, 1) 0%, rgba(250, 71, 101, 1) 14%, rgba(251, 121, 35, 1) 28%, rgba(176, 190, 19, 1) 42%, rgba(14, 204, 0, 1) 56%, rgba(14, 225, 166, 1) 70%, rgba(63, 152, 253, 1) 84%, rgba(166, 90, 196, 1) 100%);mask-image:var(--colour);-webkit-mask-image:var(--colour);-webkit-mask-repeat:no-repeat;-webkit-mask-size:contain;mask-repeat:no-repeat;mask-size:contain;width:1.25rem;height:1.25rem}.feed-item:focus,.feed-item:focus-visible,button:focus,button:focus-visible,[role=button]:focus,[role=button]:focus-visible,a:focus,a:focus-visible,input:focus,input:focus-visible,select:focus,select:focus-visible,textarea:focus,textarea:focus-visible{outline:2px solid #ff0080 !important;outline-offset:2px !important;box-shadow:0 0 0 4px rgba(183, 51, 46, 0.2) !important}:focus:not(:focus-visible){outline:none !important;box-shadow:none !important}.skip-to-content{background:#ff0080;color:white;height:auto;left:50%;padding:8px;position:absolute;transform:translateY(-100%) translateX(-50%);transition:transform .3s;width:auto;z-index:100}.skip-to-content:focus{transform:translateY(0%) translateX(-50%)}[aria-busy=true]{cursor:progress}[aria-disabled=true],[disabled]{cursor:not-allowed;opacity:.7}@media(forced-colors: active){.feed-item{border:1px solid CanvasText}button,[role=button]{border:1px solid ButtonText}button.favourite.favourited{background-color:Highlight;color:HighlightText}}@media(prefers-reduced-motion: reduce){*,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;scroll-behavior:auto !important}.feed-overlay-content,.loading-dots,.gallery-modal{animation:none !important;transition:none !important}.feed-item{transition:none !important}}.feed-item[tabindex="0"]{cursor:pointer;position:relative}.feed-item[tabindex="0"]::after{content:"";position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;border:2px solid transparent;transition:border-color .2s ease}.feed-item[tabindex="0"]:focus::after{border-color:#ff0080}.feed-item.highlighted{box-shadow:0 0 0 4px #ff0080,0 8px 16px rgba(0, 0, 0, 0.1);animation:highlight-pulse 2s ease-in-out}@keyframes highlight-pulse{0%,100%{box-shadow:0 0 0 4px #ff0080,0 8px 16px rgba(0, 0, 0, 0.1)}50%{box-shadow:0 0 0 8px #ff0080,0 12px 24px rgba(0, 0, 0, 0.15)}}.error-state{padding:2rem;border:1px solid #ff0080;border-radius:.5rem;margin:2rem 0;text-align:center}.error-state h3{color:#ff0080;margin-top:0}.error-state button{margin-top:1rem}.error-feedback-modal{padding:2rem;border:2px solid #ff0080;border-radius:.5rem;max-width:500px;width:100%}.error-feedback-modal h2{margin-top:0;color:#ff0080}.error-feedback-modal textarea{width:100%;min-height:100px;margin:1rem 0;padding:.5rem;border:1px solid #ccc;border-radius:.25rem}.error-feedback-modal .actions{display:flex;justify-content:flex-end;gap:1rem}.error-feedback-modal button{padding:.5rem 1rem;border:1px solid #ccc;border-radius:.25rem;background:#f5f5f5;cursor:pointer}.error-feedback-modal button.primary{background:#ff0080;color:white;border-color:#ff0080}dialog::backdrop{background-color:rgba(0, 0, 0, 0.5)}dialog.filter-dropdown{max-height:80vh;overflow:auto}dialog.filter-dropdown .close-modal{position:sticky;top:0;z-index:1}.term-divider{position:relative;text-align:center;margin:1rem 0;border-bottom:1px solid rgb(var(--base-200))}.term-divider span{background:rgb(var(--base));padding:0 1rem;color:rgb(var(--contrast));font-size:.9rem;position:relative;top:.5em}.common-term{background:rgb(var(--base-50));border-radius:var(--radius)}.loading-indicator{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:1rem;color:rgb(var(--contrast-100));font-size:.9rem}.loading-indicator .icon{animation:spin 1s linear infinite}.pagination-info{text-align:center;padding:.5rem;font-size:.9rem;color:rgb(var(--contrast-100));border-top:1px solid rgb(var(--base-100))}@keyframes spin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}.term-breadcrumb{margin-bottom:1rem;padding:.5rem;background:rgb(var(--base-50));border-radius:4px}.back-to-parent{display:flex;align-items:center;gap:.5rem;border:none;background:none;color:rgb(var(--contrast));cursor:pointer;padding:.5rem;border-radius:4px;font-size:var(--txt-small)}.back-to-parent:hover{background:rgb(var(--base-100))}.term-row{display:flex;align-items:center;gap:.5rem;width:100%;padding:.25rem 0}.toggle-children{border:none;background:none;padding:.25rem;cursor:pointer;color:rgb(var(--contrast));display:flex;align-items:center;justify-content:center;margin-left:auto;border-radius:4px}.toggle-children:hover{background:rgb(var(--base-50))}.loading-indicator{display:flex;align-items:center;justify-content:center;width:24px;height:24px}.loading-indicator .loading{width:16px;height:16px;border:2px solid rgb(var(--base-100));border-top-color:rgb(var(--contrast));border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.term-breadcrumb{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;padding:.5rem;background:rgb(var(--base-50));border-radius:4px}.term-breadcrumb .path{display:flex;align-items:center;gap:.25rem;flex-wrap:wrap}.term-breadcrumb button{border:none;background:none;padding:.25rem .5rem;border-radius:4px;cursor:pointer;color:rgb(var(--contrast));font-size:var(--txt-small)}.term-breadcrumb button:hover{background:rgb(var(--base-100))}.path-separator{color:rgb(var(--contrast-50))}.path-level{white-space:nowrap}.create-term-section{margin-top:2rem;padding-top:1rem;border-top:1px solid rgb(var(--base-100))}.suggestion-prompt{font-size:var(--txt-small);color:rgb(var(--contrast-50));margin-bottom:1rem}.create-term-form{display:flex;flex-direction:column;gap:.5rem}.form-row{display:flex;align-items:center;gap:.5rem}.name-row{position:relative}.name-row input{width:100%;padding:.5rem;border:2px solid rgb(var(--base-100));border-radius:4px;background:rgb(var(--base));color:rgb(var(--contrast))}.name-row input:focus{border-color:rgb(var(--action-0));outline:none}.parent-row{font-size:var(--txt-small)}.parent-row label{display:flex;align-items:center;gap:.5rem;cursor:pointer}dialog[open].gallery-modal{width:calc(100vw - var(--padding)*2);height:99vh;background:rgb(var(--base));display:flex;align-items:center;justify-content:center}.gallery-content{position:relative;max-width:100%;max-height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.gallery-favourite button.favourite{top:unset;bottom:1rem;right:1rem}.gallery-image{max-width:100%;max-height:calc(100vh - 4rem);object-fit:contain}.gallery-close{position:absolute;top:1rem;right:1rem;background:none;border:none;color:white;cursor:pointer;padding:.5rem;z-index:10;transition:color .3s ease}.gallery-close:hover{color:#ff0080}.gallery-nav{position:absolute;top:50%;height:50%;z-index:5;transform:translateY(-50%);border:none;color:rgb(var(--contrast));cursor:pointer;padding:1rem;transition:color .3s ease;display:flex;justify-content:center;align-items:center}.gallery-nav:hover{background-color:rgba(var(--base), var(--op-6))}.gallery-nav:hover{color:#ff0080}.gallery-prev{left:1rem}.gallery-next{right:1rem}.gallery-counter{position:absolute;top:1rem;left:1rem;color:white;font-size:.875rem}.gallery-content details{position:absolute;bottom:1rem;left:2rem;width:calc(100% - 4rem);background-color:rgba(var(--base), var(--op-3));padding:0}.gallery-content details:hover,.gallery-content details[open]{background-color:rgba(var(--base), var(--op-6));backdrop-filter:blur(5px)}/*# sourceMappingURL=feed.min.css.map */
assets/css/forms.css
File was deleted
assets/css/forms.min.css
@@ -1 +1 @@
.jvb-form-block{grid-column:wide}.jvb-form-block nav.tabs button{min-width:max-content}.field{width:100%;margin:.5em 0;padding:.5em 0}.field+.field{border-top:1px solid rgb(var(--base-200))}.field .wrapper{width:100%;position:relative}.field .validation{flex-shrink:0;max-width:0;transition:var(--trans-size)}.field.has-error .validation.error,.field.has-success .validation.success{max-width:var(--btn)}.field.has-error .error{color:rgb(var(--error))}.field.has-error input,.field.has-error select,.field.has-error textarea{border-color:rgb(var(--error));background-color:var(--errorBack)}.field.has-error input:focus,.field.has-error select:focus,.field.has-error textarea:focus{outline-color:rgb(var(--error));box-shadow:rgba(var(--error),.2) var(--shdw)}.field.has-success .success{color:var(--success)}.validation-message{color:var(--errorText);font-size:var(--txt-small);margin-top:.25rem;display:block}.field[data-field=post_status] .wrapper{--justify:flex-start}.field[data-field=post_status] .btn+label{width:var(--chipchip);min-height:var(--chipchip);padding:0}.field[data-field=post_status] .btn+label:hover,.field[data-field=post_status] .btn:focus+label{color:rgb(var(--action-contrast))}.date-wrapper{position:relative;display:inline-block}input[type=date]{padding:8px 36px 8px 8px;border-radius:4px}input[type=date]::-webkit-calendar-picker-indicator{opacity:0;width:100%;height:100%;position:absolute;top:0;left:0;cursor:pointer}input[type=date]+.icon{--w:20px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}input:is([type=time],[type=datetime-local],[type=date]){padding:.5rem;border:1px solid rgb(var(--contrast-200));border-radius:4px;font-size:14px;min-width:180px;background:rgb(var(--base));color:rgb(var(--contrast));cursor:pointer}.date-wrapper input[type=date]:focus,.datetime-wrapper input[type=datetime-local]:focus,.time-wrapper input[type=time]:focus,.wrapper input:is([type=time],[type=datetime-local],[type=date]):focus{border-color:rgb(var(--action-0));box-shadow:0 0 0 2px rgba(var(--action-0),.1)}.date-wrapper .icon,.datetime-wrapper .icon,.time-wrapper .icon,.wrapper .icon{width:18px;height:18px;background-color:rgb(var(--contrast));opacity:.7}.field.quantity.quantity{margin:0;padding:0;display:inline-flex;width:max-content;align-items:center;justify-content:center;border:1px solid transparent;border-radius:4px;position:relative;--gap:0!important}.quantity:focus-within{border-color:rgb(var(--action-0))}.field.quantity .wrapper .row{--gap:0!important}.field.quantity>label{margin:0;background-color:transparent;font-size:var(--txt-medium);white-space:nowrap;top:0;left:0}.quantity button{background:rgb(var(--base));padding:0;width:var(--chip_)!important;height:var(--chip_)!important;min-height:0;z-index:0;position:relative;border:1px solid rgb(var(--base-200));color:rgb(var(--contrast-200))}.quantity button:hover:not(:disabled){color:rgb(var(--action-0));border-color:rgb(var(--action-0));background-color:rgb(var(--base))}.quantity button:active:not(:disabled){background-color:rgb(var(--action-0));color:rgb(var(--light-0));transform:scale(.95)}.quantity button:disabled{opacity:.5;cursor:not-allowed}.quantity input[type=number]{z-index:1;border:1px solid rgb(var(--base-200));background:rgb(var(--base));text-align:center;font-size:1.1rem;width:60px;height:48px;margin:0;padding:0!important;appearance:textfield}.quantity input[type=number]::-webkit-inner-spin-button,.quantity input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.quantity input[type=number]:focus{background-color:rgb(var(--base-50))}.quantity button.increase{left:-2px;border-radius:0 4px 4px 0}.quantity button.decrease{right:-2px;border-radius:4px 0 0 4px}.quantity .wrapper{width:max-content}details.uploader .file-upload-container{margin:1rem 0;max-width:100%}.field.upload{position:relative}.field.upload .progress{display:none}.field.upload.uploading .progress{display:block}.field.upload .actions{position:absolute;top:0;right:0}.empty-group,.file-upload-wrapper,.preview-wrap .item-grid{border:2px dashed rgb(var(--action-0));border-radius:4px;padding:2rem;text-align:center;transition:all .3s ease;background:rgba(var(--action-0),var(--op-1));position:relative;cursor:pointer;user-select:none}.file-upload-wrapper{max-width:var(--content);margin:1rem auto}.file-upload-wrapper h2{margin:0;font-size:var(--txt-large)}.dragover,.empty-group:hover,.file-upload-wrapper:hover,.preview-wrap .item-grid:hover{background:rgba(var(--action-0),var(--op-2));border-color:rgb(var(--action-0))}.preview-wrap:has(.item-grid:empty) .selection-controls{display:none}.preview-wrap .item-grid{min-height:20vh}.preview-wrap .item-grid:empty::before{content:'Unsorted images become their own posts.';display:block}.file-upload-wrapper input[type=file]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer}.empty-group p,.file-upload-text{margin:0}.empty-group p strong,.file-upload-text strong{color:rgb(var(--action-0));text-decoration:underline}.item-grid.groups{grid-template-columns:repeat(1,1fr)}.item-grid.group{margin-bottom:0}.item-grid:is(.restore,.group,.preview) .item{display:block;--w:1.1em}.item-grid:is(.restore,.group,.preview) button{padding:.25rem .5rem}.item-grid:is(.restore,.group,.preview) .preview>input[type=checkbox]:not(.label-button)+label{padding-left:0;margin:0}.item-grid:is(.restore,.group,.preview) .item .item-actions{position:absolute;top:0;right:0;left:var(--chipchip)}.item-grid:is(.restore,.group,.preview) summary{padding:.5rem}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked){padding:.5rem;background-color:rgba(var(--action-0),var(--op-4));opacity:1}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) img{filter:none}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) .item img{filter:var(--filter)}.item-grid.preview summary span,.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) details{display:none}[type=radio].featured:checked+label .icon-star,[type=radio].featured:not(:checked)+label .icon-star-fi{display:none}[type=radio].featured:checked+label .icon-star-fi,[type=radio].featured:not(:checked)+label .icon-star{display:inline-block}.item:is(.restore,.upload){border-radius:var(--radius);aspect-ratio:unset;overflow:hidden;background:rgb(var(--base));border:1px solid rgb(var(--base-200))}.item:is(.restore,.upload) [for=select-item]{aspect-ratio:1}.item.upload:has(details[open]){grid-column:1/-1;padding:.5rem 10%;margin:1rem 0;background-color:transparent;border:2px dashed rgb(var(--action-200))}.item.upload:has(details[open]) details[open]{background-color:transparent}.item:is(.restore,.upload) img{transform:scale(1);transition:transform var(--trans-base)}.item:is(.upload,.restore):hover img{transform:scale(1.02)}.upload-group{padding:5px;border-radius:var(--radius);background-color:rgba(var(--action-0),var(--op-1))}.upload-group .selected .field{margin:0}.upload-group .selection-actions button{aspect-ratio:unset}.submit-uploads{position:fixed;bottom:0;left:var(--btn_);z-index:var(--z-6);height:var(--btn);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);border-radius:var(--radius);animation:pulse-color 5s infinite;animation-delay:1s;background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.submit-uploads:hover{background-color:rgb(var(--base-200));color:rgb(var(--contrast-200))}.empty-group{order:-1;grid-column:1/-1;padding:20px;border-radius:var(--radius);margin:10px 0;cursor:pointer;transition:all var(--trans-base);text-align:center;background-color:rgba(var(--action-0),var(--op-1))}.group-display:not([hidden])~.file-upload-container{display:none}.dragging,.upload.item.dragging{opacity:.7;transform:scale(.95) rotate(3deg);z-index:var(--z-7);box-shadow:0 8px 25px rgba(var(--contrast),var(--op-2))}.dragover{background:rgba(var(--action-0),var(--op-3))!important;border-color:rgb(var(--action-0))!important;transform:scale(1.05);animation:drop-pulse .8s infinite ease-in-out}.drag-preview{position:fixed;z-index:var(--z-9);width:fit-content;overflow:visible;pointer-events:none;opacity:.9;transform:scale(1.05);transition:transform .2s ease}.drag-preview .drag-items{width:max-content;height:max-content;position:relative}.drag-preview .drag-items .dragi-item{width:120px;height:120px;position:absolute;top:0;left:0;background:rgb(var(--base));border-radius:var(--radius-outer);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw)}.drag-preview .drag-items .drag-item:nth-child(1){transform:rotate(-3deg);z-index:3}.drag-preview .drag-items .drag-item:nth-child(2){left:8px;top:-4px;transform:rotate(4deg);z-index:2;transition-delay:30ms}.drag-preview .drag-items .drag-item:nth-child(3){left:-6px;top:-8px;transform:rotate(-5deg);z-index:1;transition-delay:60ms}.drag-preview .drag-items .drag-item:nth-child(4){left:12px;top:-12px;transform:rotate(3deg);z-index:0;transition-delay:90ms}.drag-preview .drag-items .drag-item:nth-child(n+5){left:-10px;top:-16px;transform:rotate(-4deg);z-index:0;opacity:.8}.drag-preview .drag-items img,.drag-preview .drag-items video{width:100%;height:100%;object-fit:cover;display:block}.drag-preview .drag-count{position:absolute;top:-8px;right:-8px;background:rgb(var(--base-200));color:rgb(var(--contrast));border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);z-index:var(--z-3)}.item.dragging{opacity:.5;transform:scale(.95);filter:grayscale(50%);transition:opacity .2s ease,transform .2s ease,filter .2s ease}@keyframes drop-pulse{0%,100%{background-color:rgba(var(--action-0),var(--op-3));transform:scale(1.02)}50%{background-color:var(rgba(var(--action-0),var(--op-4)));transform:scale(1.04)}}.selection-actions{display:flex;gap:.25rem}@media (max-width:767px){body:not(.uploading):has(.group-display:not([hidden])){overflow:hidden}body:not(.uploading):has(.group-display:not([hidden])) .qtoggle{z-index:var(--z-1)}.group-display.group-display{position:fixed;top:var(--btn);bottom:var(--btn);left:0;right:0;max-height:var(--maxHeight);overflow:hidden;z-index:var(--z-6);width:calc(100% - 1rem);height:calc(100% - 1rem);padding:0 0 3rem;--justify:flex-start;--align:flex-start;--gap:0}.group-display::before{content:'';display:block;z-index:-1;top:-.5rem;bottom:-.5rem;left:-.5rem;right:-.5rem;position:absolute;background-color:rgba(var(--base),var(--op-6));filter:blur(5px)}.group-display .preview-wrap,.group-display .sidebar{--wrap:nowrap;height:50%;overflow:hidden auto;position:relative;padding:.5rem}.group-display .preview-wrap{top:0}.group-display .preview-wrap .selected{display:flex;justify-content:space-between;align-items:center}.group-display .sidebar{bottom:0;flex-wrap:nowrap;overflow:hidden auto;background-color:rgb(var(--contrast-200));color:rgb(var(--base))}.group-display .sidebar>.hint{color:rgb(var(--contrast))}.group-display .sidebar .header{display:none}.group-display .preview-actions{top:0;flex-shrink:0}.group-display .preview-wrap>.hint,.group-display .sidebar>.hint{bottom:0;margin:0;text-align:center}.group-display .preview-actions,.group-display .preview-wrap>.hint,.group-display .sidebar>.hint{position:absolute;left:0;right:0;background-color:rgba(var(--base),var(--op-6));z-index:var(--z-3);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw)}.group-display .item-grid{height:100%;overflow:hidden auto;grid-template-columns:repeat(3,1fr);padding:2rem 0}.group-display .sidebar>.item-grid{grid-template-columns:repeat(1,1fr);gap:1rem;padding:0}.group-display .sidebar .empty-group{order:0;position:sticky;height:fit-content;top:0;z-index:var(--z-3);background-color:rgba(var(--action-0),var(--op-6))}.group-display .sidebar .upload-group{order:1}.group-display .sidebar .empty-group p{margin:0}.group-display .field,.group-display .field label{margin:0;padding:0}.group-display .sidebar h4{margin:.25rem}.group-display .item{width:100%;height:max-content}.submit-uploads{bottom:var(--btn);left:0;right:0;width:100%;height:3rem}body.uploading .group-display.group-display{position:relative;top:unset;bottom:unset;right:unset;left:unset}}@media (min-width:768px){.group-display.group-display{--wrap:nowrap;--dir:row;--gap:1rem;--align:flex-start}.group-display .preview-wrap,.group-display .sidebar{--justify:flex-start;--wrap:nowrap;max-height:calc(100vh - var(--btnbtn));overflow:hidden auto}.group-display .preview-wrap,.group-display .sidebar{width:50%}.preview-actions,.preview-wrap .hint{position:sticky;z-index:var(--z-3);box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);background-color:rgb(var(--base));width:100%}.preview-actions{top:0;left:0;right:0}.preview-actions .field{margin:0}.preview-wrap .hint,.sidebar>.hint{bottom:-1rem;padding-bottom:1rem;margin:0;left:0;right:0;text-align:center}}.item-grid.restore{grid-template-columns:repeat(1,1fr)}.editor-container .ql-toolbar{display:flex;background-color:rgb(var(--base-50));justify-content:flex-start;flex-wrap:wrap;padding:.25rem;gap:.5rem 1rem;border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);border-bottom:4px solid rgb(var(--base-50))}.ql-toolbar button{min-height:0;padding:.5rem}.ql-toolbar .ql-formats{display:flex;gap:.25rem}.editor-container .ql-container{--padding:1rem;background-color:rgb(var(--base));border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);height:fit-content;padding:2px;border:1px solid rgb(var(--base-200))}.editor-container .ql-container .ql-editor{padding:var(--padding);width:100%;height:100%;max-width:90vw}.ql-editor img{max-width:50%;height:auto}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-hidden{display:none}.ql-tooltip{position:absolute;transform:translateY(10px);background-color:rgb(var(--base-100));border:1px solid rgb(var(--base));box-shadow:0 0 5px rgba(var(--base),var(--op-6));color:rgb(var(--contrast));padding:5px 12px;white-space:nowrap}[data-type=single] .item-grid{display:flex}.repeater-row{--gap:0!important;--align:flex-start!important}.repeater-row details{width:100%}.repeater-row .drag-handle,.repeater-row button{width:var(--chipchip);height:var(--chipchip)}.drag-handle{cursor:grab;background-color:rgb(var(--base-100));user-select:none}.repeater-row details summary::after{margin-left:0}.repeater-row details summary button{margin-left:auto}.repeater .field-input-wrapper{flex-direction:column}.repeater .repeater-items{width:100%}.add-repeater-row,.remove-row{margin-left:auto;min-height:0;height:var(--chipchip);background-color:rgb(var(--action-0))}.repeater-row-ghost{opacity:.3;background:var(--gap-bg,#f0f0f0);border:2px dashed var(--gap-border,#ccc)}.repeater-row-chosen{opacity:.6}.field.tag-list .row{margin-bottom:1rem}.field.tag-list .row .field{flex:1;min-width:150px;margin:0}.field.tag-list .tag .add-tag-item{flex-shrink:0;white-space:nowrap;margin-top:calc(var(--txt-medium) + 1rem)}.field.tag-list .tag-items{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;min-height:2rem}.field.tag-list .tag-item{background:rgb(var(--base-200));padding:.4rem .75rem;border-radius:4px;display:inline-flex;align-items:center;gap:.5rem;font-size:.9rem;line-height:1.2}.field.tag-list .tag-item:hover{background:rgb(var(--base-100))}.field.tag-list .tag-label{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field.tag-list .remove-tag{min-height:0;padding:.25rem;color:rgb(var(--contrast));transition:transform .2s;box-shadow:none}.field.tag-list .remove-tag:hover{transform:scale(1.2)}@media (max-width:768px){.field.tag-list .tag{flex-direction:column;align-items:stretch}.field.tag-list .tag .field{min-width:100%}}.form-progress{padding:0 1rem}.form-progress .progress{background:rgb(var(--base-100));border-radius:var(--radius);padding:1rem}.form-progress .bar{height:6px;background:rgb(var(--base-200));border-radius:3px;overflow:hidden;margin-bottom:.5rem}.form-progress .fill{height:100%;background:linear-gradient(90deg,rgb(var(--action-0)),rgb(var(--action-200)));width:0%;transition:width .4s ease;border-radius:3px}.form-progress .step-text{font-size:var(--txt-small);font-weight:600;color:rgb(var(--contrast-200))}form nav.tabs{position:relative;top:0;left:0;right:0;padding:1rem 0;gap:0;z-index:0}form nav.tabs button{position:relative;background:0 0;border:none;padding:.5rem 1rem .5rem 3rem;z-index:1}form nav.tabs .step-number{width:2.5rem;height:100%;position:absolute;left:0;top:0;background:rgb(var(--base-200));color:rgb(var(--contrast-50));display:flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--txt-small)}form nav.tabs button.pending .step-number{background:rgb(var(--base-100));color:rgb(var(--contrast-200))}form nav.tabs button.active .step-number,form nav.tabs button.current .step-number{background:rgb(var(--action-200));color:rgb(var(--action-contrast))}form nav.tabs button.completed .step-number{background:var(--successBack);color:var(--successBack);border-color:var(--successText)}form nav.tabs button.completed .step-number::before{content:'✓';font-size:1.2rem;color:var(--successText);position:absolute}form nav.tabs button.completed h2{color:rgb(var(--contrast-200))}.step-navigation{margin-top:2rem;padding-top:2rem;border-top:1px solid rgb(var(--base-200));gap:1rem}.step-navigation .prev-step{background:rgb(var(--base-100))}.step-navigation .next-step,.step-navigation button[type=submit]{margin-left:auto}@media (max-width:768px){form nav.tabs button{min-width:80px;font-size:var(--txt-small)}form nav.tabs button h2{font-size:var(--txt-small)}form{--step-size:2rem}}.field input.error,.field select.error,.field textarea.error{border-color:var(--errorBack)}.error-message{color:var(--errorText);font-size:var(--txt-small);margin-top:.25rem;display:block}.form-summary{padding:2rem;border-radius:8px;margin-top:2rem;border:2px dashed rgb(var(--contrast-200))}.form-summary .message{margin-bottom:2rem}.form-summary .result+.result{position:relative;margin-top:1.5rem;padding-top:1.5rem}.form-summary .result+.result::before{position:absolute;top:0;left:16.5%;content:'';width:67%;height:1px;border-bottom:1px solid rgb(var(--base-200))}.form-summary h2{margin:1rem 0}.form-summary h4{background-color:rgb(var(--base-100));padding:.5rem 2rem;position:relative;left:-2rem;color:rgb(var(--contrast-200));font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.75rem}.form-summary p{color:var(--text);margin:0}.group-summary,.repeater-summary{background:rgb(var(--base-100));padding:1rem;border-radius:4px;margin-top:.5rem}.repeater-row{margin-bottom:1rem}.repeater-row:last-child{margin-bottom:0}.selected-item{border:1px solid rgb(var(--base-200));border-radius:var(--radius);font-size:var(--txt-x-small);background-color:rgb(var(--base));padding:.25rem .5rem}.selected-item button{--w:.5em;min-height:1em;width:1em;padding:0}.selector .auto-wrapper,.selector .selected-items{flex:1;width:100%}.fstatus{z-index:var(--z-5);background-color:rgba(var(--base),var(--op-6));border-radius:var(--radius);padding:0 .5rem;position:fixed;right:.5rem;bottom:0;--w:1em;box-shadow:rgba(var(--base),var(--op-6)) var(--shdw);--wrap:nowrap;--gap:1rem}body:has(nav.fixed.bottom) .fstatus{bottom:var(--btn);z-index:var(--z-8)}.fstatus .spinner{display:none}.fstatus.loading .spinner{display:inline-block}.fstatus p{margin:0;padding:.25rem}.restore-uploads .item-grid.group .field.group,.restore-uploads .upload-group .selection-actions{display:none}.upload-group .item-grid.group{grid-template-columns:repeat(2,1fr)}.restore-uploads .item-grid.group{grid-template-columns:repeat(3,1fr)}fieldset{width:100%;border-color:rgb(var(--base-200))}.restore-form.restore-form[hidden]{display:block!important;position:fixed;bottom:var(--offScreen);right:var(--btnbtn);transition:bottom var(--trans-base);transition-duration:2s}.restore-form.restore-form:not([hidden]){width:min(500px,90vw);padding:1rem;z-index:var(--z-7);background-color:rgba(var(--base),var(--op-6));border-radius:var(--radius);box-shadow:rgba(var(--action-0),var(--op-6)) var(--shdw);position:fixed;left:0;bottom:0;transition:bottom var(--trans-base)}.restore-form h3{font-size:var(--txt-medium)}body:has(nav.fixed.bottom) .restore-form.restore-form:not([hidden]){bottom:var(--btn)}.restore-form .actions{display:flex;width:100%}.restore-form .actions button{min-height:var(--chip);font-size:var(--txt-x-small);width:100%}[data-field=openingHours] fieldset fieldset{display:flex;align-items:flex-end}[data-field=openingHours] .field+.field{border:none}[data-field=openingHours] .true-false{width:max-content}[data-field=openingHours] label.switch{width:max-content;padding:0 1rem 0 0}[data-field=openingHours] fieldset>.group>.row{max-width:calc(100% - var(--btn_))}[data-field=openingHours] fieldset .field{padding:0;margin:0}[data-field=openingHours] fieldset .group{display:flex}.feedback{position:fixed;top:2rem;right:2rem;background-color:var(--action-50);color:var(--action-contrast);padding:1rem 1.5rem;border-radius:var(--innerRadius);box-shadow:var(--shadow);z-index:10000;opacity:0;transform:translateX(100px);transition:all var(--transition-base);display:flex;align-items:center;gap:.5rem;--w:1.25rem}.feedback.show{opacity:1;transform:translateX(0)}
.jvb-form-block{grid-column:wide}.jvb-form-block nav.tabs button{min-width:max-content}.field{width:100%;margin:.5em 0;padding:.5em 0}.field+.field{border-top:1px solid rgb(var(--base-200))}.field .wrapper{width:100%;position:relative}.field .validation{flex-shrink:0;max-width:0;transition:var(--trans-size)}.field.has-error .validation.error,.field.has-success .validation.success{max-width:var(--btn)}.field.has-error .error{color:rgb(var(--error))}.field.has-error input,.field.has-error textarea,.field.has-error select{border-color:rgb(var(--error));background-color:var(--errorBack)}.field.has-error input:focus,.field.has-error textarea:focus,.field.has-error select:focus{outline-color:rgb(var(--error));box-shadow:rgba(var(--error), 0.2) var(--shdw)}.field.has-success .success{color:var(--success)}.validation-message{color:var(--errorText);font-size:var(--txt-small);margin-top:.25rem;display:block}.field[data-field=post_status] .wrapper{--justify: flex-start}.field[data-field=post_status] .btn+label{width:var(--chipchip);min-height:var(--chipchip);padding:0}.field[data-field=post_status] .btn:focus+label,.field[data-field=post_status] .btn+label:hover{color:rgb(var(--action-contrast))}.date-wrapper{position:relative;display:inline-block}input[type=date]{padding:8px 36px 8px 8px;border-radius:4px}input[type=date]::-webkit-calendar-picker-indicator{opacity:0;width:100%;height:100%;position:absolute;top:0;left:0;cursor:pointer}input[type=date]+.icon{--w: 20px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}input:is([type=time],[type=datetime-local],[type=date]){padding:.5rem;border:1px solid rgb(var(--contrast-200));border-radius:4px;font-size:14px;min-width:180px;background:rgb(var(--base));color:rgb(var(--contrast));cursor:pointer}.wrapper input:is([type=time],[type=datetime-local],[type=date]):focus,.time-wrapper input[type=time]:focus,.datetime-wrapper input[type=datetime-local]:focus,.date-wrapper input[type=date]:focus{border-color:rgb(var(--action-0));box-shadow:0 0 0 2px rgba(var(--action-0), 0.1)}.wrapper .icon,.time-wrapper .icon,.datetime-wrapper .icon,.date-wrapper .icon{width:18px;height:18px;background-color:rgb(var(--contrast));opacity:.7}.field.quantity.quantity{margin:0;padding:0;display:inline-flex;width:max-content;align-items:center;justify-content:center;border:1px solid transparent;border-radius:4px;position:relative;--gap: 0!important}.quantity:focus-within{border-color:rgb(var(--action-0))}.field.quantity .wrapper .row{--gap: 0!important}.field.quantity>label{margin:0;background-color:transparent;font-size:var(--txt-medium);white-space:nowrap;top:0;left:0}.quantity button{background:rgb(var(--base));padding:0;width:var(--chip_) !important;height:var(--chip_) !important;min-height:0;z-index:0;position:relative;border:1px solid rgb(var(--base-200));color:rgb(var(--contrast-200))}.quantity button:hover:not(:disabled){color:rgb(var(--action-0));border-color:rgb(var(--action-0));background-color:rgb(var(--base))}.quantity button:active:not(:disabled){background-color:rgb(var(--action-0));color:rgb(var(--light-0));transform:scale(0.95)}.quantity button:disabled{opacity:.5;cursor:not-allowed}.quantity input[type=number]{z-index:1;border:1px solid rgb(var(--base-200));background:rgb(var(--base));text-align:center;font-size:1.1rem;width:60px;height:48px;margin:0;padding:0 !important;appearance:textfield}.quantity input[type=number]::-webkit-outer-spin-button,.quantity input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.quantity input[type=number]:focus{background-color:rgb(var(--base-50))}.quantity button.increase{left:-2px;border-radius:0 4px 4px 0}.quantity button.decrease{right:-2px;border-radius:4px 0 0 4px}.quantity .wrapper{width:max-content}details.uploader .file-upload-container{margin:1rem 0;max-width:100%}.field.upload{position:relative}.field.upload .progress{display:none}.field.upload.uploading .progress{display:block}.field.upload .actions{position:absolute;top:0;right:0}.preview-wrap .item-grid,.empty-group,.file-upload-wrapper{border:2px dashed rgb(var(--action-0));border-radius:4px;padding:2rem;text-align:center;transition:all .3s ease;background:rgba(var(--action-0), var(--op-1));position:relative;cursor:pointer;user-select:none}.file-upload-wrapper{max-width:var(--content);margin:1rem auto}.file-upload-wrapper h2{margin:0;font-size:var(--txt-large)}.preview-wrap .item-grid:hover,.empty-group:hover,.file-upload-wrapper:hover,.dragover{background:rgba(var(--action-0), var(--op-2));border-color:rgb(var(--action-0))}.preview-wrap:has(.item-grid:empty) .selection-controls{display:none}.preview-wrap .item-grid{min-height:20vh}.preview-wrap .item-grid:empty::before{content:"Unsorted images become their own posts.";display:block}.file-upload-wrapper input[type=file]{position:absolute;top:0;left:0;width:100%;height:100%;opacity:0;cursor:pointer}.empty-group p,.file-upload-text{margin:0}.empty-group p strong,.file-upload-text strong{color:rgb(var(--action-0));text-decoration:underline}.item-grid.groups{grid-template-columns:repeat(1, 1fr)}.item-grid.group{margin-bottom:0}.item-grid:is(.restore,.group,.preview) .item{display:block;--w: 1.1em}.item-grid:is(.restore,.group,.preview) button{padding:.25rem .5rem}.item-grid:is(.restore,.group,.preview) .preview>input[type=checkbox]:not(.label-button)+label{padding-left:0;margin:0}.item-grid:is(.restore,.group,.preview) .item .item-actions{position:absolute;top:0;right:0;left:var(--chipchip)}.item-grid:is(.restore,.group,.preview) summary{padding:.5rem}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked){padding:.5rem;background-color:rgba(var(--action-0), var(--op-4));opacity:1}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) img{filter:none}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) .item img{filter:var(--filter)}.item-grid:is(.restore,.group,.preview):has([type=checkbox]:checked) details,.item-grid.preview summary span{display:none}[type=radio].featured:checked+label .icon-star,[type=radio].featured:not(:checked)+label .icon-star-fi{display:none}[type=radio].featured:not(:checked)+label .icon-star,[type=radio].featured:checked+label .icon-star-fi{display:inline-block}.item:is(.restore,.upload){border-radius:var(--radius);aspect-ratio:unset;overflow:hidden;background:rgb(var(--base));border:1px solid rgb(var(--base-200))}.item:is(.restore,.upload) [for=select-item]{aspect-ratio:1}.item.upload:has(details[open]){grid-column:1/-1;padding:.5rem 10%;margin:1rem 0;background-color:transparent;border:2px dashed rgb(var(--action-200))}.item.upload:has(details[open]) details[open]{background-color:transparent}.item:is(.restore,.upload) img{transform:scale(1);transition:transform var(--trans-base)}.item:is(.upload,.restore):hover img{transform:scale(1.02)}.upload-group{padding:5px;border-radius:var(--radius);background-color:rgba(var(--action-0), var(--op-1))}.upload-group .selected .field{margin:0}.upload-group .selection-actions button{aspect-ratio:unset}.submit-uploads{position:fixed;bottom:0;left:var(--btn_);z-index:var(--z-6);height:var(--btn);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);border-radius:var(--radius);animation:pulse-color 5s infinite;animation-delay:1s;background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.submit-uploads:hover{background-color:rgb(var(--base-200));color:rgb(var(--contrast-200))}.empty-group{order:-1;grid-column:1/-1;padding:20px;border-radius:var(--radius);margin:10px 0;cursor:pointer;transition:all var(--trans-base);text-align:center;background-color:rgba(var(--action-0), var(--op-1))}.group-display:not([hidden])~.file-upload-container{display:none}.upload.item.dragging,.dragging{opacity:.7;transform:scale(0.95) rotate(3deg);z-index:var(--z-7);box-shadow:0 8px 25px rgba(var(--contrast), var(--op-2))}.dragover{background:rgba(var(--action-0), var(--op-3)) !important;border-color:rgb(var(--action-0)) !important;transform:scale(1.05);animation:drop-pulse .8s infinite ease-in-out}.drag-preview{position:fixed;z-index:var(--z-9);width:fit-content;overflow:visible;pointer-events:none;opacity:.9;transform:scale(1.05);transition:transform .2s ease}.drag-preview .drag-items{width:max-content;height:max-content;position:relative}.drag-preview .drag-items .dragi-item{width:120px;height:120px;position:absolute;top:0;left:0;background:rgb(var(--base));border-radius:var(--radius-outer);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw)}.drag-preview .drag-items .drag-item:nth-child(1){transform:rotate(-3deg);z-index:3}.drag-preview .drag-items .drag-item:nth-child(2){left:8px;top:-4px;transform:rotate(4deg);z-index:2;transition-delay:.03s}.drag-preview .drag-items .drag-item:nth-child(3){left:-6px;top:-8px;transform:rotate(-5deg);z-index:1;transition-delay:.06s}.drag-preview .drag-items .drag-item:nth-child(4){left:12px;top:-12px;transform:rotate(3deg);z-index:0;transition-delay:.09s}.drag-preview .drag-items .drag-item:nth-child(n+5){left:-10px;top:-16px;transform:rotate(-4deg);z-index:0;opacity:.8}.drag-preview .drag-items img,.drag-preview .drag-items video{width:100%;height:100%;object-fit:cover;display:block}.drag-preview .drag-count{position:absolute;top:-8px;right:-8px;background:rgb(var(--base-200));color:rgb(var(--contrast));border-radius:50%;width:24px;height:24px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:bold;box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);z-index:var(--z-3)}.item.dragging{opacity:.5;transform:scale(0.95);filter:grayscale(50%);transition:opacity .2s ease,transform .2s ease,filter .2s ease}@keyframes drop-pulse{0%,100%{background-color:rgba(var(--action-0), var(--op-3));transform:scale(1.02)}50%{background-color:var(rgba(var(--action-0), var(--op-4)));transform:scale(1.04)}}.selection-actions{display:flex;gap:.25rem}@media(max-width: 767px){body:not(.uploading):has(.group-display:not([hidden])){overflow:hidden}body:not(.uploading):has(.group-display:not([hidden])) .qtoggle{z-index:var(--z-1)}.group-display.group-display{position:fixed;top:var(--btn);bottom:var(--btn);left:0;right:0;max-height:var(--maxHeight);overflow:hidden;z-index:var(--z-6);width:calc(100% - 1rem);height:calc(100% - 1rem);padding:0 0 3rem;--justify: flex-start;--align: flex-start;--gap: 0}.group-display::before{content:"";display:block;z-index:-1;top:-0.5rem;bottom:-0.5rem;left:-0.5rem;right:-0.5rem;position:absolute;background-color:rgba(var(--base), var(--op-6));filter:blur(5px)}.group-display .preview-wrap,.group-display .sidebar{--wrap: nowrap;height:50%;overflow:hidden auto;position:relative;padding:.5rem}.group-display .preview-wrap{top:0}.group-display .preview-wrap .selected{display:flex;justify-content:space-between;align-items:center}.group-display .sidebar{bottom:0;flex-wrap:nowrap;overflow:hidden auto;background-color:rgb(var(--contrast-200));color:rgb(var(--base))}.group-display .sidebar>.hint{color:rgb(var(--contrast))}.group-display .sidebar .header{display:none}.group-display .preview-actions{top:0;flex-shrink:0}.group-display .preview-wrap>.hint,.group-display .sidebar>.hint{bottom:0;margin:0;text-align:center}.group-display .preview-wrap>.hint,.group-display .sidebar>.hint,.group-display .preview-actions{position:absolute;left:0;right:0;background-color:rgba(var(--base), var(--op-6));z-index:var(--z-3);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw)}.group-display .item-grid{height:100%;overflow:hidden auto;grid-template-columns:repeat(3, 1fr);padding:2rem 0}.group-display .sidebar>.item-grid{grid-template-columns:repeat(1, 1fr);gap:1rem;padding:0}.group-display .sidebar .empty-group{order:0;position:sticky;height:fit-content;top:0;z-index:var(--z-3);background-color:rgba(var(--action-0), var(--op-6))}.group-display .sidebar .upload-group{order:1}.group-display .sidebar .empty-group p{margin:0}.group-display .field label,.group-display .field{margin:0;padding:0}.group-display .sidebar h4{margin:.25rem}.group-display .item{width:100%;height:max-content}.submit-uploads{bottom:var(--btn);left:0;right:0;width:100%;height:3rem}body.uploading .group-display.group-display{position:relative;top:unset;bottom:unset;right:unset;left:unset}}@media(min-width: 768px){.group-display.group-display{--wrap: nowrap;--dir: row;--gap: 1rem;--align: flex-start}.group-display .preview-wrap,.group-display .sidebar{--justify: flex-start;--wrap: nowrap;max-height:calc(100vh - var(--btnbtn));overflow:hidden auto}.group-display .preview-wrap,.group-display .sidebar{width:50%}.preview-actions,.preview-wrap .hint{position:sticky;z-index:var(--z-3);box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);background-color:rgb(var(--base));width:100%}.preview-actions{top:0;left:0;right:0}.preview-actions .field{margin:0}.sidebar>.hint,.preview-wrap .hint{bottom:-1rem;padding-bottom:1rem;margin:0;left:0;right:0;text-align:center}}.item-grid.restore{grid-template-columns:repeat(1, 1fr)}.editor-container .ql-toolbar{display:flex;background-color:rgb(var(--base-50));justify-content:flex-start;flex-wrap:wrap;padding:.25rem;gap:.5rem 1rem;border-top-left-radius:var(--radius);border-top-right-radius:var(--radius);border-bottom:4px solid rgb(var(--base-50))}.ql-toolbar button{min-height:0;padding:.5rem}.ql-toolbar .ql-formats{display:flex;gap:.25rem}.editor-container .ql-container{--padding: 1rem;background-color:rgb(var(--base));border-bottom-left-radius:var(--radius);border-bottom-right-radius:var(--radius);height:fit-content;padding:2px;border:1px solid rgb(var(--base-200))}.editor-container .ql-container .ql-editor{padding:var(--padding);width:100%;height:100%;max-width:90vw}.ql-editor img{max-width:50%;height:auto}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-hidden{display:none}.ql-tooltip{position:absolute;transform:translateY(10px);background-color:rgb(var(--base-100));border:1px solid rgb(var(--base));box-shadow:0px 0px 5px rgba(var(--base), var(--op-6));color:rgb(var(--contrast));padding:5px 12px;white-space:nowrap}[data-type=single] .item-grid{display:flex}.repeater-row{--gap: 0!important;--align: flex-start!important}.repeater-row details{width:100%}.repeater-row .drag-handle,.repeater-row button{width:var(--chipchip);height:var(--chipchip)}.drag-handle{cursor:grab;background-color:rgb(var(--base-100));user-select:none}.repeater-row details summary::after{margin-left:0}.repeater-row details summary button{margin-left:auto}.repeater .field-input-wrapper{flex-direction:column}.repeater .repeater-items{width:100%}.remove-row,.add-repeater-row{margin-left:auto;min-height:0;height:var(--chipchip);background-color:rgb(var(--action-0))}.repeater-row-ghost{opacity:.3;background:var(--gap-bg, #f0f0f0);border:2px dashed var(--gap-border, #ccc)}.repeater-row-chosen{opacity:.6}.field.tag-list .row{margin-bottom:1rem}.field.tag-list .row .field{flex:1;min-width:150px;margin:0}.field.tag-list .tag .add-tag-item{flex-shrink:0;white-space:nowrap;margin-top:calc(var(--txt-medium) + 1rem)}.field.tag-list .tag-items{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;min-height:2rem}.field.tag-list .tag-item{background:rgb(var(--base-200));padding:.4rem .75rem;border-radius:4px;display:inline-flex;align-items:center;gap:.5rem;font-size:.9rem;line-height:1.2}.field.tag-list .tag-item:hover{background:rgb(var(--base-100))}.field.tag-list .tag-label{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field.tag-list .remove-tag{min-height:0;padding:.25rem;color:rgb(var(--contrast));transition:transform .2s;box-shadow:none}.field.tag-list .remove-tag:hover{transform:scale(1.2)}@media(max-width: 768px){.field.tag-list .tag{flex-direction:column;align-items:stretch}.field.tag-list .tag .field{min-width:100%}}.form-progress{padding:0 1rem}.form-progress .progress{background:rgb(var(--base-100));border-radius:var(--radius);padding:1rem}.form-progress .bar{height:6px;background:rgb(var(--base-200));border-radius:3px;overflow:hidden;margin-bottom:.5rem}.form-progress .fill{height:100%;background:linear-gradient(90deg, rgb(var(--action-0)), rgb(var(--action-200)));width:0%;transition:width .4s ease;border-radius:3px}.form-progress .step-text{font-size:var(--txt-small);font-weight:600;color:rgb(var(--contrast-200))}form nav.tabs{position:relative;top:0;left:0;right:0;padding:1rem 0;gap:0;z-index:0}form nav.tabs button{position:relative;background:transparent;border:none;padding:.5rem 1rem .5rem 3rem;z-index:1}form nav.tabs .step-number{width:2.5rem;height:100%;position:absolute;left:0;top:0;background:rgb(var(--base-200));color:rgb(var(--contrast-50));display:flex;align-items:center;justify-content:center;font-weight:700;font-size:var(--txt-small)}form nav.tabs button.pending .step-number{background:rgb(var(--base-100));color:rgb(var(--contrast-200))}form nav.tabs button.current .step-number,form nav.tabs button.active .step-number{background:rgb(var(--action-200));color:rgb(var(--action-contrast))}form nav.tabs button.completed .step-number{background:var(--successBack);color:var(--successBack);border-color:var(--successText)}form nav.tabs button.completed .step-number::before{content:"✓";font-size:1.2rem;color:var(--successText);position:absolute}form nav.tabs button.completed h2{color:rgb(var(--contrast-200))}.step-navigation{margin-top:2rem;padding-top:2rem;border-top:1px solid rgb(var(--base-200));gap:1rem}.step-navigation .prev-step{background:rgb(var(--base-100))}.step-navigation .next-step,.step-navigation button[type=submit]{margin-left:auto}@media(max-width: 768px){form nav.tabs button{min-width:80px;font-size:var(--txt-small)}form nav.tabs button h2{font-size:var(--txt-small)}form{--step-size: 2rem}}.field input.error,.field textarea.error,.field select.error{border-color:var(--errorBack)}.error-message{color:var(--errorText);font-size:var(--txt-small);margin-top:.25rem;display:block}.form-summary{padding:2rem;border-radius:8px;margin-top:2rem;border:2px dashed rgb(var(--contrast-200))}.form-summary .message{margin-bottom:2rem}.form-summary .result+.result{position:relative;margin-top:1.5rem;padding-top:1.5rem}.form-summary .result+.result::before{position:absolute;top:0;left:16.5%;content:"";width:67%;height:1px;border-bottom:1px solid rgb(var(--base-200))}.form-summary h2{margin:1rem 0}.form-summary h4{background-color:rgb(var(--base-100));padding:.5rem 2rem;position:relative;left:-2rem;color:rgb(var(--contrast-200));font-size:.875rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.75rem}.form-summary p{color:var(--text);margin:0}.repeater-summary,.group-summary{background:rgb(var(--base-100));padding:1rem;border-radius:4px;margin-top:.5rem}.repeater-row{margin-bottom:1rem}.repeater-row:last-child{margin-bottom:0}.selected-item{border:1px solid rgb(var(--base-200));border-radius:var(--radius);font-size:var(--txt-x-small);background-color:rgb(var(--base));padding:.25rem .5rem}.selected-item button{--w: .5em;min-height:1em;width:1em;padding:0}.selector .selected-items,.selector .auto-wrapper{flex:1;width:100%}.fstatus{z-index:var(--z-5);background-color:rgba(var(--base), var(--op-6));border-radius:var(--radius);padding:0 .5rem;position:fixed;right:.5rem;bottom:0;--w: 1em;box-shadow:rgba(var(--base), var(--op-6)) var(--shdw);--wrap: nowrap;--gap: 1rem}body:has(nav.fixed.bottom) .fstatus{bottom:var(--btn);z-index:var(--z-8)}.fstatus .spinner{display:none}.fstatus.loading .spinner{display:inline-block}.fstatus p{margin:0;padding:.25rem}.restore-uploads .item-grid.group .field.group,.restore-uploads .upload-group .selection-actions{display:none}.upload-group .item-grid.group{grid-template-columns:repeat(2, 1fr)}.restore-uploads .item-grid.group{grid-template-columns:repeat(3, 1fr)}fieldset{width:100%;border-color:rgb(var(--base-200))}.restore-form.restore-form[hidden]{display:block !important;position:fixed;bottom:var(--offScreen);right:var(--btnbtn);transition:bottom var(--trans-base);transition-duration:2s}.restore-form.restore-form:not([hidden]){width:min(500px,90vw);padding:1rem;z-index:var(--z-7);background-color:rgba(var(--base), var(--op-6));border-radius:var(--radius);box-shadow:rgba(var(--action-0), var(--op-6)) var(--shdw);position:fixed;left:0;bottom:0;transition:bottom var(--trans-base)}.restore-form h3{font-size:var(--txt-medium)}body:has(nav.fixed.bottom) .restore-form.restore-form:not([hidden]){bottom:var(--btn)}.restore-form .actions{display:flex;width:100%}.restore-form .actions button{min-height:var(--chip);font-size:var(--txt-x-small);width:100%}[data-field=openingHours] fieldset fieldset{display:flex;align-items:flex-end}[data-field=openingHours] .field+.field{border:none}[data-field=openingHours] .true-false{width:max-content}[data-field=openingHours] label.switch{width:max-content;padding:0 1rem 0 0}[data-field=openingHours] fieldset>.group>.row{max-width:calc(100% - var(--btn_))}[data-field=openingHours] fieldset .field{padding:0;margin:0}[data-field=openingHours] fieldset .group{display:flex}.feedback{position:fixed;top:2rem;right:2rem;background-color:var(--action-50);color:var(--action-contrast);padding:1rem 1.5rem;border-radius:var(--innerRadius);box-shadow:var(--shadow);z-index:10000;opacity:0;transform:translateX(100px);transition:all var(--transition-base);display:flex;align-items:center;gap:.5rem;--w: 1.25rem}.feedback.show{opacity:1;transform:translateX(0)}/*# sourceMappingURL=forms.min.css.map */
assets/css/icons.css
File was deleted
assets/css/icons.min.css
File was deleted
assets/css/nav.min.css
@@ -1 +1 @@
nav,nav ol,nav ul{--padding:0 1rem;--wrap:nowrap;font-family:var(--heading)}nav,nav a,nav li,nav ol,nav ul,ul.socials{display:flex;flex-direction:var(--dir,row);justify-content:var(--justify,flex-start);align-items:var(--align,center);gap:var(--gap,0);flex-wrap:var(--wrap,nowrap);height:var(--btn,3rem);max-width:100%;padding:0;margin:0}nav.col,nav.col ul{height:max-content}nav>ul{width:100%;overflow:auto hidden}nav li{width:max-content;--justify:center;max-inline-size:none;padding:0;list-style:none}nav.fill li{width:100%}nav a,nav button{--justify:center;width:100%;white-space:nowrap;text-transform:uppercase;border-radius:0;background-color:transparent;text-decoration:none}nav a{padding:var(--padding)}nav .toggle{aspect-ratio:1;border:1px solid rgb(var(--base));color:rgb(var(--contrast))}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav button:focus{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav a:focus:hover,nav a:focus:visited:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.toggle .icon-caret-down{transform:rotate(0);transition:transform var(--trans-base)}.open>.row>.toggle .icon-caret-down,.open>.toggle .icon-caret-down{transform:rotate(900deg)}.has-submenu{position:relative}ul.submenu{--dir:column;height:max-content;position:absolute;top:100%;right:0;max-height:0;transform:scaleY(0);transform-origin:top;width:100%;min-width:max-content;background-color:rgba(var(--base),var(--op-3));border:2px solid rgba(var(--base),var(--op-3));transition:max-height var(--trans-base),transform var(--trans-base);box-shadow:var(--shdw-none);overflow:hidden}.submenu li{background-color:rgba(var(--base),var(--op-6));border:1px solid rgb(var(--base-50))}.submenu a{height:var(--chipchip)}.open>ul.submenu{transform:scaleY(1);max-height:1000%;box-shadow:rgba(var(--base),var(--op-45)) var(--shdw)}.screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}nav a:focus:not(:focus-visible){outline:0}nav a:focus-visible{outline:1px solid rgb(var(--action-0));outline-offset:1px}nav.always{overflow:visible;transition:width var(--trans-base);width:max-content}nav.always.fixed{z-index:var(--z-10)}nav.always>ul{--dir:column;--align:center;--justify:flex-start;--gap:0;height:100%;max-height:100vh;position:fixed;right:-300vw;bottom:0;width:100vw;padding:var(--btn) 0;overflow:hidden auto;transition:right var(--trans-base)}nav.always.open>ul{right:0}nav.always li{width:100%;height:max-content}nav.always.fixed.open{width:100vw;height:100vh;inset:0;z-index:var(--z-10)}nav.always a{height:max-content;min-height:var(--chipchip)}nav.always li:not(.has-submenu)>a{padding-right:calc(var(--btn) + 1rem)}nav.always .has-submenu{--dir:row;--wrap:wrap;height:max-content}nav.always .has-submenu a{max-width:calc(100% - var(--btn))}nav.always .has-submenu .toggle{max-width:var(--btn)}.has-submenu.open>a{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.has-submenu.open>ul{border:1px solid rgb(var(--action-0));background-color:rgb(var(--action-0));--align:flex-start}nav.always ul.submenu{position:relative;top:0}nav.always .submenu a{padding-left:var(--btn)}nav.always.fixed{width:var(--btn);height:var(--btn);bottom:0;right:0;overflow:hidden}nav.always.fixed .toggle.main{background-color:rgb(var(--base))}nav.always.fixed .toggle.main:focus,nav.always.fixed .toggle.main:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav.mobile .toggle.main{width:var(--btn);transition:width var(--trans-base)}nav.mobile .icon-list,nav.mobile .icon-x{--w:32px}nav.mobile .icon-x,nav.mobile.open .icon-list{display:none}nav.mobile .icon-list,nav.mobile.open .icon-x{display:block}nav.mobile.open>ul{--dir:column;z-index:var(--z-9);background-color:rgba(var(--base),var(--op-6));width:100vw;height:100vh;overflow:hidden auto;right:0;bottom:0;position:fixed;padding:var(--btn) 0}nav.always>ul::before,nav.mobile.open>ul::before{content:'';z-index:-1;position:absolute;inset:0;filter:blur(5px)}nav.always.open .main.toggle,nav.mobile.open .main.toggle{position:fixed;bottom:0;left:0;width:100vw;z-index:var(--z-10);aspect-ratio:unset}nav.always>ul,nav.always>ul:before,nav.mobile.open>ul,nav.mobile.open>ul::before{background-color:rgba(var(--base),var(--op-6))}@media (max-width:767px){nav.col{height:var(--btn)}nav.mobile>ul{--dir:column;--align:center;--justify:flex-end;--gap:0;height:100%;max-height:none;position:relative;right:-300vw;width:100vw;padding:var(--btn) 0 0;overflow:hidden auto}nav.mobile.open>ul{right:0}}@media (min-width:768px){nav.mobile:not(.always) .toggle.main{display:none}}nav#breadcrumbs{height:max-content;--wrap:wrap;--gap:0;width:max-content;max-width:var(--full);position:absolute;background-color:rgba(var(--base),var(--op-4));font-size:var(--txt-x-small);padding:.125em;z-index:var(--z-5)}nav#breadcrumbs ol{height:max-content;--wrap:wrap;--justify:flex-start}nav#breadcrumbs li{width:max-content;height:var(--chip);--wrap:nowrap}nav#breadcrumbs li::after{content:'/';color:rgb(var(--contrast-200));padding:0 .25rem}nav#breadcrumbs li:last-of-type::after{display:none}nav#breadcrumbs a{height:var(--chip)}nav#breadcrumbs a,nav#breadcrumbs span{padding:0 .125rem;color:rgb(var(--contrast));text-transform:none}nav#breadcrumbs a:focus{background-color:transparent;color:rgb(var(--action-0))}nav.fixed{position:fixed;box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);z-index:var(--z-6)}nav.fixed.bottom{left:2rem;bottom:0;width:calc(100vw - var(--btn) - 2rem)}nav.fixed:not(.always) ul{--justify:space-between;width:100%;background-color:rgb(var(--base));padding:0 .25rem}nav.fixed:not(.always) li{flex:1}nav.fixed a{--align:center;--gap:1rem;--w:var(--chip_);color:rgb(var(--contrast));font-size:var(--txt-x-small)}@media (min-width:768px){nav.fixed a{font-size:var(--txt-medium)}}nav.on-this-page.on-this-page{--justify:space-between;position:fixed;bottom:0;left:0;width:100vw;z-index:var(--z-5);background-color:rgba(var(--base),var(--op-45));max-width:none;margin:0!important}body:has(nav.fixed) nav.on-this-page{bottom:var(--btn)}nav.on-this-page button{order:3;padding:0 1rem;width:max-content;aspect-ratio:unset}nav.on-this-page.open button{order:0}nav.on-this-page ul{width:100%;--gap:0}nav.on-this-page a{padding:0}nav.on-this-page .active a{background-color:rgba(var(--base),var(--op-6));color:rgb(var(--action-contrast))}nav.on-this-page #back-to-top span{display:none}nav.on-this-page .active a{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav.letters,nav.letters a,nav.letters li,nav.letters ul{min-height:var(--chip);height:max-content}nav.letters li{width:calc(7.69% - 2px)}nav.letters ul{--wrap:wrap}@media (min-width:768px){nav.letters,nav.letters ul{height:var(--chip)}nav.letters ul{--wrap:nowrap}nav.letters li{width:inherit}nav.letters a{padding:.25rem .66rem}}nav.index{--justify:space-between;--padding:0;background-color:rgba(var(--base),var(--op-6))}nav.index,nav.index a,nav.index button,nav.index li,nav.index ul{min-height:var(--chipchip);height:var(--chipchip)}nav.index ul{width:100%}nav.index li{flex-shrink:0;transform:scaleX(0);max-width:0;overflow:hidden}nav.index li.active,nav.index li.adj{transform:scaleX(1);width:100%;flex-shrink:1;max-width:none}@media (max-width:767px){.index li.adj{transform:scaleX(0);max-width:0}}nav.index.open{--dir:column-reverse;height:var(--maxHeight);width:100%;--align:flex-end;background-color:rgba(var(--base),var(--op-6));backdrop-filter:blur(5px);z-index:var(--z-10)}nav.index.open ul{min-height:max-content;--dir:column}nav.index.open li{width:100%;max-width:100%!important;transform:scaleX(1);overflow:visible}nav.index.open a{--justify:center;padding:0 2rem 0 0}nav.condensed,nav.condensed a,nav.condensed li,nav.condensed ul{height:max-content;width:max-content;--wrap:wrap;min-height:var(--chip)}.condensed ul{--justify:center;--dir:row}nav.condensed{--gap:0 .25rem;width:100%;--justify:center}nav.condensed li+li::before{content:'·';padding:0 .25em}nav.condensed a{font-size:var(--txt-x-small);padding:0 .25rem;text-transform:none;border-bottom:2px solid transparent}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav button:focus{background-color:transparent;color:rgb(var(--contrast));border-color:rgb(var(--action-0))}ul.socials{--dir:row;height:max-content;--gap:.5rem;--justify:flex-end;--wrap:nowrap;overflow:auto hidden;touch-action:pan-x;width:100%}ul.socials li{list-style:none}.always ul.socials{width:100vw;--justify:stretch;--gap:0}.always ul.socials li{flex:1;--justify:center;--align:center}.always ul.socials a{display:inline-flex}ul.socials li{flex:1}ul.socials a{display:inline-flex;font-size:var(--txt-x-small);padding:.25rem .5rem;max-width:none;justify-content:center;width:100%}ul.socials .icon{margin:0}ul.socials .icon+span:not(.screen-reader-text){margin-left:.5rem}nav.tabs.tabs.row{padding-bottom:2px;touch-action:pan-x pan-y;--wrap:nowrap;overflow:auto hidden;--dir:row}nav.tabs button.active{cursor:default}nav.tabs button{font-family:var(--heading);font-size:var(--txt-x-small);border-bottom:4px solid transparent}nav.tabs button.active,nav.tabs button.active:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));border-color:rgb(var(--base))}.tab-content nav.tabs button{height:var(--chip_);padding:.25rem .75rem;min-height:0}.tab-content h2{margin:0 0 .5rem}.tab-content nav.tabs{height:max-content;background-color:rgb(var(--base));--gap:0}.tab-content .tab-content nav.tabs{background-color:rgb(var(--base-100))}.tab-content .tab-content .tab-content nav.tabs{background-color:rgb(var(--base-200))}.tab-content nav.tabs button.active h2{color:rgb(var(--action-0))}nav.menu a{padding:.5rem .66rem}nav.share{height:max-content;margin:1rem 0}nav.share ul{overflow:visible}nav.share h4{display:inline-block;width:max-content;margin:.25rem .5rem .25rem 0;font-size:var(--txt-x-small)}.wp-site-blocks>header,body>header{--dir:row;--justify:space-between;position:sticky;top:0;left:0;right:0;height:var(--btn);width:100vw;display:flex;align-items:var(--align,center);justify-content:var(--justify,space-between);padding:0 .5rem;background-color:rgb(var(--base));box-shadow:rgba(var(--base),var(--op-45)) var(--shdw);z-index:var(--z-9)}.wp-site-blocks>header img{width:var(--btn)}.dashboard-nav{width:100%}nav.filters{--dir:row;overflow:auto hidden}nav.filters .filter{width:auto;padding:.25rem .75rem}nav.term-navigation:has([hidden]){display:none}nav.pagination{width:100%}nav.pagination>a{min-width:var(--chipchip)}nav.pagination>ul{margin:0 auto}nav.pagination:not(:has(a+ul)){margin-left:var(--chipchip)}nav.pagination:not(:has(ul+a)){margin-right:var(--chipchip)}.pagination.condensed li+li::before{display:none}.pagination li.current{width:var(--chip_);height:var(--chip_);background-color:rgb(var(--action-0));border-radius:var(--radius);line-height:1}.pagination.condensed a{font-size:var(--txt-medium);width:var(--chip_);height:var(--chip_)}
nav,nav ol,nav ul{--padding: 0 1rem;--wrap: nowrap;font-family:var(--heading)}ul.socials,nav,nav ol,nav ul,nav li,nav a{display:flex;flex-direction:var(--dir, row);justify-content:var(--justify, flex-start);align-items:var(--align, center);gap:var(--gap, 0);flex-wrap:var(--wrap, nowrap);height:var(--btn, 3rem);max-width:100%;padding:0;margin:0}nav.col,nav.col ul{height:max-content}nav>ul{width:100%;overflow:auto hidden}nav li{width:max-content;--justify: center;max-inline-size:none;padding:0;list-style:none}nav.fill li{width:100%}nav a,nav button{--justify: center;width:100%;white-space:nowrap;text-transform:uppercase;border-radius:0;background-color:transparent;text-decoration:none}nav a{padding:var(--padding)}nav .toggle{aspect-ratio:1;border:1px solid rgb(var(--base));color:rgb(var(--contrast))}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav button:focus{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav a:focus:hover,nav a:focus:visited:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.toggle .icon-caret-down{transform:rotate(0deg);transition:transform var(--trans-base)}.open>.row>.toggle .icon-caret-down,.open>.toggle .icon-caret-down{transform:rotate(900deg)}.has-submenu{position:relative}ul.submenu{--dir: column;height:max-content;position:absolute;top:100%;right:0;max-height:0;transform:scaleY(0);transform-origin:top;width:100%;min-width:max-content;background-color:rgba(var(--base), var(--op-3));border:2px solid rgba(var(--base), var(--op-3));transition:max-height var(--trans-base),transform var(--trans-base);box-shadow:var(--shdw-none);overflow:hidden}.submenu li{background-color:rgba(var(--base), var(--op-6));border:1px solid rgb(var(--base-50))}.submenu a{height:var(--chipchip)}.open>ul.submenu{transform:scaleY(1);max-height:1000%;box-shadow:rgba(var(--base), var(--op-45)) var(--shdw)}.screen-reader-text{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0}nav a:focus:not(:focus-visible){outline:none}nav a:focus-visible{outline:1px solid rgb(var(--action-0));outline-offset:1px}nav.always{overflow:visible;transition:width var(--trans-base);width:max-content}nav.always.fixed{z-index:var(--z-10)}nav.always>ul{--dir: column;--align: center;--justify: flex-start;--gap: 0;height:100%;max-height:100vh;position:fixed;right:-300vw;bottom:0;width:100vw;padding:var(--btn) 0;overflow:hidden auto;transition:right var(--trans-base)}nav.always.open>ul{right:0}nav.always li{width:100%;height:max-content}nav.always.fixed.open{width:100vw;height:100vh;inset:0;z-index:var(--z-10)}nav.always a{height:max-content;min-height:var(--chipchip)}nav.always li:not(.has-submenu)>a{padding-right:calc(var(--btn) + 1rem)}nav.always .has-submenu{--dir: row;--wrap: wrap;height:max-content}nav.always .has-submenu a{max-width:calc(100% - var(--btn))}nav.always .has-submenu .toggle{max-width:var(--btn)}.has-submenu.open>a{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.has-submenu.open>ul{border:1px solid rgb(var(--action-0));background-color:rgb(var(--action-0));--align: flex-start}nav.always ul.submenu{position:relative;top:0}nav.always .submenu a{padding-left:var(--btn)}nav.always.fixed{width:var(--btn);height:var(--btn);bottom:0;right:0;overflow:hidden}nav.always.fixed .toggle.main{background-color:rgb(var(--base))}nav.always.fixed .toggle.main:hover,nav.always.fixed .toggle.main:focus{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav.mobile .toggle.main{width:var(--btn);transition:width var(--trans-base)}nav.mobile .icon-x,nav.mobile .icon-list{--w: 32px}nav.mobile .icon-x,nav.mobile.open .icon-list{display:none}nav.mobile .icon-list,nav.mobile.open .icon-x{display:block}nav.mobile.open>ul{--dir: column;z-index:var(--z-9);background-color:rgba(var(--base), var(--op-6));width:100vw;height:100vh;overflow:hidden auto;right:0;bottom:0;position:fixed;padding:var(--btn) 0}nav.always>ul::before,nav.mobile.open>ul::before{content:"";z-index:-1;position:absolute;inset:0;filter:blur(5px)}nav.always.open .main.toggle,nav.mobile.open .main.toggle{position:fixed;bottom:0;left:0;width:100vw;z-index:var(--z-10);aspect-ratio:unset}nav.always>ul,nav.always>ul:before,nav.mobile.open>ul,nav.mobile.open>ul::before{background-color:rgba(var(--base), var(--op-6))}@media(max-width: 767px){nav.col{height:var(--btn)}nav.mobile>ul{--dir: column;--align: center;--justify: flex-end;--gap: 0;height:100%;max-height:none;position:relative;right:-300vw;width:100vw;padding:var(--btn) 0 0;overflow:hidden auto}nav.mobile.open>ul{right:0}}@media(min-width: 768px){nav.mobile:not(.always) .toggle.main{display:none}}nav#breadcrumbs{height:max-content;--wrap: wrap;--gap: 0;width:max-content;max-width:var(--full);position:absolute;background-color:rgba(var(--base), var(--op-4));font-size:var(--txt-x-small);padding:.125em;z-index:var(--z-5)}nav#breadcrumbs ol{height:max-content;--wrap: wrap;--justify: flex-start}nav#breadcrumbs li{width:max-content;height:var(--chip);--wrap: nowrap}nav#breadcrumbs li::after{content:"/";color:rgb(var(--contrast-200));padding:0 .25rem}nav#breadcrumbs li:last-of-type::after{display:none}nav#breadcrumbs a{height:var(--chip)}nav#breadcrumbs a,nav#breadcrumbs span{padding:0 .125rem;color:rgb(var(--contrast));text-transform:none}nav#breadcrumbs a:focus{background-color:transparent;color:rgb(var(--action-0))}nav.fixed{position:fixed;box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);z-index:var(--z-6)}nav.fixed.bottom{left:0;bottom:0;width:calc(100vw - var(--btn))}nav.fixed:not(.always) ul{--justify: space-between;width:100%;background-color:rgb(var(--base));padding:0 .25rem}nav.fixed:not(.always) li{flex:1}nav.fixed a{--align: center;--gap: 1rem;--w: var(--chip_);color:rgb(var(--contrast));font-size:var(--txt-x-small)}@media(min-width: 768px){nav.fixed a{font-size:var(--txt-medium)}}nav.on-this-page.on-this-page{--justify: space-between;position:fixed;bottom:0;left:0;width:100vw;z-index:var(--z-5);background-color:rgba(var(--base), var(--op-45));max-width:none;margin:0 !important}body:has(nav.fixed) nav.on-this-page{bottom:var(--btn)}nav.on-this-page button{order:3;padding:0 1rem;width:max-content;aspect-ratio:unset}nav.on-this-page.open button{order:0}nav.on-this-page ul{width:100%;--gap: 0}nav.on-this-page a{padding:0}nav.on-this-page .active a{background-color:rgba(var(--base), var(--op-6));color:rgb(var(--action-contrast))}nav.on-this-page #back-to-top span{display:none}nav.on-this-page .active a{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}nav.letters,nav.letters ul,nav.letters li,nav.letters a{min-height:var(--chip);height:max-content}nav.letters li{width:calc(7.69% - 2px)}nav.letters ul{--wrap: wrap}@media(min-width: 768px){nav.letters,nav.letters ul{height:var(--chip)}nav.letters ul{--wrap: nowrap}nav.letters li{width:inherit}nav.letters a{padding:.25rem .66rem}}nav.index{--justify: space-between;--padding: 0;background-color:rgba(var(--base), var(--op-6))}nav.index,nav.index ul,nav.index li,nav.index button,nav.index a{min-height:var(--chipchip);height:var(--chipchip)}nav.index ul{width:100%}nav.index li{flex-shrink:0;transform:scaleX(0);max-width:0;overflow:hidden}nav.index li.active,nav.index li.adj{transform:scaleX(1);width:100%;flex-shrink:1;max-width:none}@media(max-width: 767px){.index li.adj{transform:scaleX(0);max-width:0}}nav.index.open{--dir: column-reverse;height:var(--maxHeight);width:100%;--align: flex-end;background-color:rgba(var(--base), var(--op-6));backdrop-filter:blur(5px);z-index:var(--z-10)}nav.index.open ul{min-height:max-content;--dir: column}nav.index.open li{width:100%;max-width:100% !important;transform:scaleX(1);overflow:visible}nav.index.open a{--justify: center;padding:0 2rem 0 0}nav.condensed,nav.condensed ul,nav.condensed li,nav.condensed a{height:max-content;width:max-content;--wrap: wrap;min-height:var(--chip)}.condensed ul{--justify: center;--dir: row}nav.condensed{--gap: 0 .25rem;width:100%;--justify: center}nav.condensed li+li::before{content:"·";padding:0 .25em}nav.condensed a{font-size:var(--txt-x-small);padding:0 .25rem;text-transform:none;border-bottom:2px solid transparent}nav .current a,nav a.current,nav a:focus,nav a:focus:visited,nav button:focus{background-color:transparent;color:rgb(var(--contrast));border-color:rgb(var(--action-0))}ul.socials{--dir: row;height:max-content;--gap: .5rem;--justify: flex-end;--wrap: nowrap;overflow:auto hidden;touch-action:pan-x;width:100%}ul.socials li{list-style:none}.always ul.socials{width:100vw;--justify: stretch;--gap: 0}.always ul.socials li{flex:1;--justify: center;--align: center}.always ul.socials a{display:inline-flex}ul.socials li{flex:1}ul.socials a{display:inline-flex;font-size:var(--txt-x-small);padding:.25rem .5rem;max-width:none;justify-content:center;width:100%}ul.socials .icon{margin:0}ul.socials .icon+span:not(.screen-reader-text){margin-left:.5rem}nav.tabs.tabs.row{padding-bottom:2px;touch-action:pan-x pan-y;--wrap: nowrap;overflow:auto hidden;--dir: row}nav.tabs button.active{cursor:default}nav.tabs button{font-family:var(--heading);font-size:var(--txt-x-small);border-bottom:4px solid transparent}nav.tabs button.active,nav.tabs button.active:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));border-color:rgb(var(--base))}.tab-content nav.tabs button{height:var(--chip_);padding:.25rem .75rem;min-height:0}.tab-content h2{margin:0 0 .5rem}.tab-content nav.tabs{height:max-content;background-color:rgb(var(--base));--gap: 0}.tab-content .tab-content nav.tabs{background-color:rgb(var(--base-100))}.tab-content .tab-content .tab-content nav.tabs{background-color:rgb(var(--base-200))}.tab-content nav.tabs button.active h2{color:rgb(var(--action-0))}nav.menu a{padding:.5rem .66rem}nav.share{height:max-content;margin:1rem 0}nav.share ul{overflow:visible}nav.share h4{display:inline-block;width:max-content;margin:.25rem .5rem .25rem 0;font-size:var(--txt-x-small)}body>header,.wp-site-blocks>header{--dir: row;--justify: space-between;position:sticky;top:0;left:0;right:0;height:var(--btn);width:100vw;display:flex;align-items:var(--align, center);justify-content:var(--justify, space-between);padding:0 .5rem;background-color:rgb(var(--base));box-shadow:rgba(var(--base), var(--op-45)) var(--shdw);z-index:var(--z-9)}.wp-site-blocks>header img{width:var(--btn)}.dashboard-nav{width:100%}nav.filters{--dir: row;overflow:auto hidden}nav.filters .filter{width:auto;padding:.25rem .75rem}nav.term-navigation:has(*[hidden]){display:none}nav.pagination{width:100%}nav.pagination>a{min-width:var(--chipchip)}nav.pagination>ul{margin:0 auto}nav.pagination:not(:has(a+ul)){margin-left:var(--chipchip)}nav.pagination:not(:has(ul+a)){margin-right:var(--chipchip)}.pagination.condensed li+li::before{display:none}.pagination li.current{width:var(--chip_);height:var(--chip_);background-color:rgb(var(--action-0));border-radius:var(--radius);line-height:1}.pagination.condensed a{font-size:var(--txt-medium);width:var(--chip_);height:var(--chip_)}/*# sourceMappingURL=nav.min.css.map */
assets/js/concise/WooCommerceCart.js
New file
@@ -0,0 +1,6 @@
document.addEventListener('DOMContentLoaded', async function() {
    document.querySelectorAll('a[data-product_id]').forEach(link => {
        link.remove();
    });
    document.querySelector('[data-block-name="woocommerce/mini-cart"]')?.remove();
});
assets/js/min/cartCheck.min.js
New file
@@ -0,0 +1 @@
document.addEventListener("DOMContentLoaded",async function(){document.querySelectorAll("a[data-product_id]").forEach(e=>{e.remove()}),document.querySelector('[data-block-name="woocommerce/mini-cart"]')?.remove()});
assets/js/min/selector.min.js
@@ -1 +1 @@
(()=>{class e{constructor(){this.container=document.querySelector("dialog#jvb-selector"),this.container&&(this.a11y=window.jvbA11y,this.error=window.jvbError,this.subscribers=new Set,this.fields=new Map,this.selectedTerms=new Map,this.batchFetch=new Set,this.activeField=null,this.isInitializing=!0,this.lazyInit=!1,this.messageText={},this.init())}init(){this.initStore(),this.initElements(),this.defineTemplates(),this.initModal(),this.scanExistingFields(),this.initListeners(),this.needsCreator()&&window.jvbTaxCreator&&(this.creator=new window.jvbTaxCreator(this)),this.isInitializing=!1,this.batchFetchTaxonomies().then(()=>{})}initStore(){const e=window.jvbStore.register("taxonomies",{storeName:"terms",keyPath:"id",showLoading:!1,indexes:[{name:"taxonomy",keyPath:"taxonomy"},{name:"parent",keyPath:"parent"},{name:"slug",keyPath:"slug"},{name:"count",keyPath:"count"}],endpoint:"terms",TTL:12e4,filters:{taxonomy:"",page:1,search:"",parent:0},required:"taxonomy",delayFetch:!0});this.store=e.terms,this.store.subscribe(this.handleStoreEvent.bind(this))}defineTemplates(){const e=window.jvbTemplates,t=this;e.define("emptyState"),e.define("selectedTerm",{refs:{name:".item-name",btn:"button"},setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.dataset.taxonomy=i.taxonomy,t.name&&(t.name.textContent=i.path),t.button&&(t.button.title=`Remove ${i.name}`)}}),e.define("termListItem",{refs:{checkbox:"input",label:"label",name:"span, .term-name"},setup({el:e,refs:s,manyRefs:i,data:r}){e.dataset.id=r.id;let a=t.currentField(),n=t.selectedTerms.get(t.activeField).has(r.id),o=a.limit>0&&t.selectedTerms.get(t.activeField).size>=a.limit;if(s.checkbox&&(s.checkbox.dataset.id=r.id,s.checkbox.id=`${a.id}-${r.id}`,s.checkbox.name=`${a.id}-${a.taxonomy}-select`,s.checkbox.value=r.id,s.checkbox.disabled=!n&&o,s.checkbox.checked=n),s.label&&(s.label.htmlFor=`${a.id}-${r.id}`,s.label.title=r.path??r.name,s.label.dataset.path=r.path),s.name&&(s.name.textContent=r.show?r.path:r.name),r.hasChildren){let t={plural:a.plural,name:r.name};const s=window.jvbTemplates.create("termChildrenToggle",t);e.append(s)}}}),e.define("termChildrenToggle",{setup({el:e,refs:t,manyRefs:s,data:i}){e.ariaLabel=`View ${i.plural} nested under ${i.name}`}}),e.define("termBreadcrumb",{setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.textContent=i.name,e.title=i.name}}),e.define("autocompleteItem",{setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.textContent=i.path||i.name,e.title=`Select ${i.name}`}})}initElements(){this.selectors={search:{input:'[type="search"]',clear:".clear-search",container:".search-wrapper",results:".search-results"},create:{button:"button.submit-term",span:".submit-term span"},terms:{list:".items-container",wrap:".items-wrap",sentinel:".scroll-sentinel"},nav:{nav:"nav.term-navigation",back:".back-to-parent",child:".toggle-children",pathLevel:".path-level"},message:{message:"p.message",text:"p.message span"},selected:".selected-items",modal:{title:"#modal-title",content:".modal-content",count:".selection-count"},favourites:".favourite-terms",field:{toggle:'button.selector-toggle, [data-filter="taxonomy"]',value:'input[type="hidden"]',selected:".selected-items",dropdown:{list:".search-results",wrapper:".auto-wrapper"},create:{button:".auto-wrapper .submit-term",span:".auto-wrapper button span"},search:"input[data-autocomplete]",message:{message:"p.message",text:"p.message span"}}},this.ui=window.uiFromSelectors(this.selectors,this.container)}initListeners(){this.observer=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&this.nextPage()})},{root:this.ui.terms.sentinel,threshold:.5}),this.clickHandler=this.handleClick.bind(this),this.changeHandler=this.handleChange.bind(this),this.inputHandler=this.handleInput.bind(this),this.focusHandler=this.handleFocus.bind(this),this.blurHandler=this.handleBlur.bind(this),document.addEventListener("click",this.clickHandler),document.addEventListener("change",this.changeHandler),document.addEventListener("input",this.inputHandler),document.addEventListener("focus",this.focusHandler,!0),document.addEventListener("blur",this.blurHandler,!0)}handleClick(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target)||this.activeField,s=this.fields.get(t);if(!t||!s)return;if(this.creator){window.targetCheck(e,this.selectors.create.button)&&this.maybeCreateTerm(e).then(()=>{})}const i=window.targetCheck(e,".remove-term");if(i){const e=i.closest("[data-id]").dataset.id??!1;return void(t&&e&&this.removeSelected(parseInt(e),t))}const r=window.targetCheck(e,".item.autocomplete");if(r){let e=parseInt(r.dataset.id);return this.addSelected(e,t),this.scheduleHideDropdown(t,6e3),void(s.ui.search&&(s.ui.search.value=""))}if(window.targetCheck(e,this.selectors.field.toggle))return e.preventDefault(),void this.openModal(t);if(e.target.matches(".modal-close"))return this.updateFieldValue(t),void this.modal?.handleClose();if(window.targetCheck(e,this.selectors.nav.back))return void this.navigateToParent();if(window.targetCheck(e,this.selectors.nav.child)){const t=e.target.closest("li"),s=parseInt(t.dataset.id);return void(s&&this.navigateTo(s))}const a=window.targetCheck(e,this.selectors.nav.pathLevel);if(a){const e=parseInt(a.dataset.id)??0;return void this.navigateTo(e)}if(window.targetCheck(e,this.selectors.field.dropdown))return void this.scheduleHideDropdown(t);if(window.targetCheck(e,this.selectors.search.clear)){const e=this.currentField();e&&e.ui.search&&(e.ui.search.value="",this.store.setFilters({search:"",page:1,parent:this.store.filters.parent||0})),this.ui.search.input&&(this.ui.search.input.value="")}}handleChange(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;if(!["checkbox","button"].includes(e.target.type))return;e.preventDefault(),e.stopPropagation();const t=parseInt(e.target.dataset.id);let s=this.getFieldId(e.target);e.target.checked?this.addSelected(t,s):this.removeSelected(t,s)}handleInput(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;let t=this.getFieldId(e.target)??this.activeField;if(!t)return;const s=this.fields.get(t);if(!s)return;if(["checkbox","button"].includes(e.target.type))return;e.preventDefault(),e.stopPropagation(),this.container.open||this.setField(t);let i=e.target.value.trim();this.setMessage(s,!0,`Searching for "${i}" in ${s.plural??"items"}`),window.debouncer.schedule(`${t}-search`,async()=>{this.container.open&&window.removeChildren(this.ui.terms.list),await this.store.setFilters({taxonomy:s.taxonomy,search:i,page:1,parent:i?0:this.store.filters.parent||0})},100)}setField(e){const t=this.fields.get(e);t?(this.activeField=e,this.setMessage(t,!0,`Loading ${t.plural}...`),this.resetFilters({taxonomy:t.taxonomy})):console.error("No field found...")}resetFilters(e){Object.hasOwn(e,"taxonomy")&&(e={page:1,search:"",parent:0,...e},this.store.setFilters(e))}handleFocus(e){if(!Object.hasOwn(e,"target"))return;if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target);if(!t)return;const s=this.fields.get(t);s&&(s.hasAutocomplete||s.hasSearch)&&(window.debouncer.cancel(`${t}-search-results`),this.container.open||this.setField(t))}handleBlur(e){if(!Object.hasOwn(e,"target"))return;if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target);if(!t)return;const s=this.fields.get(t);s&&s.hasAutocomplete&&!this.container.open&&(e.target.closest(".remove-item")||e.relatedTarget&&s.ui.dropdown.wrapper?.contains(e.relatedTarget)||this.scheduleHideDropdown(t))}scheduleHideDropdown(e,t=1500){const s=this.fields.get(e);s&&window.debouncer.schedule(`${e}-search-results`,()=>{this.container.open||(this.activeField=null),s.ui.dropdown.wrapper&&(s.ui.dropdown.wrapper.hidden=!0)},t)}initModal(){this.modalID="dialog#jvb-selector",this.container=document.querySelector(this.modalID),this.modal=new window.jvbModal(this.container,{handleForm:!1,open:null}),this.modal.subscribe((e,t)=>{if("modal-close"===e)this.closeModal()})}toggleModal(e,t=!0){this.fields.get(e)&&(t?this.openModal(e):this.closeModal())}openModal(e){const t=this.fields.get(e);if(!t)return;this.setField(e),this.ui.modal.title.textContent=t.isFilter?`Filter by ${t.singular}`:`Select ${t.plural}`,this.ui.search.container&&(this.ui.search.container.hidden=!t.canSearch),this.creator&&this.creator.handleOpen(t);let s=`Opened ${t.singular} selection. Choose from checkboxes, or search to filter results.`;window.removeChildren(this.ui.selected),window.removeChildren(this.ui.terms.list),this.modal.handleOpen(),this.a11y.announce(s)}openEmpty(e,t,s,i){this.emptyCallback=i;const r=`empty-${e}-${Date.now()}`;this.fields.has(r)||(this.fields.set(r,{id:r,taxonomy:e,singular:t,plural:s,canSearch:!0,canCreate:!1,hasAutocomplete:!1,isFilter:!1,isEmpty:!0,limit:0,ui:{},element:null,value:null,toggle:null,checked:!0}),this.selectedTerms.set(r,new Set)),this.setField(r),this.ui.modal.title.textContent=`Add to ${s}`,this.ui.search?.container&&(this.ui.search.container.hidden=!1),window.removeChildren(this.ui.selected),window.removeChildren(this.ui.terms.list),this.modal.handleOpen()}closeModal(){const e=this.fields.get(this.activeField);if(!e)return;if(this.updateFieldValue(this.activeField),this.observer.unobserve(this.ui.terms.sentinel),window.removeChildren(this.ui.terms.list),e.isEmpty&&this.emptyCallback){const t=Array.from(this.selectedTerms.get(this.activeField)||[]),s=t.map(e=>this.store.get(e)).filter(Boolean);this.emptyCallback({taxonomy:e.taxonomy,termIds:t,terms:s}),this.fields.delete(this.activeField),this.selectedTerms.delete(this.activeField),this.emptyCallback=null,this.bulkAssignmentTaxonomy=null}else this.notify("selected-terms",{terms:this.selectedTerms.get(this.activeField),taxonomy:e.taxonomy});this.activeField=null;let t=`Closed ${e.singular} selector.`;this.a11y.announce(t)}navigateToParent(){const e=this.store.filters.parent;if(0===e)return;let t=this.store.get(parseInt(e));if(!t)return void this.navigateTo(0);let s=t.parent;this.navigateTo(parseInt(s))}navigateTo(e=0){e=parseInt(e)??0,this.store.setFilters({parent:e,page:1}),window.removeChildren(this.ui.terms.list),this.updateBreadcrumbs(e)}nextPage(){let e=this.store.filters.page,t=Math.min(e++,this.store.lastResponse.total);this.store.setFilters({page:t})}prevPage(){let e=this.store.filters.page,t=Math.max(e-1,1);this.store.setFilters({page:t})}addTermToModal(e){const t=this.store.get(e);if(!t)return;this.currentField()&&(this.ui.selected.querySelector(`[data-id="${e}"]`)||this.ui.selected.append(this.getSelectedTermUI(t)))}getSelectedTermUI(e,t=!0){return window.jvbTemplates.create("selectedTerm",e)}scanExistingFields(e=document.body){e.querySelectorAll('[data-type="selector"], [data-field-type="selector"]').forEach(e=>{try{e.dataset.lazy?this.lazyInit=!0:this.registerField(e)}catch(t){this.error.log(t,{component:"TaxonomySelector",action:"scanExistingFields",container:e.dataset.name})}}),this.lazyInit&&this.initObserver(e)}unregisterFields(e){e.querySelectorAll('[data-type="selector"],[data-field-type="selector"]').forEach(e=>{this.fields.delete(e.dataset.fieldId)})}initObserver(e){this.lazyObserver=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&e.target.dataset.lazy&&(delete e.target.dataset.lazy,this.registerField(e.target),this.lazyObserver.unobserve(e.target))})},{rootMargin:"50px"}),e.querySelectorAll('[data-type="selector"][data-lazy], [data-field-type="selector"][data-lazy]').forEach(e=>{this.lazyObserver.observe(e)})}registerField(e,t={}){if(e.dataset.fieldId&&this.fields.has(e.dataset.fieldId))return e.dataset.fieldId;let s=e.querySelector('input[type="hidden"]');if(!s&&!Object.hasOwn(e.dataset,"filter"))return;"fieldId"in e.dataset||(e.dataset.fieldId=window.generateID("selector"));const i=e.dataset.fieldId;let r=this.selectors.field;const a=Object.hasOwn(e.dataset,"filter")&&"taxonomy"===e.dataset.filter;let n=a?e:e.querySelector("button.selector-toggle");if(0===Object.keys(t).length){if(!n)return;t={taxonomy:n.dataset.taxonomy,single:n.dataset.single,plural:n.dataset.plural,search:Object.hasOwn(n.dataset,"search"),autocomplete:Object.hasOwn(n.dataset,"autocomplete"),creatable:Object.hasOwn(n.dataset,"creatable")}}else Object.hasOwn(t,"toggle")&&(n=document.querySelector(t.toggle),r.toggle=t.toggle);const o={id:i,value:s,element:e,taxonomy:t.taxonomy??!1,singular:t.single??"",plural:t.plural??"",name:e.dataset.field,canSearch:t.search??!1,limit:t.limit??0,hasAutocomplete:t.autocomplete??!1,canCreate:t.creatable??!1,isRequired:t.required??!1,isFilter:a,toggle:n,create:{button:null,span:null},selectors:r,ui:window.uiFromSelectors(r,e),checked:!1};if(a&&!o.ui.toggle&&(o.ui.toggle=e),o.taxonomy)return o.singular&&o.plural||(console.warn("TaxonomySelector: Field missing singular/plural labels",e),o.singular=o.taxonomy.replace("jvb_",""),o.plural=o.singular+"s"),this.fields.set(i,o),this.setSelectedFromValue(i,s),this.isInitializing&&this.batchFetch.add(o.taxonomy),null!==e.offsetParent?this.updateFieldUI(i):requestIdleCallback(()=>{null!==e.offsetParent&&this.updateFieldUI(i)},{timeout:2e3}),i;console.error("TaxonomySelector: Field missing taxonomy",e)}setSelectedFromValue(e,t){if(!e)return;let s=this.fields.get(e);if(!s)return;if(!t&&!s.isFilter)return;let i=new Set;t&&t.value.trim().split(",").map(e=>parseInt(e.trim())).filter(e=>!isNaN(e)).forEach(e=>i.add(e)),this.selectedTerms.set(e,i)}addSelected(e,t=null){t||(t=this.activeField);const s=this.fields.get(t),i=this.store.get(e);if(!s||!i)return;const r=this.selectedTerms.get(t);0!==s.limit&&r.size>=s.limit||(r.add(parseInt(e)),this.container.open||s.isFilter||this.updateFieldValue(t),this.addTermToDisplay(e,t),this.checkLimits(t))}removeSelected(e,t=null){t||(t=this.activeField);const s=this.fields.get(t),i=this.store.get(e);if(!s||!i)return;this.selectedTerms.get(t).delete(parseInt(e));const r=!!s.ui.selected&&s.ui.selected.querySelector(`[data-id="${e}"]`);if(r&&r.remove(),this.container.open){let t=!!this.ui.selected&&this.ui.selected.querySelector(`[data-id="${e}"]`);t&&t.remove();let s=this.ui.terms.list.querySelector(`[type=checkbox][data-id="${e}"]`);s&&(s.checked=!1)}this.container.open||s.isFilter||this.updateFieldValue(t),this.checkLimits(t)}updateFieldValue(e){const t=this.fields.get(e);if(!t)return;let s=Array.from(this.selectedTerms.get(e));t.ui.value&&(t.ui.value.value=s.join(",")??"",t.ui.value.dispatchEvent(new Event("change",{bubbles:!0})))}checkLimits(e){if(!this.container.open)return;const t=this.fields.get(e);if(!t||!t.isFilter||0===t.limit)return;const s=this.selectedTerms.get(e).size>=t.limit;this.setCheckboxes(s)}updateFieldFromInput(e){const t=this.getFieldId(e);if(!t)return;this.fields.get(t)&&(this.setSelectedFromValue(t,e),this.updateFieldUI(t))}updateFieldUI(e){const t=this.fields.get(e);let s=this.selectedTerms.get(e)??new Set;t&&!t.isFilter&&0!==s.size&&Array.from(s).forEach(t=>{this.addTermToDisplay(t,e)})}updateFieldsForTaxonomy(e){let t=Array.from(this.fields.values()).filter(t=>t.taxonomy===e);const s=Array.from(this.store.data.values()).some(t=>t&&t.taxonomy===e);t.forEach(e=>{e.toggle&&(e.toggle.disabled=!s&&!e.canCreate,e.toggle.title=s?`Select ${e.plural}`:`No ${e.singular} available`,e.checked=!0)})}showModalTerms(e=!1){const t=this.currentField(),s=this.store.getFiltered();if(0===s.length)return(this.store.filters.page??1)&&window.removeChildren(this.ui.terms.list),this.setMessage(t,!0,""===this.store.filters.search?`No matching ${t.plural}.`:`No ${t.plural} found.`,!1),void(this.ui.terms.sentinel&&this.observer.unobserve(this.ui.terms.sentinel));this.setCreateButton(t,!0),this.ui.terms.sentinel&&(this.store.lastResponse?.has_more?this.observer.observe(this.ui.terms.sentinel):this.observer.unobserve(this.ui.terms.sentinel));const i=this.store.filters.parent??0;this.ui.nav.back.hidden=0===i,window.chunkIt(s,t=>this.createTermElement({show:e,...t}),e=>this.ui.terms.list.append(e),10).then(()=>{}),s.length>0&&this.setMessage(t,!1)}createTermElement(e){return e&&e.name?window.jvbTemplates.create("termListItem",e):null}showAutocompleteTerms(){const e=this.currentField();if(!e||!e.hasAutocomplete||!e.ui.dropdown?.list)return;const t=e.ui.dropdown.list,s=this.currentTerms();window.removeChildren(t),0===s.length?this.setMessage(e,!0,`No ${e.plural} found.`,!1):(window.chunkIt(s,e=>this.createAutocompleteTerm(e),e=>t.append(e)).then(()=>{}),this.setMessage(e,!1)),this.setCreateButton(e,!0),e.ui.dropdown.wrapper&&(e.ui.dropdown.wrapper.hidden=!1)}createAutocompleteTerm(e){return window.jvbTemplates.create("autocompleteItem",e)}addTermToDisplay(e,t){const s=this.store.get(e),i=this.fields.get(t);if(!s||!i)return;if(i.ui.selected&&i.ui.selected.querySelector(`[data-id="${e}"]`))return;let r=this.getSelectedTermUI(s);if(i.ui.selected&&i.ui.selected.append(r),this.container.open){this.addTermToModal(e);const t=this.ui.terms.list.querySelector(`input[value="${e}"]`);t&&(t.checked=!0)}}updateBreadcrumbs(e){const t=this.ui.nav.nav;if(!t)return;const s=Array.from(t.children).find(t=>parseInt(t.dataset.id)===e);if(s){let e=s.nextElementSibling;for(;e;){const t=e;e=e.nextElementSibling,t.remove()}}else{const s=this.store.get(e);if(!s)return;const i=window.jvbTemplates.create("termBreadcrumb",s);t.append(i)}}updateSelectionCount(){if(!this.container.open)return;const e=this.fields.get(this.activeField);if(e&&this.ui.modal.count){const t=this.selectedTerms.get(this.activeField).size;this.ui.modal.count.textContent=e.limit>0?`${t} of ${e.limit} ${e.plural} selected`:`${t} ${e.plural} selected`}}checkRendered(e,t){if(e)return Object.hasOwn(e,t.taxonomy)||(e[t.taxonomy]=new Map),e[t.taxonomy].has(t.id)}currentField(){return this.fields.get(this.activeField)??!1}currentTerms(){return this.store.getFiltered()}needsCreator(){return Array.from(this.fields.values()).some(e=>e.canCreate||e.hasAutocomplete)}getFieldId(e){if(e.dataset.fieldId)return e.dataset.fieldId;const t=e.closest("[data-field-id]");return t?.dataset.fieldId||null}setCheckboxes(e){this.ui.terms.list.querySelectorAll("input[type=checkbox]").forEach(t=>{t.checked||(t.disabled=e)})}handleStoreEvent(e,t){const s={"data-loaded":()=>this.handleDataLoaded(),"filters-changed":()=>this.handleFiltersChanged(t),"fetch-error":()=>this.handleFetchError()};try{s[e]?.(t)}catch(t){console.error(`Error handling store event "${e}":`,t)}}handleDataLoaded(){const e=this.store.filters.taxonomy;if(e){e.split(",").map(e=>e.trim()).forEach(e=>this.updateFieldsForTaxonomy(e))}this.container.open?this.showResults():this.activeField&&this.showResults(!0)}showResults(e=!1){const t=this.store.getFiltered(),s=this.store.filters,i=s.search&&s.search.length>0;this.notify("terms-loaded",{terms:t,filters:s}),!this.activeField&&e||(this.setMessage(this.currentField(),!1),e?this.showAutocompleteTerms():this.showModalTerms(i),this.a11y.announce(t.length))}handleFiltersChanged(e){}handleFetchError(e){const t=this.currentField();this.setMessage(t,!0,"Something went wrong.",!1);const s=this.container.open||t?.isFilter?this.ui:t?.ui,i=s?.message?.message;if(i&&!i.querySelector(".clear-cache-btn")){const e=document.createElement("button");e.className="clear-cache-btn",e.type="button",e.textContent="Clear cache and try again",e.addEventListener("click",async()=>{e.remove(),this.store.clearCache(),this.activeField&&t&&await this.store.setFilters({taxonomy:t.taxonomy,page:1,search:"",parent:0})}),i.appendChild(e)}console.error("Store fetch error:",e)}async batchFetchTaxonomies(){if(0===this.batchFetch.size)return;const e=Array.from(this.batchFetch);this.batchFetch.clear();try{await this.store.setFilters({taxonomy:e.join(","),page:1,search:"",parent:0})}catch(e){console.error("Failed to batch fetch taxonomies:",e)}}preloadTaxonomy(e){this.store.setFilters({taxonomy:e,page:1,search:"",parent:0})}setCreateButton(e,t=!0){if(!e.canCreate||!this.creator)return;const s=this.container.open?this.ui:e.ui;if(!s.create?.button||!s.create?.span)return;const i=s.create.button;i.hidden=!t;const r=s.create.span,a=this.container.open?s.search.input:s.search;if(!a)return;let n=(this.currentTerms()??[]).map(e=>e.name),o=a.value;const l=t&&o.length>=2&&!n.includes(o);i.hidden=!l,l&&(r.textContent=a.value??"")}async maybeCreateTerm(e){const t=this.currentField();if(!t)return;window.debouncer.cancel(`${t.id}-search-results`);let s={taxonomy:t.taxonomy,parent:this.store.filters.parent??0};if(this.container.open&&""===this.ui.search.input.value?(s.parent=this.creator.ui.parent.value??s.parent,s.name=this.creator.ui.name.value??!1):s.name=this.container.open?this.ui.search.input.value:t.ui.search.value,void 0!==s.parent&&s.name){this.setMessage(t,!0,`Creating "${s.name}"...`),this.setCreateButton(t,!1),this.container.open?window.removeChildren(this.ui.terms.list):(t.ui.search.disabled=!0,t.ui.dropdown.wrapper&&(t.ui.dropdown.wrapper.hidden=!1));let e=await this.creator.handleTermCreation(s);if(e){if(this.setMessage(t,!0,`"${e.name}" created!`,!1),this.addSelected(e.id,t.id),this.updateFieldValue(t.id),!this.container.open&&t.ui.dropdown.list){window.removeChildren(t.ui.dropdown.list);const s=this.createAutocompleteTerm(e);s&&(s.classList.add("newly-created"),t.ui.dropdown.list.append(s))}this.scheduleHideDropdown(t.id,300),this.setMessage(t,!1)}else this.setMessage(t,!1),!this.container.open&&t.ui.dropdown.wrapper&&(t.ui.dropdown.wrapper.hidden=!0);this.container.open||(t.ui.search.disabled=!1,t.ui.search.value="")}}setMessage(e,t=!0,s="",i=!0){const r=this.container.open||e.isFilter?this.ui:e.isFilter?null:e.ui;if(!r?.message?.message)return;s=""===s?`No ${e.plural??"items"} found.`:s;const a=r.message.message,n=r.message.text;a.hidden=!t,t?s&&n&&(i&&window.typeLoop&&n?(this.messageText[e.id]&&(this.messageText[e.id](),delete this.messageText[e.id]),this.messageText[e.id]=window.typeLoop(n,s)):n.textContent=s):this.messageText[e.id]&&(this.messageText[e.id](),delete this.messageText[e.id])}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}notify(e,t={}){this.subscribers.forEach(s=>{try{s(e,t)}catch(e){console.error("Subscriber error:",e)}})}destroy(){this.fields.forEach((e,t)=>{window.debouncer.cancel(`${t}-search`),window.debouncer.cancel(`${t}-search-results`)}),Object.keys(this.messageText).forEach(e=>{this.messageText[e]&&this.messageText[e]()}),this.messageText={},this.ui.terms?.sentinel&&this.observer?.unobserve(this.ui.terms.sentinel),this.observer?.disconnect(),this.lazyObserver?.disconnect(),document.removeEventListener("click",this.clickHandler),document.removeEventListener("change",this.changeHandler),document.removeEventListener("input",this.inputHandler),document.removeEventListener("focus",this.focusHandler,!0),document.removeEventListener("blur",this.blurHandler,!0),this.subscribers.clear(),this.fields.clear(),this.selectedTerms.clear(),this.batchFetch.clear(),this.creator&&(this.creator.destroy(),this.creator=null),this.store&&(this.store=null)}}document.addEventListener("DOMContentLoaded",function(){window.auth.subscribe(t=>{"auth-loaded"===t&&(window.jvbSelector=new e)})})})();
(()=>{class e{constructor(){this.container=document.querySelector("dialog#jvb-selector"),this.container&&(this.a11y=window.jvbA11y,this.error=window.jvbError,this.subscribers=new Set,this.fields=new Map,this.selectedTerms=new Map,this.batchFetch=new Set,this.activeField=null,this.isInitializing=!0,this.lazyInit=!1,this.messageText={},this.init())}init(){this.initStore(),this.initElements(),this.defineTemplates(),this.initModal(),this.scanExistingFields(),this.initListeners(),this.needsCreator()&&window.jvbTaxCreator&&(this.creator=new window.jvbTaxCreator(this)),this.isInitializing=!1,this.batchFetchTaxonomies().then(()=>{})}initStore(){const e=window.jvbStore.register("taxonomies",{storeName:"terms",keyPath:"id",showLoading:!1,indexes:[{name:"taxonomy",keyPath:"taxonomy"},{name:"parent",keyPath:"parent"},{name:"slug",keyPath:"slug"},{name:"count",keyPath:"count"}],endpoint:"terms",TTL:12e4,filters:{taxonomy:"",page:1,search:"",parent:0},required:"taxonomy",delayFetch:!0});this.store=e.terms,this.store.subscribe(this.handleStoreEvent.bind(this))}defineTemplates(){const e=window.jvbTemplates,t=this;e.define("emptyState"),e.define("selectedTerm",{refs:{name:".item-name",btn:"button"},setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.dataset.taxonomy=i.taxonomy,t.name&&(t.name.textContent=i.path),t.button&&(t.button.title=`Remove ${i.name}`)}}),e.define("termListItem",{refs:{checkbox:"input",label:"label",name:"span, .term-name"},setup({el:e,refs:s,manyRefs:i,data:r}){e.dataset.id=r.id;let a=t.currentField(),n=t.selectedTerms.get(t.activeField).has(r.id),o=a.limit>0&&t.selectedTerms.get(t.activeField).size>=a.limit;if(s.checkbox&&(s.checkbox.dataset.id=r.id,s.checkbox.id=`${a.id}-${r.id}`,s.checkbox.name=`${a.id}-${a.taxonomy}-select`,s.checkbox.value=r.id,s.checkbox.disabled=!n&&o,s.checkbox.checked=n),s.label&&(s.label.htmlFor=`${a.id}-${r.id}`,s.label.title=r.path??r.name,s.label.dataset.path=r.path),s.name&&(s.name.textContent=r.show?r.path:r.name),r.hasChildren){let t={plural:a.plural,name:r.name};const s=window.jvbTemplates.create("termChildrenToggle",t);e.append(s)}}}),e.define("termChildrenToggle",{setup({el:e,refs:t,manyRefs:s,data:i}){e.ariaLabel=`View ${i.plural} nested under ${i.name}`}}),e.define("termBreadcrumb",{setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.textContent=i.name,e.title=i.name}}),e.define("autocompleteItem",{setup({el:e,refs:t,manyRefs:s,data:i}){e.dataset.id=i.id,e.textContent=i.path||i.name,e.title=`Select ${i.name}`}})}initElements(){this.selectors={search:{input:'[type="search"]',clear:".clear-search",container:".search-wrapper",results:".search-results"},create:{button:"button.submit-term",span:".submit-term span"},terms:{list:".items-container",wrap:".items-wrap",sentinel:".scroll-sentinel"},nav:{nav:"nav.term-navigation",back:".back-to-parent",child:".toggle-children",pathLevel:".path-level"},message:{message:"p.message",text:"p.message span"},selected:".selected-items",modal:{title:"#modal-title",content:".modal-content",count:".selection-count"},favourites:".favourite-terms",field:{toggle:'button.selector-toggle, [data-filter="taxonomy"]',value:'input[type="hidden"]',selected:".selected-items",dropdown:{list:".search-results",wrapper:".auto-wrapper"},create:{button:".auto-wrapper .submit-term",span:".auto-wrapper button span"},search:"input[data-autocomplete]",message:{message:"p.message",text:"p.message span"}}},this.ui=window.uiFromSelectors(this.selectors,this.container)}initListeners(){this.observer=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&this.nextPage()})},{root:this.ui.terms.sentinel,threshold:.5}),this.clickHandler=this.handleClick.bind(this),this.changeHandler=this.handleChange.bind(this),this.inputHandler=this.handleInput.bind(this),this.focusHandler=this.handleFocus.bind(this),this.blurHandler=this.handleBlur.bind(this),document.addEventListener("click",this.clickHandler),document.addEventListener("change",this.changeHandler),document.addEventListener("input",this.inputHandler),document.addEventListener("focus",this.focusHandler,!0),document.addEventListener("blur",this.blurHandler,!0)}handleClick(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target)||this.activeField,s=this.fields.get(t);if(!t||!s)return;if(this.creator){window.targetCheck(e,this.selectors.create.button)&&this.maybeCreateTerm(e).then(()=>{})}const i=window.targetCheck(e,".remove-term");if(i){const e=i.closest("[data-id]").dataset.id??!1;return void(t&&e&&this.removeSelected(parseInt(e),t))}const r=window.targetCheck(e,".item.autocomplete");if(r){let e=parseInt(r.dataset.id);return this.addSelected(e,t),this.scheduleHideDropdown(t,6e3),void(s.ui.search&&(s.ui.search.value=""))}if(window.targetCheck(e,this.selectors.field.toggle))return e.preventDefault(),void this.openModal(t);if(e.target.matches(".modal-close"))return this.updateFieldValue(t),void this.modal?.handleClose();if(window.targetCheck(e,this.selectors.nav.back))return void this.navigateToParent();if(window.targetCheck(e,this.selectors.nav.child)){const t=e.target.closest("li"),s=parseInt(t.dataset.id);return void(s&&this.navigateTo(s))}const a=window.targetCheck(e,this.selectors.nav.pathLevel);if(a){const e=parseInt(a.dataset.id)??0;return void this.navigateTo(e)}if(window.targetCheck(e,this.selectors.field.dropdown))return void this.scheduleHideDropdown(t);if(window.targetCheck(e,this.selectors.search.clear)){const e=this.currentField();e&&e.ui.search&&(e.ui.search.value="",this.store.setFilters({search:"",page:1,parent:this.store.filters.parent||0})),this.ui.search.input&&(this.ui.search.input.value="")}}handleChange(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;if(!["checkbox","button"].includes(e.target.type))return;e.preventDefault(),e.stopPropagation();const t=parseInt(e.target.dataset.id);let s=this.getFieldId(e.target);e.target.checked?this.addSelected(t,s):this.removeSelected(t,s)}handleInput(e){if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;let t=this.getFieldId(e.target)??this.activeField;if(!t)return;const s=this.fields.get(t);if(!s)return;if(["checkbox","button"].includes(e.target.type))return;e.preventDefault(),e.stopPropagation(),this.container.open||this.setField(t);let i=e.target.value.trim();this.setMessage(s,!0,`Searching for "${i}" in ${s.plural??"items"}`),window.debouncer.schedule(`${t}-search`,async()=>{this.container.open&&window.removeChildren(this.ui.terms.list),await this.store.setFilters({taxonomy:s.taxonomy,search:i,page:1,parent:i?0:this.store.filters.parent||0})},100)}setField(e){const t=this.fields.get(e);t?(this.activeField=e,this.setMessage(t,!0,`Loading ${t.plural}...`),this.resetFilters({taxonomy:t.taxonomy})):console.error("No field found...")}resetFilters(e){Object.hasOwn(e,"taxonomy")&&(e={page:1,search:"",parent:0,...e},this.store.setFilters(e))}handleFocus(e){if(!Object.hasOwn(e,"target"))return;if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target);if(!t)return;const s=this.fields.get(t);s&&(s.hasAutocomplete||s.hasSearch)&&(window.debouncer.cancel(`${t}-search-results`),this.container.open||this.setField(t))}handleBlur(e){if(!Object.hasOwn(e,"target"))return;if(!this.container.contains(e.target)&&!e.target.closest('[data-type="selector"], [data-field-type="selector"]'))return;const t=this.getFieldId(e.target);if(!t)return;const s=this.fields.get(t);s&&s.hasAutocomplete&&!this.container.open&&(e.target.closest(".remove-item")||e.relatedTarget&&s.ui.dropdown.wrapper?.contains(e.relatedTarget)||this.scheduleHideDropdown(t))}scheduleHideDropdown(e,t=1500){const s=this.fields.get(e);s&&window.debouncer.schedule(`${e}-search-results`,()=>{this.container.open||(this.activeField=null),s.ui.dropdown.wrapper&&(s.ui.dropdown.wrapper.hidden=!0)},t)}initModal(){this.modalID="dialog#jvb-selector",this.container=document.querySelector(this.modalID),this.modal=new window.jvbModal(this.container,{handleForm:!1,open:null}),this.modal.subscribe((e,t)=>{if("modal-close"===e)this.closeModal()})}toggleModal(e,t=!0){this.fields.get(e)&&(t?this.openModal(e):this.closeModal())}openModal(e){const t=this.fields.get(e);if(!t)return;this.setField(e),this.ui.modal.title.textContent=t.isFilter?`Filter by ${t.singular}`:`Select ${t.plural}`,this.ui.search.container&&(this.ui.search.container.hidden=!t.canSearch),this.creator&&this.creator.handleOpen(t);let s=`Opened ${t.singular} selection. Choose from checkboxes, or search to filter results.`;window.removeChildren(this.ui.selected),window.removeChildren(this.ui.terms.list),this.modal.handleOpen(),this.a11y.announce(s)}openEmpty(e,t,s,i){this.emptyCallback=i;const r=`empty-${e}-${Date.now()}`;this.fields.has(r)||(this.fields.set(r,{id:r,taxonomy:e,singular:t,plural:s,canSearch:!0,canCreate:!1,hasAutocomplete:!1,isFilter:!1,isEmpty:!0,limit:0,ui:{},element:null,value:null,toggle:null,checked:!0}),this.selectedTerms.set(r,new Set)),this.setField(r),this.ui.modal.title.textContent=`Add to ${s}`,this.ui.search?.container&&(this.ui.search.container.hidden=!1),window.removeChildren(this.ui.selected),window.removeChildren(this.ui.terms.list),this.modal.handleOpen()}closeModal(){const e=this.fields.get(this.activeField);if(!e)return;if(this.updateFieldValue(this.activeField),this.observer.unobserve(this.ui.terms.sentinel),window.removeChildren(this.ui.terms.list),e.isEmpty&&this.emptyCallback){const t=Array.from(this.selectedTerms.get(this.activeField)||[]),s=t.map(e=>this.store.get(e)).filter(Boolean);this.emptyCallback({taxonomy:e.taxonomy,termIds:t,terms:s}),this.fields.delete(this.activeField),this.selectedTerms.delete(this.activeField),this.emptyCallback=null,this.bulkAssignmentTaxonomy=null}else this.notify("selected-terms",{terms:this.selectedTerms.get(this.activeField),taxonomy:e.taxonomy});this.activeField=null;let t=`Closed ${e.singular} selector.`;this.a11y.announce(t)}navigateToParent(){const e=this.store.filters.parent;if(0===e)return;let t=this.store.get(parseInt(e));if(!t)return void this.navigateTo(0);let s=t.parent;this.navigateTo(parseInt(s))}navigateTo(e=0){e=parseInt(e)??0,this.store.setFilters({parent:e,page:1}),window.removeChildren(this.ui.terms.list),this.updateBreadcrumbs(e)}nextPage(){let e=this.store.filters.page,t=Math.min(e++,this.store.lastResponse.total);this.store.setFilters({page:t})}prevPage(){let e=this.store.filters.page,t=Math.max(e-1,1);this.store.setFilters({page:t})}addTermToModal(e){const t=this.store.get(e);if(!t)return;this.currentField()&&(this.ui.selected.querySelector(`[data-id="${e}"]`)||this.ui.selected.append(this.getSelectedTermUI(t)))}getSelectedTermUI(e,t=!0){return window.jvbTemplates.create("selectedTerm",e)}scanExistingFields(e=document.body){e.querySelectorAll('[data-type="selector"], [data-field-type="selector"]').forEach(e=>{try{e.dataset.lazy?this.lazyInit=!0:this.registerField(e)}catch(t){this.error.log(t,{component:"TaxonomySelector",action:"scanExistingFields",container:e.dataset.name})}}),this.lazyInit&&this.initObserver(e)}unregisterFields(e){e.querySelectorAll('[data-type="selector"],[data-field-type="selector"]').forEach(e=>{this.fields.delete(e.dataset.fieldId)})}initObserver(e){this.lazyObserver=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&e.target.dataset.lazy&&(delete e.target.dataset.lazy,this.registerField(e.target),this.lazyObserver.unobserve(e.target))})},{rootMargin:"50px"}),e.querySelectorAll('[data-type="selector"][data-lazy], [data-field-type="selector"][data-lazy]').forEach(e=>{this.lazyObserver.observe(e)})}registerField(e,t={}){if(e.dataset.fieldId&&this.fields.has(e.dataset.fieldId))return e.dataset.fieldId;let s=e.querySelector('input[type="hidden"]');if(!s&&!Object.hasOwn(e.dataset,"filter"))return;"fieldId"in e.dataset||(e.dataset.fieldId=window.generateID("selector"));const i=e.dataset.fieldId;let r=this.selectors.field;const a=Object.hasOwn(e.dataset,"filter")&&"taxonomy"===e.dataset.filter;let n=a?e:e.querySelector("button.selector-toggle");if(0===Object.keys(t).length){if(!n)return;t={taxonomy:n.dataset.taxonomy,single:n.dataset.single,plural:n.dataset.plural,search:Object.hasOwn(n.dataset,"search"),autocomplete:Object.hasOwn(n.dataset,"autocomplete"),creatable:Object.hasOwn(n.dataset,"creatable")}}else Object.hasOwn(t,"toggle")&&(n=document.querySelector(t.toggle),r.toggle=t.toggle);const o={id:i,value:s,element:e,taxonomy:t.taxonomy??!1,singular:t.single??"",plural:t.plural??"",name:e.dataset.field,canSearch:t.search??!1,limit:t.limit??0,hasAutocomplete:t.autocomplete??!1,canCreate:t.creatable??!1,isRequired:t.required??!1,isFilter:a,toggle:n,create:{button:null,span:null},selectors:r,ui:window.uiFromSelectors(r,e),checked:!1};if(a&&!o.ui.toggle&&(o.ui.toggle=e),o.taxonomy)return o.singular&&o.plural||(console.warn("TaxonomySelector: Field missing singular/plural labels",e),o.singular=o.taxonomy.replace("jvb_",""),o.plural=o.singular+"s"),this.fields.set(i,o),this.setSelectedFromValue(i,s),this.isInitializing&&this.batchFetch.add(o.taxonomy),null!==e.offsetParent?this.updateFieldUI(i):requestIdleCallback(()=>{null!==e.offsetParent&&this.updateFieldUI(i)},{timeout:2e3}),i;console.error("TaxonomySelector: Field missing taxonomy",e)}setSelectedFromValue(e,t){if(!e)return;let s=this.fields.get(e);if(!s)return;if(!t&&!s.isFilter)return;let i=new Set;t&&t.value.trim().split(",").map(e=>parseInt(e.trim())).filter(e=>!isNaN(e)).forEach(e=>i.add(e)),this.selectedTerms.set(e,i)}addSelected(e,t=null){t||(t=this.activeField);const s=this.fields.get(t),i=this.store.get(e);if(!s||!i)return;const r=this.selectedTerms.get(t);0!==s.limit&&r.size>=s.limit||(r.add(parseInt(e)),this.container.open||s.isFilter||this.updateFieldValue(t),this.addTermToDisplay(e,t),this.checkLimits(t))}removeSelected(e,t=null){t||(t=this.activeField);const s=this.fields.get(t),i=this.store.get(e);if(!s||!i)return;this.selectedTerms.get(t).delete(parseInt(e));const r=!!s.ui.selected&&s.ui.selected.querySelector(`[data-id="${e}"]`);if(r&&r.remove(),this.container.open){let t=!!this.ui.selected&&this.ui.selected.querySelector(`[data-id="${e}"]`);t&&t.remove();let s=this.ui.terms.list.querySelector(`[type=checkbox][data-id="${e}"]`);s&&(s.checked=!1)}this.container.open||s.isFilter||this.updateFieldValue(t),this.checkLimits(t)}updateFieldValue(e){const t=this.fields.get(e);if(!t)return;let s=Array.from(this.selectedTerms.get(e));t.ui.value&&(t.ui.value.value=s.join(",")??"",t.ui.value.dispatchEvent(new Event("change",{bubbles:!0})))}checkLimits(e){if(!this.container.open)return;const t=this.fields.get(e);if(!t||!t.isFilter||0===t.limit)return;const s=this.selectedTerms.get(e).size>=t.limit;this.setCheckboxes(s)}updateFieldFromInput(e){const t=this.getFieldId(e);if(!t)return;this.fields.get(t)&&(this.setSelectedFromValue(t,e),this.updateFieldUI(t))}updateFieldUI(e){const t=this.fields.get(e);let s=this.selectedTerms.get(e)??new Set;t&&!t.isFilter&&0!==s.size&&Array.from(s).forEach(t=>{this.addTermToDisplay(t,e)})}updateFieldsForTaxonomy(e){let t=Array.from(this.fields.values()).filter(t=>t.taxonomy===e);const s=Array.from(this.store.data.values()).some(t=>t&&t.taxonomy===e);t.forEach(e=>{e.toggle&&(e.toggle.disabled=!s&&!e.canCreate,e.toggle.title=s?`Select ${e.plural}`:`No ${e.singular} available`,e.checked=!0)})}showModalTerms(e=!1){const t=this.currentField(),s=this.store.getFiltered();if(0===s.length)return(this.store.filters.page??!0)&&window.removeChildren(this.ui.terms.list),this.setMessage(t,!0,""===this.store.filters.search?`No matching ${t.plural}.`:`No ${t.plural} found.`,!1),void(this.ui.terms.sentinel&&this.observer.unobserve(this.ui.terms.sentinel));this.setCreateButton(t,!0),this.ui.terms.sentinel&&(this.store.lastResponse?.has_more?this.observer.observe(this.ui.terms.sentinel):this.observer.unobserve(this.ui.terms.sentinel));const i=this.store.filters.parent??0;this.ui.nav.back.hidden=0===i,window.chunkIt(s,t=>this.createTermElement({show:e,...t}),e=>this.ui.terms.list.append(e),10).then(()=>{}),s.length>0&&this.setMessage(t,!1)}createTermElement(e){return e&&e.name?window.jvbTemplates.create("termListItem",e):null}showAutocompleteTerms(){const e=this.currentField();if(!e||!e.hasAutocomplete||!e.ui.dropdown?.list)return;const t=e.ui.dropdown.list,s=this.currentTerms();window.removeChildren(t),0===s.length?this.setMessage(e,!0,`No ${e.plural} found.`,!1):(window.chunkIt(s,e=>this.createAutocompleteTerm(e),e=>t.append(e)).then(()=>{}),this.setMessage(e,!1)),this.setCreateButton(e,!0),e.ui.dropdown.wrapper&&(e.ui.dropdown.wrapper.hidden=!1)}createAutocompleteTerm(e){return window.jvbTemplates.create("autocompleteItem",e)}addTermToDisplay(e,t){const s=this.store.get(e),i=this.fields.get(t);if(!s||!i)return;if(i.ui.selected&&i.ui.selected.querySelector(`[data-id="${e}"]`))return;let r=this.getSelectedTermUI(s);if(i.ui.selected&&i.ui.selected.append(r),this.container.open){this.addTermToModal(e);const t=this.ui.terms.list.querySelector(`input[value="${e}"]`);t&&(t.checked=!0)}}updateBreadcrumbs(e){const t=this.ui.nav.nav;if(!t)return;const s=Array.from(t.children).find(t=>parseInt(t.dataset.id)===e);if(s){let e=s.nextElementSibling;for(;e;){const t=e;e=e.nextElementSibling,t.remove()}}else{const s=this.store.get(e);if(!s)return;const i=window.jvbTemplates.create("termBreadcrumb",s);t.append(i)}}updateSelectionCount(){if(!this.container.open)return;const e=this.fields.get(this.activeField);if(e&&this.ui.modal.count){const t=this.selectedTerms.get(this.activeField).size;this.ui.modal.count.textContent=e.limit>0?`${t} of ${e.limit} ${e.plural} selected`:`${t} ${e.plural} selected`}}checkRendered(e,t){if(e)return Object.hasOwn(e,t.taxonomy)||(e[t.taxonomy]=new Map),e[t.taxonomy].has(t.id)}currentField(){return this.fields.get(this.activeField)??!1}currentTerms(){return this.store.getFiltered()}needsCreator(){return Array.from(this.fields.values()).some(e=>e.canCreate||e.hasAutocomplete)}getFieldId(e){if(e.dataset.fieldId)return e.dataset.fieldId;const t=e.closest("[data-field-id]");return t?.dataset.fieldId||null}setCheckboxes(e){this.ui.terms.list.querySelectorAll("input[type=checkbox]").forEach(t=>{t.checked||(t.disabled=e)})}handleStoreEvent(e,t){const s={"data-loaded":()=>this.handleDataLoaded(),"filters-changed":()=>this.handleFiltersChanged(t),"fetch-error":()=>this.handleFetchError()};try{s[e]?.(t)}catch(t){console.error(`Error handling store event "${e}":`,t)}}handleDataLoaded(){const e=this.store.filters.taxonomy;if(e){e.split(",").map(e=>e.trim()).forEach(e=>this.updateFieldsForTaxonomy(e))}this.container.open?this.showResults():this.activeField&&this.showResults(!0)}showResults(e=!1){const t=this.store.getFiltered(),s=this.store.filters,i=s.search&&s.search.length>0;this.notify("terms-loaded",{terms:t,filters:s}),!this.activeField&&e||(this.setMessage(this.currentField(),!1),e?this.showAutocompleteTerms():this.showModalTerms(i),this.a11y.announce(t.length))}handleFiltersChanged(e){}handleFetchError(e){const t=this.currentField();this.setMessage(t,!0,"Something went wrong.",!1);const s=this.container.open||t?.isFilter?this.ui:t?.ui,i=s?.message?.message;if(i&&!i.querySelector(".clear-cache-btn")){const e=document.createElement("button");e.className="clear-cache-btn",e.type="button",e.textContent="Clear cache and try again",e.addEventListener("click",async()=>{e.remove(),this.store.clearCache(),this.activeField&&t&&await this.store.setFilters({taxonomy:t.taxonomy,page:1,search:"",parent:0})}),i.appendChild(e)}console.error("Store fetch error:",e)}async batchFetchTaxonomies(){if(0===this.batchFetch.size)return;const e=Array.from(this.batchFetch);this.batchFetch.clear();try{await this.store.setFilters({taxonomy:e.join(","),page:1,search:"",parent:0})}catch(e){console.error("Failed to batch fetch taxonomies:",e)}}preloadTaxonomy(e){this.store.setFilters({taxonomy:e,page:1,search:"",parent:0})}setCreateButton(e,t=!0){if(!e.canCreate||!this.creator)return;const s=this.container.open?this.ui:e.ui;if(!s.create?.button||!s.create?.span)return;const i=s.create.button;i.hidden=!t;const r=s.create.span,a=this.container.open?s.search.input:s.search;if(!a)return;let n=(this.currentTerms()??[]).map(e=>e.name),o=a.value;const l=t&&o.length>=2&&!n.includes(o);i.hidden=!l,l&&(r.textContent=a.value??"")}async maybeCreateTerm(e){const t=this.currentField();if(!t)return;window.debouncer.cancel(`${t.id}-search-results`);let s={taxonomy:t.taxonomy,parent:this.store.filters.parent??0};if(this.container.open&&""===this.ui.search.input.value?(s.parent=this.creator.ui.parent.value??s.parent,s.name=this.creator.ui.name.value??!1):s.name=this.container.open?this.ui.search.input.value:t.ui.search.value,void 0!==s.parent&&s.name){this.setMessage(t,!0,`Creating "${s.name}"...`),this.setCreateButton(t,!1),this.container.open?window.removeChildren(this.ui.terms.list):(t.ui.search.disabled=!0,t.ui.dropdown.wrapper&&(t.ui.dropdown.wrapper.hidden=!1));let e=await this.creator.handleTermCreation(s);if(e){if(this.setMessage(t,!0,`"${e.name}" created!`,!1),this.addSelected(e.id,t.id),this.updateFieldValue(t.id),!this.container.open&&t.ui.dropdown.list){window.removeChildren(t.ui.dropdown.list);const s=this.createAutocompleteTerm(e);s&&(s.classList.add("newly-created"),t.ui.dropdown.list.append(s))}this.scheduleHideDropdown(t.id,300),this.setMessage(t,!1)}else this.setMessage(t,!1),!this.container.open&&t.ui.dropdown.wrapper&&(t.ui.dropdown.wrapper.hidden=!0);this.container.open||(t.ui.search.disabled=!1,t.ui.search.value="")}}setMessage(e,t=!0,s="",i=!0){const r=this.container.open||e.isFilter?this.ui:e.isFilter?null:e.ui;if(!r?.message?.message)return;s=""===s?`No ${e.plural??"items"} found.`:s;const a=r.message.message,n=r.message.text;a.hidden=!t,t?s&&n&&(i&&window.typeLoop&&n?(this.messageText[e.id]&&(this.messageText[e.id](),delete this.messageText[e.id]),this.messageText[e.id]=window.typeLoop(n,s)):n.textContent=s):this.messageText[e.id]&&(this.messageText[e.id](),delete this.messageText[e.id])}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}notify(e,t={}){this.subscribers.forEach(s=>{try{s(e,t)}catch(e){console.error("Subscriber error:",e)}})}destroy(){this.fields.forEach((e,t)=>{window.debouncer.cancel(`${t}-search`),window.debouncer.cancel(`${t}-search-results`)}),Object.keys(this.messageText).forEach(e=>{this.messageText[e]&&this.messageText[e]()}),this.messageText={},this.ui.terms?.sentinel&&this.observer?.unobserve(this.ui.terms.sentinel),this.observer?.disconnect(),this.lazyObserver?.disconnect(),document.removeEventListener("click",this.clickHandler),document.removeEventListener("change",this.changeHandler),document.removeEventListener("input",this.inputHandler),document.removeEventListener("focus",this.focusHandler,!0),document.removeEventListener("blur",this.blurHandler,!0),this.subscribers.clear(),this.fields.clear(),this.selectedTerms.clear(),this.batchFetch.clear(),this.creator&&(this.creator.destroy(),this.creator=null),this.store&&(this.store=null)}}document.addEventListener("DOMContentLoaded",function(){window.auth.subscribe(t=>{"auth-loaded"===t&&(window.jvbSelector=new e)})})})();
base/Options.php
File was renamed from base/options.php
@@ -17,7 +17,7 @@
class Options {
    protected static Options $instance;
    protected static options $instance;
    protected array $resetFields = [];
    protected string $resetInterval = 'daily';
    protected Fields $fields;
@@ -31,7 +31,7 @@
        }
    }
    public static function getInstance():Options {
    public static function getInstance():options {
        if (!isset(self::$instance)) {
            self::$instance = new self();
            do_action('jvb_define_options');
@@ -90,13 +90,13 @@
        return $this->fields;
    }
    public function getConfig(string $fieldName):array
    public function getConfig(string $fieldName):?array
    {
        $allFields = $this->fields->getFields();
        if (array_key_exists($fieldName, $allFields)) {
            return $allFields[$fieldName]->getConfig();
        }
        return [];
        return null;
    }
    public function resetOptions():void
build/_meta/fields.asset.php
New file
@@ -0,0 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-i18n', 'wp-plugins'), 'version' => 'e8150048804582196e08');
build/_meta/fields.js
New file
@@ -0,0 +1 @@
(()=>{"use strict";const e=window.wp.plugins,t=window.wp.i18n,o=window.wp.compose,l=window.wp.data,i=window.wp.editPost,n=window.wp.components,a=window.wp.coreData,s=window.ReactJSXRuntime,d=()=>(0,s.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",fillRule:"evenodd",strokeLinecap:"square",strokeLinejoin:"round",strokeMiterlimit:"1.5",clipRule:"evenodd",viewBox:"0 0 32 32",children:(0,s.jsx)("path",{fill:"currentColor",fillRule:"nonzero",d:"M16.58 2.133c-7.715 0-15.14 6.014-14.547 13.707.561 7.287 6.938 13.185 13.938 13.947 8.25.898 14.47-5.953 14.004-13.988-.447-7.7-5.683-13.666-13.395-13.666m0 .607h.031v26.492q-.285-.017-.574-.048c-6.724-.732-12.86-6.391-13.398-13.391C2.072 8.442 9.209 2.74 16.58 2.74m-.488 1.145L16 3.889c-3.275.13-6.448 1.476-8.744 3.611-2.297 2.135-3.716 5.065-3.463 8.346.492 6.384 6.071 11.538 12.201 12.207l.09.01.021-.182-.091-.01c-6.041-.66-11.555-5.755-12.04-12.04-.247-3.221 1.142-6.092 3.405-8.196s5.4-3.437 8.629-3.565l.092-.004zm0 1.502L16 5.39c-2.868.113-5.647 1.293-7.658 3.164-2.012 1.87-3.255 4.436-3.033 7.31.43 5.593 5.316 10.106 10.685 10.692l.09.01.021-.18-.091-.01c-5.28-.576-10.1-5.031-10.524-10.525-.217-2.815.997-5.325 2.975-7.164 1.978-1.84 4.72-3.004 7.543-3.116l.092-.004zm0 1.504L16 6.893c-2.462.097-4.846 1.111-6.572 2.716-1.727 1.606-2.796 3.808-2.606 6.276.37 4.8 4.564 8.674 9.172 9.177l.09.01.021-.181-.091-.01c-4.52-.494-8.648-4.307-9.01-9.01-.186-2.408.854-4.554 2.547-6.129s4.04-2.57 6.457-2.666l.092-.004zm0 1.502L16 8.396c-2.055.082-4.045.926-5.486 2.266-1.442 1.34-2.335 3.182-2.176 5.244.309 4.009 3.808 7.24 7.656 7.66l.09.01.008-.068v-.002l.002-.01.004-.01v-.02l.007-.072-.091-.01c-3.76-.41-7.193-3.58-7.494-7.491-.155-2.002.709-3.787 2.117-5.096s3.361-2.14 5.37-2.219l.093-.004zm0 1.502L16 9.898a6.95 6.95 0 0 0-4.402 1.819c-1.157 1.075-1.872 2.553-1.744 4.209.247 3.216 3.053 5.81 6.14 6.146l.09.01.021-.182-.091-.01c-2.999-.327-5.739-2.86-5.979-5.978-.123-1.595.564-3.018 1.688-4.062a6.78 6.78 0 0 1 4.285-1.77l.092-.004zm0 1.503L16 11.4a5.24 5.24 0 0 0-3.316 1.372c-.872.81-1.413 1.924-1.317 3.173.187 2.425 2.3 4.377 4.627 4.631l.09.01.021-.182-.091-.01c-2.238-.244-4.286-2.136-4.465-4.462-.092-1.19.421-2.248 1.26-3.028a5.06 5.06 0 0 1 3.199-1.32l.092-.004zm0 1.502-.092.004a3.52 3.52 0 0 0-2.23.92c-.587.546-.952 1.3-.887 2.143.126 1.633 1.545 2.942 3.111 3.113h-.008l.01.002h.01l.078.01.022-.182-.092-.01c-1.477-.16-2.831-1.412-2.95-2.947-.06-.782.277-1.48.83-1.994a3.35 3.35 0 0 1 2.114-.873l.092-.004zm0 1.502-.092.004c-.43.017-.843.192-1.145.473-.301.28-.49.67-.457 1.107.065.841.791 1.512 1.596 1.6l.09.01.021-.182-.091-.01c-.717-.078-1.377-.688-1.434-1.431-.029-.377.132-.712.4-.961.269-.25.644-.409 1.028-.424l.092-.004z",clipRule:"nonzero",overflow:"visible"})}),r=(0,l.withSelect)(e=>({metaFields:e("core/editor").getEditedPostAttribute("meta"),postType:e("core/editor").getCurrentPostType()})),c=(0,l.withDispatch)(e=>({setMetaFields(t){e("core/editor").editPost({meta:t})}})),_=(0,o.compose)([r,c])(({postType:e,metaFields:o,setMetaFields:l})=>{const{content:r,fields:c}=window.jvbFieldConfig||{},[_,w]=(0,a.useEntityProp)("postType",r,"meta");return console.log(c),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.PluginSidebarMoreMenuItem,{target:"metadata-sidebar",icon:(0,s.jsx)(d,{}),children:"Metadata Sidebar"}),(0,s.jsx)(i.PluginSidebar,{name:"metadata-sidebar",icon:(0,s.jsx)(d,{}),title:"Fields",children:(0,s.jsxs)(n.PanelBody,{title:"Book details",initialOpen:!0,children:[(0,s.jsx)(n.PanelRow,{children:(0,s.jsx)(n.TextControl,{value:o._meta_fields_book_title,label:(0,t.__)("Title"),onChange:e=>l({_meta_fields_book_title:e})})}),(0,s.jsx)(n.PanelRow,{children:(0,s.jsx)(n.TextControl,{value:o._meta_fields_book_author,label:(0,t.__)("Author","textdomain"),onChange:e=>l({_meta_fields_book_author:e})})}),(0,s.jsx)(n.PanelRow,{children:(0,s.jsx)(n.TextControl,{value:o._meta_fields_book_publisher,label:(0,t.__)("Publisher","textdomain"),onChange:e=>l({_meta_fields_book_publisher:e})})}),(0,s.jsx)(n.PanelRow,{children:(0,s.jsx)(n.DateTimePicker,{currentDate:o._meta_fields_book_date,onChange:e=>l({_meta_fields_book_date:e}),__nextRemoveHelpButton:!0,__nextRemoveResetButton:!0})})]})})]})});window.wp.editor,(0,e.registerPlugin)("jvb-meta-fields",{render:_})})();
build/drawer-menu/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components'), 'version' => '483555faf4d69fc14935');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components'), 'version' => '34dc9b03d309e175a065');
build/drawer-menu/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,r={582(){const e=window.wp.blocks,r=window.wp.blockEditor,n=window.wp.components,o=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/drawer-menu",{edit:function({attributes:e,setAttributes:t}){const{menuId:l,collapsed:s}=e,i=(0,r.useBlockProps)();return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.InspectorControls,{children:(0,o.jsxs)(n.PanelBody,{title:"Drawer Settings",children:[(0,o.jsx)(n.TextControl,{label:"Menu ID",value:l,onChange:e=>t({menuId:e}),help:"PHP-generated menu identifier"}),(0,o.jsx)(n.ToggleControl,{label:"Start Collapsed",checked:s,onChange:e=>t({collapsed:e})})]})}),(0,o.jsx)("div",{...i,children:(0,o.jsxs)("div",{className:"drawer-menu-preview",children:[(0,o.jsxs)("p",{children:["Drawer Menu: ",l||"Not configured"]}),(0,o.jsxs)("p",{children:["State: ",s?"Collapsed":"Expanded"]})]})})]})},save:function(){return null}})}},n={};function o(e){var t=n[e];if(void 0!==t)return t.exports;var l=n[e]={exports:{}};return r[e](l,l.exports,o),l.exports}o.m=r,e=[],o.O=(r,n,t,l)=>{if(!n){var s=1/0;for(c=0;c<e.length;c++){for(var[n,t,l]=e[c],i=!0,a=0;a<n.length;a++)(!1&l||s>=l)&&Object.keys(o.O).every(e=>o.O[e](n[a]))?n.splice(a--,1):(i=!1,l<s&&(s=l));if(i){e.splice(c--,1);var d=t();void 0!==d&&(r=d)}}return r}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[n,t,l]},o.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),(()=>{var e={121:0,397:0};o.O.j=r=>0===e[r];var r=(r,n)=>{var t,l,[s,i,a]=n,d=0;if(s.some(r=>0!==e[r])){for(t in i)o.o(i,t)&&(o.m[t]=i[t]);if(a)var c=a(o)}for(r&&r(n);d<s.length;d++)l=s[d],o.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return o.O(c)},n=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];n.forEach(r.bind(null,0)),n.push=r.bind(null,n.push.bind(n))})();var t=o.O(void 0,[397],()=>o(582));t=o.O(t)})();
(()=>{"use strict";var e={582(){const e=window.wp.blocks,n=window.wp.blockEditor,t=window.wp.components,r=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/drawer-menu",{edit:function({attributes:e,setAttributes:o}){const{menuId:s,collapsed:l}=e,i=(0,n.useBlockProps)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.InspectorControls,{children:(0,r.jsxs)(t.PanelBody,{title:"Drawer Settings",children:[(0,r.jsx)(t.TextControl,{label:"Menu ID",value:s,onChange:e=>o({menuId:e}),help:"PHP-generated menu identifier"}),(0,r.jsx)(t.ToggleControl,{label:"Start Collapsed",checked:l,onChange:e=>o({collapsed:e})})]})}),(0,r.jsx)("div",{...i,children:(0,r.jsxs)("div",{className:"drawer-menu-preview",children:[(0,r.jsxs)("p",{children:["Drawer Menu: ",s||"Not configured"]}),(0,r.jsxs)("p",{children:["State: ",l?"Collapsed":"Expanded"]})]})})]})},save:function(){return null}})}};const n={};function t(r){const o=n[r];if(void 0!==o)return o.exports;const s=n[r]={exports:{}};return e[r](s,s.exports,t),s.exports}t.m=e,(()=>{const e=[];t.O=(n,r,o,s)=>{if(r){s||=0;for(var l=e.length;l>0&&e[l-1][2]>s;l--)e[l]=e[l-1];return void(e[l]=[r,o,s])}let i=1/0;for(l=0;l<e.length;l++){let[r,o,s]=e[l],d=!0;for(var c=0;c<r.length;c++)1&s&&!(i>=s)||!Object.keys(t.O).every(e=>t.O[e](r[c]))?(d=!1,s<i&&(i=s)):r.splice(c--,1);if(d){e.splice(l--,1);const t=o();void 0!==t&&(n=t)}}return n}})(),t.o=(e,n)=>Object.hasOwn(e,n),(()=>{const e={121:0,397:0};t.O.j=n=>0===e[n];const n=(n,r)=>{let[o,s,l]=r;var i,c,d=0;if(o.some(n=>0!==e[n])){for(i in s)t.o(s,i)&&(t.m[i]=s[i]);if(l)var a=l(t)}for(n&&n(r);d<o.length;d++)c=o[d],t.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return t.O(a)},r=globalThis.webpackChunkjvb||=[];r.forEach(n.bind(null,0)),r.push=n.bind(null,r.push.bind(r))})();let r=t.O(void 0,[397],()=>t(582));r=t.O(r)})();
build/faq/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '4f3282194e1c2db371a3');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '391b77773acaf285cfc2');
build/faq/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,s={604(){const e=window.wp.blocks,s=window.wp.blockEditor,n=window.wp.components,i=window.wp.i18n,o=window.wp.element,t=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/faq",{edit:function({attributes:e,setAttributes:l}){const{sectionOrder:a,showSectionTitles:c,collapseByDefault:r}=e,[d,h]=(0,o.useState)([]),p=window.jvbFaq?.sections||[];(0,o.useEffect)(()=>{if(p.length)if(0===a.length){const e=p.map(e=>({id:e.id,name:e.name}));h(e),l({sectionOrder:e.map(e=>e.id)})}else{const e=[],s=new Set(a);a.forEach(s=>{const n=p.find(e=>e.id===s);n&&e.push({id:n.id,name:n.name})}),p.forEach(n=>{s.has(n.id)||e.push({id:n.id,name:n.name})}),h(e)}},[p,a]);const b=(e,s)=>{const n=[...d],i="up"===s?e-1:e+1;i<0||i>=n.length||([n[e],n[i]]=[n[i],n[e]],h(n),l({sectionOrder:n.map(e=>e.id)}))},v=(0,s.useBlockProps)({className:"faq-block-editor"});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.InspectorControls,{children:[(0,t.jsxs)(n.PanelBody,{title:(0,i.__)("FAQ Settings","jvb"),initialOpen:!0,children:[(0,t.jsx)(n.ToggleControl,{label:(0,i.__)("Show Section Titles","jvb"),checked:c,onChange:e=>l({showSectionTitles:e}),help:(0,i.__)("Display section names as headings","jvb")}),(0,t.jsx)(n.ToggleControl,{label:(0,i.__)("Collapse by Default","jvb"),checked:r,onChange:e=>l({collapseByDefault:e}),help:(0,i.__)("Questions start collapsed and expand on click","jvb")})]}),(0,t.jsxs)(n.PanelBody,{title:(0,i.__)("Section Order","jvb"),initialOpen:!1,children:[(0,t.jsx)("p",{className:"components-base-control__help",children:(0,i.__)("Use the arrow buttons to reorder sections","jvb")}),d.length>0?(0,t.jsx)("div",{className:"faq-section-list",children:d.map((e,s)=>(0,t.jsxs)("div",{className:"faq-section-item",children:[(0,t.jsxs)("div",{className:"faq-section-controls",children:[(0,t.jsx)(n.Button,{icon:"arrow-up-alt2",label:(0,i.__)("Move up","jvb"),disabled:0===s,onClick:()=>b(s,"up"),className:"faq-section-button"}),(0,t.jsx)(n.Button,{icon:"arrow-down-alt2",label:(0,i.__)("Move down","jvb"),disabled:s===d.length-1,onClick:()=>b(s,"down"),className:"faq-section-button"})]}),(0,t.jsx)("span",{className:"faq-section-name",children:e.name})]},e.id))}):(0,t.jsx)(n.Notice,{status:"info",isDismissible:!1,children:(0,i.__)("No sections found. Create sections in the FAQ taxonomy.","jvb")})]})]}),(0,t.jsx)("div",{...v,children:(0,t.jsxs)("div",{className:"faq-block-preview",children:[(0,t.jsx)("h3",{children:(0,i.__)("FAQ Block","jvb")}),(0,t.jsx)("p",{children:(0,i.__)("This block will display FAQs organized by sections.","jvb")}),d.length>0?(0,t.jsxs)("div",{className:"faq-sections-preview",children:[(0,t.jsx)("strong",{children:(0,i.__)("Section Order:","jvb")}),(0,t.jsx)("ol",{children:d.map(e=>(0,t.jsx)("li",{children:e.name},e.id))})]}):(0,t.jsx)(n.Notice,{status:"warning",isDismissible:!1,children:(0,i.__)("No sections available. Create sections in the FAQ taxonomy.","jvb")})]})})]})},save:()=>null})}},n={};function i(e){var o=n[e];if(void 0!==o)return o.exports;var t=n[e]={exports:{}};return s[e](t,t.exports,i),t.exports}i.m=s,e=[],i.O=(s,n,o,t)=>{if(!n){var l=1/0;for(d=0;d<e.length;d++){for(var[n,o,t]=e[d],a=!0,c=0;c<n.length;c++)(!1&t||l>=t)&&Object.keys(i.O).every(e=>i.O[e](n[c]))?n.splice(c--,1):(a=!1,t<l&&(l=t));if(a){e.splice(d--,1);var r=o();void 0!==r&&(s=r)}}return s}t=t||0;for(var d=e.length;d>0&&e[d-1][2]>t;d--)e[d]=e[d-1];e[d]=[n,o,t]},i.o=(e,s)=>Object.prototype.hasOwnProperty.call(e,s),(()=>{var e={456:0,656:0};i.O.j=s=>0===e[s];var s=(s,n)=>{var o,t,[l,a,c]=n,r=0;if(l.some(s=>0!==e[s])){for(o in a)i.o(a,o)&&(i.m[o]=a[o]);if(c)var d=c(i)}for(s&&s(n);r<l.length;r++)t=l[r],i.o(e,t)&&e[t]&&e[t][0](),e[t]=0;return i.O(d)},n=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];n.forEach(s.bind(null,0)),n.push=s.bind(null,n.push.bind(n))})();var o=i.O(void 0,[656],()=>i(604));o=i.O(o)})();
(()=>{"use strict";var e={604(){const e=window.wp.blocks,s=window.wp.blockEditor,n=window.wp.components,i=window.wp.i18n,o=window.wp.element,t=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/faq",{edit:function({attributes:e,setAttributes:l}){const{sectionOrder:a,showSectionTitles:c,collapseByDefault:r}=e,[d,h]=(0,o.useState)([]),p=window.jvbFaq?.sections||[];(0,o.useEffect)(()=>{if(p.length)if(0===a.length){const e=p.map(e=>({id:e.id,name:e.name}));h(e),l({sectionOrder:e.map(e=>e.id)})}else{const e=[],s=new Set(a);a.forEach(s=>{const n=p.find(e=>e.id===s);n&&e.push({id:n.id,name:n.name})}),p.forEach(n=>{s.has(n.id)||e.push({id:n.id,name:n.name})}),h(e)}},[p,a]);const b=(e,s)=>{const n=[...d],i="up"===s?e-1:e+1;i<0||i>=n.length||([n[e],n[i]]=[n[i],n[e]],h(n),l({sectionOrder:n.map(e=>e.id)}))},j=(0,s.useBlockProps)({className:"faq-block-editor"});return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(s.InspectorControls,{children:[(0,t.jsxs)(n.PanelBody,{title:(0,i.__)("FAQ Settings","jvb"),initialOpen:!0,children:[(0,t.jsx)(n.ToggleControl,{label:(0,i.__)("Show Section Titles","jvb"),checked:c,onChange:e=>l({showSectionTitles:e}),help:(0,i.__)("Display section names as headings","jvb")}),(0,t.jsx)(n.ToggleControl,{label:(0,i.__)("Collapse by Default","jvb"),checked:r,onChange:e=>l({collapseByDefault:e}),help:(0,i.__)("Questions start collapsed and expand on click","jvb")})]}),(0,t.jsxs)(n.PanelBody,{title:(0,i.__)("Section Order","jvb"),initialOpen:!1,children:[(0,t.jsx)("p",{className:"components-base-control__help",children:(0,i.__)("Use the arrow buttons to reorder sections","jvb")}),d.length>0?(0,t.jsx)("div",{className:"faq-section-list",children:d.map((e,s)=>(0,t.jsxs)("div",{className:"faq-section-item",children:[(0,t.jsxs)("div",{className:"faq-section-controls",children:[(0,t.jsx)(n.Button,{icon:"arrow-up-alt2",label:(0,i.__)("Move up","jvb"),disabled:0===s,onClick:()=>b(s,"up"),className:"faq-section-button"}),(0,t.jsx)(n.Button,{icon:"arrow-down-alt2",label:(0,i.__)("Move down","jvb"),disabled:s===d.length-1,onClick:()=>b(s,"down"),className:"faq-section-button"})]}),(0,t.jsx)("span",{className:"faq-section-name",children:e.name})]},e.id))}):(0,t.jsx)(n.Notice,{status:"info",isDismissible:!1,children:(0,i.__)("No sections found. Create sections in the FAQ taxonomy.","jvb")})]})]}),(0,t.jsx)("div",{...j,children:(0,t.jsxs)("div",{className:"faq-block-preview",children:[(0,t.jsx)("h3",{children:(0,i.__)("FAQ Block","jvb")}),(0,t.jsx)("p",{children:(0,i.__)("This block will display FAQs organized by sections.","jvb")}),d.length>0?(0,t.jsxs)("div",{className:"faq-sections-preview",children:[(0,t.jsx)("strong",{children:(0,i.__)("Section Order:","jvb")}),(0,t.jsx)("ol",{children:d.map(e=>(0,t.jsx)("li",{children:e.name},e.id))})]}):(0,t.jsx)(n.Notice,{status:"warning",isDismissible:!1,children:(0,i.__)("No sections available. Create sections in the FAQ taxonomy.","jvb")})]})})]})},save:()=>null})}};const s={};function n(i){const o=s[i];if(void 0!==o)return o.exports;const t=s[i]={exports:{}};return e[i](t,t.exports,n),t.exports}n.m=e,(()=>{const e=[];n.O=(s,i,o,t)=>{if(i){t||=0;for(var l=e.length;l>0&&e[l-1][2]>t;l--)e[l]=e[l-1];return void(e[l]=[i,o,t])}let a=1/0;for(l=0;l<e.length;l++){let[i,o,t]=e[l],r=!0;for(var c=0;c<i.length;c++)1&t&&!(a>=t)||!Object.keys(n.O).every(e=>n.O[e](i[c]))?(r=!1,t<a&&(a=t)):i.splice(c--,1);if(r){e.splice(l--,1);const n=o();void 0!==n&&(s=n)}}return s}})(),n.o=(e,s)=>Object.hasOwn(e,s),(()=>{const e={456:0,656:0};n.O.j=s=>0===e[s];const s=(s,i)=>{let[o,t,l]=i;var a,c,r=0;if(o.some(s=>0!==e[s])){for(a in t)n.o(t,a)&&(n.m[a]=t[a]);if(l)var d=l(n)}for(s&&s(i);r<o.length;r++)c=o[r],n.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return n.O(d)},i=globalThis.webpackChunkjvb||=[];i.forEach(s.bind(null,0)),i.push=s.bind(null,i.push.bind(i))})();let i=n.O(void 0,[656],()=>n(604));i=n.O(i)})();
build/faq/style-index-rtl.css
@@ -1 +1 @@
nav#faq{background-color:rgb(var(--base-100));border-radius:var(--radius-outer);display:block;height:-moz-max-content;height:max-content;padding:1.5rem;touch-action:auto}nav#faq ol{counter-reset:faq;display:block;height:-moz-fit-content;height:fit-content;list-style:decimal-leading-zero}nav#faq ol li{counter-increment:faq;width:-moz-max-content;width:max-content}nav#faq ol li:before{content:counter(faq);display:block;font-family:var(--heading);font-weight:var(--fw-h-bold)}nav#faq h2{font-size:var(--txt-large);right:0;margin:.5rem 0}nav#faq a{padding:.5rem}.faq-block{max-width:none;padding-bottom:3rem;width:100%}.faq-block>*{margin:1rem auto;max-width:var(--wide)}.faq-block h2{margin:5rem 0 1.5rem}.faq-block h3{margin:0;text-transform:none}.faq-block :target{background-color:rgb(var(--base));outline:none}.faq-block :target h2{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem 1.5rem}.faq-block details{margin:1rem auto;max-width:var(--content);padding:.75rem}.faq-block details+details{margin-top:3rem}.faq-block details .button{display:flex;height:-moz-fit-content;height:fit-content;margin-right:auto}
nav#faq{background-color:rgb(var(--base-100));border-radius:var(--radius-outer);display:block;height:max-content;padding:1.5rem;touch-action:auto}nav#faq ol{counter-reset:faq;display:block;height:fit-content;list-style:decimal-leading-zero}nav#faq ol li{counter-increment:faq;width:max-content}nav#faq ol li:before{content:counter(faq);display:block;font-family:var(--heading);font-weight:var(--fw-h-bold)}nav#faq h2{font-size:var(--txt-large);right:0;margin:.5rem 0}nav#faq a{padding:.5rem}.faq-block{max-width:none;padding-bottom:3rem;width:100%}.faq-block>*{margin:1rem auto;max-width:var(--wide)}.faq-block h2{margin:5rem 0 1.5rem}.faq-block h3{margin:0;text-transform:none}.faq-block :target{background-color:rgb(var(--base));outline:none}.faq-block :target h2{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem 1.5rem}.faq-block details{margin:1rem auto;max-width:var(--content);padding:.75rem}.faq-block details+details{margin-top:3rem}.faq-block details .button{display:flex;height:fit-content;margin-right:auto}
build/faq/style-index.css
@@ -1 +1 @@
nav#faq{background-color:rgb(var(--base-100));border-radius:var(--radius-outer);display:block;height:-moz-max-content;height:max-content;padding:1.5rem;touch-action:auto}nav#faq ol{counter-reset:faq;display:block;height:-moz-fit-content;height:fit-content;list-style:decimal-leading-zero}nav#faq ol li{counter-increment:faq;width:-moz-max-content;width:max-content}nav#faq ol li:before{content:counter(faq);display:block;font-family:var(--heading);font-weight:var(--fw-h-bold)}nav#faq h2{font-size:var(--txt-large);left:0;margin:.5rem 0}nav#faq a{padding:.5rem}.faq-block{max-width:none;padding-bottom:3rem;width:100%}.faq-block>*{margin:1rem auto;max-width:var(--wide)}.faq-block h2{margin:5rem 0 1.5rem}.faq-block h3{margin:0;text-transform:none}.faq-block :target{background-color:rgb(var(--base));outline:none}.faq-block :target h2{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem 1.5rem}.faq-block details{margin:1rem auto;max-width:var(--content);padding:.75rem}.faq-block details+details{margin-top:3rem}.faq-block details .button{display:flex;height:-moz-fit-content;height:fit-content;margin-left:auto}
nav#faq{background-color:rgb(var(--base-100));border-radius:var(--radius-outer);display:block;height:max-content;padding:1.5rem;touch-action:auto}nav#faq ol{counter-reset:faq;display:block;height:fit-content;list-style:decimal-leading-zero}nav#faq ol li{counter-increment:faq;width:max-content}nav#faq ol li:before{content:counter(faq);display:block;font-family:var(--heading);font-weight:var(--fw-h-bold)}nav#faq h2{font-size:var(--txt-large);left:0;margin:.5rem 0}nav#faq a{padding:.5rem}.faq-block{max-width:none;padding-bottom:3rem;width:100%}.faq-block>*{margin:1rem auto;max-width:var(--wide)}.faq-block h2{margin:5rem 0 1.5rem}.faq-block h3{margin:0;text-transform:none}.faq-block :target{background-color:rgb(var(--base));outline:none}.faq-block :target h2{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem 1.5rem}.faq-block details{margin:1rem auto;max-width:var(--content);padding:.75rem}.faq-block details+details{margin-top:3rem}.faq-block details .button{display:flex;height:fit-content;margin-left:auto}
build/feed/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '33aeda6042c7c1cebcc0');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-api-fetch', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '5203b50cae4c3be20a9c');
build/feed/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,t={111(e,t,n){const o=window.wp.blocks,l=window.wp.element,i=window.wp.blockEditor,r=window.wp.components,s=window.wp.apiFetch;var c=n.n(s);const a=window.wp.i18n,d=window.ReactJSXRuntime;(0,o.registerBlockType)("jvb/feed",{edit:function({attributes:e,setAttributes:t}){const[n,o]=(0,l.useState)(null),[s,h]=(0,l.useState)(!0),[p,j]=(0,l.useState)(null),x=(0,i.useBlockProps)({className:"feed-block-editor"});(0,l.useEffect)(()=>{c()({path:"/jvb/v1/feed/types",headers:{"If-Modified-Since":localStorage.getItem("feed_types_modified")}}).then(n=>{if(o(n),h(!1),!e.contentTypes&&!e.inheritQuery){const e=Object.keys(n)[0];e&&t({contentTypes:[e]})}}).catch(e=>{console.error("Error loading feed types:",e),j(e.message),h(!1)})},[e.inheritQuery]);const y=(n,o)=>{const l=e.contentTypes||[],i=o?[...l,n]:l.filter(e=>e!==n);t({contentTypes:i})},b=(e,t)=>`${t.plural} (${t.type})`,g=n?{content:Object.entries(n).filter(([e,t])=>"content"===t.type),taxonomy:Object.entries(n).filter(([e,t])=>"taxonomy"===t.type)}:{content:[],taxonomy:[]};return(0,d.jsxs)("div",{...x,children:[(0,d.jsxs)(i.InspectorControls,{children:[(0,d.jsxs)(r.PanelBody,{title:(0,a.__)("Feed Settings","jvb"),initialOpen:!0,children:[(0,d.jsx)(r.ToggleControl,{label:(0,a.__)("Inherit from Page Context","jvb"),help:e.inheritQuery?(0,a.__)("Feed will adapt to the current page (profile, taxonomy, etc.)","jvb"):(0,a.__)("Manually select content types to display","jvb"),checked:e.inheritQuery,onChange:e=>t({inheritQuery:e})}),!e.inheritQuery&&(0,d.jsxs)(d.Fragment,{children:[s&&(0,d.jsxs)("div",{style:{textAlign:"center",padding:"20px"},children:[(0,d.jsx)(r.Spinner,{}),(0,d.jsx)("p",{children:(0,a.__)("Loading feed types...","jvb")})]}),p&&(0,d.jsxs)(r.Notice,{status:"error",isDismissible:!1,children:[(0,a.__)("Error loading feed types: ","jvb")," ",p]}),!s&&!p&&n&&(0,d.jsxs)(d.Fragment,{children:[g.content.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("h4",{children:(0,a.__)("Content Types","jvb")}),g.content.map(([t,n])=>(0,d.jsx)(r.CheckboxControl,{label:b(0,n),checked:e.contentTypes?.includes(t)||!1,onChange:e=>y(t,e),help:n.taxonomies?.length>0?`Filters: ${n.taxonomies.join(", ")}`:null},t))]}),g.taxonomy.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("h4",{style:{marginTop:"20px"},children:(0,a.__)("Content Taxonomies","jvb")}),(0,d.jsx)("p",{style:{fontSize:"12px",color:"#757575"},children:(0,a.__)("These are collections that group other content","jvb")}),g.taxonomy.map(([t,n])=>(0,d.jsx)(r.CheckboxControl,{label:b(0,n),checked:e.contentTypes?.includes(t)||!1,onChange:e=>y(t,e),help:n.for_content?.length>0?`Contains: ${n.for_content.join(", ")}`:null},t))]}),!e.contentTypes?.length&&(0,d.jsx)(r.Notice,{status:"warning",isDismissible:!1,children:(0,a.__)("Please select at least one content type","jvb")})]})]})]}),(0,d.jsx)(r.PanelBody,{title:(0,a.__)("Display Settings","jvb"),initialOpen:!1,children:(0,d.jsx)(r.ToggleControl,{label:(0,a.__)("Show Gallery View","jvb"),help:(0,a.__)("Enable lightbox for images","jvb"),checked:e.enableGallery||!1,onChange:e=>t({enableGallery:e})})})]}),(0,d.jsxs)("div",{className:"feed-block-placeholder",children:[(0,d.jsx)("div",{className:"feed-block-icon",children:(0,d.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"13",y:"3",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"3",y:"13",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"13",y:"13",width:"7",height:"7",fill:"currentColor",opacity:"0.3"})]})}),(0,d.jsx)("h3",{children:(0,a.__)("Feed Block","jvb")}),e.inheritQuery?(0,d.jsx)("p",{className:"feed-block-description",children:(0,a.__)("📍 Inheriting from page context","jvb")}):(0,d.jsx)("div",{className:"feed-block-description",children:e.contentTypes?.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("p",{children:(0,d.jsx)("strong",{children:(0,a.__)("Showing:","jvb")})}),(0,d.jsx)("ul",{style:{listStyle:"none",padding:"0",margin:"8px 0"},children:e.contentTypes.map(e=>{const t=n?.[e];return(0,d.jsxs)("li",{style:{padding:"4px 0",color:"#2271b1"},children:["✓ ",t?.plural||e]},e)})})]}):(0,d.jsx)("p",{style:{color:"#d63638"},children:(0,a.__)("⚠️  No content types selected","jvb")})}),(0,d.jsx)("p",{className:"feed-block-note",children:(0,a.__)("Feed will be displayed on the frontend","jvb")})]})]})},save:function(){return null}})}},n={};function o(e){var l=n[e];if(void 0!==l)return l.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.m=t,e=[],o.O=(t,n,l,i)=>{if(!n){var r=1/0;for(d=0;d<e.length;d++){for(var[n,l,i]=e[d],s=!0,c=0;c<n.length;c++)(!1&i||r>=i)&&Object.keys(o.O).every(e=>o.O[e](n[c]))?n.splice(c--,1):(s=!1,i<r&&(r=i));if(s){e.splice(d--,1);var a=l();void 0!==a&&(t=a)}}return t}i=i||0;for(var d=e.length;d>0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,l,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={814:0,138:0};o.O.j=t=>0===e[t];var t=(t,n)=>{var l,i,[r,s,c]=n,a=0;if(r.some(t=>0!==e[t])){for(l in s)o.o(s,l)&&(o.m[l]=s[l]);if(c)var d=c(o)}for(t&&t(n);a<r.length;a++)i=r[a],o.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return o.O(d)},n=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var l=o.O(void 0,[138],()=>o(111));l=o.O(l)})();
(()=>{"use strict";var e={111(e,t,n){const o=window.wp.blocks,l=window.wp.element,i=window.wp.blockEditor,s=window.wp.components,r=window.wp.apiFetch;var c=n.n(r);const a=window.wp.i18n,d=window.ReactJSXRuntime;(0,o.registerBlockType)("jvb/feed",{edit:function({attributes:e,setAttributes:t}){const[n,o]=(0,l.useState)(null),[r,h]=(0,l.useState)(!0),[p,j]=(0,l.useState)(null),x=(0,i.useBlockProps)({className:"feed-block-editor"});(0,l.useEffect)(()=>{c()({path:"/jvb/v1/feed/types",headers:{"If-Modified-Since":localStorage.getItem("feed_types_modified")}}).then(n=>{if(o(n),h(!1),!e.contentTypes&&!e.inheritQuery){const e=Object.keys(n)[0];e&&t({contentTypes:[e]})}}).catch(e=>{console.error("Error loading feed types:",e),j(e.message),h(!1)})},[e.inheritQuery]);const y=(n,o)=>{const l=e.contentTypes||[],i=o?[...l,n]:l.filter(e=>e!==n);t({contentTypes:i})},b=(e,t)=>`${t.plural} (${t.type})`,g=n?{content:Object.entries(n).filter(([e,t])=>"content"===t.type),taxonomy:Object.entries(n).filter(([e,t])=>"taxonomy"===t.type)}:{content:[],taxonomy:[]};return(0,d.jsxs)("div",{...x,children:[(0,d.jsxs)(i.InspectorControls,{children:[(0,d.jsxs)(s.PanelBody,{title:(0,a.__)("Feed Settings","jvb"),initialOpen:!0,children:[(0,d.jsx)(s.ToggleControl,{label:(0,a.__)("Inherit from Page Context","jvb"),help:e.inheritQuery?(0,a.__)("Feed will adapt to the current page (profile, taxonomy, etc.)","jvb"):(0,a.__)("Manually select content types to display","jvb"),checked:e.inheritQuery,onChange:e=>t({inheritQuery:e})}),!e.inheritQuery&&(0,d.jsxs)(d.Fragment,{children:[r&&(0,d.jsxs)("div",{style:{textAlign:"center",padding:"20px"},children:[(0,d.jsx)(s.Spinner,{}),(0,d.jsx)("p",{children:(0,a.__)("Loading feed types...","jvb")})]}),p&&(0,d.jsxs)(s.Notice,{status:"error",isDismissible:!1,children:[(0,a.__)("Error loading feed types: ","jvb")," ",p]}),!r&&!p&&n&&(0,d.jsxs)(d.Fragment,{children:[g.content.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("h4",{children:(0,a.__)("Content Types","jvb")}),g.content.map(([t,n])=>(0,d.jsx)(s.CheckboxControl,{label:b(0,n),checked:e.contentTypes?.includes(t)||!1,onChange:e=>y(t,e),help:n.taxonomies?.length>0?`Filters: ${n.taxonomies.join(", ")}`:null},t))]}),g.taxonomy.length>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("h4",{style:{marginTop:"20px"},children:(0,a.__)("Content Taxonomies","jvb")}),(0,d.jsx)("p",{style:{fontSize:"12px",color:"#757575"},children:(0,a.__)("These are collections that group other content","jvb")}),g.taxonomy.map(([t,n])=>(0,d.jsx)(s.CheckboxControl,{label:b(0,n),checked:e.contentTypes?.includes(t)||!1,onChange:e=>y(t,e),help:n.for_content?.length>0?`Contains: ${n.for_content.join(", ")}`:null},t))]}),!e.contentTypes?.length&&(0,d.jsx)(s.Notice,{status:"warning",isDismissible:!1,children:(0,a.__)("Please select at least one content type","jvb")})]})]})]}),(0,d.jsx)(s.PanelBody,{title:(0,a.__)("Display Settings","jvb"),initialOpen:!1,children:(0,d.jsx)(s.ToggleControl,{label:(0,a.__)("Show Gallery View","jvb"),help:(0,a.__)("Enable lightbox for images","jvb"),checked:e.enableGallery||!1,onChange:e=>t({enableGallery:e})})})]}),(0,d.jsxs)("div",{className:"feed-block-placeholder",children:[(0,d.jsx)("div",{className:"feed-block-icon",children:(0,d.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",children:[(0,d.jsx)("rect",{x:"3",y:"3",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"13",y:"3",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"3",y:"13",width:"7",height:"7",fill:"currentColor",opacity:"0.3"}),(0,d.jsx)("rect",{x:"13",y:"13",width:"7",height:"7",fill:"currentColor",opacity:"0.3"})]})}),(0,d.jsx)("h3",{children:(0,a.__)("Feed Block","jvb")}),e.inheritQuery?(0,d.jsx)("p",{className:"feed-block-description",children:(0,a.__)("📍 Inheriting from page context","jvb")}):(0,d.jsx)("div",{className:"feed-block-description",children:e.contentTypes?.length>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)("p",{children:(0,d.jsx)("strong",{children:(0,a.__)("Showing:","jvb")})}),(0,d.jsx)("ul",{style:{listStyle:"none",padding:"0",margin:"8px 0"},children:e.contentTypes.map(e=>{const t=n?.[e];return(0,d.jsxs)("li",{style:{padding:"4px 0",color:"#2271b1"},children:["✓ ",t?.plural||e]},e)})})]}):(0,d.jsx)("p",{style:{color:"#d63638"},children:(0,a.__)("⚠️  No content types selected","jvb")})}),(0,d.jsx)("p",{className:"feed-block-note",children:(0,a.__)("Feed will be displayed on the frontend","jvb")})]})]})},save:function(){return null}})}};const t={};function n(o){const l=t[o];if(void 0!==l)return l.exports;const i=t[o]={exports:{}};return e[o](i,i.exports,n),i.exports}n.m=e,(()=>{const e=[];n.O=(t,o,l,i)=>{if(o){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[o,l,i])}let r=1/0;for(s=0;s<e.length;s++){let[o,l,i]=e[s],a=!0;for(var c=0;c<o.length;c++)1&i&&!(r>=i)||!Object.keys(n.O).every(e=>n.O[e](o[c]))?(a=!1,i<r&&(r=i)):o.splice(c--,1);if(a){e.splice(s--,1);const n=l();void 0!==n&&(t=n)}}return t}})(),n.n=e=>{const t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={814:0,138:0};n.O.j=t=>0===e[t];const t=(t,o)=>{let[l,i,s]=o;var r,c,a=0;if(l.some(t=>0!==e[t])){for(r in i)n.o(i,r)&&(n.m[r]=i[r]);if(s)var d=s(n)}for(t&&t(o);a<l.length;a++)c=l[a],n.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return n.O(d)},o=globalThis.webpackChunkjvb||=[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();let o=n.O(void 0,[138],()=>n(111));o=n.O(o)})();
build/feed/style-index-rtl.css
@@ -1 +1 @@
.feed-block{grid-column:full}.feed-block .placeholder{align-items:center;aspect-ratio:1;background:rgb(var(--base));border:1rem solid rgb(var(--base-50));border-radius:1rem;display:flex;justify-content:center;--w:50%;color:rgb(var(--base-200))}.feed-block .placeholder i.icon{animation:dance 2.5s ease-in-out infinite}.feed-block .item-grid{max-width:var(--full)}.feed-block .item-grid:has([data-timeline]){grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.feed-block .item{background:rgb(var(--base-50));box-shadow:rgba(var(--base),var(--op-2)) var(--shdw);height:-moz-fit-content;height:fit-content;overflow:hidden;padding:0}.feed-block .item h3{font-size:var(--txt-medium);margin:0}.feed-block .item details{padding:0;position:relative;width:100%;z-index:var(--z-2)}.feed-block .item details summary{backdrop-filter:blur(5px);background-color:rgba(var(--base),var(--op-2));right:0;position:absolute;top:calc(var(--chip_)*-1);width:100%}.feed-block .item details summary:hover{background-color:rgba(var(--action-0),var(--op-45))}.feed-block .item details[open]{padding:.25rem .5rem}.feed-block .item img:hover{opacity:.8}.feed-block .item ul{margin:0}.feed-block .item[data-timeline] .images{aspect-ratio:3/2;padding:0 0 1rem}.feed-block .item[data-timeline] .images span{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));padding:.25rem .5rem;position:absolute;width:50%}.feed-block .item[data-timeline] .images span:first-of-type{bottom:0;left:50%;text-align:left}.feed-block .item[data-timeline] .images span:last-of-type{right:50%;top:0}.feed-block .item[data-timeline] .images img{width:50%}.feed-block .item[data-timeline] .images img:first-of-type{border-left:2px solid rgb(var(--action-0))}.feed-block .item a:after,.feed-block .item a:before{display:none}.feed-block .item label{font-weight:400;text-transform:none;--w:1.5em}.feed-block .all-filters summary{display:flex;justify-content:space-between}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));border-radius:0 0 var(--radius-outer) var(--radius-outer);padding:0}.all-filters summary{width:100%}.all-filters summary:hover,.all-filters[open] summary{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover:after,.all-filters[open] summary:after{background-color:rgb(var(--action-contrast))}.all-filters>.row.row{padding:0 .75rem 2rem;width:var(--content)}.all-filters>.row.row.search{padding-bottom:0}.all-filters>.row.row{position:relative}.all-filters>.row.row>.label,.all-filters>.row.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row.row>.label{width:20%}.all-filters>.row.row>.row>.label{white-space:nowrap}.all-filters .btn+label,.all-filters button{min-height:var(--chipchip);padding:0;width:var(--chipchip)}.all-filters .btn+label .label,.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.all-filters button .label{bottom:-2rem;opacity:0;position:absolute;white-space:nowrap;width:-moz-max-content;width:max-content;z-index:var(--z-4)}.all-filters .btn+label:hover .label,.all-filters .btn:checked+label .label,.all-filters button:hover .label{opacity:1}.all-filters .search.row,.all-filters .view.row{display:none}.all-filters .ordering{padding:2rem 0 .75rem}.all-filters .ordering>.row label{position:unset}.all-filters .ordering .row .label{color:rgb(var(--contrast));top:-1rem}.all-filters .ordering .row.orderby .label{right:0}.all-filters .ordering .row.order-direction .label{left:0}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{padding:0;transform:scaleX(0);transform-origin:right;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base);width:0}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:right;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}.toggle-text input+label{border:1px dashed transparent;color:var(--contrast)!important;cursor:pointer;font-weight:400;padding:.25rem .5rem;position:relative;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toggle-text input+label:after,.toggle-text input+label:before{display:none!important}.toggle-text input+label .text{margin:0;position:relative;--gap:0;border:1px solid rgb(var(--action-50));border-radius:var(--radius);color:rgb(var(--action-50));font-weight:700;padding:2px 4px;width:-moz-fit-content;width:fit-content}.toggle-text input+label .off{--mid:-100%}.toggle-text input+label .on{--mid:100%}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off,.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:translateZ(0)}.toggle-text input+label .on,.toggle-text input:checked+label .off{max-width:0;opacity:0;transform:translate3d(0,var(--mid),0)}.toggle-text:hover label{border-color:rgb(var(--action-200))}.toggle-text:hover .text{background-color:rgb(var(--action-50));border-color:rgb(var(--action-50));color:rgb(var(--action-contrast))}
.feed-block{grid-column:full}.feed-block .placeholder{align-items:center;aspect-ratio:1;background:rgb(var(--base));border:1rem solid rgb(var(--base-50));border-radius:1rem;display:flex;justify-content:center;--w:50%;color:rgb(var(--base-200))}.feed-block .placeholder i.icon{animation:dance 2.5s ease-in-out infinite}.feed-block .item-grid{max-width:var(--full)}.feed-block .item-grid:has([data-timeline]){grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.feed-block .item{background:rgb(var(--base-50));box-shadow:rgba(var(--base),var(--op-2)) var(--shdw);height:fit-content;overflow:hidden;padding:0}.feed-block .item h3{font-size:var(--txt-medium);margin:0}.feed-block .item details{padding:0;position:relative;width:100%;z-index:var(--z-2)}.feed-block .item details summary{backdrop-filter:blur(5px);background-color:rgba(var(--base),var(--op-2));right:0;position:absolute;top:calc(var(--chip_)*-1);width:100%}.feed-block .item details summary:hover{background-color:rgba(var(--action-0),var(--op-45))}.feed-block .item details[open]{padding:.25rem .5rem}.feed-block .item img:hover{opacity:.8}.feed-block .item ul{margin:0}.feed-block .item[data-timeline] .images{aspect-ratio:3/2;padding:0 0 1rem}.feed-block .item[data-timeline] .images span{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));padding:.25rem .5rem;position:absolute;width:50%}.feed-block .item[data-timeline] .images span:first-of-type{bottom:0;left:50%;text-align:left}.feed-block .item[data-timeline] .images span:last-of-type{right:50%;top:0}.feed-block .item[data-timeline] .images img{width:50%}.feed-block .item[data-timeline] .images img:first-of-type{border-left:2px solid rgb(var(--action-0))}.feed-block .item a:after,.feed-block .item a:before{display:none}.feed-block .item label{font-weight:400;text-transform:none;--w:1.5em}.feed-block .all-filters summary{display:flex;justify-content:space-between}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));border-radius:0 0 var(--radius-outer) var(--radius-outer);padding:0}.all-filters summary{width:100%}.all-filters summary:hover,.all-filters[open] summary{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover:after,.all-filters[open] summary:after{background-color:rgb(var(--action-contrast))}.all-filters>.row.row{padding:0 .75rem 2rem;width:var(--content)}.all-filters>.row.row.search{padding-bottom:0}.all-filters>.row.row{position:relative}.all-filters>.row.row>.label,.all-filters>.row.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row.row>.label{width:20%}.all-filters>.row.row>.row>.label{white-space:nowrap}.all-filters .btn+label,.all-filters button{min-height:var(--chipchip);padding:0;width:var(--chipchip)}.all-filters .btn+label .label,.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.all-filters button .label{bottom:-2rem;opacity:0;position:absolute;white-space:nowrap;width:max-content;z-index:var(--z-4)}.all-filters .btn+label:hover .label,.all-filters .btn:checked+label .label,.all-filters button:hover .label{opacity:1}.all-filters .search.row,.all-filters .view.row{display:none}.all-filters .ordering{padding:2rem 0 .75rem}.all-filters .ordering>.row label{position:unset}.all-filters .ordering .row .label{color:rgb(var(--contrast));top:-1rem}.all-filters .ordering .row.orderby .label{right:0}.all-filters .ordering .row.order-direction .label{left:0}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{padding:0;transform:scaleX(0);transform-origin:right;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base);width:0}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:right;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}.toggle-text input+label{border:1px dashed transparent;color:var(--contrast)!important;cursor:pointer;font-weight:400;padding:.25rem .5rem;position:relative;text-transform:none;-webkit-user-select:none;user-select:none}.toggle-text input+label:after,.toggle-text input+label:before{display:none!important}.toggle-text input+label .text{margin:0;position:relative;--gap:0;border:1px solid rgb(var(--action-50));border-radius:var(--radius);color:rgb(var(--action-50));font-weight:700;padding:2px 4px;width:fit-content}.toggle-text input+label .off{--mid:-100%}.toggle-text input+label .on{--mid:100%}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off,.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:translateZ(0)}.toggle-text input+label .on,.toggle-text input:checked+label .off{max-width:0;opacity:0;transform:translate3d(0,var(--mid),0)}.toggle-text:hover label{border-color:rgb(var(--action-200))}.toggle-text:hover .text{background-color:rgb(var(--action-50));border-color:rgb(var(--action-50));color:rgb(var(--action-contrast))}
build/feed/style-index.css
@@ -1 +1 @@
.feed-block{grid-column:full}.feed-block .placeholder{align-items:center;aspect-ratio:1;background:rgb(var(--base));border:1rem solid rgb(var(--base-50));border-radius:1rem;display:flex;justify-content:center;--w:50%;color:rgb(var(--base-200))}.feed-block .placeholder i.icon{animation:dance 2.5s ease-in-out infinite}.feed-block .item-grid{max-width:var(--full)}.feed-block .item-grid:has([data-timeline]){grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.feed-block .item{background:rgb(var(--base-50));box-shadow:rgba(var(--base),var(--op-2)) var(--shdw);height:-moz-fit-content;height:fit-content;overflow:hidden;padding:0}.feed-block .item h3{font-size:var(--txt-medium);margin:0}.feed-block .item details{padding:0;position:relative;width:100%;z-index:var(--z-2)}.feed-block .item details summary{backdrop-filter:blur(5px);background-color:rgba(var(--base),var(--op-2));left:0;position:absolute;top:calc(var(--chip_)*-1);width:100%}.feed-block .item details summary:hover{background-color:rgba(var(--action-0),var(--op-45))}.feed-block .item details[open]{padding:.25rem .5rem}.feed-block .item img:hover{opacity:.8}.feed-block .item ul{margin:0}.feed-block .item[data-timeline] .images{aspect-ratio:3/2;padding:0 0 1rem}.feed-block .item[data-timeline] .images span{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));padding:.25rem .5rem;position:absolute;width:50%}.feed-block .item[data-timeline] .images span:first-of-type{bottom:0;right:50%;text-align:right}.feed-block .item[data-timeline] .images span:last-of-type{left:50%;top:0}.feed-block .item[data-timeline] .images img{width:50%}.feed-block .item[data-timeline] .images img:first-of-type{border-right:2px solid rgb(var(--action-0))}.feed-block .item a:after,.feed-block .item a:before{display:none}.feed-block .item label{font-weight:400;text-transform:none;--w:1.5em}.feed-block .all-filters summary{display:flex;justify-content:space-between}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));border-radius:0 0 var(--radius-outer) var(--radius-outer);padding:0}.all-filters summary{width:100%}.all-filters summary:hover,.all-filters[open] summary{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover:after,.all-filters[open] summary:after{background-color:rgb(var(--action-contrast))}.all-filters>.row.row{padding:0 .75rem 2rem;width:var(--content)}.all-filters>.row.row.search{padding-bottom:0}.all-filters>.row.row{position:relative}.all-filters>.row.row>.label,.all-filters>.row.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row.row>.label{width:20%}.all-filters>.row.row>.row>.label{white-space:nowrap}.all-filters .btn+label,.all-filters button{min-height:var(--chipchip);padding:0;width:var(--chipchip)}.all-filters .btn+label .label,.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.all-filters button .label{bottom:-2rem;opacity:0;position:absolute;white-space:nowrap;width:-moz-max-content;width:max-content;z-index:var(--z-4)}.all-filters .btn+label:hover .label,.all-filters .btn:checked+label .label,.all-filters button:hover .label{opacity:1}.all-filters .search.row,.all-filters .view.row{display:none}.all-filters .ordering{padding:2rem 0 .75rem}.all-filters .ordering>.row label{position:unset}.all-filters .ordering .row .label{color:rgb(var(--contrast));top:-1rem}.all-filters .ordering .row.orderby .label{left:0}.all-filters .ordering .row.order-direction .label{right:0}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{padding:0;transform:scaleX(0);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base);width:0}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}.toggle-text input+label{border:1px dashed transparent;color:var(--contrast)!important;cursor:pointer;font-weight:400;padding:.25rem .5rem;position:relative;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toggle-text input+label:after,.toggle-text input+label:before{display:none!important}.toggle-text input+label .text{margin:0;position:relative;--gap:0;border:1px solid rgb(var(--action-50));border-radius:var(--radius);color:rgb(var(--action-50));font-weight:700;padding:2px 4px;width:-moz-fit-content;width:fit-content}.toggle-text input+label .off{--mid:-100%}.toggle-text input+label .on{--mid:100%}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off,.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:translateZ(0)}.toggle-text input+label .on,.toggle-text input:checked+label .off{max-width:0;opacity:0;transform:translate3d(0,var(--mid),0)}.toggle-text:hover label{border-color:rgb(var(--action-200))}.toggle-text:hover .text{background-color:rgb(var(--action-50));border-color:rgb(var(--action-50));color:rgb(var(--action-contrast))}
.feed-block{grid-column:full}.feed-block .placeholder{align-items:center;aspect-ratio:1;background:rgb(var(--base));border:1rem solid rgb(var(--base-50));border-radius:1rem;display:flex;justify-content:center;--w:50%;color:rgb(var(--base-200))}.feed-block .placeholder i.icon{animation:dance 2.5s ease-in-out infinite}.feed-block .item-grid{max-width:var(--full)}.feed-block .item-grid:has([data-timeline]){grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.feed-block .item{background:rgb(var(--base-50));box-shadow:rgba(var(--base),var(--op-2)) var(--shdw);height:fit-content;overflow:hidden;padding:0}.feed-block .item h3{font-size:var(--txt-medium);margin:0}.feed-block .item details{padding:0;position:relative;width:100%;z-index:var(--z-2)}.feed-block .item details summary{backdrop-filter:blur(5px);background-color:rgba(var(--base),var(--op-2));left:0;position:absolute;top:calc(var(--chip_)*-1);width:100%}.feed-block .item details summary:hover{background-color:rgba(var(--action-0),var(--op-45))}.feed-block .item details[open]{padding:.25rem .5rem}.feed-block .item img:hover{opacity:.8}.feed-block .item ul{margin:0}.feed-block .item[data-timeline] .images{aspect-ratio:3/2;padding:0 0 1rem}.feed-block .item[data-timeline] .images span{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast));padding:.25rem .5rem;position:absolute;width:50%}.feed-block .item[data-timeline] .images span:first-of-type{bottom:0;right:50%;text-align:right}.feed-block .item[data-timeline] .images span:last-of-type{left:50%;top:0}.feed-block .item[data-timeline] .images img{width:50%}.feed-block .item[data-timeline] .images img:first-of-type{border-right:2px solid rgb(var(--action-0))}.feed-block .item a:after,.feed-block .item a:before{display:none}.feed-block .item label{font-weight:400;text-transform:none;--w:1.5em}.feed-block .all-filters summary{display:flex;justify-content:space-between}.all-filters{font-size:var(--txt-x-small)}.all-filters[open]{border:2px solid rgb(var(--action-0));border-radius:0 0 var(--radius-outer) var(--radius-outer);padding:0}.all-filters summary{width:100%}.all-filters summary:hover,.all-filters[open] summary{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.all-filters summary:hover:after,.all-filters[open] summary:after{background-color:rgb(var(--action-contrast))}.all-filters>.row.row{padding:0 .75rem 2rem;width:var(--content)}.all-filters>.row.row.search{padding-bottom:0}.all-filters>.row.row{position:relative}.all-filters>.row.row>.label,.all-filters>.row.row>.row>.label{font-family:var(--heading);font-weight:var(--fw-h-bold);text-transform:uppercase}.all-filters>.row.row>.label{width:20%}.all-filters>.row.row>.row>.label{white-space:nowrap}.all-filters .btn+label,.all-filters button{min-height:var(--chipchip);padding:0;width:var(--chipchip)}.all-filters .btn+label .label,.all-filters .row:has(>.btn:not(:checked)+label:hover) :checked+label .label,.all-filters button .label{bottom:-2rem;opacity:0;position:absolute;white-space:nowrap;width:max-content;z-index:var(--z-4)}.all-filters .btn+label:hover .label,.all-filters .btn:checked+label .label,.all-filters button:hover .label{opacity:1}.all-filters .search.row,.all-filters .view.row{display:none}.all-filters .ordering{padding:2rem 0 .75rem}.all-filters .ordering>.row label{position:unset}.all-filters .ordering .row .label{color:rgb(var(--contrast));top:-1rem}.all-filters .ordering .row.orderby .label{left:0}.all-filters .ordering .row.order-direction .label{right:0}.search-container:not(.open) .clear-search,.search-container:not(.open) input[type=search]{padding:0;transform:scaleX(0);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base);width:0}.search-container button{padding:.5rem}.search-container .icon{--w:1.5rem}.search-container.open .clear-search,.search-container.open input[type=search]{transform:scaleX(1);transform-origin:left;transition:transform var(--trans-base),width var(--trans-base),padding var(--trans-base)}.all-filters>.search,.search-container,input[type=search]{width:100%}.toggle-text input+label{border:1px dashed transparent;color:var(--contrast)!important;cursor:pointer;font-weight:400;padding:.25rem .5rem;position:relative;text-transform:none;-webkit-user-select:none;user-select:none}.toggle-text input+label:after,.toggle-text input+label:before{display:none!important}.toggle-text input+label .text{margin:0;position:relative;--gap:0;border:1px solid rgb(var(--action-50));border-radius:var(--radius);color:rgb(var(--action-50));font-weight:700;padding:2px 4px;width:fit-content}.toggle-text input+label .off{--mid:-100%}.toggle-text input+label .on{--mid:100%}.toggle-text input+label .off,.toggle-text input+label .on{transition:var(--trans-transform),opacity var(--trans-base)}.toggle-text input+label .off,.toggle-text input:checked+label .on{max-width:100%;opacity:1;transform:translateZ(0)}.toggle-text input+label .on,.toggle-text input:checked+label .off{max-width:0;opacity:0;transform:translate3d(0,var(--mid),0)}.toggle-text:hover label{border-color:rgb(var(--action-200))}.toggle-text:hover .text{background-color:rgb(var(--action-50));border-color:rgb(var(--action-50));color:rgb(var(--action-contrast))}
build/feed/view.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array(), 'version' => '94db3c594161e0a1a632');
<?php return array('dependencies' => array(), 'version' => '7e7d1570989c0c348bd7');
build/feed/view.js
@@ -1 +1 @@
(()=>{class e{constructor(){this.container=document.querySelector("section.feed-block"),this.container&&(this.a11y=window.jvbA11y,this.error=window.jvbError,this.cache=new window.jvbCache("feed"),this.templates=window.jvbTemplates,this.isFirstLoad=!0,this.config={contextId:"",context:"",highlight:null,gallery:!1,view:this.cache.get("feedView")||"grid",...this.container.dataset},this.init())}init(){this.initElements(),this.defineTemplates(),this.initListeners(),this.initFilters(),this.initStore(),this.initTaxonomies().then(e=>{}),this.processCachedFilters(),this.processURLFilters(),this.updateFilterUI(),this.initGallery()}initElements(){this.selectors={filterTrigger:"[data-filter]",filters:{actions:".filter-actions .toggle-text",container:".all-filters",showing:".all-filters summary .current",content:'[data-filter="content"]',ordering:".ordering",orderby:'[data-filter="orderby"]',order:'[data-filter="order"]',orderWrap:".order-direction",match:'[data-filter="match"]',favourites:'[data-filter="favourites"]',taxonomy:'[data-filter^="taxonomy"]'},grid:".item-grid",selected:".selected-items",buttons:{loadMore:"button.load-more",remove:".remove-term",clearFilters:"button.clear-filters",refresh:'button[data-action="refresh"]'}},this.ui=window.uiFromSelectors(this.selectors,this.container),this.ui.buttons.refresh=document.querySelector(this.selectors.buttons.refresh),["content","orderby","order","taxonomy"].forEach(e=>{let t=this.ui.filters.container.querySelectorAll(this.selectors.filters[e]);this.ui[e]=Array.from(t)}),this.contentTypes=this.ui.content.length>0?this.ui.content.map(e=>e.value):[this.container.dataset.content],this.taxonomies=this.ui.taxonomies?.length>0?Array.from(this.ui.taxonomies).map(e=>e.dataset.taxonomy):[]}getChecked(e){["content","orderby","order"].includes(e)||console.log("Invalid item to check: ",e);let t=this.ui[e];if(!t)return;let i=t.filter(e=>e.checked);return"content"===e&&i.length>0&&this.updateContentFor(i[0].value),0===i.length?t[0].value:i[0].value}initListeners(){this.popStateHandler=this.handlePopState.bind(this),this.clickHandler=this.handleClick.bind(this),this.changeHandler=this.handleChange.bind(this),window.addEventListener("popstate",this.popStateHandler),document.addEventListener("click",this.clickHandler),document.addEventListener("change",this.changeHandler)}initFilters(){this.allowedFilters=["content","order","orderby","favourites","match"];let e={content:this.getChecked("content"),orderby:this.getChecked("orderby"),order:this.getChecked("order"),page:1};this.config.context&&(e.context=this.config.context),this.config.contextId&&(e.contextId=this.config.contextId),this.filters=e,this.defaults={...e}}updateFilterUI(){if(this.ui.filters.container&&([this.ui.content,this.ui.orderby,this.ui.order].forEach(e=>{if(e)for(let t of e){let[e,i]=[t.dataset.filter,t.value];if(!Object.hasOwn(this.store.filters,e))break;let s=this.store.filters[e]===i;if(s){t.checked=s;break}}}),Object.hasOwn(this.store.filters,"taxonomy")))for(let[e,t]of Object.entries(this.store.filters.taxonomy))t.forEach(e=>{e=parseInt(e),this.selector.store.get(e)&&this.createTermElement(e)})}handlePopState(e){e.state?.filters&&this.processURLFilters()&&(this.store.setFilters(this.filters),this.a11y.announce("Feed filters updated from browser history"))}handleClick(e){window.targetCheck(e,this.selectors.buttons.loadMore)?this.nextPage():window.targetCheck(e,this.selectors.buttons.clearFilters)&&this.clearFilters();let t=window.targetCheck(e,this.selectors.buttons.remove);t&&this.removeSelectedTerm(t),window.targetCheck(e,this.selectors.buttons.refresh)&&(this.store.clearCache(),this.store.fetch());let i=window.targetCheck(e,'[data-filter="orderby"]');i&&"random"===i.value&&i.checked&&this.renderItems()}nextPage(){const e=(this.store.filters.page||1)+1,t=this.store.lastResponse?.pages||e;this.store.setFilters({page:Math.min(e,t)})}handleChange(e){const t=e.target;if(Object.hasOwn(t.dataset,"filter")){if(this.allowedFilters.includes(t.dataset.filter)){let e={};e[t.dataset.filter]=t.value,this.resetFilters(e)}switch(t.dataset.filter){case"content":this.updateContentFor(t.value);break;case"orderby":this.updateOrderOptions(t.value)}}}clearFilters(){this.taxFilters={},window.removeChildren(this.ui.selected),this.taxonomies.forEach(e=>{let t=this.getFieldId(e);this.selector.selectedTerms.get(t)?.clear()}),this.store.setFilters({...this.defaults,taxonomy:null}),this.updateURL(),this.saveToCacheFilters()}resetFilters(e){e={...this.store.filters,page:1,...e},this.store.setFilters(e),this.updateURL(),this.saveToCacheFilters()}getFieldId(e){var t;return this.selector.getFieldId(null!==(t=this.ui.taxonomies.filter(t=>t.dataset.taxonomy===e)[0])&&void 0!==t?t:null)}removeSelectedTerm(e){const t=parseInt(e.dataset.id),i=e.dataset.taxonomy;Object.hasOwn(this.taxFilters,i)&&(this.taxFilters[i]=this.taxFilters[i].filter(e=>e!==t),0===this.taxFilters[i].length&&delete this.taxFilters[i]),e.remove();const s=this.getFieldId(i);s&&(this.selector.activeField=s,this.selector.removeSelected(t,s)),this.resetFilters({taxonomy:Object.keys(this.taxFilters).length>0?this.taxFilters:null})}updateContentFor(e){let t=[this.ui.taxonomies,this.ui.orderby];this.ui.filters.showing.textContent=this.ui.content.filter(t=>t.value===e)[0].dataset.label,t.forEach(t=>{t&&t.forEach(t=>{var i;const s=null!==(i=t.dataset.for?.split(","))&&void 0!==i?i:[];t.hidden=s.length>0&&!s.includes(e),t.hidden&&t.checked&&(t.checked=!1)})})}updateOrderOptions(e){if(this.ui.filters.orderWrap){var t;let i=null!==(t=this.ui.filters.orderWrap.dataset.forOrder.split(","))&&void 0!==t?t:[];this.ui.filters.orderWrap.hidden=!i.includes(e)}}updateFilterControls(){const e=Object.keys(this.taxFilters);this.ui.buttons.clearFilters&&(this.ui.buttons.clearFilters.hidden=0===e.length),this.ui.filters.actions&&(this.ui.filters.actions.hidden=e.length<=1)}async initTaxonomies(){this.taxFilters={},this.selector=window.jvbSelector,this.selector.subscribe((e,t)=>{"selected-terms"===e&&this.handleTaxonomyChange(t)})}handleTaxonomyChange(e){const{terms:t,taxonomy:i}=e;0!==t.size&&(this.taxFilters[i]=Array.from(t),this.resetFilters({taxonomy:this.taxFilters}),t.forEach(e=>{this.createTermElement(e)}),this.updateFilterControls())}getTaxonomyIcon(e){let t=this.ui.taxonomies.find(t=>t.dataset.taxonomy===e);return t?.dataset.icon.trim()||"tag"}createTermElement(e){const t=this.selector.store.get(e);t&&(this.ui.selected.querySelector(`[data-id="${e}"]`)||(t.icon=this.getTaxonomyIcon(t.taxonomy),this.ui.selected.append(this.templates.create("feedTerm",t))))}processCachedFilters(){Object.keys(this.filters).forEach(e=>{let t=this.cache.get(`${this.config.contextId}_${this.config.context}_${e}`);t&&t!==this.filters[e]&&(this.filters[e]=t)})}processURLFilters(){if(!this.isFirstPage())return!1;const e=new URLSearchParams(window.location.search);if(!e.toString())return!1;let t=!1;this.allowedFilters.forEach(i=>{let s=e.get(`f_${i}`);s&&(t=!0,this.filters[i]=s)});let i=!1;return e.forEach((e,s)=>{if(s.startsWith("f_tax_")){i=!0,t=!0;const r=s.replace("f_tax_","");this.taxFilters[r]=e.split(",").map(Number)}}),t&&(i&&(this.filters.taxonomy=this.taxFilters),this.resetFilters(this.filters)),!0}updateURL(){const e=new URLSearchParams;this.allowedFilters.forEach(t=>{Object.hasOwn(this.store.filters,t)&&this.store.filters[t]!==this.defaults[t]&&e.set(`f_${t}`,this.store.filters[t])});for(let[t,i]of Object.entries(this.taxFilters))i.length>0&&e.set(`f_tax_${t}`,i.join(","));const t=`${window.location.pathname}${e.toString()?"?"+e.toString():""}`;t!==window.location.pathname+window.location.search&&window.history.pushState({filters:this.store.filters},"",t)}saveToCacheFilters(){Object.keys(this.store.filters).forEach(e=>{const t=`${this.config.contextId}_${this.config.context}_${e}`;this.store.filters[e]!==this.defaults[e]?this.cache.set(t,this.store.filters[e]):this.cache.remove(t)});const e=`${this.config.contextId}_${this.config.context}_taxonomy`;Object.keys(this.taxFilters).length>0?this.cache.set(e,this.taxFilters):this.cache.remove(e)}initGallery(){this.gallery=!!this.config.gallery&&window.jvbGallery,this.gallery&&this.gallery.subscribe((e,t)=>{"load-more"===e&&this.store.lastResponse?.has_more&&this.nextPage()})}initStore(){let e=this.ui.orderby.filter(e=>!["date","date_modified","title","random"].includes(e.value)),t=[];e.forEach(e=>{t.push({name:e.value,keyPath:e.value})});const i=window.jvbStore.register("feed",{storeName:"feed",endpoint:"feed",keyPath:"id",indexes:[{name:"content",keyPath:"content"},{name:"taxonomy",keyPath:"taxonomy"},{name:"user",keyPath:"user"},{name:"date",keyPath:"date"},{name:"modified",keyPath:"modified"},{name:"title",keyPath:"title"},...t],filters:this.filters,TTL:216e5,showLoading:!0,required:"content"},2);this.store=i.feed,this.store.subscribe((e,t)=>{if("data-loaded"===e){if(this.isFirstLoad)return void(this.isFirstLoad=!1);var i;this.renderItems(t.items),this.ui.buttons.loadMore.hidden=!0,this.store.lastResponse&&this.store.lastResponse?.has_more&&(this.ui.buttons.loadMore.hidden=null===(i=!this.store.lastResponse?.has_more)||void 0===i||i)}})}isFirstPage(){return 1===this.store.filters.page}renderItems(e=null){e=null!=e?e:this.store.getFiltered(),this.isFirstPage()&&window.removeChildren(this.ui.grid),0===e.length?(this.showEmptyState(),this.a11y.announceItems(0,this.isFirstPage())):window.chunkIt(e,e=>this.createItemElement(e),t=>{var i;this.removePlaceholders(),this.ui.grid.append(t),this.config.gallery&&this.gallery.buildGalleryItems(".item img"),this.a11y.makeNavigable(this.ui.grid.querySelectorAll(".item:not([data-keyboard-nav])")),this.a11y.announceItems(e.length,!this.isFirstPage(),null!==(i=this.store.lastResponse?.has_more)&&void 0!==i&&i)},5).then(()=>{}),this.updateFilterControls()}showEmptyState(){window.removeChildren(this.ui.grid),this.ui.grid.append(this.templates.create("emptyState"))}createItemElement(e){if("object"==typeof e||(e=this.store.get(e)))return this.templates.create(`feedItem${window.uppercaseFirst(e.content)}`,e)}splitIDs(e){return String(e).split(",").map(e=>parseInt(e.trim())).filter(e=>e)}isImageField(e,t){return!(!Object.hasOwn(e,"images")||0===Object.keys(e.images).length)&&this.splitIDs(t).some(t=>Object.keys(e.images).map(e=>parseInt(e)).includes(parseInt(t)))}formatImageFields(e,t,i){let s=this.splitIDs(t);if(0!==s.length)if(s.length>1){let t=e.querySelector("img");if(!t)return;s.forEach(s=>{let r=t.cloneNode(!0);this.formatImageField(r,s,i),e.append(r)}),t.remove()}else{if("IMG"!==e.tagName&&!(e=e.querySelector("img")))return;this.formatImageField(e,s[0],i)}}formatImageField(e,t,i){var s;let r=null!==(s=i.images[t])&&void 0!==s&&s;r&&([e.src,e.srcset,e.alt]=[r.tiny,`${r.tiny} 50w, ${r.small} 300w, ${r.medium} 1024w`,r["image-alt-text"]])}isTaxonomyField(e,t){return!(!Object.hasOwn(e,"taxonomies")||0===Object.keys(e.taxonomies).length)&&Object.keys(e.taxonomies).includes(t)}formatTaxonomyField(e,t,i,s){if("UL"!==e.tagName||!e.querySelector("li"))return;let r=this.splitIDs(s);0===r.length&&e.remove();let o=e.querySelector("li");for(let s of r){var a;let r=null!==(a=t.taxonomies[i][s])&&void 0!==a&&a;if(!r)continue;let n=o.cloneNode(!0),l=n.querySelector("a");if(!l)continue;let h=window.decodeHTMLEntities(r.title);[l.href,l.title,l.textContent]=[r.url,`See more ${h}`,h],e.append(n)}o.remove()}isTimeField(e){return"TIME"===e.tagName||null!==e.querySelector("time")}formatTimeField(e,t){("TIME"===e.tagName||(e=e.querySelector("time")))&&(e.setAttribute("datetime",t),e.textContent=window.formatTimeAgo(t,"F Y"))}formatField(e,t){e.textContent=window.decodeHTMLEntities(t)}addTimelineElements(e,t){let[i,s,r,o]=[t.querySelector("span.after-text"),t.querySelector('[data-field="number"] b'),t.querySelector('[data-field="started"] time'),t.querySelector('[data-field="updated"] time')];i&&(i.textContent=`After ${e.number} Tx`),s&&(s.textContent=e.number),r&&this.formatTimeField(r,e.fields.timeline[0].post_date),o&&this.formatTimeField(o,e.fields.timeline[e.fields.timeline.length-1].post_date)}removePlaceholders(){const e=this.ui.grid.querySelectorAll(".placeholder");e.length>0&&e.forEach(e=>e.remove())}defineTemplates(){const e=this.templates,t=this;e.define("feedTerm",{refs:{icon:".icon",span:"span"},setup({el:e,refs:t,manyRefs:i,data:s}){e.dataset.id=s.id,e.dataset.taxonomy=s.taxonomy,t.icon&&(t.icon.className=`icon icon-${s.icon}`),t.span&&(t.span.textContent=window.decodeHTMLEntities(s.name))}}),e.define("emptyState"),this.contentTypes.forEach(i=>{e.define(`feedItem${window.uppercaseFirst(i)}`,{refs:{link:"a"},manyRefs:{fields:"[data-field]"},setup({el:e,refs:i,manyRefs:s,data:r}){const o=Object.hasOwn(e.dataset,"timeline");if(s.fields){for(let e of s.fields){if(o&&["timeline","number"].includes(e.dataset.field))continue;const i=!!Object.hasOwn(r.fields,e.dataset.field)&&r.fields[e.dataset.field];i?t.isImageField(r,i)?t.formatImageField(e,i,r):t.isTaxonomyField(r,e.dataset.field)?t.formatTaxonomyField(e,r,e.dataset.field,i):t.isTimeField(e)?t.formatTimeField(e,i):t.formatField(e,i):e.remove()}var a;i.link&&""!==r.url&&(i.link.href=r.url,i.link.title=`View ${null!==(a=r.fields.post_title)&&void 0!==a?a:"Item"}`),o&&t.addTimelineElements(r,e)}}})})}}document.addEventListener("DOMContentLoaded",async function(){window.auth.subscribe(t=>{"auth-loaded"===t&&(window.feedBlock=new e)})})})();
(()=>{class e{constructor(){this.container=document.querySelector("section.feed-block"),this.container&&(this.a11y=window.jvbA11y,this.error=window.jvbError,this.cache=new window.jvbCache("feed"),this.templates=window.jvbTemplates,this.isFirstLoad=!0,this.config={contextId:"",context:"",highlight:null,gallery:!1,view:this.cache.get("feedView")||"grid",...this.container.dataset},this.init())}init(){this.initElements(),this.defineTemplates(),this.initListeners(),this.initFilters(),this.initStore(),this.initTaxonomies().then(e=>{}),this.processCachedFilters(),this.processURLFilters(),this.updateFilterUI(),this.initGallery()}initElements(){this.selectors={filterTrigger:"[data-filter]",filters:{actions:".filter-actions .toggle-text",container:".all-filters",showing:".all-filters summary .current",content:'[data-filter="content"]',ordering:".ordering",orderby:'[data-filter="orderby"]',order:'[data-filter="order"]',orderWrap:".order-direction",match:'[data-filter="match"]',favourites:'[data-filter="favourites"]',taxonomy:'[data-filter^="taxonomy"]'},grid:".item-grid",selected:".selected-items",buttons:{loadMore:"button.load-more",remove:".remove-term",clearFilters:"button.clear-filters",refresh:'button[data-action="refresh"]'}},this.ui=window.uiFromSelectors(this.selectors,this.container),this.ui.buttons.refresh=document.querySelector(this.selectors.buttons.refresh),["content","orderby","order","taxonomy"].forEach(e=>{let t=this.ui.filters.container.querySelectorAll(this.selectors.filters[e]);this.ui[e]=Array.from(t)}),this.contentTypes=this.ui.content.length>0?this.ui.content.map(e=>e.value):[this.container.dataset.content],this.taxonomies=this.ui.taxonomies?.length>0?Array.from(this.ui.taxonomies).map(e=>e.dataset.taxonomy):[]}getChecked(e){["content","orderby","order"].includes(e)||console.log("Invalid item to check: ",e);let t=this.ui[e];if(!t)return;let i=t.filter(e=>e.checked);return"content"===e&&i.length>0&&this.updateContentFor(i[0].value),0===i.length?t[0].value:i[0].value}initListeners(){this.popStateHandler=this.handlePopState.bind(this),this.clickHandler=this.handleClick.bind(this),this.changeHandler=this.handleChange.bind(this),window.addEventListener("popstate",this.popStateHandler),document.addEventListener("click",this.clickHandler),document.addEventListener("change",this.changeHandler)}initFilters(){this.allowedFilters=["content","order","orderby","favourites","match"];let e={content:this.getChecked("content"),orderby:this.getChecked("orderby"),order:this.getChecked("order"),page:1};this.config.context&&(e.context=this.config.context),this.config.contextId&&(e.contextId=this.config.contextId),this.filters=e,this.defaults={...e}}updateFilterUI(){if(this.ui.filters.container&&([this.ui.content,this.ui.orderby,this.ui.order].forEach(e=>{if(e)for(let t of e){let[e,i]=[t.dataset.filter,t.value];if(!Object.hasOwn(this.store.filters,e))break;let s=this.store.filters[e]===i;if(s){t.checked=s;break}}}),Object.hasOwn(this.store.filters,"taxonomy")))for(let[e,t]of Object.entries(this.store.filters.taxonomy))t.forEach(e=>{e=parseInt(e),this.selector.store.get(e)&&this.createTermElement(e)})}handlePopState(e){e.state?.filters&&this.processURLFilters()&&(this.store.setFilters(this.filters),this.a11y.announce("Feed filters updated from browser history"))}handleClick(e){window.targetCheck(e,this.selectors.buttons.loadMore)?this.nextPage():window.targetCheck(e,this.selectors.buttons.clearFilters)&&this.clearFilters();let t=window.targetCheck(e,this.selectors.buttons.remove);t&&this.removeSelectedTerm(t),window.targetCheck(e,this.selectors.buttons.refresh)&&(this.store.clearCache(),this.store.fetch());let i=window.targetCheck(e,'[data-filter="orderby"]');i&&"random"===i.value&&i.checked&&this.renderItems()}nextPage(){const e=(this.store.filters.page||1)+1,t=this.store.lastResponse?.pages||e;this.store.setFilters({page:Math.min(e,t)})}handleChange(e){const t=e.target;if(Object.hasOwn(t.dataset,"filter")){if(this.allowedFilters.includes(t.dataset.filter)){let e={};e[t.dataset.filter]=t.value,this.resetFilters(e)}switch(t.dataset.filter){case"content":this.updateContentFor(t.value);break;case"orderby":this.updateOrderOptions(t.value)}}}clearFilters(){this.taxFilters={},window.removeChildren(this.ui.selected),this.taxonomies.forEach(e=>{let t=this.getFieldId(e);this.selector.selectedTerms.get(t)?.clear()}),this.store.setFilters({...this.defaults,taxonomy:null}),this.updateURL(),this.saveToCacheFilters()}resetFilters(e){e={...this.store.filters,page:1,...e},this.store.setFilters(e),this.updateURL(),this.saveToCacheFilters()}getFieldId(e){return this.selector.getFieldId(this.ui.taxonomies.filter(t=>t.dataset.taxonomy===e)[0]??null)}removeSelectedTerm(e){const t=parseInt(e.dataset.id),i=e.dataset.taxonomy;Object.hasOwn(this.taxFilters,i)&&(this.taxFilters[i]=this.taxFilters[i].filter(e=>e!==t),0===this.taxFilters[i].length&&delete this.taxFilters[i]),e.remove();const s=this.getFieldId(i);s&&(this.selector.activeField=s,this.selector.removeSelected(t,s)),this.resetFilters({taxonomy:Object.keys(this.taxFilters).length>0?this.taxFilters:null})}updateContentFor(e){let t=[this.ui.taxonomies,this.ui.orderby];this.ui.filters.showing.textContent=this.ui.content.filter(t=>t.value===e)[0].dataset.label,t.forEach(t=>{t&&t.forEach(t=>{const i=t.dataset.for?.split(",")??[];t.hidden=i.length>0&&!i.includes(e),t.hidden&&t.checked&&(t.checked=!1)})})}updateOrderOptions(e){if(this.ui.filters.orderWrap){let t=this.ui.filters.orderWrap.dataset.forOrder.split(",")??[];this.ui.filters.orderWrap.hidden=!t.includes(e)}}updateFilterControls(){const e=Object.keys(this.taxFilters);this.ui.buttons.clearFilters&&(this.ui.buttons.clearFilters.hidden=0===e.length),this.ui.filters.actions&&(this.ui.filters.actions.hidden=e.length<=1)}async initTaxonomies(){this.taxFilters={},this.selector=window.jvbSelector,this.selector.subscribe((e,t)=>{"selected-terms"===e&&this.handleTaxonomyChange(t)})}handleTaxonomyChange(e){const{terms:t,taxonomy:i}=e;0!==t.size&&(this.taxFilters[i]=Array.from(t),this.resetFilters({taxonomy:this.taxFilters}),t.forEach(e=>{this.createTermElement(e)}),this.updateFilterControls())}getTaxonomyIcon(e){let t=this.ui.taxonomies.find(t=>t.dataset.taxonomy===e);return t?.dataset.icon.trim()||"tag"}createTermElement(e){const t=this.selector.store.get(e);t&&(this.ui.selected.querySelector(`[data-id="${e}"]`)||(t.icon=this.getTaxonomyIcon(t.taxonomy),this.ui.selected.append(this.templates.create("feedTerm",t))))}processCachedFilters(){Object.keys(this.filters).forEach(e=>{let t=this.cache.get(`${this.config.contextId}_${this.config.context}_${e}`);t&&t!==this.filters[e]&&(this.filters[e]=t)})}processURLFilters(){if(!this.isFirstPage())return!1;const e=new URLSearchParams(window.location.search);if(!e.toString())return!1;let t=!1;this.allowedFilters.forEach(i=>{let s=e.get(`f_${i}`);s&&(t=!0,this.filters[i]=s)});let i=!1;return e.forEach((e,s)=>{if(s.startsWith("f_tax_")){i=!0,t=!0;const r=s.replace("f_tax_","");this.taxFilters[r]=e.split(",").map(Number)}}),t&&(i&&(this.filters.taxonomy=this.taxFilters),this.resetFilters(this.filters)),!0}updateURL(){const e=new URLSearchParams;this.allowedFilters.forEach(t=>{Object.hasOwn(this.store.filters,t)&&this.store.filters[t]!==this.defaults[t]&&e.set(`f_${t}`,this.store.filters[t])});for(let[t,i]of Object.entries(this.taxFilters))i.length>0&&e.set(`f_tax_${t}`,i.join(","));const t=`${window.location.pathname}${e.toString()?"?"+e.toString():""}`;t!==window.location.pathname+window.location.search&&window.history.pushState({filters:this.store.filters},"",t)}saveToCacheFilters(){Object.keys(this.store.filters).forEach(e=>{const t=`${this.config.contextId}_${this.config.context}_${e}`;this.store.filters[e]!==this.defaults[e]?this.cache.set(t,this.store.filters[e]):this.cache.remove(t)});const e=`${this.config.contextId}_${this.config.context}_taxonomy`;Object.keys(this.taxFilters).length>0?this.cache.set(e,this.taxFilters):this.cache.remove(e)}initGallery(){this.gallery=!!this.config.gallery&&window.jvbGallery,this.gallery&&this.gallery.subscribe((e,t)=>{"load-more"===e&&this.store.lastResponse?.has_more&&this.nextPage()})}initStore(){let e=this.ui.orderby.filter(e=>!["date","date_modified","title","random"].includes(e.value)),t=[];e.forEach(e=>{t.push({name:e.value,keyPath:e.value})});const i=window.jvbStore.register("feed",{storeName:"feed",endpoint:"feed",keyPath:"id",indexes:[{name:"content",keyPath:"content"},{name:"taxonomy",keyPath:"taxonomy"},{name:"user",keyPath:"user"},{name:"date",keyPath:"date"},{name:"modified",keyPath:"modified"},{name:"title",keyPath:"title"},...t],filters:this.filters,TTL:216e5,showLoading:!0,required:"content"},2);this.store=i.feed,this.store.subscribe((e,t)=>{if("data-loaded"===e){if(this.isFirstLoad)return void(this.isFirstLoad=!1);this.renderItems(t.items),this.ui.buttons.loadMore.hidden=!0,this.store.lastResponse&&this.store.lastResponse?.has_more&&(this.ui.buttons.loadMore.hidden=!this.store.lastResponse?.has_more??!0)}})}isFirstPage(){return 1===this.store.filters.page}renderItems(e=null){e=e??this.store.getFiltered(),this.isFirstPage()&&window.removeChildren(this.ui.grid),0===e.length?(this.showEmptyState(),this.a11y.announceItems(0,this.isFirstPage())):window.chunkIt(e,e=>this.createItemElement(e),t=>{this.removePlaceholders(),this.ui.grid.append(t),this.config.gallery&&this.gallery.buildGalleryItems(".item img"),this.a11y.makeNavigable(this.ui.grid.querySelectorAll(".item:not([data-keyboard-nav])")),this.a11y.announceItems(e.length,!this.isFirstPage(),this.store.lastResponse?.has_more??!1)},5).then(()=>{}),this.updateFilterControls()}showEmptyState(){window.removeChildren(this.ui.grid),this.ui.grid.append(this.templates.create("emptyState"))}createItemElement(e){if("object"==typeof e||(e=this.store.get(e)))return this.templates.create(`feedItem${window.uppercaseFirst(e.content)}`,e)}splitIDs(e){return String(e).split(",").map(e=>parseInt(e.trim())).filter(e=>e)}isImageField(e,t){return!(!Object.hasOwn(e,"images")||0===Object.keys(e.images).length)&&this.splitIDs(t).some(t=>Object.keys(e.images).map(e=>parseInt(e)).includes(parseInt(t)))}formatImageFields(e,t,i){let s=this.splitIDs(t);if(0!==s.length)if(s.length>1){let t=e.querySelector("img");if(!t)return;s.forEach(s=>{let r=t.cloneNode(!0);this.formatImageField(r,s,i),e.append(r)}),t.remove()}else{if("IMG"!==e.tagName&&!(e=e.querySelector("img")))return;this.formatImageField(e,s[0],i)}}formatImageField(e,t,i){let s=i.images[t]??!1;s&&([e.src,e.srcset,e.alt]=[s.tiny,`${s.tiny} 50w, ${s.small} 300w, ${s.medium} 1024w`,s["image-alt-text"]])}isTaxonomyField(e,t){return!(!Object.hasOwn(e,"taxonomies")||0===Object.keys(e.taxonomies).length)&&Object.keys(e.taxonomies).includes(t)}formatTaxonomyField(e,t,i,s){if("UL"!==e.tagName||!e.querySelector("li"))return;let r=this.splitIDs(s);0===r.length&&e.remove();let o=e.querySelector("li");for(let s of r){let r=t.taxonomies[i][s]??!1;if(!r)continue;let a=o.cloneNode(!0),n=a.querySelector("a");if(!n)continue;let l=window.decodeHTMLEntities(r.title);[n.href,n.title,n.textContent]=[r.url,`See more ${l}`,l],e.append(a)}o.remove()}isTimeField(e){return"TIME"===e.tagName||null!==e.querySelector("time")}formatTimeField(e,t){("TIME"===e.tagName||(e=e.querySelector("time")))&&(e.setAttribute("datetime",t),e.textContent=window.formatTimeAgo(t,"F Y"))}formatField(e,t){e.textContent=window.decodeHTMLEntities(t)}addTimelineElements(e,t){let[i,s,r,o]=[t.querySelector("span.after-text"),t.querySelector('[data-field="number"] b'),t.querySelector('[data-field="started"] time'),t.querySelector('[data-field="updated"] time')];i&&(i.textContent=`After ${e.number} Tx`),s&&(s.textContent=e.number),r&&this.formatTimeField(r,e.fields.timeline[0].post_date),o&&this.formatTimeField(o,e.fields.timeline[e.fields.timeline.length-1].post_date)}removePlaceholders(){const e=this.ui.grid.querySelectorAll(".placeholder");e.length>0&&e.forEach(e=>e.remove())}defineTemplates(){const e=this.templates,t=this;e.define("feedTerm",{refs:{icon:".icon",span:"span"},setup({el:e,refs:t,manyRefs:i,data:s}){e.dataset.id=s.id,e.dataset.taxonomy=s.taxonomy,t.icon&&(t.icon.className=`icon icon-${s.icon}`),t.span&&(t.span.textContent=window.decodeHTMLEntities(s.name))}}),e.define("emptyState"),this.contentTypes.forEach(i=>{e.define(`feedItem${window.uppercaseFirst(i)}`,{refs:{link:"a"},manyRefs:{fields:"[data-field]"},setup({el:e,refs:i,manyRefs:s,data:r}){const o=Object.hasOwn(e.dataset,"timeline");if(s.fields){for(let e of s.fields){if(o&&["timeline","number"].includes(e.dataset.field))continue;const i=!!Object.hasOwn(r.fields,e.dataset.field)&&r.fields[e.dataset.field];i?t.isImageField(r,i)?t.formatImageField(e,i,r):t.isTaxonomyField(r,e.dataset.field)?t.formatTaxonomyField(e,r,e.dataset.field,i):t.isTimeField(e)?t.formatTimeField(e,i):t.formatField(e,i):e.remove()}i.link&&""!==r.url&&(i.link.href=r.url,i.link.title=`View ${r.fields.post_title??"Item"}`),o&&t.addTimelineElements(r,e)}}})})}}document.addEventListener("DOMContentLoaded",async function(){window.auth.subscribe(t=>{"auth-loaded"===t&&(window.feedBlock=new e)})})})();
build/forms/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => '0627d4138bd3642db1b4');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-element', 'wp-i18n'), 'version' => 'f935142169964b177418');
build/forms/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,l={677(){const e=window.wp.blocks,l=window.wp.i18n,a=window.wp.blockEditor,t=window.wp.components,i=window.wp.element,s=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/forms",{edit:function({attributes:e,setAttributes:r}){const{formType:o,showLabels:b,customEmailTo:n,turnstileEnabled:d}=e,[v,c]=(0,i.useState)(!0),j=(0,a.useBlockProps)({className:"jvb-form-block "+(o?`jvb-form-block-${o}`:"")}),p="undefined"!=typeof window&&window.jvbFormsData&&window.jvbFormsData.formTypes?window.jvbFormsData.formTypes:[{label:(0,l.__)("Select a form type","jvb"),value:""},{label:(0,l.__)("No forms available","jvb"),value:"",disabled:!0}],u=(console.log(window.jvbFormsData),"undefined"!=typeof window&&window.jvbFormsData&&window.jvbFormsData.availableForms?window.jvbFormsData.availableForms:{}),m=(()=>{const e=o&&u[o]?u[o]:null;return e?{title:e.title||(0,l.__)("Form","jvb"),description:Array.isArray(e.description)?e.description.join(" "):e.description||"",button:e.submit||(0,l.__)("Submit","jvb")}:{title:(0,l.__)("Form","jvb"),description:o?(0,l.__)("Loading form configuration...","jvb"):(0,l.__)("Please select a form type in the sidebar","jvb"),button:(0,l.__)("Submit","jvb")}})();return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(a.InspectorControls,{children:[(0,s.jsxs)(t.PanelBody,{title:(0,l.__)("Form Settings","jvb"),children:[(0,s.jsx)(t.SelectControl,{label:(0,l.__)("Form Type","jvb"),value:o,options:p,onChange:e=>r({formType:e})}),(0,s.jsx)(t.ToggleControl,{label:(0,l.__)("Show Field Labels","jvb"),checked:b,onChange:e=>r({showLabels:e}),help:(0,l.__)("Toggle to show or hide field labels.","jvb")}),(0,s.jsx)(t.TextControl,{label:(0,l.__)("Custom Recipient Email","jvb"),value:n||"",onChange:e=>r({customEmailTo:e}),help:(0,l.__)("Leave empty to use the default email.","jvb"),type:"email"})]}),(0,s.jsxs)(t.PanelBody,{title:(0,l.__)("Form Preview","jvb"),initialOpen:!1,children:[(0,s.jsx)(t.ToggleControl,{label:(0,l.__)("Show Preview","jvb"),checked:v,onChange:e=>c(e)}),(0,s.jsx)("p",{className:"components-base-control__help",children:(0,l.__)("This is just a preview. The actual form will be rendered on the frontend.","jvb")})]})]}),(0,s.jsx)("div",{...j,children:v?(()=>{if(!o)return(0,s.jsx)(t.Notice,{status:"warning",isDismissible:!1,children:(0,l.__)("Please select a form type in the block settings.","jvb")});let e=[];switch(o){case"contact":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text",required:!0},{id:"email",label:(0,l.__)("Email","jvb"),type:"email",required:!0},{id:"phone",label:(0,l.__)("Phone","jvb"),type:"tel",required:!0},{id:"instagram",label:(0,l.__)("Instagram URL","jvb"),type:"url"},{id:"contact_methods",label:(0,l.__)("Preferred Contact","jvb"),type:"checkboxes",options:[{value:"text",label:(0,l.__)("Text","jvb")},{value:"call",label:(0,l.__)("Call","jvb")},{value:"email",label:(0,l.__)("Email","jvb")},{value:"instagram",label:(0,l.__)("Instagram","jvb")}]},{id:"message",label:(0,l.__)("Your Message","jvb"),type:"textarea",required:!0}];break;case"feature_request":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text",help:(0,l.__)("Required if you want us to follow up.","jvb")},{id:"email",label:(0,l.__)("Email","jvb"),type:"email",help:(0,l.__)("Required if you want us to follow up.","jvb")},{id:"follow_up",label:(0,l.__)("Would you like me to follow up with you?","jvb"),type:"checkbox"},{id:"target_audience",label:(0,l.__)("This Feature is For","jvb"),type:"checkboxes",options:[{value:"artists",label:(0,l.__)("Artists","jvb")},{value:"visitors",label:(0,l.__)("Site Visitors","jvb")},{value:"partners",label:(0,l.__)("Partners","jvb")},{value:"other",label:(0,l.__)("Other","jvb")}]},{id:"feature_name",label:(0,l.__)("Name your Feature","jvb"),type:"text",required:!0},{id:"message",label:(0,l.__)("Describe Your Feature","jvb"),type:"textarea",required:!0}];break;case"technical_issue":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text"},{id:"email",label:(0,l.__)("Email","jvb"),type:"email"},{id:"follow_up",label:(0,l.__)("Would you like me to follow up with you?","jvb"),type:"checkbox"},{id:"issue_type",label:(0,l.__)("Type of Issue","jvb"),type:"checkboxes",options:[{value:"visual",label:(0,l.__)("Visual","jvb")},{value:"error",label:(0,l.__)("Error Page","jvb")},{value:"other",label:(0,l.__)("Other","jvb")}]},{id:"message",label:(0,l.__)("Please describe the issue.","jvb"),type:"textarea",required:!0}]}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("h3",{className:"jvb-form-title",children:m.title}),(0,s.jsx)("p",{className:"jvb-form-description",children:m.description}),(0,s.jsxs)("div",{className:"jvb-form-preview",children:[e.map(e=>(0,s.jsxs)("div",{className:"jvb-form-field",children:[b&&(0,s.jsx)("label",{htmlFor:`jvb-${e.id}`,className:e.required?"required":"",children:e.label}),"text"===e.type&&(0,s.jsx)("input",{type:"text",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"email"===e.type&&(0,s.jsx)("input",{type:"email",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"tel"===e.type&&(0,s.jsx)("input",{type:"tel",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"url"===e.type&&(0,s.jsx)("input",{type:"url",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"textarea"===e.type&&(0,s.jsx)("textarea",{id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0,rows:"4"}),"checkbox"===e.type&&(0,s.jsxs)("div",{className:"jvb-form-checkbox",children:[(0,s.jsx)("input",{type:"checkbox",id:`jvb-${e.id}`,disabled:!0}),(0,s.jsx)("label",{htmlFor:`jvb-${e.id}`,children:e.label})]}),"checkboxes"===e.type&&e.options&&(0,s.jsx)("div",{className:"jvb-form-checkboxes",children:e.options.map(l=>(0,s.jsxs)("div",{className:"jvb-form-checkbox",children:[(0,s.jsx)("input",{type:"checkbox",id:`jvb-${e.id}-${l.value}`,disabled:!0}),(0,s.jsx)("label",{htmlFor:`jvb-${e.id}-${l.value}`,children:l.label})]},l.value))}),e.help&&(0,s.jsx)("p",{className:"jvb-form-help",children:e.help})]},e.id)),d&&(0,s.jsx)("div",{className:"jvb-form-turnstile",children:(0,s.jsx)("div",{className:"jvb-turnstile-placeholder",children:(0,s.jsx)("span",{children:(0,l.__)("Cloudflare Turnstile will appear here","jvb")})})}),(0,s.jsx)("div",{className:"jvb-form-submit",children:(0,s.jsx)("button",{type:"button",className:"jvb-form-button",children:m.button})})]})]})})():(0,s.jsxs)("div",{className:"jvb-form-placeholder",children:[(0,s.jsx)("h3",{children:m.title}),(0,s.jsx)("p",{children:(0,l.__)("Form preview is hidden. Edit settings in the sidebar.","jvb")})]})})]})},save:function(){return null}})}},a={};function t(e){var i=a[e];if(void 0!==i)return i.exports;var s=a[e]={exports:{}};return l[e](s,s.exports,t),s.exports}t.m=l,e=[],t.O=(l,a,i,s)=>{if(!a){var r=1/0;for(d=0;d<e.length;d++){for(var[a,i,s]=e[d],o=!0,b=0;b<a.length;b++)(!1&s||r>=s)&&Object.keys(t.O).every(e=>t.O[e](a[b]))?a.splice(b--,1):(o=!1,s<r&&(r=s));if(o){e.splice(d--,1);var n=i();void 0!==n&&(l=n)}}return l}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[a,i,s]},t.o=(e,l)=>Object.prototype.hasOwnProperty.call(e,l),(()=>{var e={637:0,705:0};t.O.j=l=>0===e[l];var l=(l,a)=>{var i,s,[r,o,b]=a,n=0;if(r.some(l=>0!==e[l])){for(i in o)t.o(o,i)&&(t.m[i]=o[i]);if(b)var d=b(t)}for(l&&l(a);n<r.length;n++)s=r[n],t.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return t.O(d)},a=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];a.forEach(l.bind(null,0)),a.push=l.bind(null,a.push.bind(a))})();var i=t.O(void 0,[705],()=>t(677));i=t.O(i)})();
(()=>{"use strict";var e={677(){const e=window.wp.blocks,l=window.wp.i18n,t=window.wp.blockEditor,i=window.wp.components,a=window.wp.element,s=window.ReactJSXRuntime;(0,e.registerBlockType)("jvb/forms",{edit:function({attributes:e,setAttributes:o}){const{formType:r,showLabels:b,customEmailTo:n,turnstileEnabled:d}=e,[c,v]=(0,a.useState)(!0),j=(0,t.useBlockProps)({className:"jvb-form-block "+(r?`jvb-form-block-${r}`:"")}),u="undefined"!=typeof window&&window.jvbFormsData&&window.jvbFormsData.formTypes?window.jvbFormsData.formTypes:[{label:(0,l.__)("Select a form type","jvb"),value:""},{label:(0,l.__)("No forms available","jvb"),value:"",disabled:!0}],p=(console.log(window.jvbFormsData),"undefined"!=typeof window&&window.jvbFormsData&&window.jvbFormsData.availableForms?window.jvbFormsData.availableForms:{}),m=(()=>{const e=r&&p[r]?p[r]:null;return e?{title:e.title||(0,l.__)("Form","jvb"),description:Array.isArray(e.description)?e.description.join(" "):e.description||"",button:e.submit||(0,l.__)("Submit","jvb")}:{title:(0,l.__)("Form","jvb"),description:r?(0,l.__)("Loading form configuration...","jvb"):(0,l.__)("Please select a form type in the sidebar","jvb"),button:(0,l.__)("Submit","jvb")}})();return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(t.InspectorControls,{children:[(0,s.jsxs)(i.PanelBody,{title:(0,l.__)("Form Settings","jvb"),children:[(0,s.jsx)(i.SelectControl,{label:(0,l.__)("Form Type","jvb"),value:r,options:u,onChange:e=>o({formType:e})}),(0,s.jsx)(i.ToggleControl,{label:(0,l.__)("Show Field Labels","jvb"),checked:b,onChange:e=>o({showLabels:e}),help:(0,l.__)("Toggle to show or hide field labels.","jvb")}),(0,s.jsx)(i.TextControl,{label:(0,l.__)("Custom Recipient Email","jvb"),value:n||"",onChange:e=>o({customEmailTo:e}),help:(0,l.__)("Leave empty to use the default email.","jvb"),type:"email"})]}),(0,s.jsxs)(i.PanelBody,{title:(0,l.__)("Form Preview","jvb"),initialOpen:!1,children:[(0,s.jsx)(i.ToggleControl,{label:(0,l.__)("Show Preview","jvb"),checked:c,onChange:e=>v(e)}),(0,s.jsx)("p",{className:"components-base-control__help",children:(0,l.__)("This is just a preview. The actual form will be rendered on the frontend.","jvb")})]})]}),(0,s.jsx)("div",{...j,children:c?(()=>{if(!r)return(0,s.jsx)(i.Notice,{status:"warning",isDismissible:!1,children:(0,l.__)("Please select a form type in the block settings.","jvb")});let e=[];switch(r){case"contact":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text",required:!0},{id:"email",label:(0,l.__)("Email","jvb"),type:"email",required:!0},{id:"phone",label:(0,l.__)("Phone","jvb"),type:"tel",required:!0},{id:"instagram",label:(0,l.__)("Instagram URL","jvb"),type:"url"},{id:"contact_methods",label:(0,l.__)("Preferred Contact","jvb"),type:"checkboxes",options:[{value:"text",label:(0,l.__)("Text","jvb")},{value:"call",label:(0,l.__)("Call","jvb")},{value:"email",label:(0,l.__)("Email","jvb")},{value:"instagram",label:(0,l.__)("Instagram","jvb")}]},{id:"message",label:(0,l.__)("Your Message","jvb"),type:"textarea",required:!0}];break;case"feature_request":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text",help:(0,l.__)("Required if you want us to follow up.","jvb")},{id:"email",label:(0,l.__)("Email","jvb"),type:"email",help:(0,l.__)("Required if you want us to follow up.","jvb")},{id:"follow_up",label:(0,l.__)("Would you like me to follow up with you?","jvb"),type:"checkbox"},{id:"target_audience",label:(0,l.__)("This Feature is For","jvb"),type:"checkboxes",options:[{value:"artists",label:(0,l.__)("Artists","jvb")},{value:"visitors",label:(0,l.__)("Site Visitors","jvb")},{value:"partners",label:(0,l.__)("Partners","jvb")},{value:"other",label:(0,l.__)("Other","jvb")}]},{id:"feature_name",label:(0,l.__)("Name your Feature","jvb"),type:"text",required:!0},{id:"message",label:(0,l.__)("Describe Your Feature","jvb"),type:"textarea",required:!0}];break;case"technical_issue":e=[{id:"name",label:(0,l.__)("Name","jvb"),type:"text"},{id:"email",label:(0,l.__)("Email","jvb"),type:"email"},{id:"follow_up",label:(0,l.__)("Would you like me to follow up with you?","jvb"),type:"checkbox"},{id:"issue_type",label:(0,l.__)("Type of Issue","jvb"),type:"checkboxes",options:[{value:"visual",label:(0,l.__)("Visual","jvb")},{value:"error",label:(0,l.__)("Error Page","jvb")},{value:"other",label:(0,l.__)("Other","jvb")}]},{id:"message",label:(0,l.__)("Please describe the issue.","jvb"),type:"textarea",required:!0}]}return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("h3",{className:"jvb-form-title",children:m.title}),(0,s.jsx)("p",{className:"jvb-form-description",children:m.description}),(0,s.jsxs)("div",{className:"jvb-form-preview",children:[e.map(e=>(0,s.jsxs)("div",{className:"jvb-form-field",children:[b&&(0,s.jsx)("label",{htmlFor:`jvb-${e.id}`,className:e.required?"required":"",children:e.label}),"text"===e.type&&(0,s.jsx)("input",{type:"text",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"email"===e.type&&(0,s.jsx)("input",{type:"email",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"tel"===e.type&&(0,s.jsx)("input",{type:"tel",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"url"===e.type&&(0,s.jsx)("input",{type:"url",id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0}),"textarea"===e.type&&(0,s.jsx)("textarea",{id:`jvb-${e.id}`,placeholder:b?"":e.label,disabled:!0,rows:"4"}),"checkbox"===e.type&&(0,s.jsxs)("div",{className:"jvb-form-checkbox",children:[(0,s.jsx)("input",{type:"checkbox",id:`jvb-${e.id}`,disabled:!0}),(0,s.jsx)("label",{htmlFor:`jvb-${e.id}`,children:e.label})]}),"checkboxes"===e.type&&e.options&&(0,s.jsx)("div",{className:"jvb-form-checkboxes",children:e.options.map(l=>(0,s.jsxs)("div",{className:"jvb-form-checkbox",children:[(0,s.jsx)("input",{type:"checkbox",id:`jvb-${e.id}-${l.value}`,disabled:!0}),(0,s.jsx)("label",{htmlFor:`jvb-${e.id}-${l.value}`,children:l.label})]},l.value))}),e.help&&(0,s.jsx)("p",{className:"jvb-form-help",children:e.help})]},e.id)),d&&(0,s.jsx)("div",{className:"jvb-form-turnstile",children:(0,s.jsx)("div",{className:"jvb-turnstile-placeholder",children:(0,s.jsx)("span",{children:(0,l.__)("Cloudflare Turnstile will appear here","jvb")})})}),(0,s.jsx)("div",{className:"jvb-form-submit",children:(0,s.jsx)("button",{type:"button",className:"jvb-form-button",children:m.button})})]})]})})():(0,s.jsxs)("div",{className:"jvb-form-placeholder",children:[(0,s.jsx)("h3",{children:m.title}),(0,s.jsx)("p",{children:(0,l.__)("Form preview is hidden. Edit settings in the sidebar.","jvb")})]})})]})},save:function(){return null}})}};const l={};function t(i){const a=l[i];if(void 0!==a)return a.exports;const s=l[i]={exports:{}};return e[i](s,s.exports,t),s.exports}t.m=e,(()=>{const e=[];t.O=(l,i,a,s)=>{if(i){s||=0;for(var o=e.length;o>0&&e[o-1][2]>s;o--)e[o]=e[o-1];return void(e[o]=[i,a,s])}let r=1/0;for(o=0;o<e.length;o++){let[i,a,s]=e[o],n=!0;for(var b=0;b<i.length;b++)1&s&&!(r>=s)||!Object.keys(t.O).every(e=>t.O[e](i[b]))?(n=!1,s<r&&(r=s)):i.splice(b--,1);if(n){e.splice(o--,1);const t=a();void 0!==t&&(l=t)}}return l}})(),t.o=(e,l)=>Object.hasOwn(e,l),(()=>{const e={637:0,705:0};t.O.j=l=>0===e[l];const l=(l,i)=>{let[a,s,o]=i;var r,b,n=0;if(a.some(l=>0!==e[l])){for(r in s)t.o(s,r)&&(t.m[r]=s[r]);if(o)var d=o(t)}for(l&&l(i);n<a.length;n++)b=a[n],t.o(e,b)&&e[b]&&e[b][0](),e[b]=0;return t.O(d)},i=globalThis.webpackChunkjvb||=[];i.forEach(l.bind(null,0)),i.push=l.bind(null,i.push.bind(i))})();let i=t.O(void 0,[705],()=>t(677));i=t.O(i)})();
build/glossary/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '809c5c76c0c41769d801');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '29a7ebeea11faa901c22');
build/glossary/index.js
@@ -1 +1 @@
(()=>{"use strict";var r,o={359(){const r=window.wp.blocks,o=window.wp.i18n,e=window.wp.blockEditor,t=window.ReactJSXRuntime,i=JSON.parse('{"UU":"jvb/glossary"}');(0,r.registerBlockType)(i.UU,{edit:function(){return(0,t.jsx)("p",{...(0,e.useBlockProps)(),children:(0,o.__)("Will output the glossary","jvb")})}})}},e={};function t(r){var i=e[r];if(void 0!==i)return i.exports;var n=e[r]={exports:{}};return o[r](n,n.exports,t),n.exports}t.m=o,r=[],t.O=(o,e,i,n)=>{if(!e){var s=1/0;for(v=0;v<r.length;v++){for(var[e,i,n]=r[v],l=!0,a=0;a<e.length;a++)(!1&n||s>=n)&&Object.keys(t.O).every(r=>t.O[r](e[a]))?e.splice(a--,1):(l=!1,n<s&&(s=n));if(l){r.splice(v--,1);var p=i();void 0!==p&&(o=p)}}return o}n=n||0;for(var v=r.length;v>0&&r[v-1][2]>n;v--)r[v]=r[v-1];r[v]=[e,i,n]},t.o=(r,o)=>Object.prototype.hasOwnProperty.call(r,o),(()=>{var r={342:0,642:0};t.O.j=o=>0===r[o];var o=(o,e)=>{var i,n,[s,l,a]=e,p=0;if(s.some(o=>0!==r[o])){for(i in l)t.o(l,i)&&(t.m[i]=l[i]);if(a)var v=a(t)}for(o&&o(e);p<s.length;p++)n=s[p],t.o(r,n)&&r[n]&&r[n][0](),r[n]=0;return t.O(v)},e=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];e.forEach(o.bind(null,0)),e.push=o.bind(null,e.push.bind(e))})();var i=t.O(void 0,[642],()=>t(359));i=t.O(i)})();
(()=>{"use strict";var o={359(){const o=window.wp.blocks,t=window.wp.i18n,e=window.wp.blockEditor,n=window.ReactJSXRuntime,r=JSON.parse('{"UU":"jvb/glossary"}');(0,o.registerBlockType)(r.UU,{edit:function(){return(0,n.jsx)("p",{...(0,e.useBlockProps)(),children:(0,t.__)("Will output the glossary","jvb")})}})}};const t={};function e(n){const r=t[n];if(void 0!==r)return r.exports;const s=t[n]={exports:{}};return o[n](s,s.exports,e),s.exports}e.m=o,(()=>{const o=[];e.O=(t,n,r,s)=>{if(n){s||=0;for(var i=o.length;i>0&&o[i-1][2]>s;i--)o[i]=o[i-1];return void(o[i]=[n,r,s])}let l=1/0;for(i=0;i<o.length;i++){let[n,r,s]=o[i],u=!0;for(var c=0;c<n.length;c++)1&s&&!(l>=s)||!Object.keys(e.O).every(o=>e.O[o](n[c]))?(u=!1,s<l&&(l=s)):n.splice(c--,1);if(u){o.splice(i--,1);const e=r();void 0!==e&&(t=e)}}return t}})(),e.o=(o,t)=>Object.hasOwn(o,t),(()=>{const o={342:0,642:0};e.O.j=t=>0===o[t];const t=(t,n)=>{let[r,s,i]=n;var l,c,u=0;if(r.some(t=>0!==o[t])){for(l in s)e.o(s,l)&&(e.m[l]=s[l]);if(i)var p=i(e)}for(t&&t(n);u<r.length;u++)c=r[u],e.o(o,c)&&o[c]&&o[c][0](),o[c]=0;return e.O(p)},n=globalThis.webpackChunkjvb||=[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();let n=e.O(void 0,[642],()=>e(359));n=e.O(n)})();
build/glossary/style-index-rtl.css
@@ -1 +1 @@
:root{--navWidth:40vw}@media(min-width:768px){:root{--navWidth:22vw}}nav.glossary-index{height:60vh;position:fixed;left:-8px;top:50%;transform:translateY(-50%);width:var(--navWidth);z-index:var(--z-3)}nav.glossary-index>ul{--dir:column;--align:flex-start;--justify:flex-start;--gap:1px;height:100%;max-height:100%;overflow:hidden auto;scroll-behavior:smooth;touch-action:pan-y;width:100%}nav.glossary-index a,nav.glossary-index li{flex:1;height:-moz-max-content;height:max-content;min-height:max(var(--chipchip),-moz-max-content);min-height:max(var(--chipchip),max-content);width:100%}nav.glossary-index a{--justify:center;background-color:rgba(var(--base),var(--op-45));hyphens:auto;padding:.25rem .5rem;word-wrap:anywhere;white-space:wrap}nav.glossary-index a.active,nav.glossary-index a:focus,nav.glossary-index a:hover{background-color:rgba(var(--action-0),var(--op-6));color:var(--action-contrast)}.glossary dd{margin-right:.5rem;width:calc(100% + .75rem)}.glossary dd,.glossary dt{right:0;position:relative;transition:margin var(--trans-base),right var(--trans-base),width var(--trans-base)}.glossary dt.active,.glossary dt:target{color:rgb(var(--action-0));right:-1.5rem;outline:none;padding:0}.glossary dt.active+dd,.glossary dt:target+dd{right:-1.5rem}dl.glossary,main header{grid-column:full;padding:0 2rem 0 var(--navWidth)}@media(min-width:768px){dl.glossary,main header{margin-right:auto;margin-left:var(--navWidth);max-width:var(--content);padding-left:var(--btn)}}@media(max-width:768px){.glossary h2{font-size:var(--txt-medium)}.glossary p{font-size:var(--txt-x-small)}.glossary-index a,.glossary-index li{height:-moz-fit-content;height:fit-content}.glossary-index a{font-size:var(--txt-x-small);min-height:2em;padding:.25rem}body:has(.glossary) h1{font-size:var(--txt-xx-large)}}
:root{--navWidth:40vw}@media(min-width:768px){:root{--navWidth:22vw}}nav.glossary-index{height:60vh;position:fixed;left:-8px;top:50%;transform:translateY(-50%);width:var(--navWidth);z-index:var(--z-3)}nav.glossary-index>ul{--dir:column;--align:flex-start;--justify:flex-start;--gap:1px;height:100%;max-height:100%;overflow:hidden auto;scroll-behavior:smooth;touch-action:pan-y;width:100%}nav.glossary-index a,nav.glossary-index li{flex:1;height:max-content;min-height:max(var(--chipchip),max-content);width:100%}nav.glossary-index a{--justify:center;background-color:rgba(var(--base),var(--op-45));hyphens:auto;padding:.25rem .5rem;word-wrap:anywhere;white-space:wrap}nav.glossary-index a.active,nav.glossary-index a:focus,nav.glossary-index a:hover{background-color:rgba(var(--action-0),var(--op-6));color:var(--action-contrast)}.glossary dd{margin-right:.5rem;width:calc(100% + .75rem)}.glossary dd,.glossary dt{right:0;position:relative;transition:margin var(--trans-base),right var(--trans-base),width var(--trans-base)}.glossary dt.active,.glossary dt:target{color:rgb(var(--action-0));right:-1.5rem;outline:none;padding:0}.glossary dt.active+dd,.glossary dt:target+dd{right:-1.5rem}dl.glossary,main header{grid-column:full;padding:0 2rem 0 var(--navWidth)}@media(min-width:768px){dl.glossary,main header{margin-right:auto;margin-left:var(--navWidth);max-width:var(--content);padding-left:var(--btn)}}@media(max-width:768px){.glossary h2{font-size:var(--txt-medium)}.glossary p{font-size:var(--txt-x-small)}.glossary-index a,.glossary-index li{height:fit-content}.glossary-index a{font-size:var(--txt-x-small);min-height:2em;padding:.25rem}body:has(.glossary) h1{font-size:var(--txt-xx-large)}}
build/glossary/style-index.css
@@ -1 +1 @@
:root{--navWidth:40vw}@media(min-width:768px){:root{--navWidth:22vw}}nav.glossary-index{height:60vh;position:fixed;right:-8px;top:50%;transform:translateY(-50%);width:var(--navWidth);z-index:var(--z-3)}nav.glossary-index>ul{--dir:column;--align:flex-start;--justify:flex-start;--gap:1px;height:100%;max-height:100%;overflow:hidden auto;scroll-behavior:smooth;touch-action:pan-y;width:100%}nav.glossary-index a,nav.glossary-index li{flex:1;height:-moz-max-content;height:max-content;min-height:max(var(--chipchip),-moz-max-content);min-height:max(var(--chipchip),max-content);width:100%}nav.glossary-index a{--justify:center;background-color:rgba(var(--base),var(--op-45));hyphens:auto;padding:.25rem .5rem;word-wrap:anywhere;white-space:wrap}nav.glossary-index a.active,nav.glossary-index a:focus,nav.glossary-index a:hover{background-color:rgba(var(--action-0),var(--op-6));color:var(--action-contrast)}.glossary dd{margin-left:.5rem;width:calc(100% + .75rem)}.glossary dd,.glossary dt{left:0;position:relative;transition:margin var(--trans-base),left var(--trans-base),width var(--trans-base)}.glossary dt.active,.glossary dt:target{color:rgb(var(--action-0));left:-1.5rem;outline:none;padding:0}.glossary dt.active+dd,.glossary dt:target+dd{left:-1.5rem}dl.glossary,main header{grid-column:full;padding:0 var(--navWidth) 0 2rem}@media(min-width:768px){dl.glossary,main header{margin-left:auto;margin-right:var(--navWidth);max-width:var(--content);padding-right:var(--btn)}}@media(max-width:768px){.glossary h2{font-size:var(--txt-medium)}.glossary p{font-size:var(--txt-x-small)}.glossary-index a,.glossary-index li{height:-moz-fit-content;height:fit-content}.glossary-index a{font-size:var(--txt-x-small);min-height:2em;padding:.25rem}body:has(.glossary) h1{font-size:var(--txt-xx-large)}}
:root{--navWidth:40vw}@media(min-width:768px){:root{--navWidth:22vw}}nav.glossary-index{height:60vh;position:fixed;right:-8px;top:50%;transform:translateY(-50%);width:var(--navWidth);z-index:var(--z-3)}nav.glossary-index>ul{--dir:column;--align:flex-start;--justify:flex-start;--gap:1px;height:100%;max-height:100%;overflow:hidden auto;scroll-behavior:smooth;touch-action:pan-y;width:100%}nav.glossary-index a,nav.glossary-index li{flex:1;height:max-content;min-height:max(var(--chipchip),max-content);width:100%}nav.glossary-index a{--justify:center;background-color:rgba(var(--base),var(--op-45));hyphens:auto;padding:.25rem .5rem;word-wrap:anywhere;white-space:wrap}nav.glossary-index a.active,nav.glossary-index a:focus,nav.glossary-index a:hover{background-color:rgba(var(--action-0),var(--op-6));color:var(--action-contrast)}.glossary dd{margin-left:.5rem;width:calc(100% + .75rem)}.glossary dd,.glossary dt{left:0;position:relative;transition:margin var(--trans-base),left var(--trans-base),width var(--trans-base)}.glossary dt.active,.glossary dt:target{color:rgb(var(--action-0));left:-1.5rem;outline:none;padding:0}.glossary dt.active+dd,.glossary dt:target+dd{left:-1.5rem}dl.glossary,main header{grid-column:full;padding:0 var(--navWidth) 0 2rem}@media(min-width:768px){dl.glossary,main header{margin-left:auto;margin-right:var(--navWidth);max-width:var(--content);padding-right:var(--btn)}}@media(max-width:768px){.glossary h2{font-size:var(--txt-medium)}.glossary p{font-size:var(--txt-x-small)}.glossary-index a,.glossary-index li{height:fit-content}.glossary-index a{font-size:var(--txt-x-small);min-height:2em;padding:.25rem}body:has(.glossary) h1{font-size:var(--txt-xx-large)}}
build/gmbreviews/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n', 'wp-server-side-render'), 'version' => '9abfec4c1bba023a261c');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n', 'wp-server-side-render'), 'version' => '46249b8d39529397b0be');
build/gmbreviews/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,o={819(e,o,n){const r=window.wp.blocks,t=window.wp.blockEditor,i=window.wp.components,l=window.wp.i18n,s=window.wp.serverSideRender;var a=n.n(s);const h=window.ReactJSXRuntime,v=JSON.parse('{"UU":"jvb/gmbreviews"}');(0,r.registerBlockType)(v.UU,{edit:function({attributes:e,setAttributes:o}){const n=(0,t.useBlockProps)(),{count:r,inheritUser:s,showStats:v,minStars:w,showViewAllLink:b,showRating:c,showDate:g,showReviewLink:d}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(t.InspectorControls,{children:(0,h.jsxs)(i.PanelBody,{title:(0,l.__)("Review Settings","jvb"),children:[(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Inherit User","jvb"),checked:s,onChange:e=>o({inheritUser:e})}),(0,h.jsx)(i.RangeControl,{label:(0,l.__)("Number of Reviews","jvb"),value:r,onChange:e=>o({count:e}),min:1,max:20}),(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Show Rating","jvb"),checked:c,onChange:e=>o({showRating:e})}),(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Show Date","jvb"),checked:g,onChange:e=>o({showDate:e})}),(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Show Review Link","jvb"),checked:d,onChange:e=>o({showReviewLink:e})}),(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Show Stats","jvb"),checked:v,onChange:e=>o({showStats:e})}),(0,h.jsx)(i.ToggleControl,{label:(0,l.__)("Show All Reviews Link","jvb"),checked:b,onChange:e=>o({showViewAllLink:e})}),(0,h.jsx)(i.RangeControl,{label:(0,l.__)("Minimum Rating","jvb"),value:w,onChange:e=>o({minStars:e}),min:1,max:5})]})}),(0,h.jsx)("div",{...n,children:(0,h.jsx)(a(),{block:"jvb/gmbreviews",attributes:e})})]})},save:()=>null})}},n={};function r(e){var t=n[e];if(void 0!==t)return t.exports;var i=n[e]={exports:{}};return o[e](i,i.exports,r),i.exports}r.m=o,e=[],r.O=(o,n,t,i)=>{if(!n){var l=1/0;for(v=0;v<e.length;v++){for(var[n,t,i]=e[v],s=!0,a=0;a<n.length;a++)(!1&i||l>=i)&&Object.keys(r.O).every(e=>r.O[e](n[a]))?n.splice(a--,1):(s=!1,i<l&&(l=i));if(s){e.splice(v--,1);var h=t();void 0!==h&&(o=h)}}return o}i=i||0;for(var v=e.length;v>0&&e[v-1][2]>i;v--)e[v]=e[v-1];e[v]=[n,t,i]},r.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return r.d(o,{a:o}),o},r.d=(e,o)=>{for(var n in o)r.o(o,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},r.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),(()=>{var e={807:0,423:0};r.O.j=o=>0===e[o];var o=(o,n)=>{var t,i,[l,s,a]=n,h=0;if(l.some(o=>0!==e[o])){for(t in s)r.o(s,t)&&(r.m[t]=s[t]);if(a)var v=a(r)}for(o&&o(n);h<l.length;h++)i=l[h],r.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return r.O(v)},n=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];n.forEach(o.bind(null,0)),n.push=o.bind(null,n.push.bind(n))})();var t=r.O(void 0,[423],()=>r(819));t=r.O(t)})();
(()=>{"use strict";var e={819(e,n,o){const t=window.wp.blocks,s=window.wp.blockEditor,i=window.wp.components,r=window.wp.i18n,l=window.wp.serverSideRender;var a=o.n(l);const c=window.ReactJSXRuntime,h=JSON.parse('{"UU":"jvb/gmbreviews"}');(0,t.registerBlockType)(h.UU,{edit:function({attributes:e,setAttributes:n}){const o=(0,s.useBlockProps)(),{count:t,inheritUser:l,showStats:h,minStars:w,showViewAllLink:b,showRating:g,showDate:v,showReviewLink:d}=e;return(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(s.InspectorControls,{children:(0,c.jsxs)(i.PanelBody,{title:(0,r.__)("Review Settings","jvb"),children:[(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Inherit User","jvb"),checked:l,onChange:e=>n({inheritUser:e})}),(0,c.jsx)(i.RangeControl,{label:(0,r.__)("Number of Reviews","jvb"),value:t,onChange:e=>n({count:e}),min:1,max:20}),(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Show Rating","jvb"),checked:g,onChange:e=>n({showRating:e})}),(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Show Date","jvb"),checked:v,onChange:e=>n({showDate:e})}),(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Show Review Link","jvb"),checked:d,onChange:e=>n({showReviewLink:e})}),(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Show Stats","jvb"),checked:h,onChange:e=>n({showStats:e})}),(0,c.jsx)(i.ToggleControl,{label:(0,r.__)("Show All Reviews Link","jvb"),checked:b,onChange:e=>n({showViewAllLink:e})}),(0,c.jsx)(i.RangeControl,{label:(0,r.__)("Minimum Rating","jvb"),value:w,onChange:e=>n({minStars:e}),min:1,max:5})]})}),(0,c.jsx)("div",{...o,children:(0,c.jsx)(a(),{block:"jvb/gmbreviews",attributes:e})})]})},save:()=>null})}};const n={};function o(t){const s=n[t];if(void 0!==s)return s.exports;const i=n[t]={exports:{}};return e[t](i,i.exports,o),i.exports}o.m=e,(()=>{const e=[];o.O=(n,t,s,i)=>{if(t){i||=0;for(var r=e.length;r>0&&e[r-1][2]>i;r--)e[r]=e[r-1];return void(e[r]=[t,s,i])}let l=1/0;for(r=0;r<e.length;r++){let[t,s,i]=e[r],c=!0;for(var a=0;a<t.length;a++)1&i&&!(l>=i)||!Object.keys(o.O).every(e=>o.O[e](t[a]))?(c=!1,i<l&&(l=i)):t.splice(a--,1);if(c){e.splice(r--,1);const o=s();void 0!==o&&(n=o)}}return n}})(),o.n=e=>{const n=e&&e.__esModule?()=>e.default:()=>e;return o.d(n,{a:n}),n},o.d=(e,n)=>{for(var t in n)o.o(n,t)&&!o.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},o.o=(e,n)=>Object.hasOwn(e,n),(()=>{const e={807:0,423:0};o.O.j=n=>0===e[n];const n=(n,t)=>{let[s,i,r]=t;var l,a,c=0;if(s.some(n=>0!==e[n])){for(l in i)o.o(i,l)&&(o.m[l]=i[l]);if(r)var h=r(o)}for(n&&n(t);c<s.length;c++)a=s[c],o.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return o.O(h)},t=globalThis.webpackChunkjvb||=[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))})();let t=o.O(void 0,[423],()=>o(819));t=o.O(t)})();
build/gmbreviews/style-index-rtl.css
@@ -1 +1 @@
.gmb-reviews{max-width:none}.gmb-reviews>.row.x-mid{margin:0 auto;max-width:var(--content);--gap:.5rem 6rem}.gmb-reviews>.row.x-mid p{width:-moz-fit-content;width:fit-content}.gmb-reviews .button{display:flex;height:-moz-max-content;height:max-content;margin:0 auto 2rem;width:66.6%}.gmb-reviews .stars{align-items:center;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start}.gmb-reviews ul{list-style:none;margin:0;max-width:var(--full);padding:0}.gmb-reviews ul li{max-width:none;padding:4rem 1rem;width:100%}.gmb-reviews ul li:nth-of-type(odd){background-color:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(odd) blockquote{--background:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(2n){background-color:rgb(var(--base-100))}.gmb-reviews ul li:nth-of-type(2n) blockquote{--background:rgb(var(--base-100))}.gmb-reviews blockquote{border-top:1px solid rgb(var(--base-200));margin:1rem auto;max-width:var(--content);padding:1rem 0 0}.gmb-reviews blockquote .icon-quotes-fi{right:calc(var(--btnbtn)*-1)}.gmb-reviews blockquote .content,.gmb-reviews blockquote .content:after{border-width:4px 1px}.gmb-reviews blockquote .content:before{border-width:8px;bottom:-4px}.gmb-reviews blockquote cite{margin-top:var(--btn);position:relative}.gmb-reviews blockquote cite img{right:-8rem;position:absolute;top:0;width:4.5rem}.gmb-reviews blockquote cite p{margin:0}.gmb-reviews blockquote cite .wrap{--wrap:wrap}.gmb-reviews blockquote cite .wrap p,.gmb-reviews blockquote cite .wrap time{max-width:49%;width:-moz-max-content;width:max-content}.gmb-reviews blockquote cite .wrap .stars{flex:1}.gmb-reviews blockquote time{white-space:nowrap}.gmb-reviews .stars .icon{background-color:rgb(var(--action-0))}.gmb-reviews article{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem}.gmb-reviews article header{--align:center}.gmb-reviews article header>img{right:0;position:relative}.gmb-reviews article time{font-style:italic}.gmb-reviews article .review{padding:1.5rem}.gmb-reviews article h4{width:-moz-max-content;width:max-content}.gmb-reviews article .icon{color:rgb(var(--action-0))}.gmb-reviews .btn{width:100%}
.gmb-reviews{max-width:none}.gmb-reviews>.row.x-mid{margin:0 auto;max-width:var(--content);--gap:.5rem 6rem}.gmb-reviews>.row.x-mid p{width:fit-content}.gmb-reviews .button{display:flex;height:max-content;margin:0 auto 2rem;width:66.6%}.gmb-reviews .stars{align-items:center;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start}.gmb-reviews ul{list-style:none;margin:0;max-width:var(--full);padding:0}.gmb-reviews ul li{max-width:none;padding:4rem 1rem;width:100%}.gmb-reviews ul li:nth-of-type(odd){background-color:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(odd) blockquote{--background:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(2n){background-color:rgb(var(--base-100))}.gmb-reviews ul li:nth-of-type(2n) blockquote{--background:rgb(var(--base-100))}.gmb-reviews blockquote{border-top:1px solid rgb(var(--base-200));margin:1rem auto;max-width:var(--content);padding:1rem 0 0}.gmb-reviews blockquote .icon-quotes-fi{right:calc(var(--btnbtn)*-1)}.gmb-reviews blockquote .content,.gmb-reviews blockquote .content:after{border-width:4px 1px}.gmb-reviews blockquote .content:before{border-width:8px;bottom:-4px}.gmb-reviews blockquote cite{margin-top:var(--btn);position:relative}.gmb-reviews blockquote cite img{right:-8rem;position:absolute;top:0;width:4.5rem}.gmb-reviews blockquote cite p{margin:0}.gmb-reviews blockquote cite .wrap{--wrap:wrap}.gmb-reviews blockquote cite .wrap p,.gmb-reviews blockquote cite .wrap time{max-width:49%;width:max-content}.gmb-reviews blockquote cite .wrap .stars{flex:1}.gmb-reviews blockquote time{white-space:nowrap}.gmb-reviews .stars .icon{background-color:rgb(var(--action-0))}.gmb-reviews article{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem}.gmb-reviews article header{--align:center}.gmb-reviews article header>img{right:0;position:relative}.gmb-reviews article time{font-style:italic}.gmb-reviews article .review{padding:1.5rem}.gmb-reviews article h4{width:max-content}.gmb-reviews article .icon{color:rgb(var(--action-0))}.gmb-reviews .btn{width:100%}
build/gmbreviews/style-index.css
@@ -1 +1 @@
.gmb-reviews{max-width:none}.gmb-reviews>.row.x-mid{margin:0 auto;max-width:var(--content);--gap:.5rem 6rem}.gmb-reviews>.row.x-mid p{width:-moz-fit-content;width:fit-content}.gmb-reviews .button{display:flex;height:-moz-max-content;height:max-content;margin:0 auto 2rem;width:66.6%}.gmb-reviews .stars{align-items:center;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start}.gmb-reviews ul{list-style:none;margin:0;max-width:var(--full);padding:0}.gmb-reviews ul li{max-width:none;padding:4rem 1rem;width:100%}.gmb-reviews ul li:nth-of-type(odd){background-color:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(odd) blockquote{--background:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(2n){background-color:rgb(var(--base-100))}.gmb-reviews ul li:nth-of-type(2n) blockquote{--background:rgb(var(--base-100))}.gmb-reviews blockquote{border-top:1px solid rgb(var(--base-200));margin:1rem auto;max-width:var(--content);padding:1rem 0 0}.gmb-reviews blockquote .icon-quotes-fi{left:calc(var(--btnbtn)*-1)}.gmb-reviews blockquote .content,.gmb-reviews blockquote .content:after{border-width:4px 1px}.gmb-reviews blockquote .content:before{border-width:8px;bottom:-4px}.gmb-reviews blockquote cite{margin-top:var(--btn);position:relative}.gmb-reviews blockquote cite img{left:-8rem;position:absolute;top:0;width:4.5rem}.gmb-reviews blockquote cite p{margin:0}.gmb-reviews blockquote cite .wrap{--wrap:wrap}.gmb-reviews blockquote cite .wrap p,.gmb-reviews blockquote cite .wrap time{max-width:49%;width:-moz-max-content;width:max-content}.gmb-reviews blockquote cite .wrap .stars{flex:1}.gmb-reviews blockquote time{white-space:nowrap}.gmb-reviews .stars .icon{background-color:rgb(var(--action-0))}.gmb-reviews article{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem}.gmb-reviews article header{--align:center}.gmb-reviews article header>img{left:0;position:relative}.gmb-reviews article time{font-style:italic}.gmb-reviews article .review{padding:1.5rem}.gmb-reviews article h4{width:-moz-max-content;width:max-content}.gmb-reviews article .icon{color:rgb(var(--action-0))}.gmb-reviews .btn{width:100%}
.gmb-reviews{max-width:none}.gmb-reviews>.row.x-mid{margin:0 auto;max-width:var(--content);--gap:.5rem 6rem}.gmb-reviews>.row.x-mid p{width:fit-content}.gmb-reviews .button{display:flex;height:max-content;margin:0 auto 2rem;width:66.6%}.gmb-reviews .stars{align-items:center;display:inline-flex;flex-wrap:nowrap;justify-content:flex-start}.gmb-reviews ul{list-style:none;margin:0;max-width:var(--full);padding:0}.gmb-reviews ul li{max-width:none;padding:4rem 1rem;width:100%}.gmb-reviews ul li:nth-of-type(odd){background-color:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(odd) blockquote{--background:rgb(var(--base-50))}.gmb-reviews ul li:nth-of-type(2n){background-color:rgb(var(--base-100))}.gmb-reviews ul li:nth-of-type(2n) blockquote{--background:rgb(var(--base-100))}.gmb-reviews blockquote{border-top:1px solid rgb(var(--base-200));margin:1rem auto;max-width:var(--content);padding:1rem 0 0}.gmb-reviews blockquote .icon-quotes-fi{left:calc(var(--btnbtn)*-1)}.gmb-reviews blockquote .content,.gmb-reviews blockquote .content:after{border-width:4px 1px}.gmb-reviews blockquote .content:before{border-width:8px;bottom:-4px}.gmb-reviews blockquote cite{margin-top:var(--btn);position:relative}.gmb-reviews blockquote cite img{left:-8rem;position:absolute;top:0;width:4.5rem}.gmb-reviews blockquote cite p{margin:0}.gmb-reviews blockquote cite .wrap{--wrap:wrap}.gmb-reviews blockquote cite .wrap p,.gmb-reviews blockquote cite .wrap time{max-width:49%;width:max-content}.gmb-reviews blockquote cite .wrap .stars{flex:1}.gmb-reviews blockquote time{white-space:nowrap}.gmb-reviews .stars .icon{background-color:rgb(var(--action-0))}.gmb-reviews article{background-color:rgb(var(--base));border-radius:var(--radius-outer);padding:1rem}.gmb-reviews article header{--align:center}.gmb-reviews article header>img{left:0;position:relative}.gmb-reviews article time{font-style:italic}.gmb-reviews article .review{padding:1.5rem}.gmb-reviews article h4{width:max-content}.gmb-reviews article .icon{color:rgb(var(--action-0))}.gmb-reviews .btn{width:100%}
build/menu/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '60dee3034fa9da82f1ec');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '0df84114df12909b6b07');
build/menu/index.js
@@ -1 +1 @@
(()=>{"use strict";var r,e={722(){const r=window.wp.blocks,e=window.wp.i18n,o=window.wp.blockEditor,n=window.ReactJSXRuntime;(0,r.registerBlockType)("jvb/menu",{edit:function(){return(0,n.jsx)("p",{...(0,o.useBlockProps)(),children:(0,e.__)("Will output the menu","jvb")})}})}},o={};function n(r){var t=o[r];if(void 0!==t)return t.exports;var i=o[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.m=e,r=[],n.O=(e,o,t,i)=>{if(!o){var l=1/0;for(u=0;u<r.length;u++){for(var[o,t,i]=r[u],s=!0,a=0;a<o.length;a++)(!1&i||l>=i)&&Object.keys(n.O).every(r=>n.O[r](o[a]))?o.splice(a--,1):(s=!1,i<l&&(l=i));if(s){r.splice(u--,1);var p=t();void 0!==p&&(e=p)}}return e}i=i||0;for(var u=r.length;u>0&&r[u-1][2]>i;u--)r[u]=r[u-1];r[u]=[o,t,i]},n.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={447:0,103:0};n.O.j=e=>0===r[e];var e=(e,o)=>{var t,i,[l,s,a]=o,p=0;if(l.some(e=>0!==r[e])){for(t in s)n.o(s,t)&&(n.m[t]=s[t]);if(a)var u=a(n)}for(e&&e(o);p<l.length;p++)i=l[p],n.o(r,i)&&r[i]&&r[i][0](),r[i]=0;return n.O(u)},o=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];o.forEach(e.bind(null,0)),o.push=e.bind(null,o.push.bind(o))})();var t=n.O(void 0,[103],()=>n(722));t=n.O(t)})();
(()=>{"use strict";var o={722(){const o=window.wp.blocks,t=window.wp.i18n,e=window.wp.blockEditor,n=window.ReactJSXRuntime;(0,o.registerBlockType)("jvb/menu",{edit:function(){return(0,n.jsx)("p",{...(0,e.useBlockProps)(),children:(0,t.__)("Will output the menu","jvb")})}})}};const t={};function e(n){const r=t[n];if(void 0!==r)return r.exports;const i=t[n]={exports:{}};return o[n](i,i.exports,e),i.exports}e.m=o,(()=>{const o=[];e.O=(t,n,r,i)=>{if(n){i||=0;for(var s=o.length;s>0&&o[s-1][2]>i;s--)o[s]=o[s-1];return void(o[s]=[n,r,i])}let c=1/0;for(s=0;s<o.length;s++){let[n,r,i]=o[s],u=!0;for(var l=0;l<n.length;l++)1&i&&!(c>=i)||!Object.keys(e.O).every(o=>e.O[o](n[l]))?(u=!1,i<c&&(c=i)):n.splice(l--,1);if(u){o.splice(s--,1);const e=r();void 0!==e&&(t=e)}}return t}})(),e.o=(o,t)=>Object.hasOwn(o,t),(()=>{const o={447:0,103:0};e.O.j=t=>0===o[t];const t=(t,n)=>{let[r,i,s]=n;var c,l,u=0;if(r.some(t=>0!==o[t])){for(c in i)e.o(i,c)&&(e.m[c]=i[c]);if(s)var p=s(e)}for(t&&t(n);u<r.length;u++)l=r[u],e.o(o,l)&&o[l]&&o[l][0](),o[l]=0;return e.O(p)},n=globalThis.webpackChunkjvb||=[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();let n=e.O(void 0,[103],()=>e(722));n=e.O(n)})();
build/menu/style-index-rtl.css
@@ -1 +1 @@
.info h4{font-size:var(--txt-medium);font-weight:var(--fw-h);margin:0}.field.quantity.quantity>label{right:var(--offScreen);position:absolute}nav.menu{max-width:100%}nav.menu ul{--justify:flex-start}nav.menu ul li{padding:0 .5rem}main>header{grid-column:full}main>header h1{max-width:var(--wide)}main>section *{max-width:var(--wide)!important}.menu-item.menu-item{margin:var(--sp2);max-width:none}.menu-item.menu-item:target{background:transparent;border:1rem solid rgb(var(--action-0));outline:none}.menu-item.menu-item:target h3{color:rgb(var(--action-0))}.menu-item.menu-item+.menu-item{border-top:1px solid rgb(var(--base-200));padding-top:var(--sp4)}.menu-item.menu-item .header{flex-wrap:nowrap}.menu-item.menu-item .header figure{aspect-ratio:1;max-width:30vw!important;-o-object-fit:cover;object-fit:cover}.menu-item.menu-item .header h3,.menu-item.menu-item .header p{margin:0;width:-moz-max-content;width:max-content}.menu-item.menu-item .gallery figure{aspect-ratio:1;max-width:15vw!important;-o-object-fit:cover;object-fit:cover}.menu-item.menu-item figcaption{display:none}
@media(min-width:600px){#wpadminbar~.wp-site-blocks nav.menu{top:calc(var(--btn) + 1rem + 16px)}}.scroll-up nav.menu{top:-2rem}nav.menu{background-color:rgba(var(--base-50),var(--op-6));box-shadow:var(--shdw-down) rgba(var(--base),var(--op-45));grid-column:full;max-width:100%;position:sticky;top:calc(var(--btn));z-index:5}nav.menu ul{--justify:flex-start}nav.menu ul li{padding:0 .5rem}main>header{grid-column:full}main>header h1{max-width:var(--wide)}main>section *{max-width:var(--wide)!important}.menu-item.menu-item{margin:var(--sp2);max-width:none;padding-top:var(--sp4)}.menu-item.menu-item:target{background:transparent;border:1rem solid rgb(var(--action-0));outline:none}.menu-item.menu-item:target h3{color:rgb(var(--action-0))}.menu-item.menu-item+.menu-item{border-top:1px solid rgb(var(--base-200))}.menu-item.menu-item .price s{display:inline-block;font-size:var(--txt-small);padding-left:1rem;vertical-align:top}.menu-item.menu-item .price:has(s){color:rgb(var(--secondary-0))}.menu-item.menu-item .price:has(s) s{color:rgb(var(--contrast))}.menu-item.menu-item .tags.left{right:-1rem}.menu-item.menu-item .tags.left .featured,.menu-item.menu-item .tags.left .sale{display:flex;--gap:.5rem;font-weight:var(--fw-h-bold);padding:.125rem .5rem;text-transform:uppercase;width:max-content}.menu-item.menu-item .tags.left .sale{background-color:rgb(var(--secondary-0));color:rgb(var(--secondary-contrast))}.menu-item.menu-item .tags.left .featured{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.menu-item.menu-item .header{flex-wrap:nowrap}.menu-item.menu-item .header figure{aspect-ratio:1;max-width:30vw!important;object-fit:cover}.menu-item.menu-item .header h3,.menu-item.menu-item .header p{margin:0;width:max-content}.menu-item.menu-item .gallery figure{aspect-ratio:1;max-width:min(15vw,8rem)!important;object-fit:cover}.menu-item.menu-item figcaption{display:none}.menu-item.menu-item .info{--gap:0.5rem 0}.menu-item.menu-item .info h4{font-size:var(--txt-medium);font-weight:var(--fw-h);margin:0}.menu-item.menu-item .info .row{--gap:1rem}.menu-item.menu-item .info .row figure,.menu-item.menu-item .info .row h4,.menu-item.menu-item .info .row>a{background-color:rgb(var(--base-50));position:sticky;top:calc(var(--btnbtn) + 2.5rem);z-index:1}.menu-item.menu-item .info .row>div{flex:1}.menu-item.menu-item .info .row>a{white-space:nowrap;width:max-content}.menu-item.menu-item .info .row figure{aspect-ratio:1;margin:0;margin-inline:0;max-width:min(10vw,5rem)!important;object-fit:cover}.menu-item.menu-item .info .out-of-stock,.menu-item.menu-item .info .sale-until{font-size:var(--txt-x-small);font-style:italic}.menu-item.menu-item .info .out-of-stock i.icon,.menu-item.menu-item .info .sale-until i.icon{color:rgb(var(--secondary-0));padding-left:1rem;vertical-align:top}.menu-item.menu-item .field.quantity.quantity>label{right:var(--offScreen);position:absolute}@media(max-width:768px){.menu-item.menu-item:target{border:0}.menu-item.menu-item .header.row{flex-direction:column}.menu-item.menu-item .header.row>figure{aspect-ratio:16/9;max-width:100%!important}.menu-item.menu-item .info{padding-top:1rem}.menu-item.menu-item .info .row{--gap:0}.menu-item.menu-item .info .row.nowrap.nowrap{--wrap:wrap!important}.menu-item.menu-item .info .row+.row{border-top:1px solid rgb(var(--base-200));padding-top:.5rem}.menu-item.menu-item .info .row>figure{max-width:min(25vw,6rem)!important;order:2}.menu-item.menu-item .info .row>a{order:3}.menu-item.menu-item .gallery{gap:.25rem}}
build/menu/style-index.css
@@ -1 +1 @@
.info h4{font-size:var(--txt-medium);font-weight:var(--fw-h);margin:0}.field.quantity.quantity>label{left:var(--offScreen);position:absolute}nav.menu{max-width:100%}nav.menu ul{--justify:flex-start}nav.menu ul li{padding:0 .5rem}main>header{grid-column:full}main>header h1{max-width:var(--wide)}main>section *{max-width:var(--wide)!important}.menu-item.menu-item{margin:var(--sp2);max-width:none}.menu-item.menu-item:target{background:transparent;border:1rem solid rgb(var(--action-0));outline:none}.menu-item.menu-item:target h3{color:rgb(var(--action-0))}.menu-item.menu-item+.menu-item{border-top:1px solid rgb(var(--base-200));padding-top:var(--sp4)}.menu-item.menu-item .header{flex-wrap:nowrap}.menu-item.menu-item .header figure{aspect-ratio:1;max-width:30vw!important;-o-object-fit:cover;object-fit:cover}.menu-item.menu-item .header h3,.menu-item.menu-item .header p{margin:0;width:-moz-max-content;width:max-content}.menu-item.menu-item .gallery figure{aspect-ratio:1;max-width:15vw!important;-o-object-fit:cover;object-fit:cover}.menu-item.menu-item figcaption{display:none}
@media(min-width:600px){#wpadminbar~.wp-site-blocks nav.menu{top:calc(var(--btn) + 1rem + 16px)}}.scroll-up nav.menu{top:-2rem}nav.menu{background-color:rgba(var(--base-50),var(--op-6));box-shadow:var(--shdw-down) rgba(var(--base),var(--op-45));grid-column:full;max-width:100%;position:sticky;top:calc(var(--btn));z-index:5}nav.menu ul{--justify:flex-start}nav.menu ul li{padding:0 .5rem}main>header{grid-column:full}main>header h1{max-width:var(--wide)}main>section *{max-width:var(--wide)!important}.menu-item.menu-item{margin:var(--sp2);max-width:none;padding-top:var(--sp4)}.menu-item.menu-item:target{background:transparent;border:1rem solid rgb(var(--action-0));outline:none}.menu-item.menu-item:target h3{color:rgb(var(--action-0))}.menu-item.menu-item+.menu-item{border-top:1px solid rgb(var(--base-200))}.menu-item.menu-item .price s{display:inline-block;font-size:var(--txt-small);padding-right:1rem;vertical-align:top}.menu-item.menu-item .price:has(s){color:rgb(var(--secondary-0))}.menu-item.menu-item .price:has(s) s{color:rgb(var(--contrast))}.menu-item.menu-item .tags.left{left:-1rem}.menu-item.menu-item .tags.left .featured,.menu-item.menu-item .tags.left .sale{display:flex;--gap:.5rem;font-weight:var(--fw-h-bold);padding:.125rem .5rem;text-transform:uppercase;width:max-content}.menu-item.menu-item .tags.left .sale{background-color:rgb(var(--secondary-0));color:rgb(var(--secondary-contrast))}.menu-item.menu-item .tags.left .featured{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.menu-item.menu-item .header{flex-wrap:nowrap}.menu-item.menu-item .header figure{aspect-ratio:1;max-width:30vw!important;object-fit:cover}.menu-item.menu-item .header h3,.menu-item.menu-item .header p{margin:0;width:max-content}.menu-item.menu-item .gallery figure{aspect-ratio:1;max-width:min(15vw,8rem)!important;object-fit:cover}.menu-item.menu-item figcaption{display:none}.menu-item.menu-item .info{--gap:0.5rem 0}.menu-item.menu-item .info h4{font-size:var(--txt-medium);font-weight:var(--fw-h);margin:0}.menu-item.menu-item .info .row{--gap:1rem}.menu-item.menu-item .info .row figure,.menu-item.menu-item .info .row h4,.menu-item.menu-item .info .row>a{background-color:rgb(var(--base-50));position:sticky;top:calc(var(--btnbtn) + 2.5rem);z-index:1}.menu-item.menu-item .info .row>div{flex:1}.menu-item.menu-item .info .row>a{white-space:nowrap;width:max-content}.menu-item.menu-item .info .row figure{aspect-ratio:1;margin:0;margin-inline:0;max-width:min(10vw,5rem)!important;object-fit:cover}.menu-item.menu-item .info .out-of-stock,.menu-item.menu-item .info .sale-until{font-size:var(--txt-x-small);font-style:italic}.menu-item.menu-item .info .out-of-stock i.icon,.menu-item.menu-item .info .sale-until i.icon{color:rgb(var(--secondary-0));padding-right:1rem;vertical-align:top}.menu-item.menu-item .field.quantity.quantity>label{left:var(--offScreen);position:absolute}@media(max-width:768px){.menu-item.menu-item:target{border:0}.menu-item.menu-item .header.row{flex-direction:column}.menu-item.menu-item .header.row>figure{aspect-ratio:16/9;max-width:100%!important}.menu-item.menu-item .info{padding-top:1rem}.menu-item.menu-item .info .row{--gap:0}.menu-item.menu-item .info .row.nowrap.nowrap{--wrap:wrap!important}.menu-item.menu-item .info .row+.row{border-top:1px solid rgb(var(--base-200));padding-top:.5rem}.menu-item.menu-item .info .row>figure{max-width:min(25vw,6rem)!important;order:2}.menu-item.menu-item .info .row>a{order:3}.menu-item.menu-item .gallery{gap:.25rem}}
build/simple-calendar/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '88c5d2b06f87f7081e11');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'e8eefb198c6c47107fc4');
build/simple-calendar/index.js
@@ -1 +1 @@
(()=>{"use strict";var r,e={332(){const r=window.wp.blocks,e=window.wp.i18n,o=window.wp.blockEditor,i=window.ReactJSXRuntime,n=JSON.parse('{"UU":"jvb/simple-calendar"}');(0,r.registerBlockType)(n.UU,{edit:function(){return(0,i.jsx)("p",{...(0,o.useBlockProps)(),children:(0,e.__)("Will output the simple calendar","jvb")})}})}},o={};function i(r){var n=o[r];if(void 0!==n)return n.exports;var t=o[r]={exports:{}};return e[r](t,t.exports,i),t.exports}i.m=e,r=[],i.O=(e,o,n,t)=>{if(!o){var l=1/0;for(c=0;c<r.length;c++){for(var[o,n,t]=r[c],a=!0,s=0;s<o.length;s++)(!1&t||l>=t)&&Object.keys(i.O).every(r=>i.O[r](o[s]))?o.splice(s--,1):(a=!1,t<l&&(l=t));if(a){r.splice(c--,1);var p=n();void 0!==p&&(e=p)}}return e}t=t||0;for(var c=r.length;c>0&&r[c-1][2]>t;c--)r[c]=r[c-1];r[c]=[o,n,t]},i.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={241:0,237:0};i.O.j=e=>0===r[e];var e=(e,o)=>{var n,t,[l,a,s]=o,p=0;if(l.some(e=>0!==r[e])){for(n in a)i.o(a,n)&&(i.m[n]=a[n]);if(s)var c=s(i)}for(e&&e(o);p<l.length;p++)t=l[p],i.o(r,t)&&r[t]&&r[t][0](),r[t]=0;return i.O(c)},o=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];o.forEach(e.bind(null,0)),o.push=e.bind(null,o.push.bind(o))})();var n=i.O(void 0,[237],()=>i(332));n=i.O(n)})();
(()=>{"use strict";var e={332(){const e=window.wp.blocks,o=window.wp.i18n,t=window.wp.blockEditor,n=window.ReactJSXRuntime,r=JSON.parse('{"UU":"jvb/simple-calendar"}');(0,e.registerBlockType)(r.UU,{edit:function(){return(0,n.jsx)("p",{...(0,t.useBlockProps)(),children:(0,o.__)("Will output the simple calendar","jvb")})}})}};const o={};function t(n){const r=o[n];if(void 0!==r)return r.exports;const i=o[n]={exports:{}};return e[n](i,i.exports,t),i.exports}t.m=e,(()=>{const e=[];t.O=(o,n,r,i)=>{if(n){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[n,r,i])}let l=1/0;for(s=0;s<e.length;s++){let[n,r,i]=e[s],p=!0;for(var c=0;c<n.length;c++)1&i&&!(l>=i)||!Object.keys(t.O).every(e=>t.O[e](n[c]))?(p=!1,i<l&&(l=i)):n.splice(c--,1);if(p){e.splice(s--,1);const t=r();void 0!==t&&(o=t)}}return o}})(),t.o=(e,o)=>Object.hasOwn(e,o),(()=>{const e={241:0,237:0};t.O.j=o=>0===e[o];const o=(o,n)=>{let[r,i,s]=n;var l,c,p=0;if(r.some(o=>0!==e[o])){for(l in i)t.o(i,l)&&(t.m[l]=i[l]);if(s)var u=s(t)}for(o&&o(n);p<r.length;p++)c=r[p],t.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return t.O(u)},n=globalThis.webpackChunkjvb||=[];n.forEach(o.bind(null,0)),n.push=o.bind(null,n.push.bind(n))})();let n=t.O(void 0,[237],()=>t(332));n=t.O(n)})();
build/summary/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '7e1ea861fc0d23381c53');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => '79dfee08279e8c8a026a');
build/summary/index.js
@@ -1 +1 @@
(()=>{"use strict";var r,e={955(){const r=window.wp.blocks,e=window.wp.i18n,t=window.wp.blockEditor,n=(window.wp.components,window.ReactJSXRuntime);(0,r.registerBlockType)("jvb/summary",{edit:function({attributes:r,setAttributes:o}){const i=(0,t.useBlockProps)();return(0,n.jsx)("div",{...i,children:(0,n.jsxs)("div",{className:"jvb-summary-preview",children:[(0,n.jsx)("h3",{children:(0,e.__)("Summary","jvb")}),(0,n.jsx)("p",{className:"jvb-list-preview-note",children:(0,e.__)("This will inherit the current query to build the information from our custom meta on the front end.","jvb")})]})})},save:function(){return null}})}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.m=e,r=[],n.O=(e,t,o,i)=>{if(!t){var s=1/0;for(c=0;c<r.length;c++){for(var[t,o,i]=r[c],l=!0,a=0;a<t.length;a++)(!1&i||s>=i)&&Object.keys(n.O).every(r=>n.O[r](t[a]))?t.splice(a--,1):(l=!1,i<s&&(s=i));if(l){r.splice(c--,1);var u=o();void 0!==u&&(e=u)}}return e}i=i||0;for(var c=r.length;c>0&&r[c-1][2]>i;c--)r[c]=r[c-1];r[c]=[t,o,i]},n.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={592:0,75:0};n.O.j=e=>0===r[e];var e=(e,t)=>{var o,i,[s,l,a]=t,u=0;if(s.some(e=>0!==r[e])){for(o in l)n.o(l,o)&&(n.m[o]=l[o]);if(a)var c=a(n)}for(e&&e(t);u<s.length;u++)i=s[u],n.o(r,i)&&r[i]&&r[i][0](),r[i]=0;return n.O(c)},t=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];t.forEach(e.bind(null,0)),t.push=e.bind(null,t.push.bind(t))})();var o=n.O(void 0,[75],()=>n(955));o=n.O(o)})();
(()=>{"use strict";var e={955(){const e=window.wp.blocks,t=window.wp.i18n,n=window.wp.blockEditor,r=(window.wp.components,window.ReactJSXRuntime);(0,e.registerBlockType)("jvb/summary",{edit:function({attributes:e,setAttributes:o}){const i=(0,n.useBlockProps)();return(0,r.jsx)("div",{...i,children:(0,r.jsxs)("div",{className:"jvb-summary-preview",children:[(0,r.jsx)("h3",{children:(0,t.__)("Summary","jvb")}),(0,r.jsx)("p",{className:"jvb-list-preview-note",children:(0,t.__)("This will inherit the current query to build the information from our custom meta on the front end.","jvb")})]})})},save:function(){return null}})}};const t={};function n(r){const o=t[r];if(void 0!==o)return o.exports;const i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.m=e,(()=>{const e=[];n.O=(t,r,o,i)=>{if(r){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[r,o,i])}let c=1/0;for(s=0;s<e.length;s++){let[r,o,i]=e[s],u=!0;for(var l=0;l<r.length;l++)1&i&&!(c>=i)||!Object.keys(n.O).every(e=>n.O[e](r[l]))?(u=!1,i<c&&(c=i)):r.splice(l--,1);if(u){e.splice(s--,1);const n=o();void 0!==n&&(t=n)}}return t}})(),n.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={592:0,75:0};n.O.j=t=>0===e[t];const t=(t,r)=>{let[o,i,s]=r;var c,l,u=0;if(o.some(t=>0!==e[t])){for(c in i)n.o(i,c)&&(n.m[c]=i[c]);if(s)var d=s(n)}for(t&&t(r);u<o.length;u++)l=o[u],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(d)},r=globalThis.webpackChunkjvb||=[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();let r=n.O(void 0,[75],()=>n(955));r=n.O(r)})();
build/timeline/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => '52e1cf3b8eb73003e597');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-i18n'), 'version' => 'dec3f47f9a59a30fe8f2');
build/timeline/index.js
@@ -1 +1 @@
(()=>{"use strict";var r,e={798(){const r=window.wp.blocks,e=window.wp.i18n,o=window.wp.blockEditor,i=window.ReactJSXRuntime,t=JSON.parse('{"UU":"jvb/timeline"}');(0,r.registerBlockType)(t.UU,{edit:function(){return(0,i.jsx)("p",{...(0,o.useBlockProps)(),children:(0,e.__)("Will output the timeline","jvb")})}})}},o={};function i(r){var t=o[r];if(void 0!==t)return t.exports;var n=o[r]={exports:{}};return e[r](n,n.exports,i),n.exports}i.m=e,r=[],i.O=(e,o,t,n)=>{if(!o){var l=1/0;for(v=0;v<r.length;v++){for(var[o,t,n]=r[v],s=!0,a=0;a<o.length;a++)(!1&n||l>=n)&&Object.keys(i.O).every(r=>i.O[r](o[a]))?o.splice(a--,1):(s=!1,n<l&&(l=n));if(s){r.splice(v--,1);var p=t();void 0!==p&&(e=p)}}return e}n=n||0;for(var v=r.length;v>0&&r[v-1][2]>n;v--)r[v]=r[v-1];r[v]=[o,t,n]},i.o=(r,e)=>Object.prototype.hasOwnProperty.call(r,e),(()=>{var r={643:0,627:0};i.O.j=e=>0===r[e];var e=(e,o)=>{var t,n,[l,s,a]=o,p=0;if(l.some(e=>0!==r[e])){for(t in s)i.o(s,t)&&(i.m[t]=s[t]);if(a)var v=a(i)}for(e&&e(o);p<l.length;p++)n=l[p],i.o(r,n)&&r[n]&&r[n][0](),r[n]=0;return i.O(v)},o=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];o.forEach(e.bind(null,0)),o.push=e.bind(null,o.push.bind(o))})();var t=i.O(void 0,[627],()=>i(798));t=i.O(t)})();
(()=>{"use strict";var e={798(){const e=window.wp.blocks,t=window.wp.i18n,o=window.wp.blockEditor,n=window.ReactJSXRuntime,r=JSON.parse('{"UU":"jvb/timeline"}');(0,e.registerBlockType)(r.UU,{edit:function(){return(0,n.jsx)("p",{...(0,o.useBlockProps)(),children:(0,t.__)("Will output the timeline","jvb")})}})}};const t={};function o(n){const r=t[n];if(void 0!==r)return r.exports;const i=t[n]={exports:{}};return e[n](i,i.exports,o),i.exports}o.m=e,(()=>{const e=[];o.O=(t,n,r,i)=>{if(n){i||=0;for(var s=e.length;s>0&&e[s-1][2]>i;s--)e[s]=e[s-1];return void(e[s]=[n,r,i])}let l=1/0;for(s=0;s<e.length;s++){let[n,r,i]=e[s],u=!0;for(var c=0;c<n.length;c++)1&i&&!(l>=i)||!Object.keys(o.O).every(e=>o.O[e](n[c]))?(u=!1,i<l&&(l=i)):n.splice(c--,1);if(u){e.splice(s--,1);const o=r();void 0!==o&&(t=o)}}return t}})(),o.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={643:0,627:0};o.O.j=t=>0===e[t];const t=(t,n)=>{let[r,i,s]=n;var l,c,u=0;if(r.some(t=>0!==e[t])){for(l in i)o.o(i,l)&&(o.m[l]=i[l]);if(s)var p=s(o)}for(t&&t(n);u<r.length;u++)c=r[u],o.o(e,c)&&e[c]&&e[c][0](),e[c]=0;return o.O(p)},n=globalThis.webpackChunkjvb||=[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();let n=o.O(void 0,[627],()=>o(798));n=o.O(n)})();
build/video/index.asset.php
@@ -1 +1 @@
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => 'c48f86c4435d0e281940');
<?php return array('dependencies' => array('react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n'), 'version' => 'd8387d12dd9c58548b03');
build/video/index.js
@@ -1 +1 @@
(()=>{"use strict";var e,t={747(){const e=window.wp.blocks,t=window.wp.blockEditor,o=window.wp.i18n,l=window.wp.components,r=window.ReactJSXRuntime,i=["video"],n=[["core/heading",{level:1,placeholder:"Add heading...",textAlign:"center"}],["core/paragraph",{placeholder:"Add description...",align:"center"}],["core/buttons",{layout:{type:"flex",justifyContent:"center"}}]];(0,e.registerBlockType)("jvb/video",{edit:function({attributes:e,setAttributes:s}){const{posterId:a,posterUrl:c,videoSources:d,fadeEffect:v,overlayOpacity:p,contentAlignment:h,minHeight:j}=e,b=(0,t.useBlockProps)({className:"video-cover-editor",style:{minHeight:j?`${j}px`:void 0}}),m=(0,t.useInnerBlocksProps)({className:"video-cover-content"},{template:n,templateLock:!1});return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(t.InspectorControls,{children:[(0,r.jsxs)(l.PanelBody,{title:(0,o.__)("Video Settings","jvb"),initialOpen:!0,children:[(0,r.jsx)(l.BaseControl,{label:(0,o.__)("Poster Image","jvb"),help:(0,o.__)("Image shown while video loads","jvb"),children:(0,r.jsx)(t.MediaUploadCheck,{children:(0,r.jsx)(t.MediaUpload,{onSelect:e=>{s({posterId:e.id,posterUrl:e.url})},allowedTypes:["image"],value:a,render:({open:e})=>(0,r.jsxs)(r.Fragment,{children:[c&&(0,r.jsx)("img",{src:c,alt:(0,o.__)("Poster preview","jvb"),style:{maxWidth:"100%",marginBottom:"10px"}}),(0,r.jsx)(l.Button,{onClick:e,variant:c?"secondary":"primary",children:c?(0,o.__)("Change Poster","jvb"):(0,o.__)("Select Poster","jvb")}),c&&(0,r.jsx)(l.Button,{isDestructive:!0,onClick:()=>s({posterId:0,posterUrl:""}),style:{marginLeft:"10px"},children:(0,o.__)("Remove","jvb")})]})})})}),(0,r.jsxs)(l.BaseControl,{label:(0,o.__)("Video Sources","jvb"),help:(0,o.__)("Add multiple formats for better browser support (mp4, webm, etc.)","jvb"),children:[d.length>0&&(0,r.jsx)("ul",{className:"video-source-list",children:d.map((e,t)=>(0,r.jsxs)("li",{className:"video-source-item",children:[(0,r.jsx)("span",{className:"video-source-mime",children:e.mime}),(0,r.jsx)(l.Button,{isDestructive:!0,isSmall:!0,onClick:()=>(e=>{const t=[...d];t.splice(e,1),s({videoSources:t})})(t),children:(0,o.__)("Remove","jvb")})]},t))}),(0,r.jsx)(t.MediaUploadCheck,{children:(0,r.jsx)(t.MediaUpload,{multiple:!0,onSelect:e=>{const t=(Array.isArray(e)?e:[e]).filter(e=>!d.some(t=>t.id===e.id)).map(e=>({id:e.id,url:e.url,mime:e.mime}));t.length&&s({videoSources:[...d,...t]})},allowedTypes:i,render:({open:e})=>(0,r.jsx)(l.Button,{onClick:e,variant:"secondary",children:(0,o.__)("Add Video","jvb")})})})]}),(0,r.jsx)(l.ToggleControl,{label:(0,o.__)("Fade Effect","jvb"),help:(0,o.__)("Add fade class to video element","jvb"),checked:v,onChange:e=>s({fadeEffect:e})})]}),(0,r.jsxs)(l.PanelBody,{title:(0,o.__)("Overlay Settings","jvb"),initialOpen:!0,children:[(0,r.jsx)(l.RangeControl,{label:(0,o.__)("Overlay Opacity","jvb"),help:(0,o.__)("Darken video for better text readability","jvb"),value:p,onChange:e=>s({overlayOpacity:e}),min:0,max:100,step:5}),(0,r.jsx)(l.SelectControl,{label:(0,o.__)("Content Alignment","jvb"),value:h,options:[{label:(0,o.__)("Top Left","jvb"),value:"top-left"},{label:(0,o.__)("Top Center","jvb"),value:"top-center"},{label:(0,o.__)("Top Right","jvb"),value:"top-right"},{label:(0,o.__)("Center Left","jvb"),value:"center-left"},{label:(0,o.__)("Center","jvb"),value:"center"},{label:(0,o.__)("Center Right","jvb"),value:"center-right"},{label:(0,o.__)("Bottom Left","jvb"),value:"bottom-left"},{label:(0,o.__)("Bottom Center","jvb"),value:"bottom-center"},{label:(0,o.__)("Bottom Right","jvb"),value:"bottom-right"}],onChange:e=>s({contentAlignment:e})}),(0,r.jsx)(l.RangeControl,{label:(0,o.__)("Minimum Height","jvb"),help:(0,o.__)("Minimum height in pixels (leave 0 for auto)","jvb"),value:j,onChange:e=>s({minHeight:e}),min:0,max:1e3,step:50})]})]}),(0,r.jsx)("div",{...b,children:c||d.length>0?(0,r.jsxs)("div",{className:"video-cover-preview",children:[c&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("img",{src:c,alt:(0,o.__)("Video poster","jvb")}),p>0&&(0,r.jsx)("div",{className:"video-overlay-preview",style:{opacity:p/100}})]}),(0,r.jsx)("div",{className:`video-cover-content-preview align-${h}`,children:(0,r.jsx)("div",{...m})}),(0,r.jsx)("div",{className:"video-info",children:(0,r.jsxs)("p",{children:[d.length," ",(0,o.__)("desktop source(s)","jvb")]})})]}):(0,r.jsx)("div",{className:"video-cover-placeholder",children:(0,r.jsx)("p",{children:(0,o.__)("Configure video sources in the sidebar →","jvb")})})})]})},save:({attributes:e})=>{const o=t.useBlockProps.save({className:"video-cover-wrapper-placeholder"});return(0,r.jsx)("div",{...o,children:(0,r.jsx)(t.InnerBlocks.Content,{})})}})}},o={};function l(e){var r=o[e];if(void 0!==r)return r.exports;var i=o[e]={exports:{}};return t[e](i,i.exports,l),i.exports}l.m=t,e=[],l.O=(t,o,r,i)=>{if(!o){var n=1/0;for(d=0;d<e.length;d++){for(var[o,r,i]=e[d],s=!0,a=0;a<o.length;a++)(!1&i||n>=i)&&Object.keys(l.O).every(e=>l.O[e](o[a]))?o.splice(a--,1):(s=!1,i<n&&(n=i));if(s){e.splice(d--,1);var c=r();void 0!==c&&(t=c)}}return t}i=i||0;for(var d=e.length;d>0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[o,r,i]},l.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={205:0,601:0};l.O.j=t=>0===e[t];var t=(t,o)=>{var r,i,[n,s,a]=o,c=0;if(n.some(t=>0!==e[t])){for(r in s)l.o(s,r)&&(l.m[r]=s[r]);if(a)var d=a(l)}for(t&&t(o);c<n.length;c++)i=n[c],l.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return l.O(d)},o=globalThis.webpackChunkjvb=globalThis.webpackChunkjvb||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var r=l.O(void 0,[601],()=>l(747));r=l.O(r)})();
(()=>{"use strict";var e={747(){const e=window.wp.blocks,t=window.wp.blockEditor,o=window.wp.i18n,l=window.wp.components,i=window.ReactJSXRuntime,n=["video"],r=[["core/heading",{level:1,placeholder:"Add heading...",textAlign:"center"}],["core/paragraph",{placeholder:"Add description...",align:"center"}],["core/buttons",{layout:{type:"flex",justifyContent:"center"}}]];(0,e.registerBlockType)("jvb/video",{edit:function({attributes:e,setAttributes:s}){const{posterId:a,posterUrl:c,videoSources:d,fadeEffect:v,overlayOpacity:p,contentAlignment:h,minHeight:j}=e,m=(0,t.useBlockProps)({className:"video-cover-editor",style:{minHeight:j?`${j}px`:void 0}}),b=(0,t.useInnerBlocksProps)({className:"video-cover-content"},{template:r,templateLock:!1});return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.InspectorControls,{children:[(0,i.jsxs)(l.PanelBody,{title:(0,o.__)("Video Settings","jvb"),initialOpen:!0,children:[(0,i.jsx)(l.BaseControl,{label:(0,o.__)("Poster Image","jvb"),help:(0,o.__)("Image shown while video loads","jvb"),children:(0,i.jsx)(t.MediaUploadCheck,{children:(0,i.jsx)(t.MediaUpload,{onSelect:e=>{s({posterId:e.id,posterUrl:e.url})},allowedTypes:["image"],value:a,render:({open:e})=>(0,i.jsxs)(i.Fragment,{children:[c&&(0,i.jsx)("img",{src:c,alt:(0,o.__)("Poster preview","jvb"),style:{maxWidth:"100%",marginBottom:"10px"}}),(0,i.jsx)(l.Button,{onClick:e,variant:c?"secondary":"primary",children:c?(0,o.__)("Change Poster","jvb"):(0,o.__)("Select Poster","jvb")}),c&&(0,i.jsx)(l.Button,{isDestructive:!0,onClick:()=>s({posterId:0,posterUrl:""}),style:{marginLeft:"10px"},children:(0,o.__)("Remove","jvb")})]})})})}),(0,i.jsxs)(l.BaseControl,{label:(0,o.__)("Video Sources","jvb"),help:(0,o.__)("Add multiple formats for better browser support (mp4, webm, etc.)","jvb"),children:[d.length>0&&(0,i.jsx)("ul",{className:"video-source-list",children:d.map((e,t)=>(0,i.jsxs)("li",{className:"video-source-item",children:[(0,i.jsx)("span",{className:"video-source-mime",children:e.mime}),(0,i.jsx)(l.Button,{isDestructive:!0,isSmall:!0,onClick:()=>(e=>{const t=[...d];t.splice(e,1),s({videoSources:t})})(t),children:(0,o.__)("Remove","jvb")})]},t))}),(0,i.jsx)(t.MediaUploadCheck,{children:(0,i.jsx)(t.MediaUpload,{multiple:!0,onSelect:e=>{const t=(Array.isArray(e)?e:[e]).filter(e=>!d.some(t=>t.id===e.id)).map(e=>({id:e.id,url:e.url,mime:e.mime}));t.length&&s({videoSources:[...d,...t]})},allowedTypes:n,render:({open:e})=>(0,i.jsx)(l.Button,{onClick:e,variant:"secondary",children:(0,o.__)("Add Video","jvb")})})})]}),(0,i.jsx)(l.ToggleControl,{label:(0,o.__)("Fade Effect","jvb"),help:(0,o.__)("Add fade class to video element","jvb"),checked:v,onChange:e=>s({fadeEffect:e})})]}),(0,i.jsxs)(l.PanelBody,{title:(0,o.__)("Overlay Settings","jvb"),initialOpen:!0,children:[(0,i.jsx)(l.RangeControl,{label:(0,o.__)("Overlay Opacity","jvb"),help:(0,o.__)("Darken video for better text readability","jvb"),value:p,onChange:e=>s({overlayOpacity:e}),min:0,max:100,step:5}),(0,i.jsx)(l.SelectControl,{label:(0,o.__)("Content Alignment","jvb"),value:h,options:[{label:(0,o.__)("Top Left","jvb"),value:"top-left"},{label:(0,o.__)("Top Center","jvb"),value:"top-center"},{label:(0,o.__)("Top Right","jvb"),value:"top-right"},{label:(0,o.__)("Center Left","jvb"),value:"center-left"},{label:(0,o.__)("Center","jvb"),value:"center"},{label:(0,o.__)("Center Right","jvb"),value:"center-right"},{label:(0,o.__)("Bottom Left","jvb"),value:"bottom-left"},{label:(0,o.__)("Bottom Center","jvb"),value:"bottom-center"},{label:(0,o.__)("Bottom Right","jvb"),value:"bottom-right"}],onChange:e=>s({contentAlignment:e})}),(0,i.jsx)(l.RangeControl,{label:(0,o.__)("Minimum Height","jvb"),help:(0,o.__)("Minimum height in pixels (leave 0 for auto)","jvb"),value:j,onChange:e=>s({minHeight:e}),min:0,max:1e3,step:50})]})]}),(0,i.jsx)("div",{...m,children:c||d.length>0?(0,i.jsxs)("div",{className:"video-cover-preview",children:[c&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{src:c,alt:(0,o.__)("Video poster","jvb")}),p>0&&(0,i.jsx)("div",{className:"video-overlay-preview",style:{opacity:p/100}})]}),(0,i.jsx)("div",{className:`video-cover-content-preview align-${h}`,children:(0,i.jsx)("div",{...b})}),(0,i.jsx)("div",{className:"video-info",children:(0,i.jsxs)("p",{children:[d.length," ",(0,o.__)("desktop source(s)","jvb")]})})]}):(0,i.jsx)("div",{className:"video-cover-placeholder",children:(0,i.jsx)("p",{children:(0,o.__)("Configure video sources in the sidebar →","jvb")})})})]})},save:({attributes:e})=>{const o=t.useBlockProps.save({className:"video-cover-wrapper-placeholder"});return(0,i.jsx)("div",{...o,children:(0,i.jsx)(t.InnerBlocks.Content,{})})}})}};const t={};function o(l){const i=t[l];if(void 0!==i)return i.exports;const n=t[l]={exports:{}};return e[l](n,n.exports,o),n.exports}o.m=e,(()=>{const e=[];o.O=(t,l,i,n)=>{if(l){n||=0;for(var r=e.length;r>0&&e[r-1][2]>n;r--)e[r]=e[r-1];return void(e[r]=[l,i,n])}let s=1/0;for(r=0;r<e.length;r++){let[l,i,n]=e[r],c=!0;for(var a=0;a<l.length;a++)1&n&&!(s>=n)||!Object.keys(o.O).every(e=>o.O[e](l[a]))?(c=!1,n<s&&(s=n)):l.splice(a--,1);if(c){e.splice(r--,1);const o=i();void 0!==o&&(t=o)}}return t}})(),o.o=(e,t)=>Object.hasOwn(e,t),(()=>{const e={205:0,601:0};o.O.j=t=>0===e[t];const t=(t,l)=>{let[i,n,r]=l;var s,a,c=0;if(i.some(t=>0!==e[t])){for(s in n)o.o(n,s)&&(o.m[s]=n[s]);if(r)var d=r(o)}for(t&&t(l);c<i.length;c++)a=i[c],o.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return o.O(d)},l=globalThis.webpackChunkjvb||=[];l.forEach(t.bind(null,0)),l.push=t.bind(null,l.push.bind(l))})();let l=o.O(void 0,[601],()=>o(747));l=o.O(l)})();
build/video/style-index-rtl.css
@@ -1 +1 @@
.video-cover{display:flex;min-height:75vh;overflow:hidden;position:relative;width:100%}.video-cover .wrap{background-color:rgb(var(--contrast-200))}.video-cover .video-container{background-color:rgb(var(--action-50));bottom:0;display:flex;right:0;min-height:100%;min-width:100%;position:absolute;left:0;top:0;z-index:0}.video-cover .video-container.fade{animation:fadeIn 1s ease-in}.video-cover .video-container video{filter:grayscale(100%) contrast(1);flex:1 0 100%;mix-blend-mode:multiply;-o-object-fit:cover;object-fit:cover;opacity:.85;pointer-events:none}.video-cover .inner-wrap{color:rgb(var(--action-contrast));padding:2rem;position:relative;width:100%;z-index:2}.video-cover .inner-wrap h1,.video-cover .inner-wrap h2,.video-cover .inner-wrap h3,.video-cover .inner-wrap h4,.video-cover .inner-wrap h5,.video-cover .inner-wrap h6{color:rgb(var(--action-contrast));margin:2rem 0 0;text-shadow:0 2px 4px rgba(0,0,0,.5);word-spacing:100vw}.video-cover .inner-wrap p{color:rgb(var(--action-contrast));letter-spacing:2px;margin:0;text-shadow:0 1px 2px rgba(0,0,0,.5);text-transform:uppercase}.video-cover .inner-wrap .media-text figure{max-width:50%}@media(min-width:768px){.video-cover .inner-wrap .media-text{--align:flex-start;gap:3rem;max-width:var(--content)}}.video-cover .inner-wrap .media-text>div{width:-moz-fit-content;width:fit-content}.video-cover .inner-wrap .buttons a{border-color:rgb(var(--action-contrast));color:rgb(var(--action-contrast));font-weight:var(--fw-h-bold)}.video-cover .inner-wrap .buttons a:visited,.video-cover .inner-wrap .buttons a:visited:hover{color:rgb(var(--action-contrast))}.video-cover .inner-wrap .buttons a:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.video-cover .inner-wrap .outline a{background-color:rgba(var(--base),rgba(var(--base),var(--op-3)))}.video-cover .inner-wrap .buttons{margin:3rem 0;max-width:var(--wide)}.video-cover .inner-wrap .buttons li{background-color:rgba(var(--action-0),var(--op-4))}.video-cover .inner-wrap .wp-block-button__link{text-shadow:none}.video-cover.align-top-left{align-items:flex-start;justify-content:flex-start}.video-cover.align-top-center{align-items:flex-start;justify-content:center}.video-cover.align-top-right{align-items:flex-start;justify-content:flex-end}.video-cover.align-center-left{align-items:center;justify-content:flex-start}.video-cover.align-center{align-items:center;justify-content:center}.video-cover.align-center-right{align-items:center;justify-content:flex-end}.video-cover.align-bottom-left{align-items:flex-end;justify-content:flex-start}.video-cover.align-bottom-center{align-items:flex-end;justify-content:center}.video-cover.align-bottom-right{align-items:flex-end;justify-content:flex-end}.video-cover.alignfull{margin-right:calc(50% - 50vw);margin-left:calc(50% - 50vw);max-width:none;width:100vw}.video-cover.alignwide{max-width:1200px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}
.video-cover{display:flex;min-height:75vh;overflow:hidden;position:relative;width:100%}.video-cover .wrap{background-color:rgb(var(--contrast-200))}.video-cover .video-container{background-color:rgb(var(--action-50));bottom:0;display:flex;right:0;min-height:100%;min-width:100%;position:absolute;left:0;top:0;z-index:0}.video-cover .video-container.fade{animation:fadeIn 1s ease-in}.video-cover .video-container video{filter:grayscale(100%) contrast(1);flex:1 0 100%;mix-blend-mode:multiply;object-fit:cover;opacity:.85;pointer-events:none}.video-cover .inner-wrap{color:rgb(var(--action-contrast));padding:2rem;position:relative;width:100%;z-index:2}.video-cover .inner-wrap h1,.video-cover .inner-wrap h2,.video-cover .inner-wrap h3,.video-cover .inner-wrap h4,.video-cover .inner-wrap h5,.video-cover .inner-wrap h6{color:rgb(var(--action-contrast));margin:2rem 0 0;text-shadow:0 2px 4px rgba(0,0,0,.5);word-spacing:100vw}.video-cover .inner-wrap p{color:rgb(var(--action-contrast));letter-spacing:2px;margin:0;text-shadow:0 1px 2px rgba(0,0,0,.5);text-transform:uppercase}.video-cover .inner-wrap .media-text figure{max-width:50%}@media(min-width:768px){.video-cover .inner-wrap .media-text{--align:flex-start;gap:3rem;max-width:var(--content)}}.video-cover .inner-wrap .media-text>div{width:fit-content}.video-cover .inner-wrap .buttons a{border-color:rgb(var(--action-contrast));color:rgb(var(--action-contrast));font-weight:var(--fw-h-bold)}.video-cover .inner-wrap .buttons a:visited,.video-cover .inner-wrap .buttons a:visited:hover{color:rgb(var(--action-contrast))}.video-cover .inner-wrap .buttons a:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.video-cover .inner-wrap .outline a{background-color:rgba(var(--base),rgba(var(--base),var(--op-3)))}.video-cover .inner-wrap .buttons{margin:3rem 0;max-width:var(--wide)}.video-cover .inner-wrap .buttons li{background-color:rgba(var(--action-0),var(--op-4))}.video-cover .inner-wrap .wp-block-button__link{text-shadow:none}.video-cover.align-top-left{align-items:flex-start;justify-content:flex-start}.video-cover.align-top-center{align-items:flex-start;justify-content:center}.video-cover.align-top-right{align-items:flex-start;justify-content:flex-end}.video-cover.align-center-left{align-items:center;justify-content:flex-start}.video-cover.align-center{align-items:center;justify-content:center}.video-cover.align-center-right{align-items:center;justify-content:flex-end}.video-cover.align-bottom-left{align-items:flex-end;justify-content:flex-start}.video-cover.align-bottom-center{align-items:flex-end;justify-content:center}.video-cover.align-bottom-right{align-items:flex-end;justify-content:flex-end}.video-cover.alignfull{margin-right:calc(50% - 50vw);margin-left:calc(50% - 50vw);max-width:none;width:100vw}.video-cover.alignwide{max-width:1200px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}
build/video/style-index.css
@@ -1 +1 @@
.video-cover{display:flex;min-height:75vh;overflow:hidden;position:relative;width:100%}.video-cover .wrap{background-color:rgb(var(--contrast-200))}.video-cover .video-container{background-color:rgb(var(--action-50));bottom:0;display:flex;left:0;min-height:100%;min-width:100%;position:absolute;right:0;top:0;z-index:0}.video-cover .video-container.fade{animation:fadeIn 1s ease-in}.video-cover .video-container video{filter:grayscale(100%) contrast(1);flex:1 0 100%;mix-blend-mode:multiply;-o-object-fit:cover;object-fit:cover;opacity:.85;pointer-events:none}.video-cover .inner-wrap{color:rgb(var(--action-contrast));padding:2rem;position:relative;width:100%;z-index:2}.video-cover .inner-wrap h1,.video-cover .inner-wrap h2,.video-cover .inner-wrap h3,.video-cover .inner-wrap h4,.video-cover .inner-wrap h5,.video-cover .inner-wrap h6{color:rgb(var(--action-contrast));margin:2rem 0 0;text-shadow:0 2px 4px rgba(0,0,0,.5);word-spacing:100vw}.video-cover .inner-wrap p{color:rgb(var(--action-contrast));letter-spacing:2px;margin:0;text-shadow:0 1px 2px rgba(0,0,0,.5);text-transform:uppercase}.video-cover .inner-wrap .media-text figure{max-width:50%}@media(min-width:768px){.video-cover .inner-wrap .media-text{--align:flex-start;gap:3rem;max-width:var(--content)}}.video-cover .inner-wrap .media-text>div{width:-moz-fit-content;width:fit-content}.video-cover .inner-wrap .buttons a{border-color:rgb(var(--action-contrast));color:rgb(var(--action-contrast));font-weight:var(--fw-h-bold)}.video-cover .inner-wrap .buttons a:visited,.video-cover .inner-wrap .buttons a:visited:hover{color:rgb(var(--action-contrast))}.video-cover .inner-wrap .buttons a:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.video-cover .inner-wrap .outline a{background-color:rgba(var(--base),rgba(var(--base),var(--op-3)))}.video-cover .inner-wrap .buttons{margin:3rem 0;max-width:var(--wide)}.video-cover .inner-wrap .buttons li{background-color:rgba(var(--action-0),var(--op-4))}.video-cover .inner-wrap .wp-block-button__link{text-shadow:none}.video-cover.align-top-left{align-items:flex-start;justify-content:flex-start}.video-cover.align-top-center{align-items:flex-start;justify-content:center}.video-cover.align-top-right{align-items:flex-start;justify-content:flex-end}.video-cover.align-center-left{align-items:center;justify-content:flex-start}.video-cover.align-center{align-items:center;justify-content:center}.video-cover.align-center-right{align-items:center;justify-content:flex-end}.video-cover.align-bottom-left{align-items:flex-end;justify-content:flex-start}.video-cover.align-bottom-center{align-items:flex-end;justify-content:center}.video-cover.align-bottom-right{align-items:flex-end;justify-content:flex-end}.video-cover.alignfull{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);max-width:none;width:100vw}.video-cover.alignwide{max-width:1200px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}
.video-cover{display:flex;min-height:75vh;overflow:hidden;position:relative;width:100%}.video-cover .wrap{background-color:rgb(var(--contrast-200))}.video-cover .video-container{background-color:rgb(var(--action-50));bottom:0;display:flex;left:0;min-height:100%;min-width:100%;position:absolute;right:0;top:0;z-index:0}.video-cover .video-container.fade{animation:fadeIn 1s ease-in}.video-cover .video-container video{filter:grayscale(100%) contrast(1);flex:1 0 100%;mix-blend-mode:multiply;object-fit:cover;opacity:.85;pointer-events:none}.video-cover .inner-wrap{color:rgb(var(--action-contrast));padding:2rem;position:relative;width:100%;z-index:2}.video-cover .inner-wrap h1,.video-cover .inner-wrap h2,.video-cover .inner-wrap h3,.video-cover .inner-wrap h4,.video-cover .inner-wrap h5,.video-cover .inner-wrap h6{color:rgb(var(--action-contrast));margin:2rem 0 0;text-shadow:0 2px 4px rgba(0,0,0,.5);word-spacing:100vw}.video-cover .inner-wrap p{color:rgb(var(--action-contrast));letter-spacing:2px;margin:0;text-shadow:0 1px 2px rgba(0,0,0,.5);text-transform:uppercase}.video-cover .inner-wrap .media-text figure{max-width:50%}@media(min-width:768px){.video-cover .inner-wrap .media-text{--align:flex-start;gap:3rem;max-width:var(--content)}}.video-cover .inner-wrap .media-text>div{width:fit-content}.video-cover .inner-wrap .buttons a{border-color:rgb(var(--action-contrast));color:rgb(var(--action-contrast));font-weight:var(--fw-h-bold)}.video-cover .inner-wrap .buttons a:visited,.video-cover .inner-wrap .buttons a:visited:hover{color:rgb(var(--action-contrast))}.video-cover .inner-wrap .buttons a:hover{background-color:rgb(var(--action-0));color:rgb(var(--action-contrast))}.video-cover .inner-wrap .outline a{background-color:rgba(var(--base),rgba(var(--base),var(--op-3)))}.video-cover .inner-wrap .buttons{margin:3rem 0;max-width:var(--wide)}.video-cover .inner-wrap .buttons li{background-color:rgba(var(--action-0),var(--op-4))}.video-cover .inner-wrap .wp-block-button__link{text-shadow:none}.video-cover.align-top-left{align-items:flex-start;justify-content:flex-start}.video-cover.align-top-center{align-items:flex-start;justify-content:center}.video-cover.align-top-right{align-items:flex-start;justify-content:flex-end}.video-cover.align-center-left{align-items:center;justify-content:flex-start}.video-cover.align-center{align-items:center;justify-content:center}.video-cover.align-center-right{align-items:center;justify-content:flex-end}.video-cover.align-bottom-left{align-items:flex-end;justify-content:flex-start}.video-cover.align-bottom-center{align-items:flex-end;justify-content:center}.video-cover.align-bottom-right{align-items:flex-end;justify-content:flex-end}.video-cover.alignfull{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);max-width:none;width:100vw}.video-cover.alignwide{max-width:1200px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}
checks.php
@@ -1,6 +1,6 @@
<?php
use JVBase\base\Options;
use JVBase\base\options;
use JVBase\base\Site;
use JVBase\managers\Cache;
use JVBase\registrar\Registrar;
@@ -25,10 +25,10 @@
    if (!Site::has('limit_hours')) {
        return true;
    }
    if (Options::get('open_to_public') !== '1') {
    if ( options::get('open_to_public') !== '1') {
        return false;
    }
    if (!empty(Options::get('today_hours'))) {
    if (!empty(options::get('today_hours'))) {
        return jvbIsTimeBetween();
    }
    return jvbIsCurrentlyOpen();
cleanup.php
@@ -86,7 +86,6 @@
    // Remove version info and meta tags
    remove_action('wp_head', 'wp_generator');
    remove_action('wp_head', 'rsd_link');
    remove_action('wp_head', 'wlwmanifest_link');
    remove_action('wp_head', 'wp_shortlink_wp_head');
    // Remove emoji support
@@ -126,7 +125,7 @@
    // Block user enumeration
    add_action('init', 'jvbBlockUserEnumeration');
    add_filter('rest_endpoints', 'jvbDisableUserEndpoints');
//  add_filter('rest_endpoints', 'jvbDisableUserEndpoints');
    add_filter('author_rewrite_rules', '__return_empty_array');
    // Disable file editing in admin (if not already set)
inc/blocks/CustomBlocks.php
@@ -111,7 +111,8 @@
    protected function checkMethods(?string $content, array $block, ?WP_Block $parent = null, bool $isPrerender = false):?string
    {
        $blockName = $this->sanitizeBlockName($block);
        if (str_starts_with($blockName, 'woocommerce')) {
        if (str_starts_with($blockName, 'woocommerce') ) {
            return $content;
        }
@@ -2304,6 +2305,10 @@
        ), jvbSearch($placeholder, uniqid(), $label, $buttonText, $isInside, $hideInput));
    }
    //core_shortcode
    public function prerender_core_shortcode(array $block, ?string $content, ?WP_Block $parent):?string
    {
        return do_shortcode($block['innerHTML']??'');
    }
    public function prerender_core_social_link(array $block, ?string $content, ?WP_Block $parent):?string
    {
//      jvbDump($block, 'social link');
@@ -2447,7 +2452,6 @@
        }
        $content = '';
        foreach ($block['innerBlocks'] as $b) {
            $rendered = $parent
                ? $this->checkMethods(null, $b, $parent, true)
                : render_block($b);
inc/blocks/MenuBlock.php
@@ -1,7 +1,6 @@
<?php
namespace JVBase\blocks;
use JVBase\base\Options;
use JVBase\base\Site;
use JVBase\managers\Cache;
use JVBase\meta\Meta;
@@ -126,7 +125,8 @@
        ?>
        <header id="top">
            <h1><?=$title?></h1>
            <nav class="menu"><ul>
        </header>
        <nav class="menu"><ul>
                <?php
                $sections = $this->getSections();
                foreach ($sections as $section) {
@@ -140,7 +140,6 @@
                }
                ?>
            </ul></nav>
        </header>
        <?php
    }
@@ -212,26 +211,24 @@
        $excerpt = get_the_excerpt($ID);
        $isVariable = !empty($fields['variations']??[]);
        $priceRange = jvbCurrency($fields['price']);
        $product = wc_get_product($ID);
        $isFeatured = $product->is_featured();
        $isOnSale = $product->is_on_sale();
        $isPurchasable = $product->is_purchasable() && $product->is_in_stock();
        $priceRange = $this->getPrice($fields, $isOnSale, $isPurchasable);
        if ($isVariable) {
            $prices = array_map('floatval', array_column($fields['variations'], 'price'));
            $min = min($prices);
            $max = max($prices);
            $priceRange = $min===$max ? jvbCurrency($min) : jvbCurrency($min) .' - '.jvbCurrency($max);
        }
//      if (!$isVariable) {
//          jvbDump($fields, 'Fields');
//      if (in_array($fields['post_title'],  ['Chopped Brisket Sandwich', 'Breakfast Poutine'])) {
//          jvbDump ($fields);
//      }
//      jvbDump(get_post_thumbnail_id($ID), 'thumbnail');
//      $product = wc_get_product($ID);
//      jvbDump($product->get_image_id(), 'product image');
//      jvbDump($product->get_gallery_image_ids(), 'Gallery images');
        if ($fields['post_title'] === 'Breakfast Poutine') {
//          jvbDump($ID);
//          jvbDump($fields);
        }
        $gallery = '';
        if (!empty($fields['gallery_image_ids'])) {
@@ -255,6 +252,7 @@
        $out = sprintf(
    '<div id="%s" class="menu-item%s" data-section="%s" data-label="%s" data-id="%s">
                <div class="tags abs top left row">%s%s</div>
                <div class="header row x-btw">
                    <figure>%s<figcaption>%s</figcaption></figure>
                    <div class="text row x-btw">
@@ -262,46 +260,64 @@
                        <p class="price">%s</p>
                    </div>
                </div>
                <div class="gallery row%s">%s</div>
                <div class="gallery row left%s">%s</div>
                <div class="description">%s</div>
                <div class="info col right">',
                <div class="info col right">
                %s',
            sanitize_title($fields['post_title']),
            $isVariable ? ' variable' : '',
            $slug,
            $fields['post_title'],
            $ID,
            $isOnSale ? '<span class="sale row left top">'.jvbIcon('tag-chevron').'Sale!</span>' : '',
            $isFeatured ? '<span class="featured row top">'.jvbIcon('star').'We Recommend</span>' : '',
            !empty($fields['image_id']) ? jvbFormatImage((int)$fields['image_id'],'tiny','medium',true,'menu') : '',
            $caption,
            $fields['post_title'],
            $priceRange,
            empty($gallery) ? '' : ' has',
            $gallery,
            $excerpt
            $excerpt,
            $this->getSaleText($fields, $isPurchasable)
        );
        if (!empty($fields['variations']??[])) {
            foreach ($fields['variations'] as $index => $row) {
                $v = wc_get_product($row['id']);
                $isOnSale = $v->is_on_sale();
                $isPurchasable = $v->is_purchasable() && $v->is_in_stock();
                $price = $this->getPrice($row, $isOnSale, $isPurchasable);
                $title = str_replace($fields['post_title'].' - ','',$row['post_title']);
                $out .= sprintf(
                '<div class="row right nowrap">
                '<div class="row right top nowrap">
                        %s
                        <figure>%s<figcaption>%s</figcaption></figure>
                        <div>
                            <h4>%s — %s</h4>
                            %s
                        </div><a href="?add-to-cart=%d&variation_id=%d"
                        </div><a %shref="?add-to-cart=%d&variation_id=%d"
   data-quantity="1"
   data-product_id="%d"
   data-variation_id="%d"
   class="btn chip add_to_cart_button ajax_add_to_cart add-to-cart">
   %s
   <span>Add to Cart</span>
</a>', //Note: we had 3 %s%s%s before the last </div> last time. This was to add optional ingredients or preparation time duration, not default in WooCommerce
                        $row['title'],
                        jvbCurrency($row['price']),
</a>%s', //Note: we had 3 %s%s%s before the last </div> last time. This was to add optional ingredients or preparation time duration, not default in WooCommerce
                $isOnSale ? '<span class="abs top right">'.jvbIcon('tag-chevron').'Sale!</span>' : '',
                        !empty($row['image_id']) ? jvbFormatImage($row['image_id'], 'tiny', 'medium') : '',
                        empty($row['post_title']) ? $fields['post_title'] : $row['post_title'],
                        empty($title) ? $fields['post_title'] : $title,
                        $price,
                        empty($row['description']) ? '' : wpautop($row['description']),
                        $isPurchasable ? '' : 'class="disabled" ',
                        $ID,
                        $row['id'],
                        $ID,
                        $row['id'],
                        jvbIcon('plus-square')
                        jvbIcon('plus-square'),
                        $this->getSaleText($row, $isPurchasable)
                );
//              $out .= Form::render(
@@ -326,16 +342,18 @@
                $out .= '</div>';
            }
        } else {
            $isPurchasable = $product->is_purchasable() && $product->is_in_stock();
            $out .= sprintf(
                '<a href="?add-to-cart=%d"
                   data-quantity="1"
                   data-product_id="%d"
                   class="btn chip add_to_cart_button ajax_add_to_cart add-to-cart">
                   class="%sbtn chip add_to_cart_button ajax_add_to_cart add-to-cart">
                   %s
                    <span>Add to Cart</span>
                </a>',
                $ID,
                $ID,
                $isPurchasable ? '' : 'disabled ',
                jvbIcon('plus-square')
            );
//          $out .= Form::render(
@@ -365,6 +383,36 @@
        echo $out;
    }
    protected function getPrice(array $item, bool $isOnSale, bool $isPurchasable):string
    {
        $price = jvbCurrency($item['regular_price']);
        $price = $isOnSale ? '<s> '.$price.' </s> '.jvbCurrency($item['sale_price']) : $price;
        return $price;
    }
    protected function getSaleText(array $item, bool $isPurchasable):string
    {
        if (empty($item['date_on_sale_to']) && $isPurchasable) {
            return '';
        }
        $out = sprintf(
            '<span class="sale-until">%sOn sale until <time datetime="%s">%s</time>.</span>',
            jvbIcon('tag-chevron'),
            $item['date_on_sale_to']->format('c'),
            $item['date_on_sale_to']->format('l, F j, Y')
        );
        if (!$isPurchasable) {
            $out .= sprintf(
                '<span class="out-of-stock">%sTemporarily Out of Stock</span>',
                jvbIcon('warning-circle')
            );
        }
        return $out;
    }
    /**
    protected function renderMenuItemOLD(int $ID, string $slug, string $postType = 'menu_item') {
        $meta = Meta::forPost($ID);
inc/helpers/all.php
@@ -11,6 +11,7 @@
require(JVB_DIR . '/inc/helpers/dashboard.php');
require(JVB_DIR . '/inc/helpers/directory.php');
//require(JVB_DIR . '/inc/helpers/email.php');
require(JVB_DIR . '/inc/helpers/foodmenu.php');
require(JVB_DIR . '/inc/helpers/forms.php');
require(JVB_DIR . '/inc/helpers/formatting.php');
//require(JVB_DIR . '/inc/helpers/icons.php');
inc/helpers/foodmenu.php
New file
@@ -0,0 +1,36 @@
<?php
use JVBase\base\Options;
use JVBase\meta\Meta;
function aneb_menu_sections():array
{
    $sections = Options::get('menu_section_order');
    if (empty($sections)) {
        $sections = [];
    }
    $sections = array_map(function($section) {
        $section['id'] = absint($section['id']);
        return $section;
    }, $sections);
    $ids = array_column($sections, 'id');
    $terms = get_terms([
        'taxonomy'  => 'product_cat',
        'hide_empty'=> false,
        'exclude'   => $ids
    ]);
    if (!empty($terms) && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            $sections[] = [
                'id'            => $term->term_id,
                'name'          => $term->name,
                'image'         => Meta::forTerm($term->term_id)->get('image'),
                'description'   => $term->description,
            ];
        }
    }
    return $sections;
}
inc/helpers/time.php
@@ -1,6 +1,6 @@
<?php
use JVBase\base\Options;
use JVBase\base\options;
use JVBase\managers\Cache;
use JVBase\meta\Meta;
@@ -322,7 +322,7 @@
{
    // Get hours data if not provided
    if ($hours_data === null) {
        $hours_data = Options::get('openingHours');
        $hours_data = options::get('openingHours');
    }
    // Return false if no hours data
@@ -376,7 +376,7 @@
 */
function jvbIsTimeBetween(?string $start_time = null, ?string $end_time = null, string $timezone = 'America/Edmonton'):bool {
    if (!$start_time && !$end_time) {
        $hours = Options::get('today_hours');
        $hours = options::get('today_hours');
        $start_time = $hours['time_start'];
        $end_time = $hours['time_end'];
    }
inc/integrations/SyncDefaults.php
@@ -1,7 +1,7 @@
<?php
namespace JVBase\integrations;
use JVBase\base\Options;
use JVBase\base\options;
use JVBase\meta\Form;
use JVBase\meta\Meta;
use JVBase\registrar\Registrar;
@@ -167,7 +167,7 @@
    {
        $name = $this->getFieldName($fieldName, $type);
        if (is_null($userID)) {
            return Options::get($name);
            return options::get($name);
        } else {
            return Meta::forUser($userID)->get($name);
        }
@@ -176,7 +176,7 @@
    {
        $name = $this->getFieldName($fieldName, $type);
        if (is_null($userID)) {
            Options::set($name, $value);
            options::set($name, $value);
        } else {
            Meta::forUser($userID)->set($name, $value);
        }
inc/managers/SEO/render/SchemaOutput.php
@@ -6,10 +6,18 @@
use JVBase\Instance;
use JVBase\managers\Cache;
use JVBase\managers\SEO\BreadcrumbManager;
use JVBase\managers\SEO\render\Thing\CreativeWork\Menu;
use JVBase\managers\SEO\render\Thing\CreativeWork\MenuSection;
use JVBase\managers\SEO\render\Thing\Intangible\MenuItem;
use JVBase\managers\SEO\render\Thing\Intangible\Offer;
use JVBase\managers\SEO\render\Thing\Intangible\Service;
use JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness;
use JVBase\managers\SEO\render\Thing\Thing;
use JVBase\meta\Meta;
use JVBase\registrar\config\seo\Resolver;
use JVBase\registrar\Registrar;
use WP_Query;
if (!defined('ABSPATH')) {
    exit;
}
@@ -36,6 +44,7 @@
                $schema[] = $test;
            }
        }
        if (is_singular($this->types)) {
            $type = get_post_type();
            $registrar = Registrar::getInstance($type);
@@ -66,6 +75,8 @@
//              error_log('SEO: '.print_r($seo->schema(), true));
                $schema[] = $seo->schema()->outputArchiveSchema();
            }
        } elseif (is_post_type_archive('product')) {
            $schema[] = $this->buildProductSchema();
        }
        $isContent = array_values(array_filter(array_map(function($item) {
            return intval(get_option(BASE.$item.'_archive', false));
@@ -144,7 +155,7 @@
        }
//      $encoded =  wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
//      $encoded =  wp_json_encode($schema, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT, 1024);
        $encoded = wp_json_encode($schema, JSON_UNESCAPED_SLASHES, 1024);
        $encoded = wp_json_encode($schema, JSON_UNESCAPED_SLASHES, 2048);
        if ($encoded === false) {
            error_log('wp_json_encode failed: ' . json_last_error_msg());
            return;
@@ -362,5 +373,113 @@
        $class = SchemaHelper::getInstance()::classFromConfig($config);
        return ($class)? $class->outputSchema() : [];
    }
    public function buildProductSchema():array
    {
        $sections = aneb_menu_sections();
        if (empty($sections)) {
            $sections = [];
        }
        $menuSections = [];
        foreach ($sections as $s) {
            if (empty($s['id'])) {
                continue;
            }
            $items = new WP_Query([
                'post_type'         => 'product',
                'order'             => 'ASC',
                'posts_per_page'    => -1,
                'post_status'       => 'publish',
                'tax_query'         => [
                    [
                        'taxonomy'  => 'product_cat',
                        'terms'     => (int)$s['id']
                    ]
                ],
                'fields'            => 'ids',
            ]);
            if (!$items->have_posts())  {
                continue;
            }
            $section = new MenuSection();
            $section->setName($s['name']);
            $section->setId(get_post_type_archive_link('product').'#'.sanitize_title($s['name']));
            if (!empty($s['description'])) {
                $section->setDescription($s['description']);
            }
            $menuItems = [];
            foreach ($items->posts as $ID) {
                $meta = Meta::forPost($ID);
                $fields = $meta->getAll();
                if (empty($fields['variations'])) {
                    $item = $this->buildMenuItem($ID, $fields);
                    if ($item) {
                        $menuItems[] = $item;
                    }
                } else {
                    foreach ($fields['variations'] as $variation) {
                        $item = $this->buildMenuItem($ID, $variation);
                        if ($item) {
                            $menuItems[] = $item;
                        }
                    }
                }
            }
            if (!empty($menuItems)) {
                $section->setHasMenuItem($menuItems);
                $menuSections[] = $section;
            }
        }
        if (!empty($menuSections)) {
            $schema = new Menu();
            $schema->setName(get_bloginfo('name') . ' | Alberta\'s Best Food Truck Menu');
            $schema->setId(get_post_type_archive_link('product').'#menu');
            $schema->setDescription('Southern style barbeque with Northern flair from Meeting Creek, Alberta');
            $schema->setUrl(get_post_type_archive_link('product'));
            $schema->setHasMenuSection($menuSections);
            return $schema->outputSchema();
        }
        return [];
    }
        protected function buildMenuItem(int $ID, array $fields):MenuItem|false
        {
            $item = new MenuItem();
            $item->setUrl(get_the_permalink($ID));
            $base = get_post_type_archive_link('product').'#'.$ID.'-'.sanitize_title($fields['post_title']);
            $item->setId($base);
            $doit = false;
            if (!empty($fields['post_thumbnail']??'')) {
                $doit = true;
                $item->setImage(Thing::createImageFromID($fields['post_thumbnail']));
            }
            if (!empty($fields['post_excerpt']??'')) {
                $doit = true;
                $item->setDescription(wp_strip_all_tags($fields['post_excerpt']));
            }
            if (!empty($fields['price']??'')) {
                $doit = true;
                $offer = new Offer();
                $offer->setId($base.'-price');
                $offer->setPrice($fields['price']);
                $offer->setPriceCurrency('CAD');
                $item->setOffers($offer);
            }
            return $doit ? $item : false;
        }
}
inc/managers/ScriptLoader.php
@@ -563,6 +563,18 @@
        true
    );
    if (class_exists('WooCommerce')) {
        wp_register_script(
            'jvb-checkout',
            JVB_URL.'assets/js/min/cartCheck.min.js',
            [],
            null,
            true
        );
        wp_enqueue_script('jvb-checkout');
    }
    /******************************************
    Plugins
     ******************************************/
@@ -702,6 +714,7 @@
        wp_enqueue_script('jvb-page-nav');
    }
    // Only load on single shop pages or other relevant pages
    if (is_tax(BASE.'shop') ||
        is_singular(BASE.'partner')) {
@@ -763,6 +776,11 @@
    jvbAddScriptDependency('jvb-timeline-view-script', 'jvb-gallery');
}
//add_action('init', 'jvb_add_script_dependencies');
//function jvb_add_script_dependencies():void
//{
//
//}
function jvbAddScriptDependency(string $handle, string $dep):bool
{
inc/managers/_setup.php
@@ -1,11 +1,10 @@
<?php
if (!defined('ABSPATH')) {
    return;
}
use JVBase\managers\IconsManager;
use JVBase\registrar\Registrar;
use JVBase\base\Site;
if (!defined('ABSPATH')) {
    exit;
}
require(JVB_DIR . '/inc/managers/ScriptLoader.php');
require(JVB_DIR . '/inc/managers/Errors.php');
require(JVB_DIR . '/inc/managers/CustomTable.php');
@@ -38,7 +37,7 @@
    if (Site::has('dashboard')) {
//      require(JVB_DIR . '/inc/managers/DashboardManager.php');
        require(JVB_DIR . '/inc/managers/Dashboard\_setup.php');
        require(JVB_DIR . '/inc/managers/Dashboard/_setup.php');
        require(JVB_DIR . '/inc/managers/CRUDManager.php');
        require(JVB_DIR . '/inc/managers/UploadManager.php');
    }
inc/meta/Meta.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\meta;
use JVBase\base\options;
use JVBase\managers\Cache;
use JVBase\registrar\Registrar;
@@ -25,6 +26,7 @@
     * @var array of Registrar's defined fields, if any
     */
    protected static array $registrars = [];
    protected static ?options $options = null;
    /**
     * @var array Field values, stored in memory
     */
@@ -60,6 +62,9 @@
                self::$registrars[$this->content] = $registrar->getFields();
            }
        }
        if ($this->objectType === 'options' && !isset(self::$options)) {
            self::$options = options::getInstance();
        }
        if ($this->objectType === 'post' && function_exists('wc_get_product') && in_array($this->content, ['product', 'product_variation'], true)) {
            $this->product = wc_get_product($this->ID) ?: null;
@@ -210,10 +215,13 @@
    public function set(string $name, mixed $value): bool {
        $field = $this->getFieldConfig($name);
        if ($field) {
            if ($field['type']??'' === 'repeater' && str_contains($name, ':')) {
                return $this->setByPath($name, $value);
            } elseif ($field['type']??'' === 'group' && str_contains($name, '|')) {
                return $this->setGroup($name, $value);
            if (array_key_exists('type', $field)) {
                if ($field['type'] === 'repeater' && str_contains($name, ':')) {
                    $this->log('Setting by path in set');
                    return $this->setByPath($name, $value);
                } elseif ($field['type'] === 'group' && str_contains($name, '|')) {
                    return $this->setGroup($name, $value);
                }
            }
            if (!self::$validator->validate($value, $field)) {
@@ -407,7 +415,7 @@
     * WOOCOMMERCE PRODUCT SPECIFIC
    **************************************************************/
    protected function isProductField(string $name): bool {
        return method_exists($this->product, 'get_'.$name) || method_exists($this->product, 'set_'.$name);
        return $name === 'variations' || method_exists($this->product, 'get_'.$name) || method_exists($this->product, 'set_'.$name);
    }
    protected function getProductField(string $name): mixed {
@@ -422,7 +430,7 @@
            $variations = $this->product->get_children();
            $out = [];
            foreach ($variations as $v) {
                $out[] = self::forPost($v)->getAll();
                $out[] = array_merge(['id' => $v], self::forPost($v)->getAll());
            }
            return $out;
        }
@@ -442,8 +450,14 @@
        return [
            'price',
            'sku',
            'sale',
            'sale_price',
            'regular_price',
            'date_on_sale_from',
            'date_on_sale_to',
            'max_purchase_quantity',
            'min_purchase_quantity',
            'short_description',
            'description',
            'image_id',
            'gallery_image_ids',
            'stock',
@@ -505,9 +519,13 @@
    }
    protected function setByPath(string $path, mixed $value):bool
    {
        if (!str_contains($path, ':')) {
            $this->log('setByPath called without appropriate string (:)');
            return $this->set($path, $value);
        }
        $parts = explode(':', $path, 3);
        if (count($parts) !== 3) {
            $this->log('Could not set value by path');
            $this->log('Could not set value by path: '.$path.', with value: '.print_r($value, true));
            return false;
        }
        [$repeaterName, $rowIndex, $subField] = $parts;
@@ -536,6 +554,10 @@
    protected function setGroup(string $name, mixed $value):bool
    {
        if (!str_contains($name, '|')) {
            $this->log('setGroup called without appropriate key (|)');
            return $this->set($name, $value);
        }
        [$parent, $child] = explode('|', $name, 2);
        $this->clearCache();
        return $this->group($parent)->set($child, $value);
@@ -571,13 +593,18 @@
    protected function hasRegistrar():bool
    {
        return array_key_exists($this->content, self::$registrars);
        return !is_null($this->content) && array_key_exists($this->content, self::$registrars);
    }
    public function getFieldConfig(string $name): ?array {
        if ($this->objectType === 'options') return $this->getOptionsConfig($name);
        if (!$this->hasRegistrar()) return null;
        return self::$registrars[$this->content][$name] ?? null;
    }
        protected function getOptionsConfig(string $name):?array
        {
            return self::$options->getConfig($name);
        }
    protected function getCoreDefault(string $name):string
    {
inc/meta/MetaOld.php
@@ -1,7 +1,7 @@
<?php
namespace JVBase\meta;
use JVBase\base\Options;
use JVBase\base\options;
use JVBase\registrar\Registrar;
use WP_Post;
use WP_Term;
@@ -122,7 +122,7 @@
        }
        if ($this->type == 'option') {
            $options = Options::getInstance();
            $options = options::getInstance();
            $fields = $options->getFields();
        }
        $meta = match($type) {
inc/meta/MetaTypeManager.php
@@ -87,7 +87,7 @@
        ],
        'post'  => [
            'type'      => 'string',
            'sanitize'  => 'sanitizePost',
            'sanitize'  =>   'sanitizePost',
            'default'   => '',
        ],
        'repeater' => [
inc/registrar/Fields.php
@@ -28,7 +28,6 @@
        switch ($type) {
            case 'post':
                $this->addPostFields();
                //TODO: Add fields to post edit screen
//              add_action('add_meta_boxes', [$this, 'registerPostFields']);
                break;
            case 'term':
@@ -235,8 +234,21 @@
        $field->$property($value);
    }
    public function getFields():array
    public function getFields(bool $includeDefaults = true):array
    {
        if (!$includeDefaults) {
            $added = array_keys(match($this->type) {
                'post'  => $this->defaultPostFields(),
                'term'  => $this->defaultTermFields(),
                'user'  => $this->defaultUserFields(),
            });
            $fields = array_filter($this->fields, function($field) use ($added) {
                return !in_array($field, $added);
            }, ARRAY_FILTER_USE_KEY);
            return array_filter($fields, function($field) {
                return !$field->isHidden();
            });
        }
        return $this->fields;
    }
inc/registrar/Registrar.php
@@ -3,6 +3,7 @@
use JVBase\base\Site;
use JVBase\inc\registrar\helpers\AddCustomFields;
use JVBase\inc\registrar\helpers\HideSingle;
use JVBase\managers\Cache;
use JVBase\managers\CRUD;
@@ -57,6 +58,8 @@
    public bool $baseless = false;
    public bool $modify = false;
    protected ?AddCustomFields $addFields = null;
    protected static array $allFlags = [
        //Shared Flags
        'favouritable', 'karma', 'show_feed', 'show_directory', 'approve_new', 'has_responses', 'invitable',
@@ -437,12 +440,12 @@
    {
        $this->fields = new Fields($this->type, $this);
    }
    public function getFields():array
    public function getFields(bool $includeDefaults = true):array
    {
        return array_map(function ($field) {
            return $field->getConfig();
        },
            $this->fields->getFields()
            $this->fields->getFields($includeDefaults)
        );
    }
    public function setIcon(string $icon):self
@@ -885,6 +888,7 @@
            if ($this->registrar) {
                $this->registrar->register();
            }
            $this->addFields = new AddCustomFields($this);
            if ($this->add_image_column) {
                add_filter("manage_{$this->based}_posts_columns", [$this, 'addImageColumn']);
                add_action("manage_{$this->based}_posts_custom_column", [$this, 'showImageColumn'], 10, 2);
inc/registrar/_setup.php
@@ -23,6 +23,7 @@
require_once(JVB_DIR . '/inc/registrar/fields/UploadField.php');
require_once(JVB_DIR . '/inc/registrar/helpers/AddIntegrationFields.php');
require_once(JVB_DIR . '/inc/registrar/helpers/AddCustomFields.php');
require_once(JVB_DIR . '/inc/registrar/helpers/HideSingle.php');
require_once(JVB_DIR . '/inc/registrar/helpers/MakeCalendarType.php');
require_once(JVB_DIR . '/inc/registrar/helpers/MakeTimelineType.php');
inc/registrar/fields/Field.php
@@ -108,6 +108,10 @@
    public function setHidden(bool $hidden):void{
        $this->hidden = $hidden;
    }
    public function isHidden():bool
    {
        return $this->hidden;
    }
    public function setQuickEdit(bool $quickEdit):void{
        $this->quickEdit = $quickEdit;
    }
inc/registrar/helpers/AddCustomFields.php
New file
@@ -0,0 +1,220 @@
<?php
namespace JVBase\inc\registrar\helpers;
use JVBase\meta\MetaTypeManager;
use JVBase\meta\Sanitizer;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit;
}
class AddCustomFields {
    protected Registrar $registrar;
    public function __construct(Registrar $registrar) {
        $this->registrar = $registrar;
        if ($registrar->getType() === 'post') {
            add_action('enqueue_block_editor_assets', [$this, 'enqueue']);
        }
        add_action('init', [$this, 'registerMeta']);
    }
    public function enqueue():void
    {
        if ($this->registrar->getType() !== 'post') {
            return;
        }
        $screen = get_current_screen();
        if (!$screen || $screen->post_type !== $this->registrar->getBased()) {
            return;
        }
        $asset = include JVB_DIR.'/build/_meta/fields.asset.php';
        wp_enqueue_script(
            'jvb-editor-fields',
            JVB_URL.'/build/_meta/fields.js',
            $asset['dependencies'],
            $asset['version'],
            true
        );
        wp_add_inline_script(
            'jvb-editor-fields',
            'window.jvbFieldConfig = '.wp_json_encode([
                'postType' => $this->registrar->getBased(),
                'fields'   => array_map(function($f) {
                    $f['name'] = jvbCheckBase($f['name']);
                    return $f;
                },array_values($this->registrar->getFields(false))),
            ]).';',
            'before'
        );
    }
    public function registerMeta():void
    {
        foreach ($this->registrar->getFields(false) as $name => $config) {
            $metaType = $this->getSchemaType($config);
            $schema = $metaType === 'array' ? $this->determineSchema($config) : true;
            register_post_meta($this->registrar->getBased(), jvbCheckBase($name), [
                'single'            => true,
                'type'              => $metaType,
                'default'           => $config['default'] ?? MetaTypeManager::getType($config['type'])['default'] ?? '',
                'sanitize_callback' => fn($value) => (Sanitizer::sanitize($value, $config)),
                'auth_callback'     => fn($allowed, $key, $postID) => current_user_can('edit_post', $postID),
                'show_in_rest'      => $schema,
                'revisions_enabled' => true,
            ]);
        }
    }
        protected function getSchemaType(array $config):string
        {
            $type = MetaTypeManager::getMetaType($config['type']);
            if ($config['type'] === 'text' && array_key_exists('subtype', $config) && $config['subtype'] === 'number'){
                $type = 'number';
            }
            return $type;
        }
    protected function determineSchema(array $config):array|bool
    {
        return match ($config['type']) {
            'url'   => $this->schemaText('uri'),
            'email' => $this->schemaText('email'),
            'text'  => $this->checkText($config),
            'select','set','radio','checkbox' => $this->schemaOptions($config),
            'repeater'  => $this->schemaRepeater($config),
            'taglist'   => $this->schemaTagList($config),
            'group'     => $this->schemaGroup($config),
            'location'  => $this->schemaLocation($config),
            default => true
        };
    }
    protected function schema(array $additional = []):array
    {
        return [
            'schema'    => $additional
        ];
    }
    protected function checkText(array $config):array|true
    {
        if (!array_key_exists('subtype', $config)) {
            return true;
        }
        return match ($config['subtype']) {
            'url'   => $this->schemaText('url'),
            'email' => $this->schemaText('email'),
            default => true
        };
    }
    protected function schemaText(string $type):array|true
    {
        if (!in_array($type, ['uri', 'email', 'date-time', 'hex-color', 'uuid', 'ip'])) {
            error_log('Attempted to set unknown schema type for Meta: '.$type);
            return true;
        }
        return $this->schema(['type' => 'string', 'format' => $type]);
    }
    protected function schemaOptions(array $config):array|true
    {
        if (!array_key_exists('options', $config) || empty($config['options'])) {
            return true;
        }
        return $this->schema([
            'type'  => 'string',
            'enum'  => $config['options']
        ]);
    }
    protected function schemaRepeater(array $config):array|true
    {
        $schema = [
            'type'  => 'object',
        ];
        $properties = [];
        $required = [];
        foreach ($config['fields']??[] as $name => $c) {
            $args = [
                'type'  => $this->getSchemaType($c)
            ];
            if (array_key_exists('required', $c) && $c['required']) {
                $required[] = $name;
            }
            $schema = $this->determineSchema($c);
            if (is_array($schema)) {
                if (array_key_exists('default', $schema)) {
                    $args['default'] = $schema['default'];
                }
                if (array_key_exists('enum', $schema)) {
                    $args['enum'] = $schema['enum'];
                }
                if (array_key_exists('format', $schema)) {
                    $args['format'] = $schema['format'];
                }
            }
            if (array_key_exists('default', $c)) {
                //TODO: We should check for any stored default for the SEO things
                $args['default'] = $c['default'];
            }
            $properties[$name] = $args;
        }
        $schema['properties'] = $properties;
        if (!empty($required)) {
            $schema['required'] = $required;
        }
        return $schema;
    }
    protected function schemaTagList(array $config):array|true
    {
        //Likely just the same as repeater
        return $this->schemaRepeater($config);
    }
    protected function schemaGroup(array $config):array|true
    {
        //Likely just the same as repeater
        return $this->schemaRepeater($config);
    }
    protected function schemaLocation(array $config):array|true
    {
        return [
            'type'          => 'object',
            'properties'    => [
                'address'   => [
                    'type'  => 'string'
                ],
                'lat'   => [
                    'type'  => 'number',
                ],
                'lng'   => [
                    'type'  => 'number',
                ],
                'street'   => [
                    'type'  => 'string'
                ],
                'city'   => [
                    'type'  => 'string'
                ],
                'province'   => [
                    'type'  => 'string'
                ],
                'postal_code'   => [
                    'type'  => 'string'
                ],
                'country'   => [
                    'type'  => 'string'
                ],
            ]
        ];
    }
}
inc/registrar/helpers/MakeCalendarType.php
@@ -301,9 +301,8 @@
        if ($post->post_type === $this->postType) {
            $get = ['year', 'month','day'];
            $values = Meta::forPost($post->ID)->getAll($get);
            foreach ($values as $key => $value) {
                if (!empty($value)) {
                if (!empty($value) && $value !== 0) {
                    $url = str_replace("%e$key%", $value, $url);
                } else {
                    $url = str_replace("/%e$key%", '', $url);
inc/rest/routes/OptionsRoutes.php
@@ -1,7 +1,7 @@
<?php
namespace JVBase\rest\routes;
use JVBase\base\Options;
use JVBase\base\options;
use JVBase\Instance;
use JVBase\managers\queue\Queue;
use JVBase\rest\PermissionHandler;
@@ -81,7 +81,7 @@
            'success'   => []
        ];
        Options::setAll($data['changes']);
        options::setAll($data['changes']);
//      foreach ($data as $field => $value) {
//          if (array_key_exists($field, $fields)) {
//              $success = $meta->updateValue($field, $value);
jvb.php
@@ -117,7 +117,7 @@
//const JVB_TESTING = false;
//if (!JVB_TESTING) {
//  add_filter('show_admin_bar', '__return_false');
    add_filter('show_admin_bar', '__return_false');
//}
@@ -247,7 +247,7 @@
/**
 * Utilities
 */
//require(JVB_DIR . '/cleanup.php');
require(JVB_DIR . '/cleanup.php');
require(JVB_DIR . '/inc/admin/_setup.php');
require(JVB_DIR . '/JVBase.php');
@@ -554,13 +554,6 @@
    );
}
add_action( 'doing_it_wrong_run', function ( $function_name ) {
    if ( '_load_textdomain_just_in_time' === $function_name ) {
        // This will print the full execution path to your screen or log
        debug_print_backtrace();
    }
} );
add_filter('the_seo_framework_sitemap_exclude_ids', 'jvb_maybe_exclude_singles', 8, 1);
function jvb_maybe_exclude_singles(array $IDs):array
package-lock.json
Diff too large
package.json
@@ -16,6 +16,10 @@
        "start": "wp-scripts start"
    },
    "devDependencies": {
        "@wordpress/scripts": "^32.1.0"
        "@wordpress/scripts": "^34.2.0"
    },
    "dependencies": {
        "@wordpress/plugins": "^7.54.0",
        "sass": "^1.103.1"
    }
}
src/editor-fields/Fields.js
New file
@@ -0,0 +1,26 @@
import TextField from './fields/text-field';
import SelectField from './fields/select-field';
import CheckboxField from './fields/checkbox-field';
import SwitchField from './fields/switch-field';
const FIELD_MAP = {
    text: TextField,
    email: TextField,
    tel: TextField,
    url: TextField,
    number: TextField,
    textarea: TextField,
    select: SelectField,
    radio: SelectField,
    checkbox: CheckboxField,
    set: CheckboxField,
    true_false: SwitchField,
};
const Fields = ({ field, value, onChange }) => {
    const Component = FIELD_MAP[field.type];
    if (!Component) return null; // repeater/upload/selector: TODO
    return <Component field={field} value={value} onChange={onChange} />;
};
export default Fields;
src/editor-fields/SidePanel.js
New file
@@ -0,0 +1,85 @@
import { __ } from '@wordpress/i18n';
import { compose } from '@wordpress/compose';
import { withSelect, withDispatch } from '@wordpress/data';
import { PluginSidebar, PluginSidebarMoreMenuItem } from '@wordpress/edit-post';
import { PanelBody, PanelRow, TextControl, DateTimePicker } from '@wordpress/components';
import { useEntityProp } from '@wordpress/core-data';
const JVIcon = () => (
    <svg xmlns="http://www.w3.org/2000/svg" fillRule="evenodd" strokeLinecap="square" strokeLinejoin="round" strokeMiterlimit="1.5" clipRule="evenodd" viewBox="0 0 32 32">
  <path fill="currentColor" fillRule="nonzero" d="M16.58 2.133c-7.715 0-15.14 6.014-14.547 13.707.561 7.287 6.938 13.185 13.938 13.947 8.25.898 14.47-5.953 14.004-13.988-.447-7.7-5.683-13.666-13.395-13.666m0 .607h.031v26.492q-.285-.017-.574-.048c-6.724-.732-12.86-6.391-13.398-13.391C2.072 8.442 9.209 2.74 16.58 2.74m-.488 1.145L16 3.889c-3.275.13-6.448 1.476-8.744 3.611-2.297 2.135-3.716 5.065-3.463 8.346.492 6.384 6.071 11.538 12.201 12.207l.09.01.021-.182-.091-.01c-6.041-.66-11.555-5.755-12.04-12.04-.247-3.221 1.142-6.092 3.405-8.196s5.4-3.437 8.629-3.565l.092-.004zm0 1.502L16 5.39c-2.868.113-5.647 1.293-7.658 3.164-2.012 1.87-3.255 4.436-3.033 7.31.43 5.593 5.316 10.106 10.685 10.692l.09.01.021-.18-.091-.01c-5.28-.576-10.1-5.031-10.524-10.525-.217-2.815.997-5.325 2.975-7.164 1.978-1.84 4.72-3.004 7.543-3.116l.092-.004zm0 1.504L16 6.893c-2.462.097-4.846 1.111-6.572 2.716-1.727 1.606-2.796 3.808-2.606 6.276.37 4.8 4.564 8.674 9.172 9.177l.09.01.021-.181-.091-.01c-4.52-.494-8.648-4.307-9.01-9.01-.186-2.408.854-4.554 2.547-6.129s4.04-2.57 6.457-2.666l.092-.004zm0 1.502L16 8.396c-2.055.082-4.045.926-5.486 2.266-1.442 1.34-2.335 3.182-2.176 5.244.309 4.009 3.808 7.24 7.656 7.66l.09.01.008-.068v-.002l.002-.01.004-.01v-.02l.007-.072-.091-.01c-3.76-.41-7.193-3.58-7.494-7.491-.155-2.002.709-3.787 2.117-5.096s3.361-2.14 5.37-2.219l.093-.004zm0 1.502L16 9.898a6.95 6.95 0 0 0-4.402 1.819c-1.157 1.075-1.872 2.553-1.744 4.209.247 3.216 3.053 5.81 6.14 6.146l.09.01.021-.182-.091-.01c-2.999-.327-5.739-2.86-5.979-5.978-.123-1.595.564-3.018 1.688-4.062a6.78 6.78 0 0 1 4.285-1.77l.092-.004zm0 1.503L16 11.4a5.24 5.24 0 0 0-3.316 1.372c-.872.81-1.413 1.924-1.317 3.173.187 2.425 2.3 4.377 4.627 4.631l.09.01.021-.182-.091-.01c-2.238-.244-4.286-2.136-4.465-4.462-.092-1.19.421-2.248 1.26-3.028a5.06 5.06 0 0 1 3.199-1.32l.092-.004zm0 1.502-.092.004a3.52 3.52 0 0 0-2.23.92c-.587.546-.952 1.3-.887 2.143.126 1.633 1.545 2.942 3.111 3.113h-.008l.01.002h.01l.078.01.022-.182-.092-.01c-1.477-.16-2.831-1.412-2.95-2.947-.06-.782.277-1.48.83-1.994a3.35 3.35 0 0 1 2.114-.873l.092-.004zm0 1.502-.092.004c-.43.017-.843.192-1.145.473-.301.28-.49.67-.457 1.107.065.841.791 1.512 1.596 1.6l.09.01.021-.182-.091-.01c-.717-.078-1.377-.688-1.434-1.431-.029-.377.132-.712.4-.961.269-.25.644-.409 1.028-.424l.092-.004z" clipRule="nonzero" overflow="visible"/>
</svg>
);
const SidePanel = ( { postType, metaFields, setMetaFields } ) => {
    const { content, fields } = window.jvbFieldConfig || {};
    const [meta, setMeta] = useEntityProp('postType', content, 'meta');
    console.log(fields);
    return (
        <>
            <PluginSidebarMoreMenuItem
                target="metadata-sidebar"
                icon={<JVIcon /> }
            >
                Metadata Sidebar
            </PluginSidebarMoreMenuItem>
            <PluginSidebar
                name="metadata-sidebar"
                icon={<JVIcon /> }
                title="Fields"
            >
                <PanelBody title="Book details" initialOpen={ true }>
                    <PanelRow>
                        <TextControl
                            value={ metaFields._meta_fields_book_title }
                            label={ __( "Title" ) }
                            onChange={ (value) => setMetaFields( { _meta_fields_book_title: value } ) }
                        />
                    </PanelRow>
                    <PanelRow>
                        <TextControl
                            value={ metaFields._meta_fields_book_author }
                            label={ __("Author", "textdomain") }
                            onChange={ (value) => setMetaFields( { _meta_fields_book_author: value } ) }
                        />
                    </PanelRow>
                    <PanelRow>
                        <TextControl
                            value={ metaFields._meta_fields_book_publisher }
                            label={ __("Publisher", "textdomain") }
                            onChange={ (value) => setMetaFields( { _meta_fields_book_publisher: value } ) }
                        />
                    </PanelRow>
                    <PanelRow>
                        <DateTimePicker
                            currentDate={ metaFields._meta_fields_book_date }
                            onChange={ ( newDate ) => setMetaFields( { _meta_fields_book_date: newDate } ) }
                            __nextRemoveHelpButton
                            __nextRemoveResetButton
                        />
                    </PanelRow>
                </PanelBody>
            </PluginSidebar>
        </>
    )
}
const applyWithSelect = withSelect( ( select ) => {
    return {
        metaFields: select( 'core/editor' ).getEditedPostAttribute( 'meta' ),
        postType: select( 'core/editor' ).getCurrentPostType()
    };
} );
const applyWithDispatch = withDispatch( ( dispatch ) => {
    return {
        setMetaFields ( newValue ) {
            dispatch('core/editor').editPost( { meta: newValue } )
        }
    }
} );
export default compose([
    applyWithSelect,
    applyWithDispatch
])(SidePanel);
src/editor-fields/fields/checkbox-field.js
New file
@@ -0,0 +1,25 @@
import { CheckboxControl } from '@wordpress/components';
const CheckboxField = ({ field, value, onChange }) => {
    const selected = Array.isArray(value) ? value : [];
    const toggle = (key, checked) => {
        onChange(checked ? [...selected, key] : selected.filter((v) => v !== key));
    };
    return (
        <fieldset>
            <legend className="jvb-field-label">{field.label}</legend>
            {Object.entries(field.options || {}).map(([key, label]) => (
                <CheckboxControl
                    key={key}
                    label={label}
                    checked={selected.includes(key)}
                    onChange={(checked) => toggle(key, checked)}
                />
            ))}
        </fieldset>
    );
};
export default CheckboxField;
src/editor-fields/fields/repeater-field.js
New file
@@ -0,0 +1,64 @@
import { useState } from '@wordpress/element';
import { Button, Panel, PanelBody } from '@wordpress/components';
import Fields from '../Fields';
const templateLabel = (template, row, fields) => {
    if (!template?.includes('{{')) return template;
    return template.replace(/{{(.*?)}}/g, (_, name) => {
        const val = row[name];
        if (val === undefined) return '';
        return Array.isArray(val) ? val.join(', ') : String(val);
    });
};
const emptyRow = (fields) =>
    Object.fromEntries(Object.entries(fields || {}).map(([name, f]) => [name, f.default ?? '']));
const RepeaterField = ({ field, value, onChange }) => {
    const rows = Array.isArray(value) ? value : [];
    const subFields = field.fields || {};
    const [openIndex, setOpenIndex] = useState(null);
    const updateRow = (index, name, val) => {
        const next = rows.map((row, i) => (i === index ? { ...row, [name]: val } : row));
        onChange(next);
    };
    const addRow = () => onChange([...rows, emptyRow(subFields)]);
    const removeRow = (index) => onChange(rows.filter((_, i) => i !== index));
    return (
        <div className="jvb-repeater-field">
            <p className="jvb-field-label">{field.label}</p>
            <Panel>
                {rows.map((row, index) => (
                    <PanelBody
                        key={index}
                        title={templateLabel(field.row_label, row, subFields) || `Row ${index + 1}`}
                        initialOpen={openIndex === index}
                        onToggle={() => setOpenIndex(openIndex === index ? null : index)}
                    >
                        {Object.entries(subFields).map(([name, subField]) => (
                            <Fields
                                key={name}
                                field={{ ...subField, name }}
                                value={row[name]}
                                onChange={(val) => updateRow(index, name, val)}
                            />
                        ))}
                        <Button variant="link" isDestructive onClick={() => removeRow(index)}>
                            Remove
                        </Button>
                    </PanelBody>
                ))}
            </Panel>
            <Button variant="secondary" onClick={addRow}>
                {field.add_label || 'Add Row'}
            </Button>
        </div>
    );
};
export default RepeaterField;
src/editor-fields/fields/select-field.js
New file
@@ -0,0 +1,29 @@
import { SelectControl, RadioControl } from '@wordpress/components';
const SelectField = ({ field, value, onChange }) => {
    const options = Object.entries(field.options || {}).map(([key, label]) => ({ label, value: key }));
    if (field.type === 'radio') {
        return (
            <RadioControl
                label={field.label}
                help={field.description}
                selected={value}
                options={options}
                onChange={onChange}
            />
        );
    }
    return (
        <SelectControl
            label={field.label}
            help={field.description}
            value={value ?? ''}
            options={[{ label: '— Select —', value: '' }, ...options]}
            onChange={onChange}
        />
    );
};
export default SelectField;
src/editor-fields/fields/selector-field.js
New file
@@ -0,0 +1,96 @@
import { useState, useEffect, useCallback } from '@wordpress/element';
import { FormTokenField } from '@wordpress/components';
import apiFetch from '@wordpress/api-fetch';
import { addQueryArgs } from '@wordpress/url';
const resolveSubtype = (field) => field.subtype || field.type; // 'taxonomy' | 'user' | 'post'
const searchPath = (field) => {
    const subtype = resolveSubtype(field);
    if (subtype === 'user') {
        return (search) => addQueryArgs('/wp/v2/users', { search, per_page: 20 });
    }
    if (subtype === 'taxonomy') {
        // Assumes taxonomy rest_base matches the (unprefixed) taxonomy slug.
        return (search) => addQueryArgs(`/wp/v2/${field.taxonomy}`, { search, per_page: 20 });
    }
    return (search) => addQueryArgs('/wp/v2/search', { search, type: 'post', subtype: field.post_type, per_page: 20 });
};
const labelOf = (item, subtype) => (subtype === 'user' ? item.name : item.title?.rendered ?? item.title ?? item.name);
const SelectorField = ({ field, value, onChange }) => {
    const subtype = resolveSubtype(field);
    const buildPath = searchPath(field);
    const ids = Array.isArray(value) ? value : value ? [value] : [];
    const [tokens, setTokens] = useState([]);   // display strings
    const [idByLabel, setIdByLabel] = useState({});
    const [options, setOptions] = useState({}); // label -> id, from last search
    // Resolve current IDs to labels on mount / value change
    useEffect(() => {
        let cancelled = false;
        if (!ids.length) {
            setTokens([]);
            return;
        }
        Promise.all(ids.map((id) => apiFetch({ path: buildPath('') + `&include=${id}` })))
            .then((results) => {
                if (cancelled) return;
                const map = {};
                const labels = [];
                results.flat().forEach((item) => {
                    const label = labelOf(item, subtype);
                    map[label] = item.id;
                    labels.push(label);
                });
                setIdByLabel((prev) => ({ ...prev, ...map }));
                setTokens(labels);
            })
            .catch(() => {});
        return () => { cancelled = true; };
        // eslint-disable-next-line react-hooks/exhaustive-deps
    }, [JSON.stringify(ids)]);
    const onInputChange = useCallback((search) => {
        if (!search) return;
        apiFetch({ path: buildPath(search) })
            .then((results) => {
                const map = {};
                results.forEach((item) => { map[labelOf(item, subtype)] = item.id; });
                setOptions(map);
            })
            .catch(() => {});
    }, [buildPath, subtype]);
    const onChangeTokens = (newTokens) => {
        setTokens(newTokens);
        const newIds = newTokens
            .map((label) => idByLabel[label] ?? options[label])
            .filter((id) => id !== undefined);
        setIdByLabel((prev) => ({ ...prev, ...options }));
        const isSingle = field.max === 1;
        if (isSingle) {
            onChange(newIds[newIds.length - 1] ?? 0);
        } else {
            onChange(field.max ? newIds.slice(0, field.max) : newIds);
        }
    };
    return (
        <FormTokenField
            label={field.label}
            help={field.description}
            value={tokens}
            suggestions={field.max === 1 && tokens.length ? [] : Object.keys(options)}
            onChange={onChangeTokens}
            onInputChange={onInputChange}
            maxLength={field.max || undefined}
            __experimentalExpandOnFocus
        />
    );
};
export default SelectorField;
src/editor-fields/fields/switch-field.js
New file
@@ -0,0 +1,7 @@
import { ToggleControl } from '@wordpress/components';
const SwitchField = ({ field, value, onChange }) => (
    <ToggleControl label={field.label} help={field.description} checked={!!value} onChange={onChange} />
);
export default SwitchField;
src/editor-fields/fields/text-field.js
New file
@@ -0,0 +1,29 @@
import { TextControl, TextareaControl } from '@wordpress/components';
const TYPE_MAP = { text: 'text', email: 'email', tel: 'tel', url: 'url', number: 'number' };
const TextField = ({ field, value, onChange }) => {
    if (field.type === 'textarea') {
        return (
            <TextareaControl
                label={field.label}
                help={field.description}
                value={value ?? ''}
                onChange={onChange}
            />
        );
    }
    return (
        <TextControl
            label={field.label}
            help={field.description}
            type={TYPE_MAP[field.type] || 'text'}
            value={value ?? ''}
            onChange={onChange}
            required={field.required}
        />
    );
};
export default TextField;
src/editor-fields/fields/upload-field.js
New file
@@ -0,0 +1,77 @@
import { useState, useEffect } from '@wordpress/element';
import { MediaUpload, MediaUploadCheck } from '@wordpress/media-utils';
import { Button } from '@wordpress/components';
import apiFetch from '@wordpress/api-fetch';
const SUBTYPE_MAP = { image: 'image', video: 'video', document: 'application', all: '' };
const Thumbnail = ({ id, onRemove }) => {
    const [media, setMedia] = useState(null);
    useEffect(() => {
        let cancelled = false;
        if (!id) return;
        apiFetch({ path: `/wp/v2/media/${id}` })
            .then((data) => !cancelled && setMedia(data))
            .catch(() => {});
        return () => { cancelled = true; };
    }, [id]);
    const thumb = media?.media_details?.sizes?.thumbnail?.source_url || media?.source_url;
    const isImage = media?.media_type === 'image';
    return (
        <div className="jvb-upload-thumb">
            {isImage && thumb ? (
                <img src={thumb} alt={media?.alt_text || ''} />
            ) : (
                <div className="jvb-upload-thumb-placeholder">
                    {media?.title?.rendered || `#${id}`}
                </div>
            )}
            <Button variant="link" isDestructive onClick={() => onRemove(id)}>
                Remove
            </Button>
        </div>
    );
};
const UploadField = ({ field, value, onChange }) => {
    const multiple = field.multiple || field.type === 'gallery';
    const ids = multiple ? (Array.isArray(value) ? value : []) : value;
    const allowedTypes = SUBTYPE_MAP[field.subtype] ? [SUBTYPE_MAP[field.subtype]] : undefined;
    const onSelect = (media) => onChange(multiple ? media.map((m) => m.id) : media.id);
    const onRemove = (id) => {
        onChange(multiple ? ids.filter((existing) => existing !== id) : 0);
    };
    return (
        <div className="jvb-upload-field">
            <p className="jvb-field-label">{field.label}</p>
            <div className={multiple ? 'jvb-upload-grid' : 'jvb-upload-single'}>
                {multiple
                    ? ids.map((id) => <Thumbnail key={id} id={id} onRemove={onRemove} />)
                    : !!ids && <Thumbnail id={ids} onRemove={onRemove} />}
            </div>
            <MediaUploadCheck>
                <MediaUpload
                    onSelect={onSelect}
                    allowedTypes={allowedTypes}
                    multiple={multiple}
                    value={multiple ? ids : ids || undefined}
                    render={({ open }) => (
                        <Button variant="secondary" onClick={open}>
                            {(multiple ? ids.length : ids) ? 'Change' : 'Select'} {field.label}
                        </Button>
                    )}
                />
            </MediaUploadCheck>
        </div>
    );
};
export default UploadField;
src/editor-fields/index.js
New file
@@ -0,0 +1,35 @@
import { registerPlugin } from '@wordpress/plugins';
import SidePanel from './SidePanel';
import { PluginDocumentSettingPanel } from '@wordpress/editor';
import { useEntityProp } from '@wordpress/core-data';
import Fields from './Fields';
const CustomFieldsPanel = () => {
    const { postType, fields } = window.jvbFieldConfig || {};
    const [meta, setMeta] = useEntityProp('postType', postType, 'meta');
    if (!fields || !fields.length) {
        return null;
    }
    const setField = (name, value) => setMeta({ ...meta, [name]: value });
    return (
        <PluginDocumentSettingPanel name="jvb-custom-fields" title="Custom Fields">
            {fields.map((field) => (
                <Fields
                    key={field.name}
                    field={field}
                    value={meta?.[field.name]}
                    onChange={(value) => setField(field.name, value)}
                />
            ))}
        </PluginDocumentSettingPanel>
    );
};
registerPlugin('jvb-meta-fields', {
    render: SidePanel
});
// registerPlugin('jvb-custom-fields', { render: CustomFieldsPanel });
src/menu/style.scss
@@ -1,15 +1,20 @@
.info h4 {
    margin: 0;
    font-weight: var(--fw-h);
    font-size: var(--txt-medium);
@media (min-width: 600px) {
    #wpadminbar ~ .wp-site-blocks nav.menu {
        top: calc(var(--btn) + 1rem + 16px);
    }
}
.field.quantity.quantity > label {
    position: absolute;
    left: var(--offScreen);
.scroll-up nav.menu {
    top: -2rem;
}
nav.menu {
    max-width: 100%;
    position: sticky;
    top: calc(var(--btn));
    z-index: 5;
    grid-column: full;
    background-color: rgba(var(--base-50), var(--op-6));
    box-shadow: var(--shdw-down) rgba(var(--base), var(--op-45));
    ul {
        --justify: flex-start;
        li {
@@ -31,41 +36,172 @@
    }
}
    .menu-item.menu-item {
        margin: var(--sp2);
        max-width: none;
        &:target {
            outline: none;
            background: transparent;
            border: 1rem solid rgb(var(--action-0));
            h3 {
                color: rgb(var(--action-0));
            }
.menu-item.menu-item {
    margin: var(--sp2);
    padding-top: var(--sp4);
    max-width: none;
    &:target {
        outline: none;
        background: transparent;
        border: 1rem solid rgb(var(--action-0));
        h3 {
            color: rgb(var(--action-0));
        }
        +.menu-item {
            padding-top: var(--sp4);
            border-top: 1px solid rgb(var(--base-200));
        }
    }
        .header {
            flex-wrap:nowrap;
            figure {
                max-width: 30vw!important;
                aspect-ratio: 1;
                object-fit: cover;
            }
            h3, p {
                margin: 0;
                width: max-content;
            }
        }
    +.menu-item {
        border-top: 1px solid rgb(var(--base-200));
    }
        .gallery figure {
            max-width: 15vw!important;
    .price s {
        font-size: var(--txt-small);
        vertical-align: top;
        display: inline-block;
        padding-right: 1rem;
    }
    .price:has(s) {
        color: rgb(var(--secondary-0));
        s {
            color: rgb(var(--contrast));
        }
    }
    .tags.left {
        left: -1rem;
        .sale, .featured {
            display: flex;
            --gap: .5rem;
            padding: .125rem .5rem;
            text-transform: uppercase;
            font-weight: var(--fw-h-bold);
            width: max-content;
        }
        .sale {
            background-color: rgb(var(--secondary-0));
            color: rgb(var(--secondary-contrast));
        }
        .featured {
            background-color: rgb(var(--action-0));
            color: rgb(var(--action-contrast));
        }
    }
    .header {
        flex-wrap:nowrap;
        figure {
            max-width: 30vw!important;
            aspect-ratio: 1;
            object-fit: cover;
        }
        figcaption {
            display: none;
        h3, p {
            margin: 0;
            width: max-content;
        }
    }
    .gallery figure {
        max-width: min(15vw, 8rem) !important;
        aspect-ratio: 1;
        object-fit: cover;
    }
    figcaption {
        display: none;
    }
    .info {
        --gap: 0.5rem 0;
        h4 {
            margin: 0;
            font-weight: var(--fw-h);
            font-size: var(--txt-medium);
        }
        .row {
            --gap:1rem;
            > a, figure, h4 {
                position: sticky;
                top: calc(var(--btnbtn) + 2.5rem);
                background-color: rgb(var(--base-50));
                z-index: 1;
            }
            >div {
                flex: 1;
            }
            > a {
                white-space: nowrap;
                width: max-content;
            }
            figure {
                max-width: min(10vw, 5rem) !important;
                aspect-ratio: 1;
                object-fit: cover;
                margin: 0;
                margin-inline: 0;
            }
        }
        .sale-until,
        .out-of-stock {
            font-size: var(--txt-x-small);
            font-style: italic;
            i.icon {
                vertical-align: top;
                padding-right: 1rem;
                color: rgb(var(--secondary-0));
            }
        }
    }
    .field.quantity.quantity > label {
        position: absolute;
        left: var(--offScreen);
    }
    @media (max-width: 768px) {
        &:target {
            border: 0;
        }
        .header.row {
            flex-direction:column;
            > figure {
                aspect-ratio: 16/9;
                max-width: 100%!important;
            }
        }
        .info {
            padding-top: 1rem;
            .row {
                --gap: 0;
                &.nowrap.nowrap {
                    --wrap: wrap!important;
                }
                + .row {
                    border-top: 1px solid rgb(var(--base-200));
                    padding-top: .5rem;
                }
                > figure {
                    order: 2;
                    max-width: min(25vw, 6rem)!important;
                }
                > a {
                    order: 3;
                }
            }
        }
        .gallery {
            gap: .25rem;
        }
    }
}
webpack.config.js
New file
@@ -0,0 +1,9 @@
const defaultConfig = require('@wordpress/scripts/config/webpack.config');
module.exports = {
    ...defaultConfig,
    entry: {
        ...defaultConfig.entry(),
        '/_meta/fields': './src/editor-fields/index.js',
    },
};
webpack.jvb.js
@@ -52,6 +52,7 @@
        'settings':            './assets/js/concise/UserSettings.js',
        'utility':             './assets/js/concise/UtilityFunctions.js',
        'view':                './assets/js/concise/View.js',
        'cartCheck':           './assets/js/concise/WooCommerceCart.js',
    },
    output: {
        filename: '[name].min.js',