@@ -137,42 +137,15 @@ const multiTags = (function () {
137137    color: inherit; 
138138  ` ; 
139139
140-   const  TagIcon  =  styled . span ` 
141-     display: inline-flex; 
142-     align-items: center; 
143-     margin-right: 4px; 
144-      
145-     &.icon-right { 
146-       margin-right: 0; 
147-       margin-left: 4px; 
148-     } 
149-   ` ; 
150- 
151-   const  TagContent  =  styled . span ` 
152-     display: inline-flex; 
153-     align-items: center; 
154-   ` ; 
155- 
156- 
157- 
158140  const  childrenMap  =  { 
159-     options : TagsCompOptionsControl ,  // initial tags (PropertyView) 
141+     options : TagsCompOptionsControl ,  
160142    style : styleControl ( InputLikeStyle ,  "style" ) , 
161143    onEvent : ButtonEventHandlerControl , 
162-     editable : BoolControl ,                // editable switch field 
163-     preventDuplicates : BoolCodeControl ,   // runtime de-dupe 
164-     allowEmptyEdits : BoolCodeControl ,     // allow blank labels on edit 
165-     maxTags : BoolCodeControl ,             // truthy => 50 (or provide number if your control supports) 
166-     selectedTagIndex : stateComp < number > ( - 1 ) ,  // tracks which tag was clicked (-1 = none) 
167-     runtimeOptions : stateComp < JSONValue > ( [ ] ) ,  // runtime tags array for CRUD and saving 
144+     editable : BoolControl ,                             
145+     selectedTagIndex : stateComp < number > ( - 1 ) ,  
146+     runtimeOptions : stateComp < JSONValue > ( [ ] ) ,  
168147  } ; 
169148
170-   const  toMax  =  ( val : any ) : number  |  undefined  =>  { 
171-     if  ( val  ===  false  ||  val  ===  undefined  ||  val  ===  null )  return  undefined ; 
172-     if  ( typeof  val  ===  "number"  &&  ! Number . isNaN ( val )  &&  val  >  0 )  return  val ; 
173-     if  ( val  ===  true )  return  50 ; 
174-     return  undefined ; 
175-   } ; 
176149
177150  return  new  UICompBuilder ( childrenMap ,  ( props ,  dispatch )  =>  { 
178151    const  {  message }  =  App . useApp ?.( )  ||  {  message : {  warning : ( )  =>  { }  }  as  any  } ; 
@@ -183,10 +156,7 @@ const multiTags = (function () {
183156    const  [ editValue ,  setEditValue ]  =  useState < string > ( "" ) ; 
184157    const  [ draft ,  setDraft ]  =  useState < string > ( "" ) ;  // typing buffer for creating a new tag 
185158    const  containerRef  =  useRef < HTMLDivElement > ( null ) ; 
186- 
187-     const  preventDuplicates  =  ! ! props . preventDuplicates ; 
188-     const  allowEmptyEdits  =  ! ! props . allowEmptyEdits ; 
189-     const  maxTags  =  toMax ( props . maxTags ) ; 
159+   
190160
191161
192162    const  displayOptions  =  ( props  as  any ) . runtimeOptions ?. length  &&  props . editable 
@@ -215,14 +185,6 @@ const multiTags = (function () {
215185    const  addTag  =  ( raw : string )  =>  { 
216186      const  label  =  normalize ( raw ) ; 
217187      if  ( ! label )  return ; 
218-       if  ( maxTags  &&  displayOptions . length  >=  maxTags )  { 
219-         message ?. warning ?.( `Maximum ${ maxTags }   tags allowed.` ) ; 
220-         return ; 
221-       } 
222-       if  ( preventDuplicates  &&  exists ( label ) )  { 
223-         message ?. warning ?.( "Duplicate tag." ) ; 
224-         return ; 
225-       } 
226188      const  newTag : TagOption  =  { 
227189        label, 
228190        colorType : "default" , 
@@ -250,14 +212,6 @@ const multiTags = (function () {
250212
251213    const  confirmEdit  =  ( index : number )  =>  { 
252214      const  val  =  normalize ( editValue ) ; 
253-       if  ( ! val  &&  ! allowEmptyEdits )  { 
254-         cancelEdit ( ) ; 
255-         return ; 
256-       } 
257-       if  ( preventDuplicates  &&  exists ( val ,  index ) )  { 
258-         message ?. warning ?.( "Duplicate tag." ) ; 
259-         return ; 
260-       } 
261215      const  prev  =  displayOptions [ index ] ?. label  ??  "" ; 
262216      const  next  =  displayOptions . map ( ( t ,  i )  =>  ( i  ===  index  ? {  ...t ,  label : val  }  : t ) ) ; 
263217      dispatch ( changeChildAction ( "runtimeOptions" ,  next ,  false ) ) ; 
@@ -386,22 +340,12 @@ const multiTags = (function () {
386340        < > 
387341          < Section  name = { sectionNames . basic } > 
388342            { children . options . propertyView ( {  label : "Initial Tags (PropertyView)"  } ) } 
389-             { children . editable . propertyView ( {  label : "Editable"  } ) } 
390-             { children . preventDuplicates . propertyView ( {  label : "Prevent Duplicates (Runtime)"  } ) } 
391-             { children . allowEmptyEdits . propertyView ( {  label : "Allow Empty Edit (Runtime)"  } ) } 
392-             { children . maxTags . propertyView ( {  label : "Set Max Tags (Runtime) — true=50"  } ) } 
343+             { children . editable . propertyView ( {  label : "Editable"  } ) }            
393344          </ Section > 
394345
395346          { [ "logic" ,  "both" ] . includes ( useContext ( EditorContext ) . editorModeStatus )  &&  ( 
396347            < Section  name = { sectionNames . interaction } > 
397-               { children . onEvent . getPropertyView ( { 
398-                 // Events: 
399-                 // "change" (payload.value = TagOption[]), 
400-                 // "add"    (label, value), 
401-                 // "edit"   (from, to, index, value), 
402-                 // "delete" (removed, index, value), 
403-                 // "click"  (tag, index, value) 
404-               } ) } 
348+               { children . onEvent . getPropertyView ( ) } 
405349              { hiddenPropertyView ( children ) } 
406350              { showDataLoadingIndicatorsPropertyView ( children ) } 
407351            </ Section > 
@@ -432,25 +376,6 @@ export const MultiTagsComp = withExposingConfigs(
432376        return  null ; 
433377      } 
434378    } ) , 
435-     depsConfig ( { 
436-       name : "selectedTagIndex" ,  
437-       desc : "Index of currently selected tag (-1 if none)" , 
438-       depKeys : [ "selectedTagIndex" ] , 
439-       func : ( input )  =>  input . selectedTagIndex 
440-     } ) , 
441-     depsConfig ( { 
442-       name : "selectedTagLabel" , 
443-       desc : "Label of currently selected tag" , 
444-       depKeys : [ "selectedTagIndex" ,  "runtimeOptions" ] , 
445-       func : ( input )  =>  { 
446-         const  index  =  input . selectedTagIndex ; 
447-         const  options  =  Array . isArray ( input . runtimeOptions )  ? ( input . runtimeOptions  as  any [ ] )  : [ ] ; 
448-         if  ( index  >=  0  &&  index  <  options . length )  { 
449-           return  options [ index ] ?. label  ||  "" ; 
450-         } 
451-         return  "" ; 
452-       } 
453-     } ) , 
454379    depsConfig ( { 
455380      name : "options" , 
456381      desc : "Current tags array (updates based on editable prop)" , 
0 commit comments