@ship-ui/core 0.22.14 → 0.22.16
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.
- package/README.md +46 -0
- package/assets/mcp/components.json +605 -4
- package/bin/src/scanner.zig +9 -18
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs +17 -2
- package/fesm2022/ship-ui-core-sh-form-field-experimental.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs +442 -0
- package/fesm2022/ship-ui-core-ship-a11y-keybindings.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs +1 -0
- package/fesm2022/ship-ui-core-ship-accordion.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-alert.mjs +3 -2
- package/fesm2022/ship-ui-core-ship-alert.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-blueprint.mjs +23 -10
- package/fesm2022/ship-ui-core-ship-blueprint.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-checkbox.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-checkbox.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-color-picker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-datepicker.mjs +67 -33
- package/fesm2022/ship-ui-core-ship-datepicker.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-dialog.mjs +14 -5
- package/fesm2022/ship-ui-core-ship-dialog.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-divider.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-divider.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-editor.mjs +2673 -0
- package/fesm2022/ship-ui-core-ship-editor.mjs.map +1 -0
- package/fesm2022/ship-ui-core-ship-icon.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-icon.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-list.mjs +4 -2
- package/fesm2022/ship-ui-core-ship-list.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-menu.mjs +8 -5
- package/fesm2022/ship-ui-core-ship-menu.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-popover.mjs +14 -5
- package/fesm2022/ship-ui-core-ship-popover.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs +5 -1
- package/fesm2022/ship-ui-core-ship-progress-bar.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-radio.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-radio.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-select.mjs +9 -9
- package/fesm2022/ship-ui-core-ship-select.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-sidenav.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-sidenav.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spinner.mjs +3 -1
- package/fesm2022/ship-ui-core-ship-spinner.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-spotlight.mjs +77 -24
- package/fesm2022/ship-ui-core-ship-spotlight.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-table.mjs +517 -138
- package/fesm2022/ship-ui-core-ship-table.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-theme-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs +24 -3
- package/fesm2022/ship-ui-core-ship-toggle-card.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-toggle.mjs +16 -14
- package/fesm2022/ship-ui-core-ship-toggle.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-tree.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-tree.mjs.map +1 -1
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs +2 -2
- package/fesm2022/ship-ui-core-ship-virtual-scroll.mjs.map +1 -1
- package/fesm2022/ship-ui-core.mjs +36 -23
- package/fesm2022/ship-ui-core.mjs.map +1 -1
- package/package.json +33 -2
- package/types/ship-ui-core-sh-form-field-experimental.d.ts +2 -0
- package/types/ship-ui-core-ship-a11y-keybindings.d.ts +102 -0
- package/types/ship-ui-core-ship-blueprint.d.ts +2 -1
- package/types/ship-ui-core-ship-checkbox.d.ts +2 -1
- package/types/ship-ui-core-ship-datepicker.d.ts +2 -0
- package/types/ship-ui-core-ship-editor.d.ts +168 -0
- package/types/ship-ui-core-ship-radio.d.ts +2 -1
- package/types/ship-ui-core-ship-spotlight.d.ts +1 -1
- package/types/ship-ui-core-ship-table.d.ts +13 -1
- package/types/ship-ui-core-ship-toggle-card.d.ts +1 -0
- package/types/ship-ui-core-ship-toggle.d.ts +2 -1
- package/types/ship-ui-core.d.ts +3 -0
- package/bin/ship-fg-scanner +0 -0
|
@@ -1 +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 { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n input,\n model,\n output,\n Renderer2,\n signal,\n TemplateRef,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { observeChildren, ShipColor, shipComponentClasses, ShipTableVariant } from '@ship-ui/core';\nimport { ShipChip } from '@ship-ui/core/ship-chip';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipProgressBar } from '@ship-ui/core/ship-progress-bar';\n\nexport interface ShipTableColumn<T = any> {\n id: string;\n header: string;\n accessorKey?: keyof T | string;\n type?: 'string' | 'number' | 'date' | 'boolean' | 'badge' | (string & {});\n sortable?: boolean;\n resizable?: boolean;\n minWidth?: number;\n maxWidth?: number;\n size?: string;\n sticky?: 'start' | 'end' | null;\n cell?: (row: T) => any;\n cellTemplate?: TemplateRef<any> | null;\n format?: (value: any, row: T) => any;\n sortPredicate?: (a: T, b: T) => number;\n rowHeader?: boolean;\n}\n\n@Directive({\n selector: '[shResize]',\n standalone: true,\n host: {\n '[class.resizing]': 'resizingClass()',\n },\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 resizingClass = signal(false);\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.resizingClass.set(false);\n\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n this.#animationFrameRequest = null;\n }\n\n // Delay resetting the table's resizing state to block sorting clicks immediately after resizing\n setTimeout(() => {\n this.#table.resizing.set(false);\n }, 50);\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.resizingClass.set(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 role: 'columnheader',\n '[class.sortable]': '!!shSort()',\n '[attr.tabindex]': 'shSort() ? \"0\" : null',\n '(click)': 'shSort() ? toggleSort() : null',\n '(keydown.enter)': 'shSort() ? toggleSort() : null',\n '(keydown.space)': 'shSort() ? toggleSort($event) : null',\n '[attr.aria-sort]': 'shSort() ? ariaSort() : null',\n '[class.sort-asc]': 'sortAsc()',\n '[class.sort-desc]': 'sortDesc()',\n },\n})\nexport class ShipSort {\n #table = inject(ShipTable);\n shSort = input<string | undefined>();\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 ariaSort = computed(() => {\n if (this.sortAsc()) return 'ascending';\n if (this.sortDesc()) return 'descending';\n return 'none';\n });\n\n toggleSort(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n if (this.#table.resizing()) {\n return;\n }\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\" || shStickyColumns() === \"\"',\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]:not([align-right])\" />\n <div class=\"actionbar-right\">\n <ng-content select=\"[actionbar][align-right]\" />\n </div>\n </div>\n\n @if (loading()) {\n <sh-progress-bar class=\"indeterminate primary\" />\n }\n\n <ng-content select=\"sh-table-content\" />\n\n @if (!content()) {\n <thead #theadLocal role=\"rowgroup\">\n <ng-content select=\"th\" />\n <ng-content select=\"[thead]\" />\n </thead>\n\n <tbody #tbodyLocal role=\"rowgroup\">\n <ng-content />\n </tbody>\n }\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 role: 'table',\n '[attr.aria-busy]': 'loading()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\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 ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n hostClasses = shipComponentClasses('table', {\n color: this.color,\n variant: this.variant,\n });\n\n content = contentChild(ShipTableContent);\n\n theadLocal = viewChild<ElementRef<HTMLTableSectionElement>>('theadLocal');\n tbodyLocal = viewChild<ElementRef<HTMLTableSectionElement>>('tbodyLocal');\n\n thead = computed(() => this.content()?.thead() || this.theadLocal());\n tbody = computed(() => this.content()?.tbody() || this.tbodyLocal());\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 colConfig = this.content()\n ?.columns()\n ?.find((c) => c.id === column);\n\n if (colConfig?.sortPredicate) {\n const predicateResult = colConfig.sortPredicate(a, b);\n return isDescending ? -predicateResult : predicateResult;\n }\n\n const valueA = a[column] as any;\n const valueB = b[column] as any;\n\n let comparison = 0;\n\n if (colConfig?.type === 'date') {\n const dateA = valueA ? new Date(valueA).getTime() : 0;\n const dateB = valueB ? new Date(valueB).getTime() : 0;\n comparison = dateA - dateB;\n } else if (colConfig?.type === 'number') {\n const numA = Number(valueA) || 0;\n const numB = Number(valueB) || 0;\n comparison = numA - numB;\n } else if (colConfig?.type === 'boolean') {\n const boolA = valueA ? 1 : 0;\n const boolB = valueB ? 1 : 0;\n comparison = boolA - boolB;\n } else if (colConfig?.type === 'string' || colConfig?.type === 'badge') {\n const strA = (valueA ?? '').toString();\n const strB = (valueB ?? '').toString();\n comparison = strA.localeCompare(strB, undefined, { sensitivity: 'base' });\n } else {\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n comparison = valueA - valueB;\n } else if (valueA instanceof Date && valueB instanceof Date) {\n comparison = valueA.getTime() - valueB.getTime();\n } else if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n }\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@Component({\n selector: 'sh-table-content',\n standalone: true,\n imports: [NgTemplateOutlet, ShipSort, ShipResize, ShipIcon, ShipChip],\n host: {\n style: 'display: contents',\n },\n template: `\n <thead #thead role=\"rowgroup\">\n <tr role=\"row\">\n @for (col of columns(); track col.id) {\n @if (col.resizable) {\n <th\n role=\"columnheader\"\n [id]=\"col.id\"\n [attr.aria-label]=\"col.header\"\n [shSort]=\"col.sortable ? col.id : undefined\"\n shResize\n [minWidth]=\"col.minWidth ?? 50\"\n [maxWidth]=\"col.maxWidth ?? null\"\n [attr.size]=\"col.size || null\"\n [class.sticky]=\"col.sticky === 'start'\"\n [class.sticky-end]=\"col.sticky === 'end'\">\n {{ col.header }}\n @if (col.sortable) {\n @if (sortByColumn() === col.id) {\n <sh-icon>caret-up</sh-icon>\n } @else if (sortByColumn() === '-' + col.id) {\n <sh-icon>caret-down</sh-icon>\n } @else {\n <sh-icon>arrows-down-up</sh-icon>\n }\n }\n </th>\n } @else {\n <th\n role=\"columnheader\"\n [id]=\"col.id\"\n [attr.aria-label]=\"col.header\"\n [shSort]=\"col.sortable ? col.id : undefined\"\n [attr.size]=\"col.size || null\"\n [class.sticky]=\"col.sticky === 'start'\"\n [class.sticky-end]=\"col.sticky === 'end'\">\n {{ col.header }}\n @if (col.sortable) {\n @if (sortByColumn() === col.id) {\n <sh-icon>caret-up</sh-icon>\n } @else if (sortByColumn() === '-' + col.id) {\n <sh-icon>caret-down</sh-icon>\n } @else {\n <sh-icon>arrows-down-up</sh-icon>\n }\n }\n </th>\n }\n }\n </tr>\n </thead>\n\n <tbody #tbody role=\"rowgroup\">\n @for (row of data(); track $index) {\n @let rowIndex = $index;\n <tr role=\"row\">\n @for (col of columns(); track col.id) {\n <td\n [class.sticky]=\"col.sticky === 'start'\"\n [class.sticky-end]=\"col.sticky === 'end'\"\n [id]=\"col.id + '-' + rowIndex\"\n [attr.aria-labelledby]=\"col.id + ' ' + col.id + '-' + rowIndex\"\n [attr.role]=\"col.rowHeader ? 'rowheader' : 'cell'\">\n @if (col.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: col }\" />\n } @else if (col.cell) {\n {{ col.cell(row) }}\n } @else if (col.format) {\n {{ col.format(getValue(row, col), row) }}\n } @else {\n @switch (col.type) {\n @case ('date') {\n {{ formatDate(getValue(row, col)) }}\n }\n @case ('boolean') {\n @if (getValue(row, col)) {\n <sh-icon class=\"text-success\">check</sh-icon>\n } @else {\n <sh-icon class=\"text-muted\">x</sh-icon>\n }\n }\n @case ('badge') {\n <sh-chip>{{ getValue(row, col) }}</sh-chip>\n }\n @default {\n {{ getValue(row, col) }}\n }\n }\n }\n </td>\n }\n </tr>\n }\n </tbody>\n `,\n})\nexport class ShipTableContent {\n #table = inject(ShipTable);\n\n columns = input<ShipTableColumn[]>([]);\n data = input<any[]>([]);\n\n sortByColumn = this.#table.sortByColumn;\n\n thead = viewChild<ElementRef<HTMLTableSectionElement>>('thead');\n tbody = viewChild<ElementRef<HTMLTableSectionElement>>('tbody');\n\n getValue(row: any, col: ShipTableColumn): any {\n if (!row) return '';\n const key = col.accessorKey || col.id;\n return row[key];\n }\n\n formatDate(value: any): string {\n if (!value) return '';\n const date = new Date(value);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
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 { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n effect,\n ElementRef,\n HostListener,\n inject,\n Injector,\n input,\n model,\n output,\n Renderer2,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { observeChildren, ShipColor, shipComponentClasses, ShipTableVariant } from '@ship-ui/core';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\nimport { ShipChip } from '@ship-ui/core/ship-chip';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipProgressBar } from '@ship-ui/core/ship-progress-bar';\n\nexport interface ShipTableColumn<T = any> {\n id: string;\n header: string;\n accessorKey?: keyof T | string;\n type?: 'string' | 'number' | 'date' | 'boolean' | 'badge' | (string & {});\n sortable?: boolean;\n resizable?: boolean;\n minWidth?: number;\n maxWidth?: number;\n size?: string;\n sticky?: 'start' | 'end' | null;\n cell?: (row: T) => any;\n cellTemplate?: TemplateRef<any> | null;\n format?: (value: any, row: T) => any;\n sortPredicate?: (a: T, b: T) => number;\n rowHeader?: boolean;\n}\n\n@Directive({\n selector: '[shResize]',\n standalone: true,\n host: {\n '[class.resizing]': 'resizingClass()',\n },\n})\nexport class ShipResize {\n #el = inject(ElementRef) as ElementRef<HTMLTableCellElement>;\n #renderer = inject(Renderer2);\n #table = inject(ShipTable);\n #keybindings = inject(ShipA11yKeybindingsService);\n #injector = inject(Injector);\n #sort = signal<ShipSort | null>(null);\n\n resizable = input<boolean>(true);\n minWidth = input<number>(50);\n maxWidth = input<number | null>(null);\n\n resizingClass = signal(false);\n\n #startX!: number;\n #startWidth!: number;\n #resizing = false;\n #animationFrameRequest: number | null = null; // Store request ID\n\n constructor() {\n effect(() => {\n if (this.#sort()) return;\n\n const hostEl = this.#el.nativeElement;\n if (this.resizable()) {\n const parts: string[] = [];\n const decAction = 'table.column-resize-decrease';\n const decShortcut = this.#keybindings.getShortcut(decAction);\n if (decShortcut) {\n parts.push(this.#keybindings.getDisplayShortcut(decAction) || decShortcut);\n }\n const incAction = 'table.column-resize-increase';\n const incShortcut = this.#keybindings.getShortcut(incAction);\n if (incShortcut) {\n parts.push(this.#keybindings.getDisplayShortcut(incAction) || incShortcut);\n }\n\n if (parts.length > 0) {\n this.#renderer.setAttribute(hostEl, 'aria-keyshortcuts', parts.join(', '));\n } else {\n this.#renderer.removeAttribute(hostEl, 'aria-keyshortcuts');\n }\n } else {\n this.#renderer.removeAttribute(hostEl, 'aria-keyshortcuts');\n }\n });\n }\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 const hostEl = this.#el.nativeElement;\n\n // Resolve ShipSort lazily to avoid circular DI instantiation issues\n this.#sort.set(this.#injector.get(ShipSort, null, { optional: true, self: true }));\n\n if (this.resizable()) {\n const resizer = this.#renderer.createElement('div');\n this.#renderer.addClass(resizer, 'sh-resizer');\n this.#renderer.appendChild(hostEl, resizer);\n this.#renderer.listen(resizer, 'mousedown', this.#onMouseDown.bind(this));\n\n if (!hostEl.hasAttribute('role')) {\n this.#renderer.setAttribute(hostEl, 'role', 'columnheader');\n }\n\n if (!this.#sort() && !hostEl.hasAttribute('tabindex')) {\n this.#renderer.setAttribute(hostEl, 'tabindex', '0');\n }\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.resizable()) return;\n\n const target = event.target as HTMLElement;\n const host = this.#el.nativeElement;\n if (\n target !== host &&\n (target.tagName === 'BUTTON' ||\n target.tagName === 'INPUT' ||\n target.tagName === 'SELECT' ||\n target.tagName === 'TEXTAREA' ||\n target.closest('button, input, select, textarea, a') !== null ||\n target.closest('[role=\"button\"], [role=\"checkbox\"], [role=\"menuitem\"]') !== null)\n ) {\n return;\n }\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && !event.shiftKey) {\n if (!this.#sort()) {\n const parentRow = host.parentElement;\n if (parentRow) {\n const headers = Array.from(parentRow.querySelectorAll<HTMLElement>('th')).filter(\n (el) => el.getAttribute('tabindex') === '0' || el.hasAttribute('shSort') || el.hasAttribute('shResize')\n );\n const currentIndex = headers.indexOf(host);\n if (currentIndex !== -1) {\n const nextIndex = event.key === 'ArrowRight' ? currentIndex + 1 : currentIndex - 1;\n if (nextIndex >= 0 && nextIndex < headers.length) {\n event.preventDefault();\n headers[nextIndex].focus();\n return;\n }\n }\n }\n }\n }\n\n const isDecrease = this.#keybindings.matches(event, 'table.column-resize-decrease');\n const isIncrease = this.#keybindings.matches(event, 'table.column-resize-increase');\n\n if (isDecrease || isIncrease) {\n event.preventDefault();\n event.stopPropagation();\n\n const currentWidth = this.#el.nativeElement.offsetWidth;\n const step = 10;\n const targetWidth = isDecrease ? currentWidth - step : currentWidth + step;\n\n const constrainedWidth = Math.max(\n this.minWidth(),\n this.maxWidth() ? Math.min(targetWidth, this.maxWidth() ?? targetWidth) : targetWidth\n );\n\n this.#renderer.setAttribute(this.#el.nativeElement, 'size', `${constrainedWidth}px`);\n this.#table.updateColumnSizes();\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.resizingClass.set(false);\n\n if (this.#animationFrameRequest !== null) {\n cancelAnimationFrame(this.#animationFrameRequest);\n this.#animationFrameRequest = null;\n }\n\n // Delay resetting the table's resizing state to block sorting clicks immediately after resizing\n setTimeout(() => {\n this.#table.resizing.set(false);\n }, 50);\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.resizingClass.set(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 role: 'columnheader',\n '[class.sortable]': '!!shSort()',\n '[attr.tabindex]': 'tabIndex()',\n '(click)': 'shSort() ? toggleSort($event) : null',\n '[attr.aria-sort]': 'shSort() ? ariaSort() : null',\n '[class.sort-asc]': 'sortAsc()',\n '[class.sort-desc]': 'sortDesc()',\n '[attr.aria-keyshortcuts]': 'ariaKeyshortcuts()',\n },\n})\nexport class ShipSort {\n #table = inject(ShipTable);\n #keybindings = inject(ShipA11yKeybindingsService);\n #injector = inject(Injector);\n #el = inject(ElementRef) as ElementRef<HTMLTableCellElement>;\n #resize = signal<ShipResize | null>(null);\n shSort = input<string | undefined>();\n\n ngOnInit() {\n // Resolve ShipResize lazily to avoid circular DI instantiation issues\n this.#resize.set(this.#injector.get(ShipResize, null, { optional: true, self: true }));\n }\n\n tabIndex = computed(() => {\n const resize = this.#resize();\n return this.shSort() || (resize && resize.resizable()) ? '0' : null;\n });\n\n ariaKeyshortcuts = computed(() => {\n const parts: string[] = [];\n const resize = this.#resize();\n\n if (this.shSort()) {\n const action = 'table.sort';\n const shortcut = this.#keybindings.getShortcut(action);\n if (shortcut) {\n parts.push(this.#keybindings.getDisplayShortcut(action) || shortcut);\n }\n }\n\n if (resize && resize.resizable()) {\n const decAction = 'table.column-resize-decrease';\n const decShortcut = this.#keybindings.getShortcut(decAction);\n if (decShortcut) {\n parts.push(this.#keybindings.getDisplayShortcut(decAction) || decShortcut);\n }\n\n const incAction = 'table.column-resize-increase';\n const incShortcut = this.#keybindings.getShortcut(incAction);\n if (incShortcut) {\n parts.push(this.#keybindings.getDisplayShortcut(incAction) || incShortcut);\n }\n }\n\n return parts.length > 0 ? parts.join(', ') : null;\n });\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (!this.shSort()) return;\n\n const target = event.target as HTMLElement;\n const host = this.#el.nativeElement;\n if (\n target !== host &&\n (target.tagName === 'BUTTON' ||\n target.tagName === 'INPUT' ||\n target.tagName === 'SELECT' ||\n target.tagName === 'TEXTAREA' ||\n target.closest('button, input, select, textarea, a') !== null ||\n target.closest('[role=\"button\"], [role=\"checkbox\"], [role=\"menuitem\"]') !== null)\n ) {\n return;\n }\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowRight') && !event.shiftKey) {\n const parentRow = host.parentElement;\n if (parentRow) {\n const headers = Array.from(parentRow.querySelectorAll<HTMLElement>('th')).filter(\n (el) => el.getAttribute('tabindex') === '0' || el.hasAttribute('shSort') || el.hasAttribute('shResize')\n );\n const currentIndex = headers.indexOf(host);\n if (currentIndex !== -1) {\n const nextIndex = event.key === 'ArrowRight' ? currentIndex + 1 : currentIndex - 1;\n if (nextIndex >= 0 && nextIndex < headers.length) {\n event.preventDefault();\n headers[nextIndex].focus();\n return;\n }\n }\n }\n }\n\n if (this.#keybindings.matches(event, 'table.sort')) {\n this.toggleSort(event);\n }\n }\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 ariaSort = computed(() => {\n if (this.sortAsc()) return 'ascending';\n if (this.sortDesc()) return 'descending';\n return 'none';\n });\n\n toggleSort(event?: Event) {\n if (event) {\n const target = event.target as HTMLElement;\n const host = this.#el.nativeElement;\n if (\n target !== host &&\n (target.tagName === 'BUTTON' ||\n target.tagName === 'INPUT' ||\n target.tagName === 'SELECT' ||\n target.tagName === 'TEXTAREA' ||\n target.closest('button, input, select, textarea, a') !== null ||\n target.closest('[role=\"button\"], [role=\"checkbox\"], [role=\"menuitem\"]') !== null)\n ) {\n return;\n }\n event.preventDefault();\n }\n if (this.#table.resizing()) {\n return;\n }\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\" || shStickyColumns() === \"\"',\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]:not([align-right])\" />\n <div class=\"actionbar-right\">\n <ng-content select=\"[actionbar][align-right]\" />\n </div>\n </div>\n\n @if (loading()) {\n <sh-progress-bar class=\"indeterminate primary\" />\n }\n\n <ng-content select=\"sh-table-content\" />\n\n @if (!content()) {\n <thead #theadLocal role=\"rowgroup\">\n <ng-content select=\"th\" />\n <ng-content select=\"[thead]\" />\n </thead>\n\n <tbody #tbodyLocal role=\"rowgroup\">\n <ng-content />\n </tbody>\n }\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 '[attr.role]': 'role()',\n '[attr.aria-busy]': 'loading()',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledby()',\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 #renderer = inject(Renderer2);\n #keybindings = inject(ShipA11yKeybindingsService);\n\n grid = input<boolean>(false);\n role = computed(() => (this.grid() ? 'grid' : 'table'));\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 ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n hostClasses = shipComponentClasses('table', {\n color: this.color,\n variant: this.variant,\n });\n\n content = contentChild(ShipTableContent);\n\n theadLocal = viewChild<ElementRef<HTMLTableSectionElement>>('theadLocal');\n tbodyLocal = viewChild<ElementRef<HTMLTableSectionElement>>('tbodyLocal');\n\n thead = computed(() => this.content()?.thead() || this.theadLocal());\n tbody = computed(() => this.content()?.tbody() || this.tbodyLocal());\n columns = observeChildren<HTMLTableColElement>(this.thead, ['tr:first-child th']);\n\n stickyHeaderHeight = signal<number>(0);\n\n theadEffect = effect((onCleanup) => {\n const head = this.thead()?.nativeElement;\n\n if (head && typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver((entries) => {\n const height = head.clientHeight;\n this.stickyHeaderHeight.set(height);\n });\n observer.observe(head);\n onCleanup(() => observer.disconnect());\n }\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 gridSetupEffect = effect(() => {\n const gridActive = this.grid();\n const dataVal = this.data();\n const colSignal = this.columns.signal();\n\n untracked(() => {\n const host = this.#el.nativeElement;\n const allCells = host.querySelectorAll('th, td');\n\n if (gridActive) {\n if (allCells.length === 0) return;\n\n let hasZero = false;\n allCells.forEach((cell: any) => {\n if (cell.getAttribute('tabindex') === '0') {\n hasZero = true;\n }\n });\n\n if (!hasZero) {\n this.#renderer.setAttribute(allCells[0], 'tabindex', '0');\n }\n\n allCells.forEach((cell: any) => {\n if (cell.getAttribute('tabindex') !== '0') {\n this.#renderer.setAttribute(cell, 'tabindex', '-1');\n }\n if (!cell.hasAttribute('role')) {\n this.#renderer.setAttribute(cell, 'role', cell.tagName === 'TD' ? 'gridcell' : 'columnheader');\n }\n });\n\n const allRows = host.querySelectorAll('tr');\n allRows.forEach((row: any) => {\n if (!row.hasAttribute('role')) {\n this.#renderer.setAttribute(row, 'role', 'row');\n }\n });\n } else {\n // Clean up\n allCells.forEach((cell: any) => {\n const isHeader = cell.tagName === 'TH';\n if (isHeader) {\n const isInteractiveHeader =\n cell.classList.contains('sortable') ||\n cell.querySelector('.sh-resizer') !== null ||\n cell.hasAttribute('aria-keyshortcuts');\n if (isInteractiveHeader) {\n this.#renderer.setAttribute(cell, 'tabindex', '0');\n } else {\n this.#renderer.removeAttribute(cell, 'tabindex');\n }\n } else {\n // Remove tabindex from td (data cells)\n this.#renderer.removeAttribute(cell, 'tabindex');\n }\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 @HostListener('focusin', ['$event'])\n onFocusIn(event: FocusEvent) {\n if (!this.grid()) return;\n\n const target = event.target as HTMLElement;\n if (!target) return;\n\n const cell =\n target.tagName === 'TH' || target.tagName === 'TD' ? target : (target.closest('th, td') as HTMLElement);\n if (cell) {\n // Set roles dynamically for cells and rows if not present\n if (!cell.hasAttribute('role')) {\n this.#renderer.setAttribute(cell, 'role', cell.tagName === 'TD' ? 'gridcell' : 'columnheader');\n }\n const parentRow = cell.parentElement;\n if (parentRow && !parentRow.hasAttribute('role')) {\n this.#renderer.setAttribute(parentRow, 'role', 'row');\n }\n\n // Set tabindex=\"0\" on focused cell and tabindex=\"-1\" on all other cells\n this.#renderer.setAttribute(cell, 'tabindex', '0');\n const allCells = this.#el.nativeElement.querySelectorAll('th, td');\n allCells.forEach((c: any) => {\n if (c !== cell) {\n this.#renderer.setAttribute(c, 'tabindex', '-1');\n }\n });\n }\n }\n\n @HostListener('keydown', ['$event'])\n onGridKeyDown(event: KeyboardEvent) {\n if (!this.grid()) return;\n\n if (event.key === 'Tab') {\n const target = event.target as HTMLElement;\n const cell =\n target.tagName === 'TH' || target.tagName === 'TD' ? target : (target.closest('th, td') as HTMLElement);\n if (!cell) return;\n\n const focusableSelectors = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n const focusableChildren = Array.from(cell.querySelectorAll(focusableSelectors)) as HTMLElement[];\n\n const row = cell.parentElement as HTMLTableRowElement;\n if (!row || row.tagName !== 'TR') return;\n\n const cellsInRow = Array.from(row.querySelectorAll('th, td')) as HTMLElement[];\n const currentColIndex = cellsInRow.indexOf(cell);\n if (currentColIndex === -1) return;\n\n if (!event.shiftKey) {\n // Forward Tab\n const isLastChild =\n focusableChildren.length === 0 || target === focusableChildren[focusableChildren.length - 1];\n const isCellSelf = target === cell;\n\n if (isLastChild && !isCellSelf) {\n // Move to next cell in row\n if (currentColIndex < cellsInRow.length - 1) {\n event.preventDefault();\n this.#focusGridCell(cellsInRow[currentColIndex + 1]);\n }\n } else if (isCellSelf && focusableChildren.length === 0) {\n // Move to next cell in row\n if (currentColIndex < cellsInRow.length - 1) {\n event.preventDefault();\n this.#focusGridCell(cellsInRow[currentColIndex + 1]);\n }\n }\n } else {\n // Shift + Tab (Backward)\n const isFirstChild = focusableChildren.length > 0 && target === focusableChildren[0];\n const isCellSelf = target === cell;\n\n if (isFirstChild) {\n event.preventDefault();\n this.#focusGridCell(cell);\n } else if (isCellSelf) {\n if (currentColIndex > 0) {\n event.preventDefault();\n const prevCell = cellsInRow[currentColIndex - 1];\n const prevFocusableChildren = Array.from(prevCell.querySelectorAll(focusableSelectors)) as HTMLElement[];\n if (prevFocusableChildren.length > 0) {\n this.#focusGridCell(prevCell);\n prevFocusableChildren[prevFocusableChildren.length - 1].focus();\n } else {\n this.#focusGridCell(prevCell);\n }\n }\n }\n }\n return;\n }\n\n const isUp = this.#keybindings.matches(event, 'grid.focus-up');\n const isDown = this.#keybindings.matches(event, 'grid.focus-down');\n const isLeft = this.#keybindings.matches(event, 'grid.focus-left');\n const isRight = this.#keybindings.matches(event, 'grid.focus-right');\n const isFirst = this.#keybindings.matches(event, 'grid.focus-first');\n const isLast = this.#keybindings.matches(event, 'grid.focus-last');\n\n if (!isUp && !isDown && !isLeft && !isRight && !isFirst && !isLast) return;\n\n const target = event.target as HTMLElement;\n if (target.tagName !== 'TH' && target.tagName !== 'TD') {\n // Focus is inside a child control, let them operate normally\n return;\n }\n\n const row = target.parentElement as HTMLTableRowElement;\n if (!row || row.tagName !== 'TR') return;\n\n const allRows = Array.from(this.#el.nativeElement.querySelectorAll('tr')) as HTMLTableRowElement[];\n const currentRowIndex = allRows.indexOf(row);\n if (currentRowIndex === -1) return;\n\n const cellsInRow = Array.from(row.querySelectorAll('th, td')) as HTMLElement[];\n const currentColIndex = cellsInRow.indexOf(target);\n if (currentColIndex === -1) return;\n\n let targetRowIndex = currentRowIndex;\n let targetColIndex = currentColIndex;\n\n if (isUp) {\n targetRowIndex = currentRowIndex - 1;\n } else if (isDown) {\n targetRowIndex = currentRowIndex + 1;\n } else if (isLeft) {\n targetColIndex = currentColIndex - 1;\n } else if (isRight) {\n targetColIndex = currentColIndex + 1;\n } else if (isFirst) {\n targetColIndex = 0;\n } else if (isLast) {\n targetColIndex = cellsInRow.length - 1;\n }\n\n if (targetRowIndex !== currentRowIndex) {\n const targetRow = allRows[targetRowIndex];\n if (targetRow) {\n const targetCells = Array.from(targetRow.querySelectorAll('th, td')) as HTMLElement[];\n const targetCell = targetCells[Math.min(currentColIndex, targetCells.length - 1)];\n if (targetCell) {\n event.preventDefault();\n this.#focusGridCell(targetCell);\n }\n }\n } else if (targetColIndex !== currentColIndex) {\n const targetCell = cellsInRow[targetColIndex];\n if (targetCell) {\n event.preventDefault();\n this.#focusGridCell(targetCell);\n }\n }\n }\n\n #focusGridCell(cell: HTMLElement) {\n this.#renderer.setAttribute(cell, 'tabindex', '0');\n cell.focus();\n const allCells = this.#el.nativeElement.querySelectorAll('th, td');\n allCells.forEach((c: any) => {\n if (c !== cell) {\n this.#renderer.setAttribute(c, 'tabindex', '-1');\n }\n });\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 currentData = this.data();\n const sortedData = [...currentData].sort((a: any, b: any) => {\n const colConfig = this.content()\n ?.columns()\n ?.find((c) => c.id === column);\n\n if (colConfig?.sortPredicate) {\n const predicateResult = colConfig.sortPredicate(a, b);\n return isDescending ? -predicateResult : predicateResult;\n }\n\n const valueA = colConfig ? this.content()?.getValue(a, colConfig) : a[column];\n const valueB = colConfig ? this.content()?.getValue(b, colConfig) : b[column];\n\n const aNull = valueA === null || valueA === undefined;\n const bNull = valueB === null || valueB === undefined;\n\n if (aNull && bNull) return 0;\n if (aNull) return 1;\n if (bNull) return -1;\n\n let comparison = 0;\n\n if (colConfig?.type === 'date') {\n const dateA = new Date(valueA).getTime();\n const dateB = new Date(valueB).getTime();\n comparison = isNaN(dateA) || isNaN(dateB) ? 0 : dateA - dateB;\n } else if (colConfig?.type === 'number') {\n comparison = Number(valueA) - Number(valueB);\n } else if (colConfig?.type === 'boolean') {\n const boolA = valueA ? 1 : 0;\n const boolB = valueB ? 1 : 0;\n comparison = boolA - boolB;\n } else if (colConfig?.type === 'string' || colConfig?.type === 'badge') {\n comparison = valueA.toString().localeCompare(valueB.toString(), undefined, { sensitivity: 'base' });\n } else {\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n comparison = valueA - valueB;\n } else if (valueA instanceof Date && valueB instanceof Date) {\n comparison = valueA.getTime() - valueB.getTime();\n } else if (typeof valueA === 'string' && typeof valueB === 'string') {\n comparison = valueA.localeCompare(valueB, undefined, { sensitivity: 'base' });\n }\n }\n\n return isDescending ? -comparison : comparison;\n });\n\n let changed = sortedData.length !== currentData.length;\n if (!changed) {\n for (let i = 0; i < sortedData.length; i++) {\n if (sortedData[i] !== currentData[i]) {\n changed = true;\n break;\n }\n }\n }\n\n if (changed) {\n this.dataChange.emit(sortedData);\n }\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@Component({\n selector: 'sh-table-content',\n standalone: true,\n imports: [NgTemplateOutlet, ShipSort, ShipResize, ShipIcon, ShipChip],\n host: {\n style: 'display: contents',\n },\n template: `\n <thead #thead role=\"rowgroup\">\n <tr role=\"row\">\n @for (col of columns(); track col.id) {\n <th\n role=\"columnheader\"\n [id]=\"col.id\"\n [attr.aria-label]=\"col.header\"\n [shSort]=\"col.sortable ? col.id : undefined\"\n shResize\n [resizable]=\"!!col.resizable\"\n [minWidth]=\"col.minWidth ?? 50\"\n [maxWidth]=\"col.maxWidth ?? null\"\n [attr.size]=\"col.size || null\"\n [class.sticky]=\"col.sticky === 'start'\"\n [class.sticky-end]=\"col.sticky === 'end'\">\n {{ col.header }}\n @if (col.sortable) {\n @if (sortByColumn() === col.id) {\n <sh-icon>caret-up</sh-icon>\n } @else if (sortByColumn() === '-' + col.id) {\n <sh-icon>caret-down</sh-icon>\n } @else {\n <sh-icon>arrows-down-up</sh-icon>\n }\n }\n </th>\n }\n </tr>\n </thead>\n\n <tbody #tbody role=\"rowgroup\">\n @for (row of data(); track $index) {\n @let rowIndex = $index;\n <tr role=\"row\">\n @for (col of columns(); track col.id) {\n <td\n [class.sticky]=\"col.sticky === 'start'\"\n [class.sticky-end]=\"col.sticky === 'end'\"\n [id]=\"col.id + '-' + rowIndex\"\n [attr.aria-labelledby]=\"col.id + ' ' + col.id + '-' + rowIndex\"\n [attr.role]=\"col.rowHeader ? 'rowheader' : grid() ? 'gridcell' : 'cell'\">\n @if (col.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: col }\" />\n } @else if (col.cell) {\n {{ col.cell(row) }}\n } @else if (col.format) {\n {{ col.format(getValue(row, col), row) }}\n } @else {\n @switch (col.type) {\n @case ('date') {\n {{ formatDate(getValue(row, col)) }}\n }\n @case ('boolean') {\n @if (getValue(row, col)) {\n <sh-icon class=\"text-success\">check</sh-icon>\n } @else {\n <sh-icon class=\"text-muted\">x</sh-icon>\n }\n }\n @case ('badge') {\n <sh-chip>{{ getValue(row, col) }}</sh-chip>\n }\n @default {\n {{ getValue(row, col) }}\n }\n }\n }\n </td>\n }\n </tr>\n }\n </tbody>\n `,\n})\nexport class ShipTableContent {\n #table = inject(ShipTable);\n\n columns = input<ShipTableColumn[]>([]);\n data = input<any[]>([]);\n\n sortByColumn = this.#table.sortByColumn;\n grid = this.#table.grid;\n\n thead = viewChild<ElementRef<HTMLTableSectionElement>>('thead');\n tbody = viewChild<ElementRef<HTMLTableSectionElement>>('tbody');\n\n getValue(row: any, col: ShipTableColumn): any {\n if (!row) return '';\n const key = col.accessorKey || col.id;\n if (typeof key === 'string' && key.includes('.')) {\n return key.split('.').reduce((acc, part) => acc?.[part], row);\n }\n return row[key as any];\n }\n\n formatDate(value: any): string {\n if (!value) return '';\n const date = new Date(value);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -89,7 +89,7 @@ class ShipThemeToggle {
|
|
|
89
89
|
}
|
|
90
90
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeToggle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
91
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: ShipThemeToggle, isStandalone: true, selector: "ship-theme-toggle", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
92
|
-
<button shButton [color]="color()" [variant]="variant()" [size]="size()" (click)="toggleTheme()">
|
|
92
|
+
<button shButton aria-label="Toggle theme" [color]="color()" [variant]="variant()" [size]="size()" (click)="toggleTheme()">
|
|
93
93
|
@if (theme() === 'dark') {
|
|
94
94
|
<sh-icon>moon-bold</sh-icon>
|
|
95
95
|
} @else if (theme() === 'light') {
|
|
@@ -103,7 +103,7 @@ class ShipThemeToggle {
|
|
|
103
103
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipThemeToggle, decorators: [{
|
|
104
104
|
type: Component,
|
|
105
105
|
args: [{ selector: 'ship-theme-toggle', encapsulation: ViewEncapsulation.None, imports: [ShipIcon, ShipButton], template: `
|
|
106
|
-
<button shButton [color]="color()" [variant]="variant()" [size]="size()" (click)="toggleTheme()">
|
|
106
|
+
<button shButton aria-label="Toggle theme" [color]="color()" [variant]="variant()" [size]="size()" (click)="toggleTheme()">
|
|
107
107
|
@if (theme() === 'dark') {
|
|
108
108
|
<sh-icon>moon-bold</sh-icon>
|
|
109
109
|
} @else if (theme() === 'light') {
|
|
@@ -1 +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, input, ViewEncapsulation } from '@angular/core';\nimport { ShipButtonSize, ShipColor, ShipSheetVariant } from '@ship-ui/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 [color]=\"color()\" [variant]=\"variant()\" [size]=\"size()\" (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>circle-half-tilt-bold</sh-icon>\n }\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipThemeToggle {\n #themeState = inject(ShipThemeState);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n size = input<ShipButtonSize | null>('small');\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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"}
|
|
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, input, ViewEncapsulation } from '@angular/core';\nimport { ShipButtonSize, ShipColor, ShipSheetVariant } from '@ship-ui/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 aria-label=\"Toggle theme\" [color]=\"color()\" [variant]=\"variant()\" [size]=\"size()\" (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>circle-half-tilt-bold</sh-icon>\n }\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ShipThemeToggle {\n #themeState = inject(ShipThemeState);\n\n color = input<ShipColor | null>(null);\n variant = input<ShipSheetVariant | null>(null);\n size = input<ShipButtonSize | null>('small');\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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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, model, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
2
|
+
import { inject, input, model, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { ShipIcon } from '@ship-ui/core/ship-icon';
|
|
4
|
+
import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';
|
|
4
5
|
import { shipComponentClasses } from '@ship-ui/core';
|
|
5
6
|
|
|
6
7
|
class ShipToggleCard {
|
|
7
8
|
constructor() {
|
|
9
|
+
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
8
10
|
this.disableToggle = input(false, /* @ts-ignore */
|
|
9
11
|
...(ngDevMode ? [{ debugName: "disableToggle" }] : /* istanbul ignore next */ []));
|
|
10
12
|
this.isActive = model(false, /* @ts-ignore */
|
|
@@ -24,13 +26,26 @@ class ShipToggleCard {
|
|
|
24
26
|
variant: this.variant,
|
|
25
27
|
});
|
|
26
28
|
}
|
|
29
|
+
#keybindings;
|
|
27
30
|
#disabledEffect;
|
|
28
31
|
toggle() {
|
|
29
32
|
this.isActive.set(!this.isActive());
|
|
30
33
|
}
|
|
34
|
+
handleKeyDown(event) {
|
|
35
|
+
if (this.#keybindings.matches(event, 'toggle-card.toggle')) {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
this.toggle();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
31
40
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggleCard, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32
41
|
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
|
|
42
|
+
<h3
|
|
43
|
+
role="button"
|
|
44
|
+
[attr.tabindex]="disableToggle() ? null : '0'"
|
|
45
|
+
[attr.aria-expanded]="disableToggle() ? null : (isActive() ? 'true' : 'false')"
|
|
46
|
+
[attr.aria-disabled]="disableToggle() ? 'true' : null"
|
|
47
|
+
(click)="!disableToggle() && toggle()"
|
|
48
|
+
(keydown)="!disableToggle() && handleKeyDown($event)">
|
|
34
49
|
<ng-content select="[title]">Title</ng-content>
|
|
35
50
|
|
|
36
51
|
@if (!disableToggle()) {
|
|
@@ -48,7 +63,13 @@ class ShipToggleCard {
|
|
|
48
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: ShipToggleCard, decorators: [{
|
|
49
64
|
type: Component,
|
|
50
65
|
args: [{ selector: 'sh-toggle-card', encapsulation: ViewEncapsulation.None, imports: [ShipIcon], template: `
|
|
51
|
-
<h3
|
|
66
|
+
<h3
|
|
67
|
+
role="button"
|
|
68
|
+
[attr.tabindex]="disableToggle() ? null : '0'"
|
|
69
|
+
[attr.aria-expanded]="disableToggle() ? null : (isActive() ? 'true' : 'false')"
|
|
70
|
+
[attr.aria-disabled]="disableToggle() ? 'true' : null"
|
|
71
|
+
(click)="!disableToggle() && toggle()"
|
|
72
|
+
(keydown)="!disableToggle() && handleKeyDown($event)">
|
|
52
73
|
<ng-content select="[title]">Title</ng-content>
|
|
53
74
|
|
|
54
75
|
@if (!disableToggle()) {
|
|
@@ -1 +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":"
|
|
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, inject, input, model, ViewEncapsulation } from '@angular/core';\nimport { ShipIcon } from '@ship-ui/core/ship-icon';\nimport { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\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\n role=\"button\"\n [attr.tabindex]=\"disableToggle() ? null : '0'\"\n [attr.aria-expanded]=\"disableToggle() ? null : (isActive() ? 'true' : 'false')\"\n [attr.aria-disabled]=\"disableToggle() ? 'true' : null\"\n (click)=\"!disableToggle() && toggle()\"\n (keydown)=\"!disableToggle() && handleKeyDown($event)\">\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 #keybindings = inject(ShipA11yKeybindingsService);\n\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 handleKeyDown(event: KeyboardEvent) {\n if (this.#keybindings.matches(event, 'toggle-card.toggle')) {\n event.preventDefault();\n this.toggle();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, ElementRef, viewChild, model, input, HostListener, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
3
3
|
import { contentProjectionSignal, shipComponentClasses } from '@ship-ui/core';
|
|
4
|
+
import { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';
|
|
4
5
|
|
|
5
6
|
class ShipToggle {
|
|
6
7
|
constructor() {
|
|
7
8
|
this._elementRef = inject(ElementRef);
|
|
9
|
+
this.#keybindings = inject(ShipA11yKeybindingsService);
|
|
8
10
|
this.internalInput = viewChild('internalInput', /* @ts-ignore */
|
|
9
11
|
...(ngDevMode ? [{ debugName: "internalInput" }] : /* istanbul ignore next */ []));
|
|
10
12
|
this.projectedInputs = contentProjectionSignal('input:not(.internal-input)', {
|
|
@@ -29,24 +31,27 @@ class ShipToggle {
|
|
|
29
31
|
readonly: this.readonly,
|
|
30
32
|
});
|
|
31
33
|
}
|
|
34
|
+
#keybindings;
|
|
32
35
|
onInternalInputChange(event) {
|
|
33
36
|
if (this.disabled())
|
|
34
37
|
return;
|
|
35
38
|
const input = event.target;
|
|
36
39
|
this.checked.set(input.checked);
|
|
37
40
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
inputEl
|
|
41
|
+
onKeyDown(event) {
|
|
42
|
+
if (this.#keybindings.matches(event, 'toggle.toggle')) {
|
|
43
|
+
const inputEl = this.internalInput()?.nativeElement;
|
|
44
|
+
if (inputEl && getComputedStyle(inputEl).display !== 'none') {
|
|
45
|
+
inputEl.click();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this._elementRef.nativeElement.click();
|
|
49
|
+
}
|
|
50
|
+
event.preventDefault();
|
|
42
51
|
}
|
|
43
|
-
else {
|
|
44
|
-
this._elementRef.nativeElement.click();
|
|
45
|
-
}
|
|
46
|
-
event.preventDefault();
|
|
47
52
|
}
|
|
48
53
|
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
|
|
54
|
+
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": "onKeyDown($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
55
|
<div class="box">
|
|
51
56
|
<div class="knob"></div>
|
|
52
57
|
</div>
|
|
@@ -89,12 +94,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImpor
|
|
|
89
94
|
'[attr.aria-checked]': 'noInternalInput() ? checked() : null',
|
|
90
95
|
'[attr.tabindex]': 'noInternalInput() ? (disabled() ? "-1" : "0") : null',
|
|
91
96
|
}, 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 }] }],
|
|
93
|
-
type: HostListener,
|
|
94
|
-
args: ['keydown.enter', ['$event']]
|
|
95
|
-
}, {
|
|
97
|
+
}], 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 }] }], onKeyDown: [{
|
|
96
98
|
type: HostListener,
|
|
97
|
-
args: ['keydown
|
|
99
|
+
args: ['keydown', ['$event']]
|
|
98
100
|
}] } });
|
|
99
101
|
|
|
100
102
|
/**
|
|
@@ -1 +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
|
|
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 { ShipA11yKeybindingsService } from '@ship-ui/core/ship-a11y-keybindings';\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 #keybindings = inject(ShipA11yKeybindingsService);\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', ['$event'])\n protected onKeyDown(event: KeyboardEvent) {\n if (this.#keybindings.matches(event, 'toggle.toggle')) {\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|