@ngneers/controls 0.0.1-pre4 → 0.0.1-pre6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/fesm2022/ngneers-controls-accordion.mjs +32 -32
  2. package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
  3. package/fesm2022/ngneers-controls-api-ng.mjs +19 -19
  4. package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
  5. package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
  6. package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
  7. package/fesm2022/ngneers-controls-avatar.mjs +13 -13
  8. package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-base.mjs +89 -64
  10. package/fesm2022/ngneers-controls-base.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-breadcrumb.mjs +18 -18
  12. package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-button-group.mjs +8 -8
  14. package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-button.mjs +16 -10
  16. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  17. package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs → ngneers-controls-calendar-time-Bzlv9Vkn.mjs} +9 -9
  18. package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs.map → ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map} +1 -1
  19. package/fesm2022/ngneers-controls-calendar.mjs +54 -54
  20. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
  22. package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-chip.mjs +6 -6
  24. package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-defer.mjs +10 -10
  26. package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-dialog.mjs +37 -39
  28. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  29. package/fesm2022/ngneers-controls-directives.mjs +45 -39
  30. package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
  31. package/fesm2022/ngneers-controls-drawer.mjs +28 -28
  32. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  33. package/fesm2022/ngneers-controls-edit-inplace.mjs +15 -15
  34. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  35. package/fesm2022/ngneers-controls-filter.mjs +192 -44
  36. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  37. package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
  38. package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
  39. package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
  40. package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
  41. package/fesm2022/ngneers-controls-i18n.mjs +5 -5
  42. package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
  43. package/fesm2022/ngneers-controls-icon.mjs +10 -10
  44. package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
  45. package/fesm2022/ngneers-controls-inplace.mjs +18 -18
  46. package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
  47. package/fesm2022/ngneers-controls-input-field.mjs +15 -15
  48. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  49. package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
  50. package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
  51. package/fesm2022/ngneers-controls-input.mjs +7 -6
  52. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  53. package/fesm2022/ngneers-controls-item-view.mjs +33 -33
  54. package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
  55. package/fesm2022/ngneers-controls-list-box.mjs +31 -31
  56. package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
  57. package/fesm2022/ngneers-controls-menu.mjs +32 -32
  58. package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
  59. package/fesm2022/ngneers-controls-message.mjs +4 -4
  60. package/fesm2022/ngneers-controls-message.mjs.map +1 -1
  61. package/fesm2022/ngneers-controls-paginator.mjs +12 -12
  62. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  63. package/fesm2022/ngneers-controls-popover.mjs +13 -13
  64. package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
  65. package/fesm2022/ngneers-controls-progress.mjs +16 -16
  66. package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
  67. package/fesm2022/ngneers-controls-scroller.mjs +74 -39
  68. package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
  69. package/fesm2022/ngneers-controls-select-button.mjs +6 -6
  70. package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
  71. package/fesm2022/ngneers-controls-select.mjs +46 -46
  72. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  73. package/fesm2022/ngneers-controls-slider.mjs +12 -12
  74. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  75. package/fesm2022/ngneers-controls-spinner.mjs +7 -7
  76. package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
  77. package/fesm2022/ngneers-controls-splitter.mjs +141 -328
  78. package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
  79. package/fesm2022/ngneers-controls-switch.mjs +3 -3
  80. package/fesm2022/ngneers-controls-table.mjs +1520 -80
  81. package/fesm2022/ngneers-controls-table.mjs.map +1 -1
  82. package/fesm2022/ngneers-controls-tabs.mjs +40 -39
  83. package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
  84. package/fesm2022/ngneers-controls-tag.mjs +4 -4
  85. package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
  86. package/fesm2022/ngneers-controls-toast.mjs +18 -18
  87. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  88. package/fesm2022/ngneers-controls-toggle-button.mjs +9 -9
  89. package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
  90. package/fesm2022/ngneers-controls-tooltip.mjs +37 -45
  91. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  92. package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
  93. package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
  94. package/package.json +14 -10
  95. package/types/ngneers-controls-api-ng.d.ts +2 -2
  96. package/types/ngneers-controls-api-resize.d.ts +318 -0
  97. package/types/ngneers-controls-base.d.ts +8 -0
  98. package/types/ngneers-controls-breadcrumb.d.ts +1 -1
  99. package/types/ngneers-controls-button.d.ts +13 -8
  100. package/types/ngneers-controls-calendar.d.ts +5 -1
  101. package/types/ngneers-controls-checkbox.d.ts +1 -1
  102. package/types/ngneers-controls-directives.d.ts +7 -1
  103. package/types/ngneers-controls-drawer.d.ts +4 -0
  104. package/types/ngneers-controls-edit-inplace.d.ts +4 -0
  105. package/types/ngneers-controls-filter.d.ts +53 -4
  106. package/types/ngneers-controls-i18n.d.ts +4 -0
  107. package/types/ngneers-controls-icon.d.ts +1 -1
  108. package/types/ngneers-controls-input-field.d.ts +4 -0
  109. package/types/ngneers-controls-input.d.ts +1 -1
  110. package/types/ngneers-controls-list-box.d.ts +5 -1
  111. package/types/ngneers-controls-menu.d.ts +1 -1
  112. package/types/ngneers-controls-paginator.d.ts +4 -0
  113. package/types/ngneers-controls-popover.d.ts +1 -1
  114. package/types/ngneers-controls-scroller.d.ts +12 -2
  115. package/types/ngneers-controls-select.d.ts +6 -2
  116. package/types/ngneers-controls-spinner.d.ts +1 -1
  117. package/types/ngneers-controls-splitter.d.ts +29 -59
  118. package/types/ngneers-controls-table.d.ts +392 -24
  119. package/types/ngneers-controls-toast.d.ts +1 -1
  120. package/types/ngneers-controls-tooltip.d.ts +1 -7
  121. package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
  122. package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-splitter.mjs","sources":["../../src/splitter/panel/splitter-panel.ts","../../src/splitter/panel/splitter-panel.html","../../src/splitter/utils.ts","../../src/splitter/splitter-calculator.ts","../../src/splitter/splitter.ts","../../src/splitter/splitter.html","../../src/splitter/module.ts","../../src/splitter/ngneers-controls-splitter.ts"],"sourcesContent":["import { Component, computed, input, model, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { splitterControlTemplate } from '@ngneers/controls-themes/templates/splitter';\r\n\r\nimport type { SplitterPanelSize, SplitterPanelSizeLimit } from '../types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-splitter-panel',\r\n templateUrl: './splitter-panel.html',\r\n providers: [provideSelf(NgnSplitterPanel)],\r\n host: {\r\n role: 'region',\r\n '[style.grid-area]': 'gridArea()',\r\n '[aria-label]': 'ariaLabel()',\r\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\r\n },\r\n})\r\nexport class NgnSplitterPanel extends NgnBase<'splitter'> {\r\n protected readonly theme = this.injectThemeTemplate(splitterControlTemplate, 'panel');\r\n private readonly _fallbackAreaName = generateElementId();\r\n\r\n public readonly name = input<string | null>();\r\n public readonly size = model<SplitterPanelSize>('1fr');\r\n public readonly minSize = model<SplitterPanelSizeLimit>('0px');\r\n public readonly maxSize = model<SplitterPanelSizeLimit>('100%');\r\n\r\n public readonly ariaLabel = input<string | null>();\r\n public readonly ariaLabelledBy = input<string | null>();\r\n\r\n protected readonly gridArea = computed(() => this.name() ?? this._fallbackAreaName);\r\n}\r\n","<ng-content />\r\n","import type {\r\n SplitterPanelSize,\r\n SplitterPanelSizeLimit,\r\n SplitterPanelSizeLimitUnit,\r\n SplitterPanelSizeUnit,\r\n} from './types';\r\n\r\nexport type ExpandedSplitterPanelSize = {\r\n value: number;\r\n unit: SplitterPanelSizeUnit;\r\n};\r\nexport type ExpandedSplitterPanelSizeLimit = {\r\n value: number;\r\n unit: SplitterPanelSizeLimitUnit;\r\n};\r\n\r\nexport function isSplitterPanelSize(value: unknown): value is SplitterPanelSize {\r\n if (typeof value !== 'string') return false;\r\n const m = value.match(/^(.+)(px|fr)$/);\r\n if (!m || !m[1]) return false;\r\n if (isNaN(parseFloat(m[1]))) return false;\r\n return true;\r\n}\r\n\r\nexport function getSplitterPanelSizeUnit(value: SplitterPanelSize): SplitterPanelSizeUnit {\r\n return value.slice(-2) as SplitterPanelSizeUnit;\r\n}\r\n\r\nexport function getSplitterPanelSizeValue(value: SplitterPanelSize): number {\r\n return parseFloat(value.slice(0, -2));\r\n}\r\n\r\nexport function isSplitterPanelSizeLimit(value: unknown): value is SplitterPanelSize {\r\n if (typeof value !== 'string') return false;\r\n const m = value.match(/^(.+)(px|%)$/);\r\n if (!m || !m[1]) return false;\r\n if (isNaN(parseFloat(m[1]))) return false;\r\n return true;\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitUnit(\r\n value: SplitterPanelSizeLimit\r\n): SplitterPanelSizeLimitUnit {\r\n return value.endsWith('px') ? 'px' : '%';\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitValue(value: SplitterPanelSizeLimit): number {\r\n return value.endsWith('px') ? parseFloat(value.slice(0, -2)) : parseFloat(value.slice(0, -1));\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitInPx(\r\n value: SplitterPanelSizeLimit,\r\n totalSize: number\r\n): number {\r\n const unit = getSplitterPanelSizeLimitUnit(value);\r\n const sizeValue = getSplitterPanelSizeLimitValue(value);\r\n return unit === 'px' ? sizeValue : (sizeValue / 100) * totalSize;\r\n}\r\n\r\nexport function expandSplitterPanelSize(value: SplitterPanelSize): ExpandedSplitterPanelSize {\r\n return {\r\n value: getSplitterPanelSizeValue(value),\r\n unit: getSplitterPanelSizeUnit(value),\r\n };\r\n}\r\n\r\nexport function expandSplitterPanelSizeLimit(\r\n value: SplitterPanelSizeLimit\r\n): ExpandedSplitterPanelSizeLimit {\r\n return {\r\n value: getSplitterPanelSizeLimitValue(value),\r\n unit: getSplitterPanelSizeLimitUnit(value),\r\n };\r\n}\r\n\r\nexport function collapseSplitterPanelSize(size: ExpandedSplitterPanelSize): SplitterPanelSize {\r\n return `${size.value}${size.unit}`;\r\n}\r\n\r\nexport function collapseSplitterPanelSizeLimit(\r\n size: ExpandedSplitterPanelSizeLimit\r\n): SplitterPanelSizeLimit {\r\n return `${size.value}${size.unit}`;\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n EmbeddedViewRef,\r\n signal,\r\n type Signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { Logger, NgnError, throwExp } from '@ngneers/controls/utils';\r\n\r\nimport { NgnSplitterPanel } from './panel/splitter-panel';\r\nimport { NgnSplitter } from './splitter';\r\nimport {\r\n type ExpandedSplitterPanelSize,\r\n type ExpandedSplitterPanelSizeLimit,\r\n expandSplitterPanelSize,\r\n expandSplitterPanelSizeLimit,\r\n getSplitterPanelSizeLimitInPx,\r\n getSplitterPanelSizeLimitUnit,\r\n getSplitterPanelSizeLimitValue,\r\n getSplitterPanelSizeUnit,\r\n getSplitterPanelSizeValue,\r\n} from './utils';\r\n\r\nimport type { SplitterLayout, SplitterPanelSize } from './types';\r\n\r\nconst LAST_CALC_SIZE_SYMBOL = Symbol('lastCalcSize');\r\n\r\n/**\r\n * Type interface for the {@link SplitterCalculator} interface.\r\n */\r\nexport interface SplitterCalculatorType {\r\n new (splitter: NgnSplitter): SplitterCalculator;\r\n}\r\n\r\n/**\r\n * Represents a calculator for the {@link NgnSplitter} component, handling panel sizes, drag events, and min/max size constraints.\r\n * This interface defines the methods and properties required for managing the splitter's layout and behavior.\r\n */\r\nexport interface SplitterCalculator {\r\n /**\r\n * Signal that provides the ordered list of panels in the splitter.\r\n */\r\n orderedPanels: Signal<readonly NgnSplitterPanel[]>;\r\n\r\n /**\r\n * Signal that provides the grid template sizes for the splitter (to use in `grid-template-rows` or `grid-template-columns` CSS properties).\r\n */\r\n gridTemplateSizes: Signal<string>;\r\n\r\n /**\r\n * Signal that provides the grid template areas for the splitter (to use in `grid-template-areas` CSS property).\r\n */\r\n gridTemplateAreas: Signal<string | null>;\r\n\r\n /**\r\n * Signal that provides the current drag context. Returns `null` if no drag is in progress.\r\n */\r\n dragContext: Signal<SplitterDragContext | null>;\r\n\r\n /**\r\n * Signal that provides the minimum size of the splitter, calculated based on the panels' min sizes and dividers.\r\n */\r\n minSize: Signal<string>;\r\n\r\n /**\r\n * Signal that provides the maximum size of the splitter, calculated based on the panels' max sizes and dividers.\r\n */\r\n maxSize: Signal<string>;\r\n\r\n /**\r\n * Starts a drag operation for the specified divider index.\r\n * @param index The index of the divider to start dragging.\r\n * @param event The pointer event that initiated the drag.\r\n */\r\n startDrag(index: number, event: PointerEvent): void;\r\n\r\n /**\r\n * Handles the drag operation for the specified divider index.\r\n * @param index The index of the divider being dragged.\r\n * @param event The pointer event that is being processed during the drag.\r\n */\r\n drag(index: number, event: PointerEvent): void;\r\n\r\n /**\r\n * Ends the drag operation for the specified divider index.\r\n * @param index The index of the divider being dragged.\r\n * @param event The pointer event that ended the drag.\r\n * @param isCancel Whether the drag operation was cancelled. If true, the panel sizes will be reset to their original values.\r\n */\r\n endDrag(index: number, event: PointerEvent, isCancel: boolean): void;\r\n\r\n /**\r\n * Moves the divider at the specified index by the given pixel delta.\r\n * @param index The index of the divider to move.\r\n * @param pxDelta The pixel delta to move the divider by. Positive values move the divider to the right (or down), negative values move it to the left (or up).\r\n */\r\n moveDivider(index: number, pxDelta: number): void;\r\n}\r\n\r\ntype SplitterFractionFactors = {\r\n /**\r\n * The number of fraction units per pixel.\r\n * This is used to convert pixel values to fraction values.\r\n */\r\n frPerPx: number;\r\n /**\r\n * The number of pixels per fraction unit.\r\n * This is used to convert fraction values to pixel values.\r\n */\r\n pxPerFr: number;\r\n};\r\n\r\ntype SplitterDragContextPanel = {\r\n /**\r\n * A reference to the panel component.\r\n */\r\n panel: NgnSplitterPanel;\r\n /**\r\n * The starting size of the panel at the beginning of the drag operation.\r\n */\r\n startSize: ExpandedSplitterPanelSize;\r\n /**\r\n * The minimum size limit of the panel.\r\n */\r\n minSize: ExpandedSplitterPanelSizeLimit;\r\n /**\r\n * The maximum size limit of the panel.\r\n */\r\n maxSize: ExpandedSplitterPanelSizeLimit;\r\n};\r\n\r\n/**\r\n * Represents the context of a drag operation in the splitter.\r\n */\r\nexport type SplitterDragContext = {\r\n /**\r\n * The index of the divider being dragged.\r\n */\r\n dividerIndex: number;\r\n /**\r\n * The ID of the pointer that initiated the drag operation.\r\n */\r\n pointerId: number;\r\n /**\r\n * The starting position of the pointer when the drag operation started, in pixels.\r\n */\r\n startPosition: number;\r\n /**\r\n * An array of panels involved in the drag operation.\r\n */\r\n panels: SplitterDragContextPanel[];\r\n /**\r\n * The fraction factors used for calculating sizes during the drag operation.\r\n */\r\n fractionFactors: SplitterFractionFactors;\r\n};\r\n\r\n/**\r\n * Default implementation of the {@link SplitterCalculator} interface.\r\n */\r\nexport class DefaultSplitterCalculator implements SplitterCalculator {\r\n protected readonly panels: Signal<readonly NgnSplitterPanel[]>;\r\n protected readonly dividers: Signal<readonly EmbeddedViewRef<unknown>[]>;\r\n protected readonly panelOrder: Signal<readonly string[] | null | undefined>;\r\n protected readonly layout: Signal<SplitterLayout>;\r\n protected readonly splitterSize: Signal<number>;\r\n\r\n constructor(splitter: NgnSplitter) {\r\n this.panels = splitter.panels;\r\n this.dividers = splitter.dividers;\r\n this.panelOrder = splitter.panelOrder;\r\n this.layout = splitter.layout;\r\n this.splitterSize = computed(() =>\r\n this.layout() === 'vertical' ? splitter.elementSize().height : splitter.elementSize().width\r\n );\r\n\r\n // Signal fires when any panel size is not calculated\r\n const hasUncalculatedSizesSig = computed(\r\n () => this.panels().some(panel => !this.isPanelSizeCalculated(panel)),\r\n { equal: (_, b) => b === false }\r\n ) as Signal<void>;\r\n\r\n // Ensure that min and max limits are handled correctly\r\n afterRenderEffect(() => {\r\n // Recalculate on outside changes (e.g. panel size input changes, state restore, etc.)\r\n hasUncalculatedSizesSig();\r\n // Recalculate on splitter size changes\r\n this.splitterSize();\r\n untracked(() => this.ensureMinMaxSizes());\r\n });\r\n }\r\n\r\n public readonly orderedPanels = computed(() => {\r\n const panels = this.panels();\r\n const order = this.panelOrder();\r\n return order\r\n ? [...panels].sort((a, b) => {\r\n const aIndex = order.indexOf(a['gridArea']());\r\n const bIndex = order.indexOf(b['gridArea']());\r\n if (aIndex === -1 && bIndex === -1) return 0;\r\n if (aIndex === -1) return 1; // a is not in order, put it at the end\r\n if (bIndex === -1) return -1; // b is not in order, put it at the end\r\n return aIndex - bIndex; // sort by index in panelOrder\r\n })\r\n : panels;\r\n });\r\n\r\n public readonly gridTemplateSizes = computed(() => {\r\n const panels = this.orderedPanels();\r\n const dividerSizes = this.dividerSizes();\r\n\r\n if (panels.length === 0) return 'none';\r\n const result: string[] = [];\r\n panels.forEach((panel, i) => {\r\n const size = panel.size();\r\n result.push(size);\r\n\r\n if (i < dividerSizes.length) {\r\n const dividerSize = dividerSizes[i] || 0;\r\n result.push(`${dividerSize}px`);\r\n }\r\n });\r\n\r\n return result.join(' ');\r\n });\r\n\r\n public readonly gridTemplateAreas = computed(() => {\r\n const panels = this.orderedPanels();\r\n if (panels.length === 0) return null;\r\n let result = '';\r\n panels.forEach((panel, i) => {\r\n if (i > 0) {\r\n result +=\r\n this.layout() === 'horizontal' ? ` ngn-divider-${i - 1} ` : ` \"ngn-divider-${i - 1}\" `;\r\n }\r\n result += this.layout() === 'horizontal' ? panel['gridArea']() : `\"${panel['gridArea']()}\"`;\r\n });\r\n return this.layout() === 'horizontal' ? `\"${result}\"` : result;\r\n });\r\n\r\n public readonly minSize = computed(() => {\r\n const { px, '%': pc } = this.panels().reduce(\r\n (acc, panel) => {\r\n const size = panel.size();\r\n if (getSplitterPanelSizeUnit(size) === 'px') {\r\n acc.px += getSplitterPanelSizeValue(size);\r\n } else {\r\n const minSize = panel.minSize();\r\n acc[getSplitterPanelSizeLimitUnit(minSize)] += getSplitterPanelSizeLimitValue(minSize);\r\n }\r\n return acc;\r\n },\r\n { px: 0, '%': 0 }\r\n );\r\n return `calc(${px + this.totalDividerSize()}px + ${pc}%)`;\r\n });\r\n\r\n public readonly maxSize = computed(() => {\r\n const { px, '%': pc } = this.panels().reduce(\r\n (acc, panel) => {\r\n const size = panel.size();\r\n if (getSplitterPanelSizeUnit(size) === 'px') {\r\n acc.px += getSplitterPanelSizeValue(size);\r\n } else {\r\n const maxSize = panel.maxSize();\r\n acc[getSplitterPanelSizeLimitUnit(maxSize)] += getSplitterPanelSizeLimitValue(maxSize);\r\n }\r\n return acc;\r\n },\r\n { px: 0, '%': 0 }\r\n );\r\n return `calc(${px + this.totalDividerSize()}px + ${pc}%)`;\r\n });\r\n\r\n public readonly dragContext = signal<SplitterDragContext | null>(null);\r\n\r\n protected readonly dividerSizes = computed(() =>\r\n this.dividers().map(d => {\r\n const el = d.rootNodes.find(x => x instanceof HTMLElement);\r\n return el ? (this.layout() === 'horizontal' ? el.offsetWidth : el.offsetHeight) : 0;\r\n })\r\n );\r\n protected readonly totalDividerSize = computed(() =>\r\n this.dividerSizes().reduce((acc, size) => acc + size, 0)\r\n );\r\n protected readonly totalPanelSizes = computed(() =>\r\n this.panels().reduce(\r\n (acc, panel) => {\r\n const size = panel.size();\r\n acc[getSplitterPanelSizeUnit(size)] += getSplitterPanelSizeValue(size);\r\n return acc;\r\n },\r\n { px: 0, fr: 0 }\r\n )\r\n );\r\n\r\n public startDrag(index: number, event: PointerEvent) {\r\n const panels = this.orderedPanels();\r\n if (index < 0 || index >= panels.length - 1) return;\r\n\r\n this.dragContext.set({\r\n dividerIndex: index,\r\n pointerId: event.pointerId,\r\n startPosition: this.layout() === 'horizontal' ? event.clientX : event.clientY,\r\n panels: panels.map(panel => this.createContextPanel(panel)),\r\n fractionFactors: this.getCurrentFractionFactors(),\r\n });\r\n }\r\n\r\n public drag(index: number, event: PointerEvent) {\r\n const ctx = this.dragContext();\r\n if (!ctx || ctx.dividerIndex !== index || ctx.pointerId !== event.pointerId) return;\r\n\r\n const { startPosition } = ctx;\r\n\r\n let pxDelta: number;\r\n if (this.layout() === 'horizontal') {\r\n pxDelta = event.clientX - startPosition;\r\n } else {\r\n pxDelta = event.clientY - startPosition;\r\n }\r\n\r\n this.applyDividerDelta(index, pxDelta, ctx.panels, ctx.fractionFactors);\r\n }\r\n\r\n public endDrag(index: number, event: PointerEvent, isCancel: boolean) {\r\n const ctx = this.dragContext();\r\n if (!ctx || ctx.dividerIndex !== index || ctx.pointerId !== event.pointerId) return;\r\n\r\n if (isCancel) {\r\n // Reset the panels to their original sizes\r\n ctx.panels.forEach(p => p.panel.size.set(`${p.startSize.value}${p.startSize.unit}`));\r\n }\r\n\r\n this.dragContext.set(null);\r\n }\r\n\r\n public moveDivider(index: number, pxDelta: number) {\r\n const panels = this.orderedPanels();\r\n if (index < 0 || index >= panels.length - 1) return;\r\n\r\n const leftPanel =\r\n panels[index] ??\r\n throwExp('NgnSplitterCalculator', `Left panel is missing for divider at index ${index}`);\r\n const rightPanel =\r\n panels[index + 1] ??\r\n throwExp('NgnSplitterCalculator', `Right panel is missing for divider at index ${index}`);\r\n\r\n // If the size is not calculated, we cannot move the divider\r\n if (!this.isPanelSizeCalculated(leftPanel) || !this.isPanelSizeCalculated(rightPanel)) {\r\n Logger.warn('Cannot move divider, panel sizes are not calculated');\r\n return;\r\n }\r\n\r\n this.applyDividerDelta(\r\n index,\r\n pxDelta,\r\n panels.map(panel => this.createContextPanel(panel)),\r\n this.getCurrentFractionFactors()\r\n );\r\n }\r\n\r\n public ensureMinMaxSizes() {\r\n const panels = this.orderedPanels();\r\n if (panels.length === 0) return;\r\n\r\n const panelSizes = panels.map(panel => {\r\n return {\r\n panel,\r\n size: {\r\n unit: getSplitterPanelSizeUnit(panel.size()),\r\n value: getSplitterPanelSizeValue(panel.size()),\r\n },\r\n minSizePx: getSplitterPanelSizeLimitInPx(panel.minSize(), this.splitterSize()),\r\n maxSizePx: getSplitterPanelSizeLimitInPx(panel.maxSize(), this.splitterSize()),\r\n };\r\n });\r\n\r\n // First make sure all px sizes are in the limits\r\n for (const { size, minSizePx, maxSizePx } of panelSizes) {\r\n if (size.unit === 'px') {\r\n if (size.value < minSizePx) {\r\n size.value = minSizePx;\r\n } else if (size.value > maxSizePx) {\r\n size.value = maxSizePx;\r\n }\r\n }\r\n }\r\n\r\n // Calculate the fraction factors\r\n const totalPanelSizes = panelSizes.reduce(\r\n (acc, { size }) => {\r\n acc[size.unit] += size.value;\r\n return acc;\r\n },\r\n { px: 0, fr: 0 }\r\n );\r\n const frArea = this.splitterSize() - this.totalDividerSize() - totalPanelSizes.px;\r\n const frPerPx = totalPanelSizes.fr / frArea;\r\n const pxPerFr = frArea / totalPanelSizes.fr;\r\n\r\n // Now make sure all fr sizes are in the limits\r\n // We need to do this in a loop because we might need to adjust the fr sizes multiple times\r\n // until all panels are within their limits while distributing the over-/underflow evenly\r\n let frPanelsWithoutClamping = panelSizes.filter(p => p.size.unit === 'fr');\r\n let frToDistribute: number | undefined = undefined; // Not needed initially\r\n while (frPanelsWithoutClamping.length > 0 && frToDistribute !== 0) {\r\n const frToAddPerPanel = frToDistribute ? frToDistribute / frPanelsWithoutClamping.length : 0;\r\n const next: typeof panelSizes = []; // Track panels that are still within limits\r\n let currentTotalFrSize = totalPanelSizes.fr; // Track the total fr size after clamping\r\n for (const p of frPanelsWithoutClamping) {\r\n const minSizeFr = p.minSizePx * frPerPx;\r\n const maxSizeFr = p.maxSizePx * frPerPx;\r\n p.size.value += frToAddPerPanel;\r\n if (p.size.value < minSizeFr) {\r\n currentTotalFrSize = currentTotalFrSize - p.size.value + minSizeFr;\r\n p.size.value = minSizeFr;\r\n } else if (p.size.value > maxSizeFr) {\r\n currentTotalFrSize = currentTotalFrSize - p.size.value + maxSizeFr;\r\n p.size.value = maxSizeFr;\r\n } else {\r\n next.push(p);\r\n }\r\n }\r\n frToDistribute = totalPanelSizes.fr - currentTotalFrSize;\r\n if (Math.abs(frToDistribute * pxPerFr) < 1) {\r\n frToDistribute = 0; // Stop if we are close enough to zero\r\n }\r\n frPanelsWithoutClamping = next;\r\n }\r\n\r\n // Now set all the new sizes to the panels\r\n for (const { panel, size } of panelSizes) {\r\n this.setPanelSize(panel, `${size.value}${size.unit}`);\r\n }\r\n }\r\n\r\n private createContextPanel(panel: NgnSplitterPanel): SplitterDragContextPanel {\r\n return {\r\n panel,\r\n startSize: expandSplitterPanelSize(panel.size()),\r\n minSize: expandSplitterPanelSizeLimit(panel.minSize()),\r\n maxSize: expandSplitterPanelSizeLimit(panel.maxSize()),\r\n };\r\n }\r\n\r\n private getCurrentFractionFactors() {\r\n const frArea = this.splitterSize() - this.totalDividerSize() - this.totalPanelSizes().px || 1; // Avoid division by zero\r\n const totalFr = this.totalPanelSizes().fr || 1; // Avoid division by zero\r\n return {\r\n frPerPx: totalFr / frArea,\r\n pxPerFr: frArea / totalFr,\r\n };\r\n }\r\n\r\n private setPanelSize(panel: NgnSplitterPanel, size: SplitterPanelSize) {\r\n panel.size.set(size);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (panel as any)[LAST_CALC_SIZE_SYMBOL] = size;\r\n }\r\n\r\n private isPanelSizeCalculated(panel: NgnSplitterPanel): boolean {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return (panel as any)[LAST_CALC_SIZE_SYMBOL] === panel.size();\r\n }\r\n\r\n private applyDividerDelta(\r\n dividerIndex: number,\r\n pxDelta: number,\r\n panels: SplitterDragContextPanel[],\r\n fractionFactors: SplitterFractionFactors\r\n ) {\r\n const appliedPanelDeltas: number[] = Array(panels.length).fill(0);\r\n\r\n const recursion = (\r\n pxDelta: number,\r\n panelIndex: number,\r\n panelIndexIncrement: number\r\n ): number => {\r\n if (panelIndex >= panels.length || panelIndex < 0) return 0;\r\n const panel = panels[panelIndex];\r\n if (!panel) {\r\n throw new NgnError('NgnSplitterCalculator', `Panel is missing at index ${panelIndex}`);\r\n }\r\n let unappliedDelta = 0;\r\n\r\n const startPx =\r\n panel.startSize.unit === 'px'\r\n ? panel.startSize.value\r\n : fractionFactors.pxPerFr * panel.startSize.value;\r\n const newPx = startPx + pxDelta;\r\n if (pxDelta < 0) {\r\n const min =\r\n panel.minSize.unit === 'px'\r\n ? panel.minSize.value\r\n : (panel.minSize.value / 100) * this.splitterSize();\r\n if (min > newPx) {\r\n unappliedDelta = -(min - newPx);\r\n }\r\n } else if (pxDelta > 0) {\r\n const max =\r\n panel.maxSize.unit === 'px'\r\n ? panel.maxSize.value\r\n : (panel.maxSize.value / 100) * this.splitterSize();\r\n if (max < newPx) {\r\n unappliedDelta = newPx - max;\r\n }\r\n }\r\n\r\n const appliedDelta = pxDelta - unappliedDelta;\r\n appliedPanelDeltas[panelIndex] = appliedDelta;\r\n\r\n return unappliedDelta === 0\r\n ? pxDelta\r\n : appliedDelta +\r\n recursion(unappliedDelta, panelIndex + panelIndexIncrement, panelIndexIncrement);\r\n };\r\n\r\n let appliedLeft = recursion(pxDelta, dividerIndex, -1);\r\n let appliedRight = -recursion(-pxDelta, dividerIndex + 1, 1);\r\n\r\n if (appliedLeft !== pxDelta || appliedRight !== pxDelta) {\r\n pxDelta =\r\n pxDelta < 0 ? Math.max(appliedLeft, appliedRight) : Math.min(appliedLeft, appliedRight);\r\n appliedPanelDeltas.fill(0);\r\n appliedLeft = recursion(pxDelta, dividerIndex, -1);\r\n appliedRight = -recursion(-pxDelta, dividerIndex + 1, 1);\r\n\r\n if (appliedLeft !== pxDelta || appliedRight !== pxDelta) {\r\n return;\r\n }\r\n }\r\n\r\n panels.forEach((panel, i) => {\r\n const pxDelta = appliedPanelDeltas[i] || 0;\r\n if (panel.startSize.unit === 'px') {\r\n const size = panel.startSize.value + pxDelta;\r\n this.setPanelSize(panel.panel, `${Math.max(0, size)}px`);\r\n } else {\r\n const size = panel.startSize.value + pxDelta * fractionFactors.frPerPx;\r\n this.setPanelSize(panel.panel, `${Math.max(0, size)}fr`);\r\n }\r\n });\r\n }\r\n}\r\n","import {\r\n afterRenderEffect,\r\n Component,\r\n computed,\r\n contentChildren,\r\n EmbeddedViewRef,\r\n inject,\r\n input,\r\n model,\r\n type OnDestroy,\r\n output,\r\n runInInjectionContext,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n ViewContainerRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n elementSizeSignal,\r\n NGN_CONFIG,\r\n NgnTemplate,\r\n templateTypeFn,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { Logger, NgnError } from '@ngneers/controls/utils';\r\nimport { type NgnStateStorage, registerState } from '@ngneers/controls/utils-ng';\r\nimport { splitterControlTemplate } from '@ngneers/controls-themes/templates/splitter';\r\n\r\nimport { NgnSplitterPanel } from './panel/splitter-panel';\r\nimport { DefaultSplitterCalculator, type SplitterCalculatorType } from './splitter-calculator';\r\nimport { isSplitterPanelSize } from './utils';\r\n\r\nimport type { SplitterLayout, SplitterState, SplitterStateData } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-splitter',\r\n templateUrl: './splitter.html',\r\n imports: [NgnPt, NgnTemplate],\r\n providers: [provideSelf(NgnSplitter)],\r\n host: {\r\n role: 'region',\r\n '[style.grid-template-columns]': `layout() === 'horizontal' ? calculator().gridTemplateSizes() : null`,\r\n '[style.grid-template-rows]': `layout() === 'vertical' ? calculator().gridTemplateSizes() : null`,\r\n '[style.grid-template-areas]': 'calculator().gridTemplateAreas()',\r\n '[style.max-width]': `layout() === 'horizontal' ? calculator().maxSize() : null`,\r\n '[style.max-height]': `layout() === 'vertical' ? calculator().maxSize() : null`,\r\n '[style.min-width]': `layout() === 'horizontal' ? calculator().minSize() : null`,\r\n '[style.min-height]': `layout() === 'vertical' ? calculator().minSize() : null`,\r\n },\r\n})\r\nexport class NgnSplitter extends NgnBase<'splitter'> implements OnDestroy {\r\n private readonly _viewContainer = inject(ViewContainerRef);\r\n private readonly _config = inject(NGN_CONFIG);\r\n protected readonly theme = this.injectThemeTemplate(splitterControlTemplate, {\r\n root: true,\r\n dragging: () => this.isDragging(),\r\n horizontal: () => this.layout() === 'horizontal',\r\n vertical: () => this.layout() === 'vertical',\r\n });\r\n protected readonly translations = inject(I18n).translations;\r\n\r\n /**\r\n * The layout of the splitter.\r\n */\r\n public readonly layout = model.required<SplitterLayout>();\r\n /**\r\n * A array of panel names that defines the order of panels.\r\n * If nullish, the order is determined by the order the panels are defined in the template.\r\n */\r\n public readonly panelOrder = model<string[] | null>();\r\n /**\r\n * The storage to use for saving the splitter state.\r\n * @default `session`\r\n */\r\n public readonly stateStorage = input<NgnStateStorage>(\r\n this._config.defaults.splitter.stateStorage\r\n );\r\n /**\r\n * The key to use for saving the splitter state.\r\n * If nullish, the state will not be saved.\r\n */\r\n public readonly stateKey = input<string | null>();\r\n /**\r\n * The type of data to save in the splitter state.\r\n * @default `['layout', 'panelOrder', 'panelSizes']`\r\n */\r\n public readonly stateData = input<readonly SplitterStateData[]>([\r\n 'layout',\r\n 'panelOrder',\r\n 'panelSizes',\r\n ]);\r\n /**\r\n * The type of calculator to use for the splitter.\r\n * @default `DefaultSplitterCalculator`\r\n */\r\n public readonly calculatorType = input<SplitterCalculatorType>(DefaultSplitterCalculator);\r\n /**\r\n * The step size for moving the dividers using the keyboard.\r\n * This can be a pixel value (e.g., '5px') or a percentage value (e.g., '5%').\r\n * If a percentage is used, it will be calculated based on the size of the splitter element.\r\n * @default '5px'\r\n */\r\n public readonly step = input<`${number}${'%' | 'px'}`>('5px');\r\n\r\n /**\r\n * Event emitted when the splitter state is being saved.\r\n * This can be used to modify the state before it is saved.\r\n */\r\n public readonly stateSaving = output<SplitterState>();\r\n /**\r\n * Event emitted when the splitter state is loaded.\r\n * This can be used to modify the state before it is applied or to perform actions based on the loaded state.\r\n */\r\n public readonly stateLoading = output<SplitterState>();\r\n\r\n protected readonly dividerTemplateType = templateTypeFn<never, { index: number }>();\r\n private readonly _dividerTemplate =\r\n viewChild.required<TemplateRef<typeof this.dividerTemplateType>>('defaultDividerTemplate');\r\n\r\n /**\r\n * The current dividers in the splitter.\r\n */\r\n public readonly dividers = signal<EmbeddedViewRef<typeof this.dividerTemplateType>[]>([]);\r\n /**\r\n * The current panels in the splitter.\r\n */\r\n public readonly panels = contentChildren(NgnSplitterPanel);\r\n /**\r\n * The current size of the splitter element.\r\n */\r\n public readonly elementSize = elementSizeSignal(this.element);\r\n\r\n /**\r\n * A value indicating whether the splitter is currently being dragged.\r\n */\r\n public readonly isDragging = computed(() => this.calculator().dragContext() !== null);\r\n\r\n protected readonly calculator = computed(() => {\r\n const calculatorType = this.calculatorType();\r\n return untracked(() => runInInjectionContext(this.injector, () => new calculatorType(this)));\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n afterRenderEffect(() => {\r\n const panels = this.panels();\r\n this.updateDividers(panels);\r\n });\r\n\r\n registerState({\r\n storage: () => this.stateStorage(),\r\n key: () => this.stateKey(),\r\n valueFn: this.computeState.bind(this),\r\n onLoad: this.onStateLoad.bind(this),\r\n debounce: 100,\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n // Clean up dividers\r\n this.dividers().forEach(divider => divider.destroy());\r\n this.dividers.set([]);\r\n }\r\n\r\n protected onHandlePointerDown(index: number, event: PointerEvent) {\r\n const target = event.target;\r\n if (!(target instanceof HTMLElement)) {\r\n throw new Error('Event target is not an HTMLElement');\r\n }\r\n // Make sure the element is stable before capturing the pointer\r\n requestAnimationFrame(() => {\r\n try {\r\n target.setPointerCapture(event.pointerId);\r\n } catch {\r\n // Ignore errors if the element is not capable of capturing the pointer\r\n }\r\n });\r\n\r\n this.calculator().startDrag(index, event);\r\n }\r\n\r\n protected onHandlePointerMove(index: number, event: PointerEvent) {\r\n this.calculator().drag(index, event);\r\n }\r\n\r\n protected onHandlePointerUp(index: number, event: PointerEvent) {\r\n this.calculator().endDrag(index, event, false);\r\n }\r\n\r\n protected onHandlePointerCancel(index: number, event: PointerEvent) {\r\n this.calculator().endDrag(index, event, true);\r\n }\r\n\r\n protected onHandleKeyDown(index: number, event: KeyboardEvent) {\r\n if (\r\n (event.key === 'ArrowLeft' && this.layout() === 'horizontal') ||\r\n (event.key === 'ArrowUp' && this.layout() === 'vertical')\r\n ) {\r\n this.calculator().moveDivider(index, -this.getStepInPx());\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (\r\n (event.key === 'ArrowRight' && this.layout() === 'horizontal') ||\r\n (event.key === 'ArrowDown' && this.layout() === 'vertical')\r\n ) {\r\n this.calculator().moveDivider(index, this.getStepInPx());\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (event.key === 'Home') {\r\n this.calculator().moveDivider(index, Number.NEGATIVE_INFINITY);\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (event.key === 'End') {\r\n this.calculator().moveDivider(index, Number.POSITIVE_INFINITY);\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n }\r\n }\r\n\r\n private updateDividers(panels: readonly NgnSplitterPanel[]) {\r\n this.dividers.update(divider => {\r\n if (divider.length === panels.length - 1) {\r\n return divider; // No need to update if the number of dividers matches the number of panels\r\n } else if (divider.length < panels.length - 1) {\r\n // Add missing dividers\r\n const newDividers = [...divider];\r\n for (let i = divider.length; i < panels.length - 1; i++) {\r\n newDividers.push(this.createDivider(i));\r\n }\r\n return newDividers;\r\n } else {\r\n // More dividers than needed, remove the excess\r\n divider.slice(panels.length - 1).forEach(divider => divider.destroy());\r\n return divider.slice(0, panels.length - 1);\r\n }\r\n });\r\n\r\n // Move dividers to the correct positions\r\n panels.forEach((panel, i) => {\r\n const divider = this.dividers()[i - 1];\r\n if (!divider) {\r\n throw new NgnError('NgnSplitter', `Divider is missing for panel at index ${i}`);\r\n }\r\n this.moveDividerBefore(panel, divider);\r\n });\r\n }\r\n\r\n private createDivider(index: number) {\r\n const viewRef = this._viewContainer.createEmbeddedView(this._dividerTemplate(), { index });\r\n viewRef.detectChanges();\r\n return viewRef;\r\n }\r\n\r\n private moveDividerBefore(panel: NgnSplitterPanel, divider: EmbeddedViewRef<unknown>) {\r\n const panelElement = panel.element.nativeElement;\r\n divider.rootNodes.forEach(node => {\r\n if (node instanceof HTMLElement) {\r\n panelElement.parentElement?.insertBefore(node, panelElement);\r\n }\r\n });\r\n }\r\n\r\n private computeState(previousState: SplitterState | null) {\r\n const data = this.stateData();\r\n const state: SplitterState = {\r\n layout: data.includes('layout') ? this.layout() : undefined,\r\n panelOrder: data.includes('panelOrder') ? this.panelOrder() : undefined,\r\n panelSizes: data.includes('panelSizes')\r\n ? this.panels().reduce(\r\n (acc, panel, index) => {\r\n acc[panel.name() || `ngn-panel-${index}`] = panel.size();\r\n return acc;\r\n },\r\n { ...previousState?.panelSizes }\r\n )\r\n : undefined,\r\n };\r\n\r\n this.stateSaving.emit(state);\r\n\r\n return state;\r\n }\r\n\r\n private onStateLoad(state: SplitterState | null) {\r\n if (state) {\r\n this.ensureValidState(state);\r\n this.stateLoading.emit(state);\r\n this.applyFromState(state);\r\n }\r\n return state;\r\n }\r\n\r\n private ensureValidState(state: SplitterState): void {\r\n if (state.layout && state.layout !== 'horizontal' && state.layout !== 'vertical') {\r\n Logger.warn(`Invalid layout in saved splitter state.`, { state });\r\n delete state.layout;\r\n }\r\n\r\n if (\r\n state.panelOrder &&\r\n (!Array.isArray(state.panelOrder) || state.panelOrder.some(x => typeof x !== 'string'))\r\n ) {\r\n Logger.warn(`Invalid panelOrder in saved splitter state.`, { state });\r\n delete state.panelOrder;\r\n }\r\n\r\n if (\r\n state.panelSizes &&\r\n (typeof state.panelSizes !== 'object' ||\r\n state.panelSizes === null ||\r\n Object.values(state.panelSizes).some(x => !isSplitterPanelSize(x)))\r\n ) {\r\n Logger.warn(`Invalid panelSizes in saved splitter state.`, { state });\r\n delete state.panelSizes;\r\n }\r\n }\r\n\r\n private applyFromState(state: SplitterState) {\r\n if (state.layout && this.stateData().includes('layout')) {\r\n this.layout.set(state.layout);\r\n }\r\n if (state.panelOrder && this.stateData().includes('panelOrder')) {\r\n this.panelOrder.set(state.panelOrder);\r\n }\r\n if (state.panelSizes && this.stateData().includes('panelSizes')) {\r\n const panels = this.panels();\r\n for (let i = 0; i < panels.length; i++) {\r\n const panelName = panels[i]?.name() || `ngn-panel-${i}`;\r\n if (panelName in state.panelSizes) {\r\n const panelSize = state.panelSizes[panelName];\r\n if (!panelSize) {\r\n continue;\r\n }\r\n panels[i]?.size.set(panelSize);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getStepInPx(): number {\r\n const step = this.step();\r\n if (step.endsWith('px')) {\r\n return parseFloat(step.slice(0, -2));\r\n } else if (step.endsWith('%')) {\r\n const size =\r\n this.layout() === 'horizontal' ? this.elementSize().width : this.elementSize().height;\r\n return (parseFloat(step.slice(0, -1)) / 100) * size;\r\n } else {\r\n Logger.warn(`Invalid step value: ${step}.`);\r\n return 10; // Default step in pixels\r\n }\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<ng-template #defaultDividerTemplate [ngnTemplate]=\"dividerTemplateType\" let-index=\"index\">\r\n <div\r\n [style.grid-area]=\"`ngn-divider-${index}`\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n divider: true,\r\n 'divider-dragging': calculator().dragContext()?.dividerIndex === index,\r\n }\"\r\n >\r\n <button\r\n role=\"separator\"\r\n [aria-orientation]=\"layout()\"\r\n [aria-label]=\"translations['splitter_handleLabel']()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'divider-handle'\"\r\n (pointerdown)=\"onHandlePointerDown(index, $event)\"\r\n (pointermove)=\"onHandlePointerMove(index, $event)\"\r\n (pointerup)=\"onHandlePointerUp(index, $event)\"\r\n (pointercancel)=\"onHandlePointerCancel(index, $event)\"\r\n (keydown)=\"onHandleKeyDown(index, $event)\"\r\n ></button>\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NgnSplitterPanel } from './panel/splitter-panel';\r\nimport { NgnSplitter } from './splitter';\r\n\r\n// This module is just for grouping the Splitter and SplitterPanel components for convenience.\r\n// The components are standalone and can be used without this module.\r\n\r\n@NgModule({\r\n imports: [NgnSplitter, NgnSplitterPanel],\r\n exports: [NgnSplitter, NgnSplitterPanel],\r\n})\r\nexport class NgnSplitterModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-splitter.mjs","sources":["../../src/splitter/panel/splitter-panel.ts","../../src/splitter/panel/splitter-panel.html","../../src/splitter/splitter-calculator.ts","../../src/splitter/utils.ts","../../src/splitter/splitter.ts","../../src/splitter/splitter.html","../../src/splitter/module.ts","../../src/splitter/ngneers-controls-splitter.ts"],"sourcesContent":["import { Component, computed, input, model, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { splitterControlTemplate } from '@ngneers/controls-themes/templates/splitter';\r\n\r\nimport type { SplitterPanelSize, SplitterPanelSizeLimit } from '../types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-splitter-panel',\r\n templateUrl: './splitter-panel.html',\r\n providers: [provideSelf(NgnSplitterPanel)],\r\n host: {\r\n role: 'region',\r\n '[style.grid-area]': 'gridArea()',\r\n '[aria-label]': 'ariaLabel()',\r\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\r\n },\r\n})\r\nexport class NgnSplitterPanel extends NgnBase<'splitter'> {\r\n protected readonly theme = this.injectThemeTemplate(splitterControlTemplate, 'panel');\r\n private readonly _fallbackAreaName = generateElementId();\r\n\r\n public readonly name = input<string | null>();\r\n public readonly size = model<SplitterPanelSize>('1fr');\r\n public readonly minSize = model<SplitterPanelSizeLimit>('0px');\r\n public readonly maxSize = model<SplitterPanelSizeLimit>('100%');\r\n\r\n public readonly ariaLabel = input<string | null>();\r\n public readonly ariaLabelledBy = input<string | null>();\r\n\r\n protected readonly gridArea = computed(() => this.name() ?? this._fallbackAreaName);\r\n}\r\n","<ng-content />\r\n","import { computed, EmbeddedViewRef, signal, type Signal } from '@angular/core';\nimport {\n ResizeEngine,\n type ResizableItem,\n type ResizeDistributionMode,\n} from '@ngneers/controls/api/resize';\nimport { Logger, throwExp } from '@ngneers/controls/utils';\n\nimport { NgnSplitterPanel } from './panel/splitter-panel';\nimport { NgnSplitter } from './splitter';\n\nimport type { SplitterLayout } from './types';\n\n/**\n * Type interface for the {@link SplitterCalculator} interface.\n */\nexport interface SplitterCalculatorType {\n new (splitter: NgnSplitter): SplitterCalculator;\n}\n\n/**\n * Represents a calculator for the {@link NgnSplitter} component, handling panel sizes, drag events, and min/max size constraints.\n * This interface defines the methods and properties required for managing the splitter's layout and behavior.\n */\nexport interface SplitterCalculator {\n /**\n * Signal that provides the ordered list of panels in the splitter.\n */\n orderedPanels: Signal<readonly NgnSplitterPanel[]>;\n\n /**\n * Signal that provides the grid template sizes for the splitter (to use in `grid-template-rows` or `grid-template-columns` CSS properties).\n */\n gridTemplateSizes: Signal<string>;\n\n /**\n * Signal that provides the grid template areas for the splitter (to use in `grid-template-areas` CSS property).\n */\n gridTemplateAreas: Signal<string | null>;\n\n /**\n * Signal that provides the current drag context. Returns `null` if no drag is in progress.\n */\n dragContext: Signal<SplitterDragContext | null>;\n\n /**\n * Signal that provides the minimum size of the splitter, calculated based on the panels' min sizes and dividers.\n */\n minSize: Signal<string>;\n\n /**\n * Signal that provides the maximum size of the splitter, calculated based on the panels' max sizes and dividers.\n */\n maxSize: Signal<string>;\n\n /**\n * Starts a drag operation for the specified divider index.\n * @param index The index of the divider to start dragging.\n * @param event The pointer event that initiated the drag.\n */\n startDrag(index: number, event: PointerEvent): void;\n\n /**\n * Handles the drag operation for the specified divider index.\n * @param index The index of the divider being dragged.\n * @param event The pointer event that is being processed during the drag.\n */\n drag(index: number, event: PointerEvent): void;\n\n /**\n * Ends the drag operation for the specified divider index.\n * @param index The index of the divider being dragged.\n * @param event The pointer event that ended the drag.\n * @param isCancel Whether the drag operation was cancelled. If true, the panel sizes will be reset to their original values.\n */\n endDrag(index: number, event: PointerEvent, isCancel: boolean): void;\n\n /**\n * Moves the divider at the specified index by the given pixel delta.\n * @param index The index of the divider to move.\n * @param pxDelta The pixel delta to move the divider by. Positive values move the divider to the right (or down), negative values move it to the left (or up).\n */\n moveDivider(index: number, pxDelta: number): void;\n}\n\n/**\n * Represents the context of a drag operation in the splitter.\n */\nexport type SplitterDragContext = {\n /**\n * The index of the divider being dragged.\n */\n dividerIndex: number;\n /**\n * The ID of the pointer that initiated the drag operation.\n */\n pointerId: number;\n /**\n * The starting position of the pointer when the drag operation started, in pixels.\n */\n startPosition: number;\n};\n\n/**\n * Default implementation of the {@link SplitterCalculator} interface.\n * Delegates all resize math to the generic {@link ResizeEngine}.\n */\nexport class DefaultSplitterCalculator implements SplitterCalculator {\n protected readonly panels: Signal<readonly NgnSplitterPanel[]>;\n protected readonly dividers: Signal<readonly EmbeddedViewRef<unknown>[]>;\n protected readonly panelOrder: Signal<readonly string[] | null | undefined>;\n protected readonly layout: Signal<SplitterLayout>;\n protected readonly splitterSize: Signal<number>;\n\n private readonly _engine: ResizeEngine;\n\n constructor(splitter: NgnSplitter) {\n this.panels = splitter.panels;\n this.dividers = splitter.dividers;\n this.panelOrder = splitter.panelOrder;\n this.layout = splitter.layout;\n this.splitterSize = computed(() =>\n this.layout() === 'vertical' ? splitter.elementSize().height : splitter.elementSize().width\n );\n\n // Create the resize engine with panels mapped as ResizableItems\n this._engine = new ResizeEngine({\n items: computed(() => this.orderedPanels() as unknown as readonly ResizableItem[]),\n containerSize: this.splitterSize,\n gapSizes: this.dividerSizes,\n distributionMode: computed(\n () => (splitter.resizeMode?.() ?? 'adjacent') as ResizeDistributionMode\n ),\n containerConstrained: signal(true), // Splitter is always constrained\n lockSizes: computed(() => splitter.lockSizes?.() ?? false),\n });\n }\n\n public readonly orderedPanels = computed(() => {\n const panels = this.panels();\n const order = this.panelOrder();\n return order\n ? [...panels].sort((a, b) => {\n const aIndex = order.indexOf(a['gridArea']());\n const bIndex = order.indexOf(b['gridArea']());\n if (aIndex === -1 && bIndex === -1) return 0;\n if (aIndex === -1) return 1;\n if (bIndex === -1) return -1;\n return aIndex - bIndex;\n })\n : panels;\n });\n\n public readonly gridTemplateSizes = computed(() => this._engine.gridTemplateSizes());\n\n public readonly gridTemplateAreas = computed(() => {\n const panels = this.orderedPanels();\n if (panels.length === 0) return null;\n let result = '';\n panels.forEach((panel, i) => {\n if (i > 0) {\n result +=\n this.layout() === 'horizontal' ? ` ngn-divider-${i - 1} ` : ` \"ngn-divider-${i - 1}\" `;\n }\n result += this.layout() === 'horizontal' ? panel['gridArea']() : `\"${panel['gridArea']()}\"`;\n });\n return this.layout() === 'horizontal' ? `\"${result}\"` : result;\n });\n\n public readonly minSize = computed(() => this._engine.minTotalSize());\n\n public readonly maxSize = computed(() => this._engine.maxTotalSize());\n\n public readonly dragContext = signal<SplitterDragContext | null>(null);\n\n protected readonly dividerSizes = computed(() =>\n this.dividers().map(d => {\n const el = d.rootNodes.find(x => x instanceof HTMLElement);\n return el ? (this.layout() === 'horizontal' ? el.offsetWidth : el.offsetHeight) : 0;\n })\n );\n\n public startDrag(index: number, event: PointerEvent) {\n const panels = this.orderedPanels();\n if (index < 0 || index >= panels.length - 1) return;\n\n const startPosition = this.layout() === 'horizontal' ? event.clientX : event.clientY;\n\n this.dragContext.set({\n dividerIndex: index,\n pointerId: event.pointerId,\n startPosition,\n });\n\n this._engine.startDrag(index, startPosition);\n }\n\n public drag(index: number, event: PointerEvent) {\n const ctx = this.dragContext();\n if (!ctx || ctx.dividerIndex !== index || ctx.pointerId !== event.pointerId) return;\n\n const currentPosition = this.layout() === 'horizontal' ? event.clientX : event.clientY;\n this._engine.drag(index, currentPosition);\n }\n\n public endDrag(index: number, event: PointerEvent, isCancel: boolean) {\n const ctx = this.dragContext();\n if (!ctx || ctx.dividerIndex !== index || ctx.pointerId !== event.pointerId) return;\n\n this._engine.endDrag(index, isCancel);\n this.dragContext.set(null);\n }\n\n public moveDivider(index: number, pxDelta: number) {\n const panels = this.orderedPanels();\n if (index < 0 || index >= panels.length - 1) return;\n\n const leftPanel =\n panels[index] ??\n throwExp('NgnSplitterCalculator', `Left panel is missing for divider at index ${index}`);\n const rightPanel =\n panels[index + 1] ??\n throwExp('NgnSplitterCalculator', `Right panel is missing for divider at index ${index}`);\n\n if (\n !this._engine.isItemSizeCalculated(leftPanel as unknown as ResizableItem) ||\n !this._engine.isItemSizeCalculated(rightPanel as unknown as ResizableItem)\n ) {\n Logger.warn('Cannot move divider, panel sizes are not calculated');\n return;\n }\n\n this._engine.moveDivider(index, pxDelta);\n }\n\n /**\n * Ensures all panels respect their min/max size constraints.\n * Delegates to the underlying {@link ResizeEngine}.\n */\n public ensureMinMaxSizes() {\n this._engine.ensureMinMaxSizes();\n }\n\n /** @internal — used by tests to seed panel sizes into the engine. */\n setPanelSize(panel: NgnSplitterPanel, size: string) {\n this._engine.setItemSize(panel as unknown as ResizableItem, size as any);\n }\n}\n","import type {\r\n SplitterPanelSize,\r\n SplitterPanelSizeLimit,\r\n SplitterPanelSizeLimitUnit,\r\n SplitterPanelSizeUnit,\r\n} from './types';\r\n\r\nexport type ExpandedSplitterPanelSize = {\r\n value: number;\r\n unit: SplitterPanelSizeUnit;\r\n};\r\nexport type ExpandedSplitterPanelSizeLimit = {\r\n value: number;\r\n unit: SplitterPanelSizeLimitUnit;\r\n};\r\n\r\nexport function isSplitterPanelSize(value: unknown): value is SplitterPanelSize {\r\n if (typeof value !== 'string') return false;\r\n const m = value.match(/^(.+)(px|fr)$/);\r\n if (!m || !m[1]) return false;\r\n if (isNaN(parseFloat(m[1]))) return false;\r\n return true;\r\n}\r\n\r\nexport function getSplitterPanelSizeUnit(value: SplitterPanelSize): SplitterPanelSizeUnit {\r\n return value.slice(-2) as SplitterPanelSizeUnit;\r\n}\r\n\r\nexport function getSplitterPanelSizeValue(value: SplitterPanelSize): number {\r\n return parseFloat(value.slice(0, -2));\r\n}\r\n\r\nexport function isSplitterPanelSizeLimit(value: unknown): value is SplitterPanelSize {\r\n if (typeof value !== 'string') return false;\r\n const m = value.match(/^(.+)(px|%)$/);\r\n if (!m || !m[1]) return false;\r\n if (isNaN(parseFloat(m[1]))) return false;\r\n return true;\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitUnit(\r\n value: SplitterPanelSizeLimit\r\n): SplitterPanelSizeLimitUnit {\r\n return value.endsWith('px') ? 'px' : '%';\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitValue(value: SplitterPanelSizeLimit): number {\r\n return value.endsWith('px') ? parseFloat(value.slice(0, -2)) : parseFloat(value.slice(0, -1));\r\n}\r\n\r\nexport function getSplitterPanelSizeLimitInPx(\r\n value: SplitterPanelSizeLimit,\r\n totalSize: number\r\n): number {\r\n const unit = getSplitterPanelSizeLimitUnit(value);\r\n const sizeValue = getSplitterPanelSizeLimitValue(value);\r\n return unit === 'px' ? sizeValue : (sizeValue / 100) * totalSize;\r\n}\r\n\r\nexport function expandSplitterPanelSize(value: SplitterPanelSize): ExpandedSplitterPanelSize {\r\n return {\r\n value: getSplitterPanelSizeValue(value),\r\n unit: getSplitterPanelSizeUnit(value),\r\n };\r\n}\r\n\r\nexport function expandSplitterPanelSizeLimit(\r\n value: SplitterPanelSizeLimit\r\n): ExpandedSplitterPanelSizeLimit {\r\n return {\r\n value: getSplitterPanelSizeLimitValue(value),\r\n unit: getSplitterPanelSizeLimitUnit(value),\r\n };\r\n}\r\n\r\nexport function collapseSplitterPanelSize(size: ExpandedSplitterPanelSize): SplitterPanelSize {\r\n return `${size.value}${size.unit}`;\r\n}\r\n\r\nexport function collapseSplitterPanelSizeLimit(\r\n size: ExpandedSplitterPanelSizeLimit\r\n): SplitterPanelSizeLimit {\r\n return `${size.value}${size.unit}`;\r\n}\r\n","import {\r\n afterRenderEffect,\r\n Component,\r\n computed,\r\n contentChildren,\r\n EmbeddedViewRef,\r\n inject,\r\n input,\r\n model,\r\n type OnDestroy,\r\n output,\r\n runInInjectionContext,\r\n signal,\r\n TemplateRef,\r\n untracked,\r\n viewChild,\r\n ViewContainerRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n elementSizeSignal,\r\n NGN_CONFIG,\r\n NgnTemplate,\r\n templateTypeFn,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { Logger, NgnError } from '@ngneers/controls/utils';\r\nimport { type NgnStateStorage, registerState } from '@ngneers/controls/utils-ng';\r\nimport { splitterControlTemplate } from '@ngneers/controls-themes/templates/splitter';\r\n\r\nimport { NgnSplitterPanel } from './panel/splitter-panel';\r\nimport { DefaultSplitterCalculator, type SplitterCalculatorType } from './splitter-calculator';\r\nimport { isSplitterPanelSize } from './utils';\r\n\r\nimport type { SplitterLayout, SplitterResizeMode, SplitterState, SplitterStateData } from './types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-splitter',\r\n templateUrl: './splitter.html',\r\n imports: [NgnPt, NgnTemplate],\r\n providers: [provideSelf(NgnSplitter)],\r\n host: {\r\n role: 'region',\r\n '[style.grid-template-columns]': `layout() === 'horizontal' ? calculator().gridTemplateSizes() : null`,\r\n '[style.grid-template-rows]': `layout() === 'vertical' ? calculator().gridTemplateSizes() : null`,\r\n '[style.grid-template-areas]': 'calculator().gridTemplateAreas()',\r\n '[style.max-width]': `layout() === 'horizontal' ? calculator().maxSize() : null`,\r\n '[style.max-height]': `layout() === 'vertical' ? calculator().maxSize() : null`,\r\n '[style.min-width]': `layout() === 'horizontal' ? calculator().minSize() : null`,\r\n '[style.min-height]': `layout() === 'vertical' ? calculator().minSize() : null`,\r\n },\r\n})\r\nexport class NgnSplitter extends NgnBase<'splitter'> implements OnDestroy {\r\n private readonly _viewContainer = inject(ViewContainerRef);\r\n private readonly _config = inject(NGN_CONFIG);\r\n protected readonly theme = this.injectThemeTemplate(splitterControlTemplate, {\r\n root: true,\r\n dragging: () => this.isDragging(),\r\n horizontal: () => this.layout() === 'horizontal',\r\n vertical: () => this.layout() === 'vertical',\r\n });\r\n protected readonly translations = inject(I18n).translations;\r\n\r\n /**\r\n * The layout of the splitter.\r\n */\r\n public readonly layout = model.required<SplitterLayout>();\r\n /**\r\n * A array of panel names that defines the order of panels.\r\n * If nullish, the order is determined by the order the panels are defined in the template.\r\n */\r\n public readonly panelOrder = model<string[] | null>();\r\n /**\r\n * The storage to use for saving the splitter state.\r\n * @default `session`\r\n */\r\n public readonly stateStorage = input<NgnStateStorage>(\r\n this._config.defaults.splitter.stateStorage\r\n );\r\n /**\r\n * The key to use for saving the splitter state.\r\n * If nullish, the state will not be saved.\r\n */\r\n public readonly stateKey = input<string | null>();\r\n /**\r\n * The type of data to save in the splitter state.\r\n * @default `['layout', 'panelOrder', 'panelSizes']`\r\n */\r\n public readonly stateData = input<readonly SplitterStateData[]>([\r\n 'layout',\r\n 'panelOrder',\r\n 'panelSizes',\r\n ]);\r\n /**\r\n * The type of calculator to use for the splitter.\r\n * @default `DefaultSplitterCalculator`\r\n */\r\n public readonly calculatorType = input<SplitterCalculatorType>(DefaultSplitterCalculator);\r\n /**\r\n * The resize distribution mode for the splitter.\r\n * - `'adjacent'` (default): Only the panels adjacent to the divider are resized.\r\n * - `'proportional'`: The deficit is distributed proportionally across all panels on the other side.\r\n */\r\n public readonly resizeMode = input<SplitterResizeMode>('adjacent');\r\n /**\r\n * Whether to lock affected panels to fixed `px` values after a resize completes.\r\n * When `true`, panels whose size changed are converted from their original unit to `px`.\r\n * When `false`, panels keep their original units (`fr`, `px`).\r\n * @default false\r\n */\r\n public readonly lockSizes = input<boolean>(false);\r\n /**\r\n * The step size for moving the dividers using the keyboard.\r\n * This can be a pixel value (e.g., '5px') or a percentage value (e.g., '5%').\r\n * If a percentage is used, it will be calculated based on the size of the splitter element.\r\n * @default '5px'\r\n */\r\n public readonly step = input<`${number}${'%' | 'px'}`>('5px');\r\n\r\n /**\r\n * Event emitted when the splitter state is being saved.\r\n * This can be used to modify the state before it is saved.\r\n */\r\n public readonly stateSaving = output<SplitterState>();\r\n /**\r\n * Event emitted when the splitter state is loaded.\r\n * This can be used to modify the state before it is applied or to perform actions based on the loaded state.\r\n */\r\n public readonly stateLoading = output<SplitterState>();\r\n\r\n protected readonly dividerTemplateType = templateTypeFn<never, { index: number }>();\r\n private readonly _dividerTemplate =\r\n viewChild.required<TemplateRef<typeof this.dividerTemplateType>>('defaultDividerTemplate');\r\n\r\n /**\r\n * The current dividers in the splitter.\r\n */\r\n public readonly dividers = signal<EmbeddedViewRef<typeof this.dividerTemplateType>[]>([]);\r\n /**\r\n * The current panels in the splitter.\r\n */\r\n public readonly panels = contentChildren(NgnSplitterPanel);\r\n /**\r\n * The current size of the splitter element.\r\n */\r\n public readonly elementSize = elementSizeSignal(this.element);\r\n\r\n /**\r\n * A value indicating whether the splitter is currently being dragged.\r\n */\r\n public readonly isDragging = computed(() => this.calculator().dragContext() !== null);\r\n\r\n protected readonly calculator = computed(() => {\r\n const calculatorType = this.calculatorType();\r\n return untracked(() => runInInjectionContext(this.injector, () => new calculatorType(this)));\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n afterRenderEffect(() => {\r\n const panels = this.panels();\r\n this.updateDividers(panels);\r\n });\r\n\r\n registerState({\r\n storage: () => this.stateStorage(),\r\n key: () => this.stateKey(),\r\n valueFn: this.computeState.bind(this),\r\n onLoad: this.onStateLoad.bind(this),\r\n debounce: 100,\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n // Clean up dividers\r\n this.dividers().forEach(divider => divider.destroy());\r\n this.dividers.set([]);\r\n }\r\n\r\n protected onHandlePointerDown(index: number, event: PointerEvent) {\r\n const target = event.target;\r\n if (!(target instanceof HTMLElement)) {\r\n throw new Error('Event target is not an HTMLElement');\r\n }\r\n // Make sure the element is stable before capturing the pointer\r\n requestAnimationFrame(() => {\r\n try {\r\n target.setPointerCapture(event.pointerId);\r\n } catch {\r\n // Ignore errors if the element is not capable of capturing the pointer\r\n }\r\n });\r\n\r\n this.calculator().startDrag(index, event);\r\n }\r\n\r\n protected onHandlePointerMove(index: number, event: PointerEvent) {\r\n this.calculator().drag(index, event);\r\n }\r\n\r\n protected onHandlePointerUp(index: number, event: PointerEvent) {\r\n this.calculator().endDrag(index, event, false);\r\n }\r\n\r\n protected onHandlePointerCancel(index: number, event: PointerEvent) {\r\n this.calculator().endDrag(index, event, true);\r\n }\r\n\r\n protected onHandleKeyDown(index: number, event: KeyboardEvent) {\r\n if (\r\n (event.key === 'ArrowLeft' && this.layout() === 'horizontal') ||\r\n (event.key === 'ArrowUp' && this.layout() === 'vertical')\r\n ) {\r\n this.calculator().moveDivider(index, -this.getStepInPx());\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (\r\n (event.key === 'ArrowRight' && this.layout() === 'horizontal') ||\r\n (event.key === 'ArrowDown' && this.layout() === 'vertical')\r\n ) {\r\n this.calculator().moveDivider(index, this.getStepInPx());\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (event.key === 'Home') {\r\n this.calculator().moveDivider(index, Number.NEGATIVE_INFINITY);\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n } else if (event.key === 'End') {\r\n this.calculator().moveDivider(index, Number.POSITIVE_INFINITY);\r\n event.preventDefault(); // Prevent default scrolling behavior\r\n }\r\n }\r\n\r\n private updateDividers(panels: readonly NgnSplitterPanel[]) {\r\n this.dividers.update(divider => {\r\n if (divider.length === panels.length - 1) {\r\n return divider; // No need to update if the number of dividers matches the number of panels\r\n } else if (divider.length < panels.length - 1) {\r\n // Add missing dividers\r\n const newDividers = [...divider];\r\n for (let i = divider.length; i < panels.length - 1; i++) {\r\n newDividers.push(this.createDivider(i));\r\n }\r\n return newDividers;\r\n } else {\r\n // More dividers than needed, remove the excess\r\n divider.slice(panels.length - 1).forEach(divider => divider.destroy());\r\n return divider.slice(0, panels.length - 1);\r\n }\r\n });\r\n\r\n // Move dividers to the correct positions (skip first panel — no divider before it)\r\n for (let i = 1; i < panels.length; i++) {\r\n const panel = panels[i]!;\r\n const divider = this.dividers()[i - 1];\r\n if (!divider) {\r\n throw new NgnError('NgnSplitter', `Divider is missing for panel at index ${i}`);\r\n }\r\n this.moveDividerBefore(panel, divider);\r\n }\r\n }\r\n\r\n private createDivider(index: number) {\r\n const viewRef = this._viewContainer.createEmbeddedView(this._dividerTemplate(), { index });\r\n viewRef.detectChanges();\r\n return viewRef;\r\n }\r\n\r\n private moveDividerBefore(panel: NgnSplitterPanel, divider: EmbeddedViewRef<unknown>) {\r\n const panelElement = panel.element.nativeElement;\r\n divider.rootNodes.forEach(node => {\r\n if (node instanceof HTMLElement) {\r\n panelElement.parentElement?.insertBefore(node, panelElement);\r\n }\r\n });\r\n }\r\n\r\n private computeState(previousState: SplitterState | null) {\r\n const data = this.stateData();\r\n const state: SplitterState = {\r\n layout: data.includes('layout') ? this.layout() : undefined,\r\n panelOrder: data.includes('panelOrder') ? this.panelOrder() : undefined,\r\n panelSizes: data.includes('panelSizes')\r\n ? this.panels().reduce(\r\n (acc, panel, index) => {\r\n acc[panel.name() || `ngn-panel-${index}`] = panel.size();\r\n return acc;\r\n },\r\n { ...previousState?.panelSizes }\r\n )\r\n : undefined,\r\n };\r\n\r\n this.stateSaving.emit(state);\r\n\r\n return state;\r\n }\r\n\r\n private onStateLoad(state: SplitterState | null) {\r\n if (state) {\r\n this.ensureValidState(state);\r\n this.stateLoading.emit(state);\r\n this.applyFromState(state);\r\n }\r\n return state;\r\n }\r\n\r\n private ensureValidState(state: SplitterState): void {\r\n if (state.layout && state.layout !== 'horizontal' && state.layout !== 'vertical') {\r\n Logger.warn(`Invalid layout in saved splitter state.`, { state });\r\n delete state.layout;\r\n }\r\n\r\n if (\r\n state.panelOrder &&\r\n (!Array.isArray(state.panelOrder) || state.panelOrder.some(x => typeof x !== 'string'))\r\n ) {\r\n Logger.warn(`Invalid panelOrder in saved splitter state.`, { state });\r\n delete state.panelOrder;\r\n }\r\n\r\n if (\r\n state.panelSizes &&\r\n (typeof state.panelSizes !== 'object' ||\r\n state.panelSizes === null ||\r\n Object.values(state.panelSizes).some(x => !isSplitterPanelSize(x)))\r\n ) {\r\n Logger.warn(`Invalid panelSizes in saved splitter state.`, { state });\r\n delete state.panelSizes;\r\n }\r\n }\r\n\r\n private applyFromState(state: SplitterState) {\r\n if (state.layout && this.stateData().includes('layout')) {\r\n this.layout.set(state.layout);\r\n }\r\n if (state.panelOrder && this.stateData().includes('panelOrder')) {\r\n this.panelOrder.set(state.panelOrder);\r\n }\r\n if (state.panelSizes && this.stateData().includes('panelSizes')) {\r\n const panels = this.panels();\r\n for (let i = 0; i < panels.length; i++) {\r\n const panelName = panels[i]?.name() || `ngn-panel-${i}`;\r\n if (panelName in state.panelSizes) {\r\n const panelSize = state.panelSizes[panelName];\r\n if (!panelSize) {\r\n continue;\r\n }\r\n panels[i]?.size.set(panelSize);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private getStepInPx(): number {\r\n const step = this.step();\r\n if (step.endsWith('px')) {\r\n return parseFloat(step.slice(0, -2));\r\n } else if (step.endsWith('%')) {\r\n const size =\r\n this.layout() === 'horizontal' ? this.elementSize().width : this.elementSize().height;\r\n return (parseFloat(step.slice(0, -1)) / 100) * size;\r\n } else {\r\n Logger.warn(`Invalid step value: ${step}.`);\r\n return 10; // Default step in pixels\r\n }\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<ng-template #defaultDividerTemplate [ngnTemplate]=\"dividerTemplateType\" let-index=\"index\">\r\n <div\r\n [style.grid-area]=\"`ngn-divider-${index}`\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{\r\n divider: true,\r\n 'divider-dragging': calculator().dragContext()?.dividerIndex === index,\r\n }\"\r\n >\r\n <button\r\n role=\"separator\"\r\n [aria-orientation]=\"layout()\"\r\n [aria-label]=\"translations['splitter_handleLabel']()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'divider-handle'\"\r\n (pointerdown)=\"onHandlePointerDown(index, $event)\"\r\n (pointermove)=\"onHandlePointerMove(index, $event)\"\r\n (pointerup)=\"onHandlePointerUp(index, $event)\"\r\n (pointercancel)=\"onHandlePointerCancel(index, $event)\"\r\n (keydown)=\"onHandleKeyDown(index, $event)\"\r\n ></button>\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { NgnSplitterPanel } from './panel/splitter-panel';\r\nimport { NgnSplitter } from './splitter';\r\n\r\n// This module is just for grouping the Splitter and SplitterPanel components for convenience.\r\n// The components are standalone and can be used without this module.\r\n\r\n@NgModule({\r\n imports: [NgnSplitter, NgnSplitterPanel],\r\n exports: [NgnSplitter, NgnSplitterPanel],\r\n})\r\nexport class NgnSplitterModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -23,10 +23,10 @@ class NgnSwitch extends ValueControlBase {
23
23
  constructor() {
24
24
  super();
25
25
  }
26
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnSwitch, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.0", type: NgnSwitch, isStandalone: true, selector: "ngn-switch", providers: [provideSelf(NgnSwitch)], usesInheritance: true, ngImport: i0, template: "<div [ptInt]=\"this\" [ptClass]=\"{ track: true, 'track-checked': !!value() }\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'thumb'\"></div>\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnSwitch, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.2", type: NgnSwitch, isStandalone: true, selector: "ngn-switch", providers: [provideSelf(NgnSwitch)], usesInheritance: true, ngImport: i0, template: "<div [ptInt]=\"this\" [ptClass]=\"{ track: true, 'track-checked': !!value() }\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'thumb'\"></div>\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnSwitch, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnSwitch, decorators: [{
30
30
  type: Component,
31
31
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-switch', imports: [NgnPt], providers: [provideSelf(NgnSwitch)], template: "<div [ptInt]=\"this\" [ptClass]=\"{ track: true, 'track-checked': !!value() }\">\r\n <div [ptInt]=\"this\" [ptClass]=\"'thumb'\"></div>\r\n</div>\r\n<input\r\n type=\"checkbox\"\r\n [checked]=\"value()\"\r\n (change)=\"changed($event)\"\r\n (click)=\"onClick($event)\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input'\"\r\n [attr.disabled]=\"disabled() ? '' : undefined\"\r\n [ariaReadOnly]=\"readonly() ? '' : undefined\"\r\n [ariaInvalid]=\"invalid() ? 'true' : undefined\"\r\n [ariaLabelledByElements]=\"labelledBy()\"\r\n (blur)=\"touched.set(true)\"\r\n [id]=\"inputId()\"\r\n/>\r\n" }]
32
32
  }], ctorParameters: () => [] });