iss-ctrl 0.0.22 → 0.0.23

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 (88) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/iss-ctrl-base.mjs +20 -1
  3. package/fesm2022/iss-ctrl-base.mjs.map +1 -1
  4. package/fesm2022/{iss-ctrl-checkbox.field-Dj5EGLUr.mjs → iss-ctrl-checkbox.field-CILXADas.mjs} +25 -29
  5. package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs.map +1 -0
  6. package/fesm2022/iss-ctrl-checkbox.mjs +10 -7
  7. package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -1
  8. package/fesm2022/{iss-ctrl-chips.field-BLLAjBbP.mjs → iss-ctrl-chips.field-445Ds3V7.mjs} +2 -2
  9. package/fesm2022/{iss-ctrl-chips.field-BLLAjBbP.mjs.map → iss-ctrl-chips.field-445Ds3V7.mjs.map} +1 -1
  10. package/fesm2022/{iss-ctrl-date-picker.field-BSpXukpO.mjs → iss-ctrl-date-picker.field-Djhh1FsR.mjs} +2 -2
  11. package/fesm2022/{iss-ctrl-date-picker.field-BSpXukpO.mjs.map → iss-ctrl-date-picker.field-Djhh1FsR.mjs.map} +1 -1
  12. package/fesm2022/{iss-ctrl-date-range-picker.field-CjNHU1RW.mjs → iss-ctrl-date-range-picker.field-Dv636SAm.mjs} +2 -2
  13. package/fesm2022/{iss-ctrl-date-range-picker.field-CjNHU1RW.mjs.map → iss-ctrl-date-range-picker.field-Dv636SAm.mjs.map} +1 -1
  14. package/fesm2022/{iss-ctrl-datetime-picker.field-DGMY9PaU.mjs → iss-ctrl-datetime-picker.field-DldY8vke.mjs} +2 -2
  15. package/fesm2022/{iss-ctrl-datetime-picker.field-DGMY9PaU.mjs.map → iss-ctrl-datetime-picker.field-DldY8vke.mjs.map} +1 -1
  16. package/fesm2022/{iss-ctrl-select.field-DoU4G_8t.mjs → iss-ctrl-dropdownlist.field-DikBAtc_.mjs} +21 -21
  17. package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs.map +1 -0
  18. package/fesm2022/{iss-ctrl-select.mjs → iss-ctrl-dropdownlist.mjs} +36 -25
  19. package/fesm2022/iss-ctrl-dropdownlist.mjs.map +1 -0
  20. package/fesm2022/{iss-ctrl-select.viewer-Dv9M-lG-.mjs → iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs} +7 -7
  21. package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs.map +1 -0
  22. package/fesm2022/{iss-ctrl-file-picker.field-CbepZaX6.mjs → iss-ctrl-file-picker.field-BMZaJxvj.mjs} +2 -2
  23. package/fesm2022/{iss-ctrl-file-picker.field-CbepZaX6.mjs.map → iss-ctrl-file-picker.field-BMZaJxvj.mjs.map} +1 -1
  24. package/fesm2022/iss-ctrl-file-picker.mjs +3 -1
  25. package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -1
  26. package/fesm2022/{iss-ctrl-input.field-Ctlf3OCN.mjs → iss-ctrl-input.field-BiwBFYx3.mjs} +2 -2
  27. package/fesm2022/{iss-ctrl-input.field-Ctlf3OCN.mjs.map → iss-ctrl-input.field-BiwBFYx3.mjs.map} +1 -1
  28. package/fesm2022/{iss-ctrl-iss-ctrl-DvnkwSMG.mjs → iss-ctrl-iss-ctrl-BG-QWWdq.mjs} +51 -70
  29. package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs.map +1 -0
  30. package/fesm2022/{iss-ctrl-load-event-CuZ7pMjk.mjs → iss-ctrl-load-event-T4L3k9XO.mjs} +3 -3
  31. package/fesm2022/{iss-ctrl-load-event-CuZ7pMjk.mjs.map → iss-ctrl-load-event-T4L3k9XO.mjs.map} +1 -1
  32. package/fesm2022/{iss-ctrl-load-options-event-B10rhdqh.mjs → iss-ctrl-load-options-event-tG258cbP.mjs} +3 -3
  33. package/fesm2022/{iss-ctrl-load-options-event-B10rhdqh.mjs.map → iss-ctrl-load-options-event-tG258cbP.mjs.map} +1 -1
  34. package/fesm2022/{iss-ctrl-load-value-event-C-aRgKLx.mjs → iss-ctrl-load-value-event--7zt90Dl.mjs} +3 -3
  35. package/fesm2022/{iss-ctrl-load-value-event-C-aRgKLx.mjs.map → iss-ctrl-load-value-event--7zt90Dl.mjs.map} +1 -1
  36. package/fesm2022/{iss-ctrl-mobile.field-DXVYT3q-.mjs → iss-ctrl-mobile.field-DLccnWKX.mjs} +2 -2
  37. package/fesm2022/{iss-ctrl-mobile.field-DXVYT3q-.mjs.map → iss-ctrl-mobile.field-DLccnWKX.mjs.map} +1 -1
  38. package/fesm2022/{iss-ctrl-note.field-C8X9-mgD.mjs → iss-ctrl-note.field-CT1wVmfF.mjs} +2 -2
  39. package/fesm2022/{iss-ctrl-note.field-C8X9-mgD.mjs.map → iss-ctrl-note.field-CT1wVmfF.mjs.map} +1 -1
  40. package/fesm2022/{iss-ctrl-plate.field-aI81tAOV.mjs → iss-ctrl-plate.field-CQQY8rnE.mjs} +2 -2
  41. package/fesm2022/{iss-ctrl-plate.field-aI81tAOV.mjs.map → iss-ctrl-plate.field-CQQY8rnE.mjs.map} +1 -1
  42. package/fesm2022/iss-ctrl-plate.mjs +3 -1
  43. package/fesm2022/iss-ctrl-plate.mjs.map +1 -1
  44. package/fesm2022/{iss-ctrl-radio.field-B_JjPIlb.mjs → iss-ctrl-radio.field-Dp5D-AXQ.mjs} +11 -19
  45. package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs.map +1 -0
  46. package/fesm2022/iss-ctrl-radio.mjs +9 -6
  47. package/fesm2022/iss-ctrl-radio.mjs.map +1 -1
  48. package/fesm2022/{iss-ctrl-replace-api-keys-DLnagkOr.mjs → iss-ctrl-replace-api-keys-COUv4Kin.mjs} +2 -2
  49. package/fesm2022/{iss-ctrl-replace-api-keys-DLnagkOr.mjs.map → iss-ctrl-replace-api-keys-COUv4Kin.mjs.map} +1 -1
  50. package/fesm2022/{iss-ctrl-set-value-event-Dhw0Vj5J.mjs → iss-ctrl-set-value-event-D0-_qIyS.mjs} +2 -2
  51. package/fesm2022/{iss-ctrl-set-value-event-Dhw0Vj5J.mjs.map → iss-ctrl-set-value-event-D0-_qIyS.mjs.map} +1 -1
  52. package/fesm2022/{iss-ctrl-slide-toggle.field-TVVbAr6p.mjs → iss-ctrl-slide-toggle.field-vCJHOiSG.mjs} +2 -2
  53. package/fesm2022/{iss-ctrl-slide-toggle.field-TVVbAr6p.mjs.map → iss-ctrl-slide-toggle.field-vCJHOiSG.mjs.map} +1 -1
  54. package/fesm2022/iss-ctrl-slide-toggle.mjs +5 -11
  55. package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -1
  56. package/fesm2022/{iss-ctrl-table.field-E0r9w0os.mjs → iss-ctrl-table.field-DdFjH-D8.mjs} +2 -2
  57. package/fesm2022/{iss-ctrl-table.field-E0r9w0os.mjs.map → iss-ctrl-table.field-DdFjH-D8.mjs.map} +1 -1
  58. package/fesm2022/{iss-ctrl-textarea.field-CmHPDpk-.mjs → iss-ctrl-textarea.field-Dqhhu2m4.mjs} +2 -2
  59. package/fesm2022/{iss-ctrl-textarea.field-CmHPDpk-.mjs.map → iss-ctrl-textarea.field-Dqhhu2m4.mjs.map} +1 -1
  60. package/fesm2022/{iss-ctrl-time-picker.field-Cb0I5Ut1.mjs → iss-ctrl-time-picker.field-CdmxRiH8.mjs} +2 -2
  61. package/fesm2022/{iss-ctrl-time-picker.field-Cb0I5Ut1.mjs.map → iss-ctrl-time-picker.field-CdmxRiH8.mjs.map} +1 -1
  62. package/fesm2022/{iss-ctrl-toggle-button.field-Bj8WrkB-.mjs → iss-ctrl-toggle-button.field-rAT7dVFC.mjs} +39 -43
  63. package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs.map +1 -0
  64. package/fesm2022/iss-ctrl-toggle-button.mjs +9 -7
  65. package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -1
  66. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs} +2 -2
  67. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs.map → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs.map} +1 -1
  68. package/fesm2022/{iss-ctrl-user-picker.field-BIzB5ZX6.mjs → iss-ctrl-user-picker.field-DpmYCfpD.mjs} +10 -10
  69. package/fesm2022/iss-ctrl-user-picker.field-DpmYCfpD.mjs.map +1 -0
  70. package/fesm2022/iss-ctrl.mjs +1 -1
  71. package/package.json +5 -5
  72. package/types/iss-ctrl-base.d.ts +15 -3
  73. package/types/iss-ctrl-checkbox.d.ts +4 -3
  74. package/types/{iss-ctrl-select.d.ts → iss-ctrl-dropdownlist.d.ts} +11 -8
  75. package/types/iss-ctrl-file-picker.d.ts +2 -2
  76. package/types/iss-ctrl-plate.d.ts +2 -2
  77. package/types/iss-ctrl-radio.d.ts +3 -3
  78. package/types/iss-ctrl-slide-toggle.d.ts +2 -2
  79. package/types/iss-ctrl-toggle-button.d.ts +3 -3
  80. package/types/iss-ctrl.d.ts +5 -17
  81. package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs.map +0 -1
  82. package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs.map +0 -1
  83. package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs.map +0 -1
  84. package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs.map +0 -1
  85. package/fesm2022/iss-ctrl-select.mjs.map +0 -1
  86. package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs.map +0 -1
  87. package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs.map +0 -1
  88. package/fesm2022/iss-ctrl-user-picker.field-BIzB5ZX6.mjs.map +0 -1
