iss-ctrl 0.0.11 → 0.0.12

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 (287) hide show
  1. package/fesm2022/{iss-ctrl-iss-ctrl-hz0ibyPg.mjs → iss-ctrl-iss-ctrl-WfIqBEcL.mjs} +1348 -195
  2. package/fesm2022/iss-ctrl-iss-ctrl-WfIqBEcL.mjs.map +1 -0
  3. package/fesm2022/{iss-ctrl-load-event-BW5dKG8R.mjs → iss-ctrl-load-event-SlQmVmyf.mjs} +3 -3
  4. package/fesm2022/{iss-ctrl-load-event-BW5dKG8R.mjs.map → iss-ctrl-load-event-SlQmVmyf.mjs.map} +1 -1
  5. package/fesm2022/{iss-ctrl-load-options-event-ClX9TiiD.mjs → iss-ctrl-load-options-event-CBejHpME.mjs} +3 -3
  6. package/fesm2022/{iss-ctrl-load-options-event-ClX9TiiD.mjs.map → iss-ctrl-load-options-event-CBejHpME.mjs.map} +1 -1
  7. package/fesm2022/{iss-ctrl-load-value-event-DThpI9BA.mjs → iss-ctrl-load-value-event-Bu9-rZ6T.mjs} +3 -3
  8. package/fesm2022/{iss-ctrl-load-value-event-DThpI9BA.mjs.map → iss-ctrl-load-value-event-Bu9-rZ6T.mjs.map} +1 -1
  9. package/fesm2022/{iss-ctrl-note.field-4uLl0oS_.mjs → iss-ctrl-note.field-onDjqI_X.mjs} +24 -2
  10. package/fesm2022/iss-ctrl-note.field-onDjqI_X.mjs.map +1 -0
  11. package/fesm2022/{iss-ctrl-replace-api-keys-BQL9zimJ.mjs → iss-ctrl-replace-api-keys-Chwe42Nu.mjs} +2 -2
  12. package/fesm2022/{iss-ctrl-replace-api-keys-BQL9zimJ.mjs.map → iss-ctrl-replace-api-keys-Chwe42Nu.mjs.map} +1 -1
  13. package/fesm2022/{iss-ctrl-set-value-event-BbEYFBe3.mjs → iss-ctrl-set-value-event-DiHESiPT.mjs} +2 -2
  14. package/fesm2022/{iss-ctrl-set-value-event-BbEYFBe3.mjs.map → iss-ctrl-set-value-event-DiHESiPT.mjs.map} +1 -1
  15. package/fesm2022/{iss-ctrl-table.field-kPIwve-M.mjs → iss-ctrl-table.field-DxwfNXNc.mjs} +77 -2
  16. package/fesm2022/iss-ctrl-table.field-DxwfNXNc.mjs.map +1 -0
  17. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-DuLD4SOS.mjs → iss-ctrl-trigger-based-on-json-value-CprcFCWi.mjs} +2 -2
  18. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-DuLD4SOS.mjs.map → iss-ctrl-trigger-based-on-json-value-CprcFCWi.mjs.map} +1 -1
  19. package/fesm2022/{iss-ctrl-user-picker.field-l-0bW6lP.mjs → iss-ctrl-user-picker.field-Mqi37i7D.mjs} +33 -8
  20. package/fesm2022/iss-ctrl-user-picker.field-Mqi37i7D.mjs.map +1 -0
  21. package/fesm2022/iss-ctrl.mjs +1 -1
  22. package/package.json +1 -1
  23. package/types/iss-ctrl.d.ts +1117 -0
  24. package/fesm2022/iss-ctrl-iss-ctrl-hz0ibyPg.mjs.map +0 -1
  25. package/fesm2022/iss-ctrl-note.field-4uLl0oS_.mjs.map +0 -1
  26. package/fesm2022/iss-ctrl-table.field-kPIwve-M.mjs.map +0 -1
  27. package/fesm2022/iss-ctrl-user-picker.field-l-0bW6lP.mjs.map +0 -1
  28. package/src/components/controls/mobile/flags/ad.svg +0 -282
  29. package/src/components/controls/mobile/flags/ae.svg +0 -6
  30. package/src/components/controls/mobile/flags/af.svg +0 -9
  31. package/src/components/controls/mobile/flags/ag.svg +0 -15
  32. package/src/components/controls/mobile/flags/ai.svg +0 -35
  33. package/src/components/controls/mobile/flags/al.svg +0 -7
  34. package/src/components/controls/mobile/flags/am.svg +0 -5
  35. package/src/components/controls/mobile/flags/ao.svg +0 -19
  36. package/src/components/controls/mobile/flags/aq.svg +0 -45
  37. package/src/components/controls/mobile/flags/ar.svg +0 -66
  38. package/src/components/controls/mobile/flags/as.svg +0 -225
  39. package/src/components/controls/mobile/flags/at.svg +0 -4
  40. package/src/components/controls/mobile/flags/au.svg +0 -32
  41. package/src/components/controls/mobile/flags/aw.svg +0 -11
  42. package/src/components/controls/mobile/flags/ax.svg +0 -11
  43. package/src/components/controls/mobile/flags/az.svg +0 -11
  44. package/src/components/controls/mobile/flags/ba.svg +0 -18
  45. package/src/components/controls/mobile/flags/bb.svg +0 -11
  46. package/src/components/controls/mobile/flags/bd.svg +0 -4
  47. package/src/components/controls/mobile/flags/be.svg +0 -5
  48. package/src/components/controls/mobile/flags/bf.svg +0 -14
  49. package/src/components/controls/mobile/flags/bg.svg +0 -5
  50. package/src/components/controls/mobile/flags/bh.svg +0 -4
  51. package/src/components/controls/mobile/flags/bi.svg +0 -26
  52. package/src/components/controls/mobile/flags/bj.svg +0 -5
  53. package/src/components/controls/mobile/flags/bl.svg +0 -5
  54. package/src/components/controls/mobile/flags/bm.svg +0 -374
  55. package/src/components/controls/mobile/flags/bn.svg +0 -70
  56. package/src/components/controls/mobile/flags/bo.svg +0 -3625
  57. package/src/components/controls/mobile/flags/bq.svg +0 -5
  58. package/src/components/controls/mobile/flags/br.svg +0 -92
  59. package/src/components/controls/mobile/flags/bs.svg +0 -5
  60. package/src/components/controls/mobile/flags/bt.svg +0 -487
  61. package/src/components/controls/mobile/flags/bv.svg +0 -11
  62. package/src/components/controls/mobile/flags/bw.svg +0 -5
  63. package/src/components/controls/mobile/flags/by.svg +0 -15
  64. package/src/components/controls/mobile/flags/bz.svg +0 -629
  65. package/src/components/controls/mobile/flags/ca.svg +0 -7
  66. package/src/components/controls/mobile/flags/cc.svg +0 -33
  67. package/src/components/controls/mobile/flags/cd.svg +0 -5
  68. package/src/components/controls/mobile/flags/cf.svg +0 -7
  69. package/src/components/controls/mobile/flags/cg.svg +0 -5
  70. package/src/components/controls/mobile/flags/ch.svg +0 -4
  71. package/src/components/controls/mobile/flags/ci.svg +0 -5
  72. package/src/components/controls/mobile/flags/ck.svg +0 -29
  73. package/src/components/controls/mobile/flags/cl.svg +0 -14
  74. package/src/components/controls/mobile/flags/cm.svg +0 -15
  75. package/src/components/controls/mobile/flags/cn.svg +0 -11
  76. package/src/components/controls/mobile/flags/co.svg +0 -5
  77. package/src/components/controls/mobile/flags/cr.svg +0 -1332
  78. package/src/components/controls/mobile/flags/cu.svg +0 -6
  79. package/src/components/controls/mobile/flags/cv.svg +0 -24
  80. package/src/components/controls/mobile/flags/cw.svg +0 -16
  81. package/src/components/controls/mobile/flags/cx.svg +0 -24
  82. package/src/components/controls/mobile/flags/cy.svg +0 -13
  83. package/src/components/controls/mobile/flags/cz.svg +0 -5
  84. package/src/components/controls/mobile/flags/de.svg +0 -5
  85. package/src/components/controls/mobile/flags/dj.svg +0 -6
  86. package/src/components/controls/mobile/flags/dk.svg +0 -5
  87. package/src/components/controls/mobile/flags/dm.svg +0 -198
  88. package/src/components/controls/mobile/flags/do.svg +0 -238
  89. package/src/components/controls/mobile/flags/dz.svg +0 -5
  90. package/src/components/controls/mobile/flags/ec.svg +0 -1292
  91. package/src/components/controls/mobile/flags/ee.svg +0 -5
  92. package/src/components/controls/mobile/flags/eg.svg +0 -125
  93. package/src/components/controls/mobile/flags/eh.svg +0 -12
  94. package/src/components/controls/mobile/flags/er.svg +0 -9
  95. package/src/components/controls/mobile/flags/es.svg +0 -445
  96. package/src/components/controls/mobile/flags/et.svg +0 -16
  97. package/src/components/controls/mobile/flags/eu.svg +0 -28
  98. package/src/components/controls/mobile/flags/fi.svg +0 -5
  99. package/src/components/controls/mobile/flags/fj.svg +0 -203
  100. package/src/components/controls/mobile/flags/fk.svg +0 -922
  101. package/src/components/controls/mobile/flags/flags.png +0 -0
  102. package/src/components/controls/mobile/flags/flags@2x.png +0 -0
  103. package/src/components/controls/mobile/flags/fm.svg +0 -16
  104. package/src/components/controls/mobile/flags/fo.svg +0 -11
  105. package/src/components/controls/mobile/flags/fonts.css +0 -271
  106. package/src/components/controls/mobile/flags/fr.svg +0 -5
  107. package/src/components/controls/mobile/flags/ga.svg +0 -5
  108. package/src/components/controls/mobile/flags/gb-eng.svg +0 -7
  109. package/src/components/controls/mobile/flags/gb-nir.svg +0 -15
  110. package/src/components/controls/mobile/flags/gb-sct.svg +0 -11
  111. package/src/components/controls/mobile/flags/gb-wls.svg +0 -16
  112. package/src/components/controls/mobile/flags/gb.svg +0 -15
  113. package/src/components/controls/mobile/flags/gd.svg +0 -11
  114. package/src/components/controls/mobile/flags/ge.svg +0 -17
  115. package/src/components/controls/mobile/flags/gf.svg +0 -5
  116. package/src/components/controls/mobile/flags/gg.svg +0 -8
  117. package/src/components/controls/mobile/flags/gh.svg +0 -6
  118. package/src/components/controls/mobile/flags/gi.svg +0 -69
  119. package/src/components/controls/mobile/flags/gl.svg +0 -4
  120. package/src/components/controls/mobile/flags/gm.svg +0 -7
  121. package/src/components/controls/mobile/flags/gn.svg +0 -5
  122. package/src/components/controls/mobile/flags/gp.svg +0 -5
  123. package/src/components/controls/mobile/flags/gq.svg +0 -88
  124. package/src/components/controls/mobile/flags/gr.svg +0 -4
  125. package/src/components/controls/mobile/flags/gs.svg +0 -693
  126. package/src/components/controls/mobile/flags/gt.svg +0 -317
  127. package/src/components/controls/mobile/flags/gu.svg +0 -58
  128. package/src/components/controls/mobile/flags/gw.svg +0 -13
  129. package/src/components/controls/mobile/flags/gy.svg +0 -7
  130. package/src/components/controls/mobile/flags/hk.svg +0 -17
  131. package/src/components/controls/mobile/flags/hm.svg +0 -32
  132. package/src/components/controls/mobile/flags/hn.svg +0 -10
  133. package/src/components/controls/mobile/flags/hr.svg +0 -282
  134. package/src/components/controls/mobile/flags/ht.svg +0 -1470
  135. package/src/components/controls/mobile/flags/hu.svg +0 -5
  136. package/src/components/controls/mobile/flags/id.svg +0 -4
  137. package/src/components/controls/mobile/flags/ie.svg +0 -5
  138. package/src/components/controls/mobile/flags/il.svg +0 -5
  139. package/src/components/controls/mobile/flags/im.svg +0 -33
  140. package/src/components/controls/mobile/flags/in.svg +0 -25
  141. package/src/components/controls/mobile/flags/io.svg +0 -895
  142. package/src/components/controls/mobile/flags/iq.svg +0 -12
  143. package/src/components/controls/mobile/flags/ir.svg +0 -31
  144. package/src/components/controls/mobile/flags/is.svg +0 -5
  145. package/src/components/controls/mobile/flags/it.svg +0 -5
  146. package/src/components/controls/mobile/flags/je.svg +0 -40
  147. package/src/components/controls/mobile/flags/jm.svg +0 -9
  148. package/src/components/controls/mobile/flags/jo.svg +0 -10
  149. package/src/components/controls/mobile/flags/jp.svg +0 -4
  150. package/src/components/controls/mobile/flags/ke.svg +0 -28
  151. package/src/components/controls/mobile/flags/kg.svg +0 -7
  152. package/src/components/controls/mobile/flags/kh.svg +0 -133
  153. package/src/components/controls/mobile/flags/ki.svg +0 -54
  154. package/src/components/controls/mobile/flags/km.svg +0 -13
  155. package/src/components/controls/mobile/flags/kn.svg +0 -24
  156. package/src/components/controls/mobile/flags/kp.svg +0 -16
  157. package/src/components/controls/mobile/flags/kr.svg +0 -16
  158. package/src/components/controls/mobile/flags/kw.svg +0 -6
  159. package/src/components/controls/mobile/flags/ky.svg +0 -153
  160. package/src/components/controls/mobile/flags/kz.svg +0 -49
  161. package/src/components/controls/mobile/flags/la.svg +0 -5
  162. package/src/components/controls/mobile/flags/lb.svg +0 -8
  163. package/src/components/controls/mobile/flags/lc.svg +0 -6
  164. package/src/components/controls/mobile/flags/li.svg +0 -75
  165. package/src/components/controls/mobile/flags/lk.svg +0 -50
  166. package/src/components/controls/mobile/flags/lr.svg +0 -15
  167. package/src/components/controls/mobile/flags/ls.svg +0 -32
  168. package/src/components/controls/mobile/flags/lt.svg +0 -5
  169. package/src/components/controls/mobile/flags/lu.svg +0 -5
  170. package/src/components/controls/mobile/flags/lv.svg +0 -4
  171. package/src/components/controls/mobile/flags/ly.svg +0 -8
  172. package/src/components/controls/mobile/flags/ma.svg +0 -4
  173. package/src/components/controls/mobile/flags/mc.svg +0 -4
  174. package/src/components/controls/mobile/flags/md.svg +0 -102
  175. package/src/components/controls/mobile/flags/me.svg +0 -240
  176. package/src/components/controls/mobile/flags/mf.svg +0 -5
  177. package/src/components/controls/mobile/flags/mg.svg +0 -5
  178. package/src/components/controls/mobile/flags/mh.svg +0 -18
  179. package/src/components/controls/mobile/flags/mk.svg +0 -6
  180. package/src/components/controls/mobile/flags/ml.svg +0 -5
  181. package/src/components/controls/mobile/flags/mm.svg +0 -12
  182. package/src/components/controls/mobile/flags/mn.svg +0 -12
  183. package/src/components/controls/mobile/flags/mo.svg +0 -13
  184. package/src/components/controls/mobile/flags/mp.svg +0 -2919
  185. package/src/components/controls/mobile/flags/mq.svg +0 -5
  186. package/src/components/controls/mobile/flags/mr.svg +0 -5
  187. package/src/components/controls/mobile/flags/ms.svg +0 -59
  188. package/src/components/controls/mobile/flags/mt.svg +0 -52
  189. package/src/components/controls/mobile/flags/mu.svg +0 -6
  190. package/src/components/controls/mobile/flags/mv.svg +0 -8
  191. package/src/components/controls/mobile/flags/mw.svg +0 -24
  192. package/src/components/controls/mobile/flags/mx.svg +0 -1129
  193. package/src/components/controls/mobile/flags/my.svg +0 -12
  194. package/src/components/controls/mobile/flags/mz.svg +0 -50
  195. package/src/components/controls/mobile/flags/na.svg +0 -17
  196. package/src/components/controls/mobile/flags/nc.svg +0 -5
  197. package/src/components/controls/mobile/flags/ne.svg +0 -6
  198. package/src/components/controls/mobile/flags/nf.svg +0 -8
  199. package/src/components/controls/mobile/flags/ng.svg +0 -4
  200. package/src/components/controls/mobile/flags/ni.svg +0 -281
  201. package/src/components/controls/mobile/flags/nl.svg +0 -5
  202. package/src/components/controls/mobile/flags/no.svg +0 -11
  203. package/src/components/controls/mobile/flags/np.svg +0 -33
  204. package/src/components/controls/mobile/flags/nr.svg +0 -8
  205. package/src/components/controls/mobile/flags/nu.svg +0 -23
  206. package/src/components/controls/mobile/flags/nz.svg +0 -37
  207. package/src/components/controls/mobile/flags/om.svg +0 -307
  208. package/src/components/controls/mobile/flags/pa.svg +0 -15
  209. package/src/components/controls/mobile/flags/pe.svg +0 -767
  210. package/src/components/controls/mobile/flags/pf.svg +0 -38
  211. package/src/components/controls/mobile/flags/pg.svg +0 -16
  212. package/src/components/controls/mobile/flags/ph.svg +0 -28
  213. package/src/components/controls/mobile/flags/pk.svg +0 -7
  214. package/src/components/controls/mobile/flags/pl.svg +0 -4
  215. package/src/components/controls/mobile/flags/pm.svg +0 -5
  216. package/src/components/controls/mobile/flags/pn.svg +0 -131
  217. package/src/components/controls/mobile/flags/pr.svg +0 -6
  218. package/src/components/controls/mobile/flags/ps.svg +0 -6
  219. package/src/components/controls/mobile/flags/pt.svg +0 -79
  220. package/src/components/controls/mobile/flags/pw.svg +0 -4
  221. package/src/components/controls/mobile/flags/py.svg +0 -192
  222. package/src/components/controls/mobile/flags/qa.svg +0 -7
  223. package/src/components/controls/mobile/flags/re.svg +0 -5
  224. package/src/components/controls/mobile/flags/ro.svg +0 -5
  225. package/src/components/controls/mobile/flags/rs.svg +0 -1143
  226. package/src/components/controls/mobile/flags/ru.svg +0 -5
  227. package/src/components/controls/mobile/flags/rw.svg +0 -17
  228. package/src/components/controls/mobile/flags/sa.svg +0 -23
  229. package/src/components/controls/mobile/flags/sb.svg +0 -30
  230. package/src/components/controls/mobile/flags/sc.svg +0 -7
  231. package/src/components/controls/mobile/flags/sd.svg +0 -6
  232. package/src/components/controls/mobile/flags/se.svg +0 -5
  233. package/src/components/controls/mobile/flags/sg.svg +0 -15
  234. package/src/components/controls/mobile/flags/sh.svg +0 -15
  235. package/src/components/controls/mobile/flags/si.svg +0 -30
  236. package/src/components/controls/mobile/flags/sj.svg +0 -11
  237. package/src/components/controls/mobile/flags/sk.svg +0 -21
  238. package/src/components/controls/mobile/flags/sl.svg +0 -5
  239. package/src/components/controls/mobile/flags/sm.svg +0 -847
  240. package/src/components/controls/mobile/flags/sn.svg +0 -15
  241. package/src/components/controls/mobile/flags/so.svg +0 -13
  242. package/src/components/controls/mobile/flags/sr.svg +0 -6
  243. package/src/components/controls/mobile/flags/ss.svg +0 -8
  244. package/src/components/controls/mobile/flags/st.svg +0 -16
  245. package/src/components/controls/mobile/flags/stc-icons.css +0 -1
  246. package/src/components/controls/mobile/flags/sv.svg +0 -3368
  247. package/src/components/controls/mobile/flags/sx.svg +0 -172
  248. package/src/components/controls/mobile/flags/sy.svg +0 -6
  249. package/src/components/controls/mobile/flags/sz.svg +0 -54
  250. package/src/components/controls/mobile/flags/tc.svg +0 -88
  251. package/src/components/controls/mobile/flags/td.svg +0 -5
  252. package/src/components/controls/mobile/flags/tf.svg +0 -18
  253. package/src/components/controls/mobile/flags/tg.svg +0 -15
  254. package/src/components/controls/mobile/flags/th.svg +0 -5
  255. package/src/components/controls/mobile/flags/tj.svg +0 -32
  256. package/src/components/controls/mobile/flags/tk.svg +0 -25
  257. package/src/components/controls/mobile/flags/tl.svg +0 -6
  258. package/src/components/controls/mobile/flags/tm.svg +0 -349
  259. package/src/components/controls/mobile/flags/tn.svg +0 -9
  260. package/src/components/controls/mobile/flags/to.svg +0 -8
  261. package/src/components/controls/mobile/flags/tr.svg +0 -6
  262. package/src/components/controls/mobile/flags/tt.svg +0 -5
  263. package/src/components/controls/mobile/flags/tv.svg +0 -18
  264. package/src/components/controls/mobile/flags/tw.svg +0 -12
  265. package/src/components/controls/mobile/flags/tz.svg +0 -13
  266. package/src/components/controls/mobile/flags/ua.svg +0 -4
  267. package/src/components/controls/mobile/flags/ug.svg +0 -46
  268. package/src/components/controls/mobile/flags/um.svg +0 -25
  269. package/src/components/controls/mobile/flags/us.svg +0 -25
  270. package/src/components/controls/mobile/flags/uy.svg +0 -138
  271. package/src/components/controls/mobile/flags/uz.svg +0 -30
  272. package/src/components/controls/mobile/flags/va.svg +0 -277
  273. package/src/components/controls/mobile/flags/vc.svg +0 -9
  274. package/src/components/controls/mobile/flags/ve.svg +0 -28
  275. package/src/components/controls/mobile/flags/vg.svg +0 -96
  276. package/src/components/controls/mobile/flags/vi.svg +0 -311
  277. package/src/components/controls/mobile/flags/vn.svg +0 -12
  278. package/src/components/controls/mobile/flags/vu.svg +0 -20
  279. package/src/components/controls/mobile/flags/wf.svg +0 -7
  280. package/src/components/controls/mobile/flags/ws.svg +0 -14
  281. package/src/components/controls/mobile/flags/xk.svg +0 -11
  282. package/src/components/controls/mobile/flags/ye.svg +0 -5
  283. package/src/components/controls/mobile/flags/yt.svg +0 -5
  284. package/src/components/controls/mobile/flags/za.svg +0 -17
  285. package/src/components/controls/mobile/flags/zm.svg +0 -20
  286. package/src/components/controls/mobile/flags/zw.svg +0 -130
  287. package/src/upgrade.scss +0 -68
