@magmonium/one 0.4.41 → 0.4.43

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 (83) hide show
  1. package/assets/fields/app_color.json +5 -0
  2. package/assets/fields/logo_glyph_paste.json +7 -0
  3. package/assets/fields/logo_glyph_upload.json +12 -0
  4. package/assets/forms/logo_glyph_input.json +13 -0
  5. package/assets/i18n/ar.json +8 -0
  6. package/assets/i18n/de.json +8 -0
  7. package/assets/i18n/en.json +8 -0
  8. package/assets/i18n/es.json +8 -0
  9. package/assets/i18n/fr.json +8 -0
  10. package/assets/i18n/hi.json +8 -0
  11. package/assets/i18n/it.json +8 -0
  12. package/assets/i18n/ja.json +8 -0
  13. package/assets/i18n/ko.json +8 -0
  14. package/assets/i18n/nl.json +8 -0
  15. package/assets/i18n/pl.json +8 -0
  16. package/assets/i18n/pt.json +8 -0
  17. package/assets/i18n/ru.json +8 -0
  18. package/assets/i18n/tr.json +8 -0
  19. package/assets/i18n/zh.json +8 -0
  20. package/assets/index.json +1 -1
  21. package/fesm2022/{magmonium-one-attribute-value-DCTXt4Sr.mjs → magmonium-one-attribute-value-C1lqou2L.mjs} +3 -3
  22. package/fesm2022/{magmonium-one-attribute-value-DCTXt4Sr.mjs.map → magmonium-one-attribute-value-C1lqou2L.mjs.map} +1 -1
  23. package/fesm2022/{magmonium-one-base-checkbox-BNQAkyYU.mjs → magmonium-one-base-checkbox-CIxAiA4Q.mjs} +2 -2
  24. package/fesm2022/{magmonium-one-base-checkbox-BNQAkyYU.mjs.map → magmonium-one-base-checkbox-CIxAiA4Q.mjs.map} +1 -1
  25. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs → magmonium-one-base-dropdown-XpTWe4Ii.mjs} +10 -10
  26. package/fesm2022/{magmonium-one-base-dropdown-DU4B4w7c.mjs.map → magmonium-one-base-dropdown-XpTWe4Ii.mjs.map} +1 -1
  27. package/fesm2022/{magmonium-one-base-input-BTxhUtYO.mjs → magmonium-one-base-input-C1Ek0Ezm.mjs} +2 -2
  28. package/fesm2022/{magmonium-one-base-input-BTxhUtYO.mjs.map → magmonium-one-base-input-C1Ek0Ezm.mjs.map} +1 -1
  29. package/fesm2022/{magmonium-one-base-text-BCSqKmVs.mjs → magmonium-one-base-text-Di2V2ojp.mjs} +2 -2
  30. package/fesm2022/{magmonium-one-base-text-BCSqKmVs.mjs.map → magmonium-one-base-text-Di2V2ojp.mjs.map} +1 -1
  31. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs → magmonium-one-button-DZ4wCJgb.mjs} +11 -9
  32. package/fesm2022/{magmonium-one-button-BWB3ZKIj.mjs.map → magmonium-one-button-DZ4wCJgb.mjs.map} +1 -1
  33. package/fesm2022/{magmonium-one-checkbox-D5-5WhJ-.mjs → magmonium-one-checkbox-R-hPZrCa.mjs} +5 -5
  34. package/fesm2022/{magmonium-one-checkbox-D5-5WhJ-.mjs.map → magmonium-one-checkbox-R-hPZrCa.mjs.map} +1 -1
  35. package/fesm2022/{magmonium-one-color-utl-D86GGpz5.mjs → magmonium-one-color-utl-DI5p24iQ.mjs} +209 -6
  36. package/fesm2022/magmonium-one-color-utl-DI5p24iQ.mjs.map +1 -0
  37. package/fesm2022/{magmonium-one-directives-DePukAj8.mjs → magmonium-one-directives-B93p5bAL.mjs} +4 -4
  38. package/fesm2022/{magmonium-one-directives-DePukAj8.mjs.map → magmonium-one-directives-B93p5bAL.mjs.map} +1 -1
  39. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs → magmonium-one-group-B7YeUd1u.mjs} +7 -7
  40. package/fesm2022/{magmonium-one-group-m41SX_fL.mjs.map → magmonium-one-group-B7YeUd1u.mjs.map} +1 -1
  41. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs → magmonium-one-header-DUiBhPUP.mjs} +6 -5
  42. package/fesm2022/{magmonium-one-header-D8CB9CBJ.mjs.map → magmonium-one-header-DUiBhPUP.mjs.map} +1 -1
  43. package/fesm2022/{magmonium-one-icon-BTPHGpEN.mjs → magmonium-one-icon-C3jwzbb2.mjs} +80 -9
  44. package/fesm2022/magmonium-one-icon-C3jwzbb2.mjs.map +1 -0
  45. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs → magmonium-one-image-editor-BRTk8i4O.mjs} +4 -4
  46. package/fesm2022/{magmonium-one-image-editor-Dn0ACfH0.mjs.map → magmonium-one-image-editor-BRTk8i4O.mjs.map} +1 -1
  47. package/fesm2022/{magmonium-one-label-DjvJthAB.mjs → magmonium-one-label-D_rU82nD.mjs} +2 -2
  48. package/fesm2022/{magmonium-one-label-DjvJthAB.mjs.map → magmonium-one-label-D_rU82nD.mjs.map} +1 -1
  49. package/fesm2022/{magmonium-one-m-ref-C8c4Vf1G.mjs → magmonium-one-m-ref-CEms7B6-.mjs} +2 -2
  50. package/fesm2022/{magmonium-one-m-ref-C8c4Vf1G.mjs.map → magmonium-one-m-ref-CEms7B6-.mjs.map} +1 -1
  51. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs → magmonium-one-menu-cO34OcJc.mjs} +8 -7
  52. package/fesm2022/{magmonium-one-menu-EIfPlZ4E.mjs.map → magmonium-one-menu-cO34OcJc.mjs.map} +1 -1
  53. package/fesm2022/{magmonium-one-multi-range-o57TiVJU.mjs → magmonium-one-multi-range-Bq3_3NHg.mjs} +3 -3
  54. package/fesm2022/{magmonium-one-multi-range-o57TiVJU.mjs.map → magmonium-one-multi-range-Bq3_3NHg.mjs.map} +1 -1
  55. package/fesm2022/{magmonium-one-options-asset-EVsv0DL7.mjs → magmonium-one-options-asset-BMd7W0Mk.mjs} +2 -2
  56. package/fesm2022/{magmonium-one-options-asset-EVsv0DL7.mjs.map → magmonium-one-options-asset-BMd7W0Mk.mjs.map} +1 -1
  57. package/fesm2022/{magmonium-one-otp-CE4L1RcG.mjs → magmonium-one-otp-V2tFztLx.mjs} +5 -5
  58. package/fesm2022/{magmonium-one-otp-CE4L1RcG.mjs.map → magmonium-one-otp-V2tFztLx.mjs.map} +1 -1
  59. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs → magmonium-one-password-IdllPMUw.mjs} +6 -6
  60. package/fesm2022/{magmonium-one-password-BjqYmT1s.mjs.map → magmonium-one-password-IdllPMUw.mjs.map} +1 -1
  61. package/fesm2022/{magmonium-one-radio-C2wOB_Nb.mjs → magmonium-one-radio-BAL3-3j5.mjs} +3 -3
  62. package/fesm2022/{magmonium-one-radio-C2wOB_Nb.mjs.map → magmonium-one-radio-BAL3-3j5.mjs.map} +1 -1
  63. package/fesm2022/{magmonium-one-range-rgDe4O8u.mjs → magmonium-one-range-Cf7yUnhN.mjs} +4 -4
  64. package/fesm2022/{magmonium-one-range-rgDe4O8u.mjs.map → magmonium-one-range-Cf7yUnhN.mjs.map} +1 -1
  65. package/fesm2022/{magmonium-one-selector-DeRIUUBA.mjs → magmonium-one-selector-DAEI_0JX.mjs} +4 -4
  66. package/fesm2022/{magmonium-one-selector-DeRIUUBA.mjs.map → magmonium-one-selector-DAEI_0JX.mjs.map} +1 -1
  67. package/fesm2022/{magmonium-one-size-converter-C5fG_dgw.mjs → magmonium-one-size-converter-BOBD8nHy.mjs} +8 -1
  68. package/fesm2022/magmonium-one-size-converter-BOBD8nHy.mjs.map +1 -0
  69. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs → magmonium-one-text-BnTkYLJe.mjs} +8 -7
  70. package/fesm2022/{magmonium-one-text-BL-1lWST.mjs.map → magmonium-one-text-BnTkYLJe.mjs.map} +1 -1
  71. package/fesm2022/{magmonium-one-text-output-Ci93Hi9Y.mjs → magmonium-one-text-output-BZU61QIF.mjs} +4 -4
  72. package/fesm2022/{magmonium-one-text-output-Ci93Hi9Y.mjs.map → magmonium-one-text-output-BZU61QIF.mjs.map} +1 -1
  73. package/fesm2022/magmonium-one-theme-DYvNIWmo.mjs +1 -0
  74. package/fesm2022/{magmonium-one-toggle-BTK2lzqA.mjs → magmonium-one-toggle-V_YnZXx5.mjs} +3 -3
  75. package/fesm2022/{magmonium-one-toggle-BTK2lzqA.mjs.map → magmonium-one-toggle-V_YnZXx5.mjs.map} +1 -1
  76. package/fesm2022/magmonium-one.mjs +788 -185
  77. package/fesm2022/magmonium-one.mjs.map +1 -1
  78. package/package.json +1 -1
  79. package/types/magmonium-one.d.ts +355 -53
  80. package/fesm2022/magmonium-one-color-utl-D86GGpz5.mjs.map +0 -1
  81. package/fesm2022/magmonium-one-icon-BTPHGpEN.mjs.map +0 -1
  82. package/fesm2022/magmonium-one-size-converter-C5fG_dgw.mjs.map +0 -1
  83. package/fesm2022/magmonium-one-theme-CT4cWpe7.mjs +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"magmonium-one-directives-DePukAj8.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/directives/draggable/lib/function/position.ts","../../../../libs/one/src/lib/shared/directives/draggable/lib/function/cursor.ts","../../../../libs/one/src/lib/shared/directives/draggable/draggable.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list-item.ts","../../../../libs/one/src/lib/shared/directives/autosize/autosize.ts","../../../../libs/one/src/lib/shared/directives/file-upload/file-upload.ts","../../../../libs/one/src/lib/shared/directives/tooltip/tooltip.ts","../../../../libs/one/src/lib/shared/directives/position/position.ts","../../../../libs/one/src/lib/shared/ui/table/lib/directives/highlight.ts","../../../../libs/one/src/lib/shared/functions/string/color.ts","../../../../libs/one/src/lib/shared/directives/color/m-hero-color.directive.ts","../../../../libs/one/src/lib/shared/directives/spacing/spacing.ts"],"sourcesContent":["import { Draggable } from '../../type';\nimport { Position } from '../../../../type/screen/position';\n\nfunction isWithinBoundary(\n value: number,\n draggable: Draggable,\n axis: 'x' | 'y'\n): boolean {\n const maxVal =\n draggable.max?.[axis] ??\n (axis === 'x' ? window.innerWidth : window.innerHeight);\n const minVal = draggable.min?.[axis] ?? 0;\n return value <= maxVal && value >= minVal;\n}\n\nexport function getNewPosition(\n draggable: Draggable,\n event: MouseEvent | TouchEvent,\n delta: Position\n): Position {\n let { x, y } = draggable.position;\n\n const isTouch = 'touches' in event;\n const touch = isTouch ? event.touches[0] || event.changedTouches[0] : null;\n const screenX = touch ? touch.screenX : (event as MouseEvent).screenX;\n const screenY = touch ? touch.screenY : (event as MouseEvent).screenY;\n\n if (draggable.direction !== 'y') {\n const dx = screenX - (delta.x ?? 0);\n if (isWithinBoundary(dx, draggable, 'x')) {\n x = dx;\n }\n }\n\n if (draggable.direction !== 'x') {\n const dy = screenY - (delta.y ?? 0);\n if (isWithinBoundary(dy, draggable, 'y')) {\n y = dy;\n }\n }\n\n return { x, y };\n}\n","import { Draggable } from '../../type';\n\nexport function getCursor({ direction }: Draggable) {\n switch (direction) {\n case 'x':\n return 'ew-resize';\n case 'y':\n return 'ns-resize';\n default:\n return 'move';\n }\n}\n","import { computed, Directive, HostListener, Input, model, input, output } from '@angular/core';\nimport { Draggable, DraggableState } from './type';\nimport { getCursor, getNewPosition } from './lib';\n// The type's own file rather than the shared barrel: that barrel reaches every\n// UI slice, so a directive importing it is a cycle back into the components\n// that declare this directive — and a half-initialised cycle leaves\n// `DraggableDirective` undefined in whichever of them is evaluated first.\nimport { Position } from '../../type/screen/position';\n\n/** Buttons/links inside a handle must keep their click — not start a drag. */\nconst INTERACTIVE_SELECTOR =\n 'button, a, input, textarea, select, [contenteditable=\"true\"]';\n\nconst shouldIgnorePointer = (target: HTMLElement): boolean =>\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable ||\n !!target.closest(INTERACTIVE_SELECTOR);\n\n@Directive({\n selector: '[mDraggable]',\n host: {\n '[class.draggable]': \"mDraggable()?.direction !== 'none'\",\n '[class.dragging]': 'this.state.dragging',\n '[style.position]':\n \"mDraggable()?.direction !== 'none' ? (mDraggable()?.positionType ?? 'absolute') : null\",\n '[style.top.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'x' ? mDraggable()?.position?.y : null\",\n '[style.left.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'y' ? mDraggable()?.position?.x : null\",\n '[style.cursor]': \"mDraggable()?.direction !== 'none' ? cursor() : null\",\n },\n})\nexport class DraggableDirective {\n mDraggable = model.required<Draggable>();\n handleSelector = input<string>();\n\n /**\n * The bounds, read at drag time and never written into `mDraggable`.\n *\n * They used to be merged in by a setter, which lost them the moment a parent\n * replaced its Draggable — a `linkedSignal` recomputed from the value the\n * drag itself writes back, which is what both Ranges do. Angular memoizes an\n * inline object literal in a template, so `[min]=\"{ x: 0, y: 3 }\"` is the\n * same reference on the next pass and its setter never fires again to put\n * the bound back. The config then had no `max`, `isWithinBoundary` fell\n * through to `window.innerWidth`, and the thumb slid off the track.\n *\n * A bound is what the caller says the drag may not pass, not state the drag\n * mutates — so it stays an input and the two never share an object.\n */\n readonly min = input<Position | undefined>(undefined);\n readonly max = input<Position | undefined>(undefined);\n\n readonly dragStart = output<void>();\n readonly dragEnd = output<void>();\n\n protected readonly cursor = computed(() => getCursor(this.mDraggable()));\n protected state = <DraggableState>{\n dragging: false,\n delta: { x: 0, y: 0 },\n };\n\n @Input() set pos(position: Position) {\n this.mDraggable.update((config) => ({\n ...config,\n position,\n }));\n }\n\n /**\n * The config a move is clamped against: the bounds on the tag win, and a\n * caller that carries them inside its own Draggable keeps working.\n */\n private readonly bounded = (config: Draggable): Draggable => ({\n ...config,\n min: this.min() ?? config.min,\n max: this.max() ?? config.max,\n });\n\n @HostListener('mousedown', ['$event'])\n protected handleMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = true;\n this.dragStart.emit();\n const { screenX, screenY } = event;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:mousemove', ['$event'])\n protected handleMouseMove(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:mouseup', ['$event'])\n protected handleMouseUp(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n\n @HostListener('touchstart', ['$event'])\n protected handleTouchStart(event: TouchEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n this.state.dragging = true;\n this.dragStart.emit();\n const touch = event.touches[0];\n const { screenX, screenY } = touch;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:touchmove', ['$event'])\n protected handleTouchMove(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n if (event.cancelable) {\n event.preventDefault();\n }\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:touchend', ['$event'])\n protected handleTouchEnd(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\n\nexport interface DragListReorder {\n from: number;\n to: number;\n}\n\n/**\n * Container side of HTML5 drag-to-reorder. Put on the element wrapping the\n * items, pair with [mDragListItem] on each item. Emits (reordered) with\n * {from, to} — the consumer owns the array move. Auto-scrolls any scrollable\n * ancestor (and the viewport) while the pointer is within 150px of its edge.\n * With removeOnDragOut, dropping an item outside the container emits\n * (removed) with its index — the consumer owns the actual removal.\n */\n@Directive({\n selector: '[mDragList]',\n host: {\n '(dragover)': 'onContainerDragOver($event)',\n },\n})\nexport class DragListDirective implements OnDestroy {\n readonly removeOnDragOut = input(false, { transform: booleanAttribute });\n\n readonly reordered = output<DragListReorder>();\n readonly removed = output<number>();\n\n readonly draggedIndex = signal<number | null>(null);\n readonly dragOverIndex = signal<number | null>(null);\n\n readonly #elementRef = inject(ElementRef);\n\n #scrollAnimationFrameId: number | null = null;\n #dragPointerX = 0;\n #dragPointerY = 0;\n #scrollContainers: HTMLElement[] = [];\n\n readonly startDrag = (index: number, clientX: number, clientY: number): void => {\n this.draggedIndex.set(index);\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n this.#startScrollLoop();\n };\n\n readonly trackPointer = (clientX: number, clientY: number): void => {\n // Firefox reports client coords 0 on drag events — ignore those samples.\n if (clientX !== 0 || clientY !== 0) {\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n }\n };\n\n readonly endDrag = (): void => {\n this.draggedIndex.set(null);\n this.dragOverIndex.set(null);\n this.#stopScrollLoop();\n };\n\n // Called on dragend — fires only when no drop() consumed the drag (drop on\n // an item clears draggedIndex first). Pointer outside the container at\n // release means the item was dragged out.\n readonly dragEnded = (event: DragEvent): void => {\n const from = this.draggedIndex();\n if (from !== null && this.removeOnDragOut() && this.#isPointerOutside(event)) {\n this.endDrag();\n this.removed.emit(from);\n return;\n }\n this.endDrag();\n };\n\n readonly #isPointerOutside = (event: DragEvent): boolean => {\n const x = event.clientX || this.#dragPointerX;\n const y = event.clientY || this.#dragPointerY;\n const rect = (this.#elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n return x < rect.left || x > rect.right || y < rect.top || y > rect.bottom;\n };\n\n readonly drop = (index: number): void => {\n const from = this.draggedIndex();\n this.endDrag();\n if (from !== null && from !== index) {\n this.reordered.emit({ from, to: index });\n }\n };\n\n protected readonly onContainerDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #getScrollContainers = (): HTMLElement[] => {\n const list: HTMLElement[] = [];\n let el: HTMLElement | null = this.#elementRef.nativeElement;\n while (el && el !== document.body) {\n const style = window.getComputedStyle(el);\n const overflowY = style.overflowY || style.overflow;\n const isScrollable =\n overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'hidden';\n if (isScrollable && el.scrollHeight > el.clientHeight) {\n list.push(el);\n }\n el = el.parentElement;\n }\n list.push(document.documentElement);\n return list;\n };\n\n readonly #startScrollLoop = (): void => {\n this.#stopScrollLoop();\n this.#scrollContainers = this.#getScrollContainers();\n\n window.addEventListener('dragover', this.#onGlobalDragOver, true);\n window.addEventListener('drag', this.#onGlobalDrag, true);\n\n const loop = (): void => {\n if (this.draggedIndex() === null) {\n this.#stopScrollLoop();\n return;\n }\n\n for (const container of this.#scrollContainers) {\n const isRoot = container === document.documentElement;\n const rect = container.getBoundingClientRect();\n const topThreshold = isRoot ? 150 : rect.top + 150;\n const bottomThreshold = isRoot\n ? window.innerHeight - 150\n : rect.bottom - 150;\n\n if (this.#dragPointerY < topThreshold) {\n const diff = topThreshold - this.#dragPointerY;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, -speed);\n } else {\n container.scrollTop -= speed;\n }\n } else if (this.#dragPointerY > bottomThreshold) {\n const diff = this.#dragPointerY - bottomThreshold;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, speed);\n } else {\n container.scrollTop += speed;\n }\n }\n }\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n readonly #stopScrollLoop = (): void => {\n window.removeEventListener('dragover', this.#onGlobalDragOver, true);\n window.removeEventListener('drag', this.#onGlobalDrag, true);\n if (this.#scrollAnimationFrameId !== null) {\n cancelAnimationFrame(this.#scrollAnimationFrameId);\n this.#scrollAnimationFrameId = null;\n }\n this.#scrollContainers = [];\n };\n\n // Global listeners: dragover fires reliably everywhere once preventDefault'd,\n // drag covers browsers that skip dragover outside drop targets.\n readonly #onGlobalDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #onGlobalDrag = (event: DragEvent): void => {\n this.trackPointer(event.clientX, event.clientY);\n };\n\n ngOnDestroy(): void {\n this.#stopScrollLoop();\n }\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { DragListDirective } from './drag-list';\n\n/**\n * Item side of HTML5 drag-to-reorder. Put on each repeated element inside an\n * [mDragList] container, bound to the item's index: [mDragListItem]=\"i\".\n * Adds `is-dragging` on the dragged item and `is-drag-over` on the current\n * drop target — style them in the consumer.\n */\n@Directive({\n selector: '[mDragListItem]',\n host: {\n draggable: 'true',\n '[class.is-dragging]': 'isDragging()',\n '[class.is-drag-over]': 'isDragOver()',\n '(dragstart)': 'onDragStart($event)',\n '(dragover)': 'onDragOver($event)',\n '(dragenter)': 'onDragEnter()',\n '(dragleave)': 'onDragLeave()',\n '(dragend)': 'onDragEnd($event)',\n '(drop)': 'onDrop($event)',\n '(drag)': 'onDrag($event)',\n },\n})\nexport class DragListItemDirective {\n readonly mDragListItem = input.required<number>();\n\n readonly #list = inject(DragListDirective);\n readonly #elementRef = inject(ElementRef);\n\n protected readonly isDragging = computed(\n () => this.#list.draggedIndex() === this.mDragListItem()\n );\n protected readonly isDragOver = computed(\n () => this.#list.dragOverIndex() === this.mDragListItem()\n );\n\n protected readonly onDragStart = (event: DragEvent): void => {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', this.mDragListItem().toString());\n this.#setDragGhost(event);\n }\n this.#list.startDrag(this.mDragListItem(), event.clientX, event.clientY);\n };\n\n // Replaces the browser's flat snapshot ghost with a lifted, tilted clone so\n // the item visibly \"picks up\". Clone keeps _ngcontent attributes, so the\n // consumer's scoped styles still apply to it.\n readonly #setDragGhost = (event: DragEvent): void => {\n const host = this.#elementRef.nativeElement as HTMLElement;\n const rect = host.getBoundingClientRect();\n const padding = 24;\n\n const ghost = host.cloneNode(true) as HTMLElement;\n ghost.style.width = `${rect.width}px`;\n ghost.style.margin = '0';\n ghost.style.transform = 'rotate(2.5deg) scale(1.04)';\n ghost.style.boxShadow = '0 16px 40px rgba(0, 0, 0, 0.4)';\n ghost.style.opacity = '0.95';\n\n // Wrapper gives the rotation and shadow room to render without clipping;\n // must be in the document (offscreen) for setDragImage to rasterize it.\n const wrapper = document.createElement('div');\n wrapper.style.position = 'fixed';\n wrapper.style.top = '-10000px';\n wrapper.style.left = '-10000px';\n wrapper.style.padding = `${padding}px`;\n wrapper.style.pointerEvents = 'none';\n wrapper.appendChild(ghost);\n document.body.appendChild(wrapper);\n\n event.dataTransfer?.setDragImage(\n wrapper,\n event.clientX - rect.left + padding,\n event.clientY - rect.top + padding\n );\n\n // Browser rasterizes the ghost synchronously within dragstart — safe to\n // drop the DOM node right after.\n setTimeout(() => wrapper.remove(), 0);\n };\n\n protected readonly onDrag = (event: DragEvent): void => {\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragOver = (event: DragEvent): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n event.preventDefault();\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragEnter = (): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n this.#list.dragOverIndex.set(this.mDragListItem());\n };\n\n protected readonly onDragLeave = (): void => {\n if (this.#list.dragOverIndex() === this.mDragListItem()) {\n this.#list.dragOverIndex.set(null);\n }\n };\n\n protected readonly onDragEnd = (event: DragEvent): void => {\n this.#list.dragEnded(event);\n };\n\n protected readonly onDrop = (event: DragEvent): void => {\n event.preventDefault();\n this.#list.drop(this.mDragListItem());\n };\n}\n","import {\n AfterViewChecked,\n Directive,\n ElementRef,\n HostListener,\n inject,\n} from '@angular/core';\nimport { IS_DESIGN_MODE } from '../../config/tokens';\n\n@Directive({\n selector: '[mAutosize]',\n})\nexport class AutosizeDirective implements AfterViewChecked {\n readonly _el = inject(ElementRef);\n\n // DesignMode: the canvas runs change detection on every hover, select and\n // drag, and each pass re-measured the field — collapsing it to `0px` and\n // growing it back — so the editor's overlay chased a box that kept\n // resizing and flickered. On the canvas the field keeps its intrinsic\n // `rows` height and is never resized.\n readonly #isDesignMode = !!inject(IS_DESIGN_MODE, { optional: true });\n\n // What the height was last measured against. Outside the canvas, change\n // detection still runs on every hover, select and drag; re-measuring on each\n // pass collapsed the field to `0px` for a moment, which clamps the scrollTop\n // of any scrolling ancestor — the panel jumped and the field flickered. Only\n // a new value or a new width can change the height, so nothing else measures.\n #measuredValue: string | null = null;\n #measuredWidth = -1;\n\n @HostListener('input', [])\n @HostListener('window:resize', [])\n onInput(): void {\n if (!this.#isDesignMode) this.#adjust();\n }\n\n ngAfterViewChecked(): void {\n if (this.#isDesignMode) return;\n if (this._el.nativeElement.offsetParent != null) setTimeout(this.#adjust);\n }\n\n // `0px`, not `auto`, as the height the text is measured against. `auto` is an\n // indefinite cross size, so any ancestor that stretches its children —\n // `.m-section__body` is `align-items: stretch`, and a Screen nests those —\n // resolves it to the stretched box, and `scrollHeight` then reports that\n // box rather than the text in it. Written back on every `ngAfterViewChecked`,\n // that ratchets the field up to whatever caps the chain: inside a Modal, the\n // pop-up's own `max-height`, at which point the field *is* the modal and the\n // Screen around it is scrolled out of reach. `0px` is definite, so nothing\n // stretches it and `scrollHeight` is the content alone.\n #adjust = (): void => {\n const el = this._el.nativeElement as HTMLTextAreaElement;\n const width = el.clientWidth;\n if (el.value === this.#measuredValue && width === this.#measuredWidth) {\n return;\n }\n this.#measuredValue = el.value;\n this.#measuredWidth = width;\n el.style.overflow = 'hidden';\n el.style.height = '0px';\n el.style.height = `${el.scrollHeight}px`;\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n output,\n} from '@angular/core';\n\nexport interface FileUploadConfig {\n accept?: string[];\n multiple?: boolean;\n maxSize?: number;\n}\n\nexport interface FileUploadEvent {\n files: File[];\n}\n\n@Directive({\n selector: '[mFileUpload]',\n host: {\n '[style.cursor]': '\"pointer\"',\n },\n})\nexport class FileUploadDirective {\n mFileUpload = input<FileUploadConfig>({});\n readonly fileSelect = output<FileUploadEvent>();\n\n private readonly elementRef = inject(ElementRef);\n private fileInput: HTMLInputElement | null = null;\n\n @HostListener('click')\n protected openFilePicker(): void {\n if (!this.fileInput) {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.style.display = 'none';\n this.fileInput.addEventListener('change', this.onFileChange);\n this.elementRef.nativeElement.appendChild(this.fileInput);\n }\n\n const config = this.mFileUpload();\n this.fileInput.accept = config.accept?.join(',') ?? '*';\n this.fileInput.multiple = config.multiple ?? false;\n this.fileInput.click();\n }\n\n private readonly onFileChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n\n if (files.length === 0) return;\n\n const config = this.mFileUpload();\n const maxSize = config.maxSize;\n\n const validFiles = maxSize ? files.filter((f) => f.size <= maxSize) : files;\n\n if (validFiles.length > 0) {\n this.fileSelect.emit({ files: validFiles });\n }\n\n input.value = '';\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[mToolTip]',\n})\nexport class ToolTipDirective implements OnDestroy {\n mToolTip = input<string>('');\n\n private readonly elementRef = inject(ElementRef);\n private tooltipElement: HTMLElement | null = null;\n\n @HostListener('mouseenter')\n protected showTooltip(): void {\n const text = this.mToolTip();\n if (!text) return;\n\n this.tooltipElement = document.createElement('div');\n this.tooltipElement.textContent = text;\n Object.assign(this.tooltipElement.style, {\n position: 'fixed',\n background: 'rgba(0, 0, 0, 0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n zIndex: '10000',\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n });\n\n document.body.appendChild(this.tooltipElement);\n this.positionTooltip();\n }\n\n @HostListener('mouseleave')\n protected hideTooltip(): void {\n this.removeTooltip();\n }\n\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) return;\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n this.tooltipElement.style.left = `${rect.left + rect.width / 2 - tooltipRect.width / 2}px`;\n this.tooltipElement.style.top = `${rect.top - tooltipRect.height - 6}px`;\n }\n\n private removeTooltip(): void {\n this.tooltipElement?.remove();\n this.tooltipElement = null;\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n signal,\n} from '@angular/core';\n\ntype Direction = 'above' | 'below' | 'left' | 'right';\n\n@Directive({\n selector: '[mPosition]',\n host: {\n '[class.m-pos--above]': 'direction() === \"above\"',\n '[class.m-pos--below]': 'direction() === \"below\"',\n '[class.m-pos--left]': 'direction() === \"left\"',\n '[class.m-pos--right]': 'direction() === \"right\"',\n },\n})\nexport class PositionDirective {\n private readonly el = inject(ElementRef<HTMLElement>);\n protected readonly direction = signal<Direction>('below');\n\n @HostListener('mouseenter')\n detect(): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const spaces: Record<Direction, number> = {\n below: window.innerHeight - rect.bottom,\n above: rect.top,\n right: window.innerWidth - rect.right,\n left: rect.left,\n };\n const best = (Object.entries(spaces) as [Direction, number][]).reduce(\n (best, [dir, space]) => (space > best.space ? { dir, space } : best),\n { dir: 'below' as Direction, space: spaces.below }\n );\n this.direction.set(best.dir);\n }\n}\n","import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n@Directive({\n selector: '[mHighlight]',\n})\nexport class HighlightDirective {\n readonly mHighlight = input<string>('');\n readonly mHighlightText = input<string>('');\n\n private readonly el = inject(ElementRef);\n\n constructor() {\n afterRenderEffect(() => {\n const query = this.mHighlight().trim();\n const text = this.mHighlightText();\n if (!query) {\n this.el.nativeElement.innerHTML = this.escapeHtml(text);\n return;\n }\n const escaped = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escaped})`, 'gi');\n this.el.nativeElement.innerHTML = this.escapeHtml(text).replace(\n regex,\n '<mark class=\"m-table__highlight\">$1</mark>'\n );\n });\n }\n\n private readonly escapeHtml = (str: string): string =>\n String(str ?? '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n","/**\n * Generates a consistent HSL color based on the input string.\n * Used for wallet backgrounds and other items where visual consistency is needed.\n */\nexport function stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = (Math.imul(31, hash) + str.charCodeAt(i)) | 0;\n }\n\n // Use hash to generate H, S, L\n const h = Math.abs(hash) % 360;\n const s = 65 + (Math.abs(hash >> 8) % 20); // 65-85% saturation for vibrancy\n const l = 45 + (Math.abs(hash >> 16) % 15); // 45-60% lightness for readability\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n effect,\n Renderer2,\n} from '@angular/core';\nimport { stringToColor } from '../../functions/string/color';\n\n@Directive({\n selector: '[mHeroColor]',\n})\nexport class MHeroColorDirective {\n /** The string to generate the color from (e.g., coin name, wallet name) */\n mHeroColor = input.required<string>();\n\n /** The CSS variable name to set (defaults to --hero-accent-color) */\n mHeroColorVar = input<string>('--hero-accent-color');\n\n #el = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const source = this.mHeroColor();\n const varName = this.mHeroColorVar();\n\n if (source) {\n const color = stringToColor(source);\n this.#renderer.setStyle(this.#el.nativeElement, varName, color);\n }\n });\n }\n}\n","import {\n computed,\n Directive,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\nimport { resolveSpacing } from '../../functions/size/size-converter';\n\ntype SpacingValue = number | string | undefined | null;\n\n/**\n * Which of the two spacings a primitive takes inward rather than on its host.\n * Provided in a component's own `providers`, so the directive on that host\n * reads it from the same element and nowhere else.\n *\n * `padding` — the primitive draws a box of its own inside the host (a Card's\n * header, main and footer) and pads that box from `--m-padding-inline` /\n * `--m-padding-block` in place of its built-in padding. Padding the host too\n * would pad it twice.\n *\n * `margin` — the primitive stretches to its container's width, so a margin on\n * the host pushes it past the edge. It reads `--m-margin-inline` and narrows\n * itself instead.\n */\nexport type SpacingInward = { padding?: boolean; margin?: boolean };\n\nexport const SPACING_INWARD = new InjectionToken<SpacingInward>(\n 'SPACING_INWARD'\n);\n\n// A blank axis is unset, not a value: an inspector form hands back every\n// untouched text field as `''`, and `??` alone would let it blank the\n// shorthand the User did type.\nconst isBlank = (value: SpacingValue): boolean =>\n value === undefined ||\n value === null ||\n (typeof value === 'string' && value.trim() === '');\n\nconst axis = (own: SpacingValue, shorthand: SpacingValue): string | undefined =>\n resolveSpacing(isBlank(own) ? shorthand : own);\n\n/**\n * Space inside any element. A bare number is `em`, any other CSS length\n * passes through; the axis inputs win over the shorthand on their own axis.\n * Always writes the resolved lengths as `--m-padding-inline` /\n * `--m-padding-block`, and pads the host itself unless the host takes padding\n * inward (`SPACING_INWARD`).\n */\n@Directive({\n selector: '[mPadding],[mPaddingX],[mPaddingY]',\n host: {\n class: 'm-padded',\n '[style.--m-padding-inline]': 'inline()',\n '[style.--m-padding-block]': 'block()',\n '[style.padding-inline]': 'inward ? null : inline()',\n '[style.padding-block]': 'inward ? null : block()',\n },\n})\nexport class PaddingDirective {\n readonly mPadding = input<SpacingValue>(undefined);\n readonly mPaddingX = input<SpacingValue>(undefined);\n readonly mPaddingY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.padding;\n\n protected readonly inline = computed(() =>\n axis(this.mPaddingX(), this.mPadding())\n );\n protected readonly block = computed(() =>\n axis(this.mPaddingY(), this.mPadding())\n );\n}\n\n/**\n * Space around any element, on `PaddingDirective`'s scale. Writes\n * `--m-margin-inline` / `--m-margin-block` always; the block margin is set on\n * the host always, the inline one only when the host does not take it inward\n * (`SPACING_INWARD`) — a full-width host narrows by it instead.\n */\n@Directive({\n selector: '[mMargin],[mMarginX],[mMarginY]',\n host: {\n class: 'm-spaced',\n '[style.--m-margin-inline]': 'inline()',\n '[style.--m-margin-block]': 'block()',\n '[style.margin-inline]': 'inward ? null : inline()',\n '[style.margin-block]': 'block()',\n },\n})\nexport class MarginDirective {\n readonly mMargin = input<SpacingValue>(undefined);\n readonly mMarginX = input<SpacingValue>(undefined);\n readonly mMarginY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.margin;\n\n protected readonly inline = computed(() =>\n axis(this.mMarginX(), this.mMargin())\n );\n protected readonly block = computed(() =>\n axis(this.mMarginY(), this.mMargin())\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"magmonium-one-directives-B93p5bAL.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/directives/draggable/lib/function/position.ts","../../../../libs/one/src/lib/shared/directives/draggable/lib/function/cursor.ts","../../../../libs/one/src/lib/shared/directives/draggable/draggable.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list.ts","../../../../libs/one/src/lib/shared/directives/drag-list/drag-list-item.ts","../../../../libs/one/src/lib/shared/directives/autosize/autosize.ts","../../../../libs/one/src/lib/shared/directives/file-upload/file-upload.ts","../../../../libs/one/src/lib/shared/directives/tooltip/tooltip.ts","../../../../libs/one/src/lib/shared/directives/position/position.ts","../../../../libs/one/src/lib/shared/ui/table/lib/directives/highlight.ts","../../../../libs/one/src/lib/shared/functions/string/color.ts","../../../../libs/one/src/lib/shared/directives/color/m-hero-color.directive.ts","../../../../libs/one/src/lib/shared/directives/spacing/spacing.ts"],"sourcesContent":["import { Draggable } from '../../type';\nimport { Position } from '../../../../type/screen/position';\n\nfunction isWithinBoundary(\n value: number,\n draggable: Draggable,\n axis: 'x' | 'y'\n): boolean {\n const maxVal =\n draggable.max?.[axis] ??\n (axis === 'x' ? window.innerWidth : window.innerHeight);\n const minVal = draggable.min?.[axis] ?? 0;\n return value <= maxVal && value >= minVal;\n}\n\nexport function getNewPosition(\n draggable: Draggable,\n event: MouseEvent | TouchEvent,\n delta: Position\n): Position {\n let { x, y } = draggable.position;\n\n const isTouch = 'touches' in event;\n const touch = isTouch ? event.touches[0] || event.changedTouches[0] : null;\n const screenX = touch ? touch.screenX : (event as MouseEvent).screenX;\n const screenY = touch ? touch.screenY : (event as MouseEvent).screenY;\n\n if (draggable.direction !== 'y') {\n const dx = screenX - (delta.x ?? 0);\n if (isWithinBoundary(dx, draggable, 'x')) {\n x = dx;\n }\n }\n\n if (draggable.direction !== 'x') {\n const dy = screenY - (delta.y ?? 0);\n if (isWithinBoundary(dy, draggable, 'y')) {\n y = dy;\n }\n }\n\n return { x, y };\n}\n","import { Draggable } from '../../type';\n\nexport function getCursor({ direction }: Draggable) {\n switch (direction) {\n case 'x':\n return 'ew-resize';\n case 'y':\n return 'ns-resize';\n default:\n return 'move';\n }\n}\n","import { computed, Directive, HostListener, Input, model, input, output } from '@angular/core';\nimport { Draggable, DraggableState } from './type';\nimport { getCursor, getNewPosition } from './lib';\n// The type's own file rather than the shared barrel: that barrel reaches every\n// UI slice, so a directive importing it is a cycle back into the components\n// that declare this directive — and a half-initialised cycle leaves\n// `DraggableDirective` undefined in whichever of them is evaluated first.\nimport { Position } from '../../type/screen/position';\n\n/** Buttons/links inside a handle must keep their click — not start a drag. */\nconst INTERACTIVE_SELECTOR =\n 'button, a, input, textarea, select, [contenteditable=\"true\"]';\n\nconst shouldIgnorePointer = (target: HTMLElement): boolean =>\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.tagName === 'SELECT' ||\n target.isContentEditable ||\n !!target.closest(INTERACTIVE_SELECTOR);\n\n@Directive({\n selector: '[mDraggable]',\n host: {\n '[class.draggable]': \"mDraggable()?.direction !== 'none'\",\n '[class.dragging]': 'this.state.dragging',\n '[style.position]':\n \"mDraggable()?.direction !== 'none' ? (mDraggable()?.positionType ?? 'absolute') : null\",\n '[style.top.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'x' ? mDraggable()?.position?.y : null\",\n '[style.left.px]':\n \"mDraggable()?.direction !== 'none' && mDraggable()?.direction !== 'y' ? mDraggable()?.position?.x : null\",\n '[style.cursor]': \"mDraggable()?.direction !== 'none' ? cursor() : null\",\n },\n})\nexport class DraggableDirective {\n mDraggable = model.required<Draggable>();\n handleSelector = input<string>();\n\n /**\n * The bounds, read at drag time and never written into `mDraggable`.\n *\n * They used to be merged in by a setter, which lost them the moment a parent\n * replaced its Draggable — a `linkedSignal` recomputed from the value the\n * drag itself writes back, which is what both Ranges do. Angular memoizes an\n * inline object literal in a template, so `[min]=\"{ x: 0, y: 3 }\"` is the\n * same reference on the next pass and its setter never fires again to put\n * the bound back. The config then had no `max`, `isWithinBoundary` fell\n * through to `window.innerWidth`, and the thumb slid off the track.\n *\n * A bound is what the caller says the drag may not pass, not state the drag\n * mutates — so it stays an input and the two never share an object.\n */\n readonly min = input<Position | undefined>(undefined);\n readonly max = input<Position | undefined>(undefined);\n\n readonly dragStart = output<void>();\n readonly dragEnd = output<void>();\n\n protected readonly cursor = computed(() => getCursor(this.mDraggable()));\n protected state = <DraggableState>{\n dragging: false,\n delta: { x: 0, y: 0 },\n };\n\n @Input() set pos(position: Position) {\n this.mDraggable.update((config) => ({\n ...config,\n position,\n }));\n }\n\n /**\n * The config a move is clamped against: the bounds on the tag win, and a\n * caller that carries them inside its own Draggable keeps working.\n */\n private readonly bounded = (config: Draggable): Draggable => ({\n ...config,\n min: this.min() ?? config.min,\n max: this.max() ?? config.max,\n });\n\n @HostListener('mousedown', ['$event'])\n protected handleMouseDown(event: MouseEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = true;\n this.dragStart.emit();\n const { screenX, screenY } = event;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:mousemove', ['$event'])\n protected handleMouseMove(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:mouseup', ['$event'])\n protected handleMouseUp(event: MouseEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n\n @HostListener('touchstart', ['$event'])\n protected handleTouchStart(event: TouchEvent) {\n const target = event.target as HTMLElement;\n if (\n this.mDraggable()?.direction === 'none' ||\n shouldIgnorePointer(target)\n ) {\n return;\n }\n const selector = this.handleSelector();\n if (selector && !target.closest(selector)) {\n return;\n }\n event.stopPropagation();\n this.state.dragging = true;\n this.dragStart.emit();\n const touch = event.touches[0];\n const { screenX, screenY } = touch;\n const { x, y } = this.mDraggable()?.position ?? {};\n this.state.delta.x = screenX - (x ?? 0);\n this.state.delta.y = screenY - (y ?? 0);\n }\n\n @HostListener('window:touchmove', ['$event'])\n protected handleTouchMove(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n if (event.cancelable) {\n event.preventDefault();\n }\n event.stopPropagation();\n this.mDraggable.update((config) => ({\n ...config,\n position: getNewPosition(this.bounded(config), event, this.state.delta),\n }));\n }\n\n @HostListener('window:touchend', ['$event'])\n protected handleTouchEnd(event: TouchEvent): void {\n if (!this.state.dragging) {\n return;\n }\n event.stopPropagation();\n event.preventDefault();\n this.state.dragging = false;\n this.dragEnd.emit();\n }\n}\n","import {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\n\nexport interface DragListReorder {\n from: number;\n to: number;\n}\n\n/**\n * Container side of HTML5 drag-to-reorder. Put on the element wrapping the\n * items, pair with [mDragListItem] on each item. Emits (reordered) with\n * {from, to} — the consumer owns the array move. Auto-scrolls any scrollable\n * ancestor (and the viewport) while the pointer is within 150px of its edge.\n * With removeOnDragOut, dropping an item outside the container emits\n * (removed) with its index — the consumer owns the actual removal.\n */\n@Directive({\n selector: '[mDragList]',\n host: {\n '(dragover)': 'onContainerDragOver($event)',\n },\n})\nexport class DragListDirective implements OnDestroy {\n readonly removeOnDragOut = input(false, { transform: booleanAttribute });\n\n readonly reordered = output<DragListReorder>();\n readonly removed = output<number>();\n\n readonly draggedIndex = signal<number | null>(null);\n readonly dragOverIndex = signal<number | null>(null);\n\n readonly #elementRef = inject(ElementRef);\n\n #scrollAnimationFrameId: number | null = null;\n #dragPointerX = 0;\n #dragPointerY = 0;\n #scrollContainers: HTMLElement[] = [];\n\n readonly startDrag = (index: number, clientX: number, clientY: number): void => {\n this.draggedIndex.set(index);\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n this.#startScrollLoop();\n };\n\n readonly trackPointer = (clientX: number, clientY: number): void => {\n // Firefox reports client coords 0 on drag events — ignore those samples.\n if (clientX !== 0 || clientY !== 0) {\n this.#dragPointerX = clientX;\n this.#dragPointerY = clientY;\n }\n };\n\n readonly endDrag = (): void => {\n this.draggedIndex.set(null);\n this.dragOverIndex.set(null);\n this.#stopScrollLoop();\n };\n\n // Called on dragend — fires only when no drop() consumed the drag (drop on\n // an item clears draggedIndex first). Pointer outside the container at\n // release means the item was dragged out.\n readonly dragEnded = (event: DragEvent): void => {\n const from = this.draggedIndex();\n if (from !== null && this.removeOnDragOut() && this.#isPointerOutside(event)) {\n this.endDrag();\n this.removed.emit(from);\n return;\n }\n this.endDrag();\n };\n\n readonly #isPointerOutside = (event: DragEvent): boolean => {\n const x = event.clientX || this.#dragPointerX;\n const y = event.clientY || this.#dragPointerY;\n const rect = (this.#elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n return x < rect.left || x > rect.right || y < rect.top || y > rect.bottom;\n };\n\n readonly drop = (index: number): void => {\n const from = this.draggedIndex();\n this.endDrag();\n if (from !== null && from !== index) {\n this.reordered.emit({ from, to: index });\n }\n };\n\n protected readonly onContainerDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #getScrollContainers = (): HTMLElement[] => {\n const list: HTMLElement[] = [];\n let el: HTMLElement | null = this.#elementRef.nativeElement;\n while (el && el !== document.body) {\n const style = window.getComputedStyle(el);\n const overflowY = style.overflowY || style.overflow;\n const isScrollable =\n overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'hidden';\n if (isScrollable && el.scrollHeight > el.clientHeight) {\n list.push(el);\n }\n el = el.parentElement;\n }\n list.push(document.documentElement);\n return list;\n };\n\n readonly #startScrollLoop = (): void => {\n this.#stopScrollLoop();\n this.#scrollContainers = this.#getScrollContainers();\n\n window.addEventListener('dragover', this.#onGlobalDragOver, true);\n window.addEventListener('drag', this.#onGlobalDrag, true);\n\n const loop = (): void => {\n if (this.draggedIndex() === null) {\n this.#stopScrollLoop();\n return;\n }\n\n for (const container of this.#scrollContainers) {\n const isRoot = container === document.documentElement;\n const rect = container.getBoundingClientRect();\n const topThreshold = isRoot ? 150 : rect.top + 150;\n const bottomThreshold = isRoot\n ? window.innerHeight - 150\n : rect.bottom - 150;\n\n if (this.#dragPointerY < topThreshold) {\n const diff = topThreshold - this.#dragPointerY;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, -speed);\n } else {\n container.scrollTop -= speed;\n }\n } else if (this.#dragPointerY > bottomThreshold) {\n const diff = this.#dragPointerY - bottomThreshold;\n const speed = Math.min(25, Math.max(2, Math.floor(diff / 4)));\n if (isRoot) {\n window.scrollBy(0, speed);\n } else {\n container.scrollTop += speed;\n }\n }\n }\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n this.#scrollAnimationFrameId = requestAnimationFrame(loop);\n };\n\n readonly #stopScrollLoop = (): void => {\n window.removeEventListener('dragover', this.#onGlobalDragOver, true);\n window.removeEventListener('drag', this.#onGlobalDrag, true);\n if (this.#scrollAnimationFrameId !== null) {\n cancelAnimationFrame(this.#scrollAnimationFrameId);\n this.#scrollAnimationFrameId = null;\n }\n this.#scrollContainers = [];\n };\n\n // Global listeners: dragover fires reliably everywhere once preventDefault'd,\n // drag covers browsers that skip dragover outside drop targets.\n readonly #onGlobalDragOver = (event: DragEvent): void => {\n event.preventDefault();\n this.trackPointer(event.clientX, event.clientY);\n };\n\n readonly #onGlobalDrag = (event: DragEvent): void => {\n this.trackPointer(event.clientX, event.clientY);\n };\n\n ngOnDestroy(): void {\n this.#stopScrollLoop();\n }\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\nimport { DragListDirective } from './drag-list';\n\n/**\n * Item side of HTML5 drag-to-reorder. Put on each repeated element inside an\n * [mDragList] container, bound to the item's index: [mDragListItem]=\"i\".\n * Adds `is-dragging` on the dragged item and `is-drag-over` on the current\n * drop target — style them in the consumer.\n */\n@Directive({\n selector: '[mDragListItem]',\n host: {\n draggable: 'true',\n '[class.is-dragging]': 'isDragging()',\n '[class.is-drag-over]': 'isDragOver()',\n '(dragstart)': 'onDragStart($event)',\n '(dragover)': 'onDragOver($event)',\n '(dragenter)': 'onDragEnter()',\n '(dragleave)': 'onDragLeave()',\n '(dragend)': 'onDragEnd($event)',\n '(drop)': 'onDrop($event)',\n '(drag)': 'onDrag($event)',\n },\n})\nexport class DragListItemDirective {\n readonly mDragListItem = input.required<number>();\n\n readonly #list = inject(DragListDirective);\n readonly #elementRef = inject(ElementRef);\n\n protected readonly isDragging = computed(\n () => this.#list.draggedIndex() === this.mDragListItem()\n );\n protected readonly isDragOver = computed(\n () => this.#list.dragOverIndex() === this.mDragListItem()\n );\n\n protected readonly onDragStart = (event: DragEvent): void => {\n if (event.dataTransfer) {\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', this.mDragListItem().toString());\n this.#setDragGhost(event);\n }\n this.#list.startDrag(this.mDragListItem(), event.clientX, event.clientY);\n };\n\n // Replaces the browser's flat snapshot ghost with a lifted, tilted clone so\n // the item visibly \"picks up\". Clone keeps _ngcontent attributes, so the\n // consumer's scoped styles still apply to it.\n readonly #setDragGhost = (event: DragEvent): void => {\n const host = this.#elementRef.nativeElement as HTMLElement;\n const rect = host.getBoundingClientRect();\n const padding = 24;\n\n const ghost = host.cloneNode(true) as HTMLElement;\n ghost.style.width = `${rect.width}px`;\n ghost.style.margin = '0';\n ghost.style.transform = 'rotate(2.5deg) scale(1.04)';\n ghost.style.boxShadow = '0 16px 40px rgba(0, 0, 0, 0.4)';\n ghost.style.opacity = '0.95';\n\n // Wrapper gives the rotation and shadow room to render without clipping;\n // must be in the document (offscreen) for setDragImage to rasterize it.\n const wrapper = document.createElement('div');\n wrapper.style.position = 'fixed';\n wrapper.style.top = '-10000px';\n wrapper.style.left = '-10000px';\n wrapper.style.padding = `${padding}px`;\n wrapper.style.pointerEvents = 'none';\n wrapper.appendChild(ghost);\n document.body.appendChild(wrapper);\n\n event.dataTransfer?.setDragImage(\n wrapper,\n event.clientX - rect.left + padding,\n event.clientY - rect.top + padding\n );\n\n // Browser rasterizes the ghost synchronously within dragstart — safe to\n // drop the DOM node right after.\n setTimeout(() => wrapper.remove(), 0);\n };\n\n protected readonly onDrag = (event: DragEvent): void => {\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragOver = (event: DragEvent): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n event.preventDefault();\n this.#list.trackPointer(event.clientX, event.clientY);\n };\n\n protected readonly onDragEnter = (): void => {\n if (this.#list.draggedIndex() === this.mDragListItem()) return;\n this.#list.dragOverIndex.set(this.mDragListItem());\n };\n\n protected readonly onDragLeave = (): void => {\n if (this.#list.dragOverIndex() === this.mDragListItem()) {\n this.#list.dragOverIndex.set(null);\n }\n };\n\n protected readonly onDragEnd = (event: DragEvent): void => {\n this.#list.dragEnded(event);\n };\n\n protected readonly onDrop = (event: DragEvent): void => {\n event.preventDefault();\n this.#list.drop(this.mDragListItem());\n };\n}\n","import {\n AfterViewChecked,\n Directive,\n ElementRef,\n HostListener,\n inject,\n} from '@angular/core';\nimport { IS_DESIGN_MODE } from '../../config/tokens';\n\n@Directive({\n selector: '[mAutosize]',\n})\nexport class AutosizeDirective implements AfterViewChecked {\n readonly _el = inject(ElementRef);\n\n // DesignMode: the canvas runs change detection on every hover, select and\n // drag, and each pass re-measured the field — collapsing it to `0px` and\n // growing it back — so the editor's overlay chased a box that kept\n // resizing and flickered. On the canvas the field keeps its intrinsic\n // `rows` height and is never resized.\n readonly #isDesignMode = !!inject(IS_DESIGN_MODE, { optional: true });\n\n // What the height was last measured against. Outside the canvas, change\n // detection still runs on every hover, select and drag; re-measuring on each\n // pass collapsed the field to `0px` for a moment, which clamps the scrollTop\n // of any scrolling ancestor — the panel jumped and the field flickered. Only\n // a new value or a new width can change the height, so nothing else measures.\n #measuredValue: string | null = null;\n #measuredWidth = -1;\n\n @HostListener('input', [])\n @HostListener('window:resize', [])\n onInput(): void {\n if (!this.#isDesignMode) this.#adjust();\n }\n\n ngAfterViewChecked(): void {\n if (this.#isDesignMode) return;\n if (this._el.nativeElement.offsetParent != null) setTimeout(this.#adjust);\n }\n\n // `0px`, not `auto`, as the height the text is measured against. `auto` is an\n // indefinite cross size, so any ancestor that stretches its children —\n // `.m-section__body` is `align-items: stretch`, and a Screen nests those —\n // resolves it to the stretched box, and `scrollHeight` then reports that\n // box rather than the text in it. Written back on every `ngAfterViewChecked`,\n // that ratchets the field up to whatever caps the chain: inside a Modal, the\n // pop-up's own `max-height`, at which point the field *is* the modal and the\n // Screen around it is scrolled out of reach. `0px` is definite, so nothing\n // stretches it and `scrollHeight` is the content alone.\n #adjust = (): void => {\n const el = this._el.nativeElement as HTMLTextAreaElement;\n const width = el.clientWidth;\n if (el.value === this.#measuredValue && width === this.#measuredWidth) {\n return;\n }\n this.#measuredValue = el.value;\n this.#measuredWidth = width;\n el.style.overflow = 'hidden';\n el.style.height = '0px';\n el.style.height = `${el.scrollHeight}px`;\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n output,\n} from '@angular/core';\n\nexport interface FileUploadConfig {\n accept?: string[];\n multiple?: boolean;\n maxSize?: number;\n}\n\nexport interface FileUploadEvent {\n files: File[];\n}\n\n@Directive({\n selector: '[mFileUpload]',\n host: {\n '[style.cursor]': '\"pointer\"',\n },\n})\nexport class FileUploadDirective {\n mFileUpload = input<FileUploadConfig>({});\n readonly fileSelect = output<FileUploadEvent>();\n\n private readonly elementRef = inject(ElementRef);\n private fileInput: HTMLInputElement | null = null;\n\n @HostListener('click')\n protected openFilePicker(): void {\n if (!this.fileInput) {\n this.fileInput = document.createElement('input');\n this.fileInput.type = 'file';\n this.fileInput.style.display = 'none';\n this.fileInput.addEventListener('change', this.onFileChange);\n this.elementRef.nativeElement.appendChild(this.fileInput);\n }\n\n const config = this.mFileUpload();\n this.fileInput.accept = config.accept?.join(',') ?? '*';\n this.fileInput.multiple = config.multiple ?? false;\n this.fileInput.click();\n }\n\n private readonly onFileChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []);\n\n if (files.length === 0) return;\n\n const config = this.mFileUpload();\n const maxSize = config.maxSize;\n\n const validFiles = maxSize ? files.filter((f) => f.size <= maxSize) : files;\n\n if (validFiles.length > 0) {\n this.fileSelect.emit({ files: validFiles });\n }\n\n input.value = '';\n };\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n input,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({\n selector: '[mToolTip]',\n})\nexport class ToolTipDirective implements OnDestroy {\n mToolTip = input<string>('');\n\n private readonly elementRef = inject(ElementRef);\n private tooltipElement: HTMLElement | null = null;\n\n @HostListener('mouseenter')\n protected showTooltip(): void {\n const text = this.mToolTip();\n if (!text) return;\n\n this.tooltipElement = document.createElement('div');\n this.tooltipElement.textContent = text;\n Object.assign(this.tooltipElement.style, {\n position: 'fixed',\n background: 'rgba(0, 0, 0, 0.8)',\n color: '#fff',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '12px',\n zIndex: '10000',\n pointerEvents: 'none',\n whiteSpace: 'nowrap',\n });\n\n document.body.appendChild(this.tooltipElement);\n this.positionTooltip();\n }\n\n @HostListener('mouseleave')\n protected hideTooltip(): void {\n this.removeTooltip();\n }\n\n ngOnDestroy(): void {\n this.removeTooltip();\n }\n\n private positionTooltip(): void {\n if (!this.tooltipElement) return;\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const tooltipRect = this.tooltipElement.getBoundingClientRect();\n this.tooltipElement.style.left = `${rect.left + rect.width / 2 - tooltipRect.width / 2}px`;\n this.tooltipElement.style.top = `${rect.top - tooltipRect.height - 6}px`;\n }\n\n private removeTooltip(): void {\n this.tooltipElement?.remove();\n this.tooltipElement = null;\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n inject,\n signal,\n} from '@angular/core';\n\ntype Direction = 'above' | 'below' | 'left' | 'right';\n\n@Directive({\n selector: '[mPosition]',\n host: {\n '[class.m-pos--above]': 'direction() === \"above\"',\n '[class.m-pos--below]': 'direction() === \"below\"',\n '[class.m-pos--left]': 'direction() === \"left\"',\n '[class.m-pos--right]': 'direction() === \"right\"',\n },\n})\nexport class PositionDirective {\n private readonly el = inject(ElementRef<HTMLElement>);\n protected readonly direction = signal<Direction>('below');\n\n @HostListener('mouseenter')\n detect(): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const spaces: Record<Direction, number> = {\n below: window.innerHeight - rect.bottom,\n above: rect.top,\n right: window.innerWidth - rect.right,\n left: rect.left,\n };\n const best = (Object.entries(spaces) as [Direction, number][]).reduce(\n (best, [dir, space]) => (space > best.space ? { dir, space } : best),\n { dir: 'below' as Direction, space: spaces.below }\n );\n this.direction.set(best.dir);\n }\n}\n","import {\n afterRenderEffect,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n@Directive({\n selector: '[mHighlight]',\n})\nexport class HighlightDirective {\n readonly mHighlight = input<string>('');\n readonly mHighlightText = input<string>('');\n\n private readonly el = inject(ElementRef);\n\n constructor() {\n afterRenderEffect(() => {\n const query = this.mHighlight().trim();\n const text = this.mHighlightText();\n if (!query) {\n this.el.nativeElement.innerHTML = this.escapeHtml(text);\n return;\n }\n const escaped = query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(`(${escaped})`, 'gi');\n this.el.nativeElement.innerHTML = this.escapeHtml(text).replace(\n regex,\n '<mark class=\"m-table__highlight\">$1</mark>'\n );\n });\n }\n\n private readonly escapeHtml = (str: string): string =>\n String(str ?? '')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n","/**\n * Generates a consistent HSL color based on the input string.\n * Used for wallet backgrounds and other items where visual consistency is needed.\n */\nexport function stringToColor(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n hash = (Math.imul(31, hash) + str.charCodeAt(i)) | 0;\n }\n\n // Use hash to generate H, S, L\n const h = Math.abs(hash) % 360;\n const s = 65 + (Math.abs(hash >> 8) % 20); // 65-85% saturation for vibrancy\n const l = 45 + (Math.abs(hash >> 16) % 15); // 45-60% lightness for readability\n\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n effect,\n Renderer2,\n} from '@angular/core';\nimport { stringToColor } from '../../functions/string/color';\n\n@Directive({\n selector: '[mHeroColor]',\n})\nexport class MHeroColorDirective {\n /** The string to generate the color from (e.g., coin name, wallet name) */\n mHeroColor = input.required<string>();\n\n /** The CSS variable name to set (defaults to --hero-accent-color) */\n mHeroColorVar = input<string>('--hero-accent-color');\n\n #el = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n constructor() {\n effect(() => {\n const source = this.mHeroColor();\n const varName = this.mHeroColorVar();\n\n if (source) {\n const color = stringToColor(source);\n this.#renderer.setStyle(this.#el.nativeElement, varName, color);\n }\n });\n }\n}\n","import {\n computed,\n Directive,\n inject,\n InjectionToken,\n input,\n} from '@angular/core';\nimport { resolveSpacing } from '../../functions/size/size-converter';\n\ntype SpacingValue = number | string | undefined | null;\n\n/**\n * Which of the two spacings a primitive takes inward rather than on its host.\n * Provided in a component's own `providers`, so the directive on that host\n * reads it from the same element and nowhere else.\n *\n * `padding` — the primitive draws a box of its own inside the host (a Card's\n * header, main and footer) and pads that box from `--m-padding-inline` /\n * `--m-padding-block` in place of its built-in padding. Padding the host too\n * would pad it twice.\n *\n * `margin` — the primitive stretches to its container's width, so a margin on\n * the host pushes it past the edge. It reads `--m-margin-inline` and narrows\n * itself instead.\n */\nexport type SpacingInward = { padding?: boolean; margin?: boolean };\n\nexport const SPACING_INWARD = new InjectionToken<SpacingInward>(\n 'SPACING_INWARD'\n);\n\n// A blank axis is unset, not a value: an inspector form hands back every\n// untouched text field as `''`, and `??` alone would let it blank the\n// shorthand the User did type.\nconst isBlank = (value: SpacingValue): boolean =>\n value === undefined ||\n value === null ||\n (typeof value === 'string' && value.trim() === '');\n\nconst axis = (own: SpacingValue, shorthand: SpacingValue): string | undefined =>\n resolveSpacing(isBlank(own) ? shorthand : own);\n\n/**\n * Space inside any element. A bare number is `em`, any other CSS length\n * passes through; the axis inputs win over the shorthand on their own axis.\n * Always writes the resolved lengths as `--m-padding-inline` /\n * `--m-padding-block`, and pads the host itself unless the host takes padding\n * inward (`SPACING_INWARD`).\n */\n@Directive({\n selector: '[mPadding],[mPaddingX],[mPaddingY]',\n host: {\n class: 'm-padded',\n '[style.--m-padding-inline]': 'inline()',\n '[style.--m-padding-block]': 'block()',\n '[style.padding-inline]': 'inward ? null : inline()',\n '[style.padding-block]': 'inward ? null : block()',\n },\n})\nexport class PaddingDirective {\n readonly mPadding = input<SpacingValue>(undefined);\n readonly mPaddingX = input<SpacingValue>(undefined);\n readonly mPaddingY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.padding;\n\n protected readonly inline = computed(() =>\n axis(this.mPaddingX(), this.mPadding())\n );\n protected readonly block = computed(() =>\n axis(this.mPaddingY(), this.mPadding())\n );\n}\n\n/**\n * Space around any element, on `PaddingDirective`'s scale. Writes\n * `--m-margin-inline` / `--m-margin-block` always; the block margin is set on\n * the host always, the inline one only when the host does not take it inward\n * (`SPACING_INWARD`) — a full-width host narrows by it instead.\n */\n@Directive({\n selector: '[mMargin],[mMarginX],[mMarginY]',\n host: {\n class: 'm-spaced',\n '[style.--m-margin-inline]': 'inline()',\n '[style.--m-margin-block]': 'block()',\n '[style.margin-inline]': 'inward ? null : inline()',\n '[style.margin-block]': 'block()',\n },\n})\nexport class MarginDirective {\n readonly mMargin = input<SpacingValue>(undefined);\n readonly mMarginX = input<SpacingValue>(undefined);\n readonly mMarginY = input<SpacingValue>(undefined);\n\n protected readonly inward = !!inject(SPACING_INWARD, {\n self: true,\n optional: true,\n })?.margin;\n\n protected readonly inline = computed(() =>\n axis(this.mMarginX(), this.mMargin())\n );\n protected readonly block = computed(() =>\n axis(this.mMarginY(), this.mMargin())\n );\n}\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { i as resolveSize, t as coerceSize } from "./magmonium-one-size-converter-C5fG_dgw.mjs";
2
- import { r as deriveContrastColor } from "./magmonium-one-color-utl-D86GGpz5.mjs";
3
- import { a as injectParentSize, o as provideSizeContext } from "./magmonium-one-icon-BTPHGpEN.mjs";
4
- import { r as ConfigComponent } from "./magmonium-one-attribute-value-DCTXt4Sr.mjs";
5
- import { i as deriveGroupClass, t as ButtonComponent } from "./magmonium-one-button-BWB3ZKIj.mjs";
6
- import { t as ContextMenuComponent } from "./magmonium-one-menu-EIfPlZ4E.mjs";
1
+ import { i as resolveSize, t as coerceSize } from "./magmonium-one-size-converter-BOBD8nHy.mjs";
2
+ import { r as deriveContrastColor } from "./magmonium-one-color-utl-DI5p24iQ.mjs";
3
+ import { o as injectParentSize, s as provideSizeContext } from "./magmonium-one-icon-C3jwzbb2.mjs";
4
+ import { r as ConfigComponent } from "./magmonium-one-attribute-value-C1lqou2L.mjs";
5
+ import { i as deriveGroupClass, t as ButtonComponent } from "./magmonium-one-button-DZ4wCJgb.mjs";
6
+ import { t as ContextMenuComponent } from "./magmonium-one-menu-cO34OcJc.mjs";
7
7
  import * as i0 from "@angular/core";
8
8
  import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, effect, forwardRef, input, output } from "@angular/core";