@@ -41,7 +41,7 @@ const PLATE_LETTERS = [
41
41
  * ### Inherited from {@link ControlBase}
42
42
  * `formControlName` · `readonly` · `className` · `(onChange)`
43
43
  *
44
- * Does not project a label the field label is rendered by the wrapping `iss-field-*`.
44
+ * Projects a `<label>` above the control the wrapping `iss-field-*` passes the field label in that way.
45
45
  */
46
46
  class PlateControl extends ControlBase {
47
47
  numbersAr = signal(Array(4).fill(""), ...(ngDevMode ? [{ debugName: "numbersAr" }] : /* istanbul ignore next */ []));
@@ -266,6 +266,7 @@ class PlateControl extends ControlBase {
266
266
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: PlateControl, isStandalone: true, selector: "iss-ctrl-plate-number", providers: [
267
267
  { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }
268
268
  ], usesInheritance: true, ngImport: i0, template: `
269
+ <ng-content select="label"></ng-content>
269
270
  <div class="plate-container">
270
271
  <div class="section numbers-section">
271
272
  <div class="digit-row">
@@ -376,6 +377,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
376
377
  ], providers: [
377
378
  { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }
378
379
  ], template: `
380
+ <ng-content select="label"></ng-content>
379
381
  <div class="plate-container">
380
382
  <div class="section numbers-section">
381
383
  <div class="digit-row">
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-plate.mjs","sources":["../../../projects/iss/plate/src/plate-letters.const.ts","../../../projects/iss/plate/src/plate.control.ts","../../../projects/iss/plate/src/public-api.ts","../../../projects/iss/plate/src/iss-ctrl-plate.ts"],"sourcesContent":["import { PlateLetter } from \"./plate-letter\";\r\n\r\nexport const PLATE_LETTERS: PlateLetter[] = [\r\n {label: {ar: \"أ\", en: \"A\"}, value: \"A\"},\r\n {label: {ar: \"ب\", en: \"B\"}, value: \"B\"},\r\n {label: {ar: \"ح\", en: \"J\"}, value: \"J\"},\r\n {label: {ar: \"د\", en: \"D\"}, value: \"D\"},\r\n {label: {ar: \"ر\", en: \"R\"}, value: \"R\"},\r\n {label: {ar: \"س\", en: \"S\"}, value: \"S\"},\r\n {label: {ar: \"ص\", en: \"X\"}, value: \"X\"},\r\n {label: {ar: \"ط\", en: \"T\"}, value: \"T\"},\r\n {label: {ar: \"ع\", en: \"E\"}, value: \"E\"},\r\n {label: {ar: \"ق\", en: \"G\"}, value: \"G\"},\r\n {label: {ar: \"ك\", en: \"K\"}, value: \"K\"},\r\n {label: {ar: \"ل\", en: \"L\"}, value: \"L\"},\r\n {label: {ar: \"م\", en: \"Z\"}, value: \"Z\"},\r\n {label: {ar: \"ن\", en: \"N\"}, value: \"N\"},\r\n {label: {ar: \"هـ\", en: \"H\"}, value: \"H\"},\r\n {label: {ar: \"و\", en: \"U\"}, value: \"U\"},\r\n {label: {ar: \"ي\", en: \"V\"}, value: \"V\"}\r\n];\r\n","import { Component, ElementRef, inject, signal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { ControlBase } from \"iss-ctrl/base\";\nimport { PLATE_LETTERS } from \"./plate-letters.const\";\n\n/**\n * `<iss-ctrl-plate-number>` — Saudi vehicle plate, entered as digits and letters in both\n * Arabic and English.\n *\n * Typing into one script fills the matching cell in the other automatically, and letters are\n * validated against the allowed plate alphabet.\n *\n * @example\n * ```html\n * <iss-ctrl-plate-number formControlName=\"plate\" [readonly]=\"false\"/>\n * ```\n *\n * ### Own inputs\n * None — the control is configured entirely through the inherited properties.\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.\n */\n@Component({\n selector: \"iss-ctrl-plate-number\",\n imports: [\n ReactiveFormsModule\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }\n ],\n template: `\n <div class=\"plate-container\">\n <div class=\"section numbers-section\">\n <div class=\"digit-row\">\n @for (num of numbersAr(); track $index) {\n <input\n type=\"text\"\n class=\"plate-input number-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'num-ar-' + $index\"\n [value]=\"num\"\n [readonly]=\"readonly()\"\n placeholder=\"١\"\n (keydown)=\"preventNonDigits($event, 'ar')\"\n (keyup)=\"preventNonDigits($event, 'ar')\"\n (input)=\"onNumberInput($index, $event, 'ar')\"\n />\n }\n </div>\n\n <div class=\"digit-row\">\n @for (num of numbersEn(); track $index) {\n <input\n type=\"text\"\n class=\"plate-input number-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'num-en-' + $index\"\n [value]=\"num\"\n [readonly]=\"readonly()\"\n placeholder=\"1\"\n (keydown)=\"preventNonDigits($event, 'en')\"\n (keyup)=\"preventNonDigits($event, 'en')\"\n (input)=\"onNumberInput($index, $event, 'en')\"\n />\n }\n </div>\n </div>\n\n <div class=\"section emblem-section\">\n <svg class=\"emblem-svg\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\n fill=\"#1D252D\"\n />\n </svg>\n </div>\n\n <div class=\"section letters-section\">\n <div class=\"arabic-row\" dir=\"rtl\">\n @for (letter of lettersAr(); track $index) {\n <div class=\"input-wrapper\">\n <input\n type=\"text\"\n class=\"plate-input letter-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'let-ar-' + $index\"\n [class.invalid]=\"letterErrors()[$index]\"\n [value]=\"letter\"\n [readonly]=\"readonly()\"\n placeholder=\"س\"\n (input)=\"onLetterInput($index, $event, 'ar')\"\n />\n @if (letterErrors()[$index]) {\n <span class=\"error-tooltip\">Invalid</span>\n }\n </div>\n }\n </div>\n\n <div class=\"english-row\" dir=\"rtl\">\n @for (letter of lettersEn(); track $index) {\n <div class=\"input-wrapper\">\n <input\n type=\"text\"\n class=\"plate-input letter-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'let-en-' + $index\"\n [class.invalid]=\"letterErrors()[$index]\"\n [value]=\"letter\"\n [readonly]=\"readonly()\"\n placeholder=\"S\"\n (input)=\"onLetterInput($index, $event, 'en')\"\n />\n </div>\n }\n </div>\n </div>\n\n <div class=\"ksa-strip\">\n <svg class=\"mini-emblem\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\n fill=\"#1D252D\"\n />\n </svg>\n <span class=\"ksa-text\">KSA</span>\n </div>\n </div>\n `,\n styles: `\n .plate-container {\n width: 600px;\n height: 130px;\n border: 4px solid #1D252D;\n border-radius: 10px;\n background: white;\n display: flex;\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n position: relative;\n }\n\n /* General Section Styling */\n .section {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n /* Left Section: Numbers/Asterisks */\n .numbers-section {\n flex: 2;\n padding: 0 10px;\n }\n\n .digit-row {\n display: flex;\n justify-content: space-between;\n width: 80%;\n font-size: 38px;\n line-height: 1;\n color: #1D252D;\n margin: 2px 0;\n }\n\n /* Middle Section: Emblem */\n .emblem-section {\n flex: 1.2;\n padding: 10px;\n }\n\n .emblem-svg {\n width: 100%;\n height: 100%;\n max-height: 90px;\n }\n\n /* Right Section: Letters */\n .letters-section {\n flex: 1.8;\n border-right: 2px solid #1D252D;\n padding: 0 10px;\n }\n\n .arabic-row {\n font-family: 'Noto Sans Arabic', sans-serif;\n font-size: 32px;\n display: flex;\n justify-content: space-around;\n width: 100%;\n margin-bottom: 5px;\n color: #1D252D;\n }\n\n .english-row {\n font-size: 38px;\n display: flex;\n justify-content: space-around;\n width: 100%;\n color: #1D252D;\n }\n\n /* Far Right: KSA Strip */\n .ksa-strip {\n width: 50px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n background-color: #fff; /* or specific reflective white */\n }\n\n .mini-emblem {\n width: 25px;\n height: auto;\n }\n\n .ksa-text {\n writing-mode: vertical-rl;\n text-orientation: upright;\n font-weight: 900;\n font-size: 16px;\n letter-spacing: 2px;\n color: #1D252D;\n margin-top: auto;\n margin-bottom: 5px;\n }\n\n .plate-input {\n background: transparent;\n border: none;\n text-align: center;\n font-family: inherit;\n font-size: inherit;\n font-weight: bold;\n color: #1D252D;\n width: 100%; /* Fill the flex/grid item */\n padding: 0;\n margin: 0;\n outline: none; /* Remove blue outline on focus */\n }\n\n /* Optional: Add a subtle underline or color change when user clicks the input */\n .plate-input:focus {\n border-bottom: 2px solid #1D252D;\n }\n\n /* Adjusting the container flex settings to ensure inputs fit */\n .digit-row, .arabic-row, .english-row {\n display: flex;\n justify-content: space-between;\n width: 100%;\n }\n\n /* Specific sizing for numbers to ensure they match plate proportions */\n .number-input {\n /* Adjust width based on your container size, roughly 20-25% */\n flex: 1;\n }\n\n /* Specific sizing for letters */\n .letter-input {\n flex: 1;\n }\n\n /* Placeholder styling to look like a ghost plate */\n .plate-input::placeholder {\n color: #ccc;\n opacity: 1;\n }\n\n .input-wrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n }\n\n .error-tooltip {\n position: absolute;\n bottom: -15px;\n font-size: 10px;\n color: red;\n white-space: nowrap;\n }\n\n .plate-input.invalid {\n color: red;\n }\n `,\n})\nexport class PlateControl extends ControlBase {\n numbersAr = signal<string[]>(Array(4).fill(\"\"));\n numbersEn = signal<string[]>(Array(4).fill(\"\"));\n lettersAr = signal<string[]>(Array(3).fill(\"\"));\n lettersEn = signal<string[]>(Array(3).fill(\"\"));\n letterErrors = signal<boolean[]>(Array(3).fill(false));\n #host: ElementRef<HTMLElement> = inject(ElementRef);\n\n override writeValue(value: string | null) {\n if (!value) {\n this.#resetPlate();\n return;\n }\n\n const parts = value.split(\"-\");\n const letters = parts[0]?.split(\"\") || [];\n const numbers = parts[1]?.split(\"\") || [];\n\n // Initialize letters\n const lAr: string[] = [];\n const lEn: string[] = [];\n for (let i = 0; i < 3; i++) {\n const char = letters[i] || \"\";\n if (char) {\n const plateLetter = PLATE_LETTERS.find(l => l.value === char || l.label.en === char || l.label.ar === char);\n if (plateLetter) {\n lAr.push(plateLetter.label.ar);\n lEn.push(plateLetter.label.en);\n } else {\n lAr.push(\"\");\n lEn.push(\"\");\n }\n } else {\n lAr.push(\"\");\n lEn.push(\"\");\n }\n }\n this.lettersAr.set(lAr);\n this.lettersEn.set(lEn);\n\n // Initialize numbers\n const nAr: string[] = [];\n const nEn: string[] = [];\n for (let i = 0; i < 4; i++) {\n const char = numbers[i] || \"\";\n if (char) {\n nAr.push(this.convertDigit(char, \"ar\"));\n nEn.push(this.convertDigit(char, \"en\"));\n } else {\n nAr.push(\"\");\n nEn.push(\"\");\n }\n }\n this.numbersAr.set(nAr);\n this.numbersEn.set(nEn);\n }\n\n onNumberInput(index: number, event: Event, lang: \"ar\" | \"en\") {\n if (this.readonly()) {\n return;\n }\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Allow only numbers\n if (!/^[0-9\\u0660-\\u0669]*$/.test(value)) {\n return;\n }\n\n input.value = lang === \"ar\" ? this.numbersAr()[index] : this.numbersEn()[index];\n\n // Take only the last character if multiple characters are entered\n if (value.length > 1) {\n value = value.slice(-1);\n input.value = value;\n }\n\n if (!value) {\n const newAr = [...this.numbersAr()];\n const newEn = [...this.numbersEn()];\n newAr[index] = \"\";\n newEn[index] = \"\";\n this.numbersAr.set(newAr);\n this.numbersEn.set(newEn);\n this.emitPlate();\n return;\n }\n\n const arDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"];\n const enDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\n let digitIndex = enDigits.indexOf(value);\n\n if (digitIndex === -1) {\n digitIndex = arDigits.indexOf(value);\n }\n\n const newAr = [...this.numbersAr()];\n const newEn = [...this.numbersEn()];\n\n if (digitIndex !== -1) {\n newAr[index] = arDigits[digitIndex];\n newEn[index] = enDigits[digitIndex];\n\n // Focus next\n if (index < 3) {\n this.focusInput(`num-${lang}-${index + 1}`);\n } else {\n this.focusInput(`let-${lang}-0`);\n }\n } else {\n // Should not happen due to regex check, but safe fallback\n newAr[index] = \"\";\n newEn[index] = \"\";\n }\n\n this.numbersAr.set(newAr);\n this.numbersEn.set(newEn);\n this.emitPlate();\n }\n\n onLetterInput(index: number, event: Event, lang: \"ar\" | \"en\") {\n if (this.readonly()) {\n return;\n }\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n if (!value) {\n const newAr = [...this.lettersAr()];\n const newEn = [...this.lettersEn()];\n const newErrors = [...this.letterErrors()];\n newAr[index] = \"\";\n newEn[index] = \"\";\n newErrors[index] = false;\n this.lettersAr.set(newAr);\n this.lettersEn.set(newEn);\n this.letterErrors.set(newErrors);\n this.emitPlate();\n return;\n }\n\n // Take only the last character\n if (value.length > 1) {\n value = value.slice(-1);\n input.value = value;\n }\n\n const plateLetter = PLATE_LETTERS.find(l =>\n l.value === value.toUpperCase() ||\n l.label.en === value.toUpperCase() ||\n l.label.ar === value\n );\n\n const newAr = [...this.lettersAr()];\n const newEn = [...this.lettersEn()];\n const newErrors = [...this.letterErrors()];\n\n if (plateLetter) {\n newAr[index] = plateLetter.label.ar;\n newEn[index] = plateLetter.label.en;\n newErrors[index] = false;\n\n // Focus next\n if (index < 2) {\n this.focusInput(`let-${lang}-${index + 1}`);\n } else {\n this.focusInput(`num-${lang}-0`);\n }\n } else {\n // Show error\n if (lang === \"ar\") {\n newAr[index] = value;\n newEn[index] = \"\"; // Or keep previous?\n } else {\n newEn[index] = value;\n newAr[index] = \"\";\n }\n newErrors[index] = true;\n }\n\n this.lettersAr.set(newAr);\n this.lettersEn.set(newEn);\n this.letterErrors.set(newErrors);\n this.emitPlate();\n }\n\n protected preventNonDigits($event: KeyboardEvent, ar: string) {\n if ($event.key.length === 1 && !/^[0-9\\u0660-\\u0669]$/.test($event.key)) {\n $event.preventDefault();\n }\n }\n\n #resetPlate() {\n this.numbersAr.set(Array(4).fill(\"\"));\n this.numbersEn.set(Array(4).fill(\"\"));\n this.lettersAr.set(Array(3).fill(\"\"));\n this.lettersEn.set(Array(3).fill(\"\"));\n this.letterErrors.set(Array(3).fill(false));\n this.ctrl.setValue(null, { emitEvent: false });\n }\n\n private emitPlate() {\n this.markAsTouched();\n this.emitValue(this.stringifyPlate());\n }\n\n private stringifyPlate(): string | null {\n // lettersEn holds PlateLetter.label.en, which equals PlateLetter.value for every entry,\n // so this round-trips through writeValue and the viewer. Invalid letters are held in the\n // opposite-language row and serialize as empty.\n const letters: string = this.lettersEn().join(\"\");\n const numbers: string = this.numbersEn().join(\"\");\n if (!letters && !numbers) {\n return null;\n }\n return `${letters}-${numbers}`;\n }\n\n private focusInput(id: string) {\n setTimeout(() => {\n // scoped to this host: several plates can be on the same page\n const element = this.#host.nativeElement.querySelector(\"[data-plate-input=\\\"\" + id + \"\\\"]\") as HTMLInputElement | null;\n if (element) {\n element.focus();\n // Optional: Select text so user can overwrite easily if they cycle back\n element.select();\n }\n }, 0);\n }\n\n private convertDigit(digit: string, toLang: \"ar\" | \"en\"): string {\n const arDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"];\n const enDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\n if (toLang === \"ar\") {\n const index = enDigits.indexOf(digit);\n return index !== -1 ? arDigits[index] : digit;\n } else {\n const index = arDigits.indexOf(digit);\n return index !== -1 ? enDigits[index] : digit;\n }\n }\n}\n","// The plate control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./plate-letter\";\nexport * from \"./plate-letters.const\";\nexport * from \"./plate.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAEO,MAAM,aAAa,GAAkB;AAC1C,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACxC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG,EAAC;AACvC,IAAA,EAAC,KAAK,EAAE,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,GAAG;;;ACdxC;;;;;;;;;;;;;;;;;;;AAmBG;AAqRG,MAAO,YAAa,SAAQ,WAAW,CAAA;AAC3C,IAAA,SAAS,GAAG,MAAM,CAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,gFAAC;AAC/C,IAAA,SAAS,GAAG,MAAM,CAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,gFAAC;AAC/C,IAAA,SAAS,GAAG,MAAM,CAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,gFAAC;AAC/C,IAAA,SAAS,GAAG,MAAM,CAAW,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,gFAAC;AAC/C,IAAA,YAAY,GAAG,MAAM,CAAY,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,mFAAC;AACtD,IAAA,KAAK,GAA4B,MAAM,CAAC,UAAU,CAAC;AAE1C,IAAA,UAAU,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,WAAW,EAAE;YAClB;QACF;QAEA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;;QAGzC,MAAM,GAAG,GAAa,EAAE;QACxB,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YAC7B,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;gBAC3G,IAAI,WAAW,EAAE;oBACf,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC;qBAAO;AACL,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACZ,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACd;YACF;iBAAO;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACZ,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;;QAGvB,MAAM,GAAG,GAAa,EAAE;QACxB,MAAM,GAAG,GAAa,EAAE;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YAC7B,IAAI,IAAI,EAAE;AACR,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACvC,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC;iBAAO;AACL,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACZ,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACd;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IACzB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAE,KAAY,EAAE,IAAiB,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;;QAGvB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACxC;QACF;QAEA,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC;;AAG/E,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,KAAK,CAAC,KAAK,GAAG,KAAK;QACrB;QAEA,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AACnC,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;QAEA,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACnE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAEnE,IAAI,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAExC,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;AACrB,YAAA,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC;QAEA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAEnC,QAAA,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE;YACrB,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;YACnC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC;;AAGnC,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,IAAI,CAAC,UAAU,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA,CAAE,CAAC;YAC7C;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAA,EAAA,CAAI,CAAC;YAClC;QACF;aAAO;;AAEL,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;QACnB;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA,IAAA,aAAa,CAAC,KAAa,EAAE,KAAY,EAAE,IAAiB,EAAA;AAC1D,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;AACA,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B;AAC9C,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK;QAEvB,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1C,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;AACjB,YAAA,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YAChC,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;;AAGA,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,KAAK,CAAC,KAAK,GAAG,KAAK;QACrB;AAEA,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,IACtC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE;YAC/B,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AAClC,YAAA,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CACrB;QAED,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1C,IAAI,WAAW,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE;YACnC,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE;AACnC,YAAA,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;;AAGxB,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACb,IAAI,CAAC,UAAU,CAAC,CAAA,IAAA,EAAO,IAAI,CAAA,CAAA,EAAI,KAAK,GAAG,CAAC,CAAA,CAAE,CAAC;YAC7C;iBAAO;AACL,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAA,EAAA,CAAI,CAAC;YAClC;QACF;aAAO;;AAEL,YAAA,IAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;AACpB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YACpB;iBAAO;AACL,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK;AACpB,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACnB;AACA,YAAA,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI;QACzB;AAEA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE;IAClB;IAEU,gBAAgB,CAAC,MAAqB,EAAE,EAAU,EAAA;AAC1D,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvE,MAAM,CAAC,cAAc,EAAE;QACzB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChD;IAEQ,SAAS,GAAA;QACf,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IACvC;IAEQ,cAAc,GAAA;;;;QAIpB,MAAM,OAAO,GAAW,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,OAAO,GAAW,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,OAAO,EAAE;IAChC;AAEQ,IAAA,UAAU,CAAC,EAAU,EAAA;QAC3B,UAAU,CAAC,MAAK;;AAEd,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,sBAAsB,GAAG,EAAE,GAAG,KAAK,CAA4B;YACtH,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,KAAK,EAAE;;gBAEf,OAAO,CAAC,MAAM,EAAE;YAClB;QACF,CAAC,EAAE,CAAC,CAAC;IACP;IAEQ,YAAY,CAAC,KAAa,EAAE,MAAmB,EAAA;QACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QACnE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAEnE,QAAA,IAAI,MAAM,KAAK,IAAI,EAAE;YACnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,YAAA,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK;QAC/C;aAAO;YACL,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,YAAA,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK;QAC/C;IACF;uGAlPW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EA/QZ;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI;SACrE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0vDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3GC,mBAAmB,EAAA,CAAA,EAAA,CAAA;;2FAiRV,YAAY,EAAA,UAAA,EAAA,CAAA;kBApRxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB;wBACP;qBACD,EAAA,SAAA,EACU;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,cAAc,EAAE,KAAK,EAAE,IAAI;qBACrE,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0vDAAA,CAAA,EAAA;;;ACvIH;AACA;;ACDA;;AAEG;;;;"}
1
+ {"version":3,"file":"iss-ctrl-plate.mjs","sources":["../../../projects/iss/plate/src/plate-letters.const.ts","../../../projects/iss/plate/src/plate.control.ts","../../../projects/iss/plate/src/public-api.ts","../../../projects/iss/plate/src/iss-ctrl-plate.ts"],"sourcesContent":["import { PlateLetter } from \"./plate-letter\";\r\n\r\nexport const PLATE_LETTERS: PlateLetter[] = [\r\n {label: {ar: \"أ\", en: \"A\"}, value: \"A\"},\r\n {label: {ar: \"ب\", en: \"B\"}, value: \"B\"},\r\n {label: {ar: \"ح\", en: \"J\"}, value: \"J\"},\r\n {label: {ar: \"د\", en: \"D\"}, value: \"D\"},\r\n {label: {ar: \"ر\", en: \"R\"}, value: \"R\"},\r\n {label: {ar: \"س\", en: \"S\"}, value: \"S\"},\r\n {label: {ar: \"ص\", en: \"X\"}, value: \"X\"},\r\n {label: {ar: \"ط\", en: \"T\"}, value: \"T\"},\r\n {label: {ar: \"ع\", en: \"E\"}, value: \"E\"},\r\n {label: {ar: \"ق\", en: \"G\"}, value: \"G\"},\r\n {label: {ar: \"ك\", en: \"K\"}, value: \"K\"},\r\n {label: {ar: \"ل\", en: \"L\"}, value: \"L\"},\r\n {label: {ar: \"م\", en: \"Z\"}, value: \"Z\"},\r\n {label: {ar: \"ن\", en: \"N\"}, value: \"N\"},\r\n {label: {ar: \"هـ\", en: \"H\"}, value: \"H\"},\r\n {label: {ar: \"و\", en: \"U\"}, value: \"U\"},\r\n {label: {ar: \"ي\", en: \"V\"}, value: \"V\"}\r\n];\r\n","import { Component, ElementRef, inject, signal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { ControlBase } from \"iss-ctrl/base\";\nimport { PLATE_LETTERS } from \"./plate-letters.const\";\n\n/**\n * `<iss-ctrl-plate-number>` — Saudi vehicle plate, entered as digits and letters in both\n * Arabic and English.\n *\n * Typing into one script fills the matching cell in the other automatically, and letters are\n * validated against the allowed plate alphabet.\n *\n * @example\n * ```html\n * <iss-ctrl-plate-number formControlName=\"plate\" [readonly]=\"false\"/>\n * ```\n *\n * ### Own inputs\n * None — the control is configured entirely through the inherited properties.\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.\n */\n@Component({\n selector: \"iss-ctrl-plate-number\",\n imports: [\n ReactiveFormsModule\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: PlateControl, multi: true }\n ],\n template: `\n <ng-content select=\"label\"></ng-content>\n <div class=\"plate-container\">\n <div class=\"section numbers-section\">\n <div class=\"digit-row\">\n @for (num of numbersAr(); track $index) {\n <input\n type=\"text\"\n class=\"plate-input number-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'num-ar-' + $index\"\n [value]=\"num\"\n [readonly]=\"readonly()\"\n placeholder=\"١\"\n (keydown)=\"preventNonDigits($event, 'ar')\"\n (keyup)=\"preventNonDigits($event, 'ar')\"\n (input)=\"onNumberInput($index, $event, 'ar')\"\n />\n }\n </div>\n\n <div class=\"digit-row\">\n @for (num of numbersEn(); track $index) {\n <input\n type=\"text\"\n class=\"plate-input number-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'num-en-' + $index\"\n [value]=\"num\"\n [readonly]=\"readonly()\"\n placeholder=\"1\"\n (keydown)=\"preventNonDigits($event, 'en')\"\n (keyup)=\"preventNonDigits($event, 'en')\"\n (input)=\"onNumberInput($index, $event, 'en')\"\n />\n }\n </div>\n </div>\n\n <div class=\"section emblem-section\">\n <svg class=\"emblem-svg\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\n fill=\"#1D252D\"\n />\n </svg>\n </div>\n\n <div class=\"section letters-section\">\n <div class=\"arabic-row\" dir=\"rtl\">\n @for (letter of lettersAr(); track $index) {\n <div class=\"input-wrapper\">\n <input\n type=\"text\"\n class=\"plate-input letter-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'let-ar-' + $index\"\n [class.invalid]=\"letterErrors()[$index]\"\n [value]=\"letter\"\n [readonly]=\"readonly()\"\n placeholder=\"س\"\n (input)=\"onLetterInput($index, $event, 'ar')\"\n />\n @if (letterErrors()[$index]) {\n <span class=\"error-tooltip\">Invalid</span>\n }\n </div>\n }\n </div>\n\n <div class=\"english-row\" dir=\"rtl\">\n @for (letter of lettersEn(); track $index) {\n <div class=\"input-wrapper\">\n <input\n type=\"text\"\n class=\"plate-input letter-input\"\n maxlength=\"1\"\n [attr.data-plate-input]=\"'let-en-' + $index\"\n [class.invalid]=\"letterErrors()[$index]\"\n [value]=\"letter\"\n [readonly]=\"readonly()\"\n placeholder=\"S\"\n (input)=\"onLetterInput($index, $event, 'en')\"\n />\n </div>\n }\n </div>\n </div>\n\n <div class=\"ksa-strip\">\n <svg class=\"mini-emblem\" viewBox=\"0 0 17 19\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M10.8072 16.8744C11.4633 16.178 11.3244 15.3914 10.7996 15.3825C10.9872 15.9606 10.5562 16.3344 10.3922 16.5266C9.97894 16.1712 9.55086 15.7761 9.10778 15.3694C11.2695 13.5812 13.6354 11.995 16.7263 11.9452C13.3983 10.7499 10.7417 12.7815 8.4925 14.8084C6.24308 12.7815 3.58672 10.7499 0.257812 11.9452C3.34944 11.995 5.71507 13.581 7.87722 15.3694C7.43329 15.7761 7.00564 16.1712 6.59172 16.5266C6.42902 16.3344 5.99777 15.9606 6.18435 15.3825C5.65992 15.3914 5.52089 16.178 6.17758 16.8744C5.91495 17.0931 5.48962 17.4631 5.15113 17.5518C4.89082 17.6199 4.68185 17.4846 4.63473 17.2026C4.53542 16.6069 3.61271 16.6959 3.72554 17.5372C3.82907 18.3044 4.76066 18.6391 5.55892 18.2837C5.87565 18.1424 6.3107 17.7413 6.66778 17.45C6.83111 17.641 7.26215 18.0145 7.07494 18.5935C7.59979 18.5838 7.7384 17.798 7.08234 17.1005C7.54845 16.7028 8.01625 16.2927 8.4925 15.887C8.96833 16.2925 9.43634 16.7028 9.90288 17.1005C9.24639 17.798 9.385 18.5838 9.91006 18.5935C9.72285 18.0145 10.1539 17.6414 10.3168 17.45C10.6745 17.7413 11.1091 18.1424 11.4263 18.2837C12.2246 18.6391 13.1555 18.3044 13.259 17.5372C13.3719 16.6959 12.4496 16.6069 12.3494 17.2026C12.3023 17.4846 12.094 17.6196 11.8332 17.5518C11.4948 17.4631 11.0696 17.0931 10.8072 16.8744ZM6.72504 5.72093C6.22365 7.04637 6.19597 8.53894 6.9169 10.1805C6.80195 8.47576 7.17594 7.06771 7.8713 6.0066L8.01815 7.46832H7.84679L8.01815 9.17958H7.84679L8.01815 10.8904H7.84679L8.01794 12.5991L7.53366 13.0819H8.4925H9.45156L8.96685 12.5991L9.13842 10.8904H8.96685L9.13842 9.17958H8.96685L9.13842 7.46832H8.96685L9.11391 6.0066C9.80906 7.06771 10.1833 8.47682 10.0683 10.1805C10.7886 8.53894 10.7616 7.047 10.2602 5.72093C11.1115 6.72478 11.7701 7.89851 12.0661 9.36572C12.3733 7.50466 11.848 5.98568 10.8852 4.8071C11.8174 5.47943 12.6184 6.33157 13.1785 7.48396C13.048 5.72072 12.1559 4.57742 10.927 3.75824C11.989 4.1054 12.8561 4.68645 13.6343 5.71798C13.1139 3.8884 11.9801 3.15564 10.575 2.74362C11.5332 2.67368 12.4386 2.78165 13.3347 3.33988C12.3621 2.02839 11.0565 1.81055 9.73257 1.95634C10.2893 1.67279 10.9158 1.53101 11.5888 1.63137C10.8302 1.07187 9.81836 1.01651 8.95227 1.48812L8.4925 0.328125L8.0321 1.48749C7.1658 1.01651 6.15476 1.07166 5.39623 1.63137C6.06877 1.53122 6.69483 1.67279 7.25179 1.95634C5.92826 1.81055 4.62311 2.0286 3.6499 3.33988C4.54662 2.78165 5.45137 2.67368 6.41001 2.74362C5.00534 3.15564 3.87112 3.8884 3.35113 5.71798C4.12868 4.68666 4.99625 4.1054 6.05842 3.75824C4.8287 4.57721 3.93704 5.72072 3.80625 7.48396C4.36618 6.33157 5.16782 5.47943 6.09962 4.8071C5.13676 5.98568 4.61149 7.50466 4.91871 9.36572C5.21494 7.89851 5.87354 6.72478 6.72504 5.72093Z\"\n fill=\"#1D252D\"\n />\n </svg>\n <span class=\"ksa-text\">KSA</span>\n </div>\n </div>\n `,\n styles: `\n .plate-container {\n width: 600px;\n height: 130px;\n border: 4px solid #1D252D;\n border-radius: 10px;\n background: white;\n display: flex;\n box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n position: relative;\n }\n\n /* General Section Styling */\n .section {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n /* Left Section: Numbers/Asterisks */\n .numbers-section {\n flex: 2;\n padding: 0 10px;\n }\n\n .digit-row {\n display: flex;\n justify-content: space-between;\n width: 80%;\n font-size: 38px;\n line-height: 1;\n color: #1D252D;\n margin: 2px 0;\n }\n\n /* Middle Section: Emblem */\n .emblem-section {\n flex: 1.2;\n padding: 10px;\n }\n\n .emblem-svg {\n width: 100%;\n height: 100%;\n max-height: 90px;\n }\n\n /* Right Section: Letters */\n .letters-section {\n flex: 1.8;\n border-right: 2px solid #1D252D;\n padding: 0 10px;\n }\n\n .arabic-row {\n font-family: 'Noto Sans Arabic', sans-serif;\n font-size: 32px;\n display: flex;\n justify-content: space-around;\n width: 100%;\n margin-bottom: 5px;\n color: #1D252D;\n }\n\n .english-row {\n font-size: 38px;\n display: flex;\n justify-content: space-around;\n width: 100%;\n color: #1D252D;\n }\n\n /* Far Right: KSA Strip */\n .ksa-strip {\n width: 50px;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n background-color: #fff; /* or specific reflective white */\n }\n\n .mini-emblem {\n width: 25px;\n height: auto;\n }\n\n .ksa-text {\n writing-mode: vertical-rl;\n text-orientation: upright;\n font-weight: 900;\n font-size: 16px;\n letter-spacing: 2px;\n color: #1D252D;\n margin-top: auto;\n margin-bottom: 5px;\n }\n\n .plate-input {\n background: transparent;\n border: none;\n text-align: center;\n font-family: inherit;\n font-size: inherit;\n font-weight: bold;\n color: #1D252D;\n width: 100%; /* Fill the flex/grid item */\n padding: 0;\n margin: 0;\n outline: none; /* Remove blue outline on focus */\n }\n\n /* Optional: Add a subtle underline or color change when user clicks the input */\n .plate-input:focus {\n border-bottom: 2px solid #1D252D;\n }\n\n /* Adjusting the container flex settings to ensure inputs fit */\n .digit-row, .arabic-row, .english-row {\n display: flex;\n justify-content: space-between;\n width: 100%;\n }\n\n /* Specific sizing for numbers to ensure they match plate proportions */\n .number-input {\n /* Adjust width based on your container size, roughly 20-25% */\n flex: 1;\n }\n\n /* Specific sizing for letters */\n .letter-input {\n flex: 1;\n }\n\n /* Placeholder styling to look like a ghost plate */\n .plate-input::placeholder {\n color: #ccc;\n opacity: 1;\n }\n\n .input-wrapper {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n }\n\n .error-tooltip {\n position: absolute;\n bottom: -15px;\n font-size: 10px;\n color: red;\n white-space: nowrap;\n }\n\n .plate-input.invalid {\n color: red;\n }\n `,\n})\nexport class PlateControl extends ControlBase {\n numbersAr = signal<string[]>(Array(4).fill(\"\"));\n numbersEn = signal<string[]>(Array(4).fill(\"\"));\n lettersAr = signal<string[]>(Array(3).fill(\"\"));\n lettersEn = signal<string[]>(Array(3).fill(\"\"));\n letterErrors = signal<boolean[]>(Array(3).fill(false));\n #host: ElementRef<HTMLElement> = inject(ElementRef);\n\n override writeValue(value: string | null) {\n if (!value) {\n this.#resetPlate();\n return;\n }\n\n const parts = value.split(\"-\");\n const letters = parts[0]?.split(\"\") || [];\n const numbers = parts[1]?.split(\"\") || [];\n\n // Initialize letters\n const lAr: string[] = [];\n const lEn: string[] = [];\n for (let i = 0; i < 3; i++) {\n const char = letters[i] || \"\";\n if (char) {\n const plateLetter = PLATE_LETTERS.find(l => l.value === char || l.label.en === char || l.label.ar === char);\n if (plateLetter) {\n lAr.push(plateLetter.label.ar);\n lEn.push(plateLetter.label.en);\n } else {\n lAr.push(\"\");\n lEn.push(\"\");\n }\n } else {\n lAr.push(\"\");\n lEn.push(\"\");\n }\n }\n this.lettersAr.set(lAr);\n this.lettersEn.set(lEn);\n\n // Initialize numbers\n const nAr: string[] = [];\n const nEn: string[] = [];\n for (let i = 0; i < 4; i++) {\n const char = numbers[i] || \"\";\n if (char) {\n nAr.push(this.convertDigit(char, \"ar\"));\n nEn.push(this.convertDigit(char, \"en\"));\n } else {\n nAr.push(\"\");\n nEn.push(\"\");\n }\n }\n this.numbersAr.set(nAr);\n this.numbersEn.set(nEn);\n }\n\n onNumberInput(index: number, event: Event, lang: \"ar\" | \"en\") {\n if (this.readonly()) {\n return;\n }\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n // Allow only numbers\n if (!/^[0-9\\u0660-\\u0669]*$/.test(value)) {\n return;\n }\n\n input.value = lang === \"ar\" ? this.numbersAr()[index] : this.numbersEn()[index];\n\n // Take only the last character if multiple characters are entered\n if (value.length > 1) {\n value = value.slice(-1);\n input.value = value;\n }\n\n if (!value) {\n const newAr = [...this.numbersAr()];\n const newEn = [...this.numbersEn()];\n newAr[index] = \"\";\n newEn[index] = \"\";\n this.numbersAr.set(newAr);\n this.numbersEn.set(newEn);\n this.emitPlate();\n return;\n }\n\n const arDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"];\n const enDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\n let digitIndex = enDigits.indexOf(value);\n\n if (digitIndex === -1) {\n digitIndex = arDigits.indexOf(value);\n }\n\n const newAr = [...this.numbersAr()];\n const newEn = [...this.numbersEn()];\n\n if (digitIndex !== -1) {\n newAr[index] = arDigits[digitIndex];\n newEn[index] = enDigits[digitIndex];\n\n // Focus next\n if (index < 3) {\n this.focusInput(`num-${lang}-${index + 1}`);\n } else {\n this.focusInput(`let-${lang}-0`);\n }\n } else {\n // Should not happen due to regex check, but safe fallback\n newAr[index] = \"\";\n newEn[index] = \"\";\n }\n\n this.numbersAr.set(newAr);\n this.numbersEn.set(newEn);\n this.emitPlate();\n }\n\n onLetterInput(index: number, event: Event, lang: \"ar\" | \"en\") {\n if (this.readonly()) {\n return;\n }\n const input = event.target as HTMLInputElement;\n let value = input.value;\n\n if (!value) {\n const newAr = [...this.lettersAr()];\n const newEn = [...this.lettersEn()];\n const newErrors = [...this.letterErrors()];\n newAr[index] = \"\";\n newEn[index] = \"\";\n newErrors[index] = false;\n this.lettersAr.set(newAr);\n this.lettersEn.set(newEn);\n this.letterErrors.set(newErrors);\n this.emitPlate();\n return;\n }\n\n // Take only the last character\n if (value.length > 1) {\n value = value.slice(-1);\n input.value = value;\n }\n\n const plateLetter = PLATE_LETTERS.find(l =>\n l.value === value.toUpperCase() ||\n l.label.en === value.toUpperCase() ||\n l.label.ar === value\n );\n\n const newAr = [...this.lettersAr()];\n const newEn = [...this.lettersEn()];\n const newErrors = [...this.letterErrors()];\n\n if (plateLetter) {\n newAr[index] = plateLetter.label.ar;\n newEn[index] = plateLetter.label.en;\n newErrors[index] = false;\n\n // Focus next\n if (index < 2) {\n this.focusInput(`let-${lang}-${index + 1}`);\n } else {\n this.focusInput(`num-${lang}-0`);\n }\n } else {\n // Show error\n if (lang === \"ar\") {\n newAr[index] = value;\n newEn[index] = \"\"; // Or keep previous?\n } else {\n newEn[index] = value;\n newAr[index] = \"\";\n }\n newErrors[index] = true;\n }\n\n this.lettersAr.set(newAr);\n this.lettersEn.set(newEn);\n this.letterErrors.set(newErrors);\n this.emitPlate();\n }\n\n protected preventNonDigits($event: KeyboardEvent, ar: string) {\n if ($event.key.length === 1 && !/^[0-9\\u0660-\\u0669]$/.test($event.key)) {\n $event.preventDefault();\n }\n }\n\n #resetPlate() {\n this.numbersAr.set(Array(4).fill(\"\"));\n this.numbersEn.set(Array(4).fill(\"\"));\n this.lettersAr.set(Array(3).fill(\"\"));\n this.lettersEn.set(Array(3).fill(\"\"));\n this.letterErrors.set(Array(3).fill(false));\n this.ctrl.setValue(null, { emitEvent: false });\n }\n\n private emitPlate() {\n this.markAsTouched();\n this.emitValue(this.stringifyPlate());\n }\n\n private stringifyPlate(): string | null {\n // lettersEn holds PlateLetter.label.en, which equals PlateLetter.value for every entry,\n // so this round-trips through writeValue and the viewer. Invalid letters are held in the\n // opposite-language row and serialize as empty.\n const letters: string = this.lettersEn().join(\"\");\n const numbers: string = this.numbersEn().join(\"\");\n if (!letters && !numbers) {\n return null;\n }\n return `${letters}-${numbers}`;\n }\n\n private focusInput(id: string) {\n setTimeout(() => {\n // scoped to this host: several plates can be on the same page\n const element = this.#host.nativeElement.querySelector(\"[data-plate-input=\\\"\" + id + \"\\\"]\") as HTMLInputElement | null;\n if (element) {\n element.focus();\n // Optional: Select text so user can overwrite easily if they cycle back\n element.select();\n }\n }, 0);\n }\n\n private convertDigit(digit: string, toLang: \"ar\" | \"en\"): string {\n const arDigits = [\"٠\", \"١\", \"٢\", \"٣\", \"٤\", \"٥\", \"٦\", \"٧\", \"٨\", \"٩\"];\n const enDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\n if (toLang === \"ar\") {\n const index = enDigits.indexOf(digit);\n return index !== -1 ? arDigits[index] : digit;\n } else {\n const index = arDigits.indexOf(digit);\n return index !== -1 ? enDigits[index] : digit;\n }\n }\n}\n","// The plate control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./plate-letter\";\nexport * from \"./plate-letters.const\";\nexport * from \"./plate.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,8 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Component } from '@angular/core';
3
3
  import * as i1 from '@angular/forms';
4
4
  import { ReactiveFormsModule } from '@angular/forms';
5
- import { MatLabel } from '@angular/material/form-field';
6
- import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
5
+ import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
7
6
  import { RadioControl } from 'iss-ctrl/radio';
8
7
  import { RadioViewer } from './iss-ctrl-radio.viewer-EiDliZro.mjs';
9
8
 
@@ -39,22 +38,19 @@ class RadioField extends FieldBase {
39
38
  @if (field.visible()) {
40
39
  <div style="display: flex; flex-direction: column">
41
40
  @if (field.mode() === "edit") {
42
- @if (!field.config.hideLabel()) {
43
- <mat-label>{{ field.label() }}</mat-label>
44
- }
45
- <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
41
+ <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)">
42
+ <label>{{ field.label() }}</label>
43
+ </iss-ctrl-radio>
46
44
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
47
45
  } @else {
48
46
  <iss-field-viewer>
49
- @if (!field.config.hideLabel()) {
50
- <label>{{ field.label() }}</label>
51
- }
47
+ <label>{{ field.label() }}</label>
52
48
  <iss-viewer-radio [field]="field"/>
53
49
  </iss-field-viewer>
54
50
  }
55
51
  </div>
56
52
  }
57
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: RadioControl, selector: "iss-ctrl-radio", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: RadioViewer, selector: "iss-viewer-radio" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
53
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: RadioControl, selector: "iss-ctrl-radio", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: RadioViewer, selector: "iss-viewer-radio" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
58
54
  }
59
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RadioField, decorators: [{
60
56
  type: Component,
@@ -63,7 +59,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
63
59
  viewProviders: [VIEW_PROVIDER],
64
60
  imports: [
65
61
  ReactiveFormsModule,
66
- MatLabel,
67
62
  RadioControl,
68
63
  ValidationMessage,
69
64
  RadioViewer,
@@ -73,16 +68,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
73
68
  @if (field.visible()) {
74
69
  <div style="display: flex; flex-direction: column">
75
70
  @if (field.mode() === "edit") {
76
- @if (!field.config.hideLabel()) {
77
- <mat-label>{{ field.label() }}</mat-label>
78
- }
79
- <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)"/>
71
+ <iss-ctrl-radio [formControlName]="field.name" [options]="field.options()" [readonly]="field.config.readonly() ?? false" (onChange)="onChange($event)">
72
+ <label>{{ field.label() }}</label>
73
+ </iss-ctrl-radio>
80
74
  <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
81
75
  } @else {
82
76
  <iss-field-viewer>
83
- @if (!field.config.hideLabel()) {
84
- <label>{{ field.label() }}</label>
85
- }
77
+ <label>{{ field.label() }}</label>
86
78
  <iss-viewer-radio [field]="field"/>
87
79
  </iss-field-viewer>
88
80
  }
@@ -93,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
93
85
  }] });
94
86
 
95
87
  export { RadioField };
96
- //# sourceMappingURL=iss-ctrl-radio.field-B_JjPIlb.mjs.map
88
+ //# sourceMappingURL=iss-ctrl-radio.field-Dp5D-AXQ.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iss-ctrl-radio.field-Dp5D-AXQ.mjs","sources":["../../../projects/iss/src/components/controls/radio/radio.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { RadioControl } from \"iss-ctrl/radio\";\nimport { RadioViewer } from \"./radio.viewer\";\n\n/**\n * `<iss-field-radio>` — one choice out of a fixed set of options.\n *\n * Rendered by the outlet for fields of type `radio`. In `edit` mode it renders\n * {@link RadioControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `hideLabel` | `boolean` | Hides the field label. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()` · `options()`\n *\n * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and\n * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.\n *\n * @example\n * ```json\n * { \"name\": \"gender\", \"type\": \"radio\", \"label\": \"Gender\", \"options\": [{ \"value\": \"m\", \"label\": \"Male\" }] }\n * ```\n */\n@Component({\n selector: \"iss-field-radio\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n RadioControl,\n ValidationMessage,\n RadioViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n <div style=\"display: flex; flex-direction: column\">\n @if (field.mode() === \"edit\") {\n <iss-ctrl-radio [formControlName]=\"field.name\" [options]=\"field.options()\" [readonly]=\"field.config.readonly() ?? false\" (onChange)=\"onChange($event)\">\n <label>{{ field.label() }}</label>\n </iss-ctrl-radio>\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n <label>{{ field.label() }}</label>\n <iss-viewer-radio [field]=\"field\"/>\n </iss-field-viewer>\n }\n </div>\n }\n `\n})\nexport class RadioField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AA6BG,MAAO,UAAW,SAAQ,SAAS,CAAA;AACvC,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBX;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAtBC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EANE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FA0BnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBA5BtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,YAAY;wBACZ,iBAAiB;wBACjB,WAAW;wBACX;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;AAgBT,EAAA;AACF,iBAAA;;;;;"}
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { input, Component } from '@angular/core';
3
3
  import { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { MatButtonToggleGroup, MatButtonToggle } from '@angular/material/button-toggle';
5
- import { ControlBase } from 'iss-ctrl/base';
5
+ import { ControlBase, TranslatePipe } from 'iss-ctrl/base';
6
6
 
7
7
  /**
8
8
  * `<iss-ctrl-radio>` — one choice out of a fixed set of options.
@@ -20,11 +20,11 @@ import { ControlBase } from 'iss-ctrl/base';
20
20
  * ### Inherited from {@link ControlBase}
21
21
  * `formControlName` · `readonly` · `className` · `(onChange)`
22
22
  *
23
- * Does not project a label the field label is rendered by the wrapping `iss-field-*`.
23
+ * Projects a `<label>` above the control the wrapping `iss-field-*` passes the field label in that way.
24
24
  */
25
25
  class RadioControl extends ControlBase {
26
26
  /**
27
- * Selectable choices, each a `{ value, label }` pair. Required.
27
+ * Selectable choices, each a `{ value, title }` pair. Required.
28
28
  */
29
29
  options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
30
30
  writeValue(value) {
@@ -51,17 +51,18 @@ class RadioControl extends ControlBase {
51
51
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: RadioControl, isStandalone: true, selector: "iss-ctrl-radio", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
52
52
  { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }
53
53
  ], usesInheritance: true, ngImport: i0, template: `
54
+ <ng-content select="label"></ng-content>
54
55
  <mat-button-toggle-group [hideSingleSelectionIndicator]="true" [disabled]="disabled() || readonly()">
55
56
  @for (option of options(); track option.value) {
56
57
  <mat-button-toggle
57
58
  [value]="option.value"
58
59
  [checked]="ctrl.value === option.value"
59
60
  (change)="onRadioChange(option.value)"
60
- >{{ option.label }}
61
+ >{{ option?.title | translate }}
61
62
  </mat-button-toggle>
62
63
  }
63
64
  </mat-button-toggle-group>
64
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }] });
65
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
65
66
  }
66
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RadioControl, decorators: [{
67
68
  type: Component,
@@ -71,18 +72,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
71
72
  ReactiveFormsModule,
72
73
  MatButtonToggleGroup,
73
74
  MatButtonToggle,
75
+ TranslatePipe,
74
76
  ],
75
77
  providers: [
76
78
  { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }
77
79
  ],
78
80
  template: `
81
+ <ng-content select="label"></ng-content>
79
82
  <mat-button-toggle-group [hideSingleSelectionIndicator]="true" [disabled]="disabled() || readonly()">
80
83
  @for (option of options(); track option.value) {
81
84
  <mat-button-toggle
82
85
  [value]="option.value"
83
86
  [checked]="ctrl.value === option.value"
84
87
  (change)="onRadioChange(option.value)"
85
- >{{ option.label }}
88
+ >{{ option?.title | translate }}
86
89
  </mat-button-toggle>
87
90
  }
88
91
  </mat-button-toggle-group>
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-radio.mjs","sources":["../../../projects/iss/radio/src/radio.control.ts","../../../projects/iss/radio/src/public-api.ts","../../../projects/iss/radio/src/iss-ctrl-radio.ts"],"sourcesContent":["import { Component, input, InputSignal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { Option } from \"iss-ctrl/base\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-radio>` — one choice out of a fixed set of options.\n *\n * @example\n * ```html\n * <iss-ctrl-radio formControlName=\"gender\" [options]=\"genders\"/>\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `options` | `Option[]` | **required** | The selectable choices. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Does not project a label the field label is rendered by the wrapping `iss-field-*`.\n */\n@Component({\n selector: \"iss-ctrl-radio\",\n imports: [\n ReactiveFormsModule,\n MatButtonToggleGroup,\n MatButtonToggle,\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }\n ],\n template: `\n <mat-button-toggle-group [hideSingleSelectionIndicator]=\"true\" [disabled]=\"disabled() || readonly()\">\n @for (option of options(); track option.value) {\n <mat-button-toggle\n [value]=\"option.value\"\n [checked]=\"ctrl.value === option.value\"\n (change)=\"onRadioChange(option.value)\"\n >{{ option.label }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n `,\n})\nexport class RadioControl extends ControlBase {\n /**\n * Selectable choices, each a `{ value, label }` pair. Required.\n */\n options: InputSignal<Option[]> = input.required();\n\n override writeValue(value: string | null) {\n if (!value) {\n this.ctrl.setValue(null, { emitEvent: false });\n return;\n }\n\n // single selection mode, only the first value of a comma separated list is honoured\n const values: string[] = value.split(\",\").map((val: string) => val.trim());\n this.ctrl.setValue(values[0], { emitEvent: false });\n }\n\n onRadioChange(value: string) {\n if (this.readonly()) {\n return;\n }\n this.markAsTouched();\n this.ctrl.setValue(value, { emitEvent: false });\n const selectedOption: Option | undefined = this.options().find((option: Option) => option.value === value);\n // the form keeps the raw value, while (onChange) consumers get the resolved option\n this.propagateValue(value);\n this.emitOnChangeEvent(selectedOption ? [selectedOption] : null);\n }\n}\n","// The radio control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./radio.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAMA;;;;;;;;;;;;;;;;;AAiBG;AAwBG,MAAO,YAAa,SAAQ,WAAW,CAAA;AAC3C;;AAEG;AACH,IAAA,OAAO,GAA0B,KAAK,CAAC,QAAQ,6EAAE;AAExC,IAAA,UAAU,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9C;QACF;;QAGA,MAAM,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrD;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAuB,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;;AAE1G,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAClE;uGA3BW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAhBZ;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI;SACrE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;AAWT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAkBN,YAAY,EAAA,UAAA,EAAA,CAAA;kBAvBxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,oBAAoB;wBACpB,eAAe;AAChB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,cAAc,EAAE,KAAK,EAAE,IAAI;AACrE,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;AAWT,EAAA,CAAA;AACF,iBAAA;;;AC9CD;AACA;;ACDA;;AAEG;;;;"}
1
+ {"version":3,"file":"iss-ctrl-radio.mjs","sources":["../../../projects/iss/radio/src/radio.control.ts","../../../projects/iss/radio/src/public-api.ts","../../../projects/iss/radio/src/iss-ctrl-radio.ts"],"sourcesContent":["import { Component, input, InputSignal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButtonToggle, MatButtonToggleGroup } from \"@angular/material/button-toggle\";\nimport { ControlBase, Option, TranslatePipe } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-radio>` — one choice out of a fixed set of options.\n *\n * @example\n * ```html\n * <iss-ctrl-radio formControlName=\"gender\" [options]=\"genders\"/>\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `options` | `Option[]` | **required** | The selectable choices. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Projects a `<label>` above the control the wrapping `iss-field-*` passes the field label in that way.\n */\n@Component({\n selector: \"iss-ctrl-radio\",\n imports: [\n ReactiveFormsModule,\n MatButtonToggleGroup,\n MatButtonToggle,\n TranslatePipe,\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: RadioControl, multi: true }\n ],\n template: `\n <ng-content select=\"label\"></ng-content>\n <mat-button-toggle-group [hideSingleSelectionIndicator]=\"true\" [disabled]=\"disabled() || readonly()\">\n @for (option of options(); track option.value) {\n <mat-button-toggle\n [value]=\"option.value\"\n [checked]=\"ctrl.value === option.value\"\n (change)=\"onRadioChange(option.value)\"\n >{{ option?.title | translate }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n `,\n})\nexport class RadioControl extends ControlBase {\n /**\n * Selectable choices, each a `{ value, title }` pair. Required.\n */\n options: InputSignal<Option[]> = input.required();\n\n override writeValue(value: string | null) {\n if (!value) {\n this.ctrl.setValue(null, { emitEvent: false });\n return;\n }\n\n // single selection mode, only the first value of a comma separated list is honoured\n const values: string[] = value.split(\",\").map((val: string) => val.trim());\n this.ctrl.setValue(values[0], { emitEvent: false });\n }\n\n onRadioChange(value: string) {\n if (this.readonly()) {\n return;\n }\n this.markAsTouched();\n this.ctrl.setValue(value, { emitEvent: false });\n const selectedOption: Option | undefined = this.options().find((option: Option) => option.value === value);\n // the form keeps the raw value, while (onChange) consumers get the resolved option\n this.propagateValue(value);\n this.emitOnChangeEvent(selectedOption ? [selectedOption] : null);\n }\n}\n","// The radio control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./radio.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;AAKA;;;;;;;;;;;;;;;;;AAiBG;AA0BG,MAAO,YAAa,SAAQ,WAAW,CAAA;AAC3C;;AAEG;AACH,IAAA,OAAO,GAA0B,KAAK,CAAC,QAAQ,6EAAE;AAExC,IAAA,UAAU,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YAC9C;QACF;;QAGA,MAAM,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;AAC1E,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACrD;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAuB,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;;AAE1G,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAClE;uGA3BW,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAjBZ;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI;SACrE,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApBC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,eAAe,wQACf,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAmBJ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAzBxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,oBAAoB;wBACpB,eAAe;wBACf,aAAa;AACd,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,cAAc,EAAE,KAAK,EAAE,IAAI;AACrE,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;AAYT,EAAA,CAAA;AACF,iBAAA;;;AC/CD;AACA;;ACDA;;AAEG;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable } from '@angular/core';
3
- import { P as PLACEHOLDER_REGEX, g as getPropertyByPath, r as replacePlaceholders } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
3
+ import { P as PLACEHOLDER_REGEX, g as getPropertyByPath, r as replacePlaceholders } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
4
4
 
5
5
  class ReplaceApiKeys {
6
6
  // todo replace {key} with tracked field value [will be deprecated]
@@ -54,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
54
54
  }] });
55
55
 
56
56
  export { ReplaceApiKeys };
57
- //# sourceMappingURL=iss-ctrl-replace-api-keys-DLnagkOr.mjs.map
57
+ //# sourceMappingURL=iss-ctrl-replace-api-keys-COUv4Kin.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-replace-api-keys-DLnagkOr.mjs","sources":["../../../projects/iss/src/events/load/replace-api-keys.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { PLACEHOLDER_REGEX } from \"../../shared/constants/placeholder-regex.const\";\r\nimport { EventArgument, EventConfigFn } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\nimport { replacePlaceholders } from \"../../shared/utilities/replace-placeholder.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class ReplaceApiKeys implements EventConfigFn {\r\n // todo replace {key} with tracked field value [will be deprecated]\r\n execute(args: EventArgument): string {\r\n // console.log(\"Replace API keys - Default Implementation\");\r\n const api = args.field.api();\r\n const matches = api.match(PLACEHOLDER_REGEX);\r\n if (matches) {\r\n const replacements: any = {};\r\n matches.forEach((match) => {\r\n const replacement = match.replace(\"{\", \"\").replace(\"}\", \"\");\r\n\r\n if (replacement.includes(\".\")) {\r\n const path = this.getPath(replacement);\r\n\r\n if (replacement.includes(args.change.trackedField.name)) {\r\n replacements[replacement] = getPropertyByPath(args.change.trackedField, path);\r\n }\r\n\r\n if (replacement.includes(\"loggedInUser\")) {\r\n const loggedInUserProfileStr = localStorage.getItem(\"profile\");\r\n if (loggedInUserProfileStr) {\r\n const loggedInUserProfile = JSON.parse(loggedInUserProfileStr);\r\n replacements[replacement] = getPropertyByPath(loggedInUserProfile, path);\r\n } else {\r\n throw new Error(\"User profile not found in localStorage. Make sure that localStorage has profile key with user profile.\");\r\n }\r\n }\r\n\r\n if (replacement.includes(\"requestDto\")) {\r\n // todo replace {fromRequestDto}\r\n // todo from where to get requestDto?\r\n }\r\n } else {\r\n replacements[replacement] = args.form.get(replacement)?.getRawValue();\r\n }\r\n });\r\n return replacePlaceholders(api, replacements);\r\n }\r\n\r\n return api;\r\n }\r\n\r\n getPath(replacement: string): string {\r\n const arr = replacement.split(\".\");\r\n arr.shift();\r\n return arr.join(\".\");\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;MAOa,cAAc,CAAA;;AAEzB,IAAA,OAAO,CAAC,IAAmB,EAAA;;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC5C,IAAI,OAAO,EAAE;YACX,MAAM,YAAY,GAAQ,EAAE;AAC5B,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAE3D,gBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAEtC,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACvD,wBAAA,YAAY,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC;oBAC/E;AAEA,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;wBACxC,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;wBAC9D,IAAI,sBAAsB,EAAE;4BAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;4BAC9D,YAAY,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC;wBAC1E;6BAAO;AACL,4BAAA,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC;wBAC3H;oBACF;AAEA,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;;;oBAGxC;gBACF;qBAAO;AACL,oBAAA,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE;gBACvE;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC;QAC/C;AAEA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,CAAC,WAAmB,EAAA;QACzB,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;QAClC,GAAG,CAAC,KAAK,EAAE;AACX,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB;uGA9CW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADF,MAAM,EAAA,CAAA;;2FAClB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
1
+ {"version":3,"file":"iss-ctrl-replace-api-keys-COUv4Kin.mjs","sources":["../../../projects/iss/src/events/load/replace-api-keys.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { PLACEHOLDER_REGEX } from \"../../shared/constants/placeholder-regex.const\";\r\nimport { EventArgument, EventConfigFn } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\nimport { replacePlaceholders } from \"../../shared/utilities/replace-placeholder.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class ReplaceApiKeys implements EventConfigFn {\r\n // todo replace {key} with tracked field value [will be deprecated]\r\n execute(args: EventArgument): string {\r\n // console.log(\"Replace API keys - Default Implementation\");\r\n const api = args.field.api();\r\n const matches = api.match(PLACEHOLDER_REGEX);\r\n if (matches) {\r\n const replacements: any = {};\r\n matches.forEach((match) => {\r\n const replacement = match.replace(\"{\", \"\").replace(\"}\", \"\");\r\n\r\n if (replacement.includes(\".\")) {\r\n const path = this.getPath(replacement);\r\n\r\n if (replacement.includes(args.change.trackedField.name)) {\r\n replacements[replacement] = getPropertyByPath(args.change.trackedField, path);\r\n }\r\n\r\n if (replacement.includes(\"loggedInUser\")) {\r\n const loggedInUserProfileStr = localStorage.getItem(\"profile\");\r\n if (loggedInUserProfileStr) {\r\n const loggedInUserProfile = JSON.parse(loggedInUserProfileStr);\r\n replacements[replacement] = getPropertyByPath(loggedInUserProfile, path);\r\n } else {\r\n throw new Error(\"User profile not found in localStorage. Make sure that localStorage has profile key with user profile.\");\r\n }\r\n }\r\n\r\n if (replacement.includes(\"requestDto\")) {\r\n // todo replace {fromRequestDto}\r\n // todo from where to get requestDto?\r\n }\r\n } else {\r\n replacements[replacement] = args.form.get(replacement)?.getRawValue();\r\n }\r\n });\r\n return replacePlaceholders(api, replacements);\r\n }\r\n\r\n return api;\r\n }\r\n\r\n getPath(replacement: string): string {\r\n const arr = replacement.split(\".\");\r\n arr.shift();\r\n return arr.join(\".\");\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;MAOa,cAAc,CAAA;;AAEzB,IAAA,OAAO,CAAC,IAAmB,EAAA;;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;QAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC5C,IAAI,OAAO,EAAE;YACX,MAAM,YAAY,GAAQ,EAAE;AAC5B,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAE3D,gBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAEtC,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AACvD,wBAAA,YAAY,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC;oBAC/E;AAEA,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;wBACxC,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;wBAC9D,IAAI,sBAAsB,EAAE;4BAC1B,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;4BAC9D,YAAY,CAAC,WAAW,CAAC,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC;wBAC1E;6BAAO;AACL,4BAAA,MAAM,IAAI,KAAK,CAAC,wGAAwG,CAAC;wBAC3H;oBACF;AAEA,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;;;oBAGxC;gBACF;qBAAO;AACL,oBAAA,YAAY,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE;gBACvE;AACF,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC;QAC/C;AAEA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,OAAO,CAAC,WAAmB,EAAA;QACzB,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;QAClC,GAAG,CAAC,KAAK,EAAE;AACX,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB;uGA9CW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cADF,MAAM,EAAA,CAAA;;2FAClB,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject } from '@angular/core';
3
3
  import { of, map } from 'rxjs';
4
- import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
4
+ import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
5
5
 
6
6
  class GetValueToSet {
7
7
  execute(args) {
@@ -58,4 +58,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
58
58
  }] });
59
59
 
60
60
  export { SetValueEvent };
61
- //# sourceMappingURL=iss-ctrl-set-value-event-Dhw0Vj5J.mjs.map
61
+ //# sourceMappingURL=iss-ctrl-set-value-event-D0-_qIyS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-set-value-event-Dhw0Vj5J.mjs","sources":["../../../projects/iss/src/events/set-value/get-value-to-set.ts","../../../projects/iss/src/events/set-value/set-value-event.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { map, Observable, of } from \"rxjs\";\r\nimport { EventArgument, EventConfigFn } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class GetValueToSet implements EventConfigFn {\r\n execute(args: EventArgument): Observable<string> {\r\n if (args.action?.config?.setValueFromJsonValue) {\r\n return of(getPropertyByPath(args.field.ctrlJsonValue(), args.action.config.setValueFromJsonValue));\r\n }\r\n\r\n if (args.action?.config?.setValueFromApiResponse) {\r\n return args.field.apiResponse.pipe(\r\n map((value: any) => getPropertyByPath(value, args.action.config.setValueFromApiResponse))\r\n );\r\n }\r\n\r\n if (args.action?.config?.setValueFromLoggedInUser) {\r\n\r\n }\r\n\r\n if (args.action?.config?.setValueFromRequestDto) {\r\n\r\n }\r\n\r\n return of(args.change.value);\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { EventArgument, EventStrategy } from \"../../shared/interfaces/event-strategy\";\r\nimport { GetValueToSet } from \"./get-value-to-set\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class SetValueEvent implements EventStrategy {\r\n getValueToSetService = inject(GetValueToSet);\r\n\r\n fire(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Set Value Event Fired\", \"color: green\");\r\n let valueToSet;\r\n if (args.action.config.fn) {\r\n valueToSet = args.action.config.fn.execute(args);\r\n } else {\r\n valueToSet = this.getValueToSetService.execute(args);\r\n }\r\n\r\n valueToSet.subscribe((value: string) => {\r\n args.control.setValue(value, {emitEvent: false});\r\n });\r\n\r\n if (args.action.config.disableAfterSetValue) {\r\n args.control.disable();\r\n }\r\n args.action.triggered = true;\r\n }\r\n\r\n revert(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Set Value Event Reverted\", \"color: red\");\r\n args.control.setValue(null);\r\n args.action.triggered = false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iss-ctrl-set-value-event-D0-_qIyS.mjs","sources":["../../../projects/iss/src/events/set-value/get-value-to-set.ts","../../../projects/iss/src/events/set-value/set-value-event.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { map, Observable, of } from \"rxjs\";\r\nimport { EventArgument, EventConfigFn } from \"../../shared/interfaces/event-strategy\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class GetValueToSet implements EventConfigFn {\r\n execute(args: EventArgument): Observable<string> {\r\n if (args.action?.config?.setValueFromJsonValue) {\r\n return of(getPropertyByPath(args.field.ctrlJsonValue(), args.action.config.setValueFromJsonValue));\r\n }\r\n\r\n if (args.action?.config?.setValueFromApiResponse) {\r\n return args.field.apiResponse.pipe(\r\n map((value: any) => getPropertyByPath(value, args.action.config.setValueFromApiResponse))\r\n );\r\n }\r\n\r\n if (args.action?.config?.setValueFromLoggedInUser) {\r\n\r\n }\r\n\r\n if (args.action?.config?.setValueFromRequestDto) {\r\n\r\n }\r\n\r\n return of(args.change.value);\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { EventArgument, EventStrategy } from \"../../shared/interfaces/event-strategy\";\r\nimport { GetValueToSet } from \"./get-value-to-set\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class SetValueEvent implements EventStrategy {\r\n getValueToSetService = inject(GetValueToSet);\r\n\r\n fire(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Set Value Event Fired\", \"color: green\");\r\n let valueToSet;\r\n if (args.action.config.fn) {\r\n valueToSet = args.action.config.fn.execute(args);\r\n } else {\r\n valueToSet = this.getValueToSetService.execute(args);\r\n }\r\n\r\n valueToSet.subscribe((value: string) => {\r\n args.control.setValue(value, {emitEvent: false});\r\n });\r\n\r\n if (args.action.config.disableAfterSetValue) {\r\n args.control.disable();\r\n }\r\n args.action.triggered = true;\r\n }\r\n\r\n revert(args: EventArgument) {\r\n console.log(`${args.field.name} listens to ${args.action.trackedFieldName} =>` + \"%c Set Value Event Reverted\", \"color: red\");\r\n args.control.setValue(null);\r\n args.action.triggered = false;\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { Component } from '@angular/core';
3
3
  import * as i1 from '@angular/forms';
4
4
  import { ReactiveFormsModule } from '@angular/forms';
5
5
  import { MatLabel } from '@angular/material/form-field';
6
- import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
6
+ import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
7
7
  import { SlideToggleControl } from 'iss-ctrl/slide-toggle';
8
8
  import { SlideToggleViewer } from './iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs';
9
9
 
@@ -82,4 +82,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
82
82
  }] });
83
83
 
84
84
  export { SlideToggleField };
85
- //# sourceMappingURL=iss-ctrl-slide-toggle.field-TVVbAr6p.mjs.map
85
+ //# sourceMappingURL=iss-ctrl-slide-toggle.field-vCJHOiSG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-slide-toggle.field-TVVbAr6p.mjs","sources":["../../../projects/iss/src/components/controls/slide-toggle/slide-toggle.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatLabel } from \"@angular/material/form-field\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { SlideToggleControl } from \"iss-ctrl/slide-toggle\";\nimport { SlideToggleViewer } from \"./slide-toggle.viewer\";\n\n/**\n * `<iss-field-slide-toggle>` — an on/off switch for a boolean value.\n *\n * Rendered by the outlet for fields of type `switch`. In `edit` mode it renders\n * {@link SlideToggleControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `hideLabel` | `boolean` | Hides the field label. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()`\n *\n * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and\n * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.\n *\n * @example\n * ```json\n * { \"name\": \"active\", \"type\": \"switch\", \"label\": \"Active\" }\n * ```\n */\n@Component({\n selector: \"iss-field-slide-toggle\",\n viewProviders: [VIEW_PROVIDER],\n imports: [ReactiveFormsModule, MatLabel, SlideToggleControl, SlideToggleViewer, ValidationMessage, FieldViewer],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n @if (!field.config.hideLabel()) {\n <mat-label>{{ field.label() }}</mat-label>\n }\n <iss-ctrl-slide-toggle [formControlName]=\"field.name\" [readonly]=\"field.config.readonly() ?? false\" (onChange)=\"onChange($event)\"/>\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n @if (!field.config.hideLabel()) {\n <label>{{ field.label() }}</label>\n }\n <iss-viewer-slide-toggle [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class SlideToggleField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAwBG,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAC7C,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBjB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EAD/F,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAqBnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;oBAClC,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,CAAC;AAC/G,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA;AACF,iBAAA;;;;;"}
1
+ {"version":3,"file":"iss-ctrl-slide-toggle.field-vCJHOiSG.mjs","sources":["../../../projects/iss/src/components/controls/slide-toggle/slide-toggle.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatLabel } from \"@angular/material/form-field\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { SlideToggleControl } from \"iss-ctrl/slide-toggle\";\nimport { SlideToggleViewer } from \"./slide-toggle.viewer\";\n\n/**\n * `<iss-field-slide-toggle>` — an on/off switch for a boolean value.\n *\n * Rendered by the outlet for fields of type `switch`. In `edit` mode it renders\n * {@link SlideToggleControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `hideLabel` | `boolean` | Hides the field label. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()`\n *\n * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and\n * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.\n *\n * @example\n * ```json\n * { \"name\": \"active\", \"type\": \"switch\", \"label\": \"Active\" }\n * ```\n */\n@Component({\n selector: \"iss-field-slide-toggle\",\n viewProviders: [VIEW_PROVIDER],\n imports: [ReactiveFormsModule, MatLabel, SlideToggleControl, SlideToggleViewer, ValidationMessage, FieldViewer],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n @if (!field.config.hideLabel()) {\n <mat-label>{{ field.label() }}</mat-label>\n }\n <iss-ctrl-slide-toggle [formControlName]=\"field.name\" [readonly]=\"field.config.readonly() ?? false\" (onChange)=\"onChange($event)\"/>\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n @if (!field.config.hideLabel()) {\n <label>{{ field.label() }}</label>\n }\n <iss-viewer-slide-toggle [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class SlideToggleField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAwBG,MAAO,gBAAiB,SAAQ,SAAS,CAAA;AAC7C,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBjB;;;;;;;;;;;;;;;;;AAiBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAlBS,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EAD/F,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAqBnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAvB5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;oBAClC,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,CAAC;AAC/G,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;AAiBT,EAAA;AACF,iBAAA;;;;;"}
@@ -20,7 +20,7 @@ import { ControlBase } from 'iss-ctrl/base';
20
20
  * ### Inherited from {@link ControlBase}
21
21
  * `formControlName` · `readonly` · `className` · `(onChange)`
22
22
  *
23
- * Does not project a label the field label is rendered by the wrapping `iss-field-*`.
23
+ * Projects a `<label>` above the control the wrapping `iss-field-*` passes the field label in that way.
24
24
  */
25
25
  class SlideToggleControl extends ControlBase {
26
26
  onSlideToggleChange(checked) {
@@ -34,11 +34,8 @@ class SlideToggleControl extends ControlBase {
34
34
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: SlideToggleControl, isStandalone: true, selector: "iss-ctrl-slide-toggle", providers: [
35
35
  { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }
36
36
  ], usesInheritance: true, ngImport: i0, template: `
37
- <mat-slide-toggle
38
- class="d-block" [formControl]="ctrl"
39
- [disabled]="readonly()"
40
- (change)="onSlideToggleChange($event.checked)"
41
- >
37
+ <mat-slide-toggle class="d-block" [formControl]="ctrl" [disabled]="readonly()" (change)="onSlideToggleChange($event.checked)">
38
+ <ng-content select="label"></ng-content>
42
39
  </mat-slide-toggle>
43
40
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
44
41
  }
@@ -51,11 +48,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
51
48
  { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }
52
49
  ],
53
50
  template: `
54
- <mat-slide-toggle
55
- class="d-block" [formControl]="ctrl"
56
- [disabled]="readonly()"
57
- (change)="onSlideToggleChange($event.checked)"
58
- >
51
+ <mat-slide-toggle class="d-block" [formControl]="ctrl" [disabled]="readonly()" (change)="onSlideToggleChange($event.checked)">
52
+ <ng-content select="label"></ng-content>
59
53
  </mat-slide-toggle>
60
54
  `
61
55
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-slide-toggle.mjs","sources":["../../../projects/iss/slide-toggle/src/slide-toggle.control.ts","../../../projects/iss/slide-toggle/src/public-api.ts","../../../projects/iss/slide-toggle/src/iss-ctrl-slide-toggle.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-slide-toggle>` — an on/off switch for a boolean value.\n *\n * @example\n * ```html\n * <iss-ctrl-slide-toggle formControlName=\"active\" (onChange)=\"save($event)\"/>\n * ```\n *\n * ### Own inputs\n * None — the control is configured entirely through the inherited properties.\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Does not project a label the field label is rendered by the wrapping `iss-field-*`.\n */\n@Component({\n selector: \"iss-ctrl-slide-toggle\",\n imports: [MatSlideToggleModule, ReactiveFormsModule],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }\n ],\n template: `\n <mat-slide-toggle\n class=\"d-block\" [formControl]=\"ctrl\"\n [disabled]=\"readonly()\"\n (change)=\"onSlideToggleChange($event.checked)\"\n >\n </mat-slide-toggle>\n `\n})\nexport class SlideToggleControl extends ControlBase {\n onSlideToggleChange(checked: boolean) {\n if (this.readonly()) {\n return;\n }\n this.markAsTouched();\n this.emitValue(checked);\n }\n}\n","// The slide-toggle control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./slide-toggle.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAKA;;;;;;;;;;;;;;;AAeG;AAgBG,MAAO,kBAAmB,SAAQ,WAAW,CAAA;AACjD,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IACzB;uGAPW,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EAZlB;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI;SAC3E,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;;;;GAOT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAXS,oBAAoB,yXAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAaxC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AACpD,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,oBAAoB,EAAE,KAAK,EAAE,IAAI;AAC3E,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;AAOT,EAAA;AACF,iBAAA;;;ACnCD;AACA;;ACDA;;AAEG;;;;"}
1
+ {"version":3,"file":"iss-ctrl-slide-toggle.mjs","sources":["../../../projects/iss/slide-toggle/src/slide-toggle.control.ts","../../../projects/iss/slide-toggle/src/public-api.ts","../../../projects/iss/slide-toggle/src/iss-ctrl-slide-toggle.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatSlideToggleModule } from \"@angular/material/slide-toggle\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-slide-toggle>` — an on/off switch for a boolean value.\n *\n * @example\n * ```html\n * <iss-ctrl-slide-toggle formControlName=\"active\" (onChange)=\"save($event)\"/>\n * ```\n *\n * ### Own inputs\n * None — the control is configured entirely through the inherited properties.\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Projects a `<label>` above the control the wrapping `iss-field-*` passes the field label in that way.\n */\n@Component({\n selector: \"iss-ctrl-slide-toggle\",\n imports: [MatSlideToggleModule, ReactiveFormsModule],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: SlideToggleControl, multi: true }\n ],\n template: `\n <mat-slide-toggle class=\"d-block\" [formControl]=\"ctrl\" [disabled]=\"readonly()\" (change)=\"onSlideToggleChange($event.checked)\">\n <ng-content select=\"label\"></ng-content>\n </mat-slide-toggle>\n `\n})\nexport class SlideToggleControl extends ControlBase {\n onSlideToggleChange(checked: boolean) {\n if (this.readonly()) {\n return;\n }\n this.markAsTouched();\n this.emitValue(checked);\n }\n}\n","// The slide-toggle control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./slide-toggle.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;AAKA;;;;;;;;;;;;;;;AAeG;AAaG,MAAO,kBAAmB,SAAQ,WAAW,CAAA;AACjD,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;IACzB;uGAPW,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EATlB;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI;SAC3E,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EACS;;;;GAIT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EARS,oBAAoB,yXAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAUxC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AACpD,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,oBAAoB,EAAE,KAAK,EAAE,IAAI;AAC3E,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;AAIT,EAAA;AACF,iBAAA;;;AChCD;AACA;;ACDA;;AAEG;;;;"}
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { viewChild, ViewContainerRef, inject, DestroyRef, effect, Component, input, signal, computed, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
3
3
  import * as i1$1 from '@angular/forms';
4
4
  import { FormGroup, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { L as Loader, d as FormEngine, I as IssField, O as Outlet, F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
5
+ import { L as Loader, d as FormEngine, I as IssField, O as Outlet, F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import * as i1 from '@angular/material/form-field';
8
8
  import { MatFormFieldModule } from '@angular/material/form-field';
@@ -591,4 +591,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
591
591
  }] });
592
592
 
593
593
  export { TableField };
594
- //# sourceMappingURL=iss-ctrl-table.field-E0r9w0os.mjs.map
594
+ //# sourceMappingURL=iss-ctrl-table.field-DdFjH-D8.mjs.map