@affinda/wc 0.0.1

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 (97) hide show
  1. package/dist/affinda/af-badge.af-button.af-card.af-icon-button.af-input.entry.esm.js.map +1 -0
  2. package/dist/affinda/affinda.css +1 -0
  3. package/dist/affinda/affinda.esm.js +2 -0
  4. package/dist/affinda/affinda.esm.js.map +1 -0
  5. package/dist/affinda/index.esm.js +2 -0
  6. package/dist/affinda/index.esm.js.map +1 -0
  7. package/dist/affinda/loader.esm.js.map +1 -0
  8. package/dist/affinda/p-bca10492.entry.js +2 -0
  9. package/dist/affinda/p-bca10492.entry.js.map +1 -0
  10. package/dist/affinda/p-o0tfWqnY.js +3 -0
  11. package/dist/affinda/p-o0tfWqnY.js.map +1 -0
  12. package/dist/cjs/af-badge.af-button.af-card.af-icon-button.af-input.entry.cjs.js.map +1 -0
  13. package/dist/cjs/af-badge_5.cjs.entry.js +13 -0
  14. package/dist/cjs/affinda.cjs.js +25 -0
  15. package/dist/cjs/affinda.cjs.js.map +1 -0
  16. package/dist/cjs/index-5BGpYleS.js +1413 -0
  17. package/dist/cjs/index-5BGpYleS.js.map +1 -0
  18. package/dist/cjs/index.cjs.js +139 -0
  19. package/dist/cjs/index.cjs.js.map +1 -0
  20. package/dist/cjs/loader.cjs.js +13 -0
  21. package/dist/cjs/loader.cjs.js.map +1 -0
  22. package/dist/collection/collection-manifest.json +16 -0
  23. package/dist/collection/components/af-badge/af-badge.css +29 -0
  24. package/dist/collection/components/af-badge/af-badge.js +47 -0
  25. package/dist/collection/components/af-badge/af-badge.js.map +1 -0
  26. package/dist/collection/components/af-button/af-button.css +74 -0
  27. package/dist/collection/components/af-button/af-button.js +149 -0
  28. package/dist/collection/components/af-button/af-button.js.map +1 -0
  29. package/dist/collection/components/af-card/af-card.css +69 -0
  30. package/dist/collection/components/af-card/af-card.js +70 -0
  31. package/dist/collection/components/af-card/af-card.js.map +1 -0
  32. package/dist/collection/components/af-icon-button/af-icon-button.css +70 -0
  33. package/dist/collection/components/af-icon-button/af-icon-button.js +145 -0
  34. package/dist/collection/components/af-icon-button/af-icon-button.js.map +1 -0
  35. package/dist/collection/components/af-input/af-input.css +57 -0
  36. package/dist/collection/components/af-input/af-input.js +193 -0
  37. package/dist/collection/components/af-input/af-input.js.map +1 -0
  38. package/dist/collection/components.js +6 -0
  39. package/dist/collection/components.js.map +1 -0
  40. package/dist/collection/index.js +2 -0
  41. package/dist/collection/index.js.map +1 -0
  42. package/dist/components/af-badge.d.ts +11 -0
  43. package/dist/components/af-badge.js +9 -0
  44. package/dist/components/af-badge.js.map +1 -0
  45. package/dist/components/af-button.d.ts +11 -0
  46. package/dist/components/af-button.js +9 -0
  47. package/dist/components/af-button.js.map +1 -0
  48. package/dist/components/af-card.d.ts +11 -0
  49. package/dist/components/af-card.js +9 -0
  50. package/dist/components/af-card.js.map +1 -0
  51. package/dist/components/af-icon-button.d.ts +11 -0
  52. package/dist/components/af-icon-button.js +9 -0
  53. package/dist/components/af-icon-button.js.map +1 -0
  54. package/dist/components/af-input.d.ts +11 -0
  55. package/dist/components/af-input.js +9 -0
  56. package/dist/components/af-input.js.map +1 -0
  57. package/dist/components/index.d.ts +33 -0
  58. package/dist/components/index.js +9 -0
  59. package/dist/components/index.js.map +1 -0
  60. package/dist/components/p-B7I93sz2.js +39 -0
  61. package/dist/components/p-B7I93sz2.js.map +1 -0
  62. package/dist/components/p-CZd1ieht.js +62 -0
  63. package/dist/components/p-CZd1ieht.js.map +1 -0
  64. package/dist/components/p-D6PwARU0.js +59 -0
  65. package/dist/components/p-D6PwARU0.js.map +1 -0
  66. package/dist/components/p-DOtgsZRB.js +1209 -0
  67. package/dist/components/p-DOtgsZRB.js.map +1 -0
  68. package/dist/components/p-DZIXhvI0.js +44 -0
  69. package/dist/components/p-DZIXhvI0.js.map +1 -0
  70. package/dist/components/p-zIKPa48S.js +62 -0
  71. package/dist/components/p-zIKPa48S.js.map +1 -0
  72. package/dist/esm/af-badge.af-button.af-card.af-icon-button.af-input.entry.js.map +1 -0
  73. package/dist/esm/af-badge_5.entry.js +3 -0
  74. package/dist/esm/affinda.js +21 -0
  75. package/dist/esm/affinda.js.map +1 -0
  76. package/dist/esm/index-o0tfWqnY.js +1405 -0
  77. package/dist/esm/index-o0tfWqnY.js.map +1 -0
  78. package/dist/esm/index.js +133 -0
  79. package/dist/esm/index.js.map +1 -0
  80. package/dist/esm/loader.js +11 -0
  81. package/dist/esm/loader.js.map +1 -0
  82. package/dist/index.cjs.js +1 -0
  83. package/dist/index.js +1 -0
  84. package/dist/types/components/af-badge/af-badge.d.ts +5 -0
  85. package/dist/types/components/af-button/af-button.d.ts +15 -0
  86. package/dist/types/components/af-card/af-card.d.ts +7 -0
  87. package/dist/types/components/af-icon-button/af-icon-button.d.ts +15 -0
  88. package/dist/types/components/af-input/af-input.d.ts +24 -0
  89. package/dist/types/components.d.ts +311 -0
  90. package/dist/types/index.d.ts +1 -0
  91. package/dist/types/stencil-public-runtime.d.ts +1756 -0
  92. package/loader/cdn.js +1 -0
  93. package/loader/index.cjs.js +1 -0
  94. package/loader/index.d.ts +24 -0
  95. package/loader/index.es2017.js +1 -0
  96. package/loader/index.js +2 -0
  97. package/package.json +27 -0
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-5BGpYleS.js');
4
+
5
+ const afButtonCss = ":host{display:inline-block}button{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--af-space-2);font:var(--af-font-weight-semibold) var(--af-size-font-md) / 1 var(--af-font-family-sans);border-radius:var(--af-radius-md);padding:var(--af-space-2) var(--af-space-4);border:none;cursor:pointer;transition:transform 120ms ease, box-shadow 160ms ease;box-shadow:0 8px 20px rgba(124, 58, 237, 0.18)}button:is(:hover,:focus-visible){transform:translateY(-1px);box-shadow:0 12px 24px rgba(124, 58, 237, 0.24)}button:active{transform:translateY(0);box-shadow:0 6px 16px rgba(124, 58, 237, 0.16)}button:disabled{cursor:not-allowed;opacity:0.6;transform:none;box-shadow:none}button.variant-primary{background:linear-gradient(135deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));color:var(--af-color-fg-inverse)}button.variant-secondary{background:var(--af-color-bg-subtle);color:var(--af-color-fg-default);box-shadow:inset 0 0 0 1px rgba(18, 15, 31, 0.08)}button.variant-ghost{background:transparent;color:var(--af-color-brand-primary-500);box-shadow:inset 0 0 0 1px rgba(124, 58, 237, 0.3)}button.size-lg{padding:calc(var(--af-space-3)) calc(var(--af-space-4) + 4px);font-size:var(--af-size-font-lg)}button .spinner{position:absolute;inset:0;border-radius:inherit;background:radial-gradient(circle at center, rgba(255, 255, 255, 0.18), transparent 55%);opacity:0;transition:opacity 120ms ease}button.is-loading .spinner{opacity:1}button.is-loading .content{opacity:0.6}";
6
+
7
+ const AfButton = class {
8
+ constructor(hostRef) {
9
+ index.registerInstance(this, hostRef);
10
+ this.afClick = index.createEvent(this, "afClick");
11
+ /** Visual style of the button */
12
+ this.variant = 'primary';
13
+ /** Size of the button */
14
+ this.size = 'md';
15
+ /** Disabled state */
16
+ this.disabled = false;
17
+ /** Loading state */
18
+ this.loading = false;
19
+ this.handleClick = (event) => {
20
+ if (this.disabled || this.loading) {
21
+ event.preventDefault();
22
+ event.stopPropagation();
23
+ return;
24
+ }
25
+ this.afClick.emit(event);
26
+ };
27
+ }
28
+ render() {
29
+ const classes = {
30
+ [`variant-${this.variant}`]: true,
31
+ [`size-${this.size}`]: true,
32
+ 'is-loading': this.loading
33
+ };
34
+ return (index.h("button", { key: '11e06f0158591b7aaf60633fa12e91a2904d2f57', class: classes, part: "base", disabled: this.disabled || this.loading, onClick: this.handleClick }, index.h("span", { key: 'bdea09a13233b2e9c682e3c0a3d02fc8fe791668', class: "spinner", part: "spinner", "aria-hidden": !this.loading }), index.h("span", { key: '24a80ba696aecacda181203379345b28e741583c', class: "content", part: "label" }, index.h("slot", { key: 'bdd3731c9c98091503e1c87a7fe940bb72579d27' }))));
35
+ }
36
+ };
37
+ AfButton.style = afButtonCss;
38
+
39
+ const afBadgeCss = ":host{display:inline-block}span{display:inline-flex;align-items:center;justify-content:center;padding:2px var(--af-space-2);border-radius:var(--af-radius-pill);font:var(--af-font-weight-semibold) var(--af-size-font-sm) / 1 var(--af-font-family-sans);letter-spacing:0.02em;text-transform:uppercase}span.tone-brand{background:rgba(124, 58, 237, 0.12);color:var(--af-color-brand-primary-500)}span.tone-neutral{background:rgba(18, 15, 31, 0.1);color:var(--af-color-fg-default)}span.tone-success{background:rgba(16, 185, 129, 0.12);color:#0f766e}";
40
+
41
+ const AfBadge = class {
42
+ constructor(hostRef) {
43
+ index.registerInstance(this, hostRef);
44
+ /** Color theme of the badge */
45
+ this.tone = 'brand';
46
+ }
47
+ render() {
48
+ return (index.h("span", { key: '1f9d4015b429e012eade75e331c991d5c785482d', class: `tone-${this.tone}`, part: "base" }, index.h("slot", { key: 'b69b37a3e996c43cb16d04d829232d9539f45e06' })));
49
+ }
50
+ };
51
+ AfBadge.style = afBadgeCss;
52
+
53
+ const afIconButtonCss = ":host{display:inline-flex}button{--button-size-sm:36px;--button-size-md:44px;width:var(--button-size-md);height:var(--button-size-md);border-radius:50%;border:none;display:inline-flex;align-items:center;justify-content:center;background:transparent;color:var(--af-color-brand-primary-500);cursor:pointer;transition:transform 120ms ease, box-shadow 160ms ease, background-color 160ms ease;box-shadow:none}button.size-sm{width:var(--button-size-sm);height:var(--button-size-sm)}button:disabled{cursor:not-allowed;opacity:0.5;box-shadow:none}button.variant-solid{background:linear-gradient(135deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));color:var(--af-color-fg-inverse);box-shadow:0 10px 24px rgba(124, 58, 237, 0.24)}button.variant-soft{background:rgba(124, 58, 237, 0.14);color:var(--af-color-brand-primary-500)}button.variant-ghost{border:1px solid rgba(124, 58, 237, 0.4);background:transparent}button:is(:hover,:focus-visible){transform:translateY(-1px);box-shadow:0 14px 30px rgba(124, 58, 237, 0.28)}button:active{transform:translateY(0);box-shadow:0 8px 18px rgba(124, 58, 237, 0.2)}.icon{display:inline-flex;align-items:center;justify-content:center;width:1.5em;height:1.5em}:host([disabled]) button{transform:none;box-shadow:none}";
54
+
55
+ const AfIconButton = class {
56
+ constructor(hostRef) {
57
+ index.registerInstance(this, hostRef);
58
+ this.afClick = index.createEvent(this, "afClick");
59
+ /** Visual style of the icon button */
60
+ this.variant = 'solid';
61
+ /** Size preset */
62
+ this.size = 'md';
63
+ /** Disabled state */
64
+ this.disabled = false;
65
+ this.onClick = (event) => {
66
+ if (this.disabled) {
67
+ event.preventDefault();
68
+ event.stopPropagation();
69
+ return;
70
+ }
71
+ this.afClick.emit(event);
72
+ };
73
+ }
74
+ render() {
75
+ const classes = {
76
+ [`variant-${this.variant}`]: true,
77
+ [`size-${this.size}`]: true
78
+ };
79
+ return (index.h("button", { key: '0f63eddac5f4dab95835506b896e437218aa50e1', type: "button", class: classes, part: "base", disabled: this.disabled, "aria-label": this.label, onClick: this.onClick }, index.h("span", { key: '6400064df3b666cbcc0a4a51523f1cd08dcbe81a', part: "icon", class: "icon" }, index.h("slot", { key: 'a74fff21c0a3af05da37b12e45db8ca8913bbdea' }))));
80
+ }
81
+ };
82
+ AfIconButton.style = afIconButtonCss;
83
+
84
+ const afCardCss = ":host{display:block}article{position:relative;border-radius:var(--af-radius-md);background:var(--af-color-bg-surface);color:var(--af-color-fg-default);padding:calc(var(--af-space-4) * 1.5);box-shadow:none;border:1px solid rgba(18, 15, 31, 0.06);transition:box-shadow 160ms ease, transform 160ms ease;display:block;overflow:hidden}article.variant-elevated{box-shadow:0 18px 36px rgba(47, 22, 94, 0.18);border:none}article:hover{transform:translateY(-2px);box-shadow:0 24px 44px rgba(47, 22, 94, 0.24)}.accent{position:absolute;inset:0;width:6px;left:0;right:auto;background:linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600))}article.accent-brand .accent{background:linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600))}article.accent-success .accent{background:linear-gradient(180deg, #22c55e, #16a34a)}article.accent-neutral .accent{background:rgba(18, 15, 31, 0.18)}.content{margin-left:12px;display:grid;gap:var(--af-space-3)}.header:empty,.footer:empty{display:none}.header ::slotted(*){font-size:1.125rem;font-weight:var(--af-font-weight-semibold)}.footer ::slotted(*){display:inline-flex;gap:var(--af-space-2);align-items:center}";
85
+
86
+ const AfCard = class {
87
+ constructor(hostRef) {
88
+ index.registerInstance(this, hostRef);
89
+ /** Visual style of the card */
90
+ this.variant = 'surface';
91
+ }
92
+ render() {
93
+ const classes = {
94
+ [`variant-${this.variant}`]: true,
95
+ [`accent-${this.accent}`]: Boolean(this.accent)
96
+ };
97
+ return (index.h("article", { key: '6341b7150eb902027923228343dd017fee6aef32', class: classes, part: "base" }, this.accent ? index.h("span", { class: "accent", part: "accent", "aria-hidden": "true" }) : null, index.h("div", { key: '06256637c0e9e3a150b59fbc6f73d5b2867729ad', class: "content", part: "content" }, index.h("header", { key: '8f8c893d528cece13d1e9de7115b490a5ed84c88', class: "header", part: "header" }, index.h("slot", { key: 'b404fcc38918bb952678d78c035e9e7ad6e797ef', name: "header" })), index.h("div", { key: '2028736e547446fe12469cf74aec97daf6e3f10a', class: "body", part: "body" }, index.h("slot", { key: 'a2110bc4cfa174e4514d572d7a9cd28652c7da9a' })), index.h("footer", { key: '221a8202625e2794846ff7d68af45f9046fcfe58', class: "footer", part: "footer" }, index.h("slot", { key: 'b20d0e41962dbe766116845e2ef20c68003be7a7', name: "footer" })))));
98
+ }
99
+ };
100
+ AfCard.style = afCardCss;
101
+
102
+ const afInputCss = ":host{display:block;font-family:var(--af-font-family-sans)}label{display:grid;gap:var(--af-space-2);color:var(--af-color-fg-default)}.label{font-size:0.95rem;font-weight:var(--af-font-weight-semibold)}.control{position:relative}input{width:100%;padding:calc(var(--af-space-2) + 2px) calc(var(--af-space-4) + 8px);border-radius:var(--af-radius-md);border:1px solid rgba(18, 15, 31, 0.18);background:rgba(255, 255, 255, 0.9);color:inherit;font:inherit;transition:border-color 160ms ease, box-shadow 160ms ease;box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.6)}input::placeholder{color:var(--af-color-fg-muted);opacity:0.8}input:focus-visible{outline:none;border-color:var(--af-color-brand-primary-500);box-shadow:0 0 0 4px rgba(124, 58, 237, 0.18)}label.disabled{opacity:0.55;cursor:not-allowed}input:disabled{background:rgba(241, 240, 247, 0.7);cursor:not-allowed}.description{font-size:0.825rem;color:var(--af-color-fg-muted)}";
103
+
104
+ let inputIds = 0;
105
+ const AfInput = class {
106
+ constructor(hostRef) {
107
+ index.registerInstance(this, hostRef);
108
+ this.afInput = index.createEvent(this, "afInput");
109
+ this.afChange = index.createEvent(this, "afChange");
110
+ this.inputId = `af-input-${++inputIds}`;
111
+ this.descriptionId = `${this.inputId}-desc`;
112
+ /** Input type attribute */
113
+ this.type = 'text';
114
+ /** Current value (mutable so the component stays in sync) */
115
+ this.value = '';
116
+ /** Disabled state */
117
+ this.disabled = false;
118
+ this.handleInput = (event) => {
119
+ const target = event.target;
120
+ this.value = target.value;
121
+ this.afInput.emit(this.value);
122
+ };
123
+ this.handleChange = () => {
124
+ this.afChange.emit(this.value);
125
+ };
126
+ }
127
+ render() {
128
+ const describedBy = this.description ? this.descriptionId : undefined;
129
+ return (index.h("label", { key: 'd14267dee125c07311c07bc31f0151448095dba6', part: "label", class: { disabled: this.disabled }, htmlFor: this.inputId }, this.label ? (index.h("span", { class: "label", part: "label-text" }, this.label)) : null, index.h("div", { key: 'd3b6428100e25c981650f5faa23df549d587ac10', class: "control" }, index.h("input", { key: '9e26981c32775b79ce9c3458a4890968fab04ef6', part: "field", id: this.inputId, type: this.type, placeholder: this.placeholder, value: this.value, disabled: this.disabled, "aria-describedby": describedBy, onInput: this.handleInput, onChange: this.handleChange })), this.description ? (index.h("p", { id: this.descriptionId, class: "description", part: "description" }, this.description)) : null));
130
+ }
131
+ };
132
+ AfInput.style = afInputCss;
133
+
134
+ exports.AfBadge = AfBadge;
135
+ exports.AfButton = AfButton;
136
+ exports.AfCard = AfCard;
137
+ exports.AfIconButton = AfIconButton;
138
+ exports.AfInput = AfInput;
139
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["src/components/af-button/af-button.css?tag=af-button&encapsulation=shadow","src/components/af-button/af-button.tsx","src/components/af-badge/af-badge.css?tag=af-badge&encapsulation=shadow","src/components/af-badge/af-badge.tsx","src/components/af-icon-button/af-icon-button.css?tag=af-icon-button&encapsulation=shadow","src/components/af-icon-button/af-icon-button.tsx","src/components/af-card/af-card.css?tag=af-card&encapsulation=shadow","src/components/af-card/af-card.tsx","src/components/af-input/af-input.css?tag=af-input&encapsulation=shadow","src/components/af-input/af-input.tsx"],"sourcesContent":[":host {\n display: inline-block;\n}\n\nbutton {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--af-space-2);\n font: var(--af-font-weight-semibold) var(--af-size-font-md) / 1 var(--af-font-family-sans);\n border-radius: var(--af-radius-md);\n padding: var(--af-space-2) var(--af-space-4);\n border: none;\n cursor: pointer;\n transition: transform 120ms ease, box-shadow 160ms ease;\n box-shadow: 0 8px 20px rgba(124, 58, 237, 0.18);\n}\n\nbutton:is(:hover, :focus-visible) {\n transform: translateY(-1px);\n box-shadow: 0 12px 24px rgba(124, 58, 237, 0.24);\n}\n\nbutton:active {\n transform: translateY(0);\n box-shadow: 0 6px 16px rgba(124, 58, 237, 0.16);\n}\n\nbutton:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n transform: none;\n box-shadow: none;\n}\n\nbutton.variant-primary {\n background: linear-gradient(135deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));\n color: var(--af-color-fg-inverse);\n}\n\nbutton.variant-secondary {\n background: var(--af-color-bg-subtle);\n color: var(--af-color-fg-default);\n box-shadow: inset 0 0 0 1px rgba(18, 15, 31, 0.08);\n}\n\nbutton.variant-ghost {\n background: transparent;\n color: var(--af-color-brand-primary-500);\n box-shadow: inset 0 0 0 1px rgba(124, 58, 237, 0.3);\n}\n\nbutton.size-lg {\n padding: calc(var(--af-space-3)) calc(var(--af-space-4) + 4px);\n font-size: var(--af-size-font-lg);\n}\n\nbutton .spinner {\n position: absolute;\n inset: 0;\n border-radius: inherit;\n background: radial-gradient(circle at center, rgba(255, 255, 255, 0.18), transparent 55%);\n opacity: 0;\n transition: opacity 120ms ease;\n}\n\nbutton.is-loading .spinner {\n opacity: 1;\n}\n\nbutton.is-loading .content {\n opacity: 0.6;\n}\n","import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-button',\n styleUrl: 'af-button.css',\n shadow: true\n})\nexport class AfButton {\n /** Visual style of the button */\n @Prop() variant: 'primary' | 'secondary' | 'ghost' = 'primary';\n\n /** Size of the button */\n @Prop() size: 'md' | 'lg' = 'md';\n\n /** Disabled state */\n @Prop({ reflect: true }) disabled = false;\n\n /** Loading state */\n @Prop({ reflect: true }) loading = false;\n\n /** Fired when the button is clicked while enabled */\n @Event() afClick!: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.afClick.emit(event);\n };\n\n render() {\n const classes = {\n [`variant-${this.variant}`]: true,\n [`size-${this.size}`]: true,\n 'is-loading': this.loading\n };\n\n return (\n <button\n class={classes}\n part=\"base\"\n disabled={this.disabled || this.loading}\n onClick={this.handleClick}\n >\n <span class=\"spinner\" part=\"spinner\" aria-hidden={!this.loading}></span>\n <span class=\"content\" part=\"label\">\n <slot />\n </span>\n </button>\n );\n }\n}\n",":host {\n display: inline-block;\n}\n\nspan {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px var(--af-space-2);\n border-radius: var(--af-radius-pill);\n font: var(--af-font-weight-semibold) var(--af-size-font-sm) / 1 var(--af-font-family-sans);\n letter-spacing: 0.02em;\n text-transform: uppercase;\n}\n\nspan.tone-brand {\n background: rgba(124, 58, 237, 0.12);\n color: var(--af-color-brand-primary-500);\n}\n\nspan.tone-neutral {\n background: rgba(18, 15, 31, 0.1);\n color: var(--af-color-fg-default);\n}\n\nspan.tone-success {\n background: rgba(16, 185, 129, 0.12);\n color: #0f766e;\n}\n","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-badge',\n styleUrl: 'af-badge.css',\n shadow: true\n})\nexport class AfBadge {\n /** Color theme of the badge */\n @Prop() tone: 'brand' | 'neutral' | 'success' = 'brand';\n\n render() {\n return (\n <span class={`tone-${this.tone}`} part=\"base\">\n <slot />\n </span>\n );\n }\n}\n",":host {\n display: inline-flex;\n}\n\nbutton {\n --button-size-sm: 36px;\n --button-size-md: 44px;\n width: var(--button-size-md);\n height: var(--button-size-md);\n border-radius: 50%;\n border: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: transparent;\n color: var(--af-color-brand-primary-500);\n cursor: pointer;\n transition: transform 120ms ease, box-shadow 160ms ease, background-color 160ms ease;\n box-shadow: none;\n}\n\nbutton.size-sm {\n width: var(--button-size-sm);\n height: var(--button-size-sm);\n}\n\nbutton:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n box-shadow: none;\n}\n\nbutton.variant-solid {\n background: linear-gradient(135deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));\n color: var(--af-color-fg-inverse);\n box-shadow: 0 10px 24px rgba(124, 58, 237, 0.24);\n}\n\nbutton.variant-soft {\n background: rgba(124, 58, 237, 0.14);\n color: var(--af-color-brand-primary-500);\n}\n\nbutton.variant-ghost {\n border: 1px solid rgba(124, 58, 237, 0.4);\n background: transparent;\n}\n\nbutton:is(:hover, :focus-visible) {\n transform: translateY(-1px);\n box-shadow: 0 14px 30px rgba(124, 58, 237, 0.28);\n}\n\nbutton:active {\n transform: translateY(0);\n box-shadow: 0 8px 18px rgba(124, 58, 237, 0.2);\n}\n\n.icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 1.5em;\n height: 1.5em;\n}\n\n:host([disabled]) button {\n transform: none;\n box-shadow: none;\n}\n","import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-icon-button',\n styleUrl: 'af-icon-button.css',\n shadow: true\n})\nexport class AfIconButton {\n /** Visual style of the icon button */\n @Prop() variant: 'solid' | 'soft' | 'ghost' = 'solid';\n\n /** Size preset */\n @Prop() size: 'sm' | 'md' = 'md';\n\n /** Accessible label text */\n @Prop() label?: string;\n\n /** Disabled state */\n @Prop({ reflect: true }) disabled = false;\n\n /** Raised when the button is activated */\n @Event() afClick!: EventEmitter<MouseEvent>;\n\n private onClick = (event: MouseEvent) => {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.afClick.emit(event);\n };\n\n render() {\n const classes = {\n [`variant-${this.variant}`]: true,\n [`size-${this.size}`]: true\n };\n\n return (\n <button\n type=\"button\"\n class={classes}\n part=\"base\"\n disabled={this.disabled}\n aria-label={this.label}\n onClick={this.onClick}\n >\n <span part=\"icon\" class=\"icon\">\n <slot />\n </span>\n </button>\n );\n }\n}\n",":host {\n display: block;\n}\n\narticle {\n position: relative;\n border-radius: var(--af-radius-md);\n background: var(--af-color-bg-surface);\n color: var(--af-color-fg-default);\n padding: calc(var(--af-space-4) * 1.5);\n box-shadow: none;\n border: 1px solid rgba(18, 15, 31, 0.06);\n transition: box-shadow 160ms ease, transform 160ms ease;\n display: block;\n overflow: hidden;\n}\n\narticle.variant-elevated {\n box-shadow: 0 18px 36px rgba(47, 22, 94, 0.18);\n border: none;\n}\n\narticle:hover {\n transform: translateY(-2px);\n box-shadow: 0 24px 44px rgba(47, 22, 94, 0.24);\n}\n\n.accent {\n position: absolute;\n inset: 0;\n width: 6px;\n left: 0;\n right: auto;\n background: linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));\n}\n\narticle.accent-brand .accent {\n background: linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));\n}\n\narticle.accent-success .accent {\n background: linear-gradient(180deg, #22c55e, #16a34a);\n}\n\narticle.accent-neutral .accent {\n background: rgba(18, 15, 31, 0.18);\n}\n\n.content {\n margin-left: 12px;\n display: grid;\n gap: var(--af-space-3);\n}\n\n.header:empty,\n.footer:empty {\n display: none;\n}\n\n.header ::slotted(*) {\n font-size: 1.125rem;\n font-weight: var(--af-font-weight-semibold);\n}\n\n.footer ::slotted(*) {\n display: inline-flex;\n gap: var(--af-space-2);\n align-items: center;\n}\n","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-card',\n styleUrl: 'af-card.css',\n shadow: true\n})\nexport class AfCard {\n /** Visual style of the card */\n @Prop() variant: 'surface' | 'elevated' = 'surface';\n\n /** Optional accent colour strip */\n @Prop() accent?: 'brand' | 'success' | 'neutral';\n\n render() {\n const classes = {\n [`variant-${this.variant}`]: true,\n [`accent-${this.accent}`]: Boolean(this.accent)\n };\n\n return (\n <article class={classes} part=\"base\">\n {this.accent ? <span class=\"accent\" part=\"accent\" aria-hidden=\"true\"></span> : null}\n <div class=\"content\" part=\"content\">\n <header class=\"header\" part=\"header\">\n <slot name=\"header\"></slot>\n </header>\n <div class=\"body\" part=\"body\">\n <slot></slot>\n </div>\n <footer class=\"footer\" part=\"footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </div>\n </article>\n );\n }\n}\n",":host {\n display: block;\n font-family: var(--af-font-family-sans);\n}\n\nlabel {\n display: grid;\n gap: var(--af-space-2);\n color: var(--af-color-fg-default);\n}\n\n.label {\n font-size: 0.95rem;\n font-weight: var(--af-font-weight-semibold);\n}\n\n.control {\n position: relative;\n}\n\ninput {\n width: 100%;\n padding: calc(var(--af-space-2) + 2px) calc(var(--af-space-4) + 8px);\n border-radius: var(--af-radius-md);\n border: 1px solid rgba(18, 15, 31, 0.18);\n background: rgba(255, 255, 255, 0.9);\n color: inherit;\n font: inherit;\n transition: border-color 160ms ease, box-shadow 160ms ease;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);\n}\n\ninput::placeholder {\n color: var(--af-color-fg-muted);\n opacity: 0.8;\n}\n\ninput:focus-visible {\n outline: none;\n border-color: var(--af-color-brand-primary-500);\n box-shadow: 0 0 0 4px rgba(124, 58, 237, 0.18);\n}\n\nlabel.disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\ninput:disabled {\n background: rgba(241, 240, 247, 0.7);\n cursor: not-allowed;\n}\n\n.description {\n font-size: 0.825rem;\n color: var(--af-color-fg-muted);\n}\n","import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\n\nlet inputIds = 0;\n\n@Component({\n tag: 'af-input',\n styleUrl: 'af-input.css',\n shadow: true\n})\nexport class AfInput {\n private inputId = `af-input-${++inputIds}`;\n private descriptionId = `${this.inputId}-desc`;\n\n /** Optional label text */\n @Prop() label?: string;\n\n /** Assistive description shown below the field */\n @Prop() description?: string;\n\n /** Input type attribute */\n @Prop() type: 'text' | 'email' | 'password' | 'search' = 'text';\n\n /** Placeholder text */\n @Prop() placeholder?: string;\n\n /** Current value (mutable so the component stays in sync) */\n @Prop({ mutable: true }) value = '';\n\n /** Disabled state */\n @Prop({ reflect: true }) disabled = false;\n\n /** Fired as the user types */\n @Event() afInput!: EventEmitter<string>;\n\n /** Fired when the field loses focus after a change */\n @Event() afChange!: EventEmitter<string>;\n\n private handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement;\n this.value = target.value;\n this.afInput.emit(this.value);\n };\n\n private handleChange = () => {\n this.afChange.emit(this.value);\n };\n\n render() {\n const describedBy = this.description ? this.descriptionId : undefined;\n\n return (\n <label part=\"label\" class={{ disabled: this.disabled }} htmlFor={this.inputId}>\n {this.label ? (\n <span class=\"label\" part=\"label-text\">\n {this.label}\n </span>\n ) : null}\n <div class=\"control\">\n <input\n part=\"field\"\n id={this.inputId}\n type={this.type}\n placeholder={this.placeholder}\n value={this.value}\n disabled={this.disabled}\n aria-describedby={describedBy}\n onInput={this.handleInput}\n onChange={this.handleChange}\n />\n </div>\n {this.description ? (\n <p id={this.descriptionId} class=\"description\" part=\"description\">\n {this.description}\n </p>\n ) : null}\n </label>\n );\n }\n}\n"],"names":["h"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-5BGpYleS.js');
4
+
5
+ const defineCustomElements = async (win, options) => {
6
+ if (typeof window === 'undefined') return undefined;
7
+ await index.globalScripts();
8
+ return index.bootstrapLazy([["af-badge_5.cjs",[[257,"af-badge",{"tone":[1]}],[257,"af-button",{"variant":[1],"size":[1],"disabled":[516],"loading":[516]}],[257,"af-card",{"variant":[1],"accent":[1]}],[257,"af-icon-button",{"variant":[1],"size":[1],"label":[1],"disabled":[516]}],[257,"af-input",{"label":[1],"description":[1],"type":[1],"placeholder":[1],"value":[1025],"disabled":[516]}]]]], options);
9
+ };
10
+
11
+ exports.setNonce = index.setNonce;
12
+ exports.defineCustomElements = defineCustomElements;
13
+ //# sourceMappingURL=loader.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.cjs.js","sources":["@lazy-external-entrypoint?app-data=conditional"],"sourcesContent":["export { setNonce } from '@stencil/core';\nimport { bootstrapLazy } from '@stencil/core';\nimport { globalScripts } from '@stencil/core/internal/app-globals';\nexport const defineCustomElements = async (win, options) => {\n if (typeof window === 'undefined') return undefined;\n await globalScripts();\n return bootstrapLazy([/*!__STENCIL_LAZY_DATA__*/], options);\n};\n"],"names":["globalScripts","bootstrapLazy"],"mappings":";;;;AAGY,MAAC,oBAAoB,GAAG,OAAO,GAAG,EAAE,OAAO,KAAK;AAC5D,EAAE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,OAAO,SAAS;AACrD,EAAE,MAAMA,mBAAa,EAAE;AACvB,EAAE,OAAOC,mBAAa,CAAC,4BAA4B,EAAE,OAAO,CAAC;AAC7D;;;;;"}
@@ -0,0 +1,16 @@
1
+ {
2
+ "entries": [
3
+ "components/af-button/af-button.js",
4
+ "components/af-badge/af-badge.js",
5
+ "components/af-icon-button/af-icon-button.js",
6
+ "components/af-card/af-card.js",
7
+ "components/af-input/af-input.js"
8
+ ],
9
+ "compiler": {
10
+ "name": "@stencil/core",
11
+ "version": "4.38.2",
12
+ "typescriptVersion": "5.9.3"
13
+ },
14
+ "collections": [],
15
+ "bundles": []
16
+ }
@@ -0,0 +1,29 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ span {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ padding: 2px var(--af-space-2);
10
+ border-radius: var(--af-radius-pill);
11
+ font: var(--af-font-weight-semibold) var(--af-size-font-sm) / 1 var(--af-font-family-sans);
12
+ letter-spacing: 0.02em;
13
+ text-transform: uppercase;
14
+ }
15
+
16
+ span.tone-brand {
17
+ background: rgba(124, 58, 237, 0.12);
18
+ color: var(--af-color-brand-primary-500);
19
+ }
20
+
21
+ span.tone-neutral {
22
+ background: rgba(18, 15, 31, 0.1);
23
+ color: var(--af-color-fg-default);
24
+ }
25
+
26
+ span.tone-success {
27
+ background: rgba(16, 185, 129, 0.12);
28
+ color: #0f766e;
29
+ }
@@ -0,0 +1,47 @@
1
+ import { h } from "@stencil/core";
2
+ export class AfBadge {
3
+ constructor() {
4
+ /** Color theme of the badge */
5
+ this.tone = 'brand';
6
+ }
7
+ render() {
8
+ return (h("span", { key: '1f9d4015b429e012eade75e331c991d5c785482d', class: `tone-${this.tone}`, part: "base" }, h("slot", { key: 'b69b37a3e996c43cb16d04d829232d9539f45e06' })));
9
+ }
10
+ static get is() { return "af-badge"; }
11
+ static get encapsulation() { return "shadow"; }
12
+ static get originalStyleUrls() {
13
+ return {
14
+ "$": ["af-badge.css"]
15
+ };
16
+ }
17
+ static get styleUrls() {
18
+ return {
19
+ "$": ["af-badge.css"]
20
+ };
21
+ }
22
+ static get properties() {
23
+ return {
24
+ "tone": {
25
+ "type": "string",
26
+ "mutable": false,
27
+ "complexType": {
28
+ "original": "'brand' | 'neutral' | 'success'",
29
+ "resolved": "\"brand\" | \"neutral\" | \"success\"",
30
+ "references": {}
31
+ },
32
+ "required": false,
33
+ "optional": false,
34
+ "docs": {
35
+ "tags": [],
36
+ "text": "Color theme of the badge"
37
+ },
38
+ "getter": false,
39
+ "setter": false,
40
+ "reflect": false,
41
+ "attribute": "tone",
42
+ "defaultValue": "'brand'"
43
+ }
44
+ };
45
+ }
46
+ }
47
+ //# sourceMappingURL=af-badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"af-badge.js","sourceRoot":"","sources":["../../../src/components/af-badge/af-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOnD,MAAM,OAAO,OAAO;IALpB;QAME,+BAA+B;QACvB,SAAI,GAAoC,OAAO,CAAC;KASzD;IAPC,MAAM;QACJ,OAAO,CACL,6DAAM,KAAK,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAC,MAAM;YAC3C,8DAAQ,CACH,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-badge',\n styleUrl: 'af-badge.css',\n shadow: true\n})\nexport class AfBadge {\n /** Color theme of the badge */\n @Prop() tone: 'brand' | 'neutral' | 'success' = 'brand';\n\n render() {\n return (\n <span class={`tone-${this.tone}`} part=\"base\">\n <slot />\n </span>\n );\n }\n}\n"]}
@@ -0,0 +1,74 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ button {
6
+ position: relative;
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ gap: var(--af-space-2);
11
+ font: var(--af-font-weight-semibold) var(--af-size-font-md) / 1 var(--af-font-family-sans);
12
+ border-radius: var(--af-radius-md);
13
+ padding: var(--af-space-2) var(--af-space-4);
14
+ border: none;
15
+ cursor: pointer;
16
+ transition: transform 120ms ease, box-shadow 160ms ease;
17
+ box-shadow: 0 8px 20px rgba(124, 58, 237, 0.18);
18
+ }
19
+
20
+ button:is(:hover, :focus-visible) {
21
+ transform: translateY(-1px);
22
+ box-shadow: 0 12px 24px rgba(124, 58, 237, 0.24);
23
+ }
24
+
25
+ button:active {
26
+ transform: translateY(0);
27
+ box-shadow: 0 6px 16px rgba(124, 58, 237, 0.16);
28
+ }
29
+
30
+ button:disabled {
31
+ cursor: not-allowed;
32
+ opacity: 0.6;
33
+ transform: none;
34
+ box-shadow: none;
35
+ }
36
+
37
+ button.variant-primary {
38
+ background: linear-gradient(135deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));
39
+ color: var(--af-color-fg-inverse);
40
+ }
41
+
42
+ button.variant-secondary {
43
+ background: var(--af-color-bg-subtle);
44
+ color: var(--af-color-fg-default);
45
+ box-shadow: inset 0 0 0 1px rgba(18, 15, 31, 0.08);
46
+ }
47
+
48
+ button.variant-ghost {
49
+ background: transparent;
50
+ color: var(--af-color-brand-primary-500);
51
+ box-shadow: inset 0 0 0 1px rgba(124, 58, 237, 0.3);
52
+ }
53
+
54
+ button.size-lg {
55
+ padding: calc(var(--af-space-3)) calc(var(--af-space-4) + 4px);
56
+ font-size: var(--af-size-font-lg);
57
+ }
58
+
59
+ button .spinner {
60
+ position: absolute;
61
+ inset: 0;
62
+ border-radius: inherit;
63
+ background: radial-gradient(circle at center, rgba(255, 255, 255, 0.18), transparent 55%);
64
+ opacity: 0;
65
+ transition: opacity 120ms ease;
66
+ }
67
+
68
+ button.is-loading .spinner {
69
+ opacity: 1;
70
+ }
71
+
72
+ button.is-loading .content {
73
+ opacity: 0.6;
74
+ }
@@ -0,0 +1,149 @@
1
+ import { h } from "@stencil/core";
2
+ export class AfButton {
3
+ constructor() {
4
+ /** Visual style of the button */
5
+ this.variant = 'primary';
6
+ /** Size of the button */
7
+ this.size = 'md';
8
+ /** Disabled state */
9
+ this.disabled = false;
10
+ /** Loading state */
11
+ this.loading = false;
12
+ this.handleClick = (event) => {
13
+ if (this.disabled || this.loading) {
14
+ event.preventDefault();
15
+ event.stopPropagation();
16
+ return;
17
+ }
18
+ this.afClick.emit(event);
19
+ };
20
+ }
21
+ render() {
22
+ const classes = {
23
+ [`variant-${this.variant}`]: true,
24
+ [`size-${this.size}`]: true,
25
+ 'is-loading': this.loading
26
+ };
27
+ return (h("button", { key: '11e06f0158591b7aaf60633fa12e91a2904d2f57', class: classes, part: "base", disabled: this.disabled || this.loading, onClick: this.handleClick }, h("span", { key: 'bdea09a13233b2e9c682e3c0a3d02fc8fe791668', class: "spinner", part: "spinner", "aria-hidden": !this.loading }), h("span", { key: '24a80ba696aecacda181203379345b28e741583c', class: "content", part: "label" }, h("slot", { key: 'bdd3731c9c98091503e1c87a7fe940bb72579d27' }))));
28
+ }
29
+ static get is() { return "af-button"; }
30
+ static get encapsulation() { return "shadow"; }
31
+ static get originalStyleUrls() {
32
+ return {
33
+ "$": ["af-button.css"]
34
+ };
35
+ }
36
+ static get styleUrls() {
37
+ return {
38
+ "$": ["af-button.css"]
39
+ };
40
+ }
41
+ static get properties() {
42
+ return {
43
+ "variant": {
44
+ "type": "string",
45
+ "mutable": false,
46
+ "complexType": {
47
+ "original": "'primary' | 'secondary' | 'ghost'",
48
+ "resolved": "\"ghost\" | \"primary\" | \"secondary\"",
49
+ "references": {}
50
+ },
51
+ "required": false,
52
+ "optional": false,
53
+ "docs": {
54
+ "tags": [],
55
+ "text": "Visual style of the button"
56
+ },
57
+ "getter": false,
58
+ "setter": false,
59
+ "reflect": false,
60
+ "attribute": "variant",
61
+ "defaultValue": "'primary'"
62
+ },
63
+ "size": {
64
+ "type": "string",
65
+ "mutable": false,
66
+ "complexType": {
67
+ "original": "'md' | 'lg'",
68
+ "resolved": "\"lg\" | \"md\"",
69
+ "references": {}
70
+ },
71
+ "required": false,
72
+ "optional": false,
73
+ "docs": {
74
+ "tags": [],
75
+ "text": "Size of the button"
76
+ },
77
+ "getter": false,
78
+ "setter": false,
79
+ "reflect": false,
80
+ "attribute": "size",
81
+ "defaultValue": "'md'"
82
+ },
83
+ "disabled": {
84
+ "type": "boolean",
85
+ "mutable": false,
86
+ "complexType": {
87
+ "original": "boolean",
88
+ "resolved": "boolean",
89
+ "references": {}
90
+ },
91
+ "required": false,
92
+ "optional": false,
93
+ "docs": {
94
+ "tags": [],
95
+ "text": "Disabled state"
96
+ },
97
+ "getter": false,
98
+ "setter": false,
99
+ "reflect": true,
100
+ "attribute": "disabled",
101
+ "defaultValue": "false"
102
+ },
103
+ "loading": {
104
+ "type": "boolean",
105
+ "mutable": false,
106
+ "complexType": {
107
+ "original": "boolean",
108
+ "resolved": "boolean",
109
+ "references": {}
110
+ },
111
+ "required": false,
112
+ "optional": false,
113
+ "docs": {
114
+ "tags": [],
115
+ "text": "Loading state"
116
+ },
117
+ "getter": false,
118
+ "setter": false,
119
+ "reflect": true,
120
+ "attribute": "loading",
121
+ "defaultValue": "false"
122
+ }
123
+ };
124
+ }
125
+ static get events() {
126
+ return [{
127
+ "method": "afClick",
128
+ "name": "afClick",
129
+ "bubbles": true,
130
+ "cancelable": true,
131
+ "composed": true,
132
+ "docs": {
133
+ "tags": [],
134
+ "text": "Fired when the button is clicked while enabled"
135
+ },
136
+ "complexType": {
137
+ "original": "MouseEvent",
138
+ "resolved": "MouseEvent",
139
+ "references": {
140
+ "MouseEvent": {
141
+ "location": "global",
142
+ "id": "global::MouseEvent"
143
+ }
144
+ }
145
+ }
146
+ }];
147
+ }
148
+ }
149
+ //# sourceMappingURL=af-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"af-button.js","sourceRoot":"","sources":["../../../src/components/af-button/af-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAOxE,MAAM,OAAO,QAAQ;IALrB;QAME,iCAAiC;QACzB,YAAO,GAAsC,SAAS,CAAC;QAE/D,yBAAyB;QACjB,SAAI,GAAgB,IAAI,CAAC;QAEjC,qBAAqB;QACI,aAAQ,GAAG,KAAK,CAAC;QAE1C,oBAAoB;QACK,YAAO,GAAG,KAAK,CAAC;QAKjC,gBAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;YAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBAClC,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC;KAuBH;IArBC,MAAM;QACJ,MAAM,OAAO,GAAG;YACd,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI;YACjC,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI;YAC3B,YAAY,EAAE,IAAI,CAAC,OAAO;SAC3B,CAAC;QAEF,OAAO,CACL,+DACE,KAAK,EAAE,OAAO,EACd,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,EACvC,OAAO,EAAE,IAAI,CAAC,WAAW;YAEzB,6DAAM,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,SAAS,iBAAc,CAAC,IAAI,CAAC,OAAO,GAAS;YACxE,6DAAM,KAAK,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO;gBAChC,8DAAQ,CACH,CACA,CACV,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'af-button',\n styleUrl: 'af-button.css',\n shadow: true\n})\nexport class AfButton {\n /** Visual style of the button */\n @Prop() variant: 'primary' | 'secondary' | 'ghost' = 'primary';\n\n /** Size of the button */\n @Prop() size: 'md' | 'lg' = 'md';\n\n /** Disabled state */\n @Prop({ reflect: true }) disabled = false;\n\n /** Loading state */\n @Prop({ reflect: true }) loading = false;\n\n /** Fired when the button is clicked while enabled */\n @Event() afClick!: EventEmitter<MouseEvent>;\n\n private handleClick = (event: MouseEvent) => {\n if (this.disabled || this.loading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.afClick.emit(event);\n };\n\n render() {\n const classes = {\n [`variant-${this.variant}`]: true,\n [`size-${this.size}`]: true,\n 'is-loading': this.loading\n };\n\n return (\n <button\n class={classes}\n part=\"base\"\n disabled={this.disabled || this.loading}\n onClick={this.handleClick}\n >\n <span class=\"spinner\" part=\"spinner\" aria-hidden={!this.loading}></span>\n <span class=\"content\" part=\"label\">\n <slot />\n </span>\n </button>\n );\n }\n}\n"]}
@@ -0,0 +1,69 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ article {
6
+ position: relative;
7
+ border-radius: var(--af-radius-md);
8
+ background: var(--af-color-bg-surface);
9
+ color: var(--af-color-fg-default);
10
+ padding: calc(var(--af-space-4) * 1.5);
11
+ box-shadow: none;
12
+ border: 1px solid rgba(18, 15, 31, 0.06);
13
+ transition: box-shadow 160ms ease, transform 160ms ease;
14
+ display: block;
15
+ overflow: hidden;
16
+ }
17
+
18
+ article.variant-elevated {
19
+ box-shadow: 0 18px 36px rgba(47, 22, 94, 0.18);
20
+ border: none;
21
+ }
22
+
23
+ article:hover {
24
+ transform: translateY(-2px);
25
+ box-shadow: 0 24px 44px rgba(47, 22, 94, 0.24);
26
+ }
27
+
28
+ .accent {
29
+ position: absolute;
30
+ inset: 0;
31
+ width: 6px;
32
+ left: 0;
33
+ right: auto;
34
+ background: linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));
35
+ }
36
+
37
+ article.accent-brand .accent {
38
+ background: linear-gradient(180deg, var(--af-color-brand-primary-500), var(--af-color-brand-primary-600));
39
+ }
40
+
41
+ article.accent-success .accent {
42
+ background: linear-gradient(180deg, #22c55e, #16a34a);
43
+ }
44
+
45
+ article.accent-neutral .accent {
46
+ background: rgba(18, 15, 31, 0.18);
47
+ }
48
+
49
+ .content {
50
+ margin-left: 12px;
51
+ display: grid;
52
+ gap: var(--af-space-3);
53
+ }
54
+
55
+ .header:empty,
56
+ .footer:empty {
57
+ display: none;
58
+ }
59
+
60
+ .header ::slotted(*) {
61
+ font-size: 1.125rem;
62
+ font-weight: var(--af-font-weight-semibold);
63
+ }
64
+
65
+ .footer ::slotted(*) {
66
+ display: inline-flex;
67
+ gap: var(--af-space-2);
68
+ align-items: center;
69
+ }