@shibui-ui/ui 1.25.0 → 1.25.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 (177) hide show
  1. package/dist/index11.js +1 -1
  2. package/dist/index194.js +97 -6
  3. package/dist/index194.js.map +1 -1
  4. package/dist/index195.js +2 -2
  5. package/dist/index197.js +2 -18
  6. package/dist/index197.js.map +1 -1
  7. package/dist/index198.js +74 -2
  8. package/dist/index198.js.map +1 -1
  9. package/dist/index199.js +64 -74
  10. package/dist/index199.js.map +1 -1
  11. package/dist/index200.js +2 -2
  12. package/dist/index201.js +57 -2
  13. package/dist/index201.js.map +1 -1
  14. package/dist/index202.js +2 -39
  15. package/dist/index202.js.map +1 -1
  16. package/dist/index203.js +2 -2
  17. package/dist/index204.js +144 -219
  18. package/dist/index204.js.map +1 -1
  19. package/dist/index205.js +43 -82
  20. package/dist/index205.js.map +1 -1
  21. package/dist/index206.js +51 -2
  22. package/dist/index206.js.map +1 -1
  23. package/dist/index207.js +2 -94
  24. package/dist/index207.js.map +1 -1
  25. package/dist/index208.js +33 -2
  26. package/dist/index208.js.map +1 -1
  27. package/dist/index209.js +2 -268
  28. package/dist/index209.js.map +1 -1
  29. package/dist/index210.js +6 -2
  30. package/dist/index210.js.map +1 -1
  31. package/dist/index211.js +2 -21
  32. package/dist/index211.js.map +1 -1
  33. package/dist/index212.js +260 -2
  34. package/dist/index212.js.map +1 -1
  35. package/dist/index213.js +16 -8
  36. package/dist/index213.js.map +1 -1
  37. package/dist/index214.js +2 -2
  38. package/dist/index215.js +2 -15
  39. package/dist/index215.js.map +1 -1
  40. package/dist/index216.js +66 -2
  41. package/dist/index216.js.map +1 -1
  42. package/dist/index217.js +24 -146
  43. package/dist/index217.js.map +1 -1
  44. package/dist/index218.js +2 -2
  45. package/dist/index219.js +2 -5
  46. package/dist/index219.js.map +1 -1
  47. package/dist/index220.js +81 -2
  48. package/dist/index220.js.map +1 -1
  49. package/dist/index221.js +78 -6
  50. package/dist/index221.js.map +1 -1
  51. package/dist/index222.js +2 -2
  52. package/dist/index223.js +133 -2
  53. package/dist/index223.js.map +1 -1
  54. package/dist/index224.js +2 -92
  55. package/dist/index224.js.map +1 -1
  56. package/dist/index225.js +2 -59
  57. package/dist/index225.js.map +1 -1
  58. package/dist/index226.js +72 -2
  59. package/dist/index226.js.map +1 -1
  60. package/dist/index227.js +94 -97
  61. package/dist/index227.js.map +1 -1
  62. package/dist/index228.js +2 -2
  63. package/dist/index229.js +71 -2
  64. package/dist/index229.js.map +1 -1
  65. package/dist/index230.js +2 -74
  66. package/dist/index230.js.map +1 -1
  67. package/dist/index231.js +2 -74
  68. package/dist/index231.js.map +1 -1
  69. package/dist/index232.js +12 -2
  70. package/dist/index232.js.map +1 -1
  71. package/dist/index233.js +5 -53
  72. package/dist/index233.js.map +1 -1
  73. package/dist/index234.js +2 -2
  74. package/dist/index235.js +18 -2
  75. package/dist/index235.js.map +1 -1
  76. package/dist/index236.js +2 -162
  77. package/dist/index236.js.map +1 -1
  78. package/dist/index237.js +84 -43
  79. package/dist/index237.js.map +1 -1
  80. package/dist/index238.js +2 -51
  81. package/dist/index238.js.map +1 -1
  82. package/dist/index239.js +2 -2
  83. package/dist/index240.js +39 -33
  84. package/dist/index240.js.map +1 -1
  85. package/dist/index241.js +2 -2
  86. package/dist/index242.js +236 -5
  87. package/dist/index242.js.map +1 -1
  88. package/dist/index243.js +82 -2
  89. package/dist/index243.js.map +1 -1
  90. package/dist/index244.js +2 -260
  91. package/dist/index244.js.map +1 -1
  92. package/dist/index245.js +93 -16
  93. package/dist/index245.js.map +1 -1
  94. package/dist/index246.js +2 -2
  95. package/dist/index247.js +268 -2
  96. package/dist/index247.js.map +1 -1
  97. package/dist/index248.js +2 -66
  98. package/dist/index248.js.map +1 -1
  99. package/dist/index249.js +13 -24
  100. package/dist/index249.js.map +1 -1
  101. package/dist/index250.js +2 -2
  102. package/dist/index251.js +9 -2
  103. package/dist/index251.js.map +1 -1
  104. package/dist/index252.js +2 -81
  105. package/dist/index252.js.map +1 -1
  106. package/dist/index253.js +12 -78
  107. package/dist/index253.js.map +1 -1
  108. package/dist/index254.js +2 -2
  109. package/dist/index255.js +132 -111
  110. package/dist/index255.js.map +1 -1
  111. package/dist/index256.js +2 -2
  112. package/dist/index257.js +5 -2
  113. package/dist/index257.js.map +1 -1
  114. package/dist/index258.js +2 -72
  115. package/dist/index258.js.map +1 -1
  116. package/dist/index259.js +5 -93
  117. package/dist/index259.js.map +1 -1
  118. package/dist/index260.js +2 -2
  119. package/dist/index261.js +2 -71
  120. package/dist/index261.js.map +1 -1
  121. package/dist/index262.js +92 -2
  122. package/dist/index262.js.map +1 -1
  123. package/dist/index263.js +59 -2
  124. package/dist/index263.js.map +1 -1
  125. package/dist/index264.js +2 -12
  126. package/dist/index264.js.map +1 -1
  127. package/dist/index34.js +1 -1
  128. package/dist/index347.js +1 -1
  129. package/dist/index353.js +14 -32
  130. package/dist/index353.js.map +1 -1
  131. package/dist/index354.js +20 -6
  132. package/dist/index354.js.map +1 -1
  133. package/dist/index355.js +56 -18
  134. package/dist/index355.js.map +1 -1
  135. package/dist/index356.js +55 -57
  136. package/dist/index356.js.map +1 -1
  137. package/dist/index357.js +32 -64
  138. package/dist/index357.js.map +1 -1
  139. package/dist/index44.js +1 -1
  140. package/dist/index47.js +1 -1
  141. package/dist/index49.js +2 -2
  142. package/dist/index50.js +2 -2
  143. package/dist/index51.js +2 -2
  144. package/dist/index52.js +2 -2
  145. package/dist/index53.js +3 -3
  146. package/dist/index54.js +2 -2
  147. package/dist/index55.js +2 -2
  148. package/dist/index56.js +3 -3
  149. package/dist/index57.js +2 -2
  150. package/dist/index58.js +2 -2
  151. package/dist/index59.js +2 -2
  152. package/dist/index60.js +2 -2
  153. package/dist/index61.js +2 -2
  154. package/dist/index62.js +2 -2
  155. package/dist/index63.js +2 -2
  156. package/dist/index64.js +2 -2
  157. package/dist/index65.js +2 -2
  158. package/dist/index66.js +1 -1
  159. package/dist/index67.js +1 -1
  160. package/dist/index68.js +2 -2
  161. package/dist/index69.js +2 -2
  162. package/dist/index70.js +2 -2
  163. package/dist/index71.js +2 -2
  164. package/dist/index72.js +2 -2
  165. package/dist/index73.js +2 -2
  166. package/dist/index74.js +2 -2
  167. package/dist/index75.js +2 -2
  168. package/dist/index76.js +2 -2
  169. package/dist/index77.js +2 -2
  170. package/dist/index78.js +2 -2
  171. package/dist/index79.js +2 -2
  172. package/dist/index80.js +2 -2
  173. package/dist/index81.js +2 -2
  174. package/dist/index82.js +1 -1
  175. package/dist/index83.js +2 -2
  176. package/dist/index84.js +2 -2
  177. package/package.json +4 -4
package/dist/index11.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { unsafeCSS, css, LitElement } from "lit";
2
2
  import { property, customElement } from "lit/decorators.js";
3
- import { generateUniqueId } from "./index242.js";
3
+ import { generateUniqueId } from "./index210.js";
4
4
  import buttonCss from "./index281.js";
5
5
  import sharedTokens from "./index196.js";
6
6
  import { buttonTemplate } from "./index282.js";
