@arcgis/portal-components 5.2.0-next.7 → 5.2.0-next.9

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.
Files changed (35) hide show
  1. package/dist/cdn/{L3BQK62N.js → F2AM2M4H.js} +1 -1
  2. package/dist/cdn/{G6QT6MYP.js → IWJIVHBS.js} +1 -1
  3. package/dist/cdn/JUN4NQAO.js +2 -0
  4. package/dist/cdn/QB34ACZ2.js +2 -0
  5. package/dist/cdn/WZC4LHVH.js +2 -0
  6. package/dist/cdn/assets/portal-group-badges/t9n/messages.en.json +1 -0
  7. package/dist/cdn/assets/portal-group-card/t9n/messages.en.json +1 -0
  8. package/dist/cdn/index.js +1 -1
  9. package/dist/cdn/main.css +1 -1
  10. package/dist/components/arcgis-portal-group-badges/customElement.d.ts +102 -0
  11. package/dist/components/arcgis-portal-group-badges/customElement.js +58 -0
  12. package/dist/components/arcgis-portal-group-badges/index.d.ts +1 -0
  13. package/dist/components/arcgis-portal-group-badges/index.js +3 -0
  14. package/dist/components/arcgis-portal-group-badges/types.d.ts +3 -0
  15. package/dist/components/arcgis-portal-group-card/customElement.d.ts +167 -0
  16. package/dist/components/arcgis-portal-group-card/customElement.js +187 -0
  17. package/dist/components/arcgis-portal-group-card/index.d.ts +1 -0
  18. package/dist/components/arcgis-portal-group-card/index.js +8 -0
  19. package/dist/components/arcgis-portal-group-thumbnail/customElement.d.ts +32 -0
  20. package/dist/components/arcgis-portal-group-thumbnail/customElement.js +153 -0
  21. package/dist/components/arcgis-portal-group-thumbnail/index.d.ts +1 -0
  22. package/dist/components/arcgis-portal-group-thumbnail/index.js +3 -0
  23. package/dist/components/arcgis-portal-replacement-item-redirect/customElement.js +3 -3
  24. package/dist/docs/api.json +1 -1
  25. package/dist/docs/docs.json +1 -1
  26. package/dist/docs/vscode.html-custom-data.json +1 -1
  27. package/dist/docs/web-types.json +1 -1
  28. package/dist/index.d.ts +20 -2
  29. package/dist/loader.js +3 -0
  30. package/dist/types/lumina.d.ts +18 -0
  31. package/dist/types/preact.d.ts +21 -0
  32. package/dist/types/react.d.ts +24 -0
  33. package/dist/types/stencil.d.ts +18 -0
  34. package/package.json +5 -5
  35. /package/dist/cdn/{T25WZ6OL.js → RBC6VGDJ.js} +0 -0
