@dropi/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/dropi-badge.cjs.entry.js +37 -0
  3. package/dist/cjs/dropi-button.cjs.entry.js +81 -0
  4. package/dist/cjs/dropi-checkbox.cjs.entry.js +36 -0
  5. package/dist/cjs/dropi-icon.cjs.entry.js +50 -0
  6. package/dist/cjs/dropi-input.cjs.entry.js +210 -0
  7. package/dist/cjs/dropi-radio-button.cjs.entry.js +47 -0
  8. package/dist/cjs/dropi-select.cjs.entry.js +335 -0
  9. package/dist/cjs/dropi-switch.cjs.entry.js +30 -0
  10. package/dist/cjs/dropi-tag.cjs.entry.js +68 -0
  11. package/dist/cjs/dropi-text-area.cjs.entry.js +103 -0
  12. package/dist/cjs/dropi-ui.cjs.js +24 -0
  13. package/dist/cjs/index-CuGLZVqo.js +1743 -0
  14. package/dist/cjs/index.cjs.js +2 -0
  15. package/dist/cjs/loader.cjs.js +12 -0
  16. package/dist/collection/assets/icons/symbol/svg/sprite.css.svg +1 -0
  17. package/dist/collection/collection-manifest.json +22 -0
  18. package/dist/collection/components/dropi-badge/dropi-badge.css +41 -0
  19. package/dist/collection/components/dropi-badge/dropi-badge.js +72 -0
  20. package/dist/collection/components/dropi-button/dropi-button.css +169 -0
  21. package/dist/collection/components/dropi-button/dropi-button.js +277 -0
  22. package/dist/collection/components/dropi-checkbox/dropi-checkbox.css +47 -0
  23. package/dist/collection/components/dropi-checkbox/dropi-checkbox.js +103 -0
  24. package/dist/collection/components/dropi-icon/dropi-icon.css +19 -0
  25. package/dist/collection/components/dropi-icon/dropi-icon.js +142 -0
  26. package/dist/collection/components/dropi-input/dropi-input.css +168 -0
  27. package/dist/collection/components/dropi-input/dropi-input.js +735 -0
  28. package/dist/collection/components/dropi-radio-button/dropi-radio-button.css +59 -0
  29. package/dist/collection/components/dropi-radio-button/dropi-radio-button.js +181 -0
  30. package/dist/collection/components/dropi-select/dropi-select.css +364 -0
  31. package/dist/collection/components/dropi-select/dropi-select.js +932 -0
  32. package/dist/collection/components/dropi-select/select.types.js +1 -0
  33. package/dist/collection/components/dropi-switch/dropi-switch.css +57 -0
  34. package/dist/collection/components/dropi-switch/dropi-switch.js +96 -0
  35. package/dist/collection/components/dropi-tag/dropi-tag.css +40 -0
  36. package/dist/collection/components/dropi-tag/dropi-tag.js +190 -0
  37. package/dist/collection/components/dropi-text-area/dropi-text-area.css +97 -0
  38. package/dist/collection/components/dropi-text-area/dropi-text-area.js +457 -0
  39. package/dist/collection/index.js +1 -0
  40. package/dist/collection/utils/utils.js +3 -0
  41. package/dist/collection/utils/utils.unit.test.js +16 -0
  42. package/dist/components/dropi-badge.d.ts +11 -0
  43. package/dist/components/dropi-badge.js +1 -0
  44. package/dist/components/dropi-button.d.ts +11 -0
  45. package/dist/components/dropi-button.js +1 -0
  46. package/dist/components/dropi-checkbox.d.ts +11 -0
  47. package/dist/components/dropi-checkbox.js +1 -0
  48. package/dist/components/dropi-icon.d.ts +11 -0
  49. package/dist/components/dropi-icon.js +1 -0
  50. package/dist/components/dropi-input.d.ts +11 -0
  51. package/dist/components/dropi-input.js +1 -0
  52. package/dist/components/dropi-radio-button.d.ts +11 -0
  53. package/dist/components/dropi-radio-button.js +1 -0
  54. package/dist/components/dropi-select.d.ts +11 -0
  55. package/dist/components/dropi-select.js +1 -0
  56. package/dist/components/dropi-switch.d.ts +11 -0
  57. package/dist/components/dropi-switch.js +1 -0
  58. package/dist/components/dropi-tag.d.ts +11 -0
  59. package/dist/components/dropi-tag.js +1 -0
  60. package/dist/components/dropi-text-area.d.ts +11 -0
  61. package/dist/components/dropi-text-area.js +1 -0
  62. package/dist/components/index.d.ts +35 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/p-MNma8N1x.js +1 -0
  65. package/dist/dropi-ui/dropi-ui.css +1 -0
  66. package/dist/dropi-ui/dropi-ui.esm.js +1 -0
  67. package/dist/dropi-ui/index.esm.js +0 -0
  68. package/dist/dropi-ui/p-1a28b8f5.entry.js +1 -0
  69. package/dist/dropi-ui/p-21abf91a.entry.js +1 -0
  70. package/dist/dropi-ui/p-52291024.entry.js +1 -0
  71. package/dist/dropi-ui/p-54502c46.entry.js +1 -0
  72. package/dist/dropi-ui/p-6f0aa619.entry.js +1 -0
  73. package/dist/dropi-ui/p-9c7076d3.entry.js +1 -0
  74. package/dist/dropi-ui/p-DFz-gwFP.js +2 -0
  75. package/dist/dropi-ui/p-a1944f3d.entry.js +1 -0
  76. package/dist/dropi-ui/p-c7b9cbda.entry.js +1 -0
  77. package/dist/dropi-ui/p-dd089a60.entry.js +1 -0
  78. package/dist/dropi-ui/p-f785011f.entry.js +1 -0
  79. package/dist/esm/dropi-badge.entry.js +35 -0
  80. package/dist/esm/dropi-button.entry.js +79 -0
  81. package/dist/esm/dropi-checkbox.entry.js +34 -0
  82. package/dist/esm/dropi-icon.entry.js +48 -0
  83. package/dist/esm/dropi-input.entry.js +208 -0
  84. package/dist/esm/dropi-radio-button.entry.js +45 -0
  85. package/dist/esm/dropi-select.entry.js +333 -0
  86. package/dist/esm/dropi-switch.entry.js +28 -0
  87. package/dist/esm/dropi-tag.entry.js +66 -0
  88. package/dist/esm/dropi-text-area.entry.js +101 -0
  89. package/dist/esm/dropi-ui.js +20 -0
  90. package/dist/esm/index-DFz-gwFP.js +1734 -0
  91. package/dist/esm/index.js +1 -0
  92. package/dist/esm/loader.js +10 -0
  93. package/dist/index.cjs.js +1 -0
  94. package/dist/index.js +1 -0
  95. package/dist/types/components/dropi-badge/dropi-badge.d.ts +12 -0
  96. package/dist/types/components/dropi-button/dropi-button.d.ts +35 -0
  97. package/dist/types/components/dropi-checkbox/dropi-checkbox.d.ts +16 -0
  98. package/dist/types/components/dropi-icon/dropi-icon.d.ts +25 -0
  99. package/dist/types/components/dropi-input/dropi-input.d.ts +92 -0
  100. package/dist/types/components/dropi-radio-button/dropi-radio-button.d.ts +25 -0
  101. package/dist/types/components/dropi-select/dropi-select.d.ts +103 -0
  102. package/dist/types/components/dropi-select/select.types.d.ts +23 -0
  103. package/dist/types/components/dropi-switch/dropi-switch.d.ts +15 -0
  104. package/dist/types/components/dropi-tag/dropi-tag.d.ts +25 -0
  105. package/dist/types/components/dropi-text-area/dropi-text-area.d.ts +53 -0
  106. package/dist/types/components.d.ts +1549 -0
  107. package/dist/types/index.d.ts +7 -0
  108. package/dist/types/stencil-public-runtime.d.ts +1860 -0
  109. package/dist/types/utils/utils.d.ts +1 -0
  110. package/dist/types/utils/utils.unit.test.d.ts +1 -0
  111. package/loader/cdn.js +1 -0
  112. package/loader/index.cjs.js +1 -0
  113. package/loader/index.d.ts +24 -0
  114. package/loader/index.es2017.js +1 -0
  115. package/loader/index.js +2 -0
  116. package/package.json +50 -0
  117. package/readme.md +89 -0