package/dist/index194.js CHANGED
@@ -1,12 +1,103 @@
1
- import { html } from "lit";
2
- function accordionTemplate(props) {
1
+ import { html, nothing } from "lit";
2
+ import { classMap as e } from "./index357.js";
3
+ function renderSep(separator) {
4
+ if (separator === "chevron") {
5
+ return html`
6
+ <span class="bc-sep" aria-hidden="true">
7
+ <lib-icon name="caret-right" size="xs"></lib-icon>
8
+ </span>
9
+ `;
10
+ }
11
+ return html`<span class="bc-sep" aria-hidden="true"></span>`;
12
+ }
13
+ function renderIcon(icon) {
14
+ if (!icon) return nothing;
15
+ return html`<span class="bc-icon"><lib-icon name="${icon}" size="xs"></lib-icon></span>`;
16
+ }
17
+ function renderLink(item, index, separator, onNavigate) {
18
+ return html`
19
+ <li class="bc-item">
20
+ <a
21
+ class="bc-link"
22
+ href="${item.href ?? "#"}"
23
+ @click="${(e2) => {
24
+ e2.preventDefault();
25
+ onNavigate(item, index);
26
+ }}"
27
+ >
28
+ ${renderIcon(item.icon)}
29
+ ${item.label ? html`${item.label}` : nothing}
30
+ </a>
31
+ ${renderSep(separator)}
32
+ </li>
33
+ `;
34
+ }
35
+ function renderCurrent(item) {
36
+ return html`
37
+ <li class="bc-item">
38
+ <span class="bc-current" aria-current="page">
39
+ ${renderIcon(item.icon)}
40
+ ${item.label ? html`${item.label}` : nothing}
41
+ </span>
42
+ </li>
43
+ `;
44
+ }
45
+ function renderEllipsis(separator, onExpand) {
46
+ return html`
47
+ <li class="bc-item">
48
+ <button
49
+ class="bc-ellipsis"
50
+ aria-label="Mostrar ruta completa"
51
+ @click="${onExpand}"
52
+ >…</button>
53
+ ${renderSep(separator)}
54
+ </li>
55
+ `;
56
+ }
57
+ function renderItems(p) {
58
+ const { items, separator, maxVisible, expanded, onExpand, onNavigate } = p;
59
+ const shouldCollapse = maxVisible > 0 && items.length > maxVisible && !expanded;
60
+ if (shouldCollapse) {
61
+ const first = items[0];
62
+ const last = items[items.length - 1];
63
+ if (!first || !last) return [];
64
+ return [
65
+ renderLink(first, 0, separator, onNavigate),
66
+ renderEllipsis(separator, onExpand),
67
+ last.href ? renderLink(last, items.length - 1, separator, onNavigate) : renderCurrent(last)
68
+ ];
69
+ }
70
+ return items.map((item, i) => {
71
+ const isLast = i === items.length - 1;
72
+ if (isLast || !item.href) return renderCurrent(item);
73
+ return renderLink(item, i, separator, onNavigate);
74
+ });
75
+ }
76
+ function breadcrumbTemplate(p) {
77
+ const bcClasses = {
78
+ "bc": true,
79
+ "bc-slash": p.separator === "slash",
80
+ "bc-chevron": p.separator === "chevron",
81
+ "bc-dot": p.separator === "dot",
82
+ "bc-line": p.separator === "line",
83
+ "bc-sm": p.size === "sm",
84
+ "bc-lg": p.size === "lg",
85
+ "bc-filled": p.surface === "filled",
86
+ "bc-pill": p.surface === "pill",
87
+ "bc-kaki": p.accent === "kaki",
88
+ "bc-celadon": p.accent === "celadon",
89
+ "bc-bold": p.accent === "bold",
90
+ "bc-dark": p.dark
91
+ };
3
92
  return html`
4
- <div class="accordion__root" @accordion-toggle=${props.onToggle}>
5
- <slot></slot>
6
- </div>
93
+ <nav class="${e(bcClasses)}" aria-label="breadcrumb">
94
+ <ol class="bc-list">
95
+ ${renderItems(p)}
96
+ </ol>
97
+ </nav>
7
98
  `;
8
99
  }
9
100
  export {
10
- accordionTemplate
101
+ breadcrumbTemplate
11
102
  };
12
103
  //# sourceMappingURL=index194.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index194.js","sources":["../src/components/organisms/accordion/lib-accordion.component.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\n\nexport interface AccordionTemplateProps {\n onToggle: (e: Event) => void;\n}\n\n/**\n * Plantilla para lib-accordion.\n *\n * El organismo es un contenedor de slot: no renderiza items propios,\n * solo orquesta el comportamiento exclusive y aplica variantes via CSS.\n */\nexport function accordionTemplate(props: AccordionTemplateProps): TemplateResult {\n return html`\n <div class=\"accordion__root\" @accordion-toggle=${props.onToggle}>\n <slot></slot>\n </div>\n `;\n}"],"names":[],"mappings":";AAYO,SAAS,kBAAkB,OAA+C;AAC/E,SAAO;AAAA,qDAC4C,MAAM,QAAQ;AAAA;AAAA;AAAA;AAInE;"}
1
+ {"version":3,"file":"index194.js","sources":["../src/components/molecules/breadcrumb/lib-breadcrumb.html.ts"],"sourcesContent":["import { html, nothing, TemplateResult } from 'lit';\nimport { classMap } from 'lit/directives/class-map.js';\nimport type {\n BreadcrumbItem,\n BreadcrumbSeparator,\n BreadcrumbSize,\n BreadcrumbSurface,\n BreadcrumbAccent,\n} from './lib-breadcrumb.types';\n\nexport interface BreadcrumbTemplateProps {\n items: BreadcrumbItem[];\n separator: BreadcrumbSeparator;\n size: BreadcrumbSize;\n surface: BreadcrumbSurface;\n accent: BreadcrumbAccent;\n dark: boolean;\n /** Si > 0 y items.length > maxVisible, colapsa los crumbs intermedios. */\n maxVisible: number;\n /** Estado interno: ¿está expandido el truncado? */\n expanded: boolean;\n onExpand: () => void;\n onNavigate: (item: BreadcrumbItem, index: number) => void;\n}\n\n/* ── Separador ─────────────────────────────────────────── */\nfunction renderSep(separator: BreadcrumbSeparator): TemplateResult {\n if (separator === 'chevron') {\n return html`\n <span class=\"bc-sep\" aria-hidden=\"true\">\n <lib-icon name=\"caret-right\" size=\"xs\"></lib-icon>\n </span>\n `;\n }\n return html`<span class=\"bc-sep\" aria-hidden=\"true\"></span>`;\n}\n\n/* ── Icono opcional dentro de un crumb ─────────────────── */\nfunction renderIcon(icon?: string): TemplateResult | typeof nothing {\n if (!icon) return nothing;\n return html`<span class=\"bc-icon\"><lib-icon name=\"${icon}\" size=\"xs\"></lib-icon></span>`;\n}\n\n/* ── Crumb enlazable (ancestro) ─────────────────────────── */\nfunction renderLink(\n item: BreadcrumbItem,\n index: number,\n separator: BreadcrumbSeparator,\n onNavigate: BreadcrumbTemplateProps['onNavigate'],\n): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <a\n class=\"bc-link\"\n href=\"${item.href ?? '#'}\"\n @click=\"${(e: Event):void => { e.preventDefault(); onNavigate(item, index); }}\"\n >\n ${renderIcon(item.icon)}\n ${item.label ? html`${item.label}` : nothing}\n </a>\n ${renderSep(separator)}\n </li>\n `;\n}\n\n/* ── Crumb activo (último) ──────────────────────────────── */\nfunction renderCurrent(item: BreadcrumbItem): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <span class=\"bc-current\" aria-current=\"page\">\n ${renderIcon(item.icon)}\n ${item.label ? html`${item.label}` : nothing}\n </span>\n </li>\n `;\n}\n\n/* ── Botón de ellipsis (truncado) ──────────────────────── */\nfunction renderEllipsis(\n separator: BreadcrumbSeparator,\n onExpand: () => void,\n): TemplateResult {\n return html`\n <li class=\"bc-item\">\n <button\n class=\"bc-ellipsis\"\n aria-label=\"Mostrar ruta completa\"\n @click=\"${onExpand}\"\n >…</button>\n ${renderSep(separator)}\n </li>\n `;\n}\n\n/* ── Lista de ítems con lógica de collapse ─────────────── */\nfunction renderItems(p: BreadcrumbTemplateProps): TemplateResult[] {\n const { items, separator, maxVisible, expanded, onExpand, onNavigate } = p;\n\n const shouldCollapse =\n maxVisible > 0 &&\n items.length > maxVisible &&\n !expanded;\n\n if (shouldCollapse) {\n const first = items[0];\n const last = items[items.length - 1];\n\n if (!first || !last) return [];\n\n return [\n renderLink(first, 0, separator, onNavigate),\n renderEllipsis(separator, onExpand),\n last.href\n ? renderLink(last, items.length - 1, separator, onNavigate)\n : renderCurrent(last),\n ];\n }\n\n return items.map((item, i) => {\n const isLast = i === items.length - 1;\n if (isLast || !item.href) return renderCurrent(item);\n return renderLink(item, i, separator, onNavigate);\n });\n}\n\n/* ── Template principal ─────────────────────────────────── */\nexport function breadcrumbTemplate(p: BreadcrumbTemplateProps): TemplateResult {\n const bcClasses = {\n 'bc': true,\n 'bc-slash': p.separator === 'slash',\n 'bc-chevron': p.separator === 'chevron',\n 'bc-dot': p.separator === 'dot',\n 'bc-line': p.separator === 'line',\n 'bc-sm': p.size === 'sm',\n 'bc-lg': p.size === 'lg',\n 'bc-filled': p.surface === 'filled',\n 'bc-pill': p.surface === 'pill',\n 'bc-kaki': p.accent === 'kaki',\n 'bc-celadon': p.accent === 'celadon',\n 'bc-bold': p.accent === 'bold',\n 'bc-dark': p.dark,\n };\n\n return html`\n <nav class=\"${classMap(bcClasses)}\" aria-label=\"breadcrumb\">\n <ol class=\"bc-list\">\n ${renderItems(p)}\n </ol>\n </nav>\n `;\n}"],"names":["e","classMap"],"mappings":";;AA0BA,SAAS,UAAU,WAAgD;AACjE,MAAI,cAAc,WAAW;AAC3B,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AACA,SAAO;AACT;AAGA,SAAS,WAAW,MAAgD;AAClE,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,6CAA6C,IAAI;AAC1D;AAGA,SAAS,WACP,MACA,OACA,WACA,YACgB;AAChB,SAAO;AAAA;AAAA;AAAA;AAAA,gBAIO,KAAK,QAAQ,GAAG;AAAA,kBACd,CAACA,OAAkB;AAAE,IAAAA,GAAE,eAAA;AAAkB,eAAW,MAAM,KAAK;AAAA,EAAG,CAAC;AAAA;AAAA,UAE3E,WAAW,KAAK,IAAI,CAAC;AAAA,UACrB,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,OAAO;AAAA;AAAA,QAE5C,UAAU,SAAS,CAAC;AAAA;AAAA;AAG5B;AAGA,SAAS,cAAc,MAAsC;AAC3D,SAAO;AAAA;AAAA;AAAA,UAGC,WAAW,KAAK,IAAI,CAAC;AAAA,UACrB,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,OAAO;AAAA;AAAA;AAAA;AAIpD;AAGA,SAAS,eACP,WACA,UACgB;AAChB,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKS,QAAQ;AAAA;AAAA,QAElB,UAAU,SAAS,CAAC;AAAA;AAAA;AAG5B;AAGA,SAAS,YAAY,GAA8C;AACjE,QAAM,EAAE,OAAO,WAAW,YAAY,UAAU,UAAU,eAAe;AAEzE,QAAM,iBACJ,aAAa,KACb,MAAM,SAAS,cACf,CAAC;AAEH,MAAI,gBAAgB;AAClB,UAAM,QAAQ,MAAM,CAAC;AACrB,UAAM,OAAQ,MAAM,MAAM,SAAS,CAAC;AAEpC,QAAI,CAAC,SAAS,CAAC,aAAa,CAAA;AAE5B,WAAO;AAAA,MACL,WAAW,OAAO,GAAG,WAAW,UAAU;AAAA,MAC1C,eAAe,WAAW,QAAQ;AAAA,MAClC,KAAK,OACD,WAAW,MAAM,MAAM,SAAS,GAAG,WAAW,UAAU,IACxD,cAAc,IAAI;AAAA,IAAA;AAAA,EAE1B;AAEA,SAAO,MAAM,IAAI,CAAC,MAAM,MAAM;AAC5B,UAAM,SAAS,MAAM,MAAM,SAAS;AACpC,QAAI,UAAU,CAAC,KAAK,KAAM,QAAO,cAAc,IAAI;AACnD,WAAO,WAAW,MAAM,GAAG,WAAW,UAAU;AAAA,EAClD,CAAC;AACH;AAGO,SAAS,mBAAmB,GAA4C;AAC7E,QAAM,YAAY;AAAA,IAChB,MAAiB;AAAA,IACjB,YAAiB,EAAE,cAAc;AAAA,IACjC,cAAiB,EAAE,cAAc;AAAA,IACjC,UAAiB,EAAE,cAAc;AAAA,IACjC,WAAiB,EAAE,cAAc;AAAA,IACjC,SAAiB,EAAE,SAAS;AAAA,IAC5B,SAAiB,EAAE,SAAS;AAAA,IAC5B,aAAiB,EAAE,YAAY;AAAA,IAC/B,WAAiB,EAAE,YAAY;AAAA,IAC/B,WAAiB,EAAE,WAAW;AAAA,IAC9B,cAAiB,EAAE,WAAW;AAAA,IAC9B,WAAiB,EAAE,WAAW;AAAA,IAC9B,WAAiB,EAAE;AAAA,EAAA;AAGrB,SAAO;AAAA,kBACSC,EAAS,SAAS,CAAC;AAAA;AAAA,UAE3B,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAIxB;"}
package/dist/index195.js CHANGED
@@ -1,5 +1,5 @@
1
- const accordionCss = '@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box}}@layer components{:host{border:1px solid var(--border-subtle);background:var(--bg-elevated);display:block}.accordion__root{display:flex;flex-direction:column}::slotted(lib-accordion-item:last-of-type){border-bottom:none!important}:host([variant="flush"]){border:none;background:transparent;box-shadow:none}:host([variant="flush"]) ::slotted(lib-accordion-item){--accordion-item-trigger-px: 0px;--accordion-item-content-px: 0px;--accordion-item-trigger-hover-bg: transparent;--accordion-item-trigger-bg: transparent;--accordion-item-body-bg: transparent}:host([variant="separated"]){border:none;background:transparent;box-shadow:none}:host([variant="separated"]) .accordion__root{gap:var(--lib-space-sm)}:host([variant="separated"]) ::slotted(lib-accordion-item){border:1px solid var(--border-subtle)!important;transition:box-shadow var(--duration-slow) var(--ease-out),border-color var(--duration-slow) var(--ease-out)}:host([variant="separated"]) ::slotted(lib-accordion-item[open]){box-shadow:var(--shadow-md);border-color:var(--border-default)!important}:host([variant="accent"]){border:1px solid var(--border-subtle);background:var(--bg-elevated)}:host([variant="accent"]) ::slotted(lib-accordion-item[open]){--accordion-item-accent-border: 2px solid var(--color-kaki-400);--accordion-item-trigger-bg: var(--color-kaki-50);--accordion-item-trigger-hover-bg: var(--color-kaki-100);--accordion-item-body-bg: var(--color-kaki-50);--accordion-item-label-color: var(--color-kaki-600);--accordion-item-icon-color: var(--color-kaki-400);--accordion-item-content-border: var(--color-kaki-200);--accordion-item-content-color: var(--color-kaki-600)}@media(prefers-reduced-motion:reduce){::slotted(lib-accordion-item){transition:none}}}';
1
+ const componentCss = '@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box}}@layer components{.bc{display:flex;align-items:center}.bc-list{display:flex;align-items:center;flex-wrap:wrap;list-style:none;gap:0;padding:0;margin:0}.bc-item{display:flex;align-items:center;gap:0;position:relative}.bc-link{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);text-decoration:none;padding:var(--lib-space-xs) var(--lib-space-xs);transition:color var(--duration-fast);white-space:nowrap;display:flex;align-items:center;gap:var(--lib-space-xs)}.bc-link:hover{color:var(--text-primary)}.bc-current{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-secondary);white-space:nowrap;padding:var(--lib-space-xs) var(--lib-space-xs);display:flex;align-items:center;gap:var(--lib-space-xs)}.bc-sep{display:flex;align-items:center;padding:0 var(--lib-space-sm);color:var(--color-washi-300);-webkit-user-select:none;user-select:none;flex-shrink:0}.bc-slash .bc-sep:before{content:"/";font-family:var(--lib-font-mono);font-size:10px;line-height:1}.bc-dot .bc-sep:before{content:"·";font-family:var(--lib-font-mono);font-size:13px;line-height:1}.bc-line .bc-sep:before{content:"—";font-family:var(--lib-font-mono);font-size:10px;line-height:1}.bc-chevron .bc-sep{padding:0 var(--lib-space-xs);font-size:12px}.bc-chevron .bc-sep:before{content:none}.bc-icon{font-size:13px;display:flex;align-items:center;opacity:.7}.bc-sm .bc-link,.bc-sm .bc-current{font-size:10px;letter-spacing:var(--tracking-wide)}.bc-sm .bc-sep{padding:0 var(--lib-space-xs)}.bc-sm .bc-icon{font-size:11px}.bc-lg .bc-link,.bc-lg .bc-current{font-family:var(--lib-font-body);font-size:var(--text-sm);letter-spacing:0}.bc-lg .bc-icon{font-size:15px}.bc-filled{background:var(--bg-surface);border:1px solid var(--border-subtle);padding:var(--lib-space-sm) var(--lib-space-md)}.bc-pill .bc-link{background:var(--bg-surface);border:1px solid var(--border-subtle);padding:var(--lib-space-xs) var(--lib-space-sm);transition:background var(--duration-fast),border-color var(--duration-fast),color var(--duration-fast)}.bc-pill .bc-link:hover{background:var(--color-washi-200);border-color:var(--border-default);color:var(--text-primary)}.bc-pill .bc-current{background:var(--color-washi-900);color:var(--color-washi-50);border:1px solid var(--color-washi-900);padding:var(--lib-space-xs) var(--lib-space-sm)}.bc-pill .bc-sep{padding:0 var(--lib-space-sm)}.bc-kaki .bc-current,.bc-kaki .bc-link:hover{color:var(--color-kaki-500)}.bc-celadon .bc-current,.bc-celadon .bc-link:hover{color:var(--color-celadon-500)}.bc-bold .bc-current{color:var(--text-primary);font-weight:600}.bc-ellipsis{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-wide);color:var(--text-muted);background:var(--bg-surface);border:1px solid var(--border-subtle);padding:1px var(--lib-space-sm);cursor:pointer;transition:background var(--duration-fast),color var(--duration-fast),border-color var(--duration-fast);line-height:1.6;display:inline-flex;align-items:center}.bc-ellipsis:hover{background:var(--color-washi-200);border-color:var(--border-default);color:var(--text-primary)}.bc-dropdown-wrap{position:relative}.bc-dropdown-panel{position:absolute;top:calc(100% + 4px);left:0;z-index:var(--z-dropdown, 300);background:var(--bg-elevated);border:1px solid var(--border-default);box-shadow:var(--shadow-md);min-width:180px;opacity:0;transform:translateY(-4px) scaleY(.97);transform-origin:top left;pointer-events:none;transition:opacity .16s var(--ease-out),transform .18s var(--ease-out)}.bc-dropdown-panel.is-open{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.bc-dropdown-item{display:flex;align-items:center;gap:var(--lib-space-sm);padding:var(--lib-space-sm) var(--lib-space-md);font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wide);color:var(--text-secondary);text-decoration:none;cursor:pointer;transition:background var(--duration-fast),color var(--duration-fast)}.bc-dropdown-item:hover{background:var(--bg-surface);color:var(--text-primary)}.bc-dropdown-item-icon{font-size:14px;color:var(--text-muted);display:flex;flex-shrink:0}.bc-dark .bc-link{color:#3c302a}.bc-dark .bc-link:hover{color:#998c84}.bc-dark .bc-current{color:#7b6f67}.bc-dark .bc-sep{color:#231813}.bc-dark.bc-filled{background:#100704;border-color:#1e130e}.bc-dark .bc-ellipsis{background:#100704;border-color:#1e130e;color:#433831}.bc-dark .bc-ellipsis:hover{background:#190f0a;color:#998c84}.bc-dark.bc-pill .bc-link{background:#100704;border-color:#1e130e}.bc-dark.bc-pill .bc-link:hover{background:#1e130e}.bc-dark.bc-pill .bc-current{background:#8a7d75;color:var(--color-washi-950);border-color:#8a7d75}.bc-dark .bc-dropdown-panel{background:#150a06;border-color:#231813}.bc-dark .bc-dropdown-item{color:#574a43}.bc-dark .bc-dropdown-item:hover{background:#1e130e;color:#998c84}}';
2
2
  export {
3
- accordionCss as default
3
+ componentCss as default
4
4
  };
5
5
  //# sourceMappingURL=index195.js.map
package/dist/index197.js CHANGED
@@ -1,21 +1,5 @@
1
- import { html } from "lit";
2
- function bentoGridTemplate(ctx) {
3
- return html`
4
- <div
5
- class="bento-grid"
6
- part="grid"
7
- role="presentation"
8
- style="
9
- --_columns: ${ctx.columns};
10
- --_gap: var(--lib-space-${ctx.gap});
11
- --_row-height: ${ctx.rowHeight};
12
- "
13
- >
14
- <slot></slot>
15
- </div>
16
- `;
17
- }
1
+ const groupCss = '@layer tokens,reset,components;@layer reset{:host{display:inline-flex;align-items:stretch;vertical-align:middle;position:relative}*,*:before,*:after{box-sizing:border-box}}@layer components{.bg-wrap{display:inline-flex;align-items:stretch;position:relative}:host([block]){display:flex;width:100%}:host([block]) .bg-wrap{display:flex;width:100%}:host([block]) ::slotted(lib-button){flex:1}:host([orientation="vertical"]) .bg-wrap{flex-direction:column;align-items:stretch}:host([orientation="vertical"][block]) .bg-wrap{width:100%}}:host(lib-button-sep){display:inline-flex;flex-shrink:0;align-self:stretch;width:1px;background:var(--border-default);position:relative;z-index:1}:host(lib-button-sep[dark]){background:#ffffff1a}@layer reset{:host(lib-button-split){display:inline-flex;align-items:stretch;position:relative;vertical-align:middle}}@layer components{.split-wrap{display:inline-flex;align-items:stretch;position:relative}.split-menu{position:absolute;top:calc(100% + 5px);left:0;min-width:190px;background:var(--bg-elevated);border:1px solid var(--border-subtle);box-shadow:0 8px 24px #1a140e1a;z-index:50;display:none;opacity:0;transform:translateY(-4px);transition:opacity var(--duration-base) var(--ease-out),transform var(--duration-base) var(--ease-out)}.split-menu.is-open{opacity:1;transform:none}.split-menu-item,.split-menu ::slotted(button){display:flex;width:100%;align-items:center;gap:var(--lib-space-sm);padding:var(--lib-space-sm) var(--lib-space-md);background:none;border:none;border-bottom:1px solid var(--color-washi-100);font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:.1em;text-transform:uppercase;color:var(--text-secondary);cursor:pointer;text-align:left;transition:background var(--duration-fast),color var(--duration-fast)}.split-menu-item:last-child,.split-menu ::slotted(button:last-child){border-bottom:none}.split-menu-item:hover,.split-menu ::slotted(button:hover){background:var(--bg-base);color:var(--text-primary)}.split-menu-item:disabled,.split-menu ::slotted(button:disabled){opacity:.38;cursor:not-allowed}:host([dark]) .split-menu{background:var(--color-washi-800);border-color:#ffffff14;box-shadow:0 8px 24px #0000004d}:host([dark]) .split-menu-item,:host([dark]) .split-menu ::slotted(button){border-bottom-color:#ffffff0d;color:#faf7f473}:host([dark]) .split-menu-item:hover,:host([dark]) .split-menu ::slotted(button:hover){background:#ffffff12;color:#faf7f4d9}}';
18
2
  export {
19
- bentoGridTemplate
3
+ groupCss as default
20
4
  };
21
5
  //# sourceMappingURL=index197.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index197.js","sources":["../src/components/organisms/bento-grid/lib-bento-grid.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { LibBentoGrid } from './lib-bento-grid.component';\n\nexport function bentoGridTemplate(ctx: LibBentoGrid): TemplateResult {\n return html`\n <div\n class=\"bento-grid\"\n part=\"grid\"\n role=\"presentation\"\n style=\"\n --_columns: ${ctx.columns};\n --_gap: var(--lib-space-${ctx.gap});\n --_row-height: ${ctx.rowHeight};\n \"\n >\n <slot></slot>\n </div>\n `;\n}"],"names":[],"mappings":";AAGO,SAAS,kBAAkB,KAAmC;AACnE,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMa,IAAI,OAAO;AAAA,kCACC,IAAI,GAAG;AAAA,yBAChB,IAAI,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtC;"}
1
+ {"version":3,"file":"index197.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/index198.js CHANGED
@@ -1,5 +1,77 @@
1
- const gridCss = "@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box}}@layer components{.bento-item{height:100%;width:100%;display:flex;flex-direction:column;position:relative;background:var(--bg-elevated);border-radius:var(--lib-radius-lg);border:1px solid var(--border-subtle);overflow:hidden}:host([interactive]) .bento-item{cursor:pointer;transition:transform var(--duration-slow) var(--ease-default),border-color var(--duration-base) var(--ease-default),box-shadow var(--duration-slow) var(--ease-default)}:host([interactive]) .bento-item:hover{transform:translateY(-3px);border-color:var(--border-strong);box-shadow:var(--shadow-md)}:host([interactive]) .bento-item:active{transform:translateY(-1px)}.content{padding:var(--lib-space-md);height:100%;display:flex;flex-direction:column}:host([flush]) .content{padding:0}@media(prefers-reduced-motion:reduce){:host([interactive]) .bento-item{transition:border-color var(--duration-base)}:host([interactive]) .bento-item:hover{transform:none}}}";
1
+ import { svg, html } from "lit";
2
+ const CARET = svg`
3
+ <svg width="9" height="9" viewBox="0 0 10 10" fill="none"
4
+ stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
5
+ <polyline points="2,3 5,7 8,3"/>
6
+ </svg>`;
7
+ function buttonGroupTemplate() {
8
+ return html`
9
+ <div class="bg-wrap" part="group">
10
+ <slot></slot>
11
+ </div>
12
+ `;
13
+ }
14
+ function buttonSplitTemplate(p) {
15
+ const { label, variant, size, dark, disabled, menuOpen, items } = p;
16
+ const arrowKintsugi = variant === "accent" || variant === "primary";
17
+ const menuItems = items.length > 0 ? html`${items.map((item) => html`
18
+ <button
19
+ class="split-menu-item"
20
+ ?disabled="${item.disabled ?? false}"
21
+ data-value="${item.value}"
22
+ >${item.label}</button>
23
+ `)}` : html`<slot name="menu"></slot>`;
24
+ return html`
25
+ <div class="split-wrap" part="split">
26
+
27
+ <!-- Acción principal: lib-button posición "first" -->
28
+ <lib-button
29
+ part="main"
30
+ variant="${variant}"
31
+ size="${size}"
32
+ ?dark="${dark}"
33
+ ?disabled="${disabled}"
34
+ group-pos="first"
35
+ group-shape="rounded"
36
+ @click="${p.onMainClick}"
37
+ >
38
+ <slot slot="prefix" name="prefix"></slot>
39
+ ${label}
40
+ <slot slot="suffix" name="suffix"></slot>
41
+ </lib-button>
42
+
43
+ <!-- Flecha: lib-button posición "last", icon-only -->
44
+ <lib-button
45
+ part="arrow"
46
+ variant="${variant}"
47
+ size="${size}"
48
+ ?dark="${dark}"
49
+ ?disabled="${disabled}"
50
+ group-pos="last"
51
+ group-shape="rounded"
52
+ icon-only
53
+ ?kintsugi="${arrowKintsugi}"
54
+ aria-label="Más opciones"
55
+ aria-haspopup="true"
56
+ aria-expanded="${menuOpen ? "true" : "false"}"
57
+ @click="${p.onArrowClick}"
58
+ >${CARET}</lib-button>
59
+
60
+ <!-- Menú desplegable -->
61
+ <div
62
+ class="split-menu ${menuOpen ? "is-open" : ""}"
63
+ part="menu"
64
+ style="${menuOpen ? "display:block" : "display:none"}"
65
+ role="menu"
66
+ >
67
+ ${menuItems}
68
+ </div>
69
+
70
+ </div>
71
+ `;
72
+ }
2
73
  export {
3
- gridCss as default
74
+ buttonGroupTemplate,
75
+ buttonSplitTemplate
4
76
  };
5
77
  //# sourceMappingURL=index198.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index198.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index198.js","sources":["../src/components/molecules/button-group/lib-button-group.html.ts"],"sourcesContent":["import { html, svg, TemplateResult } from 'lit';\nimport type { LibVariant, LibSize } from '../../../types';\nimport type { SplitMenuItem } from './lib-button-group.types';\n\n/* ── Caret SVG (va dentro del slot del lib-button flecha) ── */\nconst CARET = svg`\n <svg width=\"9\" height=\"9\" viewBox=\"0 0 10 10\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"2,3 5,7 8,3\"/>\n </svg>`;\n\n/* ────────────────────────────────────────────\n Group template\n ──────────────────────────────────────────── */\nexport function buttonGroupTemplate(): TemplateResult {\n return html`\n <div class=\"bg-wrap\" part=\"group\">\n <slot></slot>\n </div>\n `;\n}\n\n/* ────────────────────────────────────────────\n Split template — compone dos lib-button\n ──────────────────────────────────────────── */\nexport interface SplitTemplateProps {\n label: string;\n variant: LibVariant;\n size: LibSize;\n dark: boolean;\n disabled: boolean;\n menuOpen: boolean;\n items: SplitMenuItem[];\n onMainClick: (e: Event) => void;\n onArrowClick:(e: Event) => void;\n}\n\nexport function buttonSplitTemplate(p: SplitTemplateProps): TemplateResult {\n const { label, variant, size, dark, disabled, menuOpen, items } = p;\n\n /* Kintsugi en el arrow solo para variantes sólidas (accent/primary) */\n const arrowKintsugi = variant === 'accent' || variant === 'primary';\n\n const menuItems: TemplateResult = items.length > 0\n ? html`${items.map(item => html`\n <button\n class=\"split-menu-item\"\n ?disabled=\"${item.disabled ?? false}\"\n data-value=\"${item.value}\"\n >${item.label}</button>\n `)}`\n : html`<slot name=\"menu\"></slot>`;\n\n return html`\n <div class=\"split-wrap\" part=\"split\">\n\n <!-- Acción principal: lib-button posición \"first\" -->\n <lib-button\n part=\"main\"\n variant=\"${variant}\"\n size=\"${size}\"\n ?dark=\"${dark}\"\n ?disabled=\"${disabled}\"\n group-pos=\"first\"\n group-shape=\"rounded\"\n @click=\"${p.onMainClick}\"\n >\n <slot slot=\"prefix\" name=\"prefix\"></slot>\n ${label}\n <slot slot=\"suffix\" name=\"suffix\"></slot>\n </lib-button>\n\n <!-- Flecha: lib-button posición \"last\", icon-only -->\n <lib-button\n part=\"arrow\"\n variant=\"${variant}\"\n size=\"${size}\"\n ?dark=\"${dark}\"\n ?disabled=\"${disabled}\"\n group-pos=\"last\"\n group-shape=\"rounded\"\n icon-only\n ?kintsugi=\"${arrowKintsugi}\"\n aria-label=\"Más opciones\"\n aria-haspopup=\"true\"\n aria-expanded=\"${menuOpen ? 'true' : 'false'}\"\n @click=\"${p.onArrowClick}\"\n >${CARET}</lib-button>\n\n <!-- Menú desplegable -->\n <div\n class=\"split-menu ${menuOpen ? 'is-open' : ''}\"\n part=\"menu\"\n style=\"${menuOpen ? 'display:block' : 'display:none'}\"\n role=\"menu\"\n >\n ${menuItems}\n </div>\n\n </div>\n `;\n}"],"names":[],"mappings":";AAKA,MAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AASP,SAAS,sBAAsC;AACpD,SAAO;AAAA;AAAA;AAAA;AAAA;AAKT;AAiBO,SAAS,oBAAoB,GAAuC;AACzE,QAAM,EAAE,OAAO,SAAS,MAAM,MAAM,UAAU,UAAU,UAAU;AAGlE,QAAM,gBAAgB,YAAY,YAAY,YAAY;AAE1D,QAAM,YAA4B,MAAM,SAAS,IAC7C,OAAO,MAAM,IAAI,CAAA,SAAQ;AAAA;AAAA;AAAA,uBAGR,KAAK,YAAY,KAAK;AAAA,wBACrB,KAAK,KAAK;AAAA,WACvB,KAAK,KAAK;AAAA,OACd,CAAC,KACF;AAEJ,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAMU,OAAO;AAAA,gBACV,IAAI;AAAA,iBACH,IAAI;AAAA,qBACA,QAAQ;AAAA;AAAA;AAAA,kBAGX,EAAE,WAAW;AAAA;AAAA;AAAA,UAGrB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAOI,OAAO;AAAA,gBACV,IAAI;AAAA,iBACH,IAAI;AAAA,qBACA,QAAQ;AAAA;AAAA;AAAA;AAAA,qBAIR,aAAa;AAAA;AAAA;AAAA,yBAGT,WAAW,SAAS,OAAO;AAAA,kBAClC,EAAE,YAAY;AAAA,SACvB,KAAK;AAAA;AAAA;AAAA;AAAA,4BAIc,WAAW,YAAY,EAAE;AAAA;AAAA,iBAEpC,WAAW,kBAAkB,cAAc;AAAA;AAAA;AAAA,UAGlD,SAAS;AAAA;AAAA;AAAA;AAAA;AAKnB;"}
package/dist/index199.js CHANGED
@@ -1,87 +1,77 @@
1
- import { svg, html, nothing } from "lit";
2
- const iconPrev = svg`
3
- <svg viewBox="0 0 16 16" fill="none"
4
- stroke="currentColor" stroke-width="1.5"
5
- stroke-linecap="round" stroke-linejoin="round">
6
- <polyline points="10,3 5,8 10,13"/>
1
+ import { html } from "lit";
2
+ const checkSvg = html`
3
+ <svg viewBox="0 0 12 12">
4
+ <polyline points="2,6 5,9 10,3"/>
7
5
  </svg>`;
8
- const iconNext = svg`
9
- <svg viewBox="0 0 16 16" fill="none"
10
- stroke="currentColor" stroke-width="1.5"
11
- stroke-linecap="round" stroke-linejoin="round">
12
- <polyline points="6,3 11,8 6,13"/>
13
- </svg>`;
14
- function carouselTemplate(props) {
15
- const {
16
- mode,
17
- current,
18
- total,
19
- peek,
20
- arrows,
21
- dots,
22
- counter,
23
- loop,
24
- handlePrev,
25
- handleNext,
26
- handleDot,
27
- handleSlot,
28
- handleThumb,
29
- handleKey
30
- } = props;
31
- const prevDisabled = !loop && current === 0;
32
- const nextDisabled = !loop && current === total - 1;
33
- const counterHtml = peek > 1 ? html`<span>${current + 1}</span>&thinsp;–&thinsp;<span>${Math.min(current + peek, total)}</span> / ${total}` : html`<span>${current + 1}</span> / ${total}`;
6
+ function checkboxCardTemplate(ctx) {
7
+ const checkClass = [
8
+ "cc-check",
9
+ ctx.inputType === "radio" || ctx.checkShape === "pill" ? "cc-check-pill" : ""
10
+ ].filter(Boolean).join(" ");
34
11
  return html`
35
- <div
36
- class="cr"
37
- tabindex="0"
38
- role="region"
39
- aria-label="Carousel"
40
- @keydown=${handleKey}
12
+ <label
13
+ class="cc"
14
+ part="label"
15
+ @click="${(e) => ctx._handleClick(e)}"
41
16
  >
42
- <div class="cr-track" part="track">
43
- <slot @slotchange=${handleSlot}></slot>
44
- </div>
17
+ <!-- Input nativo — hermano directo de .cc-body para :checked ~ -->
18
+ <input
19
+ class="cc-input"
20
+ part="input"
21
+ .type="${ctx.inputType}"
22
+ .name="${ctx.name}"
23
+ .value="${ctx.value}"
24
+ .checked="${ctx.checked}"
25
+ ?disabled="${ctx.disabled}"
26
+ @change="${(e) => ctx._handleChange(e)}"
27
+ />
45
28
 
46
- ${arrows && mode === "slide" ? html`
47
- <button
48
- class="cr-arrow cr-arrow-prev ${prevDisabled ? "is-disabled" : ""}"
49
- ?disabled=${prevDisabled}
50
- aria-label="Anterior"
51
- @click=${handlePrev}
52
- >${iconPrev}</button>
29
+ <div class="cc-body" part="body">
53
30
 
54
- <button
55
- class="cr-arrow cr-arrow-next ${nextDisabled ? "is-disabled" : ""}"
56
- ?disabled=${nextDisabled}
57
- aria-label="Siguiente"
58
- @click=${handleNext}
59
- >${iconNext}</button>
60
- ` : nothing}
61
- </div>
31
+ <!-- Checkmark -->
32
+ <div class="${checkClass}" part="check">${checkSvg}</div>
62
33
 
63
- ${dots && total > 1 ? html`
64
- <div class="cr-dots" role="tablist" aria-label="Navegación por slides">
65
- ${Array.from({ length: total }, (_, i) => html`
66
- <button
67
- class="cr-dot ${i === current ? "is-active" : ""}"
68
- role="tab"
69
- aria-selected=${i === current ? "true" : "false"}
70
- aria-label="Ir a slide ${i + 1}"
71
- @click=${() => handleDot(i)}
72
- ></button>
73
- `)}
74
- </div>
75
- ` : nothing}
34
+ <!-- Slot: icono -->
35
+ <slot name="icon">
36
+ ${ctx._hasSlot("icon") ? "" : ""}
37
+ </slot>
38
+
39
+ <!-- Slot: badge -->
40
+ <slot name="badge"></slot>
41
+
42
+ <!-- Slot: título -->
43
+ <slot name="title">
44
+ ${ctx.cardTitle ? html`<div class="cc-title" part="title">${ctx.cardTitle}</div>` : ""}
45
+ </slot>
46
+
47
+ <!-- Slot: descripción -->
48
+ <slot name="desc">
49
+ ${ctx.desc ? html`<div class="cc-desc" part="desc">${ctx.desc}</div>` : ""}
50
+ </slot>
76
51
 
77
- ${counter && total > 1 ? html`
78
- <p class="cr-counter">${counterHtml}</p>
79
- ` : nothing}
52
+ <!-- Slot: precio -->
53
+ <slot name="price"></slot>
80
54
 
81
- <slot name="thumbnail" @slotchange=${handleThumb}></slot>
55
+ <!-- Slot: divider -->
56
+ <slot name="divider"></slot>
57
+
58
+ <!-- Slot: features -->
59
+ <slot name="features"></slot>
60
+
61
+ <!-- Slot: imagen -->
62
+ <slot name="image"></slot>
63
+
64
+ <!-- Slot: contenido libre (default) -->
65
+ <slot></slot>
66
+
67
+ <!-- Ripple layer -->
68
+ <div class="cc-ripple" part="ripple"></div>
69
+
70
+ </div>
71
+ </label>
82
72
  `;
83
73
  }
84
74
  export {
85
- carouselTemplate
75
+ checkboxCardTemplate
86
76
  };
87
77
  //# sourceMappingURL=index199.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index199.js","sources":["../src/components/organisms/carousel/lib-carousel.html.ts"],"sourcesContent":["import { html, nothing, svg, TemplateResult } from 'lit';\n\nexport type LibCarouselMode = 'slide' | 'fade';\n\nexport interface CarouselTemplateProps {\n mode: LibCarouselMode;\n current: number;\n total: number;\n peek: number;\n arrows: boolean;\n dots: boolean;\n counter: boolean;\n loop: boolean;\n handlePrev: () => void;\n handleNext: () => void;\n handleDot: (i: number) => void;\n handleSlot: (e: Event) => void;\n handleThumb: (e: Event) => void;\n handleKey: (e: KeyboardEvent) => void;\n}\n\n/** SVG chevron left */\nconst iconPrev = svg`\n <svg viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"10,3 5,8 10,13\"/>\n </svg>`;\n\n/** SVG chevron right */\nconst iconNext = svg`\n <svg viewBox=\"0 0 16 16\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6,3 11,8 6,13\"/>\n </svg>`;\n\n/**\n * Template para lib-carousel.\n *\n * Estructura:\n * div.cr ← raíz, maneja keydown\n * div.cr-track ← contenedor deslizante\n * slot ← slides del consumer\n * button.cr-arrow-prev ← (condicional)\n * button.cr-arrow-next ← (condicional)\n * div.cr-dots ← (condicional)\n * p.cr-counter ← (condicional)\n * slot[name=\"thumbnail\"] ← tira de miniaturas (condicional)\n */\nexport function carouselTemplate(props: CarouselTemplateProps): TemplateResult {\n const {\n mode, current, total, peek, arrows, dots, counter, loop,\n handlePrev, handleNext, handleDot, handleSlot, handleThumb, handleKey,\n } = props;\n\n const prevDisabled = !loop && current === 0;\n const nextDisabled = !loop && current === total - 1;\n\n // Counter text: \"2 / 6\" para peek=1, \"1 – 3 / 6\" para peek>1\n const counterHtml = peek > 1\n ? html`<span>${current + 1}</span>&thinsp;–&thinsp;<span>${Math.min(current + peek, total)}</span> / ${total}`\n : html`<span>${current + 1}</span> / ${total}`;\n\n return html`\n <div\n class=\"cr\"\n tabindex=\"0\"\n role=\"region\"\n aria-label=\"Carousel\"\n @keydown=${handleKey}\n >\n <div class=\"cr-track\" part=\"track\">\n <slot @slotchange=${handleSlot}></slot>\n </div>\n\n ${arrows && mode === 'slide' ? html`\n <button\n class=\"cr-arrow cr-arrow-prev ${prevDisabled ? 'is-disabled' : ''}\"\n ?disabled=${prevDisabled}\n aria-label=\"Anterior\"\n @click=${handlePrev}\n >${iconPrev}</button>\n\n <button\n class=\"cr-arrow cr-arrow-next ${nextDisabled ? 'is-disabled' : ''}\"\n ?disabled=${nextDisabled}\n aria-label=\"Siguiente\"\n @click=${handleNext}\n >${iconNext}</button>\n ` : nothing}\n </div>\n\n ${dots && total > 1 ? html`\n <div class=\"cr-dots\" role=\"tablist\" aria-label=\"Navegación por slides\">\n ${Array.from({ length: total }, (_, i) => html`\n <button\n class=\"cr-dot ${i === current ? 'is-active' : ''}\"\n role=\"tab\"\n aria-selected=${i === current ? 'true' : 'false'}\n aria-label=\"Ir a slide ${i + 1}\"\n @click=${():void => handleDot(i)}\n ></button>\n `)}\n </div>\n ` : nothing}\n\n ${counter && total > 1 ? html`\n <p class=\"cr-counter\">${counterHtml}</p>\n ` : nothing}\n\n <slot name=\"thumbnail\" @slotchange=${handleThumb}></slot>\n `;\n}"],"names":[],"mappings":";AAsBA,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAQjB,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBV,SAAS,iBAAiB,OAA8C;AAC7E,QAAM;AAAA,IACJ;AAAA,IAAM;AAAA,IAAS;AAAA,IAAO;AAAA,IAAM;AAAA,IAAQ;AAAA,IAAM;AAAA,IAAS;AAAA,IACnD;AAAA,IAAY;AAAA,IAAY;AAAA,IAAW;AAAA,IAAY;AAAA,IAAa;AAAA,EAAA,IAC1D;AAEJ,QAAM,eAAe,CAAC,QAAQ,YAAY;AAC1C,QAAM,eAAe,CAAC,QAAQ,YAAY,QAAQ;AAGlD,QAAM,cAAc,OAAO,IACvB,aAAa,UAAU,CAAC,iCAAiC,KAAK,IAAI,UAAU,MAAM,KAAK,CAAC,aAAa,KAAK,KAC1G,aAAa,UAAU,CAAC,aAAa,KAAK;AAE9C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMQ,SAAS;AAAA;AAAA;AAAA,4BAGE,UAAU;AAAA;AAAA;AAAA,QAG9B,UAAU,SAAS,UAAU;AAAA;AAAA,0CAEK,eAAe,gBAAgB,EAAE;AAAA,sBACrD,YAAY;AAAA;AAAA,mBAEf,UAAU;AAAA,WAClB,QAAQ;AAAA;AAAA;AAAA,0CAGuB,eAAe,gBAAgB,EAAE;AAAA,sBACrD,YAAY;AAAA;AAAA,mBAEf,UAAU;AAAA,WAClB,QAAQ;AAAA,UACT,OAAO;AAAA;AAAA;AAAA,MAGX,QAAQ,QAAQ,IAAI;AAAA;AAAA,UAEhB,MAAM,KAAK,EAAE,QAAQ,SAAS,CAAC,GAAG,MAAM;AAAA;AAAA,4BAEtB,MAAM,UAAU,cAAc,EAAE;AAAA;AAAA,4BAEhC,MAAM,UAAU,SAAS,OAAO;AAAA,qCACvB,IAAI,CAAC;AAAA,qBACrB,MAAW,UAAU,CAAC,CAAC;AAAA;AAAA,SAEnC,CAAC;AAAA;AAAA,QAEF,OAAO;AAAA;AAAA,MAET,WAAW,QAAQ,IAAI;AAAA,8BACC,WAAW;AAAA,QACjC,OAAO;AAAA;AAAA,yCAE0B,WAAW;AAAA;AAEpD;"}
