@mesgflow/ui-kit 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -5
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +3 -2
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
- package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
- package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-button.mjs +188 -242
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-card.mjs +37 -16
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
- package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +16 -21
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-chip.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +9 -5
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +6 -4
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +145 -65
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +4 -6
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-core.mjs +441 -128
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
- package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +131 -10
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +117 -34
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-field.mjs +53 -12
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +131 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs +6 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +147 -4
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
- package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +169 -5
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +7 -4
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +4 -3
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +7 -2
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +9 -49
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-progress.mjs +162 -21
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-radio.mjs +4 -6
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-rating.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +9 -5
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +12 -8
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-select.mjs +3 -2
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +16 -13
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +4 -3
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-slider.mjs +250 -3
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
- package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +42 -13
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
- package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +210 -3
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +11 -4
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +167 -60
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-switch.mjs +2 -2
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-table.mjs +16 -10
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +410 -169
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +7 -2
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-theming.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toast.mjs +113 -30
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +3 -2
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +4 -2
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +73 -50
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tour.mjs +8 -20
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree.mjs +1 -1
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +92 -12836
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
- package/package.json +87 -3
- package/schematics/collection.json +10 -0
- package/schematics/migration.json +10 -0
- package/schematics/migrations/v0-7.cjs +70 -0
- package/schematics/ng-add/index.cjs +234 -0
- package/schematics/ng-add/schema.json +43 -0
- package/tokens/color.css +96 -0
- package/tokens/controls.css +145 -0
- package/tokens/elevation.css +62 -6
- package/tokens/motion.css +304 -66
- package/tokens/radius.css +14 -0
- package/tokens.css +1 -0
- package/tokens.json +1583 -0
- package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
- package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
- package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
- package/types/mesgflow-ui-kit-button.d.ts +23 -38
- package/types/mesgflow-ui-kit-card.d.ts +26 -16
- package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
- package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
- package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
- package/types/mesgflow-ui-kit-core.d.ts +271 -21
- package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
- package/types/mesgflow-ui-kit-dialog.d.ts +29 -6
- package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
- package/types/mesgflow-ui-kit-field.d.ts +17 -8
- package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
- package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
- package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
- package/types/mesgflow-ui-kit-input.d.ts +64 -2
- package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
- package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
- package/types/mesgflow-ui-kit-mention.d.ts +59 -0
- package/types/mesgflow-ui-kit-menu.d.ts +41 -2
- package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
- package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-password-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-popover.d.ts +13 -5
- package/types/mesgflow-ui-kit-progress.d.ts +33 -12
- package/types/mesgflow-ui-kit-radio.d.ts +2 -2
- package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
- package/types/mesgflow-ui-kit-slider.d.ts +60 -1
- package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
- package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
- package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
- package/types/mesgflow-ui-kit-table.d.ts +2 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
- package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-toast.d.ts +48 -22
- package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
- package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
- package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
- package/types/mesgflow-ui-kit.d.ts +87 -5444
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-tabs.mjs","sources":["../../../projects/ui-kit/tabs/tab-scroller.ts","../../../projects/ui-kit/tabs/tabs.variants.ts","../../../projects/ui-kit/tabs/tab-list.ts","../../../projects/ui-kit/tabs/tab-list.html","../../../projects/ui-kit/tabs/tab.ts","../../../projects/ui-kit/tabs/tab-panel.ts","../../../projects/ui-kit/tabs/tab-strip.ts","../../../projects/ui-kit/tabs/tab-strip.html","../../../projects/ui-kit/tabs/tabs.ts","../../../projects/ui-kit/tabs/mesgflow-ui-kit-tabs.ts"],"sourcesContent":["import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { isRtl, scrollFromInlineStart } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * `<div mfTabScroller>` — taşan bir sekme şeridini kaydırılabilir yapar:\r\n * native scrollbar'ı gizler, kenar \"solma\" maskesini (`mask-image`)\r\n * kaydırılabilir yöne göre günceller, `canScrollStart`/`canScrollEnd`\r\n * sinyallerini dışarı verir (ok butonlarının görünürlüğü için — bkz.\r\n * `tab-list.html`/`tab-strip.html`, ikisi de bu directive'i paylaşıyor).\r\n *\r\n * `orientation` varsayılanı `'horizontal'` — `TabStrip` (üst sekme çubuğu)\r\n * bunu hiç geçmez, davranışı DEĞİŞMEZ. Dikey bir grup rayı gerektiren\r\n * tüketiciler `orientation=\"vertical\"` geçer (bkz. `tab-list.ts`).\r\n *\r\n * `mask-image` template'te `[style.mask-image]` ile DEĞİL, doğrudan\r\n * `style.setProperty` ile yazılıyor — Angular'ın stil binding sözdizimi\r\n * tire içeren (`-webkit-`) property adlarını binding adı olarak kabul\r\n * etmiyor, ikisini TEK yerden (burada) senkron yazmak için imperatif yol\r\n * daha güvenli (bkz. Tooltip'in de DOM'a doğrudan yazdığı emsal).\r\n */\r\n@Directive({\r\n selector: '[mfTabScroller]',\r\n host: {\r\n class: '[scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\r\n '[class.flex]': 'orientation() === \"horizontal\"',\r\n '[class.min-w-0]': 'orientation() === \"horizontal\"',\r\n '[class.overflow-x-auto]': 'orientation() === \"horizontal\"',\r\n '[class.min-h-0]': 'orientation() === \"vertical\"',\r\n '[class.overflow-y-auto]': 'orientation() === \"vertical\"',\r\n '(scroll)': 'updateEdges()',\r\n },\r\n})\r\nexport class TabScroller {\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\r\n private readonly vertical = computed(() => this.orientation() === 'vertical');\r\n\r\n readonly canScrollStart = signal(false);\r\n readonly canScrollEnd = signal(false);\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n afterNextRender(() => {\r\n this.updateEdges();\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.updateEdges());\r\n observer.observe(this.el.nativeElement);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n\r\n effect(() => {\r\n const start = this.canScrollStart() ? 24 : 0;\r\n const end = this.canScrollEnd() ? 24 : 0;\r\n // Maske satır başından sonuna — RTL'de başlangıç sağ kenar.\r\n const direction = this.vertical()\r\n ? 'to bottom'\r\n : isRtl(this.el.nativeElement)\r\n ? 'to left'\r\n : 'to right';\r\n const mask = `linear-gradient(${direction}, transparent, black ${start}px, black calc(100% - ${end}px), transparent 100%)`;\r\n this.el.nativeElement.style.setProperty('mask-image', mask);\r\n this.el.nativeElement.style.setProperty('-webkit-mask-image', mask);\r\n });\r\n }\r\n\r\n scrollByDir(dir: -1 | 1): void {\r\n const node = this.el.nativeElement;\r\n if (this.vertical()) node.scrollBy({ top: dir * node.clientHeight * 0.8, behavior: 'smooth' });\r\n else {\r\n // `dir` mantıksal (−1 başa, +1 sona); RTL'de sona gitmek scrollLeft'i AZALTIR.\r\n const sign = isRtl(node) ? -1 : 1;\r\n node.scrollBy({ left: sign * dir * node.clientWidth * 0.8, behavior: 'smooth' });\r\n }\r\n }\r\n\r\n scrollIntoViewIfNeeded(target: HTMLElement): void {\r\n // jsdom (birim testleri) Element.scrollIntoView'ı UYGULAMIYOR — ResizeObserver'daki\r\n // AYNI savunma deseni (bkz. constructor), gerçek tarayıcıda etkisiz bir NO-OP.\r\n target.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\r\n }\r\n\r\n updateEdges(): void {\r\n const node = this.el.nativeElement;\r\n if (this.vertical()) {\r\n const max = node.scrollHeight - node.clientHeight;\r\n this.canScrollStart.set(node.scrollTop > 1);\r\n this.canScrollEnd.set(max > 1 && node.scrollTop < max - 1);\r\n return;\r\n }\r\n const max = node.scrollWidth - node.clientWidth;\r\n const offset = scrollFromInlineStart(node); // RTL'de scrollLeft negatif\r\n this.canScrollStart.set(offset > 1);\r\n this.canScrollEnd.set(max > 1 && offset < max - 1);\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport type TabsVariant = 'underline' | 'card';\r\nexport type TabsOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * Bkz. `tab-list.ts`. `underline`'da ray AYRI, kayan bir `<span>` (JS ile\r\n * konumlanır — bkz. `TabList.positionIndicator`); `card`'da ray HER sekmenin\r\n * kendi `box-shadow`'unda yaşar (bkz. `tabVariants` compound'u), çünkü\r\n * `card` görünümünde her sekme zaten kendi kenarlığıyla ayrık bir kutu —\r\n * kayan tek bir gösterge o kutuların üstünden \"kayarak\" geçmezdi, doğal\r\n * durmazdı. `relative` — kayan gösterge `absolute` konumlanıyor buna göre.\r\n *\r\n * `orientation` ekseni sol dikey grup rayı gerektiren ekranlar için eklendi —\r\n * `@angular/aria/tabs`'ın ARIA/klavye desteği zaten yön-agnostik\r\n * (`hostDirectives`'in `orientation` girdisi, bkz. `tab-list.ts`), eksik\r\n * olan sadece bu görsel katmandı.\r\n */\r\nexport const tabListVariants = cva('relative flex', {\r\n variants: {\r\n variant: {\r\n underline: 'gap-1',\r\n card: 'gap-1.5',\r\n },\r\n orientation: {\r\n horizontal: 'min-w-max items-center',\r\n vertical: 'w-full flex-col items-stretch',\r\n },\r\n },\r\n defaultVariants: { variant: 'underline', orientation: 'horizontal' },\r\n});\r\n\r\n/**\r\n * `selected`/`disabled` burada `aria-selected`/`aria-disabled` CSS\r\n * seçicileriyle DEĞİL, `Tab`'ın kendi `computed()`'ıyla (bkz. `tab.ts`)\r\n * okunan sinyal değerleriyle besleniyor — kod tabanındaki yerleşik desen\r\n * (Select'in `optionClasses`, Table'ın `rowClasses`) TS'te hesaplanan koşullu\r\n * class, CSS attribute-selector değil.\r\n */\r\nexport const tabVariants = cva(\r\n 'relative inline-flex shrink-0 cursor-pointer appearance-none items-center gap-1.5 whitespace-nowrap border-0 bg-transparent text-sm text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n variant: {\r\n underline: 'rounded-sm px-3 py-2',\r\n card: 'rounded-sm border border-transparent px-3 py-1.5',\r\n },\r\n orientation: {\r\n horizontal: '',\r\n vertical: 'w-full justify-start text-start',\r\n },\r\n selected: {\r\n true: '',\r\n false: 'hover:bg-surface-alt hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n { variant: 'underline', selected: true, class: 'text-fg font-semibold' },\r\n /*\r\n * `card` — aktif sekme `bg-canvas` (içerik zeminiyle birleşir) + 2px dolu\r\n * ray. Yatayda alt kenar, dikeyde ön (sol) kenar — dikey grup rayı bunu\r\n * kullanıyor. Ray rengi `--mf-accent-fill` (mode-swapped: light 900 /\r\n * dark 400) — diğer TÜM \"ray\" kullanımlarıyla (Sidebar aktif nav,\r\n * Table seçili satır, ikisi de `border-s-accent-fill`) TUTARLI. `var()`\r\n * `@theme inline`'ın `--color-accent-fill` katmanını DEĞİL doğrudan\r\n * `--mf-*`'i hedefliyor — `box-shadow` arbitrary value'su bir utility\r\n * DEĞİL, Tailwind'in \"bu inline değişkeni emit et\" taramasına\r\n * güvenmek yerine kaynağa doğrudan bağlanmak daha sağlam.\r\n */\r\n {\r\n variant: 'card',\r\n orientation: 'horizontal',\r\n selected: true,\r\n class:\r\n 'border-border bg-canvas text-fg font-semibold shadow-[inset_0_-2px_0_0_var(--mf-accent-fill)]',\r\n },\r\n {\r\n variant: 'card',\r\n orientation: 'vertical',\r\n selected: true,\r\n class:\r\n 'border-border bg-canvas text-fg font-semibold shadow-[inset_2px_0_0_0_var(--mf-accent-fill)]',\r\n },\r\n ],\r\n defaultVariants: {\r\n variant: 'underline',\r\n orientation: 'horizontal',\r\n selected: false,\r\n disabled: false,\r\n },\r\n },\r\n);\r\n\r\nexport type TabSelected = VariantProps<typeof tabVariants>['selected'];\r\n","import {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n computed,\r\n inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TabList as AriaTabList } from '@angular/aria/tabs';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport { tabListVariants, type TabsVariant } from './tabs.variants';\r\n\r\n/**\r\n * `<mf-tab-list [(selectedTab)]=\"active\" variant=\"underline\">…</mf-tab-list>`\r\n * — `mf-tabs` içine konur, `mfTab` butonlarını sarar. ARIA/klavye\r\n * (Ok tuşları/Home/End) `@angular/aria/tabs`'ın `TabList` pattern'inden\r\n * `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not).\r\n *\r\n * İki premium detay burada yaşıyor:\r\n * 1. **Kayan ray göstergesi** (`underline` varyantı) — aktif sekme\r\n * değişince `positionIndicator()` DOM'dan `[aria-selected=\"true\"]`\r\n * elemanın `offsetLeft`/`offsetWidth`'ini (yatayda) ya da `offsetTop`/\r\n * `offsetHeight`'ını (dikeyde) ölçüp göstergeyi kaydırıyor (emsal:\r\n * `table-pagination.ts`'in odak restorasyonundaki `afterRenderEffect` +\r\n * `viewChild(ElementRef)` deseni). `ResizeObserver` yeniden boyutlanmada\r\n * (font yüklenmesi, viewport) yeniden ölçer. `card` varyantında AYRI bir\r\n * gösterge YOK — ray her sekmenin kendi `box-shadow`'unda yaşıyor\r\n * (bkz. tabs.variants.ts).\r\n * 2. **Taşma yönetimi** — `mfTabScroller` (bkz. o dosya) kaydırma+kenar\r\n * solma maskesi sağlıyor; ok butonları SADECE o yönde taşma varken\r\n * render edilir. Aktif sekme değişince görünür alana kaydırılır.\r\n *\r\n * `tab-list.html`'deki sarmalayıcı `<div>`'in çapraz eksen hizalaması BİLEREK\r\n * yöne göre koşullu: dikeyde (`flex-col`) çapraz eksen GENİŞLİK olur, `items-\r\n * center` orada \"çocukları raya GERME, kendi içerik genişliğine küçült\" demek\r\n * — bu, genişliğin `mfTabScroller`/`#row`/butonlara hiç iletilmemesine ve\r\n * `truncate`'in (role-form.html'deki İngilizce grup adlarıyla canlı\r\n * doğrulandı) hiç devreye girmeden ham/elipsissiz kırpılmasına yol açan\r\n * GERÇEK bir bugdu. `items-stretch` çapraz ekseni doğru şekilde geriyor —\r\n * bunu tekrar `items-center`'a \"sadeleştirme\".\r\n *\r\n * `orientation` girdisi `@angular/aria`'nın `TabList` pattern'inden\r\n * `hostDirectives` ile geliyor (ARIA/klavye zaten yön-agnostik) — burada\r\n * ikinci kez `input()` olarak TANIMLANMIYOR (NG2017, bkz. `TabPanel.\r\n * preserveContent`'teki aynı kısıt), `ariaTabList.orientation()` üzerinden\r\n * `protected readonly orientation` olarak okunuyor; `Tab` (tab.ts) bunu\r\n * `variant()` ile aynı `inject()` deseniyle ebeveynden alıyor.\r\n */\r\n@Component({\r\n selector: 'mf-tab-list',\r\n imports: [Button, Icon, TabScroller],\r\n hostDirectives: [\r\n {\r\n directive: AriaTabList,\r\n inputs: [\r\n 'orientation',\r\n 'wrap',\r\n 'softDisabled',\r\n 'focusMode',\r\n 'selectionMode',\r\n 'disabled',\r\n 'selectedTab',\r\n ],\r\n outputs: ['selectedTabChange'],\r\n },\r\n ],\r\n host: { class: 'block' },\r\n templateUrl: './tab-list.html',\r\n})\r\nexport class TabList {\r\n readonly variant = input<TabsVariant>('underline');\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n\r\n /** `mfTab` (bkz. tab.ts) varyantı buradan `inject()` ile okuyor — tek kaynak. */\r\n protected readonly ariaTabList = inject(AriaTabList);\r\n\r\n /** `Tab` (tab.ts) bunu `variant()` ile aynı `inject()` deseniyle okuyor — bu yüzden `public`. */\r\n readonly orientation = computed(() => this.ariaTabList.orientation());\r\n protected readonly isVertical = computed(() => this.orientation() === 'vertical');\r\n\r\n protected readonly listClasses = computed(() =>\r\n cn(tabListVariants({ variant: this.variant(), orientation: this.orientation() })),\r\n );\r\n protected readonly indicatorClasses = computed(() =>\r\n cn(\r\n 'pointer-events-none absolute rounded-full bg-accent-fill opacity-0 transition-[transform,width,height,opacity] duration-base ease-emphasis',\r\n this.isVertical() ? 'top-0 left-0 w-0.5' : 'bottom-0 left-0 h-0.5',\r\n ),\r\n );\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n private readonly indicatorEl = viewChild<ElementRef<HTMLElement>>('indicator');\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n afterRenderEffect(() => {\r\n this.ariaTabList.selectedTab();\r\n this.positionIndicator();\r\n });\r\n\r\n afterNextRender(() => {\r\n const row = this.rowEl()?.nativeElement;\r\n if (!row || typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.positionIndicator());\r\n observer.observe(row);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n private positionIndicator(): void {\r\n const row = this.rowEl()?.nativeElement;\r\n const indicator = this.indicatorEl()?.nativeElement;\r\n if (!row || !indicator) return;\r\n\r\n const active = row.querySelector<HTMLElement>('[aria-selected=\"true\"]');\r\n if (!active) {\r\n indicator.style.opacity = '0';\r\n return;\r\n }\r\n indicator.style.opacity = '1';\r\n if (this.isVertical()) {\r\n indicator.style.transform = `translateY(${active.offsetTop}px)`;\r\n indicator.style.height = `${active.offsetHeight}px`;\r\n } else {\r\n indicator.style.transform = `translateX(${active.offsetLeft}px)`;\r\n indicator.style.width = `${active.offsetWidth}px`;\r\n }\r\n this.scroller()?.scrollIntoViewIfNeeded(active);\r\n }\r\n}\r\n","<div\r\n class=\"flex gap-1\"\r\n [class.flex-col]=\"isVertical()\"\r\n [class.items-center]=\"!isVertical()\"\r\n [class.items-stretch]=\"isVertical()\"\r\n>\r\n @if (showStartArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_up' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n\r\n <div mfTabScroller [orientation]=\"orientation()\">\r\n <div #row [class]=\"listClasses()\">\r\n <ng-content />\r\n @if (variant() === 'underline') {\r\n <span #indicator [class]=\"indicatorClasses()\"></span>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_down' : 'chevron_right'\r\n }}</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Directive, computed, inject } from '@angular/core';\r\nimport { Tab as AriaTab } from '@angular/aria/tabs';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { TabList } from './tab-list';\r\nimport { tabVariants } from './tabs.variants';\r\n\r\n/**\r\n * `<button mfTab value=\"genel\">Genel</button>` — bir `mf-tab-list` içine\r\n * konur. ARIA/klavye/seçim davranışı `@angular/aria/tabs`'ın `Tab`\r\n * pattern'inden `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not);\r\n * bu directive sadece görsel katmanı ekliyor. `value`/`disabled`/`id`\r\n * girdileri `hostDirectives`'in `inputs` listesiyle dışarı açıldı — tüketici\r\n * doğrudan `[value]`/`[disabled]` bağlar, `ngTab` attribute'unu YAZMAZ.\r\n *\r\n * Varyant (`underline`/`card`) ebeveyn `mf-tab-list`'ten `inject()` ile\r\n * okunuyor — `Tab` kendi varyant girdisini TAŞIMIYOR, tek kaynak listede.\r\n */\r\n@Directive({\r\n selector: 'button[mfTab]',\r\n hostDirectives: [{ directive: AriaTab, inputs: ['value', 'disabled', 'id'] }],\r\n host: { '[attr.type]': \"'button'\", '[class]': 'classes()' },\r\n})\r\nexport class Tab {\r\n private readonly ariaTab = inject(AriaTab);\r\n private readonly tabList = inject(TabList, { optional: true });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n tabVariants({\r\n variant: this.tabList?.variant() ?? 'underline',\r\n orientation: this.tabList?.orientation() ?? 'horizontal',\r\n selected: this.ariaTab.selected(),\r\n disabled: this.ariaTab.disabled(),\r\n }),\r\n ),\r\n );\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { TabPanel as AriaTabPanel } from '@angular/aria/tabs';\r\n\r\n/**\r\n * ```html\r\n * <mf-tab-panel value=\"genel\">\r\n * <ng-template ngTabContent>İçerik…</ng-template>\r\n * </mf-tab-panel>\r\n * ```\r\n *\r\n * `ngTabContent` (`@angular/aria/tabs`'ın `TabContent`'i) doğrudan\r\n * kullanılır — ayrı bir `appTabContent` sarmalayıcı YOK, tek katmanlı bir\r\n * yapıya sarmalayıcı eklemenin karşılığı yok (bkz. `TabContent`'in kendi\r\n * `DeferredContent` mekanizması, panel aktif olana kadar içeriği hiç\r\n * oluşturmaz — lazy). `<ng-content />` bilerek TEK satır: panelin kendi\r\n * `role=\"tabpanel\"`/`tabindex`/`inert` host bağlamaları `hostDirectives`'ten\r\n * geliyor, ekstra bir sarmalayıcıya gerek yok.\r\n *\r\n * `[class.hidden]` ELLE eklendi — `AriaTabPanel`'in `inert` attribute'u\r\n * elemanı erişilebilirlik ağacından/etkileşimden çıkarıyor ama GÖRSEL olarak\r\n * gizlemiyor (kütüphanenin kendi dokümantasyonu: \"Proper styling is required\r\n * for visual hiding\" — gerçek bulgu, ui-kit'te pasif panellerin boş\r\n * dolgulu kutular olarak GÖRÜNÜR kaldığı görüldü).\r\n */\r\n@Component({\r\n selector: 'mf-tab-panel',\r\n hostDirectives: [{ directive: AriaTabPanel, inputs: ['value', 'id'] }],\r\n host: {\r\n class:\r\n 'block focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n '[class.hidden]': '!ariaTabPanel.visible()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class TabPanel {\r\n protected readonly ariaTabPanel = inject(AriaTabPanel);\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport { tabVariants } from './tabs.variants';\r\nimport type { TabStripItem } from './tab-strip.model';\r\n\r\n/**\r\n * `<mf-tab-strip [items]=\"items()\" [(activeKey)]=\"active\" (close)=\"onClose($event)\" />`\r\n *\r\n * `mf-tabs`/`mf-tab-list` (bkz. `tabs.ts`) ARIA `tabs` pattern'i PANEL\r\n * varsayar (`aria-controls` gerçek bir `role=tabpanel`'e işaret eder) — bu\r\n * şerit ise bir ROTA/DOKÜMAN şeridi: panel yok, içerik `router-outlet`'ten\r\n * gelir, sekmeler kapatılabilir. Bu yüzden `@angular/aria/tabs`'ı DEĞİL,\r\n * elle roving tabindex kullanıyor (emsal: `table-pagination.ts`'in\r\n * `onNavKeydown`'ı) — ARIA `tab` rolü/`aria-selected` yine de elle\r\n * uygulanıyor, sadece pattern motoru YOK.\r\n *\r\n * Ok tuşları SADECE odağı taşır (`activeKey` DEĞİŞMEZ) — her ok vuruşunda\r\n * gerçek bir router navigasyonu tetiklemek (bkz. `TabsStore.activate`)\r\n * pahalı/istenmeyen bir yan etki olurdu. `Enter`/`Space` ya da tık asıl\r\n * seçimi commit eder. `Delete` odaktaki (kapatılabilir) sekmeyi kapatır.\r\n *\r\n * Kapatma butonu gerçek bir `<button>` ama tab elemanının kendisi `role=tab`\r\n * taşıyan bir `<div>` — `mfTab`'ın (aria Tabs sisteminin) aksine burada bir\r\n * `<button>` İÇİNE başka bir interaktif eleman GÖMÜLMÜYOR (geçersiz HTML\r\n * olurdu, bkz. `table-filter-bar.html`'deki chip deseni — aynı gerekçeyle\r\n * orada da İKİ KARDEŞ buton var, iç içe değil). Kapatma butonu bilerek\r\n * `tabindex=\"-1\"` — birincil roving-tabindex sırasının parçası değil (fare/\r\n * dokunma birincil, `Delete` tuşu klavye eşdeğeri).\r\n *\r\n * Sağ tık menüsü TAMAMEN tüketiciye ait — bu bileşen belirli bir dropdown\r\n * kütüphanesini BİLMİYOR (bkz. projects/ui-kit/README.md \"Directive mi, component\r\n * mi?\" ruhu — dropdown-agnostik kalma), sadece ham `(itemContextMenu)` olayını\r\n * yukarı veriyor.\r\n */\r\n@Component({\r\n selector: 'mf-tab-strip',\r\n exportAs: 'mfTabStrip',\r\n imports: [Icon, TabScroller],\r\n host: { class: 'block', role: 'tablist' },\r\n templateUrl: './tab-strip.html',\r\n})\r\nexport class TabStrip {\r\n readonly items = input.required<TabStripItem[]>();\r\n readonly activeKey = model.required<string>();\r\n /** Verilirse aktif sekmenin `aria-controls`'ü buna işaret eder (tek bir paylaşımlı içerik bölgesi — router-outlet). */\r\n readonly contentId = input<string | null>(null);\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n /** Kapatma butonunun `aria-label`'ı — sekmenin kendi etiketiyle birleştirilir (ör. \"Close: Roles\"). */\r\n readonly closeLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n protected readonly effectiveCloseLabel = computed(\r\n () => this.closeLabel() ?? this.tabsLabels().close,\r\n );\r\n\r\n // `close` adı native DOM `close` olayıyla çakışıyor (@angular-eslint/no-output-native);\r\n // mevcut public API — yeniden adlandırma kırıcı, ileri bir sürümde ele alınacak.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n readonly close = output<string>();\r\n readonly itemContextMenu = output<{ event: MouseEvent; item: TabStripItem }>();\r\n\r\n protected readonly focusedKey = signal<string | null>(null);\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n\r\n protected tabClasses(item: TabStripItem): string {\r\n return cn(\r\n tabVariants({ variant: 'card', selected: item.key === this.activeKey(), disabled: false }),\r\n 'pe-1.5',\r\n );\r\n }\r\n\r\n protected tabIndexFor(item: TabStripItem): number {\r\n const focused = this.focusedKey() ?? this.activeKey();\r\n return item.key === focused ? 0 : -1;\r\n }\r\n\r\n protected select(key: string): void {\r\n this.focusedKey.set(key);\r\n this.activeKey.set(key);\r\n }\r\n\r\n protected onCloseClick(event: MouseEvent, key: string): void {\r\n event.stopPropagation();\r\n this.close.emit(key);\r\n }\r\n\r\n protected onContextMenu(event: MouseEvent, item: TabStripItem): void {\r\n event.preventDefault();\r\n this.itemContextMenu.emit({ event, item });\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n const currentKey = this.focusedKey() ?? this.activeKey();\r\n const index = items.findIndex((i) => i.key === currentKey);\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.focusIndex(index <= 0 ? items.length - 1 : index - 1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.focusIndex(index === -1 || index === items.length - 1 ? 0 : index + 1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusIndex(0);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusIndex(items.length - 1);\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (index !== -1) this.select(items[index]!.key);\r\n break;\r\n case 'Delete':\r\n if (index !== -1 && items[index]!.closable) {\r\n event.preventDefault();\r\n this.close.emit(items[index]!.key);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusIndex(index: number): void {\r\n const item = this.items()[index];\r\n if (!item) return;\r\n this.focusedKey.set(item.key);\r\n queueMicrotask(() => {\r\n const btn = this.rowEl()?.nativeElement.querySelector<HTMLElement>(\r\n `[data-tab-key=\"${item.key}\"]`,\r\n );\r\n btn?.focus();\r\n if (btn) this.scroller()?.scrollIntoViewIfNeeded(btn);\r\n });\r\n }\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n @if (showStartArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n }\r\n\r\n <!-- Kaydırma kapsayıcısı odaklanabilir değil — ok tuşu gezinmesi burada delege; gerçek odak roving tabindex ile alt sekmelerde. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div mfTabScroller (keydown)=\"onKeydown($event)\">\r\n <div #row class=\"flex items-center gap-1 py-1\">\r\n @for (item of items(); track item.key) {\r\n <!-- Enter/Space seçimi üstteki kapsayıcının (keydown)'ında yönetiliyor (roving tabindex deseni). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div\r\n role=\"tab\"\r\n [attr.data-tab-key]=\"item.key\"\r\n [attr.aria-selected]=\"item.key === activeKey()\"\r\n [attr.aria-controls]=\"item.key === activeKey() ? contentId() : null\"\r\n [tabindex]=\"tabIndexFor(item)\"\r\n [class]=\"tabClasses(item)\"\r\n (click)=\"select(item.key)\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n @if (item.icon) {\r\n <span mfIcon [size]=\"14\">{{ item.icon }}</span>\r\n }\r\n <span class=\"truncate\">{{ item.label }}</span>\r\n @if (item.closable) {\r\n <button\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n class=\"ms-0.5 inline-flex h-4 w-4 shrink-0 appearance-none items-center justify-center rounded-xs border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-active hover:text-fg\"\r\n [attr.aria-label]=\"effectiveCloseLabel() + ': ' + item.label\"\r\n (click)=\"onCloseClick($event, item.key)\"\r\n >\r\n <span mfIcon [size]=\"13\">close</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { Tabs as AriaTabs } from '@angular/aria/tabs';\r\n\r\n/**\r\n * `<mf-tabs><mf-tab-list>...</mf-tab-list><mf-tab-panel>...</mf-tab-panel></mf-tabs>`\r\n *\r\n * Salt bir kapsayıcı — tüm ARIA/klavye/state mantığı `@angular/aria/tabs`'ın\r\n * `Tabs` pattern'inden `hostDirectives` ile ödünç alınıyor (bkz.\r\n * projects/ui-kit/README.md \"a11y checklist\": \"mümkün olduğunca `@angular/aria`...\r\n * elle ARIA yazmak son çare\"). `hostDirectives`, ana bileşenin (`mf-tabs`)\r\n * host elemanına `Tabs`'ın DI sağlayıcısını (`TABS` token) ekliyor — alttaki\r\n * `mf-tab-list`/`mf-tab-panel` bunu `inject()` ile bulup kendini\r\n * kaydediyor, template'te `ngTabs` attribute'unu ELLE yazmaya gerek yok\r\n * (`hostDirectives`'te selector yok sayılır, bkz. Angular directive\r\n * composition API).\r\n */\r\n@Component({\r\n selector: 'mf-tabs',\r\n exportAs: 'mfTabs',\r\n hostDirectives: [AriaTabs],\r\n host: { class: 'block' },\r\n template: '<ng-content />',\r\n})\r\nexport class Tabs {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaTabList","AriaTab","AriaTabPanel","AriaTabs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-tabs.mjs","sources":["../../../projects/ui-kit/tabs/tab-scroller.ts","../../../projects/ui-kit/tabs/tabs.variants.ts","../../../projects/ui-kit/tabs/tab-list.ts","../../../projects/ui-kit/tabs/tab-list.html","../../../projects/ui-kit/tabs/tab.ts","../../../projects/ui-kit/tabs/tab-count.ts","../../../projects/ui-kit/tabs/tab-nav.ts","../../../projects/ui-kit/tabs/tab-nav.html","../../../projects/ui-kit/tabs/tabs.ts","../../../projects/ui-kit/tabs/tab-panel.ts","../../../projects/ui-kit/tabs/tab-strip.ts","../../../projects/ui-kit/tabs/tab-strip.html","../../../projects/ui-kit/tabs/mesgflow-ui-kit-tabs.ts"],"sourcesContent":["import {\n DestroyRef,\n Directive,\n ElementRef,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { isRtl, scrollFromInlineStart } from '@mesgflow/ui-kit/core';\n\n/**\n * `<div mfTabScroller>` — taşan bir sekme şeridini kaydırılabilir yapar:\n * native scrollbar'ı gizler, kenar \"solma\" maskesini (`mask-image`)\n * kaydırılabilir yöne göre günceller, `canScrollStart`/`canScrollEnd`\n * sinyallerini dışarı verir (ok butonlarının görünürlüğü için — bkz.\n * `tab-list.html`/`tab-strip.html`, ikisi de bu directive'i paylaşıyor).\n *\n * `orientation` varsayılanı `'horizontal'` — `TabStrip` (üst sekme çubuğu)\n * bunu hiç geçmez, davranışı DEĞİŞMEZ. Dikey bir grup rayı gerektiren\n * tüketiciler `orientation=\"vertical\"` geçer (bkz. `tab-list.ts`).\n *\n * `mask-image` template'te `[style.mask-image]` ile DEĞİL, doğrudan\n * `style.setProperty` ile yazılıyor — Angular'ın stil binding sözdizimi\n * tire içeren (`-webkit-`) property adlarını binding adı olarak kabul\n * etmiyor, ikisini TEK yerden (burada) senkron yazmak için imperatif yol\n * daha güvenli (bkz. Tooltip'in de DOM'a doğrudan yazdığı emsal).\n */\n@Directive({\n selector: '[mfTabScroller]',\n host: {\n class: '[scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\n '[class.flex]': 'orientation() === \"horizontal\"',\n '[class.min-w-0]': 'orientation() === \"horizontal\"',\n '[class.overflow-x-auto]': 'orientation() === \"horizontal\"',\n '[class.min-h-0]': 'orientation() === \"vertical\"',\n '[class.overflow-y-auto]': 'orientation() === \"vertical\"',\n '(scroll)': 'updateEdges()',\n },\n})\nexport class TabScroller {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n private readonly vertical = computed(() => this.orientation() === 'vertical');\n\n readonly canScrollStart = signal(false);\n readonly canScrollEnd = signal(false);\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n afterNextRender(() => {\n this.updateEdges();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(() => this.updateEdges());\n observer.observe(this.el.nativeElement);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n\n effect(() => {\n const start = this.canScrollStart() ? 24 : 0;\n const end = this.canScrollEnd() ? 24 : 0;\n // Maske satır başından sonuna — RTL'de başlangıç sağ kenar.\n const direction = this.vertical()\n ? 'to bottom'\n : isRtl(this.el.nativeElement)\n ? 'to left'\n : 'to right';\n const mask = `linear-gradient(${direction}, transparent, black ${start}px, black calc(100% - ${end}px), transparent 100%)`;\n this.el.nativeElement.style.setProperty('mask-image', mask);\n this.el.nativeElement.style.setProperty('-webkit-mask-image', mask);\n });\n }\n\n scrollByDir(dir: -1 | 1): void {\n const node = this.el.nativeElement;\n if (this.vertical()) node.scrollBy({ top: dir * node.clientHeight * 0.8, behavior: 'smooth' });\n else {\n // `dir` mantıksal (−1 başa, +1 sona); RTL'de sona gitmek scrollLeft'i AZALTIR.\n const sign = isRtl(node) ? -1 : 1;\n node.scrollBy({ left: sign * dir * node.clientWidth * 0.8, behavior: 'smooth' });\n }\n }\n\n scrollIntoViewIfNeeded(target: HTMLElement): void {\n // jsdom (birim testleri) Element.scrollIntoView'ı UYGULAMIYOR — ResizeObserver'daki\n // AYNI savunma deseni (bkz. constructor), gerçek tarayıcıda etkisiz bir NO-OP.\n target.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }\n\n updateEdges(): void {\n const node = this.el.nativeElement;\n if (this.vertical()) {\n const max = node.scrollHeight - node.clientHeight;\n this.canScrollStart.set(node.scrollTop > 1);\n this.canScrollEnd.set(max > 1 && node.scrollTop < max - 1);\n return;\n }\n const max = node.scrollWidth - node.clientWidth;\n const offset = scrollFromInlineStart(node); // RTL'de scrollLeft negatif\n this.canScrollStart.set(offset > 1);\n this.canScrollEnd.set(max > 1 && offset < max - 1);\n }\n}\n","import { controlSize, focusRecipe, transitionRecipe, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * - `underline` — hairline ray + kayan 2px çizgi (varsayılan; sayfa içi gezinme).\r\n * - `pills` — seçili sekmenin arkasında kayan yumuşak ton hap (araç/filtre çubukları).\r\n * - `segmented` — kapalı ray + kayan yükseltilmiş parça (görünüm değiştiriciler).\r\n * - `card` — ayrık kutu sekmeler; seçili kutunun kenarında 2px çizgi (belge/düzenleyici).\r\n */\r\nexport type TabsVariant = 'underline' | 'pills' | 'segmented' | 'card';\r\nexport type TabsOrientation = 'horizontal' | 'vertical';\r\nexport type TabsAlign = 'start' | 'center' | 'end';\r\nexport type TabsSize = MfSize;\r\n\r\n/**\r\n * Sekme satırı (`#row`). `relative` — kayan göstergeler `absolute` konumlanır ve\r\n * satır onların `offsetParent`'ı. `fill`: satır rayı tüm genişliğe yayılsın mı\r\n * (underline'ın hairline'ı, `stretch`, `align` ≠ start).\r\n */\r\nexport const tabListVariants = cva('relative flex', {\r\n variants: {\r\n variant: {\r\n underline: 'gap-1 border-hairline',\r\n pills: 'gap-1',\r\n segmented: 'gap-0.5 rounded-lg bg-surface-alt p-0.5',\r\n card: 'gap-1.5',\r\n },\r\n orientation: {\r\n horizontal: 'min-w-max items-center',\r\n vertical: 'w-full flex-col items-stretch',\r\n },\r\n align: {\r\n start: 'justify-start',\r\n center: 'justify-center',\r\n end: 'justify-end',\r\n },\r\n fill: { true: 'w-full', false: '' },\r\n },\r\n compoundVariants: [\r\n { variant: 'underline', orientation: 'horizontal', class: 'border-b' },\r\n { variant: 'underline', orientation: 'vertical', class: 'border-s' },\r\n ],\r\n defaultVariants: { variant: 'underline', orientation: 'horizontal', align: 'start', fill: false },\r\n});\r\n\r\n/**\r\n * Seçili sekmeyi izleyen kayan öğe (`[mfSlidingIndicator]`). Motor yalnız ana\r\n * ekseni (konum + genişlik/yükseklik) yazar; çapraz eksen buradan gelir.\r\n * `card`'da kayan gösterge YOK — ayrık kutuların arasından kayması doğal durmaz.\r\n */\r\nexport const tabIndicatorVariants = cva('', {\r\n variants: {\r\n variant: {\r\n underline: 'rounded-full bg-accent-fill',\r\n pills: 'rounded-md bg-primary-tint',\r\n segmented: 'rounded-md bg-surface shadow-1',\r\n card: 'hidden',\r\n },\r\n orientation: { horizontal: '', vertical: '' },\r\n },\r\n compoundVariants: [\r\n { variant: 'underline', orientation: 'horizontal', class: '-bottom-px h-0.5' },\r\n { variant: 'underline', orientation: 'vertical', class: '-start-px w-0.5' },\r\n { variant: 'pills', orientation: 'horizontal', class: 'inset-y-0' },\r\n { variant: 'pills', orientation: 'vertical', class: 'inset-x-0' },\r\n { variant: 'segmented', orientation: 'horizontal', class: 'inset-y-0.5' },\r\n { variant: 'segmented', orientation: 'vertical', class: 'inset-x-0.5' },\r\n ],\r\n defaultVariants: { variant: 'underline', orientation: 'horizontal' },\r\n});\r\n\r\n/** İmleç altındaki sekmeyi izleyen yumuşak vurgu (yalnız underline/pills). */\r\nexport const tabHoverVariants = cva('rounded-md bg-state-hover', {\r\n variants: {\r\n variant: { underline: '', pills: '' },\r\n orientation: { horizontal: '', vertical: '' },\r\n },\r\n compoundVariants: [\r\n { variant: 'underline', orientation: 'horizontal', class: 'inset-y-1' },\r\n { variant: 'underline', orientation: 'vertical', class: 'inset-x-1' },\r\n { variant: 'pills', orientation: 'horizontal', class: 'inset-y-0' },\r\n { variant: 'pills', orientation: 'vertical', class: 'inset-x-0' },\r\n ],\r\n defaultVariants: { variant: 'underline', orientation: 'horizontal' },\r\n});\r\n\r\n/**\r\n * Sekme (`button[mfTab]`, `a[mfTabLink]`, TabStrip). Seçili durum yalnız RENK\r\n * değiştirir — `font-medium` her durumda, genişlik zıplaması olmaz. `ownHover`:\r\n * satır hover vurgusunu kendisi çizmiyorsa sekme kendi hover zeminini çizer.\r\n * `selected`/`disabled` CSS öznitelik seçicisiyle değil, sekmenin kendi\r\n * sinyalleriyle besleniyor (Select `optionClasses`, Table `rowClasses` deseni).\r\n *\r\n * Odak halkası İÇERİDE (`-outline-offset-2`): sekmeler taşma kaydırıcısının\r\n * (`overflow: auto`) içinde; dışa taşan halka kapsayıcı kenarında kırpılıyordu.\r\n */\r\nexport const tabVariants = cva(\r\n 'relative inline-flex shrink-0 cursor-pointer appearance-none items-center justify-center gap-1.5 whitespace-nowrap border-0 bg-transparent font-medium text-fg-muted no-underline active:scale-[0.99] ' +\r\n transitionRecipe +\r\n ' ' +\r\n focusRecipe +\r\n ' focus-visible:-outline-offset-2',\r\n {\r\n variants: {\r\n variant: {\r\n underline: 'rounded-md',\r\n pills: 'rounded-md',\r\n segmented: 'rounded-md',\r\n card: 'rounded-sm border border-transparent',\r\n },\r\n size: {\r\n sm: controlSize.sm,\r\n md: controlSize.md,\r\n lg: controlSize.lg,\r\n },\r\n orientation: {\r\n horizontal: '',\r\n vertical: 'w-full justify-start text-start',\r\n },\r\n selected: {\r\n true: 'text-fg',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n stretch: { true: 'flex-1', false: '' },\r\n ownHover: { true: '', false: '' },\r\n },\r\n compoundVariants: [\r\n { selected: false, ownHover: true, class: 'hover:bg-state-hover' },\r\n { variant: 'pills', selected: true, class: 'text-primary-tint-fg' },\r\n {\r\n variant: 'card',\r\n selected: true,\r\n class:\r\n \"border-border bg-canvas after:pointer-events-none after:absolute after:rounded-full after:bg-accent-fill after:content-['']\",\r\n },\r\n {\r\n variant: 'card',\r\n orientation: 'horizontal',\r\n selected: true,\r\n class: 'after:inset-x-0 after:bottom-0 after:h-0.5',\r\n },\r\n {\r\n variant: 'card',\r\n orientation: 'vertical',\r\n selected: true,\r\n class: 'after:inset-y-0 after:start-0 after:w-0.5',\r\n },\r\n ],\r\n defaultVariants: {\r\n variant: 'underline',\r\n size: 'md',\r\n orientation: 'horizontal',\r\n selected: false,\r\n disabled: false,\r\n stretch: false,\r\n ownHover: true,\r\n },\r\n },\r\n);\r\n\r\n/** `<span mfTabCount>12</span>` — sekme içi sayaç rozeti; seçili sekmede tonlanır. */\r\nexport const tabCountVariants = cva(\r\n 'inline-flex h-5 min-w-5 items-center justify-center rounded-full px-1.5 text-xs font-medium tabular-nums ' +\r\n transitionRecipe,\r\n {\r\n variants: {\r\n selected: {\r\n true: 'bg-primary-tint text-primary-tint-fg',\r\n false: 'bg-surface-alt text-fg-muted',\r\n },\r\n variant: { underline: '', pills: '', segmented: '', card: '' },\r\n },\r\n compoundVariants: [\r\n // Hap zaten primary-tint — sayaç üstünde ayrışsın diye yüzey rengi.\r\n { variant: 'pills', selected: true, class: 'bg-surface text-fg shadow-1' },\r\n { variant: 'segmented', selected: true, class: 'bg-surface-alt text-fg' },\r\n ],\r\n defaultVariants: { selected: false, variant: 'underline' },\r\n },\r\n);\r\n\r\nexport type TabSelected = VariantProps<typeof tabVariants>['selected'];\r\n","import {\r\n Component,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Tab as AriaTab, TabList as AriaTabList } from '@angular/aria/tabs';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS, SlidingIndicator } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport {\r\n tabHoverVariants,\r\n tabIndicatorVariants,\r\n tabListVariants,\r\n type TabsAlign,\r\n type TabsSize,\r\n type TabsVariant,\r\n} from './tabs.variants';\r\n\r\n/**\r\n * `<mf-tab-list [(selectedTab)]=\"active\" variant=\"pills\" size=\"sm\">…</mf-tab-list>`\r\n * — `mf-tabs` içine konur, `mfTab` düğmelerini sarar. ARIA/klavye (oklar,\r\n * Home/End, Enter/Boşluk) `@angular/aria/tabs`'ın `TabList`'inden\r\n * `hostDirectives` ile gelir; `orientation`/`selectedTab`/`selectionMode`…\r\n * oradan iletilir (burada ikinci kez `input()` TANIMLANMAZ — NG2017).\r\n *\r\n * Premium katman:\r\n * - **Kayan gösterge** — `underline` çizgisi, `pills` hapı, `segmented` parçası\r\n * tek motorla (`[mfSlidingIndicator]`, core) yay eğrisiyle kayar. `card`'da\r\n * seçili çizgi her kutunun kendisinde (bkz. tabs.variants.ts).\r\n * - **Hover izleme** — `hoverHighlight` (underline/pills): imlecin altındaki\r\n * sekmenin arkasında ikinci bir yumuşak vurgu kayar; dokunmatikte yok.\r\n * - **Boyut** `sm | md | lg` — Button/Input ile aynı kontrol yüksekliği merdiveni.\r\n * - **Yerleşim** — `stretch` (sekmeler eşit genişler), `align` (yatay hizalama);\r\n * `orientation=\"vertical\"` olunca `mf-tabs` kendiliğinden yan yana yerleşir.\r\n * - **Taşma** — `mfTabScroller` kaydırma + kenar maskesi; oklar yalnız taşma\r\n * varken çıkar, seçili sekme görünür alana kaydırılır.\r\n * - Hiçbir sekme bağlı değilse ilk etkin sekme seçilir.\r\n *\r\n * `tab-list.html`'deki sarmalayıcının dikeydeki `items-stretch`'i BİLEREK —\r\n * `items-center` genişliği scroller/satır/sekmelere iletmiyor, `truncate`\r\n * hiç devreye girmiyordu (gerçek bir hataydı).\r\n */\r\n@Component({\r\n selector: 'mf-tab-list',\r\n exportAs: 'mfTabList',\r\n imports: [Button, Icon, TabScroller, SlidingIndicator],\r\n hostDirectives: [\r\n {\r\n directive: AriaTabList,\r\n inputs: [\r\n 'orientation',\r\n 'wrap',\r\n 'softDisabled',\r\n 'focusMode',\r\n 'selectionMode',\r\n 'disabled',\r\n 'selectedTab',\r\n ],\r\n outputs: ['selectedTabChange'],\r\n },\r\n ],\r\n host: { class: 'block min-w-0', '[class.shrink-0]': 'isVertical()' },\r\n templateUrl: './tab-list.html',\r\n})\r\nexport class TabList {\r\n readonly variant = input<TabsVariant>('underline');\r\n readonly size = input<TabsSize>('md');\r\n /** Yatay: sekmeler satırı eşit paylaşır. */\r\n readonly stretch = input(false, { transform: booleanAttribute });\r\n /** Yatay hizalama. */\r\n readonly align = input<TabsAlign>('start');\r\n /** İmleci izleyen yumuşak vurgu (yalnız `underline` ve `pills`). */\r\n readonly hoverHighlight = input(true, { transform: booleanAttribute });\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n\r\n /** `Tab`, `TabCount` ve `Tabs` bu sınıfı `inject()` ile okur — tek kaynak. */\r\n readonly ariaTabList = inject(AriaTabList);\r\n readonly orientation = computed(() => this.ariaTabList.orientation());\r\n readonly isVertical = computed(() => this.orientation() === 'vertical');\r\n protected readonly axis = computed(() => (this.isVertical() ? 'y' : 'x'));\r\n\r\n /** Satır kendi hover vurgusunu çiziyor mu — öyleyse sekmeler kendininkini çizmez. */\r\n readonly drawsHover = computed(\r\n () => this.hoverHighlight() && (this.variant() === 'underline' || this.variant() === 'pills'),\r\n );\r\n\r\n protected readonly listClasses = computed(() => {\r\n const vertical = this.isVertical();\r\n return cn(\r\n tabListVariants({\r\n variant: this.variant(),\r\n orientation: this.orientation(),\r\n align: vertical ? 'start' : this.align(),\r\n fill:\r\n !vertical &&\r\n (this.variant() === 'underline' || this.stretch() || this.align() !== 'start'),\r\n }),\r\n );\r\n });\r\n protected readonly indicatorClasses = computed(() =>\r\n tabIndicatorVariants({ variant: this.variant(), orientation: this.orientation() }),\r\n );\r\n protected readonly hoverClasses = computed(() =>\r\n tabHoverVariants({\r\n variant: this.variant() === 'pills' ? 'pills' : 'underline',\r\n orientation: this.orientation(),\r\n }),\r\n );\r\n\r\n protected readonly hoveredTab = signal<HTMLElement | null>(null);\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n private readonly tabs = contentChildren(AriaTab, { descendants: true });\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.ariaTabList.selectedTab();\r\n const active =\r\n this.rowEl()?.nativeElement.querySelector<HTMLElement>('[aria-selected=\"true\"]');\r\n if (active) this.scroller()?.scrollIntoViewIfNeeded(active);\r\n });\r\n\r\n // Bağlı bir seçim yoksa ilk etkin sekme — boş bir panel alanı hiç görünmesin.\r\n afterNextRender(() => {\r\n if (this.ariaTabList.selectedTab() !== undefined) return;\r\n const first = this.tabs().find((tab) => !tab.disabled());\r\n if (first) this.ariaTabList.open(first.value());\r\n });\r\n }\r\n\r\n protected onPointerOver(event: PointerEvent): void {\r\n if (!this.drawsHover() || event.pointerType === 'touch') return;\r\n const tab = (event.target as Element | null)?.closest<HTMLElement>(\r\n '[role=\"tab\"]:not([aria-disabled=\"true\"])',\r\n );\r\n if (tab) this.hoveredTab.set(tab);\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.hoveredTab.set(null);\r\n }\r\n}\r\n","<div\r\n class=\"flex gap-1\"\r\n [class.flex-col]=\"isVertical()\"\r\n [class.items-center]=\"!isVertical()\"\r\n [class.items-stretch]=\"isVertical()\"\r\n>\r\n @if (showStartArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_up' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n\r\n <div mfTabScroller [orientation]=\"orientation()\" class=\"grow\">\r\n <div\r\n #row\r\n [class]=\"listClasses()\"\r\n (pointerover)=\"onPointerOver($event)\"\r\n (pointerleave)=\"onPointerLeave()\"\r\n >\r\n <!-- Göstergeler içerikten ÖNCE: `relative` sekmeler onların üstüne boyanır. -->\r\n @if (drawsHover()) {\r\n <span\r\n mfSlidingIndicator\r\n data-tab-hover\r\n [axis]=\"axis()\"\r\n [target]=\"hoveredTab()\"\r\n [class]=\"hoverClasses()\"\r\n ></span>\r\n }\r\n @if (variant() !== 'card') {\r\n <span\r\n mfSlidingIndicator\r\n data-tab-indicator\r\n [axis]=\"axis()\"\r\n [track]=\"ariaTabList.selectedTab()\"\r\n [class]=\"indicatorClasses()\"\r\n ></span>\r\n }\r\n <ng-content />\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_down' : 'chevron_right'\r\n }}</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Directive, computed, inject } from '@angular/core';\r\nimport { Tab as AriaTab } from '@angular/aria/tabs';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { TabList } from './tab-list';\r\nimport { tabVariants } from './tabs.variants';\r\n\r\n/**\r\n * `<button mfTab value=\"genel\"><span mfIcon [size]=\"16\">tune</span>Genel <span mfTabCount>3</span></button>`\r\n *\r\n * ARIA/klavye/seçim `@angular/aria/tabs`'ın `Tab`'ından `hostDirectives` ile\r\n * gelir; `value`/`disabled`/`id` doğrudan bağlanır (`ngTab` YAZILMAZ). Görünüm\r\n * (varyant, boyut, yön, stretch) ebeveyn `mf-tab-list`'ten `inject()` ile\r\n * okunur — sekme kendi görünüm girdisini TAŞIMAZ, tek kaynak liste.\r\n */\r\n@Directive({\r\n selector: 'button[mfTab]',\r\n exportAs: 'mfTab',\r\n hostDirectives: [{ directive: AriaTab, inputs: ['value', 'disabled', 'id'] }],\r\n host: { '[attr.type]': \"'button'\", '[class]': 'classes()' },\r\n})\r\nexport class Tab {\r\n private readonly ariaTab = inject(AriaTab);\r\n private readonly tabList = inject(TabList, { optional: true });\r\n\r\n /** `TabCount` seçili tonu için okur. */\r\n readonly selected = computed(() => this.ariaTab.selected());\r\n\r\n protected readonly classes = computed(() => {\r\n const list = this.tabList;\r\n const vertical = list?.isVertical() ?? false;\r\n return cn(\r\n tabVariants({\r\n variant: list?.variant() ?? 'underline',\r\n size: list?.size() ?? 'md',\r\n orientation: vertical ? 'vertical' : 'horizontal',\r\n selected: this.ariaTab.selected(),\r\n disabled: this.ariaTab.disabled(),\r\n stretch: !vertical && (list?.stretch() ?? false),\r\n ownHover: !(list?.drawsHover() ?? false),\r\n }),\r\n );\r\n });\r\n}\r\n","import { Directive, computed, inject } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Tab } from './tab';\r\nimport { TabList } from './tab-list';\r\nimport { tabCountVariants } from './tabs.variants';\r\n\r\n/**\r\n * `<button mfTab value=\"inbox\">Gelen <span mfTabCount>12</span></button>`\r\n *\r\n * Sekme içi sayaç rozeti — seçili sekmede tonlanır (`pills`'te hap zaten ton\r\n * olduğu için yüzey rengine döner). Görsel bir ektir: ekran okuyucu sayıyı\r\n * sekme adının parçası olarak okur (\"Gelen 12\").\r\n */\r\n@Directive({\r\n selector: 'span[mfTabCount]',\r\n exportAs: 'mfTabCount',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class TabCount {\r\n private readonly tab = inject(Tab, { optional: true });\r\n private readonly tabList = inject(TabList, { optional: true });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n tabCountVariants({\r\n selected: this.tab?.selected() ?? false,\r\n variant: this.tabList?.variant() ?? 'underline',\r\n }),\r\n ),\r\n );\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { cn, SlidingIndicator } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport {\r\n tabHoverVariants,\r\n tabIndicatorVariants,\r\n tabListVariants,\r\n tabVariants,\r\n type TabsAlign,\r\n type TabsSize,\r\n type TabsVariant,\r\n} from './tabs.variants';\r\n\r\n/**\r\n * ```html\r\n * <mf-tab-nav ariaLabel=\"Proje\">\r\n * <a mfTabLink routerLink=\"overview\" routerLinkActive #o=\"routerLinkActive\" [active]=\"o.isActive\">Genel bakış</a>\r\n * <a mfTabLink routerLink=\"settings\" routerLinkActive #s=\"routerLinkActive\" [active]=\"s.isActive\">Ayarlar</a>\r\n * </mf-tab-nav>\r\n * ```\r\n *\r\n * Sayfalar arası GEZİNME için sekme görünümü — `mf-tabs` ile aynı varyantlar,\r\n * boyutlar ve kayan gösterge, ama semantik olarak bir `<nav>` + bağlantılar:\r\n * `role=\"tab\"`/ok tuşu YOK (gezinen bağlantıda sekme rolü WAI-ARIA'da yanlış\r\n * desen), etkin bağlantı `aria-current=\"page\"` taşır, klavye doğal Tab/Enter.\r\n * Kit `@angular/router`'a bağımlı değil — `active`'i tüketici bağlar\r\n * (`routerLinkActive` ya da kendi durumu). Yalnız yatay; dikey gezinme Sidebar'ın işi.\r\n */\r\n@Component({\r\n selector: 'mf-tab-nav',\r\n exportAs: 'mfTabNav',\r\n imports: [SlidingIndicator, TabScroller],\r\n host: { class: 'block min-w-0' },\r\n templateUrl: './tab-nav.html',\r\n})\r\nexport class TabNav {\r\n readonly variant = input<TabsVariant>('underline');\r\n readonly size = input<TabsSize>('md');\r\n readonly stretch = input(false, { transform: booleanAttribute });\r\n readonly align = input<TabsAlign>('start');\r\n readonly hoverHighlight = input(true, { transform: booleanAttribute });\r\n /** `<nav>` işaret noktasının adı — sayfada birden çok nav varsa zorunlu. */\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly links = contentChildren(\r\n forwardRef(() => TabLink),\r\n { descendants: true },\r\n );\r\n /** Etkin bağlantı değişince göstergeyi yeniden ölçtürür. */\r\n protected readonly activeIndex = computed(() => this.links().findIndex((l) => l.active()));\r\n\r\n readonly drawsHover = computed(\r\n () => this.hoverHighlight() && (this.variant() === 'underline' || this.variant() === 'pills'),\r\n );\r\n protected readonly listClasses = computed(() =>\r\n cn(\r\n tabListVariants({\r\n variant: this.variant(),\r\n orientation: 'horizontal',\r\n align: this.align(),\r\n fill: this.variant() === 'underline' || this.stretch() || this.align() !== 'start',\r\n }),\r\n ),\r\n );\r\n protected readonly indicatorClasses = computed(() =>\r\n tabIndicatorVariants({ variant: this.variant(), orientation: 'horizontal' }),\r\n );\r\n protected readonly hoverClasses = computed(() =>\r\n tabHoverVariants({\r\n variant: this.variant() === 'pills' ? 'pills' : 'underline',\r\n orientation: 'horizontal',\r\n }),\r\n );\r\n\r\n protected readonly hoveredLink = signal<HTMLElement | null>(null);\r\n\r\n protected onPointerOver(event: PointerEvent): void {\r\n if (!this.drawsHover() || event.pointerType === 'touch') return;\r\n const link = (event.target as Element | null)?.closest<HTMLElement>('a[mfTabLink]');\r\n if (link) this.hoveredLink.set(link);\r\n }\r\n\r\n protected onPointerLeave(): void {\r\n this.hoveredLink.set(null);\r\n }\r\n}\r\n\r\n/** `a[mfTabLink]` — `mf-tab-nav` içindeki bağlantı; `active` → `aria-current=\"page\"`. */\r\n@Directive({\r\n selector: 'a[mfTabLink]',\r\n exportAs: 'mfTabLink',\r\n host: {\r\n '[attr.aria-current]': \"active() ? 'page' : null\",\r\n '[class]': 'classes()',\r\n },\r\n})\r\nexport class TabLink {\r\n readonly active = input(false, { transform: booleanAttribute });\r\n private readonly nav = inject(TabNav, { optional: true });\r\n\r\n protected readonly classes = computed(() => {\r\n const nav = this.nav;\r\n return cn(\r\n tabVariants({\r\n variant: nav?.variant() ?? 'underline',\r\n size: nav?.size() ?? 'md',\r\n orientation: 'horizontal',\r\n selected: this.active(),\r\n stretch: nav?.stretch() ?? false,\r\n ownHover: !(nav?.drawsHover() ?? false),\r\n }),\r\n );\r\n });\r\n}\r\n","<nav [attr.aria-label]=\"ariaLabel() || null\">\r\n <div mfTabScroller>\r\n <div\r\n [class]=\"listClasses()\"\r\n (pointerover)=\"onPointerOver($event)\"\r\n (pointerleave)=\"onPointerLeave()\"\r\n >\r\n @if (drawsHover()) {\r\n <span\r\n mfSlidingIndicator\r\n data-tab-hover\r\n [target]=\"hoveredLink()\"\r\n [class]=\"hoverClasses()\"\r\n ></span>\r\n }\r\n @if (variant() !== 'card') {\r\n <span\r\n mfSlidingIndicator\r\n data-tab-indicator\r\n target='[aria-current=\"page\"]'\r\n [track]=\"activeIndex()\"\r\n [class]=\"indicatorClasses()\"\r\n ></span>\r\n }\r\n <ng-content />\r\n </div>\r\n </div>\r\n</nav>\r\n","import { Component, computed, contentChild } from '@angular/core';\r\nimport { Tabs as AriaTabs } from '@angular/aria/tabs';\r\nimport { TabList } from './tab-list';\r\n\r\n/**\r\n * ```html\r\n * <mf-tabs>\r\n * <mf-tab-list [(selectedTab)]=\"tab\" variant=\"pills\" orientation=\"vertical\" class=\"w-56\">\r\n * <button mfTab value=\"profile\">Profil</button>\r\n * <button mfTab value=\"billing\">Faturalandırma</button>\r\n * </mf-tab-list>\r\n * <mf-tab-panel value=\"profile\"><ng-template ngTabContent>…</ng-template></mf-tab-panel>\r\n * <mf-tab-panel value=\"billing\"><ng-template ngTabContent>…</ng-template></mf-tab-panel>\r\n * </mf-tabs>\r\n * ```\r\n *\r\n * `@angular/aria/tabs` kompozisyonu: `Tabs`/`TabList`/`Tab`/`TabPanel` her biri\r\n * aria'nın aynı adlı yapı taşını `hostDirectives` ile taşır (ARIA rolleri,\r\n * roving tabindex, ok tuşları, Home/End) — kit yalnız görsel katmanı ekler.\r\n *\r\n * **Dikey yerleşim otomatik:** liste `orientation=\"vertical\"` olunca kök yan\r\n * yana (`flex`) dizilir, paneller kalan alanı doldurur. Yönün tek kaynağı\r\n * listedir (ARIA `aria-orientation` orada); liste genişliği tüketicinin\r\n * `class`'ı (ör. `w-56`).\r\n */\r\n@Component({\r\n selector: 'mf-tabs',\r\n exportAs: 'mfTabs',\r\n hostDirectives: [AriaTabs],\r\n host: {\r\n class: 'block',\r\n '[class.flex]': 'vertical()',\r\n '[class.items-start]': 'vertical()',\r\n '[class.gap-6]': 'vertical()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class Tabs {\r\n private readonly list = contentChild(TabList, { descendants: true });\r\n /** `TabPanel` panel genişliği için okur. */\r\n readonly vertical = computed(() => this.list()?.isVertical() ?? false);\r\n}\r\n","import { Component, booleanAttribute, inject, input } from '@angular/core';\r\nimport { TabPanel as AriaTabPanel } from '@angular/aria/tabs';\r\nimport { Tabs } from './tabs';\r\n\r\n/**\r\n * ```html\r\n * <mf-tab-panel value=\"genel\">\r\n * <ng-template ngTabContent>İçerik…</ng-template>\r\n * </mf-tab-panel>\r\n * ```\r\n *\r\n * `ngTabContent` (`@angular/aria/tabs`'ın `TabContent`'i) doğrudan kullanılır —\r\n * içerik panel ilk kez etkinleşene kadar oluşturulmaz (lazy). `preserveContent`\r\n * `hostDirectives` ile yeniden iletilemiyor (NG2017), bu yüzden açık değil.\r\n *\r\n * - `[class.hidden]` ELLE — aria'nın `inert`'i paneli erişilebilirlik ağacından\r\n * çıkarır ama GÖRSEL olarak gizlemez (kütüphanenin kendi notu).\r\n * - **Geçiş:** görünür olan panel `animate-panel-in` ile solarak/hafifçe\r\n * yükselerek gelir; `display:none → block` animasyonu kendiliğinden yeniden\r\n * başlatır. `[animate]=\"false\"` kapatır; azaltılmış harekette zaten yok.\r\n * - Dikey `mf-tabs` içinde kalan genişliği doldurur (`flex-1 min-w-0`).\r\n */\r\n@Component({\r\n selector: 'mf-tab-panel',\r\n exportAs: 'mfTabPanel',\r\n hostDirectives: [{ directive: AriaTabPanel, inputs: ['value', 'id'] }],\r\n host: {\r\n // Host metadata STATİK olmalı (linker import edilmiş sabiti çözemez) — focusRecipe'in literal hâli.\r\n class:\r\n 'block focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n '[class.hidden]': '!ariaTabPanel.visible()',\r\n '[class.animate-panel-in]': 'animate()',\r\n '[class.flex-1]': 'inVertical()',\r\n '[class.min-w-0]': 'inVertical()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class TabPanel {\r\n /** Görünür olunca giriş animasyonu. */\r\n readonly animate = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly ariaTabPanel = inject(AriaTabPanel);\r\n private readonly tabs = inject(Tabs, { optional: true });\r\n protected inVertical(): boolean {\r\n return this.tabs?.vertical() ?? false;\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport { tabVariants } from './tabs.variants';\r\nimport type { TabStripItem } from './tab-strip.model';\r\n\r\n/**\r\n * `<mf-tab-strip [items]=\"items()\" [(activeKey)]=\"active\" (close)=\"onClose($event)\" />`\r\n *\r\n * `mf-tabs`/`mf-tab-list` (bkz. `tabs.ts`) ARIA `tabs` pattern'i PANEL\r\n * varsayar (`aria-controls` gerçek bir `role=tabpanel`'e işaret eder) — bu\r\n * şerit ise bir ROTA/DOKÜMAN şeridi: panel yok, içerik `router-outlet`'ten\r\n * gelir, sekmeler kapatılabilir. Bu yüzden `@angular/aria/tabs`'ı DEĞİL,\r\n * elle roving tabindex kullanıyor (emsal: `table-pagination.ts`'in\r\n * `onNavKeydown`'ı) — ARIA `tab` rolü/`aria-selected` yine de elle\r\n * uygulanıyor, sadece pattern motoru YOK.\r\n *\r\n * Ok tuşları SADECE odağı taşır (`activeKey` DEĞİŞMEZ) — her ok vuruşunda\r\n * gerçek bir router navigasyonu tetiklemek (bkz. `TabsStore.activate`)\r\n * pahalı/istenmeyen bir yan etki olurdu. `Enter`/`Space` ya da tık asıl\r\n * seçimi commit eder. `Delete` odaktaki (kapatılabilir) sekmeyi kapatır.\r\n *\r\n * Kapatma butonu gerçek bir `<button>` ama tab elemanının kendisi `role=tab`\r\n * taşıyan bir `<div>` — `mfTab`'ın (aria Tabs sisteminin) aksine burada bir\r\n * `<button>` İÇİNE başka bir interaktif eleman GÖMÜLMÜYOR (geçersiz HTML\r\n * olurdu, bkz. `table-filter-bar.html`'deki chip deseni — aynı gerekçeyle\r\n * orada da İKİ KARDEŞ buton var, iç içe değil). Kapatma butonu bilerek\r\n * `tabindex=\"-1\"` — birincil roving-tabindex sırasının parçası değil (fare/\r\n * dokunma birincil, `Delete` tuşu klavye eşdeğeri).\r\n *\r\n * Sağ tık menüsü TAMAMEN tüketiciye ait — bu bileşen belirli bir dropdown\r\n * kütüphanesini BİLMİYOR (bkz. projects/ui-kit/README.md \"Directive mi, component\r\n * mi?\" ruhu — dropdown-agnostik kalma), sadece ham `(itemContextMenu)` olayını\r\n * yukarı veriyor.\r\n */\r\n@Component({\r\n selector: 'mf-tab-strip',\r\n exportAs: 'mfTabStrip',\r\n imports: [Icon, TabScroller],\r\n host: { class: 'block', role: 'tablist' },\r\n templateUrl: './tab-strip.html',\r\n})\r\nexport class TabStrip {\r\n readonly items = input.required<TabStripItem[]>();\r\n readonly activeKey = model.required<string>();\r\n /** Verilirse aktif sekmenin `aria-controls`'ü buna işaret eder (tek bir paylaşımlı içerik bölgesi — router-outlet). */\r\n readonly contentId = input<string | null>(null);\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n /** Kapatma butonunun `aria-label`'ı — sekmenin kendi etiketiyle birleştirilir (ör. \"Close: Roles\"). */\r\n readonly closeLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n protected readonly effectiveCloseLabel = computed(\r\n () => this.closeLabel() ?? this.tabsLabels().close,\r\n );\r\n\r\n // `close` adı native DOM `close` olayıyla çakışıyor (@angular-eslint/no-output-native);\r\n // mevcut public API — yeniden adlandırma kırıcı, ileri bir sürümde ele alınacak.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n readonly close = output<string>();\r\n readonly itemContextMenu = output<{ event: MouseEvent; item: TabStripItem }>();\r\n\r\n protected readonly focusedKey = signal<string | null>(null);\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n\r\n protected tabClasses(item: TabStripItem): string {\r\n return cn(\r\n tabVariants({\r\n variant: 'card',\r\n size: 'sm',\r\n selected: item.key === this.activeKey(),\r\n disabled: false,\r\n }),\r\n 'pe-1.5',\r\n );\r\n }\r\n\r\n protected tabIndexFor(item: TabStripItem): number {\r\n const focused = this.focusedKey() ?? this.activeKey();\r\n return item.key === focused ? 0 : -1;\r\n }\r\n\r\n protected select(key: string): void {\r\n this.focusedKey.set(key);\r\n this.activeKey.set(key);\r\n }\r\n\r\n protected onCloseClick(event: MouseEvent, key: string): void {\r\n event.stopPropagation();\r\n this.close.emit(key);\r\n }\r\n\r\n protected onContextMenu(event: MouseEvent, item: TabStripItem): void {\r\n event.preventDefault();\r\n this.itemContextMenu.emit({ event, item });\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n const currentKey = this.focusedKey() ?? this.activeKey();\r\n const index = items.findIndex((i) => i.key === currentKey);\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.focusIndex(index <= 0 ? items.length - 1 : index - 1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.focusIndex(index === -1 || index === items.length - 1 ? 0 : index + 1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusIndex(0);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusIndex(items.length - 1);\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (index !== -1) this.select(items[index]!.key);\r\n break;\r\n case 'Delete':\r\n if (index !== -1 && items[index]!.closable) {\r\n event.preventDefault();\r\n this.close.emit(items[index]!.key);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusIndex(index: number): void {\r\n const item = this.items()[index];\r\n if (!item) return;\r\n this.focusedKey.set(item.key);\r\n queueMicrotask(() => {\r\n const btn = this.rowEl()?.nativeElement.querySelector<HTMLElement>(\r\n `[data-tab-key=\"${item.key}\"]`,\r\n );\r\n btn?.focus();\r\n if (btn) this.scroller()?.scrollIntoViewIfNeeded(btn);\r\n });\r\n }\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n @if (showStartArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n }\r\n\r\n <!-- Kaydırma kapsayıcısı odaklanabilir değil — ok tuşu gezinmesi burada delege; gerçek odak roving tabindex ile alt sekmelerde. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div mfTabScroller (keydown)=\"onKeydown($event)\">\r\n <div #row class=\"flex items-center gap-1 py-1\">\r\n @for (item of items(); track item.key) {\r\n <!-- Enter/Space seçimi üstteki kapsayıcının (keydown)'ında yönetiliyor (roving tabindex deseni). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div\r\n role=\"tab\"\r\n [attr.data-tab-key]=\"item.key\"\r\n [attr.aria-selected]=\"item.key === activeKey()\"\r\n [attr.aria-controls]=\"item.key === activeKey() ? contentId() : null\"\r\n [tabindex]=\"tabIndexFor(item)\"\r\n [class]=\"tabClasses(item)\"\r\n (click)=\"select(item.key)\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n @if (item.icon) {\r\n <span mfIcon [size]=\"14\">{{ item.icon }}</span>\r\n }\r\n <span class=\"truncate\">{{ item.label }}</span>\r\n @if (item.closable) {\r\n <button\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n class=\"ms-0.5 inline-flex h-4 w-4 shrink-0 appearance-none items-center justify-center rounded-xs border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-active hover:text-fg\"\r\n [attr.aria-label]=\"effectiveCloseLabel() + ': ' + item.label\"\r\n (click)=\"onCloseClick($event, item.key)\"\r\n >\r\n <span mfIcon [size]=\"13\">close</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaTabList","AriaTab","AriaTabs","AriaTabPanel"],"mappings":"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"}
|
|
@@ -22,6 +22,9 @@ class TagInput extends ValueAccessorBase {
|
|
|
22
22
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
23
23
|
hasError = input(false, /* @ts-ignore */
|
|
24
24
|
...(ngDevMode ? [{ debugName: "hasError" }] : /* istanbul ignore next */ []));
|
|
25
|
+
/** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
|
|
26
|
+
inputId = input(/* @ts-ignore */
|
|
27
|
+
...(ngDevMode ? [undefined, { debugName: "inputId" }] : /* istanbul ignore next */ []));
|
|
25
28
|
ariaLabel = input('', /* @ts-ignore */
|
|
26
29
|
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
27
30
|
fullWidth = input(false, /* @ts-ignore */
|
|
@@ -70,7 +73,7 @@ class TagInput extends ValueAccessorBase {
|
|
|
70
73
|
this.onTouched();
|
|
71
74
|
}
|
|
72
75
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TagInput, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: TagInput, isStandalone: true, selector: "mf-tag-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null }, unique: { classPropertyName: "unique", publicName: "unique", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.w-full": "fullWidth()" }, classAttribute: "inline-flex" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], exportAs: ["mfTagInput"], usesInheritance: true, ngImport: i0, template: `
|
|
76
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: TagInput, isStandalone: true, selector: "mf-tag-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null }, unique: { classPropertyName: "unique", publicName: "unique", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.w-full": "fullWidth()" }, classAttribute: "inline-flex" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], exportAs: ["mfTagInput"], usesInheritance: true, ngImport: i0, template: `
|
|
74
77
|
<mf-input-group [wrap]="true" [hasError]="hasError()" [disabled]="disabled()">
|
|
75
78
|
@for (tag of value(); track tag) {
|
|
76
79
|
<mf-chip
|
|
@@ -84,6 +87,7 @@ class TagInput extends ValueAccessorBase {
|
|
|
84
87
|
}
|
|
85
88
|
<input
|
|
86
89
|
#inputEl
|
|
90
|
+
[attr.id]="inputId() || null"
|
|
87
91
|
type="text"
|
|
88
92
|
class="min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none"
|
|
89
93
|
[placeholder]="value().length === 0 ? placeholder() : ''"
|
|
@@ -116,6 +120,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
116
120
|
}
|
|
117
121
|
<input
|
|
118
122
|
#inputEl
|
|
123
|
+
[attr.id]="inputId() || null"
|
|
119
124
|
type="text"
|
|
120
125
|
class="min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none"
|
|
121
126
|
[placeholder]="value().length === 0 ? placeholder() : ''"
|
|
@@ -128,7 +133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
128
133
|
`,
|
|
129
134
|
providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }],
|
|
130
135
|
}]
|
|
131
|
-
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], removeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeLabel", required: false }] }], unique: [{ type: i0.Input, args: [{ isSignal: true, alias: "unique", required: false }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
|
|
136
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], removeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "removeLabel", required: false }] }], unique: [{ type: i0.Input, args: [{ isSignal: true, alias: "unique", required: false }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }] } });
|
|
132
137
|
|
|
133
138
|
/**
|
|
134
139
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-tag-input.mjs","sources":["../../../projects/ui-kit/tag-input/tag-input.ts","../../../projects/ui-kit/tag-input/mesgflow-ui-kit-tag-input.ts"],"sourcesContent":["import { Component, ElementRef, forwardRef, input, model, viewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { InputGroup } from '@mesgflow/ui-kit/input';\r\n\r\n/**\r\n * `<mf-tag-input [(value)]=\"tags\" placeholder=\"Etiket ekle...\" />` — Enter\r\n * veya virgül taslak metni bir etikete çevirir, her etiket kaldırılabilir\r\n * bir `Chip` olarak görünür. Taslak BOŞKEN Backspace SON etiketi kaldırır\r\n * (yaygın \"tag input\" klavye deseni — ayrı bir onay adımı gerekmez, geri\r\n * alması kolay bir eylem). `InputGroup`'un `[wrap]=\"true\"` moduyla (bkz.\r\n * `input-group.ts`) etiketler çoğaldıkça kabuk BÜYÜR, taşırmaz.\r\n */\r\n@Component({\r\n selector: 'mf-tag-input',\r\n exportAs: 'mfTagInput',\r\n imports: [Chip, InputGroup],\r\n host: { class: 'inline-flex', '[class.w-full]': 'fullWidth()' },\r\n template: `\r\n <mf-input-group [wrap]=\"true\" [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n @for (tag of value(); track tag) {\r\n <mf-chip\r\n size=\"sm\"\r\n [removable]=\"!disabled()\"\r\n [removeLabel]=\"removeLabel()\"\r\n (removed)=\"removeTag(tag)\"\r\n >\r\n {{ tag }}\r\n </mf-chip>\r\n }\r\n <input\r\n #inputEl\r\n type=\"text\"\r\n class=\"min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"value().length === 0 ? placeholder() : ''\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"commitDraft()\"\r\n />\r\n </mf-input-group>\r\n `,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }],\r\n})\r\nexport class TagInput extends ValueAccessorBase<string[]> implements ControlValueAccessor {\r\n readonly value = model<string[]>([]);\r\n readonly placeholder = input('');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n readonly fullWidth = input(false);\r\n /** Verilmezse alttaki `Chip`'in kendi `MF_CHIP_LABELS` düşüşü kullanılır (bkz. `chip.ts`). */\r\n readonly removeLabel = input<string>();\r\n /** Aynı etiketin (büyük/küçük harf duyarsız) İKİ KEZ eklenmesini engeller. */\r\n readonly unique = input(true);\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n\r\n writeValue(value: string[]): void {\r\n this.value.set(value ?? []);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const input = event.target as HTMLInputElement;\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.commitDraft();\r\n } else if (event.key === 'Backspace' && input.value === '' && this.value().length > 0) {\r\n event.preventDefault();\r\n this.removeTag(this.value()[this.value().length - 1]!);\r\n }\r\n }\r\n\r\n protected commitDraft(): void {\r\n const input = this.inputEl()?.nativeElement;\r\n if (!input) return;\r\n const raw = input.value.trim();\r\n input.value = '';\r\n if (!raw) return;\r\n if (this.unique() && this.value().some((t) => t.toLowerCase() === raw.toLowerCase())) return;\r\n\r\n const next = [...this.value(), raw];\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected removeTag(tag: string): void {\r\n const next = this.value().filter((t) => t !== tag);\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAMA;;;;;;;AAOG;
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-tag-input.mjs","sources":["../../../projects/ui-kit/tag-input/tag-input.ts","../../../projects/ui-kit/tag-input/mesgflow-ui-kit-tag-input.ts"],"sourcesContent":["import { Component, ElementRef, forwardRef, input, model, viewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { InputGroup } from '@mesgflow/ui-kit/input';\r\n\r\n/**\r\n * `<mf-tag-input [(value)]=\"tags\" placeholder=\"Etiket ekle...\" />` — Enter\r\n * veya virgül taslak metni bir etikete çevirir, her etiket kaldırılabilir\r\n * bir `Chip` olarak görünür. Taslak BOŞKEN Backspace SON etiketi kaldırır\r\n * (yaygın \"tag input\" klavye deseni — ayrı bir onay adımı gerekmez, geri\r\n * alması kolay bir eylem). `InputGroup`'un `[wrap]=\"true\"` moduyla (bkz.\r\n * `input-group.ts`) etiketler çoğaldıkça kabuk BÜYÜR, taşırmaz.\r\n */\r\n@Component({\r\n selector: 'mf-tag-input',\r\n exportAs: 'mfTagInput',\r\n imports: [Chip, InputGroup],\r\n host: { class: 'inline-flex', '[class.w-full]': 'fullWidth()' },\r\n template: `\r\n <mf-input-group [wrap]=\"true\" [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n @for (tag of value(); track tag) {\r\n <mf-chip\r\n size=\"sm\"\r\n [removable]=\"!disabled()\"\r\n [removeLabel]=\"removeLabel()\"\r\n (removed)=\"removeTag(tag)\"\r\n >\r\n {{ tag }}\r\n </mf-chip>\r\n }\r\n <input\r\n #inputEl\r\n [attr.id]=\"inputId() || null\"\r\n type=\"text\"\r\n class=\"min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"value().length === 0 ? placeholder() : ''\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"commitDraft()\"\r\n />\r\n </mf-input-group>\r\n `,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }],\r\n})\r\nexport class TagInput extends ValueAccessorBase<string[]> implements ControlValueAccessor {\r\n readonly value = model<string[]>([]);\r\n readonly placeholder = input('');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */\r\n readonly inputId = input<string>();\r\n readonly ariaLabel = input('');\r\n readonly fullWidth = input(false);\r\n /** Verilmezse alttaki `Chip`'in kendi `MF_CHIP_LABELS` düşüşü kullanılır (bkz. `chip.ts`). */\r\n readonly removeLabel = input<string>();\r\n /** Aynı etiketin (büyük/küçük harf duyarsız) İKİ KEZ eklenmesini engeller. */\r\n readonly unique = input(true);\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n\r\n writeValue(value: string[]): void {\r\n this.value.set(value ?? []);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const input = event.target as HTMLInputElement;\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.commitDraft();\r\n } else if (event.key === 'Backspace' && input.value === '' && this.value().length > 0) {\r\n event.preventDefault();\r\n this.removeTag(this.value()[this.value().length - 1]!);\r\n }\r\n }\r\n\r\n protected commitDraft(): void {\r\n const input = this.inputEl()?.nativeElement;\r\n if (!input) return;\r\n const raw = input.value.trim();\r\n input.value = '';\r\n if (!raw) return;\r\n if (this.unique() && this.value().some((t) => t.toLowerCase() === raw.toLowerCase())) return;\r\n\r\n const next = [...this.value(), raw];\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected removeTag(tag: string): void {\r\n const next = this.value().filter((t) => t !== tag);\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -300,12 +300,12 @@ const RADIUS_PX = {
|
|
|
300
300
|
soft: { xs: 6, sm: 10, md: 14, lg: 20, xl: 28 },
|
|
301
301
|
};
|
|
302
302
|
/** `radius.css`'teki `--control-h-*` ile AYNI değerler — `[data-density]` seçicileri de bunları kullanır. */
|
|
303
|
+
const CONTROL_H_KEYS = ['xs', 'sm', 'md', 'lg', 'xl'];
|
|
303
304
|
const CONTROL_H_PX = {
|
|
304
|
-
compact: { sm: 28, md: 32, lg: 36 },
|
|
305
|
-
default: { sm: 32, md: 36, lg: 40 },
|
|
306
|
-
comfortable: { sm: 36, md: 40, lg: 44 },
|
|
305
|
+
compact: { xs: 24, sm: 28, md: 32, lg: 36, xl: 44 },
|
|
306
|
+
default: { xs: 28, sm: 32, md: 36, lg: 40, xl: 48 },
|
|
307
|
+
comfortable: { xs: 32, sm: 36, md: 40, lg: 44, xl: 52 },
|
|
307
308
|
};
|
|
308
|
-
const CONTROL_H_KEYS = ['sm', 'md', 'lg'];
|
|
309
309
|
function densityLines(density) {
|
|
310
310
|
return CONTROL_H_KEYS.map((key) => [
|
|
311
311
|
`--control-h-${key}`,
|