9
9
  import { forkJoin, map, of } from "rxjs";
@@ -425,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({
425
425
  });
426
426
  export { mergeUniqueWith as i, mergeUnique as n, mergeUniqueBy as r, ButtonGroupComponent as t };
427
427
 
428
- //# sourceMappingURL=magmonium-one-group-m41SX_fL.mjs.map
428
+ //# sourceMappingURL=magmonium-one-group-B7YeUd1u.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"magmonium-one-group-m41SX_fL.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/lib/utils/array.ts","../../../../libs/one/src/lib/shared/ui/button/ui/group/group.ts"],"sourcesContent":["/**\n * Merges multiple arrays and removes duplicates\n * @param arrays - Arrays to merge\n * @returns Merged array with unique values\n */\nexport function mergeUnique<T>(...arrays: T[][]): T[] {\n return [...new Set(arrays.flat())];\n}\n\n/**\n * Merges arrays of objects and removes duplicates by key\n * @param arrays - Arrays to merge\n * @param key - Property to use for uniqueness check\n * @returns Merged array with unique objects\n */\nexport function mergeUniqueBy<T, K extends keyof T>(\n arrays: T[][],\n key: K\n): T[] {\n const map = new Map<T[K], T>();\n\n arrays.flat().forEach((item) => {\n if (!map.has(item[key])) {\n map.set(item[key], item);\n }\n });\n\n return Array.from(map.values());\n}\n\n/**\n * Merges arrays with custom comparator\n */\nexport function mergeUniqueWith<T>(\n arrays: T[][],\n compareFn: (item: T) => unknown\n): T[] {\n const map = new Map<unknown, T>();\n\n arrays.flat().forEach((item) => {\n const key = compareFn(item);\n if (!map.has(key)) {\n map.set(key, item);\n }\n });\n\n return Array.from(map.values());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Button, ButtonGroup } from '../../type/button';\nimport { ButtonComponent } from '../button';\nimport { ConfigComponent } from '../../../../lib/components/config-component';\nimport { mergeUnique } from '../../../../lib/utils/array';\nimport { ContextMenuComponent, MenuItem } from '../../../menu';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { forkJoin, map, of } from 'rxjs';\nimport { deriveContrastColor } from '../../../../functions/color/operations';\n\nimport { deriveGroupClass } from '../../lib';\nimport {\n injectParentSize,\n provideSizeContext,\n} from '../../../../config/size-context.token';\nimport { Size } from '../../../../enum/scaling/size';\nimport {\n coerceSize,\n resolveSize,\n} from '../../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-button-group, m-one-button-group',\n template: `\n @if (config(); as group) {\n <div\n class=\"button-group {{ classList() }}\"\n [class.is-context]=\"group.isContext\"\n >\n @if (group.isContext) {\n @if (primaryButton(); as primary) {\n <m-button\n [variant]=\"isPrimaryVisible() ? 'primary' : undefined\"\n [disabled]=\"isDisabled(primary.name)\"\n [color]=\"group.color\"\n [config]=\"primary\"\n [name]=\"primary.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n @if (secondaryActions(); as actions) {\n <m-context-menu\n [config]=\"{\n icon: {\n name: config()?.contextMenuIcon ?? 'ellipsis-vertical',\n color: contextMenuIconColor(),\n },\n options: actions,\n }\"\n [inverted]=\"group.inverted\"\n [remote]=\"remote() ?? group.remote\"\n (action)=\"handleMenuAction($event)\"\n />\n }\n } @else {\n @for (button of mergedButtons(); track $index) {\n <m-button\n [variant]=\"isPrimary(button.name) ? 'primary' : undefined\"\n [disabled]=\"isDisabled(button.name)\"\n [color]=\"group.color\"\n [config]=\"button\"\n [name]=\"button.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n }\n </div>\n }\n `,\n imports: [forwardRef(() => ButtonComponent), ContextMenuComponent],\n styleUrls: ['./group.sass'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // The one non-Section that may declare a Size, because a cluster of\n // actions routinely needs to differ from the region holding it (ADR 0008).\n '[style.font-size]': 'sizeLength()',\n },\n providers: [\n provideSizeContext(ButtonGroupComponent),\n ],\n})\nexport class ButtonGroupComponent extends ConfigComponent<ButtonGroup> {\n // to overwrite specific button config\n buttons = input<Record<string, Partial<Button>>>();\n\n // to add names\n names = input<string[]>();\n exclude = input<string[]>();\n vertical = input<boolean | undefined>();\n\n size = input<Size | undefined>();\n\n private readonly parentSize = injectParentSize();\n\n readonly resolvedSize = computed<Size>(() =>\n coerceSize(this.size(), this.config()?.size, this.parentSize?.size())\n );\n protected readonly sizeLength = computed(() =>\n resolveSize(this.resolvedSize())\n );\n\n override subFolder = 'button_groups';\n readonly clicked = output<Button | undefined>();\n\n protected readonly classList = computed(() => {\n const base = deriveGroupClass(this.config());\n if (this.isPrimaryVisible()) {\n return base.includes('is-primary') ? base : `${base} is-primary`.trim();\n }\n return base.replace('is-primary', '').trim();\n });\n\n protected readonly isPrimaryVisible = computed(() => {\n const primary = this.primaryButton();\n if (!primary) return false;\n return !!(this.isPrimary(primary.name) || primary.variant === 'primary');\n });\n\n protected readonly contextMenuIconColor = computed(() => {\n if (!this.isPrimaryVisible()) {\n return undefined;\n }\n const oppColor = this.pallet()?.oppositeColor;\n if (oppColor) {\n return deriveContrastColor(oppColor);\n }\n return 'white';\n });\n\n protected readonly mergedNames = computed(() => {\n const exclude = this.exclude() ?? [];\n const names = mergeUnique<string>(\n this.names() ?? [],\n this.config()?.names ?? []\n ).filter((name) => !exclude.includes(name));\n const buttonNames = new Set(this.mergedButtons().map((b) => b.name));\n return names.filter((name) => !buttonNames.has(name));\n });\n\n protected readonly buttonsResource = rxResource({\n params: () => {\n const config = this.config();\n if (!config?.isContext) return undefined;\n\n const namesFromAsset = config.names ?? [];\n const buttonNamesFromAsset = config.buttons?.map((b) => b.name) ?? [];\n const manualNames = this.names() ?? [];\n\n const allNames = mergeUnique<string>(\n manualNames,\n mergeUnique<string>(namesFromAsset, buttonNamesFromAsset as string[])\n );\n\n if (allNames.length === 0) return undefined;\n\n return { names: allNames, isOne: this.isFromOne() };\n },\n stream: ({ params }) => {\n if (!params) return of([]);\n return forkJoin(\n params.names.map((name) =>\n this.assetStore\n .resolve<Button>('buttons', name, params.isOne)\n .pipe(map((button) => ({ ...button, name })))\n )\n );\n },\n });\n\n protected readonly mergedButtons = computed(() => {\n const config = this.config();\n const buttonOverrides = this.buttons();\n const exclude = this.exclude() ?? [];\n\n // If isContext is true, we use the resolved buttons from the resource\n // Otherwise we use buttons from config, and also include names as partial buttons\n const yamlButtons = (\n config?.isContext\n ? (this.buttonsResource.value() ?? [])\n : [\n ...(config?.buttons ?? []),\n ...(config?.names?.map((name) => ({ name }) as Button) ?? []),\n ]\n ).map((b) => (typeof b === 'string' ? ({ name: b } as Button) : b));\n\n const merged = yamlButtons\n .filter((b) => !b.name || !exclude.includes(b.name))\n .map((button) => ({\n ...button,\n ...(button.name && buttonOverrides?.[button.name]\n ? buttonOverrides[button.name]\n : {}),\n }));\n\n if (!buttonOverrides) {\n return merged;\n }\n\n const yamlNames = new Set(yamlButtons.map((b) => b.name));\n const configNames = new Set(config?.names ?? []);\n const extra = Object.entries(buttonOverrides)\n .filter(\n ([name]) =>\n !yamlNames.has(name) &&\n !configNames.has(name) &&\n !exclude.includes(name)\n )\n .map(([name, override]) => ({ name, ...override }) as Button);\n\n return [...merged, ...extra];\n });\n\n protected readonly primaryButton = computed(() => {\n const buttons = this.mergedButtons();\n const primaryName = this.config()?.primary;\n if (!primaryName) return buttons[0];\n return buttons.find((b) => b.name === primaryName) ?? buttons[0];\n });\n\n protected readonly secondaryActions = computed<MenuItem[][] | undefined>(\n () => {\n const primary = this.primaryButton();\n const secondary = this.mergedButtons().filter((b) => b !== primary);\n\n if (secondary.length === 0) return undefined;\n\n const items: MenuItem[] = secondary.map((b) => ({\n id: b.name ?? '',\n label: b.label ?? b.name ?? '',\n icon: b.icon,\n nav: b.nav,\n link: b.href,\n disabled: b.disabled ? true : undefined,\n }));\n\n return [items];\n }\n );\n\n constructor() {\n super();\n effect(this.updateProperty);\n }\n\n isPrimary(name?: string): true | undefined {\n const config = this.config();\n if (!config?.primary || !name) {\n return undefined;\n }\n return name === config.primary ? true : undefined;\n }\n\n isDisabled(name?: string): boolean | undefined {\n if (!name) return undefined;\n const buttonOverride = this.buttons()?.[name];\n if (typeof buttonOverride?.disabled !== 'undefined') {\n return buttonOverride.disabled;\n }\n const config = this.config();\n if (!config?.disabled) return undefined;\n return config.disabled[name];\n }\n\n protected handleMenuAction(item: MenuItem) {\n const button = this.mergedButtons().find((b) => b.name === item.id);\n this.clicked.emit(button);\n }\n\n private readonly updateProperty = (): void => {\n const updatedConfig = <ButtonGroup>{};\n const vertical = this.vertical();\n if (typeof vertical !== 'undefined') {\n updatedConfig.vertical = vertical;\n }\n this.config.update((prev) => ({\n ...(prev ?? {}),\n ...updatedConfig,\n }));\n };\n\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"magmonium-one-group-B7YeUd1u.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/lib/utils/array.ts","../../../../libs/one/src/lib/shared/ui/button/ui/group/group.ts"],"sourcesContent":["/**\n * Merges multiple arrays and removes duplicates\n * @param arrays - Arrays to merge\n * @returns Merged array with unique values\n */\nexport function mergeUnique<T>(...arrays: T[][]): T[] {\n return [...new Set(arrays.flat())];\n}\n\n/**\n * Merges arrays of objects and removes duplicates by key\n * @param arrays - Arrays to merge\n * @param key - Property to use for uniqueness check\n * @returns Merged array with unique objects\n */\nexport function mergeUniqueBy<T, K extends keyof T>(\n arrays: T[][],\n key: K\n): T[] {\n const map = new Map<T[K], T>();\n\n arrays.flat().forEach((item) => {\n if (!map.has(item[key])) {\n map.set(item[key], item);\n }\n });\n\n return Array.from(map.values());\n}\n\n/**\n * Merges arrays with custom comparator\n */\nexport function mergeUniqueWith<T>(\n arrays: T[][],\n compareFn: (item: T) => unknown\n): T[] {\n const map = new Map<unknown, T>();\n\n arrays.flat().forEach((item) => {\n const key = compareFn(item);\n if (!map.has(key)) {\n map.set(key, item);\n }\n });\n\n return Array.from(map.values());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Button, ButtonGroup } from '../../type/button';\nimport { ButtonComponent } from '../button';\nimport { ConfigComponent } from '../../../../lib/components/config-component';\nimport { mergeUnique } from '../../../../lib/utils/array';\nimport { ContextMenuComponent, MenuItem } from '../../../menu';\nimport { rxResource } from '@angular/core/rxjs-interop';\nimport { forkJoin, map, of } from 'rxjs';\nimport { deriveContrastColor } from '../../../../functions/color/operations';\n\nimport { deriveGroupClass } from '../../lib';\nimport {\n injectParentSize,\n provideSizeContext,\n} from '../../../../config/size-context.token';\nimport { Size } from '../../../../enum/scaling/size';\nimport {\n coerceSize,\n resolveSize,\n} from '../../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-button-group, m-one-button-group',\n template: `\n @if (config(); as group) {\n <div\n class=\"button-group {{ classList() }}\"\n [class.is-context]=\"group.isContext\"\n >\n @if (group.isContext) {\n @if (primaryButton(); as primary) {\n <m-button\n [variant]=\"isPrimaryVisible() ? 'primary' : undefined\"\n [disabled]=\"isDisabled(primary.name)\"\n [color]=\"group.color\"\n [config]=\"primary\"\n [name]=\"primary.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n @if (secondaryActions(); as actions) {\n <m-context-menu\n [config]=\"{\n icon: {\n name: config()?.contextMenuIcon ?? 'ellipsis-vertical',\n color: contextMenuIconColor(),\n },\n options: actions,\n }\"\n [inverted]=\"group.inverted\"\n [remote]=\"remote() ?? group.remote\"\n (action)=\"handleMenuAction($event)\"\n />\n }\n } @else {\n @for (button of mergedButtons(); track $index) {\n <m-button\n [variant]=\"isPrimary(button.name) ? 'primary' : undefined\"\n [disabled]=\"isDisabled(button.name)\"\n [color]=\"group.color\"\n [config]=\"button\"\n [name]=\"button.name\"\n [one]=\"isFromOne()\"\n [remote]=\"remote() ?? group.remote\"\n (clicked)=\"clicked.emit($event)\"\n />\n }\n }\n </div>\n }\n `,\n imports: [forwardRef(() => ButtonComponent), ContextMenuComponent],\n styleUrls: ['./group.sass'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n // The one non-Section that may declare a Size, because a cluster of\n // actions routinely needs to differ from the region holding it (ADR 0008).\n '[style.font-size]': 'sizeLength()',\n },\n providers: [\n provideSizeContext(ButtonGroupComponent),\n ],\n})\nexport class ButtonGroupComponent extends ConfigComponent<ButtonGroup> {\n // to overwrite specific button config\n buttons = input<Record<string, Partial<Button>>>();\n\n // to add names\n names = input<string[]>();\n exclude = input<string[]>();\n vertical = input<boolean | undefined>();\n\n size = input<Size | undefined>();\n\n private readonly parentSize = injectParentSize();\n\n readonly resolvedSize = computed<Size>(() =>\n coerceSize(this.size(), this.config()?.size, this.parentSize?.size())\n );\n protected readonly sizeLength = computed(() =>\n resolveSize(this.resolvedSize())\n );\n\n override subFolder = 'button_groups';\n readonly clicked = output<Button | undefined>();\n\n protected readonly classList = computed(() => {\n const base = deriveGroupClass(this.config());\n if (this.isPrimaryVisible()) {\n return base.includes('is-primary') ? base : `${base} is-primary`.trim();\n }\n return base.replace('is-primary', '').trim();\n });\n\n protected readonly isPrimaryVisible = computed(() => {\n const primary = this.primaryButton();\n if (!primary) return false;\n return !!(this.isPrimary(primary.name) || primary.variant === 'primary');\n });\n\n protected readonly contextMenuIconColor = computed(() => {\n if (!this.isPrimaryVisible()) {\n return undefined;\n }\n const oppColor = this.pallet()?.oppositeColor;\n if (oppColor) {\n return deriveContrastColor(oppColor);\n }\n return 'white';\n });\n\n protected readonly mergedNames = computed(() => {\n const exclude = this.exclude() ?? [];\n const names = mergeUnique<string>(\n this.names() ?? [],\n this.config()?.names ?? []\n ).filter((name) => !exclude.includes(name));\n const buttonNames = new Set(this.mergedButtons().map((b) => b.name));\n return names.filter((name) => !buttonNames.has(name));\n });\n\n protected readonly buttonsResource = rxResource({\n params: () => {\n const config = this.config();\n if (!config?.isContext) return undefined;\n\n const namesFromAsset = config.names ?? [];\n const buttonNamesFromAsset = config.buttons?.map((b) => b.name) ?? [];\n const manualNames = this.names() ?? [];\n\n const allNames = mergeUnique<string>(\n manualNames,\n mergeUnique<string>(namesFromAsset, buttonNamesFromAsset as string[])\n );\n\n if (allNames.length === 0) return undefined;\n\n return { names: allNames, isOne: this.isFromOne() };\n },\n stream: ({ params }) => {\n if (!params) return of([]);\n return forkJoin(\n params.names.map((name) =>\n this.assetStore\n .resolve<Button>('buttons', name, params.isOne)\n .pipe(map((button) => ({ ...button, name })))\n )\n );\n },\n });\n\n protected readonly mergedButtons = computed(() => {\n const config = this.config();\n const buttonOverrides = this.buttons();\n const exclude = this.exclude() ?? [];\n\n // If isContext is true, we use the resolved buttons from the resource\n // Otherwise we use buttons from config, and also include names as partial buttons\n const yamlButtons = (\n config?.isContext\n ? (this.buttonsResource.value() ?? [])\n : [\n ...(config?.buttons ?? []),\n ...(config?.names?.map((name) => ({ name }) as Button) ?? []),\n ]\n ).map((b) => (typeof b === 'string' ? ({ name: b } as Button) : b));\n\n const merged = yamlButtons\n .filter((b) => !b.name || !exclude.includes(b.name))\n .map((button) => ({\n ...button,\n ...(button.name && buttonOverrides?.[button.name]\n ? buttonOverrides[button.name]\n : {}),\n }));\n\n if (!buttonOverrides) {\n return merged;\n }\n\n const yamlNames = new Set(yamlButtons.map((b) => b.name));\n const configNames = new Set(config?.names ?? []);\n const extra = Object.entries(buttonOverrides)\n .filter(\n ([name]) =>\n !yamlNames.has(name) &&\n !configNames.has(name) &&\n !exclude.includes(name)\n )\n .map(([name, override]) => ({ name, ...override }) as Button);\n\n return [...merged, ...extra];\n });\n\n protected readonly primaryButton = computed(() => {\n const buttons = this.mergedButtons();\n const primaryName = this.config()?.primary;\n if (!primaryName) return buttons[0];\n return buttons.find((b) => b.name === primaryName) ?? buttons[0];\n });\n\n protected readonly secondaryActions = computed<MenuItem[][] | undefined>(\n () => {\n const primary = this.primaryButton();\n const secondary = this.mergedButtons().filter((b) => b !== primary);\n\n if (secondary.length === 0) return undefined;\n\n const items: MenuItem[] = secondary.map((b) => ({\n id: b.name ?? '',\n label: b.label ?? b.name ?? '',\n icon: b.icon,\n nav: b.nav,\n link: b.href,\n disabled: b.disabled ? true : undefined,\n }));\n\n return [items];\n }\n );\n\n constructor() {\n super();\n effect(this.updateProperty);\n }\n\n isPrimary(name?: string): true | undefined {\n const config = this.config();\n if (!config?.primary || !name) {\n return undefined;\n }\n return name === config.primary ? true : undefined;\n }\n\n isDisabled(name?: string): boolean | undefined {\n if (!name) return undefined;\n const buttonOverride = this.buttons()?.[name];\n if (typeof buttonOverride?.disabled !== 'undefined') {\n return buttonOverride.disabled;\n }\n const config = this.config();\n if (!config?.disabled) return undefined;\n return config.disabled[name];\n }\n\n protected handleMenuAction(item: MenuItem) {\n const button = this.mergedButtons().find((b) => b.name === item.id);\n this.clicked.emit(button);\n }\n\n private readonly updateProperty = (): void => {\n const updatedConfig = <ButtonGroup>{};\n const vertical = this.vertical();\n if (typeof vertical !== 'undefined') {\n updatedConfig.vertical = vertical;\n }\n this.config.update((prev) => ({\n ...(prev ?? {}),\n ...updatedConfig,\n }));\n };\n\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { i as resolveSize, l as TranslateService } from "./magmonium-one-size-converter-C5fG_dgw.mjs";
2
- import { i as SIZE_CONTEXT, r as IconComponent } from "./magmonium-one-icon-BTPHGpEN.mjs";
3
- import { t as ButtonComponent } from "./magmonium-one-button-BWB3ZKIj.mjs";
1
+ import { i as resolveSize, l as TranslateService } from "./magmonium-one-size-converter-BOBD8nHy.mjs";
2
+ import { a as SIZE_CONTEXT, r as IconComponent } from "./magmonium-one-icon-C3jwzbb2.mjs";
3
+ import { t as ButtonComponent } from "./magmonium-one-button-DZ4wCJgb.mjs";
4
4
  import * as i0 from "@angular/core";