1
+ {"version":3,"file":"index199.js","sources":["../src/components/molecules/checkbox-card/lib-checkbox-card.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { LibCheckboxCard } from './lib-checkbox-card.component';\n\n/* SVG checkmark compartido */\nconst checkSvg: TemplateResult = html`\n <svg viewBox=\"0 0 12 12\">\n <polyline points=\"2,6 5,9 10,3\"/>\n </svg>`;\n\nexport function checkboxCardTemplate(ctx: LibCheckboxCard): TemplateResult {\n const checkClass = [\n 'cc-check',\n ctx.inputType === 'radio' || ctx.checkShape === 'pill' ? 'cc-check-pill' : '',\n ].filter(Boolean).join(' ');\n\n return html`\n <label\n class=\"cc\"\n part=\"label\"\n @click=\"${(e: MouseEvent): void => ctx._handleClick(e)}\"\n >\n <!-- Input nativo hermano directo de .cc-body para :checked ~ -->\n <input\n class=\"cc-input\"\n part=\"input\"\n .type=\"${ctx.inputType}\"\n .name=\"${ctx.name}\"\n .value=\"${ctx.value}\"\n .checked=\"${ctx.checked}\"\n ?disabled=\"${ctx.disabled}\"\n @change=\"${(e: Event): void => ctx._handleChange(e)}\"\n />\n\n <div class=\"cc-body\" part=\"body\">\n\n <!-- Checkmark -->\n <div class=\"${checkClass}\" part=\"check\">${checkSvg}</div>\n\n <!-- Slot: icono -->\n <slot name=\"icon\">\n ${ctx._hasSlot('icon') ? '' : ''}\n </slot>\n\n <!-- Slot: badge -->\n <slot name=\"badge\"></slot>\n\n <!-- Slot: título -->\n <slot name=\"title\">\n ${ctx.cardTitle\n ? html`<div class=\"cc-title\" part=\"title\">${ctx.cardTitle}</div>`\n : ''}\n </slot>\n\n <!-- Slot: descripción -->\n <slot name=\"desc\">\n ${ctx.desc\n ? html`<div class=\"cc-desc\" part=\"desc\">${ctx.desc}</div>`\n : ''}\n </slot>\n\n <!-- Slot: precio -->\n <slot name=\"price\"></slot>\n\n <!-- Slot: divider -->\n <slot name=\"divider\"></slot>\n\n <!-- Slot: features -->\n <slot name=\"features\"></slot>\n\n <!-- Slot: imagen -->\n <slot name=\"image\"></slot>\n\n <!-- Slot: contenido libre (default) -->\n <slot></slot>\n\n <!-- Ripple layer -->\n <div class=\"cc-ripple\" part=\"ripple\"></div>\n\n </div>\n </label>\n `;\n}"],"names":[],"mappings":";AAIA,MAAM,WAA2B;AAAA;AAAA;AAAA;AAK1B,SAAS,qBAAqB,KAAsC;AACzE,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,IAAI,cAAc,WAAW,IAAI,eAAe,SAAS,kBAAkB;AAAA,EAAA,EAC3E,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SAAO;AAAA;AAAA;AAAA;AAAA,gBAIO,CAAC,MAAwB,IAAI,aAAa,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAM3C,IAAI,SAAS;AAAA,iBACb,IAAI,IAAI;AAAA,kBACP,IAAI,KAAK;AAAA,oBACP,IAAI,OAAO;AAAA,qBACV,IAAI,QAAQ;AAAA,mBACd,CAAC,MAAmB,IAAI,cAAc,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMrC,UAAU,kBAAkB,QAAQ;AAAA;AAAA;AAAA;AAAA,YAI9C,IAAI,SAAS,MAAM,IAAI,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQ9B,IAAI,YACF,0CAA0C,IAAI,SAAS,WACvD,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,YAKJ,IAAI,OACF,wCAAwC,IAAI,IAAI,WAChD,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBhB;"}
package/dist/index200.js CHANGED
@@ -1,5 +1,5 @@
1
- const carouselCss = '@layer tokens,reset,components;@layer reset{:host{display:block;width:100%}*,*:before,*:after{box-sizing:border-box}button{font:inherit}}@layer components{.cr{position:relative;width:100%;overflow:hidden;-webkit-user-select:none;user-select:none;outline:none}.cr:focus-visible{outline:2px solid var(--color-washi-700);outline-offset:2px}.cr-track{display:flex;transition:transform var(--duration-slow) var(--ease-out);will-change:transform}::slotted(*){flex:0 0 100%;min-width:0}:host([peek="2"]) .cr-track{gap:var(--lib-space-md)}:host([peek="2"]) ::slotted(*){flex:0 0 calc(50% - 8px)}:host([peek="3"]) .cr-track{gap:var(--lib-space-md)}:host([peek="3"]) ::slotted(*){flex:0 0 calc(33.333% - 11px)}:host([peek="4"]) .cr-track{gap:var(--lib-space-sm)}:host([peek="4"]) ::slotted(*){flex:0 0 calc(25% - 6px)}.cr-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:var(--z-raised);width:40px;height:40px;border:1px solid var(--border-default);background:#faf7f4e0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--text-primary);transition:background var(--duration-base) var(--ease-default),border-color var(--duration-base) var(--ease-default),opacity var(--duration-base) var(--ease-default),transform var(--duration-base) var(--ease-bounce);border-radius:var(--radius-none)}.cr-arrow svg{width:16px;height:16px;flex-shrink:0}.cr-arrow:hover:not(.is-disabled){background:var(--bg-elevated);border-color:var(--border-strong, var(--color-washi-500));transform:translateY(-50%) scale(1.05)}.cr-arrow.is-disabled{opacity:.3;pointer-events:none}.cr-arrow-prev{left:var(--lib-space-md)}.cr-arrow-next{right:var(--lib-space-md)}.cr-dots{display:flex;align-items:center;justify-content:center;gap:var(--lib-space-sm);padding-top:var(--lib-space-md)}.cr-dot{width:6px;height:6px;border-radius:var(--radius-full);background:var(--color-washi-300);border:none;cursor:pointer;padding:0;transition:width var(--duration-slow) var(--ease-bounce),background var(--duration-base) var(--ease-default);flex-shrink:0}.cr-dot.is-active{width:20px;background:var(--color-washi-900)}.cr-counter{font-family:var(--lib-font-mono);font-size:var(--text-xs);letter-spacing:var(--tracking-widest);color:var(--text-muted);text-align:center;padding-top:var(--lib-space-sm)}.cr-counter span{color:var(--text-primary)}:host([mode="fade"]) .cr-track{transition:none;position:relative}:host([mode="fade"]) ::slotted(*){position:absolute;top:0;left:0;width:100%;opacity:0;transition:opacity var(--duration-slow) var(--ease-out);pointer-events:none}:host([mode="fade"]) ::slotted(.is-active){position:relative;opacity:1;pointer-events:auto}slot[name=thumbnail]{display:flex;gap:var(--lib-space-xs);padding-top:var(--lib-space-sm);overflow-x:auto;scrollbar-width:none}slot[name=thumbnail]::-webkit-scrollbar{display:none}::slotted([slot="thumbnail"]){width:64px;height:48px;flex-shrink:0;overflow:hidden;cursor:pointer;border:2px solid transparent;transition:border-color var(--duration-base) var(--ease-default),opacity var(--duration-base) var(--ease-default);opacity:.5}::slotted([slot="thumbnail"].is-active){border-color:var(--color-washi-900);opacity:1}@media(max-width:640px){:host([peek="2"]) ::slotted(*),:host([peek="3"]) ::slotted(*),:host([peek="4"]) ::slotted(*){flex:0 0 calc(80% - 8px)}}@media(prefers-reduced-motion:reduce){.cr-track{transition:none}.cr-dot{transition:background var(--duration-base)}:host([mode="fade"]) ::slotted(*){transition:none}}}';
1
+ const checkboxCardCss = '@layer tokens,reset,components;@layer reset{:host{display:block}*,*:before,*:after{box-sizing:border-box}}@layer components{.cc-input{position:absolute;opacity:0;width:0;height:0;pointer-events:none}.cc{display:block;position:relative;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;outline:none}.cc:focus-within .cc-body{outline:2px solid var(--color-kaki-400);outline-offset:2px}.cc-body{position:relative;border:1px solid var(--border-subtle);background:var(--bg-elevated);padding:var(--lib-space-lg);overflow:hidden;transition:border-color var(--duration-base) var(--ease-out),background var(--duration-base) var(--ease-out),box-shadow var(--duration-base) var(--ease-out),transform var(--duration-fast) var(--ease-out)}.cc:hover .cc-body{border-color:var(--border-default);background:var(--bg-surface)}.cc:active .cc-body{transform:scale(.985)}.cc-body:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgb(255,255,255,.4) 0%,transparent 50%);opacity:0;pointer-events:none;transition:opacity var(--duration-slow)}.cc-input:checked~.cc-body:before{opacity:1}.cc-body:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--color-kaki-400),transparent);opacity:0;transition:opacity var(--duration-slow)}.cc-input:checked~.cc-body:after{opacity:1}.cc-input:checked~.cc-body{border-color:var(--color-kaki-500);background:var(--color-kaki-50)}.cc-check{position:absolute;top:var(--lib-space-md);right:var(--lib-space-md);width:18px;height:18px;border:1px solid var(--border-default);background:var(--bg-elevated);display:flex;align-items:center;justify-content:center;flex-shrink:0;z-index:2;pointer-events:none;transition:border-color var(--duration-base) var(--ease-out),background var(--duration-base) var(--ease-out)}.cc-check svg{width:10px;height:10px;stroke:#fff;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;fill:none;opacity:0;transform:scale(.5);transition:opacity var(--duration-base) var(--ease-bounce),transform var(--duration-base) var(--ease-bounce)}.cc-input:checked~.cc-body .cc-check{border-color:var(--color-kaki-500);background:var(--color-kaki-500)}.cc-input:checked~.cc-body .cc-check svg{opacity:1;transform:scale(1)}.cc-check-pill{border-radius:999px}.cc-icon{margin-bottom:var(--lib-space-md);display:flex;align-items:center}.cc-icon svg,.cc-icon img{width:28px;height:28px;color:var(--text-muted);transition:color var(--duration-base)}.cc-input:checked~.cc-body .cc-icon svg{color:var(--color-kaki-500)}.cc-title{font-family:var(--lib-font-display);font-size:1.2rem;font-weight:300;letter-spacing:var(--tracking-tight);color:var(--text-primary);line-height:1.2;margin-bottom:var(--lib-space-xs);padding-right:var(--lib-space-xl)}.cc-input:checked~.cc-body .cc-title{color:var(--color-kaki-600)}.cc-desc{font-size:var(--text-xs);letter-spacing:.06em;color:var(--text-secondary);line-height:1.7}.cc-input:checked~.cc-body .cc-desc{color:var(--text-secondary)}.cc-badge{display:inline-block;font-family:var(--lib-font-mono);font-size:9px;letter-spacing:.16em;text-transform:uppercase;padding:1px 6px;border:1px solid var(--border-subtle);color:var(--text-muted);margin-bottom:var(--lib-space-sm);transition:border-color var(--duration-base),color var(--duration-base)}.cc-input:checked~.cc-body .cc-badge{border-color:#b85a1e4d;color:var(--color-kaki-500)}.cc-price{font-family:var(--lib-font-display);font-size:2rem;font-weight:300;letter-spacing:var(--tracking-tight);line-height:1;color:var(--text-primary);margin-top:var(--lib-space-md)}.cc-price sup{font-size:.9rem;vertical-align:super;color:var(--text-muted);font-family:var(--lib-font-mono);letter-spacing:.06em}.cc-price sub{font-size:.65rem;vertical-align:baseline;color:var(--text-muted);font-family:var(--lib-font-mono);letter-spacing:.08em}.cc-input:checked~.cc-body .cc-price{color:var(--color-kaki-600)}.cc-divider{height:1px;background:var(--border-subtle);margin:var(--lib-space-md) 0;transition:background var(--duration-base)}.cc-input:checked~.cc-body .cc-divider{background:#b85a1e33}.cc-features{list-style:none;display:flex;flex-direction:column;gap:var(--lib-space-sm)}.cc-features li{font-size:var(--text-xs);letter-spacing:.06em;color:var(--text-secondary);display:flex;align-items:center;gap:var(--lib-space-sm)}.cc-features li:before{content:"";width:12px;height:1px;background:var(--border-default);flex-shrink:0;transition:background var(--duration-base),width var(--duration-base)}.cc-input:checked~.cc-body .cc-features li:before{background:var(--color-kaki-400);width:14px}.cc-input:checked~.cc-body .cc-features li{color:var(--text-primary)}.cc-ripple{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.cc-ripple-dot{position:absolute;width:4px;height:4px;background:var(--color-kaki-400);border-radius:50%;transform:scale(0);opacity:.18;animation:cc-ripple .5s ease-out forwards}@keyframes cc-ripple{to{transform:scale(80);opacity:0}}:host([layout="horizontal"]) .cc-body{display:flex;align-items:center;gap:var(--lib-space-lg);padding:var(--lib-space-md) var(--lib-space-lg)}:host([layout="horizontal"]) .cc-icon{margin-bottom:0;flex-shrink:0}:host([layout="horizontal"]) .cc-content{flex:1;min-width:0}:host([layout="horizontal"]) .cc-title{margin-bottom:2px;font-size:1rem;padding-right:var(--lib-space-lg)}:host([layout="horizontal"]) .cc-check{top:50%;right:var(--lib-space-md);transform:translateY(-50%)}:host([layout="compact"]) .cc-body{padding:var(--lib-space-md) var(--lib-space-lg)}:host([layout="compact"]) .cc-title{font-size:1rem}:host([color="celadon"]) .cc-input:checked~.cc-body{border-color:var(--color-celadon-500);background:var(--color-celadon-50)}:host([color="celadon"]) .cc-input:checked~.cc-body:after{background:linear-gradient(90deg,transparent,var(--color-celadon-400),transparent)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-check{border-color:var(--color-celadon-500);background:var(--color-celadon-500)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-title{color:var(--color-celadon-500)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-icon svg{color:var(--color-celadon-500)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-badge{border-color:#3571644d;color:var(--color-celadon-500)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-features li:before{background:var(--color-celadon-400)}:host([color="celadon"]) .cc-input:checked~.cc-body .cc-divider{background:#35716433}:host([color="celadon"]) .cc-ripple-dot{background:var(--color-celadon-400)}:host([color="celadon"]) .cc:focus-within .cc-body{outline-color:var(--color-celadon-400)}:host([input-type="radio"]) .cc-check{border-radius:50%}:host([input-type="radio"]) .cc-input:checked~.cc-body .cc-check{background:var(--color-kaki-500);border-color:var(--color-kaki-500)}:host([dark]) .cc-body{background:#ffffff0a;border-color:#ffffff14}:host([dark]) .cc:hover .cc-body{border-color:#ffffff26;background:#ffffff0f}:host([dark]) .cc-check{background:#ffffff0f;border-color:#ffffff24}:host([dark]) .cc-title{color:#faf7f4bf}:host([dark]) .cc-desc{color:#faf7f447}:host([dark]) .cc-badge{border-color:#ffffff1a;color:#faf7f44d}:host([dark]) .cc-divider{background:#ffffff14}:host([dark]) .cc-features li{color:#faf7f44d}:host([dark]) .cc-features li:before{background:#ffffff26}:host([dark]) .cc-price{color:#faf7f4bf}:host([dark]) .cc-price sup,:host([dark]) .cc-price sub{color:#faf7f44d}:host([dark]) .cc-input:checked~.cc-body{border-color:var(--color-kaki-500);background:#b85a1e14}:host([dark]) .cc-input:checked~.cc-body .cc-check{border-color:var(--color-kaki-500);background:var(--color-kaki-500)}:host([dark]) .cc-input:checked~.cc-body .cc-title{color:var(--color-kaki-400)}:host([dark]) .cc-input:checked~.cc-body .cc-desc{color:#faf7f466}:host([dark]) .cc-input:checked~.cc-body .cc-badge{border-color:#b85a1e59;color:var(--color-kaki-400)}:host([dark]) .cc-input:checked~.cc-body .cc-divider{background:#b85a1e33}:host([dark]) .cc-input:checked~.cc-body .cc-features li{color:#faf7f48c}:host([dark]) .cc-input:checked~.cc-body .cc-features li:before{background:var(--color-kaki-400)}:host([dark]) .cc-input:checked~.cc-body .cc-price{color:var(--color-kaki-400)}:host([dark]) .cc-input:checked~.cc-body .cc-icon svg{color:var(--color-kaki-400)}:host([disabled]) .cc{pointer-events:none;opacity:.4}:host([disabled]) .cc-body{cursor:not-allowed}:host([error]) .cc-body{border-color:#c0392b66;background:#c0392b08}:host([error]) .cc:hover .cc-body{border-color:var(--color-error)}.cc-img-thumb{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;filter:grayscale(.4);transition:filter var(--duration-slow)}.cc-input:checked~.cc-body .cc-img-thumb{filter:grayscale(0)}.cc-img-content{padding:var(--lib-space-md) var(--lib-space-lg) var(--lib-space-lg)}:host([image]) .cc-body{padding:0}:host([image]) .cc-check{top:var(--lib-space-sm);right:var(--lib-space-sm);background:#ffffffd9}:host([image]) .cc-input:checked~.cc-body .cc-check{background:var(--color-kaki-500);border-color:var(--color-kaki-500)}}';
2
2
  export {
3
- carouselCss as default
3
+ checkboxCardCss as default
4
4
  };