@@ -0,0 +1,72 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-badge
4
+ * Status badge for user/account states.
5
+ */
6
+ export class DropiBadge {
7
+ /** Badge state: pending | active | canceled | frozen */
8
+ state = 'pending';
9
+ stateText = {
10
+ pending: 'Pendiente',
11
+ active: 'Activo',
12
+ canceled: 'Cancelado',
13
+ frozen: 'Congelado',
14
+ };
15
+ renderIcon() {
16
+ if (this.state === 'active') {
17
+ return (h("svg", { width: "17", height: "17", viewBox: "0 0 17 17", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M11.5444 5.87067L12.5389 6.88004L8.43554 10.9225C8.16142 11.1966 7.80087 11.3333 7.43892 11.3333C7.07696 11.3333 6.71287 11.1952 6.43592 10.919L4.46533 9.00929L5.45204 7.99142L7.43042 9.90887L11.5444 5.87067ZM17 8.5C17 13.187 13.187 17 8.5 17C3.81296 17 0 13.187 0 8.5C0 3.81296 3.81296 0 8.5 0C13.187 0 17 3.81296 17 8.5ZM15.5833 8.5C15.5833 4.59425 12.4057 1.41667 8.5 1.41667C4.59425 1.41667 1.41667 4.59425 1.41667 8.5C1.41667 12.4057 4.59425 15.5833 8.5 15.5833C12.4057 15.5833 15.5833 12.4057 15.5833 8.5Z", fill: "currentColor" })));
18
+ }
19
+ if (this.state === 'pending') {
20
+ return (h("svg", { width: "17", height: "17", viewBox: "0 0 17 17", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M8.5 17C3.81296 17 0 13.187 0 8.5C0 3.81296 3.81296 0 8.5 0C13.187 0 17 3.81296 17 8.5C17 13.187 13.187 17 8.5 17ZM8.5 1.41667C4.59425 1.41667 1.41667 4.59425 1.41667 8.5C1.41667 12.4057 4.59425 15.5833 8.5 15.5833C12.4057 15.5833 15.5833 12.4057 15.5833 8.5C15.5833 4.59425 12.4057 1.41667 8.5 1.41667ZM9.20833 8.5V4.25C9.20833 3.859 8.891 3.54167 8.5 3.54167C8.109 3.54167 7.79167 3.859 7.79167 4.25V7.79167H5.66667C5.27567 7.79167 4.95833 8.109 4.95833 8.5C4.95833 8.891 5.27567 9.20833 5.66667 9.20833H8.5C8.891 9.20833 9.20833 8.891 9.20833 8.5Z", fill: "currentColor" })));
21
+ }
22
+ if (this.state === 'canceled') {
23
+ return (h("svg", { width: "12", height: "14", viewBox: "0 0 14 16", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M11.5497 4.86859V5.76046C12.1075 6.00391 12.5823 6.40464 12.916 6.91364C13.2497 7.42264 13.4279 8.01785 13.4287 8.62648V12.3844C13.4277 13.2146 13.0974 14.0106 12.5103 14.5976C11.9233 15.1847 11.1273 15.515 10.2971 15.516H4.03392C3.20368 15.515 2.40773 15.1847 1.82066 14.5976C1.23359 14.0106 0.903338 13.2146 0.902344 12.3844V8.62648C0.903144 8.01785 1.08129 7.42264 1.41498 6.91364C1.74868 6.40464 2.22347 6.00391 2.78129 5.76046V4.86859C2.78129 3.70582 3.2432 2.59068 4.0654 1.76848C4.8876 0.946282 6.00274 0.484375 7.1655 0.484375C8.32827 0.484375 9.44341 0.946282 10.2656 1.76848C11.0878 2.59068 11.5497 3.70582 11.5497 4.86859ZM4.95114 2.65422C4.36386 3.24151 4.03392 4.03804 4.03392 4.86859V5.4949H10.2971V4.86859C10.2971 4.03804 9.96715 3.24151 9.37986 2.65422C8.79258 2.06694 7.99605 1.73701 7.1655 1.73701C6.33496 1.73701 5.53843 2.06694 4.95114 2.65422ZM11.6257 13.713C11.9781 13.3606 12.176 12.8827 12.176 12.3844V8.62648C12.176 8.12815 11.9781 7.65023 11.6257 7.29786C11.2733 6.94549 10.7954 6.74753 10.2971 6.74753H4.03392C3.53559 6.74753 3.05768 6.94549 2.70531 7.29786C2.35294 7.65023 2.15498 8.12815 2.15498 8.62648V12.3844C2.15498 12.8827 2.35294 13.3606 2.70531 13.713C3.05768 14.0654 3.53559 14.2633 4.03392 14.2633H10.2971C10.7954 14.2633 11.2733 14.0654 11.6257 13.713ZM6.72263 9.43615C6.84009 9.31869 6.99939 9.25271 7.1655 9.25271C7.33161 9.25271 7.49092 9.31869 7.60837 9.43615C7.72583 9.55361 7.79182 9.71291 7.79182 9.87902V11.1317C7.79182 11.2978 7.72583 11.4571 7.60837 11.5745C7.49092 11.692 7.33161 11.758 7.1655 11.758C6.99939 11.758 6.84009 11.692 6.72263 11.5745C6.60517 11.4571 6.53919 11.2978 6.53919 11.1317V9.87902C6.53919 9.71291 6.60517 9.55361 6.72263 9.43615Z", fill: "currentColor" })));
24
+ }
25
+ return null;
26
+ }
27
+ render() {
28
+ return (h("div", { key: 'b66590d82d7dd760badcfb76c72eb3d589073721', class: `tag-state ${this.state}` }, this.renderIcon(), h("p", { key: '82ae7072f3ac6d96ed02db8289f0f98f070a882d' }, this.stateText[this.state])));
29
+ }
30
+ static get is() { return "dropi-badge"; }
31
+ static get encapsulation() { return "shadow"; }
32
+ static get originalStyleUrls() {
33
+ return {
34
+ "$": ["dropi-badge.css"]
35
+ };
36
+ }
37
+ static get styleUrls() {
38
+ return {
39
+ "$": ["dropi-badge.css"]
40
+ };
41
+ }
42
+ static get properties() {
43
+ return {
44
+ "state": {
45
+ "type": "string",
46
+ "mutable": false,
47
+ "complexType": {
48
+ "original": "BadgeState",
49
+ "resolved": "\"active\" | \"canceled\" | \"frozen\" | \"pending\"",
50
+ "references": {
51
+ "BadgeState": {
52
+ "location": "local",
53
+ "path": "/Users/mac-ti/Documents/dropi/dropi-ui/src/components/dropi-badge/dropi-badge.tsx",
54
+ "id": "src/components/dropi-badge/dropi-badge.tsx::BadgeState"
55
+ }
56
+ }
57
+ },
58
+ "required": false,
59
+ "optional": false,
60
+ "docs": {
61
+ "tags": [],
62
+ "text": "Badge state: pending | active | canceled | frozen"
63
+ },
64
+ "getter": false,
65
+ "setter": false,
66
+ "reflect": false,
67
+ "attribute": "state",
68
+ "defaultValue": "'pending'"
69
+ }
70
+ };
71
+ }
72
+ }
@@ -0,0 +1,169 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ *, *::before, *::after { box-sizing: border-box; }
6
+
7
+ .btn {
8
+ all: unset;
9
+ box-sizing: border-box;
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ gap: var(--Size-1, 4px);
14
+ border-radius: var(--Border-2, 8px);
15
+ font-weight: 700;
16
+ min-width: 33px;
17
+ line-height: 110%;
18
+ cursor: pointer;
19
+ white-space: nowrap;
20
+ transition:
21
+ background 0.25s ease,
22
+ color 0.25s ease,
23
+ border-color 0.25s ease,
24
+ transform 0.25s ease;
25
+ }
26
+
27
+ .btn:active {
28
+ transition: transform 0.01s ease-out;
29
+ transform: scale(0.98);
30
+ }
31
+
32
+ .btn:hover:not(:active) {
33
+ transform: scale(1.01);
34
+ }
35
+
36
+ .btn.without-text {
37
+ gap: 0;
38
+ }
39
+
40
+ /* ── Sizes ─────────────────────────────────────────────────── */
41
+ .btn.large { padding: var(--Size-4, 16px); font-size: var(--Size-4, 16px); height: 48px; }
42
+ .btn.normal { padding: var(--Size-3, 12px); font-size: var(--font-size-s, 12px); height: 40px; }
43
+ .btn.small { padding: var(--Size-2, 8px); font-size: var(--Size-3, 12px); height: 29px; }
44
+
45
+ /* ── Disabled / Loading ─────────────────────────────────────── */
46
+ .btn.disabled,
47
+ .btn.loading {
48
+ cursor: not-allowed;
49
+ pointer-events: none;
50
+ }
51
+
52
+ /* ══════════════════════════════════════════════════════════════
53
+ PRIMARY severity
54
+ ═══════════════════════════════════════════════════════════════ */
55
+ .btn.primary.default { background: var(--Primary-Primary-500, #f49a3d); color: var(--Neutral-White, #fff); }
56
+ .btn.primary.default:hover { background: var(--Primary-Primary-600, #e58017); }
57
+
58
+ .btn.primary.success { background: var(--Success-Success-500, #0abb87); color: var(--Neutral-White, #fff); }
59
+ .btn.primary.success:hover { background: var(--Success-Success-600, #09aa7b); }
60
+
61
+ .btn.primary.info { background: var(--Info-Info-500, #50a5f1); color: var(--Neutral-White, #fff); }
62
+ .btn.primary.info:hover { background: var(--Info-Info-600, #4996db); }
63
+
64
+ .btn.primary.error { background: var(--Error-Error-500, #f46a6b); color: var(--Neutral-White, #fff); }
65
+ .btn.primary.error:hover { background: var(--Error-Error-600, #de6061); }
66
+
67
+ .btn.primary.warning { background: var(--Warning-Warning-500, #f1b44c); color: var(--Neutral-White, #fff); }
68
+ .btn.primary.warning:hover { background: var(--Warning-Warning-600, #dba445); }
69
+
70
+ .btn.primary.legacy { background: var(--Secondary-Secondary-500, #008dbf); color: var(--Neutral-White, #fff); }
71
+ .btn.primary.legacy:hover { background: var(--Secondary-Secondary-600, #007199); }
72
+
73
+ /* Disabled primary */
74
+ .btn.primary.disabled.default { background: var(--Primary-Primary-300, #f2bc85); color: var(--Neutral-White, #fff); }
75
+ .btn.primary.disabled.success { background: var(--Success-Success-300, #5bd1af); color: var(--Neutral-White, #fff); }
76
+ .btn.primary.disabled.info { background: var(--Info-Info-300, #8ac3f6); color: var(--Neutral-White, #fff); }
77
+ .btn.primary.disabled.error { background: var(--Error-Error-300, #f89b9c); color: var(--Neutral-White, #fff); }
78
+ .btn.primary.disabled.warning { background: var(--Warning-Warning-300, #f6cd87); color: var(--Neutral-White, #fff); }
79
+ .btn.primary.disabled.legacy { background: var(--Secondary-Secondary-300, #62bad9); color: var(--Neutral-White, #fff); }
80
+
81
+ /* ══════════════════════════════════════════════════════════════
82
+ SECONDARY severity
83
+ ═══════════════════════════════════════════════════════════════ */
84
+ .btn.secondary {
85
+ background: var(--Neutral-White, #fff);
86
+ border: 1px solid;
87
+ }
88
+
89
+ .btn.secondary.default { border-color: var(--Primary-Primary-500, #f49a3d); color: var(--Primary-Primary-500, #f49a3d); }
90
+ .btn.secondary.default:hover { color: var(--Primary-Primary-600, #e58017); border-color: var(--Primary-Primary-600, #e58017); }
91
+
92
+ .btn.secondary.success { border-color: var(--Success-Success-500, #0abb87); color: var(--Success-Success-500, #0abb87); }
93
+ .btn.secondary.success:hover { color: var(--Success-Success-600, #09aa7b); border-color: var(--Success-Success-600, #09aa7b); }
94
+
95
+ .btn.secondary.info { border-color: var(--Info-Info-500, #50a5f1); color: var(--Info-Info-500, #50a5f1); }
96
+ .btn.secondary.info:hover { color: var(--Info-Info-600, #4996db); border-color: var(--Info-Info-600, #4996db); }
97
+
98
+ .btn.secondary.error { border-color: var(--Error-Error-500, #f46a6b); color: var(--Error-Error-500, #f46a6b); }
99
+ .btn.secondary.error:hover { color: var(--Error-Error-600, #de6061); border-color: var(--Error-Error-600, #de6061); }
100
+
101
+ .btn.secondary.warning { border-color: var(--Warning-Warning-500, #f1b44c); color: var(--Warning-Warning-500, #f1b44c); }
102
+ .btn.secondary.warning:hover { color: var(--Warning-Warning-600, #dba445); border-color: var(--Warning-Warning-600, #dba445); }
103
+
104
+ .btn.secondary.legacy { border-color: var(--Secondary-Secondary-500, #008dbf); color: var(--Secondary-Secondary-500, #008dbf); }
105
+ .btn.secondary.legacy:hover { color: var(--Secondary-Secondary-600, #007199); border-color: var(--Secondary-Secondary-600, #007199); }
106
+
107
+ /* Disabled secondary */
108
+ .btn.secondary.disabled.default { border-color: var(--Primary-Primary-300, #f2bc85); color: var(--Primary-Primary-300, #f2bc85); }
109
+ .btn.secondary.disabled.success { border-color: var(--Success-Success-300, #5bd1af); color: var(--Success-Success-300, #5bd1af); }
110
+ .btn.secondary.disabled.info { border-color: var(--Info-Info-300, #8ac3f6); color: var(--Info-Info-300, #8ac3f6); }
111
+ .btn.secondary.disabled.error { border-color: var(--Error-Error-300, #f89b9c); color: var(--Error-Error-300, #f89b9c); }
112
+ .btn.secondary.disabled.warning { border-color: var(--Warning-Warning-300, #f6cd87); color: var(--Warning-Warning-300, #f6cd87); }
113
+ .btn.secondary.disabled.legacy { border-color: var(--Secondary-Secondary-300, #62bad9); color: var(--Secondary-Secondary-300, #62bad9); }
114
+
115
+ /* ══════════════════════════════════════════════════════════════
116
+ TERTIARY severity
117
+ ═══════════════════════════════════════════════════════════════ */
118
+ .btn.tertiary { background: none; border: none; }
119
+
120
+ .btn.tertiary.default,
121
+ .btn.tertiary.legacy {
122
+ border: 1px solid var(--Gray-Gray-200, #c3c9d9);
123
+ color: var(--Gray-Gray-500, #69738c);
124
+ }
125
+ .btn.tertiary.default:hover,
126
+ .btn.tertiary.legacy:hover {
127
+ border-color: var(--Gray-Gray-400, #858ea6);
128
+ color: var(--Gray-Gray-600, #475066);
129
+ }
130
+
131
+ .btn.tertiary.success { color: var(--Success-Success-500, #0abb87); }
132
+ .btn.tertiary.success:hover { background: var(--Success-Success-50, #e7f8f3); }
133
+
134
+ .btn.tertiary.info { color: var(--Info-Info-500, #50a5f1); }
135
+ .btn.tertiary.info:hover { background: var(--Info-Info-50, #eef6fe); }
136
+
137
+ .btn.tertiary.error { color: var(--Error-Error-500, #f46a6b); }
138
+ .btn.tertiary.error:hover { background: var(--Error-Error-50, #fef0f0); }
139
+
140
+ .btn.tertiary.warning { color: var(--Warning-Warning-500, #f1b44c); }
141
+ .btn.tertiary.warning:hover { background: var(--Warning-Warning-50, #fef8ed); }
142
+
143
+ .btn.tertiary.dropdown {
144
+ color: var(--Gray-Gray-500, #69738c);
145
+ font-weight: 400;
146
+ font-size: 14px;
147
+ background: transparent;
148
+ }
149
+
150
+ /* Disabled tertiary */
151
+ .btn.tertiary.disabled.default,
152
+ .btn.tertiary.disabled.legacy {
153
+ border: 1px solid var(--Gray-Gray-200, #c3c9d9);
154
+ color: var(--Gray-Gray-400, #858ea6);
155
+ }
156
+ .btn.tertiary.disabled.success { color: var(--Success-Success-300, #5bd1af); }
157
+ .btn.tertiary.disabled.info { color: var(--Info-Info-300, #8ac3f6); }
158
+ .btn.tertiary.disabled.error { color: var(--Error-Error-300, #f89b9c); }
159
+ .btn.tertiary.disabled.warning { color: var(--Warning-Warning-300, #f6cd87); }
160
+
161
+ /* ── Loading spinner ─────────────────────────────────────────── */
162
+ .spin {
163
+ animation: spin 1s linear infinite;
164
+ }
165
+
166
+ @keyframes spin {
167
+ from { transform: rotate(0deg); }
168
+ to { transform: rotate(360deg); }
169
+ }
@@ -0,0 +1,277 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-button
4
+ * Primary action button with multiple types, severities, sizes and states.
5
+ * Supports pre/post icons and a loading spinner.
6
+ */
7
+ export class DropiButton {
8
+ /** Visual color palette */
9
+ type = 'default';
10
+ /** Primary (filled) | Secondary (outlined) | Tertiary (ghost) */
11
+ severity = 'primary';
12
+ /** Button size */
13
+ size = 'normal';
14
+ /** Button state */
15
+ state = 'default';
16
+ /** Icon name to show before the text */
17
+ preIcon = '';
18
+ /** Icon name to show after the text */
19
+ postIcon = '';
20
+ /** Button label */
21
+ text = '';
22
+ /** Emitted on click (not emitted when disabled or loading) */
23
+ dropiClick;
24
+ colorMap = {
25
+ default: 'Primary-Primary-',
26
+ success: 'Success-Success-',
27
+ error: 'Error-Error-',
28
+ info: 'Info-Info-',
29
+ legacy: 'Secondary-Secondary-',
30
+ warning: 'Warning-Warning-',
31
+ dropdown: 'Gray-Gray-',
32
+ };
33
+ get iconSize() {
34
+ if (this.size === 'large')
35
+ return '24px';
36
+ if (this.size === 'small')
37
+ return '16px';
38
+ return '18px';
39
+ }
40
+ get color() {
41
+ const intensity = this.state === 'disabled' ? '300' : '500';
42
+ return (this.colorMap[this.type] ?? 'Primary-Primary-') + intensity;
43
+ }
44
+ get fontColor() {
45
+ if (this.severity === 'tertiary') {
46
+ return this.type === 'default' || this.type === 'legacy' ? 'Gray-Gray-500' : this.color;
47
+ }
48
+ if (this.severity === 'secondary')
49
+ return this.color;
50
+ return 'Neutral-White';
51
+ }
52
+ handleClick(e) {
53
+ if (this.state !== 'disabled' && this.state !== 'loading') {
54
+ this.dropiClick.emit(e);
55
+ }
56
+ }
57
+ renderLoadingSpinner() {
58
+ return (h("svg", { class: "spin", width: this.iconSize, height: this.iconSize, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, h("path", { d: "M22.8 12C23.4627 12 24.0062 11.4614 23.9401 10.802C23.8232 9.6371 23.5362 8.49339 23.0866 7.4078C22.4835 5.95189 21.5996 4.62902 20.4853 3.51472C19.371 2.40042 18.0481 1.5165 16.5922 0.913445C15.5066 0.463778 14.3629 0.17683 13.198 0.0599502C12.5386 -0.00621439 12 0.537258 12 1.2C12 1.86274 12.5393 2.39227 13.1969 2.4749C14.0463 2.58164 14.8795 2.80176 15.6738 3.13076C16.8385 3.6132 17.8968 4.32033 18.7882 5.21177C19.6797 6.10322 20.3868 7.16151 20.8692 8.32624C21.1982 9.12051 21.4184 9.95367 21.5251 10.8031C21.6077 11.4607 22.1373 12 22.8 12Z", fill: `var(--${this.fontColor})` })));
59
+ }
60
+ render() {
61
+ const isDisabled = this.state === 'disabled' || this.state === 'loading';
62
+ const hasText = this.text !== '';
63
+ const showPostIcon = this.postIcon !== '' || this.type === 'dropdown';
64
+ const dropdownIcon = this.type === 'dropdown' ? 'Dropdown-down' : this.postIcon;
65
+ return (h("button", { key: '6cde7f2616d1cff9e3304481f2a0c38aabc34192', class: {
66
+ btn: true,
67
+ 'without-text': !hasText,
68
+ [this.severity]: true,
69
+ [this.type]: true,
70
+ [this.size]: true,
71
+ [this.state]: true,
72
+ }, disabled: isDisabled, onClick: (e) => this.handleClick(e) }, this.preIcon && (h("dropi-icon", { key: '769cea8fce2947552462aa2cbbb09d64df952c76', name: this.preIcon, width: this.iconSize, height: this.iconSize, color: this.fontColor })), hasText && h("span", { key: 'f66ad80283d54f643cf37ea702145127b90d4ce4', class: "text" }, this.text), showPostIcon && (h("dropi-icon", { key: '4fd9c7d7d029c3316bc0492576cda0cca74fa460', name: dropdownIcon, width: this.iconSize, height: this.iconSize, color: this.fontColor })), this.state === 'loading' && this.renderLoadingSpinner(), h("slot", { key: '3280c56a28ea40016d35e186b9997635b8ba881b' })));
73
+ }
74
+ static get is() { return "dropi-button"; }
75
+ static get encapsulation() { return "shadow"; }
76
+ static get originalStyleUrls() {
77
+ return {
78
+ "$": ["dropi-button.css"]
79
+ };
80
+ }
81
+ static get styleUrls() {
82
+ return {
83
+ "$": ["dropi-button.css"]
84
+ };
85
+ }
86
+ static get properties() {
87
+ return {
88
+ "type": {
89
+ "type": "string",
90
+ "mutable": false,
91
+ "complexType": {
92
+ "original": "ButtonType",
93
+ "resolved": "\"default\" | \"dropdown\" | \"error\" | \"info\" | \"legacy\" | \"success\" | \"warning\"",
94
+ "references": {
95
+ "ButtonType": {
96
+ "location": "local",
97
+ "path": "/Users/mac-ti/Documents/dropi/dropi-ui/src/components/dropi-button/dropi-button.tsx",
98
+ "id": "src/components/dropi-button/dropi-button.tsx::ButtonType"
99
+ }
100
+ }
101
+ },
102
+ "required": false,
103
+ "optional": false,
104
+ "docs": {
105
+ "tags": [],
106
+ "text": "Visual color palette"
107
+ },
108
+ "getter": false,
109
+ "setter": false,
110
+ "reflect": false,
111
+ "attribute": "type",
112
+ "defaultValue": "'default'"
113
+ },
114
+ "severity": {
115
+ "type": "string",
116
+ "mutable": false,
117
+ "complexType": {
118
+ "original": "ButtonSeverity",
119
+ "resolved": "\"primary\" | \"secondary\" | \"tertiary\"",
120
+ "references": {
121
+ "ButtonSeverity": {
122
+ "location": "local",
123
+ "path": "/Users/mac-ti/Documents/dropi/dropi-ui/src/components/dropi-button/dropi-button.tsx",
124
+ "id": "src/components/dropi-button/dropi-button.tsx::ButtonSeverity"
125
+ }
126
+ }
127
+ },
128
+ "required": false,
129
+ "optional": false,
130
+ "docs": {
131
+ "tags": [],
132
+ "text": "Primary (filled) | Secondary (outlined) | Tertiary (ghost)"
133
+ },
134
+ "getter": false,
135
+ "setter": false,
136
+ "reflect": false,
137
+ "attribute": "severity",
138
+ "defaultValue": "'primary'"
139
+ },
140
+ "size": {
141
+ "type": "string",
142
+ "mutable": false,
143
+ "complexType": {
144
+ "original": "ButtonSize",
145
+ "resolved": "\"large\" | \"normal\" | \"small\"",
146
+ "references": {
147
+ "ButtonSize": {
148
+ "location": "local",
149
+ "path": "/Users/mac-ti/Documents/dropi/dropi-ui/src/components/dropi-button/dropi-button.tsx",
150
+ "id": "src/components/dropi-button/dropi-button.tsx::ButtonSize"
151
+ }
152
+ }
153
+ },
154
+ "required": false,
155
+ "optional": false,
156
+ "docs": {
157
+ "tags": [],
158
+ "text": "Button size"
159
+ },
160
+ "getter": false,
161
+ "setter": false,
162
+ "reflect": false,
163
+ "attribute": "size",
164
+ "defaultValue": "'normal'"
165
+ },
166
+ "state": {
167
+ "type": "string",
168
+ "mutable": false,
169
+ "complexType": {
170
+ "original": "ButtonState",
171
+ "resolved": "\"default\" | \"disabled\" | \"loading\"",
172
+ "references": {
173
+ "ButtonState": {
174
+ "location": "local",
175
+ "path": "/Users/mac-ti/Documents/dropi/dropi-ui/src/components/dropi-button/dropi-button.tsx",
176
+ "id": "src/components/dropi-button/dropi-button.tsx::ButtonState"
177
+ }
178
+ }
179
+ },
180
+ "required": false,
181
+ "optional": false,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": "Button state"
185
+ },
186
+ "getter": false,
187
+ "setter": false,
188
+ "reflect": false,
189
+ "attribute": "state",
190
+ "defaultValue": "'default'"
191
+ },
192
+ "preIcon": {
193
+ "type": "string",
194
+ "mutable": false,
195
+ "complexType": {
196
+ "original": "string",
197
+ "resolved": "string",
198
+ "references": {}
199
+ },
200
+ "required": false,
201
+ "optional": false,
202
+ "docs": {
203
+ "tags": [],
204
+ "text": "Icon name to show before the text"
205
+ },
206
+ "getter": false,
207
+ "setter": false,
208
+ "reflect": false,
209
+ "attribute": "pre-icon",
210
+ "defaultValue": "''"
211
+ },
212
+ "postIcon": {
213
+ "type": "string",
214
+ "mutable": false,
215
+ "complexType": {
216
+ "original": "string",
217
+ "resolved": "string",
218
+ "references": {}
219
+ },
220
+ "required": false,
221
+ "optional": false,
222
+ "docs": {
223
+ "tags": [],
224
+ "text": "Icon name to show after the text"
225
+ },
226
+ "getter": false,
227
+ "setter": false,
228
+ "reflect": false,
229
+ "attribute": "post-icon",
230
+ "defaultValue": "''"
231
+ },
232
+ "text": {
233
+ "type": "string",
234
+ "mutable": false,
235
+ "complexType": {
236
+ "original": "string",
237
+ "resolved": "string",
238
+ "references": {}
239
+ },
240
+ "required": false,
241
+ "optional": false,
242
+ "docs": {
243
+ "tags": [],
244
+ "text": "Button label"
245
+ },
246
+ "getter": false,
247
+ "setter": false,
248
+ "reflect": false,
249
+ "attribute": "text",
250
+ "defaultValue": "''"
251
+ }
252
+ };
253
+ }
254
+ static get events() {
255
+ return [{
256
+ "method": "dropiClick",
257
+ "name": "dropiClick",
258
+ "bubbles": true,
259
+ "cancelable": true,
260
+ "composed": true,
261
+ "docs": {
262
+ "tags": [],
263
+ "text": "Emitted on click (not emitted when disabled or loading)"
264
+ },
265
+ "complexType": {
266
+ "original": "MouseEvent",
267
+ "resolved": "MouseEvent",
268
+ "references": {
269
+ "MouseEvent": {
270
+ "location": "global",
271
+ "id": "global::MouseEvent"
272
+ }
273
+ }
274
+ }
275
+ }];
276
+ }
277
+ }
@@ -0,0 +1,47 @@
1
+ :host {
2
+ display: inline-block;
3
+ }
4
+
5
+ *, *::before, *::after {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ .container-dropi-checkbox {
10
+ display: inline-block;
11
+ }
12
+
13
+ .check {
14
+ width: 20px;
15
+ height: 20px;
16
+ border-radius: var(--Border-1, 4px);
17
+ cursor: pointer;
18
+ transition:
19
+ background-color 0.3s ease-in-out,
20
+ border-style 0.3s ease-in-out;
21
+ }
22
+
23
+ .noCheck {
24
+ border-style: solid;
25
+ border-width: 2px;
26
+ border-color: var(--Gray-Gray-200, #c3c9d9);
27
+ display: flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ }
31
+
32
+ .noCheck svg {
33
+ visibility: hidden;
34
+ }
35
+
36
+ .isCheck {
37
+ display: flex;
38
+ background-color: var(--Primary-Primary-500, #f49a3d);
39
+ justify-content: center;
40
+ align-items: center;
41
+ }
42
+
43
+ .disabled {
44
+ background-color: var(--Gray-Gray-50, #f7f8fa);
45
+ border-color: var(--Gray-Gray-100, #e6eaf2);
46
+ cursor: not-allowed;
47
+ }
@@ -0,0 +1,103 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component dropi-checkbox
4
+ * A styled checkbox that emits change events.
5
+ * Supports form association via native `<input type="checkbox">` internals.
6
+ */
7
+ export class DropiCheckbox {
8
+ /** Whether the checkbox is checked */
9
+ checked = false;
10
+ /** Whether the checkbox is disabled */
11
+ disabled = false;
12
+ /** Emitted when the checked state changes */
13
+ dropiChange;
14
+ changeState() {
15
+ if (this.disabled)
16
+ return;
17
+ this.checked = !this.checked;
18
+ this.dropiChange.emit(this.checked);
19
+ }
20
+ render() {
21
+ return (h("div", { key: 'e5c7ef2fd09e5e18b71cbbdd96cc13d4fd99b8a5', class: "container-dropi-checkbox", onClick: () => this.changeState() }, h("div", { key: '2b6a006125e8e68fbba9285451d0d7a578c183d2', class: {
22
+ check: true,
23
+ isCheck: this.checked,
24
+ noCheck: !this.checked,
25
+ disabled: this.disabled,
26
+ } }, h("svg", { key: 'ce19f7e7e1159ee2915a78827775bd969484aa4a', xmlns: "http://www.w3.org/2000/svg", width: "12", height: "12", viewBox: "0 0 24 24", fill: "none" }, h("path", { key: 'f41304ce433c5ea47f8eb964278e1a4c2c8184b2', d: "M20.5991 5.69251L9.08325 17.2075C9.00583 17.2852 8.91382 17.3469 8.8125 17.389C8.71118 17.4311 8.60255 17.4527 8.49283 17.4527C8.38312 17.4527 8.27449 17.4311 8.17317 17.389C8.07185 17.3469 7.97984 17.2852 7.90242 17.2075L3.44908 12.75C3.37166 12.6723 3.27965 12.6106 3.17833 12.5685C3.07701 12.5264 2.96838 12.5048 2.85867 12.5048C2.74896 12.5048 2.64032 12.5264 2.53901 12.5685C2.43769 12.6106 2.34568 12.6723 2.26825 12.75C2.19052 12.8274 2.12884 12.9194 2.08676 13.0208C2.04467 13.1221 2.02301 13.2307 2.02301 13.3404C2.02301 13.4501 2.04467 13.5588 2.08676 13.6601C2.12884 13.7614 2.19052 13.8534 2.26825 13.9308L6.72325 18.385C7.19321 18.8541 7.83008 19.1175 8.49408 19.1175C9.15809 19.1175 9.79496 18.8541 10.2649 18.385L21.7799 6.87251C21.8575 6.7951 21.9191 6.70314 21.9611 6.6019C22.0031 6.50065 22.0247 6.39212 22.0247 6.28251C22.0247 6.17289 22.0031 6.06436 21.9611 5.96312C21.9191 5.86188 21.8575 5.76992 21.7799 5.69251C21.7025 5.61478 21.6105 5.5531 21.5092 5.51101C21.4078 5.46893 21.2992 5.44727 21.1895 5.44727C21.0798 5.44727 20.9712 5.46893 20.8698 5.51101C20.7685 5.5531 20.6765 5.61478 20.5991 5.69251Z", fill: "#FFFFFF" })))));
27
+ }
28
+ static get is() { return "dropi-checkbox"; }
29
+ static get encapsulation() { return "shadow"; }
30
+ static get formAssociated() { return true; }
31
+ static get originalStyleUrls() {
32
+ return {
33
+ "$": ["dropi-checkbox.css"]
34
+ };
35
+ }
36
+ static get styleUrls() {
37
+ return {
38
+ "$": ["dropi-checkbox.css"]
39
+ };
40
+ }
41
+ static get properties() {
42
+ return {
43
+ "checked": {
44
+ "type": "boolean",
45
+ "mutable": true,
46
+ "complexType": {
47
+ "original": "boolean",
48
+ "resolved": "boolean",
49
+ "references": {}
50
+ },
51
+ "required": false,
52
+ "optional": false,
53
+ "docs": {
54
+ "tags": [],
55
+ "text": "Whether the checkbox is checked"
56
+ },
57
+ "getter": false,
58
+ "setter": false,
59
+ "reflect": true,
60
+ "attribute": "checked",
61
+ "defaultValue": "false"
62
+ },
63
+ "disabled": {
64
+ "type": "boolean",
65
+ "mutable": false,
66
+ "complexType": {
67
+ "original": "boolean",
68
+ "resolved": "boolean",
69
+ "references": {}
70
+ },
71
+ "required": false,
72
+ "optional": false,
73
+ "docs": {
74
+ "tags": [],
75
+ "text": "Whether the checkbox is disabled"
76
+ },
77
+ "getter": false,
78
+ "setter": false,
79
+ "reflect": true,
80
+ "attribute": "disabled",
81
+ "defaultValue": "false"
82
+ }
83
+ };
84
+ }
85
+ static get events() {
86
+ return [{
87
+ "method": "dropiChange",
88
+ "name": "dropiChange",
89
+ "bubbles": true,
90
+ "cancelable": true,
91
+ "composed": true,
92
+ "docs": {
93
+ "tags": [],
94
+ "text": "Emitted when the checked state changes"
95
+ },
96
+ "complexType": {
97
+ "original": "boolean",
98
+ "resolved": "boolean",
99
+ "references": {}
100
+ }
101
+ }];
102
+ }
103
+ }