@@ -20,27 +20,112 @@ interface Hint {
20
20
  align: HintAlignment;
21
21
  }
22
22
 
23
+ /**
24
+ * Base class for every `iss-ctrl-*` control.
25
+ *
26
+ * Controls are the presentational layer: they know nothing about {@link IssField} and are
27
+ * driven purely by bindings, so they can be used standalone inside any reactive form.
28
+ * Every control below inherits the properties declared here and adds its own on top.
29
+ *
30
+ * ### Inherited inputs
31
+ * | Property | Type | Default | Description |
32
+ * | --- | --- | --- | --- |
33
+ * | `formControlName` | `string` | `""` | Name of the control in the surrounding `FormGroup`. |
34
+ * | `placeholder` | `string` | `""` | Placeholder text shown while the field is empty. |
35
+ * | `readonly` | `boolean` | `false` | Renders the value but blocks every interaction. |
36
+ * | `multiple` | `boolean \| undefined` | `false` | Allows more than one value, where the control supports it. |
37
+ * | `min` | `number \| string \| null` | `null` | Lower bound (number or date/time string). |
38
+ * | `max` | `number \| string \| null` | `null` | Upper bound (number or date/time string). |
39
+ * | `minLength` | `number \| null` | `null` | Minimum number of characters. |
40
+ * | `maxLength` | `number \| null` | `null` | Maximum number of characters. |
41
+ * | `hints` | `Hint[]` | `[]` | Helper messages rendered under the field. |
42
+ * | `className` | `string \| null` | `null` | Extra CSS classes for the host. |
43
+ *
44
+ * ### Inherited outputs
45
+ * | Event | Payload | Description |
46
+ * | --- | --- | --- |
47
+ * | `(onChange)` | `any` | Fires after every committed value change. |
48
+ *
49
+ * ### Not inputs
50
+ * `disabled` and `touched` are signals owned by the control. Disable a control through the
51
+ * forms API (`ctrl.disable()` or a `disabled` field config), never with a template binding.
52
+ *
53
+ * ### Content projection
54
+ * Controls that render a `mat-form-field` project `<label>` into the floating label.
55
+ * The label space collapses automatically when no `<label>` is supplied.
56
+ *
57
+ * @example
58
+ * ```html
59
+ * <iss-ctrl-input formControlName="email" [readonly]="false" (onChange)="save($event)">
60
+ * <label>Email</label>
61
+ * </iss-ctrl-input>
62
+ * ```
63
+ */
23
64
  declare class ControlBase implements ControlValueAccessor, Validator {
65
+ /**
66
+ * Name of this control inside the surrounding `FormGroup`.
67
+ */
24
68
  formControlName: InputSignal<string>;
69
+ /**
70
+ * Lower bound forwarded to the underlying input — a number, or a date/time string.
71
+ */
25
72
  min: InputSignal<number | string | null>;
73
+ /**
74
+ * Upper bound forwarded to the underlying input — a number, or a date/time string.
75
+ */
26
76
  max: InputSignal<number | string | null>;
77
+ /**
78
+ * Minimum number of characters accepted by the underlying input.
79
+ */
27
80
  minLength: InputSignal<number | null>;
81
+ /**
82
+ * Maximum number of characters accepted by the underlying input.
83
+ */
28
84
  maxLength: InputSignal<number | null>;
85
+ /**
86
+ * Disabled state. **Not an input** — it is set by the forms API through
87
+ * {@link ControlBase.setDisabledState}. Disable via `ctrl.disable()` or the field config.
88
+ */
29
89
  disabled: WritableSignal<boolean>;
90
+ /**
91
+ * Renders the current value but blocks every user interaction.
92
+ */
30
93
  readonly: InputSignal<boolean>;
94
+ /**
95
+ * Allows selecting/entering more than one value, on controls that support it.
96
+ */
31
97
  multiple: InputSignal<boolean | undefined>;
98
+ /**
99
+ * Placeholder text shown while the control has no value.
100
+ */
32
101
  placeholder: InputSignal<string>;
102
+ /**
103
+ * Helper messages rendered beneath the field. See {@link Hint}.
104
+ */
33
105
  hints: InputSignal<Hint[]>;
106
+ /**
107
+ * Extra CSS class names applied to the control host.
108
+ */
34
109
  className: InputSignal<string | null>;
110
+ /**
111
+ * Whether the user has interacted with the control. Owned by the control, not an input.
112
+ */
35
113
  touched: WritableSignal<boolean>;
114
+ /**
115
+ * Emits the committed value after every change.
116
+ */
36
117
  onChange: OutputEmitterRef<any>;
37
118
  protected ctrl: FormControl;
119
+ protected hasLabel: WritableSignal<boolean>;
120
+ private hostRef;
121
+ constructor();
38
122
  registerOnChange(fn: () => void): void;
39
123
  registerOnTouched(fn: () => void): void;
40
124
  setDisabledState(isDisabled: boolean): void;
41
125
  writeValue(value: string | FormData | Date | null): void;
42
126
  markAsTouched(): void;
43
127
  validate(control: AbstractControl): ValidationErrors | null;
128
+ private hasProjectedLabel;
44
129
  protected onTouch: () => void;
45
130
  protected onPropagateValue: (_: any) => void;
46
131
  protected emitValue(value?: any): void;
@@ -50,9 +135,36 @@ declare class ControlBase implements ControlValueAccessor, Validator {
50
135
  static ɵcmp: i0.ɵɵComponentDeclaration<ControlBase, "ng-component", never, { "formControlName": { "alias": "formControlName"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hints": { "alias": "hints"; "required": false; "isSignal": true; }; "className": { "alias": "className"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
51
136
  }
52
137
 
138
+ /**
139
+ * `<iss-ctrl-checkbox>` — a list of checkboxes over a fixed set of options.
140
+ *
141
+ * The form value is the comma separated list of selected option values, while `(onChange)`
142
+ * emits the resolved `Option[]` (or `null` when nothing is selected).
143
+ *
144
+ * @example
145
+ * ```html
146
+ * <iss-ctrl-checkbox formControlName="days" [options]="days" (onChange)="pick($event)"/>
147
+ * ```
148
+ *
149
+ * ### Own inputs
150
+ * | Property | Type | Default | Description |
151
+ * | --- | --- | --- | --- |
152
+ * | `options` | `Option[]` | **required** | The selectable choices. |
153
+ *
154
+ * ### Inherited from {@link ControlBase}
155
+ * `formControlName` · `readonly` · `className` · `(onChange)`
156
+ *
157
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
158
+ */
53
159
  declare class CheckboxControl extends ControlBase {
54
160
  #private;
161
+ /**
162
+ * Selectable choices, each a `{ value, label }` pair. Required.
163
+ */
55
164
  options: InputSignal<Option[]>;
165
+ /**
166
+ * Currently checked options, keyed by value. Internal state, not an input.
167
+ */
56
168
  selectedOptions: WritableSignal<Map<string, Option>>;
57
169
  writeValue(value: string | null): void;
58
170
  addToSelectedOptionsMap(option: Map<string, Option>): void;
@@ -63,8 +175,32 @@ declare class CheckboxControl extends ControlBase {
63
175
  static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxControl, "iss-ctrl-checkbox", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
64
176
  }
65
177
 
178
+ /**
179
+ * `<iss-ctrl-chips>` — free text entered as removable chips.
180
+ *
181
+ * Each `Enter` turns the typed text into a chip. The form value is the comma separated list
182
+ * of chip labels.
183
+ *
184
+ * @example
185
+ * ```html
186
+ * <iss-ctrl-chips formControlName="tags" placeholder="Add a tag">
187
+ * <label>Tags</label>
188
+ * </iss-ctrl-chips>
189
+ * ```
190
+ *
191
+ * ### Own inputs
192
+ * None — the control is configured entirely through the inherited properties.
193
+ *
194
+ * ### Inherited from {@link ControlBase}
195
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder`
196
+ *
197
+ * Projects `<label>` into the floating label; omit it to render the control without one.
198
+ */
66
199
  declare class ChipsControl extends ControlBase {
67
200
  #private;
201
+ /**
202
+ * The chips currently rendered. Internal state, not an input.
203
+ */
68
204
  readonly keywords: WritableSignal<string[]>;
69
205
  writeValue(value: string | null): void;
70
206
  remove(keyword: string): void;
@@ -73,9 +209,43 @@ declare class ChipsControl extends ControlBase {
73
209
  static ɵcmp: i0.ɵɵComponentDeclaration<ChipsControl, "iss-ctrl-chips", never, {}, {}, never, ["label"], true, never>;
74
210
  }
75
211
 
212
+ /**
213
+ * `<iss-ctrl-date-picker>` — single date selection through a Material calendar.
214
+ *
215
+ * The input itself is read-only; clicking it opens the calendar. The emitted value is a
216
+ * `yyyy-MM-dd` string, and a clear button appears once a date is picked.
217
+ *
218
+ * @example
219
+ * ```html
220
+ * <iss-ctrl-date-picker formControlName="startsOn" [minDate]="today" [disabledDays]="[5, 6]">
221
+ * <label>Start date</label>
222
+ * </iss-ctrl-date-picker>
223
+ * ```
224
+ *
225
+ * ### Own inputs
226
+ * | Property | Type | Default | Description |
227
+ * | --- | --- | --- | --- |
228
+ * | `minDate` | `Date \| null` | `null` | Earliest selectable date. |
229
+ * | `maxDate` | `Date \| null` | `null` | Latest selectable date. |
230
+ * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
231
+ *
232
+ * ### Inherited from {@link ControlBase}
233
+ * `formControlName` · `readonly` · `className` · `(onChange)`
234
+ *
235
+ * Projects `<label>` into the floating label; omit it to render the control without one.
236
+ */
76
237
  declare class DatePickerControl extends ControlBase implements Validator {
238
+ /**
239
+ * Week days that cannot be selected — `0` is Sunday through `6` for Saturday.
240
+ */
77
241
  disabledDays: InputSignal<number[]>;
242
+ /**
243
+ * Earliest selectable date.
244
+ */
78
245
  minDate: InputSignal<Date | null>;
246
+ /**
247
+ * Latest selectable date.
248
+ */
79
249
  maxDate: InputSignal<Date | null>;
80
250
  clear(event: MouseEvent): void;
81
251
  protected calendarDaysFilter: (d: Date | null) => boolean;
@@ -91,12 +261,56 @@ interface DateRangeEmission {
91
261
  end: string;
92
262
  }
93
263
 
264
+ /**
265
+ * `<iss-ctrl-date-range-picker>` — a start/end date range in one field.
266
+ *
267
+ * A half-filled range is not a value: clearing either endpoint clears the form value and
268
+ * emits `null`. The form value is a `yyyy-MM-dd` string pair; `(onDateRangeObjectChange)`
269
+ * emits the same range as a {@link DateRangeEmission} object.
270
+ *
271
+ * @example
272
+ * ```html
273
+ * <iss-ctrl-date-range-picker formControlName="period" (onDateRangeObjectChange)="apply($event)">
274
+ * <label>Period</label>
275
+ * </iss-ctrl-date-range-picker>
276
+ * ```
277
+ *
278
+ * ### Own inputs
279
+ * | Property | Type | Default | Description |
280
+ * | --- | --- | --- | --- |
281
+ * | `minDate` | `Date \| null` | `null` | Earliest selectable date. |
282
+ * | `maxDate` | `Date \| null` | `null` | Latest selectable date. |
283
+ * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
284
+ *
285
+ * ### Inherited from {@link ControlBase}
286
+ * `formControlName` · `readonly` · `className` · `(onChange)`
287
+ *
288
+ * ### Outputs
289
+ * - `(onDateRangeObjectChange)` — `DateRangeEmission | null`, the range as an object.
290
+ *
291
+ * Projects `<label>` into the floating label; omit it to render the control without one.
292
+ */
94
293
  declare class DateRangePickerControl extends ControlBase implements OnInit, OnDestroy {
95
294
  #private;
295
+ /**
296
+ * Week days that cannot be selected — `0` is Sunday through `6` for Saturday.
297
+ */
96
298
  disabledDays: InputSignal<number[]>;
299
+ /**
300
+ * Earliest selectable date.
301
+ */
97
302
  minDate: InputSignal<Date | null>;
303
+ /**
304
+ * Latest selectable date.
305
+ */
98
306
  maxDate: InputSignal<Date | null>;
307
+ /**
308
+ * Emits the selected range as an object, or `null` while the range is incomplete.
309
+ */
99
310
  onDateRangeObjectChange: OutputEmitterRef<DateRangeEmission | null>;
311
+ /**
312
+ * The `start`/`end` form group backing the range input. Internal state.
313
+ */
100
314
  readonly range: FormGroup;
101
315
  ngOnInit(): void;
102
316
  setDisabledState(isDisabled: boolean): void;
@@ -109,13 +323,55 @@ declare class DateRangePickerControl extends ControlBase implements OnInit, OnDe
109
323
  static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerControl, "iss-ctrl-date-range-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "onDateRangeObjectChange": "onDateRangeObjectChange"; }, never, ["label"], true, never>;
110
324
  }
111
325
 
326
+ /**
327
+ * `<iss-ctrl-datetime-picker>` — a date and a time in a single field.
328
+ *
329
+ * Combines the calendar of the date picker with the time list of the time picker; both parts
330
+ * must be set before a value is emitted.
331
+ *
332
+ * @example
333
+ * ```html
334
+ * <iss-ctrl-datetime-picker formControlName="scheduledAt" [minDate]="today" minTime="08:00" maxTime="17:00">
335
+ * <label>Scheduled at</label>
336
+ * </iss-ctrl-datetime-picker>
337
+ * ```
338
+ *
339
+ * ### Own inputs
340
+ * | Property | Type | Default | Description |
341
+ * | --- | --- | --- | --- |
342
+ * | `minDate` | `Date \| null` | `null` | Earliest selectable date. |
343
+ * | `maxDate` | `Date \| null` | `null` | Latest selectable date. |
344
+ * | `minTime` | `string \| null` | `null` | Earliest selectable time, `HH:mm`. |
345
+ * | `maxTime` | `string \| null` | `null` | Latest selectable time, `HH:mm`. |
346
+ * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
347
+ *
348
+ * ### Inherited from {@link ControlBase}
349
+ * `formControlName` · `readonly` · `className` · `(onChange)`
350
+ *
351
+ * Projects `<label>` into the floating label; omit it to render the control without one.
352
+ */
112
353
  declare class DatetimePickerControl extends ControlBase {
113
354
  #private;
114
355
  datetimeForm: FormGroup;
356
+ /**
357
+ * Week days that cannot be selected — `0` is Sunday through `6` for Saturday.
358
+ */
115
359
  disabledDays: InputSignal<number[]>;
360
+ /**
361
+ * Earliest selectable date.
362
+ */
116
363
  minDate: InputSignal<Date | null>;
364
+ /**
365
+ * Latest selectable date.
366
+ */
117
367
  maxDate: InputSignal<Date | null>;
368
+ /**
369
+ * Earliest selectable time of day, as `HH:mm`.
370
+ */
118
371
  minTime: InputSignal<string | null>;
372
+ /**
373
+ * Latest selectable time of day, as `HH:mm`.
374
+ */
119
375
  maxTime: InputSignal<string | null>;
120
376
  setDisabledState(isDisabled: boolean): void;
121
377
  emit(): void;
@@ -141,13 +397,63 @@ interface IssFile {
141
397
  file?: File;
142
398
  }
143
399
 
400
+ /**
401
+ * `<iss-ctrl-file-picker>` — attachment upload with a per-file progress and error state.
402
+ *
403
+ * Uploading is done by the host: the control emits the picked files and renders whatever is
404
+ * fed back through `uploadedFiles`, `uploading` and `uploadingError`.
405
+ *
406
+ * @example
407
+ * ```html
408
+ * <iss-ctrl-file-picker
409
+ * formControlName="attachments"
410
+ * [multiple]="true"
411
+ * accept=".pdf,.png"
412
+ * [uploading]="uploading()"
413
+ * [uploadedFiles]="uploaded()"
414
+ * />
415
+ * ```
416
+ *
417
+ * ### Own inputs
418
+ * | Property | Type | Default | Description |
419
+ * | --- | --- | --- | --- |
420
+ * | `accept` | `string \| undefined` | `undefined` | Accepted extensions or MIME types for the native picker. |
421
+ * | `showDownloadButton` | `boolean` | `true` | Shows the download action on each attachment. |
422
+ * | `showDeleteButton` | `boolean` | `true` | Shows the remove action on each attachment. |
423
+ * | `uploading` | `boolean` | `false` | Renders the in-progress state. |
424
+ * | `uploadedFiles` | `IssAttachment[]` | `[]` | Files already stored on the server. |
425
+ * | `uploadingError` | `string \| undefined` | `undefined` | Error message attached to the failed upload. |
426
+ *
427
+ * ### Inherited from {@link ControlBase}
428
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple` · `hints`
429
+ *
430
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
431
+ */
144
432
  declare class FilePickerControl extends ControlBase implements OnDestroy {
145
433
  #private;
434
+ /**
435
+ * Accepted extensions or MIME types, passed straight to the native file input.
436
+ */
146
437
  accept: InputSignal<string | undefined>;
438
+ /**
439
+ * Shows the download action on each listed attachment.
440
+ */
147
441
  showDownloadButton: InputSignal<boolean>;
442
+ /**
443
+ * Shows the remove action on each listed attachment.
444
+ */
148
445
  showDeleteButton: InputSignal<boolean>;
446
+ /**
447
+ * Renders the upload-in-progress state; set by the host that performs the upload.
448
+ */
149
449
  uploading: InputSignal<boolean>;
450
+ /**
451
+ * Attachments already stored on the server, merged into the rendered list.
452
+ */
150
453
  uploadedFiles: InputSignal<IssAttachment[]>;
454
+ /**
455
+ * Error message shown on the attachment whose upload failed.
456
+ */
151
457
  uploadingError: InputSignal<string | undefined>;
152
458
  readonly filesValue: Signal<any>;
153
459
  protected attachments: WritableSignal<IssFile[]>;
@@ -160,14 +466,68 @@ declare class FilePickerControl extends ControlBase implements OnDestroy {
160
466
  static ɵcmp: i0.ɵɵComponentDeclaration<FilePickerControl, "iss-ctrl-file-picker", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "showDownloadButton": { "alias": "showDownloadButton"; "required": false; "isSignal": true; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; "isSignal": true; }; "uploading": { "alias": "uploading"; "required": false; "isSignal": true; }; "uploadedFiles": { "alias": "uploadedFiles"; "required": false; "isSignal": true; }; "uploadingError": { "alias": "uploadingError"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
161
467
  }
162
468
 
469
+ /**
470
+ * `<iss-ctrl-input>` — single line text input, the base for every scalar text field.
471
+ *
472
+ * `type` is forwarded to the native input, so `number`, `email` and `password` variants all
473
+ * come from this one control.
474
+ *
475
+ * @example
476
+ * ```html
477
+ * <iss-ctrl-input formControlName="amount" type="number" [min]="0" suffixText="SAR">
478
+ * <label>Amount</label>
479
+ * </iss-ctrl-input>
480
+ * ```
481
+ *
482
+ * ### Own inputs
483
+ * | Property | Type | Default | Description |
484
+ * | --- | --- | --- | --- |
485
+ * | `type` | `string` | `"text"` | Native input type: `text`, `number`, `email`, `password`, … |
486
+ * | `prefixIcon` | `string` | `""` | Icon rendered before the value. |
487
+ * | `prefixText` | `string` | `""` | Text rendered before the value. |
488
+ * | `suffixIcon` | `string` | `""` | Icon rendered after the value. |
489
+ * | `suffixText` | `string` | `""` | Text rendered after the value. |
490
+ *
491
+ * ### Inherited from {@link ControlBase}
492
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `min` · `max` · `minLength` · `maxLength` · `hints`
493
+ *
494
+ * ### Outputs
495
+ * - `(onPrefixClick)` — `string`, the prefix affix was clicked.
496
+ * - `(onSuffixClick)` — `string`, the suffix affix was clicked.
497
+ *
498
+ * Projects `<label>` into the floating label; omit it to render the control without one.
499
+ *
500
+ * Also projects `[issPrefix]` and `[issSuffix]` for fully custom affixes.
501
+ */
163
502
  declare class InputControl extends ControlBase implements Validator, OnDestroy {
164
503
  #private;
504
+ /**
505
+ * Native input type — `text`, `number`, `email`, `password`, and so on.
506
+ */
165
507
  type: InputSignal<string>;
508
+ /**
509
+ * Icon name rendered before the value.
510
+ */
166
511
  prefixIcon: InputSignal<string>;
512
+ /**
513
+ * Static text rendered before the value.
514
+ */
167
515
  prefixText: InputSignal<string>;
516
+ /**
517
+ * Icon name rendered after the value.
518
+ */
168
519
  suffixIcon: InputSignal<string>;
520
+ /**
521
+ * Static text rendered after the value, a unit or currency for example.
522
+ */
169
523
  suffixText: InputSignal<string>;
524
+ /**
525
+ * Emits when the prefix affix is clicked.
526
+ */
170
527
  onPrefixClick: OutputEmitterRef<string>;
528
+ /**
529
+ * Emits when the suffix affix is clicked.
530
+ */
171
531
  onSuffixClick: OutputEmitterRef<string>;
172
532
  emitSuffixClick(): void;
173
533
  emitPrefixClick(): void;
@@ -211,11 +571,36 @@ declare class Phone {
211
571
  static ɵprov: i0.ɵɵInjectableDeclaration<Phone>;
212
572
  }
213
573
 
574
+ /**
575
+ * `<iss-ctrl-mobile>` — international phone number with a country selector.
576
+ *
577
+ * The number is validated against the selected country and stored in its international form.
578
+ *
579
+ * @example
580
+ * ```html
581
+ * <iss-ctrl-mobile formControlName="mobile" [preferredCountries]="['SA', 'AE']">
582
+ * <label>Mobile</label>
583
+ * </iss-ctrl-mobile>
584
+ * ```
585
+ *
586
+ * ### Own inputs
587
+ * | Property | Type | Default | Description |
588
+ * | --- | --- | --- | --- |
589
+ * | `preferredCountries` | `ISO2[]` | `["SA"]` | Countries pinned to the top of the country list. |
590
+ *
591
+ * ### Inherited from {@link ControlBase}
592
+ * `formControlName` · `readonly` · `className` · `(onChange)`
593
+ *
594
+ * Projects `<label>` into the floating label; omit it to render the control without one.
595
+ */
214
596
  declare class MobileControl extends ControlBase implements OnDestroy, Validator {
215
597
  #private;
216
598
  phoneService: Phone;
217
599
  isOpen: WritableSignal<boolean>;
218
600
  selectedCountry: WritableSignal<Country>;
601
+ /**
602
+ * ISO-2 country codes pinned to the top of the country list; the first one is preselected.
603
+ */
219
604
  preferredCountries: InputSignal<ISO2[]>;
220
605
  searchInput: FormControl;
221
606
  filteredCountries: Signal<Country[]>;
@@ -231,6 +616,26 @@ declare class MobileControl extends ControlBase implements OnDestroy, Validator
231
616
  static ɵcmp: i0.ɵɵComponentDeclaration<MobileControl, "iss-ctrl-mobile", never, { "preferredCountries": { "alias": "preferredCountries"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
232
617
  }
233
618
 
619
+ /**
620
+ * `<iss-ctrl-plate-number>` — Saudi vehicle plate, entered as digits and letters in both
621
+ * Arabic and English.
622
+ *
623
+ * Typing into one script fills the matching cell in the other automatically, and letters are
624
+ * validated against the allowed plate alphabet.
625
+ *
626
+ * @example
627
+ * ```html
628
+ * <iss-ctrl-plate-number formControlName="plate" [readonly]="false"/>
629
+ * ```
630
+ *
631
+ * ### Own inputs
632
+ * None — the control is configured entirely through the inherited properties.
633
+ *
634
+ * ### Inherited from {@link ControlBase}
635
+ * `formControlName` · `readonly` · `className` · `(onChange)`
636
+ *
637
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
638
+ */
234
639
  declare class PlateControl extends ControlBase {
235
640
  #private;
236
641
  numbersAr: i0.WritableSignal<string[]>;
@@ -250,7 +655,28 @@ declare class PlateControl extends ControlBase {
250
655
  static ɵcmp: i0.ɵɵComponentDeclaration<PlateControl, "iss-ctrl-plate-number", never, {}, {}, never, never, true, never>;
251
656
  }
252
657
 
658
+ /**
659
+ * `<iss-ctrl-radio>` — one choice out of a fixed set of options.
660
+ *
661
+ * @example
662
+ * ```html
663
+ * <iss-ctrl-radio formControlName="gender" [options]="genders"/>
664
+ * ```
665
+ *
666
+ * ### Own inputs
667
+ * | Property | Type | Default | Description |
668
+ * | --- | --- | --- | --- |
669
+ * | `options` | `Option[]` | **required** | The selectable choices. |
670
+ *
671
+ * ### Inherited from {@link ControlBase}
672
+ * `formControlName` · `readonly` · `className` · `(onChange)`
673
+ *
674
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
675
+ */
253
676
  declare class RadioControl extends ControlBase {
677
+ /**
678
+ * Selectable choices, each a `{ value, label }` pair. Required.
679
+ */
254
680
  options: InputSignal<Option[]>;
255
681
  writeValue(value: string | null): void;
256
682
  onRadioChange(value: string): void;
@@ -258,14 +684,60 @@ declare class RadioControl extends ControlBase {
258
684
  static ɵcmp: i0.ɵɵComponentDeclaration<RadioControl, "iss-ctrl-radio", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
259
685
  }
260
686
 
687
+ /**
688
+ * `<iss-ctrl-select>` — dropdown selection, single or multiple, with a search box.
689
+ *
690
+ * Typing in the search box emits `(onQueryChange)`, so options can be loaded remotely; set
691
+ * `loading` while that request is in flight.
692
+ *
693
+ * @example
694
+ * ```html
695
+ * <iss-ctrl-select
696
+ * formControlName="city"
697
+ * [options]="cities()"
698
+ * [multiple]="false"
699
+ * [loading]="loading()"
700
+ * (onQueryChange)="search($event)"
701
+ * >
702
+ * <label>City</label>
703
+ * </iss-ctrl-select>
704
+ * ```
705
+ *
706
+ * ### Own inputs
707
+ * | Property | Type | Default | Description |
708
+ * | --- | --- | --- | --- |
709
+ * | `options` | `Option[]` | **required** | The selectable choices. |
710
+ * | `height` | `string` | `"150px"` | Max height of the open panel. |
711
+ * | `loading` | `boolean` | `false` | Shows the loading state inside the panel. |
712
+ *
713
+ * ### Inherited from {@link ControlBase}
714
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `multiple`
715
+ *
716
+ * ### Outputs
717
+ * - `(onQueryChange)` — `string`, the current search text.
718
+ *
719
+ * Projects `<label>` into the floating label; omit it to render the control without one.
720
+ */
261
721
  declare class SelectControl extends ControlBase implements OnDestroy {
262
722
  #private;
263
723
  selectedOptions: WritableSignal<Map<string, Option>>;
724
+ /**
725
+ * Selectable choices, each a `{ value, label }` pair. Required.
726
+ */
264
727
  options: InputSignal<Option[]>;
728
+ /**
729
+ * Maximum height of the open options panel, as a CSS length.
730
+ */
265
731
  height: InputSignal<string>;
266
732
  query: Signal<string>;
267
733
  readonly filteredOptions: Signal<Option[]>;
734
+ /**
735
+ * Shows the loading state inside the panel while options are being fetched.
736
+ */
268
737
  loading: InputSignal<boolean>;
738
+ /**
739
+ * Emits the search text so the host can load matching options.
740
+ */
269
741
  onQueryChange: OutputEmitterRef<string>;
270
742
  protected optionTemplate: any;
271
743
  protected cardViewerTemplate: any;
@@ -281,12 +753,46 @@ declare class SelectControl extends ControlBase implements OnDestroy {
281
753
  static ɵcmp: i0.ɵɵComponentDeclaration<SelectControl, "iss-ctrl-select", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "onQueryChange": "onQueryChange"; }, ["optionTemplate", "cardViewerTemplate"], ["label"], true, never>;
282
754
  }
283
755
 
756
+ /**
757
+ * `<iss-ctrl-slide-toggle>` — an on/off switch for a boolean value.
758
+ *
759
+ * @example
760
+ * ```html
761
+ * <iss-ctrl-slide-toggle formControlName="active" (onChange)="save($event)"/>
762
+ * ```
763
+ *
764
+ * ### Own inputs
765
+ * None — the control is configured entirely through the inherited properties.
766
+ *
767
+ * ### Inherited from {@link ControlBase}
768
+ * `formControlName` · `readonly` · `className` · `(onChange)`
769
+ *
770
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
771
+ */
284
772
  declare class SlideToggleControl extends ControlBase {
285
773
  onSlideToggleChange(checked: boolean): void;
286
774
  static ɵfac: i0.ɵɵFactoryDeclaration<SlideToggleControl, never>;
287
775
  static ɵcmp: i0.ɵɵComponentDeclaration<SlideToggleControl, "iss-ctrl-slide-toggle", never, {}, {}, never, never, true, never>;
288
776
  }
289
777
 
778
+ /**
779
+ * `<iss-ctrl-textarea>` — multi line free text.
780
+ *
781
+ * @example
782
+ * ```html
783
+ * <iss-ctrl-textarea formControlName="notes" [maxLength]="500" placeholder="Add a note">
784
+ * <label>Notes</label>
785
+ * </iss-ctrl-textarea>
786
+ * ```
787
+ *
788
+ * ### Own inputs
789
+ * None — the control is configured entirely through the inherited properties.
790
+ *
791
+ * ### Inherited from {@link ControlBase}
792
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `minLength` · `maxLength` · `hints`
793
+ *
794
+ * Projects `<label>` into the floating label; omit it to render the control without one.
795
+ */
290
796
  declare class TextareaControl extends ControlBase implements OnDestroy {
291
797
  #private;
292
798
  ngOnDestroy(): void;
@@ -294,10 +800,41 @@ declare class TextareaControl extends ControlBase implements OnDestroy {
294
800
  static ɵcmp: i0.ɵɵComponentDeclaration<TextareaControl, "iss-ctrl-textarea", never, {}, {}, never, ["label"], true, never>;
295
801
  }
296
802
 
803
+ /**
804
+ * `<iss-ctrl-time-picker>` — time of day, picked from a list generated at a fixed interval.
805
+ *
806
+ * @example
807
+ * ```html
808
+ * <iss-ctrl-time-picker formControlName="startsAt" interval="15min" minTime="08:00" maxTime="17:00">
809
+ * <label>Starts at</label>
810
+ * </iss-ctrl-time-picker>
811
+ * ```
812
+ *
813
+ * ### Own inputs
814
+ * | Property | Type | Default | Description |
815
+ * | --- | --- | --- | --- |
816
+ * | `interval` | `string` | `"30min"` | Step between the offered times. |
817
+ * | `minTime` | `string \| null` | `null` | Earliest offered time, `HH:mm`. |
818
+ * | `maxTime` | `string \| null` | `null` | Latest offered time, `HH:mm`. |
819
+ *
820
+ * ### Inherited from {@link ControlBase}
821
+ * `formControlName` · `readonly` · `className` · `(onChange)`
822
+ *
823
+ * Projects `<label>` into the floating label; omit it to render the control without one.
824
+ */
297
825
  declare class TimePickerControl extends ControlBase {
298
826
  #private;
827
+ /**
828
+ * Step between the offered times, for example `"15min"` or `"30min"`.
829
+ */
299
830
  interval: InputSignal<string>;
831
+ /**
832
+ * Earliest offered time of day, as `HH:mm`.
833
+ */
300
834
  minTime: InputSignal<string | null>;
835
+ /**
836
+ * Latest offered time of day, as `HH:mm`.
837
+ */
301
838
  maxTime: InputSignal<string | null>;
302
839
  emit(evt: any): void;
303
840
  clear(event: MouseEvent): void;
@@ -306,8 +843,31 @@ declare class TimePickerControl extends ControlBase {
306
843
  static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerControl, "iss-ctrl-time-picker", never, { "interval": { "alias": "interval"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
307
844
  }
308
845
 
846
+ /**
847
+ * `<iss-ctrl-toggle-button>` — options rendered as a button group instead of a dropdown.
848
+ *
849
+ * With `multiple` set, several buttons can be active at once.
850
+ *
851
+ * @example
852
+ * ```html
853
+ * <iss-ctrl-toggle-button formControlName="priority" [options]="priorities" [multiple]="false"/>
854
+ * ```
855
+ *
856
+ * ### Own inputs
857
+ * | Property | Type | Default | Description |
858
+ * | --- | --- | --- | --- |
859
+ * | `options` | `Option[]` | **required** | The selectable choices. |
860
+ *
861
+ * ### Inherited from {@link ControlBase}
862
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple`
863
+ *
864
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
865
+ */
309
866
  declare class ToggleButtonControl extends ControlBase {
310
867
  #private;
868
+ /**
869
+ * Selectable choices, each a `{ value, label }` pair. Required.
870
+ */
311
871
  options: InputSignal<Option[]>;
312
872
  selectedOptions: WritableSignal<Map<string, Option>>;
313
873
  writeValue(value: string | null): void;
@@ -333,32 +893,131 @@ declare class FieldAsyncValidation {
333
893
  constructor(asyncValidation: any);
334
894
  }
335
895
 
896
+ /**
897
+ * Per-field configuration, reachable as `field.config` and consumed by the `iss-field-*`
898
+ * components. Every entry is a signal, so it can be changed at runtime by field events.
899
+ *
900
+ * Not every key applies to every field — the class doc of each `iss-field-*` component
901
+ * lists exactly which of these it reads.
902
+ *
903
+ * ### Keys by area
904
+ * - **Common:** `type` · `disabled` · `readonly` · `placeholder` · `suffix` · `hideLabel` · `multiple`
905
+ * - **Bounds:** `min` · `max` · `minLength` · `maxLength`
906
+ * - **Dates:** `minDate` · `maxDate` · `dateFilter`
907
+ * - **Attachments:** `allowedFileSize` · `allowedFileTypes` · `minFilesCount` · `maxFilesCount` · `templateId` · `templateUrl`
908
+ * - **Users:** `minUsersCount` · `maxUsersCount`
909
+ * - **Table:** `showInTableColumns` · `tableWithFilter` · `tableWithSort` · `tableWithPagination`
910
+ *
911
+ * @example
912
+ * ```json
913
+ * { "name": "email", "type": "text_input", "config": { "type": "email", "maxLength": 120 } }
914
+ * ```
915
+ */
336
916
  declare class FieldConfig {
917
+ /**
918
+ * Native input type for `text_input` (`text`, `email`, `number`, `password`, …).
919
+ */
337
920
  type: WritableSignal<string | undefined>;
921
+ /**
922
+ * Disables the control; the underlying `FormControl` is disabled on init.
923
+ */
338
924
  disabled: WritableSignal<boolean | undefined>;
925
+ /**
926
+ * Shows the value but blocks interaction. Unlike `disabled`, the value is still submitted.
927
+ */
339
928
  readonly: WritableSignal<boolean | undefined>;
929
+ /**
930
+ * Placeholder text shown while the field is empty.
931
+ */
340
932
  placeholder: WritableSignal<string | undefined>;
933
+ /**
934
+ * Text rendered after the value (a unit or currency, for example).
935
+ */
341
936
  suffix: WritableSignal<string | undefined>;
937
+ /**
938
+ * Hides the field label without removing it from the accessibility tree.
939
+ */
342
940
  hideLabel: WritableSignal<boolean | undefined>;
941
+ /**
942
+ * Allows more than one value — multi select, multi file upload, multi toggle.
943
+ */
343
944
  multiple: WritableSignal<boolean | undefined>;
945
+ /**
946
+ * Minimum number of characters. Source: `config.minLength`.
947
+ */
344
948
  minLength: WritableSignal<number | undefined>;
949
+ /**
950
+ * Maximum number of characters. Source: `config.maxLength`.
951
+ */
345
952
  maxLength: WritableSignal<number | undefined>;
953
+ /**
954
+ * Minimum numeric value (also the minimum user count for the user picker).
955
+ */
346
956
  min: WritableSignal<number | undefined>;
957
+ /**
958
+ * Maximum numeric value (also the maximum user count for the user picker).
959
+ */
347
960
  max: WritableSignal<number | undefined>;
961
+ /**
962
+ * Earliest selectable date for date, datetime and date-range fields.
963
+ */
348
964
  minDate: WritableSignal<Date | undefined>;
965
+ /**
966
+ * Latest selectable date for date, datetime and date-range fields.
967
+ */
349
968
  maxDate: WritableSignal<Date | undefined>;
969
+ /**
970
+ * Restricts the calendar to working days. Source: `config.acceptWorkDaysOnly`.
971
+ */
350
972
  dateFilter: WritableSignal<boolean | undefined>;
973
+ /**
974
+ * Id of a downloadable template offered next to an attachment field.
975
+ */
351
976
  templateId: WritableSignal<string | undefined>;
977
+ /**
978
+ * Direct URL of the downloadable template for an attachment field.
979
+ */
352
980
  templateUrl: WritableSignal<string | undefined>;
981
+ /**
982
+ * Maximum size per uploaded file. Source: `config.allowedSize`.
983
+ */
353
984
  allowedFileSize: WritableSignal<number | undefined>;
985
+ /**
986
+ * Comma separated list of accepted file extensions or MIME types.
987
+ */
354
988
  allowedFileTypes: WritableSignal<string | undefined>;
989
+ /**
990
+ * Maximum number of files that may be attached.
991
+ */
355
992
  maxFilesCount: WritableSignal<number | undefined>;
993
+ /**
994
+ * Minimum number of files required.
995
+ */
356
996
  minFilesCount: WritableSignal<number | undefined>;
997
+ /**
998
+ * Maximum number of users selectable in a user picker.
999
+ */
357
1000
  maxUsersCount: WritableSignal<number | undefined>;
1001
+ /**
1002
+ * Minimum number of users required in a user picker.
1003
+ */
358
1004
  minUsersCount: WritableSignal<number | undefined>;
1005
+ /**
1006
+ * Parsed from the field definition but not consumed yet — table columns currently come
1007
+ * from `field.children`.
1008
+ */
359
1009
  showInTableColumns: WritableSignal<boolean | undefined>;
1010
+ /**
1011
+ * Enables the filter row on a `table` field.
1012
+ */
360
1013
  tableWithFilter: WritableSignal<boolean | undefined>;
1014
+ /**
1015
+ * Enables column sorting on a `table` field.
1016
+ */
361
1017
  tableWithSort: WritableSignal<boolean | undefined>;
1018
+ /**
1019
+ * Enables the paginator on a `table` field.
1020
+ */
362
1021
  tableWithPagination: WritableSignal<boolean | undefined>;
363
1022
  constructor(config: any);
364
1023
  }
@@ -419,6 +1078,38 @@ declare class FieldEvent {
419
1078
  constructor(action: any, loader: Loader);
420
1079
  }
421
1080
 
1081
+ /**
1082
+ * Runtime model of a single form field, built from the JSON definition returned by the API.
1083
+ *
1084
+ * It is what `iss-field-*` components inject through the `FIELD_DATA` token, and the object
1085
+ * field events read from and write to. Signal-valued members can be changed at runtime and
1086
+ * the rendered field reacts immediately.
1087
+ *
1088
+ * ### Properties
1089
+ * | Property | Type | Description |
1090
+ * | --- | --- | --- |
1091
+ * | `id` | `number` | Unique field id. |
1092
+ * | `name` | `string` | Control name inside the form group. |
1093
+ * | `type` | `string` | Key into the `COMPONENTS` index (`text_input`, `dropdown_list`, …). |
1094
+ * | `base` | `string` | Underlying data type of the field. |
1095
+ * | `label()` | `string` | Visible label. |
1096
+ * | `hint()` | `string` | Helper text under the field. |
1097
+ * | `options()` | `Option[]` | Choices for select, radio, checkbox and toggle fields. |
1098
+ * | `api()` | `string` | Endpoint used to load options or lookups. |
1099
+ * | `mode()` | `"edit" \| "view"` | Renders the control or the read-only viewer. |
1100
+ * | `visible()` | `boolean` | Whether the field is rendered at all. |
1101
+ * | `loading()` | `boolean` | Shows the field's own loading state. |
1102
+ * | `config` | `FieldConfig` | Per-type configuration — see {@link FieldConfig}. |
1103
+ * | `validation` | `any` | Synchronous validation rules. |
1104
+ * | `asyncValidation` | `FieldAsyncValidation` | Remote validation rules. |
1105
+ * | `events` | `FieldEvent[]` | Cross-field reactions (show, hide, set value, …). |
1106
+ * | `children` | `IssField[]` | Nested fields, used by table and group fields. |
1107
+ * | `value` / `defaultValue` | `string` | Initial and fallback raw values. |
1108
+ * | `jsonValue` | `any` | Initial resolved value for controls with a rich payload. |
1109
+ * | `ctrlValue()` | `string \| null` | Live raw value of the control. |
1110
+ * | `ctrlJsonValue()` | `any` | Live resolved value (selected options, files, users, …). |
1111
+ * | `response()` / `apiResponse` | `any` | Latest payload returned for this field. |
1112
+ */
422
1113
  declare class IssField {
423
1114
  id: number;
424
1115
  name: string;
@@ -496,15 +1187,50 @@ declare class FormEngine {
496
1187
  static ɵprov: i0.ɵɵInjectableDeclaration<FormEngine>;
497
1188
  }
498
1189
 
1190
+ /**
1191
+ * Base class for every `iss-field-*` field.
1192
+ *
1193
+ * A field is the form-engine layer around a control: it reads its whole configuration from
1194
+ * the injected {@link IssField} (label, options, config, validation, events), registers its
1195
+ * `FormControl` on the parent `FormGroup` on init and removes it again on destroy, and
1196
+ * switches between the control (`mode() === "edit"`) and the viewer (`mode() === "view"`).
1197
+ *
1198
+ * ### Inputs
1199
+ * | Property | Type | Description |
1200
+ * | --- | --- | --- |
1201
+ * | `issField` | `IssField` | **Required.** The field definition; also provided through the `FIELD_DATA` token. |
1202
+ * | `formReady` | `boolean \| undefined` | Set by the outlet once the whole form exists; gates event wiring. |
1203
+ *
1204
+ * ### Properties available on `field`
1205
+ * `name` · `type` · `base` · `label()` · `hint()` · `options()` · `api()` · `mode()` ·
1206
+ * `visible()` · `loading()` · `value` · `jsonValue` · `defaultValue` · `ctrlValue()` ·
1207
+ * `ctrlJsonValue()` · `events` · `validation` · `asyncValidation` · `children` ·
1208
+ * `response()` · `config` — see {@link IssField} and {@link FieldConfig}.
1209
+ *
1210
+ * Fields are not used directly in templates; the outlet resolves them from the field `type`
1211
+ * through the `COMPONENTS` index.
1212
+ */
499
1213
  declare class FieldBase implements OnInit, OnDestroy {
500
1214
  #private;
1215
+ /**
1216
+ * The field definition rendered by this component. Required.
1217
+ */
501
1218
  issField: InputSignal<IssField>;
1219
+ /**
1220
+ * Set by the outlet once every field is registered; field events start only after it turns true.
1221
+ */
502
1222
  formReady: InputSignal<boolean | undefined>;
1223
+ /**
1224
+ * The {@link IssField} for this instance, injected through the `FIELD_DATA` token.
1225
+ */
503
1226
  field: IssField;
504
1227
  parentFormGroup: ControlContainer;
505
1228
  formEngine: FormEngine;
506
1229
  eventHandler: EventHandler;
507
1230
  destroyRef: DestroyRef;
1231
+ /**
1232
+ * The `FormControl` this field registers on the parent form under `field.name`.
1233
+ */
508
1234
  ctrl: FormControl;
509
1235
  ctrlValueChange: i0.Signal<any>;
510
1236
  get form(): FormGroup;
@@ -514,56 +1240,294 @@ declare class FieldBase implements OnInit, OnDestroy {
514
1240
  static ɵcmp: i0.ɵɵComponentDeclaration<FieldBase, "ng-component", never, { "issField": { "alias": "issField"; "required": true; "isSignal": true; }; "formReady": { "alias": "formReady"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
515
1241
  }
516
1242
 
1243
+ /**
1244
+ * `<iss-field-input>` — single line text, number, email or password entry.
1245
+ *
1246
+ * Rendered by the outlet for fields of type `text_input`. In `edit` mode it renders
1247
+ * {@link InputControl} plus the validation message; in `view` mode the matching viewer.
1248
+ *
1249
+ * ### Supported `config` keys
1250
+ * | Key | Type | Description |
1251
+ * | --- | --- | --- |
1252
+ * | `type` | `string` | Native input type — `text`, `number`, `email`, `password`, … |
1253
+ * | `placeholder` | `string` | Placeholder shown while empty. |
1254
+ * | `min` | `number` | Minimum numeric value. |
1255
+ * | `max` | `number` | Maximum numeric value. |
1256
+ * | `minLength` | `number` | Minimum number of characters. |
1257
+ * | `maxLength` | `number` | Maximum number of characters. |
1258
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1259
+ *
1260
+ * ### Other field members used
1261
+ * `label()`
1262
+ *
1263
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1264
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1265
+ *
1266
+ * @example
1267
+ * ```json
1268
+ * { "name": "email", "type": "text_input", "label": "Email", "config": { "type": "email", "maxLength": 120 } }
1269
+ * ```
1270
+ */
517
1271
  declare class InputField extends FieldBase {
518
1272
  static ɵfac: i0.ɵɵFactoryDeclaration<InputField, never>;
519
1273
  static ɵcmp: i0.ɵɵComponentDeclaration<InputField, "iss-field-input", never, {}, {}, never, never, true, never>;
520
1274
  }
521
1275
 
1276
+ /**
1277
+ * `<iss-field-textarea>` — multi line free text.
1278
+ *
1279
+ * Rendered by the outlet for fields of type `textarea`. In `edit` mode it renders
1280
+ * {@link TextareaControl} plus the validation message; in `view` mode the matching viewer.
1281
+ *
1282
+ * ### Supported `config` keys
1283
+ * | Key | Type | Description |
1284
+ * | --- | --- | --- |
1285
+ * | `minLength` | `number` | Minimum number of characters. |
1286
+ * | `maxLength` | `number` | Maximum number of characters. |
1287
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1288
+ *
1289
+ * ### Other field members used
1290
+ * `label()`
1291
+ *
1292
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1293
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1294
+ *
1295
+ * @example
1296
+ * ```json
1297
+ * { "name": "notes", "type": "textarea", "label": "Notes", "config": { "maxLength": 500 } }
1298
+ * ```
1299
+ */
522
1300
  declare class TextareaField extends FieldBase {
523
1301
  static ɵfac: i0.ɵɵFactoryDeclaration<TextareaField, never>;
524
1302
  static ɵcmp: i0.ɵɵComponentDeclaration<TextareaField, "iss-field-textarea", never, {}, {}, never, never, true, never>;
525
1303
  }
526
1304
 
1305
+ /**
1306
+ * `<iss-field-chips>` — free text entered as removable chips.
1307
+ *
1308
+ * Rendered by the outlet for fields of type `chips`. In `edit` mode it renders
1309
+ * {@link ChipsControl} plus the validation message; in `view` mode the matching viewer.
1310
+ *
1311
+ * ### Supported `config` keys
1312
+ * | Key | Type | Description |
1313
+ * | --- | --- | --- |
1314
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1315
+ *
1316
+ * ### Other field members used
1317
+ * `label()`
1318
+ *
1319
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1320
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1321
+ *
1322
+ * @example
1323
+ * ```json
1324
+ * { "name": "tags", "type": "chips", "label": "Tags" }
1325
+ * ```
1326
+ */
527
1327
  declare class ChipsField extends FieldBase {
528
1328
  static ɵfac: i0.ɵɵFactoryDeclaration<ChipsField, never>;
529
1329
  static ɵcmp: i0.ɵɵComponentDeclaration<ChipsField, "iss-field-chips", never, {}, {}, never, never, true, never>;
530
1330
  }
531
1331
 
1332
+ /**
1333
+ * `<iss-field-radio>` — one choice out of a fixed set of options.
1334
+ *
1335
+ * Rendered by the outlet for fields of type `radio`. In `edit` mode it renders
1336
+ * {@link RadioControl} plus the validation message; in `view` mode the matching viewer.
1337
+ *
1338
+ * ### Supported `config` keys
1339
+ * | Key | Type | Description |
1340
+ * | --- | --- | --- |
1341
+ * | `hideLabel` | `boolean` | Hides the field label. |
1342
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1343
+ *
1344
+ * ### Other field members used
1345
+ * `label()` · `options()`
1346
+ *
1347
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1348
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1349
+ *
1350
+ * @example
1351
+ * ```json
1352
+ * { "name": "gender", "type": "radio", "label": "Gender", "options": [{ "value": "m", "label": "Male" }] }
1353
+ * ```
1354
+ */
532
1355
  declare class RadioField extends FieldBase {
533
1356
  onChange($event: any): void;
534
1357
  static ɵfac: i0.ɵɵFactoryDeclaration<RadioField, never>;
535
1358
  static ɵcmp: i0.ɵɵComponentDeclaration<RadioField, "iss-field-radio", never, {}, {}, never, never, true, never>;
536
1359
  }
537
1360
 
1361
+ /**
1362
+ * `<iss-field-select>` — single or multiple selection from a dropdown.
1363
+ *
1364
+ * Rendered by the outlet for fields of type `dropdown_list`. In `edit` mode it renders
1365
+ * {@link SelectControl} plus the validation message; in `view` mode the matching viewer.
1366
+ *
1367
+ * ### Supported `config` keys
1368
+ * | Key | Type | Description |
1369
+ * | --- | --- | --- |
1370
+ * | `multiple` | `boolean` | Allows selecting more than one option. |
1371
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1372
+ *
1373
+ * ### Other field members used
1374
+ * `label()` · `options()` · `ctrlJsonValue()`
1375
+ *
1376
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1377
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1378
+ *
1379
+ * The raw form value holds the selected option values; the resolved options are written
1380
+ * back to `field.ctrlJsonValue`.
1381
+ *
1382
+ * @example
1383
+ * ```json
1384
+ * { "name": "city", "type": "dropdown_list", "label": "City", "options": [{ "value": "1", "label": "Riyadh" }] }
1385
+ * ```
1386
+ */
538
1387
  declare class SelectField extends FieldBase {
539
1388
  onChange($event: string | FormData): void;
540
1389
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectField, never>;
541
1390
  static ɵcmp: i0.ɵɵComponentDeclaration<SelectField, "iss-field-select", never, {}, {}, never, never, true, never>;
542
1391
  }
543
1392
 
1393
+ /**
1394
+ * `<iss-field-mobile>` — an international phone number with a country selector.
1395
+ *
1396
+ * Rendered by the outlet for fields of the type `mobile`. In `edit` mode it renders
1397
+ * {@link MobileControl} plus the validation message; in `view` mode the matching viewer.
1398
+ *
1399
+ * ### Supported `config` keys
1400
+ * | Key | Type | Description |
1401
+ * | --- | --- | --- |
1402
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1403
+ *
1404
+ * ### Other field members used
1405
+ * `label()`
1406
+ *
1407
+ * Every field also honors `visible`, `mode`, `validation`, `asyncValidation` and
1408
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1409
+ *
1410
+ * @example
1411
+ * ```json
1412
+ * { "name": "mobile", "type": "mobile", "label": "Mobile" }
1413
+ * ```
1414
+ */
544
1415
  declare class MobileField extends FieldBase {
545
1416
  static ɵfac: i0.ɵɵFactoryDeclaration<MobileField, never>;
546
1417
  static ɵcmp: i0.ɵɵComponentDeclaration<MobileField, "iss-field-mobile", never, {}, {}, never, never, true, never>;
547
1418
  }
548
1419
 
1420
+ /**
1421
+ * `<iss-field-checkbox>` — a list of checkboxes over a fixed set of options.
1422
+ *
1423
+ * Rendered by the outlet for fields of type `checkbox`. In `edit` mode it renders
1424
+ * {@link CheckboxControl} plus the validation message; in `view` mode the matching viewer.
1425
+ *
1426
+ * ### Supported `config` keys
1427
+ * | Key | Type | Description |
1428
+ * | --- | --- | --- |
1429
+ * | `hideLabel` | `boolean` | Hides the field label. |
1430
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1431
+ *
1432
+ * ### Other field members used
1433
+ * `label()` · `options()`
1434
+ *
1435
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1436
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1437
+ *
1438
+ * @example
1439
+ * ```json
1440
+ * { "name": "days", "type": "checkbox", "label": "Days", "options": [{ "value": "sun", "label": "Sunday" }] }
1441
+ * ```
1442
+ */
549
1443
  declare class CheckboxField extends FieldBase {
550
1444
  updateField($event: any): void;
551
1445
  static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxField, never>;
552
1446
  static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxField, "iss-field-checkbox", never, {}, {}, never, never, true, never>;
553
1447
  }
554
1448
 
1449
+ /**
1450
+ * `<iss-field-toggle-button>` — options rendered as a button group.
1451
+ *
1452
+ * Rendered by the outlet for fields of type `toggle_button`. In `edit` mode it renders
1453
+ * {@link ToggleButtonControl} plus the validation message; in `view` mode the matching viewer.
1454
+ *
1455
+ * ### Supported `config` keys
1456
+ * | Key | Type | Description |
1457
+ * | --- | --- | --- |
1458
+ * | `multiple` | `boolean` | Allows more than one active button. |
1459
+ * | `hideLabel` | `boolean` | Hides the field label. |
1460
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1461
+ *
1462
+ * ### Other field members used
1463
+ * `label()` · `options()`
1464
+ *
1465
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1466
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1467
+ *
1468
+ * @example
1469
+ * ```json
1470
+ * { "name": "priority", "type": "toggle_button", "label": "Priority", "options": [{ "value": "high", "label": "High" }] }
1471
+ * ```
1472
+ */
555
1473
  declare class ToggleButtonField extends FieldBase {
556
1474
  onChange($event: any): void;
557
1475
  static ɵfac: i0.ɵɵFactoryDeclaration<ToggleButtonField, never>;
558
1476
  static ɵcmp: i0.ɵɵComponentDeclaration<ToggleButtonField, "iss-field-toggle-button", never, {}, {}, never, never, true, never>;
559
1477
  }
560
1478
 
1479
+ /**
1480
+ * `<iss-field-slide-toggle>` — an on/off switch for a boolean value.
1481
+ *
1482
+ * Rendered by the outlet for fields of type `switch`. In `edit` mode it renders
1483
+ * {@link SlideToggleControl} plus the validation message; in `view` mode the matching viewer.
1484
+ *
1485
+ * ### Supported `config` keys
1486
+ * | Key | Type | Description |
1487
+ * | --- | --- | --- |
1488
+ * | `hideLabel` | `boolean` | Hides the field label. |
1489
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1490
+ *
1491
+ * ### Other field members used
1492
+ * `label()`
1493
+ *
1494
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1495
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1496
+ *
1497
+ * @example
1498
+ * ```json
1499
+ * { "name": "active", "type": "switch", "label": "Active" }
1500
+ * ```
1501
+ */
561
1502
  declare class SlideToggleField extends FieldBase {
562
1503
  onChange($event: any): void;
563
1504
  static ɵfac: i0.ɵɵFactoryDeclaration<SlideToggleField, never>;
564
1505
  static ɵcmp: i0.ɵɵComponentDeclaration<SlideToggleField, "iss-field-slide-toggle", never, {}, {}, never, never, true, never>;
565
1506
  }
566
1507
 
1508
+ /**
1509
+ * `<iss-field-plate-number>` — a Saudi vehicle plate in Arabic and English.
1510
+ *
1511
+ * Rendered by the outlet for fields of type `vehicle_plate`. In `edit` mode it renders
1512
+ * {@link PlateControl} plus the validation message; in `view` mode the matching viewer.
1513
+ *
1514
+ * ### Supported `config` keys
1515
+ * | Key | Type | Description |
1516
+ * | --- | --- | --- |
1517
+ * | `hideLabel` | `boolean` | Hides the field label. |
1518
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1519
+ *
1520
+ * ### Other field members used
1521
+ * `label()`
1522
+ *
1523
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1524
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1525
+ *
1526
+ * @example
1527
+ * ```json
1528
+ * { "name": "plate", "type": "vehicle_plate", "label": "Plate number" }
1529
+ * ```
1530
+ */
567
1531
  declare class PlateField extends FieldBase {
568
1532
  updateField($event: any): void;
569
1533
  static ɵfac: i0.ɵɵFactoryDeclaration<PlateField, never>;
@@ -586,6 +1550,36 @@ declare class FileHandler {
586
1550
  static ɵprov: i0.ɵɵInjectableDeclaration<FileHandler>;
587
1551
  }
588
1552
 
1553
+ /**
1554
+ * `<iss-field-file-picker>` — attachment upload.
1555
+ *
1556
+ * Rendered by the outlet for fields of type `attachment`. In `edit` mode it renders
1557
+ * {@link FilePickerControl} plus the validation message; in `view` mode the matching viewer.
1558
+ *
1559
+ * ### Supported `config` keys
1560
+ * | Key | Type | Description |
1561
+ * | --- | --- | --- |
1562
+ * | `multiple` | `boolean` | Allows attaching more than one file. |
1563
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1564
+ *
1565
+ * ### Other field members used
1566
+ * `label()` · `value` · `validation` · `ctrlJsonValue()`
1567
+ *
1568
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1569
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1570
+ *
1571
+ * The field uploads the picked files itself, stores the returned ids as the control value
1572
+ * and keeps the resolved attachments in `field.ctrlJsonValue`.
1573
+ *
1574
+ * Accepted extensions come from the `fileType` **validation** rule, not from `config`; the
1575
+ * `allowedFileSize`, `allowedFileTypes`, `minFilesCount`, `maxFilesCount`, `templateId` and
1576
+ * `templateUrl` config keys exist on {@link FieldConfig} but are not read here yet.
1577
+ *
1578
+ * @example
1579
+ * ```json
1580
+ * { "name": "attachments", "type": "attachment", "label": "Attachments", "config": { "multiple": true }, "validation": { "fileType": ["pdf", "png"] } }
1581
+ * ```
1582
+ */
589
1583
  declare class FilePickerField extends FieldBase implements OnDestroy {
590
1584
  #private;
591
1585
  picker: FormControl<any>;
@@ -602,21 +1596,117 @@ declare class FilePickerField extends FieldBase implements OnDestroy {
602
1596
  static ɵcmp: i0.ɵɵComponentDeclaration<FilePickerField, "iss-field-file-picker", never, {}, {}, never, never, true, never>;
603
1597
  }
604
1598
 
1599
+ /**
1600
+ * `<iss-field-time-picker>` — a time of day, picked from a generated list.
1601
+ *
1602
+ * Rendered by the outlet for fields of type `time`. In `edit` mode it renders
1603
+ * {@link TimePickerControl} plus the validation message; in `view` mode the matching viewer.
1604
+ *
1605
+ * ### Supported `config` keys
1606
+ * | Key | Type | Description |
1607
+ * | --- | --- | --- |
1608
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1609
+ *
1610
+ * ### Other field members used
1611
+ * `label()`
1612
+ *
1613
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1614
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1615
+ *
1616
+ * @example
1617
+ * ```json
1618
+ * { "name": "startsAt", "type": "time", "label": "Starts at" }
1619
+ * ```
1620
+ */
605
1621
  declare class TimePickerField extends FieldBase {
606
1622
  static ɵfac: i0.ɵɵFactoryDeclaration<TimePickerField, never>;
607
1623
  static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerField, "iss-field-time-picker", never, {}, {}, never, never, true, never>;
608
1624
  }
609
1625
 
1626
+ /**
1627
+ * `<iss-field-date-picker>` — a single date, picked from a calendar.
1628
+ *
1629
+ * Rendered by the outlet for fields of type `date`. In `edit` mode it renders
1630
+ * {@link DatePickerControl} plus the validation message; in `view` mode the matching viewer.
1631
+ *
1632
+ * ### Supported `config` keys
1633
+ * | Key | Type | Description |
1634
+ * | --- | --- | --- |
1635
+ * | `minDate` | `Date` | Earliest selectable date. |
1636
+ * | `maxDate` | `Date` | Latest selectable date. |
1637
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1638
+ *
1639
+ * ### Other field members used
1640
+ * `label()`
1641
+ *
1642
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1643
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1644
+ *
1645
+ * @example
1646
+ * ```json
1647
+ * { "name": "startsOn", "type": "date", "label": "Start date", "config": { "minDate": "2026-01-01" } }
1648
+ * ```
1649
+ */
610
1650
  declare class DatePickerField extends FieldBase {
611
1651
  static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerField, never>;
612
1652
  static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerField, "iss-field-date-picker", never, {}, {}, never, never, true, never>;
613
1653
  }
614
1654
 
1655
+ /**
1656
+ * `<iss-field-datetime-picker>` — a date and a time in one field.
1657
+ *
1658
+ * Rendered by the outlet for fields of type `datetime`. In `edit` mode it renders
1659
+ * {@link DatetimePickerControl} plus the validation message; in `view` mode the matching viewer.
1660
+ *
1661
+ * ### Supported `config` keys
1662
+ * | Key | Type | Description |
1663
+ * | --- | --- | --- |
1664
+ * | `minDate` | `Date` | Earliest selectable date. |
1665
+ * | `maxDate` | `Date` | Latest selectable date. |
1666
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1667
+ *
1668
+ * ### Other field members used
1669
+ * `label()`
1670
+ *
1671
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1672
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1673
+ *
1674
+ * @example
1675
+ * ```json
1676
+ * { "name": "scheduledAt", "type": "datetime", "label": "Scheduled at" }
1677
+ * ```
1678
+ */
615
1679
  declare class DatetimePickerField extends FieldBase {
616
1680
  static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerField, never>;
617
1681
  static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerField, "iss-field-datetime-picker", never, {}, {}, never, never, true, never>;
618
1682
  }
619
1683
 
1684
+ /**
1685
+ * `<iss-field-date-range-picker>` — a start and end date in one field.
1686
+ *
1687
+ * Rendered by the outlet for fields of type `date_range`. In `edit` mode it renders
1688
+ * {@link DateRangePickerControl} plus the validation message; in `view` mode the matching viewer.
1689
+ *
1690
+ * ### Supported `config` keys
1691
+ * | Key | Type | Description |
1692
+ * | --- | --- | --- |
1693
+ * | `minDate` | `Date` | Earliest selectable date. |
1694
+ * | `maxDate` | `Date` | Latest selectable date. |
1695
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1696
+ *
1697
+ * ### Other field members used
1698
+ * `label()`
1699
+ *
1700
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
1701
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
1702
+ *
1703
+ * A half-filled range is treated as no value at all.
1704
+ *
1705
+ * @example
1706
+ * ```json
1707
+ * { "name": "period", "type": "date_range", "label": "Period" }
1708
+ * ```
1709
+ */
620
1710
  declare class DateRangePickerField extends FieldBase {
621
1711
  static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerField, never>;
622
1712
  static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerField, "iss-field-date-range-picker", never, {}, {}, never, never, true, never>;
@@ -758,6 +1848,33 @@ interface DynamicImport<T> {
758
1848
  [key: PropertyKey]: () => Promise<T>;
759
1849
  }
760
1850
 
1851
+ /**
1852
+ * Maps a field's `type` to the `iss-field-*` component that renders it.
1853
+ *
1854
+ * The outlet looks the field up here and lazy-loads the component, so a `type` that is not
1855
+ * a key of this object renders nothing. Hover a field class for the `config` keys it reads.
1856
+ *
1857
+ * | `type` | Component | Control | Renders |
1858
+ * | --- | --- | --- | --- |
1859
+ * | `text_input` | `InputField` | `iss-ctrl-input` | Single line text, number, email, password. |
1860
+ * | `textarea` | `TextareaField` | `iss-ctrl-textarea` | Multi line free text. |
1861
+ * | `dropdown_list` | `SelectField` | `iss-ctrl-select` | Searchable single/multi select. |
1862
+ * | `toggle_button` | `ToggleButtonField` | `iss-ctrl-toggle-button` | Options as a button group. |
1863
+ * | `checkbox` | `CheckboxField` | `iss-ctrl-checkbox` | Multi choice checkbox list. |
1864
+ * | `radio` | `RadioField` | `iss-ctrl-radio` | Single choice radio list. |
1865
+ * | `date` | `DatePickerField` | `iss-ctrl-date-picker` | A single date. |
1866
+ * | `time` | `TimePickerField` | `iss-ctrl-time-picker` | A time of day. |
1867
+ * | `datetime` | `DatetimePickerField` | `iss-ctrl-datetime-picker` | Date and time together. |
1868
+ * | `date_range` | `DateRangePickerField` | `iss-ctrl-date-range-picker` | A start/end date range. |
1869
+ * | `attachment` | `FilePickerField` | `iss-ctrl-file-picker` | File upload. |
1870
+ * | `userPicker` | `UserPickerField` | `iss-ctrl-select` | Employee lookup. |
1871
+ * | `vehicle_plate` | `PlateField` | `iss-ctrl-plate-number` | Saudi vehicle plate. |
1872
+ * | `enrichment` | `NoteField` | — | Read-only explanatory text. |
1873
+ * | `mobile` | `MobileField` | `iss-ctrl-mobile` | International phone number. |
1874
+ * | `table` | `TableField` | `iss-ctrl-table` | Repeatable rows built from `children`. |
1875
+ * | `chips` | `ChipsField` | `iss-ctrl-chips` | Free text as removable chips. |
1876
+ * | `switch` | `SlideToggleField` | `iss-ctrl-slide-toggle` | Boolean on/off switch. |
1877
+ */
761
1878
  declare const COMPONENTS: DynamicImport<Type<any>>;
762
1879
 
763
1880
  declare const SERVICES: DynamicImport<Type<any>>;