5
5
  //# sourceMappingURL=index200.js.map
package/dist/index201.js CHANGED
@@ -1,5 +1,60 @@
1
- const cursorCss = '@layer tokens,reset,components;@layer reset{:host{display:contents;pointer-events:none}*,*:before,*:after{box-sizing:border-box}}@layer components{.cur-dot{position:fixed;border-radius:50%;pointer-events:none;z-index:9999;transform:translate(-50%,-50%);will-change:transform;transition:width .2s var(--ease-out),height .2s var(--ease-out),background .25s,border-radius .2s,opacity .3s}.cur-ring{position:fixed;border-radius:50%;pointer-events:none;z-index:9998;transform:translate(-50%,-50%);will-change:transform;transition:width .3s var(--ease-out),height .3s var(--ease-out),border-color .3s,border-width .2s,background .3s,opacity .3s}.cur-label{position:fixed;pointer-events:none;z-index:9999;font-family:var(--lib-font-mono);font-size:10px;letter-spacing:var(--tracking-wider);text-transform:uppercase;color:var(--color-washi-50);background:var(--color-washi-900);padding:4px 8px;white-space:nowrap;opacity:0;transform:translate(14px,-50%);transition:opacity .2s;will-change:transform}.cur-label.is-visible{opacity:1}:host([curstate="hover"]) .cur-dot{width:10px;height:10px;background:var(--color-kaki-500)}:host([curstate="hover"]) .cur-ring{width:52px;height:52px;border-color:var(--color-kaki-400)!important;border-width:1.5px!important}:host([curstate="text"]) .cur-dot{width:2px;height:22px;border-radius:1px;background:var(--color-washi-700)}:host([curstate="text"]) .cur-ring{opacity:0}:host([curstate="press"]) .cur-dot{width:4px;height:4px;background:var(--color-kaki-600)}:host([curstate="press"]) .cur-ring{width:22px;height:22px;border-color:var(--color-kaki-500)!important;background:#b85a1e0f!important}:host([curstate="hidden"]) .cur-dot,:host([curstate="hidden"]) .cur-ring{opacity:0}:host([dark-zone]) .cur-ring{border-color:#faf7f440!important}@media(pointer:coarse),(max-width:768px){.cur-dot,.cur-ring,.cur-label{display:none}}}';
1
+ import { html } from "lit";
2
+ const removeSvg = html`
3
+ <svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true">
4
+ <path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/>
5
+ </svg>`;
6
+ function staticChip() {
7
+ return html`
8
+ <span class="chip" part="chip" role="note" tabindex="-1">
9
+ <slot name="icon"></slot>
10
+ <slot></slot>
11
+ </span>`;
12
+ }
13
+ function toggleChip(ctx) {
14
+ return html`
15
+ <button
16
+ class="chip-toggle"
17
+ part="chip"
18
+ role="checkbox"
19
+ aria-checked="${ctx.selected}"
20
+ aria-label="${ctx.ariaLabel}"
21
+ @click="${() => ctx._handleToggle()}"
22
+ @keydown="${(e) => {
23
+ if (e.key === "Enter" || e.key === " ") {
24
+ e.preventDefault();
25
+ ctx._handleToggle();
26
+ }
27
+ }}"
28
+ >
29
+ <slot name="icon"></slot>
30
+ <slot></slot>
31
+ </button>`;
32
+ }
33
+ function inputChip(ctx) {
34
+ return html`
35
+ <span class="chip-input" part="chip">
36
+ <slot name="avatar"></slot>
37
+ <slot name="icon"></slot>
38
+ <slot></slot>
39
+ <button
40
+ class="chip-remove"
41
+ part="remove"
42
+ type="button"
43
+ aria-label="Eliminar ${ctx.ariaLabel || ""}"
44
+ @click="${(e) => ctx._handleRemove(e)}"
45
+ >
46
+ ${removeSvg}
47
+ </button>
48
+ </span>`;
49
+ }
50
+ function chipTemplate(ctx) {
51
+ if (ctx.kind === "toggle") return toggleChip(ctx);
52
+ if (ctx.kind === "input") return inputChip(ctx);
53
+ return staticChip(
54
+ /*ctx*/
55
+ );
56
+ }
2
57
  export {
3
- cursorCss as default
58
+ chipTemplate
4
59
  };