5
5
  import { ChangeDetectionStrategy, Component, computed, inject, input, output } from "@angular/core";
6
6
  var HeaderComponent = class HeaderComponent {
@@ -215,7 +215,8 @@ var HeaderComponent = class HeaderComponent {
215
215
  "size",
216
216
  "one",
217
217
  "baseUrl",
218
- "remote"
218
+ "remote",
219
+ "shadow"
219
220
  ],
220
221
  outputs: ["configChange"]
221
222
  }],
@@ -377,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({
377
378
  });
378
379
  export { HeaderComponent as t };
379
380
 
380
- //# sourceMappingURL=magmonium-one-header-D8CB9CBJ.mjs.map
381
+ //# sourceMappingURL=magmonium-one-header-DUiBhPUP.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"magmonium-one-header-D8CB9CBJ.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/header/ui/header.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { TranslateService } from '../../../services/translate';\nimport { HeaderLevel } from '../type/header';\nimport { ButtonComponent } from '../../button/ui/button';\nimport { IconComponent } from '../../icon';\nimport { Button } from '../../button/type/button';\nimport { SIZE_CONTEXT } from '../../../config/size-context.token';\nimport { resolveSize } from '../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-header',\n imports: [ButtonComponent, IconComponent],\n template: `\n @switch (level()) {\n @case (1) {\n <h1 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h1>\n }\n @case (2) {\n <h2 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h2>\n }\n @case (3) {\n <h3 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h3>\n }\n @case (4) {\n <h4 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h4>\n }\n @case (5) {\n <h5 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h5>\n }\n @case (6) {\n <h6 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h6>\n }\n }\n `,\n styleUrl: './header.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n readonly level = input<HeaderLevel>(3);\n readonly label = input<string | undefined>();\n // Drawn inside the heading rather than beside it. A glyph placed as the\n // heading's sibling has no line box of its own to centre against — it ends\n // up centred on whatever column it sits next to, which is how a Canvas\n // header's icon came to line up with the label slot's drop rect instead of\n // with the label. Inside, the two share one line box at every level.\n readonly icon = input<string | undefined>();\n readonly actionButton = input<string | undefined>();\n // The action Button's accessible name. It renders icon-only, so the label is\n // the only thing a screen reader has to go on — without it the button reads\n // as nothing at all.\n readonly actionLabel = input<string | undefined>();\n // The label is authored text rather than a translation key. Needed for text\n // carrying angle brackets above all: `translate` reads `<...>` as link\n // markup, so a heading naming a MessageVariable — `<$app>` — resolves to\n // nothing at all rather than to itself.\n readonly noTranslate = input<boolean>(false);\n // A message's [MessageVariable] values, the same record `m-text-output`\n // takes: a heading naming `<$count>` is a sentence with a datum in it, and\n // splicing that datum into the key instead would be parsed as a query\n // string (m-one-ui ADR 0066).\n readonly params = input<Record<string, string> | undefined>(undefined);\n readonly actionClick = output<void>();\n\n private readonly translateService = inject(TranslateService);\n private readonly sizeContext = inject(SIZE_CONTEXT, { optional: true });\n\n // The action Button sits inside the heading, whose font-size is the level's\n // own — 2.25rem at h1 — so `em` inheritance would scale the Button to the\n // heading rather than to the Section it belongs to. It reads the Size in\n // force instead, the way Icon does, and lands at the same size as every\n // other Button on that Section (ADR 0008).\n protected readonly actionSize = computed(() =>\n resolveSize(this.sizeContext?.size())\n );\n\n protected readonly actionConfig = computed<Button | undefined>(() => {\n const icon = this.actionButton();\n if (!icon) return undefined;\n return {\n icon,\n label: this.actionLabel(),\n iconOnly: true,\n variant: 'ghost',\n };\n });\n\n // A computed rather than the impure TranslatePipe repeated six times: one\n // lookup per label change instead of one per change-detection tick, and it\n // still repaints when the language or an in-memory translation moves.\n protected readonly text = computed(() =>\n this.noTranslate()\n ? (this.label() ?? '')\n : this.translateService.translate(this.label(), this.params())\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"magmonium-one-header-DUiBhPUP.mjs","names":[],"sources":["../../../../libs/one/src/lib/shared/ui/header/ui/header.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { TranslateService } from '../../../services/translate';\nimport { HeaderLevel } from '../type/header';\nimport { ButtonComponent } from '../../button/ui/button';\nimport { IconComponent } from '../../icon';\nimport { Button } from '../../button/type/button';\nimport { SIZE_CONTEXT } from '../../../config/size-context.token';\nimport { resolveSize } from '../../../functions/size/size-converter';\n\n@Component({\n selector: 'm-header',\n imports: [ButtonComponent, IconComponent],\n template: `\n @switch (level()) {\n @case (1) {\n <h1 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h1>\n }\n @case (2) {\n <h2 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h2>\n }\n @case (3) {\n <h3 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h3>\n }\n @case (4) {\n <h4 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h4>\n }\n @case (5) {\n <h5 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h5>\n }\n @case (6) {\n <h6 class=\"header__heading\">\n @if (icon(); as iconName) {\n <m-icon class=\"header__icon\" [name]=\"iconName\" />\n }\n <span>{{ text() }}</span>\n <ng-content />\n @if (actionConfig(); as action) {\n <m-button class=\"header__action\" [config]=\"action\" [style.--m-button-size]=\"actionSize()\" (clicked)=\"actionClick.emit()\" />\n }\n </h6>\n }\n }\n `,\n styleUrl: './header.sass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HeaderComponent {\n readonly level = input<HeaderLevel>(3);\n readonly label = input<string | undefined>();\n // Drawn inside the heading rather than beside it. A glyph placed as the\n // heading's sibling has no line box of its own to centre against — it ends\n // up centred on whatever column it sits next to, which is how a Canvas\n // header's icon came to line up with the label slot's drop rect instead of\n // with the label. Inside, the two share one line box at every level.\n readonly icon = input<string | undefined>();\n readonly actionButton = input<string | undefined>();\n // The action Button's accessible name. It renders icon-only, so the label is\n // the only thing a screen reader has to go on — without it the button reads\n // as nothing at all.\n readonly actionLabel = input<string | undefined>();\n // The label is authored text rather than a translation key. Needed for text\n // carrying angle brackets above all: `translate` reads `<...>` as link\n // markup, so a heading naming a MessageVariable — `<$app>` — resolves to\n // nothing at all rather than to itself.\n readonly noTranslate = input<boolean>(false);\n // A message's [MessageVariable] values, the same record `m-text-output`\n // takes: a heading naming `<$count>` is a sentence with a datum in it, and\n // splicing that datum into the key instead would be parsed as a query\n // string (m-one-ui ADR 0066).\n readonly params = input<Record<string, string> | undefined>(undefined);\n readonly actionClick = output<void>();\n\n private readonly translateService = inject(TranslateService);\n private readonly sizeContext = inject(SIZE_CONTEXT, { optional: true });\n\n // The action Button sits inside the heading, whose font-size is the level's\n // own — 2.25rem at h1 — so `em` inheritance would scale the Button to the\n // heading rather than to the Section it belongs to. It reads the Size in\n // force instead, the way Icon does, and lands at the same size as every\n // other Button on that Section (ADR 0008).\n protected readonly actionSize = computed(() =>\n resolveSize(this.sizeContext?.size())\n );\n\n protected readonly actionConfig = computed<Button | undefined>(() => {\n const icon = this.actionButton();\n if (!icon) return undefined;\n return {\n icon,\n label: this.actionLabel(),\n iconOnly: true,\n variant: 'ghost',\n };\n });\n\n // A computed rather than the impure TranslatePipe repeated six times: one\n // lookup per label change instead of one per change-detection tick, and it\n // still repaints when the language or an in-memory translation moves.\n protected readonly text = computed(() =>\n this.noTranslate()\n ? (this.label() ?? '')\n : this.translateService.translate(this.label(), this.params())\n );\n}\n"],"mappings":"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"}