@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-table.mjs","sources":["../../../projects/ship-ui/ship-table/ship-table.ts","../../../projects/ship-ui/ship-table/ship-ui-core-ship-table.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, DestroyRef, Directive, effect, ElementRef, HostListener, inject, input, model, output, Renderer2, signal, viewChild, ViewEncapsulation } from '@angular/core';\nimport { ShipProgressBar } from '@ship-ui/core/ship-progress-bar';\nimport { observeChildren } from '@ship-ui/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipTableVariant } from '@ship-ui/core';\n\n@Directive({\n selector: '[shResize]',\n standalone: true,\n})\nexport class ShipResize {\n #el = inject(ElementRef) as ElementRef<HTMLTableCellElement>;\n #renderer = inject(Renderer2);\n #table = inject(ShipTable);\n\n resizable = input<boolean>(true);\n minWidth = input<number>(50);\n maxWidth = input<number | null>(null);\n\n #startX!: number;\n #startWidth!: number;\n #resizing = false;\n #animationFrameRequest: number | null = null; // Store request ID\n\n ngOnInit() {\n if (!this.#table) {\n console.error('shTableResize directive must be used within a sh-table component.');\n return;\n }\n\n if (this.resizable()) {\n const resizer = this.#renderer.createElement('div');\n this.#renderer.addClass(resizer, 'sh-resizer');\n this.#renderer.appendChild(this.#el.nativeElement, resizer);\n this.#renderer.listen(resizer, 'mousedown', this.#onMouseDown.bind(this));\n }\n }\n\n @HostListener('document:mousemove', ['$event'])\n onMouseMove(event: MouseEvent) {\n if (!this.#resizing) return;\n\n this.#scheduleResize(event);\n }\n\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent) {\n if (this.#resizing) {\n this.#resizing = false;\n this.#table.resizing.set(false);\n\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n this.#animationFrameRequest = null;\n }\n }\n }\n\n @HostListener('document:click', ['$event']) onClick(event: MouseEvent) {\n if (this.#resizing) {\n event.stopPropagation();\n }\n }\n\n #onMouseDown(event: MouseEvent) {\n event.stopPropagation();\n\n if (!this.resizable()) return;\n\n this.#table.resizing.set(true);\n this.#resizing = true;\n this.#startX = event.pageX;\n this.#startWidth = this.#el.nativeElement.offsetWidth;\n }\n\n #scheduleResize(event: MouseEvent) {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n\n this.#animationFrameRequest = requestAnimationFrame(() => {\n this.#resizeColumn(event);\n this.#animationFrameRequest = null;\n });\n }\n\n #resizeColumn(event: MouseEvent) {\n const width = this.#startWidth + (event.pageX - this.#startX);\n const constrainedWidth = Math.max(\n this.minWidth(),\n this.maxWidth() ? Math.min(width, this.maxWidth() ?? width) : width\n );\n\n this.#renderer.setAttribute(this.#el.nativeElement, 'size', `${constrainedWidth}px`);\n this.#table.updateColumnSizes();\n }\n\n ngOnDestroy() {\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n }\n }\n}\n\n@Directive({\n selector: '[shSort]',\n standalone: true,\n host: {\n class: 'sortable',\n '(mousedown)': 'toggleSort()',\n '[class.sort-asc]': 'sortAsc()',\n '[class.sort-desc]': 'sortDesc()',\n },\n})\nexport class ShipSort {\n #table = inject(ShipTable);\n shSort = input<string>();\n\n sortAsc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === thisColumn;\n });\n\n sortDesc = computed(() => {\n const currentSort = this.#table.sortByColumn();\n const thisColumn = this.shSort();\n\n if (!currentSort || !thisColumn) return false;\n\n return currentSort === `-${thisColumn}`;\n });\n\n toggleSort() {\n const sortCol = this.shSort();\n\n if (!sortCol) return;\n\n this.#table.toggleSort(sortCol);\n }\n}\n\n@Directive({\n selector: '[shStickyColumns]',\n\n host: {\n '[class.sticky]': 'shStickyColumns() === \"start\"',\n '[class.sticky-end]': 'shStickyColumns() === \"end\"',\n },\n})\nexport class ShipStickyColumns {\n #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n #renderer = inject(Renderer2);\n\n shStickyColumns = input<'start' | 'end' | (string & {})>('start');\n\n ngAfterContentInit() {\n this.#applyGridColumnStyle();\n }\n\n #applyGridColumnStyle() {\n const nativeElement = this.#elementRef.nativeElement;\n const cellChildren = nativeElement.querySelectorAll<HTMLTableCellElement>(':scope > th, :scope > td');\n const columnSpanCount = cellChildren.length;\n\n if (columnSpanCount > 0) {\n const position = this.shStickyColumns();\n\n this.#renderer.setStyle(\n nativeElement,\n 'grid-column',\n position === 'end' ? `-${columnSpanCount + 1} / -1` : `1 / ${columnSpanCount + 1}`\n );\n }\n }\n}\n\nconst SCROLL_TOLERANCE = 1.5;\ntype ScrollState = -1 | 0 | 1;\n\n@Component({\n selector: 'sh-table',\n styleUrl: './ship-table.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipProgressBar],\n template: `\n <div class=\"actionbar\">\n <ng-content select=\"[actionbar]\" />\n </div>\n\n @if (loading()) {\n <sh-progress-bar class=\"indeterminate primary\" />\n }\n\n <thead #thead>\n <ng-content select=\"th\" />\n <ng-content select=\"[thead]\" />\n </thead>\n\n <tbody #tbody>\n <ng-content />\n </tbody>\n\n @if (!loading()) {\n <div class=\"no-rows\">\n <ng-content select=\"[table-no-rows]\" />\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.grid-template-columns]': 'columnSizes()',\n '[class.resizing]': 'resizing()',\n '(scroll)': 'onScroll()',\n '[class.can-scroll-x]': 'canScrollX()',\n '[class.can-scroll-y]': 'canScrollY()',\n '[class.scrolled-x]': 'scrollXState() >= 0',\n '[class.scrolled-x-end]': 'scrollXState() === 1',\n '[class.scrolled-y]': 'scrollYState() >= 0',\n '[class.scrolled-y-end]': 'scrollYState() === 1',\n },\n})\nexport class ShipTable {\n #el = inject(ElementRef);\n\n loading = input<boolean>(false);\n data = input<any>([]);\n dataChange = output<any>();\n sortByColumn = model<string | null>(null);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipTableVariant | null>(null);\n\n hostClasses = shipComponentClasses('table', {\n color: this.color,\n variant: this.variant,\n });\n\n thead = viewChild<ElementRef<HTMLTableSectionElement>>('thead');\n tbody = viewChild<ElementRef<HTMLTableSectionElement>>('tbody');\n columns = observeChildren<HTMLTableColElement>(this.thead, ['tr:first-child th']);\n\n stickyHeaderHeight = signal<number>(0);\n\n #destroyRef = inject(DestroyRef);\n #resizeObserver: ResizeObserver | null = null;\n\n theadEffect = effect(() => {\n const head = this.thead()?.nativeElement;\n \n if (this.#resizeObserver) {\n this.#resizeObserver.disconnect();\n this.#resizeObserver = null;\n }\n\n if (head && typeof ResizeObserver !== 'undefined') {\n this.#resizeObserver = new ResizeObserver((entries) => {\n const height = head.clientHeight;\n this.stickyHeaderHeight.set(height);\n });\n this.#resizeObserver.observe(head);\n }\n });\n\n #cleanup = this.#destroyRef.onDestroy(() => {\n this.#resizeObserver?.disconnect();\n });\n\n bodyEffect = effect(() => {\n const body = this.tbody()?.nativeElement;\n const head = this.thead()?.nativeElement;\n\n if (!body || !head) return;\n\n const stickyHeaderHeight = this.stickyHeaderHeight();\n\n queueMicrotask(() => {\n const hasStickyRowHeaderStartElement = head.querySelectorAll('tr.sticky').length > 0;\n const stickyBodyRows = body.querySelectorAll('tr.sticky');\n const hasStickyRowStartElement = stickyBodyRows.length > 0;\n\n if (hasStickyRowStartElement && hasStickyRowHeaderStartElement) {\n for (let index = 0; index < stickyBodyRows.length; index++) {\n (stickyBodyRows[index] as HTMLElement).style.top = `${stickyHeaderHeight}px`;\n }\n }\n });\n });\n\n resizing = signal(false);\n sizeTrigger = signal(true);\n #initialData: any | null = null;\n #initialDataSet = signal(false);\n scrollXState = signal<ScrollState>(-1);\n scrollYState = signal<ScrollState>(-1);\n canScrollX = signal(false);\n canScrollY = signal(false);\n\n columnSizes = computed(() => {\n this.sizeTrigger();\n const colSignal = this.columns.signal();\n\n return colSignal.reduce((acc: string, col: any, index: number) => {\n const colEl = col;\n const colSize = colEl.getAttribute('size');\n const last = index === colSignal.length - 1;\n\n if (colSize) {\n return `${acc} ${colSize}`;\n }\n\n if (colEl.classList.contains('sticky') || colEl.classList.contains('sticky-end')) {\n return `${acc} min-content`;\n }\n\n if (last) {\n return `${acc} 1fr`;\n }\n\n return `${acc} 1fr`;\n }, '');\n });\n\n updateColumnSizes() {\n this.sizeTrigger.set(!this.sizeTrigger());\n }\n\n onScroll(): void {\n this.#checkScroll();\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event: Event) {\n this.#checkScroll();\n }\n\n ngAfterViewInit() {\n queueMicrotask(() => this.#checkScroll());\n }\n\n e = effect(() => {\n const sortByColumn = this.sortByColumn();\n\n if (sortByColumn === null) {\n if (!this.#initialDataSet()) {\n this.#initialData = this.data();\n this.#initialDataSet.set(true);\n }\n\n return this.dataChange.emit(structuredClone(this.#initialData));\n }\n\n const column = sortByColumn.startsWith('-') ? sortByColumn.slice(1) : sortByColumn;\n const isDescending = sortByColumn.startsWith('-');\n\n const sortedData = this.data().sort((a: any, b: any) => {\n const valueA = a[column] as any;\n const valueB = b[column] as any;\n\n let comparison = 0;\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n comparison = valueA - valueB;\n }\n\n if (valueA instanceof Date && valueB instanceof Date) {\n comparison = valueA.getTime() - valueB.getTime();\n }\n\n if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n }\n\n return isDescending ? -comparison : comparison;\n });\n\n this.dataChange.emit(sortedData);\n });\n\n toggleSort(column: string) {\n const currentSort = this.sortByColumn();\n const sortDir = currentSort === column ? `-${column}` : currentSort === `-${column}` ? null : column;\n\n this.sortByColumn.set(sortDir);\n }\n\n #checkScroll(): void {\n const element = this.#el.nativeElement as HTMLElement;\n let nextXState: ScrollState = -1;\n let nextYState: ScrollState = -1;\n\n const canScrollX = element.scrollWidth > element.clientWidth + SCROLL_TOLERANCE;\n\n if (canScrollX) {\n const isAtStartX = element.scrollLeft <= SCROLL_TOLERANCE;\n const isAtEndX = element.scrollWidth - (element.scrollLeft + element.clientWidth) < SCROLL_TOLERANCE;\n\n if (isAtEndX) {\n nextXState = 1;\n } else if (!isAtStartX) {\n nextXState = 0;\n }\n }\n\n this.scrollXState.set(nextXState);\n this.canScrollX.set(canScrollX);\n\n const canScrollY = element.scrollHeight > element.clientHeight + SCROLL_TOLERANCE;\n\n if (canScrollY) {\n const isAtStartY = element.scrollTop <= SCROLL_TOLERANCE;\n const isAtEndY = element.scrollHeight - (element.scrollTop + element.clientHeight) < SCROLL_TOLERANCE;\n\n if (isAtEndY) {\n nextYState = 1;\n } else if (!isAtStartY) {\n nextYState = 0;\n }\n }\n\n this.scrollYState.set(nextYState);\n this.canScrollY.set(canScrollY);\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,38 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { ShipSelectionGroup, shipComponentClasses } from '@ship-ui/core';
4
+
5
+ class ShipTabs extends ShipSelectionGroup {
6
+ constructor() {
7
+ super('[value], [tab], button, a', 'active', { hostRole: 'tablist', itemRole: 'tab' });
8
+ this.id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);
9
+ this.color = input(null, /* @ts-ignore */
10
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
11
+ this.variant = input(null, /* @ts-ignore */
12
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
13
+ this.hostClasses = shipComponentClasses('tabs', {
14
+ color: this.color,
15
+ variant: this.variant,
16
+ });
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipTabs, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.0", type: ShipTabs, isStandalone: true, selector: "sh-tabs", 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()", "style.--tabs-id": "id" } }, usesInheritance: true, ngImport: i0, template: `
20
+ <ng-content />
21
+ `, isInline: true, styles: ["sh-tabs{--tabs-bc: var(--base-4);--tabs-bg: var(--base-1);--tabs-c: var(--base-12);--tabs-c-hover: var(--base-8);--tabs-c-active: var(--base-12);--tabs-f: var(--paragraph-30);--tabs-sel-bg: var(--base-12);display:flex;gap:1rem;border-bottom:var(--border-10);position:relative;overflow-x:auto;overflow-y:hidden;max-width:100%;scrollbar-width:none}sh-tabs::-webkit-scrollbar{display:none}sh-tabs button,sh-tabs [tab],sh-tabs [value]{display:flex;align-items:center;gap:.5rem;height:3rem;font:var(--tabs-f);background:var(--tabs-bg);border-radius:0;appearance:none;border:0;color:var(--tabs-c);cursor:pointer;position:relative;flex-shrink:0;white-space:nowrap;transition:transform 125ms linear;transform:scale(1)}sh-tabs button:focus-visible,sh-tabs [tab]:focus-visible,sh-tabs [value]:focus-visible{outline:2px solid var(--primary-8);outline-offset:-2px;border-radius:var(--shape-1)}sh-tabs button:active,sh-tabs [tab]:active,sh-tabs [value]:active{transform:scale(.98)}sh-tabs button:hover,sh-tabs [tab]:hover,sh-tabs [value]:hover{color:var(--tabs-c-hover)}sh-tabs button.active,sh-tabs [tab].active,sh-tabs [value].active{color:var(--tabs-c-active)}@supports (anchor-name: --anchor){sh-tabs button.active,sh-tabs [tab].active,sh-tabs [value].active{position:relative;anchor-name:var(--tabs-id)}}@supports not (anchor-name: --anchor){sh-tabs button.active:after,sh-tabs [tab].active:after,sh-tabs [value].active:after{display:block}}sh-tabs button:after,sh-tabs [tab]:after,sh-tabs [value]:after{content:\"\";display:none;width:100%;height:.125rem;background:var(--tabs-sel-bg);position:absolute;left:0;bottom:0}@supports (anchor-name: --anchor){sh-tabs button:after,sh-tabs [tab]:after,sh-tabs [value]:after{display:none}}@supports (anchor-name: --anchor){sh-tabs:after{content:\"\";background:var(--tabs-sel-bg);pointer-events:none;position:absolute;z-index:10;height:.125rem;bottom:anchor(bottom);left:anchor(left);right:anchor(right);position-anchor:var(--tabs-id);transition:all .175s ease-out}}sh-tabs.primary{--tabs-sel-bg: var(--primary-8);--tabs-c-active: var(--primary-8)}sh-tabs.accent{--tabs-sel-bg: var(--accent-8);--tabs-c-active: var(--accent-8)}sh-tabs.warn{--tabs-sel-bg: var(--warn-8);--tabs-c-active: var(--warn-8)}sh-tabs.error{--tabs-sel-bg: var(--error-8);--tabs-c-active: var(--error-8)}sh-tabs.success{--tabs-sel-bg: var(--success-8);--tabs-c-active: var(--success-8)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipTabs, decorators: [{
24
+ type: Component,
25
+ args: [{ selector: 'sh-tabs', encapsulation: ViewEncapsulation.None, imports: [], template: `
26
+ <ng-content />
27
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
28
+ '[class]': 'hostClasses()',
29
+ '[style.--tabs-id]': 'id',
30
+ }, styles: ["sh-tabs{--tabs-bc: var(--base-4);--tabs-bg: var(--base-1);--tabs-c: var(--base-12);--tabs-c-hover: var(--base-8);--tabs-c-active: var(--base-12);--tabs-f: var(--paragraph-30);--tabs-sel-bg: var(--base-12);display:flex;gap:1rem;border-bottom:var(--border-10);position:relative;overflow-x:auto;overflow-y:hidden;max-width:100%;scrollbar-width:none}sh-tabs::-webkit-scrollbar{display:none}sh-tabs button,sh-tabs [tab],sh-tabs [value]{display:flex;align-items:center;gap:.5rem;height:3rem;font:var(--tabs-f);background:var(--tabs-bg);border-radius:0;appearance:none;border:0;color:var(--tabs-c);cursor:pointer;position:relative;flex-shrink:0;white-space:nowrap;transition:transform 125ms linear;transform:scale(1)}sh-tabs button:focus-visible,sh-tabs [tab]:focus-visible,sh-tabs [value]:focus-visible{outline:2px solid var(--primary-8);outline-offset:-2px;border-radius:var(--shape-1)}sh-tabs button:active,sh-tabs [tab]:active,sh-tabs [value]:active{transform:scale(.98)}sh-tabs button:hover,sh-tabs [tab]:hover,sh-tabs [value]:hover{color:var(--tabs-c-hover)}sh-tabs button.active,sh-tabs [tab].active,sh-tabs [value].active{color:var(--tabs-c-active)}@supports (anchor-name: --anchor){sh-tabs button.active,sh-tabs [tab].active,sh-tabs [value].active{position:relative;anchor-name:var(--tabs-id)}}@supports not (anchor-name: --anchor){sh-tabs button.active:after,sh-tabs [tab].active:after,sh-tabs [value].active:after{display:block}}sh-tabs button:after,sh-tabs [tab]:after,sh-tabs [value]:after{content:\"\";display:none;width:100%;height:.125rem;background:var(--tabs-sel-bg);position:absolute;left:0;bottom:0}@supports (anchor-name: --anchor){sh-tabs button:after,sh-tabs [tab]:after,sh-tabs [value]:after{display:none}}@supports (anchor-name: --anchor){sh-tabs:after{content:\"\";background:var(--tabs-sel-bg);pointer-events:none;position:absolute;z-index:10;height:.125rem;bottom:anchor(bottom);left:anchor(left);right:anchor(right);position-anchor:var(--tabs-id);transition:all .175s ease-out}}sh-tabs.primary{--tabs-sel-bg: var(--primary-8);--tabs-c-active: var(--primary-8)}sh-tabs.accent{--tabs-sel-bg: var(--accent-8);--tabs-c-active: var(--accent-8)}sh-tabs.warn{--tabs-sel-bg: var(--warn-8);--tabs-c-active: var(--warn-8)}sh-tabs.error{--tabs-sel-bg: var(--error-8);--tabs-c-active: var(--error-8)}sh-tabs.success{--tabs-sel-bg: var(--success-8);--tabs-c-active: var(--success-8)}\n"] }]
31
+ }], ctorParameters: () => [], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
32
+
33
+ /**
34
+ * Generated bundle index. Do not edit.
35
+ */
36
+
37
+ export { ShipTabs };
38
+ //# sourceMappingURL=ship-ui-core-ship-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-tabs.mjs","sources":["../../../projects/ship-ui/ship-tabs/ship-tabs.ts","../../../projects/ship-ui/ship-tabs/ship-ui-core-ship-tabs.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\nimport { ShipSelectionGroup } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-tabs',\n styleUrl: './ship-tabs.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <ng-content />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[style.--tabs-id]': 'id',\n },\n})\nexport class ShipTabs extends ShipSelectionGroup<string> {\n id = '--' + Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 12);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n \n constructor() {\n super('[value], [tab], button, a', 'active', { hostRole: 'tablist', itemRole: 'tab' });\n }\n\n hostClasses = shipComponentClasses('tabs', {\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":";;;;AAmBM,MAAO,QAAS,SAAQ,kBAA0B,CAAA;AAMtD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC,2BAA2B,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AANxF,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;QAErG,IAAA,CAAA,KAAK,GAAG,KAAK,CAAmB,IAAI;kFAAC;QACrC,IAAA,CAAA,OAAO,GAAG,KAAK,CAA0B,IAAI;oFAAC;AAM9C,QAAA,IAAA,CAAA,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE;YACzC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,SAAA,CAAC;IALF;8GARW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,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,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EATT;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,41EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAOU,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAdpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,iBAEJ,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,EAAE,EAAA,QAAA,EACD;;GAET,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,mBAAmB,EAAE,IAAI;AAC1B,qBAAA,EAAA,MAAA,EAAA,CAAA,41EAAA,CAAA,EAAA;;;ACjBH;;AAEG;;;;"}
@@ -0,0 +1,119 @@
1
+ import { isPlatformServer } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, DOCUMENT, PLATFORM_ID, signal, effect, Injectable, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
4
+ import { ShipButton } from '@ship-ui/core/ship-button';
5
+ import { ShipIcon } from '@ship-ui/core/ship-icon';
6
+
7
+ const THEME_ORDER = ['light', 'dark', null];
8
+ const WINDOW = new InjectionToken('WindowToken', {
9
+ providedIn: 'root',
10
+ factory: () => (typeof window !== 'undefined' ? window : {}),
11
+ });
12
+ class ShipThemeState {
13
+ constructor() {
14
+ this.#document = inject(DOCUMENT);
15
+ this.#window = inject(WINDOW);
16
+ this.#platformId = inject(PLATFORM_ID);
17
+ this.#storedDarkMode = this.localStorage()?.getItem('shipTheme');
18
+ this.#theme = signal(this.#storedDarkMode, /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "#theme" }] : /* istanbul ignore next */ []));
20
+ this.theme = this.#theme.asReadonly();
21
+ this.darkModeEffect = effect(() => {
22
+ const theme = this.#theme();
23
+ if (theme === null) {
24
+ this.#document.documentElement.classList.remove('dark');
25
+ this.#document.documentElement.classList.remove('light');
26
+ return;
27
+ }
28
+ if (theme === 'dark') {
29
+ this.#document.documentElement.classList.add('dark');
30
+ this.#document.documentElement.classList.remove('light');
31
+ }
32
+ else {
33
+ this.#document.documentElement.classList.add('light');
34
+ this.#document.documentElement.classList.remove('dark');
35
+ }
36
+ }, /* @ts-ignore */
37
+ ...(ngDevMode ? [{ debugName: "darkModeEffect" }] : /* istanbul ignore next */ []));
38
+ }
39
+ #document;
40
+ #window;
41
+ #platformId;
42
+ #storedDarkMode;
43
+ #theme;
44
+ localStorage() {
45
+ if (isPlatformServer(this.#platformId))
46
+ return null;
47
+ return this.#window.localStorage;
48
+ }
49
+ toggleTheme() {
50
+ const nextTheme = this.#theme() === null ? THEME_ORDER[0] : THEME_ORDER[THEME_ORDER.indexOf(this.#theme()) + 1];
51
+ this.setTheme(nextTheme);
52
+ }
53
+ setTheme(theme) {
54
+ if (theme === null) {
55
+ this.localStorage()?.removeItem('shipTheme');
56
+ this.#theme.set(null);
57
+ return;
58
+ }
59
+ this.localStorage()?.setItem('shipTheme', theme);
60
+ this.#theme.set(theme);
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeState, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeState, providedIn: 'root' }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeState, decorators: [{
66
+ type: Injectable,
67
+ args: [{
68
+ providedIn: 'root',
69
+ }]
70
+ }] });
71
+
72
+ class ShipThemeToggle {
73
+ constructor() {
74
+ this.#themeState = inject(ShipThemeState);
75
+ this.theme = this.#themeState.theme;
76
+ }
77
+ #themeState;
78
+ toggleTheme() {
79
+ this.#themeState.toggleTheme();
80
+ }
81
+ setTheme(theme) {
82
+ this.#themeState.setTheme(theme);
83
+ }
84
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
85
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipThemeToggle, isStandalone: true, selector: "ship-theme-toggle", ngImport: i0, template: `
86
+ <button shButton size="small" (click)="toggleTheme()">
87
+ @if (theme() === 'dark') {
88
+ <sh-icon>moon-bold</sh-icon>
89
+ } @else if (theme() === 'light') {
90
+ <sh-icon>sun-bold</sh-icon>
91
+ } @else if (theme() === null) {
92
+ <sh-icon class="small-icon">sun-bold</sh-icon>
93
+ <sh-icon class="small-icon">moon-bold</sh-icon>
94
+ }
95
+ </button>
96
+ `, isInline: true, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}ship-theme-toggle [shButton].small sh-icon.small-icon{font-size:.625rem}ship-theme-toggle:has(sh-icon.small-icon) [shButton].small{gap:0}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:first-child{transform:translate(-.0625rem,-.25rem)}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:last-child{transform:translate(.0625rem,.25rem)}ship-theme-toggle:has(sh-icon.small-icon):after{content:\"\";height:1rem;width:1px;background:var(--base-12);position:absolute;inset:0;margin:auto;transform:rotate(30deg)}\n"], dependencies: [{ kind: "component", type: ShipIcon, selector: "sh-icon", inputs: ["color", "size"] }, { kind: "component", type: ShipButton, selector: "[shButton]", inputs: ["color", "variant", "size", "readonly"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeToggle, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: 'ship-theme-toggle', encapsulation: ViewEncapsulation.None, imports: [ShipIcon, ShipButton], template: `
101
+ <button shButton size="small" (click)="toggleTheme()">
102
+ @if (theme() === 'dark') {
103
+ <sh-icon>moon-bold</sh-icon>
104
+ } @else if (theme() === 'light') {
105
+ <sh-icon>sun-bold</sh-icon>
106
+ } @else if (theme() === null) {
107
+ <sh-icon class="small-icon">sun-bold</sh-icon>
108
+ <sh-icon class="small-icon">moon-bold</sh-icon>
109
+ }
110
+ </button>
111
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["ship-theme-toggle{display:flex;align-items:center;justify-content:center;position:relative}ship-theme-toggle [shButton].small sh-icon.small-icon{font-size:.625rem}ship-theme-toggle:has(sh-icon.small-icon) [shButton].small{gap:0}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:first-child{transform:translate(-.0625rem,-.25rem)}ship-theme-toggle:has(sh-icon.small-icon) sh-icon:last-child{transform:translate(.0625rem,.25rem)}ship-theme-toggle:has(sh-icon.small-icon):after{content:\"\";height:1rem;width:1px;background:var(--base-12);position:absolute;inset:0;margin:auto;transform:rotate(30deg)}\n"] }]
112
+ }] });
113
+
114
+ /**
115
+ * Generated bundle index. Do not edit.
116
+ */
117
+
118
+ export { ShipThemeState, ShipThemeToggle, THEME_ORDER, WINDOW };
119
+ //# sourceMappingURL=ship-ui-core-ship-theme-toggle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-theme-toggle.mjs","sources":["../../../projects/ship-ui/ship-theme-toggle/ship-theme-state.ts","../../../projects/ship-ui/ship-theme-toggle/ship-theme-toggle.ts","../../../projects/ship-ui/ship-theme-toggle/ship-ui-core-ship-theme-toggle.ts"],"sourcesContent":["import { isPlatformServer } from '@angular/common';\nimport { DOCUMENT, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\nexport type ShipThemeOption = 'light' | 'dark' | null;\nexport const THEME_ORDER: ShipThemeOption[] = ['light', 'dark', null];\n\nimport { InjectionToken } from '@angular/core';\n\nexport const WINDOW = new InjectionToken<Window>('WindowToken', {\n providedIn: 'root',\n factory: () => (typeof window !== 'undefined' ? window : ({} as Window)),\n});\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ShipThemeState {\n #document = inject(DOCUMENT);\n #window = inject(WINDOW);\n #platformId = inject(PLATFORM_ID);\n #storedDarkMode = this.localStorage()?.getItem('shipTheme') as ShipThemeOption;\n #theme = signal<ShipThemeOption>(this.#storedDarkMode);\n\n theme = this.#theme.asReadonly();\n\n darkModeEffect = effect(() => {\n const theme = this.#theme();\n\n if (theme === null) {\n this.#document.documentElement.classList.remove('dark');\n this.#document.documentElement.classList.remove('light');\n return;\n }\n\n if (theme === 'dark') {\n this.#document.documentElement.classList.add('dark');\n this.#document.documentElement.classList.remove('light');\n } else {\n this.#document.documentElement.classList.add('light');\n this.#document.documentElement.classList.remove('dark');\n }\n });\n\n localStorage() {\n if (isPlatformServer(this.#platformId)) return null;\n\n return this.#window.localStorage;\n }\n\n toggleTheme() {\n const nextTheme = this.#theme() === null ? THEME_ORDER[0] : THEME_ORDER[THEME_ORDER.indexOf(this.#theme()) + 1];\n\n this.setTheme(nextTheme);\n }\n\n setTheme(theme: ShipThemeOption) {\n if (theme === null) {\n this.localStorage()?.removeItem('shipTheme');\n this.#theme.set(null);\n return;\n }\n\n this.localStorage()?.setItem('shipTheme', theme);\n this.#theme.set(theme);\n }\n}\n","import { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { ShipButton } from '@ship-ui/core/ship-button';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipThemeOption, ShipThemeState } from './ship-theme-state';\n\n@Component({\n selector: 'ship-theme-toggle',\n styleUrl: './ship-theme-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon, ShipButton],\n template: `\n <button shButton size=\"small\" (click)=\"toggleTheme()\">\n @if (theme() === 'dark') {\n <sh-icon>moon-bold</sh-icon>\n } @else if (theme() === 'light') {\n <sh-icon>sun-bold</sh-icon>\n } @else if (theme() === null) {\n <sh-icon class=\"small-icon\">sun-bold</sh-icon>\n <sh-icon class=\"small-icon\">moon-bold</sh-icon>\n }\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipThemeToggle {\n #themeState = inject(ShipThemeState);\n\n theme = this.#themeState.theme;\n\n toggleTheme() {\n this.#themeState.toggleTheme();\n }\n\n setTheme(theme: ShipThemeOption) {\n this.#themeState.setTheme(theme);\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,75 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, model, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { ShipIcon } from '@ship-ui/core/ship-icon';
4
+ import { shipComponentClasses } from '@ship-ui/core';
5
+
6
+ class ShipToggleCard {
7
+ constructor() {
8
+ this.disableToggle = input(false, /* @ts-ignore */
9
+ ...(ngDevMode ? [{ debugName: "disableToggle" }] : /* istanbul ignore next */ []));
10
+ this.isActive = model(false, /* @ts-ignore */
11
+ ...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
12
+ this.#disabledEffect = effect(() => {
13
+ if (this.disableToggle()) {
14
+ this.isActive.set(true);
15
+ }
16
+ }, /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "#disabledEffect" }] : /* istanbul ignore next */ []));
18
+ this.color = input(null, /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
20
+ this.variant = input(null, /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
22
+ this.hostClasses = shipComponentClasses('card', {
23
+ color: this.color,
24
+ variant: this.variant,
25
+ });
26
+ }
27
+ #disabledEffect;
28
+ toggle() {
29
+ this.isActive.set(!this.isActive());
30
+ }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggleCard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipToggleCard, isStandalone: true, selector: "sh-toggle-card", inputs: { disableToggle: { classPropertyName: "disableToggle", publicName: "disableToggle", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: "isActive", publicName: "isActive", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isActive: "isActiveChange" }, host: { properties: { "class.active": "isActive()", "class": "hostClasses()" } }, ngImport: i0, template: `
33
+ <h3 (click)="!disableToggle() && toggle()">
34
+ <ng-content select="[title]">Title</ng-content>
35
+
36
+ @if (!disableToggle()) {
37
+ <sh-icon class="toggle-icon">caret-down</sh-icon>
38
+ }
39
+ </h3>
40
+
41
+ <div class="collapsable">
42
+ <div class="content">
43
+ <ng-content />
44
+ </div>
45
+ </div>
46
+ `, isInline: true, styles: ["sh-toggle-card{display:flex;flex-direction:column;border-radius:var(--shape-3);background-color:var(--base-2)}sh-toggle-card.type-a{background-color:transparent;border:var(--border-10)}sh-toggle-card.active .collapsable{grid-template-rows:1fr}sh-toggle-card.active .content{padding:0 1rem 1rem}sh-toggle-card.active .content:empty{padding:0 1rem}sh-toggle-card.active sh-icon.toggle-icon{transform:rotate(180deg)}sh-toggle-card h3{display:flex;align-items:center;justify-content:space-between;font:var(--paragraph-10);padding:1rem;cursor:pointer;-webkit-user-select:none;user-select:none}sh-toggle-card sh-icon.toggle-icon{cursor:pointer;transform:rotate(0);transform-origin:center;transition:transform .2s ease}sh-toggle-card .collapsable{display:grid;grid-template-rows:0fr;transition:grid-template-rows .5s linear;overflow:hidden}sh-toggle-card .content{display:flex;flex-direction:column;gap:1rem;padding:0 1rem;min-height:0;overflow:hidden}\n"], dependencies: [{ kind: "component", type: ShipIcon, selector: "sh-icon", inputs: ["color", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggleCard, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'sh-toggle-card', encapsulation: ViewEncapsulation.None, imports: [ShipIcon], template: `
51
+ <h3 (click)="!disableToggle() && toggle()">
52
+ <ng-content select="[title]">Title</ng-content>
53
+
54
+ @if (!disableToggle()) {
55
+ <sh-icon class="toggle-icon">caret-down</sh-icon>
56
+ }
57
+ </h3>
58
+
59
+ <div class="collapsable">
60
+ <div class="content">
61
+ <ng-content />
62
+ </div>
63
+ </div>
64
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
65
+ '[class.active]': 'isActive()',
66
+ '[class]': 'hostClasses()',
67
+ }, styles: ["sh-toggle-card{display:flex;flex-direction:column;border-radius:var(--shape-3);background-color:var(--base-2)}sh-toggle-card.type-a{background-color:transparent;border:var(--border-10)}sh-toggle-card.active .collapsable{grid-template-rows:1fr}sh-toggle-card.active .content{padding:0 1rem 1rem}sh-toggle-card.active .content:empty{padding:0 1rem}sh-toggle-card.active sh-icon.toggle-icon{transform:rotate(180deg)}sh-toggle-card h3{display:flex;align-items:center;justify-content:space-between;font:var(--paragraph-10);padding:1rem;cursor:pointer;-webkit-user-select:none;user-select:none}sh-toggle-card sh-icon.toggle-icon{cursor:pointer;transform:rotate(0);transform-origin:center;transition:transform .2s ease}sh-toggle-card .collapsable{display:grid;grid-template-rows:0fr;transition:grid-template-rows .5s linear;overflow:hidden}sh-toggle-card .content{display:flex;flex-direction:column;gap:1rem;padding:0 1rem;min-height:0;overflow:hidden}\n"] }]
68
+ }], propDecorators: { disableToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableToggle", required: false }] }], isActive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isActive", required: false }] }, { type: i0.Output, args: ["isActiveChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
69
+
70
+ /**
71
+ * Generated bundle index. Do not edit.
72
+ */
73
+
74
+ export { ShipToggleCard };
75
+ //# sourceMappingURL=ship-ui-core-ship-toggle-card.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-toggle-card.mjs","sources":["../../../projects/ship-ui/ship-toggle-card/ship-toggle-card.ts","../../../projects/ship-ui/ship-toggle-card/ship-ui-core-ship-toggle-card.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, input, model, ViewEncapsulation } from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipCardVariant, ShipColor } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-toggle-card',\n styleUrl: './ship-toggle-card.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [ShipIcon],\n template: `\n <h3 (click)=\"!disableToggle() && toggle()\">\n <ng-content select=\"[title]\">Title</ng-content>\n\n @if (!disableToggle()) {\n <sh-icon class=\"toggle-icon\">caret-down</sh-icon>\n }\n </h3>\n\n <div class=\"collapsable\">\n <div class=\"content\">\n <ng-content />\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.active]': 'isActive()',\n '[class]': 'hostClasses()',\n },\n})\nexport class ShipToggleCard {\n disableToggle = input(false);\n isActive = model<boolean>(false);\n\n #disabledEffect = effect(() => {\n if (this.disableToggle()) {\n this.isActive.set(true);\n }\n });\n\n color = input<ShipColor | null>(null);\n variant = input<ShipCardVariant | null>(null);\n hostClasses = shipComponentClasses('card', {\n color: this.color,\n variant: this.variant,\n });\n\n toggle() {\n this.isActive.set(!this.isActive());\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,105 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, viewChild, model, input, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
3
+ import { contentProjectionSignal, shipComponentClasses } from '@ship-ui/core';
4
+
5
+ class ShipToggle {
6
+ constructor() {
7
+ this._elementRef = inject(ElementRef);
8
+ this.internalInput = viewChild('internalInput', /* @ts-ignore */
9
+ ...(ngDevMode ? [{ debugName: "internalInput" }] : /* istanbul ignore next */ []));
10
+ this.projectedInputs = contentProjectionSignal('input:not(.internal-input)', {
11
+ childList: true,
12
+ attributes: true,
13
+ });
14
+ this.checked = model(false, /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
16
+ this.color = input(null, /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
18
+ this.variant = input(null, /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
20
+ this.readonly = input(false, /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
22
+ this.disabled = input(false, /* @ts-ignore */
23
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
24
+ this.noInternalInput = input(false, /* @ts-ignore */
25
+ ...(ngDevMode ? [{ debugName: "noInternalInput" }] : /* istanbul ignore next */ []));
26
+ this.hostClasses = shipComponentClasses('toggle', {
27
+ color: this.color,
28
+ variant: this.variant,
29
+ readonly: this.readonly,
30
+ });
31
+ }
32
+ onInternalInputChange(event) {
33
+ if (this.disabled())
34
+ return;
35
+ const input = event.target;
36
+ this.checked.set(input.checked);
37
+ }
38
+ onEnter(event) {
39
+ const inputEl = this.internalInput()?.nativeElement;
40
+ if (inputEl && getComputedStyle(inputEl).display !== 'none') {
41
+ inputEl.click();
42
+ }
43
+ else {
44
+ this._elementRef.nativeElement.click();
45
+ }
46
+ event.preventDefault();
47
+ }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipToggle, isStandalone: true, selector: "sh-toggle", inputs: { checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, noInternalInput: { classPropertyName: "noInternalInput", publicName: "noInternalInput", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange" }, host: { listeners: { "keydown.enter": "onEnter($event)", "keydown.space": "onEnter($event)" }, properties: { "class": "hostClasses()", "attr.disabled": "disabled() ? \"\" : null", "attr.role": "noInternalInput() ? \"switch\" : null", "attr.aria-checked": "noInternalInput() ? checked() : null", "attr.tabindex": "noInternalInput() ? (disabled() ? \"-1\" : \"0\") : null" } }, viewQueries: [{ propertyName: "internalInput", first: true, predicate: ["internalInput"], descendants: true, isSignal: true }], ngImport: i0, template: `
50
+ <div class="box">
51
+ <div class="knob"></div>
52
+ </div>
53
+
54
+ <ng-content />
55
+
56
+ @if (projectedInputs().length === 0 && !noInternalInput()) {
57
+ <input
58
+ #internalInput
59
+ type="checkbox"
60
+ class="internal-input"
61
+ [attr.disabled]="disabled() ? '' : null"
62
+ [checked]="checked()"
63
+ (change)="onInternalInputChange($event)" />
64
+ }
65
+ `, isInline: true, styles: ["sh-toggle{--toggle-bg: var(--base-4);--toggle-b: 0;--togglek-bg: var(--base-2);--togglek-bs: var(--box-shadow-20);display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}sh-toggle:focus-visible>.box,sh-toggle:has(input:focus-visible)>.box{outline:2px solid var(--primary-8);outline-offset:2px}sh-toggle label{display:flex;align-items:center;gap:.5rem;position:relative;z-index:1}sh-toggle .box{display:block;width:2.125rem;min-width:2.125rem;height:1.25rem;cursor:pointer;position:relative;border-radius:999px;background:var(--toggle-bg);border:var(--toggle-b);transition:background .15s linear}sh-toggle>input[type=checkbox]{appearance:none;position:absolute;inset:0;cursor:pointer;z-index:0;margin:0}sh-toggle>input[type=checkbox]:focus,sh-toggle>input[type=checkbox]:focus-visible{outline:none}sh-toggle:has(>input:not(.internal-input))>input.internal-input{display:none}sh-toggle:has(input[disabled]),sh-toggle[disabled]:not([disabled=false]){opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:initial}sh-toggle .knob{position:absolute;top:.125rem;left:.125rem;width:1rem;height:1rem;border-radius:50%;background:var(--togglek-bg);box-shadow:var(--togglek-bs);box-sizing:border-box;transition:left 125ms ease-in-out}sh-toggle:has(input[type=checkbox]:checked),sh-toggle.active{--togglek-bg: var(--base-8)}sh-toggle:has(input[type=checkbox]:checked) .knob,sh-toggle.active .knob{left:1rem}sh-toggle:has(input[type=checkbox]:checked).primary,sh-toggle.active.primary{--toggle-bg: var(--primary-3);--togglek-bg: var(--primary-8)}sh-toggle:has(input[type=checkbox]:checked).accent,sh-toggle.active.accent{--toggle-bg: var(--accent-3);--togglek-bg: var(--accent-8)}sh-toggle:has(input[type=checkbox]:checked).warn,sh-toggle.active.warn{--toggle-bg: var(--warn-3);--togglek-bg: var(--warn-8)}sh-toggle:has(input[type=checkbox]:checked).error,sh-toggle.active.error{--toggle-bg: var(--error-3);--togglek-bg: var(--error-8)}sh-toggle:has(input[type=checkbox]:checked).success,sh-toggle.active.success{--toggle-bg: var(--success-3);--togglek-bg: var(--success-8)}sh-toggle.outlined{--toggle-bg: var(--base-1);--togglek-bg: var(--base-5);--togglek-bs: none;--toggle-b: 1px solid var(--base-5)}sh-toggle.outlined .knob{width:.875rem;height:.875rem}sh-toggle.outlined.active{--togglek-bg: var(--base-8);--toggle-b: 1px solid var(--base-8)}sh-toggle.outlined.active.primary{--togglek-bg: var(--primary-8);--toggle-b: 1px solid var(--primary-8)}sh-toggle.outlined.active.accent{--togglek-bg: var(--accent-8);--toggle-b: 1px solid var(--accent-8)}sh-toggle.outlined.active.warn{--togglek-bg: var(--warn-8);--toggle-b: 1px solid var(--warn-8)}sh-toggle.outlined.active.error{--togglek-bg: var(--error-8);--toggle-b: 1px solid var(--error-8)}sh-toggle.outlined.active.success{--togglek-bg: var(--success-8);--toggle-b: 1px solid var(--success-8)}sh-toggle.simple{--togglek-bg: #fff}sh-toggle.simple:has(input[type=checkbox]:checked),sh-toggle.simple.active{--togglek-bg: var(--base-8)}sh-toggle.simple:has(input[type=checkbox]:checked).primary,sh-toggle.simple.active.primary{--togglek-bg: var(--primary-8);--toggle-bg: var(--primary-3)}sh-toggle.simple:has(input[type=checkbox]:checked).accent,sh-toggle.simple.active.accent{--togglek-bg: var(--accent-8);--toggle-bg: var(--accent-3)}sh-toggle.simple:has(input[type=checkbox]:checked).warn,sh-toggle.simple.active.warn{--togglek-bg: var(--warn-8);--toggle-bg: var(--warn-3)}sh-toggle.simple:has(input[type=checkbox]:checked).error,sh-toggle.simple.active.error{--togglek-bg: var(--error-8);--toggle-bg: var(--error-3)}sh-toggle.simple:has(input[type=checkbox]:checked).success,sh-toggle.simple.active.success{--togglek-bg: var(--success-8);--toggle-bg: var(--success-3)}sh-toggle.flat{--togglek-bg: #fff}sh-toggle.flat:has(input[type=checkbox]:checked),sh-toggle.flat.active{--togglek-bg: #fff;--toggle-bg: var(--base-8)}sh-toggle.flat:has(input[type=checkbox]:checked).primary,sh-toggle.flat.active.primary{--toggle-bg: var(--primary-8)}sh-toggle.flat:has(input[type=checkbox]:checked).accent,sh-toggle.flat.active.accent{--toggle-bg: var(--accent-8)}sh-toggle.flat:has(input[type=checkbox]:checked).warn,sh-toggle.flat.active.warn{--toggle-bg: var(--warn-8)}sh-toggle.flat:has(input[type=checkbox]:checked).error,sh-toggle.flat.active.error{--toggle-bg: var(--error-8)}sh-toggle.flat:has(input[type=checkbox]:checked).success,sh-toggle.flat.active.success{--toggle-bg: var(--success-8)}sh-toggle.raised{--togglek-bg: #fff}sh-toggle.raised:has(input[type=checkbox]:checked),sh-toggle.raised.active{--toggle-bg: var(--base-g2);--togglek-bg: #fff}sh-toggle.raised:has(input[type=checkbox]:checked).primary,sh-toggle.raised.active.primary{--toggle-bg: var(--primary-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).accent,sh-toggle.raised.active.accent{--toggle-bg: var(--accent-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).warn,sh-toggle.raised.active.warn{--toggle-bg: var(--warn-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).error,sh-toggle.raised.active.error{--toggle-bg: var(--error-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).success,sh-toggle.raised.active.success{--toggle-bg: var(--success-g2)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
66
+ }
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggle, decorators: [{
68
+ type: Component,
69
+ args: [{ selector: 'sh-toggle', encapsulation: ViewEncapsulation.None, imports: [], template: `
70
+ <div class="box">
71
+ <div class="knob"></div>
72
+ </div>
73
+
74
+ <ng-content />
75
+
76
+ @if (projectedInputs().length === 0 && !noInternalInput()) {
77
+ <input
78
+ #internalInput
79
+ type="checkbox"
80
+ class="internal-input"
81
+ [attr.disabled]="disabled() ? '' : null"
82
+ [checked]="checked()"
83
+ (change)="onInternalInputChange($event)" />
84
+ }
85
+ `, changeDetection: ChangeDetectionStrategy.OnPush, host: {
86
+ '[class]': 'hostClasses()',
87
+ '[attr.disabled]': 'disabled() ? "" : null',
88
+ '[attr.role]': 'noInternalInput() ? "switch" : null',
89
+ '[attr.aria-checked]': 'noInternalInput() ? checked() : null',
90
+ '[attr.tabindex]': 'noInternalInput() ? (disabled() ? "-1" : "0") : null',
91
+ }, styles: ["sh-toggle{--toggle-bg: var(--base-4);--toggle-b: 0;--togglek-bg: var(--base-2);--togglek-bs: var(--box-shadow-20);display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;position:relative}sh-toggle:focus-visible>.box,sh-toggle:has(input:focus-visible)>.box{outline:2px solid var(--primary-8);outline-offset:2px}sh-toggle label{display:flex;align-items:center;gap:.5rem;position:relative;z-index:1}sh-toggle .box{display:block;width:2.125rem;min-width:2.125rem;height:1.25rem;cursor:pointer;position:relative;border-radius:999px;background:var(--toggle-bg);border:var(--toggle-b);transition:background .15s linear}sh-toggle>input[type=checkbox]{appearance:none;position:absolute;inset:0;cursor:pointer;z-index:0;margin:0}sh-toggle>input[type=checkbox]:focus,sh-toggle>input[type=checkbox]:focus-visible{outline:none}sh-toggle:has(>input:not(.internal-input))>input.internal-input{display:none}sh-toggle:has(input[disabled]),sh-toggle[disabled]:not([disabled=false]){opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none;cursor:initial}sh-toggle .knob{position:absolute;top:.125rem;left:.125rem;width:1rem;height:1rem;border-radius:50%;background:var(--togglek-bg);box-shadow:var(--togglek-bs);box-sizing:border-box;transition:left 125ms ease-in-out}sh-toggle:has(input[type=checkbox]:checked),sh-toggle.active{--togglek-bg: var(--base-8)}sh-toggle:has(input[type=checkbox]:checked) .knob,sh-toggle.active .knob{left:1rem}sh-toggle:has(input[type=checkbox]:checked).primary,sh-toggle.active.primary{--toggle-bg: var(--primary-3);--togglek-bg: var(--primary-8)}sh-toggle:has(input[type=checkbox]:checked).accent,sh-toggle.active.accent{--toggle-bg: var(--accent-3);--togglek-bg: var(--accent-8)}sh-toggle:has(input[type=checkbox]:checked).warn,sh-toggle.active.warn{--toggle-bg: var(--warn-3);--togglek-bg: var(--warn-8)}sh-toggle:has(input[type=checkbox]:checked).error,sh-toggle.active.error{--toggle-bg: var(--error-3);--togglek-bg: var(--error-8)}sh-toggle:has(input[type=checkbox]:checked).success,sh-toggle.active.success{--toggle-bg: var(--success-3);--togglek-bg: var(--success-8)}sh-toggle.outlined{--toggle-bg: var(--base-1);--togglek-bg: var(--base-5);--togglek-bs: none;--toggle-b: 1px solid var(--base-5)}sh-toggle.outlined .knob{width:.875rem;height:.875rem}sh-toggle.outlined.active{--togglek-bg: var(--base-8);--toggle-b: 1px solid var(--base-8)}sh-toggle.outlined.active.primary{--togglek-bg: var(--primary-8);--toggle-b: 1px solid var(--primary-8)}sh-toggle.outlined.active.accent{--togglek-bg: var(--accent-8);--toggle-b: 1px solid var(--accent-8)}sh-toggle.outlined.active.warn{--togglek-bg: var(--warn-8);--toggle-b: 1px solid var(--warn-8)}sh-toggle.outlined.active.error{--togglek-bg: var(--error-8);--toggle-b: 1px solid var(--error-8)}sh-toggle.outlined.active.success{--togglek-bg: var(--success-8);--toggle-b: 1px solid var(--success-8)}sh-toggle.simple{--togglek-bg: #fff}sh-toggle.simple:has(input[type=checkbox]:checked),sh-toggle.simple.active{--togglek-bg: var(--base-8)}sh-toggle.simple:has(input[type=checkbox]:checked).primary,sh-toggle.simple.active.primary{--togglek-bg: var(--primary-8);--toggle-bg: var(--primary-3)}sh-toggle.simple:has(input[type=checkbox]:checked).accent,sh-toggle.simple.active.accent{--togglek-bg: var(--accent-8);--toggle-bg: var(--accent-3)}sh-toggle.simple:has(input[type=checkbox]:checked).warn,sh-toggle.simple.active.warn{--togglek-bg: var(--warn-8);--toggle-bg: var(--warn-3)}sh-toggle.simple:has(input[type=checkbox]:checked).error,sh-toggle.simple.active.error{--togglek-bg: var(--error-8);--toggle-bg: var(--error-3)}sh-toggle.simple:has(input[type=checkbox]:checked).success,sh-toggle.simple.active.success{--togglek-bg: var(--success-8);--toggle-bg: var(--success-3)}sh-toggle.flat{--togglek-bg: #fff}sh-toggle.flat:has(input[type=checkbox]:checked),sh-toggle.flat.active{--togglek-bg: #fff;--toggle-bg: var(--base-8)}sh-toggle.flat:has(input[type=checkbox]:checked).primary,sh-toggle.flat.active.primary{--toggle-bg: var(--primary-8)}sh-toggle.flat:has(input[type=checkbox]:checked).accent,sh-toggle.flat.active.accent{--toggle-bg: var(--accent-8)}sh-toggle.flat:has(input[type=checkbox]:checked).warn,sh-toggle.flat.active.warn{--toggle-bg: var(--warn-8)}sh-toggle.flat:has(input[type=checkbox]:checked).error,sh-toggle.flat.active.error{--toggle-bg: var(--error-8)}sh-toggle.flat:has(input[type=checkbox]:checked).success,sh-toggle.flat.active.success{--toggle-bg: var(--success-8)}sh-toggle.raised{--togglek-bg: #fff}sh-toggle.raised:has(input[type=checkbox]:checked),sh-toggle.raised.active{--toggle-bg: var(--base-g2);--togglek-bg: #fff}sh-toggle.raised:has(input[type=checkbox]:checked).primary,sh-toggle.raised.active.primary{--toggle-bg: var(--primary-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).accent,sh-toggle.raised.active.accent{--toggle-bg: var(--accent-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).warn,sh-toggle.raised.active.warn{--toggle-bg: var(--warn-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).error,sh-toggle.raised.active.error{--toggle-bg: var(--error-g2)}sh-toggle.raised:has(input[type=checkbox]:checked).success,sh-toggle.raised.active.success{--toggle-bg: var(--success-g2)}\n"] }]
92
+ }], propDecorators: { internalInput: [{ type: i0.ViewChild, args: ['internalInput', { isSignal: true }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], noInternalInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "noInternalInput", required: false }] }], onEnter: [{
93
+ type: HostListener,
94
+ args: ['keydown.enter', ['$event']]
95
+ }, {
96
+ type: HostListener,
97
+ args: ['keydown.space', ['$event']]
98
+ }] } });
99
+
100
+ /**
101
+ * Generated bundle index. Do not edit.
102
+ */
103
+
104
+ export { ShipToggle };
105
+ //# sourceMappingURL=ship-ui-core-ship-toggle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ship-ui-core-ship-toggle.mjs","sources":["../../../projects/ship-ui/ship-toggle/ship-toggle.ts","../../../projects/ship-ui/ship-toggle/ship-ui-core-ship-toggle.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef, HostListener, inject, input, model, viewChild, ViewEncapsulation } from '@angular/core';\nimport { contentProjectionSignal } from '@ship-ui/core';\nimport { shipComponentClasses } from '@ship-ui/core';\nimport { ShipColor, ShipSheetVariant } from '@ship-ui/core';\n\n@Component({\n selector: 'sh-toggle',\n styleUrl: './ship-toggle.scss',\n encapsulation: ViewEncapsulation.None,\n imports: [],\n template: `\n <div class=\"box\">\n <div class=\"knob\"></div>\n </div>\n\n <ng-content />\n\n @if (projectedInputs().length === 0 && !noInternalInput()) {\n <input\n #internalInput\n type=\"checkbox\"\n class=\"internal-input\"\n [attr.disabled]=\"disabled() ? '' : null\"\n [checked]=\"checked()\"\n (change)=\"onInternalInputChange($event)\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'disabled() ? \"\" : null',\n '[attr.role]': 'noInternalInput() ? \"switch\" : null',\n '[attr.aria-checked]': 'noInternalInput() ? checked() : null',\n '[attr.tabindex]': 'noInternalInput() ? (disabled() ? \"-1\" : \"0\") : null',\n },\n})\nexport class ShipToggle {\n private readonly _elementRef = inject(ElementRef);\n\n internalInput = viewChild<ElementRef<HTMLInputElement>>('internalInput');\n projectedInputs = contentProjectionSignal<HTMLInputElement>('input:not(.internal-input)', {\n childList: true,\n attributes: true,\n });\n\n checked = model<boolean>(false);\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n readonly = input<boolean>(false);\n disabled = input<boolean>(false);\n noInternalInput = input<boolean>(false);\n\n protected onInternalInputChange(event: Event) {\n if (this.disabled()) return;\n\n const input = event.target as HTMLInputElement;\n this.checked.set(input.checked);\n }\n\n hostClasses = shipComponentClasses('toggle', {\n color: this.color,\n variant: this.variant,\n readonly: this.readonly,\n });\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.space', ['$event'])\n protected onEnter(event: Event) {\n const inputEl = this.internalInput()?.nativeElement;\n if (inputEl && getComputedStyle(inputEl).display !== 'none') {\n inputEl.click();\n } else {\n this._elementRef.nativeElement.click();\n }\n event.preventDefault();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}