verben-ng-ui 1.3.8 → 1.3.9

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.
@@ -3,11 +3,13 @@ export const STRING_OPERATORS = [
3
3
  { label: 'Ends With', value: 'endsWith', type: 'string' },
4
4
  { label: 'Contains', value: 'contains', type: 'string' },
5
5
  { label: 'Equals', value: 'equals', type: 'string' },
6
+ { label: 'Is Not', value: 'isNot', type: 'string' },
6
7
  ];
7
8
  export const NUMBER_OPERATORS = [
8
9
  { label: 'Equal', value: 'equal', type: 'number' },
9
10
  { label: 'Greater Than', value: 'greaterThan', type: 'number' },
10
11
  { label: 'Less Than', value: 'lessThan', type: 'number' },
12
+ { label: 'Is Not', value: 'isNot', type: 'number' },
11
13
  ];
12
14
  export const DATE_OPERATORS = [
13
15
  { label: 'On', value: 'on', type: 'date' },
@@ -22,4 +24,4 @@ export const ENUM_OPERATORS = [
22
24
  { label: 'Is', value: 'is', type: 'enum' },
23
25
  { label: 'Is Not', value: 'isNot', type: 'enum' },
24
26
  ];
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzdELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ3JELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBcUI7SUFDaEQsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUNsRCxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQy9ELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDMUQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDakQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBcUI7SUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUMxQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0NBQ2xELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFCO0lBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDMUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3JUeXBlID1cbiAgfCAnc3RyaW5nJ1xuICB8ICdudW1iZXInXG4gIHwgJ2RhdGUnXG4gIHwgJ2Jvb2wnXG4gIHwgJ2VudW0nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wZXJhdG9yIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogRmlsdGVyT3BlcmF0b3JUeXBlO1xufVxuXG5leHBvcnQgY29uc3QgU1RSSU5HX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ1N0YXJ0cyBXaXRoJywgdmFsdWU6ICdzdGFydHNXaXRoJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VuZHMgV2l0aCcsIHZhbHVlOiAnZW5kc1dpdGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnQ29udGFpbnMnLCB2YWx1ZTogJ2NvbnRhaW5zJywgdHlwZTogJ3N0cmluZycgfSxcbiAgeyBsYWJlbDogJ0VxdWFscycsIHZhbHVlOiAnZXF1YWxzJywgdHlwZTogJ3N0cmluZycgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBOVU1CRVJfT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnRXF1YWwnLCB2YWx1ZTogJ2VxdWFsJywgdHlwZTogJ251bWJlcicgfSxcbiAgeyBsYWJlbDogJ0dyZWF0ZXIgVGhhbicsIHZhbHVlOiAnZ3JlYXRlclRoYW4nLCB0eXBlOiAnbnVtYmVyJyB9LFxuICB7IGxhYmVsOiAnTGVzcyBUaGFuJywgdmFsdWU6ICdsZXNzVGhhbicsIHR5cGU6ICdudW1iZXInIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgREFURV9PUEVSQVRPUlM6IEZpbHRlck9wZXJhdG9yW10gPSBbXG4gIHsgbGFiZWw6ICdPbicsIHZhbHVlOiAnb24nLCB0eXBlOiAnZGF0ZScgfSxcbiAgeyBsYWJlbDogJ0JlZm9yZScsIHZhbHVlOiAnYmVmb3JlJywgdHlwZTogJ2RhdGUnIH0sXG4gIHsgbGFiZWw6ICdBZnRlcicsIHZhbHVlOiAnYWZ0ZXInLCB0eXBlOiAnZGF0ZScgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBCT09MX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ0lzJywgdmFsdWU6ICdpcycsIHR5cGU6ICdib29sJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdib29sJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVOVU1fT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnSXMnLCB2YWx1ZTogJ2lzJywgdHlwZTogJ2VudW0nIH0sXG4gIHsgbGFiZWw6ICdJcyBOb3QnLCB2YWx1ZTogJ2lzTm90JywgdHlwZTogJ2VudW0nIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmRpdGlvbiB7XG4gIGNvbHVtbklkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU3RhdGUge1xuICBncm91cHM6IEZpbHRlckdyb3VwW107XG4gIGFjdGl2ZUZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdO1xufVxuIl19
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1maWx0ZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQzdELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDekQsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3BELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDcEQsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFxQjtJQUNoRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ2xELEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDL0QsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN6RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ3BELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFCO0lBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDMUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtJQUNsRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0NBQ2pELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFCO0lBQzlDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDMUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtDQUNsRCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFxQjtJQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQzFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Q0FDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yVHlwZSA9ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAnYm9vbCcgfCAnZW51bSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyT3BlcmF0b3Ige1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICB0eXBlOiBGaWx0ZXJPcGVyYXRvclR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBTVFJJTkdfT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnU3RhcnRzIFdpdGgnLCB2YWx1ZTogJ3N0YXJ0c1dpdGgnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnRW5kcyBXaXRoJywgdmFsdWU6ICdlbmRzV2l0aCcsIHR5cGU6ICdzdHJpbmcnIH0sXG4gIHsgbGFiZWw6ICdDb250YWlucycsIHZhbHVlOiAnY29udGFpbnMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnRXF1YWxzJywgdmFsdWU6ICdlcXVhbHMnLCB0eXBlOiAnc3RyaW5nJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdzdHJpbmcnIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgTlVNQkVSX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ0VxdWFsJywgdmFsdWU6ICdlcXVhbCcsIHR5cGU6ICdudW1iZXInIH0sXG4gIHsgbGFiZWw6ICdHcmVhdGVyIFRoYW4nLCB2YWx1ZTogJ2dyZWF0ZXJUaGFuJywgdHlwZTogJ251bWJlcicgfSxcbiAgeyBsYWJlbDogJ0xlc3MgVGhhbicsIHZhbHVlOiAnbGVzc1RoYW4nLCB0eXBlOiAnbnVtYmVyJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdudW1iZXInIH0sXG5dO1xuXG5leHBvcnQgY29uc3QgREFURV9PUEVSQVRPUlM6IEZpbHRlck9wZXJhdG9yW10gPSBbXG4gIHsgbGFiZWw6ICdPbicsIHZhbHVlOiAnb24nLCB0eXBlOiAnZGF0ZScgfSxcbiAgeyBsYWJlbDogJ0JlZm9yZScsIHZhbHVlOiAnYmVmb3JlJywgdHlwZTogJ2RhdGUnIH0sXG4gIHsgbGFiZWw6ICdBZnRlcicsIHZhbHVlOiAnYWZ0ZXInLCB0eXBlOiAnZGF0ZScgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBCT09MX09QRVJBVE9SUzogRmlsdGVyT3BlcmF0b3JbXSA9IFtcbiAgeyBsYWJlbDogJ0lzJywgdmFsdWU6ICdpcycsIHR5cGU6ICdib29sJyB9LFxuICB7IGxhYmVsOiAnSXMgTm90JywgdmFsdWU6ICdpc05vdCcsIHR5cGU6ICdib29sJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEVOVU1fT1BFUkFUT1JTOiBGaWx0ZXJPcGVyYXRvcltdID0gW1xuICB7IGxhYmVsOiAnSXMnLCB2YWx1ZTogJ2lzJywgdHlwZTogJ2VudW0nIH0sXG4gIHsgbGFiZWw6ICdJcyBOb3QnLCB2YWx1ZTogJ2lzTm90JywgdHlwZTogJ2VudW0nIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmRpdGlvbiB7XG4gIGNvbHVtbklkOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgY29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyU3RhdGUge1xuICBncm91cHM6IEZpbHRlckdyb3VwW107XG4gIGFjdGl2ZUZpbHRlcnM6IEZpbHRlckNvbmRpdGlvbltdO1xufVxuIl19
@@ -20,11 +20,13 @@ const STRING_OPERATORS = [
20
20
  { label: 'Ends With', value: 'endsWith', type: 'string' },
21
21
  { label: 'Contains', value: 'contains', type: 'string' },
22
22
  { label: 'Equals', value: 'equals', type: 'string' },
23
+ { label: 'Is Not', value: 'isNot', type: 'string' },
23
24
  ];
24
25
  const NUMBER_OPERATORS = [
25
26
  { label: 'Equal', value: 'equal', type: 'number' },
26
27
  { label: 'Greater Than', value: 'greaterThan', type: 'number' },
27
28
  { label: 'Less Than', value: 'lessThan', type: 'number' },
29
+ { label: 'Is Not', value: 'isNot', type: 'number' },
28
30
  ];
29
31
  const DATE_OPERATORS = [
30
32
  { label: 'On', value: 'on', type: 'date' },
@@ -1 +1 @@
1
- {"version":3,"file":"verben-ng-ui-src-lib-components-data-filter.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.types.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.component.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.component.html","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.module.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.service.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/verben-ng-ui-src-lib-components-data-filter.ts"],"sourcesContent":["export type FilterOperatorType =\n | 'string'\n | 'number'\n | 'date'\n | 'bool'\n | 'enum';\n\nexport interface FilterOperator {\n label: string;\n value: string;\n type: FilterOperatorType;\n}\n\nexport const STRING_OPERATORS: FilterOperator[] = [\n { label: 'Starts With', value: 'startsWith', type: 'string' },\n { label: 'Ends With', value: 'endsWith', type: 'string' },\n { label: 'Contains', value: 'contains', type: 'string' },\n { label: 'Equals', value: 'equals', type: 'string' },\n];\n\nexport const NUMBER_OPERATORS: FilterOperator[] = [\n { label: 'Equal', value: 'equal', type: 'number' },\n { label: 'Greater Than', value: 'greaterThan', type: 'number' },\n { label: 'Less Than', value: 'lessThan', type: 'number' },\n];\n\nexport const DATE_OPERATORS: FilterOperator[] = [\n { label: 'On', value: 'on', type: 'date' },\n { label: 'Before', value: 'before', type: 'date' },\n { label: 'After', value: 'after', type: 'date' },\n];\n\nexport const BOOL_OPERATORS: FilterOperator[] = [\n { label: 'Is', value: 'is', type: 'bool' },\n { label: 'Is Not', value: 'isNot', type: 'bool' },\n];\n\nexport const ENUM_OPERATORS: FilterOperator[] = [\n { label: 'Is', value: 'is', type: 'enum' },\n { label: 'Is Not', value: 'isNot', type: 'enum' },\n];\n\nexport interface FilterCondition {\n columnId: string;\n operator: string;\n value: string | number | boolean | Date;\n}\n\nexport interface FilterGroup {\n id: string;\n name: string;\n conditions: FilterCondition[];\n}\n\nexport interface FilterState {\n groups: FilterGroup[];\n activeFilters: FilterCondition[];\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ColumnDefinition,\n ColumnValueOption,\n ColumnValueType,\n} from 'verben-ng-ui/src/lib/components/data-table';\nimport {\n FilterOperator,\n FilterOperatorType,\n FilterCondition,\n FilterGroup,\n STRING_OPERATORS,\n NUMBER_OPERATORS,\n DATE_OPERATORS,\n BOOL_OPERATORS,\n ENUM_OPERATORS,\n} from './data-filter.types';\n\n/** A filter chip in the panel's list: a condition plus its active state. */\ntype SavedFilter = FilterCondition & { selected: boolean };\n\n@Component({\n selector: 'lib-data-filter',\n templateUrl: './data-filter.component.html',\n styleUrl: './data-filter.component.css',\n})\nexport class DataFilterComponent<T> implements OnInit, OnChanges {\n @Input() columns!: ColumnDefinition<T>[];\n @Input() data!: T[];\n /**\n * Optional restored filters: the panel opens pre-populated with these as\n * selected filter chips. Applied once (the first time a non-empty value\n * arrives) so it never clobbers the user's in-progress edits afterwards.\n */\n @Input() initialFilters?: FilterCondition[];\n @Output() filterApplied = new EventEmitter<FilterCondition[]>();\n @Output() resetFilter = new EventEmitter();\n filterableColumns: ColumnDefinition<T>[] = [];\n availableOperators: FilterOperator[] = [];\n savedFilters: SavedFilter[] = [];\n currentFilter: Partial<FilterCondition> = {};\n showAllFilters = false;\n maxVisibleItems = 3;\n currentColumnType: FilterOperatorType | null = null;\n /**\n * Options for the value dropdown when the selected column is bool or enum.\n * Always normalised to `{ label, value }` so the template binds one shape.\n */\n valueOptions: ColumnValueOption[] = [];\n /**\n * Held as strings rather than booleans: `verben-drop-down` gates its selected\n * label on a truthiness check, so an option valued `false` would render as\n * though nothing were picked. Coerced back to a boolean in `addFilter`.\n */\n private readonly boolOptions: ColumnValueOption[] = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n ];\n // Set once the user edits the panel, so restored/host filters no longer\n // overwrite their in-progress work.\n private userTouched = false;\n /**\n * The saved filter currently loaded into the operation row, if any. Held by\n * reference rather than by index so deleting or reordering another filter\n * cannot retarget the write-back.\n */\n private editingFilter: SavedFilter | null = null;\n\n ngOnInit() {\n this.initializeFilterableColumns();\n this.hydrateSavedFilters();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Pick up filters restored asynchronously by the host after first render.\n if (changes['initialFilters']) {\n this.hydrateSavedFilters();\n }\n }\n\n /**\n * Seed the saved-filter chips from the restored filters. Skipped once the user\n * has touched the panel so it never overwrites their in-progress edits.\n */\n private hydrateSavedFilters() {\n if (this.userTouched) return;\n this.savedFilters = (this.initialFilters ?? []).map((filter) => ({\n ...filter,\n selected: true,\n }));\n }\n\n /** Marks the panel as user-edited (called from template interactions). */\n markTouched() {\n this.userTouched = true;\n }\n\n private initializeFilterableColumns() {\n this.filterableColumns = this.columns.filter((col) => col.accessorKey);\n }\n\n onColumnSelect(columnId: string) {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n if (!column) return;\n\n this.currentFilter.columnId = columnId;\n\n // Reset other values\n this.currentFilter.operator = undefined;\n this.currentFilter.value = undefined;\n\n this.applyColumnContext(column);\n }\n\n /**\n * Derives the value control, operators and options for a column without\n * touching the operator or value already in the operation row — `editFilter`\n * depends on those surviving, where `onColumnSelect` clears them first.\n */\n private applyColumnContext(column: ColumnDefinition<T>) {\n this.currentColumnType = this.resolveColumnType(column);\n this.valueOptions =\n this.currentColumnType === 'bool'\n ? this.boolOptions\n : this.currentColumnType === 'enum'\n ? this.normalizeValueOptions(column.valueOptions)\n : [];\n\n switch (this.currentColumnType) {\n case 'string':\n this.availableOperators = STRING_OPERATORS;\n break;\n case 'number':\n this.availableOperators = NUMBER_OPERATORS;\n break;\n case 'date':\n this.availableOperators = DATE_OPERATORS;\n break;\n case 'bool':\n this.availableOperators = BOOL_OPERATORS;\n break;\n case 'enum':\n this.availableOperators = ENUM_OPERATORS;\n break;\n default:\n this.availableOperators = [];\n }\n }\n\n addFilter() {\n const value = this.currentFilter.value;\n // Checked explicitly rather than for falsiness: `false` is a valid bool\n // filter and `0` a valid number one.\n const hasValue = value !== undefined && value !== null && value !== '';\n\n if (!this.currentFilter.columnId || !this.currentFilter.operator || !hasValue) {\n return;\n }\n\n const condition: FilterCondition = {\n columnId: this.currentFilter.columnId!,\n operator: this.currentFilter.operator,\n // Bool values round-trip through the dropdown as strings; hosts receive\n // a real boolean.\n value: this.currentColumnType === 'bool' ? value === 'true' : value!,\n };\n\n // Written back over the filter being edited, and over the existing chip of a\n // required column, so neither case leaves a stale duplicate behind. Updated\n // in place rather than removed and re-added so the chip keeps its position.\n const target =\n this.editingFilter ??\n (this.isRequiredColumn(condition.columnId)\n ? this.savedFilters.find((f) => f.columnId === condition.columnId)\n : undefined);\n\n if (target) {\n Object.assign(target, condition);\n target.selected = true;\n } else {\n this.savedFilters.unshift({ ...condition, selected: true });\n }\n\n this.editingFilter = null;\n this.userTouched = true;\n this.resetCurrentFilter();\n }\n\n /** Loads a saved filter back into the operation row for correction. */\n editFilter(filter: SavedFilter) {\n const column = this.filterableColumns.find(\n (col) => col.id === filter.columnId\n );\n if (!column) return;\n\n this.applyColumnContext(column);\n this.currentFilter = {\n columnId: filter.columnId,\n operator: filter.operator,\n value: this.toEditableValue(filter.value),\n };\n this.editingFilter = filter;\n this.userTouched = true;\n }\n\n /**\n * Converts a stored value back into what the value control expects: bools are\n * held as real booleans but the dropdown's options are the strings\n * 'true'/'false' (see `boolOptions`), and the native date input needs\n * 'YYYY-MM-DD' rather than a `Date` a host may have restored.\n */\n private toEditableValue(value: FilterCondition['value']) {\n if (this.currentColumnType === 'bool') return `${value}`;\n if (value instanceof Date) {\n // Built from the local parts: `toISOString` shifts to UTC and would move\n // the date a day back west of Greenwich.\n const month = `${value.getMonth() + 1}`.padStart(2, '0');\n const day = `${value.getDate()}`.padStart(2, '0');\n return `${value.getFullYear()}-${month}-${day}`;\n }\n return value;\n }\n\n /** Removes a saved filter. Required filters cannot be removed. */\n deleteFilter(filter: SavedFilter) {\n if (this.isRequired(filter)) return;\n\n const index = this.savedFilters.indexOf(filter);\n if (index === -1) return;\n\n this.savedFilters.splice(index, 1);\n if (this.editingFilter === filter) this.clearCurrentFilter();\n this.userTouched = true;\n }\n\n /** Empties the operation row, abandoning any edit in progress. */\n clearCurrentFilter() {\n this.editingFilter = null;\n this.resetCurrentFilter();\n }\n\n /** True when the filter's column is declared `isRequiredFilter`. */\n isRequired(filter: FilterCondition): boolean {\n return this.isRequiredColumn(filter.columnId);\n }\n\n private isRequiredColumn(columnId: string): boolean {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n return !!column?.isRequiredFilter;\n }\n\n isEditing(filter: SavedFilter): boolean {\n return this.editingFilter === filter;\n }\n\n /**\n * Locks the property dropdown while a required filter is being edited —\n * switching it to another column would drop the required filter entirely.\n */\n get isEditingRequired(): boolean {\n return !!this.editingFilter && this.isRequired(this.editingFilter);\n }\n\n getFilterDescription(filter: FilterCondition): string {\n const column = this.filterableColumns.find(\n (col) => col.id === filter.columnId\n );\n if (!column) return '';\n\n const columnName =\n typeof column.header === 'function' ? column.header({}) : column.header;\n\n const operator = this.getOperatorLabel(filter.operator);\n\n return `${columnName} ${operator} ${this.getValueLabel(column, filter.value)}`;\n }\n\n /** Renders a stored filter value the way it was chosen, not as raw data. */\n private getValueLabel(\n column: ColumnDefinition<T>,\n value: FilterCondition['value']\n ): string {\n if (value instanceof Date) return value.toLocaleDateString();\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n\n // The native date input yields a 'YYYY-MM-DD' string; restored filters may\n // carry one too. Parsed as local time — `new Date('2026-07-28')` is treated\n // as UTC and would display as the previous day west of Greenwich.\n if (typeof value === 'string' && this.isDateString(value)) {\n const [year, month, day] = value.slice(0, 10).split('-').map(Number);\n return new Date(year, month - 1, day).toLocaleDateString();\n }\n\n const option = this.normalizeValueOptions(column.valueOptions).find(\n (candidate) => candidate.value === value\n );\n return option ? option.label : `${value}`;\n }\n\n private getOperatorLabel(operatorValue: string): string {\n const operator = [\n ...STRING_OPERATORS,\n ...NUMBER_OPERATORS,\n ...DATE_OPERATORS,\n ...BOOL_OPERATORS,\n ...ENUM_OPERATORS,\n ].find((op) => op.value === operatorValue);\n return operator ? operator.label.toLowerCase() : operatorValue;\n }\n\n /**\n * Prefers the type declared on the column, falling back to inspecting the data\n * only when the host has not declared one.\n */\n private resolveColumnType(column: ColumnDefinition<T>): FilterOperatorType {\n if (column.valueType) {\n // An Enum with no declared members has nothing to populate a dropdown\n // with, so it degrades to a free-text filter rather than an empty select.\n if (\n column.valueType === ColumnValueType.Enum &&\n !this.normalizeValueOptions(column.valueOptions).length\n ) {\n return 'string';\n }\n return this.mapValueType(column.valueType);\n }\n\n return this.inferColumnType(column);\n }\n\n private mapValueType(valueType: ColumnValueType): FilterOperatorType {\n switch (valueType) {\n case ColumnValueType.Date:\n return 'date';\n case ColumnValueType.Number:\n case ColumnValueType.Integer:\n case ColumnValueType.Decimal:\n case ColumnValueType.Currency:\n return 'number';\n case ColumnValueType.Bool:\n return 'bool';\n case ColumnValueType.Enum:\n return 'enum';\n default:\n return 'string';\n }\n }\n\n /**\n * Best-effort type detection for columns that declare no `valueType`. Falls\n * back to 'string' rather than null so the value field always renders.\n */\n private inferColumnType(column: ColumnDefinition<T>): FilterOperatorType {\n const sampleValue = this.firstNonEmptyValue(column);\n\n if (sampleValue instanceof Date) return 'date';\n if (typeof sampleValue === 'number') return 'number';\n if (typeof sampleValue === 'boolean') return 'bool';\n if (typeof sampleValue === 'string' && this.isDateString(sampleValue)) {\n return 'date';\n }\n return 'string';\n }\n\n /**\n * Scans rows for the first usable sample — sampling only the first row misses\n * the type whenever that row happens to hold a null or undefined value.\n */\n private firstNonEmptyValue(column: ColumnDefinition<T>): unknown {\n for (const row of this.data ?? []) {\n const value = this.readValue(column, row);\n if (value !== null && value !== undefined && value !== '') return value;\n }\n return null;\n }\n\n private readValue(column: ColumnDefinition<T>, row: T): unknown {\n if (column.accessorKey) return row[column.accessorKey];\n if (column.accessorFn) return column.accessorFn(row);\n return null;\n }\n\n /**\n * Dates usually arrive from an API as ISO strings, which would otherwise be\n * typed as plain text. Anchored to ISO-ish input so ordinary strings that\n * `Date` happens to parse (e.g. \"March\") are not misread as dates.\n */\n private isDateString(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}([T\\s]|$)/.test(value)) return false;\n return !Number.isNaN(new Date(value).getTime());\n }\n\n /** Accepts either supported `valueOptions` shape and returns one of them. */\n private normalizeValueOptions(\n options: string[] | ColumnValueOption[] | undefined\n ): ColumnValueOption[] {\n if (!options?.length) return [];\n return (options as unknown[]).map((option) =>\n typeof option === 'string'\n ? { label: option, value: option }\n : (option as ColumnValueOption)\n );\n }\n\n private resetCurrentFilter() {\n this.currentFilter = {};\n this.availableOperators = [];\n this.currentColumnType = null;\n this.valueOptions = [];\n }\n\n resetAll() {\n this.userTouched = true;\n this.savedFilters = this.savedFilters.filter((filter) =>\n this.isRequired(filter)\n );\n this.clearCurrentFilter();\n\n // Required filters survive a reset, so the host is told what is left rather\n // than that everything is gone — a bare `resetFilter` would leave the panel\n // showing chips the host is no longer filtering by.\n if (this.savedFilters.length) {\n this.applyFilters();\n return;\n }\n this.resetFilter.emit();\n }\n\n applyFilters() {\n this.userTouched = true;\n const activeFilters = this.savedFilters\n // Required filters are emitted whether or not they are ticked: their\n // checkbox is disabled, but the host must never be left without them.\n .filter((filter) => filter.selected || this.isRequired(filter))\n .map(({ columnId, operator, value }) => ({\n columnId,\n operator,\n value,\n }));\n this.filterApplied.emit(activeFilters);\n }\n\n getColumnLabel(columnId: string): string {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n return column\n ? typeof column.header === 'function'\n ? column.header({})\n : column.header\n : columnId;\n }\n\n /**\n * Required filters pinned to the top so the collapsed list can never hide one\n * behind \"Show More\".\n */\n get orderedFilters(): SavedFilter[] {\n return [\n ...this.savedFilters.filter((filter) => this.isRequired(filter)),\n ...this.savedFilters.filter((filter) => !this.isRequired(filter)),\n ];\n }\n\n get visibleFilters(): SavedFilter[] {\n return this.showAllFilters\n ? this.orderedFilters\n : this.orderedFilters.slice(0, this.maxVisibleItems);\n }\n\n get activeFilterCount(): number {\n return this.savedFilters.filter(\n (filter) => filter.selected || this.isRequired(filter)\n ).length;\n }\n}\n","<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div\n *ngFor=\"let filter of visibleFilters\"\n class=\"item\"\n [class.item-editing]=\"isEditing(filter)\"\n >\n <div class=\"item-label\">\n <!-- A required filter is always active, so its checkbox is ticked and\n locked rather than hidden — the state stays readable. -->\n <input\n type=\"checkbox\"\n [(ngModel)]=\"filter.selected\"\n [disabled]=\"isRequired(filter)\"\n (ngModelChange)=\"markTouched()\"\n />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n\n <div class=\"item-actions\">\n <button\n type=\"button\"\n class=\"icon-button\"\n aria-label=\"Edit filter\"\n (click)=\"editFilter(filter)\"\n >\n <!-- Only `stroke` is passed: `verben-svg` resolves a single colour as\n `fill || stroke` and applies it to both, so also passing `fill`\n would paint the icon in whatever `fill` holds. -->\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n ></verben-svg>\n </button>\n <button\n type=\"button\"\n class=\"icon-button\"\n aria-label=\"Delete filter\"\n [disabled]=\"isRequired(filter)\"\n (click)=\"deleteFilter(filter)\"\n >\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n ></verben-svg>\n </button>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [disabled]=\"isEditingRequired\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input — native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <div class=\"operation-actions\">\n <button class=\"clear-button\" (click)=\"clearCurrentFilter()\">\n Clear\n </button>\n <button class=\"add-button\" (click)=\"addFilter()\">+ Add</button>\n </div>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { CardModule } from 'verben-ng-ui/src/lib/components/card';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';\nimport { DataFilterComponent } from './data-filter.component';\n\n@NgModule({\n declarations: [DataFilterComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SvgModule,\n CardModule,\n DropDownModule,\n TooltipModule,\n VerbenaInputModule,\n ],\n exports: [DataFilterComponent],\n})\nexport class DataFilterModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataFilterService {\n\n constructor() { }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verben-ng-ui-src-lib-components-data-filter.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.types.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.component.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.component.html","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.module.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/data-filter.service.ts","../../../projects/verben-ng-ui/src/lib/components/data-filter/verben-ng-ui-src-lib-components-data-filter.ts"],"sourcesContent":["export type FilterOperatorType = 'string' | 'number' | 'date' | 'bool' | 'enum';\n\nexport interface FilterOperator {\n label: string;\n value: string;\n type: FilterOperatorType;\n}\n\nexport const STRING_OPERATORS: FilterOperator[] = [\n { label: 'Starts With', value: 'startsWith', type: 'string' },\n { label: 'Ends With', value: 'endsWith', type: 'string' },\n { label: 'Contains', value: 'contains', type: 'string' },\n { label: 'Equals', value: 'equals', type: 'string' },\n { label: 'Is Not', value: 'isNot', type: 'string' },\n];\n\nexport const NUMBER_OPERATORS: FilterOperator[] = [\n { label: 'Equal', value: 'equal', type: 'number' },\n { label: 'Greater Than', value: 'greaterThan', type: 'number' },\n { label: 'Less Than', value: 'lessThan', type: 'number' },\n { label: 'Is Not', value: 'isNot', type: 'number' },\n];\n\nexport const DATE_OPERATORS: FilterOperator[] = [\n { label: 'On', value: 'on', type: 'date' },\n { label: 'Before', value: 'before', type: 'date' },\n { label: 'After', value: 'after', type: 'date' },\n];\n\nexport const BOOL_OPERATORS: FilterOperator[] = [\n { label: 'Is', value: 'is', type: 'bool' },\n { label: 'Is Not', value: 'isNot', type: 'bool' },\n];\n\nexport const ENUM_OPERATORS: FilterOperator[] = [\n { label: 'Is', value: 'is', type: 'enum' },\n { label: 'Is Not', value: 'isNot', type: 'enum' },\n];\n\nexport interface FilterCondition {\n columnId: string;\n operator: string;\n value: string | number | boolean | Date;\n}\n\nexport interface FilterGroup {\n id: string;\n name: string;\n conditions: FilterCondition[];\n}\n\nexport interface FilterState {\n groups: FilterGroup[];\n activeFilters: FilterCondition[];\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n SimpleChanges,\n} from '@angular/core';\nimport {\n ColumnDefinition,\n ColumnValueOption,\n ColumnValueType,\n} from 'verben-ng-ui/src/lib/components/data-table';\nimport {\n FilterOperator,\n FilterOperatorType,\n FilterCondition,\n FilterGroup,\n STRING_OPERATORS,\n NUMBER_OPERATORS,\n DATE_OPERATORS,\n BOOL_OPERATORS,\n ENUM_OPERATORS,\n} from './data-filter.types';\n\n/** A filter chip in the panel's list: a condition plus its active state. */\ntype SavedFilter = FilterCondition & { selected: boolean };\n\n@Component({\n selector: 'lib-data-filter',\n templateUrl: './data-filter.component.html',\n styleUrl: './data-filter.component.css',\n})\nexport class DataFilterComponent<T> implements OnInit, OnChanges {\n @Input() columns!: ColumnDefinition<T>[];\n @Input() data!: T[];\n /**\n * Optional restored filters: the panel opens pre-populated with these as\n * selected filter chips. Applied once (the first time a non-empty value\n * arrives) so it never clobbers the user's in-progress edits afterwards.\n */\n @Input() initialFilters?: FilterCondition[];\n @Output() filterApplied = new EventEmitter<FilterCondition[]>();\n @Output() resetFilter = new EventEmitter();\n filterableColumns: ColumnDefinition<T>[] = [];\n availableOperators: FilterOperator[] = [];\n savedFilters: SavedFilter[] = [];\n currentFilter: Partial<FilterCondition> = {};\n showAllFilters = false;\n maxVisibleItems = 3;\n currentColumnType: FilterOperatorType | null = null;\n /**\n * Options for the value dropdown when the selected column is bool or enum.\n * Always normalised to `{ label, value }` so the template binds one shape.\n */\n valueOptions: ColumnValueOption[] = [];\n /**\n * Held as strings rather than booleans: `verben-drop-down` gates its selected\n * label on a truthiness check, so an option valued `false` would render as\n * though nothing were picked. Coerced back to a boolean in `addFilter`.\n */\n private readonly boolOptions: ColumnValueOption[] = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n ];\n // Set once the user edits the panel, so restored/host filters no longer\n // overwrite their in-progress work.\n private userTouched = false;\n /**\n * The saved filter currently loaded into the operation row, if any. Held by\n * reference rather than by index so deleting or reordering another filter\n * cannot retarget the write-back.\n */\n private editingFilter: SavedFilter | null = null;\n\n ngOnInit() {\n this.initializeFilterableColumns();\n this.hydrateSavedFilters();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // Pick up filters restored asynchronously by the host after first render.\n if (changes['initialFilters']) {\n this.hydrateSavedFilters();\n }\n }\n\n /**\n * Seed the saved-filter chips from the restored filters. Skipped once the user\n * has touched the panel so it never overwrites their in-progress edits.\n */\n private hydrateSavedFilters() {\n if (this.userTouched) return;\n this.savedFilters = (this.initialFilters ?? []).map((filter) => ({\n ...filter,\n selected: true,\n }));\n }\n\n /** Marks the panel as user-edited (called from template interactions). */\n markTouched() {\n this.userTouched = true;\n }\n\n private initializeFilterableColumns() {\n this.filterableColumns = this.columns.filter((col) => col.accessorKey);\n }\n\n onColumnSelect(columnId: string) {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n if (!column) return;\n\n this.currentFilter.columnId = columnId;\n\n // Reset other values\n this.currentFilter.operator = undefined;\n this.currentFilter.value = undefined;\n\n this.applyColumnContext(column);\n }\n\n /**\n * Derives the value control, operators and options for a column without\n * touching the operator or value already in the operation row — `editFilter`\n * depends on those surviving, where `onColumnSelect` clears them first.\n */\n private applyColumnContext(column: ColumnDefinition<T>) {\n this.currentColumnType = this.resolveColumnType(column);\n this.valueOptions =\n this.currentColumnType === 'bool'\n ? this.boolOptions\n : this.currentColumnType === 'enum'\n ? this.normalizeValueOptions(column.valueOptions)\n : [];\n\n switch (this.currentColumnType) {\n case 'string':\n this.availableOperators = STRING_OPERATORS;\n break;\n case 'number':\n this.availableOperators = NUMBER_OPERATORS;\n break;\n case 'date':\n this.availableOperators = DATE_OPERATORS;\n break;\n case 'bool':\n this.availableOperators = BOOL_OPERATORS;\n break;\n case 'enum':\n this.availableOperators = ENUM_OPERATORS;\n break;\n default:\n this.availableOperators = [];\n }\n }\n\n addFilter() {\n const value = this.currentFilter.value;\n // Checked explicitly rather than for falsiness: `false` is a valid bool\n // filter and `0` a valid number one.\n const hasValue = value !== undefined && value !== null && value !== '';\n\n if (!this.currentFilter.columnId || !this.currentFilter.operator || !hasValue) {\n return;\n }\n\n const condition: FilterCondition = {\n columnId: this.currentFilter.columnId!,\n operator: this.currentFilter.operator,\n // Bool values round-trip through the dropdown as strings; hosts receive\n // a real boolean.\n value: this.currentColumnType === 'bool' ? value === 'true' : value!,\n };\n\n // Written back over the filter being edited, and over the existing chip of a\n // required column, so neither case leaves a stale duplicate behind. Updated\n // in place rather than removed and re-added so the chip keeps its position.\n const target =\n this.editingFilter ??\n (this.isRequiredColumn(condition.columnId)\n ? this.savedFilters.find((f) => f.columnId === condition.columnId)\n : undefined);\n\n if (target) {\n Object.assign(target, condition);\n target.selected = true;\n } else {\n this.savedFilters.unshift({ ...condition, selected: true });\n }\n\n this.editingFilter = null;\n this.userTouched = true;\n this.resetCurrentFilter();\n }\n\n /** Loads a saved filter back into the operation row for correction. */\n editFilter(filter: SavedFilter) {\n const column = this.filterableColumns.find(\n (col) => col.id === filter.columnId\n );\n if (!column) return;\n\n this.applyColumnContext(column);\n this.currentFilter = {\n columnId: filter.columnId,\n operator: filter.operator,\n value: this.toEditableValue(filter.value),\n };\n this.editingFilter = filter;\n this.userTouched = true;\n }\n\n /**\n * Converts a stored value back into what the value control expects: bools are\n * held as real booleans but the dropdown's options are the strings\n * 'true'/'false' (see `boolOptions`), and the native date input needs\n * 'YYYY-MM-DD' rather than a `Date` a host may have restored.\n */\n private toEditableValue(value: FilterCondition['value']) {\n if (this.currentColumnType === 'bool') return `${value}`;\n if (value instanceof Date) {\n // Built from the local parts: `toISOString` shifts to UTC and would move\n // the date a day back west of Greenwich.\n const month = `${value.getMonth() + 1}`.padStart(2, '0');\n const day = `${value.getDate()}`.padStart(2, '0');\n return `${value.getFullYear()}-${month}-${day}`;\n }\n return value;\n }\n\n /** Removes a saved filter. Required filters cannot be removed. */\n deleteFilter(filter: SavedFilter) {\n if (this.isRequired(filter)) return;\n\n const index = this.savedFilters.indexOf(filter);\n if (index === -1) return;\n\n this.savedFilters.splice(index, 1);\n if (this.editingFilter === filter) this.clearCurrentFilter();\n this.userTouched = true;\n }\n\n /** Empties the operation row, abandoning any edit in progress. */\n clearCurrentFilter() {\n this.editingFilter = null;\n this.resetCurrentFilter();\n }\n\n /** True when the filter's column is declared `isRequiredFilter`. */\n isRequired(filter: FilterCondition): boolean {\n return this.isRequiredColumn(filter.columnId);\n }\n\n private isRequiredColumn(columnId: string): boolean {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n return !!column?.isRequiredFilter;\n }\n\n isEditing(filter: SavedFilter): boolean {\n return this.editingFilter === filter;\n }\n\n /**\n * Locks the property dropdown while a required filter is being edited —\n * switching it to another column would drop the required filter entirely.\n */\n get isEditingRequired(): boolean {\n return !!this.editingFilter && this.isRequired(this.editingFilter);\n }\n\n getFilterDescription(filter: FilterCondition): string {\n const column = this.filterableColumns.find(\n (col) => col.id === filter.columnId\n );\n if (!column) return '';\n\n const columnName =\n typeof column.header === 'function' ? column.header({}) : column.header;\n\n const operator = this.getOperatorLabel(filter.operator);\n\n return `${columnName} ${operator} ${this.getValueLabel(column, filter.value)}`;\n }\n\n /** Renders a stored filter value the way it was chosen, not as raw data. */\n private getValueLabel(\n column: ColumnDefinition<T>,\n value: FilterCondition['value']\n ): string {\n if (value instanceof Date) return value.toLocaleDateString();\n if (typeof value === 'boolean') return value ? 'Yes' : 'No';\n\n // The native date input yields a 'YYYY-MM-DD' string; restored filters may\n // carry one too. Parsed as local time — `new Date('2026-07-28')` is treated\n // as UTC and would display as the previous day west of Greenwich.\n if (typeof value === 'string' && this.isDateString(value)) {\n const [year, month, day] = value.slice(0, 10).split('-').map(Number);\n return new Date(year, month - 1, day).toLocaleDateString();\n }\n\n const option = this.normalizeValueOptions(column.valueOptions).find(\n (candidate) => candidate.value === value\n );\n return option ? option.label : `${value}`;\n }\n\n private getOperatorLabel(operatorValue: string): string {\n const operator = [\n ...STRING_OPERATORS,\n ...NUMBER_OPERATORS,\n ...DATE_OPERATORS,\n ...BOOL_OPERATORS,\n ...ENUM_OPERATORS,\n ].find((op) => op.value === operatorValue);\n return operator ? operator.label.toLowerCase() : operatorValue;\n }\n\n /**\n * Prefers the type declared on the column, falling back to inspecting the data\n * only when the host has not declared one.\n */\n private resolveColumnType(column: ColumnDefinition<T>): FilterOperatorType {\n if (column.valueType) {\n // An Enum with no declared members has nothing to populate a dropdown\n // with, so it degrades to a free-text filter rather than an empty select.\n if (\n column.valueType === ColumnValueType.Enum &&\n !this.normalizeValueOptions(column.valueOptions).length\n ) {\n return 'string';\n }\n return this.mapValueType(column.valueType);\n }\n\n return this.inferColumnType(column);\n }\n\n private mapValueType(valueType: ColumnValueType): FilterOperatorType {\n switch (valueType) {\n case ColumnValueType.Date:\n return 'date';\n case ColumnValueType.Number:\n case ColumnValueType.Integer:\n case ColumnValueType.Decimal:\n case ColumnValueType.Currency:\n return 'number';\n case ColumnValueType.Bool:\n return 'bool';\n case ColumnValueType.Enum:\n return 'enum';\n default:\n return 'string';\n }\n }\n\n /**\n * Best-effort type detection for columns that declare no `valueType`. Falls\n * back to 'string' rather than null so the value field always renders.\n */\n private inferColumnType(column: ColumnDefinition<T>): FilterOperatorType {\n const sampleValue = this.firstNonEmptyValue(column);\n\n if (sampleValue instanceof Date) return 'date';\n if (typeof sampleValue === 'number') return 'number';\n if (typeof sampleValue === 'boolean') return 'bool';\n if (typeof sampleValue === 'string' && this.isDateString(sampleValue)) {\n return 'date';\n }\n return 'string';\n }\n\n /**\n * Scans rows for the first usable sample — sampling only the first row misses\n * the type whenever that row happens to hold a null or undefined value.\n */\n private firstNonEmptyValue(column: ColumnDefinition<T>): unknown {\n for (const row of this.data ?? []) {\n const value = this.readValue(column, row);\n if (value !== null && value !== undefined && value !== '') return value;\n }\n return null;\n }\n\n private readValue(column: ColumnDefinition<T>, row: T): unknown {\n if (column.accessorKey) return row[column.accessorKey];\n if (column.accessorFn) return column.accessorFn(row);\n return null;\n }\n\n /**\n * Dates usually arrive from an API as ISO strings, which would otherwise be\n * typed as plain text. Anchored to ISO-ish input so ordinary strings that\n * `Date` happens to parse (e.g. \"March\") are not misread as dates.\n */\n private isDateString(value: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}([T\\s]|$)/.test(value)) return false;\n return !Number.isNaN(new Date(value).getTime());\n }\n\n /** Accepts either supported `valueOptions` shape and returns one of them. */\n private normalizeValueOptions(\n options: string[] | ColumnValueOption[] | undefined\n ): ColumnValueOption[] {\n if (!options?.length) return [];\n return (options as unknown[]).map((option) =>\n typeof option === 'string'\n ? { label: option, value: option }\n : (option as ColumnValueOption)\n );\n }\n\n private resetCurrentFilter() {\n this.currentFilter = {};\n this.availableOperators = [];\n this.currentColumnType = null;\n this.valueOptions = [];\n }\n\n resetAll() {\n this.userTouched = true;\n this.savedFilters = this.savedFilters.filter((filter) =>\n this.isRequired(filter)\n );\n this.clearCurrentFilter();\n\n // Required filters survive a reset, so the host is told what is left rather\n // than that everything is gone — a bare `resetFilter` would leave the panel\n // showing chips the host is no longer filtering by.\n if (this.savedFilters.length) {\n this.applyFilters();\n return;\n }\n this.resetFilter.emit();\n }\n\n applyFilters() {\n this.userTouched = true;\n const activeFilters = this.savedFilters\n // Required filters are emitted whether or not they are ticked: their\n // checkbox is disabled, but the host must never be left without them.\n .filter((filter) => filter.selected || this.isRequired(filter))\n .map(({ columnId, operator, value }) => ({\n columnId,\n operator,\n value,\n }));\n this.filterApplied.emit(activeFilters);\n }\n\n getColumnLabel(columnId: string): string {\n const column = this.filterableColumns.find((col) => col.id === columnId);\n return column\n ? typeof column.header === 'function'\n ? column.header({})\n : column.header\n : columnId;\n }\n\n /**\n * Required filters pinned to the top so the collapsed list can never hide one\n * behind \"Show More\".\n */\n get orderedFilters(): SavedFilter[] {\n return [\n ...this.savedFilters.filter((filter) => this.isRequired(filter)),\n ...this.savedFilters.filter((filter) => !this.isRequired(filter)),\n ];\n }\n\n get visibleFilters(): SavedFilter[] {\n return this.showAllFilters\n ? this.orderedFilters\n : this.orderedFilters.slice(0, this.maxVisibleItems);\n }\n\n get activeFilterCount(): number {\n return this.savedFilters.filter(\n (filter) => filter.selected || this.isRequired(filter)\n ).length;\n }\n}\n","<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid var(--vbn-color-primary)'\"\n bgColor=\"var(--vbn-color-surface)\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Filter <sup>({{ activeFilterCount }})</sup>\n </h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'var(--vbn-color-border-focus)'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"resetAll()\"\n >\n Reset\n </button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Saved Filters Section -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Filters</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div\n *ngFor=\"let filter of visibleFilters\"\n class=\"item\"\n [class.item-editing]=\"isEditing(filter)\"\n >\n <div class=\"item-label\">\n <!-- A required filter is always active, so its checkbox is ticked and\n locked rather than hidden — the state stays readable. -->\n <input\n type=\"checkbox\"\n [(ngModel)]=\"filter.selected\"\n [disabled]=\"isRequired(filter)\"\n (ngModelChange)=\"markTouched()\"\n />\n <label>{{ getFilterDescription(filter) }}</label>\n </div>\n\n <div class=\"item-actions\">\n <button\n type=\"button\"\n class=\"icon-button\"\n aria-label=\"Edit filter\"\n (click)=\"editFilter(filter)\"\n >\n <!-- Only `stroke` is passed: `verben-svg` resolves a single colour as\n `fill || stroke` and applies it to both, so also passing `fill`\n would paint the icon in whatever `fill` holds. -->\n <verben-svg\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-border-focus)\"\n ></verben-svg>\n </button>\n <button\n type=\"button\"\n class=\"icon-button\"\n aria-label=\"Delete filter\"\n [disabled]=\"isRequired(filter)\"\n (click)=\"deleteFilter(filter)\"\n >\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n stroke=\"var(--vbn-color-error)\"\n ></verben-svg>\n </button>\n </div>\n </div>\n\n <div\n *ngIf=\"savedFilters.length > maxVisibleItems\"\n class=\"show-more\"\n (click)=\"showAllFilters = !showAllFilters\"\n >\n {{ showAllFilters ? \"Show Less\" : \"Show More\" }}\n </div>\n </section>\n\n <hr class=\"divider\" />\n\n <!-- New Filter Operation -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Operation</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"var(--vbn-color-text-muted)\"\n ></verben-svg>\n </div>\n\n <div class=\"operation-grid\">\n <!-- Column Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select column\"\n [options]=\"filterableColumns\"\n optionLabel=\"header\"\n optionValue=\"id\"\n [disabled]=\"isEditingRequired\"\n [(ngModel)]=\"currentFilter.columnId\"\n (ngModelChange)=\"onColumnSelect($event)\"\n ></verben-drop-down>\n\n <!-- Operator Selection -->\n <verben-drop-down\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select operator\"\n [options]=\"availableOperators\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.operator\"\n ></verben-drop-down>\n\n <!-- Value Input based on type -->\n <ng-container [ngSwitch]=\"currentColumnType\">\n <!-- Date Input — native rather than the library date picker, whose\n overlay renders off screen from this narrow panel. -->\n <verbena-input\n *ngSwitchCase=\"'date'\"\n type=\"date\"\n placeHolder=\"Select date\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Number Input -->\n <verbena-input\n *ngSwitchCase=\"'number'\"\n type=\"number\"\n placeHolder=\"Enter number\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n\n <!-- Yes / No Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'bool'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Enum Member Selection -->\n <verben-drop-down\n *ngSwitchCase=\"'enum'\"\n width=\"100%\"\n height=\"1.025rem\"\n placeholder=\"Select value\"\n [options]=\"valueOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"currentFilter.value\"\n ></verben-drop-down>\n\n <!-- Text Input (default) -->\n <verbena-input\n *ngSwitchDefault\n type=\"text\"\n placeHolder=\"Enter text\"\n border=\"1px solid var(--vbn-color-border)\"\n borderRadius=\"5px\"\n textColor=\"var(--vbn-color-text)\"\n width=\"100%\"\n height=\"1.025rem\"\n pd=\"2px 6px\"\n [(ngModel)]=\"currentFilter.value\"\n ></verbena-input>\n </ng-container>\n </div>\n\n <div class=\"operation-actions\">\n <button class=\"clear-button\" (click)=\"clearCurrentFilter()\">\n Clear\n </button>\n <button class=\"add-button\" (click)=\"addFilter()\">+ Add</button>\n </div>\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"applyFilters()\">Filter</button>\n </div>\n</verben-card>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SvgModule } from 'verben-ng-ui/src/lib/components/svg';\nimport { CardModule } from 'verben-ng-ui/src/lib/components/card';\nimport { DropDownModule } from 'verben-ng-ui/src/lib/components/drop-down';\nimport { TooltipModule } from 'verben-ng-ui/src/lib/components/tooltip';\nimport { VerbenaInputModule } from 'verben-ng-ui/src/lib/verbena-input';\nimport { DataFilterComponent } from './data-filter.component';\n\n@NgModule({\n declarations: [DataFilterComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n SvgModule,\n CardModule,\n DropDownModule,\n TooltipModule,\n VerbenaInputModule,\n ],\n exports: [DataFilterComponent],\n})\nexport class DataFilterModule {}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataFilterService {\n\n constructor() { }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verben-ng-ui",
3
- "version": "1.3.8",
3
+ "version": "1.3.9",
4
4
  "author": "Verbena Logic",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,18 +51,18 @@
51
51
  "esm": "./esm2022/src/lib/convert-to-integer/verben-ng-ui-src-lib-convert-to-integer.mjs",
52
52
  "default": "./fesm2022/verben-ng-ui-src-lib-convert-to-integer.mjs"
53
53
  },
54
- "./src/lib/convert-to-number": {
55
- "types": "./src/lib/convert-to-number/index.d.ts",
56
- "esm2022": "./esm2022/src/lib/convert-to-number/verben-ng-ui-src-lib-convert-to-number.mjs",
57
- "esm": "./esm2022/src/lib/convert-to-number/verben-ng-ui-src-lib-convert-to-number.mjs",
58
- "default": "./fesm2022/verben-ng-ui-src-lib-convert-to-number.mjs"
59
- },
60
54
  "./src/lib/email-validator": {
61
55
  "types": "./src/lib/email-validator/index.d.ts",
62
56
  "esm2022": "./esm2022/src/lib/email-validator/verben-ng-ui-src-lib-email-validator.mjs",
63
57
  "esm": "./esm2022/src/lib/email-validator/verben-ng-ui-src-lib-email-validator.mjs",
64
58
  "default": "./fesm2022/verben-ng-ui-src-lib-email-validator.mjs"
65
59
  },
60
+ "./src/lib/convert-to-number": {
61
+ "types": "./src/lib/convert-to-number/index.d.ts",
62
+ "esm2022": "./esm2022/src/lib/convert-to-number/verben-ng-ui-src-lib-convert-to-number.mjs",
63
+ "esm": "./esm2022/src/lib/convert-to-number/verben-ng-ui-src-lib-convert-to-number.mjs",
64
+ "default": "./fesm2022/verben-ng-ui-src-lib-convert-to-number.mjs"
65
+ },
66
66
  "./src/lib/models": {
67
67
  "types": "./src/lib/models/index.d.ts",
68
68
  "esm2022": "./esm2022/src/lib/models/verben-ng-ui-src-lib-models.mjs",
@@ -75,12 +75,6 @@
75
75
  "esm": "./esm2022/src/lib/number-range/verben-ng-ui-src-lib-number-range.mjs",
76
76
  "default": "./fesm2022/verben-ng-ui-src-lib-number-range.mjs"
77
77
  },
78
- "./src/lib/phone-number": {
79
- "types": "./src/lib/phone-number/index.d.ts",
80
- "esm2022": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
81
- "esm": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
82
- "default": "./fesm2022/verben-ng-ui-src-lib-phone-number.mjs"
83
- },
84
78
  "./src/lib/required-input": {
85
79
  "types": "./src/lib/required-input/index.d.ts",
86
80
  "esm2022": "./esm2022/src/lib/required-input/verben-ng-ui-src-lib-required-input.mjs",
@@ -93,11 +87,11 @@
93
87
  "esm": "./esm2022/src/lib/services/verben-ng-ui-src-lib-services.mjs",
94
88
  "default": "./fesm2022/verben-ng-ui-src-lib-services.mjs"
95
89
  },
96
- "./src/lib/theme": {
97
- "types": "./src/lib/theme/index.d.ts",
98
- "esm2022": "./esm2022/src/lib/theme/verben-ng-ui-src-lib-theme.mjs",
99
- "esm": "./esm2022/src/lib/theme/verben-ng-ui-src-lib-theme.mjs",
100
- "default": "./fesm2022/verben-ng-ui-src-lib-theme.mjs"
90
+ "./src/lib/phone-number": {
91
+ "types": "./src/lib/phone-number/index.d.ts",
92
+ "esm2022": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
93
+ "esm": "./esm2022/src/lib/phone-number/verben-ng-ui-src-lib-phone-number.mjs",
94
+ "default": "./fesm2022/verben-ng-ui-src-lib-phone-number.mjs"
101
95
  },
102
96
  "./src/lib/theme-switcher": {
103
97
  "types": "./src/lib/theme-switcher/index.d.ts",
@@ -105,11 +99,11 @@
105
99
  "esm": "./esm2022/src/lib/theme-switcher/verben-ng-ui-src-lib-theme-switcher.mjs",
106
100
  "default": "./fesm2022/verben-ng-ui-src-lib-theme-switcher.mjs"
107
101
  },
108
- "./src/lib/validate": {
109
- "types": "./src/lib/validate/index.d.ts",
110
- "esm2022": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
111
- "esm": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
112
- "default": "./fesm2022/verben-ng-ui-src-lib-validate.mjs"
102
+ "./src/lib/theme": {
103
+ "types": "./src/lib/theme/index.d.ts",
104
+ "esm2022": "./esm2022/src/lib/theme/verben-ng-ui-src-lib-theme.mjs",
105
+ "esm": "./esm2022/src/lib/theme/verben-ng-ui-src-lib-theme.mjs",
106
+ "default": "./fesm2022/verben-ng-ui-src-lib-theme.mjs"
113
107
  },
114
108
  "./src/lib/verbena-badge": {
115
109
  "types": "./src/lib/verbena-badge/index.d.ts",
@@ -123,83 +117,83 @@
123
117
  "esm": "./esm2022/src/lib/validate-input/verben-ng-ui-src-lib-validate-input.mjs",
124
118
  "default": "./fesm2022/verben-ng-ui-src-lib-validate-input.mjs"
125
119
  },
120
+ "./src/lib/validate": {
121
+ "types": "./src/lib/validate/index.d.ts",
122
+ "esm2022": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
123
+ "esm": "./esm2022/src/lib/validate/verben-ng-ui-src-lib-validate.mjs",
124
+ "default": "./fesm2022/verben-ng-ui-src-lib-validate.mjs"
125
+ },
126
+ "./src/lib/verbena-textarea": {
127
+ "types": "./src/lib/verbena-textarea/index.d.ts",
128
+ "esm2022": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
129
+ "esm": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
130
+ "default": "./fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs"
131
+ },
126
132
  "./src/lib/verbena-button": {
127
133
  "types": "./src/lib/verbena-button/index.d.ts",
128
134
  "esm2022": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
129
135
  "esm": "./esm2022/src/lib/verbena-button/verben-ng-ui-src-lib-verbena-button.mjs",
130
136
  "default": "./fesm2022/verben-ng-ui-src-lib-verbena-button.mjs"
131
137
  },
132
- "./src/lib/verbena-input": {
133
- "types": "./src/lib/verbena-input/index.d.ts",
134
- "esm2022": "./esm2022/src/lib/verbena-input/verben-ng-ui-src-lib-verbena-input.mjs",
135
- "esm": "./esm2022/src/lib/verbena-input/verben-ng-ui-src-lib-verbena-input.mjs",
136
- "default": "./fesm2022/verben-ng-ui-src-lib-verbena-input.mjs"
137
- },
138
138
  "./src/lib/verbena-switch": {
139
139
  "types": "./src/lib/verbena-switch/index.d.ts",
140
140
  "esm2022": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
141
141
  "esm": "./esm2022/src/lib/verbena-switch/verben-ng-ui-src-lib-verbena-switch.mjs",
142
142
  "default": "./fesm2022/verben-ng-ui-src-lib-verbena-switch.mjs"
143
143
  },
144
+ "./src/lib/components/card-data-view": {
145
+ "types": "./src/lib/components/card-data-view/index.d.ts",
146
+ "esm2022": "./esm2022/src/lib/components/card-data-view/verben-ng-ui-src-lib-components-card-data-view.mjs",
147
+ "esm": "./esm2022/src/lib/components/card-data-view/verben-ng-ui-src-lib-components-card-data-view.mjs",
148
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs"
149
+ },
144
150
  "./src/lib/components/card": {
145
151
  "types": "./src/lib/components/card/index.d.ts",
146
152
  "esm2022": "./esm2022/src/lib/components/card/verben-ng-ui-src-lib-components-card.mjs",
147
153
  "esm": "./esm2022/src/lib/components/card/verben-ng-ui-src-lib-components-card.mjs",
148
154
  "default": "./fesm2022/verben-ng-ui-src-lib-components-card.mjs"
149
155
  },
150
- "./src/lib/verbena-textarea": {
151
- "types": "./src/lib/verbena-textarea/index.d.ts",
152
- "esm2022": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
153
- "esm": "./esm2022/src/lib/verbena-textarea/verben-ng-ui-src-lib-verbena-textarea.mjs",
154
- "default": "./fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs"
155
- },
156
156
  "./src/lib/components/chip": {
157
157
  "types": "./src/lib/components/chip/index.d.ts",
158
158
  "esm2022": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
159
159
  "esm": "./esm2022/src/lib/components/chip/verben-ng-ui-src-lib-components-chip.mjs",
160
160
  "default": "./fesm2022/verben-ng-ui-src-lib-components-chip.mjs"
161
161
  },
162
- "./src/lib/components/card-data-view": {
163
- "types": "./src/lib/components/card-data-view/index.d.ts",
164
- "esm2022": "./esm2022/src/lib/components/card-data-view/verben-ng-ui-src-lib-components-card-data-view.mjs",
165
- "esm": "./esm2022/src/lib/components/card-data-view/verben-ng-ui-src-lib-components-card-data-view.mjs",
166
- "default": "./fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs"
167
- },
168
162
  "./src/lib/components/data-columns": {
169
163
  "types": "./src/lib/components/data-columns/index.d.ts",
170
164
  "esm2022": "./esm2022/src/lib/components/data-columns/verben-ng-ui-src-lib-components-data-columns.mjs",
171
165
  "esm": "./esm2022/src/lib/components/data-columns/verben-ng-ui-src-lib-components-data-columns.mjs",
172
166
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs"
173
167
  },
168
+ "./src/lib/verbena-input": {
169
+ "types": "./src/lib/verbena-input/index.d.ts",
170
+ "esm2022": "./esm2022/src/lib/verbena-input/verben-ng-ui-src-lib-verbena-input.mjs",
171
+ "esm": "./esm2022/src/lib/verbena-input/verben-ng-ui-src-lib-verbena-input.mjs",
172
+ "default": "./fesm2022/verben-ng-ui-src-lib-verbena-input.mjs"
173
+ },
174
+ "./src/lib/components/data-export": {
175
+ "types": "./src/lib/components/data-export/index.d.ts",
176
+ "esm2022": "./esm2022/src/lib/components/data-export/verben-ng-ui-src-lib-components-data-export.mjs",
177
+ "esm": "./esm2022/src/lib/components/data-export/verben-ng-ui-src-lib-components-data-export.mjs",
178
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-data-export.mjs"
179
+ },
174
180
  "./src/lib/components/data-filter": {
175
181
  "types": "./src/lib/components/data-filter/index.d.ts",
176
182
  "esm2022": "./esm2022/src/lib/components/data-filter/verben-ng-ui-src-lib-components-data-filter.mjs",
177
183
  "esm": "./esm2022/src/lib/components/data-filter/verben-ng-ui-src-lib-components-data-filter.mjs",
178
184
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs"
179
185
  },
180
- "./src/lib/components/data-extend": {
181
- "types": "./src/lib/components/data-extend/index.d.ts",
182
- "esm2022": "./esm2022/src/lib/components/data-extend/verben-ng-ui-src-lib-components-data-extend.mjs",
183
- "esm": "./esm2022/src/lib/components/data-extend/verben-ng-ui-src-lib-components-data-extend.mjs",
184
- "default": "./fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs"
185
- },
186
- "./src/lib/components/data-sort": {
187
- "types": "./src/lib/components/data-sort/index.d.ts",
188
- "esm2022": "./esm2022/src/lib/components/data-sort/verben-ng-ui-src-lib-components-data-sort.mjs",
189
- "esm": "./esm2022/src/lib/components/data-sort/verben-ng-ui-src-lib-components-data-sort.mjs",
190
- "default": "./fesm2022/verben-ng-ui-src-lib-components-data-sort.mjs"
191
- },
192
186
  "./src/lib/components/data-table": {
193
187
  "types": "./src/lib/components/data-table/index.d.ts",
194
188
  "esm2022": "./esm2022/src/lib/components/data-table/verben-ng-ui-src-lib-components-data-table.mjs",
195
189
  "esm": "./esm2022/src/lib/components/data-table/verben-ng-ui-src-lib-components-data-table.mjs",
196
190
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-table.mjs"
197
191
  },
198
- "./src/lib/components/data-import": {
199
- "types": "./src/lib/components/data-import/index.d.ts",
200
- "esm2022": "./esm2022/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.mjs",
201
- "esm": "./esm2022/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.mjs",
202
- "default": "./fesm2022/verben-ng-ui-src-lib-components-data-import.mjs"
192
+ "./src/lib/components/data-sort": {
193
+ "types": "./src/lib/components/data-sort/index.d.ts",
194
+ "esm2022": "./esm2022/src/lib/components/data-sort/verben-ng-ui-src-lib-components-data-sort.mjs",
195
+ "esm": "./esm2022/src/lib/components/data-sort/verben-ng-ui-src-lib-components-data-sort.mjs",
196
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-data-sort.mjs"
203
197
  },
204
198
  "./src/lib/components/data-view": {
205
199
  "types": "./src/lib/components/data-view/index.d.ts",
@@ -213,12 +207,6 @@
213
207
  "esm": "./esm2022/src/lib/components/data-xport/verben-ng-ui-src-lib-components-data-xport.mjs",
214
208
  "default": "./fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs"
215
209
  },
216
- "./src/lib/components/data-export": {
217
- "types": "./src/lib/components/data-export/index.d.ts",
218
- "esm2022": "./esm2022/src/lib/components/data-export/verben-ng-ui-src-lib-components-data-export.mjs",
219
- "esm": "./esm2022/src/lib/components/data-export/verben-ng-ui-src-lib-components-data-export.mjs",
220
- "default": "./fesm2022/verben-ng-ui-src-lib-components-data-export.mjs"
221
- },
222
210
  "./src/lib/components/date-picker": {
223
211
  "types": "./src/lib/components/date-picker/index.d.ts",
224
212
  "esm2022": "./esm2022/src/lib/components/date-picker/verben-ng-ui-src-lib-components-date-picker.mjs",
@@ -231,6 +219,12 @@
231
219
  "esm": "./esm2022/src/lib/components/drop-down/verben-ng-ui-src-lib-components-drop-down.mjs",
232
220
  "default": "./fesm2022/verben-ng-ui-src-lib-components-drop-down.mjs"
233
221
  },
222
+ "./src/lib/components/data-import": {
223
+ "types": "./src/lib/components/data-import/index.d.ts",
224
+ "esm2022": "./esm2022/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.mjs",
225
+ "esm": "./esm2022/src/lib/components/data-import/verben-ng-ui-src-lib-components-data-import.mjs",
226
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-data-import.mjs"
227
+ },
234
228
  "./src/lib/components/icons": {
235
229
  "types": "./src/lib/components/icons/index.d.ts",
236
230
  "esm2022": "./esm2022/src/lib/components/icons/verben-ng-ui-src-lib-components-icons.mjs",
@@ -249,11 +243,11 @@
249
243
  "esm": "./esm2022/src/lib/components/notification/verben-ng-ui-src-lib-components-notification.mjs",
250
244
  "default": "./fesm2022/verben-ng-ui-src-lib-components-notification.mjs"
251
245
  },
252
- "./src/lib/components/number-input": {
253
- "types": "./src/lib/components/number-input/index.d.ts",
254
- "esm2022": "./esm2022/src/lib/components/number-input/verben-ng-ui-src-lib-components-number-input.mjs",
255
- "esm": "./esm2022/src/lib/components/number-input/verben-ng-ui-src-lib-components-number-input.mjs",
256
- "default": "./fesm2022/verben-ng-ui-src-lib-components-number-input.mjs"
246
+ "./src/lib/components/data-extend": {
247
+ "types": "./src/lib/components/data-extend/index.d.ts",
248
+ "esm2022": "./esm2022/src/lib/components/data-extend/verben-ng-ui-src-lib-components-data-extend.mjs",
249
+ "esm": "./esm2022/src/lib/components/data-extend/verben-ng-ui-src-lib-components-data-extend.mjs",
250
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs"
257
251
  },
258
252
  "./src/lib/components/pop-up": {
259
253
  "types": "./src/lib/components/pop-up/index.d.ts",
@@ -261,23 +255,23 @@
261
255
  "esm": "./esm2022/src/lib/components/pop-up/verben-ng-ui-src-lib-components-pop-up.mjs",
262
256
  "default": "./fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs"
263
257
  },
258
+ "./src/lib/components/sort-table": {
259
+ "types": "./src/lib/components/sort-table/index.d.ts",
260
+ "esm2022": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
261
+ "esm": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
262
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs"
263
+ },
264
264
  "./src/lib/components/shared": {
265
265
  "types": "./src/lib/components/shared/index.d.ts",
266
266
  "esm2022": "./esm2022/src/lib/components/shared/verben-ng-ui-src-lib-components-shared.mjs",
267
267
  "esm": "./esm2022/src/lib/components/shared/verben-ng-ui-src-lib-components-shared.mjs",
268
268
  "default": "./fesm2022/verben-ng-ui-src-lib-components-shared.mjs"
269
269
  },
270
- "./src/lib/components/svg": {
271
- "types": "./src/lib/components/svg/index.d.ts",
272
- "esm2022": "./esm2022/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.mjs",
273
- "esm": "./esm2022/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.mjs",
274
- "default": "./fesm2022/verben-ng-ui-src-lib-components-svg.mjs"
275
- },
276
- "./src/lib/components/sort-table": {
277
- "types": "./src/lib/components/sort-table/index.d.ts",
278
- "esm2022": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
279
- "esm": "./esm2022/src/lib/components/sort-table/verben-ng-ui-src-lib-components-sort-table.mjs",
280
- "default": "./fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs"
270
+ "./src/lib/components/number-input": {
271
+ "types": "./src/lib/components/number-input/index.d.ts",
272
+ "esm2022": "./esm2022/src/lib/components/number-input/verben-ng-ui-src-lib-components-number-input.mjs",
273
+ "esm": "./esm2022/src/lib/components/number-input/verben-ng-ui-src-lib-components-number-input.mjs",
274
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-number-input.mjs"
281
275
  },
282
276
  "./src/lib/components/tooltip": {
283
277
  "types": "./src/lib/components/tooltip/index.d.ts",
@@ -291,23 +285,23 @@
291
285
  "esm": "./esm2022/src/lib/components/table-filter/verben-ng-ui-src-lib-components-table-filter.mjs",
292
286
  "default": "./fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs"
293
287
  },
288
+ "./src/lib/components/svg": {
289
+ "types": "./src/lib/components/svg/index.d.ts",
290
+ "esm2022": "./esm2022/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.mjs",
291
+ "esm": "./esm2022/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.mjs",
292
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-svg.mjs"
293
+ },
294
294
  "./src/lib/components/verben-dialogue": {
295
295
  "types": "./src/lib/components/verben-dialogue/index.d.ts",
296
296
  "esm2022": "./esm2022/src/lib/components/verben-dialogue/verben-ng-ui-src-lib-components-verben-dialogue.mjs",
297
297
  "esm": "./esm2022/src/lib/components/verben-dialogue/verben-ng-ui-src-lib-components-verben-dialogue.mjs",
298
298
  "default": "./fesm2022/verben-ng-ui-src-lib-components-verben-dialogue.mjs"
299
299
  },
300
- "./src/lib/components/verben-mail": {
301
- "types": "./src/lib/components/verben-mail/index.d.ts",
302
- "esm2022": "./esm2022/src/lib/components/verben-mail/verben-ng-ui-src-lib-components-verben-mail.mjs",
303
- "esm": "./esm2022/src/lib/components/verben-mail/verben-ng-ui-src-lib-components-verben-mail.mjs",
304
- "default": "./fesm2022/verben-ng-ui-src-lib-components-verben-mail.mjs"
305
- },
306
- "./src/lib/components/visible-column": {
307
- "types": "./src/lib/components/visible-column/index.d.ts",
308
- "esm2022": "./esm2022/src/lib/components/visible-column/verben-ng-ui-src-lib-components-visible-column.mjs",
309
- "esm": "./esm2022/src/lib/components/visible-column/verben-ng-ui-src-lib-components-visible-column.mjs",
310
- "default": "./fesm2022/verben-ng-ui-src-lib-components-visible-column.mjs"
300
+ "./src/lib/components/verbena-icon": {
301
+ "types": "./src/lib/components/verbena-icon/index.d.ts",
302
+ "esm2022": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
303
+ "esm": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
304
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-icon.mjs"
311
305
  },
312
306
  "./src/lib/components/verbena-tab": {
313
307
  "types": "./src/lib/components/verbena-tab/index.d.ts",
@@ -315,17 +309,23 @@
315
309
  "esm": "./esm2022/src/lib/components/verbena-tab/verben-ng-ui-src-lib-components-verbena-tab.mjs",
316
310
  "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-tab.mjs"
317
311
  },
312
+ "./src/lib/components/verben-mail": {
313
+ "types": "./src/lib/components/verben-mail/index.d.ts",
314
+ "esm2022": "./esm2022/src/lib/components/verben-mail/verben-ng-ui-src-lib-components-verben-mail.mjs",
315
+ "esm": "./esm2022/src/lib/components/verben-mail/verben-ng-ui-src-lib-components-verben-mail.mjs",
316
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-verben-mail.mjs"
317
+ },
318
318
  "./src/lib/components/verben-time-picker": {
319
319
  "types": "./src/lib/components/verben-time-picker/index.d.ts",
320
320
  "esm2022": "./esm2022/src/lib/components/verben-time-picker/verben-ng-ui-src-lib-components-verben-time-picker.mjs",
321
321
  "esm": "./esm2022/src/lib/components/verben-time-picker/verben-ng-ui-src-lib-components-verben-time-picker.mjs",
322
322
  "default": "./fesm2022/verben-ng-ui-src-lib-components-verben-time-picker.mjs"
323
323
  },
324
- "./src/lib/components/verbena-icon": {
325
- "types": "./src/lib/components/verbena-icon/index.d.ts",
326
- "esm2022": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
327
- "esm": "./esm2022/src/lib/components/verbena-icon/verben-ng-ui-src-lib-components-verbena-icon.mjs",
328
- "default": "./fesm2022/verben-ng-ui-src-lib-components-verbena-icon.mjs"
324
+ "./src/lib/components/visible-column": {
325
+ "types": "./src/lib/components/visible-column/index.d.ts",
326
+ "esm2022": "./esm2022/src/lib/components/visible-column/verben-ng-ui-src-lib-components-visible-column.mjs",
327
+ "esm": "./esm2022/src/lib/components/visible-column/verben-ng-ui-src-lib-components-visible-column.mjs",
328
+ "default": "./fesm2022/verben-ng-ui-src-lib-components-visible-column.mjs"
329
329
  }
330
330
  }
331
331
  }