@idp.global/catalog 2.1.1 → 2.2.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/catalog',
6
- version: '2.1.1',
6
+ version: '2.2.0',
7
7
  description: 'Web component catalog for idp.global, based on the v5 Apple-system design language.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUscUJBQXFCO0lBQzNCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxxRkFBcUY7Q0FDbkcsQ0FBQSJ9
@@ -19,6 +19,12 @@ export declare class IdpButton extends DeesElement {
19
19
  accessor type: 'button' | 'submit' | 'reset';
20
20
  accessor disabled: boolean;
21
21
  accessor loading: boolean;
22
+ /**
23
+ * When set, the button renders as a real anchor so it works as a link
24
+ * (new-tab, middle-click, crawlers) without any host-side click wiring.
25
+ */
26
+ accessor href: string;
27
+ accessor target: string;
22
28
  static styles: import("@design.estate/dees-element").CSSResult[];
23
29
  render(): TemplateResult;
24
30
  }
@@ -65,6 +65,12 @@ let IdpButton = (() => {
65
65
  let _loading_decorators;
66
66
  let _loading_initializers = [];
67
67
  let _loading_extraInitializers = [];
68
+ let _href_decorators;
69
+ let _href_initializers = [];
70
+ let _href_extraInitializers = [];
71
+ let _target_decorators;
72
+ let _target_initializers = [];
73
+ let _target_extraInitializers = [];
68
74
  var IdpButton = class extends _classSuper {
69
75
  static { _classThis = this; }
70
76
  static {
@@ -77,6 +83,8 @@ let IdpButton = (() => {
77
83
  _type_decorators = [property({ type: String })];
78
84
  _disabled_decorators = [property({ type: Boolean, reflect: true })];
79
85
  _loading_decorators = [property({ type: Boolean, reflect: true })];
86
+ _href_decorators = [property({ type: String })];
87
+ _target_decorators = [property({ type: String })];
80
88
  __esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
81
89
  __esDecorate(this, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: obj => "size" in obj, get: obj => obj.size, set: (obj, value) => { obj.size = value; } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
82
90
  __esDecorate(this, null, _shape_decorators, { kind: "accessor", name: "shape", static: false, private: false, access: { has: obj => "shape" in obj, get: obj => obj.shape, set: (obj, value) => { obj.shape = value; } }, metadata: _metadata }, _shape_initializers, _shape_extraInitializers);
@@ -85,6 +93,8 @@ let IdpButton = (() => {
85
93
  __esDecorate(this, null, _type_decorators, { kind: "accessor", name: "type", static: false, private: false, access: { has: obj => "type" in obj, get: obj => obj.type, set: (obj, value) => { obj.type = value; } }, metadata: _metadata }, _type_initializers, _type_extraInitializers);
86
94
  __esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
87
95
  __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
96
+ __esDecorate(this, null, _href_decorators, { kind: "accessor", name: "href", static: false, private: false, access: { has: obj => "href" in obj, get: obj => obj.href, set: (obj, value) => { obj.href = value; } }, metadata: _metadata }, _href_initializers, _href_extraInitializers);
97
+ __esDecorate(this, null, _target_decorators, { kind: "accessor", name: "target", static: false, private: false, access: { has: obj => "target" in obj, get: obj => obj.target, set: (obj, value) => { obj.target = value; } }, metadata: _metadata }, _target_initializers, _target_extraInitializers);
88
98
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
89
99
  IdpButton = _classThis = _classDescriptor.value;
90
100
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -124,6 +134,16 @@ let IdpButton = (() => {
124
134
  #loading_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _loading_initializers, false));
125
135
  get loading() { return this.#loading_accessor_storage; }
126
136
  set loading(value) { this.#loading_accessor_storage = value; }
137
+ #href_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _href_initializers, ''));
138
+ /**
139
+ * When set, the button renders as a real anchor so it works as a link
140
+ * (new-tab, middle-click, crawlers) without any host-side click wiring.
141
+ */
142
+ get href() { return this.#href_accessor_storage; }
143
+ set href(value) { this.#href_accessor_storage = value; }
144
+ #target_accessor_storage = (__runInitializers(this, _href_extraInitializers), __runInitializers(this, _target_initializers, ''));
145
+ get target() { return this.#target_accessor_storage; }
146
+ set target(value) { this.#target_accessor_storage = value; }
127
147
  static styles = [
128
148
  ...idpElementStyles,
129
149
  css `
@@ -136,10 +156,12 @@ let IdpButton = (() => {
136
156
  :host([block]) {
137
157
  display: block;
138
158
  }
139
- :host([block]) button {
159
+ :host([block]) button,
160
+ :host([block]) a {
140
161
  width: 100%;
141
162
  }
142
- button {
163
+ button,
164
+ a {
143
165
  display: inline-flex;
144
166
  align-items: center;
145
167
  justify-content: center;
@@ -154,10 +176,16 @@ let IdpButton = (() => {
154
176
  cursor: pointer;
155
177
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease, transform 80ms ease;
156
178
  }
157
- button:active:not(:disabled) {
179
+ a {
180
+ text-decoration: none;
181
+ box-sizing: border-box;
182
+ }
183
+ button:active:not(:disabled),
184
+ a:active {
158
185
  transform: translateY(1px);
159
186
  }
160
- button:focus-visible {
187
+ button:focus-visible,
188
+ a:focus-visible {
161
189
  outline: 2px solid color-mix(in srgb, var(--idp-accent), transparent 68%);
162
190
  outline-offset: 2px;
163
191
  }
@@ -278,18 +306,28 @@ let IdpButton = (() => {
278
306
  `,
279
307
  ];
280
308
  render() {
281
- return html `
282
- <button class="${this.variant} ${this.size} ${this.shape === 'rect' ? 'rect' : ''}" type=${this.type} ?disabled=${this.disabled || this.loading} part="button">
283
- ${this.loading
309
+ const contentTemplate = html `
310
+ ${this.loading
284
311
  ? html `<span class="spinner" aria-hidden="true"></span>`
285
312
  : this.icon ? html `<idp-icon name=${this.icon} size="14"></idp-icon>` : html ``}
286
- <slot></slot>
313
+ <slot></slot>
314
+ `;
315
+ if (this.href && !this.disabled) {
316
+ return html `
317
+ <a class="${this.variant} ${this.size} ${this.shape === 'rect' ? 'rect' : ''}" href=${this.href} target=${this.target || ''} part="button">
318
+ ${contentTemplate}
319
+ </a>
320
+ `;
321
+ }
322
+ return html `
323
+ <button class="${this.variant} ${this.size} ${this.shape === 'rect' ? 'rect' : ''}" type=${this.type} ?disabled=${this.disabled || this.loading} part="button">
324
+ ${contentTemplate}
287
325
  </button>
288
326
  `;
289
327
  }
290
328
  constructor() {
291
329
  super(...arguments);
292
- __runInitializers(this, _loading_extraInitializers);
330
+ __runInitializers(this, _target_extraInitializers);
293
331
  }
294
332
  static {
295
333
  __runInitializers(_classThis, _classExtraInitializers);
@@ -298,4 +336,4 @@ let IdpButton = (() => {
298
336
  return IdpButton = _classThis;
299
337
  })();
300
338
  export { IdpButton };
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWJ1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtYnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsYUFBYSxFQUNiLEdBQUcsR0FFSixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGVBQWUsQ0FBQztJQWFWLFNBQVM7NEJBRHJCLGFBQWEsQ0FBQyxZQUFZLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5QkFBbkIsU0FBUSxXQUFXOzs7O21DQWF2QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztpQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FHMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO21DQUcxQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQXBCM0MsMEtBQWdCLE9BQU8sNkJBQVAsT0FBTyx5RkFBZ0M7WUFHdkQsaUtBQWdCLElBQUksNkJBQUosSUFB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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWJ1dHRvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtYnV0dG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixRQUFRLEVBQ1IsYUFBYSxFQUNiLEdBQUcsR0FFSixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGVBQWUsQ0FBQztJQWFWLFNBQVM7NEJBRHJCLGFBQWEsQ0FBQyxZQUFZLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt5QkFBbkIsU0FBUSxXQUFXOzs7O21DQWF2QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztpQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2lDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FHMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dDQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO21DQUcxQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQ0FPMUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO2tDQUcxQixRQUFR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
@@ -9,6 +9,8 @@ declare global {
9
9
  export declare class IdpLandingHero extends DeesElement {
10
10
  static demo: () => TemplateResult<1>;
11
11
  static demoGroups: string[];
12
+ accessor claimHref: string;
13
+ accessor secondaryHref: string;
12
14
  static styles: import("@design.estate/dees-element").CSSResult[];
13
15
  render(): TemplateResult;
14
16
  }
@@ -32,7 +32,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
32
32
  }
33
33
  return useValue ? value : void 0;
34
34
  };
35
- import { DeesElement, html, customElement, css } from '@design.estate/dees-element';
35
+ import { DeesElement, html, customElement, css, property } from '@design.estate/dees-element';
36
36
  import { idpElementStyles } from './tokens.js';
37
37
  import './idp-button.js';
38
38
  import './idp-screenshot-placeholder.js';
@@ -42,16 +42,32 @@ let IdpLandingHero = (() => {
42
42
  let _classExtraInitializers = [];
43
43
  let _classThis;
44
44
  let _classSuper = DeesElement;
45
+ let _claimHref_decorators;
46
+ let _claimHref_initializers = [];
47
+ let _claimHref_extraInitializers = [];
48
+ let _secondaryHref_decorators;
49
+ let _secondaryHref_initializers = [];
50
+ let _secondaryHref_extraInitializers = [];
45
51
  var IdpLandingHero = class extends _classSuper {
46
52
  static { _classThis = this; }
47
53
  static {
48
54
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
55
+ _claimHref_decorators = [property({ type: String })];
56
+ _secondaryHref_decorators = [property({ type: String })];
57
+ __esDecorate(this, null, _claimHref_decorators, { kind: "accessor", name: "claimHref", static: false, private: false, access: { has: obj => "claimHref" in obj, get: obj => obj.claimHref, set: (obj, value) => { obj.claimHref = value; } }, metadata: _metadata }, _claimHref_initializers, _claimHref_extraInitializers);
58
+ __esDecorate(this, null, _secondaryHref_decorators, { kind: "accessor", name: "secondaryHref", static: false, private: false, access: { has: obj => "secondaryHref" in obj, get: obj => obj.secondaryHref, set: (obj, value) => { obj.secondaryHref = value; } }, metadata: _metadata }, _secondaryHref_initializers, _secondaryHref_extraInitializers);
49
59
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
50
60
  IdpLandingHero = _classThis = _classDescriptor.value;
51
61
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
52
62
  }
53
63
  static demo = () => html `<idp-landing-hero></idp-landing-hero>`;
54
64
  static demoGroups = ['idp.global v5 composed surfaces'];
65
+ #claimHref_accessor_storage = __runInitializers(this, _claimHref_initializers, '');
66
+ get claimHref() { return this.#claimHref_accessor_storage; }
67
+ set claimHref(value) { this.#claimHref_accessor_storage = value; }
68
+ #secondaryHref_accessor_storage = (__runInitializers(this, _claimHref_extraInitializers), __runInitializers(this, _secondaryHref_initializers, ''));
69
+ get secondaryHref() { return this.#secondaryHref_accessor_storage; }
70
+ set secondaryHref(value) { this.#secondaryHref_accessor_storage = value; }
55
71
  static styles = [
56
72
  ...idpElementStyles,
57
73
  css `
@@ -137,8 +153,8 @@ let IdpLandingHero = (() => {
137
153
  Anchored to Cardano, so it can never be erased or taken away.
138
154
  </p>
139
155
  <div class="hero-actions">
140
- <idp-button variant="accent" size="lg">Claim your identity</idp-button>
141
- <idp-button variant="link" size="lg">See how it works</idp-button>
156
+ <idp-button variant="accent" size="lg" href=${this.claimHref}>Claim your identity</idp-button>
157
+ <idp-button variant="link" size="lg" href=${this.secondaryHref}>See how it works</idp-button>
142
158
  </div>
143
159
  <div class="hero-fine">
144
160
  <span>MIT licensed</span><span>Self-hostable</span><span>No credit card</span><span>Cardano mainnet</span>
@@ -154,6 +170,10 @@ let IdpLandingHero = (() => {
154
170
  </section>
155
171
  `;
156
172
  }
173
+ constructor() {
174
+ super(...arguments);
175
+ __runInitializers(this, _secondaryHref_extraInitializers);
176
+ }
157
177
  static {
158
178
  __runInitializers(_classThis, _classExtraInitializers);
159
179
  }
@@ -161,4 +181,4 @@ let IdpLandingHero = (() => {
161
181
  return IdpLandingHero = _classThis;
162
182
  })();
163
183
  export { IdpLandingHero };
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWxhbmRpbmctaGVyby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtbGFuZGluZy1oZXJvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8saUNBQWlDLENBQUM7SUFTNUIsY0FBYzs0QkFEMUIsYUFBYSxDQUFDLGtCQUFrQixDQUFDOzs7O3NCQUNFLFdBQVc7OEJBQW5CLFNBQVEsV0FBVzs7OztZQUEvQyw2S0EyR0M7Ozs7UUExR1EsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUEsdUNBQXVDLENBQUM7UUFDaEUsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFFeEQsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzRUY7U0FDRixDQUFDO1FBRUssTUFBTTtZQUNYLE9BQU8sSUFBSSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJWLENBQUM7UUFDSixDQUFDOztZQTFHVSx1REFBYzs7Ozs7U0FBZCxjQUFjIn0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWxhbmRpbmctaGVyby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtbGFuZGluZy1oZXJvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLGlDQUFpQyxDQUFDO0lBUzVCLGNBQWM7NEJBRDFCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7OzhCQUFuQixTQUFRLFdBQVc7Ozs7cUNBSTVDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt5Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBRjNCLGdMQUFnQixTQUFTLDZCQUFULFNBQVMsNkZBQU07WUFHL0IsNExBQWdCLGFBQWEsNkJBQWIsYUFBYSxxR0FBTTtZQVJyQyw2S0FpSEM7Ozs7UUFoSFEsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUEsdUNBQXVDLENBQUM7UUFDaEUsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFHL0QsK0VBQTRCLEVBQUUsRUFBQztRQUEvQixJQUFnQixTQUFTLCtDQUFNO1FBQS9CLElBQWdCLFNBQVMscURBQU07UUFHL0IsK0lBQWdDLEVBQUUsR0FBQztRQUFuQyxJQUFnQixhQUFhLG1EQUFNO1FBQW5DLElBQWdCLGFBQWEseURBQU07UUFFNUIsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzRUY7U0FDRixDQUFDO1FBRUssTUFBTTtZQUNYLE9BQU8sSUFBSSxDQUFBOzs7Ozs7Ozs7OzBEQVUyQyxJQUFJLENBQUMsU0FBUzt3REFDaEIsSUFBSSxDQUFDLGFBQWE7Ozs7Ozs7Ozs7Ozs7O0tBY3JFLENBQUM7UUFDSixDQUFDOzs7Ozs7WUFoSFUsdURBQWM7Ozs7O1NBQWQsY0FBYyJ9
@@ -9,9 +9,23 @@ declare global {
9
9
  'idp-landing-page': IdpLandingPage;
10
10
  }
11
11
  }
12
+ export interface IIdpLandingLinks {
13
+ signIn: string;
14
+ claim: string;
15
+ docs: string;
16
+ github: string;
17
+ contact: string;
18
+ }
12
19
  export declare class IdpLandingPage extends DeesElement {
13
20
  static demo: () => TemplateResult<1>;
14
21
  static demoGroups: string[];
22
+ /**
23
+ * Real navigation targets for the page chrome. Consumers override any subset;
24
+ * labels without a link target stay presentational.
25
+ */
26
+ accessor links: Partial<IIdpLandingLinks>;
27
+ private getLinks;
28
+ private scrollToSection;
15
29
  static styles: import("@design.estate/dees-element").CSSResult[];
16
30
  private renderNav;
17
31
  private renderProof;
@@ -32,7 +32,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
32
32
  }
33
33
  return useValue ? value : void 0;
34
34
  };
35
- import { DeesElement, html, customElement, css } from '@design.estate/dees-element';
35
+ import { DeesElement, html, customElement, css, property } from '@design.estate/dees-element';
36
36
  import { idpElementStyles } from './tokens.js';
37
37
  import './idp-badge.js';
38
38
  import './idp-button.js';
@@ -45,16 +45,47 @@ let IdpLandingPage = (() => {
45
45
  let _classExtraInitializers = [];
46
46
  let _classThis;
47
47
  let _classSuper = DeesElement;
48
+ let _links_decorators;
49
+ let _links_initializers = [];
50
+ let _links_extraInitializers = [];
48
51
  var IdpLandingPage = class extends _classSuper {
49
52
  static { _classThis = this; }
50
53
  static {
51
54
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
55
+ _links_decorators = [property({ type: Object })];
56
+ __esDecorate(this, null, _links_decorators, { kind: "accessor", name: "links", static: false, private: false, access: { has: obj => "links" in obj, get: obj => obj.links, set: (obj, value) => { obj.links = value; } }, metadata: _metadata }, _links_initializers, _links_extraInitializers);
52
57
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
53
58
  IdpLandingPage = _classThis = _classDescriptor.value;
54
59
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
55
60
  }
56
61
  static demo = () => html `<idp-landing-page></idp-landing-page>`;
57
62
  static demoGroups = ['idp.global v5 full pages'];
63
+ #links_accessor_storage = __runInitializers(this, _links_initializers, {});
64
+ /**
65
+ * Real navigation targets for the page chrome. Consumers override any subset;
66
+ * labels without a link target stay presentational.
67
+ */
68
+ get links() { return this.#links_accessor_storage; }
69
+ set links(value) { this.#links_accessor_storage = value; }
70
+ getLinks() {
71
+ return {
72
+ signIn: 'https://idp.global/login',
73
+ claim: 'https://idp.global/register',
74
+ docs: 'https://about.idp.global/docs',
75
+ github: 'https://code.foss.global/idp.global/idp.global',
76
+ contact: 'mailto:hello@task.vc',
77
+ ...this.links,
78
+ };
79
+ }
80
+ scrollToSection(eventArg, sectionIdArg) {
81
+ eventArg.preventDefault();
82
+ if (sectionIdArg === 'product') {
83
+ // the product screenshot lives inside the hero's shadow root
84
+ this.shadowRoot?.querySelector('idp-landing-hero')?.scrollIntoView({ behavior: 'smooth', block: 'end' });
85
+ return;
86
+ }
87
+ this.shadowRoot?.getElementById(sectionIdArg)?.scrollIntoView({ behavior: 'smooth' });
88
+ }
58
89
  static styles = [
59
90
  ...idpElementStyles,
60
91
  css `
@@ -804,20 +835,26 @@ let IdpLandingPage = (() => {
804
835
  `,
805
836
  ];
806
837
  renderNav() {
838
+ const links = this.getLinks();
839
+ const sections = [
840
+ ['product', 'Product'],
841
+ ['features', 'Features'],
842
+ ['chain', 'On-chain'],
843
+ ['pricing', 'Pricing'],
844
+ ['developers', 'Developers'],
845
+ ];
807
846
  return html `
808
847
  <div class="nav-shell">
809
848
  <nav>
810
- <a class="logo" href="#">idp<span class="logo-dot"></span>global</a>
849
+ <a class="logo" href="#" @click=${(eventArg) => this.scrollToSection(eventArg, 'product')}>idp<span class="logo-dot"></span>global</a>
811
850
  <div class="nav-links">
812
- <a href="#product">Product</a>
813
- <a href="#features">Features</a>
814
- <a href="#chain">On-chain</a>
815
- <a href="#pricing">Pricing</a>
816
- <a href="#developers">Developers</a>
851
+ ${sections.map(([sectionId, label]) => html `
852
+ <a href="#${sectionId}" @click=${(eventArg) => this.scrollToSection(eventArg, sectionId)}>${label}</a>
853
+ `)}
817
854
  </div>
818
855
  <div class="actions">
819
- <a class="nav-signin">Sign in</a>
820
- <idp-button variant="accent" size="sm">Claim identity</idp-button>
856
+ <a class="nav-signin" href=${links.signIn}>Sign in</a>
857
+ <idp-button variant="accent" size="sm" href=${links.claim}>Claim identity</idp-button>
821
858
  </div>
822
859
  </nav>
823
860
  </div>
@@ -1006,6 +1043,7 @@ let IdpLandingPage = (() => {
1006
1043
  `;
1007
1044
  }
1008
1045
  renderPricing() {
1046
+ const links = this.getLinks();
1009
1047
  const tiers = [
1010
1048
  {
1011
1049
  name: 'Personal',
@@ -1021,6 +1059,7 @@ let IdpLandingPage = (() => {
1021
1059
  'Recovery via your other devices',
1022
1060
  ],
1023
1061
  cta: 'Claim your identity',
1062
+ ctaHref: links.claim,
1024
1063
  variant: 'tint',
1025
1064
  featured: false,
1026
1065
  },
@@ -1038,6 +1077,7 @@ let IdpLandingPage = (() => {
1038
1077
  'SSO & SCIM included, no upsell',
1039
1078
  ],
1040
1079
  cta: 'Start an organisation',
1080
+ ctaHref: links.claim,
1041
1081
  variant: 'accent',
1042
1082
  featured: true,
1043
1083
  },
@@ -1055,6 +1095,7 @@ let IdpLandingPage = (() => {
1055
1095
  'Priority engineering & SLA',
1056
1096
  ],
1057
1097
  cta: 'Talk to us',
1098
+ ctaHref: links.contact,
1058
1099
  variant: 'tint',
1059
1100
  featured: false,
1060
1101
  },
@@ -1079,7 +1120,7 @@ let IdpLandingPage = (() => {
1079
1120
  <div class="price">${tierArg.price}<span class="sub">${tierArg.sub}</span></div>
1080
1121
  <div class="price-note">${tierArg.note}</div>
1081
1122
  <ul class="tier-list">${tierArg.items.map((itemArg) => html `<li>${itemArg}</li>`)}</ul>
1082
- <idp-button variant=${tierArg.variant}>${tierArg.cta}</idp-button>
1123
+ <idp-button variant=${tierArg.variant} href=${tierArg.ctaHref}>${tierArg.cta}</idp-button>
1083
1124
  </div>
1084
1125
  `)}
1085
1126
  </div>
@@ -1103,8 +1144,8 @@ let IdpLandingPage = (() => {
1103
1144
  <p>One CLI. Standard OAuth 2 &amp; OIDC. Native SDKs for Node, Python, Swift, Kotlin, Go, Rust.</p>
1104
1145
  <div class="dev-tags">${tags.map((tagArg) => html `<span class="dev-tag">${tagArg}</span>`)}</div>
1105
1146
  <div class="dev-actions">
1106
- <idp-button variant="accent" icon="lucide:github">View on GitHub</idp-button>
1107
- <idp-button variant="link">Read the docs</idp-button>
1147
+ <idp-button variant="accent" icon="lucide:github" href=${this.getLinks().github}>View on GitHub</idp-button>
1148
+ <idp-button variant="link" href=${this.getLinks().docs}>Read the docs</idp-button>
1108
1149
  </div>
1109
1150
  </div>
1110
1151
  <div class="terminal">
@@ -1140,7 +1181,7 @@ let IdpLandingPage = (() => {
1140
1181
  }
1141
1182
  renderManifesto() {
1142
1183
  return html `
1143
- <section class="manifesto">
1184
+ <section class="manifesto" id="manifesto">
1144
1185
  <div class="wrap">
1145
1186
  <div class="eyebrow sm" style="margin-bottom: 24px;">Why we built this</div>
1146
1187
  <q>Identity should not be a product the user is sold. It should be a permanent <em>fact</em>, owned by the person it describes.</q>
@@ -1159,25 +1200,37 @@ let IdpLandingPage = (() => {
1159
1200
  we disappear.
1160
1201
  </p>
1161
1202
  <div class="cta-actions">
1162
- <idp-button variant="accent" size="lg">Claim your identity</idp-button>
1163
- <idp-button variant="link" size="lg">Read the manifesto</idp-button>
1203
+ <idp-button variant="accent" size="lg" href=${this.getLinks().claim}>Claim your identity</idp-button>
1204
+ <idp-button variant="link" size="lg" @click=${(eventArg) => this.scrollToSection(eventArg, 'manifesto')}>Read the manifesto</idp-button>
1164
1205
  </div>
1165
1206
  </div>
1166
1207
  </section>
1167
1208
  `;
1168
1209
  }
1169
1210
  renderFooter() {
1211
+ const links = this.getLinks();
1212
+ const labelHrefs = {
1213
+ Documentation: links.docs,
1214
+ 'API reference': links.docs,
1215
+ 'Self-hosting': links.docs,
1216
+ GitHub: links.github,
1217
+ };
1170
1218
  const cols = [
1171
1219
  ['Product', ['For individuals', 'For organisations', 'Enterprise', 'Cardano sync', 'Changelog']],
1172
1220
  ['Developers', ['Documentation', 'API reference', 'Self-hosting', 'SDKs', 'GitHub']],
1173
1221
  ['Company', ['Manifesto', 'Blog', 'Security', 'Privacy', 'Terms']],
1174
1222
  ];
1223
+ const renderFooterLink = (labelArg) => labelHrefs[labelArg]
1224
+ ? html `<a href=${labelHrefs[labelArg]}>${labelArg}</a>`
1225
+ : labelArg === 'Manifesto'
1226
+ ? html `<a href="#manifesto" @click=${(eventArg) => this.scrollToSection(eventArg, 'manifesto')}>${labelArg}</a>`
1227
+ : html `<a>${labelArg}</a>`;
1175
1228
  return html `
1176
1229
  <footer>
1177
1230
  <div class="wrap-wide">
1178
1231
  <div class="footer-cols">
1179
1232
  <div class="footer-brand">
1180
- <a class="logo" href="#">idp<span class="logo-dot"></span>global</a>
1233
+ <a class="logo" href="#" @click=${(eventArg) => this.scrollToSection(eventArg, 'product')}>idp<span class="logo-dot"></span>global</a>
1181
1234
  <p>
1182
1235
  An open identity provider for everyone — from individuals to enterprises. Anchored on Cardano. Built in
1183
1236
  the open. Yours forever.
@@ -1187,13 +1240,13 @@ let IdpLandingPage = (() => {
1187
1240
  ${cols.map((colArg) => html `
1188
1241
  <div class="footer-col">
1189
1242
  <h4>${colArg[0]}</h4>
1190
- <ul>${colArg[1].map((linkArg) => html `<li><a>${linkArg}</a></li>`)}</ul>
1243
+ <ul>${colArg[1].map((linkArg) => html `<li>${renderFooterLink(linkArg)}</li>`)}</ul>
1191
1244
  </div>
1192
1245
  `)}
1193
1246
  </div>
1194
1247
  <div class="footer-bottom">
1195
1248
  <span>© 2026 idp.global · MIT · Anchored to Cardano</span>
1196
- <span class="links"><a>Status</a><a>Twitter</a><a>GitHub</a><a>Discord</a></span>
1249
+ <span class="links"><a>Status</a><a href=${links.github}>GitHub</a></span>
1197
1250
  </div>
1198
1251
  </div>
1199
1252
  </footer>
@@ -1203,7 +1256,10 @@ let IdpLandingPage = (() => {
1203
1256
  return html `
1204
1257
  <div class="page">
1205
1258
  ${this.renderNav()}
1206
- <idp-landing-hero></idp-landing-hero>
1259
+ <idp-landing-hero
1260
+ claimHref=${this.getLinks().claim}
1261
+ secondaryHref=${this.getLinks().docs}
1262
+ ></idp-landing-hero>
1207
1263
  ${this.renderProof()}
1208
1264
  ${this.renderFeatures()}
1209
1265
  ${this.renderChain()}
@@ -1215,6 +1271,10 @@ let IdpLandingPage = (() => {
1215
1271
  </div>
1216
1272
  `;
1217
1273
  }
1274
+ constructor() {
1275
+ super(...arguments);
1276
+ __runInitializers(this, _links_extraInitializers);
1277
+ }
1218
1278
  static {
1219
1279
  __runInitializers(_classThis, _classExtraInitializers);
1220
1280
  }
@@ -1222,4 +1282,4 @@ let IdpLandingPage = (() => {
1222
1282
  return IdpLandingPage = _classThis;
1223
1283
  })();
1224
1284
  export { IdpLandingPage };
1225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLHVCQUF1QixDQUFDO0lBU2xCLGNBQWM7NEJBRDFCLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQzs7OztzQkFDRSxXQUFXOzhCQUFuQixTQUFRLFdBQVc7Ozs7WUFBL0MsNktBOHBDQzs7OztRQTdwQ1EsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUEsdUNBQXVDLENBQUM7UUFDaEUsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFakQsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixHQUFHLGdCQUFnQjtZQUNuQixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWxhbmRpbmctcGFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtbGFuZGluZy1wYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8saUNBQWlDLENBQUM7QUFDekMsT0FBTyx1QkFBdUIsQ0FBQztJQWlCbEIsY0FBYzs0QkFEMUIsYUFBYSxDQUFDLGtCQUFrQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7OEJBQW5CLFNBQVEsV0FBVzs7OztpQ0FRNUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzNCLG9LQUFnQixLQUFLLDZCQUFMLEtBQUsscUZBQWlDO1lBVHhELDZLQXN0Q0M7Ozs7UUFydENRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBLHVDQUF1QyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBT3hELHVFQUFtRCxFQUFFLEVBQUM7UUFMdEQ7OztXQUdHO1FBRUgsSUFBZ0IsS0FBSywyQ0FBaUM7UUFBdEQsSUFBZ0IsS0FBSyxpREFBaUM7UUFFOUMsUUFBUTtZQUNkLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLDBCQUEwQjtnQkFDbEMsS0FBSyxFQUFFLDZCQUE2QjtnQkFDcEMsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsTUFBTSxFQUFFLGdEQUFnRDtn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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idp.global/catalog",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "private": false,
5
5
  "description": "Web component catalog for idp.global, based on the v5 Apple-system design language.",
6
6
  "exports": {
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/catalog',
6
- version: '2.1.1',
6
+ version: '2.2.0',
7
7
  description: 'Web component catalog for idp.global, based on the v5 Apple-system design language.'
8
8
  }
@@ -57,6 +57,16 @@ export class IdpButton extends DeesElement {
57
57
  @property({ type: Boolean, reflect: true })
58
58
  public accessor loading = false;
59
59
 
60
+ /**
61
+ * When set, the button renders as a real anchor so it works as a link
62
+ * (new-tab, middle-click, crawlers) without any host-side click wiring.
63
+ */
64
+ @property({ type: String })
65
+ public accessor href = '';
66
+
67
+ @property({ type: String })
68
+ public accessor target = '';
69
+
60
70
  public static styles = [
61
71
  ...idpElementStyles,
62
72
  css`
@@ -69,10 +79,12 @@ export class IdpButton extends DeesElement {
69
79
  :host([block]) {
70
80
  display: block;
71
81
  }
72
- :host([block]) button {
82
+ :host([block]) button,
83
+ :host([block]) a {
73
84
  width: 100%;
74
85
  }
75
- button {
86
+ button,
87
+ a {
76
88
  display: inline-flex;
77
89
  align-items: center;
78
90
  justify-content: center;
@@ -87,10 +99,16 @@ export class IdpButton extends DeesElement {
87
99
  cursor: pointer;
88
100
  transition: background 120ms ease, color 120ms ease, border-color 120ms ease, transform 80ms ease;
89
101
  }
90
- button:active:not(:disabled) {
102
+ a {
103
+ text-decoration: none;
104
+ box-sizing: border-box;
105
+ }
106
+ button:active:not(:disabled),
107
+ a:active {
91
108
  transform: translateY(1px);
92
109
  }
93
- button:focus-visible {
110
+ button:focus-visible,
111
+ a:focus-visible {
94
112
  outline: 2px solid color-mix(in srgb, var(--idp-accent), transparent 68%);
95
113
  outline-offset: 2px;
96
114
  }
@@ -212,12 +230,22 @@ export class IdpButton extends DeesElement {
212
230
  ];
213
231
 
214
232
  public render(): TemplateResult {
233
+ const contentTemplate = html`
234
+ ${this.loading
235
+ ? html`<span class="spinner" aria-hidden="true"></span>`
236
+ : this.icon ? html`<idp-icon name=${this.icon as any} size="14"></idp-icon>` : html``}
237
+ <slot></slot>
238
+ `;
239
+ if (this.href && !this.disabled) {
240
+ return html`
241
+ <a class="${this.variant} ${this.size} ${this.shape === 'rect' ? 'rect' : ''}" href=${this.href} target=${this.target || ''} part="button">
242
+ ${contentTemplate}
243
+ </a>
244
+ `;
245
+ }
215
246
  return html`
216
247
  <button class="${this.variant} ${this.size} ${this.shape === 'rect' ? 'rect' : ''}" type=${this.type} ?disabled=${this.disabled || this.loading} part="button">
217
- ${this.loading
218
- ? html`<span class="spinner" aria-hidden="true"></span>`
219
- : this.icon ? html`<idp-icon name=${this.icon as any} size="14"></idp-icon>` : html``}
220
- <slot></slot>
248
+ ${contentTemplate}
221
249
  </button>
222
250
  `;
223
251
  }