@sellmate/design-system 0.0.4 → 0.0.6
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/dist/cjs/design-system.cjs.js +2 -2
- package/dist/cjs/{index-Dx2csts8.js → index-eJV9DRUN.js} +3 -3
- package/dist/cjs/index-eJV9DRUN.js.map +1 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/sd-button.sd-guide.sd-icon.sd-portal.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-button_4.cjs.entry.js +8 -8
- package/dist/cjs/sd-checkbox.cjs.entry.js +3 -3
- package/dist/cjs/sd-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-date-box.sd-input.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-date-box_2.cjs.entry.js +7 -7
- package/dist/cjs/sd-date-picker.cjs.entry.js +4 -4
- package/dist/cjs/sd-date-picker.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-date-range-picker.cjs.entry.js +4 -4
- package/dist/cjs/sd-date-range-picker.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-pagination.sd-tooltip.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-pagination_2.cjs.entry.js +8 -8
- package/dist/cjs/sd-popover.cjs.entry.js +5 -5
- package/dist/cjs/sd-popover.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-select-option.cjs.entry.js +3 -3
- package/dist/cjs/sd-select-option.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-select.cjs.entry.js +4 -4
- package/dist/cjs/sd-select.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-table.cjs.entry.js +4 -4
- package/dist/cjs/sd-table.entry.cjs.js.map +1 -1
- package/dist/cjs/sd-tag.cjs.entry.js +2 -2
- package/dist/cjs/sd-tooltip-portal.cjs.entry.js +2 -2
- package/dist/cjs/{tooltipArrow-B93FJYyh.js → tooltipArrow-nBURRjhe.js} +3 -3
- package/dist/cjs/{tooltipArrow-B93FJYyh.js.map → tooltipArrow-nBURRjhe.js.map} +1 -1
- package/dist/collection/components/sd-button/sd-button.css +6 -0
- package/dist/collection/components/sd-button/sd-button.js +3 -3
- package/dist/collection/components/sd-button/sd-button.js.map +1 -1
- package/dist/collection/components/sd-checkbox/sd-checkbox.css +0 -4
- package/dist/collection/components/sd-checkbox/sd-checkbox.js +3 -3
- package/dist/collection/components/sd-checkbox/sd-checkbox.js.map +1 -1
- package/dist/collection/components/sd-date-box/sd-date-box.css +6 -0
- package/dist/collection/components/sd-date-box/sd-date-box.js +2 -2
- package/dist/collection/components/sd-date-picker/sd-date-picker.css +6 -0
- package/dist/collection/components/sd-date-picker/sd-date-picker.js +2 -2
- package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.css +6 -0
- package/dist/collection/components/sd-date-range-picker/sd-date-range-picker.js +2 -2
- package/dist/collection/components/sd-guide/sd-guide.css +7 -5
- package/dist/collection/components/sd-guide/sd-guide.js +10 -5
- package/dist/collection/components/sd-guide/sd-guide.js.map +1 -1
- package/dist/collection/components/sd-icon/sd-icon.js +1 -1
- package/dist/collection/components/sd-input/sd-input.css +6 -0
- package/dist/collection/components/sd-input/sd-input.js +2 -2
- package/dist/collection/components/sd-pagination/sd-pagination.css +6 -0
- package/dist/collection/components/sd-pagination/sd-pagination.js +2 -2
- package/dist/collection/components/sd-popover/sd-popover.css +6 -0
- package/dist/collection/components/sd-popover/sd-popover.js +2 -2
- package/dist/collection/components/sd-portal/sd-portal.js +1 -1
- package/dist/collection/components/sd-select/sd-select-option/sd-select-option.css +6 -0
- package/dist/collection/components/sd-select/sd-select-option/sd-select-option.js +1 -1
- package/dist/collection/components/sd-select/sd-select.css +6 -0
- package/dist/collection/components/sd-select/sd-select.js +2 -2
- package/dist/collection/components/sd-table/sd-table.css +6 -0
- package/dist/collection/components/sd-table/sd-table.js +3 -2
- package/dist/collection/components/sd-table/sd-table.js.map +1 -1
- package/dist/collection/components/sd-tag/sd-tag.js +1 -1
- package/dist/collection/components/sd-tooltip/sd-tooltip.css +6 -0
- package/dist/collection/components/sd-tooltip/sd-tooltip.js +2 -2
- package/dist/collection/components/sd-tooltip-portal/sd-tooltip-portal.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-BYJLcD4q.js → p-1fnLZFBF.js} +7 -7
- package/dist/components/{p-BYJLcD4q.js.map → p-1fnLZFBF.js.map} +1 -1
- package/dist/components/{p-CP07OxFR.js → p-7h5r3_Oi.js} +6 -6
- package/dist/components/{p-CP07OxFR.js.map → p-7h5r3_Oi.js.map} +1 -1
- package/dist/components/{p-B9i2YE0t.js → p-BFDQPvRY.js} +7 -7
- package/dist/components/{p-B9i2YE0t.js.map → p-BFDQPvRY.js.map} +1 -1
- package/dist/components/{p-CUaQiV_x.js → p-BMMcpjI2.js} +4 -4
- package/dist/components/{p-CUaQiV_x.js.map → p-BMMcpjI2.js.map} +1 -1
- package/dist/components/{p-BCYA4Zc8.js → p-BTFW7ae2.js} +4 -4
- package/dist/components/{p-BCYA4Zc8.js.map → p-BTFW7ae2.js.map} +1 -1
- package/dist/components/{p-CyxZzPBJ.js → p-BTvDxJlL.js} +4 -4
- package/dist/components/{p-CyxZzPBJ.js.map → p-BTvDxJlL.js.map} +1 -1
- package/dist/components/{p-ru6C2WME.js → p-CCUdSU7s.js} +7 -8
- package/dist/components/p-CCUdSU7s.js.map +1 -0
- package/dist/components/{p-_NsXHYCA.js → p-CMr_MjLT.js} +7 -7
- package/dist/components/{p-_NsXHYCA.js.map → p-CMr_MjLT.js.map} +1 -1
- package/dist/components/{p-DB2v6Bnp.js → p-DDCjT-Wn.js} +3 -3
- package/dist/components/{p-DB2v6Bnp.js.map → p-DDCjT-Wn.js.map} +1 -1
- package/dist/components/p-ZmqQTYnw.js +103 -0
- package/dist/components/p-ZmqQTYnw.js.map +1 -0
- package/dist/components/{p-dHboNV0o.js → p-_COe-BX-.js} +3 -3
- package/dist/components/p-_COe-BX-.js.map +1 -0
- package/dist/components/{p-BYycGbL4.js → p-bMRGc2ya.js} +10 -10
- package/dist/components/{p-BYycGbL4.js.map → p-bMRGc2ya.js.map} +1 -1
- package/dist/components/sd-button.js +1 -1
- package/dist/components/sd-checkbox.js +1 -1
- package/dist/components/sd-date-box.js +1 -1
- package/dist/components/sd-date-picker.js +8 -8
- package/dist/components/sd-date-picker.js.map +1 -1
- package/dist/components/sd-date-range-picker.js +8 -8
- package/dist/components/sd-date-range-picker.js.map +1 -1
- package/dist/components/sd-guide.js +8 -8
- package/dist/components/sd-guide.js.map +1 -1
- package/dist/components/sd-icon.js +1 -1
- package/dist/components/sd-input.js +1 -1
- package/dist/components/sd-pagination.js +1 -1
- package/dist/components/sd-popover.js +8 -8
- package/dist/components/sd-popover.js.map +1 -1
- package/dist/components/sd-portal.js +1 -1
- package/dist/components/sd-select-option.js +1 -1
- package/dist/components/sd-select.js +9 -9
- package/dist/components/sd-select.js.map +1 -1
- package/dist/components/sd-table.js +11 -11
- package/dist/components/sd-table.js.map +1 -1
- package/dist/components/sd-tag.js +2 -2
- package/dist/components/sd-tooltip-portal.js +1 -1
- package/dist/components/sd-tooltip.js +1 -1
- package/dist/design-system/design-system.css +1 -1
- package/dist/design-system/design-system.esm.js +1 -1
- package/dist/design-system/{p-2d8ef8b7.entry.js → p-0f158e53.entry.js} +2 -2
- package/dist/design-system/{p-2d8ef8b7.entry.js.map → p-0f158e53.entry.js.map} +1 -1
- package/dist/design-system/p-1959dd61.entry.js +2 -0
- package/dist/design-system/{p-ae72caf9.entry.js.map → p-1959dd61.entry.js.map} +1 -1
- package/dist/design-system/p-21022434.entry.js +2 -0
- package/dist/design-system/p-21022434.entry.js.map +1 -0
- package/dist/design-system/{p-0be303fc.entry.js → p-48b56d5a.entry.js} +2 -2
- package/dist/design-system/{p-0be303fc.entry.js.map → p-48b56d5a.entry.js.map} +1 -1
- package/dist/design-system/p-4bc173bc.entry.js +2 -0
- package/dist/design-system/{p-2106f2b1.entry.js.map → p-4bc173bc.entry.js.map} +1 -1
- package/dist/design-system/{p-3ec8c5aa.entry.js → p-5b9b8671.entry.js} +2 -2
- package/dist/design-system/{p-3ec8c5aa.entry.js.map → p-5b9b8671.entry.js.map} +1 -1
- package/dist/design-system/p-6d7ade66.entry.js +2 -0
- package/dist/design-system/p-6d7ade66.entry.js.map +1 -0
- package/dist/design-system/{p-9edcce39.entry.js → p-6f114a26.entry.js} +2 -2
- package/dist/design-system/{p-3d8c249d.entry.js → p-7353d0bb.entry.js} +2 -2
- package/dist/design-system/{p-3d8c249d.entry.js.map → p-7353d0bb.entry.js.map} +1 -1
- package/dist/design-system/p-7d7eed25.entry.js +2 -0
- package/dist/design-system/{p-af40a2ec.entry.js.map → p-7d7eed25.entry.js.map} +1 -1
- package/dist/design-system/{p-95e7d47f.entry.js → p-978b5165.entry.js} +2 -2
- package/dist/design-system/{p-BctRHQf7.js → p-Di8dUbCh.js} +2 -2
- package/dist/design-system/{p-BctRHQf7.js.map → p-Di8dUbCh.js.map} +1 -1
- package/dist/design-system/{p-F7bQTYmD.js → p-KauK5hO3.js} +3 -3
- package/dist/design-system/p-KauK5hO3.js.map +1 -0
- package/dist/design-system/{p-9e1abc28.entry.js → p-a8ff23ce.entry.js} +2 -2
- package/dist/design-system/{p-9e1abc28.entry.js.map → p-a8ff23ce.entry.js.map} +1 -1
- package/dist/design-system/sd-button.sd-guide.sd-icon.sd-portal.entry.esm.js.map +1 -1
- package/dist/design-system/sd-checkbox.entry.esm.js.map +1 -1
- package/dist/design-system/sd-date-box.sd-input.entry.esm.js.map +1 -1
- package/dist/design-system/sd-date-picker.entry.esm.js.map +1 -1
- package/dist/design-system/sd-date-range-picker.entry.esm.js.map +1 -1
- package/dist/design-system/sd-pagination.sd-tooltip.entry.esm.js.map +1 -1
- package/dist/design-system/sd-popover.entry.esm.js.map +1 -1
- package/dist/design-system/sd-select-option.entry.esm.js.map +1 -1
- package/dist/design-system/sd-select.entry.esm.js.map +1 -1
- package/dist/design-system/sd-table.entry.esm.js.map +1 -1
- package/dist/esm/design-system.js +3 -3
- package/dist/esm/{index-F7bQTYmD.js → index-KauK5hO3.js} +3 -3
- package/dist/{design-system/p-F7bQTYmD.js.map → esm/index-KauK5hO3.js.map} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/sd-button.sd-guide.sd-icon.sd-portal.entry.js.map +1 -1
- package/dist/esm/sd-button_4.entry.js +8 -8
- package/dist/esm/sd-checkbox.entry.js +3 -3
- package/dist/esm/sd-checkbox.entry.js.map +1 -1
- package/dist/esm/sd-date-box.sd-input.entry.js.map +1 -1
- package/dist/esm/sd-date-box_2.entry.js +7 -7
- package/dist/esm/sd-date-picker.entry.js +4 -4
- package/dist/esm/sd-date-picker.entry.js.map +1 -1
- package/dist/esm/sd-date-range-picker.entry.js +4 -4
- package/dist/esm/sd-date-range-picker.entry.js.map +1 -1
- package/dist/esm/sd-pagination.sd-tooltip.entry.js.map +1 -1
- package/dist/esm/sd-pagination_2.entry.js +8 -8
- package/dist/esm/sd-popover.entry.js +5 -5
- package/dist/esm/sd-popover.entry.js.map +1 -1
- package/dist/esm/sd-select-option.entry.js +3 -3
- package/dist/esm/sd-select-option.entry.js.map +1 -1
- package/dist/esm/sd-select.entry.js +4 -4
- package/dist/esm/sd-select.entry.js.map +1 -1
- package/dist/esm/sd-table.entry.js +4 -4
- package/dist/esm/sd-table.entry.js.map +1 -1
- package/dist/esm/sd-tag.entry.js +2 -2
- package/dist/esm/sd-tooltip-portal.entry.js +2 -2
- package/dist/esm/{tooltipArrow-ClvHxQch.js → tooltipArrow-BlfIbijp.js} +3 -3
- package/dist/esm/{tooltipArrow-ClvHxQch.js.map → tooltipArrow-BlfIbijp.js.map} +1 -1
- package/dist/types/components/sd-guide/sd-guide.d.ts +3 -1
- package/dist/types/components.d.ts +2 -2
- package/package.json +2 -2
- package/dist/cjs/index-Dx2csts8.js.map +0 -1
- package/dist/components/p-C8U-8ibc.js +0 -104
- package/dist/components/p-C8U-8ibc.js.map +0 -1
- package/dist/components/p-dHboNV0o.js.map +0 -1
- package/dist/components/p-ru6C2WME.js.map +0 -1
- package/dist/design-system/p-2106f2b1.entry.js +0 -2
- package/dist/design-system/p-ae72caf9.entry.js +0 -2
- package/dist/design-system/p-af40a2ec.entry.js +0 -2
- package/dist/design-system/p-bda0d32b.entry.js +0 -2
- package/dist/design-system/p-bda0d32b.entry.js.map +0 -1
- package/dist/design-system/p-fa39b093.entry.js +0 -2
- package/dist/design-system/p-fa39b093.entry.js.map +0 -1
- package/dist/esm/index-F7bQTYmD.js.map +0 -1
- /package/dist/design-system/{p-9edcce39.entry.js.map → p-6f114a26.entry.js.map} +0 -0
- /package/dist/design-system/{p-95e7d47f.entry.js.map → p-978b5165.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-table.entry.cjs.js","sources":["src/components/sd-table/sd-table.scss?tag=sd-table","src/components/sd-table/sd-table.tsx"],"sourcesContent":["@import '../../styles/global.scss';\r\n\r\n.sd-table__container {\r\n width: 100%;\r\n border: 1px solid $grey_30;\r\n border-radius: 8px;\r\n font-size: 12px;\r\n overflow: hidden;\r\n\r\n .sd-table__middle {\r\n overflow: auto;\r\n will-change: scroll-position;\r\n height: var(--table-height, auto);\r\n @extend %scrollBar;\r\n\r\n .sd-table {\r\n width: 100%;\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n table-layout: fixed;\r\n\r\n &--selectable {\r\n td.sd-td--selected,\r\n th.sd-th--selected {\r\n width: 52px !important;\r\n max-width: 52px !important;\r\n min-width: 52px !important;\r\n padding: 0 10px 0 24px;\r\n text-align: left;\r\n }\r\n }\r\n\r\n &--sticky-header {\r\n thead {\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n }\r\n }\r\n\r\n &--sticky-column {\r\n th.sticky-left,\r\n th.sticky-right {\r\n position: sticky;\r\n background-color: $th-bg;\r\n z-index: 200 !important;\r\n }\r\n td.sticky-left,\r\n td.sticky-right {\r\n position: sticky;\r\n background-color: white;\r\n z-index: 100 !important;\r\n }\r\n\r\n .sticky-left {\r\n left: var(--sticky-left-offset, 0);\r\n }\r\n .sticky-right {\r\n right: var(--sticky-right-offset, 0);\r\n }\r\n\r\n th.sticky-cell {\r\n position: sticky;\r\n z-index: 102;\r\n background-color: $th-bg;\r\n }\r\n td.sticky-cell {\r\n position: sticky;\r\n z-index: 101;\r\n background-color: white;\r\n }\r\n }\r\n\r\n &--scrolled-left {\r\n th.sticky-left-edge,\r\n td.sticky-left-edge {\r\n overflow: visible;\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 100%;\r\n right: -20px;\r\n width: 20px;\r\n height: 100%;\r\n z-index: 101 !important;\r\n box-shadow: inset 12px 0 20px -25px;\r\n opacity: 1;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n\r\n &--scrolled-right {\r\n th.sticky-right-edge,\r\n td.sticky-right-edge {\r\n overflow: visible;\r\n\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -20px;\r\n width: 20px;\r\n height: 100%;\r\n z-index: 101 !important;\r\n box-shadow: inset -12px 0 20px -25px;\r\n opacity: 1;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n\r\n &--no-data {\r\n thead {\r\n opacity: 0.4;\r\n tr {\r\n th {\r\n &.sd-th {\r\n border-bottom: 1px solid rgba(225, 225, 225, 0.4) !important;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n td,\r\n th,\r\n .sd-th__content--label {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n word-break: keep-all;\r\n }\r\n\r\n thead {\r\n height: 36px;\r\n\r\n tr {\r\n width: 100%;\r\n\r\n th {\r\n background: $th-bg;\r\n height: 36px;\r\n padding: 0 16px;\r\n font-weight: 500;\r\n vertical-align: middle;\r\n border-bottom: 1px solid $grey_30;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n position: relative;\r\n\r\n &.sd-th {\r\n .sd-th__content {\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n &--left {\r\n justify-content: flex-start;\r\n }\r\n &--center {\r\n justify-content: center;\r\n }\r\n &--right {\r\n justify-content: flex-end;\r\n }\r\n }\r\n\r\n .sd-th__resizer {\r\n position: absolute;\r\n top: 50%;\r\n right: 0;\r\n transform: translateY(-50%);\r\n width: 4px;\r\n height: 16px;\r\n cursor: col-resize;\r\n z-index: 3;\r\n border-left: 1px solid $grey_45;\r\n border-right: 1px solid $grey_45;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n &:last-of-type {\r\n td {\r\n border-bottom: none;\r\n }\r\n }\r\n td {\r\n height: 44px;\r\n padding: 0 16px;\r\n border-bottom: 1px solid $grey_30;\r\n background: white;\r\n vertical-align: middle;\r\n\r\n &.sd-td {\r\n &--left {\r\n text-align: left;\r\n }\r\n &--center {\r\n text-align: center;\r\n }\r\n &--right {\r\n text-align: right;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .sd-table__bottom {\r\n background: white;\r\n text-align: center;\r\n }\r\n}\r\n\r\n.sd-table__pagination {\r\n background: $grey_05;\r\n height: 48px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid $grey_30;\r\n border-top: none;\r\n border-radius: 8px;\r\n}\r\n","import {\r\n Component,\r\n Element,\r\n Prop,\r\n State,\r\n Event,\r\n Watch,\r\n h,\r\n EventEmitter,\r\n Host,\r\n} from '@stencil/core';\r\n\r\nexport type SdTableSortDir = 'asc' | 'desc' | 'none';\r\n\r\nexport interface SdTableColumn {\r\n name: string;\r\n label: string;\r\n field: string | ((row: any) => any);\r\n align?: 'left' | 'center' | 'right';\r\n width?: string;\r\n format?: (value: any, row: any) => string;\r\n visible?: boolean;\r\n usePageMoveIcon?: boolean;\r\n tooltip?: string[];\r\n tooltipOptions?: Record<string, any>;\r\n}\r\n\r\nexport interface Row {\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n tag: 'sd-table',\r\n styleUrl: 'sd-table.scss',\r\n})\r\nexport class SdTable {\r\n @Element() el!: HTMLElement;\r\n\r\n @Prop() columns: SdTableColumn[] = [];\r\n @Prop({ mutable: true }) rows: Row[] = [];\r\n @Prop({ mutable: true }) selected: Set<Row> = new Set();\r\n @Prop() rowKey: string = 'id';\r\n @Prop() selectable: boolean = false;\r\n @Prop() resizable: boolean = false;\r\n @Prop() height?: number;\r\n @Prop() stickyHeader: boolean = false;\r\n @Prop() stickyColumn: { left?: number; right?: number } = { left: 0, right: 0 };\r\n @Prop() noDataLabel: string = '데이터가 없습니다.';\r\n @Prop() pagination?: {\r\n page: number;\r\n rowsPerPage: number;\r\n lastPage?: number;\r\n };\r\n @Prop() bodyCellRenderer?: (\r\n column: SdTableColumn,\r\n row: Row,\r\n ) => HTMLElement | string | null | undefined;\r\n\r\n @Event() sdSelectChange!: EventEmitter<Row[]>;\r\n @Event() sdPageChange!: EventEmitter<number>;\r\n\r\n @State() currentPage: number = this.pagination?.page || 1;\r\n @State() innerRows: Row[] = [];\r\n @State() innerSelected: Set<Row> = new Set();\r\n @State() columnWidths: number[] = [];\r\n @State() scrolledLeft: boolean = false;\r\n @State() scrolledRight: boolean = false;\r\n\r\n @Watch('columns')\r\n handleColumnsChange(newCols: SdTableColumn[]) {\r\n this.columnWidths = newCols.map(c => parseInt(c.width || '120', 10));\r\n }\r\n\r\n @Watch('rows')\r\n handleRowsChange(newRows: Row[]) {\r\n this.innerRows = [...newRows];\r\n }\r\n\r\n @Watch('selected')\r\n handleSelectedChange(newSelected: Set<Row>) {\r\n this.innerSelected = new Set(newSelected);\r\n }\r\n\r\n @Watch('pagination')\r\n handlePaginationChange(\r\n newVal?: { page: number; rowsPerPage: number; lastPage?: number } | undefined,\r\n ) {\r\n if (newVal?.page && newVal.page !== this.currentPage) this.currentPage = newVal.page;\r\n }\r\n\r\n componentWillLoad() {\r\n this.innerRows = [...this.rows];\r\n this.innerSelected = new Set(this.selected);\r\n this.columnWidths = this.columns.map(c => parseInt(c.width || '120', 10));\r\n }\r\n\r\n componentDidLoad() {\r\n const middle = this.el.querySelector('.sd-table__middle');\r\n if (!middle) return;\r\n\r\n const onScroll = () => {\r\n const { scrollLeft, scrollWidth, clientWidth } = middle as HTMLElement;\r\n this.scrolledLeft = scrollLeft > 0;\r\n this.scrolledRight = scrollLeft + clientWidth < scrollWidth;\r\n };\r\n middle.addEventListener('scroll', onScroll, { passive: true });\r\n onScroll();\r\n }\r\n\r\n // ----- Derived getters -----\r\n private get visibleColumns(): SdTableColumn[] {\r\n return this.columns.filter(col => col.visible !== false);\r\n }\r\n\r\n private get paginatedRows(): Row[] {\r\n if (!this.pagination) return this.innerRows;\r\n\r\n const { rowsPerPage = this.rows.length } = this.pagination || {};\r\n\r\n const result = this.innerRows.slice(\r\n (this.currentPage - 1) * rowsPerPage,\r\n this.currentPage * rowsPerPage,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n private get lastPageNumber(): number {\r\n const { lastPage, rowsPerPage = this.rows.length } = this.pagination || {};\r\n\r\n return lastPage ?? Math.max(1, Math.ceil(this.rows.length / rowsPerPage));\r\n }\r\n\r\n private get sdTableClasses() {\r\n return [\r\n 'sd-table',\r\n this.stickyHeader && 'sd-table--sticky-header',\r\n this.selectable && 'sd-table--selectable',\r\n this.resizable && 'sd-table--resizable',\r\n !this.innerRows.length && 'sd-table--no-data',\r\n ((this.stickyColumn?.left ?? 0) > 0 || (this.stickyColumn?.right ?? 0) > 0) &&\r\n 'sd-table--sticky-column',\r\n this.scrolledLeft && 'sd-table--scrolled-left',\r\n this.scrolledRight && 'sd-table--scrolled-right',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // ----- Selection -----\r\n private isRowSelected(row: Row): boolean {\r\n return Array.from(this.innerSelected).some(r => r[this.rowKey] === row[this.rowKey]);\r\n }\r\n\r\n private updateRowSelect(row: Row) {\r\n const selectedArray = Array.from(this.innerSelected);\r\n const exists = this.isRowSelected(row);\r\n const newSelected = exists\r\n ? selectedArray.filter(r => r[this.rowKey] !== row[this.rowKey])\r\n : [...selectedArray, row];\r\n\r\n // 동일 상태면 set하지 않음 → 불필요 렌더 방지\r\n if (newSelected.length === selectedArray.length) return;\r\n\r\n this.innerSelected = new Set(newSelected);\r\n this.sdSelectChange.emit(Array.from(this.innerSelected));\r\n }\r\n\r\n private toggleSelectAll(checked: boolean | any[]) {\r\n if (checked) {\r\n const pageRows = new Set([...this.paginatedRows]);\r\n this.innerSelected = new Set([...this.innerSelected, ...pageRows]);\r\n } else {\r\n const currentPageKeys = this.paginatedRows.map(r => r[this.rowKey]);\r\n this.innerSelected = new Set(\r\n [...this.innerSelected].filter(r => !currentPageKeys.includes(r[this.rowKey])),\r\n );\r\n }\r\n\r\n this.sdSelectChange.emit(Array.from(this.innerSelected));\r\n }\r\n\r\n private get isAllChecked(): boolean | null {\r\n const total = this.paginatedRows.length;\r\n const selectedCount = this.paginatedRows.filter(row =>\r\n Array.from(this.innerSelected).some(\r\n selectedRow => selectedRow[this.rowKey] === row[this.rowKey],\r\n ),\r\n ).length;\r\n\r\n if (selectedCount === 0) return false; // 아무것도 안 선택됨\r\n if (selectedCount === total) return true; // 전부 선택됨\r\n return null; // 일부만 선택됨\r\n }\r\n\r\n // ----- Helpers -----\r\n private getStickyStyle(colIdx: number) {\r\n const leftOffset =\r\n this.columnWidths.slice(0, colIdx).reduce((a, b) => a + b, 0) + (this.selectable ? 52 : 0);\r\n const rightOffset = this.columnWidths\r\n .filter((_, i) => i >= this.visibleColumns.length - (this.stickyColumn.right || 0) && i > colIdx)\r\n .reduce((a, b) => a + b, 0);\r\n return {\r\n '--sticky-left-offset': `${leftOffset}px`,\r\n '--sticky-right-offset': `${rightOffset}px`,\r\n 'width': `${this.columnWidths[colIdx]}px`,\r\n 'minWidth': `${this.columnWidths[colIdx]}px`,\r\n 'maxWidth': `${this.columnWidths[colIdx]}px`,\r\n };\r\n }\r\n\r\n private handleResize(index: number, event: MouseEvent) {\r\n const startX = event.clientX;\r\n const startWidth = this.columnWidths[index];\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50);\r\n\r\n this.columnWidths = this.columnWidths.map((width, idx) => (idx === index ? newWidth : width));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n }\r\n\r\n private getCellValue(column: SdTableColumn, row: Row) {\r\n const { field, format, name } = column;\r\n const value = typeof field === 'function' ? field(row) : field ? row[field] : row[name];\r\n return format ? format(value, row) : value;\r\n }\r\n\r\n // ----- Render -----\r\n private renderHeader() {\r\n return (\r\n <thead>\r\n <tr>\r\n {this.selectable && (\r\n <th\r\n class=\"sd-th sd-th--selected\"\r\n style={{\r\n width: '52px',\r\n minWidth: '52px',\r\n maxWidth: '52px',\r\n }}\r\n >\r\n <sd-checkbox\r\n checked={this.isAllChecked}\r\n disabled={!this.paginatedRows.length}\r\n onSdChange={(e: CustomEvent<boolean | any[]>) => this.toggleSelectAll(e.detail)}\r\n ></sd-checkbox>\r\n </th>\r\n )}\r\n {this.visibleColumns.map((col, colIdx) => (\r\n <th\r\n key={col.name}\r\n class={{\r\n 'sd-th': true,\r\n 'sticky-left': Boolean(this.stickyColumn.left && colIdx < this.stickyColumn.left),\r\n 'sticky-right': Boolean(\r\n this.stickyColumn.right && colIdx >= this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n 'sticky-left-edge': Boolean(\r\n this.stickyColumn.left && colIdx === this.stickyColumn.left - 1,\r\n ),\r\n 'sticky-right-edge': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx === this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n }}\r\n style={this.getStickyStyle(colIdx)}\r\n >\r\n <div class={`sd-th__content sd-th__content--${col.align || 'left'}`}>\r\n <div class=\"sd-th__content--label\">{col.label}</div>\r\n\r\n {col.usePageMoveIcon && <sd-icon name=\"pageMove\" size=\"12\" color=\"#006AC1\" />}\r\n\r\n {col.tooltip && (\r\n <sd-tooltip {...col.tooltipOptions}>\r\n {col.tooltip.map(text => (\r\n <div>{text}</div>\r\n ))}\r\n </sd-tooltip>\r\n )}\r\n </div>\r\n\r\n {this.resizable && (\r\n <div\r\n class=\"sd-th__resizer\"\r\n onMouseDown={(evt: MouseEvent) => this.handleResize(colIdx, evt)}\r\n ></div>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n );\r\n }\r\n\r\n private renderBody() {\r\n if (!this.paginatedRows.length)\r\n return (\r\n <tbody part=\"tbody-empty\">\r\n <tr>\r\n <td colSpan={this.visibleColumns.length + (this.selectable ? 1 : 0)}>{this.noDataLabel}</td>\r\n </tr>\r\n </tbody>\r\n );\r\n\r\n return (\r\n <tbody>\r\n {this.paginatedRows.map(row => (\r\n <tr key={row[this.rowKey]} class=\"hover:bg-Grey_Lighten-6\">\r\n {this.selectable && (\r\n <td class=\"sd-td sd-td--selected\">\r\n <sd-checkbox\r\n checked={this.isRowSelected(row)}\r\n disabled={!this.paginatedRows.length}\r\n onSdChange={() => this.updateRowSelect(row)}\r\n ></sd-checkbox>\r\n </td>\r\n )}\r\n {this.visibleColumns.map((column, colIdx) => {\r\n const rendered = this.bodyCellRenderer?.(column, row);\r\n\r\n return (\r\n <td\r\n key={column.name}\r\n part={`td-${column.name}`}\r\n class={{\r\n 'sd-td': true,\r\n [`sd-td--${column.align || 'left'}`]: true,\r\n 'sticky-left': Boolean(this.stickyColumn.left && colIdx < this.stickyColumn.left),\r\n 'sticky-right': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx >= this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n 'sticky-left-edge': Boolean(\r\n this.stickyColumn.left && colIdx === this.stickyColumn.left - 1,\r\n ),\r\n 'sticky-right-edge': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx === this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n }}\r\n style={this.getStickyStyle(colIdx)}\r\n >\r\n {rendered ? (\r\n typeof rendered === 'string' ? (\r\n <span innerHTML={rendered}></span>\r\n ) : (\r\n rendered\r\n )\r\n ) : (\r\n this.getCellValue(column, row)\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"sd-table__container\">\r\n <div\r\n class=\"sd-table__middle\"\r\n style={{\r\n '--table-height': this.height ? `${this.height}px` : 'auto',\r\n }}\r\n >\r\n <table part=\"table\" class={this.sdTableClasses}>\r\n {this.renderHeader()}\r\n\r\n {this.renderBody()}\r\n </table>\r\n </div>\r\n\r\n <div class=\"sd-table__bottom\"></div>\r\n </div>\r\n {this.pagination && this.innerRows.length > 0 && (\r\n <div class=\"sd-table__pagination\">\r\n <sd-pagination\r\n currentPage={this.currentPage}\r\n lastPage={this.lastPageNumber}\r\n onPageChange={(e: CustomEvent<number>) => {\r\n this.currentPage = e.detail;\r\n this.sdPageChange.emit(this.currentPage);\r\n }}\r\n ></sd-pagination>\r\n </div>\r\n )}\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"names":["h","Host"],"mappings":";;;;AAAA,MAAM,UAAU,GAAG,yozBAAyozB;;MCmC/ozB,OAAO,GAAA,MAAA;;;;;;;IAGX,OAAO,GAAoB,EAAE;IACZ,IAAI,GAAU,EAAE;AAChB,IAAA,QAAQ,GAAa,IAAI,GAAG,EAAE;IAC/C,MAAM,GAAW,IAAI;IACrB,UAAU,GAAY,KAAK;IAC3B,SAAS,GAAY,KAAK;AAC1B,IAAA,MAAM;IACN,YAAY,GAAY,KAAK;IAC7B,YAAY,GAAsC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACvE,WAAW,GAAW,YAAY;AAClC,IAAA,UAAU;AAKV,IAAA,gBAAgB;AAKf,IAAA,cAAc;AACd,IAAA,YAAY;IAEZ,WAAW,GAAW,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC;IAChD,SAAS,GAAU,EAAE;AACrB,IAAA,aAAa,GAAa,IAAI,GAAG,EAAE;IACnC,YAAY,GAAa,EAAE;IAC3B,YAAY,GAAY,KAAK;IAC7B,aAAa,GAAY,KAAK;AAGvC,IAAA,mBAAmB,CAAC,OAAwB,EAAA;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;;AAIrE,IAAA,gBAAgB,CAAC,OAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC;;AAI9B,IAAA,oBAAoB,CAAC,WAAqB,EAAA;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;;AAI1C,IAAA,sBAAsB,CACrB,MAA6E,EAAA;QAE7E,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI;;IAGrF,iBAAiB,GAAA;QAChB,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;;IAG1E,gBAAgB,GAAA;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC;AACzD,QAAA,IAAI,CAAC,MAAM;YAAE;QAEb,MAAM,QAAQ,GAAG,MAAK;YACrB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAqB;AACtE,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,GAAG,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW;AAC5D,SAAC;AACD,QAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,QAAA,QAAQ,EAAE;;;AAIX,IAAA,IAAY,cAAc,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC;;AAGzD,IAAA,IAAY,aAAa,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,SAAS;AAE3C,QAAA,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;QAEhE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAClC,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,WAAW,EACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAC9B;AAED,QAAA,OAAO,MAAM;;AAGd,IAAA,IAAY,cAAc,GAAA;AACzB,QAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE;QAE1E,OAAO,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;;AAG1E,IAAA,IAAY,cAAc,GAAA;QACzB,OAAO;YACN,UAAU;YACV,IAAI,CAAC,YAAY,IAAI,yBAAyB;YAC9C,IAAI,CAAC,UAAU,IAAI,sBAAsB;YACzC,IAAI,CAAC,SAAS,IAAI,qBAAqB;AACvC,YAAA,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,mBAAmB;YAC7C,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;gBACzE,yBAAyB;YAC1B,IAAI,CAAC,YAAY,IAAI,yBAAyB;YAC9C,IAAI,CAAC,aAAa,IAAI,0BAA0B;AAChD;aACC,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;;;AAIJ,IAAA,aAAa,CAAC,GAAQ,EAAA;AAC7B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAG7E,IAAA,eAAe,CAAC,GAAQ,EAAA;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QACtC,MAAM,WAAW,GAAG;cACjB,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/D,cAAE,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC;;AAG1B,QAAA,IAAI,WAAW,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM;YAAE;QAEjD,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;AAGjD,IAAA,eAAe,CAAC,OAAwB,EAAA;QAC/C,IAAI,OAAO,EAAE;AACZ,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC;;aAC5D;AACN,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAC3B,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAC9E;;AAGF,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;AAGzD,IAAA,IAAY,YAAY,GAAA;AACvB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,IAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAClC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAC5D,CACD,CAAC,MAAM;QAER,IAAI,aAAa,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,IAAI,aAAa,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACzC,OAAO,IAAI,CAAC;;;AAIL,IAAA,cAAc,CAAC,MAAc,EAAA;AACpC,QAAA,MAAM,UAAU,GACf,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3F,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC;AACvB,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM;AAC/F,aAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO;YACN,sBAAsB,EAAE,CAAG,EAAA,UAAU,CAAI,EAAA,CAAA;YACzC,uBAAuB,EAAE,CAAG,EAAA,WAAW,CAAI,EAAA,CAAA;YAC3C,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAI,EAAA,CAAA;YACzC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAI,EAAA,CAAA;YAC5C,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAI,EAAA,CAAA;SAC5C;;IAGM,YAAY,CAAC,KAAa,EAAE,KAAiB,EAAA;AACpD,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAE3C,QAAA,MAAM,eAAe,GAAG,CAAC,SAAqB,KAAI;AACjD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,EAAE,CAAC;AAEtE,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,MAAM,GAAG,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;AAC9F,SAAC;QAED,MAAM,aAAa,GAAG,MAAK;AAC1B,YAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,eAAe,CAAC;AAC1D,YAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;AACvD,SAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,CAAC;AACvD,QAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;;IAG5C,YAAY,CAAC,MAAqB,EAAE,GAAQ,EAAA;QACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM;AACtC,QAAA,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AACvF,QAAA,OAAO,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK;;;IAInC,YAAY,GAAA;AACnB,QAAA,QACCA,OAAA,CAAA,OAAA,EAAA,IAAA,EACCA,OAAA,CAAA,IAAA,EAAA,IAAA,EACE,IAAI,CAAC,UAAU,KACfA,OAAA,CAAA,IAAA,EAAA,EACC,KAAK,EAAC,uBAAuB,EAC7B,KAAK,EAAE;AACN,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,QAAQ,EAAE,MAAM;AAChB,gBAAA,QAAQ,EAAE,MAAM;AAChB,aAAA,EAAA,EAEDA,OAAA,CAAA,aAAA,EAAA,EACC,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EACpC,UAAU,EAAE,CAAC,CAA+B,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,EAAA,CACjE,CACX,CACL,EACA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,MACpCA,gBACC,GAAG,EAAE,GAAG,CAAC,IAAI,EACb,KAAK,EAAE;AACN,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACjF,cAAc,EAAE,OAAO,CACtB,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAM,CAC1F;AACD,gBAAA,kBAAkB,EAAE,OAAO,CAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAC/D;AACD,gBAAA,mBAAmB,EAAE,OAAO,CAC3B,IAAI,CAAC,YAAY,CAAC,KAAK;AACtB,oBAAA,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAM,CACjE;AACD,aAAA,EACD,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAA,EAElCA,OAAK,CAAA,KAAA,EAAA,EAAA,KAAK,EAAE,CAAA,+BAAA,EAAkC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAE,CAAA,EAAA,EAClEA,OAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,uBAAuB,IAAE,GAAG,CAAC,KAAK,CAAO,EAEnD,GAAG,CAAC,eAAe,IAAIA,OAAA,CAAA,SAAA,EAAA,EAAS,IAAI,EAAC,UAAU,EAAC,IAAI,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,EAAG,CAAA,EAE5E,GAAG,CAAC,OAAO,KACXA,OAAA,CAAA,YAAA,EAAA,EAAA,GAAgB,GAAG,CAAC,cAAc,EAAA,EAChC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KACpBA,OAAA,CAAA,KAAA,EAAA,IAAA,EAAM,IAAI,CAAO,CACjB,CAAC,CACU,CACb,CACI,EAEL,IAAI,CAAC,SAAS,KACdA,iBACC,KAAK,EAAC,gBAAgB,EACtB,WAAW,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAA,CAC1D,CACP,CACG,CACL,CAAC,CACE,CACE;;IAIF,UAAU,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;YAC7B,QACCA,OAAA,CAAA,OAAA,EAAA,EAAO,IAAI,EAAC,aAAa,EAAA,EACxBA,OAAA,CAAA,IAAA,EAAA,IAAA,EACCA,OAAA,CAAA,IAAA,EAAA,EAAI,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,EAAA,EAAG,IAAI,CAAC,WAAW,CAAM,CACxF,CACE;QAGV,QACCA,OACE,CAAA,OAAA,EAAA,IAAA,EAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAC1BA,OAAI,CAAA,IAAA,EAAA,EAAA,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAC,yBAAyB,EAAA,EACxD,IAAI,CAAC,UAAU,KACfA,OAAI,CAAA,IAAA,EAAA,EAAA,KAAK,EAAC,uBAAuB,EAAA,EAChCA,OAAA,CAAA,aAAA,EAAA,EACC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAChC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EACpC,UAAU,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAA,CAC7B,CACX,CACL,EACA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAI;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE,GAAG,CAAC;YAErD,QACCA,OACC,CAAA,IAAA,EAAA,EAAA,GAAG,EAAE,MAAM,CAAC,IAAI,EAChB,IAAI,EAAE,CAAM,GAAA,EAAA,MAAM,CAAC,IAAI,CAAA,CAAE,EACzB,KAAK,EAAE;AACN,oBAAA,OAAO,EAAE,IAAI;oBACb,CAAC,CAAA,OAAA,EAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAA,CAAE,GAAG,IAAI;AAC1C,oBAAA,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjF,oBAAA,cAAc,EAAE,OAAO,CACtB,IAAI,CAAC,YAAY,CAAC,KAAK;AACtB,wBAAA,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAM,CAChE;AACD,oBAAA,kBAAkB,EAAE,OAAO,CAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAC/D;AACD,oBAAA,mBAAmB,EAAE,OAAO,CAC3B,IAAI,CAAC,YAAY,CAAC,KAAK;AACtB,wBAAA,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAM,CACjE;iBACD,EACD,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAA,EAEjC,QAAQ,IACR,OAAO,QAAQ,KAAK,QAAQ,IAC3BA,OAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,QAAQ,EAAS,CAAA,KAElC,QAAQ,CACR,KAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAC9B,CACG;AAEP,SAAC,CAAC,CACE,CACL,CAAC,CACK;;IAIV,MAAM,GAAA;AACL,QAAA,QACCA,QAACC,UAAI,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,EACJD,OAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,qBAAqB,EAAA,EAC/BA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACC,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE;AACN,gBAAA,gBAAgB,EAAE,IAAI,CAAC,MAAM,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAA,EAAA,CAAI,GAAG,MAAM;aAC3D,EAAA,EAEDA,OAAO,CAAA,OAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAA,EAC5C,IAAI,CAAC,YAAY,EAAE,EAEnB,IAAI,CAAC,UAAU,EAAE,CACX,CACH,EAENA,OAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAK,KAAK,EAAC,kBAAkB,EAAA,CAAO,CAC/B,EACL,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,KAC5CA,OAAK,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,KAAK,EAAC,sBAAsB,EAAA,EAChCA,OAAA,CAAA,eAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EACC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,QAAQ,EAAE,IAAI,CAAC,cAAc,EAC7B,YAAY,EAAE,CAAC,CAAsB,KAAI;AACxC,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM;gBAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;AACzC,aAAC,EACe,CAAA,CACZ,CACN,CACK;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"sd-table.entry.cjs.js","sources":["src/components/sd-table/sd-table.scss?tag=sd-table&encapsulation=scoped","src/components/sd-table/sd-table.tsx"],"sourcesContent":["@import '../../styles/global.scss';\r\n\r\n.sd-table__container {\r\n width: 100%;\r\n border: 1px solid $grey_30;\r\n border-radius: 8px;\r\n font-size: 12px;\r\n overflow: hidden;\r\n\r\n .sd-table__middle {\r\n overflow: auto;\r\n will-change: scroll-position;\r\n height: var(--table-height, auto);\r\n @extend %scrollBar;\r\n\r\n .sd-table {\r\n width: 100%;\r\n border-collapse: separate;\r\n border-spacing: 0;\r\n table-layout: fixed;\r\n\r\n &--selectable {\r\n td.sd-td--selected,\r\n th.sd-th--selected {\r\n width: 52px !important;\r\n max-width: 52px !important;\r\n min-width: 52px !important;\r\n padding: 0 10px 0 24px;\r\n text-align: left;\r\n }\r\n }\r\n\r\n &--sticky-header {\r\n thead {\r\n position: sticky;\r\n top: 0;\r\n z-index: 2;\r\n }\r\n }\r\n\r\n &--sticky-column {\r\n th.sticky-left,\r\n th.sticky-right {\r\n position: sticky;\r\n background-color: $th-bg;\r\n z-index: 200 !important;\r\n }\r\n td.sticky-left,\r\n td.sticky-right {\r\n position: sticky;\r\n background-color: white;\r\n z-index: 100 !important;\r\n }\r\n\r\n .sticky-left {\r\n left: var(--sticky-left-offset, 0);\r\n }\r\n .sticky-right {\r\n right: var(--sticky-right-offset, 0);\r\n }\r\n\r\n th.sticky-cell {\r\n position: sticky;\r\n z-index: 102;\r\n background-color: $th-bg;\r\n }\r\n td.sticky-cell {\r\n position: sticky;\r\n z-index: 101;\r\n background-color: white;\r\n }\r\n }\r\n\r\n &--scrolled-left {\r\n th.sticky-left-edge,\r\n td.sticky-left-edge {\r\n overflow: visible;\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: 100%;\r\n right: -20px;\r\n width: 20px;\r\n height: 100%;\r\n z-index: 101 !important;\r\n box-shadow: inset 12px 0 20px -25px;\r\n opacity: 1;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n\r\n &--scrolled-right {\r\n th.sticky-right-edge,\r\n td.sticky-right-edge {\r\n overflow: visible;\r\n\r\n &:after {\r\n content: '';\r\n position: absolute;\r\n top: 0;\r\n left: -20px;\r\n width: 20px;\r\n height: 100%;\r\n z-index: 101 !important;\r\n box-shadow: inset -12px 0 20px -25px;\r\n opacity: 1;\r\n pointer-events: none;\r\n }\r\n }\r\n }\r\n\r\n &--no-data {\r\n thead {\r\n opacity: 0.4;\r\n tr {\r\n th {\r\n &.sd-th {\r\n border-bottom: 1px solid rgba(225, 225, 225, 0.4) !important;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n td,\r\n th,\r\n .sd-th__content--label {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n word-break: keep-all;\r\n }\r\n\r\n thead {\r\n height: 36px;\r\n\r\n tr {\r\n width: 100%;\r\n\r\n th {\r\n background: $th-bg;\r\n height: 36px;\r\n padding: 0 16px;\r\n font-weight: 500;\r\n vertical-align: middle;\r\n border-bottom: 1px solid $grey_30;\r\n -webkit-user-select: none;\r\n user-select: none;\r\n position: relative;\r\n\r\n &.sd-th {\r\n .sd-th__content {\r\n display: flex;\r\n flex-flow: row nowrap;\r\n align-items: center;\r\n gap: 4px;\r\n\r\n &--left {\r\n justify-content: flex-start;\r\n }\r\n &--center {\r\n justify-content: center;\r\n }\r\n &--right {\r\n justify-content: flex-end;\r\n }\r\n }\r\n\r\n .sd-th__resizer {\r\n position: absolute;\r\n top: 50%;\r\n right: 0;\r\n transform: translateY(-50%);\r\n width: 4px;\r\n height: 16px;\r\n cursor: col-resize;\r\n z-index: 3;\r\n border-left: 1px solid $grey_45;\r\n border-right: 1px solid $grey_45;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n tbody {\r\n tr {\r\n &:last-of-type {\r\n td {\r\n border-bottom: none;\r\n }\r\n }\r\n td {\r\n height: 44px;\r\n padding: 0 16px;\r\n border-bottom: 1px solid $grey_30;\r\n background: white;\r\n vertical-align: middle;\r\n\r\n &.sd-td {\r\n &--left {\r\n text-align: left;\r\n }\r\n &--center {\r\n text-align: center;\r\n }\r\n &--right {\r\n text-align: right;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n .sd-table__bottom {\r\n background: white;\r\n text-align: center;\r\n }\r\n}\r\n\r\n.sd-table__pagination {\r\n background: $grey_05;\r\n height: 48px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n border: 1px solid $grey_30;\r\n border-top: none;\r\n border-radius: 8px;\r\n}\r\n","import {\r\n Component,\r\n Element,\r\n Prop,\r\n State,\r\n Event,\r\n Watch,\r\n h,\r\n EventEmitter,\r\n Host,\r\n} from '@stencil/core';\r\n\r\nexport type SdTableSortDir = 'asc' | 'desc' | 'none';\r\n\r\nexport interface SdTableColumn {\r\n name: string;\r\n label: string;\r\n field: string | ((row: any) => any);\r\n align?: 'left' | 'center' | 'right';\r\n width?: string;\r\n format?: (value: any, row: any) => string;\r\n visible?: boolean;\r\n usePageMoveIcon?: boolean;\r\n tooltip?: string[];\r\n tooltipOptions?: Record<string, any>;\r\n}\r\n\r\nexport interface Row {\r\n [key: string]: any;\r\n}\r\n\r\n@Component({\r\n tag: 'sd-table',\r\n styleUrl: 'sd-table.scss',\r\n scoped: true,\r\n})\r\nexport class SdTable {\r\n @Element() el!: HTMLElement;\r\n\r\n @Prop() columns: SdTableColumn[] = [];\r\n @Prop({ mutable: true }) rows: Row[] = [];\r\n @Prop({ mutable: true }) selected: Set<Row> = new Set();\r\n @Prop() rowKey: string = 'id';\r\n @Prop() selectable: boolean = false;\r\n @Prop() resizable: boolean = false;\r\n @Prop() height?: number;\r\n @Prop() stickyHeader: boolean = false;\r\n @Prop() stickyColumn: { left?: number; right?: number } = { left: 0, right: 0 };\r\n @Prop() noDataLabel: string = '데이터가 없습니다.';\r\n @Prop() pagination?: {\r\n page: number;\r\n rowsPerPage: number;\r\n lastPage?: number;\r\n };\r\n @Prop() bodyCellRenderer?: (\r\n column: SdTableColumn,\r\n row: Row,\r\n ) => HTMLElement | string | null | undefined;\r\n\r\n @Event() sdSelectChange!: EventEmitter<Row[]>;\r\n @Event() sdPageChange!: EventEmitter<number>;\r\n\r\n @State() currentPage: number = this.pagination?.page || 1;\r\n @State() innerRows: Row[] = [];\r\n @State() innerSelected: Set<Row> = new Set();\r\n @State() columnWidths: number[] = [];\r\n @State() scrolledLeft: boolean = false;\r\n @State() scrolledRight: boolean = false;\r\n\r\n @Watch('columns')\r\n handleColumnsChange(newCols: SdTableColumn[]) {\r\n this.columnWidths = newCols.map(c => parseInt(c.width || '120', 10));\r\n }\r\n\r\n @Watch('rows')\r\n handleRowsChange(newRows: Row[]) {\r\n this.innerRows = [...newRows];\r\n }\r\n\r\n @Watch('selected')\r\n handleSelectedChange(newSelected: Set<Row>) {\r\n this.innerSelected = new Set(newSelected);\r\n }\r\n\r\n @Watch('pagination')\r\n handlePaginationChange(\r\n newVal?: { page: number; rowsPerPage: number; lastPage?: number } | undefined,\r\n ) {\r\n if (newVal?.page && newVal.page !== this.currentPage) this.currentPage = newVal.page;\r\n }\r\n\r\n componentWillLoad() {\r\n this.innerRows = [...this.rows];\r\n this.innerSelected = new Set(this.selected);\r\n this.columnWidths = this.columns.map(c => parseInt(c.width || '120', 10));\r\n }\r\n\r\n componentDidLoad() {\r\n const middle = this.el.querySelector('.sd-table__middle');\r\n if (!middle) return;\r\n\r\n const onScroll = () => {\r\n const { scrollLeft, scrollWidth, clientWidth } = middle as HTMLElement;\r\n this.scrolledLeft = scrollLeft > 0;\r\n this.scrolledRight = scrollLeft + clientWidth < scrollWidth;\r\n };\r\n middle.addEventListener('scroll', onScroll, { passive: true });\r\n onScroll();\r\n }\r\n\r\n // ----- Derived getters -----\r\n private get visibleColumns(): SdTableColumn[] {\r\n return this.columns.filter(col => col.visible !== false);\r\n }\r\n\r\n private get paginatedRows(): Row[] {\r\n if (!this.pagination) return this.innerRows;\r\n\r\n const { rowsPerPage = this.rows.length } = this.pagination || {};\r\n\r\n const result = this.innerRows.slice(\r\n (this.currentPage - 1) * rowsPerPage,\r\n this.currentPage * rowsPerPage,\r\n );\r\n\r\n return result;\r\n }\r\n\r\n private get lastPageNumber(): number {\r\n const { lastPage, rowsPerPage = this.rows.length } = this.pagination || {};\r\n\r\n return lastPage ?? Math.max(1, Math.ceil(this.rows.length / rowsPerPage));\r\n }\r\n\r\n private get sdTableClasses() {\r\n return [\r\n 'sd-table',\r\n this.stickyHeader && 'sd-table--sticky-header',\r\n this.selectable && 'sd-table--selectable',\r\n this.resizable && 'sd-table--resizable',\r\n !this.innerRows.length && 'sd-table--no-data',\r\n ((this.stickyColumn?.left ?? 0) > 0 || (this.stickyColumn?.right ?? 0) > 0) &&\r\n 'sd-table--sticky-column',\r\n this.scrolledLeft && 'sd-table--scrolled-left',\r\n this.scrolledRight && 'sd-table--scrolled-right',\r\n ]\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // ----- Selection -----\r\n private isRowSelected(row: Row): boolean {\r\n return Array.from(this.innerSelected).some(r => r[this.rowKey] === row[this.rowKey]);\r\n }\r\n\r\n private updateRowSelect(row: Row) {\r\n const selectedArray = Array.from(this.innerSelected);\r\n const exists = this.isRowSelected(row);\r\n const newSelected = exists\r\n ? selectedArray.filter(r => r[this.rowKey] !== row[this.rowKey])\r\n : [...selectedArray, row];\r\n\r\n // 동일 상태면 set하지 않음 → 불필요 렌더 방지\r\n if (newSelected.length === selectedArray.length) return;\r\n\r\n this.innerSelected = new Set(newSelected);\r\n this.sdSelectChange.emit(Array.from(this.innerSelected));\r\n }\r\n\r\n private toggleSelectAll(checked: boolean | any[]) {\r\n if (checked) {\r\n const pageRows = new Set([...this.paginatedRows]);\r\n this.innerSelected = new Set([...this.innerSelected, ...pageRows]);\r\n } else {\r\n const currentPageKeys = this.paginatedRows.map(r => r[this.rowKey]);\r\n this.innerSelected = new Set(\r\n [...this.innerSelected].filter(r => !currentPageKeys.includes(r[this.rowKey])),\r\n );\r\n }\r\n\r\n this.sdSelectChange.emit(Array.from(this.innerSelected));\r\n }\r\n\r\n private get isAllChecked(): boolean | null {\r\n const total = this.paginatedRows.length;\r\n const selectedCount = this.paginatedRows.filter(row =>\r\n Array.from(this.innerSelected).some(\r\n selectedRow => selectedRow[this.rowKey] === row[this.rowKey],\r\n ),\r\n ).length;\r\n\r\n if (selectedCount === 0) return false; // 아무것도 안 선택됨\r\n if (selectedCount === total) return true; // 전부 선택됨\r\n return null; // 일부만 선택됨\r\n }\r\n\r\n // ----- Helpers -----\r\n private getStickyStyle(colIdx: number) {\r\n const leftOffset =\r\n this.columnWidths.slice(0, colIdx).reduce((a, b) => a + b, 0) + (this.selectable ? 52 : 0);\r\n const rightOffset = this.columnWidths\r\n .filter((_, i) => i >= this.visibleColumns.length - (this.stickyColumn.right || 0) && i > colIdx)\r\n .reduce((a, b) => a + b, 0);\r\n return {\r\n '--sticky-left-offset': `${leftOffset}px`,\r\n '--sticky-right-offset': `${rightOffset}px`,\r\n 'width': `${this.columnWidths[colIdx]}px`,\r\n 'minWidth': `${this.columnWidths[colIdx]}px`,\r\n 'maxWidth': `${this.columnWidths[colIdx]}px`,\r\n };\r\n }\r\n\r\n private handleResize(index: number, event: MouseEvent) {\r\n const startX = event.clientX;\r\n const startWidth = this.columnWidths[index];\r\n\r\n const handleMouseMove = (moveEvent: MouseEvent) => {\r\n const newWidth = Math.max(startWidth + moveEvent.clientX - startX, 50);\r\n\r\n this.columnWidths = this.columnWidths.map((width, idx) => (idx === index ? newWidth : width));\r\n };\r\n\r\n const handleMouseUp = () => {\r\n document.removeEventListener('mousemove', handleMouseMove);\r\n document.removeEventListener('mouseup', handleMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMouseMove);\r\n document.addEventListener('mouseup', handleMouseUp);\r\n }\r\n\r\n private getCellValue(column: SdTableColumn, row: Row) {\r\n const { field, format, name } = column;\r\n const value = typeof field === 'function' ? field(row) : field ? row[field] : row[name];\r\n return format ? format(value, row) : value;\r\n }\r\n\r\n // ----- Render -----\r\n private renderHeader() {\r\n return (\r\n <thead>\r\n <tr>\r\n {this.selectable && (\r\n <th\r\n class=\"sd-th sd-th--selected\"\r\n style={{\r\n width: '52px',\r\n minWidth: '52px',\r\n maxWidth: '52px',\r\n }}\r\n >\r\n <sd-checkbox\r\n checked={this.isAllChecked}\r\n disabled={!this.paginatedRows.length}\r\n onSdChange={(e: CustomEvent<boolean | any[]>) => this.toggleSelectAll(e.detail)}\r\n ></sd-checkbox>\r\n </th>\r\n )}\r\n {this.visibleColumns.map((col, colIdx) => (\r\n <th\r\n key={col.name}\r\n class={{\r\n 'sd-th': true,\r\n 'sticky-left': Boolean(this.stickyColumn.left && colIdx < this.stickyColumn.left),\r\n 'sticky-right': Boolean(\r\n this.stickyColumn.right && colIdx >= this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n 'sticky-left-edge': Boolean(\r\n this.stickyColumn.left && colIdx === this.stickyColumn.left - 1,\r\n ),\r\n 'sticky-right-edge': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx === this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n }}\r\n style={this.getStickyStyle(colIdx)}\r\n >\r\n <div class={`sd-th__content sd-th__content--${col.align || 'left'}`}>\r\n <div class=\"sd-th__content--label\">{col.label}</div>\r\n\r\n {col.usePageMoveIcon && <sd-icon name=\"pageMove\" size=\"12\" color=\"#006AC1\" />}\r\n\r\n {col.tooltip && (\r\n <sd-tooltip {...col.tooltipOptions}>\r\n {col.tooltip.map(text => (\r\n <div>{text}</div>\r\n ))}\r\n </sd-tooltip>\r\n )}\r\n </div>\r\n\r\n {this.resizable && (\r\n <div\r\n class=\"sd-th__resizer\"\r\n onMouseDown={(evt: MouseEvent) => this.handleResize(colIdx, evt)}\r\n ></div>\r\n )}\r\n </th>\r\n ))}\r\n </tr>\r\n </thead>\r\n );\r\n }\r\n\r\n private renderBody() {\r\n if (!this.paginatedRows.length)\r\n return (\r\n <tbody part=\"tbody-empty\">\r\n <tr>\r\n <td colSpan={this.visibleColumns.length + (this.selectable ? 1 : 0)}>{this.noDataLabel}</td>\r\n </tr>\r\n </tbody>\r\n );\r\n\r\n return (\r\n <tbody>\r\n {this.paginatedRows.map(row => (\r\n <tr key={row[this.rowKey]} class=\"hover:bg-Grey_Lighten-6\">\r\n {this.selectable && (\r\n <td class=\"sd-td sd-td--selected\">\r\n <sd-checkbox\r\n checked={this.isRowSelected(row)}\r\n disabled={!this.paginatedRows.length}\r\n onSdChange={() => this.updateRowSelect(row)}\r\n ></sd-checkbox>\r\n </td>\r\n )}\r\n {this.visibleColumns.map((column, colIdx) => {\r\n const rendered = this.bodyCellRenderer?.(column, row);\r\n\r\n return (\r\n <td\r\n key={column.name}\r\n part={`td-${column.name}`}\r\n class={{\r\n 'sd-td': true,\r\n [`sd-td--${column.align || 'left'}`]: true,\r\n 'sticky-left': Boolean(this.stickyColumn.left && colIdx < this.stickyColumn.left),\r\n 'sticky-right': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx >= this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n 'sticky-left-edge': Boolean(\r\n this.stickyColumn.left && colIdx === this.stickyColumn.left - 1,\r\n ),\r\n 'sticky-right-edge': Boolean(\r\n this.stickyColumn.right &&\r\n colIdx === this.visibleColumns.length - this.stickyColumn.right!,\r\n ),\r\n }}\r\n style={this.getStickyStyle(colIdx)}\r\n >\r\n {rendered ? (\r\n typeof rendered === 'string' ? (\r\n <span innerHTML={rendered}></span>\r\n ) : (\r\n rendered\r\n )\r\n ) : (\r\n this.getCellValue(column, row)\r\n )}\r\n </td>\r\n );\r\n })}\r\n </tr>\r\n ))}\r\n </tbody>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <div class=\"sd-table__container\">\r\n <div\r\n class=\"sd-table__middle\"\r\n style={{\r\n '--table-height': this.height ? `${this.height}px` : 'auto',\r\n }}\r\n >\r\n <table part=\"table\" class={this.sdTableClasses}>\r\n {this.renderHeader()}\r\n\r\n {this.renderBody()}\r\n </table>\r\n </div>\r\n\r\n <div class=\"sd-table__bottom\"></div>\r\n </div>\r\n {this.pagination && this.innerRows.length > 0 && (\r\n <div class=\"sd-table__pagination\">\r\n <sd-pagination\r\n currentPage={this.currentPage}\r\n lastPage={this.lastPageNumber}\r\n onPageChange={(e: CustomEvent<number>) => {\r\n this.currentPage = e.detail;\r\n this.sdPageChange.emit(this.currentPage);\r\n }}\r\n ></sd-pagination>\r\n </div>\r\n )}\r\n </Host>\r\n );\r\n }\r\n}\r\n"],"names":["h","Host"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-eJV9DRUN.js');
|
|
4
4
|
|
|
5
5
|
const sdTagCss = ":host{display:inline-block}:host([full-width]){display:block}.sd-tag{display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;border:1px solid transparent;border-radius:4px;transition:all 0.2s ease-in-out;position:relative;overflow:hidden;white-space:nowrap;-webkit-user-select:none;user-select:none;box-sizing:border-box}.sd-tag--custom-color{background:var(--tag-bg-color);color:var(--tag-text-color)}.sd-tag--sm{padding:0 6px;font-size:11px;line-height:18px;height:20px;border-radius:4px}.sd-tag--md{padding:0 8px;font-size:12px;font-weight:700;line-height:20px;height:24px;border-radius:4px}.sd-tag--lg{padding:0 10px;font-size:14px;font-weight:700;line-height:24px;min-height:28px;border-radius:5px}.sd-tag--rounded.sd-tag--sm{border-radius:20px}.sd-tag--rounded.sd-tag--md{border-radius:20px}.sd-tag--rounded.sd-tag--lg{border-radius:15px}";
|
|
6
6
|
|
|
@@ -45,7 +45,7 @@ const SdTag = class {
|
|
|
45
45
|
}
|
|
46
46
|
render() {
|
|
47
47
|
const tagClasses = this.getTagClasses();
|
|
48
|
-
return (index.h("span", { key: '
|
|
48
|
+
return (index.h("span", { key: 'b16fa963430cafba6451888d44d531d01e42bc85', class: tagClasses, style: {
|
|
49
49
|
'--tag-bg-color': this.bgColor,
|
|
50
50
|
'--tag-text-color': this.textColor,
|
|
51
51
|
}, "aria-label": this.label || 'tag' }, this.renderContent()));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-eJV9DRUN.js');
|
|
4
4
|
|
|
5
5
|
const SdTooltipPortal = class {
|
|
6
6
|
constructor(hostRef) {
|
|
@@ -150,7 +150,7 @@ const SdTooltipPortal = class {
|
|
|
150
150
|
this.sdClose.emit();
|
|
151
151
|
}
|
|
152
152
|
render() {
|
|
153
|
-
return index.h("slot", { key: '
|
|
153
|
+
return index.h("slot", { key: '3a845f83619e1bff0b6b67abddd7fc21cb47e2ba' });
|
|
154
154
|
}
|
|
155
155
|
};
|
|
156
156
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-eJV9DRUN.js');
|
|
4
4
|
|
|
5
5
|
const TooltipArrow = (props) => (index.h("svg", { width: "16", height: "12", viewBox: "0 0 16 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props }, index.h("path", { d: "M8.83205 10.7519C8.43623 11.3457 7.56377 11.3457 7.16795 10.7519L1.04907e-06 -1.39876e-06L16 0L8.83205 10.7519Z", fill: "#07284A" })));
|
|
6
6
|
|
|
7
7
|
exports.TooltipArrow = TooltipArrow;
|
|
8
|
-
//# sourceMappingURL=tooltipArrow-
|
|
8
|
+
//# sourceMappingURL=tooltipArrow-nBURRjhe.js.map
|
|
9
9
|
|
|
10
|
-
//# sourceMappingURL=tooltipArrow-
|
|
10
|
+
//# sourceMappingURL=tooltipArrow-nBURRjhe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltipArrow-
|
|
1
|
+
{"version":3,"file":"tooltipArrow-nBURRjhe.js","sources":["src/components/assets/tooltipArrow.tsx"],"sourcesContent":["import { h } from '@stencil/core';\r\n\r\nexport const TooltipArrow = (props: SVGProps) => (\r\n <svg\r\n width=\"16\"\r\n height=\"12\"\r\n viewBox=\"0 0 16 12\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n {...props}\r\n >\r\n <path\r\n d=\"M8.83205 10.7519C8.43623 11.3457 7.56377 11.3457 7.16795 10.7519L1.04907e-06 -1.39876e-06L16 0L8.83205 10.7519Z\"\r\n fill=\"#07284A\"\r\n />\r\n </svg>\r\n);\r\n"],"names":["h"],"mappings":";;;;AAEa,MAAA,YAAY,GAAG,CAAC,KAAe,MAC3CA,OACC,CAAA,KAAA,EAAA,EAAA,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,KAC9B,KAAK,EAAA,EAETA,OACC,CAAA,MAAA,EAAA,EAAA,CAAC,EAAC,iHAAiH,EACnH,IAAI,EAAC,SAAS,EAAA,CACb,CACG;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h } from "@stencil/core";
|
|
1
|
+
import { h, Host } from "@stencil/core";
|
|
2
2
|
import { resolveColor } from "../../utils/color";
|
|
3
3
|
const ICON_SIZES = {
|
|
4
4
|
xs: 12,
|
|
@@ -50,10 +50,10 @@ export class SdButton {
|
|
|
50
50
|
const buttonClasses = this.getButtonClasses();
|
|
51
51
|
// 유틸로 색상 키 -> HEX 매핑 (없으면 원본 그대로)
|
|
52
52
|
const resolvedColor = resolveColor(this.color);
|
|
53
|
-
return (h("button", { key: '
|
|
53
|
+
return (h(Host, { key: 'ae4e4c2b3255ee21487bd857f84c8bfa31b93a41' }, h("button", { key: 'c45695065034c68c6f61bd820163f8a50572d99e', class: buttonClasses, type: this.type, disabled: this.disabled, onClick: this.handleClick, style: { '--button-color': resolvedColor, ...this.buttonStyle } }, h("div", { key: '13500c7e0f7476ba9e111a3b31ee3578018fb572', class: "sd-button__content" }, this.icon && (h("sd-icon", { key: 'dbf632796e8f199b93db99c26b3d7bc53e30c375', class: "sd-button__icon sd-button__icon--left", name: this.icon, size: this.iconSize ? this.iconSize : ICON_SIZES[this.size], color: this.iconColor ? this.iconColor : this.variant === 'primary' ? '#fff' : resolvedColor })), this.label && h("div", { key: '6703a0377d5f8eafea62a61a5987abeba10dcaf3', class: "sd-button__label" }, this.label), this.iconRight && (h("sd-icon", { key: 'a5071037fad2e76a4ffd94df547948b9192defe8', class: "sd-button__icon sd-button__icon--right", name: this.iconRight, size: ICON_SIZES[this.size], color: this.variant === 'primary' ? '#fff' : resolvedColor }))))));
|
|
54
54
|
}
|
|
55
55
|
static get is() { return "sd-button"; }
|
|
56
|
-
static get encapsulation() { return "
|
|
56
|
+
static get encapsulation() { return "scoped"; }
|
|
57
57
|
static get originalStyleUrls() {
|
|
58
58
|
return {
|
|
59
59
|
"$": ["sd-button.scss"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-button.js","sourceRoot":"","sources":["../../../src/components/sd-button/sd-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sd-button.js","sourceRoot":"","sources":["../../../src/components/sd-button/sd-button.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, h, Element, Event, EventEmitter, Host } from '@stencil/core';\r\nimport { resolveColor } from '../../utils/color';\r\n\r\nexport type ButtonVariant = 'primary' | 'outline' | 'ghost';\r\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';\r\n\r\nconst ICON_SIZES: { [key in ButtonSize]: number } = {\r\n xs: 12,\r\n sm: 16,\r\n md: 20,\r\n lg: 24,\r\n};\r\n\r\n@Component({\r\n tag: 'sd-button',\r\n styleUrl: 'sd-button.scss',\r\n scoped: true,\r\n})\r\nexport class SdButton {\r\n @Element() el!: HTMLElement;\r\n\r\n @Prop() variant?: ButtonVariant = 'primary';\r\n @Prop() size: ButtonSize = 'sm';\r\n @Prop() color: string = '#025497';\r\n @Prop() label: string = '';\r\n @Prop() disabled: boolean = false;\r\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Prop() icon?: IconName;\r\n @Prop() iconColor?: string;\r\n @Prop() iconSize?: number;\r\n @Prop() iconRight?: IconName;\r\n @Prop() noHover: boolean = false;\r\n\r\n @Prop() buttonStyle: StyleProps = {};\r\n @Prop() iconStyle: StyleProps = {};\r\n\r\n @Event() sdClick!: EventEmitter<MouseEvent>;\r\n\r\n private handleClick = (event: MouseEvent) => {\r\n if (this.disabled) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n this.sdClick.emit(event);\r\n };\r\n\r\n private getButtonClasses(): string {\r\n const classes = ['sd-button'];\r\n\r\n classes.push(`sd-button--${this.variant}`);\r\n classes.push(`sd-button--${this.size}`);\r\n classes.push(`sd-button--color-${this.color}`);\r\n\r\n if (this.disabled) {\r\n classes.push('sd-button--disabled');\r\n }\r\n\r\n if (!this.label && (this.icon || this.iconRight)) {\r\n classes.push('sd-button--icon-only');\r\n }\r\n\r\n if (this.noHover) {\r\n classes.push('sd-button--no-hover');\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n render() {\r\n const buttonClasses = this.getButtonClasses();\r\n // 유틸로 색상 키 -> HEX 매핑 (없으면 원본 그대로)\r\n const resolvedColor = resolveColor(this.color);\r\n\r\n return (\r\n <Host>\r\n <button\r\n class={buttonClasses}\r\n type={this.type}\r\n disabled={this.disabled}\r\n onClick={this.handleClick}\r\n style={{ '--button-color': resolvedColor, ...this.buttonStyle }}\r\n >\r\n <div class=\"sd-button__content\">\r\n {this.icon && (\r\n <sd-icon\r\n class=\"sd-button__icon sd-button__icon--left\"\r\n name={this.icon}\r\n size={this.iconSize ? this.iconSize : ICON_SIZES[this.size!]}\r\n color={\r\n this.iconColor ? this.iconColor : this.variant === 'primary' ? '#fff' : resolvedColor\r\n }\r\n ></sd-icon>\r\n )}\r\n\r\n {this.label && <div class=\"sd-button__label\">{this.label}</div>}\r\n\r\n {this.iconRight && (\r\n <sd-icon\r\n class=\"sd-button__icon sd-button__icon--right\"\r\n name={this.iconRight}\r\n size={ICON_SIZES[this.size!]}\r\n color={this.variant === 'primary' ? '#fff' : resolvedColor}\r\n ></sd-icon>\r\n )}\r\n </div>\r\n </button>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h } from "@stencil/core";
|
|
1
|
+
import { h, Host, } from "@stencil/core";
|
|
2
2
|
export class SdCheckbox {
|
|
3
3
|
el;
|
|
4
4
|
/** 현재 선택 상태 또는 배열 형태의 값 */
|
|
@@ -60,10 +60,10 @@ export class SdCheckbox {
|
|
|
60
60
|
this.sdChange.emit(newValue);
|
|
61
61
|
};
|
|
62
62
|
render() {
|
|
63
|
-
return (h("label", { key: '
|
|
63
|
+
return (h(Host, { key: 'bad008e2f4b4bbc0c1c46b525ee16b9852c3267f' }, h("label", { key: 'bf03af829477bbd34b5e119dcc769b8c0c8d661b', class: this.getCheckboxClasses() }, h("input", { key: 'b543615e4371db97140e9eec5cfd01316b6cc944', type: "checkbox", checked: this.isChecked, disabled: this.disabled, onChange: this.handleChange }), h("div", { key: 'cd5d958422878d37fad90bfc7ce5a99adb668f9d', class: "sd-checkbox__bg", style: this.checkboxStyle }, this.isChecked ? (h("sd-icon", { name: "check", size: 12, color: this.disabled ? '#888888' : 'white' })) : null), this.label && h("span", { key: 'f1ad9310808024cb6d0f716dfc4cf06e056aba74', class: "sd-checkbox__label" }, this.label))));
|
|
64
64
|
}
|
|
65
65
|
static get is() { return "sd-checkbox"; }
|
|
66
|
-
static get encapsulation() { return "
|
|
66
|
+
static get encapsulation() { return "scoped"; }
|
|
67
67
|
static get originalStyleUrls() {
|
|
68
68
|
return {
|
|
69
69
|
"$": ["sd-checkbox.scss"]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-checkbox.js","sourceRoot":"","sources":["../../../src/components/sd-checkbox/sd-checkbox.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"sd-checkbox.js","sourceRoot":"","sources":["../../../src/components/sd-checkbox/sd-checkbox.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\r\n Component,\r\n Prop,\r\n h,\r\n Element,\r\n Event,\r\n EventEmitter,\r\n State,\r\n Watch,\r\n Host,\r\n} from '@stencil/core';\r\n\r\n@Component({\r\n tag: 'sd-checkbox',\r\n styleUrl: 'sd-checkbox.scss',\r\n scoped: true,\r\n})\r\nexport class SdCheckbox {\r\n @Element() el!: HTMLElement;\r\n\r\n /** 현재 선택 상태 또는 배열 형태의 값 */\r\n @Prop() checked: any[] | any = false;\r\n\r\n /** 배열 모드에서의 개별 값 */\r\n @Prop() val?: any;\r\n\r\n /** 비활성화 여부 */\r\n @Prop() disabled: boolean = false;\r\n\r\n /** 표시할 라벨 텍스트 */\r\n @Prop() label: string = '';\r\n\r\n @Prop() checkboxStyle: StyleProps = {};\r\n\r\n /** 내부 체크 상태 */\r\n @State() private isChecked: boolean = false;\r\n\r\n /** 값 변경 이벤트 */\r\n @Event() sdChange!: EventEmitter<any | any[]>;\r\n\r\n componentWillLoad() {\r\n this.updateCheckedState(this.checked);\r\n }\r\n\r\n @Watch('checked')\r\n watchValueHandler(newValue: any | any[]) {\r\n this.updateCheckedState(newValue);\r\n }\r\n\r\n private getCheckboxClasses(): string {\r\n const classes = ['sd-checkbox', `sd-checkbox--${this.isChecked ? 'checked' : 'unchecked'}`];\r\n\r\n if (this.disabled) {\r\n classes.push('sd-checkbox--disabled');\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n private updateCheckedState(value: any | any[]) {\r\n if (typeof value === 'boolean') {\r\n this.isChecked = value;\r\n } else if (Array.isArray(value)) {\r\n this.isChecked = this.val !== undefined && value.includes(this.val);\r\n } else {\r\n this.isChecked = false;\r\n }\r\n }\r\n\r\n private handleChange = () => {\r\n if (this.disabled) return;\r\n\r\n let newValue: any | any[];\r\n\r\n if (typeof this.checked === 'boolean') {\r\n newValue = !this.checked;\r\n } else if (Array.isArray(this.checked)) {\r\n if (this.val === undefined) {\r\n console.warn('A \"val\" property is required when using an array for the \"value\" property.');\r\n return;\r\n }\r\n\r\n const valueSet = new Set(this.checked);\r\n valueSet.has(this.val) ? valueSet.delete(this.val) : valueSet.add(this.val);\r\n newValue = Array.from(valueSet);\r\n } else {\r\n newValue = !this.isChecked;\r\n }\r\n\r\n this.sdChange.emit(newValue);\r\n };\r\n\r\n render() {\r\n return (\r\n <Host>\r\n <label class={this.getCheckboxClasses()}>\r\n <input\r\n type=\"checkbox\"\r\n checked={this.isChecked}\r\n disabled={this.disabled}\r\n onChange={this.handleChange}\r\n />\r\n <div class=\"sd-checkbox__bg\" style={this.checkboxStyle}>\r\n {this.isChecked ? (\r\n <sd-icon name=\"check\" size={12} color={this.disabled ? '#888888' : 'white'} />\r\n ) : null}\r\n </div>\r\n {this.label && <span class=\"sd-checkbox__label\">{this.label}</span>}\r\n </label>\r\n </Host>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -23,7 +23,7 @@ export class SdDateBox {
|
|
|
23
23
|
this.sdMouseOver?.emit(this.date);
|
|
24
24
|
}
|
|
25
25
|
render() {
|
|
26
|
-
return (h(Host, { key: '
|
|
26
|
+
return (h(Host, { key: '992ba0be8b908a910f2d572c665fce75570e7956', role: "button", "aria-disabled": this.disabled ? 'true' : 'false', tabindex: this.disabled ? -1 : 0, class: {
|
|
27
27
|
'sd-date-box': true,
|
|
28
28
|
'sd-hoverable': !this.disabled || !this.selected || this.type === '',
|
|
29
29
|
'sd-date-box--disabled': this.disabled,
|
|
@@ -34,7 +34,7 @@ export class SdDateBox {
|
|
|
34
34
|
'sd-date-box--in-range': this.inRange,
|
|
35
35
|
'sd-date-box--type-start': this.type === 'start',
|
|
36
36
|
'sd-date-box--type-end': this.type === 'end',
|
|
37
|
-
}, onClick: () => this.handleClickDate(), onMouseOver: () => this.handleHoverDate() }, h("div", { key: '
|
|
37
|
+
}, onClick: () => this.handleClickDate(), onMouseOver: () => this.handleHoverDate() }, h("div", { key: '5673658e4532547f57e86babfce2ac9c8399cfa7', class: "sd-date-box__content" }, h("div", { key: '1e978a0bbf7a1f3e8d13d541d5d75e1b8568ddd8', class: "sd-date-box__label" }, this.date))));
|
|
38
38
|
}
|
|
39
39
|
static get is() { return "sd-date-box"; }
|
|
40
40
|
static get encapsulation() { return "scoped"; }
|
|
@@ -74,9 +74,9 @@ export class SdDatePicker {
|
|
|
74
74
|
this.isOpen = false;
|
|
75
75
|
};
|
|
76
76
|
render() {
|
|
77
|
-
return (h(Host, { key: '
|
|
77
|
+
return (h(Host, { key: '7f25fe19940087b6a8d4ec2639dd84833034bc72', class: "sd-date-picker" }, h("sd-input", { key: 'c2d0eeba3dcb13142a38d29943eb71911cb9fd86', ref: el => (this.inputEl = el), value: this.date, label: this.label, "inside-label": true, readonly: true, disabled: this.disabled, inputClass: "text-center", inputStyle: {
|
|
78
78
|
margin: '0 0 0 8px',
|
|
79
|
-
}, onClick: () => this.openMenu() }, h("sd-icon", { key: '
|
|
79
|
+
}, onClick: () => this.openMenu() }, h("sd-icon", { key: '86660591177b91d9ea9463619631af973eb94b8e', slot: "prefix", name: "date", size: "16", color: "#737373", class: "date-icon", onClick: () => this.openMenu() })), this.isOpen && (h("sd-portal", { key: '9f38b78302db746379968d10905be4cad44219e9', open: this.isOpen, parentRef: this.inputEl, onSdClose: this.handleClose }, h("div", { key: '295539c5374bddc50b6947c7e451ad5c563fe94a', class: "sd-date-picker__menu" }, h("div", { key: '43f91099cd421ee1d11433579cb0db7ae46c381e', class: "sd-date-picker__header" }, h("div", { key: 'fdeb6f059903e81cf18f917ef076f15f040f746b', class: "year-nav" }, h("button", { key: 'a539fa46145bde41dd4b17da48b1a80ee62cf97e', type: "button", name: "prev-year", title: "Previous Year", onClick: () => this.setCurrentYear(this.currentYear - 1) }, h("sd-icon", { key: 'fc4cde6dcb1b536bf86b58576fd6c32048c13e61', name: "arrowLeft", size: "12", color: "#CCCCCC" })), h("span", { key: '6d9d60a0d6f57c82aa94422b2e1096ab8cf60322', class: "year-nav__current" }, this.currentYear), h("button", { key: '047cc4c2ac9707f632ac2987cfc3ed7aa0a23486', type: "button", name: "next-year", title: "Next Year", onClick: () => this.setCurrentYear(this.currentYear + 1) }, h("sd-icon", { key: '37bbc1ec4412806ecd97a06e025227f0f83facd8', name: "arrowRight", size: "12", color: "#CCCCCC" }))), h("div", { key: '6a8d98d2a0e49b0fc9d07eb098d9d8e6dc4f705a', class: "month-nav" }, h("button", { key: '300151b8e212025f221ef8b4e7c5da32b0fd13ca', type: "button", name: "prev-month", title: "Previous ", onClick: () => this.handleUpdateMonth('prev') }, h("sd-icon", { key: 'b9a5822af1de65d2e79338680143fceeebf8292a', name: "arrowLeft", size: "12", color: "#CCCCCC" })), h("span", { key: 'fd3c22b6eb4d10ce0df5097709d55e6426d070a8', class: "month-nav__current" }, this.currentMonth, "\uC6D4"), h("button", { key: '4e8bcb9708a9aec649aa111b705b10c8f485a4d0', type: "button", name: "next-month", title: "Next Month", onClick: () => this.handleUpdateMonth('next') }, h("sd-icon", { key: '943df568d382c139e77d5b17bc5f32657b190cbc', name: "arrowRight", size: "12", color: "#CCCCCC" })))), h("div", { key: '8de6da2b112c68ca61197e16ed512013e25ce668', class: "sd-date-picker__days" }, ['일', '월', '화', '수', '목', '금', '토'].map(day => (h("div", { key: day, class: "day" }, day)))), h("div", { key: '649cfdd71aa7275ff0b3f90e13cadfcd78acff68', class: "sd-date-picker__body" }, [
|
|
80
80
|
...this.calendar.prevMonthDays,
|
|
81
81
|
...this.calendar.days,
|
|
82
82
|
...this.calendar.afterMonthDays,
|
|
@@ -137,9 +137,9 @@ export class SdDateRangePicker {
|
|
|
137
137
|
this.isOpen = false;
|
|
138
138
|
};
|
|
139
139
|
render() {
|
|
140
|
-
return (h(Host, { key: '
|
|
140
|
+
return (h(Host, { key: '4af937257ba809f3a46e53cbdfd93ed811bff28f', class: "sd-date-range-picker" }, h("sd-input", { key: 'ae47eca04301a2ec14d97e421b663697ecba35e3', ref: el => (this.inputEl = el), value: `${this.dateRange[0]} ~ ${this.dateRange[1]}`, label: this.label, "inside-label": true, readonly: true, disabled: this.disabled, inputClass: "text-center", inputStyle: {
|
|
141
141
|
margin: '0 0 0 8px',
|
|
142
|
-
}, onClick: () => this.openMenu() }, h("sd-icon", { key: '
|
|
142
|
+
}, onClick: () => this.openMenu() }, h("sd-icon", { key: '1b146d7f4c2ca35241a74eb2c0eb045c56a3b8ec', slot: "prefix", name: "date", size: "16", color: "#737373", class: "date-icon", onClick: () => this.openMenu() })), this.isOpen && (h("sd-portal", { key: 'f12a79e23e611b34148cbc4477505c5521fc9b99', open: this.isOpen, parentRef: this.inputEl, onSdClose: this.handleClose }, h("div", { key: '19f65644f08c55aca12f20da6ecb93ac2190fd5a', class: "sd-date-range-picker__menu" }, h("div", { key: '02b29d14d319144bcf43f660a2815873b0ad8ba9', class: "sd-date-range-picker__header mb-16pxr flex flex-nowrap items-center justify-center" }, h("button", { key: '77e91e8603595770203d55a25afb5091b3389620', type: "button", name: "prev", title: "Previous", onClick: () => this.setPrevYear(this.prevYear - 1) }, h("sd-icon", { key: '7d17fc7a981ef911f5673976a2a7d6dffb186b60', name: "arrowLeft", size: "12", color: "#CCCCCC" })), h("div", { key: '16e43058070b9fe8f81b975b1be1a8b8b0a64fa6', class: "header-label" }, this.prevYear), h("button", { key: '401d711456467b751094fcb02e6fb5ddc3bde978', type: "button", name: "next", title: "Next", onClick: () => this.setPrevYear(this.prevYear + 1) }, h("sd-icon", { key: '8b8c486b7bd921dc374ae252ca233daa09c854c4', name: "arrowRight", size: "12", color: "#CCCCCC" }))), h("div", { key: '3875858b39253f58781d05fb94f9029ecf70e866', class: "sd-date-range-picker__body" }, [this.prevCalendar, this.nextCalendar].map((calendar, index) => (h(Fragment, null, index === 1 && h("div", { class: "separator" }), h("div", { key: index, class: "calendar-container" }, h("div", { class: "calendar-header" }, h("button", { type: "button", name: "month", title: "Month", class: index === 0 ? 'header-button-prev' : 'header-button-next', onClick: () => this.updateYearMonth(index === 0 ? 'prev' : 'next') }, h("sd-icon", { name: index === 0 ? 'arrowLeft' : 'arrowRight', size: "12", color: "#CCCCCC" })), index === 0
|
|
143
143
|
? `${this.prevYear}.${String(this.prevMonth).padStart(2, '0')}`
|
|
144
144
|
: `${this.nextYear}.${String(this.nextMonth).padStart(2, '0')}`), h("div", { class: "calendar-days" }, ['일', '월', '화', '수', '목', '금', '토'].map(day => (h("sd-date-box", { key: day, date: day, disabled: true, class: "day" })))), h("div", { class: "calendar-body mt-12pxr grid grid-cols-7 gap-y-8pxr" }, [...calendar.prevMonthDays, ...calendar.days, ...calendar.afterMonthDays].map((day, idx) => (h("sd-date-box", { key: `prev${day}_${idx}`, date: !day ? '' : Number(day), selected: this.dateRange.some(date => date ===
|
|
145
145
|
this.dateUtil.formatDate(index === 0 ? this.prevYear : this.nextYear, index === 0 ? this.prevMonth : this.nextMonth, Number(day))), type: this.getDateBoxType(this.dateUtil.formatDate(index === 0 ? this.prevYear : this.nextYear, index === 0 ? this.prevMonth : this.nextMonth, Number(day))), isToday: today ===
|
|
@@ -1158,6 +1158,12 @@ button:focus {
|
|
|
1158
1158
|
outline: 0 !important;
|
|
1159
1159
|
}
|
|
1160
1160
|
|
|
1161
|
+
:host {
|
|
1162
|
+
display: inline-block;
|
|
1163
|
+
height: fit-content;
|
|
1164
|
+
line-height: 0;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1161
1167
|
.text-center {
|
|
1162
1168
|
text-align: center;
|
|
1163
1169
|
}
|
|
@@ -1354,16 +1360,12 @@ textarea {
|
|
|
1354
1360
|
cursor: pointer;
|
|
1355
1361
|
}
|
|
1356
1362
|
|
|
1357
|
-
*,
|
|
1358
|
-
*::before {
|
|
1359
|
-
box-sizing: border-box;
|
|
1360
|
-
}
|
|
1361
|
-
|
|
1362
1363
|
.sd-guide__popup {
|
|
1363
1364
|
position: relative;
|
|
1364
1365
|
padding: 20px 32px;
|
|
1365
1366
|
border-radius: 8px;
|
|
1366
1367
|
box-shadow: 4px 4px 24px 4px rgba(0, 0, 0, 0.1);
|
|
1368
|
+
background: white;
|
|
1367
1369
|
}
|
|
1368
1370
|
.sd-guide__popup__close {
|
|
1369
1371
|
position: absolute;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Host, h } from "@stencil/core";
|
|
2
2
|
import colors from "../../styles/color.json";
|
|
3
|
-
// type GuideType = 'help' | 'pdf' | 'youtube' | 'notion' | 'event';
|
|
4
3
|
export class SdGuide {
|
|
5
4
|
el;
|
|
6
5
|
type = 'help';
|
|
@@ -67,7 +66,7 @@ export class SdGuide {
|
|
|
67
66
|
};
|
|
68
67
|
render() {
|
|
69
68
|
const { name: iconName, size: iconSize, color: iconColor } = this.getGuidIcon();
|
|
70
|
-
return (h(Host, { key: '
|
|
69
|
+
return (h(Host, { key: 'eb3873c0f3c38208bb1c7bceea0c16748d10123e', style: this.getGuideStyle() }, h("sd-button", { key: '7aa64a9d56ea64516680fc52226d738a20fb24bb', ref: el => (this.guideRef = el), class: this.getGuideClasses(), variant: "outline", label: SdGuide.guideTitle[this.type], size: "md", color: "var(--guide-color)", icon: iconName, iconColor: iconColor, iconSize: iconSize, iconStyle: { marginRight: '4px' }, buttonStyle: {
|
|
71
70
|
height: '28px',
|
|
72
71
|
minHeight: '28px',
|
|
73
72
|
padding: '4px 12px',
|
|
@@ -77,7 +76,7 @@ export class SdGuide {
|
|
|
77
76
|
fontSize: '12px',
|
|
78
77
|
fontWeight: '400',
|
|
79
78
|
backgroundColor: 'var(--guide-background)',
|
|
80
|
-
}, onSdClick: this.handleClickGuide }), this.type === 'help' && this.popupShow && (h("sd-portal", { key: '
|
|
79
|
+
}, onSdClick: this.handleClickGuide }), this.type === 'help' && this.popupShow && (h("sd-portal", { key: '8c8d401cf365376553e3c23abec6f43823e89217', open: this.popupShow, parentRef: this.guideRef, onSdClose: this.closeDropdown, offset: [0, 24] }, h("div", { key: 'ac6a0acd0ab0e8ff9d51954fc81ae4bd0f2091ff', class: "sd-guide__popup", style: { width: this.popupWidth ? this.popupWidth + 'px' : '426px' } }, h("sd-button", { key: '52c6e7cce6c0525f20ddea26c759c36c614671ab', class: "sd-guide__popup__close", icon: "close", color: colors.grey_65, size: "md", variant: "ghost", noHover: true, buttonStyle: { padding: '0px', minHeight: '0px' }, onSdClick: this.closeDropdown }), h("div", { key: 'fa1a7b0f0fdd97aa65bba2ba5dee724dd774c296', class: "sd-guide__popup__header" }, h("sd-icon", { key: '7d786d08caf15673e33c3c8de73410978104aaff', name: "helpOutline", size: 24, color: colors.green_65 }), h("h3", { key: 'd31e03e34ebab5c32fd4d123f954ce9ef67c3fc9', class: "sd-guide__popup__title" }, this.popupTitle || SdGuide.guideTitle[this.type])), h("ul", { key: 'a294ecc2bf1b20252191711f20aa10098b9d0175', class: "sd-guide__popup__list" }, this.renderListItem(this.message)))))));
|
|
81
80
|
}
|
|
82
81
|
// 현재 2depth까지만 스타일 적용
|
|
83
82
|
renderListItem(message, depth = 0) {
|
|
@@ -96,6 +95,7 @@ export class SdGuide {
|
|
|
96
95
|
return (h("li", { class: `sd-guide__popup__list__item sd-guide__popup__list__item--depth-${depth}` }, h("p", { innerHTML: listContent })));
|
|
97
96
|
};
|
|
98
97
|
static get is() { return "sd-guide"; }
|
|
98
|
+
static get encapsulation() { return "scoped"; }
|
|
99
99
|
static get originalStyleUrls() {
|
|
100
100
|
return {
|
|
101
101
|
"$": ["sd-guide.scss"]
|
|
@@ -112,9 +112,14 @@ export class SdGuide {
|
|
|
112
112
|
"type": "string",
|
|
113
113
|
"mutable": false,
|
|
114
114
|
"complexType": {
|
|
115
|
-
"original": "
|
|
115
|
+
"original": "GuideType",
|
|
116
116
|
"resolved": "\"event\" | \"help\" | \"notion\" | \"pdf\" | \"youtube\"",
|
|
117
|
-
"references": {
|
|
117
|
+
"references": {
|
|
118
|
+
"GuideType": {
|
|
119
|
+
"location": "global",
|
|
120
|
+
"id": "global::GuideType"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
118
123
|
},
|
|
119
124
|
"required": false,
|
|
120
125
|
"optional": false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sd-guide.js","sourceRoot":"","sources":["../../../src/components/sd-guide/sd-guide.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, Prop, State, h } from '@stencil/core';\r\nimport colors from '../../styles/color.json';\r\n\r\n// type GuideType = 'help' | 'pdf' | 'youtube' | 'notion' | 'event';\r\n\r\n@Component({\r\n tag: 'sd-guide',\r\n styleUrl: 'sd-guide.scss',\r\n})\r\nexport class SdGuide {\r\n @Element() el!: HTMLElement;\r\n\r\n @Prop() type: 'help' | 'pdf' | 'youtube' | 'notion' | 'event' = 'help';\r\n @Prop() popupTitle: string = '';\r\n @Prop() message: string | string[] = '';\r\n @Prop() guideUrl: string = '';\r\n @Prop() popupWidth?: number;\r\n\r\n @State() popupShow: boolean = false;\r\n\r\n private guideRef?: HTMLElement;\r\n\r\n static guideTitle = {\r\n help: '활용 Tip',\r\n pdf: 'PDF Guide',\r\n youtube: 'Video Guide',\r\n notion: '사용 가이드',\r\n event: 'Event Button',\r\n };\r\n\r\n private handleClickGuide = () => {\r\n if (this.type === 'help') {\r\n this.popupShow = !this.popupShow;\r\n return;\r\n }\r\n\r\n if (this.guideUrl) {\r\n window.open(this.guideUrl, '_blank');\r\n }\r\n };\r\n\r\n private getGuideClasses(): string {\r\n const classes = ['sd-guide'];\r\n\r\n classes.push(`sd-guide--${this.type}`);\r\n\r\n if (this.popupShow) classes.push('sd-guide--active');\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n private getGuideStyle(): StyleProps {\r\n const styles: StyleProps = {};\r\n\r\n if (this.type === 'help') {\r\n styles['--guide-border'] = this.popupShow ? colors.green_65 : colors.grey_45;\r\n styles['--guide-color'] = this.popupShow ? colors.white : colors.grey_90;\r\n styles['--guide-background'] = this.popupShow ? colors.green_65 : colors.white;\r\n } else {\r\n styles['--guide-border'] = colors.grey_45;\r\n styles['--guide-color'] = colors.grey_90;\r\n styles['--guide-background'] = colors.white;\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n private getGuidIcon(): { name: IconName; size: number; color: string } {\r\n if (this.type === 'pdf') {\r\n return { name: 'pdf', size: 20, color: colors.red_75 };\r\n } else if (this.type === 'youtube') {\r\n return { name: 'youtube', size: 20, color: colors.red_75 };\r\n } else if (this.type === 'notion') {\r\n return { name: 'notion', size: 16, color: colors.black };\r\n } else if (this.type === 'event') {\r\n return { name: 'event', size: 16, color: colors.brilliantblue_70 };\r\n }\r\n\r\n return { name: 'helpOutline', size: 20, color: this.popupShow ? colors.white : colors.green_65 };\r\n }\r\n\r\n closeDropdown = () => {\r\n this.popupShow = false;\r\n };\r\n\r\n render() {\r\n const { name: iconName, size: iconSize, color: iconColor } = this.getGuidIcon();\r\n\r\n return (\r\n <Host style={this.getGuideStyle()}>\r\n <sd-button\r\n ref={el => (this.guideRef = el as unknown as HTMLElement)}\r\n class={this.getGuideClasses()}\r\n variant=\"outline\"\r\n label={SdGuide.guideTitle[this.type]}\r\n size=\"md\"\r\n color=\"var(--guide-color)\"\r\n icon={iconName}\r\n iconColor={iconColor}\r\n iconSize={iconSize}\r\n iconStyle={{ marginRight: '4px' }}\r\n buttonStyle={{\r\n height: '28px',\r\n minHeight: '28px',\r\n padding: '4px 12px',\r\n borderRadius: '16px',\r\n borderColor: 'var(--guide-border)',\r\n color: 'var(--guide-color)',\r\n fontSize: '12px',\r\n fontWeight: '400',\r\n backgroundColor: 'var(--guide-background)',\r\n }}\r\n onSdClick={this.handleClickGuide}\r\n />\r\n {this.type === 'help' && this.popupShow && (\r\n <sd-portal\r\n open={this.popupShow}\r\n parentRef={this.guideRef}\r\n onSdClose={this.closeDropdown}\r\n offset={[0, 24]}\r\n >\r\n <div\r\n class=\"sd-guide__popup\"\r\n style={{ width: this.popupWidth ? this.popupWidth + 'px' : '426px' } as any}\r\n >\r\n <sd-button\r\n class=\"sd-guide__popup__close\"\r\n icon=\"close\"\r\n color={colors.grey_65}\r\n size=\"md\"\r\n variant=\"ghost\"\r\n noHover\r\n buttonStyle={{ padding: '0px', minHeight: '0px' }}\r\n onSdClick={this.closeDropdown}\r\n />\r\n <div class=\"sd-guide__popup__header\">\r\n <sd-icon name=\"helpOutline\" size={24} color={colors.green_65} />\r\n <h3 class=\"sd-guide__popup__title\">{this.popupTitle || SdGuide.guideTitle[this.type]}</h3>\r\n </div>\r\n <ul class=\"sd-guide__popup__list\">{this.renderListItem(this.message)}</ul>\r\n </div>\r\n </sd-portal>\r\n )}\r\n </Host>\r\n );\r\n }\r\n\r\n // 현재 2depth까지만 스타일 적용\r\n renderListItem(message: string | string[], depth: number = 0): HTMLElement[] {\r\n const listItems: HTMLElement[] = [];\r\n\r\n if (Array.isArray(message)) {\r\n const depthMsg = message.map(msg => this.renderListItem(msg, depth + 1));\r\n listItems.push(...depthMsg.flat());\r\n } else {\r\n listItems.push(this.renderLi(message, depth));\r\n }\r\n\r\n return listItems;\r\n }\r\n\r\n renderLi = (message: string, depth: number) => {\r\n const listContent = message.replace(/ /gi, ' ');\r\n return (\r\n <li class={`sd-guide__popup__list__item sd-guide__popup__list__item--depth-${depth}`}>\r\n <p innerHTML={listContent}></p>\r\n </li>\r\n );\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sd-guide.js","sourceRoot":"","sources":["../../../src/components/sd-guide/sd-guide.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Host, Prop, State, h } from '@stencil/core';\r\nimport colors from '../../styles/color.json';\r\n\r\ntype GuideType = 'help' | 'pdf' | 'youtube' | 'notion' | 'event';\r\n\r\n@Component({\r\n tag: 'sd-guide',\r\n styleUrl: 'sd-guide.scss',\r\n scoped: true,\r\n})\r\nexport class SdGuide {\r\n @Element() el!: HTMLElement;\r\n\r\n @Prop() type: GuideType = 'help';\r\n @Prop() popupTitle: string = '';\r\n @Prop() message: string | string[] = '';\r\n @Prop() guideUrl: string = '';\r\n @Prop() popupWidth?: number;\r\n\r\n @State() popupShow: boolean = false;\r\n\r\n private guideRef?: HTMLElement;\r\n\r\n static guideTitle = {\r\n help: '활용 Tip',\r\n pdf: 'PDF Guide',\r\n youtube: 'Video Guide',\r\n notion: '사용 가이드',\r\n event: 'Event Button',\r\n };\r\n\r\n private handleClickGuide = () => {\r\n if (this.type === 'help') {\r\n this.popupShow = !this.popupShow;\r\n return;\r\n }\r\n\r\n if (this.guideUrl) {\r\n window.open(this.guideUrl, '_blank');\r\n }\r\n };\r\n\r\n private getGuideClasses(): string {\r\n const classes = ['sd-guide'];\r\n\r\n classes.push(`sd-guide--${this.type}`);\r\n\r\n if (this.popupShow) classes.push('sd-guide--active');\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n private getGuideStyle(): StyleProps {\r\n const styles: StyleProps = {};\r\n\r\n if (this.type === 'help') {\r\n styles['--guide-border'] = this.popupShow ? colors.green_65 : colors.grey_45;\r\n styles['--guide-color'] = this.popupShow ? colors.white : colors.grey_90;\r\n styles['--guide-background'] = this.popupShow ? colors.green_65 : colors.white;\r\n } else {\r\n styles['--guide-border'] = colors.grey_45;\r\n styles['--guide-color'] = colors.grey_90;\r\n styles['--guide-background'] = colors.white;\r\n }\r\n\r\n return styles;\r\n }\r\n\r\n private getGuidIcon(): { name: IconName; size: number; color: string } {\r\n if (this.type === 'pdf') {\r\n return { name: 'pdf', size: 20, color: colors.red_75 };\r\n } else if (this.type === 'youtube') {\r\n return { name: 'youtube', size: 20, color: colors.red_75 };\r\n } else if (this.type === 'notion') {\r\n return { name: 'notion', size: 16, color: colors.black };\r\n } else if (this.type === 'event') {\r\n return { name: 'event', size: 16, color: colors.brilliantblue_70 };\r\n }\r\n\r\n return { name: 'helpOutline', size: 20, color: this.popupShow ? colors.white : colors.green_65 };\r\n }\r\n\r\n closeDropdown = () => {\r\n this.popupShow = false;\r\n };\r\n\r\n render() {\r\n const { name: iconName, size: iconSize, color: iconColor } = this.getGuidIcon();\r\n\r\n return (\r\n <Host style={this.getGuideStyle()}>\r\n <sd-button\r\n ref={el => (this.guideRef = el as unknown as HTMLElement)}\r\n class={this.getGuideClasses()}\r\n variant=\"outline\"\r\n label={SdGuide.guideTitle[this.type]}\r\n size=\"md\"\r\n color=\"var(--guide-color)\"\r\n icon={iconName}\r\n iconColor={iconColor}\r\n iconSize={iconSize}\r\n iconStyle={{ marginRight: '4px' }}\r\n buttonStyle={{\r\n height: '28px',\r\n minHeight: '28px',\r\n padding: '4px 12px',\r\n borderRadius: '16px',\r\n borderColor: 'var(--guide-border)',\r\n color: 'var(--guide-color)',\r\n fontSize: '12px',\r\n fontWeight: '400',\r\n backgroundColor: 'var(--guide-background)',\r\n }}\r\n onSdClick={this.handleClickGuide}\r\n />\r\n {this.type === 'help' && this.popupShow && (\r\n <sd-portal\r\n open={this.popupShow}\r\n parentRef={this.guideRef}\r\n onSdClose={this.closeDropdown}\r\n offset={[0, 24]}\r\n >\r\n <div\r\n class=\"sd-guide__popup\"\r\n style={{ width: this.popupWidth ? this.popupWidth + 'px' : '426px' } as any}\r\n >\r\n <sd-button\r\n class=\"sd-guide__popup__close\"\r\n icon=\"close\"\r\n color={colors.grey_65}\r\n size=\"md\"\r\n variant=\"ghost\"\r\n noHover\r\n buttonStyle={{ padding: '0px', minHeight: '0px' }}\r\n onSdClick={this.closeDropdown}\r\n />\r\n <div class=\"sd-guide__popup__header\">\r\n <sd-icon name=\"helpOutline\" size={24} color={colors.green_65} />\r\n <h3 class=\"sd-guide__popup__title\">{this.popupTitle || SdGuide.guideTitle[this.type]}</h3>\r\n </div>\r\n <ul class=\"sd-guide__popup__list\">{this.renderListItem(this.message)}</ul>\r\n </div>\r\n </sd-portal>\r\n )}\r\n </Host>\r\n );\r\n }\r\n\r\n // 현재 2depth까지만 스타일 적용\r\n renderListItem(message: string | string[], depth: number = 0): HTMLElement[] {\r\n const listItems: HTMLElement[] = [];\r\n\r\n if (Array.isArray(message)) {\r\n const depthMsg = message.map(msg => this.renderListItem(msg, depth + 1));\r\n listItems.push(...depthMsg.flat());\r\n } else {\r\n listItems.push(this.renderLi(message, depth));\r\n }\r\n\r\n return listItems;\r\n }\r\n\r\n renderLi = (message: string, depth: number) => {\r\n const listContent = message.replace(/ /gi, ' ');\r\n return (\r\n <li class={`sd-guide__popup__list__item sd-guide__popup__list__item--depth-${depth}`}>\r\n <p innerHTML={listContent}></p>\r\n </li>\r\n );\r\n };\r\n}\r\n"]}
|