ds-one 0.2.5-alpha.9 → 0.3.0-alpha.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 (209) hide show
  1. package/DS1/0-face/device.ts +138 -0
  2. package/DS1/0-face/scaling.ts +152 -0
  3. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  4. package/DS1/1-root/one.css +124 -77
  5. package/DS1/2-core/ds-banner.ts +120 -1
  6. package/DS1/2-core/ds-button.ts +16 -93
  7. package/DS1/2-core/ds-card.ts +137 -0
  8. package/DS1/2-core/ds-cycle.ts +77 -179
  9. package/DS1/2-core/ds-date.ts +3 -10
  10. package/DS1/2-core/ds-gap.ts +38 -0
  11. package/DS1/2-core/ds-icon.ts +6 -35
  12. package/DS1/2-core/ds-input.ts +306 -1
  13. package/DS1/2-core/ds-pagedots.ts +52 -0
  14. package/DS1/2-core/ds-text.ts +55 -28
  15. package/DS1/2-core/ds-tooltip.ts +12 -58
  16. package/DS1/2-core/styles/ds-banner.css +77 -0
  17. package/DS1/2-core/styles/ds-button.css +67 -0
  18. package/DS1/2-core/styles/ds-cycle.css +21 -0
  19. package/DS1/2-core/styles/ds-date.css +9 -0
  20. package/DS1/2-core/styles/ds-gap.css +93 -0
  21. package/DS1/2-core/styles/ds-icon.css +30 -0
  22. package/DS1/2-core/styles/ds-input.css +46 -0
  23. package/DS1/2-core/styles/ds-pagedots.css +31 -0
  24. package/DS1/2-core/styles/ds-text.css +29 -0
  25. package/DS1/2-core/styles/ds-tooltip.css +49 -0
  26. package/DS1/3-unit/ds-accordion.ts +95 -0
  27. package/DS1/3-unit/ds-form.ts +304 -0
  28. package/DS1/3-unit/ds-list.ts +5 -14
  29. package/DS1/3-unit/ds-row.ts +3 -19
  30. package/DS1/3-unit/ds-table.ts +3 -86
  31. package/DS1/3-unit/styles/ds-accordion.css +46 -0
  32. package/DS1/3-unit/styles/ds-list.css +9 -0
  33. package/DS1/3-unit/styles/ds-row.css +19 -0
  34. package/DS1/3-unit/styles/ds-table.css +80 -0
  35. package/DS1/4-page/ds-container.ts +28 -0
  36. package/DS1/4-page/ds-grid.ts +37 -50
  37. package/DS1/4-page/ds-layout.ts +652 -163
  38. package/DS1/4-page/styles/ds-container.css +35 -0
  39. package/DS1/4-page/styles/ds-grid.css +56 -0
  40. package/DS1/4-page/styles/ds-layout.css +246 -0
  41. package/DS1/index.ts +9 -1
  42. package/DS1/vite-env.d.ts +13 -0
  43. package/DS1/x-icon/2x.svg +4 -0
  44. package/DS1/x-icon/2xdots.svg +18 -0
  45. package/DS1/x-icon/2xgrid.svg +6 -0
  46. package/DS1/x-icon/2xlines.svg +6 -0
  47. package/DS1/x-icon/4x4.svg +18 -0
  48. package/DS1/x-icon/apple.svg +4 -0
  49. package/DS1/x-icon/avatar.svg +4 -0
  50. package/DS1/x-icon/big.svg +4 -0
  51. package/DS1/x-icon/blank.svg +3 -0
  52. package/DS1/x-icon/check.svg +3 -0
  53. package/DS1/x-icon/close.svg +3 -0
  54. package/DS1/x-icon/collapse.svg +3 -0
  55. package/DS1/x-icon/color.svg +4 -0
  56. package/DS1/x-icon/column.svg +5 -0
  57. package/DS1/x-icon/default.svg +3 -0
  58. package/DS1/x-icon/delete.svg +5 -0
  59. package/DS1/x-icon/dictate.svg +6 -0
  60. package/DS1/x-icon/do.svg +3 -0
  61. package/DS1/x-icon/down.svg +3 -0
  62. package/DS1/x-icon/duplicate.svg +4 -0
  63. package/DS1/x-icon/gallery.svg +5 -0
  64. package/DS1/x-icon/google.svg +6 -0
  65. package/DS1/x-icon/head.svg +5 -0
  66. package/DS1/x-icon/home.svg +3 -0
  67. package/DS1/x-icon/icon.svg +4 -0
  68. package/DS1/x-icon/in.svg +4 -0
  69. package/DS1/x-icon/lock.svg +5 -0
  70. package/DS1/x-icon/loop.svg +5 -0
  71. package/DS1/x-icon/mic.svg +5 -0
  72. package/DS1/x-icon/minimize.svg +3 -0
  73. package/DS1/x-icon/more.svg +5 -0
  74. package/DS1/x-icon/neutral.svg +6 -0
  75. package/DS1/x-icon/note.svg +6 -0
  76. package/DS1/x-icon/page.svg +4 -0
  77. package/DS1/x-icon/plus.svg +3 -0
  78. package/DS1/x-icon/rewind.svg +4 -0
  79. package/DS1/x-icon/row.svg +5 -0
  80. package/DS1/x-icon/sdown.svg +3 -0
  81. package/DS1/x-icon/search.svg +4 -0
  82. package/DS1/x-icon/see.svg +4 -0
  83. package/DS1/x-icon/ship.svg +5 -0
  84. package/DS1/x-icon/star.svg +3 -0
  85. package/DS1/x-icon/status.svg +4 -0
  86. package/DS1/x-icon/sup.svg +3 -0
  87. package/DS1/x-icon/title.svg +3 -0
  88. package/DS1/x-icon/undo.svg +3 -0
  89. package/DS1/x-icon/ungroup.svg +4 -0
  90. package/DS1/x-icon/unhead.svg +3 -0
  91. package/DS1/x-icon/unicon.svg +3 -0
  92. package/DS1/x-icon/unlock.svg +5 -0
  93. package/DS1/x-icon/unmic.svg +6 -0
  94. package/DS1/x-icon/unsee.svg +5 -0
  95. package/DS1/x-icon/unstar.svg +3 -0
  96. package/DS1/x-icon/untitle.svg +3 -0
  97. package/DS1/x-icon/up.svg +3 -0
  98. package/LICENSE +1 -1
  99. package/README.md +4 -4
  100. package/dist/0-face/device.d.ts +5 -0
  101. package/dist/0-face/device.d.ts.map +1 -1
  102. package/dist/0-face/device.js +111 -0
  103. package/dist/0-face/scaling.d.ts +48 -0
  104. package/dist/0-face/scaling.d.ts.map +1 -0
  105. package/dist/0-face/scaling.js +114 -0
  106. package/dist/2-core/ds-banner.d.ts +67 -0
  107. package/dist/2-core/ds-banner.d.ts.map +1 -1
  108. package/dist/2-core/ds-banner.js +97 -1
  109. package/dist/2-core/ds-button.d.ts +4 -15
  110. package/dist/2-core/ds-button.d.ts.map +1 -1
  111. package/dist/2-core/ds-button.js +14 -86
  112. package/dist/2-core/ds-card.d.ts +39 -0
  113. package/dist/2-core/ds-card.d.ts.map +1 -0
  114. package/dist/2-core/ds-card.js +119 -0
  115. package/dist/2-core/ds-cycle.d.ts +1 -5
  116. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  117. package/dist/2-core/ds-cycle.js +74 -163
  118. package/dist/2-core/ds-date.d.ts.map +1 -1
  119. package/dist/2-core/ds-date.js +3 -9
  120. package/dist/2-core/ds-gap.d.ts +28 -0
  121. package/dist/2-core/ds-gap.d.ts.map +1 -0
  122. package/dist/2-core/ds-gap.js +25 -0
  123. package/dist/2-core/ds-icon.d.ts.map +1 -1
  124. package/dist/2-core/ds-icon.js +6 -35
  125. package/dist/2-core/ds-input.d.ts +127 -0
  126. package/dist/2-core/ds-input.d.ts.map +1 -1
  127. package/dist/2-core/ds-input.js +252 -1
  128. package/dist/2-core/ds-pagedots.d.ts +32 -0
  129. package/dist/2-core/ds-pagedots.d.ts.map +1 -0
  130. package/dist/2-core/ds-pagedots.js +36 -0
  131. package/dist/2-core/ds-text.d.ts +5 -3
  132. package/dist/2-core/ds-text.d.ts.map +1 -1
  133. package/dist/2-core/ds-text.js +49 -27
  134. package/dist/2-core/ds-tooltip.d.ts +2 -2
  135. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  136. package/dist/2-core/ds-tooltip.js +11 -57
  137. package/dist/2-core/styles/ds-banner.css +77 -0
  138. package/dist/2-core/styles/ds-button.css +67 -0
  139. package/dist/2-core/styles/ds-cycle.css +21 -0
  140. package/dist/2-core/styles/ds-date.css +9 -0
  141. package/dist/2-core/styles/ds-gap.css +93 -0
  142. package/dist/2-core/styles/ds-icon.css +30 -0
  143. package/dist/2-core/styles/ds-input.css +46 -0
  144. package/dist/2-core/styles/ds-pagedots.css +26 -0
  145. package/dist/2-core/styles/ds-text.css +29 -0
  146. package/dist/2-core/styles/ds-tooltip.css +49 -0
  147. package/dist/3-unit/ds-accordion.d.ts +47 -0
  148. package/dist/3-unit/ds-accordion.d.ts.map +1 -0
  149. package/dist/3-unit/ds-accordion.js +75 -0
  150. package/dist/3-unit/ds-form.d.ts +70 -0
  151. package/dist/3-unit/ds-form.d.ts.map +1 -0
  152. package/dist/3-unit/ds-form.js +232 -0
  153. package/dist/3-unit/ds-list.d.ts.map +1 -1
  154. package/dist/3-unit/ds-list.js +5 -11
  155. package/dist/3-unit/ds-row.d.ts.map +1 -1
  156. package/dist/3-unit/ds-row.js +3 -19
  157. package/dist/3-unit/ds-table.d.ts.map +1 -1
  158. package/dist/3-unit/ds-table.js +3 -86
  159. package/dist/3-unit/styles/ds-accordion.css +46 -0
  160. package/dist/3-unit/styles/ds-list.css +9 -0
  161. package/dist/3-unit/styles/ds-row.css +19 -0
  162. package/dist/3-unit/styles/ds-table.css +80 -0
  163. package/dist/{3-unit/row-v1.d.ts → 4-page/ds-container.d.ts} +3 -11
  164. package/dist/4-page/ds-container.d.ts.map +1 -0
  165. package/dist/4-page/ds-container.js +11 -0
  166. package/dist/4-page/ds-grid.d.ts +5 -0
  167. package/dist/4-page/ds-grid.d.ts.map +1 -1
  168. package/dist/4-page/ds-grid.js +38 -56
  169. package/dist/4-page/ds-layout.d.ts +3 -3
  170. package/dist/4-page/ds-layout.d.ts.map +1 -1
  171. package/dist/4-page/ds-layout.js +651 -162
  172. package/dist/4-page/styles/ds-container.css +35 -0
  173. package/dist/4-page/styles/ds-grid.css +56 -0
  174. package/dist/4-page/styles/ds-layout.css +251 -0
  175. package/dist/ds-one.bundle.css +700 -0
  176. package/dist/ds-one.bundle.css.map +7 -0
  177. package/dist/ds-one.bundle.js +2642 -1469
  178. package/dist/ds-one.bundle.js.map +1 -7
  179. package/dist/ds-one.bundle.min.css +2 -0
  180. package/dist/ds-one.bundle.min.css.map +7 -0
  181. package/dist/ds-one.bundle.min.js +3850 -550
  182. package/dist/ds-one.bundle.min.js.map +1 -7
  183. package/dist/index.d.ts +9 -1
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +9 -1
  186. package/package.json +4 -2
  187. package/dist/3-unit/doublenav-v1.d.ts +0 -51
  188. package/dist/3-unit/doublenav-v1.d.ts.map +0 -1
  189. package/dist/3-unit/doublenav-v1.js +0 -88
  190. package/dist/3-unit/ds-portfolio-doublenav.d.ts +0 -51
  191. package/dist/3-unit/ds-portfolio-doublenav.d.ts.map +0 -1
  192. package/dist/3-unit/ds-portfolio-doublenav.js +0 -88
  193. package/dist/3-unit/ds-portfolio-panel.d.ts +0 -11
  194. package/dist/3-unit/ds-portfolio-panel.d.ts.map +0 -1
  195. package/dist/3-unit/ds-portfolio-panel.js +0 -16
  196. package/dist/3-unit/ds-portfolio-singlenav.d.ts +0 -32
  197. package/dist/3-unit/ds-portfolio-singlenav.d.ts.map +0 -1
  198. package/dist/3-unit/ds-portfolio-singlenav.js +0 -62
  199. package/dist/3-unit/list-v1.d.ts +0 -11
  200. package/dist/3-unit/list-v1.d.ts.map +0 -1
  201. package/dist/3-unit/list-v1.js +0 -15
  202. package/dist/3-unit/panel-v1.d.ts +0 -11
  203. package/dist/3-unit/panel-v1.d.ts.map +0 -1
  204. package/dist/3-unit/panel-v1.js +0 -16
  205. package/dist/3-unit/row-v1.d.ts.map +0 -1
  206. package/dist/3-unit/row-v1.js +0 -32
  207. package/dist/3-unit/singlenav-v1.d.ts +0 -32
  208. package/dist/3-unit/singlenav-v1.d.ts.map +0 -1
  209. package/dist/3-unit/singlenav-v1.js +0 -62
