@dataengineeringformachinelearning/viking-ui 4.0.5 → 4.1.0
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/README.md +5 -5
- package/dist/README.md +5 -5
- package/dist/design-tokens.css +1 -1
- package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +1178 -57
- package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
- package/dist/package.json +1 -1
- package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +120 -14
- package/dist/viking-components.css +30 -1
- package/dist/viking-ui-elements.js +634 -109
- package/dist/viking-ui.css +1 -1
- package/dist/web-components.js +964 -38
- package/dist/widget.js +2 -296
- package/package.json +1 -1
package/dist/web-components.js
CHANGED
|
@@ -699,14 +699,29 @@ var VIKING_BUTTON_STYLES = `
|
|
|
699
699
|
.viking-btn-label {
|
|
700
700
|
display: inline-flex;
|
|
701
701
|
align-items: center;
|
|
702
|
+
justify-content: center;
|
|
702
703
|
gap: var(--viking-space-1);
|
|
703
704
|
line-height: 1.2;
|
|
704
705
|
min-width: 0;
|
|
705
|
-
justify-content: center;
|
|
706
706
|
text-align: center;
|
|
707
707
|
white-space: nowrap;
|
|
708
708
|
}
|
|
709
709
|
|
|
710
|
+
.viking-btn-label ::slotted(*) {
|
|
711
|
+
display: inline-flex;
|
|
712
|
+
align-items: center;
|
|
713
|
+
justify-content: center;
|
|
714
|
+
flex: 0 0 auto;
|
|
715
|
+
line-height: 1;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
.viking-btn-label ::slotted([data-viking-icon]),
|
|
719
|
+
.viking-btn-label ::slotted(svg),
|
|
720
|
+
.viking-btn-label ::slotted(viking-icon) {
|
|
721
|
+
width: var(--viking-icon-size-md);
|
|
722
|
+
height: var(--viking-icon-size-md);
|
|
723
|
+
}
|
|
724
|
+
|
|
710
725
|
.viking-btn-spinner {
|
|
711
726
|
flex: 0 0 auto;
|
|
712
727
|
width: var(--viking-icon-size-sm, 18px);
|
|
@@ -1234,6 +1249,11 @@ var VIKING_MODAL_STYLES = `
|
|
|
1234
1249
|
display: contents;
|
|
1235
1250
|
}
|
|
1236
1251
|
|
|
1252
|
+
.viking-modal-backdrop:not([open]) {
|
|
1253
|
+
display: none !important;
|
|
1254
|
+
pointer-events: none;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1237
1257
|
.viking-modal-backdrop {
|
|
1238
1258
|
position: fixed;
|
|
1239
1259
|
inset: 0;
|
|
@@ -1687,8 +1707,9 @@ var VARIANTS = /* @__PURE__ */ new Set([
|
|
|
1687
1707
|
]);
|
|
1688
1708
|
var SIZES = /* @__PURE__ */ new Set(["sm", "xs"]);
|
|
1689
1709
|
var VikingButtonWc = class extends HTMLElementBase {
|
|
1690
|
-
|
|
1691
|
-
static
|
|
1710
|
+
/** Reserved for Angular `viking-button` — do not register as a custom element. */
|
|
1711
|
+
static angularTag = "viking-button";
|
|
1712
|
+
static tag = "viking-button-wc";
|
|
1692
1713
|
static get observedAttributes() {
|
|
1693
1714
|
return [
|
|
1694
1715
|
"variant",
|
|
@@ -1714,7 +1735,6 @@ var VikingButtonWc = class extends HTMLElementBase {
|
|
|
1714
1735
|
}
|
|
1715
1736
|
connectedCallback() {
|
|
1716
1737
|
this.render();
|
|
1717
|
-
this.syncHostSemantics();
|
|
1718
1738
|
this.control?.addEventListener("click", this.onClick);
|
|
1719
1739
|
}
|
|
1720
1740
|
disconnectedCallback() {
|
|
@@ -1723,7 +1743,6 @@ var VikingButtonWc = class extends HTMLElementBase {
|
|
|
1723
1743
|
attributeChangedCallback() {
|
|
1724
1744
|
if (this.isConnected) {
|
|
1725
1745
|
this.render();
|
|
1726
|
-
this.syncHostSemantics();
|
|
1727
1746
|
}
|
|
1728
1747
|
}
|
|
1729
1748
|
onClick = (event) => {
|
|
@@ -1757,11 +1776,6 @@ var VikingButtonWc = class extends HTMLElementBase {
|
|
|
1757
1776
|
get square() {
|
|
1758
1777
|
return readBoolAttr(this, "square");
|
|
1759
1778
|
}
|
|
1760
|
-
syncHostSemantics() {
|
|
1761
|
-
if (!this.hasAttribute("role")) {
|
|
1762
|
-
this.setAttribute("role", this.getAttribute("href") ? "link" : "button");
|
|
1763
|
-
}
|
|
1764
|
-
}
|
|
1765
1779
|
render() {
|
|
1766
1780
|
const href = this.getAttribute("href");
|
|
1767
1781
|
const isLink = Boolean(href);
|
|
@@ -1799,7 +1813,6 @@ var VikingButtonWc = class extends HTMLElementBase {
|
|
|
1799
1813
|
};
|
|
1800
1814
|
var registerVikingButtonWc = () => {
|
|
1801
1815
|
defineCustomElement(VikingButtonWc.tag, VikingButtonWc);
|
|
1802
|
-
defineCustomElementAlias(VikingButtonWc.legacyTag, VikingButtonWc);
|
|
1803
1816
|
};
|
|
1804
1817
|
|
|
1805
1818
|
// src/web/callout/viking-callout-wc.ts
|
|
@@ -2173,8 +2186,9 @@ var registerVikingInputWc = () => {
|
|
|
2173
2186
|
|
|
2174
2187
|
// src/web/modal/viking-modal-wc.ts
|
|
2175
2188
|
var VikingModalWc = class extends HTMLElementBase {
|
|
2176
|
-
|
|
2177
|
-
static
|
|
2189
|
+
/** Reserved for Angular `viking-modal` — do not register as a custom element. */
|
|
2190
|
+
static angularTag = "viking-modal";
|
|
2191
|
+
static tag = "viking-modal-wc";
|
|
2178
2192
|
static dialogTag = "viking-dialog";
|
|
2179
2193
|
static get observedAttributes() {
|
|
2180
2194
|
return ["open", "title", "dismissible"];
|
|
@@ -2299,7 +2313,6 @@ var VikingModalWc = class extends HTMLElementBase {
|
|
|
2299
2313
|
};
|
|
2300
2314
|
var registerVikingModalWc = () => {
|
|
2301
2315
|
defineCustomElement(VikingModalWc.tag, VikingModalWc);
|
|
2302
|
-
defineCustomElementAlias(VikingModalWc.legacyTag, VikingModalWc);
|
|
2303
2316
|
defineCustomElementAlias(VikingModalWc.dialogTag, VikingModalWc);
|
|
2304
2317
|
};
|
|
2305
2318
|
|
|
@@ -2687,6 +2700,530 @@ var registerVikingSearchPaletteWc = () => {
|
|
|
2687
2700
|
);
|
|
2688
2701
|
};
|
|
2689
2702
|
|
|
2703
|
+
// src/web/status-card/viking-status-card-wc.ts
|
|
2704
|
+
var TONES3 = /* @__PURE__ */ new Set([
|
|
2705
|
+
"accent",
|
|
2706
|
+
"secondary",
|
|
2707
|
+
"success",
|
|
2708
|
+
"warning",
|
|
2709
|
+
"danger",
|
|
2710
|
+
"info",
|
|
2711
|
+
"muted"
|
|
2712
|
+
]);
|
|
2713
|
+
var VikingStatusCardWc = class extends HTMLElementBase {
|
|
2714
|
+
static tag = "viking-status-card";
|
|
2715
|
+
static legacyTag = "viking-status-card-wc";
|
|
2716
|
+
static get observedAttributes() {
|
|
2717
|
+
return [
|
|
2718
|
+
"title",
|
|
2719
|
+
"subtitle",
|
|
2720
|
+
"status",
|
|
2721
|
+
"status-tone",
|
|
2722
|
+
"status-dot",
|
|
2723
|
+
"href",
|
|
2724
|
+
"target",
|
|
2725
|
+
"compact",
|
|
2726
|
+
"loading",
|
|
2727
|
+
"interactive",
|
|
2728
|
+
"aria-label"
|
|
2729
|
+
];
|
|
2730
|
+
}
|
|
2731
|
+
shadow = this.attachShadow({ mode: "open" });
|
|
2732
|
+
connectedCallback() {
|
|
2733
|
+
this.render();
|
|
2734
|
+
}
|
|
2735
|
+
attributeChangedCallback() {
|
|
2736
|
+
if (this.isConnected) {
|
|
2737
|
+
this.render();
|
|
2738
|
+
}
|
|
2739
|
+
}
|
|
2740
|
+
get compact() {
|
|
2741
|
+
const compact = this.getAttribute("compact");
|
|
2742
|
+
return compact !== null && compact !== "false";
|
|
2743
|
+
}
|
|
2744
|
+
get loading() {
|
|
2745
|
+
const loading = this.getAttribute("loading");
|
|
2746
|
+
return loading !== null && loading !== "false";
|
|
2747
|
+
}
|
|
2748
|
+
get interactive() {
|
|
2749
|
+
const interactive = this.getAttribute("interactive");
|
|
2750
|
+
return interactive !== null && interactive !== "false";
|
|
2751
|
+
}
|
|
2752
|
+
get href() {
|
|
2753
|
+
return this.getAttribute("href");
|
|
2754
|
+
}
|
|
2755
|
+
get target() {
|
|
2756
|
+
return this.getAttribute("target");
|
|
2757
|
+
}
|
|
2758
|
+
get statusTone() {
|
|
2759
|
+
const raw = this.getAttribute("status-tone") ?? "muted";
|
|
2760
|
+
return TONES3.has(raw) ? raw : "muted";
|
|
2761
|
+
}
|
|
2762
|
+
get statusDot() {
|
|
2763
|
+
const statusDot = this.getAttribute("status-dot");
|
|
2764
|
+
return statusDot !== null && statusDot !== "false";
|
|
2765
|
+
}
|
|
2766
|
+
get cardTitle() {
|
|
2767
|
+
return this.getAttribute("title") ?? "";
|
|
2768
|
+
}
|
|
2769
|
+
get subtitle() {
|
|
2770
|
+
return this.getAttribute("subtitle") ?? "";
|
|
2771
|
+
}
|
|
2772
|
+
get status() {
|
|
2773
|
+
return this.getAttribute("status") ?? "";
|
|
2774
|
+
}
|
|
2775
|
+
render() {
|
|
2776
|
+
const hasStatus = this.status.length > 0;
|
|
2777
|
+
const title = this.cardTitle;
|
|
2778
|
+
const subtitle = this.subtitle;
|
|
2779
|
+
const compactClass = this.compact ? " status-card--compact" : "";
|
|
2780
|
+
const loadingClass = this.loading ? " status-card--loading" : "";
|
|
2781
|
+
const interactiveClass = this.interactive ? " status-card--interactive" : "";
|
|
2782
|
+
const wrapperClass = `status-card${compactClass}${loadingClass}${interactiveClass}`;
|
|
2783
|
+
const rel = this.target === "_blank" ? ' rel="noopener noreferrer"' : "";
|
|
2784
|
+
const statusDot = this.statusDot ? '<span class="status-card__status-dot" aria-hidden="true"></span>' : "";
|
|
2785
|
+
const statusChip = hasStatus ? `<span class="status-card__status status-card__status-${this.statusTone}" part="status">${statusDot}<span>${escapeHtml(this.status)}</span></span>` : "";
|
|
2786
|
+
const safeHref = this.href ? escapeHtml(this.href) : "";
|
|
2787
|
+
const safeLabel = escapeHtml(this.getAttribute("aria-label") ?? "");
|
|
2788
|
+
const wrapperTag = safeHref ? "a" : "div";
|
|
2789
|
+
const header = `
|
|
2790
|
+
<header class="status-card__header">
|
|
2791
|
+
<div class="status-card__title-wrap">
|
|
2792
|
+
${title ? `<h3 class="status-card__title" part="title">${escapeHtml(title)}</h3>` : ""}
|
|
2793
|
+
${subtitle ? `<p class="status-card__subtitle" part="subtitle">${escapeHtml(subtitle)}</p>` : ""}
|
|
2794
|
+
</div>
|
|
2795
|
+
${hasStatus || statusDot ? `<div class="status-card__status-wrap">${statusChip}</div>` : ""}
|
|
2796
|
+
</header>
|
|
2797
|
+
`;
|
|
2798
|
+
this.shadow.innerHTML = `
|
|
2799
|
+
<style>
|
|
2800
|
+
${VIKING_STATUS_CARD_STYLES}
|
|
2801
|
+
</style>
|
|
2802
|
+
<${wrapperTag}
|
|
2803
|
+
class="${wrapperClass}"
|
|
2804
|
+
part="card"
|
|
2805
|
+
${safeHref ? `href="${safeHref}"` : ""}
|
|
2806
|
+
${this.target ? `target="${escapeHtml(this.target)}"` : ""}
|
|
2807
|
+
${safeHref ? rel : ""}
|
|
2808
|
+
${safeLabel ? `aria-label="${safeLabel}"` : ""}
|
|
2809
|
+
>
|
|
2810
|
+
${header}
|
|
2811
|
+
<section class="status-card__body">
|
|
2812
|
+
<slot></slot>
|
|
2813
|
+
</section>
|
|
2814
|
+
</${wrapperTag}>
|
|
2815
|
+
`;
|
|
2816
|
+
}
|
|
2817
|
+
};
|
|
2818
|
+
var VIKING_STATUS_CARD_STYLES = `
|
|
2819
|
+
:host {
|
|
2820
|
+
display: block;
|
|
2821
|
+
}
|
|
2822
|
+
|
|
2823
|
+
:host([compact]) .status-card,
|
|
2824
|
+
:host .status-card--compact {
|
|
2825
|
+
padding: var(--viking-card-padding-compact);
|
|
2826
|
+
gap: var(--viking-space-2);
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
.status-card {
|
|
2830
|
+
display: grid;
|
|
2831
|
+
gap: var(--viking-space-3);
|
|
2832
|
+
width: 100%;
|
|
2833
|
+
padding: var(--viking-card-padding);
|
|
2834
|
+
border-radius: var(--viking-radius-lg);
|
|
2835
|
+
border: 1px solid var(--viking-border);
|
|
2836
|
+
background: var(--viking-surface);
|
|
2837
|
+
color: var(--viking-text);
|
|
2838
|
+
box-shadow: var(--viking-shadow-sm);
|
|
2839
|
+
box-sizing: border-box;
|
|
2840
|
+
position: relative;
|
|
2841
|
+
transition: var(--viking-transition-interactive);
|
|
2842
|
+
text-decoration: none;
|
|
2843
|
+
overflow: hidden;
|
|
2844
|
+
}
|
|
2845
|
+
|
|
2846
|
+
.status-card::before {
|
|
2847
|
+
content: "";
|
|
2848
|
+
position: absolute;
|
|
2849
|
+
inset: 0 0 auto;
|
|
2850
|
+
height: 1px;
|
|
2851
|
+
background: linear-gradient(
|
|
2852
|
+
90deg,
|
|
2853
|
+
transparent,
|
|
2854
|
+
color-mix(in srgb, var(--viking-metallic-200) 24%, transparent),
|
|
2855
|
+
transparent
|
|
2856
|
+
);
|
|
2857
|
+
pointer-events: none;
|
|
2858
|
+
}
|
|
2859
|
+
|
|
2860
|
+
.status-card--interactive {
|
|
2861
|
+
cursor: pointer;
|
|
2862
|
+
}
|
|
2863
|
+
|
|
2864
|
+
.status-card--interactive:hover {
|
|
2865
|
+
border-color: var(--viking-accent-strong);
|
|
2866
|
+
box-shadow: var(--viking-shadow-hover);
|
|
2867
|
+
transform: translateY(var(--viking-state-hover-lift));
|
|
2868
|
+
}
|
|
2869
|
+
|
|
2870
|
+
.status-card--loading {
|
|
2871
|
+
pointer-events: none;
|
|
2872
|
+
opacity: var(--viking-state-disabled-opacity);
|
|
2873
|
+
}
|
|
2874
|
+
|
|
2875
|
+
.status-card__header {
|
|
2876
|
+
display: flex;
|
|
2877
|
+
justify-content: space-between;
|
|
2878
|
+
gap: var(--viking-space-3);
|
|
2879
|
+
align-items: flex-start;
|
|
2880
|
+
min-width: 0;
|
|
2881
|
+
}
|
|
2882
|
+
|
|
2883
|
+
.status-card__title-wrap {
|
|
2884
|
+
display: grid;
|
|
2885
|
+
gap: var(--viking-space-1);
|
|
2886
|
+
min-width: 0;
|
|
2887
|
+
}
|
|
2888
|
+
|
|
2889
|
+
.status-card__title {
|
|
2890
|
+
margin: 0;
|
|
2891
|
+
font-size: var(--viking-font-size-xl);
|
|
2892
|
+
font-weight: var(--viking-font-weight-bold);
|
|
2893
|
+
letter-spacing: var(--viking-letter-spacing-tight);
|
|
2894
|
+
line-height: var(--viking-line-height-tight);
|
|
2895
|
+
}
|
|
2896
|
+
|
|
2897
|
+
.status-card__subtitle {
|
|
2898
|
+
margin: 0;
|
|
2899
|
+
max-width: 60ch;
|
|
2900
|
+
color: var(--viking-text-muted);
|
|
2901
|
+
font-size: var(--viking-font-size-base);
|
|
2902
|
+
line-height: var(--viking-line-height-relaxed);
|
|
2903
|
+
}
|
|
2904
|
+
|
|
2905
|
+
.status-card__status-wrap {
|
|
2906
|
+
display: inline-flex;
|
|
2907
|
+
align-items: center;
|
|
2908
|
+
justify-content: flex-end;
|
|
2909
|
+
}
|
|
2910
|
+
|
|
2911
|
+
.status-card__status {
|
|
2912
|
+
display: inline-flex;
|
|
2913
|
+
align-items: center;
|
|
2914
|
+
gap: var(--viking-space-1);
|
|
2915
|
+
max-width: fit-content;
|
|
2916
|
+
padding: calc(var(--viking-space-half) - 1px) var(--viking-space-1);
|
|
2917
|
+
border-radius: var(--viking-radius-pill);
|
|
2918
|
+
border: 1px solid var(--viking-border-subtle);
|
|
2919
|
+
background: color-mix(in srgb, var(--viking-surface) 92%, transparent);
|
|
2920
|
+
color: var(--viking-text-muted);
|
|
2921
|
+
text-transform: capitalize;
|
|
2922
|
+
font-size: var(--viking-font-size-xs);
|
|
2923
|
+
font-weight: var(--viking-font-weight-semibold);
|
|
2924
|
+
letter-spacing: var(--viking-letter-spacing-wide);
|
|
2925
|
+
}
|
|
2926
|
+
|
|
2927
|
+
.status-card__status-dot {
|
|
2928
|
+
width: var(--viking-space-1);
|
|
2929
|
+
height: var(--viking-space-1);
|
|
2930
|
+
border-radius: var(--viking-radius-full);
|
|
2931
|
+
background: currentColor;
|
|
2932
|
+
flex: 0 0 auto;
|
|
2933
|
+
}
|
|
2934
|
+
|
|
2935
|
+
.status-card__status-success {
|
|
2936
|
+
background: color-mix(in srgb, var(--viking-success) 12%, var(--viking-surface));
|
|
2937
|
+
border-color: color-mix(in srgb, var(--viking-success) 40%, transparent);
|
|
2938
|
+
color: var(--viking-success);
|
|
2939
|
+
}
|
|
2940
|
+
|
|
2941
|
+
.status-card__status-warning {
|
|
2942
|
+
background: color-mix(in srgb, var(--viking-warning) 12%, var(--viking-surface));
|
|
2943
|
+
border-color: color-mix(in srgb, var(--viking-warning) 40%, transparent);
|
|
2944
|
+
color: var(--viking-warning);
|
|
2945
|
+
}
|
|
2946
|
+
|
|
2947
|
+
.status-card__status-danger {
|
|
2948
|
+
background: color-mix(in srgb, var(--viking-danger) 12%, var(--viking-surface));
|
|
2949
|
+
border-color: color-mix(in srgb, var(--viking-danger) 45%, transparent);
|
|
2950
|
+
color: var(--viking-danger-text);
|
|
2951
|
+
}
|
|
2952
|
+
|
|
2953
|
+
.status-card__status-accent {
|
|
2954
|
+
background: color-mix(in srgb, var(--viking-accent) 12%, var(--viking-surface));
|
|
2955
|
+
border-color: color-mix(in srgb, var(--viking-accent) 40%, transparent);
|
|
2956
|
+
color: var(--viking-accent);
|
|
2957
|
+
}
|
|
2958
|
+
|
|
2959
|
+
.status-card__status-secondary {
|
|
2960
|
+
background: color-mix(in srgb, var(--viking-accent-secondary) 12%, var(--viking-surface));
|
|
2961
|
+
border-color: color-mix(in srgb, var(--viking-accent-secondary) 40%, transparent);
|
|
2962
|
+
color: var(--viking-accent-secondary);
|
|
2963
|
+
}
|
|
2964
|
+
|
|
2965
|
+
.status-card__status-info {
|
|
2966
|
+
background: color-mix(in srgb, var(--viking-info) 12%, var(--viking-surface));
|
|
2967
|
+
border-color: color-mix(in srgb, var(--viking-info) 40%, transparent);
|
|
2968
|
+
color: var(--viking-info);
|
|
2969
|
+
}
|
|
2970
|
+
|
|
2971
|
+
.status-card__status-muted {
|
|
2972
|
+
background: var(--viking-surface);
|
|
2973
|
+
border-color: var(--viking-border-subtle);
|
|
2974
|
+
color: var(--viking-text-muted);
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
.status-card__body {
|
|
2978
|
+
display: grid;
|
|
2979
|
+
gap: var(--viking-space-3);
|
|
2980
|
+
min-width: 0;
|
|
2981
|
+
}
|
|
2982
|
+
`;
|
|
2983
|
+
var registerVikingStatusCardWc = () => {
|
|
2984
|
+
defineCustomElement(VikingStatusCardWc.tag, VikingStatusCardWc);
|
|
2985
|
+
defineCustomElementAlias(VikingStatusCardWc.legacyTag, VikingStatusCardWc);
|
|
2986
|
+
};
|
|
2987
|
+
|
|
2988
|
+
// src/web/status-pill/viking-status-pill-wc.ts
|
|
2989
|
+
var TONES4 = /* @__PURE__ */ new Set([
|
|
2990
|
+
"accent",
|
|
2991
|
+
"secondary",
|
|
2992
|
+
"success",
|
|
2993
|
+
"warning",
|
|
2994
|
+
"danger",
|
|
2995
|
+
"info",
|
|
2996
|
+
"muted"
|
|
2997
|
+
]);
|
|
2998
|
+
var VikingStatusPillWc = class extends HTMLElementBase {
|
|
2999
|
+
static tag = "viking-status-pill";
|
|
3000
|
+
static legacyTag = "viking-status-pill-wc";
|
|
3001
|
+
static get observedAttributes() {
|
|
3002
|
+
return ["tone", "icon", "href", "target", "compact", "dot", "removable", "aria-label"];
|
|
3003
|
+
}
|
|
3004
|
+
shadow;
|
|
3005
|
+
constructor() {
|
|
3006
|
+
super();
|
|
3007
|
+
this.shadow = this.attachShadow({ mode: "open" });
|
|
3008
|
+
attachShadowStyles(this.shadow, VIKING_STATUS_PILL_STYLES);
|
|
3009
|
+
}
|
|
3010
|
+
connectedCallback() {
|
|
3011
|
+
this.render();
|
|
3012
|
+
}
|
|
3013
|
+
attributeChangedCallback() {
|
|
3014
|
+
if (this.isConnected) {
|
|
3015
|
+
this.render();
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
get tone() {
|
|
3019
|
+
const raw = this.getAttribute("tone") ?? "muted";
|
|
3020
|
+
return TONES4.has(raw) ? raw : "muted";
|
|
3021
|
+
}
|
|
3022
|
+
get compact() {
|
|
3023
|
+
const compact = this.getAttribute("compact");
|
|
3024
|
+
return compact !== null && compact !== "false";
|
|
3025
|
+
}
|
|
3026
|
+
get removable() {
|
|
3027
|
+
const removable = this.getAttribute("removable");
|
|
3028
|
+
return removable !== null && removable !== "false";
|
|
3029
|
+
}
|
|
3030
|
+
get href() {
|
|
3031
|
+
return this.getAttribute("href");
|
|
3032
|
+
}
|
|
3033
|
+
get icon() {
|
|
3034
|
+
return this.getAttribute("icon");
|
|
3035
|
+
}
|
|
3036
|
+
get showDot() {
|
|
3037
|
+
const dot = this.getAttribute("dot");
|
|
3038
|
+
return dot !== null && dot !== "false";
|
|
3039
|
+
}
|
|
3040
|
+
onRemove = () => {
|
|
3041
|
+
this.dispatchEvent(
|
|
3042
|
+
new CustomEvent("viking-pill-removed", {
|
|
3043
|
+
bubbles: true,
|
|
3044
|
+
composed: true
|
|
3045
|
+
})
|
|
3046
|
+
);
|
|
3047
|
+
};
|
|
3048
|
+
render() {
|
|
3049
|
+
const tone = this.tone;
|
|
3050
|
+
const compact = this.compact ? " status-pill--compact" : "";
|
|
3051
|
+
const icon = this.icon ? renderInlineIcon(this.icon, 14, "status-pill__icon") : "";
|
|
3052
|
+
const dot = this.showDot ? `<span class="status-pill__dot" aria-hidden="true"></span>` : "";
|
|
3053
|
+
const label = `<span class="status-pill__label" part="label"><slot></slot></span>`;
|
|
3054
|
+
const ariaLabel = escapeHtml(this.getAttribute("aria-label") ?? "");
|
|
3055
|
+
const href = this.href;
|
|
3056
|
+
const target = this.getAttribute("target");
|
|
3057
|
+
const rel = href && target === "_blank" ? ' rel="noopener noreferrer"' : "";
|
|
3058
|
+
if (href) {
|
|
3059
|
+
this.shadow.innerHTML = `
|
|
3060
|
+
<a
|
|
3061
|
+
class="status-pill status-pill-${tone}${compact}"
|
|
3062
|
+
part="control"
|
|
3063
|
+
href="${escapeHtml(href)}"
|
|
3064
|
+
${target ? `target="${escapeHtml(target)}"${rel}` : ""}
|
|
3065
|
+
${ariaLabel ? `aria-label="${ariaLabel}"` : ""}
|
|
3066
|
+
>
|
|
3067
|
+
${dot}
|
|
3068
|
+
${icon}
|
|
3069
|
+
${label}
|
|
3070
|
+
</a>
|
|
3071
|
+
`;
|
|
3072
|
+
return;
|
|
3073
|
+
}
|
|
3074
|
+
this.shadow.innerHTML = `
|
|
3075
|
+
<span
|
|
3076
|
+
class="status-pill status-pill-${tone}${compact}"
|
|
3077
|
+
part="control"
|
|
3078
|
+
${ariaLabel ? `role="status" aria-label="${ariaLabel}"` : ""}
|
|
3079
|
+
>
|
|
3080
|
+
${dot}
|
|
3081
|
+
${icon}
|
|
3082
|
+
${label}
|
|
3083
|
+
${this.removable ? '<button type="button" class="status-pill__remove" part="remove" aria-label="Remove"><span class="status-pill__remove-icon" aria-hidden="true">×</span></button>' : ""}
|
|
3084
|
+
</span>
|
|
3085
|
+
`;
|
|
3086
|
+
this.shadow.querySelector(".status-pill__remove")?.addEventListener("click", this.onRemove);
|
|
3087
|
+
}
|
|
3088
|
+
};
|
|
3089
|
+
var VIKING_STATUS_PILL_STYLES = `
|
|
3090
|
+
:host {
|
|
3091
|
+
display: inline-flex;
|
|
3092
|
+
}
|
|
3093
|
+
|
|
3094
|
+
.status-pill {
|
|
3095
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-surface-alt) 88%, var(--viking-surface));
|
|
3096
|
+
--viking-status-pill-text: var(--viking-text-muted);
|
|
3097
|
+
--viking-status-pill-border: var(--viking-border-subtle);
|
|
3098
|
+
--viking-status-pill-shadow: var(--viking-shadow-xs);
|
|
3099
|
+
|
|
3100
|
+
display: inline-flex;
|
|
3101
|
+
align-items: center;
|
|
3102
|
+
gap: var(--viking-space-half);
|
|
3103
|
+
padding: var(--viking-space-half) var(--viking-space-2);
|
|
3104
|
+
border-radius: var(--viking-radius-pill);
|
|
3105
|
+
border: 1px solid var(--viking-status-pill-border);
|
|
3106
|
+
background: var(--viking-status-pill-bg);
|
|
3107
|
+
color: var(--viking-status-pill-text);
|
|
3108
|
+
font-family: var(--viking-font-family);
|
|
3109
|
+
font-size: var(--viking-font-size-xs);
|
|
3110
|
+
font-weight: var(--viking-font-weight-semibold);
|
|
3111
|
+
letter-spacing: var(--viking-letter-spacing-caps);
|
|
3112
|
+
line-height: var(--viking-line-height-snug);
|
|
3113
|
+
white-space: nowrap;
|
|
3114
|
+
text-transform: uppercase;
|
|
3115
|
+
box-shadow: var(--viking-status-pill-shadow);
|
|
3116
|
+
}
|
|
3117
|
+
|
|
3118
|
+
:host(:hover) .status-pill {
|
|
3119
|
+
text-decoration: none;
|
|
3120
|
+
}
|
|
3121
|
+
|
|
3122
|
+
.status-pill--compact {
|
|
3123
|
+
padding: var(--viking-space-half);
|
|
3124
|
+
font-size: var(--viking-font-size-2xs);
|
|
3125
|
+
}
|
|
3126
|
+
|
|
3127
|
+
.status-pill__label {
|
|
3128
|
+
display: inline-flex;
|
|
3129
|
+
align-items: center;
|
|
3130
|
+
}
|
|
3131
|
+
|
|
3132
|
+
.status-pill__dot {
|
|
3133
|
+
width: var(--viking-space-1);
|
|
3134
|
+
height: var(--viking-space-1);
|
|
3135
|
+
border-radius: var(--viking-radius-full);
|
|
3136
|
+
background: currentColor;
|
|
3137
|
+
flex: 0 0 auto;
|
|
3138
|
+
}
|
|
3139
|
+
|
|
3140
|
+
.status-pill__icon,
|
|
3141
|
+
::slotted([data-viking-icon]) {
|
|
3142
|
+
width: var(--viking-space-3);
|
|
3143
|
+
height: var(--viking-space-3);
|
|
3144
|
+
color: currentColor;
|
|
3145
|
+
flex-shrink: 0;
|
|
3146
|
+
}
|
|
3147
|
+
|
|
3148
|
+
.status-pill__remove {
|
|
3149
|
+
display: inline-flex;
|
|
3150
|
+
align-items: center;
|
|
3151
|
+
justify-content: center;
|
|
3152
|
+
border: 1px solid transparent;
|
|
3153
|
+
background: transparent;
|
|
3154
|
+
color: currentColor;
|
|
3155
|
+
border-radius: var(--viking-radius-full);
|
|
3156
|
+
width: var(--viking-touch-target-min);
|
|
3157
|
+
height: var(--viking-touch-target-min);
|
|
3158
|
+
margin-right: calc(var(--viking-space-half) * -1);
|
|
3159
|
+
padding: 0;
|
|
3160
|
+
cursor: pointer;
|
|
3161
|
+
}
|
|
3162
|
+
|
|
3163
|
+
.status-pill__remove:hover {
|
|
3164
|
+
background: color-mix(in srgb, currentColor 10%, transparent);
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3167
|
+
.status-pill__remove:focus-visible {
|
|
3168
|
+
outline: var(--viking-ring-width) solid var(--viking-ring);
|
|
3169
|
+
outline-offset: var(--viking-ring-offset);
|
|
3170
|
+
}
|
|
3171
|
+
|
|
3172
|
+
.status-pill-accent {
|
|
3173
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-accent) 18%, var(--viking-surface));
|
|
3174
|
+
--viking-status-pill-text: var(--viking-accent);
|
|
3175
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-accent) 52%, transparent);
|
|
3176
|
+
}
|
|
3177
|
+
|
|
3178
|
+
.status-pill-secondary {
|
|
3179
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-accent-secondary) 16%, var(--viking-surface));
|
|
3180
|
+
--viking-status-pill-text: var(--viking-accent-secondary);
|
|
3181
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-accent-secondary) 52%, transparent);
|
|
3182
|
+
}
|
|
3183
|
+
|
|
3184
|
+
.status-pill-success {
|
|
3185
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-success) 16%, var(--viking-surface));
|
|
3186
|
+
--viking-status-pill-text: var(--viking-success);
|
|
3187
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-success) 55%, transparent);
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3190
|
+
.status-pill-warning {
|
|
3191
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-warning) 16%, var(--viking-surface));
|
|
3192
|
+
--viking-status-pill-text: var(--viking-warning);
|
|
3193
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-warning) 55%, transparent);
|
|
3194
|
+
}
|
|
3195
|
+
|
|
3196
|
+
.status-pill-danger {
|
|
3197
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-danger) 14%, var(--viking-surface));
|
|
3198
|
+
--viking-status-pill-text: var(--viking-danger-text);
|
|
3199
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-danger) 50%, transparent);
|
|
3200
|
+
}
|
|
3201
|
+
|
|
3202
|
+
.status-pill-info {
|
|
3203
|
+
--viking-status-pill-bg: color-mix(in srgb, var(--viking-info) 14%, var(--viking-surface));
|
|
3204
|
+
--viking-status-pill-text: var(--viking-info);
|
|
3205
|
+
--viking-status-pill-border: color-mix(in srgb, var(--viking-info) 50%, transparent);
|
|
3206
|
+
}
|
|
3207
|
+
|
|
3208
|
+
.status-pill-muted {
|
|
3209
|
+
--viking-status-pill-bg: var(--viking-surface);
|
|
3210
|
+
--viking-status-pill-text: var(--viking-text-muted);
|
|
3211
|
+
--viking-status-pill-border: var(--viking-border-subtle);
|
|
3212
|
+
}
|
|
3213
|
+
|
|
3214
|
+
.status-pill a {
|
|
3215
|
+
color: inherit;
|
|
3216
|
+
}
|
|
3217
|
+
|
|
3218
|
+
a.status-pill {
|
|
3219
|
+
text-decoration: none;
|
|
3220
|
+
}
|
|
3221
|
+
`;
|
|
3222
|
+
var registerVikingStatusPillWc = () => {
|
|
3223
|
+
defineCustomElement(VikingStatusPillWc.tag, VikingStatusPillWc);
|
|
3224
|
+
defineCustomElementAlias(VikingStatusPillWc.legacyTag, VikingStatusPillWc);
|
|
3225
|
+
};
|
|
3226
|
+
|
|
2690
3227
|
// src/lib/site-drakkar/site-drakkar.config.ts
|
|
2691
3228
|
var SITE_NAV_LINKS = [
|
|
2692
3229
|
{
|
|
@@ -2902,6 +3439,376 @@ var DEFAULT_SITE_URLS = {
|
|
|
2902
3439
|
backend: "https://backend.deml.app"
|
|
2903
3440
|
};
|
|
2904
3441
|
|
|
3442
|
+
// src/web/site-footer/viking-site-footer-wc.ts
|
|
3443
|
+
var VALID_CONTEXTS = /* @__PURE__ */ new Set([
|
|
3444
|
+
"app",
|
|
3445
|
+
"marketing",
|
|
3446
|
+
"backend",
|
|
3447
|
+
"docs"
|
|
3448
|
+
]);
|
|
3449
|
+
var detectContext = () => {
|
|
3450
|
+
const explicit = document.documentElement.getAttribute("data-deml-context");
|
|
3451
|
+
if (explicit && VALID_CONTEXTS.has(explicit)) {
|
|
3452
|
+
return explicit;
|
|
3453
|
+
}
|
|
3454
|
+
const host = window.location.hostname;
|
|
3455
|
+
if (host.startsWith("backend.")) {
|
|
3456
|
+
return "backend";
|
|
3457
|
+
}
|
|
3458
|
+
if (host.includes("deml.app")) {
|
|
3459
|
+
return "app";
|
|
3460
|
+
}
|
|
3461
|
+
return "marketing";
|
|
3462
|
+
};
|
|
3463
|
+
var readContext = (el) => {
|
|
3464
|
+
const attr = el.getAttribute("context");
|
|
3465
|
+
if (attr && VALID_CONTEXTS.has(attr)) {
|
|
3466
|
+
return attr;
|
|
3467
|
+
}
|
|
3468
|
+
return detectContext();
|
|
3469
|
+
};
|
|
3470
|
+
var readUrls = (el) => {
|
|
3471
|
+
const env = globalThis.__DEML ?? {};
|
|
3472
|
+
return {
|
|
3473
|
+
app: el.getAttribute("app-url") ?? env.app ?? DEFAULT_SITE_URLS.app,
|
|
3474
|
+
marketing: el.getAttribute("marketing-url") ?? env.marketing ?? DEFAULT_SITE_URLS.marketing,
|
|
3475
|
+
backend: el.getAttribute("backend-url") ?? env.backend ?? DEFAULT_SITE_URLS.backend
|
|
3476
|
+
};
|
|
3477
|
+
};
|
|
3478
|
+
var readYear = (el) => {
|
|
3479
|
+
const raw = el.getAttribute("year");
|
|
3480
|
+
const value = raw ? Number(raw) : (/* @__PURE__ */ new Date()).getFullYear();
|
|
3481
|
+
return Number.isFinite(value) ? value : (/* @__PURE__ */ new Date()).getFullYear();
|
|
3482
|
+
};
|
|
3483
|
+
var renderFooterLinks = (context, urls) => {
|
|
3484
|
+
return SITE_FOOTER_COLUMNS.map((column) => {
|
|
3485
|
+
const links = column.links.map((link) => {
|
|
3486
|
+
const href = resolveFooterHref(link, context, urls);
|
|
3487
|
+
return `
|
|
3488
|
+
<li>
|
|
3489
|
+
<a href="${escapeHtml(href)}">${escapeHtml(link.label)}</a>
|
|
3490
|
+
</li>
|
|
3491
|
+
`;
|
|
3492
|
+
}).join("");
|
|
3493
|
+
return `
|
|
3494
|
+
<div class="footer-column">
|
|
3495
|
+
<h3 class="footer-column-title">${escapeHtml(column.title)}</h3>
|
|
3496
|
+
<ul class="footer-list">
|
|
3497
|
+
${links}
|
|
3498
|
+
</ul>
|
|
3499
|
+
</div>
|
|
3500
|
+
`;
|
|
3501
|
+
}).join("");
|
|
3502
|
+
};
|
|
3503
|
+
var VikingSiteFooterWc = class extends HTMLElement {
|
|
3504
|
+
static tag = "viking-site-footer";
|
|
3505
|
+
static legacyTag = "viking-site-footer-wc";
|
|
3506
|
+
static get observedAttributes() {
|
|
3507
|
+
return ["context", "app-url", "marketing-url", "backend-url", "year"];
|
|
3508
|
+
}
|
|
3509
|
+
connectedCallback() {
|
|
3510
|
+
this.render();
|
|
3511
|
+
}
|
|
3512
|
+
attributeChangedCallback() {
|
|
3513
|
+
if (this.isConnected) {
|
|
3514
|
+
this.render();
|
|
3515
|
+
}
|
|
3516
|
+
}
|
|
3517
|
+
render() {
|
|
3518
|
+
const context = readContext(this);
|
|
3519
|
+
const urls = readUrls(this);
|
|
3520
|
+
const year = readYear(this);
|
|
3521
|
+
const links = renderFooterLinks(context, urls);
|
|
3522
|
+
this.innerHTML = `
|
|
3523
|
+
<footer class="mega-footer">
|
|
3524
|
+
<div class="footer-content">
|
|
3525
|
+
<nav class="footer-directory" aria-label="Footer Directory">
|
|
3526
|
+
${links}
|
|
3527
|
+
</nav>
|
|
3528
|
+
|
|
3529
|
+
<section class="footer-bottom">
|
|
3530
|
+
<div class="footer-badges-top">
|
|
3531
|
+
<span
|
|
3532
|
+
class="usa-badge"
|
|
3533
|
+
id="usa-badge"
|
|
3534
|
+
role="button"
|
|
3535
|
+
tabindex="0"
|
|
3536
|
+
aria-label="Made in the U.S.A."
|
|
3537
|
+
>
|
|
3538
|
+
<span class="usa-badge-icon" aria-hidden="true">\u{1F1FA}\u{1F1F8}</span>
|
|
3539
|
+
<span>Made in the U.S.A</span>
|
|
3540
|
+
</span>
|
|
3541
|
+
</div>
|
|
3542
|
+
|
|
3543
|
+
<div class="footer-compliance-row">
|
|
3544
|
+
<div class="copyright-info">
|
|
3545
|
+
<span class="copyright-text">
|
|
3546
|
+
Copyright \xA9 ${year} Data Engineering for Machine Learning by
|
|
3547
|
+
<a href="https://joealongi.dev/" target="_blank" rel="noopener noreferrer">Joe Alongi</a>.
|
|
3548
|
+
All rights reserved.
|
|
3549
|
+
</span>
|
|
3550
|
+
</div>
|
|
3551
|
+
</div>
|
|
3552
|
+
</section>
|
|
3553
|
+
</div>
|
|
3554
|
+
</footer>
|
|
3555
|
+
`;
|
|
3556
|
+
}
|
|
3557
|
+
};
|
|
3558
|
+
var registerVikingSiteFooterWc = () => {
|
|
3559
|
+
defineCustomElement(VikingSiteFooterWc.tag, VikingSiteFooterWc);
|
|
3560
|
+
defineCustomElementAlias(VikingSiteFooterWc.legacyTag, VikingSiteFooterWc);
|
|
3561
|
+
};
|
|
3562
|
+
|
|
3563
|
+
// src/web/site-navbar/viking-site-navbar-wc.ts
|
|
3564
|
+
var VALID_CONTEXTS2 = /* @__PURE__ */ new Set([
|
|
3565
|
+
"app",
|
|
3566
|
+
"marketing",
|
|
3567
|
+
"backend",
|
|
3568
|
+
"docs"
|
|
3569
|
+
]);
|
|
3570
|
+
var detectContext2 = () => {
|
|
3571
|
+
const explicit = document.documentElement.getAttribute("data-deml-context");
|
|
3572
|
+
if (explicit && VALID_CONTEXTS2.has(explicit)) {
|
|
3573
|
+
return explicit;
|
|
3574
|
+
}
|
|
3575
|
+
const host = window.location.hostname;
|
|
3576
|
+
if (host.startsWith("ui.")) {
|
|
3577
|
+
return "docs";
|
|
3578
|
+
}
|
|
3579
|
+
if (host.startsWith("backend.")) {
|
|
3580
|
+
return "backend";
|
|
3581
|
+
}
|
|
3582
|
+
if (host.includes("deml.app")) {
|
|
3583
|
+
return "app";
|
|
3584
|
+
}
|
|
3585
|
+
return "marketing";
|
|
3586
|
+
};
|
|
3587
|
+
var readContext2 = (el) => {
|
|
3588
|
+
const attr = el.getAttribute("context");
|
|
3589
|
+
if (attr && VALID_CONTEXTS2.has(attr)) {
|
|
3590
|
+
return attr;
|
|
3591
|
+
}
|
|
3592
|
+
return detectContext2();
|
|
3593
|
+
};
|
|
3594
|
+
var readBoolAttr2 = (el, name) => {
|
|
3595
|
+
const value = el.getAttribute(name);
|
|
3596
|
+
return value !== null && value !== "false";
|
|
3597
|
+
};
|
|
3598
|
+
var readUrls2 = (el) => {
|
|
3599
|
+
const env = globalThis.__DEML ?? {};
|
|
3600
|
+
return {
|
|
3601
|
+
app: el.getAttribute("app-url") ?? env.app ?? DEFAULT_SITE_URLS.app,
|
|
3602
|
+
marketing: el.getAttribute("marketing-url") ?? env.marketing ?? DEFAULT_SITE_URLS.marketing,
|
|
3603
|
+
backend: el.getAttribute("backend-url") ?? env.backend ?? DEFAULT_SITE_URLS.backend
|
|
3604
|
+
};
|
|
3605
|
+
};
|
|
3606
|
+
var readAuthState = (el) => readBoolAttr2(el, "authenticated");
|
|
3607
|
+
var readShowSearch = (el) => {
|
|
3608
|
+
const explicit = el.getAttribute("show-search");
|
|
3609
|
+
if (explicit === null) {
|
|
3610
|
+
return true;
|
|
3611
|
+
}
|
|
3612
|
+
return readBoolAttr2(el, "show-search");
|
|
3613
|
+
};
|
|
3614
|
+
var readSignInHref = (el, urls) => {
|
|
3615
|
+
const explicit = el.getAttribute("sign-in-href");
|
|
3616
|
+
if (explicit) {
|
|
3617
|
+
return explicit;
|
|
3618
|
+
}
|
|
3619
|
+
const landing = el.getAttribute("return-url") ?? window.location.href;
|
|
3620
|
+
return `${urls.app}/login?returnUrl=${encodeURIComponent(landing)}`;
|
|
3621
|
+
};
|
|
3622
|
+
var VikingSiteNavbarWc = class extends HTMLElement {
|
|
3623
|
+
static tag = "viking-site-navbar";
|
|
3624
|
+
static legacyTag = "viking-site-navbar-wc";
|
|
3625
|
+
static get observedAttributes() {
|
|
3626
|
+
return [
|
|
3627
|
+
"context",
|
|
3628
|
+
"app-url",
|
|
3629
|
+
"marketing-url",
|
|
3630
|
+
"backend-url",
|
|
3631
|
+
"authenticated",
|
|
3632
|
+
"show-search",
|
|
3633
|
+
"sign-in-href",
|
|
3634
|
+
"dashboard-href",
|
|
3635
|
+
"return-url"
|
|
3636
|
+
];
|
|
3637
|
+
}
|
|
3638
|
+
connectedCallback() {
|
|
3639
|
+
this.render();
|
|
3640
|
+
}
|
|
3641
|
+
attributeChangedCallback() {
|
|
3642
|
+
if (this.isConnected) {
|
|
3643
|
+
this.render();
|
|
3644
|
+
}
|
|
3645
|
+
}
|
|
3646
|
+
renderNavLinks(context, urls, kind = "desktop") {
|
|
3647
|
+
const linkClass = kind === "mobile" ? "mobile-nav-btn" : "nav-btn";
|
|
3648
|
+
return SITE_NAV_LINKS.map((link) => {
|
|
3649
|
+
const href = resolveNavHref(link, context, urls);
|
|
3650
|
+
const isProtected = link.requireAuth;
|
|
3651
|
+
const hidden = isProtected ? " hidden" : "";
|
|
3652
|
+
const authAttr = isProtected ? ' data-require-auth="true"' : "";
|
|
3653
|
+
return `
|
|
3654
|
+
<a
|
|
3655
|
+
href="${escapeHtml(href)}"
|
|
3656
|
+
class="${linkClass}"
|
|
3657
|
+
data-nav-id="${escapeHtml(link.id)}"
|
|
3658
|
+
${authAttr}
|
|
3659
|
+
${hidden}
|
|
3660
|
+
>
|
|
3661
|
+
<span data-viking-icon="${escapeHtml(link.icon)}" data-viking-icon-size="16" aria-hidden="true"></span>
|
|
3662
|
+
<span>${escapeHtml(link.label)}</span>
|
|
3663
|
+
</a>
|
|
3664
|
+
`;
|
|
3665
|
+
}).join("");
|
|
3666
|
+
}
|
|
3667
|
+
renderAuthDesktop(authenticated, signInHref, dashboardHref) {
|
|
3668
|
+
const href = authenticated ? dashboardHref : signInHref;
|
|
3669
|
+
return `
|
|
3670
|
+
<div class="desktop-auth">
|
|
3671
|
+
<viking-button-wc
|
|
3672
|
+
variant="primary"
|
|
3673
|
+
class="auth-btn"
|
|
3674
|
+
href="${escapeHtml(href)}"
|
|
3675
|
+
id="auth-btn-desktop"
|
|
3676
|
+
>
|
|
3677
|
+
<span
|
|
3678
|
+
id="auth-icon-desktop"
|
|
3679
|
+
data-viking-icon="${authenticated ? "home" : "arrow-right"}"
|
|
3680
|
+
data-viking-icon-size="16"
|
|
3681
|
+
aria-hidden="true"
|
|
3682
|
+
></span>
|
|
3683
|
+
<span id="auth-text-desktop">${authenticated ? "Dashboard" : "Sign In"}</span>
|
|
3684
|
+
</viking-button-wc>
|
|
3685
|
+
<viking-button-wc
|
|
3686
|
+
variant="ghost"
|
|
3687
|
+
class="auth-btn auth-signout-btn"
|
|
3688
|
+
id="auth-signout-desktop"
|
|
3689
|
+
${authenticated ? "" : " hidden"}
|
|
3690
|
+
>
|
|
3691
|
+
Sign Out
|
|
3692
|
+
</viking-button-wc>
|
|
3693
|
+
</div>
|
|
3694
|
+
`;
|
|
3695
|
+
}
|
|
3696
|
+
renderAuthMobile(authenticated, dashboardHref, signInHref) {
|
|
3697
|
+
return `
|
|
3698
|
+
<div class="mobile-divider"></div>
|
|
3699
|
+
<viking-button-wc
|
|
3700
|
+
variant="primary"
|
|
3701
|
+
full-width
|
|
3702
|
+
class="mobile-auth-btn auth-btn"
|
|
3703
|
+
href="${escapeHtml(authenticated ? dashboardHref : signInHref)}"
|
|
3704
|
+
id="auth-btn-mobile"
|
|
3705
|
+
>
|
|
3706
|
+
<span
|
|
3707
|
+
id="auth-icon-mobile"
|
|
3708
|
+
data-viking-icon="${authenticated ? "home" : "arrow-right"}"
|
|
3709
|
+
data-viking-icon-size="16"
|
|
3710
|
+
aria-hidden="true"
|
|
3711
|
+
></span>
|
|
3712
|
+
<span id="auth-text-mobile">${authenticated ? "Dashboard" : "Sign In"}</span>
|
|
3713
|
+
</viking-button-wc>
|
|
3714
|
+
<viking-button-wc
|
|
3715
|
+
variant="ghost"
|
|
3716
|
+
full-width
|
|
3717
|
+
class="mobile-auth-btn auth-btn auth-signout-btn"
|
|
3718
|
+
id="auth-signout-mobile"
|
|
3719
|
+
${authenticated ? "" : " hidden"}
|
|
3720
|
+
>
|
|
3721
|
+
Sign Out
|
|
3722
|
+
</viking-button-wc>
|
|
3723
|
+
`;
|
|
3724
|
+
}
|
|
3725
|
+
renderSearchButton(showSearch) {
|
|
3726
|
+
if (!showSearch) {
|
|
3727
|
+
return "";
|
|
3728
|
+
}
|
|
3729
|
+
const shortcut = navigator.platform.match(/Mac|iPhone|iPad/i) ? "\u2318K" : "Ctrl+K";
|
|
3730
|
+
return `
|
|
3731
|
+
<div class="navbar-search" role="search">
|
|
3732
|
+
<viking-button-wc
|
|
3733
|
+
variant="outline"
|
|
3734
|
+
square
|
|
3735
|
+
compact
|
|
3736
|
+
class="navbar-search-trigger"
|
|
3737
|
+
aria-label="Open search (${shortcut})"
|
|
3738
|
+
id="navbar-search-trigger"
|
|
3739
|
+
>
|
|
3740
|
+
<span data-viking-icon="search" data-viking-icon-size="20" aria-hidden="true"></span>
|
|
3741
|
+
</viking-button-wc>
|
|
3742
|
+
</div>
|
|
3743
|
+
`;
|
|
3744
|
+
}
|
|
3745
|
+
render() {
|
|
3746
|
+
const context = readContext2(this);
|
|
3747
|
+
const urls = readUrls2(this);
|
|
3748
|
+
const authenticated = readAuthState(this);
|
|
3749
|
+
const showSearch = readShowSearch(this);
|
|
3750
|
+
const brandHref = resolveBrandHref(context, urls);
|
|
3751
|
+
const signInHref = readSignInHref(this, urls);
|
|
3752
|
+
const dashboardHref = this.getAttribute("dashboard-href") ?? `${urls.app}/dashboard`;
|
|
3753
|
+
const desktopNavLinks = this.renderNavLinks(context, urls, "desktop");
|
|
3754
|
+
const mobileNavLinks = this.renderNavLinks(context, urls, "mobile");
|
|
3755
|
+
const desktopAuth = this.renderAuthDesktop(
|
|
3756
|
+
authenticated,
|
|
3757
|
+
signInHref,
|
|
3758
|
+
dashboardHref
|
|
3759
|
+
);
|
|
3760
|
+
const mobileAuth = this.renderAuthMobile(authenticated, dashboardHref, signInHref);
|
|
3761
|
+
const search = this.renderSearchButton(showSearch);
|
|
3762
|
+
this.innerHTML = `
|
|
3763
|
+
<header class="navbar">
|
|
3764
|
+
<div class="navbar-content">
|
|
3765
|
+
<div class="navbar-left">
|
|
3766
|
+
<a href="${escapeHtml(brandHref)}" class="navbar-brand" aria-label="Go to homepage" id="navbar-brand-link">
|
|
3767
|
+
<span
|
|
3768
|
+
class="brand-icon navbar-logo"
|
|
3769
|
+
data-viking-icon="drakkar"
|
|
3770
|
+
data-viking-icon-color="accent"
|
|
3771
|
+
data-viking-icon-size="28"
|
|
3772
|
+
aria-hidden="true"
|
|
3773
|
+
></span>
|
|
3774
|
+
</a>
|
|
3775
|
+
</div>
|
|
3776
|
+
|
|
3777
|
+
<nav class="navbar-center desktop-nav" aria-label="Main navigation">
|
|
3778
|
+
${desktopNavLinks}
|
|
3779
|
+
</nav>
|
|
3780
|
+
|
|
3781
|
+
<div class="navbar-right">
|
|
3782
|
+
${search}
|
|
3783
|
+
${desktopAuth}
|
|
3784
|
+
<viking-theme-toggle-wc class="theme-toggle-btn" aria-label="Toggle light and dark theme"></viking-theme-toggle-wc>
|
|
3785
|
+
<viking-button-wc
|
|
3786
|
+
variant="outline"
|
|
3787
|
+
square
|
|
3788
|
+
class="menu-toggle-btn"
|
|
3789
|
+
aria-label="Toggle navigation menu"
|
|
3790
|
+
aria-controls="mobile-menu"
|
|
3791
|
+
aria-expanded="false"
|
|
3792
|
+
id="mobile-menu-btn"
|
|
3793
|
+
>
|
|
3794
|
+
<span data-viking-icon="menu" data-viking-icon-size="24" aria-hidden="true"></span>
|
|
3795
|
+
</viking-button-wc>
|
|
3796
|
+
</div>
|
|
3797
|
+
</div>
|
|
3798
|
+
|
|
3799
|
+
<nav class="mobile-menu" id="mobile-menu" aria-label="Mobile navigation" hidden>
|
|
3800
|
+
${mobileNavLinks}
|
|
3801
|
+
${mobileAuth}
|
|
3802
|
+
</nav>
|
|
3803
|
+
</header>
|
|
3804
|
+
`;
|
|
3805
|
+
}
|
|
3806
|
+
};
|
|
3807
|
+
var registerVikingSiteNavbarWc = () => {
|
|
3808
|
+
defineCustomElement(VikingSiteNavbarWc.tag, VikingSiteNavbarWc);
|
|
3809
|
+
defineCustomElementAlias(VikingSiteNavbarWc.legacyTag, VikingSiteNavbarWc);
|
|
3810
|
+
};
|
|
3811
|
+
|
|
2905
3812
|
// src/lib/site-drakkar/suite-search-items.ts
|
|
2906
3813
|
var dedupeItems = (items) => {
|
|
2907
3814
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -3086,15 +3993,15 @@ var buildSuiteSearchItems = (context, urls, options) => {
|
|
|
3086
3993
|
};
|
|
3087
3994
|
|
|
3088
3995
|
// src/web/suite-search-palette/viking-suite-search-palette-wc.ts
|
|
3089
|
-
var
|
|
3996
|
+
var VALID_CONTEXTS3 = /* @__PURE__ */ new Set([
|
|
3090
3997
|
"app",
|
|
3091
3998
|
"marketing",
|
|
3092
3999
|
"backend",
|
|
3093
4000
|
"docs"
|
|
3094
4001
|
]);
|
|
3095
|
-
var
|
|
4002
|
+
var detectContext3 = () => {
|
|
3096
4003
|
const explicit = document.documentElement.getAttribute("data-deml-context");
|
|
3097
|
-
if (explicit &&
|
|
4004
|
+
if (explicit && VALID_CONTEXTS3.has(explicit)) {
|
|
3098
4005
|
return explicit;
|
|
3099
4006
|
}
|
|
3100
4007
|
const host = window.location.hostname;
|
|
@@ -3109,7 +4016,7 @@ var detectContext = () => {
|
|
|
3109
4016
|
}
|
|
3110
4017
|
return "marketing";
|
|
3111
4018
|
};
|
|
3112
|
-
var
|
|
4019
|
+
var readUrls3 = (el) => {
|
|
3113
4020
|
const env = globalThis.__DEML ?? {};
|
|
3114
4021
|
return {
|
|
3115
4022
|
app: el.getAttribute("app-url") ?? env.app ?? DEFAULT_SITE_URLS.app,
|
|
@@ -3117,12 +4024,12 @@ var readUrls = (el) => {
|
|
|
3117
4024
|
backend: el.getAttribute("backend-url") ?? env.backend ?? DEFAULT_SITE_URLS.backend
|
|
3118
4025
|
};
|
|
3119
4026
|
};
|
|
3120
|
-
var
|
|
4027
|
+
var readContext3 = (el) => {
|
|
3121
4028
|
const raw = el.getAttribute("context");
|
|
3122
|
-
if (raw &&
|
|
4029
|
+
if (raw && VALID_CONTEXTS3.has(raw)) {
|
|
3123
4030
|
return raw;
|
|
3124
4031
|
}
|
|
3125
|
-
return
|
|
4032
|
+
return detectContext3();
|
|
3126
4033
|
};
|
|
3127
4034
|
var VikingSuiteSearchPaletteWc = class extends HTMLElementBase {
|
|
3128
4035
|
static tag = "viking-suite-command-palette";
|
|
@@ -3194,8 +4101,8 @@ var VikingSuiteSearchPaletteWc = class extends HTMLElementBase {
|
|
|
3194
4101
|
if (!this.paletteEl || this.itemsLoaded && !force) {
|
|
3195
4102
|
return;
|
|
3196
4103
|
}
|
|
3197
|
-
const context =
|
|
3198
|
-
const urls =
|
|
4104
|
+
const context = readContext3(this);
|
|
4105
|
+
const urls = readUrls3(this);
|
|
3199
4106
|
let items = buildSuiteSearchItems(
|
|
3200
4107
|
context,
|
|
3201
4108
|
urls,
|
|
@@ -3301,22 +4208,29 @@ var VikingThemeToggleWc = class extends HTMLElementBase {
|
|
|
3301
4208
|
button = null;
|
|
3302
4209
|
sunIcon = null;
|
|
3303
4210
|
moonIcon = null;
|
|
4211
|
+
onStorage = () => {
|
|
4212
|
+
this.syncIcons();
|
|
4213
|
+
};
|
|
3304
4214
|
constructor() {
|
|
3305
4215
|
super();
|
|
3306
4216
|
this.shadow = this.attachShadow({ mode: "open" });
|
|
3307
4217
|
attachShadowStyles(this.shadow, VIKING_THEME_TOGGLE_STYLES);
|
|
3308
4218
|
}
|
|
3309
4219
|
connectedCallback() {
|
|
3310
|
-
if (!this.hasAttribute("role")) {
|
|
3311
|
-
this.setAttribute("role", "button");
|
|
3312
|
-
}
|
|
3313
4220
|
this.render();
|
|
3314
4221
|
this.syncIcons();
|
|
3315
4222
|
this.button?.addEventListener("click", this.onClick);
|
|
4223
|
+
window.addEventListener("storage", this.onStorage);
|
|
4224
|
+
window.addEventListener("viking-theme-change", this.onThemeChange);
|
|
3316
4225
|
}
|
|
3317
4226
|
disconnectedCallback() {
|
|
3318
4227
|
this.button?.removeEventListener("click", this.onClick);
|
|
4228
|
+
window.removeEventListener("storage", this.onStorage);
|
|
4229
|
+
window.removeEventListener("viking-theme-change", this.onThemeChange);
|
|
3319
4230
|
}
|
|
4231
|
+
onThemeChange = () => {
|
|
4232
|
+
this.syncIcons();
|
|
4233
|
+
};
|
|
3320
4234
|
onClick = () => {
|
|
3321
4235
|
const next = readTheme() === "light" ? "dark" : "light";
|
|
3322
4236
|
applyTheme(next);
|
|
@@ -3330,9 +4244,9 @@ var VikingThemeToggleWc = class extends HTMLElementBase {
|
|
|
3330
4244
|
);
|
|
3331
4245
|
};
|
|
3332
4246
|
syncIcons = () => {
|
|
3333
|
-
const
|
|
3334
|
-
this.sunIcon?.classList.toggle("is-visible",
|
|
3335
|
-
this.moonIcon?.classList.toggle("is-visible", !
|
|
4247
|
+
const isDark = readTheme() === "dark";
|
|
4248
|
+
this.sunIcon?.classList.toggle("is-visible", isDark);
|
|
4249
|
+
this.moonIcon?.classList.toggle("is-visible", !isDark);
|
|
3336
4250
|
};
|
|
3337
4251
|
render() {
|
|
3338
4252
|
const label = this.getAttribute("aria-label") ?? "Toggle light and dark theme";
|
|
@@ -3357,7 +4271,7 @@ var registerVikingThemeToggleWc = () => {
|
|
|
3357
4271
|
};
|
|
3358
4272
|
|
|
3359
4273
|
// src/web/suite-header/viking-suite-header-wc.ts
|
|
3360
|
-
var
|
|
4274
|
+
var VALID_CONTEXTS4 = /* @__PURE__ */ new Set([
|
|
3361
4275
|
"app",
|
|
3362
4276
|
"marketing",
|
|
3363
4277
|
"backend",
|
|
@@ -3708,9 +4622,9 @@ viking-suite-command-palette {
|
|
|
3708
4622
|
}
|
|
3709
4623
|
}
|
|
3710
4624
|
`;
|
|
3711
|
-
var
|
|
4625
|
+
var detectContext4 = () => {
|
|
3712
4626
|
const explicit = document.documentElement.getAttribute("data-deml-context");
|
|
3713
|
-
if (explicit &&
|
|
4627
|
+
if (explicit && VALID_CONTEXTS4.has(explicit)) {
|
|
3714
4628
|
return explicit;
|
|
3715
4629
|
}
|
|
3716
4630
|
const host = window.location.hostname;
|
|
@@ -3725,14 +4639,14 @@ var detectContext2 = () => {
|
|
|
3725
4639
|
}
|
|
3726
4640
|
return "marketing";
|
|
3727
4641
|
};
|
|
3728
|
-
var
|
|
4642
|
+
var readContext4 = (el) => {
|
|
3729
4643
|
const raw = el.getAttribute("context");
|
|
3730
|
-
if (raw &&
|
|
4644
|
+
if (raw && VALID_CONTEXTS4.has(raw)) {
|
|
3731
4645
|
return raw;
|
|
3732
4646
|
}
|
|
3733
|
-
return
|
|
4647
|
+
return detectContext4();
|
|
3734
4648
|
};
|
|
3735
|
-
var
|
|
4649
|
+
var readUrls4 = (el) => {
|
|
3736
4650
|
const env = globalThis.__DEML ?? {};
|
|
3737
4651
|
return {
|
|
3738
4652
|
app: el.getAttribute("app-url") ?? env.app ?? DEFAULT_SITE_URLS.app,
|
|
@@ -3917,8 +4831,8 @@ var VikingSuiteHeaderWc = class extends HTMLElementBase {
|
|
|
3917
4831
|
return this.getAttribute("dashboard-href") ?? `${urls.app}/dashboard`;
|
|
3918
4832
|
}
|
|
3919
4833
|
render() {
|
|
3920
|
-
const context =
|
|
3921
|
-
const urls =
|
|
4834
|
+
const context = readContext4(this);
|
|
4835
|
+
const urls = readUrls4(this);
|
|
3922
4836
|
const authenticated = readBoolAttr(this, "authenticated");
|
|
3923
4837
|
const navLinks = this.renderNavLinks(context, urls, authenticated);
|
|
3924
4838
|
const brandHref = resolveBrandHref(context, urls);
|
|
@@ -4163,8 +5077,12 @@ var registerVikingElements = () => {
|
|
|
4163
5077
|
registerVikingSelectWc();
|
|
4164
5078
|
registerVikingModalWc();
|
|
4165
5079
|
registerVikingSearchPaletteWc();
|
|
5080
|
+
registerVikingStatusCardWc();
|
|
5081
|
+
registerVikingStatusPillWc();
|
|
4166
5082
|
registerVikingSuiteHeaderWc();
|
|
4167
5083
|
registerVikingSuiteSearchPaletteWc();
|
|
5084
|
+
registerVikingSiteNavbarWc();
|
|
5085
|
+
registerVikingSiteFooterWc();
|
|
4168
5086
|
registerVikingThemeToggleWc();
|
|
4169
5087
|
};
|
|
4170
5088
|
if (typeof globalThis !== "undefined" && typeof document !== "undefined") {
|
|
@@ -4184,6 +5102,10 @@ export {
|
|
|
4184
5102
|
VikingModalWc,
|
|
4185
5103
|
VikingSearchPaletteWc,
|
|
4186
5104
|
VikingSelectWc,
|
|
5105
|
+
VikingSiteFooterWc,
|
|
5106
|
+
VikingSiteNavbarWc,
|
|
5107
|
+
VikingStatusCardWc,
|
|
5108
|
+
VikingStatusPillWc,
|
|
4187
5109
|
VikingSuiteHeaderWc,
|
|
4188
5110
|
VikingSuiteSearchPaletteWc,
|
|
4189
5111
|
VikingThemeToggleWc,
|
|
@@ -4197,6 +5119,10 @@ export {
|
|
|
4197
5119
|
registerVikingModalWc,
|
|
4198
5120
|
registerVikingSearchPaletteWc,
|
|
4199
5121
|
registerVikingSelectWc,
|
|
5122
|
+
registerVikingSiteFooterWc,
|
|
5123
|
+
registerVikingSiteNavbarWc,
|
|
5124
|
+
registerVikingStatusCardWc,
|
|
5125
|
+
registerVikingStatusPillWc,
|
|
4200
5126
|
registerVikingSuiteHeaderWc,
|
|
4201
5127
|
registerVikingSuiteSearchPaletteWc,
|
|
4202
5128
|
registerVikingThemeToggleWc
|