@ship-ui/core 0.19.5 → 0.22.2

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 (153) hide show
  1. package/README.md +3 -0
  2. package/assets/mcp/components.json +66 -4243
  3. package/bin/mcp/index.js +6027 -273
  4. package/bin/ship-fg-scanner +0 -0
  5. package/bin/ship-fg.mjs +14 -12
  6. package/bin/src/subset.ts +3 -1
  7. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +42 -0
  8. package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -0
  9. package/fesm2022/ship-ui-core-ship-accordion.mjs +127 -0
  10. package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -0
  11. package/fesm2022/ship-ui-core-ship-alert.mjs +305 -0
  12. package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -0
  13. package/fesm2022/ship-ui-core-ship-blueprint.mjs +1156 -0
  14. package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -0
  15. package/fesm2022/ship-ui-core-ship-button-group.mjs +41 -0
  16. package/fesm2022/ship-ui-core-ship-button-group.mjs.map +1 -0
  17. package/fesm2022/ship-ui-core-ship-button.mjs +38 -0
  18. package/fesm2022/ship-ui-core-ship-button.mjs.map +1 -0
  19. package/fesm2022/ship-ui-core-ship-card.mjs +35 -0
  20. package/fesm2022/ship-ui-core-ship-card.mjs.map +1 -0
  21. package/fesm2022/ship-ui-core-ship-checkbox.mjs +113 -0
  22. package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -0
  23. package/fesm2022/ship-ui-core-ship-chip.mjs +44 -0
  24. package/fesm2022/ship-ui-core-ship-chip.mjs.map +1 -0
  25. package/fesm2022/ship-ui-core-ship-color-picker.mjs +947 -0
  26. package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -0
  27. package/fesm2022/ship-ui-core-ship-datepicker.mjs +951 -0
  28. package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -0
  29. package/fesm2022/ship-ui-core-ship-dialog.mjs +263 -0
  30. package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -0
  31. package/fesm2022/ship-ui-core-ship-divider.mjs +22 -0
  32. package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -0
  33. package/fesm2022/ship-ui-core-ship-event-card.mjs +50 -0
  34. package/fesm2022/ship-ui-core-ship-event-card.mjs.map +1 -0
  35. package/fesm2022/ship-ui-core-ship-file-upload.mjs +112 -0
  36. package/fesm2022/ship-ui-core-ship-file-upload.mjs.map +1 -0
  37. package/fesm2022/ship-ui-core-ship-form-field.mjs +310 -0
  38. package/fesm2022/ship-ui-core-ship-form-field.mjs.map +1 -0
  39. package/fesm2022/ship-ui-core-ship-icon.mjs +81 -0
  40. package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -0
  41. package/fesm2022/ship-ui-core-ship-list.mjs +22 -0
  42. package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -0
  43. package/fesm2022/ship-ui-core-ship-menu.mjs +545 -0
  44. package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -0
  45. package/fesm2022/ship-ui-core-ship-popover.mjs +286 -0
  46. package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -0
  47. package/fesm2022/ship-ui-core-ship-progress-bar.mjs +37 -0
  48. package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -0
  49. package/fesm2022/ship-ui-core-ship-radio.mjs +102 -0
  50. package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -0
  51. package/fesm2022/ship-ui-core-ship-range-slider.mjs +277 -0
  52. package/fesm2022/ship-ui-core-ship-range-slider.mjs.map +1 -0
  53. package/fesm2022/ship-ui-core-ship-select.mjs +971 -0
  54. package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -0
  55. package/fesm2022/ship-ui-core-ship-sidenav.mjs +248 -0
  56. package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -0
  57. package/fesm2022/ship-ui-core-ship-sortable.mjs +485 -0
  58. package/fesm2022/ship-ui-core-ship-sortable.mjs.map +1 -0
  59. package/fesm2022/ship-ui-core-ship-spinner.mjs +28 -0
  60. package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -0
  61. package/fesm2022/ship-ui-core-ship-stepper.mjs +76 -0
  62. package/fesm2022/ship-ui-core-ship-stepper.mjs.map +1 -0
  63. package/fesm2022/ship-ui-core-ship-table-filter-bar.mjs +28 -0
  64. package/fesm2022/ship-ui-core-ship-table-filter-bar.mjs.map +1 -0
  65. package/fesm2022/ship-ui-core-ship-table.mjs +442 -0
  66. package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -0
  67. package/fesm2022/ship-ui-core-ship-tabs.mjs +38 -0
  68. package/fesm2022/ship-ui-core-ship-tabs.mjs.map +1 -0
  69. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +119 -0
  70. package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -0
  71. package/fesm2022/ship-ui-core-ship-toggle-card.mjs +75 -0
  72. package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -0
  73. package/fesm2022/ship-ui-core-ship-toggle.mjs +105 -0
  74. package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -0
  75. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +186 -0
  76. package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -0
  77. package/fesm2022/ship-ui-core.mjs +880 -8782
  78. package/fesm2022/ship-ui-core.mjs.map +1 -1
  79. package/package.json +147 -3
  80. package/styles/core.scss +43 -0
  81. package/styles/helpers.scss +2 -0
  82. package/styles/index.scss +12 -123
  83. package/types/ship-ui-core-sh-form-field-experimental.d.ts +11 -0
  84. package/types/ship-ui-core-ship-accordion.d.ts +19 -0
  85. package/types/ship-ui-core-ship-alert.d.ts +68 -0
  86. package/types/ship-ui-core-ship-blueprint.d.ts +112 -0
  87. package/types/ship-ui-core-ship-button-group.d.ts +15 -0
  88. package/types/ship-ui-core-ship-button.d.ts +13 -0
  89. package/types/ship-ui-core-ship-card.d.ts +11 -0
  90. package/types/ship-ui-core-ship-checkbox.d.ts +22 -0
  91. package/types/ship-ui-core-ship-chip.d.ts +15 -0
  92. package/types/ship-ui-core-ship-color-picker.d.ts +105 -0
  93. package/types/ship-ui-core-ship-datepicker.d.ts +96 -0
  94. package/types/ship-ui-core-ship-dialog.d.ts +76 -0
  95. package/types/ship-ui-core-ship-divider.d.ts +8 -0
  96. package/types/ship-ui-core-ship-event-card.d.ts +11 -0
  97. package/types/ship-ui-core-ship-file-upload.d.ts +20 -0
  98. package/types/ship-ui-core-ship-form-field.d.ts +32 -0
  99. package/types/ship-ui-core-ship-icon.d.ts +18 -0
  100. package/types/ship-ui-core-ship-list.d.ts +8 -0
  101. package/types/ship-ui-core-ship-menu.d.ts +49 -0
  102. package/types/ship-ui-core-ship-popover.d.ts +40 -0
  103. package/types/ship-ui-core-ship-progress-bar.d.ts +14 -0
  104. package/types/ship-ui-core-ship-radio.d.ts +22 -0
  105. package/types/ship-ui-core-ship-range-slider.d.ts +31 -0
  106. package/types/ship-ui-core-ship-select.d.ts +81 -0
  107. package/types/ship-ui-core-ship-sidenav.d.ts +36 -0
  108. package/types/ship-ui-core-ship-sortable.d.ts +72 -0
  109. package/types/ship-ui-core-ship-spinner.d.ts +10 -0
  110. package/types/ship-ui-core-ship-stepper.d.ts +13 -0
  111. package/types/ship-ui-core-ship-table-filter-bar.d.ts +8 -0
  112. package/types/ship-ui-core-ship-table.d.ts +69 -0
  113. package/types/ship-ui-core-ship-tabs.d.ts +14 -0
  114. package/types/ship-ui-core-ship-theme-toggle.d.ts +28 -0
  115. package/types/ship-ui-core-ship-toggle-card.d.ts +15 -0
  116. package/types/ship-ui-core-ship-toggle.d.ts +21 -0
  117. package/types/ship-ui-core-ship-virtual-scroll.d.ts +22 -0
  118. package/types/ship-ui-core.d.ts +88 -1070
  119. package/styles/components/ship-accordion.scss +0 -113
  120. package/styles/components/ship-alert-container.scss +0 -49
  121. package/styles/components/ship-alert.scss +0 -177
  122. package/styles/components/ship-blueprint.scss +0 -242
  123. package/styles/components/ship-button-group.scss +0 -165
  124. package/styles/components/ship-button.scss +0 -141
  125. package/styles/components/ship-card.scss +0 -57
  126. package/styles/components/ship-checkbox.scss +0 -116
  127. package/styles/components/ship-chip.scss +0 -104
  128. package/styles/components/ship-color-picker.scss +0 -150
  129. package/styles/components/ship-datepicker.scss +0 -317
  130. package/styles/components/ship-dialog.scss +0 -152
  131. package/styles/components/ship-divider.scss +0 -27
  132. package/styles/components/ship-event-card.scss +0 -51
  133. package/styles/components/ship-file-upload.scss +0 -47
  134. package/styles/components/ship-form-field.scss +0 -408
  135. package/styles/components/ship-icon.scss +0 -54
  136. package/styles/components/ship-list.scss +0 -165
  137. package/styles/components/ship-menu.scss +0 -237
  138. package/styles/components/ship-popover.scss +0 -205
  139. package/styles/components/ship-progress-bar.scss +0 -173
  140. package/styles/components/ship-radio.scss +0 -113
  141. package/styles/components/ship-range-slider.scss +0 -421
  142. package/styles/components/ship-select.scss +0 -153
  143. package/styles/components/ship-sidenav.scss +0 -195
  144. package/styles/components/ship-sortable.scss +0 -45
  145. package/styles/components/ship-spinner.scss +0 -53
  146. package/styles/components/ship-stepper.scss +0 -158
  147. package/styles/components/ship-table.scss +0 -443
  148. package/styles/components/ship-tabs.scss +0 -125
  149. package/styles/components/ship-theme-toggle.scss +0 -41
  150. package/styles/components/ship-toggle-card.scss +0 -69
  151. package/styles/components/ship-toggle.scss +0 -255
  152. package/styles/components/ship-tooltip.scss +0 -151
  153. package/styles/components/ship-virtual-scroll.scss +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-datepicker.mjs","sources":["../../../projects/ship-ui/ship-datepicker/ship-datepicker.ts","../../../projects/ship-ui/ship-datepicker/ship-datepicker-input.ts","../../../projects/ship-ui/ship-datepicker/ship-daterange-input.ts","../../../projects/ship-ui/ship-datepicker/ship-ui-core-ship-datepicker.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, output, signal, viewChild, inject, ViewEncapsulation } from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { HostListener } from '@angular/core';\n\n@Component({\n selector: 'sh-datepicker',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon],\n template: `\n <header>\n <button tabindex=\"-1\" (click)=\"previousMonth()\"><sh-icon>caret-left</sh-icon></button>\n <div class=\"title\">\n {{ getMonthName(currentDate()!) }}\n @if (monthsToShow() > 1) {\n - {{ getMonthName(getLastVisibleMonth()) }}\n }\n {{ getFullYear(currentDate()!) }}\n </div>\n <button tabindex=\"-1\" (click)=\"nextMonth()\"><sh-icon>caret-right</sh-icon></button>\n </header>\n\n <section class=\"months-container\">\n @for (monthOffset of monthOffsets(); track monthOffset) {\n <div class=\"month\">\n <nav class=\"weekdays\">\n @for (day of weekdays(); track $index) {\n <div>{{ day }}</div>\n }\n </nav>\n\n <div class=\"days\" #daysRef>\n @for (calDate of getMonthDates(monthOffset); track $index) {\n <button\n type=\"button\"\n #elementRef\n [class.out-of-scope]=\"!isCurrentMonth(calDate, monthOffset)\"\n [class]=\"isDateSelected(calDate)\"\n [attr.aria-label]=\"getAriaLabel(calDate)\"\n [attr.tabindex]=\"getTabIndex(calDate)\"\n [attr.aria-selected]=\"isDateSelectedBool(calDate)\"\n (keydown)=\"onKeydown($event, calDate)\"\n (click)=\"setDate(calDate, elementRef)\">\n {{ calDate.getDate() }}\n </button>\n }\n\n @if (!asRange()) {\n <article class=\"days\">\n <div class=\"sel-el\" [style]=\"selectedDateStylePosition()\"></div>\n </article>\n }\n </div>\n </div>\n }\n </section>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.as-range]': 'asRange()',\n '[class]': '\"columns-\" + monthsToShow()',\n '[class.disabled]': 'disabled()',\n },\n})\nexport class ShipDatepicker {\n #INIT_DATE = new Date(new Date().setHours(0, 0, 0, 0));\n\n date = model<Date | null>(null);\n endDate = model<Date | null>(null);\n asRange = input<boolean>(false);\n activeRangeSelection = input<'start' | 'end' | null>(null);\n monthsToShow = input<number>(1);\n disabled = input<boolean>(false);\n tabbedOut = output<void>();\n\n startOfWeek = input<number>(1);\n weekdayLabels = input<string[]>(['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']);\n\n daysRef = viewChild<ElementRef<HTMLDivElement>>('daysRef');\n currentDate = signal<Date>(this.date() ?? this.#INIT_DATE);\n\n monthOffsets = computed(() => {\n return Array.from({ length: this.monthsToShow() }, (_, i) => i);\n });\n\n selectedDateStylePosition = signal<{ transform: string; opacity: string } | null>(null);\n\n weekdays = computed(() => {\n const startOfWeek = this.startOfWeek();\n const weekdayLabels = this.weekdayLabels();\n\n return weekdayLabels.slice(startOfWeek).concat(weekdayLabels.slice(0, startOfWeek));\n });\n\n currentClasses = classMutationSignal();\n someEffect = effect(() => {\n const _ = this.currentClasses();\n\n this.#findSelectedAndCalc();\n });\n\n getLastVisibleMonth(): Date {\n const lastMonthOffset = this.monthsToShow() - 1;\n return this.getOffsetDate(lastMonthOffset);\n }\n\n getOffsetDate(monthOffset: number): Date {\n const date = new Date(this.currentDate());\n date.setMonth(date.getMonth() + monthOffset);\n return date;\n }\n\n getMonthDates(monthOffset: number): Date[] {\n const offsetDate = this.getOffsetDate(monthOffset);\n return this.#generateMonthDates(offsetDate, this.startOfWeek());\n }\n\n #newDateEffect = effect(() => {\n if (this.monthsToShow() > 1) return;\n\n this.#setDateAsCurrent();\n });\n\n ngOnInit() {\n if (this.monthsToShow() === 1) return;\n\n this.#setDateAsCurrent();\n }\n\n #setDateAsCurrent() {\n const newDate = this.date();\n if (newDate && !isNaN(newDate.getTime())) {\n this.currentDate.set(newDate);\n }\n this.#findSelectedAndCalc();\n }\n\n #findSelectedAndCalc() {\n setTimeout(() => {\n const selectedElement = this.daysRef()?.nativeElement.querySelector('.sel');\n\n if (!selectedElement) {\n return this.selectedDateStylePosition.update((x) => (x ? { ...x, opacity: '0' } : null));\n }\n\n this.setSelectedDateStylePosition(selectedElement as HTMLElement);\n });\n }\n\n #generateMonthDates(date: Date, startOfWeek: number): Date[] {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1).getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const dates: Date[] = [];\n\n let offset = firstDay - startOfWeek;\n if (offset < 0) {\n offset += 7;\n }\n\n const lastDayOfPrevMonth = new Date(year, month, 0).getDate();\n\n for (let i = offset - 1; i >= 0; i--) {\n dates.push(new Date(year, month - 1, lastDayOfPrevMonth - i, 0, 0, 0, 0));\n }\n\n for (let i = 1; i <= daysInMonth; i++) {\n dates.push(new Date(year, month, i, 0, 0, 0, 0));\n }\n\n let nextMonthDay = 1;\n while (dates.length % 7 !== 0) {\n dates.push(new Date(year, month + 1, nextMonthDay++, 0, 0, 0, 0));\n }\n\n return dates;\n }\n\n nextMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() + 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n previousMonth() {\n this.currentDate.update((currentDate) => {\n const newDate = new Date(currentDate);\n newDate.setMonth(currentDate.getMonth() - 1);\n return newDate;\n });\n\n this.#findSelectedAndCalc();\n }\n\n setDate(newDate: Date, selectedElement: HTMLElement) {\n this.focusedDate.set(newDate);\n\n const createDateWithExistingTime = (newDate: Date, existingDate: any | null) => {\n let hours = 0, minutes = 0, seconds = 0, milliseconds = 0;\n \n if (existingDate) {\n if (typeof existingDate === 'string' || typeof existingDate === 'number') {\n existingDate = new Date(existingDate);\n }\n if (existingDate instanceof Date && !isNaN(existingDate.getTime())) {\n hours = existingDate.getHours();\n minutes = existingDate.getMinutes();\n seconds = existingDate.getSeconds();\n milliseconds = existingDate.getMilliseconds();\n }\n }\n\n return new Date(\n newDate.getFullYear(),\n newDate.getMonth(),\n newDate.getDate(),\n hours,\n minutes,\n seconds,\n milliseconds\n );\n };\n\n if (!this.asRange()) {\n this.date.set(createDateWithExistingTime(newDate, this.date()));\n this.endDate.set(null);\n } else {\n const startDate = this.date();\n const endDate = this.endDate();\n const selectionMode = this.activeRangeSelection();\n\n if (selectionMode === 'start') {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n if (endDate && utcDate > endDate) {\n this.endDate.set(null);\n }\n } else if (selectionMode === 'end') {\n if (!startDate || newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n if (!startDate) {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n } else if (!endDate) {\n if (newDate < startDate) {\n const newStart = createDateWithExistingTime(newDate, startDate);\n this.date.set(newStart);\n this.endDate.set(null);\n } else {\n const utcDate = createDateWithExistingTime(newDate, endDate);\n this.endDate.set(utcDate);\n }\n } else {\n const utcDate = createDateWithExistingTime(newDate, startDate);\n this.date.set(utcDate);\n this.endDate.set(null);\n }\n }\n }\n\n if (this.asRange()) return;\n\n this.setSelectedDateStylePosition(selectedElement);\n }\n\n isDateSelected(date: Date): string | null {\n let startDate: any = this.date();\n let endDate: any = this.endDate();\n\n if (typeof startDate === 'string' || typeof startDate === 'number') startDate = new Date(startDate);\n if (typeof endDate === 'string' || typeof endDate === 'number') endDate = new Date(endDate);\n\n if (!startDate || !(startDate instanceof Date) || isNaN(startDate.getTime())) return null;\n\n const startOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0, 0);\n };\n\n const endOfDay = (date: Date) => {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n };\n\n const currentDate = startOfDay(date);\n const rangeStart = startOfDay(startDate);\n const rangeEnd = endDate ? endOfDay(endDate) : null;\n\n let classes = [];\n\n if (this.asRange()) {\n if (rangeEnd === null) {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel first last');\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('first');\n }\n\n if (currentDate.getTime() === startOfDay(rangeEnd).getTime()) {\n classes.push('last');\n }\n\n if (currentDate >= rangeStart && currentDate <= rangeEnd) {\n classes.push('sel');\n\n const dayOfWeek = currentDate.getDay();\n const startOfWeek = this.startOfWeek();\n\n if (dayOfWeek === startOfWeek) {\n classes.push('week-start');\n }\n\n const endOfWeek = (startOfWeek + 6) % 7;\n if (dayOfWeek === endOfWeek) {\n classes.push('week-end');\n }\n }\n\n const nextDate = new Date(currentDate);\n nextDate.setDate(currentDate.getDate() + 1);\n const prevDate = new Date(currentDate);\n prevDate.setDate(currentDate.getDate() - 1);\n\n const isFirstOfMonth = currentDate.getDate() === 1;\n const isLastOfMonth = nextDate.getMonth() !== currentDate.getMonth();\n\n if (isFirstOfMonth) {\n classes.push('month-start');\n }\n\n if (isLastOfMonth) {\n classes.push('month-end');\n }\n }\n } else {\n if (currentDate.getTime() === rangeStart.getTime()) {\n classes.push('sel');\n }\n }\n\n return classes.join(' ') || null;\n }\n\n setSelectedDateStylePosition(selectedElement: HTMLElement) {\n this.selectedDateStylePosition.set({\n transform: `translate(${selectedElement.offsetLeft}px, ${selectedElement.offsetTop}px)`,\n opacity: '1',\n });\n }\n\n getMonthName(date: Date): string {\n return date.toLocaleString('default', { month: 'long' });\n }\n\n getFullYear(date: Date): number {\n return date.getFullYear();\n }\n\n // Rest of the component methods remain the same, but update isCurrentMonth:\n isCurrentMonth(date: Date, monthOffset: number): boolean {\n const offsetDate = this.getOffsetDate(monthOffset);\n return date.getMonth() === offsetDate.getMonth();\n }\n\n focusedDate = signal<Date | null>(null);\n #selfRef = inject(ElementRef);\n\n isSameDay(d1: Date | null | undefined, d2: Date | null | undefined): boolean {\n if (!d1 || !d2) return false;\n return d1.getFullYear() === d2.getFullYear() &&\n d1.getMonth() === d2.getMonth() &&\n d1.getDate() === d2.getDate();\n }\n\n getAriaLabel(date: Date): string {\n return date.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });\n }\n\n getTabIndex(date: Date): number {\n const focused = this.focusedDate();\n const selected = this.date();\n const today = new Date();\n\n if (focused) {\n return this.isSameDay(date, focused) ? 0 : -1;\n }\n if (selected) {\n return this.isSameDay(date, selected) ? 0 : -1;\n }\n return this.isSameDay(date, today) ? 0 : -1;\n }\n\n isDateSelectedBool(date: Date): boolean {\n const classes = this.isDateSelected(date);\n return classes ? classes.includes('sel') : false;\n }\n\n onKeydown(event: KeyboardEvent, date: Date) {\n let newDate = new Date(date);\n let handled = false;\n\n switch (event.key) {\n case 'ArrowRight':\n newDate.setDate(date.getDate() + 1);\n handled = true;\n break;\n case 'ArrowLeft':\n newDate.setDate(date.getDate() - 1);\n handled = true;\n break;\n case 'ArrowDown':\n newDate.setDate(date.getDate() + 7);\n handled = true;\n break;\n case 'ArrowUp':\n newDate.setDate(date.getDate() - 7);\n handled = true;\n break;\n case 'PageDown':\n newDate.setMonth(date.getMonth() + 1);\n handled = true;\n break;\n case 'PageUp':\n newDate.setMonth(date.getMonth() - 1);\n handled = true;\n break;\n // Space and Enter are natively handled by the button's click event\n }\n\n if (handled) {\n event.preventDefault();\n this.ensureDateVisible(newDate);\n this.focusedDate.set(newDate);\n \n setTimeout(() => {\n const buttons = this.#selfRef.nativeElement.querySelectorAll('button');\n if (buttons) {\n const targetAria = this.getAriaLabel(newDate);\n for (let i = 0; i < buttons.length; i++) {\n if (buttons[i].getAttribute('aria-label') === targetAria) {\n buttons[i].focus();\n break;\n }\n }\n }\n });\n }\n }\n\n ensureDateVisible(date: Date) {\n const start = this.currentDate();\n const end = this.getLastVisibleMonth();\n \n if (date < new Date(start.getFullYear(), start.getMonth(), 1)) {\n this.currentDate.set(new Date(date.getFullYear(), date.getMonth(), 1));\n this.#findSelectedAndCalc();\n } else if (date > new Date(end.getFullYear(), end.getMonth() + 1, 0)) {\n const newStart = new Date(date);\n newStart.setMonth(newStart.getMonth() - this.monthsToShow() + 1);\n newStart.setDate(1);\n this.currentDate.set(newStart);\n this.#findSelectedAndCalc();\n }\n }\n\n focusActiveDate() {\n setTimeout(() => {\n const activeBtn = this.#selfRef.nativeElement.querySelector('button[tabindex=\"0\"]') as HTMLButtonElement;\n if (activeBtn) activeBtn.focus();\n }, 50);\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.tabbedOut.emit();\n }\n });\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, HostListener, computed, contentChild, effect, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { classMutationSignal } from '@ship-ui/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-datepicker-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div id=\"input-wrap\" class=\"input\" ngProjectAs=\"input\">\n @if (this.masking()) {\n <div class=\"masked-value\">\n {{ _maskedDate() }}\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker [date]=\"internalDate()\" (dateChange)=\"onDateChange($event)\" (tabbedOut)=\"isOpen.set(false)\" [class]=\"currentClass()\" />\n }\n </div>\n </sh-form-field-popover>\n\n <ng-template #defaultIndicator></ng-template>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDatepickerInput {\n // #INIT_DATE = this.#getUTCDate(new Date());\n\n #selfRef = inject(ElementRef);\n ngControl = contentChild(NgControl);\n #datePipe = inject(DatePipe);\n #inputRef = signal<HTMLInputElement | null>(null);\n\n masking = input('mediumDate');\n closed = output<Date | null>();\n\n _maskedDate = computed(() => {\n const date = this.internalDate();\n const mask = this.masking();\n\n if (!mask) return date;\n if (!date) return null;\n\n return this.#datePipe.transform(date, mask);\n });\n\n internalDate = signal<Date | null>(null);\n isOpen = model<boolean>(false);\n currentClass = classMutationSignal();\n #inputObserver = contentProjectionSignal<HTMLInputElement>('#input-wrap input');\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onDateChange(date: Date | null) {\n this.internalDate.set(date);\n\n const control = this.ngControl()?.control;\n\n if (control) {\n control.setValue(date);\n } else {\n const input = this.#inputRef();\n if (input) {\n input.value = date ? date.toString() : '';\n input.dispatchEvent(new Event('input'));\n }\n }\n }\n\n close() {\n this.closed.emit(this.internalDate());\n }\n\n #inputRefEffect = effect(() => {\n const inputs = this.#inputObserver();\n\n if (!inputs.length) return;\n\n const input = inputs[0];\n\n if (!input) return;\n\n this.#createCustomInputEventListener(input);\n\n input.addEventListener('inputValueChanged', (event: any) => {\n const val = event.detail.value;\n if (!val) {\n this.internalDate.set(null);\n return;\n }\n \n let newD = new Date(val);\n \n if (isNaN(newD.getTime())) {\n // If it's a time-only string like \"14:30\" or \"14:30:00\"\n if (typeof val === 'string' && /^(\\d{2}):(\\d{2})/.test(val)) {\n const match = val.match(/^(\\d{2}):(\\d{2})(?::(\\d{2}))?/);\n if (match) {\n const current = this.internalDate() || new Date();\n newD = new Date(current);\n newD.setHours(parseInt(match[1], 10), parseInt(match[2], 10), match[3] ? parseInt(match[3], 10) : 0, 0);\n }\n }\n }\n \n if (!isNaN(newD.getTime())) {\n this.internalDate.set(newD);\n }\n });\n\n input.addEventListener('focus', () => {\n this.isOpen.set(true);\n // Removed input.blur() so users can actually type or use Shift+Tab to navigate backward\n });\n\n this.#inputRef.set(input);\n input.autocomplete = 'off';\n\n if (typeof input.value === 'string') {\n this.internalDate.set(input.value ? new Date(input.value) : null);\n }\n });\n\n #createCustomInputEventListener(input: HTMLInputElement) {\n Object.defineProperty(input, 'value', {\n configurable: true,\n get() {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n return descriptor!.get!.call(this);\n },\n set(newVal) {\n const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');\n descriptor!.set!.call(this, newVal);\n\n const inputEvent = new CustomEvent('inputValueChanged', {\n bubbles: true,\n cancelable: true,\n detail: {\n value: newVal,\n },\n });\n\n this.dispatchEvent(inputEvent);\n\n return newVal;\n },\n });\n\n return input;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, HostListener, inject, input, model, output, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { ShipFormFieldPopover } from '@ship-ui/core/ship-form-field';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipDatepicker } from './ship-datepicker';\n\n@Component({\n selector: 'sh-daterange-input',\n styleUrl: './ship-datepicker.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipDatepicker, ShipFormFieldPopover, ShipIcon],\n providers: [DatePipe],\n template: `\n <sh-form-field-popover [class]=\"'columns-' + monthsToShow()\" (closed)=\"close()\" [(isOpen)]=\"isOpen\">\n <ng-content select=\"label\" ngProjectAs=\"label\" />\n\n <ng-content select=\"[prefix]\" ngProjectAs=\"[prefix]\" />\n <ng-content select=\"[textPrefix]\" ngProjectAs=\"[textPrefix]\" />\n\n <div class=\"input\" ngProjectAs=\"input\" #inputWrap [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n @if (this.masking()) {\n <div class=\"masked-value\" [class.active-start]=\"isOpen() && activeInput() === 'start'\" [class.active-end]=\"isOpen() && activeInput() === 'end'\">\n <span class=\"start-val\">{{ _maskedStartDate() ?? 'N/A' }}</span>\n <span class=\"separator\">-</span>\n <span class=\"end-val\">{{ _maskedEndDate() ?? 'N/A' }}</span>\n </div>\n }\n <ng-content select=\"input\" />\n </div>\n\n <ng-content select=\"[textSuffix]\" ngProjectAs=\"[textSuffix]\" />\n <ng-content select=\"[suffix]\" ngProjectAs=\"[suffix]\" />\n <sh-icon class=\"default-indicator\" suffix>calendar</sh-icon>\n\n <div popoverContent>\n @if (this.isOpen()) {\n <sh-datepicker\n [date]=\"startDate()\"\n [endDate]=\"endDate()\"\n [activeRangeSelection]=\"activeInput()\"\n [class]=\"classes\"\n (dateChange)=\"onStartDateChange($event)\"\n (endDateChange)=\"onEndDateChange($event)\"\n (tabbedOut)=\"isOpen.set(false)\"\n [monthsToShow]=\"monthsToShow()\"\n [asRange]=\"true\" />\n }\n </div>\n </sh-form-field-popover>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDaterangeInput {\n #selfRef = inject(ElementRef);\n\n #inputObserver = contentProjectionSignal('input', {\n childList: true,\n subtree: true,\n });\n\n #datePipe = inject(DatePipe);\n monthsToShow = input<number>(1);\n masking = input('mediumDate');\n closed = output<{ start: Date | null; end: Date | null }>();\n\n startDate = signal<Date | null>(null);\n endDate = signal<Date | null>(null);\n activeInput = signal<'start' | 'end'>('start');\n isOpen = model<boolean>(false);\n datepicker = viewChild(ShipDatepicker);\n\n #isOpenEffect = effect(() => {\n if (this.isOpen()) {\n setTimeout(() => {\n this.datepicker()?.focusActiveDate();\n }, 50);\n }\n });\n\n get classes() {\n return `${this.#selfRef.nativeElement.classList.value}`;\n }\n\n _maskedStartDate = computed(() => {\n const date = this.startDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n _maskedEndDate = computed(() => {\n const date = this.endDate();\n const mask = this.masking();\n if (!mask || !date) return null;\n return this.#datePipe.transform(date, mask);\n });\n\n constructor() {\n effect(() => {\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs.length === 0) return;\n\n if (inputs[0]) this.setupInput(inputs[0], true);\n if (inputs[1]) this.setupInput(inputs[1], false);\n });\n }\n\n private setupInput(element: HTMLInputElement, isStart: boolean) {\n if ((element as any)._hasCustomFocusEvent) return;\n (element as any)._hasCustomFocusEvent = true;\n\n element.autocomplete = 'off';\n \n // Set tabindex -1 on the second input to prevent users from having to Shift+Tab \n // multiple times to exit the component when masking is enabled.\n if (!isStart) {\n element.tabIndex = -1;\n }\n\n element.addEventListener('focus', () => {\n this.activeInput.set(isStart ? 'start' : 'end');\n if ((element as any)._ignoreNextFocus) {\n (element as any)._ignoreNextFocus = false;\n return;\n }\n this.isOpen.set(true);\n });\n\n // Handle initial value\n if (element.value) {\n try {\n const date = new Date(element.value);\n if (!isNaN(date.getTime())) {\n if (isStart) {\n this.startDate.set(date);\n } else {\n this.endDate.set(date);\n }\n }\n } catch (e) {\n console.warn('Invalid date value:', element.value);\n }\n }\n }\n\n @HostListener('focusout', ['$event'])\n onFocusOut(event: FocusEvent) {\n setTimeout(() => {\n const activeElement = document.activeElement as HTMLElement | null;\n if (\n activeElement &&\n activeElement !== document.body &&\n !this.#selfRef.nativeElement.contains(activeElement)\n ) {\n this.isOpen.set(false);\n }\n });\n }\n\n onStartDateChange(date: Date | null) {\n this.startDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0]) this.updateInputValue([inputs[0]], date);\n \n // Automatically switch to end date selection\n this.activeInput.set('end');\n }\n\n onEndDateChange(date: Date | null) {\n this.endDate.set(date);\n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[1]) this.updateInputValue([inputs[1]], date);\n\n if (this.startDate() && date) {\n this.isOpen.set(false);\n \n const inputs = this.#inputObserver() as HTMLInputElement[];\n if (inputs[0] && document.activeElement !== inputs[0]) {\n (inputs[0] as any)._ignoreNextFocus = true;\n inputs[0].focus();\n }\n }\n }\n\n private updateInputValue(inputs: HTMLInputElement[], date: Date | null) {\n inputs.forEach((input) => {\n if (this.masking()) {\n input.value = this.#datePipe.transform(date, this.masking()) ?? '';\n } else {\n input.value = date ? date.toUTCString() : '';\n }\n this.dispatchInputEvent(input);\n });\n }\n\n private dispatchInputEvent(input: HTMLInputElement) {\n input.dispatchEvent(new Event('input', { bubbles: true }));\n input.dispatchEvent(new Event('change', { bubbles: true }));\n }\n\n close() {\n this.closed.emit({\n start: this.startDate(),\n end: this.endDate(),\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,263 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, DOCUMENT, viewChild, model, input, output, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, Component, ApplicationRef, OutputEmitterRef, TemplateRef, createComponent, isSignal, Injectable } from '@angular/core';
3
+ import { SHIP_CONFIG } from '@ship-ui/core';
4
+
5
+ const DEFAULT_OPTIONS = {
6
+ class: 'default',
7
+ width: undefined,
8
+ maxWidth: undefined,
9
+ height: undefined,
10
+ maxHeight: undefined,
11
+ closeOnButton: true,
12
+ closeOnEsc: true,
13
+ closeOnOutsideClick: true,
14
+ };
15
+ class ShipDialog {
16
+ constructor() {
17
+ this.#document = inject(DOCUMENT);
18
+ this.#shConfig = inject(SHIP_CONFIG, { optional: true });
19
+ this.dialogRef = viewChild('dialogRef', /* @ts-ignore */
20
+ ...(ngDevMode ? [{ debugName: "dialogRef" }] : /* istanbul ignore next */ []));
21
+ this.isOpen = model(false, /* @ts-ignore */
22
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
23
+ this.options = input(/* @ts-ignore */
24
+ ...(ngDevMode ? [undefined, { debugName: "options" }] : /* istanbul ignore next */ []));
25
+ this.closed = output();
26
+ this.defaultOptionMerge = computed(() => ({
27
+ ...DEFAULT_OPTIONS,
28
+ ...{ class: this.#shConfig?.dialogType ?? 'default' },
29
+ ...this.options(),
30
+ }), /* @ts-ignore */
31
+ ...(ngDevMode ? [{ debugName: "defaultOptionMerge" }] : /* istanbul ignore next */ []));
32
+ this.abortController = null;
33
+ this.isOpenEffect = effect(() => {
34
+ const dialogEl = this.dialogRef()?.nativeElement;
35
+ if (!dialogEl)
36
+ return;
37
+ if (this.abortController) {
38
+ this.abortController.abort();
39
+ }
40
+ this.abortController = new AbortController();
41
+ if (this.isOpen()) {
42
+ dialogEl.showModal();
43
+ dialogEl.addEventListener('close', () => {
44
+ this.isOpen.set(false);
45
+ this.closed.emit();
46
+ }, {
47
+ signal: this.abortController?.signal,
48
+ });
49
+ this.#document.addEventListener('keydown', (e) => {
50
+ if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {
51
+ e.preventDefault();
52
+ }
53
+ if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {
54
+ this.isOpen.set(false);
55
+ }
56
+ }, {
57
+ signal: this.abortController?.signal,
58
+ });
59
+ }
60
+ else {
61
+ dialogEl.close();
62
+ queueMicrotask(() => this.closed.emit());
63
+ }
64
+ }, /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "isOpenEffect" }] : /* istanbul ignore next */ []));
66
+ }
67
+ #document;
68
+ #shConfig;
69
+ ngOnDestroy() {
70
+ this.abortController?.abort();
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialog, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipDialog, isStandalone: true, selector: "sh-dialog", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", closed: "closed" }, viewQueries: [{ propertyName: "dialogRef", first: true, predicate: ["dialogRef"], descendants: true, isSignal: true }], ngImport: i0, template: `
74
+ @let options = this.defaultOptionMerge();
75
+
76
+ @if (isOpen()) {
77
+ <dialog
78
+ shDialog
79
+ #dialogRef
80
+ [class]="options.class"
81
+ [style.width]="options.width ?? ''"
82
+ [style.max-width]="options.maxWidth ?? ''"
83
+ [style.max-height]="options.maxHeight ?? ''"
84
+ [style.height]="options.height ?? ''">
85
+ <div class="content">
86
+ <ng-content />
87
+ </div>
88
+
89
+ @if (this.defaultOptionMerge().closeOnOutsideClick) {
90
+ <div class="closeable-overlay" (click)="isOpen.set(false)"></div>
91
+ }
92
+ </dialog>
93
+ }
94
+ `, isInline: true, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialog, decorators: [{
97
+ type: Component,
98
+ args: [{ selector: 'sh-dialog', encapsulation: ViewEncapsulation.None, imports: [], template: `
99
+ @let options = this.defaultOptionMerge();
100
+
101
+ @if (isOpen()) {
102
+ <dialog
103
+ shDialog
104
+ #dialogRef
105
+ [class]="options.class"
106
+ [style.width]="options.width ?? ''"
107
+ [style.max-width]="options.maxWidth ?? ''"
108
+ [style.max-height]="options.maxHeight ?? ''"
109
+ [style.height]="options.height ?? ''">
110
+ <div class="content">
111
+ <ng-content />
112
+ </div>
113
+
114
+ @if (this.defaultOptionMerge().closeOnOutsideClick) {
115
+ <div class="closeable-overlay" (click)="isOpen.set(false)"></div>
116
+ }
117
+ </dialog>
118
+ }
119
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["dialog[shDialog]{--dialog-p: 1rem;--dialog-g: .5rem;--dialog-bg: var(--base-1);--dialog-s: var(--shape-2);--dialog-inner-s: var(--shape-2);border:var(--border-10);background:transparent;border-radius:var(--dialog-s);box-shadow:var(--box-shadow-40);color:var(--base-8);font:var(--paragraph-30);padding:0;margin:auto;z-index:0;display:flex;flex-direction:column}dialog[shDialog]:focus-visible{outline:none}dialog[shDialog].type-b{--dialog-s: 1.625rem;--dialog-inner-s: 1.25rem;background:var(--base-3);padding:.5rem;outline:var(--border-10);outline-offset:-1px;overflow:hidden}dialog[shDialog].type-b::backdrop{background:rgb(from var(--base-1) r g b/30%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}dialog[shDialog].type-b>.content{border:1px solid rgb(from var(--base-4) r g b/70%)}dialog[shDialog]>.content{position:relative;border-radius:var(--dialog-inner-s);background-color:var(--dialog-bg);z-index:2;max-width:initial;overflow:auto}dialog[shDialog] .closeable-overlay{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog]:focus{outline:none}dialog[shDialog] .dialog-content{position:relative;z-index:2}dialog[shDialog] .dialog-backdrop{position:fixed;inset:0;opacity:0;z-index:1}dialog[shDialog] [header],dialog[shDialog] [content],dialog[shDialog] [footer]{width:100%}dialog[shDialog] [header]{display:grid;grid-template-areas:\"title actions\" \"description actions\";grid-template-columns:1fr min-content;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [header] h1,dialog[shDialog] [header] h2,dialog[shDialog] [header] h3,dialog[shDialog] [header] h4,dialog[shDialog] [header] [title]{grid-area:title;font:var(--title-20)}dialog[shDialog] [header] p,dialog[shDialog] [header] [description]{grid-area:description;font:var(--paragraph-30)}dialog[shDialog] [header] button,dialog[shDialog] [header] [actions]{grid-area:actions}dialog[shDialog] [header].sticky{background-color:var(--dialog-bg);border-bottom:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;top:0;z-index:100}dialog[shDialog] [content]{padding:0 var(--dialog-p)}dialog[shDialog] [content]:not(:has(~[footer])){padding-bottom:var(--dialog-p)}dialog[shDialog] [footer]{display:flex;align-items:center;justify-content:flex-end;padding:var(--dialog-p);gap:var(--dialog-g)}dialog[shDialog] [footer].sticky{background-color:var(--dialog-bg);border-top:var(--border-10);box-shadow:var(--box-shadow-35);position:sticky;bottom:0;z-index:100}\n"] }]
120
+ }], propDecorators: { dialogRef: [{ type: i0.ViewChild, args: ['dialogRef', { isSignal: true }] }], isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }, { type: i0.Output, args: ["isOpenChange"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }] } });
121
+
122
+ class ShipDialogService {
123
+ constructor() {
124
+ this.#document = inject(DOCUMENT);
125
+ this.#bodyEl = this.#document.querySelector('body');
126
+ this.#appRef = inject(ApplicationRef);
127
+ this.compRef = null;
128
+ this.insertedCompRef = null;
129
+ this.insertedTemplateRef = null;
130
+ this.closedFieldSub = null;
131
+ this.compClosedSub = null;
132
+ }
133
+ #document;
134
+ #bodyEl;
135
+ #appRef;
136
+ open(componentOrTemplate, options) {
137
+ const environmentInjector = this.#appRef.injector;
138
+ const hostElement = this.#createEl();
139
+ let closingCalled = false;
140
+ let closedField;
141
+ const { data, closed, ...rest } = options || {};
142
+ if (this.compRef) {
143
+ this.#cleanupRefs(true);
144
+ }
145
+ const _self = this;
146
+ function closeAction(arg = undefined) {
147
+ _self.#cleanupRefs();
148
+ if (closingCalled)
149
+ return;
150
+ closingCalled = true;
151
+ if (closedField && closedField instanceof OutputEmitterRef) {
152
+ closedField.emit(arg);
153
+ }
154
+ closed?.(arg);
155
+ }
156
+ let projectableNodes = [];
157
+ if (componentOrTemplate instanceof TemplateRef) {
158
+ this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({
159
+ $implicit: data,
160
+ close: (res) => closeAction(res),
161
+ });
162
+ projectableNodes = [this.insertedTemplateRef.rootNodes];
163
+ }
164
+ else {
165
+ this.insertedCompRef = createComponent(componentOrTemplate, {
166
+ environmentInjector,
167
+ });
168
+ projectableNodes = [[this.insertedCompRef.location.nativeElement]];
169
+ const insertedInstance = this.insertedCompRef.instance;
170
+ const dataField = insertedInstance.data;
171
+ closedField = insertedInstance.closed;
172
+ if (data) {
173
+ if (isSignal(dataField)) {
174
+ this.insertedCompRef.setInput('data', data);
175
+ }
176
+ else if (!isSignal(dataField)) {
177
+ throw new Error('data is not an input signal on the passed component');
178
+ }
179
+ }
180
+ if (closedField && closedField instanceof OutputEmitterRef) {
181
+ this.closedFieldSub = closedField.subscribe((arg) => {
182
+ this.#cleanupRefs();
183
+ if (closingCalled)
184
+ return;
185
+ closingCalled = true;
186
+ closed?.(arg);
187
+ (this.compRef?.instance.closed).emit(arg);
188
+ });
189
+ }
190
+ }
191
+ this.compRef = createComponent(ShipDialog, {
192
+ hostElement,
193
+ environmentInjector,
194
+ projectableNodes,
195
+ });
196
+ if (this.insertedCompRef) {
197
+ this.#appRef.attachView(this.insertedCompRef.hostView);
198
+ this.insertedCompRef.changeDetectorRef.detectChanges();
199
+ }
200
+ if (this.insertedTemplateRef) {
201
+ this.#appRef.attachView(this.insertedTemplateRef);
202
+ this.insertedTemplateRef.detectChanges();
203
+ }
204
+ this.#appRef.attachView(this.compRef.hostView);
205
+ this.compRef.changeDetectorRef.detectChanges();
206
+ this.compRef.instance.isOpen.set(true);
207
+ this.compRef.setInput('options', rest);
208
+ this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());
209
+ return {
210
+ component: this.insertedCompRef?.instance,
211
+ close: closeAction,
212
+ closed: this.compRef.instance.closed,
213
+ };
214
+ }
215
+ #createEl() {
216
+ const wrapperEl = this.#document.createElement('sh-dialog-ref');
217
+ wrapperEl.id = 'sh-dialog-ref';
218
+ if (!this.#document.getElementById('sh-dialog-ref')) {
219
+ this.#bodyEl?.append(wrapperEl);
220
+ }
221
+ return this.#document.getElementById('sh-dialog-ref');
222
+ }
223
+ #cleanupRefs(instant = false) {
224
+ const _self = this;
225
+ instant ? cleanup : queueMicrotask(() => cleanup());
226
+ function cleanup() {
227
+ if (_self.insertedCompRef) {
228
+ _self.#appRef.detachView(_self.insertedCompRef.hostView);
229
+ _self.closedFieldSub?.unsubscribe();
230
+ _self.insertedCompRef.destroy();
231
+ _self.insertedCompRef = null;
232
+ }
233
+ if (_self.insertedTemplateRef) {
234
+ _self.#appRef.detachView(_self.insertedTemplateRef);
235
+ _self.insertedTemplateRef.destroy();
236
+ _self.insertedTemplateRef = null;
237
+ }
238
+ if (!_self.compRef)
239
+ return;
240
+ _self.#appRef.detachView(_self.compRef.hostView);
241
+ _self.compClosedSub?.unsubscribe();
242
+ _self.compRef.destroy();
243
+ }
244
+ }
245
+ ngOnDestroy() {
246
+ this.#cleanupRefs(true);
247
+ }
248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
249
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialogService, providedIn: 'root' }); }
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDialogService, decorators: [{
252
+ type: Injectable,
253
+ args: [{
254
+ providedIn: 'root',
255
+ }]
256
+ }] });
257
+
258
+ /**
259
+ * Generated bundle index. Do not edit.
260
+ */
261
+
262
+ export { ShipDialog, ShipDialogService };
263
+ //# sourceMappingURL=ship-ui-core-ship-dialog.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-dialog.mjs","sources":["../../../projects/ship-ui/ship-dialog/ship-dialog.ts","../../../projects/ship-ui/ship-dialog/ship-dialog.service.ts","../../../projects/ship-ui/ship-dialog/ship-ui-core-ship-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DOCUMENT, effect, ElementRef, inject, input, model, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { SHIP_CONFIG } from '@ship-ui/core';\n\nexport type ShipDialogOptions = {\n class?: 'default' | 'type-b' | string;\n width?: string;\n maxWidth?: string;\n height?: string;\n maxHeight?: string;\n closeOnButton?: boolean;\n closeOnEsc?: boolean;\n closeOnOutsideClick?: boolean;\n};\n\nconst DEFAULT_OPTIONS: ShipDialogOptions = {\n class: 'default',\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n maxHeight: undefined,\n closeOnButton: true,\n closeOnEsc: true,\n closeOnOutsideClick: true,\n};\n\n@Component({\n selector: 'sh-dialog',\n styleUrl: './ship-dialog.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n @let options = this.defaultOptionMerge();\n\n @if (isOpen()) {\n <dialog\n shDialog\n #dialogRef\n [class]=\"options.class\"\n [style.width]=\"options.width ?? ''\"\n [style.max-width]=\"options.maxWidth ?? ''\"\n [style.max-height]=\"options.maxHeight ?? ''\"\n [style.height]=\"options.height ?? ''\">\n <div class=\"content\">\n <ng-content />\n </div>\n\n @if (this.defaultOptionMerge().closeOnOutsideClick) {\n <div class=\"closeable-overlay\" (click)=\"isOpen.set(false)\"></div>\n }\n </dialog>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDialog {\n #document = inject(DOCUMENT);\n #shConfig = inject(SHIP_CONFIG, { optional: true });\n dialogRef = viewChild<ElementRef<HTMLDialogElement>>('dialogRef');\n isOpen = model<boolean>(false);\n options = input<Partial<ShipDialogOptions>>();\n closed = output<void>();\n\n defaultOptionMerge = computed(() => ({\n ...DEFAULT_OPTIONS,\n ...{ class: this.#shConfig?.dialogType ?? 'default' },\n ...this.options(),\n }));\n\n abortController: AbortController | null = null;\n isOpenEffect = effect(() => {\n const dialogEl = this.dialogRef()?.nativeElement;\n\n if (!dialogEl) return;\n if (this.abortController) {\n this.abortController.abort();\n }\n\n this.abortController = new AbortController();\n\n if (this.isOpen()) {\n dialogEl.showModal();\n dialogEl.addEventListener(\n 'close',\n () => {\n this.isOpen.set(false);\n this.closed.emit();\n },\n {\n signal: this.abortController?.signal,\n }\n );\n\n this.#document.addEventListener(\n 'keydown',\n (e) => {\n if (e.key === 'Escape' && !this.defaultOptionMerge().closeOnEsc) {\n e.preventDefault();\n }\n\n if (e.key === 'Escape' && this.defaultOptionMerge().closeOnEsc) {\n this.isOpen.set(false);\n }\n },\n {\n signal: this.abortController?.signal,\n }\n );\n } else {\n dialogEl.close();\n\n queueMicrotask(() => this.closed.emit());\n }\n });\n\n ngOnDestroy() {\n this.abortController?.abort();\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n createComponent,\n DOCUMENT,\n EmbeddedViewRef,\n inject,\n Injectable,\n InputSignal,\n isSignal,\n OutputEmitterRef,\n OutputRefSubscription,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { ShipDialog, ShipDialogOptions } from './ship-dialog';\n\nexport type Exact<T, U> = U extends T ? (keyof U extends keyof T ? U : never) : never;\nexport type ComponentDataType<T> = T extends TemplateRef<infer C>\n ? (C extends { $implicit: infer K } ? K : unknown) & Partial<Omit<C, 'close' | '$implicit'>> extends infer R\n ? keyof R extends never\n ? void\n : R\n : void\n : T extends { data: InputSignal<infer K> }\n ? K\n : void;\nexport type ComponentClosedType<T> = T extends TemplateRef<infer C>\n ? C extends { close: (res?: infer U) => void }\n ? U\n : undefined\n : T extends { closed: OutputEmitterRef<infer U> }\n ? U\n : undefined;\n\nexport interface ShipDialogServiceOptions<TData = any, TResult = undefined> extends ShipDialogOptions {\n data?: TData extends void ? void : TData & Exact<TData, TData>;\n closed?: (res: TResult) => void;\n}\n\nexport type ShipDialogInstance<T> = {\n component: T;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\nexport type ShipDialogTemplateInstance<T> = {\n component: undefined;\n close: (res?: ComponentClosedType<T>) => void;\n closed: OutputEmitterRef<ComponentClosedType<T>>;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipDialogService {\n #document = inject(DOCUMENT);\n #bodyEl = this.#document.querySelector('body');\n #appRef = inject(ApplicationRef);\n\n compRef: ComponentRef<ShipDialog> | null = null;\n insertedCompRef: ComponentRef<unknown> | null = null;\n insertedTemplateRef: EmbeddedViewRef<unknown> | null = null;\n\n closedFieldSub: OutputRefSubscription | null = null;\n compClosedSub: OutputRefSubscription | null = null;\n\n open<\n I,\n K = ComponentDataType<I>,\n U = ComponentClosedType<I>,\n _Options extends ShipDialogServiceOptions<K, U> = ShipDialogServiceOptions<K, U>,\n >(\n componentOrTemplate: Type<I> | (I extends TemplateRef<any> ? I : never),\n options?: _Options\n ): I extends TemplateRef<any> ? ShipDialogTemplateInstance<I> : ShipDialogInstance<I>;\n open<T = any, K = ComponentDataType<T>, U = ComponentClosedType<T>>(\n componentOrTemplate: Type<T> | TemplateRef<any>,\n options?: any\n ): ShipDialogInstance<any> {\n const environmentInjector = this.#appRef.injector;\n const hostElement = this.#createEl();\n let closingCalled = false;\n let closedField: OutputEmitterRef<U | undefined> | undefined;\n\n const { data, closed, ...rest } = options || {};\n\n if (this.compRef) {\n this.#cleanupRefs(true);\n }\n\n const _self = this;\n\n function closeAction(arg: U | undefined = undefined) {\n _self.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n closedField.emit(arg as any);\n }\n\n closed?.(arg as U);\n }\n\n let projectableNodes: any[][] = [];\n\n if (componentOrTemplate instanceof TemplateRef) {\n this.insertedTemplateRef = componentOrTemplate.createEmbeddedView({\n $implicit: data,\n close: (res?: any) => closeAction(res),\n });\n projectableNodes = [this.insertedTemplateRef.rootNodes];\n } else {\n this.insertedCompRef = createComponent<T>(componentOrTemplate, {\n environmentInjector,\n });\n projectableNodes = [[this.insertedCompRef.location.nativeElement]];\n\n const insertedInstance = this.insertedCompRef.instance as T;\n const dataField = (insertedInstance as any).data as InputSignal<K>;\n closedField = (insertedInstance as any).closed as OutputEmitterRef<U | undefined>;\n\n if (data) {\n if (isSignal(dataField)) {\n this.insertedCompRef.setInput('data', data);\n } else if (!isSignal(dataField)) {\n throw new Error('data is not an input signal on the passed component');\n }\n }\n\n if (closedField && closedField instanceof OutputEmitterRef) {\n this.closedFieldSub = closedField.subscribe((arg: U | undefined) => {\n this.#cleanupRefs();\n\n if (closingCalled) return;\n\n closingCalled = true;\n\n closed?.(arg as U);\n\n (this.compRef?.instance.closed as OutputEmitterRef<U | undefined>).emit(arg);\n });\n }\n }\n\n this.compRef = createComponent(ShipDialog, {\n hostElement,\n environmentInjector,\n projectableNodes,\n });\n\n if (this.insertedCompRef) {\n this.#appRef.attachView(this.insertedCompRef.hostView);\n this.insertedCompRef.changeDetectorRef.detectChanges();\n }\n\n if (this.insertedTemplateRef) {\n this.#appRef.attachView(this.insertedTemplateRef);\n this.insertedTemplateRef.detectChanges();\n }\n\n this.#appRef.attachView(this.compRef.hostView);\n\n this.compRef.changeDetectorRef.detectChanges();\n this.compRef.instance.isOpen.set(true);\n this.compRef.setInput('options', rest);\n\n this.compClosedSub = this.compRef.instance.closed.subscribe(() => closeAction());\n\n return {\n component: this.insertedCompRef?.instance as T | undefined,\n close: closeAction,\n closed: this.compRef.instance.closed as OutputEmitterRef<U | undefined>,\n } as ShipDialogInstance<T>;\n }\n\n #createEl(): Element {\n const wrapperEl = this.#document.createElement('sh-dialog-ref');\n wrapperEl.id = 'sh-dialog-ref';\n\n if (!this.#document.getElementById('sh-dialog-ref')) {\n this.#bodyEl?.append(wrapperEl);\n }\n\n return this.#document.getElementById('sh-dialog-ref')!;\n }\n\n #cleanupRefs(instant = false) {\n const _self = this;\n\n instant ? cleanup : queueMicrotask(() => cleanup());\n\n function cleanup() {\n if (_self.insertedCompRef) {\n _self.#appRef.detachView(_self.insertedCompRef.hostView);\n _self.closedFieldSub?.unsubscribe();\n _self.insertedCompRef.destroy();\n _self.insertedCompRef = null;\n }\n\n if (_self.insertedTemplateRef) {\n _self.#appRef.detachView(_self.insertedTemplateRef);\n _self.insertedTemplateRef.destroy();\n _self.insertedTemplateRef = null;\n }\n\n if (!_self.compRef) return;\n\n _self.#appRef.detachView(_self.compRef.hostView);\n _self.compClosedSub?.unsubscribe();\n _self.compRef.destroy();\n }\n }\n\n ngOnDestroy() {\n this.#cleanupRefs(true);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+
4
+ class ShipDivider {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDivider, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.0", type: ShipDivider, isStandalone: true, selector: "sh-divider", ngImport: i0, template: `
7
+ <ng-content />
8
+ `, isInline: true, styles: ["sh-divider{--divider-c: var(--base-4);--divider-h: .0625rem;display:flex;gap:.5rem;align-items:center;text-align:center}sh-divider:empty{gap:0}sh-divider:before,sh-divider:after{content:\"\";background:var(--divider-c);height:var(--divider-h);flex:1 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipDivider, decorators: [{
11
+ type: Component,
12
+ args: [{ selector: 'sh-divider', encapsulation: ViewEncapsulation.None, imports: [], template: `
13
+ <ng-content />
14
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["sh-divider{--divider-c: var(--base-4);--divider-h: .0625rem;display:flex;gap:.5rem;align-items:center;text-align:center}sh-divider:empty{gap:0}sh-divider:before,sh-divider:after{content:\"\";background:var(--divider-c);height:var(--divider-h);flex:1 0}\n"] }]
15
+ }] });
16
+
17
+ /**
18
+ * Generated bundle index. Do not edit.
19
+ */
20
+
21
+ export { ShipDivider };
22
+ //# sourceMappingURL=ship-ui-core-ship-divider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-divider.mjs","sources":["../../../projects/ship-ui/ship-divider/ship-divider.ts","../../../projects/ship-ui/ship-divider/ship-ui-core-ship-divider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'sh-divider',\n styleUrl: './ship-divider.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipDivider {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAYa,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EALZ;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gQAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGU,WAAW,EAAA,UAAA,EAAA,CAAA;kBAVvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,iBAEP,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;GAET,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,gQAAA,CAAA,EAAA;;;ACVjD;;AAEG;;;;"}
@@ -0,0 +1,50 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { shipComponentClasses } from '@ship-ui/core';
4
+
5
+ class ShipEventCard {
6
+ constructor() {
7
+ this.color = input(null, /* @ts-ignore */
8
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9
+ this.variant = input(null, /* @ts-ignore */
10
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
11
+ this.hostClasses = shipComponentClasses('event-card', {
12
+ color: this.color,
13
+ variant: this.variant,
14
+ });
15
+ }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipEventCard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipEventCard, isStandalone: true, selector: "sh-event-card", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" }, classAttribute: "sh-sheet" }, ngImport: i0, template: `
18
+ <div class="content">
19
+ <ng-content />
20
+ </div>
21
+
22
+ <div class="actions">
23
+ <ng-content select="[actions]" />
24
+ <ng-content select="button" />
25
+ </div>
26
+ `, isInline: true, styles: ["sh-event-card{display:flex;gap:.5rem;width:100%;padding:1rem}sh-event-card .content{display:flex;flex-direction:column;gap:.25rem;flex:1}sh-event-card .content>*{color:var(--sheet-c)}sh-event-card .content h1,sh-event-card .content h2,sh-event-card .content h3,sh-event-card .content h4,sh-event-card .content h5,sh-event-card .content h6{font:var(--paragraph-20B)}sh-event-card .actions [actions],sh-event-card .actions{display:flex;gap:.5rem;align-items:center}sh-event-card .actions [actions] [shButton],sh-event-card .actions [shButton]{--btn-bs: none}sh-event-card:before{content:\"\";display:block;border-radius:.1875rem;width:.375rem;background:var(--sheet-ic)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipEventCard, decorators: [{
29
+ type: Component,
30
+ args: [{ selector: 'sh-event-card', encapsulation: ViewEncapsulation.None, imports: [], template: `
31
+ <div class="content">
32
+ <ng-content />
33
+ </div>
34
+
35
+ <div class="actions">
36
+ <ng-content select="[actions]" />
37
+ <ng-content select="button" />
38
+ </div>
39
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
40
+ class: 'sh-sheet',
41
+ '[class]': 'hostClasses()',
42
+ }, styles: ["sh-event-card{display:flex;gap:.5rem;width:100%;padding:1rem}sh-event-card .content{display:flex;flex-direction:column;gap:.25rem;flex:1}sh-event-card .content>*{color:var(--sheet-c)}sh-event-card .content h1,sh-event-card .content h2,sh-event-card .content h3,sh-event-card .content h4,sh-event-card .content h5,sh-event-card .content h6{font:var(--paragraph-20B)}sh-event-card .actions [actions],sh-event-card .actions{display:flex;gap:.5rem;align-items:center}sh-event-card .actions [actions] [shButton],sh-event-card .actions [shButton]{--btn-bs: none}sh-event-card:before{content:\"\";display:block;border-radius:.1875rem;width:.375rem;background:var(--sheet-ic)}\n"] }]
43
+ }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
44
+
45
+ /**
46
+ * Generated bundle index. Do not edit.
47
+ */
48
+
49
+ export { ShipEventCard };
50
+ //# sourceMappingURL=ship-ui-core-ship-event-card.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-event-card.mjs","sources":["../../../projects/ship-ui/ship-event-card/ship-event-card.ts","../../../projects/ship-ui/ship-event-card/ship-ui-core-ship-event-card.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-event-card',\n styleUrl: './ship-event-card.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"content\">\n <ng-content />\n </div>\n\n <div class=\"actions\">\n <ng-content select=\"[actions]\" />\n <ng-content select=\"button\" />\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'sh-sheet',\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipEventCard {\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n\n hostClasses = shipComponentClasses('event-card', {\n color: this.color,\n variant: this.variant,\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAyBa,aAAa,CAAA;AArB1B,IAAA,WAAA,GAAA;QAsBE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAmB,IAAI;kFAAC;QACrC,IAAA,CAAA,OAAO,GAAG,KAAK,CAA0B,IAAI;oFAAC;AAE9C,QAAA,IAAA,CAAA,WAAW,GAAG,oBAAoB,CAAC,YAAY,EAAE;YAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;AACH,IAAA;8GARY,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,cAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBd;;;;;;;;;AAST,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gqBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOU,aAAa,EAAA,UAAA,EAAA,CAAA;kBArBzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,iBAEV,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;;;;;;;;GAST,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA,EAAA,MAAA,EAAA,CAAA,gqBAAA,CAAA,EAAA;;;ACvBH;;AAEG;;;;"}