@@ -1,3 +1,122 @@
1
1
  // ds-banner.ts
2
- // Core component
2
+ // Fixed banner component for notifications/alerts
3
3
 
4
+ import { LitElement, html, unsafeCSS } from "lit";
5
+ import { getText } from "../0-face/i18n.js";
6
+ import "./ds-text.js";
7
+ import "./ds-button.js";
8
+ import styles from "./styles/ds-banner.css?inline";
9
+
10
+ declare global {
11
+ interface CustomElementRegistry {
12
+ define(name: string, constructor: typeof LitElement): void;
13
+ }
14
+ var customElements: CustomElementRegistry;
15
+ }
16
+
17
+ export class Banner extends LitElement {
18
+ static properties = {
19
+ text: { type: String },
20
+ action: { type: String },
21
+ href: { type: String },
22
+ mailto: { type: String },
23
+ subject: { type: String },
24
+ describe: { type: String },
25
+ appVersion: { type: String, attribute: "app-version" },
26
+ variant: { type: String },
27
+ version: { type: String },
28
+ _showVersion: { type: Boolean, state: true },
29
+ };
30
+
31
+ text: string = "";
32
+ action: string = "";
33
+ href: string = "";
34
+ mailto: string = "";
35
+ subject: string = "";
36
+ describe: string = "";
37
+ appVersion: string = "";
38
+ variant: string = "warning"; // warning, info, success, error
39
+ version: string = "";
40
+ _showVersion: boolean = false;
41
+
42
+ private _boundUpdate = () => this.requestUpdate();
43
+
44
+ connectedCallback() {
45
+ super.connectedCallback();
46
+ // Listen for translations and language changes to rebuild mailto URL
47
+ window.addEventListener("translations-loaded", this._boundUpdate);
48
+ window.addEventListener("language-changed", this._boundUpdate);
49
+ }
50
+
51
+ disconnectedCallback() {
52
+ super.disconnectedCallback();
53
+ window.removeEventListener("translations-loaded", this._boundUpdate);
54
+ window.removeEventListener("language-changed", this._boundUpdate);
55
+ }
56
+
57
+ static styles = unsafeCSS(styles);
58
+
59
+ private _toggleVersion() {
60
+ if (this.version) {
61
+ this._showVersion = !this._showVersion;
62
+ }
63
+ }
64
+
65
+ private _getMailtoHref(): string {
66
+ // If a direct href is provided, use it
67
+ if (this.href && this.href !== "#") return this.href;
68
+
69
+ // If mailto is provided, build internationalized URL
70
+ if (this.mailto) {
71
+ try {
72
+ const subject = this.subject
73
+ ? getText(this.subject) || this.subject
74
+ : "Issue report";
75
+ const describe = this.describe
76
+ ? getText(this.describe) || this.describe
77
+ : "Describe the issue:";
78
+ const appVersionLabel = this.appVersion
79
+ ? getText(this.appVersion) || this.appVersion
80
+ : "App version:";
81
+
82
+ const body = `${describe}\n\n\n${appVersionLabel} ${this.version || ""}`;
83
+
84
+ return `mailto:${this.mailto}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
85
+ } catch (error) {
86
+ // Fallback if translations fail
87
+ return `mailto:${this.mailto}?subject=Issue%20report&body=Describe%20the%20issue%3A%0A%0A%0AApp%20version%3A%20${this.version || ""}`;
88
+ }
89
+ }
90
+
91
+ return "#";
92
+ }
93
+
94
+ render() {
95
+ const mailtoHref = this._getMailtoHref();
96
+
97
+ return html`
98
+ <div class="text-wrapper" @click=${this._toggleVersion}>
99
+ ${this._showVersion && this.version
100
+ ? html`<ds-text default-value=${this.version}></ds-text>`
101
+ : html`<ds-text text=${this.text}><slot></slot></ds-text>`}
102
+ </div>
103
+ ${this.action
104
+ ? html`
105
+ <div class="action-wrapper">
106
+ <a href=${mailtoHref}>
107
+ <ds-text text=${this.action}></ds-text>
108
+ </a>
109
+ </div>
110
+ `
111
+ : ""}
112
+ `;
113
+ }
114
+ }
115
+
116
+ customElements.define("ds-banner", Banner);
117
+
118
+ declare global {
119
+ interface HTMLElementTagNameMap {
120
+ "ds-banner": Banner;
121
+ }
122
+ }
@@ -1,8 +1,9 @@
1
1
  // ds-button.ts
2
2
  // Core button component
3
3
 
4
- import { LitElement, html, css, type PropertyValues } from "lit";
5
- import { getText, currentLanguage } from "../0-face/i18n";
4
+ import { LitElement, html, unsafeCSS } from "lit";
5
+ import "./ds-text";
6
+ import styles from "./styles/ds-button.css?inline";
6
7
 
7
8
  export class Button extends LitElement {
8
9
  static properties = {
@@ -15,13 +16,12 @@ export class Button extends LitElement {
15
16
  attribute: "no-background",
16
17
  },
17
18
  blank: { type: Boolean, reflect: true },
18
- key: { type: String },
19
+ text: { type: String },
19
20
  fallback: { type: String },
20
21
  language: { type: String },
21
22
  defaultText: { type: String, attribute: "default-text" },
22
23
  href: { type: String },
23
24
  _loading: { type: Boolean, state: true },
24
- _text: { type: String, state: true },
25
25
  };
26
26
 
27
27
  // Public properties
@@ -30,7 +30,7 @@ export class Button extends LitElement {
30
30
  declare bold: boolean;
31
31
  declare "no-background": boolean;
32
32
  declare blank: boolean;
33
- declare key: string;
33
+ declare text: string;
34
34
  declare fallback: string;
35
35
  declare language: string;
36
36
  declare defaultText: string;
@@ -38,7 +38,6 @@ export class Button extends LitElement {
38
38
 
39
39
  // Private state
40
40
  declare _loading: boolean;
41
- declare _text: string | null;
42
41
 
43
42
  constructor() {
44
43
  super();
@@ -47,105 +46,23 @@ export class Button extends LitElement {
47
46
  this.bold = false;
48
47
  this["no-background"] = false;
49
48
  this.blank = false;
50
- this.key = "";
49
+ this.text = "";
51
50
  this.fallback = "";
52
51
  this.language = "en-US";
53
52
  this.defaultText = "";
54
53
  this.href = "";
55
54
  this._loading = false;
56
- this._text = null;
57
55
  }
58
56
 
59
- static styles = css`
60
- button {
61
- max-height: calc(var(--08) * var(--scaling-factor));
62
- border: none;
63
- cursor: pointer;
64
- font-size: calc(var(--type-size-default) * var(--scaling-factor));
65
- padding: 0 calc(1px * var(--scaling-factor));
66
- color: var(--button-text-color);
67
- font-family: var(--typeface);
68
- }
69
-
70
- button.title {
71
- background-color: var(--button-background-color-secondary);
72
- color: var(--button-text-color);
73
- }
74
-
75
- button.primary {
76
- background-color: var(--accent-color);
77
- color: var(--button-text-color);
78
- text-decoration-line: none;
79
- font-family: var(--typeface);
80
- }
81
-
82
- button.secondary {
83
- background-color: var(--button-background-color-secondary);
84
- color: var(--button-text-color);
85
- font-family: var(--typeface);
86
- }
87
-
88
- button[bold] {
89
- font-weight: var(--type-weight-bold);
90
- font-family: var(--typeface-medium);
91
- }
92
-
93
- button[no-background] {
94
- background-color: transparent;
95
- max-height: var(--1);
96
- padding: 0;
97
- color: var(--button-color, var(--button-text-color-secondary));
98
- }
99
-
100
- button[no-background][bold] {
101
- font-weight: var(--type-weight-bold);
102
- font-family: var(--typeface-medium);
103
- color: var(--button-color, var(--button-text-color-secondary));
104
- }
105
-
106
- .loading {
107
- opacity: 0.7;
108
- }
109
- `;
57
+ static styles = unsafeCSS(styles);
110
58
 
111
59
  connectedCallback() {
112
60
  super.connectedCallback();
113
- this._updateText();
114
-
115
- // Listen for language changes
116
- window.addEventListener("language-changed", this._handleLanguageChange);
117
- }
118
-
119
- disconnectedCallback() {
120
- super.disconnectedCallback();
121
- window.removeEventListener("language-changed", this._handleLanguageChange);
122
- }
123
-
124
- _handleLanguageChange = () => {
125
- this._updateText();
126
- };
127
-
128
- updated(changedProps: PropertyValues) {
129
- super.updated(changedProps);
130
-
131
- if (changedProps.has("key") || changedProps.has("defaultText")) {
132
- this._updateText();
133
- }
134
- }
135
-
136
- /**
137
- * Update text from translations (synchronous like Portfolio)
138
- */
139
- private _updateText() {
140
- if (this.key) {
141
- this._text = getText(this.key);
142
- } else {
143
- this._text = this.defaultText || this.fallback || null;
144
- }
145
- this.requestUpdate();
146
61
  }
147
62
 
148
63
  render() {
64
+ const hasTextProps = this.text || this.defaultText || this.fallback;
65
+
149
66
  return html`
150
67
  <button
151
68
  class=${this.variant}
@@ -154,7 +71,13 @@ export class Button extends LitElement {
154
71
  ?no-background=${this["no-background"]}
155
72
  @click=${this._handleClick}
156
73
  >
157
- ${this._text ? this._text : html`<slot></slot>`}
74
+ ${hasTextProps
75
+ ? html`<ds-text
76
+ .text=${this.text}
77
+ .defaultValue=${this.defaultText}
78
+ .fallback=${this.fallback}
79
+ ></ds-text>`
80
+ : html`<slot></slot>`}
158
81
  </button>
159
82
  `;
160
83
  }
@@ -0,0 +1,137 @@
1
+ // ds-card.ts
2
+ // Card component for displaying content in a contained box
3
+
4
+ import { LitElement, html, css } from "lit";
5
+
6
+ export class Card extends LitElement {
7
+ static properties = {
8
+ variant: { type: String, reflect: true },
9
+ elevation: { type: Number, reflect: true },
10
+ interactive: { type: Boolean, reflect: true },
11
+ disabled: { type: Boolean, reflect: true },
12
+ padding: { type: String, reflect: true },
13
+ };
14
+
15
+ declare variant: "default" | "outlined" | "elevated" | "filled";
16
+ declare elevation: number;
17
+ declare interactive: boolean;
18
+ declare disabled: boolean;
19
+ declare padding: "none" | "small" | "medium" | "large";
20
+
21
+ constructor() {
22
+ super();
23
+ this.variant = "default";
24
+ this.elevation = 1;
25
+ this.interactive = false;
26
+ this.disabled = false;
27
+ this.padding = "medium";
28
+ }
29
+
30
+ static styles = css`
31
+ :host {
32
+ display: block;
33
+ box-sizing: border-box;
34
+ border-radius: calc(var(--025) * var(--sf, 1));
35
+ background-color: var(--card-background, var(--surface-color, #fff));
36
+ color: var(--text-color-primary);
37
+ transition:
38
+ box-shadow 0.2s ease,
39
+ transform 0.2s ease;
40
+ }
41
+
42
+ :host([variant="default"]) {
43
+ background-color: var(--card-background, var(--surface-color, #fff));
44
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));
45
+ }
46
+
47
+ :host([variant="outlined"]) {
48
+ background-color: transparent;
49
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));
50
+ }
51
+
52
+ :host([variant="elevated"]) {
53
+ background-color: var(--card-background, var(--surface-color, #fff));
54
+ border: none;
55
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
56
+ }
57
+
58
+ :host([variant="filled"]) {
59
+ background-color: var(
60
+ --card-background-filled,
61
+ var(--surface-color-secondary, #f5f5f5)
62
+ );
63
+ border: none;
64
+ }
65
+
66
+ :host([elevation="0"]) {
67
+ box-shadow: none;
68
+ }
69
+
70
+ :host([elevation="1"]) {
71
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
72
+ }
73
+
74
+ :host([elevation="2"]) {
75
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
76
+ }
77
+
78
+ :host([elevation="3"]) {
79
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);
80
+ }
81
+
82
+ :host([interactive]) {
83
+ cursor: pointer;
84
+ }
85
+
86
+ :host([interactive]:hover:not([disabled])) {
87
+ transform: translateY(-2px);
88
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
89
+ }
90
+
91
+ :host([interactive]:active:not([disabled])) {
92
+ transform: translateY(0);
93
+ }
94
+
95
+ :host([disabled]) {
96
+ opacity: 0.5;
97
+ pointer-events: none;
98
+ }
99
+
100
+ :host([padding="none"]) {
101
+ padding: 0;
102
+ }
103
+
104
+ :host([padding="small"]) {
105
+ padding: calc(var(--025) * var(--sf, 1));
106
+ }
107
+
108
+ :host([padding="medium"]) {
109
+ padding: calc(var(--05) * var(--sf, 1));
110
+ }
111
+
112
+ :host([padding="large"]) {
113
+ padding: calc(var(--1) * var(--sf, 1));
114
+ }
115
+
116
+ .card-content {
117
+ width: 100%;
118
+ height: 100%;
119
+ }
120
+ `;
121
+
122
+ render() {
123
+ return html`
124
+ <div class="card-content" part="content">
125
+ <slot></slot>
126
+ </div>
127
+ `;
128
+ }
129
+ }
130
+
131
+ customElements.define("ds-card", Card);
132
+
133
+ declare global {
134
+ interface HTMLElementTagNameMap {
135
+ "ds-card": Card;
136
+ }
137
+ }