@@ -0,0 +1,187 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
+ import { c as k } from "../../chunks/runtime.js";
3
+ import { css as y, html as r } from "lit";
4
+ import { LitElement as C, createEvent as w, safeClassMap as g, nothing as l } from "@arcgis/lumina";
5
+ import { createRef as F, ref as $ } from "lit/directives/ref.js";
6
+ import { u as z } from "../../chunks/useT9n.js";
7
+ import { a as E } from "../../chunks/functionalities.js";
8
+ const o = {
9
+ md: 840,
10
+ sm: 580,
11
+ xs: 480,
12
+ xxs: 360
13
+ }, B = y`:host{display:block;min-width:0}.group-card{position:relative;display:flex;height:100%;flex-direction:column;color:var(--calcite-color-text-1);opacity:0;box-shadow:none;transition-duration:.15s;outline-color:transparent;background-color:var(--calcite-color-foreground-1);transition-property:background-color,outline,outline-offset,opacity;border:1px solid var(--calcite-color-border-3);&:focus{z-index:10;outline:2px solid var(--calcite-color-brand);outline-offset:-2px}}.group-card--loaded{opacity:1}.group-card--selected{border-color:var(--calcite-color-brand)}.group-card--hoverable{cursor:pointer}.group-card--disabled{opacity:.5}.group-card__top{padding:1rem}.group-card__upper{flex:1 1 0%;background-color:var(--calcite-color-foreground-1);transition:all var(--calcite-animation-timing) ease-in-out 0s,outline 0s,outline-offset 0s}.group-card__upper:hover{background-color:var(--calcite-color-background)}.group-card__upper--compact{display:flex;align-items:center;padding:.5rem .75rem}.group-card__upper--link{color:var(--calcite-color-text-1);text-decoration-line:none;outline-color:transparent;&:focus{z-index:10;outline:2px solid var(--calcite-color-brand);outline-offset:2px}}.group-card__title__span{position:relative;display:inline;border-style:none;background-color:transparent;padding:0;transition:all var(--calcite-animation-timing) ease-in-out 0s,outline 0s,outline-offset 0s;background-image:linear-gradient(transparent,transparent);background-position-x:0%,100%;background-position-y:min(1.25em,100%);background-repeat:no-repeat,no-repeat;background-size:100% 1px,100% 1px}.group-card--previewed .group-card__title__span{background-image:linear-gradient(var(--calcite-color-text-3),var(--calcite-color-text-3))}.group-card__content{display:flex;min-width:0;flex:1 1 0%;flex-direction:column}.group-card__details{display:flex;flex-direction:row;flex-wrap:wrap}.group-card__details--stacked{flex-direction:column}.group-card__detail{font-size:.875rem;color:var(--calcite-color-text-2)}.group-card__detail__icon{margin-inline-end:.5rem}.group-card__footer{margin-top:auto;display:flex;align-items:center;background-color:var(--calcite-color-foreground-1);padding:.5rem 1rem;border-top:1px solid var(--calcite-color-border-3)}.group-card__footer__start{display:flex;min-width:0;flex:1 1 0%;flex-direction:row;align-items:center;overflow:hidden;margin-inline-end:.75rem}.group-card__profile-wrap{max-width:100%;padding:.25rem}.group-card__divider{display:flex;align-items:center;flex:0 0 auto}.group-card__divider:not([empty]):before{content:"";height:1.25rem;width:1px;background-color:var(--calcite-color-border-1);margin-inline:.75rem}.group-card__details--stacked .group-card__divider:before{display:none}.group-card__divider:first-child:before{display:none}.group-card-flex{display:flex}.group-card-flex-1{min-width:0;flex:1 1 0%}.screen-readers-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.group-card__input{margin-inline-end:1rem;margin-top:.125rem}.group-card__title{margin:0;overflow-wrap:break-word;padding:0;font-size:1rem;font-weight:500;line-height:1.375}.group-card__title--compact{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-inline-end:1rem}.group-card__summary{margin:.25rem 0;flex:1 1 0%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0;font-size:.875rem;line-height:1.25}.group-card__thumbnail{margin-inline-end:1rem}.group-card__thumbnail--compact{width:2.75rem;height:2.75rem}.group-card__badges{margin-top:.25rem}.group-card__owner{min-width:0}.group-card--xs,.group-card--xxs{.group-card__top{padding:.75rem}.group-card__title--padded{margin-bottom:.25rem}.group-card__footer{padding:.25rem .75rem}.group-card__detail{margin:.25rem 0;font-size:.75rem;line-height:1.35}.group-card__title{font-size:.875rem}}.group-card--xxs{.group-card__thumbnail{padding-inline-start:.75rem;width:4.25rem}}.group-card--xs{.group-card__thumbnail{padding-inline-start:.5rem;width:5rem}}`;
14
+ class D extends C {
15
+ constructor() {
16
+ super(...arguments), this.messages = z({ blocking: !0 }), this.sectionEl = F(), this.resizeObserver = null, this.handleCardClick = (e) => {
17
+ if (!(this.link || this.disabled || e?.target?.closest(".group-card__footer"))) {
18
+ if (this.preview === "top") {
19
+ this.arcgisGroupBrowserCardPreview.emit(this.group);
20
+ return;
21
+ }
22
+ if (this.selection === "single") {
23
+ this.selected = !0, this.arcgisGroupCardSelect.emit({ group: this.group, selected: !0 });
24
+ return;
25
+ }
26
+ this.selection === "multiple" && (this.selected = !this.selected, this.arcgisGroupCardSelect.emit({ group: this.group, selected: this.selected }));
27
+ }
28
+ }, this.formFactor = "lg", this.width = 0, this.hover = !1, this.selected = !1, this.indeterminate = !1, this.view = "list", this.selection = "none", this.previewed = !1, this.showOwner = !0, this.showDateUpdated = !0, this.showDateCreated = !1, this.showViewableBy = !0, this.showSummary = !1, this.showBadges = !0, this.newTab = !1, this.disabled = !1, this.arcgisGroupBrowserCardPreview = w(), this.arcgisGroupCardSelect = w(), this.arcgisGroupBrowserInternalUIAction = w(), this.loaded = !1;
29
+ }
30
+ static {
31
+ this.properties = { formFactor: 16, width: 16, hover: 16, group: 0, user: 0, portal: 0, selected: 7, indeterminate: 7, view: 1, selection: 1, preview: 1, previewed: 5, name: 1, showOwner: 5, showDateUpdated: 5, showDateCreated: 5, showViewableBy: 5, showSummary: 5, showBadges: 5, link: 1, linkHandler: 0, newTab: 5, disabled: 7, loaded: 16 };
32
+ }
33
+ static {
34
+ this.styles = B;
35
+ }
36
+ async restoreFocus() {
37
+ if (this.link) {
38
+ this.renderRoot.querySelector(".group-card__upper")?.focus();
39
+ return;
40
+ }
41
+ this.preview === "top" && this.sectionEl.value && this.sectionEl.value.focus();
42
+ }
43
+ connectedCallback() {
44
+ super.connectedCallback(), !(typeof ResizeObserver > "u") && (this.resizeObserver = new ResizeObserver((e) => {
45
+ const t = e[0]?.contentRect.width ?? 0;
46
+ this.updateFormFactor(t);
47
+ }));
48
+ }
49
+ firstUpdated() {
50
+ if (this.sectionEl.value && this.resizeObserver) {
51
+ this.resizeObserver.observe(this.sectionEl.value);
52
+ const e = this.sectionEl.value.getBoundingClientRect().width;
53
+ this.updateFormFactor(e);
54
+ }
55
+ requestAnimationFrame(() => {
56
+ this.loaded = !0;
57
+ });
58
+ }
59
+ disconnectedCallback() {
60
+ this.resizeObserver?.disconnect(), this.resizeObserver = null, super.disconnectedCallback();
61
+ }
62
+ updateFormFactor(e) {
63
+ if (this.width = e, e > o.md) {
64
+ this.formFactor = "lg";
65
+ return;
66
+ }
67
+ if (e > o.sm) {
68
+ this.formFactor = "md";
69
+ return;
70
+ }
71
+ if (e > o.xs) {
72
+ this.formFactor = "sm";
73
+ return;
74
+ }
75
+ if (e > o.xxs) {
76
+ this.formFactor = "xs";
77
+ return;
78
+ }
79
+ this.formFactor = "xxs";
80
+ }
81
+ getAccessInfo(e) {
82
+ const { messages: t } = this, c = {
83
+ public: {
84
+ icon: "globe",
85
+ text: t.everyone
86
+ },
87
+ private: {
88
+ icon: "lock",
89
+ text: t.groupMembers
90
+ },
91
+ org: {
92
+ icon: "organization",
93
+ text: t.organization
94
+ }
95
+ };
96
+ return c[e] ?? c.private;
97
+ }
98
+ formatDate(e) {
99
+ return e ? new Intl.DateTimeFormat(void 0, { dateStyle: "medium" }).format(e) : "";
100
+ }
101
+ getThumbnailGroup(e) {
102
+ return {
103
+ id: e.id ?? void 0,
104
+ thumbnailUrl: e.thumbnailUrl ?? void 0,
105
+ title: e.title ?? void 0
106
+ };
107
+ }
108
+ renderSelectionInput() {
109
+ const { selection: e, selected: t, disabled: c, name: h, messages: _, group: a } = this;
110
+ switch (e) {
111
+ case "single":
112
+ return r`<calcite-radio-button class="group-card__input" .checked=${t} .disabled=${c} .value=${a.title ?? ""} .name=${h} @click=${(s) => s.stopPropagation()} @calciteRadioButtonChange=${() => {
113
+ this.arcgisGroupCardSelect.emit({ group: a, selected: !t });
114
+ }}><span class="screen-readers-only">${(_.select ?? "").replace("${title}", a.title ?? "")}</span></calcite-radio-button>`;
115
+ case "multiple":
116
+ return r`<calcite-checkbox class="group-card__input" .checked=${t} .disabled=${c} .indeterminate=${this.indeterminate} @click=${(s) => s.stopPropagation()} @calciteCheckboxChange=${() => {
117
+ const s = !this.selected;
118
+ this.selected = s, this.arcgisGroupCardSelect.emit({ group: a, selected: s });
119
+ }}><span class="screen-readers-only">${a.title}</span></calcite-checkbox>`;
120
+ case "none":
121
+ return null;
122
+ default:
123
+ return E(e);
124
+ }
125
+ }
126
+ renderCompactView() {
127
+ const { group: e, selection: t, formFactor: c, loaded: h, disabled: _, link: a, showBadges: s, newTab: m, linkHandler: d, handleCardClick: n, selected: p } = this, f = this.getThumbnailGroup(e);
128
+ return r`<section class=${g({
129
+ "group-card": !0,
130
+ "group-card--hoverable": t !== "none",
131
+ "group-card--selected": p,
132
+ "group-card--disabled": _,
133
+ "group-card--loaded": h,
134
+ [`group-card--${c}`]: !0
135
+ })} @click=${a ? void 0 : n} @mouseover=${() => {
136
+ this.hover = !0;
137
+ }} @mouseout=${() => {
138
+ this.hover = !1;
139
+ }} ${$(this.sectionEl)}>${a ? r`<a class="group-card__upper group-card__upper--compact group-card__upper--link" href=${a ?? l} target=${(m ? "_blank" : void 0) ?? l} rel=${(m ? "noopener noreferrer" : void 0) ?? l} @click=${(u) => {
140
+ d && !u.ctrlKey && !u.metaKey && (u.preventDefault(), d(this.group));
141
+ }}>${r`${this.renderSelectionInput()}<div class="group-card__thumbnail group-card__thumbnail--compact"><arcgis-portal-group-thumbnail .group=${f} .portal=${this.portal} scale=l></arcgis-portal-group-thumbnail></div><div class="group-card-flex-1"><h3 class="group-card__title group-card__title--compact"><span class="group-card__title__span">${e.title}</span></h3>${s && r`<arcgis-portal-group-badges .group=${e} .portal=${this.portal} class="group-card__badges--compact" scale=s show-tooltips width=narrow></arcgis-portal-group-badges>` || ""}</div><slot name=content-end></slot>`}</a>` : r`<div class="group-card__upper group-card__upper--compact">${this.renderSelectionInput()}<div class="group-card__thumbnail group-card__thumbnail--compact"><arcgis-portal-group-thumbnail .group=${f} .portal=${this.portal} scale=l></arcgis-portal-group-thumbnail></div><div class="group-card-flex-1"><h3 class="group-card__title group-card__title--compact"><span class="group-card__title__span">${e.title}</span></h3>${s && r`<arcgis-portal-group-badges .group=${e} .portal=${this.portal} class="group-card__badges--compact" scale=s show-tooltips width=narrow></arcgis-portal-group-badges>` || ""}</div><slot name=content-end></slot></div>`}</section>`;
142
+ }
143
+ render() {
144
+ const { group: e, selection: t, formFactor: c, loaded: h, disabled: _, link: a, showDateCreated: s, showDateUpdated: m, showSummary: d, showBadges: n } = this;
145
+ if (!e || !this.messages._lang)
146
+ return;
147
+ if (this.view === "compact")
148
+ return this.renderCompactView();
149
+ const p = this.getAccessInfo(e.access ?? "private"), f = this.getThumbnailGroup(e), u = this.width < o.sm, v = this.preview === "top" && !a, { previewed: x } = this;
150
+ return r`<section class=${g({
151
+ "group-card": !0,
152
+ "group-card--hoverable": t !== "none",
153
+ "group-card--selected": this.selected,
154
+ "group-card--disabled": _,
155
+ "group-card--loaded": h,
156
+ [`group-card--${c}`]: !0,
157
+ "group-card--previewed": x
158
+ })} @click=${a ? void 0 : this.handleCardClick} tabindex=${(v ? 0 : void 0) ?? l} .role=${v ? "button" : void 0} aria-haspopup=${(v ? "dialog" : void 0) ?? l} @keydown=${(i) => {
159
+ v && (i.key === "Enter" || i.key === " ") && (i.preventDefault(), this.handleCardClick());
160
+ }} ${$(this.sectionEl)}><slot name=content-top></slot>${a ? r`<a class="group-card__upper group-card__upper--link" href=${this.link ?? l} target=${(this.newTab ? "_blank" : void 0) ?? l} rel=${(this.newTab ? "noopener noreferrer" : void 0) ?? l} @mouseover=${() => {
161
+ this.hover = !0;
162
+ }} @mouseout=${() => {
163
+ this.hover = !1;
164
+ }} @click=${(i) => {
165
+ if (this.linkHandler && !i.ctrlKey && !i.metaKey) {
166
+ i.preventDefault(), this.linkHandler(this.group);
167
+ return;
168
+ }
169
+ const b = i.target;
170
+ b instanceof HTMLElement && b.closest(".group-card__footer") && i.preventDefault();
171
+ }}>${r`<div class="group-card-flex group-card__top">${this.renderSelectionInput()}<div class="group-card__thumbnail"><arcgis-portal-group-thumbnail .group=${f} .portal=${this.portal} scale=xl></arcgis-portal-group-thumbnail></div><div class="group-card-flex-1"><div class="group-card-flex"><div class="group-card__content"><h3 class=${g({ "group-card__title": !0, "group-card__title--padded": d && !!e.snippet })}><span class="group-card__title__span">${e.title}</span></h3>${d && !!e.snippet && r`<p class="group-card__summary">${e.snippet.length > 250 ? `${e.snippet.substring(0, 250)}...` : e.snippet}</p>` || ""}<div class=${g({ "group-card__details": !0, "group-card__details--stacked": u })}>${s && !!e.created && r`<span class="group-card__detail group-card__divider">${(this.messages.created ?? "").replace("${date}", this.formatDate(e.created))}</span>` || ""}${m && !!e.modified && r`<span class="group-card__detail group-card__divider">${(this.messages.lastUpdated ?? "").replace("${date}", this.formatDate(e.modified))}</span>` || ""}${this.showViewableBy && r`<span class="group-card__detail group-card__divider"><calcite-icon class="group-card__detail__icon" .icon=${p.icon} scale=s></calcite-icon>${(this.messages.viewableBy ?? "").replace("${level}", p.text)}</span>` || ""}${n && this.width >= o.sm && r`<arcgis-portal-group-badges .appearance=${this.hover ? "outline-fill" : "solid"} .group=${e} .portal=${this.portal} .width=${this.width < o.md ? "narrow" : "full"} class="group-card__badges group-card__detail group-card__divider" scale=s show-tooltips></arcgis-portal-group-badges>` || ""}</div>${n && this.width < o.sm && r`<arcgis-portal-group-badges .appearance=${this.hover ? "outline-fill" : "solid"} .group=${e} .portal=${this.portal} .width=${this.width < o.xxs ? "narrow" : "full"} class="group-card__badges" scale=s show-tooltips></arcgis-portal-group-badges>` || ""}<slot name=content-end></slot></div></div></div></div>`}</a>` : r`<div class="group-card__upper" @mouseover=${() => {
172
+ this.hover = !0;
173
+ }} @mouseout=${() => {
174
+ this.hover = !1;
175
+ }}><div class="group-card-flex group-card__top">${this.renderSelectionInput()}<div class="group-card__thumbnail"><arcgis-portal-group-thumbnail .group=${f} .portal=${this.portal} scale=xl></arcgis-portal-group-thumbnail></div><div class="group-card-flex-1"><div class="group-card-flex"><div class="group-card__content"><h3 class=${g({ "group-card__title": !0, "group-card__title--padded": d && !!e.snippet })}><span class="group-card__title__span">${e.title}</span></h3>${d && !!e.snippet && r`<p class="group-card__summary">${e.snippet.length > 250 ? `${e.snippet.substring(0, 250)}...` : e.snippet}</p>` || ""}<div class=${g({ "group-card__details": !0, "group-card__details--stacked": u })}>${s && !!e.created && r`<span class="group-card__detail group-card__divider">${(this.messages.created ?? "").replace("${date}", this.formatDate(e.created))}</span>` || ""}${m && !!e.modified && r`<span class="group-card__detail group-card__divider">${(this.messages.lastUpdated ?? "").replace("${date}", this.formatDate(e.modified))}</span>` || ""}${this.showViewableBy && r`<span class="group-card__detail group-card__divider"><calcite-icon class="group-card__detail__icon" .icon=${p.icon} scale=s></calcite-icon>${(this.messages.viewableBy ?? "").replace("${level}", p.text)}</span>` || ""}${n && this.width >= o.sm && r`<arcgis-portal-group-badges .appearance=${this.hover ? "outline-fill" : "solid"} .group=${e} .portal=${this.portal} .width=${this.width < o.md ? "narrow" : "full"} class="group-card__badges group-card__detail group-card__divider" scale=s show-tooltips></arcgis-portal-group-badges>` || ""}</div>${n && this.width < o.sm && r`<arcgis-portal-group-badges .appearance=${this.hover ? "outline-fill" : "solid"} .group=${e} .portal=${this.portal} .width=${this.width < o.xxs ? "narrow" : "full"} class="group-card__badges" scale=s show-tooltips></arcgis-portal-group-badges>` || ""}<slot name=content-end></slot></div></div></div></div></div>`}<div class="group-card__footer"><div class="group-card__footer__start"><slot name=actions-start></slot>${this.showOwner && r`<div class="group-card__profile-wrap"><arcgis-portal-user-popup class="group-card__owner" .portal=${this.portal} .username=${e.owner ?? void 0} underline @arcgisUserPopupInternalUIAction=${({ detail: i, stopPropagation: b }) => {
176
+ b(), this.arcgisGroupBrowserInternalUIAction.emit(i);
177
+ }}></arcgis-portal-user-popup></div>` || ""}</div><div>${this.preview === "action" && r`<calcite-button scale=s appearance=outline-fill kind=neutral @click=${() => {
178
+ this.arcgisGroupBrowserCardPreview.emit(this.group);
179
+ }}>${this.previewed ? this.messages.hidePreview : this.messages.preview}</calcite-button>` || ""}<div @click=${(i) => {
180
+ i.stopPropagation();
181
+ }}><slot name=actions-end></slot></div></div></div></section>`;
182
+ }
183
+ }
184
+ k("arcgis-portal-group-card", D);
185
+ export {
186
+ D as ArcgisPortalGroupCard
187
+ };
@@ -0,0 +1 @@
1
+ export * from "./customElement.js";
@@ -0,0 +1,8 @@
1
+ import "@esri/calcite-components/components/calcite-radio-button";
2
+ import "@esri/calcite-components/components/calcite-checkbox";
3
+ import "../arcgis-portal-group-thumbnail/index.js";
4
+ import "../arcgis-portal-group-badges/index.js";
5
+ import "@esri/calcite-components/components/calcite-icon";
6
+ import "../arcgis-portal-user-popup/index.js";
7
+ import "@esri/calcite-components/components/calcite-button";
8
+ export * from "./customElement.js";
@@ -0,0 +1,32 @@
1
+ /// <reference path="../../index.d.ts" />
2
+ import type Portal from "@arcgis/core/portal/Portal.js";
3
+ import type { PublicLitElement as LitElement } from "@arcgis/lumina";
4
+ import type { Scale } from "../../types/ui.js";
5
+
6
+ export abstract class ArcgisPortalGroupThumbnail extends LitElement {
7
+ /** Group data used to render thumbnail image or fallback initials. */
8
+ accessor group: GroupThumbnail | undefined;
9
+ /** Current portal instance used for tokenized thumbnail URL generation. */
10
+ accessor portal: Portal | undefined;
11
+ /**
12
+ * Component scale.
13
+ *
14
+ * @default "m"
15
+ */
16
+ accessor scale: GroupThumbnailScale;
17
+ /**
18
+ * Whether to show tooltip on hover/focus.
19
+ *
20
+ * @default false
21
+ */
22
+ accessor tooltip: boolean;
23
+ }
24
+
25
+ export type GroupThumbnailScale = Scale | "xl";
26
+
27
+ export type GroupThumbnail = {
28
+ id?: string;
29
+ thumbnail?: string;
30
+ thumbnailUrl?: string;
31
+ title?: string;
32
+ };
@@ -0,0 +1,153 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
+ import { c as p } from "../../chunks/runtime.js";
3
+ import { LitElement as m, nothing as f, safeStyleMap as g } from "@arcgis/lumina";
4
+ import { css as d, html as l } from "lit";
5
+ import { createRef as c, ref as h } from "lit/directives/ref.js";
6
+ import { a as $, g as b } from "../../chunks/portal.js";
7
+ const x = /^#[0-9a-f]{3}$/iu, k = /^#[0-9a-f]{6}$/iu;
8
+ function u(r) {
9
+ return E(r) || I(r);
10
+ }
11
+ function E(r) {
12
+ return r?.length === 4 && x.test(r);
13
+ }
14
+ function I(r) {
15
+ return r?.length === 7 && k.test(r);
16
+ }
17
+ function O(r) {
18
+ if (!u(r))
19
+ return null;
20
+ const t = r.replace("#", "");
21
+ if (t.length === 3) {
22
+ const [e, i, o] = t.split("");
23
+ return {
24
+ r: Number.parseInt(`${e}${e}`, 16),
25
+ g: Number.parseInt(`${i}${i}`, 16),
26
+ b: Number.parseInt(`${o}${o}`, 16)
27
+ };
28
+ }
29
+ return {
30
+ r: Number.parseInt(t.slice(0, 2), 16),
31
+ g: Number.parseInt(t.slice(2, 4), 16),
32
+ b: Number.parseInt(t.slice(4, 6), 16)
33
+ };
34
+ }
35
+ function T(r) {
36
+ let t = 0;
37
+ for (let i = 0; i < r.length; i++)
38
+ t = r.charCodeAt(i) + ((t << 5) - t);
39
+ let e = "#";
40
+ for (let i = 0; i < 3; i++) {
41
+ const o = t >> i * 8 & 255;
42
+ e += `00${o.toString(16)}`.slice(-2);
43
+ }
44
+ return e;
45
+ }
46
+ function v(r) {
47
+ let { r: t, g: e, b: i } = r;
48
+ t /= 255, e /= 255, i /= 255;
49
+ const o = Math.max(t, e, i), n = Math.min(t, e, i), s = o - n;
50
+ if (s === 0)
51
+ return 0;
52
+ let a = 0;
53
+ switch (o) {
54
+ case t:
55
+ a = (e - i) / s + (e < i ? 6 : 0);
56
+ break;
57
+ case e:
58
+ a = (i - t) / s + 2;
59
+ break;
60
+ default:
61
+ a = (t - e) / s + 4;
62
+ break;
63
+ }
64
+ return Math.round(a * 60);
65
+ }
66
+ function w(r) {
67
+ const t = O(r);
68
+ return t ? v(t) : 0;
69
+ }
70
+ const H = d`:host{display:inline-block}:host([scale="s"]){height:1.5rem;width:1.5rem;font-size:.625rem}:host([scale="m"]){height:2rem;width:2rem;font-size:.75rem}:host([scale="l"]){font-size:1rem;height:2.75rem;width:2.75rem}:host([scale="xl"]){font-size:1.25rem;height:4rem;width:4rem}.icon{display:flex;color:var(--calcite-color-text-3)}.background{position:relative;display:flex;height:100%;width:100%;align-items:center;justify-content:center}.initials{position:absolute;font-weight:700;text-transform:uppercase;color:var(--calcite-color-text-2)}.thumbnail{height:100%;width:100%}.tooltip-text{margin:0;padding:0;font-size:.75rem;color:var(--calcite-color-text-2)}calcite-tooltip{pointer-events:none}`;
71
+ class y extends m {
72
+ constructor() {
73
+ super(...arguments), this.imageEl = c(), this.fallbackEl = c(), this.tooltipEl = c(), this.imageError = !1, this.tooltipOpen = !1, this.tooltip = !1, this.scale = "m";
74
+ }
75
+ static {
76
+ this.properties = { imageError: 16, tooltipOpen: 16, group: 0, portal: 0, tooltip: 5, scale: 3 };
77
+ }
78
+ static {
79
+ this.styles = H;
80
+ }
81
+ willUpdate(t) {
82
+ t.has("group") && (this.imageError = !1);
83
+ }
84
+ updated() {
85
+ const t = this.tooltipEl.value, e = this.imageEl.value || this.fallbackEl.value;
86
+ t && e && (t.referenceElement = e);
87
+ }
88
+ isDarkMode() {
89
+ return !!this.el.closest(".calcite-mode-dark");
90
+ }
91
+ getThumbnailURI() {
92
+ const { group: t, portal: e } = this;
93
+ if (!t)
94
+ return null;
95
+ if (t.thumbnailUrl)
96
+ return t.thumbnailUrl;
97
+ const i = t.thumbnail;
98
+ if (!i)
99
+ return null;
100
+ if (i.startsWith("http"))
101
+ return i;
102
+ if (!e || !t.id)
103
+ return null;
104
+ const o = $(e), n = o ? `?token=${o}` : "";
105
+ return `${b(e)}community/groups/${t.id}/info/${i}${n}`;
106
+ }
107
+ generateFillColor() {
108
+ const { id: t, title: e } = this.group || {}, i = t ? `#${t.slice(Math.max(0, t.length - 6))}` : "", o = t && u(i) ? i : T(e || "");
109
+ if (!t && !e || !u(o))
110
+ return "var(--calcite-color-foreground-2)";
111
+ const n = w(o), s = this.isDarkMode() ? 20 : 90;
112
+ return `hsl(${n}, 60%, ${s}%)`;
113
+ }
114
+ generateInitials() {
115
+ const t = this.group?.title?.trim().charAt(0);
116
+ return t?.match(/^\w+$/u) ? t : null;
117
+ }
118
+ getIconScale() {
119
+ return this.scale === "xl" ? "l" : this.scale === "xs" ? "s" : this.scale;
120
+ }
121
+ renderTooltip() {
122
+ return !this.tooltip || !this.group?.title ? null : l`<calcite-tooltip .open=${this.tooltipOpen} close-on-click placement=bottom-start offset-distance=6 offset-skidding=0 ${h(this.tooltipEl)}><p class="tooltip-text">${this.group.title}</p></calcite-tooltip>`;
123
+ }
124
+ render() {
125
+ const t = this.getThumbnailURI();
126
+ if (t && !this.imageError)
127
+ return l`<img class="thumbnail" src=${t ?? f} alt @error=${() => {
128
+ this.imageError = !0;
129
+ }} @mouseenter=${() => {
130
+ this.tooltipOpen = !0;
131
+ }} @mouseleave=${() => {
132
+ this.tooltipOpen = !1;
133
+ }} @focusin=${() => {
134
+ this.tooltipOpen = !0;
135
+ }} @focusout=${() => {
136
+ this.tooltipOpen = !1;
137
+ }} ${h(this.imageEl)}>${this.renderTooltip()}`;
138
+ const e = this.generateInitials();
139
+ return l`<span class="background" style=${g({ backgroundColor: this.generateFillColor() })} @mouseenter=${() => {
140
+ this.tooltipOpen = !0;
141
+ }} @mouseleave=${() => {
142
+ this.tooltipOpen = !1;
143
+ }} @focusin=${() => {
144
+ this.tooltipOpen = !0;
145
+ }} @focusout=${() => {
146
+ this.tooltipOpen = !1;
147
+ }} ${h(this.fallbackEl)}>${e ? l`<span aria-hidden=true class="initials">${e}</span>` : l`<calcite-icon class="icon" icon=users .scale=${this.getIconScale()}></calcite-icon>`}</span>${this.renderTooltip()}`;
148
+ }
149
+ }
150
+ p("arcgis-portal-group-thumbnail", y);
151
+ export {
152
+ y as ArcgisPortalGroupThumbnail
153
+ };
@@ -0,0 +1 @@
1
+ export * from "./customElement.js";
@@ -0,0 +1,3 @@
1
+ import "@esri/calcite-components/components/calcite-tooltip";
2
+ import "@esri/calcite-components/components/calcite-icon";
3
+ export * from "./customElement.js";
@@ -438,8 +438,8 @@ class H extends g {
438
438
  await n?.load(), this.replacementItem = n, this.hasInaccessibleReplacementItem = this.replacementItemInRecycleBin || !n && s.data?.aggregations?.total?.count > 0 && s.data?.relatedItems?.length === 0, this.arcgisPortalReplacementItemFetch.emit({
439
439
  replacementItem: this.hasInaccessibleReplacementItem ? {} : n || null
440
440
  }), this.replacementItem = n;
441
- const p = !!a.owner && await M(a.owner, t);
442
- this.itemOwnerName = p ? T(p, this.messages?._t9nLocale || "en") : a.owner || "", this.replacementItemSupportsOpenActions = j(n), this.thumbnailUrl = F(t, n ?? this.item), this.supportsReplacement = !!n && this.isItemRetired(a), this.canRedirect = this.supportsReplacement && this.replacementItemSupportsOpenActions, this.replacementId = n?.id || null, this.canRedirect && this.setupTimer({
441
+ const p = this.replacementItem?.owner ?? (a?.owner || null);
442
+ this.itemOwnerName = p ? T(await M(p, t), this.messages?._t9nLocale || "en") : "", this.replacementItemSupportsOpenActions = j(n), this.thumbnailUrl = F(t, n ?? this.item), this.supportsReplacement = !!n && this.isItemRetired(a), this.canRedirect = this.supportsReplacement && this.replacementItemSupportsOpenActions, this.replacementId = n?.id || null, this.canRedirect && this.setupTimer({
443
443
  onComplete: () => r()
444
444
  }), this.open = !0;
445
445
  }
@@ -466,7 +466,7 @@ class H extends g {
466
466
  this.cancelRedirect();
467
467
  }}>${t.cancelRedirection}</calcite-button>` || ""}<calcite-button slot=footer-end @click=${() => {
468
468
  this.cancelTimer(), o ? this.performRedirectAction() : this.viewItemDetailsPage();
469
- }} .iconEnd=${o ? void 0 : "launch"} icon-flip-rtl=end ${R(this.primaryActionRef)}>${this.getRedirectActionMessage()}</calcite-button></calcite-dialog>`;
469
+ }} .iconEnd=${o ? void 0 : "launch"} ${R(this.primaryActionRef)}>${this.getRedirectActionMessage()}</calcite-button></calcite-dialog>`;
470
470
  }
471
471
  }
472
472
  f("arcgis-portal-replacement-item-redirect", H);