@xsmusices/ui 1.41.0 → 1.42.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 (167) hide show
  1. package/README.md +4 -18
  2. package/fesm2022/xsmusices-ui-country-flag.xsstory-BPTu5b4i.mjs +84 -0
  3. package/fesm2022/xsmusices-ui-country-flag.xsstory-BPTu5b4i.mjs.map +1 -0
  4. package/fesm2022/xsmusices-ui-country-name.xsstory-ENhKrPTw.mjs +106 -0
  5. package/fesm2022/xsmusices-ui-country-name.xsstory-ENhKrPTw.mjs.map +1 -0
  6. package/fesm2022/xsmusices-ui-date-chat.xsstory-BBAJebr1.mjs +75 -0
  7. package/fesm2022/xsmusices-ui-date-chat.xsstory-BBAJebr1.mjs.map +1 -0
  8. package/fesm2022/xsmusices-ui-date-format.xsstory-Chrcn1yu.mjs +69 -0
  9. package/fesm2022/xsmusices-ui-date-format.xsstory-Chrcn1yu.mjs.map +1 -0
  10. package/fesm2022/xsmusices-ui-date-long.xsstory-CkYL5e1z.mjs +67 -0
  11. package/fesm2022/xsmusices-ui-date-long.xsstory-CkYL5e1z.mjs.map +1 -0
  12. package/fesm2022/xsmusices-ui-first-letter-case.xsstory-BJDtnUwE.mjs +49 -0
  13. package/fesm2022/xsmusices-ui-first-letter-case.xsstory-BJDtnUwE.mjs.map +1 -0
  14. package/fesm2022/xsmusices-ui-import-media-bottom-bar.xsstory-7FhVkiVz.mjs +29 -0
  15. package/fesm2022/xsmusices-ui-import-media-bottom-bar.xsstory-7FhVkiVz.mjs.map +1 -0
  16. package/fesm2022/xsmusices-ui-import-media-card.xsstory-vhn8r2YJ.mjs +61 -0
  17. package/fesm2022/xsmusices-ui-import-media-card.xsstory-vhn8r2YJ.mjs.map +1 -0
  18. package/fesm2022/xsmusices-ui-import-media-flow.xsstory-CMVovyMA.mjs +122 -0
  19. package/fesm2022/xsmusices-ui-import-media-flow.xsstory-CMVovyMA.mjs.map +1 -0
  20. package/fesm2022/xsmusices-ui-import-media-header.xsstory-Ci82oaxD.mjs +37 -0
  21. package/fesm2022/xsmusices-ui-import-media-header.xsstory-Ci82oaxD.mjs.map +1 -0
  22. package/fesm2022/xsmusices-ui-index-DRXscULI.mjs +11161 -0
  23. package/fesm2022/xsmusices-ui-index-DRXscULI.mjs.map +1 -0
  24. package/fesm2022/xsmusices-ui-max-count.xsstory-kWzvhDsC.mjs +70 -0
  25. package/fesm2022/xsmusices-ui-max-count.xsstory-kWzvhDsC.mjs.map +1 -0
  26. package/fesm2022/xsmusices-ui-number-to-month.xsstory-LUhA1uRx.mjs +81 -0
  27. package/fesm2022/xsmusices-ui-number-to-month.xsstory-LUhA1uRx.mjs.map +1 -0
  28. package/fesm2022/xsmusices-ui-priorities.xsstory-3n93Ph84.mjs +92 -0
  29. package/fesm2022/xsmusices-ui-priorities.xsstory-3n93Ph84.mjs.map +1 -0
  30. package/fesm2022/xsmusices-ui-role.xsstory-Cz3SBwNU.mjs +76 -0
  31. package/fesm2022/xsmusices-ui-role.xsstory-Cz3SBwNU.mjs.map +1 -0
  32. package/fesm2022/xsmusices-ui-slice-array.xsstory-ElPwFlwd.mjs +76 -0
  33. package/fesm2022/xsmusices-ui-slice-array.xsstory-ElPwFlwd.mjs.map +1 -0
  34. package/fesm2022/xsmusices-ui-social.xsstory-gjFcbal_.mjs +83 -0
  35. package/fesm2022/xsmusices-ui-social.xsstory-gjFcbal_.mjs.map +1 -0
  36. package/fesm2022/xsmusices-ui-state-name.xsstory-kkdBe2V8.mjs +113 -0
  37. package/fesm2022/xsmusices-ui-state-name.xsstory-kkdBe2V8.mjs.map +1 -0
  38. package/fesm2022/xsmusices-ui-stats-card.xsstory-PWTUDysc.mjs +96 -0
  39. package/fesm2022/xsmusices-ui-stats-card.xsstory-PWTUDysc.mjs.map +1 -0
  40. package/fesm2022/xsmusices-ui-thousands-separator.xsstory-Q9Q7cCAG.mjs +49 -0
  41. package/fesm2022/xsmusices-ui-thousands-separator.xsstory-Q9Q7cCAG.mjs.map +1 -0
  42. package/fesm2022/xsmusices-ui-title-media.xsstory-C4qa-mT2.mjs +81 -0
  43. package/fesm2022/xsmusices-ui-title-media.xsstory-C4qa-mT2.mjs.map +1 -0
  44. package/fesm2022/xsmusices-ui-truncate-text.xsstory-B3RQ9xZ3.mjs +67 -0
  45. package/fesm2022/xsmusices-ui-truncate-text.xsstory-B3RQ9xZ3.mjs.map +1 -0
  46. package/fesm2022/xsmusices-ui-type-es.xsstory-BsE_4D9p.mjs +110 -0
  47. package/fesm2022/xsmusices-ui-type-es.xsstory-BsE_4D9p.mjs.map +1 -0
  48. package/fesm2022/xsmusices-ui-type-user.xsstory-Bn6Fnnmi.mjs +98 -0
  49. package/fesm2022/xsmusices-ui-type-user.xsstory-Bn6Fnnmi.mjs.map +1 -0
  50. package/fesm2022/xsmusices-ui-xs-action-sheet.xsstory-CBpZBlfx.mjs +402 -0
  51. package/fesm2022/xsmusices-ui-xs-action-sheet.xsstory-CBpZBlfx.mjs.map +1 -0
  52. package/fesm2022/xsmusices-ui-xs-alert-group.xsstory-HMGGLHfv.mjs +201 -0
  53. package/fesm2022/xsmusices-ui-xs-alert-group.xsstory-HMGGLHfv.mjs.map +1 -0
  54. package/fesm2022/xsmusices-ui-xs-alert.xsstory-CXTRbHHS.mjs +158 -0
  55. package/fesm2022/xsmusices-ui-xs-alert.xsstory-CXTRbHHS.mjs.map +1 -0
  56. package/fesm2022/xsmusices-ui-xs-auth.xsstory-DxO8iDpd.mjs +205 -0
  57. package/fesm2022/xsmusices-ui-xs-auth.xsstory-DxO8iDpd.mjs.map +1 -0
  58. package/fesm2022/xsmusices-ui-xs-badge.xsstory-B1QXLQ4H.mjs +229 -0
  59. package/fesm2022/xsmusices-ui-xs-badge.xsstory-B1QXLQ4H.mjs.map +1 -0
  60. package/fesm2022/xsmusices-ui-xs-block.xsstory-GXV6UFJo.mjs +165 -0
  61. package/fesm2022/xsmusices-ui-xs-block.xsstory-GXV6UFJo.mjs.map +1 -0
  62. package/fesm2022/xsmusices-ui-xs-breadcrumbs.xsstory-CNyBeURd.mjs +44 -0
  63. package/fesm2022/xsmusices-ui-xs-breadcrumbs.xsstory-CNyBeURd.mjs.map +1 -0
  64. package/fesm2022/xsmusices-ui-xs-button.xsstory-DqECZuZF.mjs +263 -0
  65. package/fesm2022/xsmusices-ui-xs-button.xsstory-DqECZuZF.mjs.map +1 -0
  66. package/fesm2022/xsmusices-ui-xs-buttons-group.xsstory-H1pcuFtx.mjs +97 -0
  67. package/fesm2022/xsmusices-ui-xs-buttons-group.xsstory-H1pcuFtx.mjs.map +1 -0
  68. package/fesm2022/xsmusices-ui-xs-chart.xsstory--iUHj7bv.mjs +239 -0
  69. package/fesm2022/xsmusices-ui-xs-chart.xsstory--iUHj7bv.mjs.map +1 -0
  70. package/fesm2022/xsmusices-ui-xs-chat-alert.xsstory-rdpQcMgJ.mjs +40 -0
  71. package/fesm2022/xsmusices-ui-xs-chat-alert.xsstory-rdpQcMgJ.mjs.map +1 -0
  72. package/fesm2022/xsmusices-ui-xs-chat-conversation-info.xsstory-BQjdjpbB.mjs +157 -0
  73. package/fesm2022/xsmusices-ui-xs-chat-conversation-info.xsstory-BQjdjpbB.mjs.map +1 -0
  74. package/fesm2022/xsmusices-ui-xs-chat-conversation.xsstory-sK9b5_Wo.mjs +303 -0
  75. package/fesm2022/xsmusices-ui-xs-chat-conversation.xsstory-sK9b5_Wo.mjs.map +1 -0
  76. package/fesm2022/xsmusices-ui-xs-chat-floating-panel.xsstory-_XfEzM1j.mjs +223 -0
  77. package/fesm2022/xsmusices-ui-xs-chat-floating-panel.xsstory-_XfEzM1j.mjs.map +1 -0
  78. package/fesm2022/xsmusices-ui-xs-chat-list.xsstory-BSY46FgK.mjs +46 -0
  79. package/fesm2022/xsmusices-ui-xs-chat-list.xsstory-BSY46FgK.mjs.map +1 -0
  80. package/fesm2022/xsmusices-ui-xs-chat-textarea.xsstory-NG2p0Tdw.mjs +35 -0
  81. package/fesm2022/xsmusices-ui-xs-chat-textarea.xsstory-NG2p0Tdw.mjs.map +1 -0
  82. package/fesm2022/xsmusices-ui-xs-customize-profile.xsstory-Ba7wmXF7.mjs +98 -0
  83. package/fesm2022/xsmusices-ui-xs-customize-profile.xsstory-Ba7wmXF7.mjs.map +1 -0
  84. package/fesm2022/xsmusices-ui-xs-date-mini.xsstory-DXog7Yhg.mjs +67 -0
  85. package/fesm2022/xsmusices-ui-xs-date-mini.xsstory-DXog7Yhg.mjs.map +1 -0
  86. package/fesm2022/xsmusices-ui-xs-date-range-picker.xsstory-Bmk2wv1s.mjs +25 -0
  87. package/fesm2022/xsmusices-ui-xs-date-range-picker.xsstory-Bmk2wv1s.mjs.map +1 -0
  88. package/fesm2022/xsmusices-ui-xs-empty-state.xsstory-CCOJ4b9_.mjs +70 -0
  89. package/fesm2022/xsmusices-ui-xs-empty-state.xsstory-CCOJ4b9_.mjs.map +1 -0
  90. package/fesm2022/xsmusices-ui-xs-filter-panel.xsstory-DbvxGppo.mjs +287 -0
  91. package/fesm2022/xsmusices-ui-xs-filter-panel.xsstory-DbvxGppo.mjs.map +1 -0
  92. package/fesm2022/xsmusices-ui-xs-formly.xsstory-Bjne7mpZ.mjs +3453 -0
  93. package/fesm2022/xsmusices-ui-xs-formly.xsstory-Bjne7mpZ.mjs.map +1 -0
  94. package/fesm2022/xsmusices-ui-xs-full-image.xsstory-xwN2jkW1.mjs +147 -0
  95. package/fesm2022/xsmusices-ui-xs-full-image.xsstory-xwN2jkW1.mjs.map +1 -0
  96. package/fesm2022/xsmusices-ui-xs-icon.xsstory-asFaHy5H.mjs +97 -0
  97. package/fesm2022/xsmusices-ui-xs-icon.xsstory-asFaHy5H.mjs.map +1 -0
  98. package/fesm2022/xsmusices-ui-xs-image.xsstory-BaeUg3Zp.mjs +142 -0
  99. package/fesm2022/xsmusices-ui-xs-image.xsstory-BaeUg3Zp.mjs.map +1 -0
  100. package/fesm2022/xsmusices-ui-xs-info-blocks.xsstory-BHtaC7U6.mjs +957 -0
  101. package/fesm2022/xsmusices-ui-xs-info-blocks.xsstory-BHtaC7U6.mjs.map +1 -0
  102. package/fesm2022/xsmusices-ui-xs-item-action.xsstory-839UkJyC.mjs +153 -0
  103. package/fesm2022/xsmusices-ui-xs-item-action.xsstory-839UkJyC.mjs.map +1 -0
  104. package/fesm2022/xsmusices-ui-xs-item-card.xsstory-EGJ6itkx.mjs +254 -0
  105. package/fesm2022/xsmusices-ui-xs-item-card.xsstory-EGJ6itkx.mjs.map +1 -0
  106. package/fesm2022/xsmusices-ui-xs-item-compact.xsstory-LhApuPL7.mjs +270 -0
  107. package/fesm2022/xsmusices-ui-xs-item-compact.xsstory-LhApuPL7.mjs.map +1 -0
  108. package/fesm2022/xsmusices-ui-xs-item-type.xsstory-DUeCnW0R.mjs +252 -0
  109. package/fesm2022/xsmusices-ui-xs-item-type.xsstory-DUeCnW0R.mjs.map +1 -0
  110. package/fesm2022/xsmusices-ui-xs-items-slider.xsstory-Dt0bXZI_.mjs +189 -0
  111. package/fesm2022/xsmusices-ui-xs-items-slider.xsstory-Dt0bXZI_.mjs.map +1 -0
  112. package/fesm2022/xsmusices-ui-xs-list.xsstory-lElGfvcY.mjs +633 -0
  113. package/fesm2022/xsmusices-ui-xs-list.xsstory-lElGfvcY.mjs.map +1 -0
  114. package/fesm2022/xsmusices-ui-xs-map.xsstory-C__bUaLQ.mjs +265 -0
  115. package/fesm2022/xsmusices-ui-xs-map.xsstory-C__bUaLQ.mjs.map +1 -0
  116. package/fesm2022/xsmusices-ui-xs-maplibre.xsstory-u_NroLqJ.mjs +513 -0
  117. package/fesm2022/xsmusices-ui-xs-maplibre.xsstory-u_NroLqJ.mjs.map +1 -0
  118. package/fesm2022/xsmusices-ui-xs-modal.xsstory-B96CYHF0.mjs +199 -0
  119. package/fesm2022/xsmusices-ui-xs-modal.xsstory-B96CYHF0.mjs.map +1 -0
  120. package/fesm2022/xsmusices-ui-xs-navbar-sidebar.xsstory-DHmPSARx.mjs +122 -0
  121. package/fesm2022/xsmusices-ui-xs-navbar-sidebar.xsstory-DHmPSARx.mjs.map +1 -0
  122. package/fesm2022/xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs +203 -0
  123. package/fesm2022/xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs.map +1 -0
  124. package/fesm2022/xsmusices-ui-xs-profile-comments.xsstory-CHpCDxLe.mjs +373 -0
  125. package/fesm2022/xsmusices-ui-xs-profile-comments.xsstory-CHpCDxLe.mjs.map +1 -0
  126. package/fesm2022/xsmusices-ui-xs-profile-current-event.xsstory-BtRq4wE4.mjs +111 -0
  127. package/fesm2022/xsmusices-ui-xs-profile-current-event.xsstory-BtRq4wE4.mjs.map +1 -0
  128. package/fesm2022/xsmusices-ui-xs-profile-exclusive.xsstory-B1Sag_X-.mjs +147 -0
  129. package/fesm2022/xsmusices-ui-xs-profile-exclusive.xsstory-B1Sag_X-.mjs.map +1 -0
  130. package/fesm2022/xsmusices-ui-xs-profile-image.xsstory-Cm_ixcdU.mjs +181 -0
  131. package/fesm2022/xsmusices-ui-xs-profile-image.xsstory-Cm_ixcdU.mjs.map +1 -0
  132. package/fesm2022/xsmusices-ui-xs-profile-info.xsstory-DAfsbXrF.mjs +95 -0
  133. package/fesm2022/xsmusices-ui-xs-profile-info.xsstory-DAfsbXrF.mjs.map +1 -0
  134. package/fesm2022/xsmusices-ui-xs-profile-random-flag.xsstory-DH3Y_XX1.mjs +50 -0
  135. package/fesm2022/xsmusices-ui-xs-profile-random-flag.xsstory-DH3Y_XX1.mjs.map +1 -0
  136. package/fesm2022/xsmusices-ui-xs-profile-skeleton.xsstory-BO0ZqUMS.mjs +66 -0
  137. package/fesm2022/xsmusices-ui-xs-profile-skeleton.xsstory-BO0ZqUMS.mjs.map +1 -0
  138. package/fesm2022/xsmusices-ui-xs-profile-tops.xsstory-eKxRAMdS.mjs +246 -0
  139. package/fesm2022/xsmusices-ui-xs-profile-tops.xsstory-eKxRAMdS.mjs.map +1 -0
  140. package/fesm2022/xsmusices-ui-xs-profile-verified.xsstory-HtbUlJFX.mjs +34 -0
  141. package/fesm2022/xsmusices-ui-xs-profile-verified.xsstory-HtbUlJFX.mjs.map +1 -0
  142. package/fesm2022/xsmusices-ui-xs-section-title.xsstory-CHlZ69FK.mjs +180 -0
  143. package/fesm2022/xsmusices-ui-xs-section-title.xsstory-CHlZ69FK.mjs.map +1 -0
  144. package/fesm2022/xsmusices-ui-xs-select-modal.xsstory-BMc6o0W7.mjs +112 -0
  145. package/fesm2022/xsmusices-ui-xs-select-modal.xsstory-BMc6o0W7.mjs.map +1 -0
  146. package/fesm2022/xsmusices-ui-xs-send-scraper.xsstory-Cq6PuwN7.mjs +79 -0
  147. package/fesm2022/xsmusices-ui-xs-send-scraper.xsstory-Cq6PuwN7.mjs.map +1 -0
  148. package/fesm2022/xsmusices-ui-xs-skeleton-for-slider.xsstory-k-uutKIV.mjs +67 -0
  149. package/fesm2022/xsmusices-ui-xs-skeleton-for-slider.xsstory-k-uutKIV.mjs.map +1 -0
  150. package/fesm2022/xsmusices-ui-xs-stepper.xsstory-gKU4wN-_.mjs +91 -0
  151. package/fesm2022/xsmusices-ui-xs-stepper.xsstory-gKU4wN-_.mjs.map +1 -0
  152. package/fesm2022/xsmusices-ui-xs-table-items.xsstory-vR5x6wZe.mjs +95 -0
  153. package/fesm2022/xsmusices-ui-xs-table-items.xsstory-vR5x6wZe.mjs.map +1 -0
  154. package/fesm2022/xsmusices-ui-xs-table.xsstory-s13JV3k9.mjs +2941 -0
  155. package/fesm2022/xsmusices-ui-xs-table.xsstory-s13JV3k9.mjs.map +1 -0
  156. package/fesm2022/xsmusices-ui-xs-tabs.xsstory-ColZVzXZ.mjs +72 -0
  157. package/fesm2022/xsmusices-ui-xs-tabs.xsstory-ColZVzXZ.mjs.map +1 -0
  158. package/fesm2022/xsmusices-ui-xs-title-collapse.xsstory-COqb1jdP.mjs +65 -0
  159. package/fesm2022/xsmusices-ui-xs-title-collapse.xsstory-COqb1jdP.mjs.map +1 -0
  160. package/fesm2022/xsmusices-ui-xs-toast.xsstory-BBhGu-j4.mjs +59 -0
  161. package/fesm2022/xsmusices-ui-xs-toast.xsstory-BBhGu-j4.mjs.map +1 -0
  162. package/fesm2022/xsmusices-ui.mjs +725 -684
  163. package/fesm2022/xsmusices-ui.mjs.map +1 -0
  164. package/index.d.ts +70 -83
  165. package/package.json +2 -22
  166. package/styles/shared-utilities.css +0 -1
  167. package/LICENSE +0 -9