5
60
  //# sourceMappingURL=index201.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index201.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index201.js","sources":["../src/components/molecules/chip/lib-chip.html.ts"],"sourcesContent":["import { html, TemplateResult } from 'lit';\nimport type { LibChip } from './lib-chip.component';\n\n/* SVG × para el botón de eliminar */\nconst removeSvg: TemplateResult = html`\n <svg viewBox=\"0 0 256 256\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"/>\n </svg>`;\n\n/* ── Familia STATIC ── */\nfunction staticChip(/*ctx: LibChip*/): TemplateResult {\n return html`\n <span class=\"chip\" part=\"chip\" role=\"note\" tabindex=\"-1\">\n <slot name=\"icon\"></slot>\n <slot></slot>\n </span>`;\n}\n\n/* ── Familia TOGGLE ── */\nfunction toggleChip(ctx: LibChip): TemplateResult {\n return html`\n <button\n class=\"chip-toggle\"\n part=\"chip\"\n role=\"checkbox\"\n aria-checked=\"${ctx.selected}\"\n aria-label=\"${ctx.ariaLabel}\"\n @click=\"${(): void => ctx._handleToggle()}\"\n @keydown=\"${(e: KeyboardEvent): void => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n ctx._handleToggle();\n }\n }}\"\n >\n <slot name=\"icon\"></slot>\n <slot></slot>\n </button>`;\n}\n\n/* ── Familia INPUT (removable) ── */\nfunction inputChip(ctx: LibChip): TemplateResult {\n return html`\n <span class=\"chip-input\" part=\"chip\">\n <slot name=\"avatar\"></slot>\n <slot name=\"icon\"></slot>\n <slot></slot>\n <button\n class=\"chip-remove\"\n part=\"remove\"\n type=\"button\"\n aria-label=\"Eliminar ${ctx.ariaLabel || ''}\"\n @click=\"${(e: MouseEvent): void => ctx._handleRemove(e)}\"\n >\n ${removeSvg}\n </button>\n </span>`;\n}\n\nexport function chipTemplate(ctx: LibChip): TemplateResult {\n if (ctx.kind === 'toggle') return toggleChip(ctx);\n if (ctx.kind === 'input') return inputChip(ctx);\n return staticChip(/*ctx*/);\n}"],"names":[],"mappings":";AAIA,MAAM,YAA4B;AAAA;AAAA;AAAA;AAMlC,SAAS,aAA6C;AACpD,SAAO;AAAA;AAAA;AAAA;AAAA;AAKT;AAGA,SAAS,WAAW,KAA8B;AAChD,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKa,IAAI,QAAQ;AAAA,oBACd,IAAI,SAAS;AAAA,gBACjB,MAAY,IAAI,eAAe;AAAA,kBAC7B,CAAC,MAA2B;AACtC,QAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,QAAE,eAAA;AACF,UAAI,cAAA;AAAA,IACN;AAAA,EACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAKP;AAGA,SAAS,UAAU,KAA8B;AAC/C,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BASsB,IAAI,aAAa,EAAE;AAAA,kBAChC,CAAC,MAAwB,IAAI,cAAc,CAAC,CAAC;AAAA;AAAA,UAErD,SAAS;AAAA;AAAA;AAGnB;AAEO,SAAS,aAAa,KAA8B;AACzD,MAAI,IAAI,SAAS,SAAU,QAAO,WAAW,GAAG;AAChD,MAAI,IAAI,SAAS,QAAU,QAAO,UAAU,GAAG;AAC/C,SAAO;AAAA;AAAA,EAAA;AACT;"}