domma-cms 1.10.3 → 1.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/admin/css/admin.css +1 -1
- package/admin/index.html +1 -1
- package/admin/js/app.js +8 -4
- package/admin/js/lib/topbar-notifications.js +11 -0
- package/admin/js/templates/notifications.html +4 -4
- package/admin/js/views/notifications.js +5 -5
- package/package.json +1 -1
- package/public/css/menu-highlight.css +1 -1
- package/public/css/site.css +1 -1
- package/server/routes/api/notifications.js +7 -2
- package/server/templates/page.html +2 -2
package/admin/js/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{installSmoothCarets as Y}from"./lib/smooth-caret.js";import{views as Q}from"./views/index.js";import{withPluginChrome as V}from"./lib/plugin-chrome.js";import{api as r,getUser as x,isAuthenticated as m,logout as X,sendToLogin as Z}from"./api.js";import{claimDrafts as tt}from"./lib/draft-owner.js";import{isAuthScreen as C,loginHashFor as et}from"./lib/login-arrange.js";import{installHttpInterceptor as it}from"./http-interceptor.js";import{installResizableSlideovers as at}from"./lib/slideover-resizable.js";import{installActivityThrobber as ot}from"./lib/activity-throbber.js";import{installUpdateNotice as st,renderCmsVersion as nt}from"./lib/update-notice.js";import{renderFrameworkVersions as _,wireAccountMenu as rt}from"./lib/topbar-account.js";import{refreshTopbarProject as L}from"./lib/topbar-project.js";import{isPathAllowed as lt,redirectFor as ct}from"./lib/admin-scope.js";import{deliverDesktop as mt,desktopActive as pt,notificationSettings as dt}from"./lib/desktop-notify.js";import{avatarUrl as ut,installAccountAvatar as ht}from"./lib/avatar.js";import{installCalculator as wt}from"./lib/calculator.js";import{takeOverviewPass as gt,withDashboardStrip as W}from"./lib/dashboards-strip.js";import{installHotkeys as ft}from"./lib/hotkeys-ui.js";import{applyAdminBrand as H}from"./lib/admin-brand.js";import{installRouterCatchUp as vt}from"./lib/router-catch-up.js";import{installSidebarDrawer as bt}from"./lib/sidebar-drawer.js";$(()=>{Y(document),it(),wt(),st(),ot(),at(),bt(),(async()=>{const{applyAdminTheme:t,refreshAdminTheme:i}=await import("./lib/admin-theme.js");m()?await i(r,{init:!0}):t({dommaTheme:"charcoal-dark"},{init:!0})})();let p=null,h=null,c="/",w=!1,g=null;function D(t){if(P[t])return E.toast(`${P[t]} is switched off on this site.`,{type:"info"}),"/";if(t.split("?")[0]==="/my-dashboard")return"/dashboards";const i=y[t]||ct(p,t);return i||((t.split("?")[0]||"/")==="/"&&c&&c!=="/"&&!gt()?y[c]||c:null)}const y={},P={};R.use(async(t,i,e)=>{if(C(t.path))return e();if(!m()){Z();return}const a=D(t.path);if(a){R.navigate(a);return}e()});async function f(){try{const t=await r.get("/auth/permissions");p=t.adminScope||null,h=t.adminBrand||null,H(h),c=t.adminHome||"/",_(t.versions);const i=t.permissions||[];return w=lt(p,"/settings")&&i.some(e=>e==="settings"||e.startsWith("settings.")),g=i.some(e=>e==="notifications"||e.startsWith("notifications.")),i}catch{return p=null,c="/",h||H(null),w=!1,g=null,[]}}document.addEventListener("dm:admin-home-changed",()=>{f()});let N=null,A=!1;document.addEventListener("dm:sidebar-rebuild",()=>{if(L(r),N){A=!0;return}N=(async()=>{do{A=!1;try{await j(await f())}catch{}}while(A)})().finally(()=>{N=null})});async function j(t){const{renderAdminSidebar:i}=await import("./lib/sidebar-renderer.js");await i({mount:"#admin-sidebar",permissions:t,adminScope:p,brand:h})}M.subscribe("router:afterChange",({to:t})=>{C(t.path)&&(u&&(clearInterval(u),u=null),p=null,c="/",w=!1,g=null)});const q=[{path:"/",view:"dashboard",title:"Dashboard - Domma CMS"},{path:"/dashboards",view:"dashboards",title:"Dashboards - Domma CMS"},{path:"/my-dashboard",view:"dashboards",title:"Dashboards - Domma CMS"},{path:"/pages",view:"pages",title:"Pages - Domma CMS"},{path:"/pages/new",view:"pageEditor",title:"New Page - Domma CMS"},{path:"/pages/edit/*",view:"pageEditor",title:"Edit Page - Domma CMS"},{path:"/media",view:"media",title:"Media - Domma CMS"},{path:"/menus",view:"menus",title:"Menus - Domma CMS"},{path:"/context-menus",view:"contextMenus",title:"Context Menus - Domma CMS"},{path:"/context-menus/new",view:"contextMenuEditor",title:"New Context Menu - Domma CMS"},{path:"/context-menus/edit/:slug",view:"contextMenuEditor",title:"Edit Context Menu - Domma CMS"},{path:"/menus/new",view:"menuEditor",title:"New Menu - Domma CMS"},{path:"/menus/edit/:slug",view:"menuEditor",title:"Edit Menu - Domma CMS"},{path:"/menu-locations",view:"menuLocations",title:"Menu Locations - Domma CMS"},{path:"/navigation",view:"menusRedirect",title:"Menus - Domma CMS"},{path:"/layouts",view:"layouts",title:"Layouts - Domma CMS"},{path:"/settings",view:"settings",title:"Settings - Domma CMS"},{path:"/theme",view:"theme",title:"Theme - Domma CMS"},{path:"/users",view:"users",title:"Users - Domma CMS"},{path:"/users/new",view:"userEditor",title:"New User - Domma CMS"},{path:"/users/edit/:id",view:"userEditor",title:"Edit User - Domma CMS"},{path:"/plugins",view:"plugins",title:"Plugins - Domma CMS"},{path:"/plugins/code/:name",view:"pluginCode",title:"Plugin Code - Domma CMS"},{path:"/documentation",view:"documentation",title:"Usage - Domma CMS"},{path:"/tutorials",view:"tutorials",title:"Tutorials - Domma CMS"},{path:"/tutorials/crud",view:"tutorialCrud",title:"Building a CRUD App - Domma CMS"},{path:"/tutorials/editor",view:"tutorialEditor",title:"The Editor - Domma CMS"},{path:"/tutorials/plugin",view:"tutorialPlugin",title:"Writing a Tool - Domma CMS"},{path:"/tutorials/forms",view:"tutorialForms",title:"Form Follow-Up - Domma CMS"},{path:"/docs/components",view:"componentsReference",title:"Components Reference - Domma CMS"},{path:"/docs/components-howto",view:"componentsHowto",title:"Components How-To - Domma CMS"},{path:"/docs/components-walkthrough",view:"componentsWalkthrough",title:"Components Walkthrough - Domma CMS"},{path:"/docs/components-rules",view:"componentsRules",title:"Components Rules - Domma CMS"},{path:"/docs/usage/pages",view:"usagePages",title:"Pages - Usage - Domma CMS"},{path:"/docs/usage/media",view:"usageMedia",title:"Media - Usage - Domma CMS"},{path:"/docs/usage/navigation",view:"usageNavigation",title:"Navigation - Usage - Domma CMS"},{path:"/docs/usage/dconfig",view:"usageDconfig",title:"DConfig - Usage - Domma CMS"},{path:"/docs/usage/shortcodes",view:"usageShortcodes",title:"Shortcodes - Usage - Domma CMS"},{path:"/docs/usage/site-settings",view:"usageSiteSettings",title:"Site Settings - Usage - Domma CMS"},{path:"/docs/usage/plugins",view:"usagePlugins",title:"Plugins - Usage - Domma CMS"},{path:"/docs/usage/users-roles",view:"usageUsersRoles",title:"Users & Roles - Usage - Domma CMS"},{path:"/docs/usage/views",view:"usageViews",title:"Views - Usage - Domma CMS"},{path:"/docs/usage/actions",view:"usageActions",title:"Actions - Usage - Domma CMS"},{path:"/docs/usage/cta-shortcode",view:"usageCtaShortcode",title:"CTA Shortcode - Usage - Domma CMS"},{path:"/docs/usage/editions",view:"usageEditions",title:"Editions & Licences - Usage - Domma CMS"},{path:"/docs/usage/collections",view:"usageCollections",title:"Collections & Forms - Usage - Domma CMS"},{path:"/docs/usage/blocks",view:"usageBlocks",title:"Blocks - Usage - Domma CMS"},{path:"/docs/usage/tools",view:"usageTools",title:"Built-in Tools - Usage - Domma CMS"},{path:"/docs/usage/dashboard",view:"usageDashboard",title:"Dashboard - Usage - Domma CMS"},{path:"/docs/usage/search-engines",view:"usageSearchEngines",title:"Search Engines & AI - Usage - Domma CMS"},{path:"/docs/plugins",view:"pluginGuides",title:"Plugin Guides - Domma CMS"},{path:"/docs/plugins/*",view:"pluginGuide",title:"Plugin Guide - Domma CMS"},{path:"/docs/api/authentication",view:"apiRefAuthentication",title:"Authentication - API - Domma CMS"},{path:"/docs/api/pages",view:"apiRefPages",title:"Pages - API - Domma CMS"},{path:"/docs/api/settings",view:"apiRefSettings",title:"Settings - API - Domma CMS"},{path:"/docs/api/layouts",view:"apiRefLayouts",title:"Layouts - API - Domma CMS"},{path:"/docs/api/navigation",view:"apiRefNavigation",title:"Navigation - API - Domma CMS"},{path:"/docs/api/media",view:"apiRefMedia",title:"Media - API - Domma CMS"},{path:"/docs/api/users",view:"apiRefUsers",title:"Users - API - Domma CMS"},{path:"/docs/api/plugins",view:"apiRefPlugins",title:"Plugins - API - Domma CMS"},{path:"/docs/api/collections",view:"apiRefCollections",title:"Collections - API - Domma CMS"},{path:"/docs/api/views",view:"apiRefViews",title:"Views API - Domma CMS"},{path:"/docs/api/actions",view:"apiRefActions",title:"Actions API - Domma CMS"},{path:"/docs/api/forms",view:"apiRefForms",title:"Forms API - Domma CMS"},{path:"/docs/api/scaffold",view:"apiRefScaffold",title:"Scaffold API - Domma CMS"},{path:"/docs/api/external",view:"apiRefExternal",title:"External API & Tokens - Domma CMS"},{path:"/docs/api/content",view:"apiRefContent",title:"Content API - Domma CMS"},{path:"/docs/api/builder",view:"apiRefBuilder",title:"API Builder - Domma CMS"},{path:"/api-reference",view:"apiReference",title:"API Reference - Domma CMS"},{path:"/collections",view:"collections",title:"Collections - Domma CMS"},{path:"/collections/new",view:"collectionEditor",title:"New Collection - Domma CMS"},{path:"/collections/edit/:slug",view:"collectionEditor",title:"Edit Collection - Domma CMS"},{path:"/collections/:slug/entries",view:"collectionEntries",title:"Entries - Domma CMS"},{path:"/forms",view:"forms",title:"Forms - Domma CMS"},{path:"/forms/new",view:"formEditor",title:"New Form - Domma CMS"},{path:"/forms/edit/:slug",view:"formEditor",title:"Edit Form - Domma CMS"},{path:"/forms/:slug/submissions",view:"formSubmissions",title:"Submissions - Domma CMS"},{path:"/views",view:"viewsList",title:"Views - Domma CMS"},{path:"/views/new",view:"viewEditor",title:"New View - Domma CMS"},{path:"/views/edit/:slug",view:"viewEditor",title:"Edit View - Domma CMS"},{path:"/views/:slug/preview",view:"viewPreview",title:"View Preview - Domma CMS"},{path:"/actions",view:"actionsList",title:"Actions - Domma CMS"},{path:"/actions/new",view:"actionEditor",title:"New Action - Domma CMS"},{path:"/actions/edit/:slug",view:"actionEditor",title:"Edit Action - Domma CMS"},{path:"/pro/docs",view:"proDocs",title:"Pro Documentation - Domma CMS"},{path:"/blocks",view:"blocks",title:"Blocks - Domma CMS"},{path:"/blocks/new",view:"pageEditor",title:"New Block - Domma CMS"},{path:"/blocks/edit/:name",view:"pageEditor",title:"Edit Block - Domma CMS"},{path:"/components",view:"components",title:"Components - Domma CMS"},{path:"/components/new",view:"pageEditor",title:"New Component - Domma CMS"},{path:"/components/edit/:name",view:"pageEditor",title:"Edit Component - Domma CMS"},{path:"/my-profile",view:"myProfile",title:"My Profile - Domma CMS"},{path:"/roles",view:"roles",title:"Roles & Permissions - Domma CMS"},{path:"/roles/edit/:id",view:"roleEditor",title:"Edit Role - Domma CMS"},{path:"/effects",view:"effects",title:"Effects - Domma CMS"},{path:"/search",view:"search",title:"Search - Domma CMS"},{path:"/content-api",view:"contentApi",title:"Content API - Domma CMS"},{path:"/notes",view:"notes",title:"Notes - Domma CMS"},{path:"/todo",view:"todo",title:"Todo - Domma CMS"},{path:"/calculator",view:"calculator",title:"Calculator - Domma CMS"},{path:"/analytics",view:"analytics",title:"Analytics - Domma CMS"},{path:"/seo",view:"seo",title:"SEO - Domma CMS"},{path:"/seo/:tab",view:"seo",title:"SEO - Domma CMS"},{path:"/wordpress-import",view:"wordpressImport",title:"Import from WordPress - Domma CMS"},{path:"/contacts",view:"contacts",title:"Contacts - Domma CMS"},{path:"/calls/new",view:"callNew",title:"Call now - Domma CMS"},{path:"/system/notifications",view:"notifications",title:"Notifications - Domma CMS"},{path:"/api-tokens",view:"apiTokens",title:"API Tokens - Domma CMS"},{path:"/api-endpoints",view:"apiEndpoints",title:"API Builder - Domma CMS"},{path:"/api-endpoints/new",view:"apiEndpointEditor",title:"New API Endpoint - Domma CMS"},{path:"/api-endpoints/edit/:id",view:"apiEndpointEditor",title:"Edit API Endpoint - Domma CMS"},{path:"/projects",view:"projects",title:"Projects - Domma CMS"},{path:"/projects/new",view:"projects",title:"New Project - Domma CMS"},{path:"/projects/edit/:slug",view:"projects",title:"Edit Project - Domma CMS"},{path:"/projects/:slug/settings",view:"projectSettings",title:"Project settings - Domma CMS"},{path:"/projects/:slug/pages",view:"pages",title:"Project pages - Domma CMS"},{path:"/projects/:slug/collections",view:"collections",title:"Project collections - Domma CMS"},{path:"/projects/:slug/forms",view:"forms",title:"Project forms - Domma CMS"},{path:"/projects/:slug/actions",view:"actionsList",title:"Project actions - Domma CMS"},{path:"/projects/:slug/menus",view:"menus",title:"Project menus - Domma CMS"},{path:"/projects/:slug/blocks",view:"blocks",title:"Project blocks - Domma CMS"},{path:"/projects/:slug/components",view:"components",title:"Project components - Domma CMS"},{path:"/projects/:slug/views",view:"viewsList",title:"Project views - Domma CMS"},{path:"/projects/:slug/roles",view:"roles",title:"Project roles - Domma CMS"},{path:"/projects/:slug/users",view:"users",title:"Project users - Domma CMS"},{path:"/projects/:slug/apis",view:"apiEndpoints",title:"Project APIs - Domma CMS"},{path:"/projects/:slug",view:"projectDetail",title:"Project - Domma CMS"},{path:"/login",view:"login",title:"Sign in - Domma CMS",onEnter:()=>{$("#admin-sidebar").hide(),$("#admin-topbar").hide()}},{path:"/reset-password",view:"login",title:"Reset Password - Domma CMS",onEnter:()=>{$("#admin-sidebar").hide(),$("#admin-topbar").hide()}}];M.subscribe("router:afterChange",async({to:t,from:i})=>{if(!C(t.path)){if($("#admin-sidebar").show(),$("#admin-topbar").show(),C(i?.path)){$("#topbar-user-name").remove(),import("./lib/admin-theme.js").then(o=>o.refreshAdminTheme(r)),await T();const e=await f(),a=D(t.path);if(a&&R.navigate(a),j(e),dt.read().signInToasts)try{const o=await r.system.notifications.list().catch(()=>[]),n=(Array.isArray(o)?o:[]).filter(s=>s.unread&&["warning","critical"].includes(s.data?.severity)).slice(0,3);for(const s of n){const v=d(s.data?.title||""),U=d((s.data?.body||"").slice(0,120));E.toast(`${v} - ${U}`,{type:s.data?.severity==="critical"?"error":"warning",duration:0})}}catch{}}F()}}),M.subscribe("router:afterChange",()=>{setTimeout(()=>{$(".btn-primary, .btn-danger").length&&Domma.effects.reveal(".btn-primary, .btn-danger",{animation:"fade",stagger:40,duration:300})},50)});const G=["#field-project","#menu-project","#collection-project","#endpoint-project","#action-project","#view-project","#block-project","#component-project","#role-project",'[name="project"]','[name="ownedByProject"]'];function z(t){return/^\/(pages|menus|context-menus|collections|forms|actions|views|blocks|components|users|roles|api-endpoints)\/(new|edit\/)/.test(t)}M.subscribe("router:afterChange",({to:t})=>{const i=t?String(t.path).split("?")[0]:"";if(!t||!z(i))return;const a=new URLSearchParams(location.hash.split("?")[1]||"").get("project");if(!a||!/\/new$/.test(i))return;let o=0;const n=60,s=1500,v=()=>{o+=n;for(const U of G){const b=document.querySelector(U);if(!b)continue;if(Array.from(b.options||[]).find(J=>J.value===a)){b.value=a,b.dispatchEvent(new Event("change",{bubbles:!0}));return}}o<s&&setTimeout(v,n)};setTimeout(v,n)});const B="cms_card_states",k=S.get(B)||{};M.subscribe("router:afterChange",()=>{setTimeout(()=>{$("#view-container .card-collapsible").each(function(){const t=$(this).find(".card-header h2, .card-header h3").first().text().trim();t&&k[t]==="collapsed"&&$(this).addClass("card-collapsed")})},200)}),$("#view-container").on("click",".card-collapsible .card-header",function(t){if($(t.target).closest("button, a").length)return;const i=$(this).closest(".card");i.toggleClass("card-collapsed");const e=$(this).find("h2, h3").first().text().trim();e&&(k[e]=i.hasClass("card-collapsed")?"collapsed":"open",S.set(B,k))}),ft(),document.addEventListener("keydown",t=>{if(!(t.ctrlKey||t.metaKey)||t.key!=="s"||window.location.hash.startsWith("#/login")||window.location.hash.startsWith("#/reset-password"))return;const i=document.querySelector("#view-container .view-header button.btn-primary");i&&(t.preventDefault(),i.click())});const l={...Q},K={notes:{displayName:"Notes",icon:"edit-3"},todo:{displayName:"Todo",icon:"check-square"},calculator:{displayName:"Calculator",icon:"calculator"},analytics:{displayName:"Analytics",icon:"chart-bar"},seo:{displayName:"SEO",icon:"search"},wordpressImport:{displayName:"Import from WordPress",icon:"download"},contacts:{displayName:"Contacts",icon:"users"},projects:{displayName:"Projects",icon:"folder"},pages:{displayName:"Pages",icon:"file-text"},media:{displayName:"Media",icon:"image"},menus:{displayName:"Site menus",icon:"menu"},contextMenus:{displayName:"Context Menus",icon:"menu"},theme:{displayName:"Theme",icon:"droplet"},collections:{displayName:"Collections",icon:"database"},forms:{displayName:"Forms",icon:"layout"},viewsList:{displayName:"Views",icon:"eye"},actionsList:{displayName:"Actions",icon:"zap"},apiEndpoints:{displayName:"API Builder",icon:"code"},blocks:{displayName:"Blocks",icon:"box"},components:{displayName:"Components",icon:"component"},notifications:{displayName:"Notifications",icon:"bell"},roles:{displayName:"Roles",icon:"shield"},users:{displayName:"Users",icon:"users"},settings:{displayName:"Site Settings",icon:"settings"},effects:{displayName:"Effects",icon:"sparkles"},layouts:{displayName:"Layouts",icon:"layout"},plugins:{displayName:"Marketplace",icon:"store"},myProfile:{displayName:"My Profile",icon:"user"},apiTokens:{displayName:"API Tokens",icon:"key"},search:{displayName:"Search",icon:"search"},contentApi:{displayName:"Content API",icon:"file-text"},dashboard:{displayName:"Dashboard",icon:"home"},dashboards:{displayName:"Dashboards",icon:"home"},pageEditor:{displayName:"Pages",section:"Edit",icon:"file-text"},menuEditor:{displayName:"Site menus",section:"Edit",icon:"menu"},menuLocations:{displayName:"Site menus",section:"Locations",icon:"map-pin"},contextMenuEditor:{displayName:"Context Menus",section:"Edit",icon:"menu"},collectionEditor:{displayName:"Collections",section:"Edit",icon:"database"},collectionEntries:{displayName:"Collections",section:"Entries",icon:"database"},formEditor:{displayName:"Forms",section:"Edit",icon:"layout"},formSubmissions:{displayName:"Forms",section:"Submissions",icon:"inbox"},viewEditor:{displayName:"Views",section:"Edit",icon:"eye"},viewPreview:{displayName:"Views",section:"Preview",icon:"eye"},actionEditor:{displayName:"Actions",section:"Edit",icon:"zap"},apiEndpointEditor:{displayName:"API Builder",section:"Edit",icon:"code"},roleEditor:{displayName:"Roles",section:"Edit",icon:"shield"},userEditor:{displayName:"Users",section:"Edit",icon:"users"},projectDetail:{displayName:"Projects",section:"Overview",icon:"folder"},projectSettings:{displayName:"Projects",section:"Settings",icon:"folder"},pluginCode:{displayName:"Marketplace",section:"Code",icon:"code"}};for(const[t,i]of Object.entries(K))l[t]&&(l[t]=V(l[t],{plugin:t,licence:"Built in",...i}));l.dashboard=W(l.dashboard);const I=[...q];async function T(){if(m())try{const t=await r.plugins.adminConfig(),i=new Set(I.map(e=>e.path));for(const e of t.routes||[])i.has(e.path)||I.push(e);for(const[e,a]of Object.entries(t.views||{}))try{const o=await import(`/plugins/${a.entry}`);l[e]=V(o[a.exportName],(t.meta||{})[e])}catch{}l.dashboard=W(l.dashboard);for(const[e,{route:a}]of Object.entries(t.takeovers||{}))a&&(y[`/${e}`]=a);for(const[e,{enabled:a,displayName:o}]of Object.entries(t.tools||{}))a===!1&&(P[`/${e}`]=o);for(const{id:e,href:a}of t.css||[])if(!document.getElementById(e)){const o=document.createElement("link");o.id=e,o.rel="stylesheet",o.href=a,document.head.appendChild(o)}}catch{}}function F(){const t=x();if(!t)return;if($("#topbar-user-name").length){L(r);return}const e={"super-admin":"Super Admin",admin:"Admin",user:"User"}[t.role]||t.role,a=ut(t);$("#topbar-user").get(0).innerHTML=`
|
|
1
|
+
import{wireNotificationMenu as Y}from"./lib/topbar-notifications.js";import{installSmoothCarets as Q}from"./lib/smooth-caret.js";import{views as X}from"./views/index.js";import{withPluginChrome as V}from"./lib/plugin-chrome.js";import{api as r,getUser as L,isAuthenticated as m,logout as Z,sendToLogin as tt}from"./api.js";import{claimDrafts as et}from"./lib/draft-owner.js";import{isAuthScreen as C,loginHashFor as it}from"./lib/login-arrange.js";import{installHttpInterceptor as at}from"./http-interceptor.js";import{installResizableSlideovers as ot}from"./lib/slideover-resizable.js";import{installActivityThrobber as st}from"./lib/activity-throbber.js";import{installUpdateNotice as nt,renderCmsVersion as rt}from"./lib/update-notice.js";import{renderFrameworkVersions as _,wireAccountMenu as lt}from"./lib/topbar-account.js";import{refreshTopbarProject as B}from"./lib/topbar-project.js";import{isPathAllowed as ct,redirectFor as mt}from"./lib/admin-scope.js";import{deliverDesktop as pt,desktopActive as dt,notificationSettings as ut}from"./lib/desktop-notify.js";import{avatarUrl as ht,installAccountAvatar as wt}from"./lib/avatar.js";import{installCalculator as gt}from"./lib/calculator.js";import{takeOverviewPass as ft,withDashboardStrip as W}from"./lib/dashboards-strip.js";import{installHotkeys as vt}from"./lib/hotkeys-ui.js";import{applyAdminBrand as H}from"./lib/admin-brand.js";import{installRouterCatchUp as bt}from"./lib/router-catch-up.js";import{installSidebarDrawer as St}from"./lib/sidebar-drawer.js";$(()=>{Q(document),at(),gt(),nt(),st(),ot(),St(),(async()=>{const{applyAdminTheme:t,refreshAdminTheme:i}=await import("./lib/admin-theme.js");m()?await i(r,{init:!0}):t({dommaTheme:"charcoal-dark"},{init:!0})})();let p=null,h=null,c="/",w=!1,g=null;function D(t){if(N[t])return E.toast(`${N[t]} is switched off on this site.`,{type:"info"}),"/";if(t.split("?")[0]==="/my-dashboard")return"/dashboards";const i=y[t]||mt(p,t);return i||((t.split("?")[0]||"/")==="/"&&c&&c!=="/"&&!ft()?y[c]||c:null)}const y={},N={};R.use(async(t,i,e)=>{if(C(t.path))return e();if(!m()){tt();return}const a=D(t.path);if(a){R.navigate(a);return}e()});async function f(){try{const t=await r.get("/auth/permissions");p=t.adminScope||null,h=t.adminBrand||null,H(h),c=t.adminHome||"/",_(t.versions);const i=t.permissions||[];return w=ct(p,"/settings")&&i.some(e=>e==="settings"||e.startsWith("settings.")),g=i.some(e=>e==="notifications"||e.startsWith("notifications.")),i}catch{return p=null,c="/",h||H(null),w=!1,g=null,[]}}document.addEventListener("dm:admin-home-changed",()=>{f()});let P=null,A=!1;document.addEventListener("dm:sidebar-rebuild",()=>{if(B(r),P){A=!0;return}P=(async()=>{do{A=!1;try{await j(await f())}catch{}}while(A)})().finally(()=>{P=null})});async function j(t){const{renderAdminSidebar:i}=await import("./lib/sidebar-renderer.js");await i({mount:"#admin-sidebar",permissions:t,adminScope:p,brand:h})}M.subscribe("router:afterChange",({to:t})=>{C(t.path)&&(u&&(clearInterval(u),u=null),p=null,c="/",w=!1,g=null)});const q=[{path:"/",view:"dashboard",title:"Dashboard - Domma CMS"},{path:"/dashboards",view:"dashboards",title:"Dashboards - Domma CMS"},{path:"/my-dashboard",view:"dashboards",title:"Dashboards - Domma CMS"},{path:"/pages",view:"pages",title:"Pages - Domma CMS"},{path:"/pages/new",view:"pageEditor",title:"New Page - Domma CMS"},{path:"/pages/edit/*",view:"pageEditor",title:"Edit Page - Domma CMS"},{path:"/media",view:"media",title:"Media - Domma CMS"},{path:"/menus",view:"menus",title:"Menus - Domma CMS"},{path:"/context-menus",view:"contextMenus",title:"Context Menus - Domma CMS"},{path:"/context-menus/new",view:"contextMenuEditor",title:"New Context Menu - Domma CMS"},{path:"/context-menus/edit/:slug",view:"contextMenuEditor",title:"Edit Context Menu - Domma CMS"},{path:"/menus/new",view:"menuEditor",title:"New Menu - Domma CMS"},{path:"/menus/edit/:slug",view:"menuEditor",title:"Edit Menu - Domma CMS"},{path:"/menu-locations",view:"menuLocations",title:"Menu Locations - Domma CMS"},{path:"/navigation",view:"menusRedirect",title:"Menus - Domma CMS"},{path:"/layouts",view:"layouts",title:"Layouts - Domma CMS"},{path:"/settings",view:"settings",title:"Settings - Domma CMS"},{path:"/theme",view:"theme",title:"Theme - Domma CMS"},{path:"/users",view:"users",title:"Users - Domma CMS"},{path:"/users/new",view:"userEditor",title:"New User - Domma CMS"},{path:"/users/edit/:id",view:"userEditor",title:"Edit User - Domma CMS"},{path:"/plugins",view:"plugins",title:"Plugins - Domma CMS"},{path:"/plugins/code/:name",view:"pluginCode",title:"Plugin Code - Domma CMS"},{path:"/documentation",view:"documentation",title:"Usage - Domma CMS"},{path:"/tutorials",view:"tutorials",title:"Tutorials - Domma CMS"},{path:"/tutorials/crud",view:"tutorialCrud",title:"Building a CRUD App - Domma CMS"},{path:"/tutorials/editor",view:"tutorialEditor",title:"The Editor - Domma CMS"},{path:"/tutorials/plugin",view:"tutorialPlugin",title:"Writing a Tool - Domma CMS"},{path:"/tutorials/forms",view:"tutorialForms",title:"Form Follow-Up - Domma CMS"},{path:"/docs/components",view:"componentsReference",title:"Components Reference - Domma CMS"},{path:"/docs/components-howto",view:"componentsHowto",title:"Components How-To - Domma CMS"},{path:"/docs/components-walkthrough",view:"componentsWalkthrough",title:"Components Walkthrough - Domma CMS"},{path:"/docs/components-rules",view:"componentsRules",title:"Components Rules - Domma CMS"},{path:"/docs/usage/pages",view:"usagePages",title:"Pages - Usage - Domma CMS"},{path:"/docs/usage/media",view:"usageMedia",title:"Media - Usage - Domma CMS"},{path:"/docs/usage/navigation",view:"usageNavigation",title:"Navigation - Usage - Domma CMS"},{path:"/docs/usage/dconfig",view:"usageDconfig",title:"DConfig - Usage - Domma CMS"},{path:"/docs/usage/shortcodes",view:"usageShortcodes",title:"Shortcodes - Usage - Domma CMS"},{path:"/docs/usage/site-settings",view:"usageSiteSettings",title:"Site Settings - Usage - Domma CMS"},{path:"/docs/usage/plugins",view:"usagePlugins",title:"Plugins - Usage - Domma CMS"},{path:"/docs/usage/users-roles",view:"usageUsersRoles",title:"Users & Roles - Usage - Domma CMS"},{path:"/docs/usage/views",view:"usageViews",title:"Views - Usage - Domma CMS"},{path:"/docs/usage/actions",view:"usageActions",title:"Actions - Usage - Domma CMS"},{path:"/docs/usage/cta-shortcode",view:"usageCtaShortcode",title:"CTA Shortcode - Usage - Domma CMS"},{path:"/docs/usage/editions",view:"usageEditions",title:"Editions & Licences - Usage - Domma CMS"},{path:"/docs/usage/collections",view:"usageCollections",title:"Collections & Forms - Usage - Domma CMS"},{path:"/docs/usage/blocks",view:"usageBlocks",title:"Blocks - Usage - Domma CMS"},{path:"/docs/usage/tools",view:"usageTools",title:"Built-in Tools - Usage - Domma CMS"},{path:"/docs/usage/dashboard",view:"usageDashboard",title:"Dashboard - Usage - Domma CMS"},{path:"/docs/usage/search-engines",view:"usageSearchEngines",title:"Search Engines & AI - Usage - Domma CMS"},{path:"/docs/plugins",view:"pluginGuides",title:"Plugin Guides - Domma CMS"},{path:"/docs/plugins/*",view:"pluginGuide",title:"Plugin Guide - Domma CMS"},{path:"/docs/api/authentication",view:"apiRefAuthentication",title:"Authentication - API - Domma CMS"},{path:"/docs/api/pages",view:"apiRefPages",title:"Pages - API - Domma CMS"},{path:"/docs/api/settings",view:"apiRefSettings",title:"Settings - API - Domma CMS"},{path:"/docs/api/layouts",view:"apiRefLayouts",title:"Layouts - API - Domma CMS"},{path:"/docs/api/navigation",view:"apiRefNavigation",title:"Navigation - API - Domma CMS"},{path:"/docs/api/media",view:"apiRefMedia",title:"Media - API - Domma CMS"},{path:"/docs/api/users",view:"apiRefUsers",title:"Users - API - Domma CMS"},{path:"/docs/api/plugins",view:"apiRefPlugins",title:"Plugins - API - Domma CMS"},{path:"/docs/api/collections",view:"apiRefCollections",title:"Collections - API - Domma CMS"},{path:"/docs/api/views",view:"apiRefViews",title:"Views API - Domma CMS"},{path:"/docs/api/actions",view:"apiRefActions",title:"Actions API - Domma CMS"},{path:"/docs/api/forms",view:"apiRefForms",title:"Forms API - Domma CMS"},{path:"/docs/api/scaffold",view:"apiRefScaffold",title:"Scaffold API - Domma CMS"},{path:"/docs/api/external",view:"apiRefExternal",title:"External API & Tokens - Domma CMS"},{path:"/docs/api/content",view:"apiRefContent",title:"Content API - Domma CMS"},{path:"/docs/api/builder",view:"apiRefBuilder",title:"API Builder - Domma CMS"},{path:"/api-reference",view:"apiReference",title:"API Reference - Domma CMS"},{path:"/collections",view:"collections",title:"Collections - Domma CMS"},{path:"/collections/new",view:"collectionEditor",title:"New Collection - Domma CMS"},{path:"/collections/edit/:slug",view:"collectionEditor",title:"Edit Collection - Domma CMS"},{path:"/collections/:slug/entries",view:"collectionEntries",title:"Entries - Domma CMS"},{path:"/forms",view:"forms",title:"Forms - Domma CMS"},{path:"/forms/new",view:"formEditor",title:"New Form - Domma CMS"},{path:"/forms/edit/:slug",view:"formEditor",title:"Edit Form - Domma CMS"},{path:"/forms/:slug/submissions",view:"formSubmissions",title:"Submissions - Domma CMS"},{path:"/views",view:"viewsList",title:"Views - Domma CMS"},{path:"/views/new",view:"viewEditor",title:"New View - Domma CMS"},{path:"/views/edit/:slug",view:"viewEditor",title:"Edit View - Domma CMS"},{path:"/views/:slug/preview",view:"viewPreview",title:"View Preview - Domma CMS"},{path:"/actions",view:"actionsList",title:"Actions - Domma CMS"},{path:"/actions/new",view:"actionEditor",title:"New Action - Domma CMS"},{path:"/actions/edit/:slug",view:"actionEditor",title:"Edit Action - Domma CMS"},{path:"/pro/docs",view:"proDocs",title:"Pro Documentation - Domma CMS"},{path:"/blocks",view:"blocks",title:"Blocks - Domma CMS"},{path:"/blocks/new",view:"pageEditor",title:"New Block - Domma CMS"},{path:"/blocks/edit/:name",view:"pageEditor",title:"Edit Block - Domma CMS"},{path:"/components",view:"components",title:"Components - Domma CMS"},{path:"/components/new",view:"pageEditor",title:"New Component - Domma CMS"},{path:"/components/edit/:name",view:"pageEditor",title:"Edit Component - Domma CMS"},{path:"/my-profile",view:"myProfile",title:"My Profile - Domma CMS"},{path:"/roles",view:"roles",title:"Roles & Permissions - Domma CMS"},{path:"/roles/edit/:id",view:"roleEditor",title:"Edit Role - Domma CMS"},{path:"/effects",view:"effects",title:"Effects - Domma CMS"},{path:"/search",view:"search",title:"Search - Domma CMS"},{path:"/content-api",view:"contentApi",title:"Content API - Domma CMS"},{path:"/notes",view:"notes",title:"Notes - Domma CMS"},{path:"/todo",view:"todo",title:"Todo - Domma CMS"},{path:"/calculator",view:"calculator",title:"Calculator - Domma CMS"},{path:"/analytics",view:"analytics",title:"Analytics - Domma CMS"},{path:"/seo",view:"seo",title:"SEO - Domma CMS"},{path:"/seo/:tab",view:"seo",title:"SEO - Domma CMS"},{path:"/wordpress-import",view:"wordpressImport",title:"Import from WordPress - Domma CMS"},{path:"/contacts",view:"contacts",title:"Contacts - Domma CMS"},{path:"/calls/new",view:"callNew",title:"Call now - Domma CMS"},{path:"/system/notifications",view:"notifications",title:"Notifications - Domma CMS"},{path:"/api-tokens",view:"apiTokens",title:"API Tokens - Domma CMS"},{path:"/api-endpoints",view:"apiEndpoints",title:"API Builder - Domma CMS"},{path:"/api-endpoints/new",view:"apiEndpointEditor",title:"New API Endpoint - Domma CMS"},{path:"/api-endpoints/edit/:id",view:"apiEndpointEditor",title:"Edit API Endpoint - Domma CMS"},{path:"/projects",view:"projects",title:"Projects - Domma CMS"},{path:"/projects/new",view:"projects",title:"New Project - Domma CMS"},{path:"/projects/edit/:slug",view:"projects",title:"Edit Project - Domma CMS"},{path:"/projects/:slug/settings",view:"projectSettings",title:"Project settings - Domma CMS"},{path:"/projects/:slug/pages",view:"pages",title:"Project pages - Domma CMS"},{path:"/projects/:slug/collections",view:"collections",title:"Project collections - Domma CMS"},{path:"/projects/:slug/forms",view:"forms",title:"Project forms - Domma CMS"},{path:"/projects/:slug/actions",view:"actionsList",title:"Project actions - Domma CMS"},{path:"/projects/:slug/menus",view:"menus",title:"Project menus - Domma CMS"},{path:"/projects/:slug/blocks",view:"blocks",title:"Project blocks - Domma CMS"},{path:"/projects/:slug/components",view:"components",title:"Project components - Domma CMS"},{path:"/projects/:slug/views",view:"viewsList",title:"Project views - Domma CMS"},{path:"/projects/:slug/roles",view:"roles",title:"Project roles - Domma CMS"},{path:"/projects/:slug/users",view:"users",title:"Project users - Domma CMS"},{path:"/projects/:slug/apis",view:"apiEndpoints",title:"Project APIs - Domma CMS"},{path:"/projects/:slug",view:"projectDetail",title:"Project - Domma CMS"},{path:"/login",view:"login",title:"Sign in - Domma CMS",onEnter:()=>{$("#admin-sidebar").hide(),$("#admin-topbar").hide()}},{path:"/reset-password",view:"login",title:"Reset Password - Domma CMS",onEnter:()=>{$("#admin-sidebar").hide(),$("#admin-topbar").hide()}}];M.subscribe("router:afterChange",async({to:t,from:i})=>{if(!C(t.path)){if($("#admin-sidebar").show(),$("#admin-topbar").show(),C(i?.path)){$("#topbar-user-name").remove(),import("./lib/admin-theme.js").then(o=>o.refreshAdminTheme(r)),await T();const e=await f(),a=D(t.path);if(a&&R.navigate(a),j(e),ut.read().signInToasts)try{const o=await r.system.notifications.list().catch(()=>[]),n=(Array.isArray(o)?o:[]).filter(s=>s.unread&&["warning","critical"].includes(s.data?.severity)).slice(0,3);for(const s of n){const v=d(s.data?.title||""),x=d((s.data?.body||"").slice(0,120));E.toast(`${v} - ${x}`,{type:s.data?.severity==="critical"?"error":"warning",duration:0})}}catch{}}O()}}),M.subscribe("router:afterChange",()=>{setTimeout(()=>{$(".btn-primary, .btn-danger").length&&Domma.effects.reveal(".btn-primary, .btn-danger",{animation:"fade",stagger:40,duration:300})},50)});const G=["#field-project","#menu-project","#collection-project","#endpoint-project","#action-project","#view-project","#block-project","#component-project","#role-project",'[name="project"]','[name="ownedByProject"]'];function z(t){return/^\/(pages|menus|context-menus|collections|forms|actions|views|blocks|components|users|roles|api-endpoints)\/(new|edit\/)/.test(t)}M.subscribe("router:afterChange",({to:t})=>{const i=t?String(t.path).split("?")[0]:"";if(!t||!z(i))return;const a=new URLSearchParams(location.hash.split("?")[1]||"").get("project");if(!a||!/\/new$/.test(i))return;let o=0;const n=60,s=1500,v=()=>{o+=n;for(const x of G){const b=document.querySelector(x);if(!b)continue;if(Array.from(b.options||[]).find(J=>J.value===a)){b.value=a,b.dispatchEvent(new Event("change",{bubbles:!0}));return}}o<s&&setTimeout(v,n)};setTimeout(v,n)});const F="cms_card_states",k=S.get(F)||{};M.subscribe("router:afterChange",()=>{setTimeout(()=>{$("#view-container .card-collapsible").each(function(){const t=$(this).find(".card-header h2, .card-header h3").first().text().trim();t&&k[t]==="collapsed"&&$(this).addClass("card-collapsed")})},200)}),$("#view-container").on("click",".card-collapsible .card-header",function(t){if($(t.target).closest("button, a").length)return;const i=$(this).closest(".card");i.toggleClass("card-collapsed");const e=$(this).find("h2, h3").first().text().trim();e&&(k[e]=i.hasClass("card-collapsed")?"collapsed":"open",S.set(F,k))}),vt(),document.addEventListener("keydown",t=>{if(!(t.ctrlKey||t.metaKey)||t.key!=="s"||window.location.hash.startsWith("#/login")||window.location.hash.startsWith("#/reset-password"))return;const i=document.querySelector("#view-container .view-header button.btn-primary");i&&(t.preventDefault(),i.click())});const l={...X},K={notes:{displayName:"Notes",icon:"edit-3"},todo:{displayName:"Todo",icon:"check-square"},calculator:{displayName:"Calculator",icon:"calculator"},analytics:{displayName:"Analytics",icon:"chart-bar"},seo:{displayName:"SEO",icon:"search"},wordpressImport:{displayName:"Import from WordPress",icon:"download"},contacts:{displayName:"Contacts",icon:"users"},projects:{displayName:"Projects",icon:"folder"},pages:{displayName:"Pages",icon:"file-text"},media:{displayName:"Media",icon:"image"},menus:{displayName:"Site menus",icon:"menu"},contextMenus:{displayName:"Context Menus",icon:"menu"},theme:{displayName:"Theme",icon:"droplet"},collections:{displayName:"Collections",icon:"database"},forms:{displayName:"Forms",icon:"layout"},viewsList:{displayName:"Views",icon:"eye"},actionsList:{displayName:"Actions",icon:"zap"},apiEndpoints:{displayName:"API Builder",icon:"code"},blocks:{displayName:"Blocks",icon:"box"},components:{displayName:"Components",icon:"component"},notifications:{displayName:"Notifications",icon:"bell"},roles:{displayName:"Roles",icon:"shield"},users:{displayName:"Users",icon:"users"},settings:{displayName:"Site Settings",icon:"settings"},effects:{displayName:"Effects",icon:"sparkles"},layouts:{displayName:"Layouts",icon:"layout"},plugins:{displayName:"Marketplace",icon:"store"},myProfile:{displayName:"My Profile",icon:"user"},apiTokens:{displayName:"API Tokens",icon:"key"},search:{displayName:"Search",icon:"search"},contentApi:{displayName:"Content API",icon:"file-text"},dashboard:{displayName:"Dashboard",icon:"home"},dashboards:{displayName:"Dashboards",icon:"home"},pageEditor:{displayName:"Pages",section:"Edit",icon:"file-text"},menuEditor:{displayName:"Site menus",section:"Edit",icon:"menu"},menuLocations:{displayName:"Site menus",section:"Locations",icon:"map-pin"},contextMenuEditor:{displayName:"Context Menus",section:"Edit",icon:"menu"},collectionEditor:{displayName:"Collections",section:"Edit",icon:"database"},collectionEntries:{displayName:"Collections",section:"Entries",icon:"database"},formEditor:{displayName:"Forms",section:"Edit",icon:"layout"},formSubmissions:{displayName:"Forms",section:"Submissions",icon:"inbox"},viewEditor:{displayName:"Views",section:"Edit",icon:"eye"},viewPreview:{displayName:"Views",section:"Preview",icon:"eye"},actionEditor:{displayName:"Actions",section:"Edit",icon:"zap"},apiEndpointEditor:{displayName:"API Builder",section:"Edit",icon:"code"},roleEditor:{displayName:"Roles",section:"Edit",icon:"shield"},userEditor:{displayName:"Users",section:"Edit",icon:"users"},projectDetail:{displayName:"Projects",section:"Overview",icon:"folder"},projectSettings:{displayName:"Projects",section:"Settings",icon:"folder"},pluginCode:{displayName:"Marketplace",section:"Code",icon:"code"}};for(const[t,i]of Object.entries(K))l[t]&&(l[t]=V(l[t],{plugin:t,licence:"Built in",...i}));l.dashboard=W(l.dashboard);const I=[...q];async function T(){if(m())try{const t=await r.plugins.adminConfig(),i=new Set(I.map(e=>e.path));for(const e of t.routes||[])i.has(e.path)||I.push(e);for(const[e,a]of Object.entries(t.views||{}))try{const o=await import(`/plugins/${a.entry}`);l[e]=V(o[a.exportName],(t.meta||{})[e])}catch{}l.dashboard=W(l.dashboard);for(const[e,{route:a}]of Object.entries(t.takeovers||{}))a&&(y[`/${e}`]=a);for(const[e,{enabled:a,displayName:o}]of Object.entries(t.tools||{}))a===!1&&(N[`/${e}`]=o);for(const{id:e,href:a}of t.css||[])if(!document.getElementById(e)){const o=document.createElement("link");o.id=e,o.rel="stylesheet",o.href=a,document.head.appendChild(o)}}catch{}}function O(){const t=L();if(!t)return;if($("#topbar-user-name").length){B(r);return}const e={"super-admin":"Super Admin",admin:"Admin",user:"User"}[t.role]||t.role,a=ht(t);$("#topbar-user").get(0).innerHTML=`
|
|
2
2
|
<a id="topbar-project" class="topbar-action-link topbar-project" hidden>
|
|
3
3
|
<span data-icon="folder"></span>
|
|
4
4
|
<span id="topbar-project-name" class="topbar-project-name"></span>
|
|
@@ -17,11 +17,15 @@ import{installSmoothCarets as Y}from"./lib/smooth-caret.js";import{views as Q}fr
|
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
19
19
|
`,$("#topbar-actions").get(0).innerHTML=`
|
|
20
|
-
<
|
|
20
|
+
<div id="topbar-notifications" class="topbar-account">
|
|
21
|
+
<button type="button" id="topbar-bell" class="topbar-action-link" aria-label="Notifications" aria-expanded="false" aria-controls="topbar-notifications-menu" hidden>
|
|
21
22
|
<span data-icon="bell"></span>
|
|
22
23
|
<span class="topbar-action-label">Notifications</span>
|
|
23
24
|
<span id="topbar-bell-badge" class="topbar-bell-badge" hidden></span>
|
|
24
|
-
|
|
25
|
+
<span data-icon="chevron-down"></span>
|
|
26
|
+
</button>
|
|
27
|
+
<div id="topbar-notifications-menu" class="topbar-account-menu topbar-notifications-menu" aria-label="Notifications" hidden></div>
|
|
28
|
+
</div>
|
|
25
29
|
<div id="topbar-account" class="topbar-account">
|
|
26
30
|
<button type="button" class="topbar-action-link" aria-label="Account menu" aria-expanded="false" aria-controls="topbar-account-menu">
|
|
27
31
|
<span id="topbar-account-avatar" class="topbar-account-avatar" aria-hidden="true"></span><span class="topbar-action-label">Account</span><span data-icon="chevron-down"></span>
|
|
@@ -46,4 +50,4 @@ import{installSmoothCarets as Y}from"./lib/smooth-caret.js";import{views as Q}fr
|
|
|
46
50
|
</a>
|
|
47
51
|
</div>
|
|
48
52
|
</div>
|
|
49
|
-
`;const o=$("#topbar-bell").get(0);o&&(o.hidden=!0);const n=$("#topbar-settings").get(0);n&&(n.hidden=!w),$("#topbar-logout-btn").on("click",s=>{s.preventDefault(),
|
|
53
|
+
`;const o=$("#topbar-bell").get(0);o&&(o.hidden=!0);const n=$("#topbar-settings").get(0);n&&(n.hidden=!w),$("#topbar-logout-btn").on("click",s=>{s.preventDefault(),Z()}),Domma.icons.scan("#admin-topbar"),E.tooltip("#topbar-actions [data-tooltip]",{placement:"bottom"}),lt(t),Y({refreshBadge:U}),wt(t),_(),rt(),B(r),U(),u||(u=setInterval(U,6e4))}function d(t){return String(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}let u=null;async function U(){if(!(!m()||g===!1))try{const{count:t}=await r.system.notifications.unreadCount();$("#topbar-bell").removeAttr("hidden");const i=$("#topbar-bell-badge");t>0?i.text(t>99?"99+":String(t)).removeAttr("hidden"):i.attr("hidden","").text(""),t>0&&dt()&&pt(await r.system.notifications.list().catch(()=>[]))}catch{}}(async()=>{if(!m()&&!window.location.hash.startsWith("#/reset-password"))window.location.hash.startsWith("#/login")||(window.location.hash=it(window.location.hash));else if(et(L()?.id),await T(),L()){const o=await f(),n=(window.location.hash||"#/").slice(1)||"/",s=D(n);s&&(window.location.hash=`#${s}`),await j(o),O()}const t=R._extractParams.bind(R);R._extractParams=function(a,o){const n=o.indexOf("?");if(n!==-1&&(o=o.slice(0,n)),a.endsWith("/*")){const s=a.slice(0,-2);return o.startsWith(s+"/")?{}:null}return t(a,o)};const i=R._renderNotFound.bind(R);let e="";R._renderNotFound=async function(a){return m()&&e!==a&&(e=a,await T(),R._matchRoute(a).route)?(e="",R._handleRouteChange()):(e="",m()&&$("#admin-sidebar").get(0)?.style.display==="none"?(E.toast("That link goes nowhere - here is your home page.",{type:"warning"}),R.navigate("/")):i(a))},bt(R),R.init({container:"#view-container",routes:I,views:l,default:"/",transitions:{enter:"fadeIn",leave:"fadeOut",duration:150}})})()});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{api as $,apiRequest as k}from"../api.js";import{sidebarCount as A}from"./tool-kit.js";import{severityOf as S}from"./notifications-arrange.js";const L=[["critical","Critical","alert-circle","danger"],["warning","Warnings","alert-triangle","warn"],["info","Information","info","info"],["success","Success","check-circle","ok"]];export function notificationGroups(m=[]){return L.map(([i,r,l,e])=>{const u=m.filter(c=>S(c)===i);return{type:i,label:r,icon:l,tone:e,total:u.length,unread:u.filter(c=>c.unread).length}})}let p;export function wireNotificationMenu({refreshBadge:m}){p?.abort(),p=new AbortController;const{signal:i}=p,r=document.getElementById("topbar-notifications");if(!r)return;const l=r.querySelector("#topbar-bell"),e=r.querySelector("#topbar-notifications-menu");let u=0,c=!1;const f=()=>{u++,e.hidden=!0,l.setAttribute("aria-expanded","false")},y=t=>{const n=document.createElement("p");n.className="nt-menu-status",n.setAttribute("role","status"),n.textContent=t,e.replaceChildren(n)},v=t=>{const n=e.contains(document.activeElement)?document.activeElement:null,s=n?.dataset.dismiss,o=n?.getAttribute("href"),d=n?.hasAttribute("data-read-all"),w=notificationGroups(t);e.innerHTML=`<div class="nt-menu-heading" aria-live="polite">Notifications <span>${w.reduce((a,g)=>a+g.unread,0)} unread</span></div>
|
|
2
|
+
${w.map(a=>`<div class="nt-menu-row">
|
|
3
|
+
<a class="nt-menu-type" href="#/system/notifications?type=${a.type}">
|
|
4
|
+
<span class="nt-menu-icon is-${a.tone}"><span data-icon="${a.icon}"></span></span>
|
|
5
|
+
<span>${a.label}<small>${a.unread} unread / ${a.total} total</small></span>
|
|
6
|
+
</a>
|
|
7
|
+
<button type="button" class="nt-menu-dismiss" data-dismiss="${a.type}" data-count="${a.total}" aria-label="Dismiss ${a.total} ${a.label.toLowerCase()} notifications" ${!a.total||c?"disabled":""}>Dismiss</button>
|
|
8
|
+
</div>`).join("")}
|
|
9
|
+
${t.length?"":`<p class="nt-menu-status">No notifications - you're all caught up.</p>`}
|
|
10
|
+
<div class="nt-menu-footer"><a href="#/system/notifications?type=all">View all notifications</a>
|
|
11
|
+
<button type="button" data-read-all ${c||!t.some(a=>a.unread)?"disabled":""}>Mark all as read</button></div>`,Domma.icons.scan(e),s?(e.querySelector(`[data-dismiss="${s}"]:not(:disabled)`)||e.querySelector(`a[href$="type=${s}"]`))?.focus():o?[...e.querySelectorAll("a")].find(a=>a.getAttribute("href")===o)?.focus():d&&(e.querySelector("[data-read-all]:not(:disabled)")||e.querySelector(".nt-menu-footer a"))?.focus()},b=async()=>{const t=++u;try{const n=await $.system.notifications.list();if(i.aborted||t!==u||e.hidden)return;v(Array.isArray(n)?n:[])}catch{!i.aborted&&t===u&&!e.hidden&&y("Could not load notifications. Close and reopen to try again.")}},h=async t=>{document.dispatchEvent(new CustomEvent("dm:topbar-menu-open",{detail:{owner:r}})),e.hidden=!1,l.setAttribute("aria-expanded","true"),y("Loading notifications..."),await b(),t&&!e.hidden&&e.querySelector("a, button:not(:disabled)")?.focus()};l.addEventListener("click",()=>e.hidden?h(!1):f(),{signal:i}),l.addEventListener("keydown",t=>{t.key==="ArrowDown"&&(t.preventDefault(),h(!0))},{signal:i}),e.addEventListener("click",async t=>{const n=t.target.closest("a");if(n){const d=new URLSearchParams(n.hash.split("?")[1]||"").get("type");document.dispatchEvent(new CustomEvent("dm:notifications-filter",{detail:{type:d}})),f();return}const s=t.target.closest("button");if(!s||s.disabled||c)return;const o=s.dataset.dismiss;c=!0;try{if(o==="critical"&&!await E.confirm(`Dismiss all ${s.dataset.count} critical notifications? They are hidden for you only.`))return;e.querySelectorAll("button").forEach(d=>{d.disabled=!0}),await k(`/system/notifications/${o?"dismiss-all":"read-all"}`,{method:"POST",...o?{body:JSON.stringify({severity:o})}:{}}),document.dispatchEvent(new CustomEvent("dm:notifications-changed")),A("#/system/notifications"),await m()}catch(d){E.toast(`Could not update notifications: ${d.message||d}`,{type:"error"})}finally{c=!1,!i.aborted&&!e.hidden&&await b()}},{signal:i}),e.addEventListener("keydown",t=>{const n=[...e.querySelectorAll("a, button:not(:disabled)")],s=n.indexOf(document.activeElement);if(s<0)return;let o;t.key==="ArrowDown"&&(o=(s+1)%n.length),t.key==="ArrowUp"&&(o=(s-1+n.length)%n.length),t.key==="Home"&&(o=0),t.key==="End"&&(o=n.length-1),o!==void 0&&(t.preventDefault(),n[o].focus())},{signal:i}),document.addEventListener("click",t=>{r.contains(t.target)||f()},{signal:i}),document.addEventListener("focusin",t=>{r.contains(t.target)||f()},{signal:i}),document.addEventListener("dm:topbar-menu-open",t=>{t.detail.owner!==r&&f()},{signal:i}),document.addEventListener("keydown",t=>{!t.defaultPrevented&&t.key==="Escape"&&!e.hidden&&(f(),l.focus(),t.preventDefault())},{signal:i}),window.addEventListener("hashchange",f,{signal:i})}
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
<div class="ntx-seg" role="group" aria-label="Show">
|
|
12
12
|
<button type="button" data-on-click="showAll" data-bind-class="filter.value === 'all' && 'is-on'">All <b data-bind-text="counts.value.all"></b></button>
|
|
13
13
|
<button type="button" data-on-click="showNew" data-bind-class="filter.value === 'new' && 'is-on'" data-bind-hidden="!counts.value.new">New <b data-bind-text="counts.value.new"></b></button>
|
|
14
|
-
<button type="button" data-on-click="showCritical" data-bind-class="filter.value === 'critical' && 'is-on'" data-bind-hidden="!counts.value.critical">Critical <b data-bind-text="counts.value.critical"></b></button>
|
|
15
|
-
<button type="button" data-on-click="showWarning" data-bind-class="filter.value === 'warning' && 'is-on'" data-bind-hidden="!counts.value.warning">Warnings <b data-bind-text="counts.value.warning"></b></button>
|
|
16
|
-
<button type="button" data-on-click="showInfo" data-bind-class="filter.value === 'info' && 'is-on'" data-bind-hidden="!counts.value.info">Info <b data-bind-text="counts.value.info"></b></button>
|
|
17
|
-
<button type="button" data-on-click="showSuccess" data-bind-class="filter.value === 'success' && 'is-on'" data-bind-hidden="!counts.value.success">Success <b data-bind-text="counts.value.success"></b></button>
|
|
14
|
+
<button type="button" data-on-click="showCritical" data-bind-class="filter.value === 'critical' && 'is-on'" data-bind-hidden="!counts.value.critical && filter.value !== 'critical'">Critical <b data-bind-text="counts.value.critical"></b></button>
|
|
15
|
+
<button type="button" data-on-click="showWarning" data-bind-class="filter.value === 'warning' && 'is-on'" data-bind-hidden="!counts.value.warning && filter.value !== 'warning'">Warnings <b data-bind-text="counts.value.warning"></b></button>
|
|
16
|
+
<button type="button" data-on-click="showInfo" data-bind-class="filter.value === 'info' && 'is-on'" data-bind-hidden="!counts.value.info && filter.value !== 'info'">Info <b data-bind-text="counts.value.info"></b></button>
|
|
17
|
+
<button type="button" data-on-click="showSuccess" data-bind-class="filter.value === 'success' && 'is-on'" data-bind-hidden="!counts.value.success && filter.value !== 'success'">Success <b data-bind-text="counts.value.success"></b></button>
|
|
18
18
|
</div>
|
|
19
19
|
<input type="search" class="form-input ntx-search" placeholder="Search notifications…" aria-label="Search notifications" data-model="query.value">
|
|
20
20
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{api as
|
|
1
|
+
import{api as k,apiRequest as f}from"../api.js";import{addBannerAction as B}from"../lib/plugin-chrome.js";import{SHAPES as $e,whileLoading as Pe}from"../lib/loading.js";import{helpPopovers as oe}from"../lib/help-popover.js";import{onceClosed as Ie,openMenuAt as ie,sidebarCount as Oe,viewLifetime as qe}from"../lib/tool-kit.js";import{DEFAULT_SETTINGS as re,FILTERS as A,arrangeNotifications as Ue,filterCounts as _e,normaliseSettings as Be,notificationRow as ce,sourceRow as Fe}from"../lib/notifications-arrange.js";import{desktopPermission as le,notificationSettings as de,primeSeen as We,requestDesktopPermission as He,showTestNotification as je}from"../lib/desktop-notify.js";const ue=/^#\/system\/notifications\/?(\?.*)?$/,Ge="#/system/notifications",F="notifications.filter",Ke=`
|
|
2
2
|
<div class="ntx-row" data-id="{{id}}" tabindex="0" data-bind-class="rowCls" data-bind-aria-expanded="open ? 'true' : 'false'">
|
|
3
3
|
<span class="ntx-dot" aria-hidden="true"></span>
|
|
4
4
|
<span class="ntx-main">
|
|
@@ -13,7 +13,7 @@ import{api as w,apiRequest as f}from"../api.js";import{addBannerAction as U}from
|
|
|
13
13
|
</span>
|
|
14
14
|
</span>
|
|
15
15
|
<button type="button" class="ntx-kebab" aria-label="Actions for {{title}}" title="Actions">\u22EE</button>
|
|
16
|
-
</div>`,
|
|
16
|
+
</div>`,Ye=r=>String(r??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),ze=`
|
|
17
17
|
<div class="ntx-src" data-id="{{id}}">
|
|
18
18
|
<div class="ntx-src-head">
|
|
19
19
|
<span class="ntx-src-name"><strong>{{label}}</strong><small>{{meta}}</small></span>
|
|
@@ -29,9 +29,9 @@ import{api as w,apiRequest as f}from"../api.js";import{addBannerAction as U}from
|
|
|
29
29
|
<button type="button" class="btn btn-sm btn-ghost ntx-src-run" data-bind-hidden="!every">Run now</button>
|
|
30
30
|
</div>
|
|
31
31
|
<small class="ntx-src-err" data-bind-hidden="!lastError">{{lastError}}</small>
|
|
32
|
-
</div>`,
|
|
32
|
+
</div>`,R={granted:"Allowed in this browser.",default:"Your browser will ask for permission when you turn this on.",denied:"Blocked in this browser. Allow notifications for this site in the browser's site settings (the icon by the address), then turn this on.",unsupported:"This browser cannot show desktop notifications here - they need a current browser and an https address."};function Je(r){const c=document.createElement("template");return c.innerHTML=r.trim(),c.content.firstElementChild}const d=qe(ue);async function b(){Oe(Ge);try{const{count:r}=await k.system.notifications.unreadCount(),c=$("#topbar-bell-badge");r>0?c.text(r>99?"99+":String(r)).removeAttr("hidden"):c.attr("hidden","").text("")}catch{}}export const notificationsView={templateUrl:"/admin/js/templates/notifications.html",async onMount(r){d.reset();const c=r.get(0).querySelector(".ntx")||r.get(0),y=()=>ue.test(location.hash)&&c.isConnected,i=M.observable([]),T=M.observable(!0),N=M.observable("");let W="all";try{W=A.includes(S.get(F))?S.get(F):"all"}catch{}const C=()=>new URLSearchParams(location.hash.split("?")[1]||"").get("type"),m=M.observable(A.includes(C())?C():W),H=()=>{y()&&A.includes(C())&&(m.value=C())},j=e=>{y()&&A.includes(e.detail?.type)&&(m.value=e.detail.type)};document.addEventListener("dm:notifications-filter",j),d.add(()=>document.removeEventListener("dm:notifications-filter",j)),window.addEventListener("hashchange",H),d.add(()=>window.removeEventListener("hashchange",H));const G=()=>{y()&&x({markRead:!1})};document.addEventListener("dm:notifications-changed",G),d.add(()=>document.removeEventListener("dm:notifications-changed",G));const K=M.observable(""),L=M.observable("");d.add(M.effect(()=>{const e=m.value;try{S.set(F,e)}catch{}}));const Y=M.computed(()=>_e(i.value));d.add(M.effect(()=>{const e=Y.value;!T.value&&m.peek()==="new"&&!e.new&&(m.value="all")}));const z=M.observable([]);d.add(M.effect(()=>{const e=Date.now(),t=L.value;z.value=Ue(i.value,{filter:m.value,query:K.value}).map(n=>ce(n,{now:e,expanded:t}))}));const pe=M.computed(()=>i.value.length?"No notifications match.":"No notifications - you're all caught up."),u=M.observable(de.read());d.add(M.effect(()=>de.write(u.value)));const D=(e,t)=>{u.value=Be({...u.peek(),[e]:t})},J=e=>i.peek().find(t=>String(t.id)===String(e)),me=(e,t)=>{i.value=i.peek().map(n=>String(n.id)===String(e)?t(n):n)},V=e=>{i.value=i.peek().filter(t=>String(t.id)!==String(e))};async function x({markRead:e=!0}={}){try{const t=i.peek().length?null:c.querySelector(".dm-loading-slot"),n=await Pe(t,k.system.notifications.list(),$e.iconRows);if(!y())return;const p=Array.isArray(n)?n:[];if(i.value=p.map(l=>({...l,isNew:!!l.unread})),N.value="",e&&p.some(l=>l.unread)){if(await f("/system/notifications/read-all",{method:"POST"}).catch(()=>{}),!y())return;i.value=i.peek().map(l=>({...l,unread:!1})),b()}}catch(t){N.value=`Could not load notifications: ${t.message||t}`}finally{T.value=!1}}async function X(e,t){try{t?await k.system.notifications.markRead(e.id):await f(`/system/notifications/${encodeURIComponent(e.id)}/unread`,{method:"POST"}),me(e.id,n=>({...n,unread:!t})),b()}catch(n){E.toast(`Not changed: ${n.message||n}`,{type:"error"})}}async function Q(e){try{await k.system.notifications.dismiss(e.id),V(e.id),b()}catch(t){E.toast(`Could not dismiss it: ${t.message||t}`,{type:"error"})}}async function he(e){if(await E.confirm(`Delete "${Ye(e.data?.title||"this notification")}" for everyone? Dismissing hides it for you only.`))try{await k.system.notifications.remove(e.id),V(e.id),E.toast("Notification deleted.",{type:"success"}),b()}catch(t){E.toast(/403|forbidden|permission/i.test(String(t.message||t))?"Deleting needs the Notifications delete permission - Dismiss hides it for you.":`Could not delete it: ${t.message||t}`,{type:"error"})}}async function fe(){const e=i.peek().length;if(!e){E.toast("Nothing to dismiss.",{type:"info"});return}if(await E.confirm(`Dismiss all ${e} notification${e===1?"":"s"}? They are hidden for you only.`))try{await f("/system/notifications/dismiss-all",{method:"POST"}),i.value=[],b()}catch(t){E.toast(`Could not dismiss them: ${t.message||t}`,{type:"error"})}}async function be(e){const t=e.data||{},n=[t.title,t.body,t.link].filter(Boolean).join(`
|
|
33
33
|
|
|
34
|
-
`);try{await navigator.clipboard.writeText(n),E.toast("Copied.",{type:"success"})}catch{E.toast("Copying is blocked here - select the text instead.",{type:"warning"})}}const
|
|
34
|
+
`);try{await navigator.clipboard.writeText(n),E.toast("Copied.",{type:"success"})}catch{E.toast("Copying is blocked here - select the text instead.",{type:"warning"})}}const P=e=>{L.value=L.peek()===String(e)?"":String(e)};function ye(e){const t=J(e);if(!t)return[];const n=ce(t);return[{header:n.title},{label:n.open||L.peek()===n.id?"Close":"Read it",icon:"eye",action:()=>P(e)},...n.link?[n.linkTarget==="_self"?{label:"Go there",icon:"arrow-right",action:()=>{location.hash=n.link}}:{label:"Open link",icon:"external-link",action:()=>window.open(n.link,"_blank","noopener")}]:[],{label:"Copy text",icon:"copy",action:()=>be(t)},t.unread?{label:"Mark as read",icon:"check",action:()=>X(t,!0)}:{label:"Mark as unread",icon:"mail",action:()=>X(t,!1)},{type:"divider"},{label:"Dismiss",icon:"x",action:()=>Q(t)},{label:"Delete for everyone\u2026",icon:"trash",danger:!0,action:()=>he(t)}]}const v=c.querySelector(".ntx-list");v.innerHTML=Ke;const g=e=>()=>{m.value=e},ve=M.applyBindings({items:i,loading:T,loadError:N,filter:m,query:K,rows:z,counts:Y,emptyText:pe},c,{methods:{showAll:g("all"),showNew:g("new"),showCritical:g("critical"),showWarning:g("warning"),showInfo:g("info"),showSuccess:g("success")}});d.add(()=>ve.dispose()),d.add(oe(c,{position:"bottom"}));const ge=E.contextMenu(v,{cursor:"glyph",match:".ntx-row",inherit:!1,density:"compact",items:e=>ye(e.dataset.id)});d.add(()=>ge?.destroy?.());const Z=e=>{const t=e.target.closest(".ntx-row");if(!t)return;const n=e.target.closest(".ntx-kebab");if(n){ie(n);return}e.target.closest("a")||P(t.dataset.id)},ee=e=>{const t=e.target.closest(".ntx-row");if(t){if(e.key==="F10"&&e.shiftKey)e.preventDefault(),ie(t);else if(e.key==="Enter"&&e.target===t)P(t.dataset.id);else if(e.key==="Delete"&&e.target===t){const n=J(t.dataset.id);n&&Q(n)}}};v.addEventListener("click",Z),v.addEventListener("keydown",ee),d.add(()=>{v.removeEventListener("click",Z),v.removeEventListener("keydown",ee)});async function we(){try{const{added:e}=await f("/system/notifications/samples",{method:"POST"});await x({markRead:!1}),b(),E.toast(`${e} sample notifications added.${u.peek().desktop?" They pop up on the desktop within a minute.":""}`,{type:"success"})}catch(e){E.toast(/403|forbidden|permission/i.test(String(e.message||e))?"Adding samples needs the Notifications delete permission.":`Could not add samples: ${e.message||e}`,{type:"error"})}}function ke(){const e=E.slideover({title:"Notifications settings",size:"md",position:"right"}),t=Je(`
|
|
35
35
|
<div class="ntx-panel">
|
|
36
36
|
<div class="ntx-setting-row">
|
|
37
37
|
<label class="form-label" for="ntx-set-desktop" style="margin:0">Desktop notifications
|
|
@@ -78,4 +78,4 @@ import{api as w,apiRequest as f}from"../api.js";import{addBannerAction as U}from
|
|
|
78
78
|
<span class="spacer"></span>
|
|
79
79
|
<button type="button" class="btn btn-sm btn-primary" data-on-click="done">Done</button>
|
|
80
80
|
</div>
|
|
81
|
-
</div>`),n=t.querySelector("#ntx-set-desktop"),p=t.querySelector(".ntx-src-list");p.innerHTML=
|
|
81
|
+
</div>`),n=t.querySelector("#ntx-set-desktop"),p=t.querySelector(".ntx-src-list");p.innerHTML=ze;const l=M.observable([]),O=M.observable([]),q=M.observable(!1),xe=M.effect(()=>{O.value=l.value.map(s=>Fe(s))}),Se=M.effect(()=>{const s=O.value;setTimeout(()=>s.forEach(a=>{const o=p.querySelector(`.ntx-src[data-id="${CSS.escape(a.id)}"] .ntx-src-aud`);o&&(o.value=a.audience)}),0)}),U=s=>{l.value=l.peek().map(a=>a.id===s.id?s:a)},te=s=>`/system/notifications/sources/${encodeURIComponent(s)}`;f("/system/notifications/sources",{method:"GET"}).then(s=>{l.value=s.sources||[],q.value=!0}).catch(()=>{q.value=!1});async function se(s,a){const o=l.peek().find(w=>w.id===s);try{const{setting:w}=await f(te(s),{method:"PUT",body:JSON.stringify(a)});U({...o,...w})}catch(w){U({...o}),E.toast(`Not saved: ${w.message||w}`,{type:"error"})}}async function Ee(s,a){a.disabled=!0;try{const o=await f(`${te(s)}/run`,{method:"POST"});o.source&&U(o.source),E.toast(o.ok?"Done - anything it found is in the list.":`It failed: ${o.error}`,{type:o.ok?"success":"error"}),await x({markRead:!1}),b()}catch(o){E.toast(`Could not run it: ${o.message||o}`,{type:"error"})}finally{a.disabled=!1}}const ne=s=>{const a=s.target.closest(".ntx-src");a&&(s.target.matches(".ntx-src-on")?se(a.dataset.id,{enabled:s.target.checked}):s.target.matches(".ntx-src-aud")&&se(a.dataset.id,{audience:s.target.value}))},ae=s=>{const a=s.target.closest(".ntx-src-run");a&&Ee(a.closest(".ntx-src").dataset.id,a)};p.addEventListener("change",ne),p.addEventListener("click",ae);const h=M.observable(le()),Te=M.computed(()=>u.value.desktop&&h.value!=="granted"?`On, but not showing: ${R[h.value]}`:R[h.value]),Me=M.computed(()=>h.value==="denied"||h.value==="unsupported"?"is-bad":""),Ce=M.computed(()=>u.value.desktop&&h.value==="granted"),_=()=>{n.checked=u.peek().desktop};function Le(){const s=le();if(s==="unsupported"||s==="denied"){h.value=s,E.toast(R[s],{type:"warning"}),_();return}(s==="granted"?Promise.resolve("granted"):He()).then(async o=>{h.value=o,o==="granted"?(We(await k.system.notifications.list().catch(()=>[])),D("desktop",!0),E.toast("Desktop notifications are on for this browser.",{type:"success"})):E.toast(o==="denied"?R.denied:"Not turned on - the browser was not given permission.",{type:"warning"}),_()})}const Ae=s=>M.computed({read:()=>u.value[s],write:a=>D(s,a)}),Re={...Object.fromEntries(Object.keys(re).map(s=>[s,Ae(s)])),desktop:M.computed({read:()=>u.value.desktop,write:s=>s?Le():D("desktop",!1)}),permText:Te,permTone:Me,canTest:Ce,sourceRows:O,sourcesShown:q};e.element.appendChild(t);const Ne=oe(t),De=M.applyBindings(Re,t,{methods:{done:()=>e.close(),reset:()=>{u.value={...re},_()},samples:()=>{we()},test:()=>{je()||E.toast("The browser would not show it - check its notification settings.",{type:"warning"})}}});Ie(e,()=>{De.dispose(),Ne(),xe(),Se(),p.removeEventListener("change",ne),p.removeEventListener("click",ae)}),e.open()}B(r,{id:"notifications-settings",icon:"settings",title:"Notifications settings",onClick:ke}),B(r,{id:"notifications-dismiss-all",icon:"check-circle",title:"Dismiss all",onClick:()=>fe()}),B(r,{id:"notifications-refresh",icon:"refresh-cw",title:"Refresh",onClick:()=>{T.value=!0,x()}}),I.scan(c),await x(),y()&&I.scan(c)}};
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a){transition:color .18s ease,background-color .18s ease,text-shadow .18s ease,transform .18s ease,letter-spacing .18s ease,text-decoration-color .18s ease}.page-body :is([data-menu-hover],[data-menu-active]).dm-menu li>a{color:var(--dm-primary, inherit);text-decoration:none}[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]),[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]),#site-navbar[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{color:inherit!important;background-color:transparent!important;text-decoration:none!important;text-shadow:none!important;transform:none!important}[data-menu-hover=colour] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=colour] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;background-color:transparent!important;text-decoration:none!important}[data-menu-hover=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-hover=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-hover=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}[data-menu-hover=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:#00000029!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}[data-menu-hover=uppercase] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=uppercase] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{text-transform:uppercase!important;letter-spacing:.04em!important;background-color:transparent!important;text-decoration:none!important}:is([data-menu-hover=grow],[data-menu-hover=breathe]) :is(.dm-menu,.footer-nav) li>a{display:inline-block}[data-menu-hover=grow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=grow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{transform:scale(1.08)!important;background-color:transparent!important;text-decoration:none!important}@keyframes dm-menu-breathe{0%,to{opacity:1;transform:scale(1)}50%{opacity:.72;transform:scale(1.05)}}[data-menu-hover=breathe] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=breathe] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{animation:dm-menu-breathe 1.4s ease-in-out infinite!important;background-color:transparent!important;text-decoration:none!important}[data-menu-hover=glow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=glow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{text-shadow:0 0 8px color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 70%,transparent)!important;background-color:transparent!important;text-decoration:none!important}[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):is(.active,.is-active,[aria-current=page]){box-shadow:none!important;text-decoration:none!important}[data-menu-active=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){font-weight:inherit!important;background-color:transparent!important}[data-menu-active=bold] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=bold] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){font-weight:700!important;background-color:transparent!important}[data-menu-active=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-active=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-active=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px)}[data-menu-active=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:#00000038!important;border-radius:var(--dm-radius-md, 6px)}[data-menu-active=pill] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=pill] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;color:#fff!important;border-radius:999px;padding-inline:.9em}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active]{transition:color .18s ease,background-color .18s ease,text-shadow .18s ease,transform .18s ease,letter-spacing .18s ease,text-decoration-color .18s ease}.page-body .dm-menu li>a:is([data-menu-item-hover],[data-menu-item-active]){color:var(--dm-primary, inherit);text-decoration:none}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none],#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none]:hover{color:inherit!important;background-color:transparent!important;text-decoration:none!important;text-shadow:none!important;transform:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=colour]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=colour]:hover{color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=underline]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=underline]:hover{background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=overline]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=overline]:hover{background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=background]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=background]:hover{background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=darken]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=darken]:hover{background-color:#00000029!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=uppercase]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=uppercase]:hover{text-transform:uppercase!important;letter-spacing:.04em!important;background-color:transparent!important;text-decoration:none!important}:is(.dm-menu,.footer-nav) li>a:is([data-menu-item-hover=grow],[data-menu-item-hover=breathe]){display:inline-block}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=grow]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=grow]:hover{transform:scale(1.08)!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=breathe]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=breathe]:hover{animation:dm-menu-breathe 1.4s ease-in-out infinite!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=glow]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=glow]:hover{text-shadow:0 0 8px color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 70%,transparent)!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active]:is(.active,.is-active,[aria-current=page]){box-shadow:none!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=none]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=none]:is(.active,.is-active,[aria-current=page]){font-weight:inherit!important;background-color:transparent!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=bold]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=bold]:is(.active,.is-active,[aria-current=page]){font-weight:700!important;background-color:transparent!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=underline]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=underline]:is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=overline]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=overline]:is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=background]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=background]:is(.active,.is-active,[aria-current=page]){background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px)}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=darken]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=darken]:is(.active,.is-active,[aria-current=page]){background-color:#00000038!important;border-radius:var(--dm-radius-md, 6px)}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=pill]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=pill]:is(.active,.is-active,[aria-current=page]){background-color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;color:#fff!important;border-radius:999px;padding-inline:.9em}@media(prefers-reduced-motion:reduce){[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover{transition:none;animation:none!important;transform:none!important}}html.dm-reduced-motion [data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),html.dm-reduced-motion [data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,html.dm-reduced-motion #site-navbar[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,html.dm-reduced-motion :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],html.dm-reduced-motion :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover,html.dm-reduced-motion #site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover{transition:none;animation:none!important;transform:none!important}[data-menu-entrance] li{--dm-menu-i: 0;animation-duration:var(--dm-menu-entrance-duration, .4s);animation-timing-function:cubic-bezier(.22,.61,.36,1);animation-fill-mode:backwards;animation-delay:calc(var(--dm-menu-i) * var(--dm-menu-entrance-step, 60ms))}[data-menu-entrance] li:nth-child(2){--dm-menu-i: 1}[data-menu-entrance] li:nth-child(3){--dm-menu-i: 2}[data-menu-entrance] li:nth-child(4){--dm-menu-i: 3}[data-menu-entrance] li:nth-child(5){--dm-menu-i: 4}[data-menu-entrance] li:nth-child(6){--dm-menu-i: 5}[data-menu-entrance] li:nth-child(7){--dm-menu-i: 6}[data-menu-entrance] li:nth-child(8){--dm-menu-i: 7}[data-menu-entrance] li:nth-child(9){--dm-menu-i: 8}[data-menu-entrance] li:nth-child(10){--dm-menu-i: 9}[data-menu-entrance] li:nth-child(11){--dm-menu-i: 10}[data-menu-entrance] li:nth-child(12){--dm-menu-i: 11}[data-menu-entrance] li:nth-child(13){--dm-menu-i: 12}[data-menu-entrance] li:nth-child(14){--dm-menu-i: 13}[data-menu-entrance] li:nth-child(15){--dm-menu-i: 14}[data-menu-entrance] li:nth-child(16){--dm-menu-i: 15}[data-menu-entrance] li:nth-child(17){--dm-menu-i: 16}[data-menu-entrance] li:nth-child(18){--dm-menu-i: 17}[data-menu-entrance] li:nth-child(19){--dm-menu-i: 18}[data-menu-entrance] li:nth-child(20){--dm-menu-i: 19}[data-menu-entrance] li:nth-child(n+21){--dm-menu-i: 20}[data-menu-entrance] li:is(:hover,:focus-within){z-index:2}.dm-menu-floating[data-menu-entrance],#site-navbar.dm-nav-vertical[data-menu-entrance],#site-navbar[data-menu-entrance] .navbar-collapse{overflow-x:hidden}[data-menu-entrance=fade] li{animation-name:dm-menu-in-fade}[data-menu-entrance=slide-up] li{animation-name:dm-menu-in-slide-up}[data-menu-entrance=slide-down] li{animation-name:dm-menu-in-slide-down}[data-menu-entrance=slide-left] li{animation-name:dm-menu-in-slide-left}[data-menu-entrance=slide-right] li{animation-name:dm-menu-in-slide-right}[data-menu-entrance=zoom] li{animation-name:dm-menu-in-zoom}[data-menu-entrance=pop] li{animation-name:dm-menu-in-pop}[data-menu-entrance=flip] li{animation-name:dm-menu-in-flip}[data-menu-entrance=blur] li{animation-name:dm-menu-in-blur}@keyframes dm-menu-in-fade{0%{opacity:0}}@keyframes dm-menu-in-slide-up{0%{opacity:0;transform:translateY(14px)}}@keyframes dm-menu-in-slide-down{0%{opacity:0;transform:translateY(-14px)}}@keyframes dm-menu-in-slide-left{0%{opacity:0;transform:translate(24px)}}@keyframes dm-menu-in-slide-right{0%{opacity:0;transform:translate(-24px)}}@keyframes dm-menu-in-zoom{0%{opacity:0;transform:scale(.6)}}@keyframes dm-menu-in-pop{0%{opacity:0;transform:scale(.5)}70%{opacity:1;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}@keyframes dm-menu-in-flip{0%{opacity:0;transform:perspective(400px) rotateX(-80deg);transform-origin:top center}to{transform-origin:top center}}@keyframes dm-menu-in-blur{0%{opacity:0;filter:blur(6px)}}@media(prefers-reduced-motion:reduce){[data-menu-entrance] li{animation:none!important}}html.dm-reduced-motion [data-menu-entrance] li{animation:none!important}
|
|
1
|
+
[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a){transition:color .18s ease,background-color .18s ease,text-shadow .18s ease,transform .18s ease,letter-spacing .18s ease,text-decoration-color .18s ease}.page-body :is([data-menu-hover],[data-menu-active]).dm-menu li>a{color:var(--dm-primary, inherit);text-decoration:none}[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]),[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]),#site-navbar[data-menu-hover=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{color:inherit!important;background-color:transparent!important;text-decoration:none!important;text-shadow:none!important;transform:none!important}[data-menu-hover=colour] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=colour] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;background-color:transparent!important;text-decoration:none!important}[data-menu-hover=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-hover=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-hover=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}[data-menu-hover=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{background-color:#00000029!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}[data-menu-hover=uppercase] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=uppercase] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{text-transform:uppercase!important;letter-spacing:.04em!important;background-color:transparent!important;text-decoration:none!important}:is([data-menu-hover=grow],[data-menu-hover=breathe]) :is(.dm-menu,.footer-nav) li>a{display:inline-block}[data-menu-hover=grow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=grow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{transform:scale(1.08)!important;background-color:transparent!important;text-decoration:none!important}@keyframes dm-menu-breathe{0%,to{opacity:1;transform:scale(1)}50%{opacity:.72;transform:scale(1.05)}}[data-menu-hover=breathe] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=breathe] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{animation:dm-menu-breathe 1.4s ease-in-out infinite!important;background-color:transparent!important;text-decoration:none!important}[data-menu-hover=glow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover,#site-navbar[data-menu-hover=glow] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-hover]):hover{text-shadow:0 0 8px color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 70%,transparent)!important;background-color:transparent!important;text-decoration:none!important}[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):is(.active,.is-active,[aria-current=page]){box-shadow:none!important;text-decoration:none!important}[data-menu-active=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=none] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){font-weight:inherit!important;background-color:transparent!important}[data-menu-active=bold] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=bold] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){font-weight:700!important;background-color:transparent!important}[data-menu-active=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=underline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-active=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=overline] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}[data-menu-active=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=background] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px)}[data-menu-active=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=darken] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:#00000038!important;border-radius:var(--dm-radius-md, 6px)}[data-menu-active=pill] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]),#site-navbar[data-menu-active=pill] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):not([data-menu-item-active]):is(.active,.is-active,[aria-current=page]){background-color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;color:#fff!important;border-radius:999px!important;padding-inline:.9em}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active]{transition:color .18s ease,background-color .18s ease,text-shadow .18s ease,transform .18s ease,letter-spacing .18s ease,text-decoration-color .18s ease}.page-body .dm-menu li>a:is([data-menu-item-hover],[data-menu-item-active]){color:var(--dm-primary, inherit);text-decoration:none}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none],#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=none]:hover{color:inherit!important;background-color:transparent!important;text-decoration:none!important;text-shadow:none!important;transform:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=colour]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=colour]:hover{color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=underline]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=underline]:hover{background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=overline]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=overline]:hover{background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=background]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=background]:hover{background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=darken]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=darken]:hover{background-color:#00000029!important;border-radius:var(--dm-radius-md, 6px);text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=uppercase]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=uppercase]:hover{text-transform:uppercase!important;letter-spacing:.04em!important;background-color:transparent!important;text-decoration:none!important}:is(.dm-menu,.footer-nav) li>a:is([data-menu-item-hover=grow],[data-menu-item-hover=breathe]){display:inline-block}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=grow]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=grow]:hover{transform:scale(1.08)!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=breathe]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=breathe]:hover{animation:dm-menu-breathe 1.4s ease-in-out infinite!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=glow]:hover,#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover=glow]:hover{text-shadow:0 0 8px color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 70%,transparent)!important;background-color:transparent!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active]:is(.active,.is-active,[aria-current=page]){box-shadow:none!important;text-decoration:none!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=none]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=none]:is(.active,.is-active,[aria-current=page]){font-weight:inherit!important;background-color:transparent!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=bold]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=bold]:is(.active,.is-active,[aria-current=page]){font-weight:700!important;background-color:transparent!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=underline]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=underline]:is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:underline!important;text-decoration-thickness:2px;text-underline-offset:4px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=overline]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=overline]:is(.active,.is-active,[aria-current=page]){background-color:transparent!important;text-decoration:overline!important;text-decoration-thickness:2px;text-decoration-color:var(--dm-menu-highlight, currentColor)!important}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=background]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=background]:is(.active,.is-active,[aria-current=page]){background-color:color-mix(in srgb,var(--dm-menu-highlight, var(--dm-primary, #0d6efd)) 18%,transparent)!important;border-radius:var(--dm-radius-md, 6px)}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=darken]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=darken]:is(.active,.is-active,[aria-current=page]){background-color:#00000038!important;border-radius:var(--dm-radius-md, 6px)}:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=pill]:is(.active,.is-active,[aria-current=page]),#site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-active=pill]:is(.active,.is-active,[aria-current=page]){background-color:var(--dm-menu-highlight, var(--dm-primary, #0d6efd))!important;color:#fff!important;border-radius:999px!important;padding-inline:.9em}@media(prefers-reduced-motion:reduce){[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],:is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover{transition:none;animation:none!important;transform:none!important}}html.dm-reduced-motion [data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a),html.dm-reduced-motion [data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,html.dm-reduced-motion #site-navbar[data-menu-hover] :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a):hover,html.dm-reduced-motion :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover],html.dm-reduced-motion :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover,html.dm-reduced-motion #site-navbar :is(.navbar-link,.navbar-dropdown-item,.navbar-dropdown-toggle,.sidebar-link,li>a)[data-menu-item-hover]:hover{transition:none;animation:none!important;transform:none!important}[data-menu-entrance] li{--dm-menu-i: 0;animation-duration:var(--dm-menu-entrance-duration, .4s);animation-timing-function:cubic-bezier(.22,.61,.36,1);animation-fill-mode:backwards;animation-delay:calc(var(--dm-menu-i) * var(--dm-menu-entrance-step, 60ms))}[data-menu-entrance] li:nth-child(2){--dm-menu-i: 1}[data-menu-entrance] li:nth-child(3){--dm-menu-i: 2}[data-menu-entrance] li:nth-child(4){--dm-menu-i: 3}[data-menu-entrance] li:nth-child(5){--dm-menu-i: 4}[data-menu-entrance] li:nth-child(6){--dm-menu-i: 5}[data-menu-entrance] li:nth-child(7){--dm-menu-i: 6}[data-menu-entrance] li:nth-child(8){--dm-menu-i: 7}[data-menu-entrance] li:nth-child(9){--dm-menu-i: 8}[data-menu-entrance] li:nth-child(10){--dm-menu-i: 9}[data-menu-entrance] li:nth-child(11){--dm-menu-i: 10}[data-menu-entrance] li:nth-child(12){--dm-menu-i: 11}[data-menu-entrance] li:nth-child(13){--dm-menu-i: 12}[data-menu-entrance] li:nth-child(14){--dm-menu-i: 13}[data-menu-entrance] li:nth-child(15){--dm-menu-i: 14}[data-menu-entrance] li:nth-child(16){--dm-menu-i: 15}[data-menu-entrance] li:nth-child(17){--dm-menu-i: 16}[data-menu-entrance] li:nth-child(18){--dm-menu-i: 17}[data-menu-entrance] li:nth-child(19){--dm-menu-i: 18}[data-menu-entrance] li:nth-child(20){--dm-menu-i: 19}[data-menu-entrance] li:nth-child(n+21){--dm-menu-i: 20}[data-menu-entrance] li:is(:hover,:focus-within){z-index:2}.dm-menu-floating[data-menu-entrance],#site-navbar.dm-nav-vertical[data-menu-entrance],#site-navbar[data-menu-entrance] .navbar-collapse{overflow-x:hidden}[data-menu-entrance=fade] li{animation-name:dm-menu-in-fade}[data-menu-entrance=slide-up] li{animation-name:dm-menu-in-slide-up}[data-menu-entrance=slide-down] li{animation-name:dm-menu-in-slide-down}[data-menu-entrance=slide-left] li{animation-name:dm-menu-in-slide-left}[data-menu-entrance=slide-right] li{animation-name:dm-menu-in-slide-right}[data-menu-entrance=zoom] li{animation-name:dm-menu-in-zoom}[data-menu-entrance=pop] li{animation-name:dm-menu-in-pop}[data-menu-entrance=flip] li{animation-name:dm-menu-in-flip}[data-menu-entrance=blur] li{animation-name:dm-menu-in-blur}@keyframes dm-menu-in-fade{0%{opacity:0}}@keyframes dm-menu-in-slide-up{0%{opacity:0;transform:translateY(14px)}}@keyframes dm-menu-in-slide-down{0%{opacity:0;transform:translateY(-14px)}}@keyframes dm-menu-in-slide-left{0%{opacity:0;transform:translate(24px)}}@keyframes dm-menu-in-slide-right{0%{opacity:0;transform:translate(-24px)}}@keyframes dm-menu-in-zoom{0%{opacity:0;transform:scale(.6)}}@keyframes dm-menu-in-pop{0%{opacity:0;transform:scale(.5)}70%{opacity:1;transform:scale(1.08)}to{opacity:1;transform:scale(1)}}@keyframes dm-menu-in-flip{0%{opacity:0;transform:perspective(400px) rotateX(-80deg);transform-origin:top center}to{transform-origin:top center}}@keyframes dm-menu-in-blur{0%{opacity:0;filter:blur(6px)}}@media(prefers-reduced-motion:reduce){[data-menu-entrance] li{animation:none!important}}html.dm-reduced-motion [data-menu-entrance] li{animation:none!important}
|