@@ -0,0 +1,199 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { XSModalService, XSModalImageSearchComponent, XSButtonComponent } from './xsmusices-ui.mjs';
4
+
5
+ class ModalExampleComponent {
6
+ activeModal = input(...(ngDevMode ? [undefined, { debugName: "activeModal" }] : []));
7
+ modalService = inject(XSModalService);
8
+ openConfirm() {
9
+ this.modalService
10
+ .openConfirm({
11
+ title: 'Confirmar eliminación',
12
+ subTitle: '¿Estás seguro de que quieres eliminar este elemento?',
13
+ labelAccept: 'Sí, eliminar',
14
+ labelCancel: 'Cancelar',
15
+ type: 'centered',
16
+ })
17
+ .subscribe((_result) => { });
18
+ }
19
+ openInfo() {
20
+ this.modalService
21
+ .openInfo({
22
+ title: 'Información importante',
23
+ info: '<p>Este es un mensaje <strong>importante</strong> que el usuario debe leer.</p><p>Contiene información crítica sobre el sistema.</p>',
24
+ labelClose: 'Entendido',
25
+ type: 'centered',
26
+ })
27
+ .subscribe(() => { });
28
+ }
29
+ openInput() {
30
+ this.modalService
31
+ .openInput({
32
+ title: 'Ingrese su nombre',
33
+ subTitle: 'Necesitamos su nombre para continuar',
34
+ placeholder: 'Escriba su nombre aquí...',
35
+ minLength: 2,
36
+ maxLength: 50,
37
+ labelAccept: 'Guardar',
38
+ labelCancel: 'Cancelar',
39
+ type: 'centered',
40
+ })
41
+ .subscribe((_result) => { });
42
+ }
43
+ openClaim() {
44
+ this.modalService
45
+ .openClaim({
46
+ title: 'Reclamar elemento',
47
+ subTitle: 'Esta acción requiere justificación',
48
+ warningMsg: '¿Estás seguro de que quieres reclamar este elemento?',
49
+ enterReason: 'Por favor explica el motivo de la reclamación',
50
+ labelAccept: 'Reclamar',
51
+ labelCancel: 'Cancelar',
52
+ type: 'centered',
53
+ })
54
+ .subscribe((_result) => { });
55
+ }
56
+ openImageSearch() {
57
+ this.modalService
58
+ .open(XSModalImageSearchComponent, {
59
+ type: 'bottom-sheet',
60
+ title: 'Scraping de imágenes',
61
+ subTitle: 'Busca y selecciona una imagen',
62
+ data: {
63
+ q: 'music',
64
+ searchImages: async (query, limit) => {
65
+ const images = Array.from({ length: limit }, (_, i) => `https://picsum.photos/seed/${encodeURIComponent(query)}${i}/300/300`);
66
+ return { images };
67
+ },
68
+ },
69
+ })
70
+ .subscribe((_result) => { });
71
+ }
72
+ openImageSearchWithSources() {
73
+ const mockSoundcloudSearch = async (query) => {
74
+ return {
75
+ images: [
76
+ `https://picsum.photos/seed/soundcloud-${encodeURIComponent(query)}/300/300`,
77
+ ],
78
+ };
79
+ };
80
+ const mockGoogleSearch = async (query, limit, start) => {
81
+ const totalResults = 15;
82
+ const offset = start ?? 1;
83
+ const images = Array.from({ length: Math.min(limit, totalResults - offset + 1) }, (_, i) => `https://picsum.photos/seed/${encodeURIComponent(query)}-g-${offset + i}/300/300`);
84
+ return { images, totalResults };
85
+ };
86
+ this.modalService
87
+ .open(XSModalImageSearchComponent, {
88
+ type: 'bottom-sheet',
89
+ title: 'Scraping de imágenes',
90
+ subTitle: 'Busca en Google Images y SoundCloud',
91
+ data: {
92
+ q: 'music',
93
+ sources: [
94
+ {
95
+ id: 'google',
96
+ label: 'Google Images',
97
+ searchImages: mockGoogleSearch,
98
+ },
99
+ {
100
+ id: 'soundcloud',
101
+ label: 'SoundCloud',
102
+ searchImages: mockSoundcloudSearch,
103
+ },
104
+ ],
105
+ },
106
+ })
107
+ .subscribe((_result) => { });
108
+ }
109
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ModalExampleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
110
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.33", type: ModalExampleComponent, isStandalone: true, selector: "modal-example", inputs: { activeModal: { classPropertyName: "activeModal", publicName: "activeModal", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "modal-example-host": "" } }, ngImport: i0, template: " <div class=\"p-4\">\n <div class=\"grid grid-cols-1 gap-4\">\n @if (activeModal() === 'confirm' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Confirmaci\u00F3n'\"\n (onClick)=\"openConfirm()\"\n ></xs-button>\n }\n @if (activeModal() === 'info' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Informaci\u00F3n'\"\n (onClick)=\"openInfo()\"\n ></xs-button>\n }\n @if (activeModal() === 'input' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Input'\"\n (onClick)=\"openInput()\"\n ></xs-button>\n }\n @if (activeModal() === 'claim' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Reclamo'\"\n (onClick)=\"openClaim()\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearch' || !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de B\u00FAsqueda de Im\u00E1genes'\"\n (onClick)=\"openImageSearch()\"\n class=\"mb-2\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearchSources' ||\n !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir con Google + SoundCloud'\"\n (onClick)=\"openImageSearchWithSources()\"\n ></xs-button>\n }\n </div>\n </div>\n", dependencies: [{ kind: "component", type: XSButtonComponent, selector: "xs-button", inputs: ["id", "label", "type", "icon", "action", "customClass", "variant", "layout", "badgeCount", "isFull", "disabled", "loading", "title", "ariaLabel", "borderRadius", "isGrouped", "groupPosition"], outputs: ["isGroupedChange", "groupPositionChange", "click", "onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.33", ngImport: i0, type: ModalExampleComponent, decorators: [{
113
+ type: Component,
114
+ args: [{ selector: 'modal-example', host: { 'modal-example-host': '' }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [XSButtonComponent], template: " <div class=\"p-4\">\n <div class=\"grid grid-cols-1 gap-4\">\n @if (activeModal() === 'confirm' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Confirmaci\u00F3n'\"\n (onClick)=\"openConfirm()\"\n ></xs-button>\n }\n @if (activeModal() === 'info' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Informaci\u00F3n'\"\n (onClick)=\"openInfo()\"\n ></xs-button>\n }\n @if (activeModal() === 'input' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Input'\"\n (onClick)=\"openInput()\"\n ></xs-button>\n }\n @if (activeModal() === 'claim' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Reclamo'\"\n (onClick)=\"openClaim()\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearch' || !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de B\u00FAsqueda de Im\u00E1genes'\"\n (onClick)=\"openImageSearch()\"\n class=\"mb-2\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearchSources' ||\n !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir con Google + SoundCloud'\"\n (onClick)=\"openImageSearchWithSources()\"\n ></xs-button>\n }\n </div>\n </div>\n" }]
115
+ }], propDecorators: { activeModal: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeModal", required: false }] }] } });
116
+
117
+ const story = {
118
+ id: 'modal',
119
+ name: 'Modal',
120
+ type: 'component',
121
+ subtype: 'Base',
122
+ status: 'active',
123
+ usage: ['admin', 'app', 'monitor'],
124
+ updated: '2026-05-30T12:00:00.000Z',
125
+ created: '2025-07-29T15:06:52.383Z',
126
+ description: 'Componente Modal con diferentes tipos predefinidos y soporte multi-idioma automático con traducciones expandidas.',
127
+ component: ModalExampleComponent,
128
+ selector: 'xs-modal',
129
+ multilanguage: true,
130
+ inputs: [
131
+ {
132
+ key: 'activeModal',
133
+ label: 'Modal activo',
134
+ type: 'select',
135
+ options: [
136
+ 'confirm',
137
+ 'info',
138
+ 'input',
139
+ 'claim',
140
+ 'imageSearch',
141
+ 'imageSearchSources',
142
+ ],
143
+ default: null,
144
+ },
145
+ ],
146
+ examples: [
147
+ {
148
+ name: 'Confirm Modal',
149
+ description: 'Modal de confirmación para acciones del usuario',
150
+ inputs: {
151
+ activeModal: 'confirm',
152
+ },
153
+ },
154
+ {
155
+ name: 'Info Modal',
156
+ description: 'Modal de información para mostrar mensajes al usuario',
157
+ inputs: {
158
+ activeModal: 'info',
159
+ },
160
+ },
161
+ {
162
+ name: 'Input Modal',
163
+ description: 'Modal para solicitar entrada de datos del usuario',
164
+ inputs: {
165
+ activeModal: 'input',
166
+ },
167
+ },
168
+ {
169
+ name: 'Claim Modal',
170
+ description: 'Modal de reclamación con campo de justificación',
171
+ inputs: {
172
+ activeModal: 'claim',
173
+ },
174
+ },
175
+ {
176
+ name: 'Image Search Modal',
177
+ description: 'Modal de búsqueda de imágenes con input y resultados en grid',
178
+ inputs: {
179
+ activeModal: 'imageSearch',
180
+ },
181
+ },
182
+ {
183
+ name: 'Image Search con Google + SoundCloud',
184
+ description: 'Modal de búsqueda de imágenes con múltiples fuentes: Google Images y SoundCloud',
185
+ inputs: {
186
+ activeModal: 'imageSearchSources',
187
+ },
188
+ },
189
+ ],
190
+ coverage: {
191
+ statements: 38,
192
+ branches: 11,
193
+ functions: 45,
194
+ lines: 38,
195
+ },
196
+ };
197
+
198
+ export { story };
199
+ //# sourceMappingURL=xsmusices-ui-xs-modal.xsstory-B96CYHF0.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xsmusices-ui-xs-modal.xsstory-B96CYHF0.mjs","sources":["../../../projects/xs-ui/src/lib/components/base/modal/modal-example.component.ts","../../../projects/xs-ui/src/lib/components/base/modal/modal-example.component.html","../../../projects/xs-ui/src/lib/components/base/modal/xs-modal.xsstory.ts"],"sourcesContent":["import {\n Component,\n input,\n inject,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { XSModalService } from './xs-modal.service';\nimport { XSButtonComponent } from '../button/xs-button.component';\nimport { XSModalImageSearchComponent } from './types/image-search/xs-modal-image-search.component';\n\n@Component({\n selector: 'modal-example',\n host: { 'modal-example-host': '' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [XSButtonComponent],\n templateUrl: './modal-example.component.html',\n})\nexport class ModalExampleComponent {\n activeModal = input<\n | 'confirm'\n | 'info'\n | 'input'\n | 'claim'\n | 'imageSearch'\n | 'imageSearchSources'\n | null\n >();\n\n private modalService = inject(XSModalService);\n\n openConfirm(): void {\n this.modalService\n .openConfirm({\n title: 'Confirmar eliminación',\n subTitle:\n '¿Estás seguro de que quieres eliminar este elemento?',\n labelAccept: 'Sí, eliminar',\n labelCancel: 'Cancelar',\n type: 'centered',\n })\n .subscribe((_result) => {});\n }\n\n openInfo(): void {\n this.modalService\n .openInfo({\n title: 'Información importante',\n info: '<p>Este es un mensaje <strong>importante</strong> que el usuario debe leer.</p><p>Contiene información crítica sobre el sistema.</p>',\n labelClose: 'Entendido',\n type: 'centered',\n })\n .subscribe(() => {});\n }\n\n openInput(): void {\n this.modalService\n .openInput({\n title: 'Ingrese su nombre',\n subTitle: 'Necesitamos su nombre para continuar',\n placeholder: 'Escriba su nombre aquí...',\n minLength: 2,\n maxLength: 50,\n labelAccept: 'Guardar',\n labelCancel: 'Cancelar',\n type: 'centered',\n })\n .subscribe((_result) => {});\n }\n\n openClaim(): void {\n this.modalService\n .openClaim({\n title: 'Reclamar elemento',\n subTitle: 'Esta acción requiere justificación',\n warningMsg:\n '¿Estás seguro de que quieres reclamar este elemento?',\n enterReason:\n 'Por favor explica el motivo de la reclamación',\n labelAccept: 'Reclamar',\n labelCancel: 'Cancelar',\n type: 'centered',\n })\n .subscribe((_result) => {});\n }\n\n openImageSearch(): void {\n this.modalService\n .open(XSModalImageSearchComponent, {\n type: 'bottom-sheet',\n title: 'Scraping de imágenes',\n subTitle: 'Busca y selecciona una imagen',\n data: {\n q: 'music',\n searchImages: async (query: string, limit: number) => {\n const images = Array.from(\n { length: limit },\n (_, i) =>\n `https://picsum.photos/seed/${encodeURIComponent(query)}${i}/300/300`,\n );\n return { images };\n },\n },\n })\n .subscribe((_result) => {});\n }\n\n openImageSearchWithSources(): void {\n const mockSoundcloudSearch = async (query: string) => {\n return {\n images: [\n `https://picsum.photos/seed/soundcloud-${encodeURIComponent(query)}/300/300`,\n ],\n };\n };\n\n const mockGoogleSearch = async (\n query: string,\n limit: number,\n start?: number,\n ) => {\n const totalResults = 15;\n const offset = start ?? 1;\n const images = Array.from(\n { length: Math.min(limit, totalResults - offset + 1) },\n (_, i) =>\n `https://picsum.photos/seed/${encodeURIComponent(query)}-g-${offset + i}/300/300`,\n );\n return { images, totalResults };\n };\n\n this.modalService\n .open(XSModalImageSearchComponent, {\n type: 'bottom-sheet',\n title: 'Scraping de imágenes',\n subTitle: 'Busca en Google Images y SoundCloud',\n data: {\n q: 'music',\n sources: [\n {\n id: 'google',\n label: 'Google Images',\n searchImages: mockGoogleSearch,\n },\n {\n id: 'soundcloud',\n label: 'SoundCloud',\n searchImages: mockSoundcloudSearch,\n },\n ],\n },\n })\n .subscribe((_result) => {});\n }\n}\n"," <div class=\"p-4\">\n <div class=\"grid grid-cols-1 gap-4\">\n @if (activeModal() === 'confirm' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Confirmación'\"\n (onClick)=\"openConfirm()\"\n ></xs-button>\n }\n @if (activeModal() === 'info' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Información'\"\n (onClick)=\"openInfo()\"\n ></xs-button>\n }\n @if (activeModal() === 'input' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Input'\"\n (onClick)=\"openInput()\"\n ></xs-button>\n }\n @if (activeModal() === 'claim' || !activeModal()) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Reclamo'\"\n (onClick)=\"openClaim()\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearch' || !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir Modal de Búsqueda de Imágenes'\"\n (onClick)=\"openImageSearch()\"\n class=\"mb-2\"\n ></xs-button>\n }\n @if (\n activeModal() === 'imageSearchSources' ||\n !activeModal()\n ) {\n <xs-button\n variant=\"primary\"\n [label]=\"'Abrir con Google + SoundCloud'\"\n (onClick)=\"openImageSearchWithSources()\"\n ></xs-button>\n }\n </div>\n </div>\n","import { StoryMeta } from '../../../story.types';\nimport { ModalExampleComponent } from './modal-example.component';\n\nexport const story: StoryMeta = {\n id: 'modal',\n name: 'Modal',\n type: 'component',\n subtype: 'Base',\n status: 'active',\n usage: ['admin', 'app', 'monitor'],\n updated: '2026-05-30T12:00:00.000Z',\n created: '2025-07-29T15:06:52.383Z',\n description:\n 'Componente Modal con diferentes tipos predefinidos y soporte multi-idioma automático con traducciones expandidas.',\n component: ModalExampleComponent,\n selector: 'xs-modal',\n multilanguage: true,\n inputs: [\n {\n key: 'activeModal',\n label: 'Modal activo',\n type: 'select',\n options: [\n 'confirm',\n 'info',\n 'input',\n 'claim',\n 'imageSearch',\n 'imageSearchSources',\n ],\n default: null,\n },\n ],\n examples: [\n {\n name: 'Confirm Modal',\n description:\n 'Modal de confirmación para acciones del usuario',\n inputs: {\n activeModal: 'confirm',\n },\n },\n {\n name: 'Info Modal',\n description:\n 'Modal de información para mostrar mensajes al usuario',\n inputs: {\n activeModal: 'info',\n },\n },\n {\n name: 'Input Modal',\n description:\n 'Modal para solicitar entrada de datos del usuario',\n inputs: {\n activeModal: 'input',\n },\n },\n {\n name: 'Claim Modal',\n description:\n 'Modal de reclamación con campo de justificación',\n inputs: {\n activeModal: 'claim',\n },\n },\n {\n name: 'Image Search Modal',\n description:\n 'Modal de búsqueda de imágenes con input y resultados en grid',\n inputs: {\n activeModal: 'imageSearch',\n },\n },\n {\n name: 'Image Search con Google + SoundCloud',\n description:\n 'Modal de búsqueda de imágenes con múltiples fuentes: Google Images y SoundCloud',\n inputs: {\n activeModal: 'imageSearchSources',\n },\n },\n ],\n coverage: {\n statements: 38,\n branches: 11,\n functions: 45,\n lines: 38,\n },\n};\n"],"names":[],"mappings":";;;;MAiBa,qBAAqB,CAAA;IAChC,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAQhB;AAEK,IAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,WAAW,GAAA;AACT,QAAA,IAAI,CAAC;AACF,aAAA,WAAW,CAAC;AACX,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,QAAQ,EACN,sDAAsD;AACxD,YAAA,WAAW,EAAE,cAAc;AAC3B,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,IAAI,EAAE,UAAU;SACjB;aACA,SAAS,CAAC,CAAC,OAAO,KAAI,EAAE,CAAC,CAAC;IAC/B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC;AACF,aAAA,QAAQ,CAAC;AACR,YAAA,KAAK,EAAE,wBAAwB;AAC/B,YAAA,IAAI,EAAE,sIAAsI;AAC5I,YAAA,UAAU,EAAE,WAAW;AACvB,YAAA,IAAI,EAAE,UAAU;SACjB;AACA,aAAA,SAAS,CAAC,MAAK,EAAE,CAAC,CAAC;IACxB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC;AACT,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,QAAQ,EAAE,sCAAsC;AAChD,YAAA,WAAW,EAAE,2BAA2B;AACxC,YAAA,SAAS,EAAE,CAAC;AACZ,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,WAAW,EAAE,SAAS;AACtB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,IAAI,EAAE,UAAU;SACjB;aACA,SAAS,CAAC,CAAC,OAAO,KAAI,EAAE,CAAC,CAAC;IAC/B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC;AACF,aAAA,SAAS,CAAC;AACT,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,QAAQ,EAAE,oCAAoC;AAC9C,YAAA,UAAU,EACR,sDAAsD;AACxD,YAAA,WAAW,EACT,+CAA+C;AACjD,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,IAAI,EAAE,UAAU;SACjB;aACA,SAAS,CAAC,CAAC,OAAO,KAAI,EAAE,CAAC,CAAC;IAC/B;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,2BAA2B,EAAE;AACjC,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,KAAK,EAAE,sBAAsB;AAC7B,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,IAAI,EAAE;AACJ,gBAAA,CAAC,EAAE,OAAO;AACV,gBAAA,YAAY,EAAE,OAAO,KAAa,EAAE,KAAa,KAAI;AACnD,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,CAAC,CAAC,EAAE,CAAC,KACH,CAAA,2BAAA,EAA8B,kBAAkB,CAAC,KAAK,CAAC,CAAA,EAAG,CAAC,CAAA,QAAA,CAAU,CACxE;oBACD,OAAO,EAAE,MAAM,EAAE;gBACnB,CAAC;AACF,aAAA;SACF;aACA,SAAS,CAAC,CAAC,OAAO,KAAI,EAAE,CAAC,CAAC;IAC/B;IAEA,0BAA0B,GAAA;AACxB,QAAA,MAAM,oBAAoB,GAAG,OAAO,KAAa,KAAI;YACnD,OAAO;AACL,gBAAA,MAAM,EAAE;AACN,oBAAA,CAAA,sCAAA,EAAyC,kBAAkB,CAAC,KAAK,CAAC,CAAA,QAAA,CAAU;AAC7E,iBAAA;aACF;AACH,QAAA,CAAC;QAED,MAAM,gBAAgB,GAAG,OACvB,KAAa,EACb,KAAa,EACb,KAAc,KACZ;YACF,MAAM,YAAY,GAAG,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC;AACzB,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,EACtD,CAAC,CAAC,EAAE,CAAC,KACH,CAAA,2BAAA,EAA8B,kBAAkB,CAAC,KAAK,CAAC,CAAA,GAAA,EAAM,MAAM,GAAG,CAAC,CAAA,QAAA,CAAU,CACpF;AACD,YAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;AACjC,QAAA,CAAC;AAED,QAAA,IAAI,CAAC;aACF,IAAI,CAAC,2BAA2B,EAAE;AACjC,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,KAAK,EAAE,sBAAsB;AAC7B,YAAA,QAAQ,EAAE,qCAAqC;AAC/C,YAAA,IAAI,EAAE;AACJ,gBAAA,CAAC,EAAE,OAAO;AACV,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,EAAE,EAAE,QAAQ;AACZ,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,YAAY,EAAE,gBAAgB;AAC/B,qBAAA;AACD,oBAAA;AACE,wBAAA,EAAE,EAAE,YAAY;AAChB,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,YAAY,EAAE,oBAAoB;AACnC,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;aACA,SAAS,CAAC,CAAC,OAAO,KAAI,EAAE,CAAC,CAAC;IAC/B;wGAvIW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBlC,urDAoDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtCY,iBAAiB,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAGhB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,IAAA,EACnB,EAAE,oBAAoB,EAAE,EAAE,EAAE,EAAA,eAAA,EACjB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,iBAAiB,CAAC,EAAA,QAAA,EAAA,urDAAA,EAAA;;;AEXvB,MAAM,KAAK,GAAc;AAC9B,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;AAClC,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,OAAO,EAAE,0BAA0B;AACnC,IAAA,WAAW,EACT,mHAAmH;AACrH,IAAA,SAAS,EAAE,qBAAqB;AAChC,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,MAAM,EAAE;AACN,QAAA;AACE,YAAA,GAAG,EAAE,aAAa;AAClB,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,OAAO,EAAE;gBACP,SAAS;gBACT,MAAM;gBACN,OAAO;gBACP,OAAO;gBACP,aAAa;gBACb,oBAAoB;AACrB,aAAA;AACD,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA;AACE,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,WAAW,EACT,iDAAiD;AACnD,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,SAAS;AACvB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,YAAY;AAClB,YAAA,WAAW,EACT,uDAAuD;AACzD,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,MAAM;AACpB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,WAAW,EACT,mDAAmD;AACrD,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,OAAO;AACrB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,WAAW,EACT,iDAAiD;AACnD,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,OAAO;AACrB,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,WAAW,EACT,8DAA8D;AAChE,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,aAAa;AAC3B,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,sCAAsC;AAC5C,YAAA,WAAW,EACT,iFAAiF;AACnF,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,oBAAoB;AAClC,aAAA;AACF,SAAA;AACF,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,QAAQ,EAAE,EAAE;AACZ,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,KAAK,EAAE,EAAE;AACV,KAAA;;;;;"}
@@ -0,0 +1,122 @@
1
+ import { XSNavbarSidebarComponent } from './xsmusices-ui.mjs';
2
+
3
+ const menuItems = [
4
+ {
5
+ name: 'Dashboard',
6
+ icon: 'chart-pie',
7
+ action: '/dashboard',
8
+ },
9
+ {
10
+ name: 'Contenido',
11
+ icon: 'layer-group',
12
+ subItems: [
13
+ { name: 'Artistas', action: '/artists' },
14
+ { name: 'Musica', action: '/music' },
15
+ { name: 'Eventos', action: '/events' },
16
+ { name: 'Sitios', action: '/sites' },
17
+ ],
18
+ },
19
+ {
20
+ name: 'Interacciones',
21
+ icon: 'comments',
22
+ subItems: [
23
+ { name: 'Comentarios', action: '/comments' },
24
+ { name: 'Likes', action: '/likes' },
25
+ { name: 'Playlists', action: '/playlists' },
26
+ ],
27
+ },
28
+ { divider: true, name: 'divider' },
29
+ {
30
+ name: 'Sistema',
31
+ icon: 'cog',
32
+ subItems: [
33
+ { name: 'Usuarios', action: '/users' },
34
+ { name: 'Configuración', action: '/settings' },
35
+ { name: 'Toggles', action: '/toggles' },
36
+ ],
37
+ },
38
+ ];
39
+ const story = {
40
+ id: 'navbar-sidebar',
41
+ name: 'Navbar Sidebar',
42
+ type: 'component',
43
+ subtype: 'Base',
44
+ status: 'active',
45
+ usage: ['admin'],
46
+ updated: '2026-05-17T12:00:00.000Z',
47
+ created: '2026-05-17T12:00:00.000Z',
48
+ description: 'Menú lateral de navegación para el panel de administración. Colapsable en desktop y overlay en móvil. Se usa junto con xs-navbar.',
49
+ component: XSNavbarSidebarComponent,
50
+ selector: 'xs-navbar-sidebar',
51
+ inputs: [
52
+ {
53
+ key: 'items',
54
+ label: 'Items del menú',
55
+ type: 'json',
56
+ default: menuItems,
57
+ },
58
+ {
59
+ key: 'collapsed',
60
+ label: 'Colapsado (desktop)',
61
+ type: 'boolean',
62
+ default: false,
63
+ },
64
+ {
65
+ key: 'open',
66
+ label: 'Abierto (móvil)',
67
+ type: 'boolean',
68
+ default: true,
69
+ },
70
+ {
71
+ key: 'activeRoute',
72
+ label: 'Ruta activa',
73
+ type: 'text',
74
+ default: '/dashboard',
75
+ },
76
+ ],
77
+ examples: [
78
+ {
79
+ name: 'Admin: Sidebar expandido',
80
+ description: 'Sidebar expandido en desktop con todas las secciones visibles. La ruta activa es /dashboard.',
81
+ inputs: {
82
+ items: menuItems,
83
+ collapsed: false,
84
+ open: true,
85
+ activeRoute: '/dashboard',
86
+ },
87
+ },
88
+ {
89
+ name: 'Admin: Sidebar colapsado',
90
+ description: 'Sidebar colapsado en desktop, solo muestra iconos. Al hacer hover sobre un item se expande temporalmente (lo gestiona el padre).',
91
+ inputs: {
92
+ items: menuItems,
93
+ collapsed: true,
94
+ open: true,
95
+ activeRoute: '/users',
96
+ },
97
+ },
98
+ {
99
+ name: 'Admin: Sidebar en móvil',
100
+ description: 'Sidebar en móvil con overlay semitransparente detrás. Al hacer click en un item se navega y se cierra automáticamente.',
101
+ inputs: {
102
+ items: menuItems,
103
+ collapsed: false,
104
+ open: true,
105
+ activeRoute: '/artists',
106
+ },
107
+ },
108
+ {
109
+ name: 'Admin: Submenú expandido',
110
+ description: 'Sidebar con la sección "Sistema" expandida mostrando sus sub-items.',
111
+ inputs: {
112
+ items: menuItems,
113
+ collapsed: false,
114
+ open: true,
115
+ activeRoute: '/users',
116
+ },
117
+ },
118
+ ],
119
+ };
120
+
121
+ export { story };
122
+ //# sourceMappingURL=xsmusices-ui-xs-navbar-sidebar.xsstory-DHmPSARx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xsmusices-ui-xs-navbar-sidebar.xsstory-DHmPSARx.mjs","sources":["../../../projects/xs-ui/src/lib/components/base/navbar-sidebar/xs-navbar-sidebar.xsstory.ts"],"sourcesContent":["import { StoryMeta } from '../../../story.types';\nimport { XSNavbarSidebarComponent } from './xs-navbar-sidebar.component';\n\nconst menuItems = [\n {\n name: 'Dashboard',\n icon: 'chart-pie',\n action: '/dashboard',\n },\n {\n name: 'Contenido',\n icon: 'layer-group',\n subItems: [\n { name: 'Artistas', action: '/artists' },\n { name: 'Musica', action: '/music' },\n { name: 'Eventos', action: '/events' },\n { name: 'Sitios', action: '/sites' },\n ],\n },\n {\n name: 'Interacciones',\n icon: 'comments',\n subItems: [\n { name: 'Comentarios', action: '/comments' },\n { name: 'Likes', action: '/likes' },\n { name: 'Playlists', action: '/playlists' },\n ],\n },\n { divider: true, name: 'divider' },\n {\n name: 'Sistema',\n icon: 'cog',\n subItems: [\n { name: 'Usuarios', action: '/users' },\n { name: 'Configuración', action: '/settings' },\n { name: 'Toggles', action: '/toggles' },\n ],\n },\n];\n\nexport const story: StoryMeta = {\n id: 'navbar-sidebar',\n name: 'Navbar Sidebar',\n type: 'component',\n subtype: 'Base',\n status: 'active',\n usage: ['admin'],\n updated: '2026-05-17T12:00:00.000Z',\n created: '2026-05-17T12:00:00.000Z',\n description:\n 'Menú lateral de navegación para el panel de administración. Colapsable en desktop y overlay en móvil. Se usa junto con xs-navbar.',\n component: XSNavbarSidebarComponent,\n selector: 'xs-navbar-sidebar',\n inputs: [\n {\n key: 'items',\n label: 'Items del menú',\n type: 'json',\n default: menuItems,\n },\n {\n key: 'collapsed',\n label: 'Colapsado (desktop)',\n type: 'boolean',\n default: false,\n },\n {\n key: 'open',\n label: 'Abierto (móvil)',\n type: 'boolean',\n default: true,\n },\n {\n key: 'activeRoute',\n label: 'Ruta activa',\n type: 'text',\n default: '/dashboard',\n },\n ],\n examples: [\n {\n name: 'Admin: Sidebar expandido',\n description:\n 'Sidebar expandido en desktop con todas las secciones visibles. La ruta activa es /dashboard.',\n inputs: {\n items: menuItems,\n collapsed: false,\n open: true,\n activeRoute: '/dashboard',\n },\n },\n {\n name: 'Admin: Sidebar colapsado',\n description:\n 'Sidebar colapsado en desktop, solo muestra iconos. Al hacer hover sobre un item se expande temporalmente (lo gestiona el padre).',\n inputs: {\n items: menuItems,\n collapsed: true,\n open: true,\n activeRoute: '/users',\n },\n },\n {\n name: 'Admin: Sidebar en móvil',\n description:\n 'Sidebar en móvil con overlay semitransparente detrás. Al hacer click en un item se navega y se cierra automáticamente.',\n inputs: {\n items: menuItems,\n collapsed: false,\n open: true,\n activeRoute: '/artists',\n },\n },\n {\n name: 'Admin: Submenú expandido',\n description:\n 'Sidebar con la sección \"Sistema\" expandida mostrando sus sub-items.',\n inputs: {\n items: menuItems,\n collapsed: false,\n open: true,\n activeRoute: '/users',\n },\n },\n ],\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ import { XSNavbarComponent } from './xsmusices-ui.mjs';
2
+
3
+ const story = {
4
+ id: 'navbar',
5
+ name: 'Navbar',
6
+ type: 'component',
7
+ subtype: 'Base',
8
+ status: 'active',
9
+ usage: ['app', 'admin'],
10
+ updated: '2026-05-17T12:00:00.000Z',
11
+ created: '2026-04-25T12:00:00.000Z',
12
+ description: 'Barra de navegación superior reutilizable. Usada tanto en App (top bar con título + acciones) como en Admin (top bar + sidebar toggle).',
13
+ component: XSNavbarComponent,
14
+ selector: 'xs-navbar',
15
+ inputs: [
16
+ { key: 'title', label: 'Título', type: 'text', default: '' },
17
+ {
18
+ key: 'subtitle',
19
+ label: 'Subtítulo',
20
+ type: 'text',
21
+ default: '',
22
+ },
23
+ {
24
+ key: 'showBorder',
25
+ label: 'Mostrar borde inferior',
26
+ type: 'boolean',
27
+ default: false,
28
+ },
29
+ {
30
+ key: 'transparent',
31
+ label: 'Fondo transparente',
32
+ type: 'boolean',
33
+ default: false,
34
+ },
35
+ {
36
+ key: 'sticky',
37
+ label: 'Encabezado sticky',
38
+ type: 'boolean',
39
+ default: true,
40
+ },
41
+ {
42
+ key: 'showBack',
43
+ label: 'Mostrar botón retroceso',
44
+ type: 'boolean',
45
+ default: true,
46
+ },
47
+ {
48
+ key: 'showMenu',
49
+ label: 'Mostrar botón menú lateral',
50
+ type: 'boolean',
51
+ default: false,
52
+ },
53
+ {
54
+ key: 'menuIcon',
55
+ label: 'Icono del botón menú',
56
+ type: 'text',
57
+ default: 'bars',
58
+ },
59
+ {
60
+ key: 'showLanguage',
61
+ label: 'Mostrar selector de idioma',
62
+ type: 'boolean',
63
+ default: true,
64
+ },
65
+ {
66
+ key: 'showNotifications',
67
+ label: 'Mostrar campanita notificaciones',
68
+ type: 'boolean',
69
+ default: false,
70
+ },
71
+ {
72
+ key: 'hideEnvBadge',
73
+ label: 'Ocultar badge de entorno (dev/uat)',
74
+ type: 'boolean',
75
+ default: false,
76
+ },
77
+ {
78
+ key: 'currentLang',
79
+ label: 'Idioma actual',
80
+ type: 'select',
81
+ options: ['es', 'en'],
82
+ default: 'es',
83
+ },
84
+ ],
85
+ slots: [
86
+ {
87
+ name: 'actions',
88
+ description: 'Contenido proyectado en el lado derecho (botones, avatar, notificaciones)',
89
+ },
90
+ {
91
+ name: 'leading',
92
+ description: 'Contenido contextual junto al botón de retroceso, solo visible en móvil (XS-770: miniatura de perfil en navbars contextuales)',
93
+ },
94
+ {
95
+ name: 'bottom',
96
+ description: 'Contenido proyectado debajo de la barra principal (tabs, buscador)',
97
+ },
98
+ ],
99
+ examples: [
100
+ {
101
+ name: 'App: Pantalla de inicio',
102
+ description: 'Navbar usada en la app principal. Título "XSMusic", subtítulo, botón de retroceso, selector de idioma y campanita de notificaciones.',
103
+ inputs: {
104
+ title: 'XSMusic',
105
+ subtitle: 'Descubre',
106
+ showBack: true,
107
+ showLanguage: true,
108
+ showNotifications: true,
109
+ currentLang: 'es',
110
+ },
111
+ },
112
+ {
113
+ name: 'App: Pantalla con tabs',
114
+ description: 'Navbar en la app con contenido adicional en el slot bottom (tabs de navegación).',
115
+ inputs: {
116
+ title: 'XSMusic',
117
+ subtitle: 'Artistas',
118
+ showBack: true,
119
+ showLanguage: true,
120
+ showNotifications: true,
121
+ currentLang: 'en',
122
+ },
123
+ template: `<xs-navbar title="XSMusic" subtitle="Artistas" [showBack]="true" [showLanguage]="true" [showNotifications]="true" currentLang="en">
124
+ <div bottom>
125
+ <div class="flex gap-4 text-sm text-zinc-400">
126
+ <span class="text-white font-semibold">Todos</span>
127
+ <span>Populares</span>
128
+ <span>Nuevos</span>
129
+ </div>
130
+ </div>
131
+ </xs-navbar>`,
132
+ },
133
+ {
134
+ name: 'Admin: Dashboard',
135
+ description: 'Navbar usada en el panel de administración. Sin retroceso, con botón de menú lateral (hamburguesa) para abrir el sidebar. Las acciones (búsqueda, perfil) van en el slot actions.',
136
+ inputs: {
137
+ title: 'XSADMIN',
138
+ showBack: false,
139
+ showMenu: true,
140
+ menuIcon: 'bars',
141
+ showLanguage: false,
142
+ showNotifications: false,
143
+ },
144
+ },
145
+ {
146
+ name: 'Admin: Menú colapsado',
147
+ description: 'Navbar en admin con el sidebar colapsado. El icono del menú cambia a "chevron-right" para indicar que se puede expandir.',
148
+ inputs: {
149
+ title: 'XSADMIN',
150
+ showBack: false,
151
+ showMenu: true,
152
+ menuIcon: 'chevron-right',
153
+ showLanguage: false,
154
+ showNotifications: false,
155
+ },
156
+ },
157
+ {
158
+ name: 'Admin: Detalle con retroceso',
159
+ description: 'Navbar en admin cuando se navega a una página de detalle. El botón de menú se reemplaza por el de retroceso.',
160
+ inputs: {
161
+ title: 'XSADMIN',
162
+ subtitle: 'Editar Usuario',
163
+ showBack: true,
164
+ showMenu: false,
165
+ showLanguage: false,
166
+ showNotifications: false,
167
+ },
168
+ },
169
+ {
170
+ name: 'Transparente sin sticky',
171
+ description: 'Navbar con fondo transparente y sin sticky, ideal para landing pages o perfiles.',
172
+ inputs: {
173
+ title: 'XSMusic',
174
+ subtitle: 'Perfil',
175
+ showBack: true,
176
+ transparent: true,
177
+ sticky: false,
178
+ showLanguage: true,
179
+ currentLang: 'es',
180
+ },
181
+ },
182
+ {
183
+ name: 'App: Navbar contextual de perfil (móvil)',
184
+ description: 'XS-770: navbar compacta de perfil en móvil. El slot leading lleva la miniatura (32px) y mobileTitle/mobileSubtitle el nombre y el país. En desktop se muestra el título normal.',
185
+ inputs: {
186
+ title: 'XSMusic',
187
+ mobileTitle: 'Nombre del artista',
188
+ mobileSubtitle: 'España',
189
+ showBack: true,
190
+ showLanguage: true,
191
+ currentLang: 'es',
192
+ },
193
+ template: `<xs-navbar title="XSMusic" mobileTitle="Nombre del artista" mobileSubtitle="España" [showBack]="true" [showLanguage]="true" currentLang="es">
194
+ <div leading>
195
+ <img src="https://api-v2.xsmusic.es/uploads/artist/small/artist.webp" alt="Nombre del artista" class="w-8 h-8 rounded-xl object-cover" />
196
+ </div>
197
+ </xs-navbar>`,
198
+ },
199
+ ],
200
+ };
201
+
202
+ export { story };
203
+ //# sourceMappingURL=xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xsmusices-ui-xs-navbar.xsstory-DZrnLMId.mjs","sources":["../../../projects/xs-ui/src/lib/components/base/navbar/xs-navbar.xsstory.ts"],"sourcesContent":["import { StoryMeta } from '../../../story.types';\nimport { XSNavbarComponent } from './xs-navbar.component';\n\nexport const story: StoryMeta = {\n id: 'navbar',\n name: 'Navbar',\n type: 'component',\n subtype: 'Base',\n status: 'active',\n usage: ['app', 'admin'],\n updated: '2026-05-17T12:00:00.000Z',\n created: '2026-04-25T12:00:00.000Z',\n description:\n 'Barra de navegación superior reutilizable. Usada tanto en App (top bar con título + acciones) como en Admin (top bar + sidebar toggle).',\n component: XSNavbarComponent,\n selector: 'xs-navbar',\n inputs: [\n { key: 'title', label: 'Título', type: 'text', default: '' },\n {\n key: 'subtitle',\n label: 'Subtítulo',\n type: 'text',\n default: '',\n },\n {\n key: 'showBorder',\n label: 'Mostrar borde inferior',\n type: 'boolean',\n default: false,\n },\n {\n key: 'transparent',\n label: 'Fondo transparente',\n type: 'boolean',\n default: false,\n },\n {\n key: 'sticky',\n label: 'Encabezado sticky',\n type: 'boolean',\n default: true,\n },\n {\n key: 'showBack',\n label: 'Mostrar botón retroceso',\n type: 'boolean',\n default: true,\n },\n {\n key: 'showMenu',\n label: 'Mostrar botón menú lateral',\n type: 'boolean',\n default: false,\n },\n {\n key: 'menuIcon',\n label: 'Icono del botón menú',\n type: 'text',\n default: 'bars',\n },\n {\n key: 'showLanguage',\n label: 'Mostrar selector de idioma',\n type: 'boolean',\n default: true,\n },\n {\n key: 'showNotifications',\n label: 'Mostrar campanita notificaciones',\n type: 'boolean',\n default: false,\n },\n {\n key: 'hideEnvBadge',\n label: 'Ocultar badge de entorno (dev/uat)',\n type: 'boolean',\n default: false,\n },\n {\n key: 'currentLang',\n label: 'Idioma actual',\n type: 'select',\n options: ['es', 'en'],\n default: 'es',\n },\n ],\n slots: [\n {\n name: 'actions',\n description:\n 'Contenido proyectado en el lado derecho (botones, avatar, notificaciones)',\n },\n {\n name: 'leading',\n description:\n 'Contenido contextual junto al botón de retroceso, solo visible en móvil (XS-770: miniatura de perfil en navbars contextuales)',\n },\n {\n name: 'bottom',\n description:\n 'Contenido proyectado debajo de la barra principal (tabs, buscador)',\n },\n ],\n examples: [\n {\n name: 'App: Pantalla de inicio',\n description:\n 'Navbar usada en la app principal. Título \"XSMusic\", subtítulo, botón de retroceso, selector de idioma y campanita de notificaciones.',\n inputs: {\n title: 'XSMusic',\n subtitle: 'Descubre',\n showBack: true,\n showLanguage: true,\n showNotifications: true,\n currentLang: 'es',\n },\n },\n {\n name: 'App: Pantalla con tabs',\n description:\n 'Navbar en la app con contenido adicional en el slot bottom (tabs de navegación).',\n inputs: {\n title: 'XSMusic',\n subtitle: 'Artistas',\n showBack: true,\n showLanguage: true,\n showNotifications: true,\n currentLang: 'en',\n },\n template: `<xs-navbar title=\"XSMusic\" subtitle=\"Artistas\" [showBack]=\"true\" [showLanguage]=\"true\" [showNotifications]=\"true\" currentLang=\"en\">\n <div bottom>\n <div class=\"flex gap-4 text-sm text-zinc-400\">\n <span class=\"text-white font-semibold\">Todos</span>\n <span>Populares</span>\n <span>Nuevos</span>\n </div>\n </div>\n</xs-navbar>`,\n },\n {\n name: 'Admin: Dashboard',\n description:\n 'Navbar usada en el panel de administración. Sin retroceso, con botón de menú lateral (hamburguesa) para abrir el sidebar. Las acciones (búsqueda, perfil) van en el slot actions.',\n inputs: {\n title: 'XSADMIN',\n showBack: false,\n showMenu: true,\n menuIcon: 'bars',\n showLanguage: false,\n showNotifications: false,\n },\n },\n {\n name: 'Admin: Menú colapsado',\n description:\n 'Navbar en admin con el sidebar colapsado. El icono del menú cambia a \"chevron-right\" para indicar que se puede expandir.',\n inputs: {\n title: 'XSADMIN',\n showBack: false,\n showMenu: true,\n menuIcon: 'chevron-right',\n showLanguage: false,\n showNotifications: false,\n },\n },\n {\n name: 'Admin: Detalle con retroceso',\n description:\n 'Navbar en admin cuando se navega a una página de detalle. El botón de menú se reemplaza por el de retroceso.',\n inputs: {\n title: 'XSADMIN',\n subtitle: 'Editar Usuario',\n showBack: true,\n showMenu: false,\n showLanguage: false,\n showNotifications: false,\n },\n },\n {\n name: 'Transparente sin sticky',\n description:\n 'Navbar con fondo transparente y sin sticky, ideal para landing pages o perfiles.',\n inputs: {\n title: 'XSMusic',\n subtitle: 'Perfil',\n showBack: true,\n transparent: true,\n sticky: false,\n showLanguage: true,\n currentLang: 'es',\n },\n },\n {\n name: 'App: Navbar contextual de perfil (móvil)',\n description:\n 'XS-770: navbar compacta de perfil en móvil. El slot leading lleva la miniatura (32px) y mobileTitle/mobileSubtitle el nombre y el país. En desktop se muestra el título normal.',\n inputs: {\n title: 'XSMusic',\n mobileTitle: 'Nombre del artista',\n mobileSubtitle: 'España',\n showBack: true,\n showLanguage: true,\n currentLang: 'es',\n },\n template: `<xs-navbar title=\"XSMusic\" mobileTitle=\"Nombre del artista\" mobileSubtitle=\"España\" [showBack]=\"true\" [showLanguage]=\"true\" currentLang=\"es\">\n <div leading>\n <img src=\"https://api-v2.xsmusic.es/uploads/artist/small/artist.webp\" alt=\"Nombre del artista\" class=\"w-8 h-8 rounded-xl object-cover\" />\n </div>\n</xs-navbar>`,\n },\n ],\n};\n"],"names":[],"mappings":"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"}